使用参数/过滤器以编程方式调用子窗体

Call child form programmatically with parameter / filter

我正在创建一个定制,点击一个按钮,我需要为特定的采购订单/发票日记账分配费用。

在前端,我将通过跟踪采购订单生命周期并为其开具发票来完成此操作。然后我会在 PO 的发票选项卡下,单击 Invoice Journals -> Charges -> Adjustment 。这将打开我想要的表格,我将在其中 select 一个费用代码、费用价值、货币和类别,然后我将单击 'Ok' 并让系统处理其余的过程。

表格名称:MarkupAllocation_VendInvoiceTrans

父表单名称:VendInvoiceJournal

您可以看到调用子表单时带有一些参数,例如发票号,显然需要 link。如果我进入表格下的 AOT,我右键单击并打开 VendInvoiceJournal,但我无法打开 MarkupAllocation_VendInvoiceTrans,因为它需要参数。

Objective:

A:通过代码打开 MarkupAllocation_VendInvoiceTrans,我手动将这些参数传递给 link 到父 table。我会提供发票号码等。 objective 是跳过打开父 table 并手动进入调整。我想直接打开该表格并将其 link 到我指定的任何记录。

B:我需要能够传递一个 _ChargesValue 参数并为我预先填充该参数。不知道这样可不可以,所以想请教一下。理想情况下,我应该能够单击我的自定义表单上的一个按钮,然后直接为指定的发票打开 MarkupAllocation_VendInvoiceTrans 表单,并在该行上预先填充值。

我知道我应该一步一个脚印地解决这个问题,所以步骤 A 是第一要务。

我可以像这样相对轻松地打开父窗体,但不能对子窗体做同样的事情。显然,同样的方法是行不通的,因为我需要在打开它之前指定父关系table。

private void allocateMarkup()
    {
      Object formRun;
      Args args = new Args();

      VendInvoiceJour jourTable;    

      ;

      select * from jourTable where jourTable.PurchId == 'PO000001191';      
      args.name(formstr(VendInvoiceJournal));
      args.record(jourTable);

      formRun = ClassFactory.formRunClass(args);
      formRun.init();
      formRun.run();
      formRun.wait();

     }

我怎样才能这样做?

(旁注,我意识到如果以编程方式执行所有事务而不是让开箱即用的功能处理它,则可以避免整个表单调用,但标记和分配逻辑是它自己的野兽并且我似乎比这样做要复杂得多。如果有人以这种手动方式完成,也将不胜感激任何帮助)

如果我没看错你的post,你只想打开某张发票的“费用”>“调整”。这是一种简单的方法:

MarkupAdjustment  markupAdjustment = new MarkupAdjustment();
markupAdjustment.vendInvoiceJour(VendInvoiceJour::findFromPurchId('PO 120079'));
markupAdjustment.run();