Чек ККМ на возврат / Модуль менеджера

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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