alv edit cell dropdownlist

 

REPORT zyzrpt694l.
*对生产订单退货 MB1A
TABLES: resb,zyzhtpc.
TYPE-POOLS: slis,vrm.
CONSTANTS: c_green LIKE dv70a-statusicon VALUE '@08@',
c_yellow LIKE dv70a-statusicon VALUE '@09@',
c_red LIKE dv70a-statusicon VALUE '@0A@'.

DATA: li_gm_head TYPE STANDARD TABLE OF bapi2017_gm_head_01,
l_gm_head TYPE bapi2017_gm_head_01,
li_gm_code TYPE STANDARD TABLE OF bapi2017_gm_code,
l_gm_code TYPE bapi2017_gm_code,
l_mat_doc LIKE bapi2017_gm_head_ret-mat_doc,
li_gm_item TYPE STANDARD TABLE OF bapi2017_gm_item_create,
l_gm_item LIKE bapi2017_gm_item_create,
li_return TYPE STANDARD TABLE OF bapiret2,
return LIKE bapiret2,
lw_return LIKE bapiret2,
l_errflag(1) TYPE c .

DATA: BEGIN OF wa_out,
matnr LIKE resb-matnr,
maktx LIKE makt-maktx,
lgort LIKE resb-lgort,
meins LIKE resb-meins,
menge LIKE resb-bdmng,
werks LIKE resb-werks,
aufnr LIKE zyzhtpc-aufnr,
charg LIKE mch1-charg,
zhtpc LIKE zyzjmff-zhtpc,
ddate LIKE zyzjmff-ddate,
zfflb LIKE zyzjmff-zfflb,
rsdat LIKE rkpf-rsdat,
bwart LIKE rkpf-bwart,
zstat(4) TYPE c,
znote(40) TYPE c,
style TYPE lvc_t_styl,
box(1) TYPE c,
dd_handle TYPE int4,
END OF wa_out.

DATA: t_out LIKE TABLE OF wa_out WITH HEADER LINE.
DATA: t_out1 LIKE TABLE OF wa_out WITH HEADER LINE.
DATA: ls_style TYPE lvc_s_styl,
lt_style TYPE lvc_t_styl,
i_events TYPE slis_t_event, "事件存储内表
wa_events TYPE slis_alv_event.
DATA: gt_fieldcat TYPE lvc_t_fcat,
gw_fieldcat TYPE lvc_s_fcat,
it_sort TYPE lvc_t_sort WITH HEADER LINE ,
gw_layout TYPE lvc_s_layo,
s_table TYPE lvc_s_stbl,
ls_edit TYPE lvc_s_styl,
lt_edit TYPE lvc_t_styl.
DATA:
i_ddval TYPE lvc_t_drop, "存储下拉列表的数据
wa_ddval TYPE lvc_s_drop.

DEFINE set_fc.
l_pos = l_pos + 1.
gw_fieldcat-scrtext_l = &1.
gw_fieldcat-fieldname = &2.
gw_fieldcat-tabname = 'T_OUT'.
gw_fieldcat-col_pos = l_pos.
gw_fieldcat-edit = &3.
gw_fieldcat-key = &4.
gw_fieldcat-checkbox = &5.
gw_fieldcat-ref_table = &6.
gw_fieldcat-ref_field = &7.
gw_fieldcat-outputlen = &8.
gw_fieldcat-no_zero = 'X'..

if &2 = 'CHARG'.
gw_fieldcat-dd_outlen = '16'.
gw_fieldcat-drdn_field = 'DD_HANDLE'. "设置下拉菜单
endif.
append gw_fieldcat to gt_fieldcat.
clear gw_fieldcat.
END-OF-DEFINITION.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text01.
PARAMETERS: p_bukrs LIKE zyzhtpc-bukrs OBLIGATORY MEMORY ID bukrs,
p_zhtpc LIKE zyzhtpc-zhtpc MEMORY ID zhtpc OBLIGATORY,
p_zfflb LIKE zyzjmff-zfflb MEMORY ID zfflb OBLIGATORY
.
SELECTION-SCREEN END OF BLOCK b1 .

AT SELECTION-SCREEN ON p_bukrs.
PERFORM frm_authority_check_bukrs.

AT SELECTION-SCREEN ON p_zfflb.
PERFORM frm_authority_check_zfflb.

START-OF-SELECTION.

INITIALIZATION.
ls_style-fieldname = 'CHARG'.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
ls_style-style2 = space.
ls_style-style3 = space.
ls_style-style4 = space.
ls_style-maxlen = 1.
ls_style-fieldname = 'LGORT'.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
ls_style-maxlen = 1.
END-OF-SELECTION.
PERFORM get_data.
PERFORM display_alv.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
FORM get_data .
SELECT DISTINCT
a~aufnr a~zhtpc
c~matnr c~meins c~werks c~ddate c~menge c~zfflb
INTO CORRESPONDING FIELDS OF TABLE t_out
FROM zyzhtpc AS a
* INNER JOIN resb AS b ON a~aufnr = b~aufnr
INNER JOIN zyzjmff AS c ON a~zhtpc = c~zhtpc AND a~bukrs = c~bukrs
WHERE a~bukrs = p_bukrs
AND a~zhtpc = p_zhtpc
AND c~zfflb = p_zfflb
AND c~zjmxz = 'TL'
AND c~mblnr = ''
.
SORT t_out BY zhtpc aufnr meins.
DELETE ADJACENT DUPLICATES FROM t_out COMPARING ALL FIELDS.
IF t_out[] IS INITIAL.
MESSAGE '没有符合条件的数据,请检查输入条件' TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
FORM display_alv .
PERFORM set_field_cat.
PERFORM set_layout.
PERFORM f_create_dropdown_list.
DATA: count TYPE i VALUE 0.
LOOP AT t_out.
count = count + 1.
ENDLOOP.
IF sy-subrc = 0.
MESSAGE s001(00) WITH '查询出' count '条记录'.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_ALV_STATUS'
i_callback_user_command = 'ALV_USER_COMMAND'
* is_layout_lvc = gw_layout
it_events = i_events[]
it_fieldcat_lvc = gt_fieldcat
TABLES
t_outtab = t_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. " DISPLAY_ALV

FORM set_field_cat .
  DATA: l_pos TYPE i.
  set_fc:
  '状态'       'ZSTAT' ''  ''  ''  '' ''  4,
  '订单号'     'AUFNR' ''  ''  ''  '' ''  10,
  '库存地点'   'LGORT' 'X'  ''  ''  '' ''  8,
  '批次'       'CHARG' 'X'  ''  ''  '' '' 16,
  '备注'       'ZNOTE' ''  ''  ''  '' ''  20.
ENDFORM.                    " SET_FIELD_CAT

FORM set_layout .
  gw_layout-zebra = 'X'.
*  gw_layout-cwidth_opt = 'X'.
  gw_layout-box_fname = 'BOX'.
ENDFORM.                    " SET_LAYOUT

FORM set_alv_status USING rt_extab TYPE slis_t_extab.
  DATA: ls_code TYPE slis_extab.
  SET PF-STATUS 'STANDARD' EXCLUDING rt_extab.
ENDFORM.                    "SET_ALV_STATUS

FORM alv_user_command USING p_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: t_t LIKE t_out.
CASE p_ucomm.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN '&IC1'.
IF rs_selfield-fieldname = 'MATNR'.
READ TABLE t_out INTO t_t INDEX rs_selfield-tabindex.
IF sy-subrc = 0.
SET PARAMETER ID 'MAT' FIELD t_t-matnr.
SET PARAMETER ID 'MXX' FIELD 'D'.
SET PARAMETER ID 'WRK' FIELD t_t-werks.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDIF.
CLEAR t_t.
ENDIF.
*MXX的选择看表T132 (同时看表MOFF)
*A 工作计划
*B 会计
*C 分类
** WHEN 'SAVE'._out.
** ENDLOOP.
** rs_selfield-refresh = 'X'.
WHEN 'IMPORT'.
** DATA: textline(30) TYPE c VALUE '提示:退货前,请确保已填写批次!'.
** DATA: title(4) TYPE c VALUE '提示'.
** DATA: answer TYPE c.
** CALL FUNCTION 'POPUP_TO_DECIDE_INFO'
** EXPORTING
** textline1 = textline
** titel = title
** IMPORTING
** answer = answer.
** IF answer <> 'J'.
** EXIT.
** ELSE.
PERFORM frm_save.
READ TABLE t_out INTO t_out1 WITH KEY box = 'X'.
IF sy-subrc NE 0.
MESSAGE '没有选中,请选中一行或多行记录' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
CLEAR t_out1[].
PERFORM frm_run.
rs_selfield-refresh = 'X'.
ENDCASE.
ENDFORM. "ALV_USER_COMMAND

 


*&---------------------------------------------------------------------*
*& Form FRM_RUN
*&---------------------------------------------------------------------*
FORM frm_run ."BAPI
DATA:
return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
extensionin LIKE bapiparex OCCURS 0 WITH HEADER LINE,
t_edidd LIKE edidd OCCURS 0 WITH HEADER LINE,
bapi_retn_info LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
LOOP AT t_out WHERE box = 'X'.
IF t_out-charg = ''.
MESSAGE '请填写物料批次和库存地点!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
CLEAR:
l_gm_item,
l_gm_head,
return[].
l_gm_head-pstng_date = sy-datum.
l_gm_head-doc_date = sy-datum.
APPEND l_gm_head TO li_gm_head.
l_gm_code-gm_code = '03'.
APPEND l_gm_code TO li_gm_code.
***********gmcode-gm_code取值含义*******
********01 MB01
********02 MB31
********03 MB1A
********04 MB1B
********05 MB1C
********06 MB11
********07 MB04
l_gm_item-material = t_out-matnr."'00000000008A001565'." 12345678'."
l_gm_item-plant = t_out-werks. "'2021'.
l_gm_item-stge_loc = t_out-lgort. "'2002'.
l_gm_item-move_type = '262'.
l_gm_item-entry_qnt = '1'.
l_gm_item-entry_uom = t_out-meins. " 'KG'.
l_gm_item-entry_qnt = t_out-menge. " 'KG'.
l_gm_item-batch = t_out-charg .""'11K21021'.
l_gm_item-orderid = t_out-aufnr."'M111215001'. "12 “订单号
APPEND l_gm_item TO li_gm_item.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = l_gm_head
goodsmvt_code = '03'
IMPORTING
materialdocument = l_mat_doc
TABLES
goodsmvt_item = li_gm_item
return = return.
IF return IS NOT INITIAL.
IF return-type = 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
t_out-zstat = c_red.
* t_out-zstat = '×'.
MODIFY t_out.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
* WAIT UP TO '0.3' SECONDS.
t_out-zstat = '√'.
MODIFY t_out.
ENDIF.
IF sy-subrc = 0.
CONCATENATE return-message t_out-znote INTO t_out-znote .
CONDENSE t_out-znote NO-GAPS.
MODIFY t_out.
ENDIF.
CLEAR: return[].
CLEAR: t_out.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
t_out-zstat = c_green.
* t_out-zstat = '√'.
t_out-znote = l_mat_doc.
MODIFY t_out.
UPDATE zyzjmff SET mblnr = l_mat_doc mjahr = sy-datum+0(4) WHERE zhtpc = t_out-zhtpc AND zfflb = t_out-zfflb AND mblnr = '' AND zjmxz = 'TL'.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_RUN
*&---------------------------------------------------------------------*
*& Form FRM_SAVE
*&---------------------------------------------------------------------*
FORM frm_save .
DATA: gr_grid TYPE REF TO cl_gui_alv_grid,
ls_stbl TYPE lvc_s_stbl.
ls_stbl-row = 'X'.
ls_stbl-col = 'X'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = gr_grid.
CALL METHOD gr_grid->check_changed_data.
LOOP AT t_out.
CLEAR t_out-style.
IF t_out-matnr NE ''.
INSERT LINES OF lt_style INTO TABLE t_out-style.
ENDIF.
MODIFY t_out.
ENDLOOP.

CALL METHOD gr_grid->refresh_table_display( is_stable = ls_stbl ).
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = gr_grid.
CALL METHOD gr_grid->check_changed_data.
CALL METHOD gr_grid->refresh_table_display.
ENDFORM. " FRM_SAVE
*&---------------------------------------------------------------------*
*& Form FRM_AUTHORITY_CHECK_BUKRS
*&---------------------------------------------------------------------*
FORM frm_authority_check_bukrs .
DATA: l_bukrs TYPE t001-bukrs .
SELECT bukrs FROM t001 INTO l_bukrs WHERE bukrs = p_bukrs.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD l_bukrs
ID 'ACTVT' FIELD '03'.
IF sy-subrc <> 0.
MESSAGE e005(zdev) WITH '没有公司代码权限!'.
LEAVE SCREEN .
ENDIF.
ENDSELECT.
ENDFORM. " FRM_AUTHORITY_CHECK_BUKRS

FORM frm_authority_check_zfflb .
* AUTHORITY-CHECK OBJECT 'ZFFLB'
* ID 'ZFFLB' FIELD P_ZFFLB.
** ID 'ACTVT' FIELD '03'.
* IF SY-SUBRC <> 0.
* MESSAGE '没有发放该类别权限!' TYPE 'S' DISPLAY LIKE 'E'.
* LEAVE SCREEN .
*
* ENDIF.
ENDFORM. " FRM_AUTHORITY_CHECK_ZFFLB
*&---------------------------------------------------------------------*
*& Form CHARG_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_create_dropdown_list.
DATA: l_count TYPE i,
l_charg TYPE mchb-charg.
LOOP AT t_out.
ADD 1 TO l_count.
CLEAR wa_ddval.
wa_ddval-handle = l_count.
wa_ddval-value = ' '.
APPEND wa_ddval TO i_ddval.
SELECT charg
INTO l_charg
FROM mchb
WHERE matnr = t_out-matnr.
CLEAR wa_ddval.
wa_ddval-handle = l_count.
wa_ddval-value = l_charg.
APPEND wa_ddval TO i_ddval.
ENDSELECT.
*设置对应
t_out-dd_handle = l_count.
MODIFY t_out.
ENDLOOP.
wa_events-name = 'CALLER_EXIT'. "固定值
wa_events-form = 'F_CALLER_EXIT'.
APPEND wa_events TO i_events.
ENDFORM. "charg_select

FORM f_caller_exit USING ls_data TYPE slis_data_caller_exit.
DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = l_ref_alv.
CALL METHOD l_ref_alv->set_drop_down_table
EXPORTING
it_drop_down = i_ddval.
ENDFORM. "CHARG_SELECT

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值