abap模板 私用
***********************************************************
*Program Name:
*Project: ICRD SAP
*ProgramTitle: SAP取HANA数据库(ZINTFBONDRELT)到中间表ZPPT024
*Created by: LINTC
*Created on: 2021/11/01
*Version:1.0
*Function Description:
*
*Modification Log:
***********************************************************
*NUM Date Programmer Correction_Num Description
***********************************************************
report zmmr_print_po_cn.
TYPE-POOLS:SLIS.
*表接口
tables: ekko,ekpo,rseg.
*定义结构
types:
begin of ty_ekko,
ebeln like ekko-ebeln, "采购订单编号
aedat like ekko-aedat, "发布日期
telf1 like ekko-telf1, "电话
verkf like ekko-verkf, "联系人
zterm like ekko-zterm, "支付条件
waers like ekko-waers, "货币
lifnr like ekko-lifnr, "供应商编号
ebelp like ekpo-ebelp, "采购订单项目
banfn like ekpo-banfn, "采购申请
werks like ekpo-werks, "工厂
matnr like ekpo-matnr, "物料
txz01 like ekpo-txz01, "描述
menge like ekpo-menge, "采购订单数量
meins like ekpo-meins, "单位
netpr like ekpo-netpr, "单价
netwr like ekpo-netwr, "订单金额
mwskz like ekpo-mwskz, "税率
inco1 like ekpo-inco1, "贸易条件
inco2 like ekpo-inco2, "贸易条件
matkl like ekpo-matkl,
spras like ekko-spras,
end of ty_ekko,
begin of ty_t052u,
zterm like t052u-zterm,
text1 like t052u-text1,
end of ty_t052u,
begin of ty_eket,
ebeln like eket-ebeln, "采购订单编号
ebelp like eket-ebelp, "采购订单项目
eindt like eket-eindt, "交货期限
end of ty_eket,
begin of ty_lfa1,
lifnr like lfa1-lifnr, "供应商编号
name1 like lfa1-name1, "供应商描述
stras like lfa1-stras, "地址
telfx like lfa1-telfx, "传真
adrnr like lfa1-adrnr, "地址编号
end of ty_lfa1,
begin of ty_adr6,
addrnumber like adr6-addrnumber, "地址编号
smtp_addr like adr6-smtp_addr, "E_mail
end of ty_adr6,
begin of ty_konp,
kbetr like konp-kbetr, "税率
konwa like konp-konwa, "比率单位
mwsk1 like konp-mwsk1,
tax(5),
total(6) type p decimals 2 ,
end of ty_konp,
begin of ty_disp,
ebeln like ekko-ebeln, "采购订单编号
ebelp like ekpo-ebelp, "采购订单项目
aedat like ekko-aedat, "发布日期
banfn like ekpo-banfn, "采购申请
lifnr like ekko-lifnr, "供应商编号
werks like ekpo-werks, "工厂
matnr like ekpo-matnr, "物料
txz01 like ekpo-txz01, "描述
menge like ekpo-menge, "采购订单数量
menge2 type char18, "采购订单数量
eindt like eket-eindt, "交货期限
telf1 like ekko-telf1, "电话
verkf like ekko-verkf, "联系人
zterm like ekko-zterm, "支付条件
inco1 like ekpo-inco1, "贸易条件
inco2 like ekpo-inco2, "贸易条件
waers like ekko-waers, "货币
meins like ekpo-meins, "单位
netpr like ekpo-netpr, "单价
netwr like ekpo-netwr, "订单金额
total_netwr like ekpo-netwr, "税后总额
tax(5), "税率
total(6) type p decimals 2,
txt type char120,
telfx like lfa1-telfx, "传真
name1 like lfa1-name1, "供应商名称
stras like lfa1-stras, "地址
smtp_addr like adr6-smtp_addr, "E_mail
text1 like t052u-text1,
sel type c,
spras like ekko-spras,
matkl like ekpo-matkl,
end of ty_disp.
*----------------------------------------------------------------------*
* Global Data Declaration
*----------------------------------------------------------------------*
data:gs_disp type ty_disp,
gt_disp type table of ty_disp.
data:gt_fieldcat type lvc_t_fcat.
data:gv_index type i.
data:gv_repid like sy-repid.
DATA:gs_layout TYPE lvc_s_layo.
*-----------------------------------------------------------------------*
*选择屏幕定义
*-----------------------------------------------------------------------*
selection-screen:begin of block b1 with frame title text-001.
select-options:
s_lifnr for ekko-lifnr,
s_aedat for ekko-aedat,
s_ebeln for ekpo-ebeln.
selection-screen end of block b1.
*&---------------------------------------------------------------------*
*屏幕初始化
*&---------------------------------------------------------------------*
initialization.
*&---------------------------------------------------------------------*
* 屏幕检查
*&---------------------------------------------------------------------*
at selection-screen.
*&---------------------------------------------------------------------*
*取数
*&---------------------------------------------------------------------*
start-of-selection.
*取数
perform frm_get_data.
*ALV显示
perform frm_disp_data.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
form frm_get_data .
data:ls_ekko type ty_ekko,
lt_ekko type table of ty_ekko.
data:ls_lfa1 type ty_lfa1,
lt_lfa1 type table of ty_lfa1.
data:ls_eket type ty_eket,
lt_eket type table of ty_eket.
data:ls_adr6 type ty_adr6,
lt_adr6 type table of ty_adr6.
data:ls_konp type ty_konp,
lt_konp type table of ty_konp.
data:ls_t052u type ty_t052u,
lt_t052u type table of ty_t052u.
select
a~ebeln "采购订单编号
a~aedat "发布日期
a~telf1 "电话
a~verkf "联系人
a~zterm "支付条件
a~waers "货币
a~lifnr "供应商编号
b~ebelp "采购订单项目
b~banfn "采购申请
b~werks "工厂
b~matnr "物料
b~txz01 "描述
b~menge "采购订单数量
b~meins "单位
b~netpr "单价
b~netwr "订单金额
b~mwskz "税率
b~matkl
b~loekz
a~inco1 "贸易条件
a~inco2
a~spras
from ekko as a inner join ekpo as b
on a~ebeln = b~ebeln
into corresponding fields of table lt_ekko
where a~lifnr in s_lifnr
and b~aedat in s_aedat
and a~ebeln in s_ebeln
and b~loekz <> 'L'.
sort lt_ekko.
if lt_ekko is not initial.
select
zterm
text1
from t052u into corresponding fields of table lt_t052u
for all entries in lt_ekko
where zterm = lt_ekko-zterm
and spras = sy-langu.
sort lt_t052u.
select
kbetr "税率
konwa "比率单位
mwsk1
from konp into corresponding fields of table lt_konp
for all entries in lt_ekko
where mwsk1 = lt_ekko-mwskz
and kschl = 'MWVS'
and mwsk1 ne ''
and kbetr ne ''.
sort lt_konp.
* 根据税码取税率
if lt_konp is not initial.
"DELETE ADJACENT DUPLICATES FROM lt_konp.
loop at lt_konp into ls_konp.
ls_konp-tax = ls_konp-kbetr / 10.
concatenate ls_konp-tax ls_konp-konwa into ls_konp-tax.
modify lt_konp from ls_konp transporting tax.
clear ls_konp.
endloop.
endif.
if lt_konp is not initial.
loop at lt_konp into ls_konp.
ls_konp-total = ls_konp-kbetr / 1000.
modify lt_konp from ls_konp transporting total.
clear ls_konp.
endloop.
endif.
select
ebeln "采购订单编号
ebelp "采购订单项目
eindt "交货期限
from eket into corresponding fields of table lt_eket
for all entries in lt_ekko
where ebeln = lt_ekko-ebeln
and ebelp = lt_ekko-ebelp.
sort lt_eket.
select
lifnr "供应商编号
name1 "供应商描述
stras "地址
telfx "传真
adrnr "
from lfa1
into corresponding fields of table lt_lfa1
for all entries in lt_ekko
where lifnr = lt_ekko-lifnr.
sort lt_lfa1.
if lt_lfa1 is not initial.
select
addrnumber
smtp_addr "E_mail
from adr6
into corresponding fields of table lt_adr6
for all entries in lt_lfa1
where addrnumber = lt_lfa1-adrnr.
sort lt_adr6.
endif.
loop at lt_ekko into ls_ekko.
move-corresponding ls_ekko to gs_disp.
read table lt_eket into ls_eket with key ebeln = gs_disp-ebeln
ebelp = gs_disp-ebelp.
if sy-subrc = 0.
gs_disp-eindt = ls_eket-eindt. "交货期限
endif.
read table lt_lfa1 into ls_lfa1 with key lifnr = gs_disp-lifnr.
if sy-subrc = 0.
gs_disp-name1 = ls_lfa1-name1.
gs_disp-stras = ls_lfa1-stras.
gs_disp-telfx = ls_lfa1-telfx.
endif.
read table lt_adr6 into ls_adr6 with key addrnumber = ls_lfa1-adrnr.
if sy-subrc = 0.
gs_disp-smtp_addr = ls_adr6-smtp_addr. " 邮件地址
endif.
read table lt_konp into ls_konp with key mwsk1 = ls_ekko-mwskz.
if sy-subrc = 0.
gs_disp-tax = ls_konp-tax.
gs_disp-total = ls_konp-total.
endif.
read table lt_t052u into ls_t052u with key zterm = ls_ekko-zterm.
if sy-subrc = 0.
gs_disp-text1 = ls_t052u-text1.
endif.
gs_disp-total_netwr = gs_disp-netwr + ( gs_disp-netwr * gs_disp-total ).
write gs_disp-menge to gs_disp-menge2 unit gs_disp-meins.
condense gs_disp-menge2.
append gs_disp to gt_disp.
clear gs_disp.
endloop.
sort gt_disp.
endif.
if gt_disp is initial.
message s398(00) with '没有满足条件的数据' display like 'E'.
leave list-processing.
endif.
endform. "FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_DISP_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
form frm_disp_data .
* 局部变量定义
data: ls_events type slis_alv_event,
lt_event type slis_t_event.
* 局部变量定义
data: ls_layout type lvc_s_layo. "界面控制结构
clear:gv_index,gt_fieldcat.
gv_repid = sy-repid.
* FIELD设置
perform frm_edit_fieldcat using 'EBELN' text-011.
perform frm_edit_fieldcat using 'AEDAT' text-012.
perform frm_edit_fieldcat using 'BANFN' text-013.
perform frm_edit_fieldcat using 'LIFNR' text-014.
perform frm_edit_fieldcat using 'NAME1' text-015.
perform frm_edit_fieldcat using 'STRAS' text-016.
perform frm_edit_fieldcat using 'TELF1' text-017.
perform frm_edit_fieldcat using 'TELFX' text-018.
perform frm_edit_fieldcat using 'VERKF' text-019.
perform frm_edit_fieldcat using 'SMTP_ADDR' text-020.
perform frm_edit_fieldcat using 'ZTERM' text-021.
perform frm_edit_fieldcat using 'EBELP' text-022.
perform frm_edit_fieldcat using 'MATNR' text-023.
perform frm_edit_fieldcat using 'TXZ01' text-024.
perform frm_edit_fieldcat using 'MENGE2' text-025.
perform frm_edit_fieldcat using 'MEINS' text-026.
perform frm_edit_fieldcat using 'NETPR' text-027.
perform frm_edit_fieldcat using 'WAERS' text-028.
perform frm_edit_fieldcat using 'NETWR' text-029.
perform frm_edit_fieldcat using 'EINDT' text-030.
perform frm_edit_fieldcat using 'TAX' text-031.
perform frm_edit_fieldcat using 'INCO1' text-032.
perform frm_edit_fieldcat using 'TOTAL_NETWR' text-033.
perform frm_edit_fieldcat using 'MWSKZ' text-034.
ls_layout-zebra = 'X'.
ls_layout-cwidth_opt = 'X'.
ls_layout-sel_mode = 'D'.
ls_layout-totals_bef ='X'.
ls_layout-box_fname = 'SEL'.
call function 'REUSE_ALV_GRID_DISPLAY_LVC'
exporting
i_callback_program = sy-repid
i_callback_user_command = 'FRM_SET_COMMAND'
i_callback_pf_status_set = 'FRM_SET_STATUS'
it_fieldcat_lvc = gt_fieldcat
is_layout_lvc = ls_layout
* it_events = lt_event
tables
t_outtab = gt_disp.
endform. "FRM_DISP_DATA
*&---------------------------------------------------------------------*
*& Form FRM_EDIT_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0639 text
* -->P_TEXT_011 text
*----------------------------------------------------------------------*
form frm_edit_fieldcat using p_field type string
p_text type string.
* 局部变量定义
data:
ls_fieldcat type lvc_s_fcat, "FIELDCAT结构
ls_stylelin type lvc_s_styl.
add 1 to gv_index.
ls_fieldcat-col_pos = gv_index.
ls_fieldcat-fieldname = p_field.
ls_fieldcat-coltext = p_text.
* IF P_FIELD = 'MATNR'.
* LS_FIELDCAT-CONVEXIT = 'MATN1'.
if p_field = 'LIFNR'.
ls_fieldcat-convexit = 'ALPHA'.
elseif p_field = 'MATNR'.
ls_fieldcat-convexit = 'ALPHA'.
* ELSEIF P_FIELD = 'MEINS'.
* LS_FIELDCAT-CONVEXIT = 'CUNIT'.
elseif p_field = 'VERKF'.
ls_fieldcat-edit = 'X'.
elseif p_field = 'TELF1'.
ls_fieldcat-edit = 'X'.
elseif p_field = 'SEL'.
ls_fieldcat-checkbox = 'X'.
endif.
append ls_fieldcat to gt_fieldcat.
endform. "FRM_EDIT_FIELDCAT
*&---------------------------------------------------------------------*
*& FRM_SET_STATUS
*&---------------------------------------------------------------------*
* 自定义状态栏
*----------------------------------------------------------------------*
form frm_set_status using excluding .
DATA lt_exfcode TYPE TABLE OF sy-ucomm.
APPEND '&PRIN' TO lt_exfcode.
set pf-status 'STANDARD_FULLSCREEN'EXCLUDING lt_exfcode.
endform. "FRM_SET_STATUS
*&---------------------------------------------------------------------*
*& Form FRM_SET_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->I_SELFIELD text
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_SET_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->I_SELFIELD text
*----------------------------------------------------------------------*
form frm_set_command using p_ucomm type sy-ucomm
i_selfield type slis_selfield.
DATA:ls_stable TYPE lvc_s_stbl.
DATA:lr_grid TYPE REF TO cl_gui_alv_grid.
ls_stable-ROW = 'X'.
ls_stable-COL = 'X'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
CASE p_ucomm.
WHEN '&IC1'.
PERFORM frm_ic1_sel USING i_selfield-tabindex.
ENDCASE.
* 回写ALV变化过后的布局参数
CALL METHOD LR_GRID->GET_FRONTEND_LAYOUT
IMPORTING
ES_LAYOUT = GS_LAYOUT.
GS_LAYOUT-CWIDTH_OPT = 'X'.
CALL METHOD LR_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = GS_LAYOUT.
i_selfield-refresh = 'X'. "自动刷新
CALL METHOD lr_grid->refresh_table_display
EXPORTING is_stable = ls_stable.
endform. "FRM_SET_COMMAND
*&---------------------------------------------------------------------*
*& Form FORM_PRINT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form form_print_data .
data: fm_name type rs38l_fnam,
output_options type ssfcompop,
control_parameters type ssfctrlop,
output_info type ssfcrescl.
data: option type ssfcresop. "控制参数
data:ls_item type zmm_po_item,
lt_item type table of zmm_po_item.
data:ls_header type zmm_po_header,
lt_header type table of zmm_po_header.
data:lv_sfname type tdsfname.
clear: lt_header,
ls_header,
ls_item,
lt_item.
data :
vl_tdname like thead-tdname.
data:ls_tline type ztline,
lt_tline type table of ztline.
data lv_tdname like thead-tdname.
data lv_index type i.
control_parameters-no_dialog = ''.
control_parameters-preview = ''.
control_parameters-no_open = 'X'.
control_parameters-no_close = 'X'.
lv_sfname = 'Z_MMPO_CN'.
call function 'SSF_OPEN'
exporting
control_parameters = control_parameters
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = lv_sfname "smartforms 名
importing
fm_name = fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3.
loop at gt_disp into gs_disp where sel = 'X'.
move-corresponding gs_disp to ls_header.
append ls_header to lt_header.
clear ls_header.
endloop.
sort lt_header.
delete adjacent duplicates from lt_header.
loop at lt_header into ls_header.
clear: ls_item,
lt_item.
loop at gt_disp into gs_disp where ebeln = ls_header-ebeln.
move-corresponding gs_disp to ls_item.
call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
exporting
input = ls_item-matnr
importing
output = ls_item-matnr.
call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
exporting
input = ls_item-ebelp
importing
output = ls_item-ebelp.
append ls_item to lt_item.
endloop.
vl_tdname = gs_disp-ebeln.
call function 'READ_TEXT'
exporting
client = sy-mandt
id = 'F01'
language = ls_header-spras
name = vl_tdname
object = 'EKKO'
tables
lines = lt_tline
exceptions
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
others = 8.
data lv_text(360).
data lv_lines type i.
data lv_mod type i.
data lv_div type i.
data clen type i.
constants: gc_lines_pace type i value 4.
data: is_tline type ztline.
data: it_tline type table of ztline.
data: lv_txt(360).
data: lt_line type table of ztline,
ls_line type ztline.
* 申请备注分行
loop at lt_tline into ls_tline.
lv_index = sy-tabix + 1.
clear ls_line.
read table lt_tline into ls_line index lv_index.
if sy-subrc = 0.
if ls_line-tdformat = '*'.
if lv_text is not initial.
concatenate lv_text ls_tline-tdline into lv_text.
ls_line-tdline = lv_text.
append ls_line to lt_line.
else.
append ls_tline to lt_line.
endif.
else.
concatenate lv_text ls_tline-tdline into lv_text.
continue.
endif.
else.
if lv_text is not initial .
concatenate lv_text ls_tline-tdline into lv_text.
ls_line-tdline = lv_text.
append ls_line to lt_line.
else.
append ls_tline to lt_line.
endif.
endif.
clear : ls_tline , lv_text ,ls_line.
endloop.
data:int type i,
visual type i,
len type i,
i type i.
loop at lt_line into ls_line.
lv_index = sy-tabix.
read table lt_line into is_tline index lv_index.
lv_text = is_tline-tdline.
if sy-subrc = 0.
clen = strlen( lv_text ).
int = 0.
do clen times.
call function 'NLS_VISUAL_CHARLEN'
exporting
str = lv_text+int(1)
importing
len_visual = visual.
if visual = 1 .
len = len + 1.
else.
len = len + 2.
endif.
int = int + 1.
if len >= 115.
lv_txt = lv_text(int).
is_tline-tdline = lv_txt.
append is_tline to it_tline.
clear : lv_txt.
lv_txt = lv_text+int.
lv_text = lv_txt.
clear : lv_txt,len , int.
endif.
enddo.
if len < 115 and int <> 0.
lv_txt = lv_text(int).
is_tline-tdline = lv_txt.
append is_tline to it_tline.
endif.
endif.
clear : lv_text , lv_txt ,int.
endloop.
describe table it_tline lines lv_lines.
lv_mod = lv_lines mod gc_lines_pace.
lv_mod = gc_lines_pace - lv_mod.
do lv_mod times.
append initial line to it_tline.
enddo.
call function fm_name
exporting
control_parameters = control_parameters
output_options = output_options
header = ls_header "传抬头数据
importing
job_output_options = option "输出参数
tables
item = lt_item "传所选择行项目明细内表
gt_line = it_tline
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
clear: ls_header.
refresh: lt_item.
endloop.
call function 'SSF_CLOSE'
importing
job_output_info = output_info
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
others = 4.
endform. " FORM_PRINT_DATA
post SAP-Garson
原文链接:https://blog.csdn.net/weixin_42441716/article/details/125183367文章来自于网络,如果侵犯了您的权益,请联系站长删除!