Как в печатной форме 1С вывести сначала время, а затем дату?

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

При выводе даты и времени в печатные формы 1С по умолчанию используется стандартный формат системы, в котором сначала идет дата, а затем время (например, "25.10.2023 14:30:15"). Однако в реальной практике часто возникает противоположная задача — вывести сначала время, а затем дату (например, "14:30:15 25.10.2023"). Это может потребоваться для улучшения читаемости отчетов, при регистрации логов действий пользователей, фиксации времени прохождения контрольных точек или для соответствия специфическим требованиям заказчика.

В этой статье мы подробно разберем, как решить эту задачу различными способами: от классического написания программного кода до тонкой настройки ячеек самого макета без изменения программных модулей. Мы также изучим важные нюансы, такие как обработка пустых дат, использование шаблонов и соблюдение стандартов разработки 1С.

Способ 1. Программное форматирование с помощью функции Формат

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

Частой ошибкой начинающих разработчиков является попытка написать простую маску вида "HH:mm:ss dd.MM.yyyy" напрямую. Давайте выясним причину, почему такой вариант не сработает или вернет некорректный результат. Дело в том, что символы-разделители (двоеточия, точки, пробелы) могут конфликтовать со служебными символами парсера форматной строки. Чтобы платформа корректно распознала конструкцию, всю строку формата даты необходимо экранировать одинарными кавычками внутри параметра ДФ (формат даты).

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


// Получаем текущую дату и время
ТекущийМомент = ТекущаяДата();

// Форматируем строку: сначала время, затем дата
СтрокаДляПечати = Формат(ТекущийМомент, "ДФ='HH:mm:ss dd.MM.yyyy'");

// Передаем значение в параметр области макета
ОбластьМакета.Параметры.ДатаВремя = СтрокаДляПечати;

В данном примере параметр ДФ указывает платформе, что мы задаем собственный (локальный) формат даты. Конструкция 'HH:mm:ss dd.MM.yyyy', заключенная в одинарные кавычки, строго определяет порядок вывода: сначала часы (HH), минуты (mm) и секунды (ss) через двоеточие, а затем день (dd), месяц (MM) и год (yyyy) через точку.

Способ 2. Настройка формата непосредственно в макете (без кода)

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

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

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

После этого при заполнении параметров этой области макета в коде достаточно передать обычное значение типа Дата (например, Параметры.ДатаВремя = ТекущаяДата()), а визуальным преобразованием займется сама платформа при выводе табличного документа на экран.

Способ 3. Использование выражений в ячейках типа "Шаблон"

Бывают ситуации, когда в одной ячейке макета необходимо объединить статичный текст и динамически форматируемое значение. Например, строка должна выглядеть так: "Документ распечатан в: 15:45:20 25.10.2023". Для решения этой задачи свойство заполнения ячейки переводят в режим Шаблон.

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

В тексте ячейки макета укажите следующее выражение:

Документ распечатан в: [Формат(ДатаПечати, "ДФ=''HH:mm:ss dd.MM.yyyy''")]

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

Способ 4. Корректная обработка пустых дат (Параметр ДП)

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

Если мы применим форматную строку "ДФ='HH:mm:ss dd.MM.yyyy'" к пустой дате, то на печать выведется некрасивая и вводящая пользователя в заблуждение строка: "00:00:00 01.01.0001". Чтобы избежать порчи внешнего вида документа, мы должны использовать специальный параметр форматной строки — ДП (Представление пустой даты).

Рассмотрим примеры обработки пустой даты:


// Вариант 1. Если дата не заполнена, выводим пустую строку
ФорматСтроки1 = "ДФ='HH:mm:ss dd.MM.yyyy'; ДП=''";
Результат1 = Формат(Ссылка.ДатаДокумента, ФорматСтроки1);

// Вариант 2. Если дата не заполнена, выводим понятный текст для пользователя
ФорматСтроки2 = "ДФ='HH:mm:ss dd.MM.yyyy'; ДП='[Время и дата не указаны]'";
Результат2 = Формат(Ссылка.ДатаДокумента, ФорматСтроки2);

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

Способ 5. Стандарты разработки 1С и локализация (Использование НСтр)

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

Обычно для вывода даты и времени в зависимости от настроек операционной системы пользователя рекомендуется применять локальные форматы, такие как ДЛФ=ДВ (Дата и Время). Однако системный локальный формат жестко выводит сначала дату, а затем время. Если вам принципиально нужно поменять их местами и при этом соблюсти стандарты локализации, строку формата необходимо оборачивать в функцию НСтр.

Давайте проанализируем пример правильного написания локализованной форматной строки:


// Форматирование с поддержкой локализации системы
МаскаФормата = НСтр("ru='ДФ=''HH:mm:ss dd.MM.yyyy'''");
СтрокаВывода = Формат(ТекущаяДата(), МаскаФормата);

Такой подход позволит переводчикам или локализаторам в будущем легко адаптировать формат вывода времени и даты под национальные стандарты других стран, просто добавив соответствующий языковой код в функцию НСтр, не затрагивая при этом логику самого алгоритма формирования печатной формы.

Справочная таблица обозначений в форматной строке даты

Для создания собственных уникальных шаблонов вывода даты и времени полезно всегда иметь под рукой таблицу обозначений форматной строки 1С. Ниже представлены наиболее популярные идентификаторы, которые вы можете комбинировать в параметре ДФ:

  1. HH (или ЧЧ) — час в 24-часовом формате с лидирующим нулем (например, 08, 14, 21).
  2. hh (или чч) — час в 12-часовом формате с лидирующим нулем (используется совместно с маркером AM/PM).
  3. tt — маркер половины дня (выводит AM или PM для 12-часового формата).
  4. mm — минуты с лидирующим нулем (например, 02, 35).
  5. ss — секунды с лидирующим нулем (например, 00, 59).
  6. dd (или дд) — день месяца в виде числа с лидирующим нулем.
  7. dddd (или дддд) — полное название дня недели текущей даты (например, "понедельник", "пятница").
  8. MM (или ММ) — номер месяца в виде числа с лидирующим нулем (например, 01, 12).
  9. MMMM (или ММММ) — полное название месяца на языке локализации (например, "Январь", "Сентябрь").
  10. yyyy (или гггг) — четырехзначный год (например, 2026).

Используя эти комбинации и правила экранирования разделителей, вы сможете решать абсолютно любые задачи по форматированию данных в печатных формах 1С, обеспечивая максимальное удобство для конечных пользователей системы.

← На главную