2016-04-26 7 views
2

私はABLにはかなり新しくて(フランス語ですので私の英語を間違えてください)、私はあなたの助けが必要です。 OPEN QUERYでBREAK BYを使用する方法を知りたいです。進捗状況ABL:休憩OPEN QUERYの複数の結合を使用して

は、ここで私は何をすべきかです:

define query Q-REQ for 
ENT_RCP_FRN, 
LIG_RCP_FRN, 
CONSO_UNV_MDIM, 
LIG_DOC_TRS, 
ENT_DOC_TRS scrolling. 

open query Q-REQ for 
each ENT_RCP_FRN no-lock 
    where ENT_RCP_FRN.STO-c-CodeDes = "DRET", 
each LIG_RCP_FRN no-lock break by LIG_RCP_FRN.SKU-c-cod 
    where LIG_RCP_FRN.SOU-c-Cod = ENT_RCP_FRN.SOU-c-Cod 
    and LIG_RCP_FRN.ERF-c-NumRcpFrn = ENT_RCP_FRN.ERF-c-NumRcpFrn, 
each CONSO_UNV_MDIM no-lock 
    where CONSO_UNV_MDIM.UMA-c-Code = "8B6A9/0001354" 
    and CUMD-c-LstCleCumConso = LIG_RCP_FRN.SKU-c-cod, 
each LIG_DOC_TRS no-lock LEFT OUTER-JOIN 
    where LIG_DOC_TRS.SKU-c-Cod = LIG_RCP_FRN.SKU-c-Cod, 
each ENT_DOC_TRS no-lock left outer-join 
    where ENT_DOC_TRS.SOU-c-Cod = LIG_DOC_TRS.SOU-c-Cod 
    and ENT_DOC_TRS.EDT-c-NumDocTrs = LIG_DOC_TRS.EDT-c-NumDocTrs 
    and ENT_DOC_TRS.TR-c-CodeCatDoc = "BT" 
    and ENT_DOC_TRS.STO-c-CodeOri = "DRET" 
    and ENT_DOC_TRS.STO-c-CodeDes = "DWHO". 


repeat : 

    get next Q-REQ. 
    if not available ENT_RCP_FRN then leave. 


end. 

私は、次のステートメントでエラーが発生します:

each LIG_RCP_FRN no-lock break by LIG_RCP_FRN.SKU-c-cod 
    where LIG_RCP_FRN.SOU-c-Cod = ENT_RCP_FRN.SOU-c-Cod 
    and LIG_RCP_FRN.ERF-c-NumRcpFrn = ENT_RCP_FRN.ERF-c-NumRcpFrn, 

後に理解することができません: "LIG_RCP_FRN.SKU-C-タラ"(私の誤りがありますフランス語では247です):

247 ** L'expression: "LIG_RCP_FRN.SKU-c-cod" estincompréhensible。 (247)

私がしたいのは、SKU-c-Codが変更されたときに破損するテーブルLIG_RCP_FRNの列を合計できることです。

このエラー後にすべてのステートメントを削除しようとしましたが、どちらも機能しませんでした。

詳細情報が必要な場合は質問してください。 Openedge進行10.2A

は、あなたの助け Corentin

PSありがとう:不可能ポストに "こんにちは" 言うことを?

+0

もありますマニュアルによると(V9.1いえ) - あなたはca n開いているクエリで "BY"を使用してクエリを注文しますが、ブレークバイを使用することはできません。 "BREAK BY"を使用する場合は、FOR EACHループを使用する必要があります。 – Screwtape

+0

@Screwtapeそれは少なくとも後のバージョンでは正しくありません。 – Jensd

+1

これはいいですね。私は現時点でv9を超えてテストすることはできません。FOR EACHでは、BREAK BYはすべてのレコードフレーズの後にあるはずなので、おそらくクエリの終わりに移動するだけで、OE10でも動作しますか?ちょうど推測。 – Screwtape

答えて

4

これは非常に単純な間違いです。クエリの最後に「BREAK BY」オプションを入れる必要があります。

また、コピー&ペーストを容易にするテンポラリテーブル定義を投稿すると、とてもいいです。

私は、クエリに基づいて以下のコードでいくつかのテーブルを即興しましたが、それらはコードをコンパイルするためだけにあります。

クエリに呼び出さFIRST-OF方法は次のように動作:

クエリ:FIRST-OF(レベル)

度:グループBY BREAKを示す整数式は、全体が0であります1は最初のBREAK BY、2は2番目のBREAK BYなどです。

あなたはBREAK BY fieldA BY fieldBを持っている場合は、

query:FIRST-OF(1)BREAK BY fieldA

query:FIRST-OF(2)に関係がBREAK BY fieldB

に関しLAST-OF(n)

/* Completely fake temp-tables that are here only to make the query work! */ 
DEFINE TEMP-TABLE ENT_RCP_FRN NO-UNDO 
    FIELD STO-c-CodeDes AS CHARACTER 
    FIELD SOU-c-Cod  AS INTEGER 
    FIELD ERF-c-NumRcpFrn AS INTEGER. 

DEFINE TEMP-TABLE LIG_RCP_FRN NO-UNDO 
    FIELD SOU-c-Cod  AS INTEGER 
    FIELD ERF-c-NumRcpFrn AS INTEGER 
    FIELD SKU-c-cod  AS INTEGER. 

DEFINE TEMP-TABLE CONSO_UNV_MDIM NO-UNDO 
    FIELD UMA-c-Code   AS CHARACTER 
    FIELD CUMD-c-LstCleCumConso AS INTEGER. 

DEFINE TEMP-TABLE LIG_DOC_TRS NO-UNDO 
    FIELD SKU-c-Cod  AS INTEGER 
    FIELD SOU-c-Cod  AS INTEGER 
    FIELD EDT-c-NumDocTrs AS INTEGER. 

DEFINE TEMP-TABLE ENT_DOC_TRS NO-UNDO 
    FIELD SOU-c-Cod  AS INTEGER 
    FIELD EDT-c-NumDocTrs AS INTEGER 
    FIELD TR-c-CodeCatDoc AS CHARACTER 
    FIELD STO-c-CodeOri AS CHARACTER 
    FIELD STO-c-CodeDes AS CHARACTER. 


DEFINE QUERY Q-REQ FOR ENT_RCP_FRN, LIG_RCP_FRN, CONSO_UNV_MDIM, LIG_DOC_TRS, ENT_DOC_TRS SCROLLING. 

OPEN QUERY Q-REQ FOR EACH ENT_RCP_FRN NO-LOCK WHERE ENT_RCP_FRN.STO-c-CodeDes = "DRET", 
    EACH LIG_RCP_FRN NO-LOCK WHERE LIG_RCP_FRN.SOU-c-Cod = ENT_RCP_FRN.SOU-c-Cod 
           AND LIG_RCP_FRN.ERF-c-NumRcpFrn = ENT_RCP_FRN.ERF-c-NumRcpFrn, 
    EACH CONSO_UNV_MDIM NO-LOCK WHERE CONSO_UNV_MDIM.UMA-c-Code = "8B6A9/0001354" 
           AND CUMD-c-LstCleCumConso = LIG_RCP_FRN.SKU-c-cod, 
    EACH LIG_DOC_TRS NO-LOCK LEFT OUTER-JOIN WHERE LIG_DOC_TRS.SKU-c-Cod = LIG_RCP_FRN.SKU-c-Cod, 
    EACH ENT_DOC_TRS NO-LOCK LEFT OUTER-JOIN WHERE ENT_DOC_TRS.SOU-c-Cod = LIG_DOC_TRS.SOU-c-Cod 
               AND ENT_DOC_TRS.EDT-c-NumDocTrs = LIG_DOC_TRS.EDT-c-NumDocTrs 
               AND ENT_DOC_TRS.TR-c-CodeCatDoc = "BT" 
               AND ENT_DOC_TRS.STO-c-CodeOri = "DRET" 
               AND ENT_DOC_TRS.STO-c-CodeDes = "DWHO" BREAK BY LIG_RCP_FRN.SKU-c-cod. 


REPEAT: 

    GET NEXT Q-REQ. 
    IF NOT AVAILABLE ENT_RCP_FRN THEN LEAVE. 

    IF QUERY q-req:FIRST-OF(1) THEN DO: 
     DISPLAY "First!". 
    END. 

END. 
+0

こんにちは、ありがとうございました。私はいくつかのテストを行っています。私はもうエラーに遭遇しませんが、結果は私が期待しているものではありません。新しい情報が入り次第お知らせします。 – Corentin

+0

@Corentinもっと助けが必要な場合は、あなた以外のものを記述し、より多くのコードを投稿する必要があります! – Jensd

関連する問題