Ну, Вам же уже сказали, что проблема в 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);