Экспорт-импорт¶
Общая информация¶
Функция экспорта используется для выгрузки данных из базы в некое физическое устройство (например, в файл или на принтер) в определенном формате. Функция импорта – для загрузки данных с некоего физического устройства в базу.
Как экспорт, так и импорт структурно делятся на 2 части:
-
Конвертер – набор настроек и методов, с помощью которых данные преобразовываются из одного формата в другой.
-
Устройство – физическое устройство для получения (выгрузки) данных.
Конвертер состоит из кодовой страницы и макетов:
-
Кодовая страница – используется для обеспечения соответствия кодовой страницы данных в базе данным на устройстве (в файле).
-
Макет – используется для обеспечения соответствия полей базы полям строки файла. Состоит из метода проверки принадлежности строки к макету и полей.
Работа экспорта¶
-
На вход подается ссылка на глобаль с данными из базы в виде:
@gl@(№ строки,Имя поля)=Значение поля
-
Берётся строка данных базы, определяется её принадлежность к одному из макетов конвертера (первому, метод проверки принадлежности строки которого вернёт 1).
-
Если строка не подошла ни к одному из макетов, то она не будет экспортирована.
-
В противном случае происходит конвертация данных на основании настройки полей макета, и в базе создается строка, подлежащая записи на устройство (в файл).
-
Данная строка конвертируется в нужную кодовую страницу.
-
Для построчных конвертеров эта строка сразу записывается на устройство (в файл), в противном случае (например, для конвертера .dbf-файлов), сначала проходят конвертацию все строки, а потом проводится запись уже готовых данных для всего файла.
-
Запись данных на устройство заканчивается и запускаются методы постдействия по экспорту.
Работа импорта¶
Абсолютно аналогичен экспорту, только данные берутся из устройства, а итогом импорта является глобаль в виде:
@gl@(№ строки,Имя поля)=Значение поля
Ведётся журнал экспорта-импорта.
Примечание
При импорте из текстового файла игнорируются полные строки, начинающиеся с:
- Символа «-» («минус») – они считаются комментариями.
- Фрагмента [Body] – считается, что это служебная строка.
- Фрагмента [Header] – считается, что это служебная строка.
Особенности настройки¶
-
При создании метода проверки принадлежности строки к макету на вход метода отдается Oref объекта проверяемого макета и ссылка на глобаль с проверяемой строкой. Если на выходе 0 – строка не принадлежит макету, 1 – строка принадлежит макету.
-
При создании метода постдействия по экспорту (или импорту) на вход метода отдается Oref текущего объекта типа экспорта (или импорта). Для генерации ошибки импорта-экспорта в методах постдействия достаточно присвоить свойству ErrorText переданного в метод объекта сообщение об ошибке.
-
При описании полей макета:
- Для текстового конвертера Имя для устройства можно не указывать, для табличных (типа .dbf) – обязательно указывать имя колонки в таблице файла.
- Тип данных – метод преобразования данных поля из файла в базу (например, дата). При написании своего метода помните, что на вход подается Oref объекта текущего макета и текущее значение поля, на выходе должно быть новое значение этого поля.
- Формат – по какому краю поля центрировать его значение, <> - поставить посередине;
- Символ-заполнитель – для конвертера .dbf имеет значение количества знаков после запятой (только для числовых полей), для текстового – чем заполнять поле до его длины.
Внимание
Имеется зарезервированное имя поля: Constanta. Для поля с таким именем в качестве символа-заполнителя указывается значение этого поля (количество символов должно соответствовать длине поля).
- Символ-разделитель полей в базе имеет смысл для текстового конвертера в случае, когда данные в строке разделены каким-то символом. В этом случае не работают настройки длины, формата и символа-заполнителя (кроме поля Constanta).
Запуск экспорта¶
Для запуска экспорта необходимо выполнить следующие действия:
-
Открыть соответствующий объект класса User.ExportType (можно с использованием метода User.ExportType.GetObjectByCode).
-
Выполнить присвоение: s Oref.ExportImportConverter.DataBase=gl, где gl – ссылка на глобаль с данными из базы в указанном выше формате.
-
При необходимости изменить имя файла: s Oref.ExportDevice.DeviceName=имя файла.
Внимание
Имя файла должно указывать на реальный файл, а не на его маску.
-
Выполнить: s err=Oref.Execute()
-
err=1 – экспорт выполнен успешно, в противном случае текст сообщения об ошибке находится в Oref.ErrorText.
Запуск импорта¶
Для запуска импорта необходимо выполнить следующие действия:
-
Открыть соответствующий объект класса User.ImportType (можно с использованием метода User.ImportType.GetObjectByCode или User.ImportType.GetObjectByFileName).
-
При необходимости изменить имя файла: s Oref.ImportDevice.DeviceName=имя файла.
Внимание
Имя файла должно указывать на реальный файл, а не на его маску.
-
Выполнить: s err=Oref.Execute()
err=1 – экспорт выполнен успешно, в противном случае текст сообщения об ошибке находится в Oref.ErrorText.
Также можно вместо этих трёх пунктов выполнить метод User.ImportType.ExecuteFromFile. В этом случае сначала будут просмотрены все типы импорта на предмет соответствия маски имени файла, описанной в устройстве импорта, поданному на вход метода имени файла, и при первом же совпадении будет запущена процедура импорта.