Часто при формировании печатных форм, например, кадровых приказов или договоров, возникает необходимость вывести дату в специфическом виде: день должен быть заключен в двойные кавычки, а месяц написан прописью (например, "16" февраля 2022). Рассмотрим подробнее, как решить эту задачу в 1С, так как стандартная функция Формат со встроенными двойными кавычками может вызывать сложности из-за необходимости их правильного экранирования.
Разберем по шагам несколько рабочих способов получения нужной строки, от классических до самых современных.
Если мы хотим решить задачу исключительно с помощью одной функции Формат, нам придется использовать довольно громоздкую конструкцию. В 1С одинарные и двойные кавычки внутри строковых литералов требуют многократного дублирования (экранирования).
Проанализируем пример кода, который возвращает нужный результат:
ТекущаяДатаДокумента = ТекущаяДата();
СтрокаДаты = Формат(ТекущаяДатаДокумента, "ДФ='''""''дд''""'' ММММ гггг'");
Сообщить(СтрокаДаты); // Выведет: "16" февраля 2022
Этот метод работает, но его трудно читать и поддерживать. Легко запутаться в количестве символов ' и ".
Выясним, как сделать код более читаемым. Мы можем использовать временный символ-заглушку в функции форматирования, а затем заменить его на двойную кавычку с помощью функции СтрЗаменить. Двойная кавычка в таблице символов имеет код 34, поэтому мы воспользуемся функцией Символ.
// Форматируем дату с символом подчеркивания
СтрокаСЗаглушкой = Формат(ТекущаяДата(), "ДФ='_дд_ ММММ гггг'");
// Заменяем подчеркивание на кавычки
СтрокаДаты = СтрЗаменить(СтрокаСЗаглушкой, "_", Символ(34));
Важно: в старых версиях платформы (1С 7.7) использовалась функция Симв(34), однако в современных версиях 8.x необходимо применять Символ(34).
Начиная с версии платформы 8.3.6, разработчикам доступна мощная функция СтрШаблон. Посмотрим на пример ее использования. Она позволяет задать четкую структуру строки и подставить в нее отформатированные фрагменты даты по отдельности.
ДеньСтрокой = Формат(ТекущаяДата(), "ДФ=dd");
МесяцГодСтрокой = Формат(ТекущаяДата(), "ДФ='ММММ гггг'");
// Подставляем параметры в шаблон
СтрокаДаты = СтрШаблон("""%1"" %2", ДеньСтрокой, МесяцГодСтрокой);
Этот подход делает код чистым и интуитивно понятным.
Чтобы вообще избежать путаницы с вложенными кавычками, мы можем разбить дату на части и просто "склеить" их оператором +. В 1С для вывода одной двойной кавычки внутри строки нужно написать две подряд.
Рассмотрим этот классический метод:
СтрокаДаты = """" + Формат(ТекущаяДата(), "ДФ=dd") + """ " + Формат(ТекущаяДата(), "ДФ='ММММ гггг'");
Если нет жесткого требования использовать именно прямые двойные кавычки ("), мы можем использовать "елочки" («») или "лапки" (“”). Они не воспринимаются компилятором как служебные символы строки, поэтому легко встраиваются прямо в параметр формата. Для автоматического преобразования символов в готовом тексте печатных форм можно использовать функцию замены обычных кавычек на кавычки-ёлочки.
// Вариант с елочками
СтрокаДатыЕлочки = Формат(ТекущаяДата(), "ДФ='«dd» MMMM yyyy'");
// Вариант с лапками
СтрокаДатыЛапки = Формат(ТекущаяДата(), "ДФ='“dd“ MMMM yyyy'");
В типовых конфигурациях фирмы 1С (например, в 1С:ЗУП) для формирования даты в документах (таких как трудовые договоры) разработчики стараются избегать сложного экранирования в функции Формат. Чаще всего применяется разбиение на составляющие или использование функций БСП (Библиотеки стандартных подсистем), таких как СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку, где день, месяц и год передаются отдельными параметрами, что аналогично применению СтрШаблон.
Подведем итог: для получения даты формата "16" февраля 2022 мы рекомендуем использовать функцию СтрШаблон или простую конкатенацию строк. Эти методы наиболее понятны, легко читаются другими разработчиками и минимизируют риск синтаксических ошибок при работе с кавычками.