做彩网站有哪些百度推广开户2400
文章目录
- ABAP 字段类型不一样导致相加之后金额错误
- 写在前面的总结
- 示例程序1
- 汇总MSEG表和MLDOC表
ABAP 字段类型不一样导致相加之后金额错误
写在前面的总结
- 如果需要不同底表的字段相加的值,那么最好是根据条件去分别算出那些值放在临时内表里面,再去根据条件读取临时内表,读取完之后取出对应的值进行计算,不然可能会因为字段有不同长度,计算的结果出错
- 如果要多个表连接,一定要注意连接的条件和思路,思路要清晰,连接条件要正确
- 在select语句里面如果使用sum函数,字段长度不相等,可能会导致计算出来的值有问题
- 尽量在select语句的筛选条件里面筛选数据,使得到的内表的行数尽量更少,更准确一些。
原来的代码:
原来的代码:( CASE WHEN c~aufnr IS INITIALTHEN ( SUM( CASE WHEN c~bwart = '102' THEN c~dmbtr * -1 ELSE c~dmbtr END ) )ELSE SUM( CASE WHEN c~bwart = '102' THEN c~dmbtr * -1 ELSE c~dmbtr END ) + d~prd END ) AS dmbtr, "模具入库金额现在修改成:( CASE WHEN c~aufnr IS INITIALTHEN ( SUM( CASE WHEN c~bwart = '102' THEN c~dmbtr * -1 ELSE c~dmbtr END ) )ELSE SUM( CASE WHEN c~bwart = '102' THEN c~dmbtr * -1 ELSE c~dmbtr END ) + ( CASE WHEN abs( d~prd ) > 0 THEN d~prd ELSE 0 END ) END ) AS dmbtr, "模具入库金额
程序名:z_test_lhy2
示例程序1
REPORT z_test_lhy2.
*&--------------------------Variables----------------------------------*
TYPES: BEGIN OF ty_out,werks TYPE mseg-werks, "工厂matnr2 TYPE mara-matnr, "物料aufnr TYPE mseg-aufnr, "订单END OF ty_out.
DATA: gs_out TYPE ty_out,gt_out TYPE TABLE OF ty_out.*&------------------------------Logic----------------------------------*
gs_out-werks = '1710'.
gs_out-matnr2 = 'MZ-FG-C990'.
gs_out-aufnr = '000001000920'.
APPEND gs_out TO gt_out.SELECTa~werks, "工厂a~matnr2, "物料( CASE WHEN b~aufnr IS INITIALTHEN SUM( CASE WHEN b~bwart = '102' THEN b~dmbtr * -1 ELSE b~dmbtr END )ELSE SUM( CASE WHEN b~bwart = '102' THEN b~dmbtr * -1 ELSE b~dmbtr END ) + c~prd END ) AS dmbtr_hj, "合计金额c~prd,b~aufnr,SUM( CASE WHEN b~bwart = '102' THEN b~dmbtr * -1 ELSE b~dmbtr END ) AS dmbtr "原始金额FROM @gt_out AS aLEFT JOIN mseg AS b ON a~werks = b~werks AND a~matnr2 = b~matnrLEFT JOIN mldoc AS c ON b~aufnr = c~aufnr AND c~tcode = 'KO88'WHERE substring( b~budat_mkpf,1,4 ) = '2021'GROUP BY a~werks,a~matnr2,b~aufnr,c~prd,b~aufnrINTO TABLE @DATA(lt_temp).
单独定义两个变量之后再相加,数值是没有问题的,都是正确的:
汇总MSEG表和MLDOC表
这里想先汇总MSEG的金额,再去mldoc表去查询价格差异字段prd,并汇总价格差异的金额,可以用下面的做法:
SELECTa~werks, "工厂a~matnr2, "物料
* ( CASE WHEN b~aufnr IS INITIAL
* THEN SUM( CASE WHEN b~bwart = '102' THEN b~dmbtr * -1 ELSE b~dmbtr END )
* ELSE SUM( CASE WHEN b~bwart = '102' THEN b~dmbtr * -1 ELSE b~dmbtr END ) + c~prd END ) AS dmbtr_hj, "合计金额
* c~prd,b~aufnr,SUM( CASE WHEN b~bwart = '102' THEN b~dmbtr * -1 ELSE b~dmbtr END ) AS dmbtr "原始金额FROM @gt_out AS aLEFT JOIN mseg AS b ON a~werks = b~werks AND a~matnr2 = b~matnr AND a~aufnr = b~aufnr"LEFT JOIN mldoc AS c ON a~aufnr = c~aufnr AND c~tcode = 'KO88'WHERE substring( b~budat_mkpf,1,4 ) = '2021'GROUP BY a~werks,a~matnr2,b~aufnrINTO TABLE @DATA(lt_mseg).SORT lt_mseg BY werks matnr2 dmbtr."cl_demo_output=>display( lt_mseg ).SELECTa~werks,"工厂a~matnr2,"物料a~aufnr, "订单SUM( b~prd ) AS prd "价格差异FROM @lt_mseg AS aLEFT JOIN mldoc AS b ON a~aufnr = b~aufnr AND b~tcode = 'KO88'GROUP BY a~werks,a~matnr2,a~aufnrINTO TABLE @DATA(lt_mldoc).SORT lt_mldoc BY werks matnr2 aufnr."cl_demo_output=>display( lt_mldoc ).