Как отформатировать дату и вывести итоговую сумму в печатной форме документа 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При создании печатных форм документов (например, счетов на оплату, накладных или актов) часто возникает задача вывести дату в шапке документа в расширенном формате — с месяцем прописью (например, «07 августа 2017 г.»), а также корректно рассчитать итоговые суммы. Разберем по шагам, как правильно настроить форматирование даты в коде и в самом макете, а также как вывести итоговые данные документа.

Способ 1. Переопределение параметра даты в коде процедуры печати

Проанализируем ситуацию: когда используется стандартный метод Шапка.Параметры.Заполнить(Выборка);, платформа автоматически сопоставляет поля выборки запроса с одноименными параметрами ячеек макета. При этом дата подставляется в стандартном системном виде.

Чтобы задать нужный формат даты (день, месяц прописью и год), необходимо явно перезаписать значение параметра после вызова метода автоматического заполнения. Обратите внимание: присвоение должно идти строго после метода Заполнить(), иначе автоматическое заполнение перетрет отформатированную строку.

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


// Получаем область шапки из макета
Шапка = Макет.ПолучитьОбласть("Шапка");

// Заполняем основные параметры из выборки запроса
Шапка.Параметры.Заполнить(Выборка);

// Переопределяем вывод даты с нужным форматом
Шапка.Параметры.Дата = Формат(Выборка.Дата, "ДФ=""'""""'дд'""""' ММММ гггг 'г.'""");
// Либо вариант с локальным длинным форматом даты:
// Шапка.Параметры.Дата = Формат(Выборка.Дата, "ДЛФ=DD");

// Выводим область в результирующий табличный документ
ТабДок.Вывести(Шапка, Выборка.Уровень());

Посмотрим на варианты форматирующих строк для функции Формат():

  1. Строка формата "ДЛФ=DD" — использует длинный формат даты платформы (выводит число, полное наименование месяца и год).
  2. Строка формата "ДФ=""'""""'дд'""""' ММММ гггг 'г.'""" — формирует кавычки вокруг числа и добавляет суффикс года: "07" августа 2017 г.
  3. Строка формата "ДФ='dd MMMM yyyy ""г.""'" — выводит дату вида 07 августа 2017 г.

Способ 2. Форматирование даты непосредственно в ячейке-шаблоне макета

Если ячейка в мапе табличного документа настроена со свойством Заполнение: Шаблон, мы можем вовсе не модифицировать код обработчика печати. Платформа 1С позволяет задавать формат прямо внутри выражения шаблона.

Разберем синтаксис шаблона в ячейке макета:

  1. Откройте табличный документ (макет печатной формы) в конфигураторе.
  2. Найдите ячейку с текстом заголовка или даты.
  3. Укажите формат через специальный разделитель ? прямо в квадратных скобках:
    Счет на оплату № [Номер] от [Дата ? ДЛФ=DD]
    или
    [Дата ? ДФ='dd MMMM yyyy "г."']

При таком подходе вызов Шапка.Параметры.Заполнить(Выборка); автоматически применит указанную маску форматирования к полю Дата без дополнительных строк кода.

Как получить и вывести итоговую сумму документа

После вывода табличной части документа почти всегда требуется сформировать подвал с итоговыми суммами (включая сумму прописью). Рассмотрим основные способы получения итога:

  1. Накопление суммы в цикле вывода строк:

    Самый простой способ, не требующий изменения исходного запроса к базе данных. Объявляем переменную до начала перебора строк табличной части и суммируем значения:

    
    ИтогСумма = 0;
    ВыборкаТовары = Выборка.Товары.Выбрать();
    
    Пока ВыборкаТовары.Следующий() Цикл
        ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
        ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());
        
        // Накапливаем итоговую сумму
        ИтогСумма = ИтогСумма + ВыборкаТовары.Сумма;
    КонецЦикла;
    
    // Заполняем область подвала
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.ИтогоСумма = ИтогСумма;
    ОбластьПодвал.Параметры.СуммаПрописью = ЧислоПрописью(ИтогСумма, "L=ru_RU; ДП=Истина", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
    ТабДок.Вывести(ОбластьПодвал);
    
  2. Получение итога через объект ссылки:

    Если в процедуру печати передана ссылка на документ, можно воспользоваться встроенным методом коллекции строк табличной части Итог():

    ИтогСумма = Ссылка.Товары.Итог("Сумма");
  3. Расчет итогов в тексте запроса:

    Если печать оптимизируется под большие объемы данных, расчет итогов целесообразно вынести в сам запрос с помощью конструкции ИТОГИ СУММА(Сумма) ПО Ссылка либо выбрав реквизит шапки (если в документе предусмотрен реквизит СуммаДокумента).

← На главную