Приходный ордер на товары / Модуль объекта

файл
#Если НЕ МобильныйАвтономныйСервер Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Перем ИмяПоля;
	Перем ДокументОснование;
	Перем ДатаПоступления;
	ТекстСообщенияОНекорректномСоздании = НСтр("ru = 'Приходный ордер на товары нужно вводить из формы ""Приемка"".'");
	
	Если ДанныеЗаполнения = "АвтоТест" Тогда
		Возврат;
	КонецЕсли;	
		
	Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
		
		ДанныеЗаполнения.Свойство("Склад",                      Склад);
		ДанныеЗаполнения.Свойство("Помещение",                  Помещение);
		ДанныеЗаполнения.Свойство("Распоряжение",               Распоряжение);
		ДанныеЗаполнения.Свойство("ДатаПоступления",            ДатаПоступления);
		ДанныеЗаполнения.Свойство("ЗонаПриемки",                ЗонаПриемки);
		ДанныеЗаполнения.Свойство("СкладскаяОперация",          СкладскаяОперация);
		ДанныеЗаполнения.Свойство("Отправитель",                Отправитель);
		ДанныеЗаполнения.Свойство("ДатаВходящегоДокумента",     ДатаВходящегоДокумента);
		ДанныеЗаполнения.Свойство("НомерВходящегоДокумента",    НомерВходящегоДокумента);
		ДанныеЗаполнения.Свойство("ХозяйственнаяОперация",      ХозяйственнаяОперация);
		
		Если СкладскаяОперация <> Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваров
			И ЗначениеЗаполнено(Распоряжение) Тогда
			СкладскаяОперация = СкладыКлиентСервер.СкладскаяОперацияПриемкиПоХозяйственнойОперации(ХозяйственнаяОперация);
			УстановитьПривилегированныйРежим(Истина);
			Если СкладскаяОперация = Перечисления.СкладскиеОперации.ПриемкаПоПеремещению
				Или СкладскаяОперация = Перечисления.СкладскиеОперации.ПриемкаПродукцииИзПроизводства Тогда
				ЗаполнитьТоварыПоТоварамКПоступлению("НоменклатураКоличество", ДатаПоступления);
			Иначе
				ЗаполнитьТоварыПоТоварамКПоступлению("Номенклатура", ДатаПоступления);
			КонецЕсли;
			
			ПриходныйОрдерНаТоварыЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
			
			Документы.ПриходныйОрдерНаТовары.ЗаполнитьСерииПоРаспоряжению(ЭтотОбъект, Ложь);
			УстановитьПривилегированныйРежим(Ложь);
		ИначеЕсли СкладскаяОперация <> Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваров Тогда
			ВызватьИсключение ТекстСообщенияОНекорректномСоздании;
		КонецЕсли;
		
	КонецЕсли;
	
	ИнициализироватьДокумент(ДанныеЗаполнения);
	
КонецПроцедуры

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
	
	ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
	
	НоменклатураСервер.ОчиститьНеиспользуемыеСерии(ЭтотОбъект, 
		НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ПриходныйОрдерНаТовары));
	
	Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
		ПроверитьОрдерныйСклад(Отказ);
	КонецЕсли;
	
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ПриКопировании(ОбъектКопирования)

	СостояниеЗаполненияМногооборотнойТары = Перечисления.СостоянияЗаполненияМногооборотнойТары.ПустаяСсылка();
	ИнициализироватьДокумент();

КонецПроцедуры

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

	Если Не СкладыСервер.ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач(Склад, Дата)
		И СкладскаяОперация = Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваров Тогда		
		ТекстСообщения = НСтр("ru = 'Складская операция ""%ВозвратНепринятых%"" на складе, неордерном при отражении излишков, недостач и порчи, является архивной. Для оприходования товаров рекомендуется использовать документ ""%Оприходование%"".'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ВозвратНепринятых%", Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваров);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Оприходование%", Метаданные.Документы.ОприходованиеИзлишковТоваров.Синоним);
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,,,Отказ);		
	КонецЕсли;
	
	МассивНепроверяемыхРеквизитов = Новый Массив;
	
	Если Не СкладыСервер.ИспользоватьСкладскиеПомещения(Склад,Дата) Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Помещение");
	КонецЕсли;
	
	АдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(Склад, Помещение, Дата);
	ИспользоватьУпаковочныеЛисты = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковочныеЛисты");
	
	Если Не АдресноеХранение Тогда
		МассивНепроверяемыхРеквизитов.Добавить("ЗонаПриемки");
	ИначеЕсли Не ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Товары.Упаковка");
		ТекстСообщения = НСтр("ru='В настройках программы не включено использование упаковок номенклатуры, 
		|поэтому нельзя оформить документ по складу с адресным хранением остатков. Обратитесь к администратору'");
		
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,,,Отказ);
	КонецЕсли;	
	
	Если (Не АдресноеХранение
		Или Статус = Перечисления.СтатусыПриходныхОрдеров.КПоступлению
		Или Статус = Перечисления.СтатусыПриходныхОрдеров.ВРаботе
		Или Статус = Перечисления.СтатусыПриходныхОрдеров.ТребуетсяОбработка)Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Товары.Упаковка");
	Иначе
		ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияУпаковок();
		ПараметрыПроверки.ВыводитьНомераСтрок = Не ИспользоватьУпаковочныеЛисты;
		ПараметрыПроверки.ОтборПроверяемыхСтрок.Вставить("ЭтоУпаковочныйЛист", Ложь);
		НоменклатураСервер.ПроверитьЗаполнениеУпаковок(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ,ПараметрыПроверки);
		
		ПараметрыПроверкиУказанияМногооборотнойТары = МногооборотнаяТараСервер.ПараметрыПроверкиУказанияМногооборотнойТары();
		ПараметрыПроверкиУказанияМногооборотнойТары.ЕстьЯчейки = Ложь;
		МногооборотнаяТараСервер.ПроверитьУказаниеМногооборотнойТары(ЭтотОбъект, ПараметрыПроверкиУказанияМногооборотнойТары, Отказ);
	КонецЕсли;
	
	Если Статус = Перечисления.СтатусыПриходныхОрдеров.КПоступлению 
		Или Статус = Перечисления.СтатусыПриходныхОрдеров.ВРаботе
		Или Статус = Перечисления.СтатусыПриходныхОрдеров.ТребуетсяОбработка Тогда
	
		МассивНепроверяемыхРеквизитов.Добавить("Товары");
		МассивНепроверяемыхРеквизитов.Добавить("Товары.Номенклатура");
		МассивНепроверяемыхРеквизитов.Добавить("Товары.КоличествоУпаковок");
		МассивНепроверяемыхРеквизитов.Добавить("Товары.Количество");
		
		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ
		|	Товары.НомерСтроки
		|ПОМЕСТИТЬ Товары
		|ИЗ
		|	&Товары КАК Товары
		|ГДЕ
		|	Товары.Штрихкод = """"
		|	И Товары.УпаковочныйЛистРодитель = ЗНАЧЕНИЕ(Документ.УпаковочныйЛист.ПустаяСсылка)
		|	И Товары.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
		|	И Товары.УпаковочныйЛист = ЗНАЧЕНИЕ(Документ.УпаковочныйЛист.ПустаяСсылка)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	НомерСтроки
		|ИЗ
		|	Товары";
		
		Запрос.УстановитьПараметр("Товары",
			ЭтотОбъект.Товары.Выгрузить(,"НомерСтроки, Штрихкод, Номенклатура, УпаковочныйЛист, УпаковочныйЛистРодитель"));
		
		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			ТекстОшибки = НСтр("ru='Не заполнена колонка ""Номенклатура"" в списке ""Товары"".'");
			Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", Выборка.НомерСтроки, "Номенклатура");
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , Поле, "Объект", Отказ);
		КонецЦикла;
		
	КонецЕсли;
	
	Если СкладскаяОперация = Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваров
		Или СкладскаяОперация = Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваровУстарел Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Распоряжение");
		МассивНепроверяемыхРеквизитов.Добавить("ХозяйственнаяОперация");
	ИначеЕсли СкладскаяОперация = Перечисления.СкладскиеОперации.ПриемкаПоПрочемуОприходованию Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Отправитель");
	КонецЕсли;
	
	ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияХарактеристик();
	ПараметрыПроверки.ВыводитьНомераСтрок = Не ИспользоватьУпаковочныеЛисты;
	НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ,ПараметрыПроверки);
	
	НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,
												НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ПриходныйОрдерНаТовары),
												Отказ,
												МассивНепроверяемыхРеквизитов);
	Если Не Статус = Перечисления.СтатусыПриходныхОрдеров.КПоступлению
		И Не Статус = Перечисления.СтатусыПриходныхОрдеров.ТребуетсяОбработка Тогда
		УпаковочныеЛистыСервер.ПроверитьЗаполнениеТЧСУпаковочнымиЛистами(ЭтотОбъект, ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов, Отказ);
	КонецЕсли;
	
	ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
	
	ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияКоличества();
	ПараметрыПроверки.ПроверитьВозможностьОкругления = Ложь;
	ПараметрыПроверки.ПроверитьКомплектностьТоварныхМест = Истина;
	НоменклатураСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ, ПараметрыПроверки);
		
	СкладыСервер.ПроверитьОрдерностьСклада(Склад, Дата, "ПриПоступлении", Отказ);
	
	// ++ Локализация
	
	// контроль заполнения марок
	
	Если Не Отказ Тогда
		ПриходныйОрдерНаТоварыЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
	КонецЕсли;
	
	// -- Локализация
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область ИнициализацияИЗаполнение

Процедура ЗаполнитьТоварыПоТоварамКПоступлению(ВидЗаполнения, ДатаПоступления) Экспорт
	
	ИспользоватьАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(Склад, Помещение, Дата);
	
	Если СкладскаяОперация = Перечисления.СкладскиеОперации.ПриемкаПоПеремещению Тогда
		
		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ
		|	ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
		|	ТоварыКПоступлению.Характеристика	КАК Характеристика,
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыКПоступлению.Назначение)	КАК Назначение
		|ПОМЕСТИТЬ НазначенияТоваров
		|ИЗ
		|	РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
		|ГДЕ
		|	ТоварыКПоступлению.Склад = &Склад
		|	И ТоварыКПоступлению.Отправитель = &Отправитель
		|	И ТоварыКПоступлению.ДокументПоступления = &Распоряжение
		|	И ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|
		|СГРУППИРОВАТЬ ПО
		|	ТоварыКПоступлению.Характеристика,
		|	ТоварыКПоступлению.Номенклатура
		|ИМЕЮЩИЕ
		|	СУММА(ТоварыКПоступлению.КОформлениюОрдеров) > 0
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	НазначенияТоваров.Номенклатура		КАК Номенклатура,
		|	НазначенияТоваров.Характеристика	КАК Характеристика,
		|	НазначенияТоваров.Назначение		КАК Назначение
		|ИЗ
		|	НазначенияТоваров КАК НазначенияТоваров
		|ГДЕ
		|	НазначенияТоваров.Назначение > 1";
		
		Запрос.УстановитьПараметр("Распоряжение",	Распоряжение);
		Запрос.УстановитьПараметр("Отправитель",	Отправитель);
		Запрос.УстановитьПараметр("Склад",			Склад);
		
		ОдноНазначениеПоТовару = Запрос.Выполнить().Пустой();
		
		Если ОдноНазначениеПоТовару
			И СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Отправитель, ДатаПоступления)
			И Не Константы.ВариантПриемкиТоваров.Получить() = Перечисления.ВариантыПриемкиТоваров.РазделенаТолькоПоНакладным Тогда
			
			Запрос = Новый Запрос;
			
			ТекстЗапроса =
			"ВЫБРАТЬ
			|	ТоварыКПоступлению.Номенклатура			КАК Номенклатура,
			|	ТоварыКПоступлению.Характеристика		КАК Характеристика,
			|	ТоварыКПоступлению.Назначение			КАК Назначение,
			|	СУММА(ТоварыКПоступлению.Количество)	КАК Количество
			|ПОМЕСТИТЬ ОформляемыеТовары
			|ИЗ
			|	(ВЫБРАТЬ
			|		ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
			|		ТоварыКПоступлению.Характеристика	КАК Характеристика,
			|		ТоварыКПоступлению.Назначение		КАК Назначение,
			|		ТоварыКПоступлению.КОформлениюОрдеровОстаток - ТоварыКПоступлению.ПринимаетсяОстаток КАК Количество
			|	ИЗ
			|		РегистрНакопления.ТоварыКПоступлению.Остатки(
			|				&ДатаОстатков,
			|				ДокументПоступления = &Распоряжение
			|				И Склад = &Склад
			|				И Отправитель = &Отправитель) КАК ТоварыКПоступлению
			|	
			|	ОБЪЕДИНИТЬ ВСЕ
			|	
			|	ВЫБРАТЬ
			|		ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
			|		ТоварыКПоступлению.Характеристика	КАК Характеристика,
			|		ТоварыКПоступлению.Назначение		КАК Назначение,
			|		ВЫБОР
			|			КОГДА ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
			|				-ТоварыКПоступлению.КОформлениюОрдеров
			|			ИНАЧЕ ТоварыКПоступлению.КОформлениюОрдеров
			|		КОНЕЦ - ВЫБОР
			|			КОГДА ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
			|				- ТоварыКПоступлению.Принимается
			|			ИНАЧЕ ТоварыКПоступлению.Принимается
			|		КОНЕЦ								КАК Количество
			|	ИЗ
			|		РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
			|	ГДЕ
			|		ТоварыКПоступлению.Активность
			|		И ТоварыКПоступлению.Склад = &Склад
			|		И ТоварыКПоступлению.Регистратор = &Ссылка
			|		И ТоварыКПоступлению.ДокументПоступления = &Распоряжение) КАК ТоварыКПоступлению
			|
			|СГРУППИРОВАТЬ ПО
			|	ТоварыКПоступлению.Номенклатура,
			|	ТоварыКПоступлению.Характеристика,
			|	ТоварыКПоступлению.Назначение
			|
			|ИМЕЮЩИЕ
			|	СУММА(ТоварыКПоступлению.Количество) > 0
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Номенклатура,
			|	Характеристика
			|;
			|
			|//////////////////////////////////////////////////////////////////////////////// 1
			|ВЫБРАТЬ
			|	ТоварыРаспоряжения.Ссылка				КАК Ссылка,
			|	ТоварыРаспоряжения.Номенклатура			КАК Номенклатура,
			|	ТоварыРаспоряжения.Характеристика		КАК Характеристика,
			|	СУММА(ТоварыРаспоряжения.Количество)	КАК Количество
			|ПОМЕСТИТЬ ОтгружаемыеТоварыПоРаспоряжениям
			|ИЗ
			|	Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям КАК ТоварыРаспоряжения
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходныйОрдерНаТовары КАК РасходныйОрдер
			|		ПО ТоварыРаспоряжения.Ссылка = РасходныйОрдер.Ссылка
			|
			|ГДЕ
			|	РасходныйОрдер.Проведен
			|	И РасходныйОрдер.Склад = &Отправитель
			|	И ТоварыРаспоряжения.Распоряжение = &Распоряжение
			|	И РасходныйОрдер.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.Отгружен)
			|
			|СГРУППИРОВАТЬ ПО
			|	ТоварыРаспоряжения.Ссылка,
			|	ТоварыРаспоряжения.Номенклатура,
			|	ТоварыРаспоряжения.Характеристика
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Ссылка,
			|	Номенклатура,
			|	Характеристика
			|;
			|
			|//////////////////////////////////////////////////////////////////////////////// 2
			|ВЫБРАТЬ
			|	ОтгружаемыеТовары.Номенклатура				КАК Номенклатура,
			|	ОтгружаемыеТовары.Характеристика			КАК Характеристика,
			|	ОтгружаемыеТовары.Упаковка					КАК Упаковка,
			|	СУММА(ОтгружаемыеТовары.Количество)			КАК Количество
			|ПОМЕСТИТЬ ОтгружаемыеТовары
			|ИЗ
			|	Документ.РасходныйОрдерНаТовары.ОтгружаемыеТовары КАК ОтгружаемыеТовары
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОтгружаемыеТоварыПоРаспоряжениям КАК ТоварыПоРаспоряжениям
			|		ПО ОтгружаемыеТовары.Ссылка = ТоварыПоРаспоряжениям.Ссылка
			|			И ОтгружаемыеТовары.Номенклатура = ТоварыПоРаспоряжениям.Номенклатура
			|			И ОтгружаемыеТовары.Характеристика = ТоварыПоРаспоряжениям.Характеристика
			|
			|ГДЕ
			|	НЕ ОтгружаемыеТовары.ЭтоУпаковочныйЛист
			|	И ОтгружаемыеТовары.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.Отгрузить)
			|
			|СГРУППИРОВАТЬ ПО
			|	ОтгружаемыеТовары.Номенклатура,
			|	ОтгружаемыеТовары.Характеристика,
			|	ОтгружаемыеТовары.Упаковка
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Номенклатура,
			|	Характеристика
			|;
			|
			|//////////////////////////////////////////////////////////////////////////////// 3
			|ВЫБРАТЬ
			|	ОстатокТоваров.Номенклатура					КАК Номенклатура,
			|	ОстатокТоваров.Характеристика				КАК Характеристика,
			|	ОстатокТоваров.Упаковка						КАК Упаковка,
			|	СУММА(ОстатокТоваров.Количество)			КАК Количество
			|ПОМЕСТИТЬ ОстатокОтгружаемыхТоваров
			|ИЗ
			|	(ВЫБРАТЬ
			|		ОтгружаемыеТовары.Номенклатура		КАК Номенклатура,
			|		ОтгружаемыеТовары.Характеристика	КАК Характеристика,
			|		ОтгружаемыеТовары.Упаковка			КАК Упаковка,
			|		ТоварыПоРаспоряжениям.Количество	КАК Количество
			|	ИЗ
			|		ОтгружаемыеТовары КАК ОтгружаемыеТовары
			|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОтгружаемыеТоварыПоРаспоряжениям КАК ТоварыПоРаспоряжениям
			|			ПО ОтгружаемыеТовары.Номенклатура = ТоварыПоРаспоряжениям.Номенклатура
			|				И ОтгружаемыеТовары.Характеристика = ТоварыПоРаспоряжениям.Характеристика
			|	
			|	ОБЪЕДИНИТЬ ВСЕ
			|	
			|	ВЫБРАТЬ
			|		ТоварыКПоступлению.Номенклатура			КАК Номенклатура,
			|		ТоварыКПоступлению.Характеристика		КАК Характеристика,
			|		ТоварыКПоступлению.Упаковка				КАК Упаковка,
			|		-ТоварыКПоступлению.Количество			КАК Количество
			|	ИЗ
			|		Документ.ПриходныйОрдерНаТовары.Товары КАК ТоварыКПоступлению
			|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдер
			|			ПО ТоварыКПоступлению.Ссылка = ПриходныйОрдер.Ссылка
			|	
			|	ГДЕ
			|		ПриходныйОрдер.Проведен
			|		И ПриходныйОрдер.Ссылка <> &Ссылка
			|		И ПриходныйОрдер.Склад = &Отправитель
			|		И НЕ ТоварыКПоступлению.ЭтоУпаковочныйЛист
			|		И ПриходныйОрдер.Распоряжение = &Распоряжение) КАК ОстатокТоваров
			|
			|СГРУППИРОВАТЬ ПО
			|	ОстатокТоваров.Номенклатура,
			|	ОстатокТоваров.Характеристика,
			|	ОстатокТоваров.Упаковка
			|
			|ИМЕЮЩИЕ
			|	СУММА(ОстатокТоваров.Количество) > 0
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Номенклатура,
			|	Характеристика,
			|	Упаковка
			|;
			|
			|//////////////////////////////////////////////////////////////////////////////// 4
			|ВЫБРАТЬ
			|	ОстатокТоваров.Номенклатура			КАК Номенклатура,
			|	ОстатокТоваров.Характеристика		КАК Характеристика,
			|	МИНИМУМ(ОстатокТоваров.Количество)	КАК Количество
			|ПОМЕСТИТЬ ОстатокОтгружаемыхТоваровПоТоварнымМестам
			|ИЗ
			|	ОстатокОтгружаемыхТоваров КАК ОстатокТоваров
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
			|		ПО ОстатокТоваров.Упаковка = Упаковки.Ссылка
			|
			|ГДЕ
			|	НЕ Упаковки.ПометкаУдаления
			|	И Упаковки.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
			|
			|СГРУППИРОВАТЬ ПО
			|	ОстатокТоваров.Номенклатура,
			|	ОстатокТоваров.Характеристика
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Номенклатура,
			|	Характеристика
			|;
			|
			|//////////////////////////////////////////////////////////////////////////////// 5
			|ВЫБРАТЬ
			|	ОстатокТоваров.Номенклатура		КАК Номенклатура,
			|	ОстатокТоваров.Характеристика	КАК Характеристика,
			|	СУММА(ВЫБОР
			|		КОГДА ОстатокТоваров.Количество >= ТоварыКПоступлению.Количество
			|			ТОГДА ТоварыКПоступлению.Количество
			|		ИНАЧЕ ОстатокТоваров.Количество
			|	КОНЕЦ)							КАК Количество
			|ПОМЕСТИТЬ ПотребностьТоваровПоТоварнымМестам
			|ИЗ
			|	ОстатокОтгружаемыхТоваровПоТоварнымМестам КАК ОстатокТоваров
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОформляемыеТовары КАК ТоварыКПоступлению
			|		ПО ОстатокТоваров.Номенклатура = ТоварыКПоступлению.Номенклатура
			|			И ОстатокТоваров.Характеристика = ТоварыКПоступлению.Характеристика
			|
			|СГРУППИРОВАТЬ ПО
			|	ОстатокТоваров.Номенклатура,
			|	ОстатокТоваров.Характеристика
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Номенклатура,
			|	Характеристика
			|;
			|
			|//////////////////////////////////////////////////////////////////////////////// 6
			|ВЫБРАТЬ
			|	ОстатокТоваров.Номенклатура		КАК Номенклатура,
			|	ОстатокТоваров.Характеристика	КАК Характеристика,
			|	ОстатокТоваров.Упаковка			КАК Упаковка,
			|	СУММА(ВЫБОР
			|		КОГДА ОстатокТоваров.Количество >= ТоварыКПоступлению.Количество
			|			ТОГДА ТоварыКПоступлению.Количество
			|		ИНАЧЕ ОстатокТоваров.Количество
			|	КОНЕЦ)							КАК Количество
			|ПОМЕСТИТЬ ПотребностьТоваровБезТоварныхМест
			|ИЗ
			|	ОстатокОтгружаемыхТоваров КАК ОстатокТоваров
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОформляемыеТовары КАК ТоварыКПоступлению
			|		ПО ОстатокТоваров.Номенклатура = ТоварыКПоступлению.Номенклатура
			|			И ОстатокТоваров.Характеристика = ТоварыКПоступлению.Характеристика
			|
			|ГДЕ
			|	ЕСТЬNULL(ОстатокТоваров.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
			|
			|СГРУППИРОВАТЬ ПО
			|	ОстатокТоваров.Номенклатура,
			|	ОстатокТоваров.Характеристика,
			|	ОстатокТоваров.Упаковка
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Номенклатура,
			|	Характеристика,
			|	Упаковка
			|;
			|
			|//////////////////////////////////////////////////////////////////////////////// 7
			|ВЫБРАТЬ
			|	ПотребностьТоваров.Номенклатура		КАК Номенклатура,
			|	ПотребностьТоваров.Характеристика	КАК Характеристика,
			|	ОстатокТоваров.Упаковка				КАК Упаковка,
			|	ПотребностьТоваров.Количество		КАК Количество,
			|	0									КАК ПриоритетУпаковки
			|ПОМЕСТИТЬ ПотребностьТоваров
			|ИЗ
			|	ПотребностьТоваровПоТоварнымМестам КАК ПотребностьТоваров
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОстатокОтгружаемыхТоваров КАК ОстатокТоваров
			|		ПО ПотребностьТоваров.Номенклатура = ОстатокТоваров.Номенклатура
			|			И ПотребностьТоваров.Характеристика = ОстатокТоваров.Характеристика
			|
			|ГДЕ
			|	ЕСТЬNULL(ОстатокТоваров.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
			|
			|ОБЪЕДИНИТЬ ВСЕ
			|
			|ВЫБРАТЬ
			|	ПотребностьТоваров.Номенклатура			КАК Номенклатура,
			|	ПотребностьТоваров.Характеристика		КАК Характеристика,
			|	ПотребностьТоваров.Упаковка				КАК Упаковка,
			|	ПотребностьТоваров.Количество			КАК Количество,
			|	1										КАК ПриоритетУпаковки
			|ИЗ
			|	ПотребностьТоваровБезТоварныхМест КАК ПотребностьТоваров
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Номенклатура,
			|	Характеристика,
			|	Упаковка";
			
			Если ВидЗаполнения = "Номенклатура"
				Или ВидЗаполнения = "НоменклатураКоличество" Тогда
				
				ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() + "
				|ВЫБРАТЬ
				|	0										КАК НомерСтроки,
				|	ПотребностьТоваров.Номенклатура			КАК Номенклатура,
				|	ПотребностьТоваров.Характеристика		КАК Характеристика,
				|	ПотребностьТоваров.Упаковка				КАК Упаковка,
				|	ПотребностьТоваров.ПриоритетУпаковки	КАК ПриоритетУпаковки,
				|	ВЫБОР
				|		КОГДА &ЗаполнятьКоличество
				|			ТОГДА ПотребностьТоваров.Количество
				|		ИНАЧЕ 0
				|	КОНЕЦ									КАК Количество
				|ПОМЕСТИТЬ ТаблицаТовары
				|ИЗ
				|	ПотребностьТоваров КАК ПотребностьТоваров
				|
				|ИНДЕКСИРОВАТЬ ПО
				|	Номенклатура,
				|	Характеристика,
				|	Упаковка";
				
			ИначеЕсли ВидЗаполнения = "Количество" Тогда
				
				ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() + "
				|ВЫБРАТЬ
				|	ТаблицаТоваров.НомерСтроки		КАК НомерСтроки,
				|	ТаблицаТоваров.Номенклатура		КАК Номенклатура,
				|	ТаблицаТоваров.Характеристика	КАК Характеристика
				|ПОМЕСТИТЬ ТаблицаНомеклатурыДляЗапроса
				|ИЗ
				|	&ТаблицаТоваров КАК ТаблицаТоваров
				|
				|ГДЕ
				|	ТаблицаТоваров.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
				|;
				|
				|////////////////////////////////////////////////////////////////////////////////
				|ВЫБРАТЬ
				|	МИНИМУМ(ТаблицаТоваров.НомерСтроки)	КАК НомерСтроки,
				|	ТаблицаТоваров.Номенклатура			КАК Номенклатура,
				|	ТаблицаТоваров.Характеристика		КАК Характеристика
				|ПОМЕСТИТЬ ТаблицаТоваров
				|ИЗ
				|	ТаблицаНомеклатурыДляЗапроса КАК ТаблицаТоваров
				|
				|СГРУППИРОВАТЬ ПО
				|	ТаблицаТоваров.Номенклатура,
				|	ТаблицаТоваров.Характеристика
				|
				|ИНДЕКСИРОВАТЬ ПО
				|	Номенклатура,
				|	Характеристика
				|;
				|
				|////////////////////////////////////////////////////////////////////////////////
				|ВЫБРАТЬ
				|	ТаблицаТоваров.НомерСтроки		КАК НомерСтроки,
				|	ТаблицаТоваров.Номенклатура		КАК Номенклатура,
				|	ТаблицаТоваров.Характеристика	КАК Характеристика,
				|	ЕСТЬNULL(ПотребностьТоваров.Упаковка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК Упаковка,
				|	ЕСТЬNULL(ПотребностьТоваров.Количество, 0) КАК Количество,
				|	ЕСТЬNULL(ПотребностьТоваров.ПриоритетУпаковки, 1) КАК ПриоритетУпаковки
				|ПОМЕСТИТЬ ТаблицаТовары
				|ИЗ
				|	ТаблицаТоваров КАК ТаблицаТоваров
				|		ЛЕВОЕ СОЕДИНЕНИЕ ПотребностьТоваров КАК ПотребностьТоваров
				|		ПО ТаблицаТоваров.Номенклатура = ПотребностьТоваров.Номенклатура
				|			И ТаблицаТоваров.Характеристика = ПотребностьТоваров.Характеристика
				|
				|ИНДЕКСИРОВАТЬ ПО
				|	Номенклатура,
				|	Характеристика";
				
				ВыгружаемыеКолонки = "НомерСтроки, Номенклатура, Характеристика, Назначение";
				
				Запрос.УстановитьПараметр("ТаблицаТоваров", Товары.Выгрузить(, ВыгружаемыеКолонки));
				
			КонецЕсли;
			
			ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() + "
			|ВЫБРАТЬ РАЗЛИЧНЫЕ
			|	ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
			|	ТоварыКПоступлению.Характеристика	КАК Характеристика,
			|	ТоварыКПоступлению.Назначение		КАК Назначение
			|ПОМЕСТИТЬ НазначенияТоваров
			|ИЗ
			|	ОформляемыеТовары КАК ТоварыКПоступлению
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Номенклатура,
			|	Характеристика
			|;
			|
			|////////////////////////////////////////////////////////////////////////////////
			|ВЫБРАТЬ
			|	ТаблицаТовары.НомерСтроки			КАК НомерСтроки,
			|	ТаблицаТовары.Номенклатура			КАК Номенклатура,
			|	ТаблицаТовары.Характеристика		КАК Характеристика,
			|	ЕСТЬNULL(НазначенияТоваров.Назначение, ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК Назначение,
			|	ТаблицаТовары.Упаковка				КАК Упаковка,
			|	ТаблицаТовары.Количество			КАК Количество,
			|	0									КАК КоличествоУпаковок,
			|	ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК КоэффициентУпаковки,
			|	ТаблицаТовары.ПриоритетУпаковки		КАК ПриоритетУпаковки
			|ИЗ
			|	ТаблицаТовары КАК ТаблицаТовары
			|		ЛЕВОЕ СОЕДИНЕНИЕ НазначенияТоваров КАК НазначенияТоваров
			|		ПО ТаблицаТовары.Номенклатура = НазначенияТоваров.Номенклатура
			|			И ТаблицаТовары.Характеристика = НазначенияТоваров.Характеристика
			|
			|ГДЕ
			|	ТаблицаТовары.Количество > 0
			|
			|УПОРЯДОЧИТЬ ПО
			|	ТаблицаТовары.НомерСтроки,
			|	ТаблицаТовары.Номенклатура.Наименование,
			|	ТаблицаТовары.Характеристика.Наименование,
			|	Назначение,
			|	ТаблицаТовары.ПриоритетУпаковки,
			|	ТаблицаТовары.Упаковка.Наименование
			|;
			|
			|////////////////////////////////////////////////////////////////////////////////
			|ВЫБРАТЬ
			|	ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
			|	ТоварыКПоступлению.Характеристика	КАК Характеристика,
			|	ТоварыКПоступлению.Назначение		КАК Назначение,
			|	ТоварыКПоступлению.Количество		КАК Количество
			|ИЗ
			|	ОформляемыеТовары КАК ТоварыКПоступлению
			|
			|УПОРЯДОЧИТЬ ПО
			|	ТоварыКПоступлению.Номенклатура.Наименование,
			|	ТоварыКПоступлению.Характеристика.Наименование,
			|	ТоварыКПоступлению.Назначение";
			
			ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
										"&ТекстЗапросаКоэффициентУпаковки",
										Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
											"ТаблицаТовары.Упаковка",
											"ТаблицаТовары.Номенклатура"));
			
			Запрос.Текст = ТекстЗапроса;
			Запрос.УстановитьПараметр("Ссылка",					Ссылка);
			Запрос.УстановитьПараметр("Распоряжение",			Распоряжение);
			Запрос.УстановитьПараметр("Отправитель",			Отправитель);
			Запрос.УстановитьПараметр("Склад",					Склад);
			Запрос.УстановитьПараметр("ЗаполнятьКоличество",	ВидЗаполнения <> "Номенклатура");
			
			Если ЗначениеЗаполнено(ДатаПоступления) Тогда
				Запрос.УстановитьПараметр("ДатаОстатков", КонецДня(ДатаПоступления));
			Иначе
				Запрос.УстановитьПараметр("ДатаОстатков", ДатаПоступления);
			КонецЕсли;
			
			УстановитьПривилегированныйРежим(Истина);
			Результат = Запрос.ВыполнитьПакет();
			УстановитьПривилегированныйРежим(Ложь);
			
			ТоварыКРаспределению = Результат[Результат.ВГраница() - 1].Выгрузить(); // ТаблицаЗначений
			
			Если ТоварыКРаспределению.Количество() > 0 Тогда
				
				ТаблицаТоваров = ТоварыКРаспределению.СкопироватьКолонки();
				
				ТоварыКРаспределению.Индексы.Добавить("Номенклатура, Характеристика, Назначение");
				
				ОстаткиТоваров = Результат[Результат.ВГраница()].Выгрузить(); // ТаблицаЗначений
				ОстаткиТоваров.Индексы.Добавить("Номенклатура, Характеристика, Назначение");
				
				Для Каждого СтрокаОстатков Из ОстаткиТоваров Цикл
					
					ТекущийПриоритет	= Неопределено;
					КоличествоОстаток	= СтрокаОстатков.Количество;
					
					Отбор = Новый Структура("Номенклатура, Характеристика, Назначение");
					ЗаполнитьЗначенияСвойств(Отбор, СтрокаОстатков);
					
					СтрокиРаспределения = ТоварыКРаспределению.НайтиСтроки(Отбор);
					
					Для Каждого РаспределяемаяСтрока Из СтрокиРаспределения Цикл
						
						Если КоличествоОстаток <= 0 Тогда
							Прервать;
						КонецЕсли;
						
						Если ТекущийПриоритет = Неопределено Тогда
							ТекущийПриоритет = РаспределяемаяСтрока.ПриоритетУпаковки;
						ИначеЕсли РаспределяемаяСтрока.ПриоритетУпаковки
							И ТекущийПриоритет <> РаспределяемаяСтрока.ПриоритетУпаковки Тогда
							
							Количество = Мин(КоличествоОстаток, РаспределяемаяСтрока.Количество);
							
							НоваяСтрока = ТаблицаТоваров.Добавить();
							ЗаполнитьЗначенияСвойств(НоваяСтрока, РаспределяемаяСтрока);
							
							НоваяСтрока.Количество			= Количество;
							НоваяСтрока.КоличествоУпаковок	= Количество / РаспределяемаяСтрока.КоэффициентУпаковки;
							
							КоличествоОстаток = КоличествоОстаток - Количество;
							
						КонецЕсли;
						
						Количество = Мин(КоличествоОстаток, РаспределяемаяСтрока.Количество);
						
						НоваяСтрока = ТаблицаТоваров.Добавить();
						ЗаполнитьЗначенияСвойств(НоваяСтрока, РаспределяемаяСтрока);
						
						НоваяСтрока.Количество			= Количество;
						НоваяСтрока.КоличествоУпаковок	= Количество / РаспределяемаяСтрока.КоэффициентУпаковки;
						
						Если ТекущийПриоритет Тогда
							КоличествоОстаток = КоличествоОстаток - Количество;
						КонецЕсли;
						
					КонецЦикла;
					
				КонецЦикла;
				
				ТаблицаТоваров.Сортировать("НомерСтроки");
				Товары.Загрузить(ТаблицаТоваров);
				
			Иначе
				
				Если СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Отправитель) Тогда
					ТекстСообщения = НСтр("ru = 'Нет товаров для заполнения по распоряжению ""%Распоряжение%"".
											|Возможно еще не создан расходный ордер со склада ""%Отправитель%"".'");
					ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Распоряжение%",	Распоряжение);
					ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Отправитель%",	Отправитель);
					
					ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, "Распоряжение");
				КонецЕсли;
				
			КонецЕсли;
			
			Если ВидЗаполнения = "Количество"
				Или ВидЗаполнения = "НоменклатураКоличество" Тогда
				
				Если ИспользоватьАдресноеХранение Тогда
					РазбитьПоУпаковкамСправочно();
				КонецЕсли;
				
			КонецЕсли;
			
			ВсегоМест = УпаковочныеЛистыСервер.КоличествоМестВТЧ(Товары);
			
			Возврат;
			
		КонецЕсли;
		
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Ссылка",			Ссылка);
	Запрос.УстановитьПараметр("Распоряжение",	Распоряжение);
	Запрос.УстановитьПараметр("Отправитель",	Отправитель);
	Запрос.УстановитьПараметр("Склад",			Склад);
	
	Если ЗначениеЗаполнено(ДатаПоступления) Тогда
		Запрос.УстановитьПараметр("ДатаОстатков", КонецДня(ДатаПоступления));
	Иначе
		Запрос.УстановитьПараметр("ДатаОстатков", ДатаПоступления);
	КонецЕсли;
	
	Если ВидЗаполнения = "Номенклатура"
		Или ВидЗаполнения = "НоменклатураКоличество" Тогда
		
		Товары.Очистить();
		
		ТекстЗапроса =
		"ВЫБРАТЬ
		|	ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
		|	ТоварыКПоступлению.Характеристика	КАК Характеристика,
		|	ВЫБОР
		|		КОГДА ЕСТЬNULL(ТоварыКПоступлению.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
		|			ТОГДА ТоварыКПоступлению.Назначение
		|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
		|	КОНЕЦ								КАК Назначение,
		|	ВЫБОР
		|		КОГДА &ЗаполнятьКоличество
		|			ТОГДА СУММА(ТоварыКПоступлению.Количество)
		|		ИНАЧЕ 0
		|	КОНЕЦ								КАК Количество,
		|	ВЫБОР
		|		КОГДА &ЗаполнятьКоличество
		|			ТОГДА СУММА(ТоварыКПоступлению.Количество)
		|		ИНАЧЕ 0
		|	КОНЕЦ								КАК КоличествоУпаковок
		|ИЗ
		|	(ВЫБРАТЬ
		|		ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
		|		ТоварыКПоступлению.Характеристика	КАК Характеристика,
		|		ТоварыКПоступлению.Назначение		КАК Назначение,
		|		ТоварыКПоступлению.КОформлениюОрдеровОстаток - ТоварыКПоступлению.ПринимаетсяОстаток КАК Количество
		|	ИЗ
		|		РегистрНакопления.ТоварыКПоступлению.Остатки(
		|				&ДатаОстатков,
		|				ДокументПоступления = &Распоряжение
		|				И Склад = &Склад
		|				И Отправитель = &Отправитель) КАК ТоварыКПоступлению
		|	
		|	ОБЪЕДИНИТЬ ВСЕ
		|	
		|	ВЫБРАТЬ
		|		ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
		|		ТоварыКПоступлению.Характеристика	КАК Характеристика,
		|		ТоварыКПоступлению.Назначение		КАК Назначение,
		|		ВЫБОР
		|			КОГДА ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|				ТОГДА -ТоварыКПоступлению.КОформлениюОрдеров
		|			ИНАЧЕ ТоварыКПоступлению.КОформлениюОрдеров
		|		КОНЕЦ - ВЫБОР
		|			КОГДА ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|				ТОГДА - ТоварыКПоступлению.Принимается
		|			ИНАЧЕ ТоварыКПоступлению.Принимается
		|		КОНЕЦ								КАК Количество
		|	ИЗ
		|		РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
		|	
		|	ГДЕ
		|		ТоварыКПоступлению.Активность
		|		И ТоварыКПоступлению.Склад = &Склад
		|		И ТоварыКПоступлению.Регистратор = &Ссылка
		|		И ТоварыКПоступлению.ДокументПоступления = &Распоряжение) КАК ТоварыКПоступлению
		|
		|СГРУППИРОВАТЬ ПО
		|	ТоварыКПоступлению.Номенклатура,
		|	ТоварыКПоступлению.Характеристика,
		|	ВЫБОР
		|		КОГДА ЕСТЬNULL(ТоварыКПоступлению.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
		|			ТОГДА ТоварыКПоступлению.Назначение
		|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
		|	КОНЕЦ
		|
		|ИМЕЮЩИЕ
		|	СУММА(ТоварыКПоступлению.Количество) > 0
		|
		|УПОРЯДОЧИТЬ ПО
		|	Номенклатура.Наименование,
		|	Характеристика.Наименование,
		|	Назначение";
		
		Запрос.Текст = ТекстЗапроса;
		Запрос.УстановитьПараметр("ЗаполнятьКоличество", ВидЗаполнения <> "Номенклатура");
		
		Результат = Запрос.Выполнить();
		
		Если Не Результат.Пустой() Тогда
			Товары.Загрузить(Результат.Выгрузить());
			НоменклатураСервер.РазбитьТоварыПоТоварнымМестам(Товары);
		Иначе
			ТекстСообщения = НСтр("ru = 'Нет товаров для заполнения по распоряжению ""%Распоряжение%"" от отправителя %Отправитель%.'");
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Распоряжение%",	Распоряжение);
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Отправитель%",	Отправитель);
			
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, "Распоряжение");
		КонецЕсли;
		
	Иначе
		
		ТекстЗапроса =
		"ВЫБРАТЬ
		|	Таблица.НомерСтроки		КАК НомерСтроки,
		|	Таблица.Номенклатура	КАК Номенклатура,
		|	Таблица.Характеристика	КАК Характеристика,
		|	Таблица.Назначение		КАК Назначение
		|ПОМЕСТИТЬ ТаблицаНоменклатурыДляЗапроса
		|ИЗ
		|	&Таблица КАК Таблица
		|
		|ГДЕ
		|	Таблица.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	МИНИМУМ(Таблица.НомерСтроки)	КАК НомерСтроки,
		|	Таблица.Номенклатура			КАК Номенклатура,
		|	Таблица.Характеристика			КАК Характеристика,
		|	Таблица.Назначение				КАК Назначение
		|ПОМЕСТИТЬ ТаблицаНоменклатуры
		|ИЗ
		|	ТаблицаНоменклатурыДляЗапроса КАК Таблица
		|
		|СГРУППИРОВАТЬ ПО
		|	Таблица.Номенклатура,
		|	Таблица.Характеристика,
		|	Таблица.Назначение
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Номенклатура,
		|	Характеристика,
		|	Назначение
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
		|	ТоварыКПоступлению.Характеристика	КАК Характеристика,
		|	ТоварыКПоступлению.Назначение		КАК Назначение,
		|	ТоварыКПоступлению.КОформлениюОрдеровОстаток - ТоварыКПоступлению.ПринимаетсяОстаток КАК Количество
		|ПОМЕСТИТЬ ТоварыКПоступлению
		|ИЗ
		|	РегистрНакопления.ТоварыКПоступлению.Остатки(
		|			&ДатаОстатков,
		|			ДокументПоступления = &Распоряжение
		|			И Склад = &Склад
		|			И Отправитель = &Отправитель) КАК ТоварыКПоступлению
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ТоварыКПоступлению.Номенклатура		КАК Номенклатура,
		|	ТоварыКПоступлению.Характеристика	КАК Характеристика,
		|	ТоварыКПоступлению.Назначение		КАК Назначение,
		|	ВЫБОР
		|		КОГДА ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|			ТОГДА -ТоварыКПоступлению.КОформлениюОрдеров
		|		ИНАЧЕ ТоварыКПоступлению.КОформлениюОрдеров
		|	КОНЕЦ - ВЫБОР
		|		КОГДА ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|			ТОГДА -ТоварыКПоступлению.Принимается
		|		ИНАЧЕ ТоварыКПоступлению.Принимается
		|	КОНЕЦ								КАК Количество
		|ИЗ
		|	РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
		|
		|ГДЕ
		|	ТоварыКПоступлению.Активность
		|	И ТоварыКПоступлению.Склад = &Склад
		|	И ТоварыКПоступлению.Регистратор = &Ссылка
		|	И ТоварыКПоступлению.ДокументПоступления = &Распоряжение
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Номенклатура,
		|	Характеристика,
		|	Назначение
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	МИНИМУМ(ТаблицаНоменклатуры.НомерСтроки)	КАК НомерСтрокиСтарый,
		|	ТаблицаНоменклатуры.Номенклатура			КАК Номенклатура,
		|	ТаблицаНоменклатуры.Характеристика			КАК Характеристика,
		|	ТаблицаНоменклатуры.Назначение				КАК Назначение,
		|	СУММА(ЕСТЬNULL(ТоварыКПоступлению.Количество, 0))	КАК Количество,
		|	СУММА(ЕСТЬNULL(ТоварыКПоступлению.Количество, 0))	КАК КоличествоУпаковок
		|ИЗ
		|	ТаблицаНоменклатуры КАК ТаблицаНоменклатуры
		|		ЛЕВОЕ СОЕДИНЕНИЕ ТоварыКПоступлению КАК ТоварыКПоступлению
		|		ПО ТаблицаНоменклатуры.Номенклатура = ТоварыКПоступлению.Номенклатура
		|			И ТаблицаНоменклатуры.Характеристика = ТоварыКПоступлению.Характеристика
		|			И ТаблицаНоменклатуры.Назначение = ТоварыКПоступлению.Назначение
		|
		|СГРУППИРОВАТЬ ПО
		|	ТаблицаНоменклатуры.Номенклатура,
		|	ТаблицаНоменклатуры.Характеристика,
		|	ТаблицаНоменклатуры.Назначение
		|
		|УПОРЯДОЧИТЬ ПО
		|	НомерСтрокиСтарый";
		
		Запрос.Текст = ТекстЗапроса;
		Запрос.УстановитьПараметр("Таблица", Товары.Выгрузить());
		
		Товары.Загрузить(Запрос.Выполнить().Выгрузить());
		НоменклатураСервер.РазбитьТоварыПоТоварнымМестам(Товары);
		
	КонецЕсли;
	
	Если ВидЗаполнения = "Количество"
		Или ВидЗаполнения = "НоменклатураКоличество" Тогда
		
		Если ИспользоватьАдресноеХранение Тогда
			РазбитьПоУпаковкамСправочно();
		КонецЕсли;
		
	КонецЕсли;
	
	ВсегоМест = УпаковочныеЛистыСервер.КоличествоМестВТЧ(Товары);
	
КонецПроцедуры

Процедура РазбитьПоУпаковкамСправочно()
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Таблица.Номенклатура КАК Номенклатура,
	|	Таблица.Характеристика КАК Характеристика,
	|	Таблица.НомерСтроки КАК НомерСтроки,
	|	Таблица.Количество КАК Количество,
	|	Таблица.КоличествоУпаковок КАК КоличествоУпаковок,
	|	ВЫРАЗИТЬ(Таблица.Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения) КАК Упаковка,
	|	Таблица.Назначение КАК Назначение
	|ПОМЕСТИТЬ ТаблицаНоменклатурыДляЗапроса
	|ИЗ
	|	&Таблица КАК Таблица
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Таблица.Номенклатура КАК Номенклатура,
	|	МИНИМУМ(Таблица.НомерСтроки) КАК НомерСтроки,
	|	ВЫРАЗИТЬ(Таблица.Номенклатура КАК Справочник.Номенклатура).НаборУпаковок КАК НаборУпаковок,
	|	Таблица.Характеристика КАК Характеристика,
	|	Таблица.Назначение КАК Назначение,
	|	СУММА(Таблица.Количество) КАК Количество
	|ПОМЕСТИТЬ ТаблицаНоменклатуры
	|ИЗ
	|	ТаблицаНоменклатурыДляЗапроса КАК Таблица
	|ГДЕ
	|	ЕСТЬNULL(Таблица.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
	|
	|СГРУППИРОВАТЬ ПО
	|	Таблица.Номенклатура,
	|	ВЫРАЗИТЬ(Таблица.Номенклатура КАК Справочник.Номенклатура).НаборУпаковок,
	|	Таблица.Характеристика,
	|	Таблица.Назначение
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВнутреннийЗапрос.Номенклатура,
	|	ВнутреннийЗапрос.Количество,
	|	ВнутреннийЗапрос.ЭтоТоварноеМесто,
	|	ВнутреннийЗапрос.НомерСтроки,
	|	ВнутреннийЗапрос.Характеристика,
	|	ВнутреннийЗапрос.Назначение,
	|	ВнутреннийЗапрос.КоличествоВУпаковке,
	|	ВнутреннийЗапрос.Упаковка,
	|	ВнутреннийЗапрос.ЕдиницаИзмеренияУпаковкиПредставление
	|ИЗ
	|	(ВЫБРАТЬ
	|		ТаблицаНоменклатуры.Номенклатура КАК Номенклатура,
	|		ТаблицаНоменклатуры.Количество КАК Количество,
	|		ЛОЖЬ КАК ЭтоТоварноеМесто,
	|		ТаблицаНоменклатуры.НомерСтроки КАК НомерСтроки,
	|		ТаблицаНоменклатуры.Характеристика КАК Характеристика,
	|		ТаблицаНоменклатуры.Назначение КАК Назначение,
	|		ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК КоличествоВУпаковке,
	|		ЕСТЬNULL(УпаковкиНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК Упаковка,
	|		ЕСТЬNULL(УпаковкиНоменклатуры.ЕдиницаИзмерения.Представление, """") КАК ЕдиницаИзмеренияУпаковкиПредставление
	|	ИЗ
	|		ТаблицаНоменклатуры КАК ТаблицаНоменклатуры
	|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО (ТаблицаНоменклатуры.Номенклатура = УпаковкиНоменклатуры.Владелец
	|					ИЛИ ТаблицаНоменклатуры.НаборУпаковок = УпаковкиНоменклатуры.Владелец)
	|				И (НЕ УпаковкиНоменклатуры.ПометкаУдаления)
	|				И (ТаблицаНоменклатуры.Количество >= &ТекстЗапросаКоэффициентУпаковки)
	|				И (&ТекстЗапросаКоэффициентУпаковки <> 0)
	|				И (ЕСТЬNULL(УпаковкиНоменклатуры.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ТаблицаНоменклатуры.Номенклатура,
	|		ТаблицаНоменклатуры.Количество,
	|		ИСТИНА,
	|		ТаблицаНоменклатуры.НомерСтроки,
	|		ТаблицаНоменклатуры.Характеристика,
	|		ТаблицаНоменклатуры.Назначение,
	|		ТаблицаНоменклатуры.Упаковка.КоличествоУпаковок,
	|		ТаблицаНоменклатуры.Упаковка,
	|		""""
	|	ИЗ
	|		ТаблицаНоменклатурыДляЗапроса КАК ТаблицаНоменклатуры
	|	ГДЕ
	|		ЕСТЬNULL(ТаблицаНоменклатуры.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)) КАК ВнутреннийЗапрос
	|
	|УПОРЯДОЧИТЬ ПО
	|	ВнутреннийЗапрос.НомерСтроки,
	|	ВнутреннийЗапрос.КоличествоВУпаковке,
	|	ВнутреннийЗапрос.ЕдиницаИзмеренияУпаковкиПредставление";
	
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки",
		Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
			"УпаковкиНоменклатуры",
			"ТаблицаНоменклатуры.Номенклатура"));
	
	ТаблицаНоменклатуры = Товары.Выгрузить();
	Запрос.УстановитьПараметр("Таблица",ТаблицаНоменклатуры);
	
	Товары.Очистить();
	
	Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	ТекНомерСтроки = Неопределено;
	ТекНоменклатура = Неопределено;
	ТекХарактеристика = Неопределено;
	ТекНазначение = Неопределено;
	Количество = Неопределено;
	
	Пока Выборка.Следующий() Цикл
		
		Если Выборка.НомерСтроки <> ТекНомерСтроки Тогда
			
			Если Количество <> Неопределено Тогда
				НоваяСтрока = Товары.Добавить();
				НоваяСтрока.Количество = Количество;
				НоваяСтрока.КоличествоУпаковок = Количество;
				
				НоваяСтрока.Номенклатура = ТекНоменклатура;
				НоваяСтрока.Характеристика = ТекХарактеристика;
				НоваяСтрока.Назначение = ТекНазначение;
			КонецЕсли;
			
			ТекНомерСтроки              = Выборка.НомерСтроки;
			ТекНоменклатура             = Выборка.Номенклатура; 
			ТекХарактеристика           = Выборка.Характеристика;
			ТекНазначение               = Выборка.Назначение;
			
			Если Выборка.ЭтоТоварноеМесто Тогда
				
				НоваяСтрока = Товары.Добавить();
				НоваяСтрока.Количество = Выборка.Количество;
				НоваяСтрока.КоличествоУпаковок =  Выборка.Количество * Выборка.КоличествоВУпаковке;
				НоваяСтрока.Упаковка = Выборка.Упаковка;
				
				НоваяСтрока.Номенклатура = ТекНоменклатура;
				НоваяСтрока.Характеристика = ТекХарактеристика;
				НоваяСтрока.Назначение = ТекНазначение;
				
				Продолжить;
				
			КонецЕсли;
			
			Количество = Выборка.Количество;//(Не Выборка.ЭтоТоварноеМесто, Выборка.Количество, Выборка.КоличествоУпаковок);
			
		КонецЕсли;
		
		Если Количество <> Неопределено Тогда
			Если ЗначениеЗаполнено(Выборка.Упаковка) Тогда
				КоличествоВДокумент = Цел(Количество / Выборка.КоличествоВУпаковке);
			Иначе
				КоличествоВДокумент = Количество;
			КонецЕсли;
			
			Если КоличествоВДокумент > 0 Тогда
				
				НоваяСтрока = Товары.Добавить();
				НоваяСтрока.Количество = КоличествоВДокумент * Выборка.КоличествоВУпаковке;
				НоваяСтрока.КоличествоУпаковок = КоличествоВДокумент;
				НоваяСтрока.Упаковка = Выборка.Упаковка;
				
				НоваяСтрока.Номенклатура = ТекНоменклатура;
				НоваяСтрока.Характеристика = ТекХарактеристика;
				НоваяСтрока.Назначение = ТекНазначение;
				
				Если Количество = КоличествоВДокумент * Выборка.КоличествоВУпаковке Тогда
					Количество = Неопределено;
				Иначе
					Количество = Количество - КоличествоВДокумент * Выборка.КоличествоВУпаковке;
				КонецЕсли;
				
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Если Количество <> Неопределено Тогда
		НоваяСтрока = Товары.Добавить();
		НоваяСтрока.Количество = Количество;
		НоваяСтрока.КоличествоУпаковок = Количество;
		НоваяСтрока.Номенклатура = ТекНоменклатура;
		НоваяСтрока.Характеристика = ТекХарактеристика;
		НоваяСтрока.Назначение = ТекНазначение;
	КонецЕсли;
	
КонецПроцедуры

Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)

	Ответственный          = Пользователи.ТекущийПользователь();
	ОбъектМетаданныхСтатус = Метаданные().Реквизиты.Статус; // ОбъектМетаданныхРеквизит
	Статус                 = ОбъектМетаданныхСтатус.ЗначениеЗаполнения;
	
	Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад);
	Если ЗначениеЗаполнено(Склад) Тогда
		Если СкладыСервер.ИспользоватьАдресноеХранение(Склад,Помещение,Дата) Тогда
			ЗонаПриемки = Справочники.СкладскиеЯчейки.ЗонаПриемкиПоУмолчанию(Склад,Помещение,ЗонаПриемки);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область Прочее

Процедура ПроверитьОрдерныйСклад(Отказ)
	
	Если Не СкладыСервер.ИспользоватьОрдернуюСхемуПриПоступлении(Склад, Дата) Тогда
		
		Отказ = Истина;
		
		ТекстСообщения = НСтр("ru='На складе ""%Склад%"" на %Дата% не используется ордерная схема при поступлении.'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Склад%",Склад);
		ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Дата%",Формат(Дата, "ДЛФ=D"));
		
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Ссылка);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти

#КонецЕсли
#КонецЕсли

Связанные материалы