[AX 4.0 (4.0.2503), MS SQL]
В измененной версии Аксапты, в классе purchFormLetter, закомментировано создание ParmId. (Почему именно, разбираться времени нет — тем более, что клиенты говорят, что до сих пор это не мешало.)
Но поскольку ParmId все же нужен, то я его создаю сам:
X++:
formLetter = new PurchFormLetter_InvoiceAuditCT();
formLetter.transDate(systemdateget());
formLetter.specQty(PurchUpdate::All);
// manually obtaining ParmId, because it is disabled in PurchFormLetter
numSeq = NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(ParmId))));
parmId = numSeq.num();
formLetter.parmId(parmId);
formLetter.sumBy(AccountOrder::Account);
formLetter.createParmUpdate();
Но позже возникают проблемы: в методе updateNow класса PurchFormLetter_Invoice, когда выполнение доходит до кода:
X++:
recordListPurchParmLine.first(purchParmLine);
while (purchParmLine)
{
{
…то в цикл мы не входим, и, соответственно, ничего не постится, и я получаю сообщение об ошибке.
Если посмотреть, как формируется recordListPurchParmLine, то видно, что запрос имеет примерно такой вид:
X++:
SELECT * FROM PurchParmLine WHERE ((ParmId = N'21100019165')) AND ((TableRefId = N'21100019168'))
При этом в запросе виден ParmId, который я создал в коде — но в PurchParmLine его почему-то нет! Вместо этого я нахожу в PurchParmLine соответствующую строчку, и ParmId в ней равно '21100019082' (значения ParmId меняются при каждой попытке проведения, но смысл в том, что они не равны).
Подскажите, в каком хотя бы направлении думать?