При разработке и редактировании печатных форм в 1С:Предприятии часто возникает задача вывести строковый текст, в середину которого вставлена дата документа. Типовой реквизит типа Дата в платформе 1С всегда содержит как календарную часть, так и время. Если просто поместить такой параметр в ячейку с типом заполнения Шаблон, дата выводится вместе со временем (например, 15.01.2024 0:00:00).
Попытка вызвать функцию форматирования прямо в тексте шаблона вида [Формат(ДатаДок, "ДЛФ=Д")] приводит к ошибке или выводу пустого значения. Разберем особенности работы табличного документа и выясним, как правильно решить эту задачу.
Проанализируем ограничения платформы 1С при работе с табличными документами:
[...] воспринимается платформой строго как имя параметра (идентификатор). Встроенный язык 1С (функции Формат(), Строка(), математические операции и вызовы методов) внутри макета не компилируется и не исполняется.Рассмотрим основной и самый правильный подход. В макете в ячейке-шаблоне оставляем просто имя параметра в скобках, например: ...по договору от [ДатаДок] года.... Преобразование даты в строку нужного формата выполняем в модуле формирования печатной формы с помощью функции Формат().
Посмотрим на пример явного присвоения значения параметру области:
Область = Макет.ПолучитьОбласть("СтрокаДоговора");
Область.Параметры.ДатаДок = Формат(Выборка.ДатаДок, "ДЛФ=Д");
ТабДок.Вывести(Область);
Если в коде используется метод группового заполнения Область.Параметры.Заполнить(...), строковое представление даты можно переопределить сразу после него:
Область = Макет.ПолучитьОбласть("СтрокаДоговора");
Область.Параметры.Заполнить(Выборка);
Область.Параметры.ДатаДок = Формат(Выборка.ДатаДок, "ДЛФ=Д");
ТабДок.Вывести(Область);
Наиболее часто используемые варианты форматной строки для дат:
"ДЛФ=Д" — краткая дата (например, 15.01.2024)."ДЛФ=DD" — дата прописью с месяцем (например, 15 января 2024 г.)."ДФ=dd.MM.yyyy" — явный формат даты с разделителями-точками.Разберем ситуацию, когда печатная форма формируется на основе структуры данных или таблицы значений. В этом случае строковое представление даты целесообразно сформировать заранее при заполнении структуры:
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("НомерДоговора", Выборка.Номер);
ПараметрыПечати.Вставить("ДатаДок", Формат(Выборка.Дата, "ДЛФ=DD"));
Область.Параметры.Заполнить(ПараметрыПечати);
Если по каким-то причинам нет возможности редактировать программный код (например, настраивается простой отчет без использования модулей), строку можно разделить на несколько колонок:
Важно: этот способ требует ручной подгонки ширины колонок и выравнивания, поэтому для динамического текста с переменной длиной реквизитов рекомендуется использовать программное форматирование даты в коде.
В типовых конфигурациях на базе БСП макеты часто формируются менеджерами печати. Если необходимо изменить отображение даты в стандартной печатной форме, не снимая конфигурацию с поддержки, используем следующие варианты:
ДатаДок нужным образом.&Вместо или &После и корректируем значение параметра области перед отправкой в табличный документ.