Показать сообщение отдельно
Старый 19.02.2003, 15:51   #12  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
Цитата:
Суть этого кода вот в чем - мы получили контейнер с 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(systemdictField.name()))
            {
                
InventTable.(fieldId) = InventTableOld.(fieldId);
            }
            
fieldId dictTable.fieldNext(fieldId);
        }
        
InventTable.insert();
    } 
__________________
С уважением, Игорь Ласийчук.