Как создать DBF-файл с русскими названиями полей в 1С?

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

При работе с внешними информационными системами часто возникает задача выгрузки данных в формате DBF. Однако разработчики в 1С сталкиваются с жестким ограничением: при попытке задать русское имя поля с помощью стандартного объекта XBase система выдает ошибку «Неверное имя поля». Разберем, почему это происходит и как решить задачу с помощью альтернативных механизмов.

Причина ограничения встроенного объекта XBase

Проанализируем ситуацию: объект XBase в платформе 1С жестко следует стандартам dBase III/IV. Согласно этой спецификации, заголовки полей имеют строгое ограничение:

  1. Длина имени поля не может превышать 10-11 символов (байтов).
  2. Допускается использование только латинских букв, цифр и знака подчеркивания.

Платформа 1С выполняет внутреннюю проверку при вызове метода ДБФ.поля.Добавить(). Если в названии встречается кириллица, проверка блокирует операцию еще до фактической записи в файл. Поэтому стандартными средствами 1С создать DBF с русскими колонками невозможно.

Решение проблемы через ADO (ActiveX Data Objects)

Для того чтобы обойти платформенное ограничение, мы можем воспользоваться механизмом COM-соединения и библиотекой ADO. Этот способ позволяет работать с DBF-файлом не как с объектом базы данных 1С, а как с внешней таблицей через SQL-запросы. В этом случае драйвер базы данных берет на себя создание структуры, игнорируя внутренние запреты 1С.

Рассмотрим пошагово, как реализовать этот метод в среде 1С v8.3. Для работы нам понадобится установленный в системе драйвер (провайдер). Наиболее популярные:

Пример программного создания DBF через ADO

Посмотрим на пример кода, который создает файл и записывает в него данные с использованием русских названий колонок. Обратите внимание, что в ADO путь к папке считается «Базой данных», а имя файла — «Таблицей».


// Определяем путь к папке и имя файла
ПутьКПапке = "C:\Export\";
ИмяФайла = "AgentsData.dbf";

// Проверяем наличие файла и удаляем его перед созданием
ФайлНаДиске = Новый Файл(ПутьКПапке + ИмяФайла);
Если ФайлНаДиске.Существует() Тогда
    УдалитьФайлы(ПутьКПапке + ИмяФайла);
КонецЕсли;

// Создаем COM-объект для связи
Connection = Новый COMОбъект("ADODB.Connection");

// Строка соединения для драйвера Jet 4.0
// Для 64-битных систем используйте Microsoft.ACE.OLEDB.12.0
СтрокаСоединения = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ПутьКПапке + ";Extended Properties=""dBASE IV;"";";

Попытка
    Connection.Open(СтрокаСоединения);
    
    // Формируем SQL-запрос на создание таблицы с русскими именами полей
    // Важно: длина русского имени не должна превышать 10 символов
    ТекстЗапроса = "CREATE TABLE " + СтрЗаменить(ИмяФайла, ".dbf", "") + " (
    |РАЙОН char(50), 
    |ПОСЕЛЕНИЕ char(50), 
    |УЛИЦА char(50), 
    |ДОЛГ decimal(15,2))";
    
    Connection.Execute(ТекстЗапроса);
    
    // Пример добавления записи
    ЗапросЗаписи = "INSERT INTO " + СтрЗаменить(ИмяФайла, ".dbf", "") + " (РАЙОН, ПОСЕЛЕНИЕ, УЛИЦА, ДОЛГ) 
    |VALUES ('Центральный', 'Лесное', 'Мира', 1500.50)";
    
    Connection.Execute(ЗапросЗаписи);
    
    Connection.Close();
    Сообщить("Файл успешно создан");
    
Исключение
    Сообщить("Ошибка при работе с ADO: " + ОписаниеОшибки());
КонецПопытки;

Важные технические нюансы

Выясним важные детали, которые необходимо учитывать при использовании данного подхода:

  1. Длина заголовка. Несмотря на то что ADO позволяет писать кириллицей, физический формат DBF все равно ограничен 11 байтами на заголовок поля. В кодировке ANSI (Windows-1251) одна русская буква занимает 1 байт. Таким образом, ваше название «РАЙОНБАЗЫ» (9 букв) поместится, а более длинные названия могут быть обрезаны драйвером.
  2. Чтение файла в 1С. Помните, что если вы создали файл с русскими именами полей через ADO, вы не сможете открыть его обратно в 1С через стандартный ДБФ = Новый XBase. Объект XBase выдаст ошибку при попытке прочитать структуру такого файла. Читать его придется также через ADO.
  3. Кодировка данных. Чтобы данные внутри файла корректно отображались у агентов, убедитесь, что драйвер настроен на нужную кодировку. Обычно это решается параметром CharacterSet=ANSI в строке соединения или использованием файла schema.ini в папке с данными.

Таким образом, мы выяснили, что использование ADODB.Connection является единственным надежным способом создания DBF с кириллическими заголовками непосредственно из кода 1С, обходя ограничения встроенного языка.

← На главную