В процессе разработки на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с необходимостью вывести дату в красивом «человекочитаемом» виде, например: «25 ноября 2021 г.». Несмотря на кажущуюся простоту, стандартная функция Формат() в версии 7.7 имеет свои специфические особенности и синтаксис, который существенно отличается от более современной версии 8.х. В этой статье мы подробно разберем, как правильно составить форматную строку, почему не работают примеры из интернета для «восьмерки» и как добиться нужного результата разными способами.
Проанализируем ситуацию, с которой столкнулся автор вопроса. Попытка использовать конструкцию ДЛФ=ДД сразу выдает ошибку или не приносит результата, так как этот синтаксис (Локальный Формат Даты) появился только в версии 1С 8.0. В «семерке» система просто не понимает такие параметры. Также важно помнить, что 1С 7.7 очень чувствительна к количеству символов в форматной строке и их регистру.
Если вы используете конструкцию типа "Д ММММГГ", система выведет сокращенный год и месяц, что и привело к результату «Декабрь 21 г.». Наша задача — расширить эту строку, чтобы включить число и полный год.
Рассмотрим самый быстрый и правильный способ решения задачи через программный код. Для получения даты вида «25 ноября 2021 г.» необходимо использовать форматную строку "Д ДДММММГГГГ". Разберем по шагам, что означает каждый символ в этой строке:
Посмотрим на пример правильного кода:
// Пример вывода текущей даты в нужном формате
ТекДата = ТекущаяДата();
Результат = Формат(ТекДата, "Д ДДММММГГГГ");
Сообщить(Результат); // Выведет: 25 Ноября 2021 г.
Обратите внимание: если вам нужно, чтобы для чисел меньше 10 впереди не стоял ноль (например, «5 ноября» вместо «05 ноября»), используйте одну букву «Д» для числа: "Д ДММММГГГГ".
В текстовых сообщениях или при формировании строк для вывода в отчеты часто удобно использовать функцию Шаблон(). Выясним, как применить форматирование внутри квадратных скобок. Здесь важно соблюдать правильный синтаксис разделения функции и строки формата через символ решетки #.
// Использование внутри шаблона
ТекстДляВывода = Шаблон("[ТекущаяДата()#Д ДДММММГГГГ]");
Сообщить(ТекстДляВывода);
Важно помнить, что внутри шаблона вся форматная строка, включая символ Д, должна следовать сразу после знака # без лишних кавычек.
Проанализируем ситуацию, когда встроенная функция Формат() не подходит. В некоторых конфигурациях и региональных настройках 1С 7.7 может выводить месяц в именительном падеже («Ноябрь»), а для фразы «25 ноября» требуется родительный падеж. В 1С 7.7 нет встроенного механизма склонения дат, поэтому программисты используют «ручную сборку».
Разберем, как это реализовать с помощью массива или списка значений:
Функция глПолучитьДатуПрописью(ВхДата)
Если ПустоеЗначение(ВхДата) = 1 Тогда
Возврат "";
КонецЕсли;
СписокМесяцев = СоздатьОбъект("СписокЗначений");
СписокМесяцев.ДобавитьЗначение("января");
СписокМесяцев.ДобавитьЗначение("февраля");
СписокМесяцев.ДобавитьЗначение("марта");
СписокМесяцев.ДобавитьЗначение("апреля");
СписокМесяцев.ДобавитьЗначение("мая");
СписокМесяцев.ДобавитьЗначение("июня");
СписокМесяцев.ДобавитьЗначение("июля");
СписокМесяцев.ДобавитьЗначение("августа");
СписокМесяцев.ДобавитьЗначение("сентября");
СписокМесяцев.ДобавитьЗначение("октября");
СписокМесяцев.ДобавитьЗначение("ноября");
СписокМесяцев.ДобавитьЗначение("декабря");
День = ДатаЧисло(ВхДата);
МесяцТекст = СписокМесяцев.ПолучитьЗначение(ДатаМесяц(ВхДата));
Год = ДатаГод(ВхДата);
Возврат "" + День + " " + МесяцТекст + " " + Год + " г.";
КонецФункции
Этот метод считается самым надежным, так как он не зависит от настроек операционной системы и всегда гарантирует правильный падеж в печатных формах документов.
Нужно учитывать, что 1С 7.7 берет настройки разделителей и дописывание символа «г.» из региональных стандартов Windows. Если вы используете формат "Д ДДММММГГГГ", а буква «г.» в конце не появляется, значит, она отключена в настройках самой ОС (Панель управления — Региональные стандарты). В этом случае символ «г.» можно просто дописать к строке вручную:
Результат = Формат(РабочаяДата(), "Д ДДММММГГГГ") + " года";
Если вам нужно настроить отображение даты непосредственно в ячейке таблицы (печатной формы), не обязательно писать код. Выясним, как это сделать через визуальный редактор:
Система сама сформирует нужную строку. Это исключает риск опечатки в количестве букв М или Г, что часто бывает при ручном вводе кода в конфигураторе.
Подводя итог, отметим: для 1С 7.7 универсальным решением является формат "Д ДДММММГГГГ", но для полного контроля над падежами и окончаниями лучше использовать самописные функции сборки строки. Это обеспечит единообразие документов вне зависимости от того, на каком сервере или компьютере запускается база.