Импорт данных ID115 — различия между версиями
Alexey (обсуждение | вклад) |
Alexey (обсуждение | вклад) (→Пример импорта с последующим расчётом) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 14: | Строка 14: | ||
Для создания нового объекта в команду импорта данных нужно передавать "пустой" (null) код объекта, т.е. | Для создания нового объекта в команду импорта данных нужно передавать "пустой" (null) код объекта, т.е. | ||
Id = 1/0 | Id = 1/0 | ||
+ | |||
+ | =====Изменение значения полей после импорта===== | ||
+ | Можно импортировать данные и изменять значения полей после импорта в одной команде.<br/> | ||
+ | Например, нужно импортировать из файла поле "Вес коробки" (BoxWeight), после чего рассчитать значение поля "Вес штуки" (@MinBoxWeight), используя значение поля "Вместимость коробки" (RatioStock). | ||
+ | |||
+ | Импорт происходит поэтапно: | ||
+ | * вначале импортируются данные из датасета, при этом в поля, которые нужно изменить, записывается значение null; | ||
+ | * затем с помощью конструкции "ImportDefValue:имя_поля" записываются выражения, которые изменят значения полей (см. примеры). | ||
+ | |||
===Примеры=== | ===Примеры=== | ||
Строка 31: | Строка 40: | ||
`ImportDs` : `dsImp`, | `ImportDs` : `dsImp`, | ||
`ImportDsMap` : [ | `ImportDsMap` : [ | ||
− | `Id` : ` | + | `Id` : `DocId`, |
`Heap.@Upakovshik` : `Up` | `Heap.@Upakovshik` : `Up` | ||
] | ] | ||
Строка 95: | Строка 104: | ||
), | ), | ||
'''WaitForChildForms()''' | '''WaitForChildForms()''' | ||
+ | |||
+ | =====Пример импорта с последующим расчётом===== | ||
+ | Нужно импортировать поле "Вес коробки" (Heap.BoxWeight), после чего рассчитать значение поля "Вес штуки" (Heap.@MinBoxWeight),<br/>используя значение поля "Вместимость коробки" (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` | ||
+ | ) |
Текущая версия на 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` )