Обмен данными между системами 1С:Предприятие и внешними сервисами часто требует корректного формирования XML-файлов. Одним из критичных моментов становится запись дат — ошибка в формате может привести к сбою загрузки, потере данных или некорректной обработке документов. Особенно актуальна эта тема для бухгалтеров, программистов 1С и специалистов по интеграциям, работающих с Коммерческой информацией (CommerceML), EnterpriseData или кастомизированными обменами.
В этой статье разберём все актуальные форматы дат для XML в 1С, типичные ошибки при их записи и способы валидации. Материал будет полезен как новичкам, так и опытным разработчикам, сталкивающимся с нюансами обмена между разными версиями платформы (8.2, 8.3) и внешними системами.
⚠️ Внимание: Форматы дат в XML могут зависеть от версий 1С:Предприятие и настроек обмена. Если вы работаете с нестандартными конфигурациями (например, 1С:ERP или 1С:УТ 11), уточните требования к формату в документации конкретного обмена или согласованного с партнёром протокола.
1. Стандартные форматы дат в XML для 1С
Платформа 1С:Предприятие поддерживает несколько форматов записи дат в XML, но наиболее распространёнными являются два:
- 📅 Формат ISO 8601 —
YYYY-MM-DD(например,2026-12-31). Используется в большинстве современных обменов, включаяCommerceML 2.0иEnterpriseData. - 📅 Формат 1С с временем —
YYYYMMDDHHMMSS(например,20261231235959). Часто применяется в выгрузках, где важно точное время (например, для документов или операций).
Выбор формата зависит от протокола обмена и требований принимающей системы. Например, ФНС для отчётности может требовать строгий ISO 8601, а внутренние обмены между базами 1С — использовать упрощённый формат без времени.
В некоторых случаях (например, при обмене с 1С:ЗУП) дата может записываться в виде ДД.ММ.ГГГГ, но это скорее исключение, связанное с настройками конкретной конфигурации. Для универсальных обменов всегда отдавайте предпочтение ISO 8601 — он поддерживается всеми современными системами и минимизирует риски ошибок.
2. Как 1С преобразует даты в XML: внутренние механизмы
При выгрузке данных в XML платформа 1С:Предприятие автоматически преобразует даты из внутреннего формата в строковый. Этот процесс зависит от:
- 🔧 Версии платформы (в 8.3.20+ появилась улучшенная поддержка
ISO 8601). - 📝 Типа данных (поле
ДатаилиДатаВремя). - ⚙️ Настроек обмена (в правилах конвертации можно явно указать формат).
Например, если в конфигурации задано поле типа Дата, то при выгрузке в XML оно по умолчанию преобразуется в YYYY-MM-DD. А если поле типа ДатаВремя — то в YYYY-MM-DDThh:mm:ss (с буквой"T" перед временем). Последний вариант чаще используется в обменах с 1С:ERP или 1С:УТ, где важна временная привязка документов.
Чтобы проверить, как именно 1С формирует дату в вашем случае, можно воспользоваться отладочной печатью или выгрузить тестовый XML-файл. Например, в коде обмена добавьте строку:
Сообщить(Формат(ТекущаяДата,"ДЛФ=DT"));
Это выведет дату в формате ISO 8601 с временем, который затем будет записан в XML.
Если вы разрабатываете правила обмена, всегда тестируйте выгрузку дат на граничных значениях: 01.01.0001 (минимальная дата в 1С) и 31.12.9999 (максимальная). Некоторые системы могут некорректно обрабатывать крайние даты.
3. Примеры записи дат в XML для разных сценариев
Рассмотрим типовые случаи записи дат в XML-файлах для 1С с практическими примерами.
| Сценарий обмена | Формат даты в XML | Пример записи | Примечание |
|---|---|---|---|
Выгрузка документов в CommerceML 2.0 |
YYYY-MM-DD |
<Дата>2026-10-15</Дата> |
Без времени, только дата |
| Обмен с 1С:ЗУП (табеля, начисления) | YYYY-MM-DDThh:mm:ss |
<ДатаНачисления>2026-10-15T14:30:00</ДатаНачисления> |
Время важно для расчётов |
| Выгрузка в ФНС (отчётность) | YYYY-MM-DD |
<ДатаСоставления>2026-12-31</ДатаСоставления> |
Строгий формат, ошибки не допускаются |
| Обмен с 1С:Розница (чеки, продажи) | YYYYMMDDHHMMSS |
<МоментВремени>20261015143000</МоментВремени> |
Компактный формат для больших объёмов данных |
| Кастомизированный обмен (например, с CRM) | Зависит от соглашения | <CustomDate>15.10.2026</CustomDate> |
Может требовать дополнительной конвертации |
Если вы разрабатываете собственный обмен, рекомендуется придерживаться ISO 8601 — это упростит интеграцию с другими системами. Например, для даты и времени в одном поле:
<ДатаДокумента>2026-10-15T14:30:00+03:00</ДатаДокумента>
Здесь +03:00 — это временная зона (может быть важно для международных обменов).
Что делать, если принимающая система требует нестандартный формат?
Если партнёр ждёт дату в формате, отличном от ISO (например, DD/MM/YYYY), вам придётся дорабатывать правила обмена. В 1С:Предприятие это можно сделать двумя способами:
1. Через XDTO-пакеты — создать собственное преобразование даты в нужный формат.
2. Через обработку XML перед отправкой — написать скрипт на XSLT или встроенном языке, который заменит даты после выгрузки.
Пример кода для замены формата:
СтрокаXML = СтрЗаменить(СтрокаXML,"2026-10-15","15/10/2026");
Но помните, что такие"костыли" усложняют поддержку обмена. Лучше договориться с партнёром о переходе на стандартный формат.
4. Типичные ошибки при записи дат и как их избежать
Ошибки в формате дат — одна из главных причин сбоев при обмене данными. Вот наиболее распространённые проблемы:
- ❌ Несовпадение форматов — отправляете
DD.MM.YYYY, а принимающая система ждётYYYY-MM-DD. Решение: уточните требования к формату заранее. - ❌ Отсутствие ведущих нулей — запись
2026-1-5вместо2026-01-05. Некоторые парсеры XML могут не распознать такую дату. - ❌ Неверная временная зона — если в дате указано время, но нет смещения (
+03:00), это может привести к сдвигу на несколько часов. - ❌ Использование недопустимых символов — например, запись
15.10.2026 г.вместо чистого15.10.2026.
Чтобы избежать ошибок, всегда проверяйте XML-файл на валидность. Для этого можно использовать:
- 🔍 Встроенную проверку в 1С:Предприятие (меню
Файл → Открыть → Выбрать XML → Проверить). - 🔍 Онлайн-валидаторы XML (например, XML Validator от W3C).
- 🔍 Логи обмена — в них часто пишутся ошибки разбора дат.
⚠️ Внимание: Если вы работаете с CommerceML 2.0, обратите внимание на атрибут ДатаФормирования в корневом элементе <КоммерческаяИнформация>. Он должен строго соответствовать формату YYYY-MM-DDThh:mm:ss, иначе некоторые системы (например, 1С:УТ 11) откажутся принимать файл.
Убедиться, что формат даты соответствует протоколу обмена
Проверить наличие ведущих нулей (01 вместо 1)
Указать временную зону, если требуется
Валидировать XML-файл перед отправкой
Сверить даты в логах обмена на предмет ошибок
-->
5. Как программно управлять форматом дат в 1С
Если стандартные механизмы выгрузки дат вас не устраивают, можно управлять форматом программно. Для этого в 1С:Предприятие есть несколько инструментов:
1. Функция Формат
Позволяет преобразовать дату в любую строковую форму. Примеры:
// Формат ISO 8601 без времени
ДатаСтрока = Формат(ТекущаяДата,"ДФ=yyyy-MM-dd");
// Формат с временем и временной зоной
ДатаСтрока = Формат(ТекущаяДата,"ДЛФ=DT") +"+03:00";
2. XDTO-пакеты
Если вы используете XDTO для обмена, можно задать формат даты прямо в схеме. Например:
<xs:simpleType name="dateType">
<xs:restriction base="xs:date"/>
</xs:simpleType>
Это гарантирует, что все даты в XML будут в формате YYYY-MM-DD.
3. Обработка XML через XSLT
Для сложных преобразований можно написать XSLT-шаблон, который приведёт все даты к нужному формату. Пример:
<xsl:template match="Дата">
<xsl:value-of select="format-date(xs:date(.),'[Y0001]-[M01]-[D01]')"/>
</xsl:template>
⚠️ Внимание: При программном управлении датами учитывайте настройки региональных стандартов в 1С. Если в конфигурации установлен формат даты ДД.ММ.ГГГГ, а вы выгружаете в ISO, может потребоваться явное преобразование.
Используйте функцию Формат с параметром ДФ или ДЛФ для гарантированного получения даты в нужном формате, независимо от региональных настроек пользователя.
6. Особенности работы с датами в разных версиях 1С
Форматы дат в XML могут отличаться в зависимости от версии платформы 1С:Предприятие:
- 🔹 1С 8.2 — по умолчанию использует формат
ДД.ММ.ГГГГдля дат без времени иДД.ММ.ГГГГ ЧЧ:ММ:ССдля даты-времени. Требует ручной конвертации вISO 8601. - 🔹 1С 8.3 (до 8.3.19) — поддерживает
ISO 8601, но может выгружать даты в старом формате, если это задано в правилах обмена. - 🔹 1С 8.3.20+ — по умолчанию использует
ISO 8601для XML, но позволяет гибко настраивать формат черезXDTO.
Если вы обновляете конфигурацию с 8.2 на 8.3, обязательно проверьте, как изменился формат дат в XML. Например, в 1С:Бухгалтерия 3.0 при переходе с 8.2 на 8.3 формат дат в выгружаемых отчётах для ФНС может поменяться с ДД.ММ.ГГГГ на YYYY-MM-DD, что потребует корректировки на стороне получателя.
Для проверки версии платформы и её возможностей используйте код:
Сообщить("Версия платформы:" + Строка(Платформа8.ХХ)); // где XX - ваша версия
Как узнать, какой формат дат используется в вашей конфигурации?
1. Выгрузите тестовый XML-файл через стандартный обмен.
2. Откройте его в текстовом редакторе и найдите тег с датой.
3. Если дата в формате 31.12.2026 — у вас старый формат (typical для 8.2).
4. Если 2026-12-31 — современный ISO 8601 (typical для 8.3).
5. В сомнительных случаях проверьте настройки XDTO-пакетов или правил обмена.
7. Практический пример: выгрузка даты в CommerceML
Рассмотрим пошаговый пример, как правильно записать дату в XML для обмена CommerceML 2.0 — одного из самых распространённых форматов обмена данными в 1С.
Шаг 1. Подготовка данных
Допустим, у нас есть документ РеализацияТоваровУслуг с датой 15.10.2026 14:30:00. Нам нужно выгрузить её в XML в формате YYYY-MM-DD (без времени).
Шаг 2. Код выгрузки
// Получаем дату документа
ДатаДокумента = Документ.Дата;
// Преобразуем в строку в формате ISO
ДатаСтрока = Формат(ДатаДокумента,"ДФ=yyyy-MM-dd");
// Записываем в XML
ЗаписатьXML;
ПисательXML.ЗаписатьНачалоЭлемента("Дата");
ПисательXML.ЗаписатьТекст(ДатаСтрока);
ПисательXML.ЗаписатьКонецЭлемента;
КонецПроцедуры;
Шаг 3. Результирующий XML
<Документ>
<Дата>2026-10-15</Дата>
<Номер>РТУ-00001</Номер>
</Документ>
Шаг 4. Проверка
Откройте полученный XML в валидаторе (например, Notepad++ с плагином XML Tools) и убедитесь, что дата записана корректно. Если обмен идёт с 1С:УТ или 1С:ERP, проверьте логи загрузки на предмет ошибок типа "Неверный формат даты".
⚠️ Внимание: В CommerceML дата документа (<Дата>) и дата формирования файла (<ДатаФормирования>) могут иметь разные форматы. Убедитесь, что оба поля соответствуют требованиям протокола.
8. Частые вопросы и решения (FAQ)
🔍 Почему при обмене дата сдвигается на один день?
Эточная проблема при несовпадении временных зон. Например, если в 1С дата записана как 2026-10-15T23:00:00+03:00 (московское время), а принимающая система интерпретирует её как UTC (2026-10-15T20:00:00Z), то при конвертации в локальное время может получиться 2026-10-16.
Решение: Явно указывайте временную зону в дате или договоритесь с партнёром об использовании UTC.
🔍 Как выгрузить дату в формате ДД.ММ.ГГГГ, если система требует ISO?
Используйте функцию Формат с параметром "ДФ=DD.MM.YYYY", но помните, что это может привести к ошибкам при загрузке в системы, ожидающие ISO 8601. Лучше согласуйте с партнёром переход на стандартный формат.
Пример кода:
ДатаСтрока = Формат(ТекущаяДата,"ДФ=DD.MM.YYYY");
🔍 Можно ли в XML для 1С записать дату без разделителей (например, 20261015)?
Да, такой формат (YYYYMMDD) поддерживается, но он менее читаемый и может вызвать проблемы при ручной проверке XML. Чаще всего его используют в высоконагруженных системах для экономии места (например, в обменах с 1С:Розница).
Пример:
<Дата>20261015</Дата>
🔍 Как обработать дату 01.01.0001 в XML?
Дата 01.01.0001 (минимальная дата в 1С) часто вызывает ошибки при обмене, так как многие системы не поддерживают такие крайние значения. Решения:
- Замените её на
nullили пустую строку в XML. - Используйте условную дату (например,
01.01.1900), если это допустимо бизнес-логикой. - Настройте правила обмена так, чтобы такие даты не выгружались.
Пример кода для замены:
Если Дата = Дата(1,1,1) Тогда
ДатаСтрока ="";
Иначе
ДатаСтрока = Формат(Дата,"ДФ=yyyy-MM-dd");
КонецЕсли;
🔍 Где в 1С посмотреть логи ошибок обмена с датами?
Логи обмена хранятся в следующих местах:
- Для CommerceML:
Администрирование → Обмен данными → Логи обмена. - Для EnterpriseData:
Администрирование → Поддержка и обслуживание → Логи регистрации. - Для кастомизированных обменов: проверьте каталог временных файлов (обычно
%TEMP%или подкаталог базы 1С).
Ищите ошибки с текстами типа "Ошибка разбора даты" или "Неверный формат значения".