Цитата:
Суть этого кода вот в чем - мы получили контейнер с InventTable из ДРУГОЙ компании (неважно как, и я не могу запихать в данном случае все в виртуальную компанию). Прочитали его в текущей (целевой) компании и теперь строку таблицы в целевой компании с таким же ItemId нам надо привести в соответсвие с тем что мы прочитали...
Так бы сразу и сказали
ИМХО тут всё дело в операторе data().
Попробуйте например сделать следующую вещь:
PHP код:
changecompany('c11')
{
inventTable = InventTable::find(itemId);
}
changecompany('c12')
{
inventTableNew.data(inventTable);
inventTableNew.insert();
}
Не даст вставить потому что связка dataArea + RecId не уникальна
Можно решить эту проблему например так:
PHP код:
DictTable dictTable = new DictTable(tableNum(InventTable));
DictField dictField;
FieldId fieldId;
InventTable InventTableOld;
InventTable InventTable;
container system = ['RecId','dataAreaId','sequenceNum'];
changecompany('c15')
{
InventTableOld = InventTable::find('103.291.С15');
}
changecompany('c16')
{
fieldId = dictTable.fieldNext(0);
while (fieldId)
{
dictField = new DictField(tableNum(InventTable), fieldId);
if (!confind(system, dictField.name()))
{
InventTable.(fieldId) = InventTableOld.(fieldId);
}
fieldId = dictTable.fieldNext(fieldId);
}
InventTable.insert();
}