Как вывести дату без времени в печатной форме 1С:ЗУП 3.1

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

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

Метод 1: Использование функции Формат в программном коде

Самый надежный и гибкий способ управления представлением данных — использование встроенной функции 1С Формат() непосредственно в момент формирования структуры данных для печати. Рассмотрим ситуацию, когда данные извлекаются из выборки или массива и помещаются в структуру ДанныеПечати.

Проанализируем стандартный подход. Вместо прямой вставки значения, которое имеет тип Дата, нам необходимо обернуть его в функцию форматирования. Посмотрим на пример кода:


// Вместо обычного присвоения:
// ДанныеПечати.Вставить("ДатаРождения", ДанныеФизическогоЛица[0].ДатаРождения);

// Используем локальный формат даты:
ДанныеПечати.Вставить("ДатаРождения", Формат(ДанныеФизическогоЛица[0].ДатаРождения, "ДЛФ=Д"));

Разберем, что означают эти параметры:

Если нам требуется строгий формат, не зависящий от настроек сервера, мы можем использовать параметр ДФ (Форматная строка). Рассмотрим пример:


// Формат: ДД.ММ.ГГГГ (01.01.2023)
ДанныеПечати.Вставить("ДокументДатаВыдачи", Формат(ДанныеФизическогоЛица[0].ДокументДатаВыдачи, "ДФ=dd.MM.yyyy"));

// Формат с полным названием месяца:
ДанныеПечати.Вставить("ДокументДатаВыдачи", Формат(ДанныеФизическогоЛица[0].ДокументДатаВыдачи, "ДФ='d MMMM yyyy \"г.\"'"));

Важный нюанс: В форматной строке ДФ регистр символов критичен. MM (прописные) — это месяц, а mm (строчные) — это минуты. Ошибка в регистре приведет к некорректному выводу данных.

Метод 2: Настройка формата в макете табличного документа (MXL)

Иногда программисты предпочитают задавать формат вывода непосредственно в макете, чтобы не перегружать код. Выясним, почему этот метод может не работать.

Рассмотрим алгоритм настройки макета:

  1. Откроем макет печатной формы в конфигураторе.
  2. Выделим ячейку, в которую выводится параметр (например, ДатаРождения).
  3. Откроем свойства ячейки (F4).
  4. Найдем поле Формат и нажмем кнопку выбора с тремя точками.
  5. В открывшемся конструкторе выберем вкладку "Дата" и укажем нужный вид.

Однако, как показывает практика обсуждений, этот способ часто игнорируется системой. Проанализируем причину. Если в свойстве ячейки Заполнение установлено значение Шаблон (например, текст в ячейке выглядит как Сотрудник [Работник] родился [ДатаРождения]), то настройки формата самой ячейки применяться не будут. В случае шаблона 1С воспринимает всё содержимое как строку, и дата вставляется в своем стандартном строковом представлении. В такой ситуации поможет только предварительное форматирование в коде (как в Методе 1).

Метод 3: Использование конструктора форматной строки

Для тех, кто боится ошибиться в написании параметров ДФ или ДЛФ, в среде разработки 1С предусмотрен визуальный помощник. Рассмотрим, как им воспользоваться:

Напишем в коде Формат(НужнаяДата, ""), установим курсор внутри пустых кавычек и нажмем правую кнопку мыши. В контекстном меню выберем пункт "Конструктор форматной строки". Этот инструмент позволяет визуально выбрать нужный вариант представления даты, а система сама сгенерирует правильный код. Это исключает опечатки в кавычках или регистрах символов.

Метод 4: Работа с данными типа "Строка"

Иногда данные из запроса приходят уже в строковом виде. В этом случае функция Формат() не сработает, так как она предназначена только для типов Дата или Число. Выясним, как поступить в такой ситуации.

Если мы уверены, что строка всегда имеет стандартный вид (например, "2023-05-10 00:00:00"), мы можем применить функции работы со строками, чтобы "отрезать" лишнее время:


// Берем первые 10 символов строки (ГГГГ.ММ.ДД)
ДатаСтрокой = ДанныеФизическогоЛица[0].ДатаРождения;
ДанныеПечати.Вставить("ДатаРождения", Лев(ДатаСтрокой, 10));

Однако этот метод считается "плохим тоном" в разработке на 1С. Правильнее будет сначала преобразовать строку в дату, а затем применить стандартное форматирование:


ТекущаяДата = Дата(ДанныеФизическогоЛица[0].ДатаРождения);
ДанныеПечати.Вставить("ДатаРождения", Формат(ТекущаяДата, "ДЛФ=Д"));

Дополнительно: Вывод суммы прописью

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


СуммаОклада = 55000.50;
ПараметрыПредмета = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";
Результат = ЧислоПрописью(СуммаОклада, "Л = ru_RU", ПараметрыПредмета);
// Результат: "Пятьдесят пять тысяч рублей пятьдесят копеек"
ДанныеПечати.Вставить("ОкладПрописью", Результат);

Здесь важно правильно указать ПараметрыПредмета. Это строка, в которой через запятую перечисляются наименования целой и дробной частей в разных склонениях, их род (м — мужской, ж — женский) и количество знаков после запятой.

Подводя итог, можно сказать, что для решения проблемы вывода времени в датах в ЗУП 3.1 наиболее эффективным является сочетание программного форматирования через Формат(Дата, "ДЛФ=Д") и внимательного контроля типа данных (Дата или Строка) в исходной выборке. Это гарантирует корректное отображение документов вне зависимости от настроек макета или региональных параметров системы.

← На главную