Импорт таблиц DBF в 1С:Предприятие 8.3 — через Excel, обработку и код
Содержание
Загрузить DBF файл в 1С 8.3 можно двумя путями. Без программиста: открыть DBF в LibreOffice Calc или Excel, сохранить в XLSX и загрузить через обработку «Загрузка данных из табличного документа» или через встроенную команду загрузки в списке. С кодом: прочитать файл объектом XBase во внешней обработке и сразу создать элементы справочников или документы.
Типичная ситуация: поставщик прислал прайс из складской программы в формате .dbf, или нужно перенести справочник из старой DOS-системы. Файл открывается «кракозябрами», а 1С его как табличный документ вообще не видит. Ниже — что проверить в файле и какой способ выбрать под задачу.
Подготовка DBF-файла: структура и кодировка
DBF — простая таблица: заголовок с описанием полей и строки фиксированной длины. До загрузки в 1С посмотрите на неё внимательно, это сэкономит несколько неудачных попыток.
Что проверить:
- 📁 Сопутствующие файлы. Если в таблице есть поля типа memo, их текст лежит в отдельном файле
.dbtили.fptс тем же именем. Без него memo-поля придут пустыми. Индексы.cdx,.ntx,.mdxдля загрузки не нужны. - 🔤 Кодировка. Файлы из DOS-программ и старых версий 1С обычно в кодировке DOS (cp866, в терминах 1С — OEM). Файлы из Windows-программ — в Windows-1251 (ANSI).
- 🏷️ Имена полей. В DBF имя поля не длиннее 10 символов, латиницей, обычно в верхнем регистре:
NAME,ARTICUL,PRICE. Длинные имена при выгрузке из других программ обрезаются — сверьте, какое поле что означает. - 🔢 Типы полей.
C— строка,N— число,D— дата,L— логическое,M— memo. - 🗑️ Удалённые записи. В DBF строка при удалении только помечается. Некоторые программы показывают такие строки, некоторые — нет, поэтому количество строк в разных просмотрщиках может расходиться.
Как быстро определить кодировку
Самый надёжный способ — открыть файл в LibreOffice Calc. При открытии DBF он спрашивает набор символов. Выберите «Кириллица (DOS/OS2-866)» и посмотрите на текст. Если вместо букв мусор — откройте заново с «Кириллица (Windows-1251)».
Второй способ — заглянуть в заголовок. Байт со смещением 29 (0x1D) хранит признак кодовой страницы:
| Значение байта | Кодировка | Что ставить в 1С |
|---|---|---|
0x65 или 0x26 | DOS cp866 | КодировкаXBase.OEM |
0xC9 | Windows-1251 | КодировкаXBase.ANSI |
0x00 | не указана | определить по тексту |
Нулевой байт кодировки встречается часто: многие программы его не заполняют. Тогда решает только пробное открытие.
Способ 1. Загрузка DBF в 1С через табличный документ
Табличный документ 1С читает xlsx, xls, ods и mxl, но не DBF. Поэтому файл сначала переводят в один из этих форматов. Этот путь подходит для разовой загрузки до нескольких десятков тысяч строк, когда программиста под рукой нет.
Шаг 1. Конвертируйте DBF в XLSX
- Откройте файл в LibreOffice Calc, выберите кодировку (см. выше).
- Проверьте, что русский текст читается, а числа не превратились в строки.
- Удалите лишние столбцы, переименуйте шапку понятно: «Артикул», «Наименование», «Цена».
- Сохраните как
.xlsx.
Excel тоже открывает DBF, но кодировку не спрашивает. Если в Excel видны «кракозябры», быстрее перейти на LibreOffice, чем бороться с настройками.
Шаг 2. При необходимости сохраните в MXL
MXL — родной формат табличного документа 1С. Он нужен, если обработка или старая конфигурация принимает только его:
- В 1С откройте
Главное меню → Файл → Открытьи выберите.xlsx. - Табличный документ откроется в отдельном окне.
Главное меню → Файл → Сохранить как, тип — «Табличный документ (*.mxl)».
Шаг 3. Загрузите таблицу в базу
Варианты, от простого к универсальному:
| Инструмент | Когда подходит | Ограничения |
|---|---|---|
| Встроенная команда загрузки в списке (например, Номенклатура в БП 3.0) | Новые элементы справочника, цены | Только предусмотренные разработчиком реквизиты |
| Вставка из файла в табличную часть документа | Строки товаров в поступлении или реализации | Работает в документах, где есть такая команда |
| Внешняя обработка «Загрузка данных из табличного документа» | Любой справочник, документ, регистр сведений | Нужны права на внешние обработки |
Универсальная обработка «Загрузка данных из табличного документа» — это и есть то, что часто называют «универсальным табличным документом». Порядок работы с ней:
- Откройте
.epfчерезГлавное меню → Файл → Открыть. - Выберите режим: загрузка в справочник, в табличную часть или в регистр сведений .
- Укажите вид объекта, например справочник «Номенклатура».
- Вставьте данные: откройте файл кнопкой обработки или скопируйте ячейки из Excel.
- На вкладке настройки отметьте, какой колонке какой реквизит соответствует.
- Задайте реквизит поиска (например, «Артикул»), чтобы повторная загрузка обновляла элементы, а не плодила дубли.
- Выполните контроль заполнения, затем загрузку.
Если при открытии обработки появляется предупреждение безопасности — это защита от опасных действий. Открывайте только обработки из проверенного источника. Отключать защиту для всех пользователей не нужно.
Способ 2. Прямой импорт DBF в 1С через XBase
Для регулярной загрузки ручная конвертация неудобна. В платформе есть объект встроенного языка XBase, который читает и пишет DBF напрямую. Он работает на сервере, в толстом клиенте и во внешнем соединении. В тонком клиенте и веб-клиенте объекта XBase нет, поэтому в управляемой форме файл передают на сервер.
Схема внешней обработки для управляемой формы:
- Пользователь выбирает файл на своём компьютере.
- Файл помещается во временное хранилище.
- На сервере он записывается во временный файл и открывается через
XBase. - Каждая строка превращается в элемент справочника.
Пример: загрузка номенклатуры из DBF с полями ARTICUL и NAME в БП 3.0. Форма обработки, команда «Загрузить»:
&НаКлиенте
Процедура Загрузить(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
Создано = ЗагрузитьНаСервере(Адрес);
Сообщить(СтрШаблон("Создано элементов: %1", Формат(Создано, "ЧН=0; ЧГ=0")));
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗагрузитьНаСервере(Адрес)
ИмяФайла = ПолучитьИмяВременногоФайла("dbf");
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ИмяФайла);
ДБФ = Новый XBase;
ДБФ.Кодировка = КодировкаXBase.OEM; // для файлов Windows — КодировкаXBase.ANSI
ДБФ.ОткрытьФайл(ИмяФайла, , Истина); // только чтение
Создано = 0;
ДБФ.Первая();
Пока Не ДБФ.ВКонце() Цикл
Артикул = СокрЛП(ДБФ.ARTICUL);
Наименование = СокрЛП(ДБФ.NAME);
Если ЗначениеЗаполнено(Артикул)
И Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул).Пустая() Тогда
Элемент = Справочники.Номенклатура.СоздатьЭлемент();
Элемент.Артикул = Артикул;
Элемент.Наименование = Наименование;
Элемент.НаименованиеПолное = Наименование;
Элемент.Записать();
Создано = Создано + 1;
КонецЕсли;
ДБФ.Следующая();
КонецЦикла;
ДБФ.ЗакрытьФайл();
УдалитьФайлы(ИмяФайла);
Возврат Создано;
КонецФункции
Что важно в этом коде:
- 🔑 Поля читаются как свойства объекта:
ДБФ.ARTICUL. Имя — ровно как в заголовке файла. - ✂️ Строковые поля DBF дополнены пробелами до длины поля, поэтому
СокрЛПобязателен. Иначе поиск по артикулу не найдёт уже существующий элемент. - 📅 Поле типа
Dприходит как дата. Пустая дата в DBF превращается в пустую дату 1С, её стоит проверять черезЗначениеЗаполнено. - 🔁 Проверка по артикулу защищает от дублей при повторной загрузке.
- 🧹 Временный файл удаляется после закрытия, иначе каталог временных файлов сервера постепенно засоряется.
Список полей файла можно получить из коллекции ДБФ.Поля: у каждого поля есть имя, тип, длина и точность. Это удобно, чтобы перед загрузкой показать пользователю структуру и убедиться, что поставщик не поменял формат.
Для обязательных реквизитов вашей конфигурации (вид номенклатуры, единица измерения, ставка НДС) заполните значения по умолчанию в коде. Иначе элемент запишется, но в документах с ним будут ошибки заполнения.
Альтернатива: ADO и ODBC
На Windows-сервере DBF можно читать и через COMОбъект("ADODB.Connection") с драйвером dBase или Visual FoxPro. Этот путь зависит от установленных драйверов и разрядности: старый провайдер Jet есть только в 32-битном варианте. Для 64-битного сервера 1С проще и надёжнее XBase.
Кракозябры и спецсимволы при загрузке DBF
Нечитаемый русский текст — почти всегда несовпадение кодировки. Признаки:
| Что видно вместо текста | Вероятная причина | Что сделать |
|---|---|---|
ЏаЁ¬Ґа, псевдографика | Файл в cp866, читается как Windows-1251 | КодировкаXBase.OEM / в Calc — DOS-866 |
Ïðèìåð, латиница с диакритикой | Файл в Windows-1251, читается как западная кодировка | КодировкаXBase.ANSI / в Calc — Windows-1251 |
| Часть букв верная, часть — вопросы | Смешанные данные или символы вне кодовой страницы | Найти «плохие» строки, исправить в источнике |
Другие частые проблемы с символами:
- 🔹 Неразрывные пробелы и табуляции внутри наименований. После загрузки поиск по наименованию не находит элемент. Лечится заменой символов:
СтрЗаменить(Строка, Символы.НПП, " "). - 🔹 Буква «ё» в некоторых DOS-кодировках отсутствует или кодируется нестандартно. Проверьте пару наименований с «ё» после пробной загрузки.
- 🔹 Числа как строки. Если цена хранится в поле типа
C, а неN, разделитель может быть точкой. Преобразуйте:Число(СтрЗаменить(СтрокаЦены, ",", "."))вПопытка, чтобы одна кривая строка не остановила всю загрузку.
Если в файле перемешаны записи из разных источников, одной правильной кодировки может не существовать. Такой файл чистят в источнике, а не подбирают параметр в 1С.
Загрузка DBF в справочники и документы: что учесть
Порядок загрузки определяет, сколько ручной работы останется потом.
- Сначала справочники, потом документы. Документ поступления ссылается на контрагента, номенклатуру, склад. Если их нет, строки документа придут с пустыми ссылками.
- Ключ сопоставления. Выберите поле, по которому строка DBF однозначно находит объект 1С: артикул, ИНН, код. Наименование — плохой ключ, оно часто отличается пробелами и сокращениями.
- Пробная загрузка в копию. Сделайте копию информационной базы и загрузите туда 20–30 строк. Проверьте карточки элементов и печатную форму документа.
- Группы справочника. Если в DBF есть код группы, создайте группы заранее и указывайте родителя при создании элемента.
- Документы — сначала записать, потом провести. Загрузите документы без проведения, проверьте суммы и только потом проведите их групповой обработкой.
Ориентир по объёму: справочник на 5–10 тысяч строк через XBase на сервере грузится за минуты. Через ручную вставку в обработку такие объёмы неудобны — интерфейс заметно тормозит на больших табличных документах.
Автоматическая загрузка DBF по расписанию
Если склад или банк выкладывают DBF каждый день в сетевую папку, ручной запуск обработки быстро надоедает. Варианты автоматизации:
- ⚙️ Дополнительная обработка с расписанием. В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) внешнюю обработку
регистрируют в
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Обработка должна описывать себя через функциюСведенияОВнешнейОбработке()и иметь команду с вызовом серверного метода. Для такой команды в карточке задаётся расписание. - 🧩 Регламентное задание в расширении. Подходит, если загрузка — постоянная часть процесса. Расширение не мешает обновлению типовой конфигурации.
- 🖥️ Внешнее соединение или пакетный запуск. Скрипт по расписанию Windows подключается к базе и вызывает процедуру загрузки. Подходит для файловых баз, где регламентные задания не выполняются сами по себе.
Что предусмотреть в автоматической загрузке:
- Путь к файлу — с точки зрения сервера. Обработка выполняется на сервере 1С от имени пользователя службы (часто
USR1CV8). ДискZ:пользователя сервер не видит — указывайте UNC-путь вида\\fileserver\exchange\price.dbfи выдайте права этой учётной записи. - Перенос обработанных файлов. После загрузки перемещайте файл в архивную папку. Иначе завтра загрузится тот же файл.
- Журнал. Пишите результат в журнал регистрации через
ЗаписьЖурналаРегистрации: сколько строк прочитано, создано, пропущено. - Блокировка файла. Если внешняя программа ещё пишет DBF, а 1С уже читает, данные придут обрезанными. Договоритесь, что программа-источник сначала пишет во временное имя, а потом переименовывает файл.
Если загрузка DBF не идёт
Если ни XBase, ни табличный документ не подходят — например, файл в нестандартном диалекте DBF с повреждённым заголовком — откройте его в LibreOffice Calc и пересохраните в DBF или XLSX. Calc восстанавливает многие файлы, которые платформа отказывается открывать.