Правим печатную форму Путевого листа Бухгалтерия предприятия 3.0

Поступило задание, вести путевые листы для транспортного участка предприятия. Но документ в стандартной конфигурации не отвечает требованиям и имеет ряд недочетов.

Пример стандартного бланка:

Далее был утвержден бланк путевого листа с необходимыми реквизитами согласно законодательства РФ.

Вот что получилось:

Добавили необходимые реквизиты и максимально упростили оформление документа проставив стандартные реквизиты диспетчера, мед. работника и т.д.

Чтобы не «ломать» стандартную форму 1с, добавили свои, это потребовало исправить модуль менеджера и добавить две формы:

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

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

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

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

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

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

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

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

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

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



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

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

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

	// Путевой лист, упрощенная форма
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "ПутевойЛист";
	КомандаПечати.Представление = НСтр("ru = 'Путевой лист'");
	КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
	КомандаПечати.Порядок       = 1;
	
	// Путевой лист, типовая форма №3 Легковой транспорт
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "ПутевойЛист_ТиповаяФорма_Легковой";
	КомандаПечати.Представление = НСтр("ru = 'Путевой лист (№3)'");
	КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
	КомандаПечати.Порядок       = 2;
	
	// Авансовый отчет
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "ПутевойЛист_АвансовыйОтчет";
	КомандаПечати.Представление = НСтр("ru = 'Авансовый отчет (АО-1)'");
	КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
	КомандаПечати.Порядок       = 3;
	
		// Путевой лист, типовая форма №3 Легковой транспорт доработка Самсонов М.А.
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "ПутевойЛист_ТиповаяФорма_Легковой1";
	КомандаПечати.Представление = НСтр("ru = 'Путевой лист ИНПРОКОМ ЛА'");
	КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
	КомандаПечати.Порядок       = 4;
	
		// Путевой лист, типовая форма №3 Легковой транспорт доработка Самсонов М.А.
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "ПутевойЛист_ТиповаяФорма_Легковой2";
	КомандаПечати.Представление = НСтр("ru = 'Путевой лист ИНПРОКОМ ГА'");
	КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
	КомандаПечати.Порядок       = 5;
	
	// Реестр документов
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "Реестр";
	КомандаПечати.Представление = НСтр("ru = 'Реестр документов'");
	КомандаПечати.ЗаголовокФормы= НСтр("ru = 'Реестр документов ""Путевые листы""'");
	КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечатиРеестраДокументов";
	КомандаПечати.СписокФорм    = "ФормаСписка";
	КомандаПечати.Порядок       = 130;
	
КонецПроцедуры

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

	// Доработка Самсонов М.А.

		
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПутевойЛист_ТиповаяФорма_Легковой1") Тогда
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
			"ПутевойЛист_ТиповаяФорма_Легковой1", НСтр("ru = 'Путевой лист'"),
			ПечатьПутевойЛистФорма6(МассивОбъектов, ОбъектыПечати),,
			"Документ.ПутевойЛист.ПФ_MXL_ПутевойЛистФорма6");
		
	КонецЕсли;
	
	// Доработка Самсонов М.А.		
		
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПутевойЛист_ТиповаяФорма_Легковой2") Тогда
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
			"ПутевойЛист_ТиповаяФорма_Легковой2", НСтр("ru = 'Путевой лист'"),
			ПечатьПутевойЛистФорма7(МассивОбъектов, ОбъектыПечати),,
			"Документ.ПутевойЛист.ПФ_MXL_ПутевойЛистФорма7");
		
	КонецЕсли;
		
	// Доработка Самсонов М.А.
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПутевойЛист_АвансовыйОтчет") Тогда
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
			"ПутевойЛист_АвансовыйОтчет", НСтр("ru = 'Авансовый отчет'"),
			ПечатьПутевойЛистАвансовыйОтчет(МассивОбъектов, ОбъектыПечати),,
			"Документ.АвансовыйОтчет.ПФ_MXL_АвансовыйОтчет");
		
	КонецЕсли;
	
	ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(
		МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
	
КонецПроцедуры

#Область ПечатьУпрощенныйПутевойЛист

Функция ПечатьУпрощенныйПутевойЛист(МассивОбъектов, ОбъектыПечати)

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

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

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

Функция ПредставлениеДатыУпрощеннаяФорма(Дата)
	
	ПредставлениеДаты = "";
	
	Если Не ЗначениеЗаполнено(Дата) Тогда
		ПредставлениеДаты = "";
	ИначеЕсли Не ЗначениеЗаполнено(НачалоДня(Дата)) Тогда
		ПредставлениеДаты = Формат(Дата, НСтр("ru='ДФ=ЧЧ:мм'"));
	ИначеЕсли Минута(Дата) = 0 И Час(Дата) = 0 Тогда
		ПредставлениеДаты = Формат(Дата, "ДЛФ=D");
	Иначе
		ПредставлениеДаты = Формат(Дата, НСтр("ru='ДФ=""дд.ММ.гггг'', ''ЧЧ:мм""'"));
	КонецЕсли;
	
	Возврат ПредставлениеДаты;
	
КонецФункции

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

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

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

#Область ПечатьТиповаяФормаЛегковойТС

Функция ПечатьПутевойЛистФорма3(МассивОбъектов, ОбъектыПечати)

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

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



	// Доработка Самсонов М.А.


Функция ПечатьПутевойЛистФорма6(МассивОбъектов, ОбъектыПечати)

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

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



	// Доработка Самсонов М.А.
	
	

Функция ПечатьПутевойЛистФорма7(МассивОбъектов, ОбъектыПечати)

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

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

 	// Доработка Самсонов М.А.

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

Процедура РазместитьАдресПодачи(ПараметрыМакета, АдресПодачиСтрокой)
	
	ОписаниеДлиныСтрокАдреса = ДлинаСтрокАдресаПодачи();
	НомерСтроки = 1;
	АдресПодачи = СокрЛП(АдресПодачиСтрокой);
	ШаблонИмени = "АдресПодачи%1";
	
	КоличествоСтрок = ОписаниеДлиныСтрокАдреса.Количество();
	ОписаниеАдресаПодачи = Новый Структура;
	
	Для Каждого МаксимальнаяДлинаСтроки Из ОписаниеДлиныСтрокАдреса Цикл
		
		Если ПустаяСтрока(АдресПодачи) Тогда
			Прервать;
		КонецЕсли;
		
		ИмяПоля = СтрШаблон(ШаблонИмени, НомерСтроки);
		
		Если НомерСтроки = КоличествоСтрок Тогда
			ОписаниеАдресаПодачи.Вставить(ИмяПоля, АдресПодачи);
		Иначе
			ВыделеннаяСтрока = ЧастьСтрокиАдресаПодачи(АдресПодачи, МаксимальнаяДлинаСтроки, " ");
			Если СтрДлина(ВыделеннаяСтрока) > МаксимальнаяДлинаСтроки Тогда
				ВыделеннаяСтрока = ЧастьСтрокиАдресаПодачи(АдресПодачи, МаксимальнаяДлинаСтроки, ",");
			КонецЕсли;
			ОписаниеАдресаПодачи.Вставить(ИмяПоля, ВыделеннаяСтрока);
			АдресПодачи = УдалитьРазделительВНачалеСтроки(Сред(АдресПодачи, СтрДлина(ВыделеннаяСтрока) + 1));
		КонецЕсли;
		
		НомерСтроки = НомерСтроки + 1;
		
	КонецЦикла;
	
	ПараметрыМакета.Заполнить(ОписаниеАдресаПодачи);
	
КонецПроцедуры

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

Функция ДлинаСтрокАдресаПодачи()
	
	ОписаниеАдресаПодачи = Новый Массив;
	ОписаниеАдресаПодачи.Добавить(28);
	ОписаниеАдресаПодачи.Добавить(44);
	ОписаниеАдресаПодачи.Добавить(44);
	
	Возврат ОписаниеАдресаПодачи;
	
КонецФункции

Функция УдалитьРазделительВНачалеСтроки(ТекущаяСтрока)
	
	Разделитель = ",";
	Если Не СтрНачинаетсяС(ТекущаяСтрока, Разделитель) Тогда
		Возврат СокрЛП(ТекущаяСтрока);
	КонецЕсли;
	
	Возврат Сред(ТекущаяСтрока, СтрДлина(Разделитель) + 1);
	
КонецФункции

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

#Область ПечатьАвансовыйОтчет

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

// Формирует и возвращает текст запроса для выборки данных,
// необходимых для формирования печатной формы
Функция ТекстЗапросаПечатьПутевойЛистАвансовыйОтчет()
	
	
	

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

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

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

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

// Формирует и возвращает текст запроса для выборки данных,
// необходимых для формирования печатной упрощенной и типовой формы
Функция ТекстЗапросаПечатьПутевойЛист()

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

Процедура ЗаполнитьПараметрыВодителя(ДанныеСтроки, ТиповаяФорма = Ложь)
	
	ДанныеВодителя = ОбщегоНазначенияБПВызовСервера.ДанныеФизЛица(
		ДанныеСтроки.Организация, ДанныеСтроки.ФизЛицо, ДанныеСтроки.Дата);
	
	// Подпункт 1 Пункта 7 Раздела II. Обязательные реквизиты путевого листа Приказа Минтранса России от 18.09.2008 N 152
	// ФИО водителя указывается польностью
	ДанныеСтроки.Вставить("ФИО", СокрЛП(СтрШаблон(Нстр("ru = '%1 %2 %3'"),
		ДанныеВодителя.Фамилия, ДанныеВодителя.Имя, ДанныеВодителя.Отчество)));
	
	ВодительскоеУдостоверение = ВодительскоеУдостоверениеФизлица(ДанныеСтроки.ФизЛицо, ДанныеСтроки.Дата);
	
	Если ТиповаяФорма Тогда
		ДанныеСтроки.Вставить("ФИОСокращенное", ДанныеВодителя.Представление);
		ДанныеСтроки.Вставить("ТабельныйНомер", ДанныеВодителя.ТабельныйНомер);
		ДанныеСтроки.Вставить("СтраховойНомерПФР", ДанныеВодителя.СтраховойНомерПФР);    //24.03.20 Самсонов М.А. добавляем поля
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ВодительскоеУдостоверение) Тогда
		ДанныеСтроки.Вставить("СерияВодительскогоУдостоверения", ВодительскоеУдостоверение.Серия);
		ДанныеСтроки.Вставить("НомерВодительскогоУдостоверения", ВодительскоеУдостоверение.Номер);
		ДанныеСтроки.Вставить("ДатаВыдачиВодительскогоУдостоверения", ВодительскоеУдостоверение.ДатаВыдачи);   //24.03.20 Самсонов М.А. добавляем поля
	ИначеЕсли Не ТиповаяФорма Тогда
		ДанныеСтроки.Вставить("СерияВодительскогоУдостоверения", "___________");
		ДанныеСтроки.Вставить("НомерВодительскогоУдостоверения", "___________");
		ДанныеСтроки.Вставить("ДатаВыдачиВодительскогоУдостоверения", "___________");           //24.03.20 Самсонов М.А. добавляем поля
	Иначе
		ДанныеСтроки.Вставить("СерияВодительскогоУдостоверения", "");
		ДанныеСтроки.Вставить("НомерВодительскогоУдостоверения", "");
		ДанныеСтроки.Вставить("ДатаВыдачиВодительскогоУдостоверения", "");            //24.03.20 Самсонов М.А. добавляем поля
	КонецЕсли;
	
КонецПроцедуры

Процедура РассчитатьПредельныеЗначенияМашрута(ДанныеДокумента)
	
	Маршрут = ДанныеДокумента.Маршрут.Выгрузить();
	ДанныеДокумента.Вставить("РасходПоНорме",    Маршрут.Итог("РасходПоНорме"));
	ДанныеДокумента.Вставить("Расход",           Маршрут.Итог("Расход"));
	ДанныеДокумента.Вставить("ВсегоЧасов",       Маршрут.Итог("ВсегоЧасов"));
	
	Если ЗначениеЗаполнено(Маршрут) Тогда
		
		ПоказаниеОдометраДо = Маршрут[0].ПоказаниеОдометраДо;
		ПоказаниеОдометраПосле = Маршрут[0].ПоказаниеОдометраПосле;
		ДатаОтправления = Маршрут[0].ДатаОтправления;
		ДатаВозвращения = Маршрут[0].ДатаВозвращения;
		АдресПодачи = Маршрут[0].ПунктОтправления;
		ПунктНазначения = Маршрут[0].ПунктНазначения;  //24.03.20 Самсонов М.А. добавляем поля
		
		Для НомерСтроки = 1 По Маршрут.Количество() - 1 Цикл
			
			ПоказаниеОдометраДо = Мин(ПоказаниеОдометраДо, Маршрут[НомерСтроки].ПоказаниеОдометраДо);
			ПоказаниеОдометраПосле = Макс(ПоказаниеОдометраПосле, Маршрут[НомерСтроки].ПоказаниеОдометраПосле);
			ДатаОтправления = Мин(ДатаОтправления, Маршрут[НомерСтроки].ДатаОтправления);
			ДатаВозвращения = Макс(ДатаВозвращения, Маршрут[НомерСтроки].ДатаВозвращения);
			
		КонецЦикла;
		
	Иначе
		
		ПоказаниеОдометраДо = 0;
		ПоказаниеОдометраПосле = 0;
		ДатаОтправления = '00010101';
		ДатаВозвращения = '00010101';
		АдресПодачи = "";
		ПунктНазначения = ""; //24.03.20 Самсонов М.А. добавляем поля	
		
	КонецЕсли;
	
	ДанныеДокумента.Вставить("ПоказаниеОдометраДо",    ПоказаниеОдометраДо);
	ДанныеДокумента.Вставить("ПоказаниеОдометраПосле", ПоказаниеОдометраПосле);
	ДанныеДокумента.Вставить("ДатаОтправления",        ДатаОтправления);
	ДанныеДокумента.Вставить("ДатаВозвращения",        ДатаВозвращения);
	ДанныеДокумента.Вставить("АдресПодачи",            АдресПодачи);
	ДанныеДокумента.Вставить("ПробегАвтомобиля",       Маршрут.Итог("ПробегАвтомобиля"));
	ДанныеДокумента.Вставить("Расход",                 Маршрут.Итог("Расход"));
	ДанныеДокумента.Вставить("ПунктНазначения",        ПунктНазначения); //24.03.20 Самсонов М.А. добавляем поля
	
	
КонецПроцедуры

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

#Область СчетаУчета

Процедура УстановитьПравилаЗаполненияСчетовУчета(Правила) Экспорт
	
	// Шапка
	СчетаУчетаВДокументах.ДобавитьПравилоЗаполнения(Правила, "", "СчетЗатрат", "СодержаниеСлужебногоТранспорта");
	
	СчетаУчетаВДокументах.ДобавитьПодчиненноеПравилоЗаполнения(Правила, "Субконто1", "СубконтоЗатрат1");
	СчетаУчетаВДокументах.ДобавитьПодчиненноеПравилоЗаполнения(Правила, "Субконто2", "СубконтоЗатрат2");
	СчетаУчетаВДокументах.ДобавитьПодчиненноеПравилоЗаполнения(Правила, "Субконто3", "СубконтоЗатрат3");
	СчетаУчетаВДокументах.ДобавитьПодчиненноеПравилоЗаполнения(Правила, "ПодразделениеЗатрат", "ПодразделениеЗатрат");
	
	СчетаУчетаВДокументах.ДобавитьВПравилоОписаниеРеквизитаДокумента(Правила, "Организация");
	СчетаУчетаВДокументах.ДобавитьВПравилоОписаниеРеквизитаДокумента(Правила, "Подразделение", "ПодразделениеОрганизации");
	
КонецПроцедуры

Функция РеквизитыЗаСсылками() Экспорт
	
	РеквизитыЗаСсылками = Новый Соответствие;
	
	АналитикаУчета = Новый Массив;
	АналитикаУчета.Добавить("СчетЗатрат");
	АналитикаУчета.Добавить("ПодразделениеЗатрат");
	АналитикаУчета.Добавить("Субконто1");
	АналитикаУчета.Добавить("Субконто2");
	АналитикаУчета.Добавить("Субконто3");
	АналитикаУчета.Добавить("ОтражениеВУСН");
	
	Для Каждого ИмяРеквизита Из АналитикаУчета Цикл
		РеквизитыЗаСсылками.Вставить(ИмяРеквизита, "ПорядокУчетаЗатрат");
	КонецЦикла;
	
	Возврат РеквизитыЗаСсылками;
	
КонецФункции

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

#Область ОбработчикиОбновления

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

// Проверяет, все ли документы были обработаны процедурой ЗаполнитьРеквизитыПодписавшегоДокументПоУмолчанию()
//
// Параметры:
//   Параметры - Структура - см. документацию к БСП.
//
// Возвращаемое значение:
//   Булево - если Истина, то можно редактировать и записывать данные, Ложь - данные недоступны, пока не будут обработаны процедурой обновления.
//
Функция РеквизитыПодписавшегоЛицаОбработаны(Параметры) Экспорт

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

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

// Проверяет, все ли документы были обработаны процедурой ЗаполнитьРеквизитыНДСПоУмолчанию()
//
// Параметры:
//   Параметры - Структура - см. документацию к БСП.
//
// Возвращаемое значение:
//   Булево - если Ложь, то можно редактировать и записывать данные,
//                 Истина - данные недоступны, пока не будут обработаны процедурой обновления.
//
Функция РеквизитыНДСОбработаны(Параметры) Экспорт

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

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

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

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

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

#Область ПодготовкаПараметровПроведенияДокумента

Функция ПодготовитьПараметрыПроведения(ДокументСсылка, Отказ) Экспорт

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

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

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

// НДС заполняется для режимов налогообложения, которые предусматривают уплату НДС,
// а также для УСН 15% (доходы - расходы) - для отражения в регистре "Расходы при УСН"
// (Письмо Минфина РФ от 5 сентября 2014 г. N 03-11-06/2/44783 -
// подтверждающим документом для указания НДС в КУДиР является в том числе и кассовый чек с выделенной суммой НДС)
//
// Параметры:
//   Организация - СправочникСсылка.Организации - Организация, для которой необходимо проверить режим выделения НДС
//   Дата        - Дата - Дата, на действие которой необходимо проверить режим выделения НДС
//
// Возвращаемое значение:
//   Булево
//
Функция ВыделятьНДС(Организация, Дата) Экспорт
	
	Возврат  УчетнаяПолитика.ПлательщикНДС(Организация, Дата)
		Или УчетнаяПолитика.ПрименяетсяУСНДоходыМинусРасходы(Организация, Дата);
	
КонецФункции

// Возвращает период действия отображения реквизита Вид сообщения в форме
// (Приказ Минтранса России от 28.09.2022 N 390)
//
// Возвращаемое значение:
//   Структура
//    * ДатаНачала - Дата
//    * ДатаОкончания - Дата
//
Функция ПериодОтображенияВидаСообщения() Экспорт
	
	Результат = Новый Структура("ДатаНачала, ДатаОкончания");
	Результат.ДатаНачала = '20230301';
	Результат.ДатаОкончания = '20290301';
	
	Возврат Результат;
	
КонецФункции

// Возвращает признак отображения реквизита "Вид сообщения" для путевого листа
// (Приказ Минтранса России от 28.09.2022 N 390)
//
// Параметры:
//   Период - Дата - Дата документа
//
// Возвращаемое значение:
//   Булево
//
Функция ОтображатьВидСообщения(Период) Экспорт
	
	ПериодОтображенияВидаСообщения = ПериодОтображенияВидаСообщения();
	Если Период >= ПериодОтображенияВидаСообщения.ДатаНачала И Период < ПериодОтображенияВидаСообщения.ДатаОкончания Тогда
		Возврат Истина;
	Иначе
		Возврат Ложь;
	КонецЕсли;
	
КонецФункции

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

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

// Мастаб печати для печатной формы "Путевой лист (форма №3)"
Функция МасштабПечатиТиповойФормыПутевогоЛиста()
	
	Возврат 135;
	
КонецФункции

Функция ФормаСобственностиРодительныйПадеж(ЭтоЮрЛицо)
	
	Если ЭтоЮрЛицо Тогда
		Возврат Нстр("ru = 'организации'");
	Иначе
		Возврат Нстр("ru = 'предпринимателя'");
	КонецЕсли;
	
КонецФункции

Функция ВыводитьОбластьСведенийОПеревозке_2021(ДатаДокумента)
	
	Возврат ДатаДокумента >= '20210101' И ДатаДокумента < '20230301';
	
КонецФункции

Функция ВыводитьОбластьСведенийОПеревозке_2023(ДатаДокумента)
	
	ПериодДействия = ПериодОтображенияВидаСообщения();
	
	Возврат ДатаДокумента >= ПериодДействия.ДатаНачала И ДатаДокумента < ПериодДействия.ДатаОкончания;
	
КонецФункции

Процедура ОбластьШапкиПутевогоЛистаПередВыводом(ОбластьШапка, ДатаДокумента)
	
	// Согласно Приказа Минтранса №368 от 11.09.2020 г.
	// необходимо выводить реквизит сведения о перевозке.
	// Данное требование действует с 01.01.2021 по 28.02.2023.
	
	Если Не ВыводитьОбластьСведенийОПеревозке_2021(ДатаДокумента)
		И ОбластьШапка.Области.Найти("СведенияОПеревозке_2021") <> Неопределено Тогда
		
		ОбластьШапка.УдалитьОбласть(
			ОбластьШапка.Области.СведенияОПеревозке_2021,
			ТипСмещенияТабличногоДокумента.ПоГоризонтали);
		
	КонецЕсли;
	
	// Приказ Минтранса России от 28.09.2022 N 390:
	// необходимо указывать вид перевозки и вид сообщения.
	// Данное требование действует с 01.03.2023 г. до 01.03.2029 г.
	
	Если Не ВыводитьОбластьСведенийОПеревозке_2023(ДатаДокумента)
		И ОбластьШапка.Области.Найти("СведенияОПеревозке_2023") <> Неопределено Тогда
		
		ОбластьШапка.УдалитьОбласть(
			ОбластьШапка.Области.СведенияОПеревозке_2023,
			ТипСмещенияТабличногоДокумента.ПоГоризонтали);
		
	КонецЕсли;
	
КонецПроцедуры

#Область ТекстыЗапросовПодготовкаПараметровПроведенияДокумента

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

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

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

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

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

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

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

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

#КонецЕсли

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Back to Top