ALV输出,双击调用事务***

report zsd_soposto no standard page heading message-id zsd.
type-pools: slis.
tables:vbak,vbkd,vbap,kna1,vbfa,vbpa,ekko,ekpo,ekbe,afko,afpo.
types: begin of strc,
bstkd like vbkd-bstkd, "合同号@项目名称
name1 like kna1-name1, "付款方
netwr like vbak-netwr, "工程价格
vbeln like vbap-vbeln, "销售订单号
posnr like vbap-posnr, "销售订单项目
matnr like vbap-matnr, "行项目物料号
kwmeng like vbap-kwmeng, "屏体数量
aufnr like afpo-aufnr, "生产订单号
strmp like afpo-strmp, "生产订单开始日期
vbeln1 like lips-vbeln, "工程交货单号
erdat1 like lips-erdat, "工程交货单创建日期
ebeln like ekko-ebeln, "对应移库单号
aedat like ekko-aedat, "移库单创建日期
vbeln2 like lips-vbeln, "移库单交货单号
erdat2 like lips-erdat, "移库单交货单创建日期
contract(20) type c, "合同号
project(40) type c, "工程名称
end of strc.
data: itab1 type strc occurs 0 with header line,
temp_tab like table of ekbe with header line.

*"Variants
data: temp_con like vbkd-bstkd,
temp_con1 like vbkd-bstkd,
temp_con2 like vbkd-bstkd,
temp_con3 like vbkd-bstkd,
temp_pro3 like vbkd-bstkd,
temp_bstkd like vbkd-bstkd.

****about alv
data: it_fieldcat type slis_t_fieldcat_alv,
wa_fieldcat type slis_fieldcat_alv,
myindex like sy-tabix,
gs_layout type slis_layout_alv,
g_exit_caused_by_caller,
gs_exit_caused_by_user type slis_exit_by_user,
fieldcat type slis_t_fieldcat_alv,
fieldcat_ln like line of fieldcat,
g_repid like sy-repid,
gs_variant like disvariant,
g_save.
data:
gt_events type slis_t_event,
gt_list_top_of_page type slis_t_listheader,
g_status_set type slis_formname value 'PF_STATUS_SET',
g_user_command type slis_formname value 'USER_COMMAND',
g_top_of_page type slis_formname value 'TOP_OF_PAGE',
g_top_of_list type slis_formname value 'TOP_OF_LIST',
g_end_of_list type slis_formname value 'END_OF_LIST'.
g_repid = sy-repid.
define add_field.
wa_fieldcat-tabname = 'ITAB1'.
wa_fieldcat-fieldname = &1.
wa_fieldcat-seltext_m = &2.
wa_fieldcat-outputlen = &3.
append wa_fieldcat to it_fieldcat.
end-of-definition.

selection-screen: skip 1.
selection-screen: begin of block input with frame title text-001,
skip 1.
selection-screen: begin of block so with frame title text-002.
parameters: so_con(20) type c, "合同号
so_pro(40) type c. "工程名称
select-options: so_auart for vbak-auart, "销售单据类型
so_vkbur for vbak-vkbur, "销售办公室
so_vkgrp for vbak-vkgrp, "销售组
so_vbeln for vbak-vbeln, "销售订单号
so_erdat for vbak-erdat, "销售订单创建日期
so_kunnr for vbpa-kunnr, "付款方
so_matnr for vbap-matnr, "物料编码
so_werks for vbap-werks. "工厂
selection-screen: end of block so.
selection-screen: skip 1.
selection-screen: begin of block sto with frame title text-003.
select-options: so_ebeln for ekko-ebeln, "移库单编号
so_aedat for ekko-aedat. "移库单创建日期
selection-screen: end of block sto.
selection-screen: skip 1.
selection-screen: begin of block po with frame title text-004.
select-options: so_aufnr for afpo-aufnr, "生产订单号
so_strmp for afpo-strmp. "生产订单基本开始日期
selection-screen: end of block po.
selection-screen: end of block input.
selection-screen: skip 1.
selection-screen: begin of block output with frame title text-005.
parameters: so as checkbox default 'X',
solf as checkbox default 'X',
sto as checkbox default 'X',
stolf as checkbox default 'X',
po as checkbox default 'X'.
selection-screen: end of block output.

****main program
if so_aufnr[] is initial and so_strmp[] is initial .
perform so_search.
*ELSEIF so_ebeln IS INITIAL OR so_aedat IS INITIAL.
* MESSAGE i001.
* PERFORM sto_search.
else.
perform po_search.
write: 'PO'.
endif.
perform output.
****end main program

*---------------------------------------------------------------------*
* FORM so_search *
*---------------------------------------------------------------------*
* search by so *
*---------------------------------------------------------------------*
form so_search.
**********get so data
concatenate '%' so_con '%' into temp_con3. "模糊合同号
concatenate '%' so_pro '%' into temp_pro3. "模糊工程名称
select vbkd~bstkd kna1~name1 vbak~netwr vbap~vbeln vbap~posnr vbap~matnr
vbap~kwmeng into table itab1
from vbak inner join vbpa
on vbak~vbeln = vbpa~vbeln
inner join kna1
on vbpa~kunnr = kna1~kunnr
inner join vbkd
on vbak~vbeln = vbkd~vbeln
inner join vbap
on vbak~vbeln = vbap~vbeln
where vbkd~posnr = '000000'
and vbpa~posnr = '000000'
and vbap~abgru = space "行项目未被拒绝
and vbak~auart in so_auart "销售单据类型
and vbak~vbeln in so_vbeln "销售订单号
and vbak~vkbur in so_vkbur "销售办公室
and vbak~vkgrp in so_vkgrp "销售组
and vbak~erdat in so_erdat "销售订单创建日期
and vbpa~kunnr in so_kunnr "付款方
and vbpa~parvw = 'RG'
and vbap~matnr in so_matnr "物料编码
and vbap~werks in so_werks "工厂
* and vbke~bstkd cn ''.
and vbkd~bstkd like temp_pro3 "合同号@项目名称
and vbkd~bstkd like temp_con3. "合同号@项目名称
loop at itab1.
split itab1-bstkd at '@' into itab1-contract itab1-project.
itab1-netwr = itab1-netwr * '1.17'.
modify itab1.
endloop.
**********get sto data
if sto ne space.
loop at itab1.
****delete contract's '('and ')'
temp_con = itab1-contract.
* CHECK itab1-contract NE space.
if itab1-contract = space and so_ebeln[] is initial and so_aedat[]
is initial.
continue.
endif.
split temp_con at '(' into temp_con1 temp_con2.
concatenate temp_con1 temp_con2 into temp_con.
split temp_con at ')' into temp_con1 temp_con2.
concatenate temp_con1 temp_con2 into temp_con.
temp_con1 = temp_con.
temp_con2 = temp_con.
translate temp_con1 to upper case.
translate temp_con2 to lower case.
select distinct ebeln from ekpo into itab1-ebeln
where ebeln in so_ebeln and ( bednr =
temp_con1 or bednr = temp_con2 ).
select single aedat from ekko into itab1-aedat
where ebeln = itab1-ebeln and aedat in so_aedat.
check sy-subrc = 0.
modify itab1.
endselect.
if itab1-ebeln = space.
if not ( so_ebeln[] is initial )
or not ( so_aedat[] is initial ).
delete itab1.
endif.
endif.
endloop.
endif.
**********get po data
if po ne space.
loop at itab1.
select single aufnr strmp from afpo into (itab1-aufnr,itab1-strmp)
where kdauf = itab1-vbeln and kdpos = itab1-posnr and aufnr in so_aufnr
and strmp in so_strmp.
check sy-subrc = 0.
modify itab1.
endloop.
endif.
**********get so's lf data
if solf ne space.
loop at itab1.
select single vbeln erdat from vbfa into (itab1-vbeln1,itab1-erdat1)
where vbelv = itab1-vbeln and posnv = itab1-posnr and vbtyp_n = 'J'.
check sy-subrc = 0.
modify itab1.
endloop.
endif.
**********get sto's lf data
if stolf ne space.
loop at itab1.
select distinct belnr budat from ekbe into (itab1-vbeln2,
itab1-erdat2) where ebeln = itab1-ebeln and bewtp = 'L'.
endselect.
* ORDER BY budat DESCENDING.
check sy-subrc = 0.
modify itab1.
endloop.
endif.
endform.

*---------------------------------------------------------------------*
* FORM po_search *
*---------------------------------------------------------------------*
* search by po *
*---------------------------------------------------------------------*
form po_search.
concatenate '%' so_con '%' into temp_con3. "模糊合同号
concatenate '%' so_pro '%' into temp_pro3. "模糊工程名称
**********get so & po data
select vbkd~bstkd kna1~name1 vbak~netwr vbap~vbeln vbap~posnr vbap~matnr
vbap~kwmeng afpo~aufnr afpo~strmp into table itab1
from vbak inner join vbpa
on vbak~vbeln = vbpa~vbeln
inner join kna1
on vbpa~kunnr = kna1~kunnr
inner join vbkd
on vbak~vbeln = vbkd~vbeln
inner join vbap
on vbak~vbeln = vbap~vbeln
inner join afpo
on afpo~kdauf = vbak~vbeln
and afpo~kdpos = vbap~posnr
where vbkd~posnr = '000000'
and vbpa~posnr = '000000'
and vbap~abgru = space "行项目未被拒绝
and vbak~auart in so_auart "销售单据类型
and vbak~vbeln in so_vbeln "销售订单号
and vbak~vkbur in so_vkbur "销售办公室
and vbak~vkgrp in so_vkgrp "销售组
and vbak~erdat in so_erdat "销售订单创建日期
and vbpa~kunnr in so_kunnr "付款方
and vbpa~parvw = 'RG'
and vbap~matnr in so_matnr "物料编码
and vbap~werks in so_werks "工厂
* and vbke~bstkd cn ''.
and vbkd~bstkd like temp_pro3 "合同号@项目名称
and vbkd~bstkd like temp_con3 "合同号@项目名称
and afpo~aufnr in so_aufnr "生产订单号
and afpo~strmp in so_strmp. "订单开始日期
loop at itab1.
split itab1-bstkd at '@' into itab1-contract itab1-project.
itab1-netwr = itab1-netwr * '1.17'.
modify itab1.
endloop.
**********get so's lf data
if solf ne space.
loop at itab1.
select single vbeln erdat from vbfa into (itab1-vbeln1,itab1-erdat1)
where vbelv = itab1-vbeln and posnv = itab1-posnr and vbtyp_n = 'J'.
check sy-subrc = 0.
modify itab1.
endloop.
endif.
**********get sto data
if sto ne space.
loop at itab1.
****delete contract's '('and ')'
temp_con = itab1-contract.
* CHECK itab1-contract NE space.
if itab1-contract = space and so_ebeln[] is initial and
so_aedat[] is initial.
continue.
endif.
split temp_con at '(' into temp_con1 temp_con2.
concatenate temp_con1 temp_con2 into temp_con.
split temp_con at ')' into temp_con1 temp_con2.
concatenate temp_con1 temp_con2 into temp_con.
temp_con1 = temp_con.
temp_con2 = temp_con.
translate temp_con1 to upper case.
translate temp_con2 to lower case.
select distinct ebeln from ekpo into itab1-ebeln
where ebeln in so_ebeln and ( bednr =
temp_con1 or bednr = temp_con2 ).
select single aedat from ekko into itab1-aedat
where ebeln = itab1-ebeln and aedat in so_aedat.
endselect.
check sy-subrc = 0.
modify itab1.
endloop.
endif.
**********get sto's lf data
if stolf ne space.
loop at itab1.
select distinct belnr budat from ekbe into (itab1-vbeln2,
itab1-erdat2) where ebeln = itab1-ebeln and bewtp = 'L'.
endselect.
check sy-subrc = 0.
modify itab1.
endloop.
endif.
endform.
*---------------------------------------------------------------------*
* FORM output *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
form output.
********output
* add_field 'CONTRACT' '合同号' '20'.
add_field 'CONTRACT' text-060 '20'.
add_field 'PROJECT' '工程名称' '40'.
*add_field 'BSTKD' '合同号@项目名称' '35'.
add_field 'NAME1' '付款方' '35'.
add_field 'VBELN' '销售订单号' '10'.
add_field 'MATNR' '行项目物料号' '12'.
add_field 'KWMENG' '屏体数量' '15'.
if po ne space.
add_field 'AUFNR' '生产订单号' '12'.
add_field 'STRMP' '生产订单开始日期' '16'.
endif.
if solf ne space.
add_field 'VBELN1' '工程交货单号' '12'.
add_field 'ERDAT1' '工程交货单创建日期' '18'.
endif.
if sto ne space.
add_field 'EBELN' '最近移库单号' '12'.
add_field 'AEDAT' '移库单创建日期' '14'.
endif.
if stolf ne space.
add_field 'VBELN2' '移库单最近交货单号' '18'.
add_field 'ERDAT2' '移库单交货单创建日期' '20'.
endif.
add_field 'NETWR' '工程价格' '15'.


call function 'REUSE_ALV_LIST_DISPLAY'
exporting
i_buffer_active = 'X'
i_callback_program = g_repid
it_fieldcat = it_fieldcat
is_layout = gs_layout
i_callback_user_command = g_user_command
i_save = g_save
is_variant = gs_variant
it_events = gt_events[]
tables
t_outtab = itab1
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 user_command *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --&gt R_UCOMM *
* --&gt RS_SELFIELD *
*---------------------------------------------------------------------*
form user_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
case r_ucomm.
when '&IC1'. " SAP standard code for double-clicking
if rs_selfield-sel_tab_field = 'ITAB1-VBELN'.
set parameter id 'AUN' field rs_selfield-value.
call transaction 'VA03' and skip first screen.
endif.
if rs_selfield-sel_tab_field = 'ITAB1-AUFNR'.
set parameter id 'ANR' field rs_selfield-value.
call transaction 'CO03' and skip first screen.
endif.
if rs_selfield-sel_tab_field = 'ITAB1-MATNR'.
set parameter id 'MAT' field rs_selfield-value.
call transaction 'MM03' and skip first screen.
endif.
if rs_selfield-sel_tab_field = 'ITAB1-VBELN1' or
rs_selfield-sel_tab_field = 'ITAB1-VBELN2'.
set parameter id 'VL' field rs_selfield-value.
call transaction 'VL03N' and skip first screen.
endif.
if rs_selfield-sel_tab_field = 'ITAB1-EBELN'.
set parameter id 'BES' field rs_selfield-value.
call transaction 'ME23N'.
endif.
endcase.
endform.
*&--------------------------------------------------------------------*
*& Form LAYOUT_INIT
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* --&gtRS_LAYOUT text
*---------------------------------------------------------------------*
form layout_init using rs_layout type slis_layout_alv.
*"Build layout for list display
rs_layout-detail_popup = 'X'.
rs_layout-colwidth_optimize = 'X'.
endform. "LAYOUT_INIT

*&--------------------------------------------------------------------*
*& Form EVENTTAB_BUILD
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* --&gtRT_EVENTS text
*---------------------------------------------------------------------*
form eventtab_build using rt_events type slis_t_event.
*"Registration of events to happen during list display
data: ls_event type slis_alv_event.
*
call function 'REUSE_ALV_EVENTS_GET'
exporting
i_list_type = 0
importing
et_events = rt_events.
read table rt_events with key name = slis_ev_top_of_page
into ls_event.
if sy-subrc = 0.
move g_top_of_page to ls_event-form.
append ls_event to rt_events.
endif.
endform. "EVENTTAB_BUILD
"
*&--------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
form top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
i_logo = 'LOGO_YH01'
it_list_commentary = gt_list_top_of_page.
endform. "TOP_OF_PAGE
"
*&--------------------------------------------------------------------*
*& Form COMMENT_BUILD
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* --&gtLT_TOP_OF_Ptext
*---------------------------------------------------------------------*
form comment_build using lt_top_of_page type
slis_t_listheader.
data: ls_line type slis_listheader.
clear ls_line.
ls_line-typ = 'H'.
ls_line-info = text-100.
append ls_line to lt_top_of_page.
endform. "COMMENT_BUILD


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/190059/viewspace-476542/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/190059/viewspace-476542/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值