ACDOCA
、、、などのテーブルBSID
をMARA
使用して ABAP CDS ビューを作成しました。MAKT
現在、私の CDS ビューには、顧客のリストとその未処理 (FI) ドキュメントが含まれています。
これらの顧客、FI ドキュメント、その他の特定のパラメーターに対して、特定のデータをカスタム テーブルに保持しています。
左外部結合を使用して、この CDS ビューをカスタム テーブルに接続します。問題は、この結合が内部結合のように機能することです。そのため、カスタム テーブルが空白の場合、出力は値なしで表示されますが、CDS ビューはそのまま表示され、カスタム テーブル フィールドは空白として表示されます。
Web上の同様の問題に基づいて、調査を行い、いくつかの有用なポイントを見つけました。
右側のテーブルのすべての条件が最大で ON 結合条件に含まれます
右側のカスタム テーブルからも null 値を含めようとしました。
結合条件で 1 つのパラメーターのみを使用して結果を確認しようとしました (まだ内部結合として機能しています)
これが私の完全な選択ステートメントです。
ZPD1
はACDOCA
、BSDI
... テーブルの ABAP CDS ビューですZPD_HSL
顧客ごとの GL 金額計算用の ABAP CDS ビューです。ZFI_PDRATE_MAP
顧客/FI ドキュメントの組み合わせの料金を含むカスタム テーブルです。
この声明のどこが間違っている可能性がありますか?
SELECT
FROM ZPD1( PBUKRS = @BUKRS-LOW ,
POSTFROM = @COL_DATE-LOW ,
POSTTO = @COL_DATE-HIGH ) AS A
LEFT OUTER JOIN ZFI_PDRATE_MAP AS F
ON A~PROD_CATEGORY = F~PROD_CATEGORY
AND A~OD_DATE GE F~POST_DT_FROM
AND A~OD_DATE LE F~POST_DT_TO
AND F~COL_DT_FROM GE @COL_DATE-LOW
AND F~COL_DT_TO LE @COL_DATE-HIGH
AND F~SALES_OFFICE = @VKBUR-LOW
AND CASE WHEN A~ARREAR_DAYS <= 0 THEN 'NOD'
WHEN A~ARREAR_DAYS > 0 THEN 'OD'
END = F~OD
INNER JOIN KNA1 AS H
ON H~KUNNR = A~KUNNR
INNER JOIN TVKBT AS I
ON I~VKBUR = F~SALES_OFFICE
AND I~SPRAS = @SY-LANGU
LEFT OUTER JOIN SKAT AS J
ON J~SAKNR = A~HKONT
AND J~SPRAS = 'E'
AND J~KTOPL = '1000'
LEFT OUTER JOIN MAKT AS K
ON K~MATNR = A~MATNR
AND K~SPRAS = 'E'
LEFT OUTER JOIN T001W AS L
ON L~WERKS = A~WERKS
FIELDS
A~RBUKRS AS BUKRS,
A~KUNNR,
H~NAME1,
F~SALES_OFFICE,
I~BEZEI,
A~BELNR AS COL_BELNR,
A~GJAHR AS COL_GJAHR,
A~HSL AS COL_AMT,
A~BUDAT AS COL_DATE,
A~KEY_DATE AS KEY_OS_DATE,
A~OD_DOC AS OS_BELNR,
A~OD_YR AS OS_GJAHR,
A~BLART ,
A~OD_DATE AS OS_DATE,
CASE WHEN A~SHKZG = 'H' THEN CAST( A~WRBTR * -1 AS CURR( 12, 2 ) )
ELSE A~WRBTR
END AS OS_AMT ,
A~DUE_DATE,
A~ARREAR_DAYS,
CASE WHEN A~ARREAR_DAYS <= 0 THEN 'NOD'
WHEN A~ARREAR_DAYS > 0 THEN 'OD'
ELSE ' '
END AS OD_IND,
A~HKONT,
J~TXT50,
A~PROD_CATEGORY,
A~MATNR,
K~MAKTX,
A~WERKS ,
L~NAME1,
A~BWTAR,
A~PROFIT_CENTRE AS PRCTR,
COALESCE( F~PD_RATE , 0 ) AS RATE,
0 AS PD_AMT,
CASE WHEN A~ARREAR_DAYS > 0 THEN
CAST(
DIVISION(
( CAST( A~WRBTR * F~PD_RATE AS CURR( 15 ,2 ) ) ) ,
100 ,
3 )
AS CURR( 15, 2 ) )
* -1
ELSE
DIVISION(
( CAST( A~WRBTR * F~PD_RATE AS CURR( 15 , 2 ) ) ) ,
100 ,
3 )
END AS ITEM_PD_AMT, "DISCOUNT_RATE,
0 AS ITEM_PD_AMT1,
A~MAIN_TYPE
WHERE A~KUNNR IN @KUNNR
AND NOT EXISTS (
SELECT *
FROM ZFI_PAYMENT_DISC
WHERE BELNR = A~BELNR
AND GJAHR = A~GJAHR
AND BUKRS = A~RBUKRS
AND SALES_OFFICE = @VKBUR-LOW
AND A~KUNNR IN @KUNNR
AND OS_BELNR EQ A~OD_DOC )
AND A~ARREAR_DAYS <= @OD
AND ( F~COL_AMT_FROM LE (
SELECT SUM( COLLECT )
FROM ZPD_HSL( BUKRS = @BUKRS-LOW ,
BUDATFROM = @COL_DATE-LOW ,
BUDATO = @COL_DATE-HIGH )
WHERE KUNNR = A~KUNNR )
AND F~COL_AMT_TO GE (
SELECT SUM( COLLECT )
FROM ZPD_HSL( BUKRS = @BUKRS-LOW ,
BUDATFROM = @COL_DATE-LOW ,
BUDATO = @COL_DATE-HIGH )
WHERE KUNNR = A~KUNNR )
)
ORDER BY A~KUNNR, A~BELNR ,A~DUE_DATE ASCENDING
INTO TABLE @PROV_POST.