Разобрался. Ключевым моментом оказалось использование разработчиками объекта RecordInsertList для вставки запиесй.
Во время разноски используется метод
X++:
PurchFormLettrer.suspendRecIDs()
отключение автовыделения recid при добавлении записей, соотв. дальше, при вставке, этот recid нужно явно присвоить.
Вставка происходит след образом - табл. purchParmTable.insert, внутри Insert вызывается метод
X++:
purchParmSubTable::createFromPurchParmTable(PurchParmTable _purchParmTable, boolean _insert = true)
кот. вызывает метод
X++:
purchParmSubTable.insert()
В моем случае createFromPurchParmTable отрабатывал два раза: первый раз он вызывался с параметром _insert = false. Причем в методе
X++:
this.insertPurchParmSubTable(purchParmSubTable)
как раз и происходит "ручное" присвоение recid для purchParmSubTable.
Второй раз вызов createFromPurchParmTable (уже с параметром _insert = true) происходит при отработке метода
X++:
protected void recordInsertListInsert()
{
recordInsertPurchParmTable.insertDatabase();
recordInsertPurchParmSubTable.insertDatabase();
recordInsertPurchParmLine.insertDatabase();
recordInsertPurchParmLine_Asset.insertDatabase();
this.removeRecIdSuspension();
}
в частности метода
X++:
recordInsertPurchParmTable.insertDatabase()
и в этот момент уже никто не выделяет recid. Соотв, вываливается ошибка и при этом НИКТО НЕ СНИМАЕТ ОТКЛЮЧЕНИЕ АВТОВЫДЕЛЕНИЯ recid на таблицах. Поэтому и джоб переставал работать после попытки разнести счет или накладную.
А происходит повторный вызов из-за того, что у нас включено логирование на таблице purchParmSubTable (на Insert). Как только отключили логирование все заработало.