Показать сообщение отдельно
Старый 28.02.2018, 10:47   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Ну, Вам же уже сказали, что проблема в orig(). Простейший тест покажет проблему

X++:
custTable   custTable;
custTable   custTableOrig;
Container   conValue;

select firstonly custTable;
conValue = conIns(conValue, 1, custTable);
custTable = null;

// А теперь смотрим, что у нас в контейнере
custTable = conPeek(conValue, 1);
custTableOrig = custTable.orig();

info(strFmt('custTable.RecId = %1', custTable.RecId));
info(strFmt('custTableOrig.RecId = %1', custTableOrig.RecId));
Orig() - пустой. Там вообще нет данных! Тут, скорее, надо удивляться, что на методе update() ошибка не возникает. Т.е. подтверждается предположение, что контейнер - это хранение скалярных данных, а упакованная в него Records также рассматривается как набор скалярных данных. Некий вложенный контейнер

Соответственно, если Вы все-равно хотите использовать контейнер, то после извлечения из него записи надо через buf2buf() скопировать набор "скаляров" в поля реальной записи. Ну, как-то так

X++:
custTableCon = conPeek(conValue, 1);
select firstonly forupdate custTable where custTable.RecId == custTableCon.RecId;
global::buf2buf(custTableCon, custTable);
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...