При создании печатных форм документов (например, счетов на оплату, накладных или актов) часто возникает задача вывести дату в шапке документа в расширенном формате — с месяцем прописью (например, «07 августа 2017 г.»), а также корректно рассчитать итоговые суммы. Разберем по шагам, как правильно настроить форматирование даты в коде и в самом макете, а также как вывести итоговые данные документа.
Проанализируем ситуацию: когда используется стандартный метод Шапка.Параметры.Заполнить(Выборка);, платформа автоматически сопоставляет поля выборки запроса с одноименными параметрами ячеек макета. При этом дата подставляется в стандартном системном виде.
Чтобы задать нужный формат даты (день, месяц прописью и год), необходимо явно перезаписать значение параметра после вызова метода автоматического заполнения. Обратите внимание: присвоение должно идти строго после метода Заполнить(), иначе автоматическое заполнение перетрет отформатированную строку.
Рассмотрим, как выглядит обновленный фрагмент кода процедуры печати:
// Получаем область шапки из макета
Шапка = Макет.ПолучитьОбласть("Шапка");
// Заполняем основные параметры из выборки запроса
Шапка.Параметры.Заполнить(Выборка);
// Переопределяем вывод даты с нужным форматом
Шапка.Параметры.Дата = Формат(Выборка.Дата, "ДФ=""'""""'дд'""""' ММММ гггг 'г.'""");
// Либо вариант с локальным длинным форматом даты:
// Шапка.Параметры.Дата = Формат(Выборка.Дата, "ДЛФ=DD");
// Выводим область в результирующий табличный документ
ТабДок.Вывести(Шапка, Выборка.Уровень());
Посмотрим на варианты форматирующих строк для функции Формат():
"ДЛФ=DD" — использует длинный формат даты платформы (выводит число, полное наименование месяца и год)."ДФ=""'""""'дд'""""' ММММ гггг 'г.'""" — формирует кавычки вокруг числа и добавляет суффикс года: "07" августа 2017 г."ДФ='dd MMMM yyyy ""г.""'" — выводит дату вида 07 августа 2017 г.Если ячейка в мапе табличного документа настроена со свойством Заполнение: Шаблон, мы можем вовсе не модифицировать код обработчика печати. Платформа 1С позволяет задавать формат прямо внутри выражения шаблона.
Разберем синтаксис шаблона в ячейке макета:
? прямо в квадратных скобках:
Счет на оплату № [Номер] от [Дата ? ДЛФ=DD]
[Дата ? ДФ='dd MMMM yyyy "г."']При таком подходе вызов Шапка.Параметры.Заполнить(Выборка); автоматически применит указанную маску форматирования к полю Дата без дополнительных строк кода.
После вывода табличной части документа почти всегда требуется сформировать подвал с итоговыми суммами (включая сумму прописью). Рассмотрим основные способы получения итога:
Самый простой способ, не требующий изменения исходного запроса к базе данных. Объявляем переменную до начала перебора строк табличной части и суммируем значения:
ИтогСумма = 0;
ВыборкаТовары = Выборка.Товары.Выбрать();
Пока ВыборкаТовары.Следующий() Цикл
ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());
// Накапливаем итоговую сумму
ИтогСумма = ИтогСумма + ВыборкаТовары.Сумма;
КонецЦикла;
// Заполняем область подвала
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.ИтогоСумма = ИтогСумма;
ОбластьПодвал.Параметры.СуммаПрописью = ЧислоПрописью(ИтогСумма, "L=ru_RU; ДП=Истина", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
ТабДок.Вывести(ОбластьПодвал);
Если в процедуру печати передана ссылка на документ, можно воспользоваться встроенным методом коллекции строк табличной части Итог():
ИтогСумма = Ссылка.Товары.Итог("Сумма");
Если печать оптимизируется под большие объемы данных, расчет итогов целесообразно вынести в сам запрос с помощью конструкции ИТОГИ СУММА(Сумма) ПО Ссылка либо выбрав реквизит шапки (если в документе предусмотрен реквизит СуммаДокумента).