Схемы импорта и экспорта являются дочерними объектами справочника НСИ. Используя язык Fore можно настроить:
импорт из источников:
Microsoft OLEDB Provider for Oracle;
Microsoft OLEDB Provider for SQL Server;
Microsoft Excel (*.xls, *.xlsx);
Microsoft Access (*.mdb);
Microsoft XML (*.xml);
текстовый файл (*.txt);
буфер обмена.
экспорт в приёмники:
Microsoft OLEDB Provider for Oracle;
Microsoft OLEDB Provider for SQL Server;
Microsoft Excel (*.xls, *.xlsx);
Microsoft Access (*.mdb);
Microsoft XML (*.xml);
Текстовый файл (*.txt).
Для выполнения примера в репозитории предполагается наличие справочника НСИ и таблицы с идентификаторами D_EXP_IMP и TBL_IMP соответственно и файла «C:\Data_out.txt».
Также требуется форма, на которой расположены:
кнопка Button1 для экспорта;
кнопка Button2 для импорта;
Добавьте ссылки на системные сборки: Db, Dt, Metabase, Rds.
При нажатии кнопки Button1 в справочник D_EXP_IMP будет добавлена схема экспорта, затем выполнен экспорт элементов справочника в текстовый файл «C:\Data_out.txt». Экспорт производится по следующим параметрам:
экспортируются только элементы первого уровня справочника;
выполняется сортировка экспортируемых элементов по значению атрибута NAME.
При нажатии кнопки Button2 в справочник D_EXP_IMP будет добавлена схема экспорта, затем выполнен импорт данных из таблицы репозитория с идентификатором TBL_IMP в справочник D_EXP_IMP.
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
Mb: IMetabase;
Dict: IRdsDictionary;
Export: IMetaRdsExportSchema;
i: Integer;
dictAts: IRdsAttributes;
Attr: IRdsAttribute;
attrMap: IRdsExportSchemaAttribute;
dictSort: IRdsSortAttributes;
dictFilter: IRdsDictionaryFilterConditions;
Cond: IRdsDictionaryFilterCondition;
textCons: IDtTextConsumer;
dictInst: IRdsDictionaryInstance;
Begin
Mb := MetabaseClass.Active;
// Получаем справочник НСИ
Dict := Mb.ItemById("D_EXP_IMP").Edit As IRdsDictionary;
// Создаем новую схему экспорта
Export := Dict.ExportSchemas.Add As IMetaRdsExportSchema;
// Определяем привязку атрибутов справочника к полям приёмника
dictAts := Dict.Attributes;
For i := 0 To dictAts.Count - 1 Do
Attr := dictAts.Item(i);
attrMap := Export.AddMapping;
attrMap.Attribute := Attr;
attrMap.FieldName := Attr.Id;
End For;
// Указываем, что перед экспортом необходимо очистить приёмник
Export.ClearBeforeExport := True;
// Задаем сортировку по атрибуту "NAME"
dictSort := Export.SortAttributes;
Attr := dictAts.FindById("NAME");
dictSort.Add(Attr, True);
// Добавляем фильтрацию: экспортировать только элементы 1-го уровня
dictFilter := Export.Filter;
Attr := dictAts.FindById("PARENT_KEY");
Cond := dictFilter.Add(Attr);
Cond.Value := Null;
Cond.Operation := RdsConditionOperation.Equal;
// Настраиваем приёмник данных: текстовый файл
textCons := New DtTextConsumer.Create;
textCons.File := "c:\Data_out.txt";
textCons.WriteHeader := True;
textCons.RowDelimiter := #13 + #10;
textCons.DelimitedColumnDelimiter := #9;
textCons.DelimitedTextQualifier := "'";
Export.Consumer := textCons;
// Сохраняем справочник
(Dict As IMetabaseObject).Save;
// Выполняем экспорт
dictInst := Dict.Open(Null) As IRdsDictionaryInstance;
dictInst.ExportData(Export);
End Sub Button1OnClick;
Sub Button2OnClick(Sender: Object; Args: IMouseEventArgs);
Var
MB: IMetabase;
MObj: IMetabaseObject;
Dict: IRdsDictionary;
Import: IRdsImportSchemas;
SchemaImport: IRdsImportSchema;
Attrs: IRdsAttributes;
TableObj: IMetabaseObjectDescriptor;
Table: ITable;
Begin
MB := MetabaseClass.Active;
// Получаем справочник НСИ
MObj := MB.ItemById("D_EXP_IMP").Edit;
Dict := MObj As IRdsDictionary;
Attrs := Dict.Attributes;
// Создаем новую схему импорта
Import := Dict.ImportSchemas;
SchemaImport := Import.Add;
SchemaImport.Id := "Import1";
SchemaImport.Name := "Схема импорта №1";
// Дополнение справочника при импорте
SchemaImport.Incremental := True;
// Параметры привязки атрибутов справочника НСИ к полям таблицы
SchemaImport.Mappings(Attrs.Key).FieldName := "Key";
SchemaImport.Mappings(Attrs.Name).FieldName := "Name";
SchemaImport.Mappings(Attrs.Order).FieldName := "Ord";
SchemaImport.Mappings(Attrs.ParentKey).FieldName := "Parent_key";
// Таблица для импорта данных
TableObj := MB.ItemById("TBL_IMP");
Table := TableObj.Bind As ITable;
SchemaImport.TableObject := TableObj;
SchemaImport.TableName := Table.NativeName;
MObj.Save;
End Sub Button2OnClick;
См. также: