*&---------------------------------------------------------------------*
*& Report ZPPD009
*&---------------------------------------------------------------------*
*& 销售订单批量创建生产订单
*&---------------------------------------------------------------------*
REPORT zppd009.
TABLES: vbak,vbap.
TYPES: BEGIN OF ty_out,
sel TYPE char1,
icon TYPE icon_d,
message TYPE bapiret2-message,
type TYPE bapiret2-type,
aufnr TYPE aufk-aufnr, "生产订单
vkorg TYPE vbak-vkorg, "销售组织
vtweg TYPE vbak-vtweg, "分销渠道
spart TYPE vbak-spart, "产品组
auart TYPE vbak-auart, "订单类型
audat TYPE vbak-audat, "凭证日期
vbeln TYPE vbak-vbeln, "销售订单
posnr TYPE vbap-posnr, "订单行
werks TYPE vbap-werks, "工厂
matnr TYPE vbap-matnr, "物料编码
maktx TYPE maktx, "物料描述
kwmeng TYPE vbap-kwmeng, "总数量
lfimg TYPE lips-lfimg, "已交货数量
psmng1 TYPE afpo-psmng, "在制工单数量
kalab TYPE mska-kalab, "可用库存数量
psmng2 TYPE afpo-psmng, "可制工单数量
auart2 TYPE aufk-auart, "生产订单类型
gstrp TYPE afko-gstrp, "可制工单开始日期
gltrp TYPE afko-gltrp, "可制工单结束日期
verid TYPE afpo-verid, "生产版本
END OF ty_out.
DATA: gt_out TYPE TABLE OF ty_out.
* ALV相关的变量
DATA: go_grid TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo,
gt_fieldcat TYPE lvc_t_fcat,
gs_variant TYPE disvariant,
gs_fieldcat LIKE LINE OF gt_fieldcat,
gt_exclude TYPE slis_t_extab,
gv_repid TYPE syrepid.
SELECT-OPTIONS: s_vkorg FOR vbak-vkorg OBLIGATORY DEFAULT '1100',
s_vtweg FOR vbak-vtweg,
s_spart FOR vbak-spart,
s_auart FOR vbak-auart,
s_vbeln FOR vbak-vbeln,
s_matnr FOR vbap-matnr,
s_audat FOR vbak-audat.
CLASS lcl_event_handle DEFINITION.
PUBLIC SECTION.
METHODS:
handle_f4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname es_row_no er_event_data,
handle_data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells.
ENDCLASS.
CLASS lcl_event_handle IMPLEMENTATION.
METHOD handle_f4.
PERFORM frm_onf4_help USING e_fieldname es_row_no er_event_data.
ENDMETHOD.
METHOD handle_data_changed_finished.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PERFORM frm_auth_check.
PERFORM frm_get_data.
PERFORM frm_display_alv.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
SELECT a~vkorg,a~vtweg,a~spart,a~audat,a~vbeln,a~auart,
b~posnr,b~werks,b~matnr,c~maktx,b~kwmeng
INTO CORRESPONDING FIELDS OF TABLE @gt_out
FROM vbak AS a
INNER JOIN vbap AS b
ON a~vbeln = b~vbeln
LEFT JOIN makt AS c
ON b~matnr = c~matnr
WHERE a~vkorg IN @s_vkorg
AND a~vtweg IN @s_vtweg
AND a~spart IN @s_spart
AND a~auart IN @s_auart
AND a~vbeln IN @s_vbeln
AND a~audat IN @s_audat
AND b~matnr IN @s_matnr
AND b~absta = 'A'.
IF gt_out IS NOT INITIAL.
SELECT vbeln AS vbeln_vl,
posnr AS posnr_vl,
lfimg,
vgbel AS vbeln,
vgpos AS posnr
INTO TABLE @DATA(lt_lips)
FROM lips
FOR ALL ENTRIES IN @gt_out
WHERE vgbel = @gt_out-vbeln
AND posnr = @gt_out-posnr
AND wbsta = 'C'.
SORT lt_lips BY vbeln posnr.
SELECT a~aufnr,a~posnr,psmng,wemng,
a~kdauf,
a~kdpos
INTO TABLE @DATA(lt_afpo)
FROM afpo AS a
INNER JOIN aufk AS b
ON a~aufnr = b~aufnr
INNER JOIN jest AS c
ON b~objnr = c~objnr
FOR ALL ENTRIES IN @gt_out
WHERE a~kdauf = @gt_out-vbeln
AND a~kdpos = @gt_out-posnr
AND c~stat IN ('I0001','I0002','E0002')
AND c~inact = ''.
SORT lt_afpo BY kdauf kdpos.
SELECT matnr,werks,lgort,charg,sobkz,
vbeln,posnr,kalab
INTO TABLE @DATA(lt_mska)
FROM mska
FOR ALL ENTRIES IN @gt_out
WHERE vbeln = @gt_out-vbeln
AND posnr = @gt_out-posnr.
SORT lt_mska BY vbeln posnr.
SELECT matnr,verid,werks,adatu,bdatu,bstmi,bstma,matko
INTO TABLE @DATA(local_mkal)
FROM mkal
FOR ALL ENTRIES IN @gt_out
WHERE werks = @gt_out-werks
AND matnr = @gt_out-matnr
AND bdatu GE @sy-datum
AND adatu LE @sy-datum
AND mksp NE '1'.
SORT local_mkal BY werks matnr verid.
ENDIF.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).
READ TABLE lt_lips TRANSPORTING NO FIELDS WITH KEY vbeln = <fs_out>-vbeln
posnr = <fs_out>-posnr
BINARY SEARCH.
IF sy-subrc = 0.
LOOP AT lt_lips INTO DATA(ls_lips) FROM sy-tabix.
IF ls_lips-vbeln NE <fs_out>-vbeln
OR ls_lips-posnr NE <fs_out>-posnr.
EXIT.
ENDIF.
<fs_out>-lfimg = <fs_out>-lfimg + ls_lips-lfimg. "已交货数量
CLEAR: ls_lips.
ENDLOOP.
ENDIF.
READ TABLE lt_afpo TRANSPORTING NO FIELDS WITH KEY kdauf = <fs_out>-vbeln
kdpos = <fs_out>-posnr
BINARY SEARCH.
IF sy-subrc = 0.
LOOP AT lt_afpo INTO DATA(ls_afpo) FROM sy-tabix.
IF ls_afpo-kdauf NE <fs_out>-vbeln
OR ls_afpo-kdpos NE <fs_out>-posnr.
EXIT.
ENDIF.
<fs_out>-psmng1 = <fs_out>-psmng1 + ( ls_afpo-psmng - ls_afpo-wemng ). "在制工单数量
CLEAR: ls_afpo.
ENDLOOP.
ENDIF.
READ TABLE lt_mska TRANSPORTING NO FIELDS WITH KEY vbeln = <fs_out>-vbeln
posnr = <fs_out>-posnr
BINARY SEARCH.
IF sy-subrc = 0.
LOOP AT lt_mska INTO DATA(ls_mska) FROM sy-tabix.
IF ls_mska-vbeln NE <fs_out>-vbeln
OR ls_mska-posnr NE <fs_out>-posnr.
EXIT.
ENDIF.
<fs_out>-kalab = <fs_out>-kalab + ls_mska-kalab. "可用库存数量
CLEAR: ls_mska.
ENDLOOP.
ENDIF.
* 可制工单数量 = 总数量 - 已交货数量 - 在制工单数量 - 可用库存数量
<fs_out>-psmng2 = <fs_out>-kwmeng - <fs_out>-lfimg - <fs_out>-psmng1 - <fs_out>-kalab.
<fs_out>-auart2 = 'ZP40'.
<fs_out>-gstrp = sy-datum.
<fs_out>-gltrp = sy-datum.
READ TABLE local_mkal INTO DATA(ls_mkal) WITH KEY werks = <fs_out>-werks
matnr = <fs_out>-matnr
BINARY SEARCH.
IF sy-subrc = 0.
<fs_out>-verid = ls_mkal-verid.
ENDIF.
ENDLOOP.
DELETE gt_out WHERE psmng2 LE 0.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
DATA:ls_layout TYPE lvc_s_layo,
ls_event TYPE slis_alv_event,
lt_event TYPE slis_t_event.
ls_layout-zebra = abap_true.
ls_layout-sel_mode = 'A'.
* ls_layout-box_fname = 'SEL'.
ls_layout-cwidth_opt = abap_true.
PERFORM frm_build_fieldcat.
ls_event-form = 'FRM_CALLER_EXIT'.
ls_event-name = 'CALLER_EXIT'.
APPEND ls_event TO lt_event.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-cprog
i_bypassing_buffer = abap_true
i_callback_pf_status_set = 'FRM_PF_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
it_events = lt_event
is_layout_lvc = ls_layout
it_fieldcat_lvc = gt_fieldcat
TABLES
t_outtab = gt_out
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_fieldcat .
DEFINE mcr_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-coltext = &2.
gs_fieldcat-scrtext_s = &2.
gs_fieldcat-scrtext_l = &2.
gs_fieldcat-scrtext_m = &2.
gs_fieldcat-key = &3.
gs_fieldcat-checkbox = &4.
gs_fieldcat-edit = &5.
gs_fieldcat-hotspot = &6.
gs_fieldcat-ref_table = &7.
gs_fieldcat-ref_field = &8.
gs_fieldcat-icon = &9.
IF gs_fieldcat-fieldname = 'VERID'.
gs_fieldcat-f4availabl = abap_true.
ENDIF.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
CLEAR gt_fieldcat.
mcr_fieldcat 'SEL' '选择' '' 'X' 'X' '' '' '' ''.
mcr_fieldcat 'ICON' '提示灯' '' '' '' '' '' '' ''.
mcr_fieldcat 'MESSAGE' '消息' '' '' '' '' 'BAPIRET2' 'MESSAGE' ''.
mcr_fieldcat 'AUFNR' '生产订单' '' '' '' '' 'AUFK' 'AUFNR' ''.
mcr_fieldcat 'VKORG' '销售组织' '' '' '' '' 'VBAK' 'VKORG' ''.
mcr_fieldcat 'VTWEG' '分销渠道' '' '' '' '' 'VBAK' 'VTWEG' ''.
mcr_fieldcat 'SPART' '产品组' '' '' '' '' 'VBAK' 'SPART' ''.
mcr_fieldcat 'AUART' '订单类型' '' '' '' '' 'VBAK' 'AUART' ''.
mcr_fieldcat 'AUDAT' '凭证日期' '' '' '' '' '' '' ''.
mcr_fieldcat 'VBELN' '销售订单' '' '' '' '' 'VBAK' 'VBELN' ''.
mcr_fieldcat 'POSNR' '订单行' '' '' '' '' 'VBAP' 'POSNR' ''.
mcr_fieldcat 'WERKS' '工厂' '' '' '' '' 'VBAP' 'WERKS' ''.
mcr_fieldcat 'MATNR' '物料编码' '' '' '' '' 'VBAP' 'MATNR' ''.
mcr_fieldcat 'MAKTX' '物料描述' '' '' '' '' 'MAKT' 'MAKTX' ''.
mcr_fieldcat 'KWMENG' '总数量' '' '' '' '' '' '' ''.
mcr_fieldcat 'LFIMG' '已交货数量' '' '' '' '' '' '' ''.
mcr_fieldcat 'PSMNG1' '在制工单数量' '' '' '' '' '' '' ''.
mcr_fieldcat 'KALAB' '可用库存数量' '' '' '' '' '' '' ''.
mcr_fieldcat 'PSMNG2' '可制工单数量' '' '' 'X' '' 'AFPO' 'PSMNG' ''.
mcr_fieldcat 'AUART2' '生产订单类型' '' '' 'X' '' 'AUFK' 'AUART' ''.
mcr_fieldcat 'GSTRP' '可制工单开始日期' '' '' 'X' '' 'AFKO' 'GSTRP' ''.
mcr_fieldcat 'GLTRP' '可制工单结束日期' '' '' 'X' '' 'AFKO' 'GLTRP' ''.
mcr_fieldcat 'VERID' '生产版本' '' '' 'X' '' 'AFPO' 'VERID' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_AUTH_CHECK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_auth_check .
SELECT vkorg
INTO TABLE @DATA(lt_tvko)
FROM tvko
WHERE vkorg IN @s_vkorg.
LOOP AT lt_tvko INTO DATA(ls_tvko).
AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
ID 'VKORG' FIELD ls_tvko-vkorg
ID 'VTWEG' DUMMY
ID 'SPART' DUMMY
ID 'ACTVT' DUMMY.
IF sy-subrc <> 0.
MESSAGE s001(00) WITH '缺少销售组织:'ls_tvko-vkorg '的权限' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
CLEAR: ls_tvko.
ENDLOOP.
ENDFORM.
FORM frm_pf_status USING is_extab TYPE slis_t_extab.
DATA lt_fcode TYPE slis_t_extab.
SET PF-STATUS 'STANDARD' EXCLUDING lt_fcode.
ENDFORM.
FORM frm_user_command USING iv_ucomm LIKE sy-ucomm
is_selfield TYPE slis_selfield. "#EC
"Grid
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = go_grid.
go_grid->check_changed_data( ).
CASE iv_ucomm.
WHEN 'ZCREATE'.
PERFORM frm_create.
WHEN 'ZALL' OR 'ZSAL'.
PERFORM frm_sel_proc USING iv_ucomm.
ENDCASE.
PERFORM frm_alv_refresh USING go_grid.
ENDFORM.
FORM frm_alv_refresh USING lo_alvgrid TYPE REF TO cl_gui_alv_grid.
DATA:
ls_stable TYPE lvc_s_stbl,
ls_layout TYPE lvc_s_layo,
lt_columns TYPE lvc_t_col,
lt_index_rows TYPE lvc_t_row,
lt_row_no TYPE lvc_t_roid.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
CLEAR: lt_columns,ls_layout.
CALL METHOD lo_alvgrid->get_frontend_layout
IMPORTING
es_layout = ls_layout.
ls_layout-cwidth_opt = 'X'.
CALL METHOD lo_alvgrid->set_frontend_layout
EXPORTING
is_layout = ls_layout.
CALL METHOD lo_alvgrid->get_selected_columns "获取选择列
IMPORTING
et_index_columns = lt_columns.
CALL METHOD lo_alvgrid->get_selected_rows "获取选择行
IMPORTING
et_index_rows = lt_index_rows
et_row_no = lt_row_no.
CALL METHOD lo_alvgrid->refresh_table_display
EXPORTING
is_stable = ls_stable
i_soft_refresh = 'X'
EXCEPTIONS
finished = 1
OTHERS = 2.
*
CALL METHOD lo_alvgrid->set_selected_columns "设置回刷新前的列
EXPORTING
it_col_table = lt_columns.
CALL METHOD lo_alvgrid->set_selected_rows "设置回刷新前的列
EXPORTING
it_index_rows = lt_index_rows
it_row_no = lt_row_no.
ENDFORM. " frm_alv_refresh
*&---------------------------------------------------------------------*
*& Form FRM_CREATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_create .
DATA: ls_orderdata TYPE bapi_pp_order_create,
ls_return TYPE bapiret2,
lv_aufnr TYPE aufk-aufnr,
lv_error TYPE char1,
ls_log TYPE zppt0009_log.
IF line_exists( gt_out[ sel = 'X'] ).
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) WHERE sel = 'X'
AND aufnr = ''.
CLEAR:
ls_orderdata,
lv_aufnr,
lv_error,
ls_return,
ls_log.
MOVE-CORRESPONDING <fs_out> TO ls_log.
ls_log-create_user = sy-uname.
ls_log-create_date = sy-datum.
ls_log-create_time = sy-uzeit.
PERFORM frm_check_data
CHANGING <fs_out>
lv_error.
IF lv_error = 'X'.
* ls_log-message = <fs_out>-message.
* ls_log-type = <fs_out>-type.
* MODIFY zppt0009_log FROM ls_log.
* COMMIT WORK.
CONTINUE.
ENDIF.
ls_orderdata-plant = <fs_out>-werks.
ls_orderdata-material = <fs_out>-matnr.
ls_orderdata-planning_plant = <fs_out>-werks.
ls_orderdata-order_type = <fs_out>-auart2.
ls_orderdata-basic_start_date = <fs_out>-gstrp.
ls_orderdata-basic_end_date = <fs_out>-gltrp.
ls_orderdata-quantity = <fs_out>-psmng2.
ls_orderdata-prod_version = <fs_out>-verid.
ls_orderdata-sales_order = <fs_out>-vbeln.
ls_orderdata-sales_order_item = <fs_out>-posnr.
SET UPDATE TASK LOCAL.
CALL FUNCTION 'BAPI_PRODORD_CREATE'
EXPORTING
orderdata = ls_orderdata
IMPORTING
return = ls_return
order_number = lv_aufnr.
IF ls_return-type CA 'AEX'.
<fs_out>-icon = icon_red_light.
<fs_out>-type = 'E'.
<fs_out>-message = ls_return-message.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
<fs_out>-icon = icon_green_light.
<fs_out>-type = 'S'.
<fs_out>-message = '生产订单创建成功'.
<fs_out>-aufnr = lv_aufnr.
ls_log-aufnr = lv_aufnr.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ls_log-message = <fs_out>-message.
ls_log-type = <fs_out>-type.
MODIFY zppt0009_log FROM ls_log.
COMMIT WORK.
CONTINUE.
ENDLOOP.
ELSE.
MESSAGE e001(00) WITH '请至少选择一行数据创建'.
ENDIF.
ENDFORM.
FORM frm_caller_exit USING ls_exit TYPE slis_data_caller_exit.
DATA:
lt_f4 TYPE lvc_t_f4,
ls_f4 TYPE lvc_s_f4.
IF go_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = go_grid.
ENDIF.
go_grid->register_edit_event(
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter " Event ID
EXCEPTIONS
error = 1
OTHERS = 2
).
go_grid->register_edit_event(
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified " Event ID
EXCEPTIONS
error = 1
OTHERS = 2
).
DATA(lo_event_handle) = NEW lcl_event_handle( ).
SET HANDLER lo_event_handle->handle_f4 FOR go_grid.
SET HANDLER lo_event_handle->handle_data_changed_finished FOR go_grid.
ls_f4-fieldname = 'VERID'.
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = 'X'.
INSERT ls_f4 INTO TABLE lt_f4.
CALL METHOD go_grid->register_f4_for_fields
EXPORTING
it_f4 = lt_f4. " F4 Fields
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ONF4_HELP
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_E_FIELDNAME text
* -->P_ES_ROW_NO text
* -->P_ER_EVENT_DATA text
*&---------------------------------------------------------------------*
FORM frm_onf4_help USING e_fieldname
es_row_no TYPE lvc_s_roid
er_event_data TYPE REF TO cl_alv_event_data.
DATA: lt_ddshretval TYPE TABLE OF ddshretval.
CASE e_fieldname.
WHEN 'VERID'.
READ TABLE gt_out INTO DATA(ls_out) INDEX es_row_no-row_id.
IF sy-subrc = 0.
SELECT verid,text1,matnr,werks,adatu,bdatu,bstmi,bstma
INTO TABLE @DATA(local_mkal)
FROM mkal
WHERE werks = @ls_out-werks
AND matnr = @ls_out-matnr
AND bdatu GE @ls_out-gstrp
AND adatu LE @ls_out-gstrp
AND mksp NE '1'
ORDER BY verid.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'VERID'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'VERID'
window_title = '选择生产版本'
value_org = 'S'
TABLES
value_tab = local_mkal
return_tab = lt_ddshretval
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
LOOP AT lt_ddshretval INTO DATA(ls_retval).
CASE ls_retval-retfield.
WHEN 'VERID'.
ls_out-verid = ls_retval-fieldval.
ENDCASE.
ENDLOOP.
MODIFY gt_out FROM ls_out INDEX es_row_no-row_id TRANSPORTING verid.
er_event_data->m_event_handled = 'X'.
ENDIF.
ENDIF.
PERFORM frm_alv_refresh USING go_grid.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* <--P_<FS_OUT> text
* <--P_LV_ERROR text
*&---------------------------------------------------------------------*
FORM frm_check_data CHANGING ls_out TYPE ty_out
lv_error.
DATA: lv_psmng2 TYPE afpo-psmng.
* SELECT SINGLE kwmeng
* INTO ls_out-kwmeng
* FROM vbap
* WHERE vbeln = ls_out-vbeln
* AND posnr = ls_out-posnr.
*
* SELECT SUM( lfimg ) INTO ls_out-lfimg
* FROM lips
* WHERE vgbel = ls_out-vbeln
* AND vgpos = ls_out-posnr
* AND wbsta = 'C'.
* 取在制工单数量实时计算可制工单数量
SELECT SUM( psmng - wemng ) INTO @ls_out-psmng1
FROM afpo AS a
INNER JOIN aufk AS b
ON a~aufnr = b~aufnr
INNER JOIN jest AS c
ON b~objnr = c~objnr
WHERE a~kdauf = @ls_out-vbeln
AND a~kdpos = @ls_out-posnr
AND c~stat IN ('I0001','I0002')
AND c~inact = ''.
* 可制工单数量 = 总数量 - 已交货数量 - 在制工单数量 - 可用库存数量
lv_psmng2 = ls_out-kwmeng - ls_out-lfimg - ls_out-psmng1 - ls_out-kalab.
IF lv_psmng2 LE 0 OR lv_psmng2 < ls_out-psmng2.
lv_error = 'X'.
ls_out-type = 'E'.
ls_out-icon = icon_red_light.
ls_out-message = |可制工单数量{ lv_psmng2 }不足|.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SEL_PROC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_UCOMM text
*&---------------------------------------------------------------------*
FORM frm_sel_proc USING p_ucomm.
DATA: lt_fidx TYPE lvc_t_fidx,
lv_fg TYPE char1.
CASE p_ucomm.
WHEN 'ZALL'.
lv_fg = abap_true.
WHEN 'ZSAL'.
lv_fg = abap_false.
ENDCASE.
CALL METHOD go_grid->get_filtered_entries
IMPORTING
et_filtered_entries = lt_fidx.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).
READ TABLE lt_fidx WITH KEY table_line = sy-tabix
TRANSPORTING NO FIELDS.
CHECK sy-subrc NE 0.
<fs_out>-sel = lv_fg.
ENDLOOP.
ENDFORM.
SAP BAPI_PRODORD_CREATE创建生产订单
于 2025-04-09 16:43:57 首次发布