Справочники и Данные · 12 мин
Как выгрузить DBF из 1С: инструкция для пользователей и разработчиков
Как выгрузить данные из 1С в DBF: обработка выгрузки, объект XBase, примеры кода, настройка кодировки, типичные ошибки и проверка результата.
Формат DBF до сих пор остаётся рабочим способом обмена данными между 1С и внешними системами: банк-клиентами, кассовым оборудованием, складскими программами, государственными порталами и устаревшими учётными системами. Платформа 1С:Предприятие имеет встроенную поддержку DBF, поэтому выгрузку можно выполнить без сторонних компонентов — как через готовые обработки, так и программно через объект XBase.
Выбор способа зависит от задачи. Если нужно разово выгрузить справочник или табличную часть документа, подойдёт универсальная обработка или встроенный механизм выгрузки таблицы. Если выгрузка регулярная, со строгой структурой полей и кодировкой — потребуется программный код, который формирует файл с заданными колонками.
Ниже разобраны оба подхода: работа через пользовательский интерфейс, написание кода на встроенном языке, настройка структуры файла и кодировки, а также проверка результата и типичные ошибки, из-за которых приёмная система отказывается читать файл.
Что нужно подготовить перед выгрузкой
До начала работы определите три вещи: какие данные выгружаете, какая структура полей требуется принимающей стороне и в какой кодировке она читает файл. Без этой информации выгрузка превращается в серию переделок: банк или складская программа отклонит файл из-за лишней колонки, неправильного типа поля или «кракозябр» вместо русских букв.
Запросите у принимающей стороны спецификацию формата: имена полей (обычно латиницей, до 10 символов), типы (символьный, числовой, дата, логический), длину строковых полей и точность чисел. Если спецификации нет, ориентируйтесь на структуру существующих файлов, которые эта система уже принимает, — их можно открыть в Excel или LibreOffice и посмотреть заголовки колонок.
Проверьте права доступа: пользователю нужны права на чтение выгружаемых данных и на запись файлов в целевой каталог. При работе на сервере 1С файл создаётся от имени пользователя службы агента сервера — у этой учётной записи должны быть права записи в сетевую папку, если выгрузка идёт не на локальный диск.
Разовая выгрузка без программирования
В типовых конфигурациях (1С:Бухгалтерия, Управление торговлей, Зарплата и управление персоналом) часто есть встроенные механизмы выгрузки для конкретных задач: выгрузка в банк, обмен с кассой, передача данных в ПФР. Эти обработки уже формируют файлы нужной структуры, и их стоит искать в первую очередь — обычно в разделах «Администрирование», «Обмен данными» или в меню документа «Ещё».
Если специализированной обработки нет, простейший вариант — вывести данные в табличный документ (например, через отчёт или консоль запросов) и сохранить его через «Файл → Сохранить как». Однако табличный документ не сохраняется в DBF напрямую: доступны MXL, Excel, CSV и другие форматы. Поэтому для получения именно DBF без кода используют универсальные обработки выгрузки, которые публикуются в открытых источниках, либо промежуточный путь: сохранить в CSV и сконвертировать в DBF через Excel или LibreOffice с выбором кодировки.
Учтите ограничение конвертации через Excel: при сохранении в DBF Excel обрезает имена полей до 10 символов, может изменить типы колонок и по умолчанию пишет в кодировке Windows. Если принимающая система требует DOS-кодировку, такой файл придётся дополнительно перекодировать.
Сравнение способов выгрузки
Подходит для стандартных обменов (банк, касса). Ограничение: структура файла жёстко задана, изменить её без доработки нельзя.
Подходит для разовой выгрузки простых таблиц. Ограничение: нестабильные типы полей, проблемы с кодировкой, ручные действия.
Подходит для регулярного обмена со строгой структурой. Ограничение: требует навыков программирования на встроенном языке 1С.
Программная выгрузка через объект XBase
Объект XBase — штатный инструмент платформы для чтения и записи DBF-файлов. Он работает и на клиенте, и на сервере, не требует установки драйверов и позволяет полностью контролировать структуру файла. Типовой сценарий: создать объект, описать поля, создать файл, перебрать данные и записать строки.
Пример выгрузки справочника номенклатуры с тремя полями — код, наименование и цена:
ФайлDBF = Новый XBase;
ФайлDBF.Кодировка = КодировкаXBase.OEM;
ФайлDBF.Поля.Добавить("CODE", "S", 10);
ФайлDBF.Поля.Добавить("NAME", "S", 100);
ФайлDBF.Поля.Добавить("PRICE", "N", 15, 2);
ФайлDBF.СоздатьФайл("C:\Export\nomenklatura.dbf");
Запрос = Новый Запрос("ВЫБРАТЬ Код, Наименование ИЗ Справочник.Номенклатура");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ФайлDBF.Добавить();
ФайлDBF.CODE = Выборка.Код;
ФайлDBF.NAME = Выборка.Наименование;
ФайлDBF.PRICE = 0; // подставьте реальный источник цены
ФайлDBF.Записать();
КонецЦикла;
ФайлDBF.ЗакрытьФайл();
Типы полей задаются одной буквой: S — строка (с указанием длины), N — число (длина и количество знаков после запятой), D — дата, L — логическое значение. Имена полей ограничены десятью символами и обычно пишутся латиницей — это ограничение самого формата DBF, а не платформы.
Метод ЗакрытьФайл() обязателен: пока файл не закрыт, он может остаться заблокированным, а данные — не сброшенными на диск полностью. Для надёжности оборачивайте работу с файлом в Попытка/Исключение с гарантированным закрытием файла в блоке исключения.
- 1Создайте объект XBase и задайте кодировку (OEM или ANSI)
- 2Опишите поля методом Поля.Добавить: имя, тип, длина, точность
- 3Вызовите СоздатьФайл с полным путём к DBF
- 4Переберите выборку данных: Добавить, заполнить поля, Записать
- 5Вызовите ЗакрытьФайл и проверьте результат в сторонней программе
Кодировка: главная причина «кракозябр»
DBF хранит текст в однобайтовой кодировке, и несовпадение кодировки записи и чтения — самая частая проблема обмена. В платформе кодировка задаётся свойством XBase.Кодировка до создания файла: КодировкаXBase.OEM соответствует DOS (cp866), КодировкаXBase.ANSI — Windows (cp1251).
Как правило, старые банковские и кассовые системы ожидают OEM, а файлы, подготовленные в Windows-приложениях, читаются как ANSI. Если спецификации нет, выгрузите тестовый файл в обеих кодировках и откройте в программе-получателе: правильный вариант покажет русские наименования без искажений.
Отдельный нюанс — запись в существующий DBF. При открытии готового файла методом ОткрытьФайл платформа пытается определить кодировку по заголовку файла, но заголовок может быть пустым или неверным. Если при чтении видны искажённые символы, задайте кодировку явно перед открытием.
Ограничения формата DBF и обходные пути
Формат DBF накладывает жёсткие ограничения, которые нужно учитывать при проектировании выгрузки. Имя поля — максимум 10 символов. Длина строкового поля — до 254 символов; более длинные тексты придётся обрезать или разбивать на несколько полей. Типов «дата и время» и «двоичные данные» в классическом DBF нет — время хранят строкой или числом.
Числовые поля требуют аккуратного расчёта длины: в неё входят целая часть, разделитель и дробная часть. Например, для суммы до миллиона с копейками нужна длина не менее 10 (7 цифр + точка + 2 знака). Если значение не помещается в отведённую длину, при чтении в других программах поле может отображаться как заполненное звёздочками или пустое.
NULL-значений в DBF нет: пустая дата записывается как пробелы или нулевая дата, пустое число — как ноль. Если для принимающей системы критично различие «ноль» и «не задано», договоритесь о служебном признаке в отдельном поле.
Выгрузка в клиент-серверном режиме
Если код выполняется на сервере 1С, путь к файлу интерпретируется относительно сервера, а не компьютера пользователя. Строка «C:\Export\file.dbf» создаст файл на диске C: сервера приложений, и пользователь его там не найдёт. Для передачи файла пользователю используют временное хранилище: сервер пишет файл во временный каталог, помещает его в хранилище (ПоместитьВоВременноеХранилище), а клиент забирает данные и сохраняет локально через диалог выбора файла.
Альтернатива — запись сразу в сетевую папку, доступную и серверу, и пользователям. В этом случае убедитесь, что у учётной записи агента сервера есть права на запись в этот каталог, а путь задан в формате UNC (\\сервер\папка\файл.dbf), а не через подключённый сетевой диск — буквы дисков у службы сервера 1С обычно отсутствуют.
При регулярных выгрузках добавляйте в имя файла дату и время (например, nomen_20260115_1430.dbf). Это исключает затирание предыдущей выгрузки и упрощает разбор ситуаций, когда приёмная сторона утверждает, что файл не пришёл или пришёл пустым.
Проверка результата выгрузки
Минимальная проверка — открыть полученный DBF независимым средством: Excel, LibreOffice Calc или любым DBF-просмотрщиком. Сверьте три вещи: количество строк совпадает с количеством выгружаемых записей, русский текст читается без искажений, числа и даты отображаются в ожидаемом формате.
Дополнительно проверьте крайние значения: самое длинное наименование (не обрезалось ли), максимальную сумму (поместилась ли в длину поля) и записи с пустыми реквизитами (как они представлены в файле). Именно на граничных значениях выгрузка чаще всего ломается.
Финальный контроль — тестовая загрузка файла в принимающую систему. Только она покажет, совпала ли структура полей, порядок колонок и кодировка с реальными ожиданиями приёмника.
Как проверить результат
Совпадает с числом выгруженных записей
Строк меньше — часть данных потеряна, или файл пуст
Наименования читаются корректно
Нечитаемые символы — неверная кодировка
Суммы и количество совпадают с источником
Нули или звёздочки — значение не влезло в длину поля
Система принимает файл без ошибок
Ошибка формата — сверяйте имена и типы полей со спецификацией
Частые вопросы
Можно ли выгрузить DBF из 1С без программирования?
Частично. Типовые обработки обмена (банк, касса) формируют DBF без кода, но только в заранее заданной структуре. Для произвольной таблицы без кода придётся идти через сохранение в CSV/Excel с последующей конвертацией, что даёт менее предсказуемый результат.
Чем открыть DBF-файл для проверки?
Подойдут Excel, LibreOffice Calc или специализированные DBF-просмотрщики. При открытии вручную укажите кодировку файла (866 или 1251), иначе русский текст может отобразиться неверно даже при корректной выгрузке.
Почему после выгрузки русские буквы отображаются неправильно?
Кодировка записи не совпадает с кодировкой чтения. Перевыгрузите файл, явно задав свойство Кодировка: OEM (DOS 866) для старых систем, ANSI (Windows 1251) для современных Windows-приложений. Кодировку нужно устанавливать до создания файла.
Как выгрузить в DBF данные с длинными наименованиями?
Строковое поле DBF ограничено 254 символами. Если текст длиннее, разбейте его на несколько полей (NAME1, NAME2) по согласованию с приёмной стороной либо сократите по правилам спецификации. Простое обрезание без договорённости может сделать записи неразличимыми.
Файл создаётся, но пустой — в чём причина?
Чаще всего не вызван метод Записать после заполнения полей или не вызван ЗакрытьФайл в конце. Также проверьте, что запрос данных действительно возвращает строки: пустая выборка даст корректный, но пустой DBF с одними заголовками полей.
Можно ли дозаписывать строки в существующий DBF?
Да. Откройте файл методом ОткрытьФайл (второй параметр — режим записи), затем используйте Добавить и Записать — новые строки добавятся в конец. Перед открытием задайте кодировку, совпадающую с кодировкой исходного файла, иначе смешаете две кодировки в одном файле.
Что важно запомнить
Для разовой выгрузки используйте типовые обработки или конвертацию через табличный документ, для регулярного обмена — объект XBase с явным описанием полей и кодировкой. Главные причины сбоев: неверная кодировка, имена полей длиннее 10 символов и недостаточная длина числовых полей. Всегда проверяйте файл независимым просмотрщиком и тестовой загрузкой в приёмную систему.