У меня есть проект интеграции, в котором мне нужно размещать заказы на покупку в x ++. У меня уже есть работающая разноска счетов-фактур по заказу на покупку, просматривая ЗП. заполнение vendInvoiceInfoTable, vendInvoiceInfoSubTable, vendInvoiceInfoLine и vendInvoiceInfoSubLine.
Затем, когда я хочу опубликовать, я вызываю этот код по завершении, и он публикуется нормально.
purchFormLetterInvoice = PurchFormLetter_Invoice::newFromSavedInvoice(vendInvoiceInfoTable);
purchFormLetterInvoice.showQueryForm(false);
purchFormLetterInvoice.specQty(PurchUpdate::PackingSlip);
purchFormLetterInvoice.update(vendInvoiceInfoTable, vendInvoiceInfoTable.Num, systemdateget());
Проблема в том, что я хочу добавить в счет несколько заказов на покупку. Я могу добавить строки в счет-фактуру поставщика по коду, и когда я смотрю на интерфейс, он отображается как «несколько» для заказа на покупку и квитанций продукта на передней панели. Я также добавляю справочную таблицу, добавляя приведенный ниже код. Я обычно добавляю этот фрагмент дважды, если у меня есть 2 заказа на покупку, я просто заменяю OriginPurchID.
vendInvoiceInfoSubTable.clear();
vendInvoiceInfoSubTable.initValue();
vendInvoiceInfoSubTable.defaultRow();
vendInvoiceInfoSubTable.OrigPurchId = "PO-XXX";
vendInvoiceInfoSubTable.TableRefId = vendInvoiceInfoTable.TableRefId;
vendInvoiceInfoSubTable.PurchName = purchTable.PurchName;
vendInvoiceInfoSubTable.insert();
Проблема в том, что когда я вызываю приведенный ниже код для публикации, он выдает ошибку во время кода публикации, который находится ниже здесь.
if (vendInvoiceInfoSubTable.SourceAccountingEvent != localAccountingEvent.RecId)
{
vendInvoiceInfoTable.ErrorInvalidDistribution = NoYes::Yes;
throw error("@SYS326999");
}
Затем это вызывает следующую ошибку: заказ на покупку или поступление продукта были исправлены после создания счета-фактуры поставщика. Все распределения бухгалтерского учета должны быть созданы заново, чтобы отразить любые изменения в бухгалтерских распределениях заказа на поставку или поступления продукта.
Даже если я принудительно ввожу следующий «идентификатор события» в vendInvoiceInfoSubTable.SourceAccountingEvent, он терпит неудачу после слов в другом методе. Мне нечего попробовать. Но я считаю, что некоторые ссылки или, возможно, другой способ публикации могут быть решением, но я не уверен. Любая помощь будет оценена, спасибо.
Также странно, когда я запускаю код без публикации и просто помещаю его в AX. Я иду в PO и пытаюсь опубликовать ... это дает мне ту же ошибку ... но если я попробую еще раз во второй раз ... он действительно отправляет и получает эту ошибку, которая является странной.
Вот большая часть кода при удалении личной информации ..
purchTable = purchTable::find(poNum);
vendInvoiceInfoTable.clear();
vendInvoiceInfoTable.initValue();
vendInvoiceInfoTable.initFromPurchTable(purchTable);
vendInvoiceInfoTable.OrderAccount= purchtable.OrderAccount;
vendInvoiceInfoTable.InvoiceAccount= purchTable.InvoiceAccount;
vendInvoiceInfoTable.Approved = NoYes::Yes;
vendInvoiceInfoTable.DocumentOrigin = DocumentOrigin::Manual;
vendInvoiceInfoTable.CurrencyCode = purchTable.CurrencyCode;
vendInvoiceInfoTable.DocumentDate=invoiceDate;
vendInvoiceInfoTable.Description=invoiceHeader.get_Description();
vendInvoiceInfoTable.DeliveryName = purchTable.DeliveryName;
vendInvoiceInfoTable.PurchName = purchTable.PurchName;
vendInvoiceInfoTable.BatchAdministration = NoYes::Yes;
vendInvoiceInfoTable.ParmJobStatus = ParmJobStatus::Waiting;
vendInvoiceInfoTable.FixedDueDate = purchTable.FixedDueDate;
vendInvoiceInfoTable.LastMatchVariance = LastMatchVarianceOptions::OK;
vendInvoiceInfoTable.TransDate = systemDateGet();
vendInvoiceInfoTable.VendInvoiceSaveStatus = VendInvoiceSaveStatus::Pending;
vendInvoiceInfoTable.Num=InvoiceNum;
vendInvoiceInfoTable.InventSiteId=purchtable.InventSiteId;
vendInvoiceInfoTable.defaultField(fieldNum(VendInvoiceInfoTable,RemittanceLocation),null,purchTable);
vendInvoiceInfoTable.defaultField(fieldNum(VendInvoiceInfoTable,FixedDueDate),null,purchTable);
vendInvoiceInfoTable.defaultField(fieldNum(VendInvoiceInfoTable,ExchRate),null,purchTable);
vendInvoiceInfoTable.defaultField(fieldNum(VendInvoiceInfoTable,TransDate),null,purchTable);
vendInvoiceInfoTable.defaultField(fieldNum(VendInvoiceInfoTable,PaymMode),null,purchTable);
vendInvoiceInfoTable.defaultField(fieldNum(VendInvoiceInfoTable,PaymSpec),null,purchTable);
vendInvoiceInfoTable.insert();
if(vendInvoiceInfoTable)
{
vendInvoiceInfoSubTable.clear();
vendInvoiceInfoSubTable.initValue();
vendInvoiceInfoSubTable.defaultRow();
vendInvoiceInfoSubTable.ParmId = vendInvoiceInfoTable.ParmId;
vendInvoiceInfoSubTable.OrigPurchId = "po-number1";
vendInvoiceInfoSubTable.TableRefId = vendInvoiceInfoTable.TableRefId;
vendInvoiceInfoSubTable.PurchName = purchTable.PurchName;
vendInvoiceInfoSubTable.insert();
vendInvoiceInfoSubTable.clear();
vendInvoiceInfoSubTable.initValue();
vendInvoiceInfoSubTable.defaultRow();
vendInvoiceInfoSubTable.ParmId = vendInvoiceInfoTable.ParmId;
vendInvoiceInfoSubTable.OrigPurchId = "po-number2";
vendInvoiceInfoSubTable.TableRefId = vendInvoiceInfoTable.TableRefId;
vendInvoiceInfoSubTable.PurchName = purchTable.PurchName;
vendInvoiceInfoSubTable.insert();
//vendInvoiceInfoTable.selectForUpdate(true);
// vendInvoiceInfoTable.SourceDocumentHeader = 0;
// vendInvoiceInfoTable.SourceDocumentLine = 0;
// vendInvoiceInfoTable.doUpdate();
// sourceDocumentProcessorFacade::submitSourceDocumentImplementation(vendInvoiceInfoTable,1);
}
//next part will loop through and create all the lines
while(enumerator.MoveNext())
{
vendInvoiceInfoLine.clear();
vendInvoiceInfoLine.initValue();
vendInvoiceInfoLine.initFromPurchLine(purchLine);
vendInvoiceInfoLine.DeliveryName = vendInvoiceInfoTable.DeliveryName;
vendInvoiceInfoLine.ParmId = vendInvoiceInfoTable.ParmId;
vendInvoiceInfoLine.TableRefId = vendInvoiceInfoTable.TableRefId;
vendInvoiceInfoLine.currencyCode = vendInvoiceInfoTable.CurrencyCode;
vendInvoiceInfoLine.InvoiceAccount = vendInvoiceInfoTable.InvoiceAccount;
vendInvoiceInfoLine.InventDimId = purchLine.InventDimId;
vendInvoiceInfoLine.OrderAccount = vendInvoiceInfoTable.OrderAccount;
vendInvoiceInfoLine.InventTransId = purchLine.InventTransId;
vendInvoiceInfoLine.PurchPrice=purchLine.PurchPrice;
vendInvoiceInfoLine.InventNow = calculatedQty;
vendInvoiceInfoLine.ReceiveNow = calculatedQty;
vendInvoiceInfoLine.RemainBefore = calculatedQty;
vendInvoiceInfoLine.RemainBeforeInvent = calculatedQty;
vendInvoiceInfoLine.DefaultDimension = purchLine.DefaultDimension;
vendInvoiceInfoLine.LineAmount = amt;
vendInvoiceInfoLine.insert();
while select * from vendPackingSlipTrans
where vendPackingSlipTrans.OrigPurchid==purchLine.PurchId
&& vendPackingSlipTrans.InventTransId==purchLine.InventTransId
{
vendInvoiceInfoSubLine.clear();
vendInvoiceInfoSubLine.initValue();
vendInvoiceInfoSubLine.defaultRow();
vendInvoiceInfoSubLine.ParmId = vendInvoiceInfoTable.ParmId;
vendInvoiceInfoSubLine.LineRefRecId = vendInvoiceInfoLine.RecId;
vendInvoiceInfoSubLine.ReceiveNow = vendPackingSlipTrans.Qty;
vendInvoiceInfoSubLine.InventNow = vendPackingSlipTrans.Qty;
vendInvoiceInfoSubLine.JournalRefRecId = vendPackingSlipTrans.RecId;
vendInvoiceInfoSubLine.JournalRefTableId = vendPackingSlipTrans.TableId;
vendInvoiceInfoSubLine.DocumentId = vendPackingSlipTrans.PackingSlipId;
vendInvoiceInfoSubLine.insert();
}
}
purchFormLetterInvoice = PurchFormLetter_Invoice::newFromSavedInvoice(vendInvoiceInfoTable);
purchFormLetterInvoice.showQueryForm(false);
purchFormLetterInvoice.specQty(PurchUpdate::PackingSlip);
purchFormLetterInvoice.update(vendInvoiceInfoTable, vendInvoiceInfoTable.Num, systemdateget());