Импорт данных ID115
Содержание
Назначение команды
Команда ID115 (синоним – IMPORT) предназначена для импорта данных, для изменения значения полей в нескольких объектах и т.п.
Описание команды
Сопоставление с внешним справочником
Команда может задавать соответствие между импортируемым объектом ГБ и объектом внешнего справочника. Поля, используемые для автоматического создания сопоставления с внешним справочником:
- ExtType - тип объекта во внешнем справочнике;
- ExtId - код объекта во внешнем справочнике;
- Depot - код удаленного отдела (т.е. владельца внешнего справочника).
Создание нового объекта
Для создания нового объекта в команду импорта данных нужно передавать "пустой" (null) код объекта, т.е.
Id = 1/0
Изменение значения полей после импорта
Можно импортировать данные и изменять значения полей после импорта в одной команде.
Например, нужно импортировать из файла поле "Вес коробки" (BoxWeight), после чего рассчитать значение поля "Вес штуки" (@MinBoxWeight), используя значение поля "Вместимость коробки" (RatioStock).
Импорт происходит поэтапно:
- вначале импортируются данные из датасета, при этом в поля, которые нужно изменить, записывается значение null;
- затем с помощью конструкции "ImportDefValue:имя_поля" записываются выражения, которые изменят значения полей (см. примеры).
Примеры
Пример записи значения поля Heap.@Upakovshik в группу документов
CreateDataSet( `dsImp`, [ `DocId,I` : ``, `Up,I` : `` ] ), <тут заполняем датасет dsImp кодами документов>, ProcessCommand( 11, [ `SaveImmediate` : `Y`, `ImportDs` : `dsImp`, `ImportDsMap` : [ `Id` : `Id`, `Heap.@Upakovshik` : `Up` ] ], `IMPORT` ), WaitForChildForms()
Пример импорта справочника партнёров
В примере партнёры импортируются в одну папку.
ProcessCommand( 0, [ `SaveImmediate` : `Y`, `ImportDs` : `dsTXT`, `ImportDsMap` : [ `Id` : `Id`, `Node` : `IfEmpty(Id,11,Id.Node)`, <--для новых карточек папка 11, для существующих папку не меняем `SubType` : 11, `Name` : `fld3`, `FullName` : `fld13`, `Heap.@INN` : `fld1`, `Heap.@Phone` : `fld5`, `Heap.@Address` : `fld6`, `ExtType` : `0`, `ExtId` : `fld2`, `Depot` : 209 ] ], `ID115` ), WaitForChildForms()
Пример импорта справочника товаров
В примере товары импортируются в разные папки.
ProcessCommand( 1, [ `ParentForm` : `launch`, `SaveImmediate` : `Y`, `ImportDs` : `dsTXT`, `ImportDsMap` : [ `Id` : `ArtId`, `ItemType` : `ItemType`, `Node` : `IfEmpty(fld13,1,IfEmpty(MapGbId(10001,fld13,209,1),1))`, `Name` : `fld3`, `FullName` : `fld14`, `NUMBER` : `fld1`, `PackMin` : 101, `PackSale` : 102, `PackStock` : 102, `RatioSale` : `Ratio`, `RatioStock` : `Ratio`, `AddBarCode0` : `BC`, `Heap.@Weight` : `IfEmpty(StrToFloat(StrReplace(fld9,".",",")),0)`, `Heap.@PackType` : `IfEmpty(fld8,"")`, `ExtType` : `ExtType`, `ExtId` : `fld2`, `Depot` : 209 ] ], `ID115` ), WaitForChildForms()
Пример импорта с последующим расчётом
Нужно импортировать поле "Вес коробки" (Heap.BoxWeight), после чего рассчитать значение поля "Вес штуки" (Heap.@MinBoxWeight),
используя значение поля "Вместимость коробки" (RatioStock)
CreateDataSet( `ArticulsDs`, [ `Articul,I` : ``, `Weight` : `` ] ), <тут заполняем датасет ArticulsDs данными>, ProcessCommand( 1, [ `SaveImmediate` : `Y`, `ImportDs` : `ArticulsDs`, `ImportDsMap` : [ `Id` : `Articul`, `Heap.@MinBoxWeight` : `1/0`, /*либо Expr(1/0)*/ `Heap.BoxWeight` : `Weight` ], `ImportDefValue:Heap@MinBoxWeight`: `FormatFloat('0.######',StrToFloat(Heap.BoxWeight)/RatioStock)` ], `IMPORT` ), WaitForChildForms()
то же самое без использования ассоциативного массива: ProcessCommand( 1, `SaveImmediate=Y,ImportDs=ArticulsDs,` + `"ImportDsMap=Id=Articul||Heap.@MinBoxWeight=1/0||Heap.BoxWeight=Weight||",` + `"ImportDefValue:Heap@MinBoxWeight=FormatFloat('0.######',StrToFloat(Heap.BoxWeight)/RatioStock)"`, `IMPORT` )