Чек ККМ коррекции / Модуль менеджера

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

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

#Область Проведение

// Описывает учетные механизмы используемые в документе для регистрации в механизме проведения.
//
// Параметры:
//  МеханизмыДокумента - Массив - список имен учетных механизмов, для которых будет выполнена
//              регистрация в механизме проведения.
//
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
	
	МеханизмыДокумента.Добавить("Обеспечение");
	МеханизмыДокумента.Добавить("СерийныйУчет");
	МеханизмыДокумента.Добавить("АдресныйСклад");
	
КонецПроцедуры

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

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

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

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

	ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Перечисления.СкладскиеОперации.ОтгрузкаВРозницу);

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

	Возврат ПараметрыУказанияСерий;
	
КонецФункции

// Возвращает статус документа.
//
// Параметры:
//  Ссылка - ДокументСсылка.ЧекККМ - Ссылка на чек ККМ.
//
// Возвращаемое значение:
//  ПеречислениеСсылка.СтатусыЧековККМ - Статус чека ККМ.
//
Функция СтатусДокумента(Ссылка) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	ЧекККМ.Статус
	|ИЗ
	|	Документ.ЧекККМ КАК ЧекККМ
	|ГДЕ
	|	ЧекККМ.Ссылка = &Ссылка";
	
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Статус;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

// Возвращает текст запроса для расчета статусов указания серий
//	Параметры:
//		ПараметрыУказанияСерий - Структура - состав полей задается в функции НоменклатураКлиентСервер.ПараметрыУказанияСерий
//	Возвращаемое значение:
//		Строка - текст запроса.
//
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
	
	ЕстьПомещения = (ПараметрыУказанияСерий.ПоляСвязи.Найти("Помещение") <> Неопределено);
	Если ЕстьПомещения Тогда
		Возврат ТекстЗапросаЗаполненияСтатусовУказанияСерийСПомещениями();
	Иначе
		Возврат ТекстЗапросаЗаполненияСтатусовУказанияСерийБезПомещений();
	КонецЕсли;
	
КонецФункции

// Определяет список команд отчетов.
//
// Параметры:
//   КомандыОтчетов - См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.КомандыОтчетов
//   Параметры - См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.Параметры
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
	
	Возврат;
	
КонецПроцедуры

// Определяет наличие документа чек ККМ коррекции по переданной ссылке на Чек ККМ.
// Чек коррекции должен быть проведен и отражен в регистре сведений ФискальныеОперации.
//
// Параметры:
//	ЧекККМ - ДокументСсылка.ЧекККМ - 
//
// Возвращаемое значение:
//	Булево -
Функция ЕстьКоррекцияПоЧекуККМ(ЧекККМ) Экспорт
	
	// По документу ЧекККМ нет ранее созданного документа ЧекККМКоррекция
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ЧекККМКоррекции.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.ЧекККМКоррекции КАК ЧекККМКоррекции
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ФискальныеОперации КАК ФискальныеОперации
	|		ПО ЧекККМКоррекции.ЧекККМ = ФискальныеОперации.ДокументОснование
	|	
	|ГДЕ
	|	ЧекККМКоррекции.Проведен
	|	И ЧекККМКоррекции.ЧекККМ = &ЧекККМ
	|	И (ФискальныеОперации.НомерЧекаККМ <> &ПустаяСтрока)";
	Запрос.УстановитьПараметр("ЧекККМ", ЧекККМ);
	Запрос.УстановитьПараметр("ПустаяСтрока", "");
	
	Возврат Не Запрос.Выполнить().Пустой();
	
КонецФункции

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

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)
	|	И ЗначениеРазрешено(КассаККМ)
	|	И ЗначениеРазрешено(Склад)";

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

// СтандартныеПодсистемы.ВерсионированиеОбъектов
// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
// Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

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

#Область Проведение

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт

	ИсточникиДанных = Новый Соответствие;

	Возврат ИсточникиДанных; 

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

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

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

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

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

Процедура ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры)
	
	ТекстЗапросаТабЧасть =
		"ВЫБРАТЬ
		|	ТабЧасть.Ссылка                              КАК Ссылка,
		|	ТабЧасть.Дата                                КАК Период,
		|	ТоварыЧека.Номенклатура                      КАК Номенклатура,
		|	ТоварыЧека.Характеристика                    КАК Характеристика,
		|	ВЫБОР КОГДА ТоварыЧека.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа) ТОГДА
		|				&Подразделение
		|			ИНАЧЕ
		|				ТоварыЧека.Ссылка.Склад
		|		КОНЕЦ                                    КАК Склад,
		|	ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) КАК Назначение,
		|	ТоварыЧека.Количество                        КАК Количество,
		|	ЛОЖЬ                                         КАК ПоГрафику,
		|	НЕОПРЕДЕЛЕНО                                 КАК РаспоряжениеВГрафике
		|ИЗ
		|	Документ.ЧекККМКоррекции КАК ТабЧасть
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ТоварыЧека
		|		ПО ТоварыЧека.Ссылка = ТабЧасть.ЧекККМ
		|ГДЕ
		|	НЕ ТабЧасть.Архивный
		|		И ТабЧасть.ВидКоррекции = ЗНАЧЕНИЕ(Перечисление.ВидыЧековКоррекции.ИсправлениеОшибки)";
	
	РаспределениеЗапасовДвижения.ПриходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть, Неопределено, Ложь);
	
	ТекстЗапросаТабЧасть =
		"ВЫБРАТЬ
		|	ТабЧасть.Ссылка                              КАК Ссылка,
		|	ТабЧасть.Ссылка.Дата                         КАК Период,
		|	ТабЧасть.Номенклатура                        КАК Номенклатура,
		|	ТабЧасть.Характеристика                      КАК Характеристика,
		|	ВЫБОР КОГДА ТабЧасть.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа) ТОГДА
		|				&Подразделение
		|			ИНАЧЕ
		|				ТабЧасть.Ссылка.Склад
		|		КОНЕЦ                                    КАК Склад,
		|	ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) КАК Назначение,
		|	ТабЧасть.Количество                          КАК Количество,
		|	НЕОПРЕДЕЛЕНО                                 КАК ЗапланированныйРасходРаспределенногоЗапаса,
		|	ИСТИНА                                       КАК КонтрольСвободногоОстатка
		|ИЗ
		|	Документ.ЧекККМКоррекции.Товары КАК ТабЧасть
		|ГДЕ
		|	НЕ ТабЧасть.Ссылка.Архивный";
	
	РаспределениеЗапасовДвижения.РасходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть);
	
КонецПроцедуры

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

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

// Заполняет список команд печати.
//
// Параметры:
// 	КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	Возврат;
	
КонецПроцедуры

// Формирует печатные формы.
//
// Параметры:
//  МассивОбъектов  - Массив    - ссылки на объекты, которые нужно распечатать;
//  ПараметрыПечати - Структура - дополнительные настройки печати;
//  КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы (выходной параметр)
//  ОбъектыПечати         - СписокЗначений  - значение - ссылка на объект;
//                                            представление - имя области в которой был выведен объект (выходной параметр);
//  ПараметрыВывода       - Структура       - дополнительные параметры сформированных табличных документов (выходной параметр).
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	Возврат;
	
КонецПроцедуры

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

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

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

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

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

#КонецЕсли

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