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

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

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

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

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

  1. гггг — четырехзначный год (например, 2024);
  2. ММ — двузначный номер месяца (01–12);
  3. дд — двузначный день месяца (01–31);
  4. чч — двузначные часы в 24-часовом формате (00–23);
  5. мм — двузначные минуты (00–59);
  6. сс — двузначные секунды (00–59).

Посмотрим на пример формирования строки с текущим временем или на начало дня:


// Полное представление даты и времени
СтрокаДатаВремя = Формат(Объект.ДатаНачалаИзменений, "ДФ=ггггММддччммсс");

// Если необходимо строго зафиксировать время на начало суток (00:00:00)
СтрокаНачалоДня = Формат(НачалоДня(Объект.ДатаНачалаИзменений), "ДФ=ггггММддччммсс");

// Альтернативный вариант для фиксации нулей времени
СтрокаСНулями = Формат(Объект.ДатаНачалаИзменений, "ДФ=ггггММдд") + "000000";

Способ 2. Преобразование даты в числовой тип

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


// Преобразование отформатированной строки в число
ЧисловоеЗначение = Число(Формат(НачалоДня(Объект.ДатаНачалаИзменений), "ДФ=ггггММддччммсс"));

// При последующем выводе такого числа в строку обязательно отключаем разделители групп
СтрокаБезРазделителей = Формат(ЧисловоеЗначение, "ЧГ=0");

Важно: Если передавать 14-значное число во внешний сервис (например, REST или SOAP), убедитесь, что на стороне приемника используется тип данных xs:long или 64-битное целое (int64). Стандартный 32-битный int32 ограничен значением 2 147 483 647 и вызовет ошибку переполнения.

Ошибки типизации: литерал даты vs строковое значение

Проанализируем распространенную ситуацию: разработчик пишет в коде значение в одинарных кавычках вида '20170101000000', и метод веб-сервиса выполняется успешно, а при передаче строковой переменной "20170101000000" возвращается ошибка схемы или валидации.

Причина заключается в различиях синтаксических конструкций языка 1С:

  1. Одинарные кавычки — это литерал типа Дата (например, '20170101000000' компилируется как значение типа Дата: 01.01.2017 00:00:00).
  2. Двойные кавычки — это строковый литерал типа Строка (например, "20170101000000").

При вызове методов WSПрокси платформа 1С автоматически сериализует значения типа Дата в формат стандарта XML Schema (xs:dateTime или xs:date). Если в WSDL-описании метода веб-сервиса параметр описан как дата, передавать в него строковую переменную нельзя — необходимо передавать оригинальное значение типа Дата.

Работа с датами для веб-сервисов и XML

Рассмотрим стандартные механизмы работы с форматами дат при обмене данными:


// 1. Для SOAP-сервисов через WS-ссылку передаем обычную Дату
Ответ = Прокси.ВыгрузитьДанные(Объект.ДатаНачалаИзменений);

// 2. Для формирования канонической строки стандарта XML (ISO 8601: "2017-01-01T00:00:00")
СтрокаXML = XMLСтрока(Объект.ДатаНачалаИзменений);

// 3. Обратное чтение даты из формата XML
ИсходнаяДата = XMLЗначение(Тип("Дата"), СтрокаXML);

Всегда сверяйтесь с документацией и WSDL/OpenAPI-схемой целевого сервиса, чтобы передавать параметры в строго ожидаемом типе: объектом Дата, строкой или числом.

← На главную