Импорт данных ID115 — различия между версиями
Alexey (обсуждение | вклад) |
Alexey (обсуждение | вклад) (→Пример импорта с последующим расчётом) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 40: | Строка 40: | ||
`ImportDs` : `dsImp`, | `ImportDs` : `dsImp`, | ||
`ImportDsMap` : [ | `ImportDsMap` : [ | ||
− | `Id` : ` | + | `Id` : `DocId`, |
`Heap.@Upakovshik` : `Up` | `Heap.@Upakovshik` : `Up` | ||
] | ] | ||
Строка 106: | Строка 106: | ||
=====Пример импорта с последующим расчётом===== | =====Пример импорта с последующим расчётом===== | ||
− | + | Нужно импортировать поле "Вес коробки" (Heap.BoxWeight), после чего рассчитать значение поля "Вес штуки" (Heap.@MinBoxWeight),<br/>используя значение поля "Вместимость коробки" (RatioStock) | |
'''CreateDataSet'''( | '''CreateDataSet'''( | ||
`ArticulsDs`, | `ArticulsDs`, | ||
Строка 122: | Строка 122: | ||
`ImportDsMap` : [ | `ImportDsMap` : [ | ||
`Id` : `Articul`, | `Id` : `Articul`, | ||
− | `Heap.@MinBoxWeight` : `1/0`, /*либо '''Expr'''(1/0)*/ | + | `Heap.@MinBoxWeight` : `1/0`, /*либо '''Expr'''(1/0) - '''обязательно''' инициализируем поле для срабатывания ImportDefValue*/ |
`Heap.BoxWeight` : `Weight` | `Heap.BoxWeight` : `Weight` | ||
], | ], |
Текущая версия на 05:22, 21 июня 2023
Содержание
Назначение команды
Команда 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` : `DocId`, `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) - обязательно инициализируем поле для срабатывания ImportDefValue*/ `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` )