生产领料打印(含修改数量)
*&---------------------------------------------------------------------*
*& Report ZMMF002
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmf005.
INCLUDE zmmf005_top.
INCLUDE zmmf005_scr.
INCLUDE zmmf005_frm.
START-OF-SELECTION .
if r_1 eq 'X'.
PERFORM frm_get_data.
ENDIF .
IF r_2 EQ 'X'.
PERFORM frm_get_data2.
ENDIF .
IF R_1 EQ 'X'.
PERFORM frm_process_data.
ENDIF .
IF R_2 EQ 'X'.
PERFORM frm_process_data2.
ENDIF.
PERFORM frm_display_alv .
*&---------------------------------------------------------------------*
*& 包含 ZMMF002_TOP
*&---------------------------------------------------------------------*
TABLES : rkpf ,resb .
DATA: BEGIN OF gs_out ,
" smartform - ZMMS005
bwart LIKE rkpf-bwart , " 移动类型
" 移动类型文本
" 领料部门
rsnum LIKE rkpf-rsnum , "预留单号
rspos LIKE resb-rspos , "项号
aufnr LIKE rkpf-aufnr , "订单单号
bdter LIKE resb-bdter , "日期
matnr LIKE resb-matnr , "物料编码
maktx TYPE makt-maktx , " 物料描述
charg TYPE resb-charg , "评估类别
meins LIKE resb-meins , " 单位
bdmng LIKE resb-bdmng , "需求数量
lgort LIKE resb-lgort , "仓库代码
lgobe LIKE t001l-lgobe , "仓库名称
mark ,
ktext LIKE crtx-ktext , " 工作中心名称
zprt_cnt LIKE zmmt001q-zprt_cnt , " 打印次数
zgldd LIKE aufk-zgldd,
zzrbl(50) TYPE c,
END OF gs_out .
DATA: gt_out LIKE TABLE OF gs_out .
DATA:BEGIN OF gs_zppt010,
vbeln LIKE zppt010-vbeln,
zzrbl_01 LIKE zppt010-zzrbl_01,
zzrbl_02 LIKE zppt010-zzrbl_02,
zzrbl_03 LIKE zppt010-zzrbl_03,
zzrbl_04 LIKE zppt010-zzrbl_04,
zzrbl_05 LIKE zppt010-zzrbl_05,
zzrbl_06 LIKE zppt010-zzrbl_06,
zzrbl_07 LIKE zppt010-zzrbl_07,
END OF gs_zppt010.
DATA gt_zppt010 LIKE TABLE OF gs_zppt010.
DATA: BEGIN OF gs_rkpf ,
bwart LIKE rkpf-bwart , " 移动类型
" 移动类型文本
" 领料部门
rsnum LIKE rkpf-rsnum , "预留单号
END OF gs_rkpf .
DATA: gt_rkpf LIKE TABLE OF gs_rkpf .
DATA: BEGIN OF gs_resb ,
aufnr LIKE resb-aufnr , "订单单号
rsnum LIKE resb-rsnum , "预留单号
rspos LIKE resb-rspos , "项号
bdter LIKE resb-bdter , "日期
matnr LIKE resb-matnr , "物料编码
charg LIKE resb-charg , "评估类别
meins LIKE resb-meins , " 单位
bdmng LIKE resb-bdmng , "需求数量 BDMNG
enmng LIKE resb-enmng , "提货数量
lgort LIKE resb-lgort , "仓库代码
zgldd LIKE aufk-zgldd,
END OF gs_resb .
DATA: gt_resb LIKE TABLE OF gs_resb .
DATA: BEGIN OF gs_makt ,
matnr LIKE makt-matnr,
maktx LIKE makt-maktx,
END OF gs_makt .
DATA: gt_makt LIKE TABLE OF gs_makt .
DATA: BEGIN OF gs_marc,
matnr LIKE marc-matnr,
lgfsb LIKE marc-lgfsb,
END OF gs_marc .
DATA: gt_marc LIKE TABLE OF gs_marc .
" 获取打印次数
DATA: gs_zmmt001q LIKE zmmt001q .
DATA: gt_zmmt001q LIKE TABLE OF gs_zmmt001q .
DATA: BEGIN OF gs_t001l ,
lgort LIKE resb-lgort , "仓库代码
lgobe LIKE t001l-lgobe , "仓库名称
END OF gs_t001l .
DATA: gt_t001l LIKE TABLE OF gs_t001l.
DATA: BEGIN OF gs_stxl,
tdobject LIKE stxl-tdobject , " 文本对象 EKPO
tdname LIKE stxl-tdname, "文本名 编号加5位序号 430000000500010
tdid LIKE stxl-tdid,
clustd LIKE stxl-clustd , "项目文本数据
END OF gs_stxl .
DATA : BEGIN OF gs_zmmt004_ll ,
zlldj LIKE zmmt004_ll-zlldj , "领料单据号
ztype LIKE zmmt004_ll-ztype, "类型
aufnr LIKE zmmt004_ll-aufnr , "工单号
matnr LIKE zmmt004_ll-matnr , " 物料
maktx LIKE zmmt004_ll-maktx , " 物料描述
meins LIKE zmmt004_ll-meins , "单位
zllsl LIKE zmmt004_ll-zllsl , "领料数量
zpglx LIKE zmmt004_ll-zpglx , "评估类型
* lgort LIKE zmmt004_ll-lgort , " 仓库
zxqrq LIKE zmmt004_ll-zxqrq , " 需求日期
END OF gs_zmmt004_ll .
DATA : gt_zmmt004_ll LIKE TABLE OF gs_zmmt004_ll .
DATA: BEGIN OF gs_afko ,
aufnr LIKE afko-aufnr , " 工单号
aufpl LIKE afko-aufpl, "工序任务清单叼
END OF gs_afko .
DATA: gt_afko LIKE TABLE OF gs_afko .
DATA: BEGIN OF gs_afvc ,
aufpl LIKE afvc-aufpl , "工序任务清单号
aplzl LIKE afvc-aplzl , " 序号
arbid LIKE afvc-arbid , "对象表枳
END OF gs_afvc.
DATA: gt_afvc LIKE TABLE OF gs_afvc.
DATA: BEGIN OF gs_crtx ,
objid LIKE crtx-objid, "对象标识
ktext LIKE crtx-ktext , " 工作中心名称
END OF gs_crtx .
DATA: gt_crtx LIKE TABLE OF gs_crtx .
DATA: BEGIN OF gs_aufnr_ktext ,
aufnr LIKE afko-aufnr, " 工单号
ktext LIKE crtx-ktext, " 工作中心名称
END OF gs_aufnr_ktext .
DATA: gt_aufnr_ktext LIKE TABLE OF gs_aufnr_ktext.
DATA: gv_zxh LIKE zmmt005h-zxh .
DATA: gt_fieldcat TYPE TABLE OF slis_fieldcat_alv.
DATA: gs_fieldcat TYPE slis_fieldcat_alv.
DATA: gs_layout TYPE slis_layout_alv .
DATA: g_fm_name TYPE rs38l_fnam.
DATA: gw_options TYPE ssfcompop,
gw_control TYPE ssfctrlop.
*&---------------------------------------------------------------------*
*& 包含 ZMMF002_SCR
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_werks for resb-werks OBLIGATORY ,
s_rsnum FOR rkpf-rsnum , "预留单号
s_aufnr FOR rkpf-aufnr , "订单单号
s_bdter FOR resb-bdter . "日期
*
**PARAMETERS : P_USNAM TYPE MSEG-USNAM_MKPF OBLIGATORY DEFAULT 'LXF' . "用户名
*PARAMETERS : P_USNAM TYPE RKPF-USNAM_MKPF . "用户名
PARAMETERS : r_1 RADIOBUTTON GROUP g1 .
PARAMETERS : r_2 RADIOBUTTON GROUP g1 .
*PARAMETERS: cb_1 AS CHECKBOX .
*&---------------------------------------------------------------------*
*& 包含 ZMMF002_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
SELECT
a~aufnr "订单单号
a~rsnum "预留单号
rspos "项号
bdter "日期
matnr "物料编码
charg "评估类别
meins " 单位
bdmng "需求数量
enmng "提货数量
lgort "仓库代码
zgldd
INTO TABLE gt_resb
FROM resb AS a JOIN rkpf AS b ON a~rsnum = b~rsnum AND b~bwart IN ('261')
JOIN aufk ON a~aufnr = aufk~aufnr
WHERE a~rsnum IN s_rsnum
AND a~aufnr IN s_aufnr
AND bdter IN s_bdter
AND a~xloek = space
AND a~werks IN s_werks
AND a~bwart = '261'
AND a~bdmng <> 0 .
SORT gt_resb BY rsnum .
IF gt_resb IS NOT INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_zppt010 FROM zppt010.
LOOP AT gt_zppt010 INTO gs_zppt010.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_zppt010-vbeln
IMPORTING
output = gs_zppt010-vbeln.
MODIFY gt_zppt010 FROM gs_zppt010 TRANSPORTING vbeln.
ENDLOOP.
ENDIF.
IF gt_resb IS NOT INITIAL .
SELECT
bwart " 移动类型
rsnum "预留单号
INTO TABLE gt_rkpf
FROM rkpf
FOR ALL ENTRIES IN gt_resb
WHERE rsnum = gt_resb-rsnum .
ENDIF .
SORT gt_resb BY matnr .
IF gt_resb IS NOT INITIAL .
SELECT matnr maktx
INTO TABLE gt_makt
FROM makt
FOR ALL ENTRIES IN gt_resb
WHERE matnr = gt_resb-matnr .
ENDIF .
IF gt_resb IS NOT INITIAL .
SELECT matnr lgfsb
INTO TABLE gt_marc
FROM marc
FOR ALL ENTRIES IN gt_resb
WHERE matnr = gt_resb-matnr
AND werks EQ s_werks-low .
ENDIF .
SELECT
lgort "仓库代码
lgobe "仓库名称
INTO TABLE gt_t001l
FROM t001l
WHERE werks = s_werks-low .
" 获取打印次数
IF gt_resb IS NOT INITIAL .
SELECT *
INTO TABLE gt_zmmt001q
FROM zmmt001q
FOR ALL ENTRIES IN gt_resb
WHERE zdh = gt_resb-rsnum
AND zcxm EQ 'ZMMF005' .
ENDIF .
"得到工单号和工作中心名称
IF gt_resb IS NOT INITIAL .
SELECT
aufnr
aufpl
INTO TABLE gt_afko
FROM afko
FOR ALL ENTRIES IN gt_resb
WHERE aufnr = gt_resb-aufnr.
ENDIF .
SORT gt_afko BY aufpl.
IF gt_afko IS NOT INITIAL .
SELECT
aufpl
aplzl " 序号
arbid
INTO TABLE gt_afvc
FROM afvc
FOR ALL ENTRIES IN gt_afko
WHERE aufpl = gt_afko-aufpl.
ENDIF .
SORT gt_afvc BY arbid .
IF gt_afvc IS NOT INITIAL .
SELECT
objid
ktext
INTO TABLE gt_crtx
FROM crtx
FOR ALL ENTRIES IN gt_afvc
WHERE objid = gt_afvc-arbid .
ENDIF .
SORT gt_afvc BY arbid .
IF gt_afvc IS NOT INITIAL .
SELECT objid ktext
INTO TABLE gt_crtx
FROM crtx
FOR ALL ENTRIES IN gt_afvc
WHERE objid = gt_afvc-arbid .
ENDIF .
SORT gt_crtx BY objid .
SORT gt_afvc BY aufpl aplzl .
LOOP AT gt_afko INTO gs_afko .
gs_aufnr_ktext-aufnr = gs_afko-aufnr .
CLEAR gs_afvc .
READ TABLE gt_afvc INTO gs_afvc WITH KEY aufpl = gs_afko-aufpl .
IF sy-subrc EQ 0 .
CLEAR gs_crtx .
READ TABLE gt_crtx INTO gs_crtx WITH KEY objid = gs_afvc-arbid.
IF sy-subrc EQ 0 .
gs_aufnr_ktext-ktext = gs_crtx-ktext .
ENDIF .
ENDIF .
APPEND gs_aufnr_ktext TO gt_aufnr_ktext .
CLEAR gs_aufnr_ktext .
ENDLOOP .
"得到工单号和工作中心名称 结束
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data .
SORT gt_resb BY rsnum rspos .
SORT gt_rkpf BY rsnum .
SORT gt_makt BY matnr .
SORT gt_marc BY matnr .
SORT gt_aufnr_ktext BY aufnr .
SORT gt_zppt010 BY vbeln.
SORT gt_zmmt001q BY zdh .
LOOP AT gt_resb INTO gs_resb.
gs_out-rsnum = gs_resb-rsnum . "预留单号
gs_out-rspos = gs_resb-rspos . " 项号
gs_out-aufnr = gs_resb-aufnr . "订单号
gs_out-bdter = gs_resb-bdter ."日期
gs_out-matnr = gs_resb-matnr ."物料编码
gs_out-charg = gs_resb-charg . "评估类别
gs_out-meins = gs_resb-meins . " 单位
gs_out-bdmng = gs_resb-bdmng - gs_resb-enmng . "需求数量-提货数量
gs_out-lgort = gs_resb-lgort . "仓库代码
gs_out-zgldd = gs_resb-zgldd.
"计划内为空
* READ TABLE gt_rkpf INTO gs_rkpf WITH KEY rsnum = gs_resb-rsnum
* BINARY SEARCH .
* gs_out-bwart = gs_rkpf-bwart . "凭证类型
* CLEAR gs_rkpf .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_out-zgldd
IMPORTING
output = gs_out-zgldd.
CLEAR gs_zppt010.
READ TABLE gt_zppt010 INTO gs_zppt010 WITH KEY vbeln = gs_out-zgldd+2(10) BINARY SEARCH .
IF sy-subrc EQ 0.
gs_out-zzrbl = '市场' && gs_zppt010-zzrbl_01 &&'/南城研发'&& gs_zppt010-zzrbl_02 &&'/工厂研发'&& gs_zppt010-zzrbl_03 &&'/工程'&& gs_zppt010-zzrbl_04
&&'/生产'&& gs_zppt010-zzrbl_05 &&'/品质'&& gs_zppt010-zzrbl_06 &&'/其他'&& gs_zppt010-zzrbl_07.
ENDIF.
READ TABLE gt_makt INTO gs_makt WITH KEY matnr = gs_resb-matnr
BINARY SEARCH .
gs_out-maktx = gs_makt-maktx . "物料描述
CLEAR gs_makt .
IF gs_resb-lgort IS INITIAL .
READ TABLE gt_marc INTO gs_marc WITH KEY matnr = gs_resb-matnr
BINARY SEARCH .
IF sy-subrc EQ 0 .
READ TABLE gt_t001l INTO gs_t001l WITH KEY lgort = gs_marc-lgfsb .
IF sy-subrc EQ 0.
gs_out-lgobe = gs_t001l-lgobe . "仓库名称
ENDIF .
CLEAR gs_t001l.
ENDIF .
CLEAR gs_marc .
ELSE .
READ TABLE gt_t001l INTO gs_t001l WITH KEY lgort = gs_resb-lgort.
gs_out-lgobe = gs_t001l-lgobe . "仓库名称
CLEAR gs_t001l.
ENDIF .
CLEAR gs_aufnr_ktext.
READ TABLE gt_aufnr_ktext INTO gs_aufnr_ktext WITH KEY aufnr = gs_resb-aufnr
BINARY SEARCH .
IF sy-subrc EQ 0 .
gs_out-ktext = gs_aufnr_ktext-ktext .
ENDIF .
" 获取打印次数
CLEAR gs_zmmt001q .
READ TABLE gt_zmmt001q INTO gs_zmmt001q WITH KEY zdh = gs_out-rsnum
BINARY SEARCH .
IF sy-subrc EQ 0 .
gs_out-zprt_cnt = gs_zmmt001q-zprt_cnt .
ENDIF .
APPEND gs_out TO gt_out .
CLEAR gs_out .
ENDLOOP .
DELETE gt_out WHERE bdmng EQ 0 .
SORT gt_out BY aufnr.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
DEFINE append_field.
gs_fieldcat-fieldname = &1.
gs_fieldcat-seltext_l = &2.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFINITION.
IF r_1 EQ 'X' .
append_field: 'RSNUM' '预留单号' .
ENDIF .
IF r_2 EQ 'X'.
append_field: 'RSNUM' '领料单号' .
ENDIF .
append_field: 'RSPOS' '项号' .
append_field: 'AUFNR' '订单单号' .
append_field: 'BDTER' '日期' .
* append_field: 'MATNR' '物料编号' .
gs_fieldcat-fieldname = 'MATNR'.
gs_fieldcat-seltext_l = '物料编号' .
gs_fieldcat-ref_fieldname = 'MATNR'.
gs_fieldcat-ref_tabname = 'MARA' .
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
append_field: 'MAKTX' '物料描述' .
append_field: 'CHARG' '评估类别' .
* append_field: 'BDMNG' '数量'.
* gs_fieldcat-decimals_out = '0'.
gs_fieldcat-fieldname = 'BDMNG '.
gs_fieldcat-edit = 'X'.
gs_fieldcat-ref_tabname = 'RESB'.
gs_fieldcat-ref_fieldname = 'BDMNG' .
gs_fieldcat-seltext_l = '数量' .
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
append_field: 'MEINS' '单位' .
append_field: 'LGORT' '仓库代码' .
append_field: 'LGOBE' '仓储地点' .
append_field: 'BWART' '移动类型' .
append_field: 'ZPRT_CNT ' '打印次数'.
IF r_1 EQ 'X' .
append_field: 'ZGLDD' '退货单号' .
append_field: 'ZZRBL' '退货责任比例' .
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
ENDIF.
gs_layout-box_fieldname = 'MARK'.
gs_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_STATUS_SET'
i_callback_user_command = 'FRM_USER_COMMAND'
*
* I_GRID_SETTINGS =
is_layout = gs_layout
it_fieldcat = gt_fieldcat
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_out
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM frm_status_set USING ut_extab TYPE slis_t_extab.
SET PF-STATUS 'PF_001'.
ENDFORM.
FORM frm_user_command USING uv_ucomm LIKE sy-ucomm
us_selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
"alv 修改后传给GT_OUT
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data .
CALL METHOD lr_grid->refresh_table_display .
" 不合并打印
IF sy-ucomm EQ 'PRINT' OR sy-ucomm EQ 'PRINT2' .
IF s_werks-low EQ '1000'.
IF sy-ucomm EQ 'PRINT' .
IF r_1 EQ 'X'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005IN'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
IF r_2 EQ 'X' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
endif.
ENDIF .
ENDIF.
IF sy-ucomm EQ 'PRINT2' .
IF r_1 EQ 'X'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005AIN'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
IF r_2 EQ 'X'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005A'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
ENDIF .
ELSE .
IF sy-ucomm EQ 'PRINT' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005D'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
IF sy-ucomm EQ 'PRINT2' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005AD'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
ENDIF .
gw_options-tdnewid = 'X'. "New Spool
gw_options-tdimmed = 'X'.
gw_options-tddelete = 'X'. "Delete Spool After Print
gw_options-tdfinal = 'X'.
gw_options-tdiexit = 'X'. "Exit after printing in print preview
gw_options-tddest = 'LP01'.
gw_control-no_dialog = 'X'.
gw_control-preview = 'X'.
gw_control-no_open = 'X'.
gw_control-no_close = 'X'.
CALL FUNCTION 'SSF_OPEN' "打开打印窗口
EXPORTING
control_parameters = gw_control
output_options = gw_options
user_settings = ''
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
DATA: lt_out LIKE TABLE OF gs_out .
DATA: ls_out LIKE gs_out .
DATA: lt_out2 LIKE TABLE OF gs_out .
lt_out = gt_out .
DELETE lt_out WHERE mark <> 'X'.
SORT lt_out BY rsnum .
DELETE ADJACENT DUPLICATES FROM lt_out COMPARING rsnum .
PERFORM get_xh . " 得到本月最大序号
DATA: lv_djbh TYPE string .
DATA: gs_zmmt005h LIKE zmmt005h .
DATA:lv_y TYPE c LENGTH 2.
DATA:lv_m TYPE c LENGTH 2 .
lv_y = sy-datum+2(2) .
lv_m = sy-datum+4(2) .
LOOP AT lt_out INTO ls_out .
" 取得打印次数并保存
gs_zmmt001q-zcxm = 'ZMMF005' .
gs_zmmt001q-zdh = ls_out-rsnum .
gs_zmmt001q-zprt_cnt = ls_out-zprt_cnt + 1 .
* MODIFY gt_out from gs_out .
MODIFY zmmt001q FROM gs_zmmt001q .
" 只有计划内才编号
IF r_1 EQ 'X'.
"本月最大序号并加1
gv_zxh = gv_zxh + 1 .
gs_zmmt005h-zxh = gv_zxh .
gs_zmmt005h-phdat = sy-datum .
MODIFY zmmt005h FROM gs_zmmt005h .
CONCATENATE 'ST' lv_y lv_m gv_zxh INTO lv_djbh .
ELSE .
lv_djbh = '计划外' .
ENDIF .
LOOP AT gt_out INTO gs_out WHERE mark EQ 'X'.
IF gs_out-rsnum EQ ls_out-rsnum .
APPEND gs_out TO lt_out2 .
ENDIF .
ENDLOOP .
CALL FUNCTION g_fm_name
EXPORTING
control_parameters = gw_control
output_options = gw_options
* is_bkpf = gs_bkpf
* IMPORTING
* job_output_info = l_end
* job_output_options = l_start
iv_djbh = lv_djbh
TABLES
it_out = lt_out2
* it_bkpf = lt_bkpf
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CLEAR: lt_out2[] .
ENDLOOP .
CALL FUNCTION 'SSF_CLOSE'
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
ENDIF.
" 合并打印
PERFORM frm_print34 .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data2 .
SELECT
zlldj "领料单据号
ztype " 类型
aufnr "工单号
matnr " 物料
maktx " 物料描述
meins "单位
zllsl "领料数量
zpglx "评估类型
* LGORT " 仓库
zxqrq " 需求日期
INTO TABLE gt_zmmt004_ll
FROM zmmt004_ll
WHERE aufnr IN s_aufnr
AND zxqrq IN s_bdter
AND ztype EQ 'Z2'
AND loekz = space
AND werks IN s_werks .
IF gt_zmmt004_ll IS NOT INITIAL .
SELECT
matnr
lgfsb "外部仓储地点
INTO TABLE gt_marc
FROM marc
WHERE werks EQ s_werks-low.
* FOR ALL ENTRIES IN gt_zmmt004_ll
* WHERE matnr = gt_zmmt004_ll-matnr .
ENDIF .
SELECT
lgort "仓库代码
lgobe "仓库名称
INTO TABLE gt_t001l
FROM t001l
WHERE werks EQ s_werks-low.
" 打印次数
IF gt_zmmt004_ll IS NOT INITIAL .
SELECT *
INTO TABLE gt_zmmt001q
FROM zmmt001q
FOR ALL ENTRIES IN gt_zmmt004_ll
WHERE zdh = gt_zmmt004_ll-zlldj
AND zcxm EQ 'ZMMF005' .
ENDIF .
"得到工单号和工作中心名称
IF gt_zmmt004_ll IS NOT INITIAL .
SELECT
aufnr
aufpl
INTO TABLE gt_afko
FROM afko
FOR ALL ENTRIES IN gt_zmmt004_ll
WHERE aufnr = gt_zmmt004_ll-aufnr.
ENDIF .
SORT gt_afko BY aufpl.
IF gt_afko IS NOT INITIAL .
SELECT
aufpl
aplzl " 序号
arbid
INTO TABLE gt_afvc
FROM afvc
FOR ALL ENTRIES IN gt_afko
WHERE aufpl = gt_afko-aufpl.
ENDIF .
SORT gt_afvc BY arbid .
IF gt_afvc IS NOT INITIAL .
SELECT
objid
ktext
INTO TABLE gt_crtx
FROM crtx
FOR ALL ENTRIES IN gt_afvc
WHERE objid = gt_afvc-arbid .
ENDIF .
SORT gt_afvc BY arbid .
IF gt_afvc IS NOT INITIAL .
SELECT objid ktext
INTO TABLE gt_crtx
FROM crtx
FOR ALL ENTRIES IN gt_afvc
WHERE objid = gt_afvc-arbid .
ENDIF .
SORT gt_crtx BY objid .
SORT gt_afvc BY aufpl aplzl .
LOOP AT gt_afko INTO gs_afko .
gs_aufnr_ktext-aufnr = gs_afko-aufnr .
CLEAR gs_afvc .
READ TABLE gt_afvc INTO gs_afvc WITH KEY aufpl = gs_afko-aufpl .
IF sy-subrc EQ 0 .
CLEAR gs_crtx .
READ TABLE gt_crtx INTO gs_crtx WITH KEY objid = gs_afvc-arbid.
IF sy-subrc EQ 0 .
gs_aufnr_ktext-ktext = gs_crtx-ktext .
ENDIF .
ENDIF .
APPEND gs_aufnr_ktext TO gt_aufnr_ktext .
CLEAR gs_aufnr_ktext .
ENDLOOP .
"得到工单号和工作中心名称 结束
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data2 .
SORT gt_aufnr_ktext BY aufnr .
SORT gt_zmmt001q BY zdh .
SORT gt_marc BY matnr .
LOOP AT gt_zmmt004_ll INTO gs_zmmt004_ll .
gs_out-rsnum = gs_zmmt004_ll-zlldj . "领料单号
gs_out-bwart = gs_zmmt004_ll-ztype .
gs_out-aufnr = gs_zmmt004_ll-aufnr . "订单号
gs_out-matnr = gs_zmmt004_ll-matnr . "物料编码
gs_out-maktx = gs_zmmt004_ll-maktx .
gs_out-meins = gs_zmmt004_ll-meins . " 单位
gs_out-bdmng = gs_zmmt004_ll-zllsl. "需求数量
gs_out-charg = gs_zmmt004_ll-zpglx. "评估类别
gs_out-bdter = gs_zmmt004_ll-zxqrq . "日期
CLEAR gs_aufnr_ktext.
READ TABLE gt_aufnr_ktext INTO gs_aufnr_ktext WITH KEY aufnr = gs_zmmt004_ll-aufnr
BINARY SEARCH .
IF sy-subrc EQ 0 .
gs_out-ktext = gs_aufnr_ktext-ktext .
ENDIF .
"得到外部仓库代码
CLEAR gs_marc .
READ TABLE gt_marc INTO gs_marc WITH KEY matnr = gs_zmmt004_ll-matnr
BINARY SEARCH .
IF sy-subrc EQ 0 .
"得到仓库名称
CLEAR gs_t001l.
READ TABLE gt_t001l INTO gs_t001l WITH KEY lgort = gs_marc-lgfsb.
IF sy-subrc EQ 0 .
gs_out-lgobe = gs_t001l-lgobe .
ENDIF .
ENDIF .
" 获取打印次数
CLEAR gs_zmmt001q .
READ TABLE gt_zmmt001q INTO gs_zmmt001q WITH KEY zdh = gs_out-rsnum
BINARY SEARCH .
IF sy-subrc EQ 0 .
gs_out-zprt_cnt = gs_zmmt001q-zprt_cnt .
ENDIF .
APPEND gs_out TO gt_out .
CLEAR gs_out.
ENDLOOP .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_XH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_xh .
DATA: lv_xh TYPE i .
DATA:lv_year TYPE c LENGTH 4.
DATA:lv_month TYPE c LENGTH 2 .
DATA:lv_where TYPE c LENGTH 7.
DATA: lv_str TYPE string .
DATA: phdat TYPE sy-datum.
phdat = sy-datum.
lv_where = phdat(6).
lv_year = phdat+2(2) .
lv_month = phdat+4(2).
CONCATENATE lv_where '%' INTO lv_where .
SELECT COUNT(*)
FROM zmmt005h
WHERE phdat LIKE lv_where.
gv_zxh = sy-dbcnt .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT34
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_print34 .
IF sy-ucomm EQ 'PRINT3' OR sy-ucomm EQ 'PRINT4' OR sy-ucomm EQ 'PRINT6' OR sy-ucomm EQ 'PRINT7' .
IF s_werks-low EQ '1000'.
IF sy-ucomm EQ 'PRINT3' .
IF r_1 EQ 'X' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005IN'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
IF r_2 EQ 'X' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
ENDIF .
IF sy-ucomm EQ 'PRINT4' .
IF r_1 EQ 'X'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005AIN'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
IF r_2 EQ 'X'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005A'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
ENDIF .
IF sy-ucomm EQ 'PRINT6' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005F'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
IF sy-ucomm EQ 'PRINT7' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005G'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
ELSE .
IF sy-ucomm EQ 'PRINT3' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005D'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
IF sy-ucomm EQ 'PRINT4' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMMF005AD'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
ENDIF .
ENDIF .
gw_options-tdnewid = 'X'. "New Spool
gw_options-tdimmed = 'X'.
gw_options-tddelete = 'X'. "Delete Spool After Print
gw_options-tdfinal = 'X'.
gw_options-tdiexit = 'X'. "Exit after printing in print preview
gw_options-tddest = 'LP01'.
gw_control-no_dialog = 'X'.
gw_control-preview = 'X'.
gw_control-no_open = 'X'.
gw_control-no_close = 'X'.
CALL FUNCTION 'SSF_OPEN' "打开打印窗口
EXPORTING
control_parameters = gw_control
output_options = gw_options
user_settings = ''
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
DATA: lt_out LIKE TABLE OF gs_out .
DATA: ls_out LIKE gs_out .
DATA: lt_out2 LIKE TABLE OF gs_out .
lt_out = gt_out .
DELETE lt_out WHERE mark <> 'X'.
" 数据传给smartforms
lt_out2 = lt_out .
" 每个预留保存打印一次
SORT lt_out BY rsnum .
DELETE ADJACENT DUPLICATES FROM lt_out COMPARING rsnum .
LOOP AT lt_out INTO ls_out .
" 取得打印次数并保存
gs_zmmt001q-zcxm = 'ZMMF005' .
gs_zmmt001q-zdh = ls_out-rsnum .
gs_zmmt001q-zprt_cnt = ls_out-zprt_cnt + 1 .
* MODIFY gt_out from gs_out .
MODIFY zmmt001q FROM gs_zmmt001q .
ENDLOOP .
"单据编号
PERFORM get_xh . " 得到本月最大序号
DATA: lv_djbh TYPE string .
DATA: gs_zmmt005h LIKE zmmt005h .
DATA:lv_y TYPE c LENGTH 2.
DATA:lv_m TYPE c LENGTH 2 .
lv_y = sy-datum+2(2) .
lv_m = sy-datum+4(2) .
"取打单据打印编号
IF r_1 EQ 'X'.
"本月最大序号并加1
gv_zxh = gv_zxh + 1 .
gs_zmmt005h-zxh = gv_zxh .
gs_zmmt005h-phdat = sy-datum .
MODIFY zmmt005h FROM gs_zmmt005h .
CONCATENATE 'ST' lv_y lv_m gv_zxh INTO lv_djbh .
ELSE .
lv_djbh = '计划外' .
ENDIF .
CALL FUNCTION g_fm_name
EXPORTING
control_parameters = gw_control
output_options = gw_options
* is_bkpf = gs_bkpf
* IMPORTING
* job_output_info = l_end
* job_output_options = l_start
iv_djbh = lv_djbh
TABLES
it_out = lt_out2
* it_bkpf = lt_bkpf
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CLEAR: lt_out2[] .
CALL FUNCTION 'SSF_CLOSE'
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
ENDIF.
ENDFORM.