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