Поступило задание, вести путевые листы для транспортного участка предприятия. Но документ в стандартной конфигурации не отвечает требованиям и имеет ряд недочетов.
Пример стандартного бланка:
Далее был утвержден бланк путевого листа с необходимыми реквизитами согласно законодательства РФ.
Вот что получилось:
Добавили необходимые реквизиты и максимально упростили оформление документа проставив стандартные реквизиты диспетчера, мед. работника и т.д.
Чтобы не «ломать» стандартную форму 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
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
НомераТаблиц.Вставить("ТаблицаНДС", НомераТаблиц.Количество());
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли