Почему при выгрузке из 1С в DBF дата в Excel отображается как MM.DD.YYYY и как это исправить?

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

При выгрузке данных из 1С в формат DBF разработчики нередко сталкиваются с претензиями пользователей: при открытии сформированного файла в Microsoft Excel даты отображаются с перепутанными местами днями и месяцами (например, MM.DD.YYYY вместо привычного DD.MM.YYYY). Разберем, как устроен формат даты в таблицах dBase, почему Excel интерпретирует его некорректно и как правильно проверять и обрабатывать такие файлы.

Как объект XBase в 1С хранит поля типа Дата

Рассмотрим типовой пример создания и заполнения файла DBF средствами платформы 1С:


Т = Новый XBase;
ИмяФайлаВыгрузки = "Export_" + СокрЛП(НомерДокумента) + ".dbf";
ПутьКФайлу = КаталогВременныхФайлов() + ИмяФайлаВыгрузки;

// Определение структуры полей
Т.Поля.Добавить("NDOC", "S", 20, 0);
Т.Поля.Добавить("DATEDOC", "D");
Т.Поля.Добавить("CODEPST", "S", 12, 0);

Т.СоздатьФайл(ПутьКФайлу);

// Добавление записи
Т.Добавить();
Т.УстановитьЗначениеПоля("NDOC", НомерДокумента);
Т.УстановитьЗначениеПоля("DATEDOC", ДатаДокумента);
Т.УстановитьЗначениеПоля("CODEPST", СокрЛП(Выборка.Номенклатура.Код));
Т.Записать();
Т.ЗакрытьФайл();

Проанализируем структуру создаваемого файла. Объект XBase формирует таблицу в соответствии со стандартом dBASE III/IV. В этой спецификации поле типа "D" (Date) обладает следующими свойствами:

  1. Фиксированная длина: под поле даты всегда выделяется ровно 8 байт. Время в этом типе поля не хранится (платформа 1С автоматически отсекает временную составляющую).
  2. Формат хранения: дата записывается в виде сплошной ASCII-строки символов в формате YYYYMMDD (например, 20230514).
  3. Отсутствие разделителей: в формате DBF нет специальных разделителей столбцов (таких как запятые или точки с запятой) или строк. Поля идут строго друг за другом в соответствии с длинами, описанными в заголовке таблицы. Именно поэтому при открытии файла текстовым редактором (Notepad, WordPad) дата визуально сливается со следующим полем (например, 20230514000003461).
  4. Пустые значения: пустая дата в формате DBF заполняется 8 пробелами (" ").

Таким образом, со стороны 1С данные записываются строго по международному стандарту, и изменить внутренний формат даты в бинарной структуре DBF невозможно.

Причины некорректного отображения в Microsoft Excel

Выясним, почему одна и та же таблица DBF корректно читается в специализированных утилитах (например, DBF Viewer), но отображается как MM.DD.YYYY в Excel:

  1. Особенности встроенного драйвера конвертации ISAM/Jet: при прямом открытии файла .dbf через меню «Файл — Открыть» или двойным кликом старые версии Excel (в особенности Excel 2003) используют встроенный конвертер данных. Этот механизм часто жестко ориентирован на американский стандарт дат (Month/Day/Year), игнорируя текущие региональные настройки операционной системы Windows.
  2. Системные настройки профиля по умолчанию: при работе в терминальных сессиях драйверы доступа к данным могут считывать локаль не из сеанса текущего пользователя, а из системной ветки реестра профиля по умолчанию (HKEY_USERS\.DEFAULT\Control Panel\International), где может быть прописан формат M/d/yyyy.

Способы решения проблемы и рекомендации

Разберем практические шаги по устранению проблемы отображения данных.

1. Использование корректного инструмента для просмотра

Для контроля содержимого файлов DBF не следует использовать текстовые редакторы или Excel. Проверку валидности сформированного файла необходимо выполнять в специализированных программах (например, DBF Viewer, CDBF) или открывать файл обратно в 1С через объект XBase методом ОткрытьФайл().

2. Настройка импорта данных в Excel на стороне клиента

Если конечному пользователю требуется просматривать данные именно в Excel, открывать файл следует не прямым кликом, а через процедуру импорта:

  1. В Excel перейти на вкладку Данные → Получить данные (или Из текста/CSV).
  2. В мастере импорта на этапе настройки типов столбцов выбрать колонку с датой и явно указать порядок разбора: ДМГ (День-Месяц-Год).
  3. При открытии файлов через сторонние компоненты можно разместить в каталоге с файлом файл конфигурации схемы schema.ini, указав параметры:
    
    [Export.dbf]
    Format=DBaseIndex
    DateFormat=DD.MM.YYYY
    

3. Альтернативные варианты выгрузки из 1С

Если файл создается исключительно для чтения человеком, а не для интеграции со сторонними устаревшими СУБД, целесообразно заменить формат выгрузки в 1С:

  1. Формирование файла XLSX: сформировать ТабличныйДокумент и сохранить его методом ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX). В этом случае формат даты будет жестко зафиксирован ячейкой таблицы.
  2. Формирование CSV: выгрузить данные в текстовый файл с разделителями, где дату можно явно отформатировать через строковую функцию Формат(ДатаДокумента, "ДФ=dd.MM.yyyy").
← На главную