一、报表逻辑









二、报表界面


三、报表逻辑
*&———————————————————————*
*& Report ZRPPP_0026
*&———————————————————————*
*&
*&———————————————————————*
REPORT zrppp_0026.
TABLES: afko,afpo,ztmm_marc,cskt,crhd,resb,caufv,
sscrfields ,icon.
TYPE-POOLS:slis.
DATA: BEGIN OF gt_msg OCCURS 0,
msgid LIKE sy-msgid,
msgty LIKE sy-msgty,
msgno LIKE sy-msgno,
msgv1 LIKE sy-msgv1,
msgv2 LIKE sy-msgv2,
msgv3 LIKE sy-msgv3,
msgv4 LIKE sy-msgv4,
lineno LIKE mesg-zeile,
END OF gt_msg.
DATA: gr_table TYPE REF TO cl_salv_table.
DATA: gr_layout TYPE REF TO cl_salv_layout.
DATA: gs_program TYPE salv_s_layout_key.
DATA: gr_columns TYPE REF TO cl_salv_columns_table.
DATA: gr_column TYPE REF TO cl_salv_column_table.
DATA: gr_display TYPE REF TO cl_salv_display_settings.
TYPES: BEGIN OF ty_salv ,
aufnr TYPE afpo-aufnr,
matnr TYPE afpo-matnr,
maktx TYPE makt-maktx,
zzxmbm TYPE ztmm_marc-zzxmbm,
psmng TYPE afpo-psmng,
wemng TYPE afpo-wemng,
zwemng TYPE afpo-wemng,
zzt TYPE char10,
matnr1 TYPE resb-matnr,
maktx1 TYPE makt-maktx,
meins TYPE resb-meins,
bdmng TYPE resb-bdmng,
enmng TYPE resb-enmng,
zenmng TYPE resb-enmng,
zenmng1 TYPE resb-enmng,
zenmng2 TYPE resb-enmng,
labst TYPE mard-labst,
zenmng3(16) TYPE p DECIMALS 9 , ” resb-enmng,
zausch TYPE char10,
zenmng4(16) TYPE p DECIMALS 9 , “resb-enmng,
“关务begin….
zenmng5(16) TYPE p DECIMALS 9,
zenmng6(16) TYPE p DECIMALS 9,
ausch1(16) TYPE p DECIMALS 9,
zrec_handbook_index TYPE char12 , “ztsd016-zrec_handbook_index,
zdecl_com_code TYPE ztsd016-zdecl_com_code,
zsubpro_code TYPE ztsd016-zsubpro_code,
* zciq_code TYPE ztsd016-zciq_code,
zsubpro_name TYPE ztsd016-zsubpro_name,
zsubpro_spec TYPE ztsd016-zsubpro_spec,
zdecl_conv_rate TYPE ztsd016-zdecl_conv_rate,
zenmng7(16) TYPE p DECIMALS 9,
zdecl_unit TYPE ztsd016-zdecl_unit,
zscale_factor1 TYPE ztsd016-zscale_factor1,
zenmng8(16) TYPE p DECIMALS 9,
zlegal_unit TYPE ztsd016-zlegal_unit,
zscale_factor2 TYPE ztsd016-zscale_factor2,
zenmng9(16) TYPE p DECIMALS 9,
zsec_unit TYPE ztsd016-zsec_unit,
zenmng10(16) TYPE p DECIMALS 9,
zplant_unit TYPE ztsd016-zplant_unit,
zplant_conv_rate TYPE ztsd016-zplant_conv_rate,
“关务end….
dwerk TYPE afpo-dwerk,
ftrmi TYPE afko-ftrmi,
idat2 TYPE caufv-idat2,
ltext TYPE cskt-ltext,
arbpl TYPE crhd-arbpl,
zzbfl TYPE char10,
zzdl TYPE char10,
END OF ty_salv .
DATA:BEGIN OF gt_tab OCCURS 0 .
INCLUDE TYPE ty_salv .
DATA:
posnr TYPE resb-posnr,
ausch TYPE resb-ausch,
routing_no TYPE co_aufpl,
kostl TYPE kostl,
esmng TYPE resb-esmng, “工单组件单位用量
flg TYPE c,
END OF gt_tab .
DATA:BEGIN OF gt_anr OCCURS 0 .
DATA: aufnr LIKE gt_tab-aufnr,
zzt LIKE gt_tab-zzt,
flg LIKE gt_tab-flg,
arbpl LIKE gt_tab-arbpl,
routing_no LIKE gt_tab-routing_no,
kostl LIKE gt_tab-kostl,
END OF gt_anr .
DATA:BEGIN OF gw_info.
DATA: ztype TYPE bapi_mtype,
zmsg TYPE bapi_msg,
* m_best_eko TYPE char1, “采购组织
* m_best_bsa TYPE char1, “凭证类型
* m_best_wrk TYPE char1, “工厂
* m_best_ekg TYPE char1, “采购组
zaopp_prs TYPE char1, “价格权限
END OF gw_info .
DATA: flg_err TYPE c,
gv_check TYPE i.
DATA: “dauat TYPE zspp_000-dauat,
arbpl TYPE zspp_000-arbpl,
ltext TYPE zspp_000-ltext.
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_dwerk FOR afpo-dwerk NO-EXTENSION NO INTERVALS OBLIGATORY MEMORY ID wrk,
s_aufnr FOR afpo-aufnr,
s_matnr FOR afpo-matnr,
s_zzxmbm FOR ztmm_marc-zzxmbm,
s_matnr1 FOR resb-matnr,”cskt-ltext,
s_arbpl FOR arbpl,
s_ltext FOR ltext,
s_ftrmi FOR afko-ftrmi,
s_idat2 FOR caufv-idat2 .
* PARAMETERS: zzt TYPE char10 DEFAULT '' AS LISTBOX VISIBLE LENGTH 15 USER-COMMAND chgzt .
* PARAMETERS: zflag AS CHECKBOX DEFAULT '' USER-COMMAND chk.
SELECTION-SCREEN SKIP 1 .
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.”定位
SELECTION-SCREEN COMMENT 1(8) txt .
SELECTION-SCREEN POSITION 10.
PARAMETERS all AS CHECKBOX USER-COMMAND cmd.
SELECTION-SCREEN COMMENT 11(5) chk FOR FIELD all.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN ULINE .
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.”定位
SELECTION-SCREEN COMMENT 5(8) chk1 FOR FIELD crtd.
SELECTION-SCREEN COMMENT 20(5) chk2 FOR FIELD rel.
SELECTION-SCREEN COMMENT 34(5) chk3 FOR FIELD teco.
SELECTION-SCREEN POSITION 1.
PARAMETERS crtd AS CHECKBOX .
SELECTION-SCREEN POSITION 15.
PARAMETERS rel AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN POSITION 29.
PARAMETERS teco AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.”定位
SELECTION-SCREEN COMMENT 5(8) chk4 FOR FIELD flag.
SELECTION-SCREEN COMMENT 20(5) chk5 FOR FIELD del.
SELECTION-SCREEN COMMENT 34(5) chk6 FOR FIELD lock.
SELECTION-SCREEN COMMENT 48(5) chk7 FOR FIELD close.
SELECTION-SCREEN POSITION 1.
PARAMETERS flag AS CHECKBOX .
SELECTION-SCREEN POSITION 15.
PARAMETERS del AS CHECKBOX.
SELECTION-SCREEN POSITION 29.
PARAMETERS lock AS CHECKBOX.
SELECTION-SCREEN POSITION 43.
PARAMETERS close AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK part1.
AT SELECTION-SCREEN OUTPUT.
ADD 1 TO gv_check .
CHECK gv_check > 1 .
crtd = rel = teco = flag = del = lock = close = all .
* IF zflag = 'X' .
* zzt = '' .
* ENDIF.
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_ltext-low .
* PERFORM frm_search_ltext .
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_ltext-high .
* PERFORM frm_search_ltext .
INITIALIZATION.
txt = '工单状态:' .
chk = '全选'.
chk1 = '已创建'.
chk2 = '已下达'.
chk3 = '技术关闭' .
chk4 = '标记'.
chk5 = '删除'.
chk6 = '锁定' .
chk7 = '已财务结算' .
* DATA itab_list TYPE vrm_values.
* itab_list = VALUE #(
* ( key = 'CRTD' text = '已创建' )
* ( key = 'REL' text = '已审批' )
* ( key = 'TECO' text = '技术性完成' )
* ( key = '标记' text = '标记' )
* ( key = '删除' text = '删除' )
* ( key = '锁定' text = '锁定' )
* ( key = '结算' text = '已财务结算' )
*
* ).
*
* CALL FUNCTION 'VRM_SET_VALUES'
* EXPORTING
* id = 'ZZT'
* values = itab_list.
* REFRESH itab_list.
DATA: lv_begdat TYPE datum,
lv_enddat TYPE datum.
DATA: BEGIN OF date,
j(4),
m(2),
t(2),
END OF date.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = sy-datum
IMPORTING
last_day_of_month = lv_enddat
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
date = lv_enddat.
date-t = '01'.
lv_begdat = date .
* INSERT VALUE #( sign = 'I' option = 'BT' low = lv_begdat high = lv_enddat ) INTO TABLE s_erdat.
START-OF-SELECTION.
IF crtd = '' AND rel = '' AND teco = '' AND flag = '' AND del = '' AND lock = '' AND close = '' AND all = '' .
MESSAGE '请选择工单状态.' TYPE 'S' DISPLAY LIKE 'E' .
RETURN.
ENDIF.
PERFORM frm_check_auth .
CHECK flg_err = '' .
PERFORM frm_get_data .
* IF gt_tab[] IS INITIAL.
* MESSAGE '未查询到数据' TYPE 'S' DISPLAY LIKE 'W' .
* ENDIF.
PERFORM frm_show_alv .
*&———————————————————————*
*& Form frm_show_alv
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_show_alv .
DATA:lt_tab TYPE TABLE OF ty_salv .
MOVE-CORRESPONDING gt_tab[] TO lt_tab[] .
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab[]
).
CATCH cx_salv_msg.
ENDTRY.
gr_columns = gr_table->get_columns( ).
gr_columns->set_optimize( 'X' ).
DEFINE mcr_undisplay.
TRY.
gr_column ?= gr_columns->get_column( &1 ).
gr_column->set_visible( cl_salv_column_table=>false ).
CATCH cx_salv_not_found .
ENDTRY.
END-OF-DEFINITION.
DATA: s TYPE scrtext_s,
m TYPE scrtext_m,
l TYPE scrtext_l.
DEFINE mcr_setcoltext.
TRY.
gr_column ?= gr_columns->get_column( &1 ).
s = &2 .m = &2. l = &2 .
gr_column->set_short_text( s ).
gr_column->set_medium_text( m ).
gr_column->set_long_text( l ).
IF gr_column->get_ddic_datatype( ) = 'QUAN' OR gr_column->get_ddic_datatype( ) = 'CURR' OR gr_column->get_ddic_inttype( ) = 'P' .
gr_column->set_edit_mask( '==ZZERO' ).
ENDIF.
CATCH cx_salv_not_found .
ENDTRY.
END-OF-DEFINITION.
DEFINE mcr_zzero.
TRY.
gr_column ?= gr_columns->get_column( &1 ).
gr_column->set_edit_mask( '==ZZERO' ).
CATCH cx_salv_not_found .
ENDTRY.
END-OF-DEFINITION.
* mcr_undisplay: 'ROUTING_NO' , 'FLG'.
mcr_setcoltext:
'AUFNR' '工单号',
'MATNR' '物料编码',
'MAKTX' '物料描述',
'ZZXMBM' '项目编码',
'PSMNG' '已订购量',
'WEMNG' '完成数量',
'ZWEMNG' '未完成数量',
'ZZT' '加工单状态',
'MATNR1' '组件物料编码',
'MAKTX1' '组件物料描述',
'MEINS' '计量单位',
'BDMNG' '需求数量',
'ENMNG' '发放量',
'ZENMNG' '组件短缺量',
'ZENMNG1' '报废数量',
'ZENMNG2' '在制品数量',
'LABST' '现有数量',
'ZENMNG3' '组件单位用量',
'ZAUSCH' '单位损耗',
'ZENMNG4' 'BOM单位用量(不含报废率)',
'DWERK' '地点',
'FTRMI' '发放日期',
'IDAT2' '工单关闭日期',
'LTEXT' '部门名称',
'ARBPL' '工作中心',
'ZZBFL' '报废率',
'ZZDL' '单龄',
“关务相关字段
'ZENMNG5' '工单标准总用量',
'ZENMNG6' 'WIP理论差异数量',
'AUSCH1' '差异数量比率',
'ZREC_HANDBOOK_INDEX' '备案序号',
'ZDECL_COM_CODE' '申报编码',
'ZSUBPRO_CODE' '商品编码',
* 'ZCIQ_CODE' 'CIQ',
'ZSUBPRO_NAME' '品名',
'ZSUBPRO_SPEC' '规格',
'ZDECL_CONV_RATE' '申报单位转换率',
'ZENMNG7' '申报数量',
'ZDECL_UNIT' '申报单位',
'ZSCALE_FACTOR1' '比例因子一',
'ZENMNG8' '法1数量',
'ZLEGAL_UNIT' '法定单位名称',
'ZSCALE_FACTOR2' '比例因子二',
'ZENMNG9' '法2数量',
'ZSEC_UNIT' '第二法定单位名称',
'ZENMNG10' '工厂商品单位数量',
'ZPLANT_UNIT' '工厂商品单位',
'ZPLANT_CONV_RATE' '库存转报关率'.
* mcr_zzero: 'PSMNG', 'WEMNG' , 'ZWEMNG' ,'BDMNG','ENMNG','ZENMNG', 'ZENMNG1',
* 'ZENMNG2' , 'LABST' , 'ZENMNG3' ,'ZENMNG4'.
TRY.
DATA lv_status TYPE sypfkey .
lv_status = 'STANDARD' .
* IF rd2 = 'X'.
* lv_status = 'STANDARD_DEL' .
* ENDIF.
CALL METHOD gr_table->set_screen_status
EXPORTING
report = sy-repid
pfstatus = lv_status
set_functions = gr_table->c_functions_all.
CATCH cx_sy_arithmetic_error INTO DATA(exc).
ENDTRY.
gr_layout = gr_table->get_layout( ).
gs_program-report = sy-repid.
gr_layout->set_key( gs_program ).
gr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
gr_layout->set_default( 'X' ).
gr_table->display( ).
ENDFORM.
*&———————————————————————*
*& Form frm_get_data
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_get_data .
RANGES:r_matnr FOR mara-matnr,
r_aufnr FOR afpo-aufnr,
r_lgort FOR mdlg-lgort.
DATA:lv_tmp TYPE char20,
lv_char TYPE qsollwertc,
lv_menge(16) TYPE p DECIMALS 10,
lv_dec(5) TYPE p DECIMALS 2.
DATA wheresql TYPE TABLE OF edpline .
* DATA:tline TYPE STANDARD TABLE OF tline WITH HEADER LINE,
* tdname TYPE thead-tdname.
* BREAK guoxiongjie .
*
IF s_ltext[] IS NOT INITIAL.
SELECT kostl, CAST( @space AS CHAR( 40 ) ) AS ltext INTO TABLE @DATA(lt_cskt) FROM cskt WHERE ltext IN @s_ltext .
ENDIF.
*
IF s_zzxmbm[] IS NOT INITIAL.
LOOP AT s_zzxmbm.
CONCATENATE '%' s_zzxmbm-low '%' INTO lv_tmp .
SELECT matnr,werks, zzxmbm APPENDING TABLE @DATA(lt_xmbm)
FROM ztmm_marc WHERE zzxmbm LIKE @lv_tmp AND werks IN @s_dwerk.
ENDLOOP.
DATA:lw_xmbm LIKE LINE OF lt_xmbm.
LOOP AT lt_xmbm INTO lw_xmbm .
r_matnr-sign = 'I'.
r_matnr-option = 'EQ'.
r_matnr-low = lw_xmbm-matnr .
APPEND r_matnr .
ENDLOOP.
IF r_matnr[] IS INITIAL .
RETURN .
ENDIF .
ENDIF.
APPEND 'afpo~dwerk IN s_dwerk AND ' TO wheresql .
APPEND 'afpo~aufnr IN s_aufnr AND ' TO wheresql .
APPEND 'resb~matnr IN s_matnr1 AND ' TO wheresql .
APPEND 'afko~ftrmi IN s_ftrmi AND ' TO wheresql .
APPEND 'caufv~idat2 IN s_idat2 AND ' TO wheresql .
IF s_matnr[] IS INITIAL AND r_matnr[] IS NOT INITIAL.
APPEND 'afpo~matnr IN r_matnr ' TO wheresql .
ELSE.
APPEND 'afpo~matnr IN s_matnr ' TO wheresql .
ENDIF.
IF teco = 'X' OR flag = 'X' OR del = 'X' OR close = 'X' .
ELSE.
APPEND ' AND resb~xloek = '' '' ' TO wheresql .
ENDIF.
SELECT
afpo~aufnr
afpo~matnr
afpo~psmng
afpo~wemng
resb~matnr AS matnr1
resb~meins AS meins
resb~bdmng
resb~enmng
resb~ausch
afpo~dwerk
afko~ftrmi
resb~esmng
resb~posnr
caufv~idat2
INTO CORRESPONDING FIELDS OF TABLE gt_tab
FROM afpo INNER JOIN afko ON afpo~aufnr = afko~aufnr
INNER JOIN caufv ON afpo~aufnr = caufv~aufnr
INNER JOIN resb ON resb~rsnum = afko~rsnum
WHERE (wheresql) .
IF s_matnr[] IS INITIAL AND r_matnr[] IS NOT INITIAL.
ELSE.
DELETE gt_tab WHERE matnr NOT IN r_matnr .
ENDIF.
** “结算日期.
** SELECT aufnr,idat2 INTO TABLE @DATA(lt_caufv) FROM caufv FOR ALL ENTRIES IN @gt_tab
** WHERE aufnr = @gt_tab-aufnr .
** DATA:lw_caufv LIKE LINE OF lt_caufv .
*
“筛选工作中心/部门/删除订单.
LOOP AT gt_tab ASSIGNING FIELD-SYMBOL(<sy_tab>).
* READ TABLE lt_caufv INTO lw_caufv WITH KEY aufnr = <sy_tab>-aufnr .
* IF sy-subrc EQ 0.
* <sy_tab>-idat2 = lw_caufv-idat2 .
* ENDIF.
PERFORM frm_get_aufnr TABLES lt_cskt USING <sy_tab> .
INSERT VALUE #( sign = 'I' option = 'EQ' low = <sy_tab>-aufnr ) INTO TABLE r_aufnr.
DATA(lv_aufnr) = |{ <sy_tab>-aufnr ALPHA = OUT }|.
INSERT VALUE #( sign = 'I' option = 'EQ' low = lv_aufnr ) INTO TABLE r_aufnr.
INSERT VALUE #( sign = 'I' option = 'EQ' low = <sy_tab>-matnr1 ) INTO TABLE r_matnr.
ENDLOOP.
DELETE gt_tab WHERE flg = 'X' .
*
“物料描述
SELECT matnr, maktx INTO TABLE @DATA(lt_makt) FROM makt FOR ALL ENTRIES IN @gt_tab
WHERE ( matnr = @gt_tab-matnr OR matnr = @gt_tab-matnr1 )
AND spras = @sy-langu .
DATA:lw_makt LIKE LINE OF lt_makt.
“物料项目编码
SELECT matnr, werks ,zzxmbm INTO TABLE @lt_xmbm FROM ztmm_marc FOR ALL ENTRIES IN @gt_tab
WHERE matnr = @gt_tab-matnr AND werks = @gt_tab-dwerk .
“成本中心名称
SELECT kostl,ltext INTO TABLE @lt_cskt FROM cskt FOR ALL ENTRIES IN @gt_tab
WHERE kostl = @gt_tab-kostl AND spras = @sy-langu .
DATA:lw_cskt LIKE LINE OF lt_cskt.
“报废数量
SELECT aufnr, matnr, SUM( enmng1 ) AS bfsl INTO TABLE @DATA(lt_005)
FROM ztpp005
WHERE aufnr IN @r_aufnr GROUP BY aufnr, matnr.
DATA:lw_005 LIKE LINE OF lt_005 .
SELECT aufnr, matnr1, SUM( znum1 ) AS bfsl INTO TABLE @DATA(lt_009)
FROM ztpp009
WHERE aufnr IN @r_aufnr GROUP BY aufnr, matnr1.
DATA:lw_009 LIKE LINE OF lt_009 .
“库存数量
SELECT CAST( 'I' AS CHAR( 1 ) ) AS sign,CAST( 'EQ' AS CHAR( 2 ) ) AS option, lgort AS low
INTO TABLE @r_lgort
FROM mdlg WHERE berid LIKE '%ND' AND werks IN @s_dwerk .
SELECT matnr, SUM( labst ) AS labst INTO TABLE @DATA(lt_mard)
FROM mard
WHERE matnr IN @r_matnr AND werks IN @s_dwerk AND lgort NOT IN @r_lgort
GROUP BY matnr .
DATA:lw_mard LIKE LINE OF lt_mard .
SELECT * INTO TABLE @DATA(lt_012)
FROM ztpp012 .
DATA:lw_012 LIKE LINE OF lt_012 .
“关务相关数据
IF s_dwerk-low+0(3) NE '825'.
SELECT
matnr,
CAST( zrec_handbook_index AS CHAR( 12 ) ) AS zrec_handbook_index,
zdecl_com_code,
zsubpro_code,
zciq_code,
zsubpro_name,
zsubpro_spec,
zdecl_conv_rate,
zdecl_unit,
zscale_factor1,
zlegal_unit,
zscale_factor2,
zsec_unit,
zplant_unit,
zplant_conv_rate
INTO TABLE @DATA(lt_sd016)
FROM ztsd016 WHERE matnr IN @r_matnr .
ELSE.
SELECT
matnr,
zserial_no_049 AS zrec_handbook_index,
zdecl_com_code,
zsubpro_code,
* zciq_code,
zsubpro_name,
zsubpro_spec,
zdecl_conv_rate,
zdecl_unit,
zscale_factor1,
zlegal_unit,
zscale_factor2,
zsec_unit,
zplant_unit,
zplant_conv_rate
FROM ztsd050vn WHERE matnr IN @r_matnr
INTO TABLE @DATA(lt_050vn).
MOVE-CORRESPONDING lt_050vn[] TO lt_sd016[] .
ENDIF.
SORT gt_tab ASCENDING BY aufnr posnr .
LOOP AT gt_tab ASSIGNING <sy_tab>.
READ TABLE lt_makt INTO lw_makt WITH KEY matnr = <sy_tab>-matnr .
IF sy-subrc EQ 0.
<sy_tab>-maktx = lw_makt-maktx .
ENDIF.
READ TABLE lt_makt INTO lw_makt WITH KEY matnr = <sy_tab>-matnr1 .
IF sy-subrc EQ 0.
<sy_tab>-maktx1 = lw_makt-maktx .
ENDIF.
READ TABLE lt_xmbm INTO lw_xmbm WITH KEY matnr = <sy_tab>-matnr werks = <sy_tab>-dwerk .
IF sy-subrc EQ 0.
<sy_tab>-zzxmbm = lw_xmbm-zzxmbm .
ENDIF.
READ TABLE lt_cskt INTO lw_cskt WITH KEY kostl = <sy_tab>-kostl .
IF sy-subrc EQ 0.
<sy_tab>-ltext = lw_cskt-ltext .
ENDIF.
<sy_tab>-zwemng = <sy_tab>-psmng – <sy_tab>-wemng.
<sy_tab>-zenmng = <sy_tab>-bdmng – <sy_tab>-enmng.
“报废数量
READ TABLE lt_009 INTO lw_009 WITH KEY aufnr = <sy_tab>-aufnr matnr1 = <sy_tab>-matnr1.
IF sy-subrc EQ 0.
<sy_tab>-zenmng1 = lw_009-bfsl .
ENDIF.
lv_aufnr = |{ <sy_tab>-aufnr ALPHA = OUT }|.
DATA(lv_matnr) = |{ <sy_tab>-matnr1 ALPHA = OUT }|.
IF <sy_tab>-zenmng1 IS INITIAL .
READ TABLE lt_005 INTO lw_005 WITH KEY aufnr = lv_aufnr matnr = lv_matnr.
IF sy-subrc EQ 0.
<sy_tab>-zenmng1 = lw_005-bfsl .
ELSE.
READ TABLE lt_005 INTO lw_005 WITH KEY aufnr = <sy_tab>-aufnr matnr = <sy_tab>-matnr1.
IF sy-subrc EQ 0.
<sy_tab>-zenmng1 = lw_005-bfsl .
ENDIF.
ENDIF.
ENDIF.
“库存数量
READ TABLE lt_mard INTO lw_mard WITH KEY matnr = <sy_tab>-matnr1 .
IF sy-subrc EQ 0 .
<sy_tab>-labst = lw_mard-labst .
ENDIF.
“组件单位用量
“开工单的时候如果不手动对工单组件需求数量进行修改,工单生成的预留的ESMNG与原组件BOM单耗一致,与使用可能性和优先级无关。
“如果对工单组件的需求数量进行修改后,预留的ESMNG变成(1-使用可能性)*原BOM单耗。
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
i_number_of_digits = 9
i_fltp_value = <sy_tab>-esmng
IMPORTING
e_char_field = lv_char.
<sy_tab>-zenmng3 = lv_char .
DATA(lv_bfsl) = <sy_tab>-bdmng – <sy_tab>-bdmng / ( 1 + <sy_tab>-ausch / 100 ) .
“BOM单位用量(不含报废率)
lv_menge = ( <sy_tab>-bdmng – lv_bfsl ) / <sy_tab>-psmng.
CALL FUNCTION 'ROUND'
EXPORTING
decimals = 6
input = lv_menge
sign = '-'
IMPORTING
output = <sy_tab>-zenmng4
EXCEPTIONS
input_invalid = 1
overflow = 2
type_invalid = 3
OTHERS = 4.
“单位损耗
IF <sy_tab>-ausch IS NOT INITIAL.
<sy_tab>-zausch = <sy_tab>-ausch .” / 100 .
CONCATENATE <sy_tab>-zausch '%' INTO <sy_tab>-zausch .
CONDENSE <sy_tab>-zausch NO-GAPS .
ENDIF.
“报废率
IF <sy_tab>-zenmng1 > 0 AND <sy_tab>-enmng > 0 .
<sy_tab>-zzbfl = <sy_tab>-zenmng1 / <sy_tab>-enmng .
lv_dec = <sy_tab>-zzbfl * 100 .
<sy_tab>-zzbfl = lv_dec .
CONCATENATE <sy_tab>-zzbfl '%' INTO <sy_tab>-zzbfl .
ELSE.
CLEAR:<sy_tab>-zzbfl .
ENDIF.
“单龄
<sy_tab>-zzdl = <sy_tab>-ftrmi – sy-datum .
“在制品数量
* 1 组件单位用量
* 2 BOM单位用量(不含报废率)
* READ TABLE lt_012 INTO lw_012 WITH KEY werks = s_dwerk-low .
* IF sy-subrc EQ 0.
* IF lw_012-dwyl = '1'.
* DATA(lv_dwyl) = <sy_tab>-zenmng3. “组件单位用量
* ELSEIF lw_012-dwyl = '2'.
* lv_dwyl = <sy_tab>-zenmng4. “BOM单位用量(不含报废率)
* ENDIF.
* ELSE.
* “没维护,默认
* IF s_dwerk-low = '1001'.
* lv_dwyl = <sy_tab>-zenmng3. “组件单位用量
* ELSEIF s_dwerk-low = '1002' .
* lv_dwyl = <sy_tab>-zenmng4. “BOM单位用量(不含报废率)
* ENDIF.
* ENDIF.
* <sy_tab>-zenmng2 = <sy_tab>-enmng – ( <sy_tab>-wemng * lv_dwyl ) – <sy_tab>-zenmng1 .
* ENMNG发放量 – ( BDMNG需求数量 / PSMNG已订购量) * WEMNG完成数量 * (1-AUSCH单位损耗/100) – ZENMNG1报废数量
<sy_tab>-zenmng2 = <sy_tab>-enmng – ( <sy_tab>-bdmng / <sy_tab>-psmng ) * <sy_tab>-wemng * ( 1 – <sy_tab>-ausch / 100 ) – <sy_tab>-zenmng1 .
“关务数据
READ TABLE lt_sd016 INTO DATA(lw_sd016) WITH KEY matnr = <sy_tab>-matnr1 BINARY SEARCH.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING lw_sd016 TO <sy_tab> .
<sy_tab>-zrec_handbook_index = |{ <sy_tab>-zrec_handbook_index ALPHA = OUT }|.
“工单标准总用量= 已订购量*BOM单位用量(不含报废率)
<sy_tab>-zenmng5 = <sy_tab>-psmng * <sy_tab>-zenmng4 .
“WIP理论差异数量 = 发放量-(完成数量*BOM单位用量(不含报废率))
<sy_tab>-zenmng6 = <sy_tab>-enmng – ( <sy_tab>-wemng * <sy_tab>-zenmng4 ) .
“差异数量比率 = WIP理论差异数量/(已订购量*BOM单位用量(不含报废率))
<sy_tab>-ausch1 = <sy_tab>-zenmng6 / <sy_tab>-zenmng5 .
“申报数量 = 工厂商品单位数量*申报单位转换率
<sy_tab>-zenmng7 = <sy_tab>-zenmng10 * <sy_tab>-zdecl_conv_rate .
“法1数量 = 申报数量*比例因子一
<sy_tab>-zenmng8 = <sy_tab>-zenmng7 * <sy_tab>-zscale_factor1 .
“法2数量 = 申报数量*比例因子二
<sy_tab>-zenmng9 = <sy_tab>-zenmng7 * <sy_tab>-zscale_factor2 .
“工厂商品单位数量 = 在制品数量*库存转报关率(库存转报关率无数值时,按1计算)
DATA(lv_rate) = <sy_tab>-zplant_conv_rate.
IF lv_rate IS INITIAL.
lv_rate = 1 .
ENDIF.
<sy_tab>-zenmng10 = <sy_tab>-zenmng2 * lv_rate .
ENDIF.
ENDLOOP.
ENDFORM.
*&———————————————————————*
*& Form frm_check_auth
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_check_auth .
* DATA:lt_values TYPE TABLE OF us335 WITH HEADER LINE .
* CLEAR:gw_info .
*
* CLEAR:gt_msg,gt_msg[].
* gt_msg-msgid = '00' .
* gt_msg-msgty = 'E' .
* gt_msg-msgno = '001' .
*
* AUTHORITY-CHECK OBJECT 'ZAUTMM_PRS' ID 'ZACTIVE' FIELD 'X'.
* IF sy-subrc NE 0. “价格权限
* gw_info-zaopp_prs = 'X'.
* ENDIF.
ENDFORM.
*&———————————————————————*
*& Form frm_search_ltext
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_search_ltext .
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
tabname = 'CSKT'
fieldname = 'LTEXT'
searchhelp = 'ZSH_CSKT_LTEXT'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_LTEXT'
EXCEPTIONS
field_not_found = 1
no_help_for_field = 2
inconsistent_help = 3
no_values_found = 4
OTHERS = 5.
ENDFORM.
*&———————————————————————*
*& Form frm_get_aufnr
*&———————————————————————*
*& text
*&———————————————————————*
*& –> <SY_TAB>
*& –> FLG_GET
*&———————————————————————*
FORM frm_get_aufnr TABLES pt_cskt USING pv_tab LIKE LINE OF gt_tab.
DATA:lw_objects TYPE bapi_pp_order_objects,
lt_header TYPE TABLE OF bapi_order_header1 WITH HEADER LINE,
lt_operation TYPE TABLE OF bapi_order_operation1 WITH HEADER LINE,
lw_return TYPE bapiret2.
DATA:BEGIN OF lt_cskt OCCURS 0 .
DATA:kostl TYPE cskt-kostl,
ltext TYPE cskt-ltext,
END OF lt_cskt .
READ TABLE gt_anr WITH KEY aufnr = pv_tab-aufnr .
IF sy-subrc EQ 0.
MOVE-CORRESPONDING gt_anr TO pv_tab .
RETURN.
ENDIF.
lt_cskt[] = pt_cskt[].
CLEAR pv_tab-flg .
lw_objects-header = 'X' .
lw_objects-operations = 'X' .
CALL FUNCTION 'BAPI_PRODORD_GET_DETAIL'
EXPORTING
number = pv_tab-aufnr
order_objects = lw_objects
IMPORTING
return = lw_return
TABLES
header = lt_header
operation = lt_operation.
LOOP AT lt_header.
pv_tab-zzt = lt_header-system_status .
IF lt_header-system_status CS 'CRTD' OR lt_header-system_status CS 'REL' OR lt_header-system_status CS 'TECO'
OR lt_header-system_status CS '锁定' OR lt_header-system_status CS '结算' OR lt_header-system_status CS '删除'
OR lt_header-system_status CS '标记'.
pv_tab-flg = ''.
IF crtd = '' AND lt_header-system_status CS 'CRTD'.
pv_tab-zzt = ''.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
IF rel = '' AND lt_header-system_status CS 'REL'.
pv_tab-zzt = ''.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
IF teco = '' AND lt_header-system_status CS 'TECO'.
pv_tab-zzt = ''.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
IF flag = '' AND lt_header-system_status CS '标记'.
pv_tab-zzt = ''.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
IF del = '' AND lt_header-system_status CS '删除'.
pv_tab-zzt = ''.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
IF lock = '' AND lt_header-system_status CS '锁定'.
pv_tab-zzt = ''.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
IF close = '' AND lt_header-system_status CS '结算'.
pv_tab-zzt = ''.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
ELSE.
pv_tab-zzt = ''.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
DATA(routing_no) = lt_header-routing_no .
ENDLOOP.
LOOP AT lt_operation WHERE routing_no = routing_no AND system_status NS '删除' AND work_center <> ''.
DATA(work_center) = lt_operation-work_center .
EXIT .
ENDLOOP.
IF work_center NOT IN s_arbpl.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
pv_tab-arbpl = work_center .
SELECT SINGLE kostl INTO @DATA(lv_kostl) FROM crhd INNER JOIN crco ON crhd~objid = crco~objid
WHERE arbpl = @work_center .
pv_tab-routing_no = routing_no .
pv_tab-kostl = lv_kostl .
IF lt_cskt[] IS NOT INITIAL.
DATA:lw_cskt LIKE LINE OF lt_cskt .
READ TABLE lt_cskt INTO lw_cskt WITH KEY kostl = lv_kostl .
IF sy-subrc NE 0.
pv_tab-flg = 'X' .
RETURN .
ENDIF.
ENDIF.
DEFINE marco_anr_txt.
IF lt_header-system_status CS &1 .”'CRTD' .
pv_tab-zzt = &2 .”'创建' .
ENDIF.
END-OF-DEFINITION.
marco_anr_txt:'CRTD' '已创建',
'REL' '已下达' ,
'TECO' '技术关闭' ,
'标记' '标记' ,
'删除' '删除' ,
'锁定' '锁定' ,
'结算' '已财务结算' .
INSERT VALUE #( aufnr = pv_tab-aufnr
zzt = pv_tab-zzt
flg = pv_tab-flg
arbpl = pv_tab-arbpl
routing_no = pv_tab-routing_no
kostl = pv_tab-kostl ) INTO TABLE gt_anr.
ENDFORM.















暂无评论内容