Как настроить формат даты с месяцем прописью в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

В процессе разработки на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с необходимостью вывести дату в красивом «человекочитаемом» виде, например: «25 ноября 2021 г.». Несмотря на кажущуюся простоту, стандартная функция Формат() в версии 7.7 имеет свои специфические особенности и синтаксис, который существенно отличается от более современной версии 8.х. В этой статье мы подробно разберем, как правильно составить форматную строку, почему не работают примеры из интернета для «восьмерки» и как добиться нужного результата разными способами.

Разбор типичных ошибок при форматировании

Проанализируем ситуацию, с которой столкнулся автор вопроса. Попытка использовать конструкцию ДЛФ=ДД сразу выдает ошибку или не приносит результата, так как этот синтаксис (Локальный Формат Даты) появился только в версии 1С 8.0. В «семерке» система просто не понимает такие параметры. Также важно помнить, что 1С 7.7 очень чувствительна к количеству символов в форматной строке и их регистру.

Если вы используете конструкцию типа "Д ММММГГ", система выведет сокращенный год и месяц, что и привело к результату «Декабрь 21 г.». Наша задача — расширить эту строку, чтобы включить число и полный год.

Способ 1: Использование стандартной функции Формат()

Рассмотрим самый быстрый и правильный способ решения задачи через программный код. Для получения даты вида «25 ноября 2021 г.» необходимо использовать форматную строку "Д ДДММММГГГГ". Разберем по шагам, что означает каждый символ в этой строке:

  1. Первый символ «Д» — это обязательный идентификатор, который сообщает системе, что далее следует описание формата именно для типа данных «Дата».
  2. Пробел — любой символ (кроме зарезервированных), стоящий после первой «Д», будет интерпретирован как разделитель и выведен «как есть».
  3. «ДД» — указывает на вывод числа месяца двумя цифрами (например, 01, 05, 25).
  4. «ММММ» — четыре буквы «М» заставляют систему вывести полное название месяца.
  5. «ГГГГ» — четыре буквы «Г» отвечают за вывод года в четырехзначном формате.

Посмотрим на пример правильного кода:


// Пример вывода текущей даты в нужном формате
ТекДата = ТекущаяДата();
Результат = Формат(ТекДата, "Д ДДММММГГГГ");
Сообщить(Результат); // Выведет: 25 Ноября 2021 г.

Обратите внимание: если вам нужно, чтобы для чисел меньше 10 впереди не стоял ноль (например, «5 ноября» вместо «05 ноября»), используйте одну букву «Д» для числа: "Д ДММММГГГГ".

Способ 2: Использование функции Шаблон()

В текстовых сообщениях или при формировании строк для вывода в отчеты часто удобно использовать функцию Шаблон(). Выясним, как применить форматирование внутри квадратных скобок. Здесь важно соблюдать правильный синтаксис разделения функции и строки формата через символ решетки #.


// Использование внутри шаблона
ТекстДляВывода = Шаблон("[ТекущаяДата()#Д ДДММММГГГГ]");
Сообщить(ТекстДляВывода);

Важно помнить, что внутри шаблона вся форматная строка, включая символ Д, должна следовать сразу после знака # без лишних кавычек.

Способ 3: Ручная сборка даты для нестандартных падежей

Проанализируем ситуацию, когда встроенная функция Формат() не подходит. В некоторых конфигурациях и региональных настройках 1С 7.7 может выводить месяц в именительном падеже («Ноябрь»), а для фразы «25 ноября» требуется родительный падеж. В 1С 7.7 нет встроенного механизма склонения дат, поэтому программисты используют «ручную сборку».

Разберем, как это реализовать с помощью массива или списка значений:


Функция глПолучитьДатуПрописью(ВхДата)
    Если ПустоеЗначение(ВхДата) = 1 Тогда
        Возврат "";
    КонецЕсли;
    
    СписокМесяцев = СоздатьОбъект("СписокЗначений");
    СписокМесяцев.ДобавитьЗначение("января");
    СписокМесяцев.ДобавитьЗначение("февраля");
    СписокМесяцев.ДобавитьЗначение("марта");
    СписокМесяцев.ДобавитьЗначение("апреля");
    СписокМесяцев.ДобавитьЗначение("мая");
    СписокМесяцев.ДобавитьЗначение("июня");
    СписокМесяцев.ДобавитьЗначение("июля");
    СписокМесяцев.ДобавитьЗначение("августа");
    СписокМесяцев.ДобавитьЗначение("сентября");
    СписокМесяцев.ДобавитьЗначение("октября");
    СписокМесяцев.ДобавитьЗначение("ноября");
    СписокМесяцев.ДобавитьЗначение("декабря");
    
    День = ДатаЧисло(ВхДата);
    МесяцТекст = СписокМесяцев.ПолучитьЗначение(ДатаМесяц(ВхДата));
    Год = ДатаГод(ВхДата);
    
    Возврат "" + День + " " + МесяцТекст + " " + Год + " г.";
КонецФункции

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

Нюансы региональных настроек

Нужно учитывать, что 1С 7.7 берет настройки разделителей и дописывание символа «г.» из региональных стандартов Windows. Если вы используете формат "Д ДДММММГГГГ", а буква «г.» в конце не появляется, значит, она отключена в настройках самой ОС (Панель управления — Региональные стандарты). В этом случае символ «г.» можно просто дописать к строке вручную:

Результат = Формат(РабочаяДата(), "Д ДДММММГГГГ") + " года";

Работа с печатными формами (MXL)

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

  1. Откройте таблицу (шаблон .mxl).
  2. Нажмите правой кнопкой мыши на ячейку с датой и выберите «Свойства».
  3. Перейдите на закладку «Формат».
  4. В списке категорий выберите «Дата».
  5. Найдите в списке форматов вариант, где месяц указан прописью.

Система сама сформирует нужную строку. Это исключает риск опечатки в количестве букв М или Г, что часто бывает при ручном вводе кода в конфигураторе.

Подводя итог, отметим: для 1С 7.7 универсальным решением является формат "Д ДДММММГГГГ", но для полного контроля над падежами и окончаниями лучше использовать самописные функции сборки строки. Это обеспечит единообразие документов вне зависимости от того, на каком сервере или компьютере запускается база.

← На главную