Как отформатировать дату в ячейке макета типа Шаблон в 1С

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

При разработке и редактировании печатных форм в 1С:Предприятии часто возникает задача вывести строковый текст, в середину которого вставлена дата документа. Типовой реквизит типа Дата в платформе 1С всегда содержит как календарную часть, так и время. Если просто поместить такой параметр в ячейку с типом заполнения Шаблон, дата выводится вместе со временем (например, 15.01.2024 0:00:00).

Попытка вызвать функцию форматирования прямо в тексте шаблона вида [Формат(ДатаДок, "ДЛФ=Д")] приводит к ошибке или выводу пустого значения. Разберем особенности работы табличного документа и выясним, как правильно решить эту задачу.

Почему функция Формат() не работает внутри шаблона ячейки

Проанализируем ограничения платформы 1С при работе с табличными документами:

  1. Отсутствие вычисления выражений в шаблонах: в ячейках с типом заполнения Шаблон текст внутри квадратных скобок [...] воспринимается платформой строго как имя параметра (идентификатор). Встроенный язык 1С (функции Формат(), Строка(), математические операции и вызовы методов) внутри макета не компилируется и не исполняется.
  2. Ограничение свойства ячейки «Формат»: палитра свойств ячейки позволяет задать формат отображения только тогда, когда ячейка имеет тип заполнения Параметр. Если ячейка настроена как Шаблон, свойство Формат игнорируется для внутренних подставляемых параметров.

Способ 1. Форматирование даты в коде перед выводом области

Рассмотрим основной и самый правильный подход. В макете в ячейке-шаблоне оставляем просто имя параметра в скобках, например: ...по договору от [ДатаДок] года.... Преобразование даты в строку нужного формата выполняем в модуле формирования печатной формы с помощью функции Формат().

Посмотрим на пример явного присвоения значения параметру области:


Область = Макет.ПолучитьОбласть("СтрокаДоговора");
Область.Параметры.ДатаДок = Формат(Выборка.ДатаДок, "ДЛФ=Д");
ТабДок.Вывести(Область);

Если в коде используется метод группового заполнения Область.Параметры.Заполнить(...), строковое представление даты можно переопределить сразу после него:


Область = Макет.ПолучитьОбласть("СтрокаДоговора");
Область.Параметры.Заполнить(Выборка);
Область.Параметры.ДатаДок = Формат(Выборка.ДатаДок, "ДЛФ=Д");
ТабДок.Вывести(Область);

Наиболее часто используемые варианты форматной строки для дат:

  1. "ДЛФ=Д" — краткая дата (например, 15.01.2024).
  2. "ДЛФ=DD" — дата прописью с месяцем (например, 15 января 2024 г.).
  3. "ДФ=dd.MM.yyyy" — явный формат даты с разделителями-точками.

Способ 2. Подготовка данных в источнике

Разберем ситуацию, когда печатная форма формируется на основе структуры данных или таблицы значений. В этом случае строковое представление даты целесообразно сформировать заранее при заполнении структуры:


ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("НомерДоговора", Выборка.Номер);
ПараметрыПечати.Вставить("ДатаДок", Формат(Выборка.Дата, "ДЛФ=DD"));

Область.Параметры.Заполнить(ПараметрыПечати);

Способ 3. Вынесение даты в отдельную ячейку макета

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

  1. В первой колонке размещается статический текст до даты (тип заполнения — Текст).
  2. Во второй колонке размещается сама дата (тип заполнения — Параметр), и для этой ячейки в свойствах задается нужный формат через палитру свойств.
  3. В третьей колонке размещается остальной текст (тип заполнения — Текст).

Важно: этот способ требует ручной подгонки ширины колонок и выравнивания, поэтому для динамического текста с переменной длиной реквизитов рекомендуется использовать программное форматирование даты в коде.

Особенности работы в типовых конфигурациях (1С:ЗУП 3.1, 1С:БП 3.0, 1С:ERP)

В типовых конфигурациях на базе БСП макеты часто формируются менеджерами печати. Если необходимо изменить отображение даты в стандартной печатной форме, не снимая конфигурацию с поддержки, используем следующие варианты:

  1. Внешняя печатная форма: создаем внешнюю обработку по стандартам БСП, переносим макет и код процедуры печати, где форматируем параметр ДатаДок нужным образом.
  2. Расширение конфигурации: перехватываем процедуру печати в модуле менеджера соответствующего документа с помощью аннотации &Вместо или &После и корректируем значение параметра области перед отправкой в табличный документ.
← На главную