*&---------------------------------------------------------------------*
*& Report ZCOR005
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsdr010.
TABLES:sscrfields, vbak,vbap,vbkd.
DATA: gt_fieldcat TYPE lvc_t_fcat,
gt_fieldcat2 TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat.
DATA: gs_layout TYPE lvc_s_layo,
gs_variant LIKE disvariant,
gs_stbl TYPE lvc_s_stbl,
gs_variant2 LIKE disvariant.
DATA: g_grid1 TYPE REF TO cl_gui_alv_grid."GUI控制
DATA:gs_events TYPE slis_alv_event,
gt_events TYPE slis_t_event.
DATA: grid_title TYPE lvc_title.
TYPES:BEGIN OF out_ty,
vkorg TYPE vbak-vkorg,
vtext_1 TYPE tvkot-vtext,
vtweg TYPE vbak-vtweg,
vtext_2 TYPE tvtwt-vtext,
spart TYPE vbak-spart,
kunnr TYPE vbak-kunnr,
name1_1 TYPE kna1-name1,
vtext_3 TYPE tvk2t-vtext,
name1_2 TYPE lfa1-name1,
bstkd TYPE vbkd-bstkd,
auart TYPE vbak-auart,
bezei TYPE tvakt-bezei,
zshzt TYPE char3,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
pstyv TYPE vbap-pstyv,
vtext_4 TYPE t179t-vtext,
werks TYPE vbap-werks,
zggxh TYPE mara-zggxh,
matnr TYPE vbap-matnr,
maktx TYPE makt-maktx,
kdmat TYPE vbap-kdmat,
arktx TYPE vbap-arktx,
matkl TYPE vbap-matkl,
wgbez TYPE t023t-wgbez,
kwmeng TYPE vbap-kwmeng,
zwcjjhsl TYPE vbap-kwmeng,
dlvqty_bu TYPE vbep-dlvqty_bu,
meins TYPE vbap-meins,
netwr TYPE vbap-netwr,
kpein TYPE vbap-kpein,
zhsdj TYPE vbap-netwr,
zhszje TYPE vbap-netwr,
zhswjzje TYPE vbap-netwr,
zwswjzje TYPE vbap-netwr,
* netwr TYPE char30,
* zhsdj TYPE char30,
* zhszje TYPE char30,
waerk TYPE vbak-waerk,
stcur TYPE vbkd-stcur,
kursk TYPE vbkd-kursk, "ADD BY 2023/6/6
zterm TYPE vbkd-zterm,
vtext_5 TYPE tvzbt-vtext,
req_dlvdate TYPE vbep-req_dlvdate,
zjhzt TYPE char10,
ettyp TYPE vbep-ettyp,
zsczlwb TYPE char200,
zhbz TYPE char200,
abgru TYPE vbap-abgru,
vgbel TYPE vbap-vgbel,
vgpos TYPE vbap-vgpos,
erdat TYPE vbap-erdat,
erzet TYPE vbap-erzet,
ernam TYPE vbap-ernam,
zdbkc TYPE t001l-lgort, "仓库
zdbkc2 TYPE t001l-lgobe, "仓库
zcgddsl TYPE ekpo-menge, "采购订单数量
zycjdbdsl TYPE ekpo-menge, "采购订单数量
sel TYPE char1,
icon(04),
message(200),
lgort TYPE vbap-lgort,
adrnr TYPE lfa1-adrnr,
remark TYPE adrt-remark,
vrkme TYPE vbap-vrkme,
lgobe TYPE t001l-lgobe,
lfimg TYPE lips-lfimg,
zdybs TYPE char6, "打印标识
clr TYPE char4, "可以控制行颜色
bedae TYPE vbap-bedae, "需求类型
edatu TYPE vbep-edatu, "首个日期
zdh TYPE char10,
prodh TYPE vbap-prodh, "商显事业部
zbcdbsl TYPE vbap-kwmeng, "本次调拨数量
objnr TYPE jcds-objnr,
usnam TYPE jcds-usnam,
bwbdj TYPE vbap-netwr, "本位币单价
bwbzje TYPE vbap-netwr, "本位币总金额
vbtyp TYPE tvak-vbtyp, "
znetwr TYPE c LENGTH 12,
zzhsdj TYPE c LENGTH 12,
zzhszje TYPE c LENGTH 12,
zzhswjzje TYPE c LENGTH 12,
zzwswjzje TYPE c LENGTH 12,
zbwbdj TYPE c LENGTH 12,
zbwbzje TYPE c LENGTH 12,
*--------------------------------------------------------------------* ADD BY 2023/6/16
bwbbhszje TYPE vbap-netwr, "本位币不含税总金额
VKBUR TYPE VBAK-VKBUR, "销售办公室
"End insert.
END OF out_ty.
DATA g_function_key TYPE smp_dyntxt.
DATA:gt_out TYPE TABLE OF out_ty WITH HEADER LINE.
DATA gs_out LIKE LINE OF gt_out.
DATA:gt_out_xh TYPE TABLE OF out_ty .
DATA:gt_out_s TYPE TABLE OF out_ty .
DATA:BEGIN OF gt_out_fz OCCURS 0,
objek TYPE ausp-objek,
END OF gt_out_fz.
DATA:BEGIN OF gs_agr_users,
uname TYPE agr_users-uname,
END OF gs_agr_users.
DATA: gt_agr_users LIKE TABLE OF gs_agr_users.
DATA:gv_msg TYPE bapi_msg.
DATA:gr_grid TYPE REF TO cl_gui_alv_grid.
DATA:gt_ztsd004 TYPE TABLE OF ztsd004,
gs_ztsd004 LIKE LINE OF gt_ztsd004.
CONSTANTS:c_green LIKE dv70a-statusicon VALUE '@08@',
c_yellow LIKE dv70a-statusicon VALUE '@09@',
c_red LIKE dv70a-statusicon VALUE '@0A@'.
*BDC定义
DATA bdcdata TYPE STANDARD TABLE OF bdcdata WITH HEADER LINE.
DATA messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA bdc_mode TYPE c LENGTH 1 VALUE 'N'.
DATA nodata TYPE c LENGTH 1 VALUE ''.
DEFINE app_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-coltext = &2.
gs_fieldcat-edit_mask = &3.
gs_fieldcat-no_zero = &4.
gs_fieldcat-ref_table = &5.
gs_fieldcat-ref_field = &6.
gs_fieldcat-outputlen = &7.
*负号前置
IF gs_fieldcat-fieldname = 'NETWR' OR gs_fieldcat-fieldname = 'ZHSDJ' OR gs_fieldcat-fieldname = 'ZHSZJE' OR gs_fieldcat-fieldname = 'ZHSWJZJE' OR gs_fieldcat-fieldname = 'ZWSWJZJE' .
gs_fieldcat-edit_mask = '==SIGN'.
ELSEIF gs_fieldcat-fieldname = 'ZCGDDSL'.
gs_fieldcat-edit = 'X'."可编辑
gs_fieldcat-ref_field = 'ZCGDDSL'.
gs_fieldcat-ref_table = 'ZSSD010A'.
ELSEIF gs_fieldcat-fieldname = 'ZDBKC'.
gs_fieldcat-edit = 'X'."可编辑
gs_fieldcat-f4availabl = 'X'.
ELSEIF gs_fieldcat-fieldname = 'SEL'.
gs_fieldcat-checkbox = 'X'."复选框
gs_fieldcat-edit = 'X'."可编辑
ENDIF.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR:gs_fieldcat.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* lcl_event_receiver的类定义:
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_f4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells.
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_f4.
* 供应商供货信息基础表的情况
IF e_fieldname = 'ZDBKC'.
* 窗口时间参数的自定义f4检索帮助
PERFORM f4_help_lgort USING e_fieldname
es_row_no.
* ELSEIF e_fieldname = 'LIFNR'.
** 窗口时间参数的自定义f4检索帮助
* PERFORM f4_help_LIFNR USING e_fieldname
* es_row_no.
ENDIF.
* 设置后,alv稳定刷新
PERFORM refresh_table_alv.
ENDMETHOD. "HANDLE_F4
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE TEXT-005.
SELECT-OPTIONS s_vkorg FOR vbak-vkorg OBLIGATORY.
SELECT-OPTIONS s_vtweg FOR vbak-vtweg DEFAULT '10' TO '20'.
SELECT-OPTIONS s_spart FOR vbak-spart DEFAULT '00'.
SELECT-OPTIONS s_prodh FOR vbap-prodh.
SELECT-OPTIONS s_werks FOR vbap-werks.
SELECT-OPTIONS s_kunnr FOR vbak-kunnr.
SELECT-OPTIONS s_matnr FOR vbap-matnr.
SELECT-OPTIONS s_kdmat FOR vbap-kdmat.
SELECT-OPTIONS s_bstkd FOR vbkd-bstkd.
SELECT-OPTIONS s_auart FOR vbak-auart.
SELECT-OPTIONS s_vbeln FOR vbak-vbeln.
SELECT-OPTIONS s_lfgsa FOR vbap-lfgsa.
SELECT-OPTIONS s_ernam FOR vbak-ernam.
SELECT-OPTIONS s_erdat FOR vbap-erdat.
PARAMETERS p_spzt TYPE char3 AS LISTBOX VISIBLE LENGTH 8.
* PARAMETERS p_1 TYPE c AS CHECKBOX DEFAULT ''.
SELECTION-SCREEN END OF BLOCK blk02.
DATA:p_1 TYPE c VALUE 'X'.
INITIALIZATION.
DATA: lv_firstday TYPE sy-datum.
DATA: lv_lastday TYPE sy-datum.
lv_firstday = sy-datum.
lv_firstday+6(2) = '01'.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = lv_firstday
IMPORTING
last_day_of_month = lv_lastday
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
s_erdat-low = lv_firstday.
s_erdat-high = lv_lastday.
s_erdat-sign = 'I'.
s_erdat-option = 'BT'.
APPEND s_erdat.
AT SELECTION-SCREEN OUTPUT.
DATA:lt_list TYPE vrm_values.
lt_list = VALUE #( ( key = '已审批' text = '已审批' )
( key = '未审批' text = '未审批' )
( key = '' text = '' ) ).
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'P_SPZT' "屏幕上绑定的下拉框
values = lt_list.
START-OF-SELECTION.
PERFORM frm_check_object."权限
PERFORM frm_authority_check.
PERFORM frm_get_data.
PERFORM frm_get_alv.
*&---------------------------------------------------------------------*
*& Form frm_get_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_alv .
DATA:lv_monat TYPE bkpf-monat.
DATA:lv_feild TYPE char5.
DATA:lv_text TYPE char3.
* GS_LAYOUT-ZEBRA = 'X'.
* gs_layout-box_fname = 'SEL'.
gs_layout-cwidth_opt = 'X'.
gs_layout-no_toolbar = 'X'."标准按钮隐藏
gs_layout-info_fname = 'CLR'. "行颜色代码的字段
PERFORM get_fieldcat .
DATA: gs_grid_set TYPE lvc_s_glay."网格设置
CLEAR: gs_events,gt_events." lt_event_exit[].
gs_grid_set-edt_cll_cb = 'X'."网格设置:退出可编辑单元格时回调,可以做的一个比较即时的回调,之前在按钮FORM中用屏刷内进行回调需要先触发刷新动作
gs_events-name = 'CALLER_EXIT'.
gs_events-form = 'FM_BUTTON'.
APPEND gs_events TO gt_events.CLEAR gs_events.
gs_events-name = slis_ev_data_changed.
gs_events-form = 'USER_DATA_CHANGED'."同步更新
APPEND gs_events TO gt_events.CLEAR gs_events.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'STATUS_SET'
i_callback_user_command = 'USER_COMMAND'
* i_callback_top_of_page = 'TOP_OF_PAGE'
i_grid_title = grid_title
* I_GRID_SETTINGS = GS_SETTING
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
i_save = 'A'
* I_DEFAULT = 'X'
* IS_VARIANT = GS_VARIANT
it_events = gt_events
i_grid_settings = gs_grid_set
TABLES
t_outtab = gt_out[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
FORM status_set USING rt_extab TYPE slis_t_extab.
"设置ALV状态栏按钮的隐藏与显示
DATA: lt_extab TYPE TABLE OF sy-ucomm WITH HEADER LINE.
* 在报表输出的ALV工具栏,如果t-code是ZSD002,显示“审批”按钮,具有价格审批权限;
IF sy-tcode <> 'ZSD011' . "
REFRESH: lt_extab.
APPEND 'APPRO' TO lt_extab.
CLEAR: lt_extab.
APPEND 'DELE' TO lt_extab.
CLEAR: lt_extab.
ELSEIF sy-tcode <> 'ZSD010' .
APPEND 'ZME21N' TO lt_extab.
CLEAR: lt_extab.
ENDIF.
"设置ALV状态栏
SET PF-STATUS 'STATUS_1000' EXCLUDING lt_extab. "排除掉内表的按钮
ENDFORM.
FORM user_command USING e_ucomm TYPE sy-ucomm
re_selfield TYPE slis_selfield.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = gr_grid.
CALL METHOD gr_grid->check_changed_data.
CASE e_ucomm.
WHEN '&IC1'.
PERFORM save_data USING e_ucomm re_selfield.
WHEN 'PRINT'.
PERFORM frm_print_data.
WHEN 'PRINT2'.
PERFORM frm_print_data2.
WHEN 'APPRO'."审批通过
PERFORM frm_appro_zt.
WHEN 'DELE'."审批撤销
PERFORM frm_cancel_zt.
WHEN 'ZME21N'.
PERFORM get_po_create1 .
*全选
WHEN 'ZALL'.
LOOP AT gt_out INTO gs_out.
gs_out-sel = 'X'.
MODIFY gt_out FROM gs_out.
ENDLOOP.
re_selfield-refresh = 'X'.
*取消选择
WHEN 'ZSAL'.
LOOP AT gt_out INTO gs_out.
gs_out-sel = ''.
MODIFY gt_out FROM gs_out.
ENDLOOP.
re_selfield-refresh = 'X'.
ENDCASE.
ENDFORM.
FORM save_data USING e_ucomm TYPE sy-ucomm
re_selfield TYPE slis_selfield..
IF re_selfield-fieldname = 'VBELN'.
READ TABLE gt_out ASSIGNING FIELD-SYMBOL(<gs_out_t>) INDEX re_selfield-tabindex.
SET PARAMETER ID: 'AUN' FIELD <gs_out_t>-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
ENDFORM.
*** INCLUDE ZMMP014_F01
*** INCLUDE ZMMP014_F01
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
"查询基本数据
DATA: lv_tdid TYPE thead-tdid,
lv_tdname TYPE thead-tdname,
lv_tdobject TYPE thead-tdobject.
DATA :lt_line TYPE TABLE OF tline.
DATA lv_flag TYPE c.
DATA:gv_where TYPE string.
CALL FUNCTION 'ZFM_CHECK_ENH'
EXPORTING
zenh_name = 'ZSD010_PRODH'
IMPORTING
flag = lv_flag.
CLEAR gv_where.
IF lv_flag = 'X'.
gv_where = | EXISTS ( SELECT vtext,prodh FROM ztsd010 WHERE vtext = t179t~vtext AND prodh = t179t~prodh AND bname = @sy-uname ) |.
ENDIF.
SELECT
vbak~vkorg,
tvkot~vtext AS vtext_1,
vbak~vtweg,
tvtwt~vtext AS vtext_2,
vbak~spart,
vbak~kunnr,
kna1~name1 AS name1_1,
* TVK2T~VTEXT AS VTEXT_3,
lfa1~name1 AS name1_2,
vbkd~bstkd,
vbak~auart,
tvakt~bezei,
vbap~vbeln,
vbap~posnr,
vbap~pstyv,
t179t~vtext AS vtext_4,
vbap~werks,
mara~zggxh,
vbap~matnr,
makt~maktx,
vbap~kdmat,
vbap~arktx,
vbap~matkl,
t023t~wgbez,
vbap~kwmeng,
* vbep~dlvqty_bu AS dlvqty_bu2,
vbap~meins,
vbap~netwr,
vbap~kpein,
vbap~mwsbp,
vbak~waerk,
vbkd~stcur,
vbkd~zterm,
tvzbt~vtext AS vtext_5,
* VBEP~REQ_DLVDATE,
* VBEP~ETTYP,
vbap~abgru,
vbap~vgbel,
vbap~vgpos,
vbap~erdat,
vbap~erzet,
vbap~ernam,
vbap~lgort,
vbap~vrkme,
lfa1~adrnr,
adrt~remark,
t001l~lgobe,
vbap~lfgsa,
vbak~knumv,
vbap~bedae,
VBAK~VKBUR, " ADD BY 2023/10/19
tvak~vbtyp, "ADD BY 2023/6/7
* vbap~cmtd_deliv_date
vbap~prodh
INTO TABLE @DATA(lt_vbak)
FROM vbak LEFT JOIN vbap ON vbap~vbeln = vbak~vbeln
LEFT JOIN tvkot ON tvkot~vkorg = vbak~vkorg AND tvkot~spras = 1
LEFT JOIN tvtwt ON tvtwt~vtweg = vbak~vtweg AND tvtwt~spras = 1
LEFT JOIN kna1 ON kna1~kunnr = vbak~kunnr
LEFT JOIN vbpa ON vbpa~vbeln = vbak~vbeln AND vbpa~posnr = '' AND vbpa~parvw = 'ZP'
LEFT JOIN vbkd ON vbkd~vbeln = vbak~vbeln AND vbkd~posnr = ''
LEFT JOIN lfa1 ON lfa1~lifnr = vbpa~lifnr
LEFT JOIN tvakt ON tvakt~auart = vbak~auart AND tvakt~spras = 1
LEFT JOIN t179t ON t179t~prodh = vbap~prodh AND t179t~spras = 1
LEFT JOIN mara ON mara~matnr = vbap~matnr
LEFT JOIN makt ON makt~matnr = vbap~matnr AND makt~spras = 1
LEFT JOIN t023t ON t023t~matkl = vbap~matkl AND t023t~spras = 1
LEFT JOIN tvzbt ON tvzbt~zterm = vbkd~zterm AND tvzbt~spras = 1
LEFT JOIN adrt ON adrt~addrnumber = kna1~adrnr AND adrt~persnumber = ''
LEFT JOIN t001l ON t001l~lgort = vbap~lgort
LEFT JOIN tvak ON vbak~auart = tvak~auart
WHERE vbak~vkorg IN @s_vkorg
AND vbak~vtweg IN @s_vtweg
AND vbak~spart IN @s_spart
AND vbap~prodh IN @s_prodh
AND vbap~werks IN @s_werks
AND vbak~kunnr IN @s_kunnr
AND vbap~matnr IN @s_matnr
AND vbap~kdmat IN @s_kdmat
AND vbkd~bstkd IN @s_bstkd
AND vbak~auart IN @s_auart
AND vbak~vbeln IN @s_vbeln
AND vbap~lfgsa IN @s_lfgsa
AND vbak~ernam IN @s_ernam
AND vbap~erdat IN @s_erdat
AND (gv_where)
.
LOOP AT LT_VBAK[] INTO DATA(LS_VKBUR).
AUTHORITY-CHECK OBJECT 'ZVKBUR'
ID 'ACTVT' FIELD '03'
ID 'ZVKBUR' FIELD LS_VKBUR-VKBUR.
IF sy-subrc <> 0.
DELETE LT_VBAK.
ENDIF.
ENDLOOP.
IF lt_vbak[] IS NOT INITIAL .
DATA(lt_vbakb) = lt_vbak[].
SORT lt_vbakb BY vbeln posnr.
"汇率
SELECT
kursk ,
vbeln ,
posnr
FROM vbkd
INTO TABLE @DATA(lt_vbkd)
FOR ALL ENTRIES IN @lt_vbak
WHERE posnr = @lt_vbak-posnr
AND vbeln = @lt_vbak-vbeln.
* IF lt_vbkd[] IS INITIAL.
SELECT
kursk ,
vbeln ,
posnr
FROM vbkd
INTO TABLE @DATA(lt_vbkd2)
FOR ALL ENTRIES IN @lt_vbak
WHERE posnr = ''
AND vbeln = @lt_vbak-vbeln.
* ENDIF.
SORT lt_vbkd BY vbeln posnr.
SORT lt_vbkd2 BY vbeln posnr.
"查询计划数据
SELECT
vbeln,
posnr,
dlvqty_bu,
etenr,
ettyp,
req_dlvdate,
edatu
INTO TABLE @DATA(lt_vbep)
FROM vbep
FOR ALL ENTRIES IN @lt_vbakb
WHERE vbeln = @lt_vbakb-vbeln
AND posnr = @lt_vbakb-posnr
.
"客户集团
SELECT
kunnr,
vtext
INTO TABLE @DATA(lt_tvk2t)
FROM kna1 LEFT JOIN tvk2t ON tvk2t~katr2 = kna1~katr2 AND tvk2t~spras = 1
FOR ALL ENTRIES IN @lt_vbak
WHERE kunnr = @lt_vbak-kunnr
AND kna1~katr2 <> 'G0'.
SELECT knumv,kbetr,kpein,prcd_elements~kposn
INTO TABLE @DATA(lt_prcd_elements)
FROM prcd_elements
FOR ALL ENTRIES IN @lt_vbak
WHERE kposn = @lt_vbak-posnr
AND knumv = @lt_vbak-knumv
AND kschl = 'ZPRA'.
LOOP AT lt_vbak ASSIGNING FIELD-SYMBOL(<ls_vbak>).
AUTHORITY-CHECK OBJECT 'ZSD_MATKL'
ID 'ACTVT' FIELD '03'
ID 'MATKL' FIELD <ls_vbak>-matkl.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
MOVE-CORRESPONDING <ls_vbak> TO gt_out.
*--------------------------------------------------------------------* ADD BY 2023/6/6 汇率
READ TABLE lt_vbkd INTO DATA(ls_vbkd) WITH KEY vbeln = <ls_vbak>-vbeln
posnr = <ls_vbak>-posnr
BINARY SEARCH.
IF sy-subrc = 0.
gt_out-kursk = ls_vbkd-kursk.
ENDIF.
IF gt_out-kursk IS INITIAL.
READ TABLE lt_vbkd2 INTO DATA(ls_vbkd2) WITH KEY vbeln = <ls_vbak>-vbeln
posnr = ''
BINARY SEARCH.
IF sy-subrc = 0.
gt_out-kursk = ls_vbkd2-kursk.
ENDIF.
ENDIF.
*--------------------------------------------------------------------*
"读取销售订单状态
SELECT SINGLE stat INTO @DATA(lv_stat) FROM vbak LEFT JOIN jest ON jest~objnr = vbak~objnr WHERE vbeln = @gt_out-vbeln AND jest~inact = '' AND jest~stat = 'E0002'.
IF sy-subrc = 0.
gt_out-zshzt = '已审批'.
ELSE.
gt_out-zshzt = '未审批'.
ENDIF.
SELECT SINGLE stsma INTO @DATA(lv_stsma) FROM tvak WHERE auart = @gt_out-auart.
IF lv_stsma IS INITIAL.
gt_out-zshzt = ''.
ENDIF.
IF p_spzt IS NOT INITIAL AND gt_out-zshzt <> p_spzt.
CONTINUE.
ENDIF.
READ TABLE lt_tvk2t ASSIGNING FIELD-SYMBOL(<ls_tvk2t>) WITH KEY kunnr = <ls_vbak>-kunnr.
IF sy-subrc = 0.
gt_out-vtext_3 = <ls_tvk2t>-vtext.
ENDIF.
gt_out-dlvqty_bu = REDUCE dlvqty( INIT sum TYPE dlvqty"定义求和的字段SUM类型QUAN,名字随便
FOR ls_vbep IN lt_vbep "创建一个工作区ls_wa对应内表
WHERE ( vbeln = <ls_vbak>-vbeln AND posnr = <ls_vbak>-posnr ) "汇总如果有条件,可以添加汇总条件
NEXT sum = sum + ls_vbep-dlvqty_bu )."把值和工作区wa取的值相加
gt_out-zwcjjhsl = gt_out-kwmeng - gt_out-dlvqty_bu.
* GT_OUT-DLVQTY_BU = LV_DLVQTY_BU.
IF <ls_vbak>-kwmeng IS NOT INITIAL .
gt_out-zhsdj = ( <ls_vbak>-netwr + <ls_vbak>-mwsbp ) / <ls_vbak>-kwmeng.
gt_out-bwbdj = gt_out-zhsdj * gt_out-kursk. "ADD BY 2023/6/6 本位币单价
* gt_out-netwr = <ls_vbak>-netwr / <ls_vbak>-kwmeng.
ELSE.
* gt_out-netwr = 0.
ENDIF.
READ TABLE lt_prcd_elements ASSIGNING FIELD-SYMBOL(<ls_prcd_elements>) WITH KEY kposn = <ls_vbak>-posnr knumv = <ls_vbak>-knumv.
IF sy-subrc = 0.
IF <ls_prcd_elements>-kpein IS NOT INITIAL.
gt_out-netwr = <ls_prcd_elements>-kbetr / <ls_prcd_elements>-kpein.
ENDIF.
ENDIF.
gt_out-zhszje = <ls_vbak>-netwr + <ls_vbak>-mwsbp.
gt_out-bwbzje = gt_out-zhszje * gt_out-kursk. "ADD BY 2023/6/6 本位币总金额
READ TABLE lt_vbep ASSIGNING FIELD-SYMBOL(<ls_vbep>) WITH KEY vbeln = <ls_vbak>-vbeln posnr = <ls_vbak>-posnr.
IF sy-subrc = 0.
gt_out-req_dlvdate = <ls_vbep>-req_dlvdate.
gt_out-edatu = <ls_vbep>-edatu.
ENDIF.
CASE <ls_vbak>-lfgsa.
WHEN ''.
gt_out-zjhzt = '无关'.
WHEN 'A'.
gt_out-zjhzt = '尚未处理'.
WHEN 'B'.
gt_out-zjhzt = '部分处理'.
WHEN 'C'.
gt_out-zjhzt = '已完全处理'.
ENDCASE.
DATA(lt_vbep_sort) = lt_vbep[].
DELETE lt_vbep_sort WHERE vbeln <> <ls_vbak>-vbeln .
DELETE lt_vbep_sort WHERE posnr <> <ls_vbak>-posnr .
SORT lt_vbep_sort BY etenr DESCENDING.
READ TABLE lt_vbep_sort ASSIGNING FIELD-SYMBOL(<ls_vbep_sort>) INDEX 1.
IF sy-subrc = 0.
gt_out-ettyp = <ls_vbep_sort>-ettyp.
ENDIF.
lv_tdid = 'ZI01'.
lv_tdname = <ls_vbak>-vbeln && <ls_vbak>-posnr.
lv_tdobject = 'VBBP'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = lv_tdid
language = sy-langu
name = lv_tdname
object = lv_tdobject
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6.
READ TABLE lt_line ASSIGNING FIELD-SYMBOL(<ls_line>) INDEX 1.
IF sy-subrc = 0.
gt_out-zsczlwb = <ls_line>-tdline.
ENDIF.
CLEAR:lt_line[].
lv_tdid = 'ZI02'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = lv_tdid
language = sy-langu
name = lv_tdname
object = lv_tdobject
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6.
READ TABLE lt_line ASSIGNING FIELD-SYMBOL(<ls_line_1>) INDEX 1.
IF sy-subrc = 0.
gt_out-zhbz = <ls_line_1>-tdline.
ENDIF.
gt_out-zhswjzje = gt_out-zwcjjhsl * ( gt_out-zhsdj / gt_out-kpein ).
gt_out-zwswjzje = gt_out-zwcjjhsl * ( gt_out-netwr / gt_out-kpein ).
gt_out-znetwr = gt_out-netwr .
gt_out-zzhsdj = gt_out-zhsdj .
gt_out-zzhszje = gt_out-zhszje .
gt_out-zzhswjzje = gt_out-zhswjzje.
gt_out-zzwswjzje = gt_out-zwswjzje.
gt_out-zbwbdj = gt_out-bwbdj .
gt_out-zbwbzje = gt_out-bwbzje .
gt_out-bwbbhszje = gt_out-kwmeng * gt_out-netwr * gt_out-kursk.
CLEAR:lt_line[].
APPEND gt_out.
CLEAR gt_out.
ENDLOOP.
SORT gt_out BY vbeln ASCENDING posnr ASCENDING.
* 退货订单的金额加个负号显示
* DATA:lv_netwr TYPE c LENGTH 12,
* lv_zhsdj TYPE c LENGTH 12,
* lv_zhszje TYPE c LENGTH 12,
* lv_zhswjzje TYPE c LENGTH 12,
* lv_zwswjzje TYPE c LENGTH 12,
* lv_bwbdj TYPE c LENGTH 12,
* lv_bwbzje TYPE c LENGTH 12.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs1>) WHERE vbtyp = 'H'.
<fs1>-znetwr = 0 - <fs1>-netwr .
<fs1>-zzhsdj = 0 - <fs1>-zhsdj .
<fs1>-zzhszje = 0 - <fs1>-zhszje .
<fs1>-zzhswjzje = 0 - <fs1>-zhswjzje .
<fs1>-zzwswjzje = 0 - <fs1>-zwswjzje .
*--------------------------------------------------------------------* ADD BY 2023/6/6
<fs1>-zbwbdj = 0 - <fs1>-bwbdj.
<fs1>-zbwbzje = 0 - <fs1>-bwbzje.
*--------------------------------------------------------------------*
* lv_netwr = <fs1>-netwr .
* lv_zhsdj = <fs1>-zhsdj .
* lv_zhszje = <fs1>-zhszje .
* lv_zhswjzje = <fs1>-zhswjzje .
* lv_zwswjzje = <fs1>-zwswjzje .
* lv_bwbdj = <fs1>-bwbdj .
* lv_bwbzje = <fs1>-bwbzje .
* "将负号前置 函数
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = <fs1>-znetwr.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = <fs1>-zzhsdj.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = <fs1>-zzhszje.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = <fs1>-zzhswjzje.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = <fs1>-zzwswjzje.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = <fs1>-zbwbdj.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = <fs1>-zbwbzje.
* <fs1>-znetwr = lv_netwr .
* <fs1>-zzhsdj = lv_zhsdj .
* <fs1>-zzhszje = lv_zhszje .
* <fs1>-zzhswjzje = lv_zhswjzje .
* <fs1>-zzwswjzje = lv_zwswjzje .
* <fs1>-zbwbdj = lv_bwbdj .
* <fs1>-zbwbzje = lv_bwbzje .
ENDLOOP.
ENDIF.
IF gt_out[] IS NOT INITIAL.
DATA(lt_sort) = gt_out[].
DATA:BEGIN OF ls_ekkn,
vbeln LIKE vbap-vbeln,
posnr LIKE vbap-posnr,
ebeln LIKE ekkn-ebeln,
ebelp LIKE ekkn-ebelp,
zebelp LIKE lips-vgpos,
END OF ls_ekkn.
DATA: lt_ekkn LIKE TABLE OF ls_ekkn.
SORT lt_sort BY vbeln posnr.
SELECT
b~vbeln,
b~posnr,
a~ebeln,
a~ebelp
FROM ekkn AS a
INNER JOIN @lt_sort AS b
ON a~vbeln = b~vbeln
AND a~vbelp = b~posnr
LEFT JOIN ekko AS c
ON a~ebeln = c~ebeln
WHERE c~bsart = 'Z015'
INTO TABLE @lt_ekkn.
LOOP AT lt_ekkn INTO ls_ekkn.
ls_ekkn-zebelp = ls_ekkn-ebelp. "扩充ebelp到6位
ls_ekkn-zebelp = |{ ls_ekkn-zebelp ALPHA = IN }|.
MODIFY lt_ekkn FROM ls_ekkn.
CLEAR ls_ekkn.
ENDLOOP.
* SORT lt_ekkn BY ebeln zebelp.
* SELECT
* b~vbeln,
* b~posnr,
*
* a~lfimg
* FROM lips AS a
* INNER JOIN @lt_ekkn AS b
* ON a~vgbel = b~ebeln
* AND a~vgpos = b~zebelp
* LEFT JOIN likp AS c
* ON a~vbeln = c~vbeln
* WHERE c~wbstk = 'C'
* INTO TABLE @DATA(lt_lips).
SORT lt_sort BY vbeln posnr.
SELECT
b~vbeln,
b~posnr,
a~wbsta,
a~lfimg
FROM lips AS a
INNER JOIN @lt_sort AS b
ON a~kdauf = b~vbeln AND a~kdpos = b~posnr AND a~matnr = b~matnr
WHERE a~pstyv = 'ZNLN'
* AND a~wbsta = 'C'
INTO TABLE @DATA(lt_lips)
.
SORT lt_lips BY vbeln posnr.
SORT lt_sort BY vbeln posnr.
SELECT
b~vbeln,
b~posnr,
a~menge
FROM ekpo AS a
INNER JOIN @lt_sort AS b
ON a~zkdauf = b~vbeln AND a~zkdpos = b~posnr
INTO TABLE @DATA(lt_ekpo)
.
SORT lt_ekpo BY vbeln posnr.
LOOP AT gt_out.
LOOP AT lt_lips INTO DATA(ls_lips) WHERE vbeln = gt_out-vbeln AND posnr = gt_out-posnr AND wbsta = 'C'.
gt_out-lfimg = gt_out-lfimg + ls_lips-lfimg.
ENDLOOP.
LOOP AT lt_ekpo INTO DATA(ls_ekpo) WHERE vbeln = gt_out-vbeln AND posnr = gt_out-posnr.
gt_out-zycjdbdsl = gt_out-zycjdbdsl + ls_ekpo-menge.
ENDLOOP.
gt_out-zdybs = '未打印'.
LOOP AT lt_lips INTO ls_lips WHERE vbeln = gt_out-vbeln AND posnr = gt_out-posnr.
gt_out-zcgddsl = gt_out-zcgddsl + ls_lips-lfimg.
ENDLOOP.
gt_out-zcgddsl = gt_out-kwmeng - gt_out-zcgddsl.
IF gt_out-zcgddsl < 0.
gt_out-zcgddsl = 0.
ENDIF.
MODIFY gt_out.
ENDLOOP.
IF p_1 = 'X'.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs>).
DATA:lv_vbeln TYPE char8.
DATA:lv_dh TYPE vbeln.
DATA:lv_dh1 TYPE vbeln.
CLEAR lv_vbeln.
lv_vbeln = |{ <fs>-vbeln ALPHA = OUT WIDTH = 8 }|.
CLEAR :lv_dh,lv_dh1.
lv_dh = 'RQ' && lv_vbeln .
SELECT SINGLE vbeln FROM vbak INTO lv_dh1 WHERE vbeln = lv_dh.
IF sy-subrc = 0.
<fs>-zdh = lv_dh1.
ENDIF.
ENDLOOP.
ENDIF.
"单号转换
LOOP AT gt_out INTO gs_out.
gs_out-objnr = 'VB' && gs_out-vbeln && '000000'.
MODIFY gt_out FROM gs_out.
ENDLOOP.
"取审批人
SELECT chind,
objnr,
udate,
utime,
usnam
FROM jcds
INTO TABLE @DATA(lt_jcds)
FOR ALL ENTRIES IN @gt_out
WHERE objnr = @gt_out-objnr.
"ALV内表审批人字段赋值
SORT lt_jcds BY objnr
chind
utime DESCENDING
udate DESCENDING.
LOOP AT gt_out INTO gs_out.
READ TABLE lt_jcds INTO DATA(ls_jcds)
WITH KEY objnr = gs_out-objnr chind = 'U' BINARY SEARCH.
IF sy-subrc = 0.
gs_out-usnam = ls_jcds-usnam.
MODIFY gt_out FROM gs_out.
ENDIF.
ENDLOOP.
"End insert.
FREE:lt_lips,lt_sort,ls_lips,lt_ekpo,ls_ekpo.
ENDIF.
IF sy-tcode = 'ZSD011'.
IF gt_out[] IS NOT INITIAL.
*根据销售订单(VBAK-VBELN)的项目类别(VBAP-PSTYV)找到配置表的审批通过计划行;
SELECT pstyv,
zettyp_t,
zettyp_c
FROM ztsd004
INTO CORRESPONDING FIELDS OF TABLE @gt_ztsd004
FOR ALL ENTRIES IN @gt_out
WHERE pstyv = @gt_out-pstyv.
SORT gt_ztsd004 BY pstyv .
ENDIF.
ENDIF.
SELECT uname
FROM agr_users
INTO TABLE gt_agr_users
WHERE agr_name = 'ZSD_1000_901'
OR agr_name = 'ZSD_2000_901'
OR agr_name = 'ZSD_3000_901'
OR agr_name = 'ZSD_4000_901'
OR agr_name = 'ZSD_6000_901'
OR agr_name = 'ZSD_5000_901'.
DELETE ADJACENT DUPLICATES FROM gt_agr_users COMPARING ALL FIELDS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_fieldcat .
CLEAR:gt_fieldcat[].
app_fieldcat: 'SEL ' '选择框' '' '' '' '' '' .
app_fieldcat: 'ZDYBS ' '打印标识' '' '' '' '' '' .
* IF sy-tcode = 'ZSD011'.
app_fieldcat:'ICON ' '状态' '' '' '' '' '' .
app_fieldcat:'MESSAGE ' '消息' '' '' '' '' '' .
* ENDIF.
IF p_1 = 'X'.
app_fieldcat:'ZDH ' '客户需求号' '' '' '' '' '' .
ENDIF.
app_fieldcat:'VKORG ' '销售组织' '' '' '' '' '' .
app_fieldcat:'VKBUR ' '销售办公室' '' '' '' '' '' .
app_fieldcat:'VTEXT_1 ' '销售组织名称' '' '' '' '' '' .
app_fieldcat:'VTWEG ' '分销渠道' '' '' '' '' '' .
app_fieldcat:'VTEXT_2 ' '分销渠道名称' '' '' '' '' '' .
app_fieldcat:'SPART ' '产品组' '' '' '' '' '' .
app_fieldcat:'KUNNR ' '客户编码' '' 'X' '' '' '' .
app_fieldcat:'NAME1_1 ' '客户名称' '' '' '' '' '' .
app_fieldcat:'VTEXT_3 ' '客户集团' '' '' '' '' '' .
app_fieldcat:'NAME1_2 ' '业务员' '' '' '' '' '' .
app_fieldcat:'BSTKD ' '客户PO号' '' '' '' '' '' .
app_fieldcat:'AUART ' '订单类型' '' '' '' '' '' .
app_fieldcat:'BEZEI ' '订单类型描述' '' '' '' '' '' .
app_fieldcat:'ZSHZT ' '审核状态' '' '' '' '' '' .
app_fieldcat:'USNAM ' '审批人' '' '' '' '' '' .
app_fieldcat:'VBELN ' '销售订单' '' 'X' '' '' '' .
app_fieldcat:'POSNR ' '行项目' '' '' '' '' '' .
app_fieldcat:'PSTYV ' '行项目类别' '' '' '' '' '' .
app_fieldcat:'VTEXT_4 ' '事业部' '' '' '' '' '' .
app_fieldcat:'WERKS ' '交货工厂' '' '' '' '' '' .
app_fieldcat:'ZGGXH ' '规格型号' '' '' '' '' '' .
app_fieldcat:'MATNR ' '物料编码' '' '' '' '' '' .
app_fieldcat:'MAKTX ' '物料描述' '' '' '' '' '' .
app_fieldcat:'KDMAT ' '客户物料编码' '' '' '' '' '' .
app_fieldcat:'ARKTX ' '客户物料描述' '' '' '' '' '' .
app_fieldcat:'MATKL ' '物料组' '' '' '' '' '' .
app_fieldcat:'WGBEZ ' '物料组描述' '' '' '' '' '' .
app_fieldcat:'KWMENG ' '订单数量' '' '' '' '' '' .
app_fieldcat:'ZWCJJHSL ' '未创建交货数量' '' '' '' '' '' .
app_fieldcat:'DLVQTY_BU ' '交货单数量' '' '' '' '' '' .
app_fieldcat:'LFIMG ' '已调拨过账数量' '' '' '' '' '' .
app_fieldcat:'MEINS ' '计量单位' '' '' '' '' '' .
READ TABLE gt_agr_users INTO gs_agr_users WITH KEY uname = sy-uname.
IF sy-subrc NE 0 OR sy-tcode = 'ZSD011'.
app_fieldcat:'NETWR ' '不含税单价' '' '' '' '' '' .
* app_fieldcat:'KPEIN ' '定价单位' '' '' '' '' '' .
app_fieldcat:'ZZHSDJ ' '含税单价' '' '' '' '' '' .
app_fieldcat:'ZZHSZJE ' '含税总金额' '' '' '' '' '' .
* app_fieldcat:'ZZHSWJZJE ' '含税未交总金额' '' '' '' '' '' .
* app_fieldcat:'ZZWSWJZJE ' '未税未交总金额' '' '' '' '' '' .
app_fieldcat:'ZBWBDJ ' '本位币单价' '' '' '' '' '' .
app_fieldcat:'ZBWBZJE ' '本位币总金额' '' '' '' '' '' .
app_fieldcat:'WAERK ' '货币' '' '' '' '' '' .
app_fieldcat:'KURSK ' '汇率' '' '' '' '' '' .
ENDIF.
app_fieldcat:'ZTERM ' '付款条件' '' '' '' '' '' .
app_fieldcat:'VTEXT_5 ' '付款条件描述' '' '' '' '' '' .
app_fieldcat:'REQ_DLVDATE' '计划交货日期' '' '' '' '' '' .
app_fieldcat:'ZJHZT ' '交货状态' '' '' '' '' '' .
app_fieldcat:'ETTYP ' '计划行' '' '' '' '' '' .
app_fieldcat:'ZSCZLWB ' '生产指令文本' '' '' '' '' '' .
app_fieldcat:'ZHBZ ' '行备注' '' '' '' '' '' .
app_fieldcat:'ABGRU ' '拒绝原因' '' '' '' '' '' .
app_fieldcat:'VGBEL ' '参考凭证' '' '' '' '' '' .
app_fieldcat:'VGPOS ' '参考项目' '' '' '' '' '' .
app_fieldcat:'ERDAT ' '创建日期' '' '' '' '' '' .
app_fieldcat:'ERZET ' '创建时间' '' '' '' '' '' .
app_fieldcat:'ERNAM ' '创建者' '' '' '' '' '' .
app_fieldcat:'BWBBHSZJE ' '本位币不含税总金额' '' '' '' '' '' .
IF sy-tcode = 'ZSD010'.
app_fieldcat:'ZDBKC ' '调拨库位' '' '' '' '' '' .
app_fieldcat:'ZDBKC2 ' '调拨库位描述' '' '' '' '' '' .
app_fieldcat:'ZCGDDSL ' '本次调拨数量' '' '' '' '' '' .
app_fieldcat:'ZYCJDBDSL ' '已创建调拨单数量' '' '' '' '' '' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_AUTHORITY_CHECK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_authority_check .
SELECT
*
INTO TABLE @DATA(lt_tvkot) FROM tvkot WHERE vkorg IN @s_vkorg AND spras = 1.
LOOP AT lt_tvkot ASSIGNING FIELD-SYMBOL(<ls_tvk0t>).
AUTHORITY-CHECK OBJECT 'V_VBAK_VKO' ID 'VKORG' FIELD <ls_tvk0t>-vkorg ID 'ACTVT' FIELD '03' .
IF sy-subrc <> 0.
DATA(lv_test) = '没有销售组织' && <ls_tvk0t>-vkorg && '的权限!!!'.
MESSAGE lv_test TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_print_data .
DATA: lw_control TYPE ssfctrlop.
DATA: lw_options TYPE ssfcompop.
DATA: cn_locn(4) TYPE c VALUE 'LOCN',
cn_lojp(4) TYPE c VALUE 'LOJP',
cn_lohk(4) TYPE c VALUE 'LOHK',
cn_flagx TYPE c VALUE 'X'.
DATA: lv_fmnam TYPE rs38l_fnam,
lv_sfnam TYPE tdsfname.
DATA : lw_option TYPE ssfcresop.
DATA: lv_tdid TYPE thead-tdid,
lv_tdname TYPE thead-tdname,
lv_tdobject TYPE thead-tdobject.
DATA :lt_line TYPE TABLE OF tline.
DATA lv_kwmeng TYPE string.
DATA ls_head TYPE zssd010.
DATA ls_user_addr TYPE user_addr.
DATA lt_item TYPE TABLE OF zssd010a WITH HEADER LINE.
DATA: job_output_options TYPE ssfcrescl. "打印结束时返回值
AUTHORITY-CHECK OBJECT 'V_VBAK_AAT'
* ID 'AUART' FIELD
ID 'ACTVT' FIELD '04'.
IF sy-subrc <> 0.
MESSAGE '无生产指令单打印权限!!!' TYPE 'E'.
ENDIF.
IF NOT line_exists( gt_out[ sel = 'X' ] ).
MESSAGE '没有选择可用于打印的数据!!!' TYPE 'E'.
ENDIF.
* LW_CONTROL-NO_DIALOG = CN_FLAGX.
* LW_CONTROL-PREVIEW = CN_FLAGX.
lw_control-langu = sy-langu .
lw_control-no_open = cn_flagx.
lw_control-no_close = cn_flagx.
* IF SY-LANGU = '1'.
* LW_OPTIONS-TDDEST = CN_LOCN.
* ELSEIF SY-LANGU = 'J'.
* LW_OPTIONS-TDDEST = CN_LOJP.
* ELSEIF SY-LANGU = 'E'.
* LW_OPTIONS-TDDEST = CN_LOHK.
* ENDIF.
lv_sfnam = 'ZSF_SD010'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lv_sfnam
IMPORTING
fm_name = lv_fmnam
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'SSF_OPEN' "打开打印窗口
EXPORTING
control_parameters = lw_control
output_options = lw_options
* user_settings = cn_flagx
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
LOOP AT gt_out INTO DATA(ls_out) WHERE sel = 'X' GROUP BY ( vbeln = ls_out-vbeln )
ASCENDING
ASSIGNING FIELD-SYMBOL(<group>).
CLEAR:ls_head,lt_item[],lt_line[].
"抬头数据赋值
READ TABLE gt_out ASSIGNING FIELD-SYMBOL(<ls_out_a>) WITH KEY vbeln = <group>-vbeln.
IF sy-subrc = 0.
SELECT SINGLE vbeln,erdat,erzet INTO @DATA(ls_vbak) FROM vbak WHERE vbeln = @<group>-vbeln.
ls_head-name1 = <ls_out_a>-name1_1.
ls_head-datum = ls_vbak-erdat+0(4) && '-' && ls_vbak-erdat+4(2) && '-' && ls_vbak-erdat+6(2) && ' ' && ls_vbak-erzet+0(2) && ':' && ls_vbak-erzet+2(2) && ':' && ls_vbak-erzet+4(2) .
lv_tdid = 'ZH03'.
lv_tdname = <group>-vbeln.
lv_tdobject = 'VBBK'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = lv_tdid
language = sy-langu
name = lv_tdname
object = lv_tdobject
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6.
READ TABLE lt_line ASSIGNING FIELD-SYMBOL(<ls_line>) INDEX 1.
IF sy-subrc = 0.
ls_head-zbm = <ls_line>-tdline.
ENDIF.
IF ls_head-zbm IS INITIAL.
ls_head-zbm = '市场部'.
ENDIF.
lv_tdid = 'ZH02'.
lv_tdname = <group>-vbeln.
lv_tdobject = 'VBBK'.
CLEAR lt_line[].
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = lv_tdid
language = sy-langu
name = lv_tdname
object = lv_tdobject
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6.
READ TABLE lt_line ASSIGNING FIELD-SYMBOL(<ls_line_a>) INDEX 1.
IF sy-subrc = 0.
ls_head-zzd = <ls_line_a>-tdline.
ENDIF.
IF ls_head-zzd IS INITIAL.
SELECT SINGLE name_last name_first INTO ( ls_user_addr-name_last,ls_user_addr-name_first ) FROM vbak LEFT JOIN user_addr ON vbak~ernam = user_addr~bname WHERE vbeln = <group>-vbeln.
ls_head-zzd = ls_user_addr-name_last && ls_user_addr-name_first.
ENDIF.
ENDIF.
"项目赋值
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<ls_out>) WHERE vbeln = <group>-vbeln.
MOVE-CORRESPONDING <ls_out> TO lt_item.
lt_item-zbz = <ls_out>-zhbz.
lv_kwmeng = <ls_out>-kwmeng.
CONDENSE lv_kwmeng NO-GAPS.
SHIFT lv_kwmeng RIGHT DELETING TRAILING '0'. "除右边无意义0
SHIFT lv_kwmeng RIGHT DELETING TRAILING '.'. "除右边无意义小数点
SHIFT lv_kwmeng LEFT DELETING LEADING space. "去左边空
lt_item-zzldh = |{ <ls_out>-vbeln ALPHA = OUT }| && |{ <ls_out>-posnr ALPHA = OUT }| && <ls_out>-matnr && ' ' && lv_kwmeng && <ls_out>-meins && <ls_out>-zsczlwb .
lt_item-kwmeng = lv_kwmeng.
APPEND lt_item.
CLEAR lt_item.
ENDLOOP.
CALL FUNCTION lv_fmnam
EXPORTING
control_parameters = lw_control
output_options = lw_options
gw_head = ls_head "结构存放表头信息
IMPORTING
job_output_options = lw_option
TABLES
gt_item = lt_item
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDLOOP.
*ssf_close "关闭打印窗口,如点打印预览会关闭此窗口
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
job_output_info = job_output_options
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
IF job_output_options-outputdone = 'X'."点击打印
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<out>) WHERE sel = 'X'.
<out>-zdybs = '已打印'.
<out>-clr = 'C300'.
ENDLOOP.
* LOOP AT gt_out INTO ls_out WHERE sel = 'X' GROUP BY ( vbeln = ls_out-vbeln )
* ASCENDING
* ASSIGNING FIELD-SYMBOL(<group2>).
*
* LOOP AT gt_out WHERE vbeln = <group2>-vbeln.
* gt_out-zdybs = '已打印'.
* gt_out-clr = 'C300'.
*
* MODIFY gt_out.
* ENDLOOP.
* ENDLOOP.
PERFORM refresh_table_alv.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_APPRO_ZT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_appro_zt .
DATA: lv_flag_0 .
IF NOT line_exists( gt_out[ sel = 'X' ] ).
MESSAGE '没有选择可用于处理的数据!!!' TYPE 'E'.
ENDIF.
*整单审批
DATA(lt_out1) = gt_out[].
DELETE lt_out1 WHERE sel <> 'X'.
SORT lt_out1 BY vbeln.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<out>) .
READ TABLE lt_out1 INTO DATA(ls_out1) WITH KEY vbeln = <out>-vbeln BINARY SEARCH.
IF sy-subrc = 0.
<out>-sel = 'X'.
ENDIF.
ENDLOOP.
IF p_1 = 'X'.
DATA(lt_out_c) = gt_out[].
DELETE lt_out_c WHERE sel <> 'X'.
* DELETE lt_out_c WHERE zshzt <> '已审批'.
DELETE lt_out_c WHERE zdh <> ''.
* 、排除订单类型为ZORC与ZORG其余订单类型在ZSD011点击“审批通过“时,
DELETE lt_out_c WHERE auart = 'ZORG'OR auart = 'ZRET' OR auart = 'ZYCR' OR auart = 'ZYDR'.
SORT lt_out_c BY vbeln .
DELETE ADJACENT DUPLICATES FROM lt_out_c COMPARING vbeln.
DATA:gv_num TYPE vbeln.
DATA:gv_msg TYPE char200.
CLEAR gv_num.
CLEAR gv_msg.
LOOP AT lt_out_c INTO DATA(ls_out_c) WHERE prodh <> '00005' .
PERFORM frm_md81_bdc USING ls_out_c CHANGING gv_num gv_msg.
IF gv_msg IS INITIAL .
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<out1>) WHERE vbeln = ls_out_c-vbeln .
<out1>-zdh = gv_num.
<out1>-icon = c_green.
<out1>-message = '创建客户需求成功'.
ENDLOOP.
ELSE.
LOOP AT gt_out ASSIGNING <out1> WHERE vbeln = ls_out_c-vbeln .
<out1>-icon = c_red.
<out1>-message = '创建客户需求失败' && gv_msg.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDIF.
LOOP AT gt_out WHERE sel = 'X' AND icon <> c_red.
CLEAR lv_flag_0.
IF gt_out-zshzt = '未审批'.
* 2.1更新销售订单行项目的计划行类别,根据配置表项目类别计划行审批对应表(字段:审批通过计划行)
* ,更新订单行项目类别的计划行(VBEP-ETTYP);
READ TABLE gt_ztsd004 INTO gs_ztsd004 WITH KEY pstyv = gt_out-pstyv BINARY SEARCH.
IF sy-subrc = 0.
IF gt_out-prodh = '00005' AND gt_out-auart NE 'ZORD' .
PERFORM change_so USING 'CP'.
ELSEIF gt_out-prodh = '00005' AND gt_out-auart = 'ZORD' .
PERFORM change_so USING 'ZN'.
ELSE.
PERFORM change_so USING gs_ztsd004-zettyp_t.
ENDIF.
IF gt_out-icon = c_red.
lv_flag_0 = 'X'.
ENDIF.
ELSE.
gt_out-icon = c_red.
gt_out-message = '无计划行修改权限'.
lv_flag_0 = 'X'.
ENDIF.
CLEAR gs_ztsd004.
*2.2)更新销售订单抬头的对象状态,审批状态更新为已审批(状态HD20);
DATA : lv_objnr TYPE j_objnr.
IF lv_flag_0 <> 'X'.
CLEAR lv_objnr.
lv_objnr = 'VB' && gt_out-vbeln && '000000'.
CALL FUNCTION 'I_CHANGE_STATUS'
EXPORTING
objnr = lv_objnr
estat_inactive = 'E0001'
estat_active = 'E0002'
stsma = 'ZSDHDR'
EXCEPTIONS
cannot_update = 1
OTHERS = 2.
IF sy-subrc <> 0.
gt_out-icon = c_red.
gt_out-message = gt_out-message && 'cannot_update'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
gt_out-zshzt = '已审批'.
gt_out-icon = c_green.
gt_out-message = '审批成功'.
ENDIF.
ENDIF.
ELSE.
gt_out-icon = c_red.
gt_out-message = '不能重复审批'.
ENDIF.
MODIFY gt_out TRANSPORTING zshzt icon message.
CLEAR gt_out.
ENDLOOP.
PERFORM refresh_table_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHANGE_SO
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM change_so USING p_ettyp.
DATA:is_order_header_inx TYPE bapisdh1x,
it_return TYPE TABLE OF bapiret2 WITH HEADER LINE,
it_schedule_lines TYPE TABLE OF bapischdl WITH HEADER LINE,
it_schedule_linesx TYPE TABLE OF bapischdlx WITH HEADER LINE.
CLEAR:it_return[], it_schedule_lines[],it_schedule_linesx[].
is_order_header_inx-updateflag = 'U'. "UPDATE
it_schedule_lines-itm_number = gt_out-posnr.
it_schedule_lines-sched_line = 1.
it_schedule_lines-sched_type = p_ettyp.
APPEND it_schedule_lines.
CLEAR it_schedule_lines.
it_schedule_linesx-updateflag = 'U'.
it_schedule_linesx-itm_number = gt_out-posnr.
it_schedule_linesx-sched_line = 1.
it_schedule_linesx-sched_type = 'X'.
APPEND it_schedule_linesx.
CLEAR it_schedule_linesx.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = gt_out-vbeln
order_header_inx = is_order_header_inx
TABLES
return = it_return
schedule_lines = it_schedule_lines
schedule_linesx = it_schedule_linesx.
DATA:l_message TYPE string.
LOOP AT it_return WHERE type = 'E' OR type = 'A'.
l_message = l_message && it_return-message.
CLEAR it_return.
ENDLOOP.
IF l_message IS INITIAL. " SUCCESS
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
gt_out-icon = c_green.
gt_out-message = '处理成功'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
gt_out-icon = c_red.
gt_out-message = l_message.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_CANCEL_zt
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_cancel_zt .
IF NOT line_exists( gt_out[ sel = 'X' ] ).
MESSAGE '没有选择可用于处理的数据!!!' TYPE 'E'.
ENDIF.
*整单审批
DATA(lt_out1) = gt_out[].
DELETE lt_out1 WHERE sel <> 'X'.
SORT lt_out1 BY vbeln.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<out>) .
READ TABLE lt_out1 INTO DATA(ls_out1) WITH KEY vbeln = <out>-vbeln BINARY SEARCH.
IF sy-subrc = 0.
<out>-sel = 'X'.
ENDIF.
ENDLOOP.
DATA:lv_flag1.
LOOP AT gt_out WHERE sel = 'X'.
CLEAR lv_flag1.
IF gt_out-zshzt = '已审批'.
* 选择ALV订单行,点击“审批撤销”,根据选择行的销售订单,判断是否满足撤销审批的条件:
*根据PLAF-KDAUF = VBAK-VBELN,在表PLAF是否有条目数;
SELECT COUNT(*) FROM plaf WHERE kdauf = gt_out-vbeln.
IF sy-subrc = 0.
lv_flag1 = 'X'.
gt_out-icon = c_red.
gt_out-message = '销售订单已执行计划需求,不能撤销审批'.
ENDIF.
*根据AFPO-KDAUF = VBAK-VBELN,在表AFPO是否有条目数;
SELECT COUNT(*) FROM afpo WHERE kdauf = gt_out-vbeln.
IF sy-subrc = 0.
lv_flag1 = 'X'.
gt_out-icon = c_red.
gt_out-message = '销售订单已执行计划需求,不能撤销审批'.
ENDIF.
*根据LIPS-VGBEL = VBAK-VBELN,在表LIPS是否有条目数;
SELECT COUNT(*) FROM lips WHERE vgbel = gt_out-vbeln.
IF sy-subrc = 0.
lv_flag1 = 'X'.
gt_out-icon = c_red.
gt_out-message = '销售订单已执行计划需求,不能撤销审批'.
ENDIF.
IF lv_flag1 <> 'X'.
*3.1)更新销售订单抬头的对象状态,审批状态更新为待审批(状态HD10);
DATA : lv_objnr TYPE j_objnr.
CLEAR lv_objnr.
lv_objnr = 'VB' && gt_out-vbeln && '000000'.
* lv_objnr = 'TM0000000001VB'.
CALL FUNCTION 'I_CHANGE_STATUS'
EXPORTING
objnr = lv_objnr
estat_inactive = 'E0002'
estat_active = 'E0001'
stsma = 'ZSDHDR'
EXCEPTIONS
cannot_update = 1
OTHERS = 2.
IF sy-subrc <> 0.
lv_flag1 = 'X'.
gt_out-icon = c_red.
gt_out-message = gt_out-message && 'cannot_update'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
gt_out-zshzt = '未审批'.
ENDIF.
*更新销售订单行项目的计划行类别,根据配置表项目类别计划行审批对应表(字段:审批撤销计划行),
*更新订单行项目类别的计划行(VBEP-ETTYP);
IF lv_flag1 <> 'X'.
READ TABLE gt_ztsd004 INTO gs_ztsd004 WITH KEY pstyv = gt_out-pstyv BINARY SEARCH.
IF sy-subrc = 0.
PERFORM change_so USING gs_ztsd004-zettyp_c.
IF gt_out-icon = c_green.
gt_out-message = '审批撤销成功'.
ENDIF.
ELSE.
gt_out-icon = c_red.
gt_out-message = '无计划行修改权限'.
ENDIF.
CLEAR gs_ztsd004.
ENDIF.
ENDIF.
ELSE.
gt_out-icon = c_red.
gt_out-message = '该销售订单未审批,不能执行撤销操作'.
ENDIF.
MODIFY gt_out TRANSPORTING zshzt icon message.
CLEAR gt_out.
ENDLOOP.
PERFORM refresh_table_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_object
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_object .
SELECT vkorg
FROM tvko
INTO TABLE @DATA(lt_1)
WHERE vkorg IN @s_vkorg
.
LOOP AT lt_1 ASSIGNING FIELD-SYMBOL(<1>).
AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
ID 'ACTVT' FIELD '03'
ID 'VKORG' FIELD <1>-vkorg.
IF sy-subrc <> 0.
MESSAGE s001(00) WITH TEXT-e01 DISPLAY LIKE 'W'.LEAVE LIST-PROCESSING.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_print_data2 .
DATA: lw_control TYPE ssfctrlop.
DATA: lw_options TYPE ssfcompop.
DATA: cn_locn(4) TYPE c VALUE 'LOCN',
cn_lojp(4) TYPE c VALUE 'LOJP',
cn_lohk(4) TYPE c VALUE 'LOHK',
cn_flagx TYPE c VALUE 'X'.
DATA: lv_fmnam TYPE rs38l_fnam,
lv_sfnam TYPE tdsfname.
DATA : lw_option TYPE ssfcresop.
DATA: lv_tdid TYPE thead-tdid,
lv_tdname TYPE thead-tdname,
lv_tdobject TYPE thead-tdobject.
DATA :lt_line TYPE TABLE OF tline.
DATA lv_kwmeng TYPE string.
DATA ls_head TYPE zssd010.
DATA ls_item TYPE zssd010a.
DATA ls_user_addr TYPE user_addr.
DATA lt_item TYPE TABLE OF zssd010a WITH HEADER LINE.
DATA: job_output_options TYPE ssfcrescl. "打印结束时返回值
AUTHORITY-CHECK OBJECT 'V_VBAK_AAT'
* ID 'AUART' FIELD
ID 'ACTVT' FIELD '04'.
IF sy-subrc <> 0.
MESSAGE '无打印退货单打印权限!!!' TYPE 'E'.
ENDIF.
IF NOT line_exists( gt_out[ sel = 'X' ] ).
MESSAGE '没有选择可用于打印的数据!!!' TYPE 'E'.
ENDIF.
* LW_CONTROL-NO_DIALOG = CN_FLAGX.
* LW_CONTROL-PREVIEW = CN_FLAGX.
lw_control-langu = sy-langu .
lw_control-no_open = cn_flagx.
lw_control-no_close = cn_flagx.
* IF SY-LANGU = '1'.
* LW_OPTIONS-TDDEST = CN_LOCN.
* ELSEIF SY-LANGU = 'J'.
* LW_OPTIONS-TDDEST = CN_LOJP.
* ELSEIF SY-LANGU = 'E'.
* LW_OPTIONS-TDDEST = CN_LOHK.
* ENDIF.
lv_sfnam = 'ZSF_SD010A'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lv_sfnam
IMPORTING
fm_name = lv_fmnam
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'SSF_OPEN' "打开打印窗口
EXPORTING
control_parameters = lw_control
output_options = lw_options
* user_settings = cn_flagx
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
LOOP AT gt_out INTO DATA(ls_out) WHERE sel = 'X' GROUP BY ( vbeln = ls_out-vbeln )
ASCENDING
ASSIGNING FIELD-SYMBOL(<group>).
CLEAR:ls_head,lt_item[],lt_line[].
"抬头数据赋值
READ TABLE gt_out ASSIGNING FIELD-SYMBOL(<ls_out_a>) WITH KEY vbeln = <group>-vbeln.
IF sy-subrc = 0.
SELECT SINGLE vbeln,erdat,erzet INTO @DATA(ls_vbak) FROM vbak WHERE vbeln = @<group>-vbeln.
*<=>所需字段
MOVE-CORRESPONDING <ls_out_a> TO ls_head.
ls_head-name1 = <ls_out_a>-name1_1.
ls_head-datum = ls_vbak-erdat+0(4) && '-' && ls_vbak-erdat+4(2) && '-' && ls_vbak-erdat+6(2) && ' ' && ls_vbak-erzet+0(2) && ':' && ls_vbak-erzet+2(2) && ':' && ls_vbak-erzet+4(2) .
SELECT SINGLE butxt,street,tel_number,fax_number INTO ( @ls_head-butxt,@ls_head-street,@ls_head-tel_number,@ls_head-fax_number ) FROM ztsd020b
WHERE ztsd020b~vkorg = @<ls_out_a>-vkorg
.
lv_tdid = 'ZH03'.
lv_tdname = <group>-vbeln.
lv_tdobject = 'VBBK'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = lv_tdid
language = sy-langu
name = lv_tdname
object = lv_tdobject
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6.
READ TABLE lt_line ASSIGNING FIELD-SYMBOL(<ls_line>) INDEX 1.
IF sy-subrc = 0.
ls_head-zbm = <ls_line>-tdline.
ENDIF.
IF ls_head-zbm IS INITIAL.
ls_head-zbm = '市场部'.
ENDIF.
lv_tdid = 'ZH02'.
lv_tdname = <group>-vbeln.
lv_tdobject = 'VBBK'.
CLEAR lt_line[].
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = lv_tdid
language = sy-langu
name = lv_tdname
object = lv_tdobject
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6.
READ TABLE lt_line ASSIGNING FIELD-SYMBOL(<ls_line_a>) INDEX 1.
IF sy-subrc = 0.
ls_head-zzd = <ls_line_a>-tdline.
ENDIF.
IF ls_head-zzd IS INITIAL.
SELECT SINGLE name_last name_first INTO ( ls_user_addr-name_last,ls_user_addr-name_first ) FROM vbak LEFT JOIN user_addr ON vbak~ernam = user_addr~bname WHERE vbeln = <group>-vbeln.
ls_head-zzd = ls_user_addr-name_last && ls_user_addr-name_first.
ENDIF.
ENDIF.
"项目赋值
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<ls_out>) WHERE vbeln = <group>-vbeln.
MOVE-CORRESPONDING <ls_out> TO lt_item.
IF ls_head-zxh IS INITIAL.
ls_head-zxh = 1.
ELSEIF ls_head-zxh IS NOT INITIAL.
ls_head-zxh = ls_head-zxh + 1.
ENDIF.
lt_item-zxh = ls_head-zxh.
lt_item-zbz = <ls_out>-zhbz.
lv_kwmeng = <ls_out>-kwmeng.
CONDENSE lv_kwmeng NO-GAPS.
SHIFT lv_kwmeng RIGHT DELETING TRAILING '0'. "除右边无意义0
SHIFT lv_kwmeng RIGHT DELETING TRAILING '.'. "除右边无意义小数点
SHIFT lv_kwmeng LEFT DELETING LEADING space. "去左边空
lt_item-zzldh = |{ <ls_out>-vbeln ALPHA = OUT }| && |{ <ls_out>-posnr ALPHA = OUT }| && <ls_out>-matnr && lv_kwmeng && <ls_out>-meins && <ls_out>-zsczlwb .
lt_item-kwmeng = lv_kwmeng.
APPEND lt_item.
CLEAR lt_item.
ENDLOOP.
CALL FUNCTION lv_fmnam
EXPORTING
control_parameters = lw_control
output_options = lw_options
gw_head = ls_head "结构存放表头信息
IMPORTING
job_output_options = lw_option
TABLES
t_item = lt_item
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDLOOP.
*ssf_close "关闭打印窗口,如点打印预览会关闭此窗口
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
job_output_info = job_output_options
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
IF job_output_options-outputdone = 'X'."点击打印
LOOP AT gt_out INTO ls_out WHERE sel = 'X' GROUP BY ( vbeln = ls_out-vbeln )
ASCENDING
ASSIGNING FIELD-SYMBOL(<group2>).
LOOP AT gt_out WHERE vbeln = <group2>-vbeln.
gt_out-zdybs = '已打印'.
gt_out-clr = 'C300'.
MODIFY gt_out.
ENDLOOP.
ENDLOOP.
PERFORM refresh_table_alv.
ENDIF.
ENDFORM.
FORM refresh_table_alv .
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = gr_grid.
"更新列宽
gs_layout-cwidth_opt = 'X'.
CALL METHOD gr_grid->set_frontend_layout
EXPORTING
is_layout = gs_layout.
"内刷屏
gs_stbl-row = 'X'." 基于行的稳定刷新
gs_stbl-col = 'X'." 基于列稳定刷新
CALL METHOD gr_grid->refresh_table_display
EXPORTING
is_stable = gs_stbl.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_MD81_BDC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_md81_bdc USING ls_data TYPE out_ty CHANGING p_dh p_mess.
CLEAR:bdcdata[].
CLEAR:messtab[].
DATA: lv_n TYPE n LENGTH 2.
lv_n = 1.
PERFORM bdc_dynpro USING 'SAPMV45A' '0105'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RV45A-DWERK'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RV45A-KPRGBZ'
'D'.
* 请求交货日期:默认当前日期
PERFORM bdc_field USING 'RV45A-KETDAT'
sy-datum.
* 需求类型=默认KEV
PERFORM bdc_field USING 'RV45A-BEDAE'
'KEV'.
* 交货工厂=VBAP-WERKS
PERFORM bdc_field USING 'RV45A-DWERK'
ls_data-werks.
PERFORM bdc_dynpro USING 'SAPMV45A' '0421'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'. "'=SICH'.
* 客户独立需求:默认规则RQ+销售订单号(VBAK-VBELN) 例如:RQ31000001
DATA:lv_vbeln TYPE char8.
CLEAR lv_vbeln.
lv_vbeln = |{ ls_data-vbeln ALPHA = OUT WIDTH = 8 }|.
DATA(lv_dh) = 'RQ' && lv_vbeln .
PERFORM bdc_field USING 'VBAK-VBELN'
lv_dh.
CLEAR lv_dh.
PERFORM bdc_field USING 'RV45A-BEDAE'
'KEV'.
PERFORM bdc_field USING 'RV45A-KPRGBZ'
'D'.
PERFORM bdc_field USING 'RV45A-KETDAT'
sy-datum.
PERFORM bdc_field USING 'RV45A-DWERK'
'2000'.
DATA:lv_field1 TYPE char20.
DATA:lv_men TYPE char20 .
DATA(lt_out) = gt_out[].
DELETE lt_out WHERE vbeln <> ls_data-vbeln.
READ TABLE lt_out INTO DATA(lw_out) INDEX 1.
CLEAR lv_field1.
lv_field1 = 'VBAP-WERKS(01)'.
PERFORM bdc_field USING 'BDC_CURSOR'
lv_field1.
lv_field1 = 'RV45A-MABNR(01)'.
* 物料:取销售订单行项目物料VBAP-VBELN+POSNR得VBAP-MATNR
PERFORM bdc_field USING lv_field1
lw_out-matnr.
* 项目:取销售订单行项目VBAP-POSNR
lv_field1 = 'VBAP-POSNR(01)'.
PERFORM bdc_field USING lv_field1
lw_out-posnr.
* 需求类型:VBAP-VBELN+POSNR得VBAP-BEDAE
lv_field1 = 'VBAP-BEDAE(01)'.
PERFORM bdc_field USING lv_field1
'KEV'.
* 订单数量:VBAP-VBELN+POSNR得VBAP-KWMENG
lv_field1 = 'RV45A-KWMENG(01)'.
CLEAR lv_men.
lv_men = lw_out-kwmeng.
CONDENSE lv_men.
PERFORM bdc_field USING lv_field1
lv_men.
* 工厂:VBAP-VBELN+POSNR得VBAP-WERKS
lv_field1 = 'VBAP-WERKS(01)'.
PERFORM bdc_field USING lv_field1
lw_out-werks .
* 库存地点:VBAP-VBELN+POSNR得VBAP-LGORT
lv_field1 = 'VBAP-LGORT(01)'.
PERFORM bdc_field USING lv_field1
lw_out-lgort .
* 首个日期:VBAP-VBELN+POSNR得VBAP-CMTD_DELIV_DATE
lv_field1 = 'RV45A-ETDAT(01)'.
PERFORM bdc_field USING lv_field1
lw_out-edatu.
"删除第一行 后面从第二行开始每次加入一行用插入的方式录入
DELETE lt_out INDEX 1.
LOOP AT lt_out INTO lw_out.
PERFORM bdc_dynpro USING 'SAPMV45A' '0421'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
CLEAR lv_field1.
lv_field1 = 'VBAP-WERKS(02)'.
PERFORM bdc_field USING 'BDC_CURSOR'
lv_field1.
lv_field1 = 'RV45A-MABNR(02)'.
* 物料:取销售订单行项目物料VBAP-VBELN+POSNR得VBAP-MATNR
PERFORM bdc_field USING lv_field1
lw_out-matnr.
* 项目:取销售订单行项目VBAP-POSNR
lv_field1 = 'VBAP-POSNR(02)'.
PERFORM bdc_field USING lv_field1
lw_out-posnr.
* 需求类型:VBAP-VBELN+POSNR得VBAP-BEDAE
lv_field1 = 'VBAP-BEDAE(02)'.
PERFORM bdc_field USING lv_field1
'KEV'.
* 订单数量:VBAP-VBELN+POSNR得VBAP-KWMENG
lv_field1 = 'RV45A-KWMENG(02)'.
CLEAR lv_men.
lv_men = lw_out-kwmeng.
CONDENSE lv_men.
PERFORM bdc_field USING lv_field1
lv_men.
* 工厂:VBAP-VBELN+POSNR得VBAP-WERKS
lv_field1 = 'VBAP-WERKS(02)'.
PERFORM bdc_field USING lv_field1
lw_out-werks .
* 库存地点:VBAP-VBELN+POSNR得VBAP-LGORT
lv_field1 = 'VBAP-LGORT(02)'.
PERFORM bdc_field USING lv_field1
lw_out-lgort .
* 首个日期:VBAP-VBELN+POSNR得VBAP-CMTD_DELIV_DATE
lv_field1 = 'RV45A-ETDAT(02)'.
PERFORM bdc_field USING lv_field1
lw_out-edatu.
"选择第一行 点击插入
PERFORM bdc_dynpro USING 'SAPMV45A' '0421'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=POAN'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBAP-POSNR(01)'.
PERFORM bdc_field USING 'RV45A-VBAP_SELKZ(01)'
'X'.
ENDLOOP.
"保存
PERFORM bdc_dynpro USING 'SAPMV45A' '0421'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
* LOOP AT gt_out WHERE vbeln = ls_data-vbeln.
*
* DATA:lv_field1 TYPE char20.
* CLEAR lv_field1.
* lv_field1 = 'VBAP-WERKS(' && lv_n && ')'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* lv_field1.
* lv_field1 = 'RV45A-MABNR(' && lv_n && ')'.
** 物料:取销售订单行项目物料VBAP-VBELN+POSNR得VBAP-MATNR
* PERFORM bdc_field USING lv_field1
* gt_out-matnr.
** 项目:取销售订单行项目VBAP-POSNR
* lv_field1 = 'VBAP-POSNR(' && lv_n && ')'.
* PERFORM bdc_field USING lv_field1
* gt_out-posnr.
** 需求类型:VBAP-VBELN+POSNR得VBAP-BEDAE
* lv_field1 = 'VBAP-BEDAE(' && lv_n && ')'.
* PERFORM bdc_field USING lv_field1
** gt_out-bedae.
* 'KEV'.
** 订单数量:VBAP-VBELN+POSNR得VBAP-KWMENG
* lv_field1 = 'RV45A-KWMENG(' && lv_n && ')'.
*
* DATA:lv_men TYPE char20 .
* CLEAR lv_men.
* lv_men = gt_out-kwmeng.
* CONDENSE lv_men.
*
* PERFORM bdc_field USING lv_field1
* lv_men.
** 工厂:VBAP-VBELN+POSNR得VBAP-WERKS
* lv_field1 = 'VBAP-WERKS(' && lv_n && ')'.
* PERFORM bdc_field USING lv_field1
* gt_out-werks .
** 库存地点:VBAP-VBELN+POSNR得VBAP-LGORT
* lv_field1 = 'VBAP-LGORT(' && lv_n && ')'.
* PERFORM bdc_field USING lv_field1
* gt_out-lgort .
** 首个日期:VBAP-VBELN+POSNR得VBAP-CMTD_DELIV_DATE
* lv_field1 = 'RV45A-ETDAT(' && lv_n && ')'.
* PERFORM bdc_field USING lv_field1
* gt_out-edatu.
*
* lv_n = lv_n + 1.
*
* ENDLOOP.
* endloop.
CALL TRANSACTION 'MD81' USING bdcdata[] MODE bdc_mode UPDATE 'S' MESSAGES INTO messtab[].
READ TABLE messtab WITH KEY msgtyp = 'S' msgid = 'V1' msgnr = '311'.
IF sy-subrc = 0.
p_dh = messtab-msgv2.
ENDIF.
LOOP AT messtab WHERE msgtyp = 'E' OR msgtyp = 'A' .
p_mess = p_mess && messtab-msgv1.
ENDLOOP.
ENDFORM.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
IF fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_po_create1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_po_create1 .
READ TABLE gt_out INTO gs_out WITH KEY sel = 'X'.
IF sy-subrc NE 0.
MESSAGE e208(00) WITH '请选择需要创建的数据'.
ENDIF.
DATA: lv_message TYPE char50,
lv_zcgddsl TYPE ekpo-menge. "采购订单数量
CLEAR lv_message.
LOOP AT gt_out INTO gs_out WHERE sel = 'X'.
CLEAR:gs_out-icon,gs_out-message.
lv_zcgddsl = gs_out-kwmeng - gs_out-lfimg.
IF gs_out-zcgddsl > gs_out-kwmeng - gs_out-lfimg.
gs_out-icon = c_red.
gs_out-message = '本次调拨数量不能大于' && lv_zcgddsl && '!'.
lv_message = gs_out-message.
ENDIF.
MODIFY gt_out FROM gs_out.
CLEAR gs_out.
ENDLOOP.
IF lv_message IS INITIAL.
DATA: lv_po_item TYPE bapimepoitem-po_item. "项目
DATA: lv_ebeln TYPE ekko-ebeln.
DATA: lv_message2 TYPE char200.
* DATA: ls_extension TYPE bapi_te_mepoheader.
* DATA: ls_extensionx TYPE bapi_te_mepoheaderx.
DATA: ls_extension_i TYPE bapi_te_mepoitem.
DATA: ls_extension_ix TYPE bapi_te_mepoitemx.
DATA: ls_poheader TYPE bapimepoheader,
ls_poheaderx TYPE bapimepoheaderx,
ls_expheader TYPE bapimepoheader,
ls_exppoexpimpheader TYPE bapieikp,
ls_return TYPE bapiret2,
ls_poitem TYPE bapimepoitem,
ls_poitemx TYPE bapimepoitemx,
ls_poschedule TYPE bapimeposchedule,
ls_poschedulex TYPE bapimeposchedulx,
* ls_poaccount TYPE bapimepoaccount,
* ls_poaccountx TYPE bapimepoaccountx,
ls_pocond TYPE bapimepocond,
ls_pocondx TYPE bapimepocondx,
ls_potextitem TYPE bapimepotext,
ls_extensionin TYPE bapiparex,
ls_schedule TYPE bapimeposchedule,
ls_schedulex TYPE bapimeposchedulx.
DATA: lt_return LIKE TABLE OF ls_return,
lt_poitem LIKE TABLE OF ls_poitem,
lt_poitemx LIKE TABLE OF ls_poitemx,
lt_poschedule LIKE TABLE OF ls_poschedule,
lt_poschedulex LIKE TABLE OF ls_poschedulex,
* lt_poaccount LIKE TABLE OF ls_poaccount,
* lt_poaccountx LIKE TABLE OF ls_poaccountx,
lt_pocond LIKE TABLE OF ls_pocond,
lt_pocondx LIKE TABLE OF ls_pocondx,
lt_potextitem LIKE TABLE OF bapimepotext,
lt_extensionin LIKE TABLE OF ls_extensionin,
* lt_extensioninx LIKE TABLE OF ls_extensionin,
lt_schedule LIKE TABLE OF bapimeposchedule,
lt_schedulex LIKE TABLE OF bapimeposchedulx.
CLEAR : ls_poheader,ls_poheaderx,lv_po_item,lt_extensionin,lt_schedule,lt_schedulex.
"抬头信息
ls_poheader-doc_type = 'Z015'. "采购订单类型
* ls_poheader-vendor = gs_excel-vendor. "供应商编码
ls_poheader-suppl_plnt = '2000'. "Z015的供应工厂
ls_poheader-doc_date = sy-datum. "凭证日期
ls_poheader-purch_org = '2000'."采购组织
ls_poheader-pur_group = 'B03'."采购组
ls_poheader-comp_code = '2000'."公司代码
"ls_poheader-currency = gs_excel-currency. "货币码
"抬头信息
ls_poheaderx-doc_type = 'X'."采购订单类型
* ls_poheaderx-vendor = 'X'."供应商编码
ls_poheaderx-suppl_plnt = 'X'."Z015的供应工厂
ls_poheaderx-doc_date = 'X'."凭证日期
ls_poheaderx-purch_org = 'X'."采购组织
ls_poheaderx-pur_group = 'X'."采购组
ls_poheaderx-comp_code = 'X'."公司代码
"ls_poheaderx-currency = 'X'."货币码
* DATA : lv_bapi_te_mepoheaer(960) TYPE c.
*
* "抬头增强
* ls_extensionin-structure = 'BAPI_TE_MEPOHEADER'."采购订单屏幕增强自定义(抬头)
* CLEAR lv_bapi_te_mepoheaer.
* CALL METHOD cl_abap_container_utilities=>fill_container_c
* EXPORTING
* im_value = ls_extension
* IMPORTING
* ex_container = lv_bapi_te_mepoheaer
* EXCEPTIONS
* illegal_parameter_type = 1
* OTHERS = 2.
*
* ls_extensionin-valuepart1 = lv_bapi_te_mepoheaer(240).
* APPEND ls_extensionin TO lt_extensionin.
*
* "抬头增强
* ls_extensionin-structure = 'BAPI_TE_MEPOHEADERX'."采购订单屏幕增强自定义(抬头)
* ls_extensionx-zhtbh = 'X'.
* ls_extensionin-valuepart1 = ls_extensionx.
* APPEND ls_extensionin TO lt_extensionin.
* ENDIF.
LOOP AT gt_out INTO DATA(gs_out) WHERE sel = 'X'.
lv_po_item = lv_po_item + 10.
ls_poitem-po_item = lv_po_item. "项目号
* ls_poitem-acctasscat = gs_excel-acctasscat. "科目分配类别
*ls_poitem-item_cat = 'U'. "采购凭证中的项目类别
ls_poitem-material_long = gs_out-matnr. "物料号
* ls_poitem-short_text = gs_excel-short_text. "物料描述
*ls_poitem-po_unit = 'PCS'. "单位
* ls_poitem-net_price = gs_excel-cond_value. "价格
* ls_poitem-price_unit = gs_excel-cond_p_unt. "价格单位
*ls_poitem-quantity = '1'. "采购订单数量
ls_poitem-plant = gs_out-werks. "工厂
* ls_poitem-free_item = gs_excel-free_item. "免费交货标识
* ls_poitem-ret_item = gs_excel-ret_item. "退货标识
* ls_poitem-tax_code = gs_excel-tax_code. "税码
ls_poitem-stge_loc = gs_out-zdbkc."库存地点
ls_poitemx-po_item = lv_po_item. "项目号
* ls_poitemx-acctasscat = 'X'. "科目分配类别
*ls_poitemx-item_cat = 'X'. "采购凭证中的项目类别
ls_poitemx-material_long = 'X'. "物料号
* ls_poitemx-short_text = 'X'. "物料描述
*ls_poitemx-po_unit = 'X'. "单位
* ls_poitemx-net_price = 'X'. "价格
* ls_poitemx-price_unit = 'X'. "价格单位
*ls_poitemx-quantity = 'X'. "采购订单数量
ls_poitemx-plant = 'X'. "工厂
* ls_poitemx-free_item = 'X'. "免费交货标识
* ls_poitemx-ret_item = 'X'. "退货标识
* ls_poitemx-tax_code = 'X'. "税码
ls_poitemx-stge_loc = 'X'."库存地点
APPEND ls_poitem TO lt_poitem.
CLEAR ls_poitem.
APPEND ls_poitemx TO lt_poitemx.
CLEAR ls_poitemx.
* "采购订单的帐户分配字段
* ls_poaccount-po_item = lv_po_item. "项目号
* ls_poaccount-gl_account = gs_excel-gl_account . "总账科目
* ls_poaccount-costcenter = gs_excel-costcenter . "成本中心
* ls_poaccount-asset_no = gs_excel-asset_no . "资产编码
* ls_poaccount-sd_doc = gs_excel-sd_doc . "销售和分销凭证号
* ls_poaccount-itm_number = gs_excel-itm_number . "销售凭证项目
*
* ls_poaccountx-po_item = lv_po_item. "项目号
* ls_poaccountx-gl_account = 'X'. "总账科目
* ls_poaccountx-costcenter = 'X'. "成本中心
* ls_poaccountx-asset_no = 'X'. "资产编码
* ls_poaccountx-sd_doc = 'X'. "销售和分销凭证号
* ls_poaccountx-itm_number = 'X'. "销售凭证项目
*
* APPEND ls_poaccount TO lt_poaccount.
* CLEAR ls_poaccount.
* APPEND ls_poaccountx TO lt_poaccountx.
* CLEAR ls_poaccountx.
* "采购订单中的条件
* ls_pocond-itm_number = lv_po_item. "项目号
** ls_pocond-cond_st_no = '001'. "步骤编号
* ls_pocond-cond_type = 'PBXX'. "条件类型
* ls_pocond-cond_value = gs_excel-cond_value. "条件金额(价格)
* ls_pocond-cond_unit = gs_excel-cond_unit. "条件金额(价格)
* ls_pocond-cond_p_unt = gs_excel-cond_p_unt. "价格单位
* ls_pocond-currency = gs_excel-currency. "货币码
* ls_pocond-change_id = 'I'. "更改类型
** ls_pocond-cond_updat = 'X'. "条件更新
** ls_pocond-condchaman = 'X'. "已手动更改条件
*
* "采购订单项目数据(更改参数)
* ls_pocondx-itm_number = lv_po_item.
** ls_pocondx-cond_st_no = '001'. "步骤编号
* ls_pocondx-cond_type = 'X'.
* ls_pocondx-cond_value = 'X'.
* ls_pocondx-cond_unit = 'X'.
* ls_pocondx-cond_p_unt = 'X'.
* ls_pocondx-currency = 'X'.
* ls_pocondx-change_id = 'X'.
** ls_pocondx-cond_updat = 'X'. "条件更新
** ls_pocondx-condchaman = 'X'. "已手动更改条件
*
* APPEND ls_pocond TO lt_pocond.
* CLEAR: ls_pocond.
* APPEND ls_pocondx TO lt_pocondx.
* CLEAR: ls_pocondx.
"项目号 交货日期 采购订单数量
CLEAR: ls_schedule, ls_schedulex.
* ls_schedule = VALUE #( po_item = lv_po_item delivery_date = gs_excel-delivery_date quantity = gs_excel-quantity ).
* ls_schedulex = VALUE #( po_item = lv_po_item delivery_date = 'X' quantity = 'X' ).
ls_schedule-po_item = lv_po_item.
ls_schedule-delivery_date = sy-datum.
ls_schedule-quantity = gs_out-zcgddsl.
ls_schedulex-po_item = lv_po_item.
ls_schedulex-delivery_date = 'X'.
ls_schedulex-quantity = 'X'.
APPEND: ls_schedule TO lt_schedule, ls_schedulex TO lt_schedulex.
"行项目增强
* MOVE-CORRESPONDING gs_excel TO ls_extension_i.
ls_extension_i-po_item = lv_po_item.
ls_extension_i-zkdauf = gs_out-vbeln.
ls_extension_i-zkdpos = gs_out-posnr.
ls_extensionin-structure = 'BAPI_TE_MEPOITEM'."采购订单屏幕增强
ls_extensionin-valuepart1 = ls_extension_i.
APPEND ls_extensionin TO lt_extensionin.
ls_extension_ix-po_item = lv_po_item.
ls_extension_ix-zkdauf = 'X'.
ls_extension_ix-zkdpos = 'X'.
ls_extensionin-structure = 'BAPI_TE_MEPOITEMX'."采购订单屏幕增强
ls_extensionin-valuepart1 = ls_extension_ix.
APPEND ls_extensionin TO lt_extensionin.
CLEAR:gs_out.
ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = ls_poheader
poheaderx = ls_poheaderx
IMPORTING
exppurchaseorder = lv_ebeln
TABLES
return = lt_return
poitem = lt_poitem
poitemx = lt_poitemx
* poaccount = lt_poaccount
* poaccountx = lt_poaccountx
poschedule = lt_schedule
poschedulex = lt_schedulex
pocond = lt_pocond
pocondx = lt_pocondx
extensionin = lt_extensionin.
CLEAR lv_message.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A' .
CALL FUNCTION 'ZFM_YH_SE91'
EXPORTING
is_message_bapi = ls_return
IMPORTING
message = lv_message.
IF lv_message2 IS NOT INITIAL.
lv_message2 = lv_message && '/' && lv_message2.
ELSE.
lv_message2 = lv_message.
ENDIF.
ENDLOOP.
IF sy-subrc <> 0 ."LOOP执行失败sy-subrc <> 0
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_excel>) WHERE sel = 'X'.
<fs_excel>-icon = c_green.
<fs_excel>-message = '调拨单' && lv_ebeln && '创建成功!'.
* <fs_excel>-ebeln = lv_ebeln.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' "提交
EXPORTING
wait = 'X'.
ELSE.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_excel2>) WHERE sel = 'X'.
<fs_excel2>-icon = c_red.
<fs_excel2>-message = lv_message2.
* <fs_excel>-ebeln = lv_ebeln.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'."回滚
ENDIF.
ENDIF.
PERFORM refresh_table_alv.
ENDFORM.
FORM user_data_changed USING p_data TYPE REF TO cl_alv_changed_data_protocol.
DATA: ls_good TYPE lvc_s_modi."抓修改的单元格
* DATA: l_sel(01),"同步的字段
* l_aufnr TYPE aufnr."同步的关联字段
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = g_grid1.
LOOP AT p_data->mt_good_cells INTO ls_good.
* CLEAR: l_sel, l_aufnr.
* CASE ls_good-fieldname.
* WHEN 'SEL'.
* CALL METHOD p_data->get_cell_value
* EXPORTING
* i_row_id = ls_good-row_id
** I_TABIX =
* i_fieldname = 'SEL'
* IMPORTING
* e_value = l_sel.
* CALL METHOD p_data->get_cell_value
* EXPORTING
* i_row_id = ls_good-row_id
** I_TABIX =
* i_fieldname = 'AUFNR'
* IMPORTING
* e_value = l_aufnr.
* LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<wa>) WHERE aufnr = l_aufnr .
* <wa>-sel = l_sel.
* ENDLOOP.
* ENDCASE.
ENDLOOP.
*手工输入时更新仓库名
IF ls_good-fieldname NE 'SEL'.
IF ls_good-fieldname = 'ZDBKC'.
READ TABLE gt_out INTO gs_out INDEX ls_good-row_id.
IF sy-subrc = 0.
gs_out-lgort = ls_good-value.
SELECT SINGLE lgobe
INTO gs_out-zdbkc2
FROM t001l
WHERE werks = gs_out-werks
AND lgort = gs_out-zdbkc.
MODIFY gt_out FROM gs_out INDEX ls_good-row_id."必须指定位置
CLEAR: gs_out.
ENDIF.
PERFORM refresh_table_alv."内刷屏,不重置位置
* ELSEIF ls_good-fieldname = 'LIFNR'.
* READ TABLE gt_out INTO gs_out INDEX ls_good-row_id.
* IF sy-subrc = 0.
* gs_out-LIFNR = ls_good-value.
* SELECT SINGLE name1
* INTO gs_out-name1
* FROM lfa1
* WHERE LIFNR = gs_out-LIFNR
* AND SPRAS = '1'.
*
* SHIFT gs_out-LIFNR LEFT DELETING LEADING '0'.
* MODIFY gt_out FROM gs_out INDEX ls_good-row_id."必须指定位置
* CLEAR: gs_out.
* ENDIF.
PERFORM refresh_table_alv."内刷屏,不重置位置
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FM_BUTTON
*&---------------------------------------------------------------------*
* 设置enter事件
*----------------------------------------------------------------------*
* -->E_GRID text
*----------------------------------------------------------------------*
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
DATA: lv_event_receiver TYPE REF TO lcl_event_receiver,
lt_f4 TYPE lvc_t_f4,
ls_f4 TYPE lvc_s_f4.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = g_grid1.
ls_f4-fieldname = 'ZDBKC'. "窗口时间参数(需要定义F4帮助按钮的字段)
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = 'X'.
INSERT ls_f4 INTO TABLE lt_f4.
* ls_f4-fieldname = 'LIFNR'. "窗口时间参数(需要定义F4帮助按钮的字段)
* ls_f4-register = 'X'.
* ls_f4-getbefore = 'X'.
* ls_f4-chngeafter = 'X'.
* INSERT ls_f4 INTO TABLE lt_f4.
CREATE OBJECT lv_event_receiver.
SET HANDLER lv_event_receiver->handle_f4 FOR g_grid1.
CALL METHOD g_grid1->register_f4_for_fields
EXPORTING
it_f4 = lt_f4[].
ENDFORM. "FM_BUTTON
" REFRESH_TABLE_ALV
*&---------------------------------------------------------------------*
*& Form F4_HELP_LGORT
*&---------------------------------------------------------------------*
* 窗口时间参数的自定义f4检索帮助
*----------------------------------------------------------------------*
FORM f4_help_lgort USING p_fieldname TYPE lvc_fname
p_row_no TYPE lvc_s_roid.
DATA: BEGIN OF gs_lgort,
werks LIKE aufk-werks, "工厂
lgort LIKE resb-lgort, "仓库代码
lgobe LIKE t001l-lgobe,
END OF gs_lgort.
DATA: gt_lgort LIKE TABLE OF gs_lgort.
DATA: lt_return TYPE STANDARD TABLE OF ddshretval.
DATA: ls_return TYPE ddshretval.
CLEAR gs_out.
READ TABLE gt_out INTO gs_out INDEX p_row_no-row_id.
IF p_fieldname = 'ZDBKC'.
SELECT werks lgort lgobe
INTO TABLE gt_lgort
FROM t001l
WHERE werks = gs_out-werks.
SORT gt_lgort BY werks lgort.
DELETE ADJACENT DUPLICATES FROM gt_lgort
COMPARING werks lgort.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'LGORT' "lt内表里面的字段
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'ZDBKC' "画面上绑定字段
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = gt_lgort "需要显示帮助的值内表
return_tab = lt_return "返回值
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE lt_return INTO ls_return INDEX 1.
gs_out-zdbkc = ls_return-fieldval.
READ TABLE gt_lgort INTO gs_lgort WITH KEY lgort = ls_return-fieldval.
gs_out-zdbkc2 = gs_lgort-lgobe.
MODIFY gt_out FROM gs_out INDEX p_row_no-row_id
TRANSPORTING zdbkc zdbkc2.
CLEAR: gs_out.
ENDIF.
ENDFORM. " F4_HELP_LGORT
销售清单报表(含打印,审批)
于 2024-03-27 19:52:24 首次发布