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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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



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

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

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




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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьОтветственныхЛиц(ДанныеСтроки)
	
	ОтветственныеЛица = ОтветственныеЛицаБП.ОтветственныеЛица(ДанныеСтроки.Организация, ДанныеСтроки.Дата);
	
	ДанныеСтроки.Вставить("Ответственный", ОтветственныеЛица.РуководительПредставление);
	ДанныеСтроки.Вставить("ДолжностьОтветственного", ОтветственныеЛица.РуководительДолжностьПредставление);
	
	Если ПустаяСтрока(ОтветственныеЛица.РуководительДолжностьПредставление) Тогда
		ДанныеСтроки.Вставить("ДолжностьОтветственного", СтрШаблон(Нстр("ru = 'Генеральный директор'")));
	КонецЕсли;
		
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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

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

Back to Top