Как сделать дату в формате «"ДД" Месяц ГГГГ» в 1С?

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

Часто при формировании печатных форм, например, кадровых приказов или договоров, возникает необходимость вывести дату в специфическом виде: день должен быть заключен в двойные кавычки, а месяц написан прописью (например, "16" февраля 2022). Рассмотрим подробнее, как решить эту задачу в 1С, так как стандартная функция Формат со встроенными двойными кавычками может вызывать сложности из-за необходимости их правильного экранирования.

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

Способ 1: Прямое экранирование кавычек в функции Формат

Если мы хотим решить задачу исключительно с помощью одной функции Формат, нам придется использовать довольно громоздкую конструкцию. В 1С одинарные и двойные кавычки внутри строковых литералов требуют многократного дублирования (экранирования).

Проанализируем пример кода, который возвращает нужный результат:


ТекущаяДатаДокумента = ТекущаяДата();
СтрокаДаты = Формат(ТекущаяДатаДокумента, "ДФ='''""''дд''""'' ММММ гггг'");
Сообщить(СтрокаДаты); // Выведет: "16" февраля 2022

Этот метод работает, но его трудно читать и поддерживать. Легко запутаться в количестве символов ' и ".

Способ 2: Использование СтрЗаменить и кода символа

Выясним, как сделать код более читаемым. Мы можем использовать временный символ-заглушку в функции форматирования, а затем заменить его на двойную кавычку с помощью функции СтрЗаменить. Двойная кавычка в таблице символов имеет код 34, поэтому мы воспользуемся функцией Символ.


// Форматируем дату с символом подчеркивания
СтрокаСЗаглушкой = Формат(ТекущаяДата(), "ДФ='_дд_ ММММ гггг'");

// Заменяем подчеркивание на кавычки
СтрокаДаты = СтрЗаменить(СтрокаСЗаглушкой, "_", Символ(34));

Важно: в старых версиях платформы (1С 7.7) использовалась функция Симв(34), однако в современных версиях 8.x необходимо применять Символ(34).

Способ 3: Использование СтрШаблон (Современный подход)

Начиная с версии платформы 8.3.6, разработчикам доступна мощная функция СтрШаблон. Посмотрим на пример ее использования. Она позволяет задать четкую структуру строки и подставить в нее отформатированные фрагменты даты по отдельности.


ДеньСтрокой = Формат(ТекущаяДата(), "ДФ=dd");
МесяцГодСтрокой = Формат(ТекущаяДата(), "ДФ='ММММ гггг'");

// Подставляем параметры в шаблон
СтрокаДаты = СтрШаблон("""%1"" %2", ДеньСтрокой, МесяцГодСтрокой);

Этот подход делает код чистым и интуитивно понятным.

Способ 4: Простая конкатенация строк

Чтобы вообще избежать путаницы с вложенными кавычками, мы можем разбить дату на части и просто "склеить" их оператором +. В 1С для вывода одной двойной кавычки внутри строки нужно написать две подряд.

Рассмотрим этот классический метод:


СтрокаДаты = """" + Формат(ТекущаяДата(), "ДФ=dd") + """ " + Формат(ТекущаяДата(), "ДФ='ММММ гггг'");

Способ 5: Использование альтернативных кавычек

Если нет жесткого требования использовать именно прямые двойные кавычки ("), мы можем использовать "елочки" («») или "лапки" (“”). Они не воспринимаются компилятором как служебные символы строки, поэтому легко встраиваются прямо в параметр формата. Для автоматического преобразования символов в готовом тексте печатных форм можно использовать функцию замены обычных кавычек на кавычки-ёлочки.


// Вариант с елочками
СтрокаДатыЕлочки = Формат(ТекущаяДата(), "ДФ='«dd» MMMM yyyy'");

// Вариант с лапками
СтрокаДатыЛапки = Формат(ТекущаяДата(), "ДФ='“dd“ MMMM yyyy'");

Как это реализовано в типовых конфигурациях (ЗУП, ERP)

В типовых конфигурациях фирмы 1С (например, в 1С:ЗУП) для формирования даты в документах (таких как трудовые договоры) разработчики стараются избегать сложного экранирования в функции Формат. Чаще всего применяется разбиение на составляющие или использование функций БСП (Библиотеки стандартных подсистем), таких как СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку, где день, месяц и год передаются отдельными параметрами, что аналогично применению СтрШаблон.

Подведем итог: для получения даты формата "16" февраля 2022 мы рекомендуем использовать функцию СтрШаблон или простую конкатенацию строк. Эти методы наиболее понятны, легко читаются другими разработчиками и минимизируют риск синтаксических ошибок при работе с кавычками.

← На главную