Перейти к содержанию

Экспорт-импорт

Общая информация

Функция экспорта используется для выгрузки данных из базы в некое физическое устройство (например, в файл или на принтер) в определенном формате. Функция импорта – для загрузки данных с некоего физического устройства в базу.

Как экспорт, так и импорт структурно делятся на 2 части:

  1. Конвертер – набор настроек и методов, с помощью которых данные преобразовываются из одного формата в другой.

  2. Устройство – физическое устройство для получения (выгрузки) данных.

Конвертер состоит из кодовой страницы и макетов:

  • Кодовая страница – используется для обеспечения соответствия кодовой страницы данных в базе данным на устройстве (в файле).

  • Макет – используется для обеспечения соответствия полей базы полям строки файла. Состоит из метода проверки принадлежности строки к макету и полей.

Работа экспорта

  1. На вход подается ссылка на глобаль с данными из базы в виде:

    @gl@(№ строки,Имя поля)=Значение поля

  2. Берётся строка данных базы, определяется её принадлежность к одному из макетов конвертера (первому, метод проверки принадлежности строки которого вернёт 1).

  3. Если строка не подошла ни к одному из макетов, то она не будет экспортирована.

  4. В противном случае происходит конвертация данных на основании настройки полей макета, и в базе создается строка, подлежащая записи на устройство (в файл).

  5. Данная строка конвертируется в нужную кодовую страницу.

  6. Для построчных конвертеров эта строка сразу записывается на устройство (в файл), в противном случае (например, для конвертера .dbf-файлов), сначала проходят конвертацию все строки, а потом проводится запись уже готовых данных для всего файла.

  7. Запись данных на устройство заканчивается и запускаются методы постдействия по экспорту.

Работа импорта

Абсолютно аналогичен экспорту, только данные берутся из устройства, а итогом импорта является глобаль в виде:

@gl@(№ строки,Имя поля)=Значение поля

Ведётся журнал экспорта-импорта.

Примечание

При импорте из текстового файла игнорируются полные строки, начинающиеся с:

  • Символа «-» («минус») – они считаются комментариями.
  • Фрагмента [Body] – считается, что это служебная строка.
  • Фрагмента [Header] – считается, что это служебная строка.

Особенности настройки

  • При создании метода проверки принадлежности строки к макету на вход метода отдается Oref объекта проверяемого макета и ссылка на глобаль с проверяемой строкой. Если на выходе 0 – строка не принадлежит макету, 1 – строка принадлежит макету.

  • При создании метода постдействия по экспорту (или импорту) на вход метода отдается Oref текущего объекта типа экспорта (или импорта). Для генерации ошибки импорта-экспорта в методах постдействия достаточно присвоить свойству ErrorText переданного в метод объекта сообщение об ошибке.

  • При описании полей макета:

    • Для текстового конвертера Имя для устройства можно не указывать, для табличных (типа .dbf) – обязательно указывать имя колонки в таблице файла.
    • Тип данных – метод преобразования данных поля из файла в базу (например, дата). При написании своего метода помните, что на вход подается Oref объекта текущего макета и текущее значение поля, на выходе должно быть новое значение этого поля.
    • Формат – по какому краю поля центрировать его значение, <> - поставить посередине;
    • Символ-заполнитель – для конвертера .dbf имеет значение количества знаков после запятой (только для числовых полей), для текстового – чем заполнять поле до его длины.

    Внимание

    Имеется зарезервированное имя поля: Constanta. Для поля с таким именем в качестве символа-заполнителя указывается значение этого поля (количество символов должно соответствовать длине поля).

    • Символ-разделитель полей в базе имеет смысл для текстового конвертера в случае, когда данные в строке разделены каким-то символом. В этом случае не работают настройки длины, формата и символа-заполнителя (кроме поля Constanta).

Запуск экспорта

Для запуска экспорта необходимо выполнить следующие действия:

  1. Открыть соответствующий объект класса User.ExportType (можно с использованием метода User.ExportType.GetObjectByCode).

  2. Выполнить присвоение: s Oref.ExportImportConverter.DataBase=gl, где gl – ссылка на глобаль с данными из базы в указанном выше формате.

  3. При необходимости изменить имя файла: s Oref.ExportDevice.DeviceName=имя файла.

    Внимание

    Имя файла должно указывать на реальный файл, а не на его маску.

  4. Выполнить: s err=Oref.Execute()

  5. err=1 – экспорт выполнен успешно, в противном случае текст сообщения об ошибке находится в Oref.ErrorText.

Запуск импорта

Для запуска импорта необходимо выполнить следующие действия:

  1. Открыть соответствующий объект класса User.ImportType (можно с использованием метода User.ImportType.GetObjectByCode или User.ImportType.GetObjectByFileName).

  2. При необходимости изменить имя файла: s Oref.ImportDevice.DeviceName=имя файла.

    Внимание

    Имя файла должно указывать на реальный файл, а не на его маску.

  3. Выполнить: s err=Oref.Execute()

    err=1 – экспорт выполнен успешно, в противном случае текст сообщения об ошибке находится в Oref.ErrorText.

Также можно вместо этих трёх пунктов выполнить метод User.ImportType.ExecuteFromFile. В этом случае сначала будут просмотрены все типы импорта на предмет соответствия маски имени файла, описанной в устройстве импорта, поданному на вход метода имени файла, и при первом же совпадении будет запущена процедура импорта.