Импорт таблиц DBF в 1С:Предприятие 8.3 — через Excel, обработку и код

· 10 мин

Содержание

Загрузить 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 или 0x26DOS cp866КодировкаXBase.OEM
0xC9Windows-1251КодировкаXBase.ANSI
0x00не указанаопределить по тексту

Нулевой байт кодировки встречается часто: многие программы его не заполняют. Тогда решает только пробное открытие.

Способ 1. Загрузка DBF в 1С через табличный документ

Табличный документ 1С читает xlsx, xls, ods и mxl, но не DBF. Поэтому файл сначала переводят в один из этих форматов. Этот путь подходит для разовой загрузки до нескольких десятков тысяч строк, когда программиста под рукой нет.

Шаг 1. Конвертируйте DBF в XLSX

  1. Откройте файл в LibreOffice Calc, выберите кодировку (см. выше).
  2. Проверьте, что русский текст читается, а числа не превратились в строки.
  3. Удалите лишние столбцы, переименуйте шапку понятно: «Артикул», «Наименование», «Цена».
  4. Сохраните как .xlsx.

Excel тоже открывает DBF, но кодировку не спрашивает. Если в Excel видны «кракозябры», быстрее перейти на LibreOffice, чем бороться с настройками.

Шаг 2. При необходимости сохраните в MXL

MXL — родной формат табличного документа 1С. Он нужен, если обработка или старая конфигурация принимает только его:

  1. В 1С откройте Главное меню → Файл → Открыть и выберите .xlsx.
  2. Табличный документ откроется в отдельном окне.
  3. Главное меню → Файл → Сохранить как, тип — «Табличный документ (*.mxl)».

Шаг 3. Загрузите таблицу в базу

Варианты, от простого к универсальному:

ИнструментКогда подходитОграничения
Встроенная команда загрузки в списке (например, Номенклатура в БП 3.0)Новые элементы справочника, ценыТолько предусмотренные разработчиком реквизиты
Вставка из файла в табличную часть документаСтроки товаров в поступлении или реализацииРаботает в документах, где есть такая команда
Внешняя обработка «Загрузка данных из табличного документа»Любой справочник, документ, регистр сведенийНужны права на внешние обработки

Универсальная обработка «Загрузка данных из табличного документа» — это и есть то, что часто называют «универсальным табличным документом». Порядок работы с ней:

  1. Откройте .epf через Главное меню → Файл → Открыть.
  2. Выберите режим: загрузка в справочник, в табличную часть или в регистр сведений .
  3. Укажите вид объекта, например справочник «Номенклатура».
  4. Вставьте данные: откройте файл кнопкой обработки или скопируйте ячейки из Excel.
  5. На вкладке настройки отметьте, какой колонке какой реквизит соответствует.
  6. Задайте реквизит поиска (например, «Артикул»), чтобы повторная загрузка обновляла элементы, а не плодила дубли.
  7. Выполните контроль заполнения, затем загрузку.

Если при открытии обработки появляется предупреждение безопасности — это защита от опасных действий. Открывайте только обработки из проверенного источника. Отключать защиту для всех пользователей не нужно.

Способ 2. Прямой импорт DBF в 1С через XBase

Для регулярной загрузки ручная конвертация неудобна. В платформе есть объект встроенного языка XBase, который читает и пишет DBF напрямую. Он работает на сервере, в толстом клиенте и во внешнем соединении. В тонком клиенте и веб-клиенте объекта XBase нет, поэтому в управляемой форме файл передают на сервер.

Схема внешней обработки для управляемой формы:

  1. Пользователь выбирает файл на своём компьютере.
  2. Файл помещается во временное хранилище.
  3. На сервере он записывается во временный файл и открывается через XBase.
  4. Каждая строка превращается в элемент справочника.

Пример: загрузка номенклатуры из 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 в справочники и документы: что учесть

Порядок загрузки определяет, сколько ручной работы останется потом.

  1. Сначала справочники, потом документы. Документ поступления ссылается на контрагента, номенклатуру, склад. Если их нет, строки документа придут с пустыми ссылками.
  2. Ключ сопоставления. Выберите поле, по которому строка DBF однозначно находит объект 1С: артикул, ИНН, код. Наименование — плохой ключ, оно часто отличается пробелами и сокращениями.
  3. Пробная загрузка в копию. Сделайте копию информационной базы и загрузите туда 20–30 строк. Проверьте карточки элементов и печатную форму документа.
  4. Группы справочника. Если в DBF есть код группы, создайте группы заранее и указывайте родителя при создании элемента.
  5. Документы — сначала записать, потом провести. Загрузите документы без проведения, проверьте суммы и только потом проведите их групповой обработкой.

Ориентир по объёму: справочник на 5–10 тысяч строк через XBase на сервере грузится за минуты. Через ручную вставку в обработку такие объёмы неудобны — интерфейс заметно тормозит на больших табличных документах.

Перед загрузкой DBF в рабочую базу
Выполнено: 0 / 6

Автоматическая загрузка DBF по расписанию

Если склад или банк выкладывают DBF каждый день в сетевую папку, ручной запуск обработки быстро надоедает. Варианты автоматизации:

  • ⚙️ Дополнительная обработка с расписанием. В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) внешнюю обработку регистрируют в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Обработка должна описывать себя через функцию СведенияОВнешнейОбработке() и иметь команду с вызовом серверного метода. Для такой команды в карточке задаётся расписание.
  • 🧩 Регламентное задание в расширении. Подходит, если загрузка — постоянная часть процесса. Расширение не мешает обновлению типовой конфигурации.
  • 🖥️ Внешнее соединение или пакетный запуск. Скрипт по расписанию Windows подключается к базе и вызывает процедуру загрузки. Подходит для файловых баз, где регламентные задания не выполняются сами по себе.

Что предусмотреть в автоматической загрузке:

  1. Путь к файлу — с точки зрения сервера. Обработка выполняется на сервере 1С от имени пользователя службы (часто USR1CV8). Диск Z: пользователя сервер не видит — указывайте UNC-путь вида \\fileserver\exchange\price.dbf и выдайте права этой учётной записи.
  2. Перенос обработанных файлов. После загрузки перемещайте файл в архивную папку. Иначе завтра загрузится тот же файл.
  3. Журнал. Пишите результат в журнал регистрации через ЗаписьЖурналаРегистрации: сколько строк прочитано, создано, пропущено.
  4. Блокировка файла. Если внешняя программа ещё пишет DBF, а 1С уже читает, данные придут обрезанными. Договоритесь, что программа-источник сначала пишет во временное имя, а потом переименовывает файл.

Если загрузка DBF не идёт

Диагностика: выберите симптом

Если ни XBase, ни табличный документ не подходят — например, файл в нестандартном диалекте DBF с повреждённым заголовком — откройте его в LibreOffice Calc и пересохраните в DBF или XLSX. Calc восстанавливает многие файлы, которые платформа отказывается открывать.

Частые вопросы

Можно ли выгрузить данные из 1С обратно в DBF?
Да. Тот же объект XBase умеет создавать файл: описать поля через коллекцию Поля, создать файл, добавлять записи и записывать их. Так готовят файлы для старых банковских и складских программ.
Подойдёт ли DBF для переноса данных между двумя базами 1С 8.3?
Нет смысла. Между базами 8.3 надёжнее типовые обмены, «Выгрузка/загрузка данных XML» или конвертация данных. DBF теряет ссылочную целостность и типы.
Excel открывает DBF, но сохранить обратно в DBF не может. Это проблема?
Для загрузки в 1С — нет. Сохраняйте в XLSX и загружайте через табличный документ. Если нужен именно DBF, используйте LibreOffice Calc.
Работает ли загрузка через XBase в облачной 1С?
Внешние обработки в облачных сервисах обычно ограничены. Загрузка через табличный документ и встроенные команды работает, а запуск своего кода зависит от правил конкретного сервиса.
Почему даты из DBF загрузились как 01.01.0001?
В исходном файле дата пустая. XBase отдаёт её как пустую дату 1С. Проверяйте значение и решайте, подставить дату по умолчанию или пропустить строку.