1

在表单中Journal Voucher(AR>Journal> PaymentJournal> 点击按钮Lines)。我想从 x++ 代码创建一个新记录。

我已经看到了几种形式的方法,即 create()、initvalue()、ledgerJournalEngine_custPayment... 等,当我们按下时会调用这些方法ctrl+n。我们如何通过 x++ 代码使用这些方法来使用标准功能创建记录。

请帮忙。

4

3 回答 3

3

在您详细说明之前,我以为您正在尝试创建自己的自定义表单来扩展日记功能。如果您只是想创建一个工具,您可以创建一个新Settlement Using Cust Group按钮。在单击事件中,调用您的交易标记表单或您所做的任何事情以获取您想要使用的交易。然后把这样的东西放进去:

void clicked()
{
    ;

    element.lock();

    super();

    // Put your code here to call the open transaction editing code

    // CREATE THIS CUSTOM METHOD on C\LedgerJournalEngine_CustPayment\settleTransCustGroup
    ledgerJournalEngine.settleTransCustGroup(ledgerJournalTable);

    ledgerJournalTrans_ds.active();
    ledgerJournalTrans_ds.reread();
    ledgerJournalTrans_ds.executeQuery();

    //recalculate balances
    ledgerJournalEngine.newJournalActive(ledgerJournalTable, true);
    element.firstField();
    element.unLock();
}

然后在您创建的新方法中,我命名为settleTransCustGroup,您可以在与此类似的东西的建模中循环记录您的记录testLedgerJournalSpecTrans(在引擎类上创建的自定义方法):

void settleTransCustGroup(LedgerJournalTable    _ledgerJournalTable)
{
    LedgerJournalTrans      ledgerJournalTrans;
    ;
    // Turn this stuff into a loop and default whatever else you need
    ledgerJournalTrans.clear();
    ledgerJournalTrans.initValue();
    ledgerJournalTrans.AccountNum = '100003';
    ledgerJournalTrans.AmountCurCredit = 10;
    this.initValue(ledgerJournalTrans);
    ledgerJournalTrans.insert();
    this.write(ledgerJournalTrans);

    ledgerJournalTrans.clear();
    ledgerJournalTrans.initValue();
    ledgerJournalTrans.AccountNum = '100005';
    ledgerJournalTrans.AmountCurCredit = 15;
    this.initValue(ledgerJournalTrans);
    ledgerJournalTrans.insert();
    this.write(ledgerJournalTrans);
}
于 2013-08-13T22:17:18.980 回答
1

通常,您的 X++ 代码如下所示:

static void InsertRecord(Args _args)
{
    LedgerJournalTrans  ledgerJournalTrans;
    ;

    ledgerJournalTrans.AccountNum = "10000";
    ledgerJournalTrans.AmountCurCredit = 50.64;
    ledgerJournalTrans.AccountType = LedgerJournalACType::Ledger;
    ledgerJournalTrans.insert();
}

您可以根据需要替换字段和值。如果缺少任何字段,错误将显示在信息日志中(例如,如果您要运行上述内容,您将收到“必须指定货币代码”错误),因此请确保所有必填字段均已填写。

在大多数情况下,您还可以ledgerJournalTrans.initValue();在分配值之前调用以使用默认 AX 值预填充记录。我相信这将与您在表单上使用 Ctrl + N 时看到的相同。在上面的例子中,这样做会导致填写货币代码,并正确保存记录(至少在我们的系统上)。

于 2013-08-12T12:00:43.787 回答
1

没有神奇的方法可以从其他评论中引用的框架中调用标准功能。对于每种分类帐类型(会计、库存、订单、付款...),创建和初始化行的方式是不同的,如果您希望日记帐正确过帐,则必须采用这种特定方式。

谷歌上有很多 X++ 代码示例,它们为几乎每种类型的日志交易插入日志交易。这并不容易,但至少它总是几乎相同的代码,并且可以轻松重用。

于 2013-08-13T18:23:00.750 回答