Импорт данных ID115 — различия между версиями

Материал из GB wiki
Перейти к: навигация, поиск
(Пример импорта с последующим расчётом)
 
(не показано 15 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
[[Категория:Справочник команд ГБ]]
 
[[Категория:Справочник команд ГБ]]
 +
===Назначение команды===
 
Команда '''ID115''' (синоним – '''IMPORT''') предназначена для импорта данных, для изменения значения полей в нескольких объектах и т.п.
 
Команда '''ID115''' (синоним – '''IMPORT''') предназначена для импорта данных, для изменения значения полей в нескольких объектах и т.п.
  
<br>Пример записи значения поля ''Heap.@Upakovshik'' в группу документов:
+
===Описание команды===
  '''CreateDataSet'''(
+
=====Сопоставление с внешним справочником=====
    `dsImp`,
+
Команда может задавать соответствие между импортируемым объектом ГБ и объектом внешнего справочника.
    [
+
Поля, используемые для автоматического создания сопоставления с внешним справочником:
      `DocId,I` : ``,
+
* ExtType - тип объекта во внешнем справочнике;
      `Up,I` : ``
+
* ExtId - код объекта во внешнем справочнике;
    ]
+
* Depot - код удаленного отдела (т.е. владельца внешнего справочника).
  ),
 
  ''<тут заполняем датасет dsImp кодами документов>,''
 
  '''ProcessCommand'''(
 
    11,
 
    [
 
      `SaveImmediate` : `Y`,
 
      `ImportDs` : `dsImp`,
 
      `ImportDsMap` : [
 
                        `Id` : `Id`,
 
                        `Heap.@Upakovshik` : `Up`
 
                      ]
 
    ],
 
    `IMPORT`
 
  ),
 
  '''WaitForChildForms()'''
 
  
<br>Пример импорта справочника партнёров
+
=====Создание нового объекта=====
    ProcessCommand(
+
Для создания нового объекта в команду импорта данных нужно передавать "пустой" (null) код объекта, т.е.
      0,
+
Id = 1/0
      [
+
 
        `SaveImmediate` : `Y`,
+
=====Изменение значения полей после импорта=====
        `ImportDs` : `dsTXT`,
+
Можно импортировать данные и изменять значения полей после импорта в одной команде.<br/>
        `ImportDsMap` : [
+
Например, нужно импортировать из файла поле "Вес коробки" (BoxWeight), после чего рассчитать значение поля "Вес штуки" (@MinBoxWeight), используя значение поля "Вместимость коробки" (RatioStock).
                          `Id` : `Id`,
+
 
                          `Node` : `IfEmpty(Id,11,Id.Node)`,
+
Импорт происходит поэтапно:
                          `SubType` : 11,
+
* вначале импортируются данные из датасета, при этом в поля, которые нужно изменить, записывается значение null;
                          `Name` : `fld3`,
+
* затем с помощью конструкции "ImportDefValue:имя_поля" записываются выражения, которые изменят значения полей (см. примеры).
                          `FullName` : `fld13`,
+
 
                          `Heap.@INN` : `fld1`,
+
 
                          `Heap.@Subject` : `Case(fld4,"ю":0,"ф":1,$default:"")`,
+
===Примеры===
                          `Heap.@Phone` : `fld5`,
+
=====Пример записи значения поля ''Heap.@Upakovshik'' в группу документов=====
                          `Heap.@Address` : `fld6`,
+
'''CreateDataSet'''(
                          `Heap.@AddressFakt` : `fld7`,
+
  `dsImp`,
                          `Heap.@DriverLic` : `fld8`,
+
  [
                          `Heap.@Automobile` : `fld9`,
+
    `DocId,I` : ``,
                          `Heap.@AutoGosNum` : `fld10`,
+
    `Up,I` : ``
                          `ExtType` : `0`,
+
  ]
                          `ExtId` : `fld2`,
+
),
                          `Depot` : 209
+
''<тут заполняем датасет dsImp кодами документов>,''
                        ]
+
'''ProcessCommand'''(
      ],
+
  11,
      `ID115`
+
  [
    ),
+
    `SaveImmediate` : `Y`,
    IIF(
+
    `ImportDs` : `dsImp`,
      not WaitForChildForms(),
+
    `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),<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`
)