Проверка количества товаров в документе / Модуль менеджера

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

#Область ПрограммныйИнтерфейс

// Имена реквизитов, от значений которых зависят параметры указания серий
//
//	Возвращаемое значение:
//		Строка - имена реквизитов, перечисленные через запятую.
//
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
	ИменаРеквизитов = "Склад,Помещение,Ордер,СкладскаяОперация,ДатаОтгрузки";
	
	Возврат ИменаРеквизитов;
КонецФункции

// Возвращает параметры указания серий для товаров, указанных в документе.
//
// Параметры:
//  Объект	 - Структура - структура значений реквизитов объекта, необходимых для заполнения параметров указания серий.
// 
// Возвращаемое значение:
//  см. НоменклатураКлиентСервер.ПараметрыУказанияСерий.
//
Функция ПараметрыУказанияСерий(Объект) Экспорт
	
	ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
	ПараметрыУказанияСерий.ПолноеИмяОбъекта = "Обработка.ПроверкаКоличестваТоваровВДокументе";
	ПараметрыУказанияСерий.ИмяТЧСерии = "Товары";
	
	ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Ложь);
	
	ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры  = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
	ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
	
	ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Объект.СкладскаяОперация);
	
	ПараметрыУказанияСерий.ИспользоватьАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад, Объект.Помещение, Объект.ДатаОтгрузки);
	
	ПараметрыУказанияСерий.ПоляСвязи.Добавить("Упаковка");
	ПараметрыУказанияСерий.ИмяПоляКоличество = "КоличествоУпаковок";
	
	ПараметрыУказанияСерий.ИмяПоляПомещение = "Помещение";
	
	ПараметрыУказанияСерий.ПоляСвязи.Добавить("НеОтгружать");
	ПараметрыУказанияСерий.ПоляСвязи.Добавить("УпаковочныйЛист");
	ПараметрыУказанияСерий.ПоляСвязи.Добавить("Назначение");
	
	ПараметрыУказанияСерий.ПланированиеОтгрузки = Ложь;
	ПараметрыУказанияСерий.ПланированиеОтбора = Ложь;
	ПараметрыУказанияСерий.ПроверкаОтбора = Ложь;
	ПараметрыУказанияСерий.ФактОтбора = Истина;
	
	ПараметрыУказанияСерий.ЭтоОрдер = Истина;
	ПараметрыУказанияСерий.БлокироватьДанныеФормы = Ложь;
	ПараметрыУказанияСерий.Дата = Объект.ДатаОтгрузки;
	
	Возврат ПараметрыУказанияСерий;
КонецФункции

// Возвращает текст запроса для расчета статусов указания серий
//	Параметры:
//		ПараметрыУказанияСерий - Структура - состав полей задается в функции НоменклатураКлиентСервер.ПараметрыУказанияСерий
//	Возвращаемое значение:
//		Строка - текст запроса.
//
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
	
	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	Товары.НомерСтроки КАК НомерСтроки,
	|	Товары.Номенклатура КАК Номенклатура,
	|	Товары.НеОтгружать КАК НеОтгружать,
	|	Товары.Серия КАК Серия,
	|	Товары.СтатусУказанияСерий КАК СтатусУказанияСерий
	|ПОМЕСТИТЬ Товары
	|ИЗ
	|	&Товары КАК Товары
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Товары.НомерСтроки КАК НомерСтроки,
	|	Товары.Номенклатура КАК Номенклатура,
	|	Товары.НеОтгружать КАК НеОтгружать,
	|	ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры КАК ВидНоменклатуры,
	|	Товары.Серия КАК Серия,
	|	Товары.СтатусУказанияСерий КАК СтатусУказанияСерий
	|ПОМЕСТИТЬ ТоварыДляЗапроса
	|ИЗ
	|	Товары КАК Товары
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Товары.НомерСтроки КАК НомерСтроки,
	|	Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
	|	ВЫБОР
	|		КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий ЕСТЬ NULL 
	|			ТОГДА 0
	|		КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки
	|			ТОГДА ВЫБОР
	|					КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|						ТОГДА ВЫБОР
	|								КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
	|									ТОГДА 14
	|								ИНАЧЕ 10
	|							КОНЕЦ
	|					ИНАЧЕ ВЫБОР
	|							КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
	|								ТОГДА 13
	|							ИНАЧЕ 9
	|						КОНЕЦ
	|				КОНЕЦ
	|		КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтбора
	|			ТОГДА ВЫБОР
	|					КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчетСерийПоFEFO
	|						ТОГДА ВЫБОР
	|								КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|									ТОГДА 6
	|								ИНАЧЕ 5
	|							КОНЕЦ
	|					ИНАЧЕ ВЫБОР
	|							КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|								ТОГДА 8
	|							ИНАЧЕ 7
	|						КОНЕЦ
	|				КОНЕЦ
	|		КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПоФактуОтбора
	|					И (ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеКлиенту
	|							И &ОтгрузкаКлиенту
	|						ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеВРозницу
	|							И &ОтгрузкаВРозницу
	|						ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеКомплектующихДляСборки
	|							И &ОтгрузкаКомплектующихДляСборки
	|						ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеКомплектовДляРазборки
	|							И &ОтгрузкаКомплектовДляРазборки
	|						ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеНаВнутренниеНужды
	|							И &ОтгрузкаНаВнутренниеНужды
	|						ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеПоВозвратуПоставщику
	|							И &ОтгрузкаПоВозвратуПоставщику
	|						ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеПоПеремещению
	|							И &ОтгрузкаПоПеремещению)
	|				ИЛИ (ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПоФактуОтбора
	|					ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемке)
	|					И ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПеремещенииМеждуПомещениями
	|					И &ПеремещениеМеждуПомещениями
	|			ТОГДА ВЫБОР
	|					КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьОстаткиСерий
	|						ТОГДА ВЫБОР
	|								КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|									ТОГДА 4
	|								ИНАЧЕ 3
	|							КОНЕЦ
	|					ИНАЧЕ ВЫБОР
	|							КОГДА Товары.НеОтгружать = 1
	|								ТОГДА 0
	|							КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|								ТОГДА 2
	|							ИНАЧЕ 1
	|						КОНЕЦ
	|				КОНЕЦ
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК СтатусУказанияСерий
	|ПОМЕСТИТЬ Статусы
	|ИЗ
	|	ТоварыДляЗапроса КАК Товары
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
	|			ПО (&Склад = Склады.Ссылка)
	|		ПО (ПолитикиУчетаСерий.Склад = &Склад)
	|			И Товары.ВидНоменклатуры = ПолитикиУчетаСерий.Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Статусы.НомерСтроки КАК НомерСтроки,
	|	Статусы.СтатусУказанияСерий КАК СтатусУказанияСерий
	|ИЗ
	|	Статусы КАК Статусы
	|ГДЕ
	|	Статусы.СтатусУказанияСерий <> Статусы.СтарыйСтатусУказанияСерий
	|
	|УПОРЯДОЧИТЬ ПО
	|	Статусы.НомерСтроки";
	
	Если ПараметрыУказанияСерий.ПоляСвязи.Найти("Упаковка") = Неопределено Тогда
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Товары.Упаковка КАК Упаковка",
			"ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка");
			
	КонецЕсли;
	
	Возврат ТекстЗапроса;

	
КонецФункции

// Возвращает текст запроса для получениях доступных назначений
//	Параметры:
//		ПараметрыФормированияЗапроса - Структура - параметры для формирования текстов запросов
//	Возвращаемое значение:
//		Строка - текст запроса.
//
Функция ТекстЗапросаДоступныхНазначений(ПараметрыФормированияЗапроса) Экспорт
	
	Возврат Справочники.Назначения.ТекстЗапросаВсехНазначений(ПараметрыФормированияЗапроса);
	
КонецФункции

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

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

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

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

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

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

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

#КонецЕсли

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