При выгрузке данных из 1С в формат DBF разработчики нередко сталкиваются с претензиями пользователей: при открытии сформированного файла в Microsoft Excel даты отображаются с перепутанными местами днями и месяцами (например, MM.DD.YYYY вместо привычного DD.MM.YYYY). Разберем, как устроен формат даты в таблицах dBase, почему Excel интерпретирует его некорректно и как правильно проверять и обрабатывать такие файлы.
Рассмотрим типовой пример создания и заполнения файла DBF средствами платформы 1С:
Т = Новый XBase;
ИмяФайлаВыгрузки = "Export_" + СокрЛП(НомерДокумента) + ".dbf";
ПутьКФайлу = КаталогВременныхФайлов() + ИмяФайлаВыгрузки;
// Определение структуры полей
Т.Поля.Добавить("NDOC", "S", 20, 0);
Т.Поля.Добавить("DATEDOC", "D");
Т.Поля.Добавить("CODEPST", "S", 12, 0);
Т.СоздатьФайл(ПутьКФайлу);
// Добавление записи
Т.Добавить();
Т.УстановитьЗначениеПоля("NDOC", НомерДокумента);
Т.УстановитьЗначениеПоля("DATEDOC", ДатаДокумента);
Т.УстановитьЗначениеПоля("CODEPST", СокрЛП(Выборка.Номенклатура.Код));
Т.Записать();
Т.ЗакрытьФайл();
Проанализируем структуру создаваемого файла. Объект XBase формирует таблицу в соответствии со стандартом dBASE III/IV. В этой спецификации поле типа "D" (Date) обладает следующими свойствами:
YYYYMMDD (например, 20230514).20230514000003461)." ").Таким образом, со стороны 1С данные записываются строго по международному стандарту, и изменить внутренний формат даты в бинарной структуре DBF невозможно.
Выясним, почему одна и та же таблица DBF корректно читается в специализированных утилитах (например, DBF Viewer), но отображается как MM.DD.YYYY в Excel:
.dbf через меню «Файл — Открыть» или двойным кликом старые версии Excel (в особенности Excel 2003) используют встроенный конвертер данных. Этот механизм часто жестко ориентирован на американский стандарт дат (Month/Day/Year), игнорируя текущие региональные настройки операционной системы Windows.HKEY_USERS\.DEFAULT\Control Panel\International), где может быть прописан формат M/d/yyyy.Разберем практические шаги по устранению проблемы отображения данных.
Для контроля содержимого файлов DBF не следует использовать текстовые редакторы или Excel. Проверку валидности сформированного файла необходимо выполнять в специализированных программах (например, DBF Viewer, CDBF) или открывать файл обратно в 1С через объект XBase методом ОткрытьФайл().
Если конечному пользователю требуется просматривать данные именно в Excel, открывать файл следует не прямым кликом, а через процедуру импорта:
schema.ini, указав параметры:
[Export.dbf]
Format=DBaseIndex
DateFormat=DD.MM.YYYY
Если файл создается исключительно для чтения человеком, а не для интеграции со сторонними устаревшими СУБД, целесообразно заменить формат выгрузки в 1С:
ТабличныйДокумент и сохранить его методом ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX). В этом случае формат даты будет жестко зафиксирован ячейкой таблицы.Формат(ДатаДокумента, "ДФ=dd.MM.yyyy").