Как преобразовать дату в строку без разделителей и двоеточий или получить только год в 1С

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

При разработке в среде 1С:Предприятие часто возникает задача преобразования стандартной даты в строковый формат без разделителей (например, в вид 28022010235859). Это крайне важно при выгрузке данных в текстовые файлы, формировании уникальных идентификаторов документов, работе с веб-сервисами (API) или интеграции с внешними системами. В этой статье мы подробно разберем, как правильно решить эту задачу, почему возникают популярные ошибки разработчиков и как быстро получить год из даты различными способами.

Разбор типичной ошибки: почему в строке появляются двоеточия и точки?

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


// Попытка преобразования, которая вернет строку с разделителями
СтрокаДата = Формат(ТекущаяДата(), "ггггММддЧЧммсс");

Вместо ожидаемой сплошной строки цифр система выдает стандартное представление даты с точками и двоеточиями, например: 28.02.2010 23:58:59. Выясним причину такого поведения платформы.

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

Правильный синтаксис форматирования даты без разделителей

Чтобы преобразовать дату в строку нужного нам формата без разделителей (ровно 14 символов: ДДММГГГГЧЧММСС), воспользуемся правильной конструкцией. Мы можем написать ее как на русском, так и на английском языке — поведение системы будет абсолютно идентичным.

Вариант на русском языке:


ТекДата = ТекущаяДата(); // Представим, что дата: 28.02.2010 23:58:59
СтрокаДата = Формат(ТекДата, "ДФ=ддММггггЧЧммсс");
// Результат: "28022010235859"

Вариант на английском языке:


ТекДата = ТекущаяДата();
СтрокаДата = Формат(ТекДата, "DF=ddMMyyyyHHmmss");
// Результат: "28022010235859"

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

Важно: соблюдайте регистр символов! В платформе 1С регистр символов в форматной строке имеет решающее значение. Если вы перепутаете регистр букв М и м, система выдаст неверные данные. Например, написав строчные мм на месте месяца, вы подставите туда текущие минуты. А написав строчные чч (или hh), вы получите 12-часовой формат времени вместо стандартного 24-часового ЧЧ (или HH), что критично при выгрузках.

Как правильно получить только год даты?

Если перед вами стоит задача извлечь только год из даты, решение будет зависеть от того, в каком типе данных вам нужен результат — в виде строки или в виде числа.

Способ 1. Получение года в виде строки (Тип: Строка)

Для этого мы снова используем функцию Формат(), но передаем в шаблон только символы года:


ГодСтрокой = Формат(ТекДата, "ДФ=гггг");
// Результат: "2010" (Тип: Строка)

Если вам требуется получить год в сокращенном двухзначном виде (без века), используйте две буквы гг:


ГодСокращенный = Формат(ТекДата, "ДФ=гг");
// Результат: "10" (Тип: Строка)

Способ 2. Получение года в виде числа (Тип: Число)

Если вам нужно выполнять математические операции или сравнения, лучше получить год в виде числа. Для этого в 1С существует простая встроенная функция Год():


ГодЧислом = Год(ТекДата);
// Результат: 2010 (Тип: Число)

Полезный лайфхак: использование встроенного Конструктора форматной строки

Разработчикам не обязательно постоянно заучивать наизусть все спецсимволы форматирования (дд, ММ, гггг и т.д.). В конфигураторе 1С предусмотрен удобный визуальный помощник. Давайте разберем по шагам, как им воспользоваться:

  1. Напишите в модуле код вызова функции: Формат(ТекДата, ).
  2. Поставьте курсор сразу после запятой, на место второго параметра.
  3. Нажмите правую кнопку мыши и выберите пункт меню «Конструктор форматной строки» (или воспользуйтесь главным меню системы: Текст — Конструктор форматной строки).
  4. В открывшемся окне перейдите на вкладку «Дата».
  5. Интерактивно настраивайте шаблон: выберите нужный порядок вывода элементов, удалите лишние разделители (точки, двоеточия, пробелы).
  6. Нажмите кнопку «ОК». Платформа автоматически сгенерирует и вставит в ваш код готовую строковую конструкцию (например, "ДФ=ddMMyyyyHHmmss").

Альтернативные системные методы преобразования

В некоторых случаях для интеграционных задач (например, при передаче данных в JSON или XML) может потребоваться альтернативный вариант преобразования даты. Рассмотрим метод с использованием функции XMLСтрока().

Функция XMLСтрока(ТекДата) преобразует дату по международному стандарту ISO 8601 в формат YYYY-MM-DDTHH:mm:ss. Чтобы получить сплошную строку без разделителей, мы можем программно удалить все лишние символы при помощи функции СтрЗаменить():


// Шаг 1: Получаем стандартную XML-строку, например "2010-02-28T23:58:59"
СтрокаXML = XMLСтрока(ТекДата);

// Шаг 2: Последовательно удаляем разделители "-", ":" и символ "T"
ЧистаяСтрока = СтрЗаменить(СтрокаXML, "-", "");
ЧистаяСтрока = СтрЗаменить(ЧистаяСтрока, ":", "");
ЧистаяСтрока = СтрЗаменить(ЧистаяСтрока, "T", "");

// Результат: "20100228235859" (в формате ггггММддЧЧммсс)

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

← На главную