1

まず、私は Progress 4GL に非常に慣れていないため、FOR EACH ブロックのネストがどのように機能するかについてまだ頭を悩ませています。ivc_header と ivc_mchgs の 2 つのテーブルから情報を取得しています。

ivc_header
    invoice_nbr     | sold_to_cust_nbr | sold_to_cust_seq | invoice_amt
        1000051     |        70        |        0         |   $1,000
        1000049     |        70        |        1         |   $1,500
        1000010     |       310        |        0         |   $2,000
        1000011     |       310        |        1         |   $2,500

ivc_mchgs
    invoice_nbr | line_nbr | misc_seq_nbr | extension
       1000051  |     1    |      1       |   $300
       1000051  |     1    |      2       |   $200
       1000051  |     2    |      1       |   $100
       1000049  |     1    |      1       |   $400
       1000049  |     1    |      2       |   $100
       1000049  |     2    |      1       |   $150
       1000010  |     1    |      1       |    $50
       1000010  |     1    |      2       |    $50
       1000010  |     2    |      1       |   $100
       1000011  |     1    |      1       |    $75
       1000011  |     1    |      2       |    $80
       1000011  |     2    |      1       |    $90

参考までに、ivc_header のプライマリ キーは Invoice_nbr であり、ivc_mchgs のプライマリ キーは、invoice_nbr、line_nbr、および misc_seq_nbr で構成される複合キーです。外部キーはinvoice_nbrです。

データに関する注意点として、ivc_mchgs の情報は請求書 line_nbr ごとの雑費です。

私が取得しようとしているのは、sold_to_cust_nbr + sold_to_cust seq によるinvoice_amt と拡張の合計です。いくつかの調査を行った後、Progress のビルトイン ACCUMULATE 関数を使用する代わりに、合計を変数に入れることにしました。

これが私が持っているコードです:

DEFINE VARIABLE cCustNum AS CHARACTER           NO-UNDO.
DEFINE VARIABLE dInvoiceSubTotal AS DECIMAL     NO-UNDO.
DEFINE VARIABLE dSurchargeTotal AS DECIMAL      NO-UNDO.

FOR EACH ivc_header 
    NO-LOCK
    WHERE (ivc_header.sold_to_cust_nbr = "000070")
          OR (ivc_header.sold_to_cust_nbr = "000310")
    BREAK BY ivc_header.sold_to_cust_nbr:
    IF FIRST-OF(ivc_header.sold_to_cust_nbr) THEN
        ASSIGN dInvoiceSubTotal = 0.
        ASSIGN dInvoiceSUbTotal = dInvoiceSUbTotal + ivc_header.invoice_amt.
    IF LAST-OF(ivc_header.sold_to_cust_nbr) THEN
        DISPLAY ivc_header.sold_to_cust_nbr + ivc_header.sold_to_cust_seq   FORMAT "x(9)" LABEL "CustNum"
            dInvoiceSUbTotal LABEL "SubTotal".
FOR EACH ivc_mchgs WHERE ivc_header.invoice_nbr = ivc_mchgs.invoice_nbr 
    NO-LOCK
    BREAK BY ivc_mchgs.invoice_nbr:
    IF FIRST-OF(ivc_mchgs.invoice_nbr) THEN
        ASSIGN dSurchargeTotal = 0.
        ASSIGN dSurchargeTotal = dSurchargeTotal + ivc_mchgs.extension.
    IF LAST-OF (ivc_mchgs.invoice_nbr) THEN
        DISPLAY
                dSurchargeTotal LABEL "Surcharge".
    END.
END.

このコードは、sold_to_cust_nbr + sold_to_cust_seq によって合計invoice_amt を示し、invoice_nbr ごとに拡張を合計します。どうすればよいかわからないのは、sold_to_cust_nbr + sold_to_cust_seq によって合計の拡張を取得することです。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2