Axapta 以编程方式将发票添加到Dynamics AX 2009
我对Dynamics AX 2009非常陌生,因为我还没有真正找到解决我正在做的事情的方法,所以我决定在这里提问 我需要通过X++发布(?)发票 我已经找到了这个,即使它是西班牙语的,我想你会明白的 以下是我从链接中修改的代码:Axapta 以编程方式将发票添加到Dynamics AX 2009,axapta,dynamics-ax-2009,x++,ax,Axapta,Dynamics Ax 2009,X++,Ax,我对Dynamics AX 2009非常陌生,因为我还没有真正找到解决我正在做的事情的方法,所以我决定在这里提问 我需要通过X++发布(?)发票 我已经找到了这个,即使它是西班牙语的,我想你会明白的 以下是我从链接中修改的代码: static void JAEE_PurchFormLetter(Args _args) { Num _invoiceNum; // Núm. factura TransDate _invoice
static void JAEE_PurchFormLetter(Args _args)
{
Num _invoiceNum; // Núm. factura
TransDate _invoiceDate; // Fecha factura
MyPurchFormLetter purchFormLetter = PurchFormLetter::construct(DocumentStatus::Invoice);
PurchParmUpdate purchParmUpdate;
PurchParmTable purchParmTable;
PurchParmLine purchParmLine;
TradeLineRefId tableRefId;
PurchTable purchTable;
PurchLine purchLine;
;
ttsbegin;
_invoiceNum = 'Facbyjob';
_invoiceDate = str2date('14-01-2013', 123);
purchTable = PurchTable::find('00000019_062'); // Primer pedido
// Inizializar purchFormLetter con el primer pedido
purchFormLetter.parmCallerTable(purchTable);
purchFormLetter.callInitParmPurchTable(purchTable);
purchFormLetter.proforma(false); // Proforma: NO (Registrar: SI)
purchFormLetter.enableUpdateNowField(true); // Actualizar ahora: SI
purchFormLetter.printFormLetter(false); // Imprimir: NO
purchFormLetter.transDate(_invoiceDate); // Fecha de factura
// Inizializar purchParmUpdate con el primer pedido
purchParmUpdate.clear();
purchParmUpdate.initValue();
purchParmUpdate.ParmId = purchFormLetter.parmId();
purchParmUpdate.SumBy = AccountOrder::Account; // Agrupar por cliente
purchParmUpdate.SumNum = _invoiceNum; // Núm. Factura
purchParmUpdate.SpecQty = PurchUpdate::All; // Actualizar: Todo
purchParmUpdate.DocumentStatus = DocumentStatus::Invoice; // Tipo documento: Factura
purchParmUpdate.Proforma = NoYes::No; // Proforma: NO
purchParmUpdate.SumIncludePending = NoYes::No; // Incluir pendiente: NO
if (purchParmUpdate.validateWrite())
purchParmUpdate.insert();
else
throw Exception::Error;
purchFormLetter.purchParmUpdate(purchParmUpdate);
purchFormLetter.parmParmTableNum(purchParmUpdate.SumNum);
// Tabla temporal, se crea un registro de cabecera del primer pedido (sólo uno)
purchParmTable.clear();
purchParmTable.TableRefId = FormLetter::getTableRef();
purchFormLetter.createParmTable(purchParmTable, purchTable);
if (purchParmTable.validateWrite())
purchParmTable.insert();
else
throw Exception::Error;
tableRefId = purchParmTable.TableRefId;
// BEGIN - LINEAS
// - Repetir para cada línea que se quiera facturar y para cada una y
// - asignar las variabies purchTable y purchLine según proceda
purchParmLine.clear();
purchParmLine.initValue();
// Ajustar cantidades según necesidades
// Catnidades de compra
[purchParmLine.ReceiveNow,
purchParmLine.RemainBefore,
purchParmLine.RemainAfter] = purchFormLetter.qtyPurch(purchLine, naReal());
// Cantidades de inventario
[purchParmLine.InventNow,
purchParmLine.RemainBeforeInvent,
purchParmLine.RemainAfterInvent] = purchFormLetter.qtyInvent(purchLine, naReal());
if (purchParmLine.ReceiveNow)
{
purchParmLine.ParmId = purchParmUpdate.ParmId;
purchParmLine.initFromPurchLine(purchLine);
purchParmLine.setLineAmount();
purchParmLine.TableRefId = tableRefId;
if (purchParmLine.validateWrite())
purchParmLine.insert();
else
throw Exception::Error;
}
// END - LINEAS
// Registrar!
purchFormLetter.reArrangeNow(false); // No organizar
purchFormLetter.run();
ttscommit;
}
我的问题在这行:purchormletter.callInitParmPurchTable(purchTable)代码>
为什么要从purchormletter的派生类中调用initparmpourchtable()
还有,如何做到这一点?我尝试声明我自己的类mypurchormletter
,它扩展了purchormletter
,添加了callInitParmPurchTable()
方法,但编译器告诉我,当我试着运行代码时,对象没有该方法
内容如下:
Error al ejecutar código: Object objeto no tiene el método 'callInitParmPurchTable'.
编辑:
我所做的是将该方法添加到类中,这样callInitParmPurchTable()
就是对象的一部分。但是我没有回答这个问题,因为我认为这不是正确的方法。您是否修改了purchormletter::construct(DocumentStatus::Invoice)
返回MyPurchFormLetter
再看看“向前编译”功能,我发现了以下几点:
正确的做法是创建一个继承自purchormletter
的类,并在其中实现方法callInitParmPurchTable()
,该方法显然是执行initParmPurchTable()
的方法
我最可能缺少的一部分是编译mypurchormletter
,这样编译器就可以知道方法存在了。好建议。尝试右键单击AOT中的PurchFormLetter,然后单击“向前编译”。@davidLawson@sshaheen,感谢您的建议,但是返回的是一个PurchFormLetter\u Invoice
对象,通过判断代码,我觉得它应该保持这种状态。@ackzell,类MyPurchFormLetter上存在callInitParmPurchTable,不购买发票。您正在从PurchFormLetter::construct返回PurchFormLetter\u发票,因此尝试调用该PurchFormLetter\u发票对象上不存在的方法再次感谢@DavidLawson,我想我已经改变了方法,正如我在编辑问题后解释的那样。