abap FM:读取公司代码
Legge le info su Bukrs(dati di testata来自indirizzi codice fiscale / piva ecc ecc)con una sola chiamata fm
FM Company code read
CALL FUNCTION 'COMPANY_CODE_READ'
EXPORTING
i_bukrs = <accit>-bukrs
IMPORTING
e_t001 = l_t001.
abap FIEDLCAT:FORM中的CL_SALV示例
FIEDLCAT CL_SALV example in FORM
FORM f_create_fieldcat USING p_tablename TYPE STANDARD TABLE
CHANGING pt_fieldcat TYPE lvc_t_fcat.
FIELD-SYMBOLS <lfs_fieldcat> TYPE lvc_s_fcat.
DATA: lo_columns TYPE REF TO cl_salv_columns_table,
lo_aggregations TYPE REF TO cl_salv_aggregations,
lo_salv_table TYPE REF TO cl_salv_table,
lr_table TYPE REF TO data.
FIELD-SYMBOLS: <table> TYPE STANDARD TABLE.
* create unprotected table from import data
CREATE DATA lr_table LIKE p_tablename.
ASSIGN lr_table->* TO <table>.
TRY.
cl_salv_table=>factory(
EXPORTING
list_display = abap_false
IMPORTING
r_salv_table = lo_salv_table
CHANGING
t_table = <table> ).
CATCH cx_salv_msg. "#EC NO_HANDLER
ENDTRY.
* get columns object (raw fieldcatalog)
lo_columns = lo_salv_table->get_columns( ).
* get aggregationss object (sorts)
lo_aggregations = lo_salv_table->get_aggregations( ).
pt_fieldcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = lo_columns
r_aggregations = lo_aggregations ).
ENDFORM. "f_create_fieldcat
abap SELECT:LEFT OUTER JOIN示例
Caso in cui una加入puòesrereusata in LEFT ... se non trovo descrizioni / testi prendo comunque i dati dalla tabella left。 <br/> <br/> L'estrazione non viene fermata来自nella inner
SELECT LEFT OUTER JOIN EXAMPLE
SELECT cepc~prctr cepc~kokrs abtei khinr cepct~ltext
FROM cepc LEFT OUTER JOIN cepct ON cepc~prctr = cepct~prctr
AND cepc~datbi = cepct~datbi
AND cepc~kokrs = cepct~kokrs
AND cepct~spras = sy-langu
INTO CORRESPONDING FIELDS OF TABLE lt_cepc.
abap MACRO:RIEMPI RANGE DA TABELLA
MACRO RIEMPI RANGE DA TABELLA
DEFINE _get_range_from_table.
LOOP AT &2 ASSIGNING <lfs_struct>.
ASSIGN COMPONENT &3 OF STRUCTURE <lfs_struct> TO <lfs_field>.
CHECK sy-subrc IS INITIAL.
APPEND VALUE #( sign = 'I' option = 'EQ' low = <lfs_field> ) TO &1.
ENDLOOP.
SORT &1 BY low.
DELETE ADJACENT DUPLICATES FROM &1 COMPARING low.
END-OF-DEFINITION.
ESEMPIO DI APPLICAZIONE
_get_range_from_table lr_belnr lt_data 'BELNR'.
_get_range_from_table lr_gjahr lt_data 'GJAHR'.
_get_range_from_table lr_bukrs lt_data 'BUKRS'.
_get_range_from_table lr_buzei lt_data 'BUZEI'.
abap 退出MIRO LMR1M001
EXIT_SAPLMRMP_010.abap
*&---------------------------------------------------------------------*
*& Include ZXM08U16
*&---------------------------------------------------------------------*
******************************************************
* Validar se a Nota Fiscal foi preenchida corretamente
*
*DATA: nf(10) TYPE c,
* nf_out(7) TYPE c.
*
*nf = e_trbkpv-xblnr.
*
*CALL FUNCTION 'ZLW_CHECK_NF'
* EXPORTING
* nf = nf
* EXCEPTIONS
* invalid_format = 1
* OTHERS = 2.
*
*IF sy-subrc IS NOT INITIAL.
* MESSAGE e021(zlw) WITH nf.
** Nota Fiscal (&) não informada ou formato inválido. Formato: 0000000
*ENDIF.
*
*
*************************
** Tipos permitidos de Categoria de Nota Fiscal:
** EE - NF de Entrada para Estoque
** EC - NF de Entrada Conjugada (para Estoque + Serviço)
** ES - NF de Entrada de Serviço
** EL - NF de Entrada para NF Eletrônica do Munic. de SP
*IF e_trbkpv-j_1bnftype NE 'EE' AND
* e_trbkpv-j_1bnftype NE 'EC' AND
* e_trbkpv-j_1bnftype NE 'ES' AND
* e_trbkpv-j_1bnftype NE 'EL' AND
* e_trbkpv-blart EQ 'RE'.
* MESSAGE e016(zmm) WITH e_trbkpv-j_1bnftype.
** Categoria de Nota Fiscal (&) não é permitida. Use apenas EE,EC,ES ou EL.
*ENDIF.
*
*
*IF e_trbkpv-j_1bnftype EQ 'EE'. "Verifica se fornecedor pode usar NF de Entrada em Estoque
* PERFORM check_valid_ee
* TABLES e_trbkpv-h_rbws "Tabela de impostos
* USING e_trbkpv-j_1bnftype "Tipo de NF
* e_trbkpv-lifnr "Codigo do Fornecedor
* e_trbkpv-bukrs. "Empresa
*
*ELSEIF e_trbkpv-j_1bnftype EQ 'EC'. "Verif. se forn. pode usar NF Conjugada
* PERFORM check_valid_ec
* USING e_trbkpv-j_1bnftype "Tipo de NF
* e_trbkpv-lifnr "Codigo do Fornecedor
* e_trbkpv-bukrs. "Empresa
*
*ELSEIF e_trbkpv-j_1bnftype EQ 'ES'. "Verif. se forn. pode usar NF Servico
* PERFORM check_valid_es
* USING e_trbkpv-j_1bnftype "Tipo de NF
* e_trbkpv-lifnr "Codigo do Fornecedor
* e_trbkpv-bukrs. "Empresa
*
*ELSEIF e_trbkpv-j_1bnftype EQ 'EL'. "Vefir. se forn. pode usar NF Eletronica Munic. SP
* PERFORM check_valid_el
* USING e_trbkpv-j_1bnftype "Tipo de NF
* e_trbkpv-lifnr "Codigo do Fornecedor
* e_trbkpv-bukrs. "Empresa
*ENDIF.
*
*
*IF e_trbkpv-j_1bnftype EQ 'EC' OR
* e_trbkpv-j_1bnftype EQ 'ES'.
*
* DATA: g_typ_nf LIKE bseg-xref1,
* g_ser_nf LIKE bseg-xref2.
*
* IMPORT g_typ_nf FROM MEMORY ID 'Z_NF_TYPE'.
* IMPORT g_ser_nf FROM MEMORY ID 'Z_NF_SERIE'.
*
* DATA: t_values TYPE TABLE OF setvalues.
* CALL FUNCTION 'G_SET_TREE_IMPORT'
* EXPORTING
* setid = '0000TIPO_NF'
* TABLES
* set_values = t_values
* EXCEPTIONS
* set_not_found = 1
* illegal_field_replacement = 2
* illegal_table_replacement = 3
* set_is_damaged = 4
* OTHERS = 5.
* CHECK sy-subrc IS INITIAL.
*
* IF g_typ_nf IS INITIAL OR g_ser_nf IS INITIAL.
* MESSAGE e003(zlw).
** Tipo Nota Fiscal e Série são de Preenchimento Obrigatório
* ELSEIF g_typ_nf IS NOT INITIAL.
*
* READ TABLE t_values WITH KEY FROM = g_typ_nf TRANSPORTING NO FIELDS.
* IF sy-subrc IS NOT INITIAL.
* MESSAGE e019(zlw).
** Tipo Nota Fiscal e Série são de Preenchimento Obrigatório
* ENDIF.
* ENDIF.
*ENDIF.
*
*TYPE-POOLS: mmcr.
*
*DATA: tdrseg LIKE LINE OF e_tdrseg,
* bukrs TYPE bukrs.
*
*LOOP AT e_tdrseg INTO tdrseg.
*
* IF tdrseg-ebeln IS NOT INITIAL.
* SELECT SINGLE bukrs FROM ekko INTO bukrs
* WHERE ebeln = tdrseg-ebeln.
*
* CHECK sy-subrc IS INITIAL.
* IF bukrs NE e_trbkpv-bukrs.
* MESSAGE e033(zmm) WITH e_trbkpv-bukrs bukrs tdrseg-ebeln.
** A Empresa da Fatura & diverge da Empresa & do Pedido de Compra &
* ENDIF.
*
* ENDIF.
*
*
*ENDLOOP.
* Check BLDAT vs BUDAT
* BUDAT = Post Date
* BLDAT = Document Date
*
* Rules:
* - BUDAT must be > BLDAT
* - BLDAT - BUDAT (days) must be < 90 days
IF e_trbkpv-bldat "Document Date ex: 20160110
> e_trbkpv-budat. "Post Date ex: 20160101
MESSAGE e090(zmm).
* Data de Lançamento não deve ser anterior a Data de Documento
ELSE.
DATA: days TYPE i,
days_limit TYPE i,
si_value TYPE zelsi_value.
CALL FUNCTION 'ZFMSI_GET_VALUE'
EXPORTING
parameter = 'MIRO_LIMIT'
IMPORTING
value = si_value
EXCEPTIONS
invalid_parameter = 1
invalid_logsys = 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.
days_limit = 90.
ELSE.
days_limit = si_value.
ENDIF.
days = e_trbkpv-budat - e_trbkpv-bldat.
IF days > days_limit.
MESSAGE e091(zmm) WITH days_limit.
* Data de Documento não deve exceder 90 dias da Data de Lançamento
ENDIF.
ENDIF.
" Entrar Condição de pagamento(Cond.pgto na Aba Pagamento),
" para tipo de operação Logística fatura(RD)
IF e_trbkpv-zterm IS INITIAL AND e_trbkpv-vgart EQ 'RD'.
MESSAGE e101(zmm).
ENDIF.
IF e_trbkpv-vgart EQ 'RD'.
IF e_trbkpv-zterm(1) = 'L' OR
e_trbkpv-zterm(1) = 'P'.
DATA: t_vtopis TYPE TABLE OF vtopis,
w_vtopis LIKE LINE OF t_vtopis,
w_t052 TYPE t052.
CLEAR w_t052.
CALL FUNCTION 'FI_TERMS_OF_PAYMENT_CHECK'
EXPORTING
i_zterm = e_trbkpv-zterm
IMPORTING
e_t052 = w_t052
EXCEPTIONS
terms_of_payment = 1
conditions = 2
OTHERS = 3.
IF w_t052-xsplt IS INITIAL.
CALL FUNCTION 'SD_PRINT_TERMS_OF_PAYMENT'
EXPORTING
bldat = e_trbkpv-bldat
budat = e_trbkpv-budat
cpudt = e_trbkpv-cpudt
* LANGUAGE = ' '
terms_of_payment = e_trbkpv-zterm
* COUNTRY = ' '
* HOLDBACK = ' '
* TOP_HOLDBACK_INFO =
* DOCUMENT_CURRENCY = ' '
* IMPORTING
* BASELINE_DATE =
* PAYMENT_SPLIT =
* ZFBDT =
TABLES
top_text_split = t_vtopis
EXCEPTIONS
terms_of_payment_not_in_t052 = 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.
ELSE.
CALL FUNCTION 'SD_PRINT_TERMS_OF_PAYMENT_SPLI'
EXPORTING
bldat = e_trbkpv-bldat
budat = e_trbkpv-budat
cpudt = e_trbkpv-cpudt
* LANGUAGE = ' '
terms_of_payment = e_trbkpv-zterm
wert = e_trbkpv-wwert
waerk = e_trbkpv-waers
* FKDAT = 00000000
* SKFBT = 00000000
* I_COMPANY_CODE =
* I_COUNTRY =
* IMPORTING
* BASELINE_DATE =
TABLES
top_text_split = t_vtopis
EXCEPTIONS
terms_of_payment_not_in_t052 = 1
terms_of_payment_not_in_t052s = 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.
ENDIF.
IF t_vtopis[] IS NOT INITIAL.
SORT t_vtopis BY hdatum.
READ TABLE t_vtopis INDEX 1 INTO w_vtopis.
IF w_vtopis-hdatum < sy-datum.
MESSAGE e149(f5) WITH w_vtopis-hdatum.
* Vencimento líquido a & situa-se no passado
ENDIF.
ENDIF.
ENDIF.
ENDIF.
abap AtualizaçãodeUsuárioscomdadosdeFuncionários
zrbc003.abap
*&---------------------------------------------------------------------*
*& Report ZRBC003
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zrbc003.
TABLES: usr01.
TYPE-POOLS: truxs.
SELECTION-SCREEN BEGIN OF BLOCK usr WITH FRAME .
PARAMETERS:
p_bname LIKE usr01-bname DEFAULT '*'.
SELECTION-SCREEN END OF BLOCK usr.
SELECTION-SCREEN BEGIN OF BLOCK par WITH FRAME .
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY.
PARAMETERS: p_head TYPE char01 DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK par.
SELECTION-SCREEN BEGIN OF BLOCK var.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK var.
TYPES: BEGIN OF ty_excel,
col1(50) TYPE c, "Razão Social
col2(50) TYPE c, "Nome Funcionário
col3(14) TYPE c, "Data Admição
col4(50) TYPE c, "Cargo
col5(7) TYPE c, "Centro de Custo
col6(50) TYPE c, "Descrição Centro de Custo
col7(60) TYPE c, "E-Mail
col8(50) TYPE c, "Gestor Imediato
col9(15) TYPE c, "CPF
END OF ty_excel.
DATA: t_excel TYPE STANDARD TABLE OF ty_excel,
w_excel LIKE LINE OF t_excel.
DATA: it_raw TYPE truxs_t_text_data.
TYPE-POOLS: slis, sydes.
DATA: "Dynpro Control
lvc_t_fcat TYPE lvc_t_fcat,
lvc_t_sort TYPE lvc_t_sort,
lvc_w_layout TYPE lvc_s_layo,
lvc_t_filter TYPE lvc_t_filt.
DATA: BEGIN OF t_output OCCURS 0,
bname LIKE usr01,
END OF t_output.
DATA: g_save,
g_exit,
g_variant TYPE disvariant,
gx_variant TYPE disvariant.
* At selection screen
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
INITIALIZATION.
g_save = 'A'.
CLEAR g_variant.
g_variant-report = sy-cprog.
* Get default variant
gx_variant = g_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = g_save
CHANGING
cs_variant = gx_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_vari = gx_variant-variant.
ENDIF.
* Process on value request
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = g_variant
i_save = g_save
* it_default_fieldcat =
IMPORTING
e_exit = g_exit
es_variant = gx_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF g_exit = space.
p_vari = gx_variant-variant.
ENDIF.
ENDIF.
START-OF-SELECTION.
PERFORM load_excel.
PERFORM load_users.
***********************************************************************
* END-OF-SELECTION.
END-OF-SELECTION.
" For sample, Excel Data transfered to internal table is displayed with write
* LOOP AT it_datatab INTO wa_datatab.
* WRITE:/
* wa_datatab-col1,
* wa_datatab-col2,
* wa_datatab-col3,
* wa_datatab-col4,
* wa_datatab-col5,
* wa_datatab-col6,
* wa_datatab-col7,
* wa_datatab-col8,
* wa_datatab-col9.
* ENDLOOP.
* CALL FUNCTION 'HR_IT_SHOW_ANY_TABLE_ON_ALV'
* TABLES
* table = t_excel
* EXCEPTIONS
* fb_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.
*&---------------------------------------------------------------------*
*& Form LOAD_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_excel .
" Convert Excel Data to SAP internal Table Data
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = p_head
i_tab_raw_data = it_raw " WORK TABLE
i_filename = p_file
TABLES
i_tab_converted_data = t_excel[] "ACTUAL DATA
EXCEPTIONS
conversion_failed = 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. " LOAD_EXCEL
*&---------------------------------------------------------------------*
*& Form LOAD_USERS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_users .
DATA: t_users TYPE TABLE OF bapiusname,
t_return TYPE TABLE OF bapiret2.
CALL FUNCTION 'BAPI_USER_GETLIST'
EXPORTING
* MAX_ROWS = 0
with_username = p_bname
* IMPORTING
* ROWS =
TABLES
* SELECTION_RANGE =
* SELECTION_EXP =
userlist = t_users
return = t_return.
DATA: w_user LIKE LINE OF t_users,
w_output LIKE LINE OF t_output.
CLEAR: t_output[].
LOOP AT t_users INTO w_user.
CLEAR w_output.
w_output-bname = w_user-username.
APPEND w_output TO t_output.
ENDLOOP.
ENDFORM. " LOAD_USERS
abap ZMM006
zmm_po_hist.abap
*&---------------------------------------------------------------------&*
*& Report ZMM_PO_MALOTE &*
*& &*
*----------------------------------------------------------------------&*
REPORT zmm_po_hist NO STANDARD PAGE HEADING MESSAGE-ID 00.
TYPE-POOLS: slis, icon.
TYPES : BEGIN OF ty_po,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
anexo_po TYPE char4 ,
bedat TYPE ekko-bedat,
mtart TYPE ekpo-mtart,
matkl TYPE ekpo-matkl,
matnr TYPE ekpo-matnr,
txz01 TYPE ekpo-txz01,
lifnr TYPE ekko-lifnr,
name1 TYPE lfa1-name1,
menge1 TYPE ekpo-menge,
meins1 TYPE ekpo-meins,
balqty TYPE ekpo-menge,
netpr TYPE ekpo-netpr,
peinh TYPE ekpo-peinh,
mblnr TYPE mseg-mblnr,
dt_migo TYPE mkpf-bldat,
dtc_migo TYPE mkpf-cpudt,
anexo_migo TYPE char4 ,
lblni TYPE essr-lblni,
dt_folha TYPE essr-erdat,
bldat_folha TYPE essr-bldat,
dif_dias TYPE i ,
semaforo TYPE icon_d ,
anexo_folha TYPE char4 ,
zeile TYPE mseg-zeile,
menge2 TYPE mseg-menge,
meins2 TYPE mseg-meins,
werks TYPE mseg-werks,
charg TYPE mseg-charg,
belnr TYPE rbkp-belnr,
anexo_miro TYPE char4 ,
bldat TYPE rbkp-bldat,
fi_belnr TYPE bkpf-belnr,
zterm TYPE rbkp-zterm,
zfbdt TYPE rbkp-zfbdt,
duedt TYPE datum ,
split(4) TYPE c ,
thick(10) TYPE c ,
width(10) TYPE c ,
length(10) TYPE c ,
grade(10) TYPE c ,
zterm_pedido TYPE ekko-zterm,
zterm_fi TYPE bseg-zterm,
ktokk TYPE lfa1-ktokk,
bukrs TYPE ekko-bukrs,
mjahr TYPE mkpf-mjahr,
dt_doc_migo TYPE mkpf-bldat,
END OF ty_po.
TYPES : BEGIN OF ty_ekko,
ebeln TYPE ekko-ebeln,
lifnr TYPE ekko-lifnr,
bedat TYPE ekko-bedat,
zterm TYPE ekko-zterm,
bukrs TYPE ekko-bukrs,
END OF ty_ekko.
TYPES : BEGIN OF ty_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
matnr TYPE ekpo-matnr,
txz01 TYPE ekpo-txz01,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
peinh TYPE ekpo-peinh,
banfn TYPE ekpo-banfn,
bnfpo TYPE ekpo-bnfpo,
mtart TYPE ekpo-mtart,
END OF ty_ekpo.
TYPES : BEGIN OF ty_eban,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
matnr TYPE eban-matnr,
menge TYPE eban-menge,
meins TYPE eban-meins,
END OF ty_eban.
TYPES : BEGIN OF ty_ekbe,
ebeln TYPE ekbe-ebeln,
ebelp TYPE ekbe-ebelp,
belnr TYPE ekbe-belnr,
gjahr TYPE ekbe-gjahr,
buzei TYPE ekbe-buzei,
matnr TYPE ekbe-matnr,
END OF ty_ekbe.
TYPES : BEGIN OF ty_mseg,
mblnr TYPE mseg-mblnr,
mjahr TYPE mseg-mjahr,
zeile TYPE mseg-zeile,
menge TYPE mseg-menge,
meins TYPE mseg-meins,
ebeln TYPE mseg-ebeln,
ebelp TYPE mseg-ebelp,
matnr TYPE mseg-matnr,
werks TYPE mseg-werks,
charg TYPE mseg-charg,
END OF ty_mseg.
TYPES : BEGIN OF ty_rbkp,
belnr TYPE rbkp-belnr,
gjahr TYPE rbkp-gjahr,
bldat TYPE rbkp-bldat,
stblg TYPE rbkp-stblg,
zterm TYPE rbkp-zterm,
zfbdt TYPE rbkp-zfbdt,
budat TYPE rbkp-budat,
cpudt TYPE rbkp-cpudt,
END OF ty_rbkp.
TYPES : BEGIN OF ty_rseg,
belnr TYPE rseg-belnr,
gjahr TYPE rseg-gjahr,
ebeln TYPE rseg-ebeln,
ebelp TYPE rseg-ebelp,
xblnr TYPE rseg-xblnr,
lfbnr TYPE rseg-lfbnr,
lfgja TYPE rseg-lfgja,
lfpos TYPE rseg-lfpos,
END OF ty_rseg.
TYPES : BEGIN OF ty_lfa1,
lifnr TYPE lfa1-lifnr,
ktokk TYPE lfa1-ktokk,
END OF ty_lfa1.
DATA: it_po TYPE STANDARD TABLE OF ty_po,
it_ekko TYPE STANDARD TABLE OF ty_ekko,
it_ekpo TYPE TABLE OF ekpo,
it_eban TYPE STANDARD TABLE OF ty_eban,
it_mseg TYPE STANDARD TABLE OF ty_mseg,
it_rbkp TYPE STANDARD TABLE OF ty_rbkp,
it_rseg TYPE STANDARD TABLE OF ty_rseg,
it_ekbe TYPE STANDARD TABLE OF ekbe,
it_essr TYPE TABLE OF essr,
it_ekbe_migo TYPE TABLE OF ekbe,
it_mkpf TYPE TABLE OF mkpf,
it_srgbtbrel TYPE TABLE OF srgbtbrel,
it_lfa1 TYPE TABLE OF ty_lfa1.
DATA: wa_ekbe_migo TYPE ekbe,
wa_ekbe_migo2 TYPE ekbe,
wa_srgbtbrel TYPE srgbtbrel,
wa_ekbe TYPE ekbe,
wa_mkpf TYPE mkpf,
wa_essr TYPE essr,
wa_po TYPE ty_po,
wa_ekko TYPE ty_ekko,
wa_ekpo TYPE ekpo,
wa_eban TYPE ty_eban,
wa_mseg TYPE ty_mseg,
wa_rbkp TYPE ty_rbkp,
wa_rseg TYPE ty_rseg,
wa_lfa1 TYPE ty_lfa1,
wa_t052 TYPE t052.
DATA: it_fcat TYPE slis_t_fieldcat_alv,
it_lshead TYPE slis_t_listheader,
it_sort TYPE slis_t_sortinfo_alv,
wa_fcat TYPE slis_fieldcat_alv,
wa_lshead TYPE slis_listheader,
wa_layout TYPE slis_layout_alv,
wa_sort TYPE slis_sortinfo_alv.
DATA: it_cl_data LIKE TABLE OF clobjdat,
wa_cl_data LIKE clobjdat.
DATA: c_ekgrp TYPE eban-ekgrp,
c_badat TYPE eban-badat,
c_bsart TYPE ekko-bsart,
c_bukrs TYPE ekko-bukrs,
c_ebeln TYPE ekko-ebeln,
c_ktokk TYPE lfa1-ktokk,
c_grmenge TYPE mseg-erfmg,
c_low(10) TYPE c,
c_high(10) TYPE c,
c_date TYPE string.
DATA: lw_object TYPE sibflporb.
DATA: BEGIN OF t_ebeln_ebelp OCCURS 0,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
END OF t_ebeln_ebelp.
DATA: w_t001w TYPE t001w,
w_t001k TYPE t001k,
t_bseg TYPE TABLE OF bseg,
w_bseg TYPE bseg.
SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_badat FOR c_badat OBLIGATORY,
s_bukrs FOR c_bukrs,
s_ekgrp FOR c_ekgrp,
s_bsart FOR c_bsart,
s_ebeln FOR c_ebeln,
s_ktokk FOR c_ktokk NO INTERVALS.
SELECTION-SCREEN:END OF BLOCK b1.
INITIALIZATION.
DATA wa_indx TYPE indx.
IF s_badat[] IS INITIAL.
IMPORT s_badat[] FROM DATABASE indx(xy) TO wa_indx CLIENT sy-mandt ID 'ZMM006_DATE'.
ENDIF.
AT SELECTION-SCREEN.
DATA wa_indx TYPE indx.
IF s_badat[] IS NOT INITIAL.
EXPORT s_badat[] TO DATABASE indx(xy) FROM wa_indx CLIENT sy-mandt ID 'ZMM006_DATE'.
ENDIF.
START-OF-SELECTION.
PERFORM getdocuments.
PERFORM getdata.
PERFORM process_clear_mseg.
PERFORM setdata.
PERFORM set_vendor_name.
PERFORM set_duedt_migo.
PERFORM fieldcat.
PERFORM display.
*&---------------------------------------------------------------------*
*& Form GETDOCUMENTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM getdocuments .
* SELECT p~ebeln p~ebelp FROM ekpo AS p
* INNER JOIN ekko AS k
* ON k~mandt = p~mandt
* AND k~ebeln = p~ebeln
* INNER JOIN lfa1 AS l
* ON l~lifnr EQ k~lifnr
* INTO TABLE t_ebeln_ebelp
* WHERE ( k~aedat IN s_badat
* OR k~bedat IN s_badat )
* AND p~ebeln IN s_ebeln
* AND p~loekz <> 'L'
* AND k~bukrs IN s_bukrs
* AND k~ekgrp IN s_ekgrp
* AND k~bsart IN s_bsart
* AND l~ktokk IN s_ktokk.
*
* SELECT p~ebeln p~ebelp
* FROM ekpo AS p
* INNER JOIN ekko AS k
* ON k~mandt = p~mandt
* AND k~ebeln = p~ebeln
* INNER JOIN lfa1 AS l
* ON l~lifnr EQ k~lifnr
* APPENDING TABLE t_ebeln_ebelp
* WHERE p~aedat IN s_badat
* AND p~ebeln IN s_ebeln
* AND k~bsart IN s_bsart
* AND k~bukrs IN s_bukrs
* AND k~ekgrp IN s_ekgrp
* AND l~ktokk IN s_ktokk
* AND p~loekz <> 'L'.
*
* SELECT p~ebeln p~ebelp
* FROM eket AS t
* INNER JOIN ekpo AS p
* ON p~mandt = t~mandt
* AND p~ebeln = t~ebeln
* AND p~ebelp = t~ebelp
* INNER JOIN ekko AS k
* ON k~mandt = p~mandt
* AND k~ebeln = p~ebeln
* INNER JOIN lfa1 AS l
* ON l~lifnr EQ k~lifnr
* APPENDING TABLE t_ebeln_ebelp
* WHERE t~eindt IN s_badat
* AND p~ebeln IN s_ebeln
* AND k~bukrs IN s_bukrs
* AND k~ekgrp IN s_ekgrp
* AND k~bsart IN s_bsart
* AND l~ktokk IN s_ktokk
* AND p~loekz <> 'L'.
SELECT p~ebeln p~ebelp
FROM ekbe AS b
INNER JOIN ekpo AS p
ON p~mandt = b~mandt
AND p~ebeln = b~ebeln
AND p~ebelp = b~ebelp
INNER JOIN ekko AS k
ON k~mandt = p~mandt
AND k~ebeln = p~ebeln
INNER JOIN lfa1 AS l
ON l~lifnr EQ k~lifnr
* APPENDING TABLE t_ebeln_ebelp
INTO TABLE t_ebeln_ebelp
WHERE ( b~budat IN s_badat
OR b~bldat IN s_badat )
AND p~ebeln IN s_ebeln
AND k~bsart IN s_bsart
AND k~bukrs IN s_bukrs
AND k~ekgrp IN s_ekgrp
AND l~ktokk IN s_ktokk
AND p~loekz <> 'L'.
SORT t_ebeln_ebelp BY ebeln ebelp.
DELETE ADJACENT DUPLICATES FROM t_ebeln_ebelp COMPARING ALL FIELDS.
ENDFORM. " GETDOCUMENTS
*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
FORM getdata.
CHECK t_ebeln_ebelp[] IS NOT INITIAL.
**--> Seleciona os Itens dos Pedidos de Compras
SELECT *
FROM ekpo INTO TABLE it_ekpo
FOR ALL ENTRIES IN t_ebeln_ebelp
WHERE ebeln = t_ebeln_ebelp-ebeln
AND ebelp = t_ebeln_ebelp-ebelp.
IF it_ekpo[] IS NOT INITIAL.
SELECT ebeln lifnr bedat zterm bukrs
FROM ekko INTO TABLE it_ekko
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln.
SELECT *
FROM ekbe INTO TABLE it_ekbe
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp.
SELECT belnr gjahr ebeln ebelp xblnr lfbnr lfgja lfpos
FROM rseg
INTO TABLE it_rseg
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp.
ENDIF.
IF it_ekbe[] IS NOT INITIAL.
DATA: it_ekbe_essr LIKE it_ekbe.
it_ekbe_essr[] = it_ekbe[].
DELETE it_ekbe_essr WHERE vgabe <> '9'.
SELECT *
FROM essr
INTO TABLE it_essr
FOR ALL ENTRIES IN it_ekbe_essr
WHERE lblni = it_ekbe_essr-belnr.
SELECT mblnr mjahr zeile menge meins ebeln
ebelp matnr werks charg
FROM mseg
INTO TABLE it_mseg
FOR ALL ENTRIES IN it_ekbe
WHERE mblnr = it_ekbe-belnr
AND mjahr = it_ekbe-gjahr
AND zeile = it_ekbe-buzei.
SELECT *
FROM mkpf
INTO TABLE it_mkpf
FOR ALL ENTRIES IN it_mseg
WHERE mblnr = it_mseg-mblnr
AND mjahr = it_mseg-mjahr.
FREE it_ekbe_essr.
ENDIF.
IF it_rseg[] IS NOT INITIAL.
SELECT belnr gjahr budat stblg zterm zfbdt budat cpudt
FROM rbkp
INTO TABLE it_rbkp
FOR ALL ENTRIES IN it_rseg
WHERE belnr = it_rseg-belnr
AND gjahr = it_rseg-gjahr.
ENDIF.
IF it_ekko[] IS NOT INITIAL.
SELECT lifnr ktokk
FROM lfa1 INTO TABLE it_lfa1
FOR ALL ENTRIES IN it_ekko
WHERE lifnr EQ it_ekko-lifnr.
SORT it_lfa1 BY lifnr.
ENDIF.
**--> Seleciona os Anexos
SELECT * FROM srgbtbrel
INTO TABLE it_srgbtbrel.
**--> Move o histórico das MIGOS para tabela auxiliar.
MOVE it_ekbe[] TO it_ekbe_migo[].
DELETE it_ekbe_migo[] WHERE bewtp <> 'E'.
**--> Trata estornos da MIRO
DATA: vl_tabix TYPE sy-tabix.
DELETE it_rbkp[] WHERE stblg IS NOT INITIAL.
LOOP AT it_rseg INTO wa_rseg.
vl_tabix = sy-tabix.
READ TABLE it_rbkp WITH KEY belnr = wa_rseg-belnr
gjahr = wa_rseg-gjahr
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
CLEAR wa_rseg.
MODIFY it_rseg FROM wa_rseg INDEX vl_tabix.
ENDIF.
CLEAR: wa_rseg.
ENDLOOP.
DELETE it_rseg[] WHERE belnr IS INITIAL.
ENDFORM. " GETDATA
*&---------------------------------------------------------------------*
*& Form select_tvarv
*&---------------------------------------------------------------------*
FORM select_tvarv
USING pv_name TYPE rvari_vnam
CHANGING ct_table TYPE STANDARD TABLE.
TYPES:
BEGIN OF ts_tvarvc_entry,
sign TYPE c LENGTH 01,
option TYPE c LENGTH 02,
low TYPE tvarv_val ,
high TYPE tvarv_val ,
END OF ts_tvarvc_entry,
tt_tvarvc_entry TYPE STANDARD TABLE OF ts_tvarvc_entry
WITH DEFAULT KEY.
DATA: lt_tvarvc TYPE tt_tvarvc_entry.
* Declaração dos ponteiros locais
FIELD-SYMBOLS:
<fs_tvarvc> LIKE LINE OF lt_tvarvc,
<fs_table> TYPE ANY.
SELECT sign opti AS option low high
FROM tvarvc
INTO TABLE lt_tvarvc
WHERE name EQ pv_name.
LOOP AT lt_tvarvc ASSIGNING <fs_tvarvc>.
INSERT INITIAL LINE INTO TABLE ct_table ASSIGNING <fs_table>.
MOVE-CORRESPONDING <fs_tvarvc> TO <fs_table>.
ENDLOOP.
ENDFORM. "select_tvarv
*&---------------------------------------------------------------------*
*& Form SETDATA
*&---------------------------------------------------------------------*
FORM setdata.
DATA: w_t052 TYPE t052,
w_bkpf TYPE bkpf,
v_awkey TYPE bkpf-awkey.
* Declaração dos ranges locais
DATA: lt_entry_sheet_green TYPE RANGE OF i,
lt_entry_sheet_yellow TYPE RANGE OF i,
lt_entry_sheet_red TYPE RANGE OF i.
**--> Monta dados do ALV.
DATA: vl_instid TYPE srgbtbrel-instid_a.
CLEAR wa_po.
**--> Parametrizações de Semáforo
PERFORM select_tvarv:
USING 'ENTRY_SHEET_GREEN' CHANGING lt_entry_sheet_green,
USING 'ENTRY_SHEET_YELLOW' CHANGING lt_entry_sheet_yellow,
USING 'ENTRY_SHEET_RED' CHANGING lt_entry_sheet_red .
DELETE it_ekbe[] WHERE bewtp = 'Q'.
SORT it_ekbe_migo BY ebeln ebelp lfbnr bwart.
***--> Itens do Histórico de Pedido por Folha de Serviço.
LOOP AT it_ekbe INTO wa_ekbe.
READ TABLE it_ekpo INTO wa_ekpo
WITH KEY ebeln = wa_ekbe-ebeln
ebelp = wa_ekbe-ebelp.
CHECK sy-subrc IS INITIAL.
***---> Move dados do Pedido de Compras.
MOVE-CORRESPONDING wa_ekpo TO wa_po.
MOVE:
wa_ekpo-menge TO wa_po-menge1,
wa_ekpo-meins TO wa_po-meins1.
***--> Quebra o relatório em Folha de Serviços.
READ TABLE it_essr INTO wa_essr
WITH KEY lblni = wa_ekbe-lfbnr.
IF sy-subrc = 0.
*--> Descarta as Folhas de Serviço Estornadas.
CHECK wa_essr-loekz <> 'X'.
***--> Não quebra o relatório por MIGO.
CHECK wa_ekbe-bewtp = 'D'.
**--> Move os dados da Folha de Serviços.
MOVE:
wa_essr-lblni TO wa_po-lblni,
wa_essr-erdat TO wa_po-dt_folha,
wa_essr-bldat TO wa_po-bldat_folha.
IF wa_essr-kzabn IS NOT INITIAL.
wa_po-semaforo = icon_green_light.
ELSE.
IF wa_po-dt_folha GT '00010101'.
wa_po-dif_dias = sy-datum - wa_po-dt_folha.
IF wa_po-dif_dias IN lt_entry_sheet_green .
wa_po-semaforo = icon_green_light.
ENDIF.
IF wa_po-dif_dias IN lt_entry_sheet_yellow.
wa_po-semaforo = icon_yellow_light.
ENDIF.
IF wa_po-dif_dias IN lt_entry_sheet_red .
wa_po-semaforo = icon_red_light.
ENDIF.
ENDIF.
ENDIF.
**--> Move anexo Anexo Folha de Serviços.
READ TABLE it_srgbtbrel INTO wa_srgbtbrel
WITH KEY instid_a = wa_essr-lblni.
IF sy-subrc = 0.
MOVE icon_attachment TO wa_po-anexo_folha.
ENDIF.
ENDIF.
*** Move anexo do Pedido de Compras.
READ TABLE it_srgbtbrel INTO wa_srgbtbrel
WITH KEY instid_a = wa_po-ebeln.
IF sy-subrc = 0.
MOVE icon_attachment TO wa_po-anexo_po.
ENDIF.
**--> Encontra respectiva MIGO da Folha.
CLEAR wa_mseg.
IF wa_ekbe-lfbnr IS NOT INITIAL.
READ TABLE it_ekbe_migo INTO wa_ekbe_migo
WITH KEY lfbnr = wa_ekbe-lfbnr
bewtp = 'E'.
ELSE.
READ TABLE it_ekbe_migo INTO wa_ekbe_migo
WITH KEY belnr = wa_ekbe-ebeln
gjahr = wa_ekbe-gjahr
buzei = wa_ekbe-buzei.
ENDIF.
IF sy-subrc = 0.
LOOP AT it_mseg INTO wa_mseg
WHERE mblnr = wa_ekbe_migo-belnr.
c_grmenge = c_grmenge + wa_mseg-menge.
ENDLOOP.
ENDIF.
**--> Encontra respectiva MIGO da Folha.
CLEAR wa_mseg.
IF wa_ekbe-lfbnr IS NOT INITIAL.
READ TABLE it_ekbe_migo
INTO wa_ekbe_migo
WITH KEY lfbnr = wa_ekbe-lfbnr
bewtp = 'E'.
IF sy-subrc IS INITIAL.
READ TABLE it_mseg
INTO wa_mseg
WITH KEY mblnr = wa_ekbe_migo-belnr
mjahr = wa_ekbe_migo-gjahr
zeile = wa_ekbe_migo-buzei.
IF sy-subrc IS NOT INITIAL.
CLEAR wa_mseg.
ENDIF.
ENDIF.
ELSE.
READ TABLE it_mseg
INTO wa_mseg
WITH KEY mblnr = wa_ekbe-belnr
mjahr = wa_ekbe-gjahr
zeile = wa_ekbe-buzei.
IF sy-subrc IS NOT INITIAL.
CLEAR wa_mseg.
ENDIF.
ENDIF.
IF sy-subrc IS INITIAL.
MOVE:
wa_mseg-mblnr TO wa_po-mblnr,
wa_mseg-mjahr TO wa_po-mjahr,
wa_ekbe-menge TO wa_po-menge2,
wa_mseg-meins TO wa_po-meins2,
wa_mseg-werks TO wa_po-werks,
wa_mseg-charg TO wa_po-charg.
CONCATENATE wa_mseg-mblnr wa_mseg-mjahr INTO vl_instid.
READ TABLE it_srgbtbrel INTO wa_srgbtbrel
WITH KEY instid_a = vl_instid.
IF sy-subrc = 0.
MOVE icon_attachment TO wa_po-anexo_migo.
ENDIF.
CLEAR: vl_instid.
READ TABLE it_mkpf INTO wa_mkpf
WITH KEY mblnr = wa_mseg-mblnr
mjahr = wa_mseg-mjahr.
IF sy-subrc = 0.
wa_po-dt_migo = wa_mkpf-budat.
wa_po-dt_doc_migo = wa_mkpf-bldat.
wa_po-dtc_migo = wa_mkpf-cpudt.
ENDIF.
ENDIF.
wa_po-balqty = wa_eban-menge - c_grmenge.
CLEAR : wa_rseg, wa_rbkp.
**--> Move dados da MIRO
CLEAR wa_mseg.
IF wa_ekbe-lfbnr IS NOT INITIAL.
READ TABLE it_ekbe_migo
INTO wa_ekbe_migo
WITH KEY lfbnr = wa_ekbe-lfbnr
bewtp = 'E'.
IF sy-subrc IS INITIAL.
READ TABLE it_mseg
INTO wa_mseg
WITH KEY mblnr = wa_ekbe_migo-belnr
mjahr = wa_ekbe_migo-gjahr
zeile = wa_ekbe_migo-buzei.
IF sy-subrc IS NOT INITIAL.
CLEAR wa_mseg.
ENDIF.
ENDIF.
ELSE.
READ TABLE it_mseg
INTO wa_mseg
WITH KEY mblnr = wa_ekbe-belnr
mjahr = wa_ekbe-gjahr
zeile = wa_ekbe-buzei.
IF sy-subrc IS NOT INITIAL.
CLEAR wa_mseg.
ENDIF.
ENDIF.
IF wa_ekbe-lfbnr IS NOT INITIAL.
READ TABLE it_rseg
INTO wa_rseg
WITH KEY lfbnr = wa_ekbe-lfbnr
lfgja = wa_ekbe-lfgja
lfpos = wa_ekbe-lfpos.
ELSE.
READ TABLE it_rseg
INTO wa_rseg
WITH KEY ebeln = wa_mseg-ebeln
ebelp = wa_mseg-ebelp.
ENDIF.
IF sy-subrc = 0.
READ TABLE it_rbkp INTO wa_rbkp
WITH KEY belnr = wa_rseg-belnr
gjahr = wa_rseg-gjahr.
IF sy-subrc EQ 0.
IF wa_rbkp-stblg IS INITIAL.
MOVE:
wa_rbkp-belnr TO wa_po-belnr,
wa_rbkp-zterm TO wa_po-zterm,
wa_rbkp-zfbdt TO wa_po-zfbdt,
wa_rbkp-bldat TO wa_po-bldat.
CALL FUNCTION 'FI_FIND_PAYMENT_CONDITIONS'
EXPORTING
i_zterm = wa_rbkp-zterm
i_bldat = wa_rbkp-bldat
i_budat = wa_rbkp-budat
i_cpudt = wa_rbkp-cpudt
i_zfbdt = wa_rbkp-zfbdt
IMPORTING
e_t052 = w_t052.
CONCATENATE wa_rbkp-belnr wa_rbkp-bldat(4)
INTO v_awkey .
SELECT SINGLE *
FROM bkpf
INTO w_bkpf
WHERE awkey = v_awkey.
IF sy-subrc IS INITIAL.
wa_po-fi_belnr = w_bkpf-belnr.
ENDIF.
IF w_t052-xsplt = 'X'.
wa_po-split = 'PARC'.
ENDIF.
SELECT SINGLE * FROM t001w INTO w_t001w WHERE werks = wa_po-werks.
SELECT SINGLE * FROM t001k INTO w_t001k WHERE bwkey = w_t001w-bwkey.
CALL FUNCTION 'FI_DOCUMENT_READ'
EXPORTING
i_bukrs = w_t001k-bukrs
i_belnr = wa_po-fi_belnr
i_gjahr = wa_rbkp-bldat(4)
TABLES
t_bseg = t_bseg
EXCEPTIONS
wrong_input = 1
not_found = 2
OTHERS = 3.
IF sy-subrc IS INITIAL.
DELETE t_bseg WHERE koart <> 'K'.
SORT t_bseg BY fdtag.
READ TABLE t_bseg INDEX 1 INTO w_bseg.
wa_po-duedt = w_bseg-fdtag.
wa_po-zterm_fi = w_bseg-zterm.
ENDIF.
*** Move anexo da MIRO
CONCATENATE wa_rbkp-belnr wa_rbkp-bldat(4) INTO vl_instid.
READ TABLE it_srgbtbrel INTO wa_srgbtbrel
WITH KEY instid_a = vl_instid.
IF sy-subrc = 0.
MOVE icon_attachment TO wa_po-anexo_miro.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CLEAR vl_instid.
**--> Seleciona os dados de cabeçalho do Pedido de Compras
CLEAR wa_ekko.
READ TABLE it_ekko INTO wa_ekko WITH KEY ebeln = wa_ekbe-ebeln.
IF sy-subrc EQ 0.
MOVE: wa_ekko-lifnr TO wa_po-lifnr,
wa_ekko-bedat TO wa_po-bedat,
wa_ekko-zterm TO wa_po-zterm_pedido,
wa_ekko-bukrs TO wa_po-bukrs.
CLEAR wa_lfa1.
READ TABLE it_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_ekko-lifnr BINARY SEARCH.
IF sy-subrc IS INITIAL.
MOVE wa_lfa1-ktokk TO wa_po-ktokk.
ENDIF.
ENDIF.
IF wa_po-lblni IS NOT INITIAL
AND wa_po-mblnr IS INITIAL
AND wa_po-zterm_pedido IS NOT INITIAL.
CLEAR wa_t052.
CALL FUNCTION 'FI_TERMS_OF_PAYMENT_CHECK'
EXPORTING
i_zterm = wa_po-zterm_pedido
IMPORTING
e_t052 = wa_t052
EXCEPTIONS
terms_of_payment = 1
conditions = 2
OTHERS = 3.
IF sy-subrc IS INITIAL.
wa_po-duedt = wa_po-bldat_folha + wa_t052-ztag1.
ENDIF.
ENDIF.
APPEND wa_po TO it_po.
CLEAR: wa_po, wa_ekpo, wa_mseg.
ENDLOOP.
ENDFORM. " SETDATA
*&---------------------------------------------------------------------*
*& Form FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fieldcat .
DATA: i TYPE i.
REFRESH it_fcat.
i = 1. PERFORM buildfields USING i 'EBELN' 'IT_PO' 'Pedido' '' 10.
i = i + 1. PERFORM buildfields USING i 'EBELP' 'IT_PO' 'Item' '' 0.
i = i + 1. PERFORM buildfields USING i 'ANEXO_PO' 'IT_PO' 'Anexo-PO' '' 0.
i = i + 1. PERFORM buildfields USING i 'BEDAT' 'IT_PO' 'Data do Pedido' '' 0.
i = i + 1. PERFORM buildfields USING i 'LBLNI' 'IT_PO' 'Folha de Serviços' '' 0.
i = i + 1. PERFORM buildfields USING i 'DT_FOLHA' 'IT_PO' 'Data Cria. de Serviços' '' 0.
i = i + 1. PERFORM buildfields USING i 'BLDAT_FOLHA' 'IT_PO' 'DataDoc Folha' '' 0.
i = i + 1. PERFORM buildfields USING i 'DIF_DIAS' 'IT_PO' 'Diferença de Dias' '' 0.
i = i + 1. PERFORM buildfields USING i 'SEMAFORO' 'IT_PO' 'Status' '' 0.
i = i + 1. PERFORM buildfields USING i 'MTART' 'IT_PO' 'Tipo do Material' '' 0.
i = i + 1. PERFORM buildfields USING i 'MATKL' 'IT_PO' 'Grupo de Mercadorias' '' 0.
i = i + 1. PERFORM buildfields USING i 'MATNR' 'IT_PO' 'Número do Material' '' 0.
i = i + 1. PERFORM buildfields USING i 'TXZ01' 'IT_PO' 'Descrição do Material' '' 0.
i = i + 1. PERFORM buildfields USING i 'LIFNR' 'IT_PO' 'Número do Fornecedor' '' 0.
i = i + 1. PERFORM buildfields USING i 'NAME1' 'IT_PO' 'Fornecedor' '' 0.
i = i + 1. PERFORM buildfields USING i 'MENGE1' 'IT_PO' 'Quantidade do Pedido' '' 0.
i = i + 1. PERFORM buildfields USING i 'MEINS' 'IT_PO' 'Unidade do Pedido' '' 0.
i = i + 1. PERFORM buildfields USING i 'NETPR' 'IT_PO' 'Preço' '' 0.
i = i + 1. PERFORM buildfields USING i 'PEINH' 'IT_PO' 'Unidade de Preço' '' 0.
i = i + 1. PERFORM buildfields USING i 'ANEXO_FOLHA' 'IT_PO' 'Anexo-Folha' '' 0.
i = i + 1. PERFORM buildfields USING i 'MBLNR' 'IT_PO' 'MIGO' '' 0.
i = i + 1. PERFORM buildfields USING i 'DT_MIGO' 'IT_PO' 'DtL MIGO' '' 0.
i = i + 1. PERFORM buildfields USING i 'DTC_MIGO' 'IT_PO' 'DtC MIGO' '' 0.
i = i + 1. PERFORM buildfields USING i 'ANEXO_MIGO' 'IT_PO' 'Anexo-MIGO' '' 0.
i = i + 1. PERFORM buildfields USING i 'MENGE2' 'IT_PO' 'Quantidade MIGO' '' 0.
i = i + 1. PERFORM buildfields USING i 'MEINS2' 'IT_PO' 'Unidade MIGO' '' 0.
i = i + 1. PERFORM buildfields USING i 'BELNR' 'IT_PO' 'MIRO' '' 0.
i = i + 1. PERFORM buildfields USING i 'ANEXO_MIRO' 'IT_PO' 'Anexo-MIRO' '' 0.
i = i + 1. PERFORM buildfields USING i 'BLDAT' 'IT_PO' 'DtL MIRO' '' 0.
i = i + 1. PERFORM buildfields USING i 'FI_BELNR' 'IT_PO' 'FI Doc' '' 0.
i = i + 1. PERFORM buildfields USING i 'ZTERM' 'IT_PO' 'C.Pag.MIRO' '' 0.
i = i + 1. PERFORM buildfields USING i 'SPLIT' 'IT_PO' 'Parcel.' '' 0.
i = i + 1. PERFORM buildfields USING i 'ZFBDT' 'IT_PO' 'Dt.Base' '' 0.
i = i + 1. PERFORM buildfields USING i 'DUEDT' 'IT_PO' 'Dt.Pago' '' 0.
i = i + 1. PERFORM buildfields USING i 'ZTERM_PEDIDO' 'IT_PO' 'C.Pag.Pedido' '' 0.
i = i + 1. PERFORM buildfields USING i 'ZTERM_FI' 'IT_PO' 'C.Pag.Contábil' '' 0.
i = i + 1. PERFORM buildfields USING i 'KTOKK' 'IT_PO' 'Grp.Contas Fornecedor' '' 0.
i = i + 1. PERFORM buildfields USING i 'BUKRS' 'IT_PO' 'Empresa' '' 0.
ENDFORM. " FIELDCAT
*&---------------------------------------------------------------------*
*& Form BUILDFIELDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0449 text
* -->P_0450 text
* -->P_0451 text
* -->P_0452 text
*----------------------------------------------------------------------*
FORM buildfields USING value(p_col_pos) LIKE sy-cucol
value(p_fldname) TYPE slis_fieldname
value(p_tabname) TYPE slis_tabname
value(p_reptext) LIKE dd03p-reptext
value(p_do_sum) TYPE char1
value(p_len) TYPE i.
CLEAR wa_fcat.
wa_fcat-col_pos = p_col_pos.
wa_fcat-fieldname = p_fldname.
wa_fcat-tabname = p_tabname.
wa_fcat-reptext_ddic = p_reptext.
wa_fcat-do_sum = p_do_sum.
wa_fcat-just = 'C'.
IF p_len IS NOT INITIAL.
wa_fcat-intlen = p_len.
ENDIF.
APPEND wa_fcat TO it_fcat.
ENDFORM. " BUILDFIELDS
*&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
FORM display.
CLEAR wa_layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_bypassing_buffer = 'X'
i_callback_program = sy-cprog
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
i_background_id = 'ALV_BACKGROUND'
is_layout = wa_layout
it_fieldcat = it_fcat
i_callback_pf_status_set = 'ZSTATUS'
i_save = 'A'
TABLES
t_outtab = it_po[]
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
*&---------------------------------------------------------------------*
*& Form zstatus
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->EXTAB text
*----------------------------------------------------------------------*
FORM zstatus USING extab TYPE slis_t_extab. "#EC CALLED
SET PF-STATUS 'ZSTATUS'.
REFRESH extab[].
ENDFORM. " zstatus
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM top_of_page. "#EC *
REFRESH it_lshead.
CLEAR wa_lshead.
WRITE: s_badat-low TO c_low DD/MM/YYYY,s_badat-high TO c_high DD/MM/YYYY.
IF s_badat-high IS INITIAL.
CONCATENATE 'De' c_low INTO c_date SEPARATED BY space.
ELSE.
CONCATENATE 'Datado de' c_low 'e' c_high INTO c_date SEPARATED BY space.
ENDIF.
wa_lshead-typ = 'H'.
wa_lshead-info = 'Rastreabilidade de Pedidos'.
APPEND wa_lshead TO it_lshead.
wa_lshead-typ = 'S'.
wa_lshead-info = c_date.
APPEND wa_lshead TO it_lshead.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_lshead.
ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form BUILD_SORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_1072 text
* -->P_1073 text
* -->P_1074 text
*----------------------------------------------------------------------*
FORM build_sort USING value(p_fldname) TYPE slis_fieldname
value(p_spos) LIKE alvdynp-sortpos
value(p_up) LIKE alvdynp-sortup.
wa_sort-fieldname = p_fldname.
wa_sort-spos = p_spos.
wa_sort-up = p_up.
APPEND wa_sort TO it_sort.
CLEAR wa_sort.
ENDFORM. " BUILD_SORT
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
DATA: gd_repid LIKE sy-repid,
ref_grid TYPE REF TO cl_gui_alv_grid,
vl_subrc TYPE sy-subrc.
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data .
ENDIF.
CASE ucomm.
WHEN '&IC1'.
CASE selfield-sel_tab_field.
WHEN 'IT_PO-EBELN'.
READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
SET PARAMETER ID : 'BES' FIELD wa_po-ebeln.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
WHEN 'IT_PO-LBLNI'.
READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
SET PARAMETER ID : 'LBL' FIELD wa_po-lblni.
CALL TRANSACTION 'ML81N' AND SKIP FIRST SCREEN.
WHEN 'IT_PO-MBLNR'.
READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
i_action = 'A04'
i_refdoc = 'R02'
i_notree = 'X'
i_skip_first_screen = 'X'
i_deadend = 'X'
i_okcode = 'OK_GO'
i_mblnr = wa_po-mblnr
EXCEPTIONS
illegal_combination = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
WHEN 'IT_PO-BELNR'.
READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
SET PARAMETER ID :
'RBN' FIELD wa_po-belnr,
'GJR' FIELD wa_po-bldat(8).
CALL TRANSACTION 'MIR4' AND SKIP FIRST SCREEN.
WHEN 'IT_PO-ANEXO_MIGO'.
READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
CONCATENATE wa_po-mblnr wa_po-dt_migo(4) INTO lw_object-instid.
lw_object-typeid = 'BUS2017'.
lw_object-catid = 'BO'.
CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
EXPORTING
is_object = lw_object.
WHEN 'IT_PO-ANEXO_MIRO'.
READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
CLEAR: lw_object.
CONCATENATE wa_po-belnr wa_po-bldat(4) INTO lw_object-instid.
lw_object-typeid = 'BUS2081'.
lw_object-catid = 'BO'.
CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
EXPORTING
is_object = lw_object.
WHEN 'IT_PO-ANEXO_FOLHA'.
READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
CLEAR: lw_object.
MOVE wa_po-lblni TO lw_object-instid.
lw_object-typeid = 'BUS2091'.
lw_object-catid = 'BO'.
CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
EXPORTING
is_object = lw_object.
WHEN 'IT_PO-ANEXO_PO'.
READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
CLEAR: lw_object.
MOVE wa_po-ebeln TO lw_object-instid.
lw_object-typeid = 'BUS2012'.
lw_object-catid = 'BO'.
CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
EXPORTING
is_object = lw_object.
WHEN 'IT_PO-FI_BELNR'.
READ TABLE it_po INTO wa_po INDEX selfield-tabindex.
SET PARAMETER ID 'BLN' FIELD wa_po-fi_belnr.
SELECT SINGLE * FROM t001w INTO w_t001w WHERE werks = wa_po-werks.
SELECT SINGLE * FROM t001k INTO w_t001k WHERE bwkey = w_t001w-bwkey.
SET PARAMETER ID 'BUK' FIELD w_t001k-bukrs.
SET PARAMETER ID 'GJR' FIELD wa_po-bldat(8).
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form CLEAR_MSEG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_clear_mseg .
DATA: v_mseg TYPE mseg.
LOOP AT it_mseg INTO wa_mseg.
SELECT SINGLE * FROM mseg
INTO v_mseg
WHERE sjahr = wa_mseg-mjahr
AND smbln = wa_mseg-mblnr
AND smblp = wa_mseg-zeile.
IF sy-subrc IS INITIAL.
DELETE it_mseg
WHERE mblnr = wa_mseg-mblnr
AND mjahr = wa_mseg-mjahr
AND zeile = wa_mseg-zeile.
DELETE it_mseg
WHERE mblnr = v_mseg-mblnr
AND mjahr = v_mseg-mjahr
AND zeile = v_mseg-zeile.
DELETE it_ekbe
WHERE belnr = wa_mseg-mblnr
AND gjahr = wa_mseg-mjahr
AND buzei = wa_mseg-zeile.
DELETE it_ekbe
WHERE belnr = v_mseg-mblnr
AND gjahr = v_mseg-mjahr
AND buzei = v_mseg-zeile.
ENDIF.
ENDLOOP.
ENDFORM. " CLEAR_MSEG
*&---------------------------------------------------------------------*
*& Form SET_VENDOR_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_vendor_name .
FIELD-SYMBOLS: <po> LIKE LINE OF it_po .
LOOP AT it_po ASSIGNING <po>.
CHECK <po>-lifnr IS NOT INITIAL.
SELECT SINGLE name1 FROM lfa1
INTO <po>-name1 WHERE lifnr = <po>-lifnr.
IF sy-subrc IS NOT INITIAL.
CLEAR <po>-name1.
ENDIF.
ENDLOOP.
ENDFORM. " SET_VENDOR_NAME
*&---------------------------------------------------------------------*
*& Form SET_ZFBDT_MIGO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_duedt_migo .
FIELD-SYMBOLS: <po> LIKE LINE OF it_po .
LOOP AT it_po ASSIGNING <po>.
CHECK <po>-duedt IS INITIAL.
CHECK <po>-mblnr IS NOT INITIAL.
CHECK <po>-zterm_pedido IS NOT INITIAL.
CLEAR wa_t052.
CALL FUNCTION 'FI_TERMS_OF_PAYMENT_CHECK'
EXPORTING
i_zterm = <po>-zterm_pedido
IMPORTING
e_t052 = wa_t052
EXCEPTIONS
terms_of_payment = 1
conditions = 2
OTHERS = 3.
<po>-duedt = <po>-dt_doc_migo + wa_t052-ztag1.
ENDLOOP.
ENDFORM. " SET_ZFBDT_MIGO
abap ZRMM009 - 资本支出
zrmm009.abap
*&---------------------------------------------------------------------*
*& Report ZRMM009
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zrmm009.
TYPE-POOLS : abap, slis, icon.
TABLES: ekko, ekpo, ekkn.
SELECTION-SCREEN BEGIN OF BLOCK par WITH FRAME .
PARAMETERS:
p_ekorg TYPE ekorg DEFAULT 'OCLW'.
SELECT-OPTIONS:
s_bukrs FOR ekko-bukrs,
s_datum FOR ekko-bedat,
s_lifnr FOR ekko-lifnr,
s_ebeln FOR ekko-ebeln.
SELECTION-SCREEN END OF BLOCK par.
SELECTION-SCREEN BEGIN OF BLOCK var.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK var.
DATA: r_ebeln TYPE RANGE OF ebeln.
DATA:
BEGIN OF t_output OCCURS 0,
ekorg LIKE ekko-ekorg, " Organização de Compras
bukrs LIKE ekko-bukrs, " Empresa
bsart LIKE ekko-bsart, " Tipo de Pedido de Compra
ebeln LIKE ekko-ebeln, " Número do Pedido de Compra
ebelp LIKE ekpo-ebelp, " Item do Pedido de Compra
lifnr LIKE ekko-lifnr, " Nümero do Fornecedor
name1 LIKE lfa1-name1, " Nome do Fornecedor
zterm LIKE ekko-zterm, " Condição de Pagamento
aedat LIKE ekko-aedat, " Data de Criação do Doc Compras
ernam LIKE ekko-ernam, " Usuário que Criou Doc de Compras
loekz LIKE ekpo-loekz, " Status de Bloq/Eliminação
knttp LIKE ekpo-knttp, " Classificação Contábil do Item
matnr LIKE ekpo-matnr, " Código de Material
matkl LIKE ekpo-matkl, " Grupo de Mercadorias
txz01 LIKE ekpo-txz01, " Texto do Item do Item
menge LIKE ekpo-menge, " Quantidade do Item
meins LIKE ekpo-meins,
" Unidade de Medida para Quantidade do Item
netwr LIKE ekpo-netwr, " Valor Unitário
waers LIKE ekko-waers, " Moeda do Pedido de Compra
werks LIKE ekpo-werks, " Centro
kostl LIKE csks-kostl, " Centro de Custo
anln1 LIKE anla-anln1, " Número de Imobilizado
anln2 LIKE anla-anln2, " Sub Número de Imobilizado
cost_descr TYPE char15,
" Descrição de Imobilizado ou Centro de Custo
END OF t_output.
TYPE-POOLS: slis, sydes.
DATA: "Dynpro Control
lvc_t_fcat TYPE lvc_t_fcat,
lvc_t_sort TYPE lvc_t_sort,
lvc_w_layout TYPE lvc_s_layo,
lvc_t_filter TYPE lvc_t_filt.
*DATA: t_fcat TYPE slis_t_fieldcat_alv.
*DATA: w_slis_layout_alv TYPE slis_layout_alv.
*DATA: t_sort TYPE slis_t_sortinfo_alv.
*DATA: t_filter TYPE slis_t_filter_alv.
DATA: w_ekko TYPE ekko,
t_ekpo TYPE TABLE OF ekpo,
t_ekkn TYPE TABLE OF ekkn,
t_ekbe TYPE TABLE OF ekbe.
DATA: g_save,
g_exit,
g_variant TYPE disvariant,
gx_variant TYPE disvariant.
INITIALIZATION.
g_save = 'A'.
CLEAR g_variant.
g_variant-report = sy-cprog.
* Get default variant
gx_variant = g_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = g_save
CHANGING
cs_variant = gx_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_vari = gx_variant-variant.
ENDIF.
* Process on value request
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = g_variant
i_save = g_save
* it_default_fieldcat =
IMPORTING
e_exit = g_exit
es_variant = gx_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF g_exit = space.
p_vari = gx_variant-variant.
ENDIF.
ENDIF.
START-OF-SELECTION.
PERFORM select_data.
END-OF-SELECTION.
PERFORM process_data.
PERFORM output_report.
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_data .
IF s_ebeln[] IS INITIAL.
PERFORM get_ebeln_by_date TABLES r_ebeln.
ELSE.
r_ebeln[] = s_ebeln[].
ENDIF.
CHECK r_ebeln[] IS NOT INITIAL.
DATA:
t_callback TYPE TABLE OF ldbcb,
t_selections TYPE TABLE OF rsparams.
PERFORM prepare_ldb TABLES t_callback t_selections.
CALL FUNCTION 'LDB_PROCESS'
EXPORTING
ldbname = 'ENM'
* VARIANT =
* EXPRESSIONS =
* FIELD_SELECTION =
* DYN_NODE_TYPES =
TABLES
callback = t_callback
selections = t_selections
EXCEPTIONS
ldb_not_reentrant = 1
ldb_incorrect = 2
ldb_already_running = 3
ldb_error = 4
ldb_selections_error = 5
ldb_selections_not_accepted = 6
variant_not_existent = 7
variant_obsolete = 8
variant_error = 9
free_selections_error = 10
callback_no_event = 11
callback_node_duplicate = 12
callback_no_program = 13
callback_no_cbform = 14
dyn_node_no_type = 15
dyn_node_invalid_type = 16
OTHERS = 17
.
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. " SELECT_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_data .
ENDFORM. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form OUTPUT_REPORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM output_report .
PERFORM prepare_sort USING lvc_t_sort.
PERFORM build_fcat.
PERFORM prepare_fcat.
PERFORM prepare_filter USING lvc_t_filter.
PERFORM call_alv.
ENDFORM. " OUTPUT_REPORT
*&---------------------------------------------------------------------*
*& Form BUILD_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_FCAT text
*----------------------------------------------------------------------*
FORM build_fcat.
DATA: t_slis_fcat TYPE slis_t_fieldcat_alv.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-cprog
i_internal_tabname = 'T_OUTPUT'
* i_structure_name = 'T_OUTPUT'
* I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = sy-cprog
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = t_slis_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
EXPORTING
it_fieldcat_alv = t_slis_fcat
* IT_SORT_ALV =
* IT_FILTER_ALV =
* IS_LAYOUT_ALV =
IMPORTING
et_fieldcat_lvc = lvc_t_fcat
* ET_SORT_LVC =
* ET_FILTER_LVC =
* ES_LAYOUT_LVC =
TABLES
it_data = t_output
* EXCEPTIONS
* IT_DATA_MISSING = 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. " BUILD_FCAT
*&---------------------------------------------------------------------*
*& Form PREPARE_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_FCAT text
*----------------------------------------------------------------------*
FORM prepare_fcat.
DATA: w_lvc_fcat LIKE LINE OF lvc_t_fcat.
PERFORM get_lvc_fcat_dtel
USING 'T_OUTPUT' 'COST_DESCR' 'CHAR15'
'Descrição Custo' w_lvc_fcat.
w_lvc_fcat-col_pos = LINES( lvc_t_fcat ) + 1.
APPEND w_lvc_fcat TO lvc_t_fcat.
ENDFORM. " PREPARE_FCAT
*&---------------------------------------------------------------------*
*& Form PREPARE_FILTER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_FILTER text
*----------------------------------------------------------------------*
FORM prepare_filter USING p_t_filter.
ENDFORM. " PREPARE_FILTER
*&---------------------------------------------------------------------*
*& Form PREPARE_SORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_SORT text
*----------------------------------------------------------------------*
FORM prepare_sort USING p_t_sort.
ENDFORM. " PREPARE_SORT
*&---------------------------------------------------------------------*
*& Form PREPARE_LDB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_CALLBACK text
* -->P_T_SELECTIONS text
*----------------------------------------------------------------------*
FORM prepare_ldb TABLES p_t_callback STRUCTURE ldbcb
"Introduzir nome correto para <...>
p_t_selections STRUCTURE rsparams.
DATA: callback_wa LIKE LINE OF p_t_callback,
seltab_wa LIKE LINE OF p_t_selections.
CLEAR: p_t_callback[], p_t_selections[].
callback_wa-ldbnode = 'EKKO'.
callback_wa-get = 'X'.
callback_wa-get_late = ' '.
callback_wa-cb_prog = sy-repid.
callback_wa-cb_form = 'CALLBACK_EKKO'.
APPEND callback_wa TO p_t_callback.
callback_wa-ldbnode = 'EKPO'.
callback_wa-get = 'X'.
callback_wa-get_late = 'X'.
callback_wa-cb_prog = sy-repid.
callback_wa-cb_form = 'CALLBACK_EKPO'.
APPEND callback_wa TO p_t_callback.
callback_wa-ldbnode = 'EKKN'.
callback_wa-get = 'X'.
callback_wa-get_late = ' '.
callback_wa-cb_prog = sy-repid.
callback_wa-cb_form = 'CALLBACK_EKKN'.
APPEND callback_wa TO p_t_callback.
callback_wa-ldbnode = 'EKBE'.
callback_wa-get = 'X'.
callback_wa-get_late = ' '.
callback_wa-cb_prog = sy-repid.
callback_wa-cb_form = 'CALLBACK_EKBE'.
APPEND callback_wa TO p_t_callback.
seltab_wa-kind = 'S'.
seltab_wa-selname = 'EN_EBELN'.
DATA: w_ebeln LIKE LINE OF r_ebeln.
LOOP AT r_ebeln INTO w_ebeln.
w_ebeln-sign = 'I'.
w_ebeln-option = 'EQ'.
MOVE-CORRESPONDING w_ebeln TO seltab_wa.
APPEND seltab_wa TO p_t_selections.
ENDLOOP.
ENDFORM. " PREPARE_LDB
*&---------------------------------------------------------------------*
*& Form GET_EBELN_BY_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_R_EBELN text
*----------------------------------------------------------------------*
FORM get_ebeln_by_date TABLES p_r_ebeln LIKE r_ebeln.
"Introduzir nome correto para <...>.
SELECT ebeln AS low FROM ekbe
INTO CORRESPONDING FIELDS OF TABLE p_r_ebeln
WHERE budat IN s_datum
AND vgabe = '2'. " 2 = MIRO
SELECT ebeln AS low
FROM ekko
APPENDING CORRESPONDING FIELDS OF TABLE p_r_ebeln
WHERE aedat IN s_datum.
SELECT ebeln AS low
FROM eket
APPENDING CORRESPONDING FIELDS OF TABLE p_r_ebeln
WHERE eindt IN s_datum.
SORT p_r_ebeln BY low.
DELETE ADJACENT DUPLICATES FROM p_r_ebeln COMPARING low.
DATA: w_ebeln LIKE LINE OF p_r_ebeln.
w_ebeln-sign = 'I'.
w_ebeln-option = 'EQ'.
MODIFY TABLE p_r_ebeln FROM w_ebeln TRANSPORTING sign option.
ENDFORM. " GET_EBELN_BY_DATE
*&---------------------------------------------------------------------*
*& Form callback_ekko
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NAME text
* -->WA text
* -->EVT text
* -->CHECK text
*----------------------------------------------------------------------*
FORM callback_ekko USING name TYPE ldbn-ldbnode
wa TYPE ekko
evt TYPE c
check TYPE c.
CASE evt.
WHEN 'G'.
CLEAR: w_ekko.
MOVE-CORRESPONDING wa TO w_ekko.
WHEN 'L'.
ENDCASE.
ENDFORM. "callback_ekko
*&---------------------------------------------------------------------*
*& Form callback_ekPo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NAME text
* -->WA text
* -->EVT text
* -->CHECK text
*----------------------------------------------------------------------*
FORM callback_ekpo USING name TYPE ldbn-ldbnode
wa TYPE ekpo
evt TYPE c
check TYPE c.
DATA: l_ekpo LIKE LINE OF t_ekpo.
CASE evt.
WHEN 'G'.
CLEAR: t_ekpo[], t_ekbe[], t_ekkn[].
MOVE-CORRESPONDING wa TO l_ekpo.
APPEND l_ekpo TO t_ekpo.
WHEN 'L'.
PERFORM build_data.
ENDCASE.
ENDFORM. "callback_ekko
*&---------------------------------------------------------------------*
*& Form callback_ekkn
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NAME text
* -->WA text
* -->EVT text
* -->CHECK text
*----------------------------------------------------------------------*
FORM callback_ekkn USING name TYPE ldbn-ldbnode
wa TYPE ekkn
evt TYPE c
check TYPE c.
DATA: l_ekkn LIKE LINE OF t_ekkn.
CASE evt.
WHEN 'G'.
MOVE-CORRESPONDING wa TO l_ekkn.
APPEND l_ekkn TO t_ekkn.
WHEN 'L'.
ENDCASE.
ENDFORM. "callback_ekko
*&---------------------------------------------------------------------*
*& Form callback_ekbe
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NAME text
* -->WA text
* -->EVT text
* -->CHECK text
*----------------------------------------------------------------------*
FORM callback_ekbe USING name TYPE ldbn-ldbnode
wa TYPE ekbe
evt TYPE c
check TYPE c.
DATA: l_ekbe LIKE LINE OF t_ekbe.
CASE evt.
WHEN 'G'.
MOVE-CORRESPONDING wa TO l_ekbe.
APPEND l_ekbe TO t_ekbe.
WHEN 'L'.
ENDCASE.
ENDFORM. "callback_ekko
*&---------------------------------------------------------------------*
*& Form BUILD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_data .
*
* ekorg LIKE ekko-ekorg, " Organização de Compras
* bukrs LIKE ekko-bukrs, " Empresa
* bsart LIKE ekko-bsart, " Tipo de Pedido de Compra
* ebeln LIKE ekko-ebeln, " Número do Pedido de Compra
* ebelp LIKE ekpo-ebelp, " Item do Pedido de Compra
* lifnr LIKE ekko-lifnr, " Nümero do Fornecedor
* name1 LIKE lfa1-name1, " Nome do Fornecedor
* zterm LIKE ekko-zterm, " Condição de Pagamento
* aedat LIKE ekko-aedat,
* " Data de Criação do Documento de Compras
* ernam LIKE ekko-ernam,
" Usuário que Criou Documento de Compras
* loekz LIKE ekpo-loekz, " Status de Bloq/Eliminação
* knttp LIKE ekpo-knttp, " Classificação Contábil do Item
* matnr LIKE ekpo-matnr, " Código de Material
* matkl LIKE ekpo-matkl, " Grupo de Mercadorias
* txz01 LIKE ekpo-txz01, " Texto do Item do Item
* menge LIKE ekpo-menge, " Quantidade do Item
* meins LIKE ekpo-meins,
* " Unidade de Medida para Quantidade do Item
* netwr LIKE ekpo-netwr, " Valor Unitário
* waers LIKE ekko-waers, " Moeda do Pedido de Compra
* werks LIKE ekpo-werks, " Centro
* kostl LIKE csks-kostl, " Centro de Custo
* anln1 LIKE anla-anln1, " Número de Imobilizado
* anln2 LIKE anla-anln2, " Sub Número de Imobilizado
*cost_descr TYPE char15, " Descrição de Imobilizado ou Centro de Custo
DATA: v_ekko TYPE ekko,
v_ekpo TYPE ekpo,
v_ekkn TYPE ekkn,
v_ekbe TYPE ekbe,
i_ekkn TYPE i,
v_kostl_name TYPE bapi0012_5-name,
v_asset_detail TYPE bapi1022_2,
v_kokrs TYPE kokrs.
v_ekko = w_ekko.
READ TABLE t_ekpo INDEX 1 INTO v_ekpo.
DATA: v_output LIKE LINE OF t_output.
CLEAR: v_output, t_output[].
CALL FUNCTION 'KOKRS_GET_FROM_BUKRS'
EXPORTING
i_bukrs = v_ekko-bukrs
IMPORTING
e_kokrs = v_kokrs
EXCEPTIONS
no_kokrs_found = 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.
v_output-ekorg = v_ekko-ekorg.
v_output-bukrs = v_ekko-bukrs.
v_output-bsart = v_ekko-bsart.
v_output-ebeln = v_ekko-ebeln.
v_output-ebelp = v_ekpo-ebelp.
v_output-lifnr = v_ekko-lifnr.
SELECT SINGLE name1 FROM lfa1
INTO v_output-name1
WHERE lifnr = v_output-lifnr.
v_output-zterm = v_ekko-zterm.
v_output-aedat = v_ekko-aedat.
v_output-ernam = v_ekko-ernam.
v_output-loekz = v_ekpo-loekz.
v_output-knttp = v_ekpo-knttp.
v_output-matnr = v_ekpo-matnr.
v_output-matkl = v_ekpo-matkl.
v_output-txz01 = v_ekpo-txz01.
v_output-menge = v_ekpo-menge.
v_output-meins = v_ekpo-meins.
v_output-netwr = v_ekpo-netwr.
v_output-werks = v_ekpo-werks.
DESCRIBE TABLE t_ekkn LINES i_ekkn.
IF i_ekkn = 0.
IF v_output-knttp = ' '.
v_output-cost_descr = 'ESTOQUE'.
ENDIF.
APPEND v_output TO t_output.
ELSEIF i_ekkn = 1.
READ TABLE t_ekkn INDEX 1 INTO v_ekkn.
CASE v_output-knttp.
WHEN 'K'.
v_output-kostl = v_ekkn-kostl.
CALL FUNCTION 'BAPI_COSTCENTER_GETDETAIL'
EXPORTING
controllingarea = v_kokrs
costcenter = v_output-kostl
* DATE = SY-DATUM
IMPORTING
name = v_kostl_name
* DESCRIPTION =
* PERSON_IN_CHARGE =
* ADDRESS =
* COMMUNICATION =
* RETURN =
.
v_output-cost_descr = v_kostl_name.
WHEN 'A'.
v_output-anln1 = v_ekkn-anln1.
v_output-anln2 = v_ekkn-anln2.
CALL FUNCTION 'BAPI_FIXEDASSET_GETDETAIL'
EXPORTING
companycode = v_output-bukrs
asset = v_output-anln1
subnumber = '0000'
* EVALUATION_DATE = '00000000'
IMPORTING
basic_data = v_asset_detail
* ORGANIZATIONAL_DATA =
* SPECIAL_CLASSIFICATIONS =
* RETURN =
.
v_output-cost_descr = v_asset_detail-descript.
APPEND v_output TO t_output.
WHEN OTHERS.
" Do nothing
ENDCASE.
APPEND v_output TO t_output.
ELSE.
"TODO
APPEND v_output TO t_output.
ENDIF.
ENDFORM. " BUILD_DATA
*&---------------------------------------------------------------------*
*& Form CALL_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
* I_CALLBACK_PROGRAM = ' '
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
* IS_LAYOUT_LVC =
it_fieldcat_lvc = lvc_t_fcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS_LVC =
* IT_SORT_LVC =
* IT_FILTER_LVC =
* IT_HYPERLINK =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = g_save
is_variant = g_variant
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT_LVC =
* IS_REPREP_ID_LVC =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO_LVC =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = t_output
* 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. " CALL_ALV
*&---------------------------------------------------------------------*
*& Form GET_LVC_FCAT_DTEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0519 text
* -->P_0520 text
* -->P_0521 text
* -->P_W_LVC_FCAT text
*----------------------------------------------------------------------*
FORM get_lvc_fcat_dtel USING value(p_table)
value(p_column)
value(p_dtel)
value(p_title)
p_fcat TYPE lvc_s_fcat.
DATA: dd_x031l_table TYPE dd_x031l_table,
x031l TYPE x031l,
ref_cl_abap_elemdescr TYPE REF TO cl_abap_elemdescr.
ref_cl_abap_elemdescr ?=
cl_abap_typedescr=>describe_by_name( p_dtel ).
dd_x031l_table = ref_cl_abap_elemdescr->get_ddic_object( ).
READ TABLE dd_x031l_table INDEX 1 INTO x031l.
CASE ref_cl_abap_elemdescr->type_kind.
WHEN 'C'.
p_fcat-datatype = 'CHAR'.
WHEN 'N'.
p_fcat-datatype = 'NUMC'.
WHEN 'D'.
p_fcat-datatype = 'DATE'.
WHEN 'P'.
p_fcat-datatype = 'PACK'.
WHEN OTHERS.
p_fcat-datatype = ref_cl_abap_elemdescr->type_kind.
ENDCASE.
p_fcat-inttype = ref_cl_abap_elemdescr->type_kind.
p_fcat-intlen = ref_cl_abap_elemdescr->length.
p_fcat-decimals = ref_cl_abap_elemdescr->decimals.
p_fcat-reptext = p_title.
p_fcat-fieldname = p_column.
p_fcat-tabname = p_table.
ENDFORM. " GET_LVC_FCAT_DTEL
abap 加入:ESEMPIO KNA1 / KNB1 ECC CUSTOMER MASTER
Esempio di estrazione con加入每个dati客户
JOIN ESEMPIO KNA1_KNB1 ECC CUSTOMER MASTER
SELECT a~kunnr, a~name1, a~land1, a~regio, a~ort01,
a~pstlz, a~stras, a~stceg, a~stcd1, a~lifnr,
a~brsch, a~vbund, a~ktokd, b~bukrs, b~zterm,
b~zwels, b~zahls, b~knrze, b~altkn, b~vlibb,
b~verdt, c~mansp
FROM kna1 AS a
INNER JOIN knb1 AS b ON a~kunnr EQ b~kunnr
LEFT JOIN knb5 AS c ON c~kunnr EQ b~kunnr
AND c~bukrs EQ b~bukrs
INTO TABLE @DATA(lt_kna1_knb1_knb5)
WHERE a~kunnr IN @s_kunnr
AND b~bukrs EQ @p_bukrs.
abap 加入:ESEMPIO选择lfa1 / lfb1 / lfm1 VENDOR MASTER
加入每个tabella供应商大师的di esempio
JOIN ESEMPIO select lfa1_lfb1_lfm1 VENDOR MASTER
SELECT a~lifnr, a~name1, a~land1, a~regio, a~ort01,
a~pstlz, a~stras, a~stceg, a~stcd1, a~kunnr,
a~vbund, a~ktokk, b~bukrs, b~zterm, b~zwels,
b~zahls, b~lnrze, b~altkn, c~ekorg, c~zterm AS zterm2
FROM lfa1 AS a
INNER JOIN lfb1 AS b ON a~lifnr EQ b~lifnr
LEFT JOIN lfm1 AS c ON a~lifnr EQ c~lifnr
INNER JOIN t024e AS d ON ( d~bukrs EQ @p_bukrs
OR d~bukrs EQ @space )
AND c~ekorg EQ d~ekorg
INTO TABLE @DATA(lt_lfa1)
WHERE a~lifnr IN @s_lifnr
AND b~bukrs EQ @p_bukrs.