Sunteți pe pagina 1din 29

Vamos para a implementao do DDA - Dbito Direto Autorizado...pra quem no sabe o que segue o link....

.DDA - FEBRABAN Sistema de cobrana que ainda no pegou por causa da cultura do papel, mas com certeza o futuro mais prximo, curto e economico do processo de cobrana no Brasil. Chega de papo e vamos a implementao...... Primeiro vamos a aplicao de notas SAP, segue a lista mas a lista varia de ambiente para ambiente dependendo do support package...vai a lista...... 0001579415/0001627377/0001630442/0001644550/0001652414/0001653351/0001659236/0001666697/00 01702609/0001717247 Depois dos ajustes conforme as notas, vem algumas alteraes para para atender o cliente. Para o padro cnab240 (digamos que um padro QUE NO PADRO).....cada banco usa como melhor lhe convem, ento para o banco itau ao receber o arquivo que foi processado os pagamentos via DDA fizemos uma intervena para incluir agencia e conta, porque essas informaes no vem no retorno do arquivo.

Na t-code FF.5, no include J_1BBR20, form format_itau_pagar, fizemos

um ENHANCEMENT para incluir conta e agencia.....segue imagem.....

O codigo inclui agencia e conta no header de file e hedaer de lote. Otimo ja conseguimos importar o arquivo que vem do banco mas erros de referencia de documentos podem acontecer, pois a referencia do fornecedor pode ser diferente da referencia que o pessoal da tesouraria do cliente cadastra, dai na hora da importao do arquivo gerado um log para o acerto das devidas referencias sem "documentos" no FI do SAP. Para isso temos que alterar o relatorio RFFOBR_DDA, que cuida do log do DDA. tai a cara do relatorio e o resultado que gera.....

Na linha de comando do ALV existem dois botes um de Del e outro de processamento, vamos atuar neste de reprocessamento. Porque por ele que feito a recompensao do pagamento, ou seja, depois do acerto feito no SAP o usuario pode entrar por esse relatrio e reprocessar o erro sem a necessidade reimportar o arquivo todo novamente pela FF.5. Segue a declarao de variaveis globais para o funcionamento da janela de escolha do documento:

No momento do clique no boto PROCESS, fizemos um ENHANCEMENT, no prog RFFOBR_DDA,

INCLUDE RFFOBR_DDA_O00, FORM user_command do ALV.

Segue imagens do form......so muitas mas vale a pena guardar......

O grande resultado produxido neste form, que quando o usuario clica em processar documento (ou reprocessar) o form busca as partidas em aberto cujo o erro por falta de paridade no SAP, dai ele mostra um ALV para o usuario escolher o documento certo.

Depois de escolher o documento o erro reprocessado mudando seu status e fazendo a devida baixa no FI do SAP, ou seja faz o reprocessamento do erro mudando a sua referencia de errada para a correta.

Bom, ta....DDA funcionando e com melhorias.......abs.

Atentendo a pedidos......segue o font.......

Segue o fonte do include_RFFOBR_DDA_O00 onde tem os ENHANCEMENT.....

*&---------------------------------------------------------------------* *& Include RFFOBR_DDA_O00

*&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Include ZDDA *&---------------------------------------------------------------------* AT SELECTION-SCREEN. PERFORM sub_validate_bukrs. "COMPANYCODE PERFORM sub_validate_year. "FISCAL YEAR PERFORM sub_validate_lifnr. "VENDOR PERFORM sub_validate_stat_reason. * PERFORM SUB_VALIDATE_DATE. "DUE DATE START-OF-SELECTION. *Fetch data PERFORM data_retrieval. *Build fieldcatalog for ALV PERFORM fieldcatalog. *Layout Build for ALV PERFORM build_layout. *Display ALV PERFORM display_alv_report. **************************SUBROUTINES*********************************** *&---------------------------------------------------------------------* *& Form DATA_RETRIEVAL *&---------------------------------------------------------------------* * Fetch data from ZDDA_BRAZIL *----------------------------------------------------------------------* FORM data_retrieval . DATA: v_awkey TYPE awkey. DATA: i_bkpf TYPE TABLE OF ty_bkpf, wa_dda_tmp LIKE j1b_error_dda. DATA: date_table type datum_dda, wa like line of date_table. DATA: wa_dda LIKE LINE OF i_dda. TYPES: BEGIN OF ty_date, due_date(8) TYPE c, END OF ty_date. DATA: dates_itab TYPE TABLE OF ty_date. IF s_date-low NE '00000000'. IF s_date-high EQ '00000000' . s_date-high = s_date-low. ENDIF. CALL FUNCTION 'J_1B_GET_DATE_RANGE_DDA' EXPORTING DATE_FROM = s_date-low DATE_TO = s_date-high TABLES DATE_RANGE = date_table . ****Convert the date to DDMMYYYY format LOOP AT date_table INTO wa. DATA: duedate(8) TYPE c, date_tmp type dats. date_tmp = wa. CONCATENATE date_tmp+6(2) date_tmp+4(2) date_tmp+0(4) INTO duedate. APPEND duedate TO dates_itab.

ENDLOOP. SELECT * FROM j1b_error_dda INTO CORRESPONDING FIELDS OF TABLE i_dda FOR ALL ENTRIES IN dates_itab WHERE bukrs = s_bukrs "COMPANYCODE AND gjahr = s_gjahr "FISICAL YEAR AND cnpj IN s_cnpj "CNPJ NUMBER AND lifnr IN s_vendor "VENDOR AND reference_no IN s_refdoc "NOTA FISICAL NUMBER AND miro_invoice IN s_miro "MIRO INVOICE NUMBER AND doc_num IN s_docnum " ACCOUONTING DOCUMENT NUMBER AND status_check IN p_status "STATUS AND err_reason IN p_reason "REASON FOR ERROR AND due_date EQ dates_itab-due_date AND posting_date IN s_postd. ELSE. SELECT * FROM j1b_error_dda INTO CORRESPONDING FIELDS OF TABLE i_dda WHERE bukrs = s_bukrs "COMPANYCODE AND gjahr = s_gjahr "FISICAL YEAR * AND due_date IN s_date "DUE DATE AND cnpj IN s_cnpj "CNPJ NUMBER AND lifnr IN s_vendor "VENDOR AND reference_no IN s_refdoc "NOTA FISICAL NUMBER AND miro_invoice IN s_miro "MIRO INVOICE NUMBER AND doc_num IN s_docnum " ACCOUONTING DOCUMENT NUMBER AND status_check IN p_status "STATUS AND err_reason IN p_reason "REASON FOR ERROR AND posting_date IN s_postd. ENDIF. IF sy-subrc = 0. SORT i_dda. CLEAR w_dda. LOOP AT i_dda INTO w_dda. IF w_dda-miro_invoice IS NOT INITIAL AND w_dda-doc_num IS INITIAL."C5156882-01-04-2011 CLEAR: v_awkey. CONCATENATE w_dda-miro_invoice w_dda-gjahr INTO v_awkey. SELECT SINGLE bukrs belnr gjahr xblnr awtyp awkey FROM bkpf INTO CORRESPONDING FIELDS OF w_bkpf WHERE bukrs = w_dda-bukrs AND belnr IN s_docnum AND gjahr = w_dda-gjahr AND tcode = 'MIRO' AND xblnr = w_dda-reference_no AND awtyp = 'RMRP' AND awkey = v_awkey. MOVE-CORRESPONDING w_dda to wa_dda_tmp. DELETE j1b_error_dda FROM wa_dda_tmp . *Vendor Invoice number w_dda-doc_num = w_bkpf-belnr. MODIFY i_dda FROM w_dda TRANSPORTING doc_num. MOVE-CORRESPONDING w_dda to wa_dda_tmp. MODIFY j1b_error_dda FROM wa_dda_tmp. CLEAR: w_dda,wa_dda_tmp. ENDIF. "C5156882-01-04-2011

ENDLOOP. REFRESH i_dda_1. DATA:date8 TYPE char12, date9 TYPE char12. CLEAR w_dda. LOOP AT i_dda INTO w_dda. CONCATENATE w_dda-due_date+4(4) w_dda-due_date+2(2) w_dda-due_date(2) INTO date8. CONCATENATE w_dda-issue_date+4(4) w_dda-issue_date+2(2) w_dda-issue_date(2) INTO date9. w_dda_1-due_date = date8. w_dda_1-issue_date = date9. w_dda_1-amount = w_dda-amount. w_dda_1-sel = w_dda-sel. w_dda_1-mandt = w_dda-mandt. w_dda_1-id = w_dda-id. w_dda_1-status_check = w_dda-status_check. w_dda_1-lifnr = w_dda-lifnr. w_dda_1-reference_no = w_dda-reference_no. w_dda_1-doc_num = w_dda-doc_num. w_dda_1-miro_invoice = w_dda-miro_invoice. w_dda_1-bukrs = w_dda-bukrs. w_dda_1-gjahr = w_dda-gjahr. w_dda_1-cnpj = w_dda-cnpj. w_dda_1-barcode = w_dda-barcode. w_dda_1-rec_num = w_dda-rec_num. w_dda_1-partner = w_dda-partner. w_dda_1-posting_date = w_dda-posting_date. w_dda_1-err_reason = w_dda-err_reason. w_dda_1-msg = w_dda-msg. APPEND w_dda_1 TO i_dda_1. CLEAR:w_dda, w_dda_1. ENDLOOP. ENDIF. ENDFORM. " DATA_RETRIEVAL *&---------------------------------------------------------------------* *& Form FIELDCATALOG *&---------------------------------------------------------------------* * Build Fieldcatalog for ALV *----------------------------------------------------------------------* FORM fieldcatalog . CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING * I_PROGRAM_NAME = * I_INTERNAL_TABNAME = i_structure_name = 'J1B_ERROR_DDA_S' * I_CLIENT_NEVER_DISPLAY = 'X' * I_INCLNAME = * I_BYPASSING_BUFFER = * I_BUFFER_ACTIVE =

CHANGING ct_fieldcat = i_fieldcat * EXCEPTIONS * INCONSISTENT_INTERFACE =1 * PROGRAM_ERROR =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. CLEAR w_fieldcat. LOOP AT i_fieldcat INTO w_fieldcat. CASE w_fieldcat-fieldname. WHEN 'REFERENCE_NO'. w_fieldcat-ddictxt = 'M'. w_fieldcat-seltext_m = text-003. w_fieldcat-outputlen = '0030'. WHEN 'DOC_NUM'. w_fieldcat-ddictxt = 'M'. w_fieldcat-outputlen = '0040'. w_fieldcat-seltext_m = text-018. WHEN 'MIRO_INVOICE'. w_fieldcat-ddictxt = 'M'. w_fieldcat-outputlen = '0040'. w_fieldcat-seltext_m = text-019. WHEN 'DUE_DATE'. w_fieldcat-seltext_m = text-006. w_fieldcat-outputlen = '0010'. WHEN 'AMOUNT'. w_fieldcat-ddictxt = 'M'. w_fieldcat-seltext_m = text-007. w_fieldcat-outputlen = '0015'. WHEN 'REC_NUM'. w_fieldcat-ddictxt = 'M'. w_fieldcat-seltext_m = text-008. w_fieldcat-outputlen = '0008'. WHEN 'PARTNER'. w_fieldcat-ddictxt = 'M'. w_fieldcat-seltext_m = text-009. w_fieldcat-outputlen = '0030'. WHEN 'CNPJ'. w_fieldcat-lzero = 'X'. WHEN 'POSTING_DATE'. w_fieldcat-ddictxt = 'M'. w_fieldcat-seltext_m = text-016. w_fieldcat-outputlen = '0030'. WHEN 'MSG'. w_fieldcat-ddictxt = 'M'. w_fieldcat-seltext_m = text-017. w_fieldcat-outputlen = '0030'. ENDCASE. MODIFY i_fieldcat FROM w_fieldcat. CLEAR w_fieldcat. ENDLOOP.

DELETE i_fieldcat WHERE fieldname = 'SEL'. ENDFORM. " FIELDCATALOG *&---------------------------------------------------------------------* *& Form BUILD_LAYOUT *&---------------------------------------------------------------------* * Build Layout for ALV *----------------------------------------------------------------------* FORM build_layout . gd_layout-no_input = 'X'. gd_layout-colwidth_optimize = 'X'. * gd_layout-totals_text = 'Totals'(201). * gd_layout-totals_only = 'X'. * gd_layout-f2code = 'DISP'. "Sets fcode for when double * "click(press f2) gd_layout-zebra = 'X'. * gd_layout-group_change_edit = 'X'. gd_layout-header_text = 'DDA ERROR LOG'. gd_layout-box_fieldname = 'SEL'. ENDFORM. " BUILD_LAYOUT *&---------------------------------------------------------------------* *& Form DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM display_alv_report . **************LOG DISPLAY IN ALV***************************** ************************************************************** gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK ='' * I_BYPASSING_BUFFER ='' * I_BUFFER_ACTIVE ='' i_callback_program = gd_repid i_callback_pf_status_set = 'SET_PF_STATUS' i_callback_user_command = '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 = gd_layout it_fieldcat = i_fieldcat * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = * I_DEFAULT = 'X' i_save = 'X' * IS_VARIANT =

* IT_EVENTS = * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN =0 * I_SCREEN_START_LINE =0 * I_SCREEN_END_COLUMN =0 * I_SCREEN_END_LINE =0 * I_HTML_HEIGHT_TOP =0 * I_HTML_HEIGHT_END =0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES * t_outtab = i_dda[] t_outtab = i_dda_1 * EXCEPTIONS * PROGRAM_ERROR =1 * OTHERS =2 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* *& Form SET_PF_STATUS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->EX_TAB text *----------------------------------------------------------------------* FORM set_pf_status USING ex_tab TYPE slis_t_extab. SET PF-STATUS 'DDA_STATUS'. ENDFORM. "SET_PF_STATUS *&---------------------------------------------------------------------* *& Form USER_COMMAND1 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form USER_COMMAND, Start A *$*$-Start: (1)---------------------------------------------------------------------------------$*$* ENHANCEMENT 1 ZDDA_REFERENCIA_DOC. "active version * *--->>

*Pontual - Ricardo Moura Braga - Jul/2012 - Ajustes referencia documento para baixa via relatorio *Form procura possiveis documentos com referencia errada para tratamento/baixa conforme escolha de usuario PERFORM processa_erro USING sy-ucomm gs_selfield. *--->> ENDENHANCEMENT. *$*$-End: (1)---------------------------------------------------------------------------------$*$* DATA: flag_cnpj TYPE c, flag_cpf TYPE c, flag_amount TYPE c, flag_duedate TYPE c, flag_one_time TYPE c. DATA: w_dda_new TYPE ty_dda. DATA: w_dda_old TYPE j1b_error_dda, w_dda_mod TYPE j1b_error_dda. DATA: duedate_final TYPE regup-zfbdt. DATA: lin TYPE c. DATA: pline LIKE bseg-buzei, mode(1) TYPE c. DATA: lv_awkey TYPE awkey. DATA: lv_amount TYPE bseg-wrbtr, lv_due_date LIKE regup-zfbdt. DATA: lv_fis_year TYPE gjahr. "fiscal year changes CASE r_ucomm. WHEN '&IC1'. READ TABLE i_dda_1 INTO w_dda_1 INDEX rs_selfield-tabindex. CHECK sy-subrc = 0. IF rs_selfield-fieldname = 'LIFNR'. SET PARAMETER ID 'LIF' FIELD w_dda_1-lifnr. SET PARAMETER ID 'BUK' FIELD w_dda_1-bukrs. CALL TRANSACTION 'FK03' AND SKIP FIRST SCREEN. ENDIF. IF rs_selfield-fieldname = 'DOC_NUM'. SET PARAMETER ID 'BLN' FIELD w_dda_1-doc_num. SET PARAMETER ID 'BUK' FIELD w_dda_1-bukrs. SET PARAMETER ID 'GJR' FIELD w_dda_1-gjahr. CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN. ENDIF. IF rs_selfield-fieldname = 'MIRO_INVOICE'. SET PARAMETER ID 'RBN' FIELD w_dda_1-miro_invoice. SET PARAMETER ID 'GJR' FIELD w_dda_1-gjahr. CALL TRANSACTION 'MIR4' AND SKIP FIRST SCREEN. ENDIF. CLEAR w_dda_1. ENDCASE. IF r_ucomm EQ 'DEL'. LOOP AT i_dda_1 INTO w_dda_1 WHERE sel = 'X'. v_index = sy-tabix. * delete from zdda_brazil where lifnr = w_dda-lifnr. DELETE i_dda_1 INDEX v_index. * DELETE J1B_ERROR_DDA FROM wi_dda_1 . DELETE FROM j1b_error_dda WHERE id = w_dda_1-id AND lifnr = w_dda_1-lifnr . ENDLOOP.

* delete i_dda where sel eq 'X'. rs_selfield-refresh = 'X'. ENDIF. ****Post Processing DDA records*********************************** IF r_ucomm EQ 'PROCESS'. LOOP AT i_dda_1 INTO w_dda_1 WHERE sel = 'X' AND status_check = 'E'. READ TABLE i_dda INTO w_dda_new WITH KEY status_check = w_dda_1-status_check lifnr = w_dda_1-lifnr reference_no = w_dda_1-reference_no doc_num = w_dda_1-doc_num miro_invoice = w_dda_1-miro_invoice bukrs = w_dda_1-bukrs gjahr = w_dda_1-gjahr cnpj = w_dda_1-cnpj. MOVE-CORRESPONDING w_dda_new TO w_dda_mod. MOVE-CORRESPONDING w_dda_new TO w_dda_old. CLEAR: flag_amount, flag_duedate, flag_cnpj, flag_cpf, flag_one_time, lv_amount, gt_bseg, gs_bseg, gt_bsik, gs_bsik, gv_belnr, gv_vendor. IF w_dda_mod-doc_num IS NOT INITIAL AND ( w_dda_mod-err_reason = 'C' OR w_dda_mod-err_reason = 'D' OR w_dda_mod-err_reason = 'A'). lv_amount = w_dda_mod-amount. SELECT * FROM bseg INTO TABLE gt_bseg WHERE bukrs = w_dda_mod-bukrs AND belnr = w_dda_mod-doc_num AND gjahr = w_dda_mod-gjahr AND dmbtr = lv_amount AND koart = 'K'. ELSE. select bukrs belnr gjahr xblnr from bsik into corresponding fields of table gt_bsik WHERE bukrs = w_dda_mod-bukrs AND gjahr = w_dda_mod-gjahr AND xblnr = w_dda_mod-reference_no AND bstat = space. *******************FISCAL YEAR CHANGES............ IF sy-subrc NE 0. lv_fis_year = w_dda_mod-gjahr + 1. IF lv_fis_year EQ sy-datum(4). select bukrs belnr gjahr xblnr from bsik into corresponding fields of table gt_bsik WHERE bukrs = w_dda_mod-bukrs AND gjahr = sy-datum(4) AND xblnr = w_dda_mod-reference_no AND bstat = space. if sy-subrc = 0. w_dda_mod-gjahr = sy-datum(4). endif. ENDIF. ENDIF. ************************************************** sort gt_bsik. delete adjacent duplicates from gt_bsik. IF gt_bsik[] IS NOT INITIAL. PERFORM get_unique_belnr using w_dda_mod-cnpj. ENDIF. IF gv_vendor IS NOT INITIAL AND gv_belnr IS NOT INITIAL. *Find the correct line item in a vendor invoice where barcode is to be *updated and also check the due date... lv_amount = w_dda_mod-amount. SELECT * FROM bseg INTO TABLE gt_bseg WHERE bukrs = w_dda_mod-bukrs AND belnr = gv_belnr

AND gjahr = w_dda_mod-gjahr AND dmbtr = lv_amount AND koart = 'K'. SELECT SINGLE awkey INTO lv_awkey FROM bkpf WHERE bukrs = w_dda_mod-bukrs AND belnr = gv_belnr AND gjahr = w_dda_mod-gjahr AND awtyp = 'RMRP'. w_dda_mod-doc_num = gv_belnr. w_dda_mod-lifnr = gv_vendor. w_dda_mod-miro_invoice = lv_awkey(10). ENDIF. ENDIF. LOOP AT gt_bseg INTO gs_bseg. PERFORM check_due_date CHANGING flag_duedate w_dda_mod. IF flag_duedate = 'X'. EXIT. ENDIF. ENDLOOP. If flag_duedate EQ 'X'. PERFORM check_amount CHANGING flag_amount w_dda_mod. PERFORM check_cnpj USING gs_bseg-xcpdd CHANGING w_dda_mod flag_cnpj flag_cpf flag_one_time. ENDIF. IF ( flag_cnpj = 'X' OR flag_cpf = 'X') AND flag_amount = 'X' AND flag_duedate = 'X'. pline = gs_bseg-buzei. PERFORM fb09_changing USING w_dda_mod gv_belnr pline flag_one_time. *****Call transaction FB09 to update the invoice with the Bar code mode = 'N'. CALL TRANSACTION 'FB09' USING bdcdata MODE mode UPDATE 'S'. IF sy-subrc = 0. w_dda_mod-id = '@08@'. w_dda_mod-status_check = 'S'. CLEAR w_dda_mod-err_reason. w_dda_mod-msg = text-015. MODIFY j1b_error_dda FROM w_dda_mod. DELETE j1b_error_dda FROM w_dda_old. ENDIF. ELSE. w_dda_mod-id = '@0A@'. w_dda_mod-status_check = 'E'. DELETE j1b_error_dda FROM w_dda_old. MODIFY j1b_error_dda FROM w_dda_mod. ENDIF. ENDLOOP. PERFORM data_retrieval. rs_selfield-refresh = 'X'. ENDIF. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(2) Form USER_COMMAND, End A *$*$-Start: (2)---------------------------------------------------------------------------------$*$* ENHANCEMENT 2 ZDDA_REFERENCIA_DOC. "active version

* ENDENHANCEMENT. *$*$-End: (2)---------------------------------------------------------------------------------$*$* ENDFORM. " USER_COMMAND1 *&---------------------------------------------------------------------* *& Module USER_COMMAND INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command INPUT. PERFORM user_command USING sy-ucomm gs_selfield. ENDMODULE. " USER_COMMAND INPUT *&---------------------------------------------------------------------* *& Form SUB_VALIDATE_LIFNR *&---------------------------------------------------------------------* FORM sub_validate_lifnr . DATA: lfa1_itab TYPE TABLE OF lfa1. SELECT lifnr FROM lfa1 INTO TABLE lfa1_itab WHERE lifnr IN s_vendor. IF sy-subrc NE 0. SET CURSOR FIELD 'S_VENDOR-LOW'. MESSAGE 'Enter Proper Vendor Data' TYPE 'E'. ENDIF. ENDFORM. " SUB_VALIDATE_LIFNR *&---------------------------------------------------------------------* *& Form SUB_VALIDATE_YEAR *&---------------------------------------------------------------------* FORM sub_validate_year . IF s_gjahr GT sy-datum+0(4). SET CURSOR FIELD 'S_GJAHR_LOW'. MESSAGE 'Enter Proper Fiscal Year' TYPE 'E'. ENDIF. ENDFORM. " SUB_VALIDATE_YEAR *&---------------------------------------------------------------------* *& Form SUB_VALIDATE_DATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM sub_validate_date . * IF S_DATE IS INITIAL. * SET CURSOR FIELD 'S_DATE'. * MESSAGE 'ENTER PROPER DUE DATE' TYPE 'E'. IF s_date GT sy-datum. SET CURSOR FIELD 'S_DATE'. MESSAGE 'Enter Proper Due Date' TYPE 'E'. ENDIF. ENDFORM. " SUB_VALIDATE_DATE *&---------------------------------------------------------------------* *& Form SUB_VALIDATE_BUKRS *&---------------------------------------------------------------------* FORM sub_validate_bukrs . DATA bukrs_v TYPE bukrs. SELECT bukrs INTO bukrs_v FROM t001 WHERE bukrs = s_bukrs.

ENDSELECT. IF sy-subrc NE 0. SET CURSOR FIELD 'S_BUKRS'. MESSAGE 'Enter Proper Company Code' TYPE 'E'. ENDIF. ENDFORM. " SUB_VALIDATE_BUKRS *&---------------------------------------------------------------------* *& Form SUB_VALIDATE_STAT_REASON *&---------------------------------------------------------------------* FORM sub_validate_stat_reason . IF p_status-low NE ''. IF p_status-low CN 'ES'. SET CURSOR FIELD 'P_STATUS-LOW'. MESSAGE 'Enter Proper Status "E/S"' TYPE 'E'. ENDIF. ENDIF. IF p_reason-low NE '' . IF p_reason-low CN 'CDAV'. SET CURSOR FIELD 'P_REASON-LOW'. MESSAGE 'Enter Proper Reason "V/C/D/A"' TYPE 'E'. ENDIF. ENDIF. ENDFORM. " SUB_VALIDATE_STAT_REASON *&---------------------------------------------------------------------* *& Form GET_UNIQUE_BELNR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_W_DDA_MOD_CNPJ text *----------------------------------------------------------------------* FORM GET_UNIQUE_BELNR USING cnpj. DATA: lv_num_of_lines TYPE i. DATA: cnpj_tmp(15) TYPE c. CLEAR: gv_vendor, gv_belnr, lv_num_of_lines. lv_num_of_lines = LINES( gt_bsik ). LOOP AT gt_bsik INTO gs_bsik. SELECT SINGLE * FROM bseg INTO gs_bseg WHERE bukrs = gs_bsik-bukrs AND gjahr = gs_bsik-gjahr AND belnr = gs_bsik-belnr AND koart = 'K'. IF sy-subrc = 0. gv_vendor = gs_bseg-lifnr. IF lv_num_of_lines GT 1. CLEAR cnpj_tmp. cnpj_tmp = cnpj. PERFORM find_vendor USING cnpj_tmp. IF gv_vendor IS NOT INITIAL. EXIT. ENDIF. ELSE. gv_belnr = gs_bsik-belnr. ENDIF. ENDIF. ENDLOOP. ENDFORM. " GET_UNIQUE_BELNR

*&---------------------------------------------------------------------* *& Form FIND_VENDOR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_CNPJ_TMP text *----------------------------------------------------------------------* FORM FIND_VENDOR USING cnpj_tmp. TYPES: BEGIN OF ty_lfa1, lifnr TYPE lifnr, stcd1 TYPE stcd1, stcd2 TYPE stcd2, stkzn TYPE stkzn, xcpdk TYPE xcpdk, lnrza TYPE lnrza, END OF ty_lfa1. DATA: ls_lfa1 TYPE ty_lfa1, xlfa1 LIKE lfa1. DATA: lv_stkzn TYPE stkzn, lv_stcd1 TYPE stcd1, lv_stcd2 TYPE stcd2, lv_lnrza TYPE lfa1-lnrza, lv_lifnr TYPE lfa1-lifnr. IF gs_bseg-xcpdd = 'X'. "One time vendor SELECT SINGLE * FROM bsec INTO gs_bsec WHERE bukrs = gs_bsik-bukrs AND belnr = gs_bsik-belnr AND gjahr = gs_bsik-gjahr. IF sy-subrc = 0. lv_stkzn = gs_bsec-stkzn. lv_stcd1 = gs_bsec-stcd1. lv_stcd2 = gs_bsec-stcd2. ENDIF. ELSE. "Normal vendor SELECT SINGLE lifnr stcd1 stcd2 xcpdk stkzn lnrza FROM lfa1 INTO CORRESPONDING FIELDS OF ls_lfa1 WHERE lifnr = gv_vendor. lv_stkzn = ls_lfa1-stkzn. lv_stcd1 = ls_lfa1-stcd1. lv_stcd2 = ls_lfa1-stcd2. lv_lnrza = ls_lfa1-lnrza. ENDIF. IF lv_stkzn = 'X'. "CPF number SHIFT cnpj_tmp LEFT BY 4 PLACES. IF cnpj_tmp = lv_stcd2. gv_belnr = gs_bsik-belnr. ELSE. CLEAR gv_vendor. ENDIF. ELSE. "CNPJ number SHIFT cnpj_tmp LEFT. IF cnpj_tmp(8) = lv_stcd1(8). gv_belnr = gs_bsik-belnr. ELSE. CLEAR gv_vendor. ENDIF. ENDIF. IF lv_lnrza IS NOT INITIAL AND gv_belnr IS INITIAL. "Alternative Payee

lv_lifnr = lv_lnrza. CALL FUNCTION 'READ_LFA1' EXPORTING xlifnr = lv_lifnr IMPORTING xlfa1 = xlfa1. CLEAR: lv_stkzn,lv_stcd1,lv_stcd2, cnpj_tmp. lv_stkzn = xlfa1-stkzn. lv_stcd1 = xlfa1-stcd1. lv_stcd2 = xlfa1-stcd2. cnpj_tmp = w_dda_1-cnpj. IF lv_stkzn = 'X'. "CPF number SHIFT cnpj_tmp LEFT BY 4 PLACES. IF cnpj_tmp = lv_stcd2. gv_belnr = gs_bsik-belnr. ELSE. CLEAR gv_vendor. ENDIF. ELSE. "CNPJ number SHIFT cnpj_tmp LEFT. IF cnpj_tmp(8) = lv_stcd1(8). gv_belnr = gs_bsik-belnr. ELSE. CLEAR gv_vendor. ENDIF. ENDIF. ENDIF. ENDFORM. " FIND_VENDOR *&---------------------------------------------------------------------* *& Form CHECK_DUE_DATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_FLAG_DUEDATE text * <--P_W_DDA_MOD text *----------------------------------------------------------------------* FORM CHECK_DUE_DATE CHANGING FLAG_DUEDATE W_DDA_MOD TYPE j1b_error_dda. DATA: duedate_final TYPE regup-zfbdt, lv_due_date LIKE regup-zfbdt. CLEAR: flag_duedate. *Calculate due date using FM J_1B_READ_DUEDATE CALL FUNCTION 'J_1B_READ_DUEDATE' EXPORTING wskto = gs_bseg-wskto zfbdt = gs_bseg-zfbdt zbd1t = gs_bseg-zbd1t zbd2t = gs_bseg-zbd2t zbd3t = gs_bseg-zbd3t zbd1p = gs_bseg-zbd1p zbd2p = gs_bseg-zbd2p bukrs = gs_bseg-bukrs togru = '0000' IMPORTING duedate = duedate_final. IF sy-subrc = 0. CONCATENATE duedate_final+6(2) duedate_final+4(2) duedate_final(4)

INTO duedate_final. lv_due_date = w_dda_mod-due_date. IF lv_due_date = duedate_final. flag_duedate = 'X'. ELSE. w_dda_mod-status_check = 'E'. w_dda_mod-err_reason = 'D'. w_dda_mod-msg = text-011. ENDIF. ENDIF. ENDFORM. " CHECK_DUE_DATE *&---------------------------------------------------------------------* *& Form CHECK_AMOUNT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_FLAG_AMOUNT text * <--P_W_DDA_MOD text *----------------------------------------------------------------------* FORM CHECK_AMOUNT CHANGING FLAG_AMOUNT W_DDA_MOD TYPE j1b_error_dda. IF w_dda_mod-amount = gs_bseg-dmbtr. flag_amount = 'X'. ELSE. w_dda_mod-status_check = 'E'. w_dda_mod-err_reason = 'A'. w_dda_mod-msg = text-010. ENDIF. ENDFORM. " CHECK_AMOUNT *&---------------------------------------------------------------------* *& Form CHECK_CNPJ *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_GS_BSEG_XCPDD text * <--P_W_DDA_MOD text * <--P_FLAG_CNPJ text * <--P_FLAG_CPF text * <--P_FLAG_ONE_TIME text *----------------------------------------------------------------------* FORM CHECK_CNPJ USING cpd_vendor CHANGING W_DDA_MOD TYPE j1b_error_dda FLAG_CNPJ FLAG_CPF FLAG_ONE_TIME. TYPES: BEGIN OF ty_lfa1, lifnr TYPE lifnr, stcd1 TYPE stcd1, stcd2 TYPE stcd2, stkzn TYPE stkzn, xcpdk TYPE xcpdk, lnrza TYPE lnrza, END OF ty_lfa1. DATA: ls_lfa1 TYPE ty_lfa1, xlfa1 LIKE lfa1. DATA: lv_stkzn TYPE lfa1-stkzn, lv_stcd1 TYPE lfa1-stcd1,

lv_stcd2 TYPE lfa1-stcd2, lv_lnrza TYPE lfa1-lnrza, lv_lifnr TYPE lfa1-lifnr, cnpj_tmp(15) TYPE c. CLEAR cnpj_tmp. cnpj_tmp = w_dda_mod-cnpj. IF cpd_vendor NE 'X'. "Normal vendor SELECT SINGLE lifnr stcd1 stcd2 xcpdk stkzn lnrza FROM lfa1 INTO CORRESPONDING FIELDS OF ls_lfa1 WHERE lifnr = w_dda_mod-lifnr. lv_lnrza = ls_lfa1-lnrza. lv_stkzn = ls_lfa1-stkzn. lv_stcd1 = ls_lfa1-stcd1. lv_stcd2 = ls_lfa1-stcd2. ELSE. "One time vendor flag_one_time = 'X'. SELECT SINGLE * FROM bsec INTO gs_bsec WHERE bukrs = w_dda_mod-bukrs AND belnr = w_dda_mod-doc_num AND gjahr = w_dda_mod-gjahr. lv_stkzn = gs_bsec-stkzn. lv_stcd1 = gs_bsec-stcd1. lv_stcd2 = gs_bsec-stcd2. ENDIF. PERFORM compare_tax_numbers USING lv_stkzn lv_stcd1 lv_stcd2 cnpj_tmp CHANGING w_dda_mod flag_cnpj flag_cpf. IF ( flag_cnpj NE 'X' AND flag_cpf NE 'X' ) AND lv_lnrza IS NOT INITIAL. "Alternative Payee lv_lifnr = lv_lnrza. CALL FUNCTION 'READ_LFA1' EXPORTING xlifnr = lv_lifnr IMPORTING xlfa1 = xlfa1. CLEAR: lv_stkzn,lv_stcd1,lv_stcd2, cnpj_tmp. lv_stkzn = xlfa1-stkzn. lv_stcd1 = xlfa1-stcd1. lv_stcd2 = xlfa1-stcd2. cnpj_tmp = w_dda_1-cnpj. PERFORM compare_tax_numbers USING lv_stkzn lv_stcd1 lv_stcd2 cnpj_tmp CHANGING w_dda_mod flag_cnpj flag_cpf. ENDIF. ENDFORM. " CHECK_CNPJ *&---------------------------------------------------------------------* *& Form COMPARE_TAX_NUMBERS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_LV_STKZN text * -->P_LV_STCD1 text * -->P_LV_STCD2 text * -->P_CNPJ_TMP text * <--P_W_DDA_MOD text * <--P_FLAG_CNPJ text * <--P_FLAG_CPF text *----------------------------------------------------------------------*

FORM COMPARE_TAX_NUMBERS USING LV_STKZN LV_STCD1 LV_STCD2 CNPJ_TMP CHANGING W_DDA_MOD TYPE j1b_error_dda FLAG_CNPJ FLAG_CPF. IF lv_stkzn NE 'X'. "CNPJ no. IF lv_stcd1(8) = cnpj_tmp+1(8). flag_cnpj = 'X'. ELSE. w_dda_mod-status_check = 'E'. w_dda_mod-err_reason = 'C'. w_dda_mod-msg = text-012. ENDIF. ELSEIF lv_stkzn EQ 'X'. "CPF no. SHIFT cnpj_tmp LEFT BY 4 PLACES. IF lv_stcd2 = cnpj_tmp. flag_cpf = 'X'. ELSE. w_dda_mod-status_check = 'E'. w_dda_mod-err_reason = 'C'. w_dda_mod-msg = text-013. ENDIF. ENDIF. ENDFORM. " COMPARE_TAX_NUMBERS *&---------------------------------------------------------------------* *& Form FB09_CHANGING *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_W_DDA_MOD text * -->P_GV_BELNR text * -->P_PLINE text * -->P_FLAG_ONE_TIME text *----------------------------------------------------------------------* FORM FB09_CHANGING USING W_DDA_MOD TYPE j1b_error_dda GV_BELNR PLINE FLAG_ONE_TIME. TABLES: t019, t001. DATA: docnum TYPE belnr_d, company TYPE bukrs, year TYPE gjahr, barcode TYPE brcde, lv_avkoa TYPE koart_av, lv_zuonr TYPE dzuonr. DATA: field_name LIKE bdcdata-fnam. CONSTANTS: splind LIKE bseg-umskz VALUE 'I'. docnum = w_dda_mod-doc_num. company = w_dda_mod-bukrs. year = w_dda_mod-gjahr. barcode = w_dda_mod-barcode. REFRESH bdcdata. PERFORM bdc_start_dynpro USING 'SAPMF05L' '0102'. "fb09 PERFORM bdc_add_field USING 'RF05L-BELNR' docnum. PERFORM bdc_add_field USING 'RF05L-BUKRS' company.

PERFORM bdc_add_field USING 'RF05L-GJAHR' year. PERFORM bdc_add_field USING 'RF05L-BUZEI' pline. PERFORM bdc_add_field USING 'BDC_OKCODE' ' '. ****For one time vendor IF flag_one_time = 'X'. PERFORM bdc_start_dynpro USING 'SAPLFCPD' '0100'. PERFORM bdc_add_field USING 'BDC_OKCODE' '/00'. ENDIF. PERFORM bdc_start_dynpro USING 'SAPMF05L' '0302'. PERFORM bdc_add_field USING 'RF05L-BRCDE' barcode. IF flag_one_time NE 'X'. PERFORM bdc_start_dynpro USING 'SAPMF05L' '0302'. "noch gleich ENDIF. PERFORM bdc_add_field USING 'BDC_OKCODE' '/11'. ENDFORM. " FB09_CHANGING *&---------------------------------------------------------------------* *& Form BDC_START_DYNPRO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_2000 text * -->P_2001 text *----------------------------------------------------------------------* FORM BDC_START_DYNPRO USING program dynpro. CLEAR bdcdata. bdcdata-program = program. bdcdata-dynpro = dynpro. bdcdata-dynbegin = 'X'. APPEND bdcdata. ENDFORM. " BDC_START_DYNPRO *&---------------------------------------------------------------------* *& Form BDC_ADD_FIELD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_2005 text * -->P_DOCNUM text *----------------------------------------------------------------------* FORM BDC_ADD_FIELD USING fname fvalue. CLEAR bdcdata. bdcdata-fnam = fname. bdcdata-fval = fvalue. APPEND bdcdata. ENDFORM. " BDC_ADD_FIELD """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(3) Include RFFOBR_DDA_O00, End S *$*$-Start: (3)---------------------------------------------------------------------------------$*$* ENHANCEMENT 3 ZDDA_REFERENCIA_DOC. "active version * form processa_erro USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. IF r_ucomm EQ 'PROCESS'. " processa somente para o boto reprocessar DATA: gt_bsega TYPE TABLE OF bseg. DATA: w_dda_newa TYPE ty_dda. DATA: w_dda_olda TYPE j1b_error_dda,

w_dda_moda TYPE j1b_error_dda. DATA: lv_awkeya TYPE awkey. DATA: lv_amounta TYPE bseg-wrbtr, lv_due_datea LIKE regup-zfbdt. DATA: flag_cnpja TYPE c, flag_cpfa TYPE c, flag_amounta TYPE c, flag_duedatea TYPE c, flag_one_timea TYPE c. DATA: plinea LIKE bseg-buzei, modea(1) TYPE c. data: vc_ref type j1b_error_dda-reference_no. "loop na tabela nos itens escolhidos LOOP AT i_dda_1 INTO w_dda_1 WHERE sel = 'X' AND status_check = 'E'. READ TABLE i_dda INTO w_dda_newa WITH KEY status_check = w_dda_1-status_check lifnr = w_dda_1-lifnr reference_no = w_dda_1-reference_no doc_num = w_dda_1-doc_num miro_invoice = w_dda_1-miro_invoice bukrs = w_dda_1-bukrs gjahr = w_dda_1-gjahr cnpj = w_dda_1-cnpj. MOVE-CORRESPONDING w_dda_newa TO w_dda_moda. MOVE-CORRESPONDING w_dda_newa TO w_dda_olda. "processa somente os erros por falta de localizao de documento if w_dda_moda-err_reason = 'V'. "retira os zeros e espaos da referencia do documento retornada pelo banco clear: vc_ref. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING INPUT = w_dda_moda-reference_no IMPORTING OUTPUT = vc_ref. "prepara variavel para o select CONCATENATE '%' vc_ref '%' into vc_ref. * seleciona partidas que tem parte do documento select bukrs belnr gjahr xblnr WRBTR zfbdt lifnr from bsik into corresponding fields of table gt_bsika WHERE bukrs = w_dda_moda-bukrs AND gjahr = w_dda_moda-gjahr * AND xblnr = w_dda_moda-reference_no and xblnr like vc_ref AND bstat = space. if sy-subrc = '0'. " se retornar algum item aparece a janela para escolha do possivel documento clear gs_bsika. read TABLE gt_bsika into gs_bsika index 1. select lifnr NAME1 stcd1 " seleciona dados do fornecedor para completar a tabela from lfa1 into TABLE gt_bsikB where lifnr = gs_bsika-lifnr. IF SY-SUBRC = '0'. "completa a tabela da tela de escolha do documento clear gs_bsikB.

READ TABLE gt_bsikB into gs_bsikB INDEX 1. if sy-subrc = '0'. gs_bsika-lifnr = gs_bsikB-lifnr. gs_bsika-name1 = gs_bsikB-name1. gs_bsika-stcd1 = gs_bsikB-stcd1. MODIFY gt_bsika from gs_bsika index 1. endif. ENDIF." fim complemento dados tabela de escolha do documento clear: gs_bsika."limpa variavel "mostra ALV para escolha do Documento perform alv_doc tables GT_BSIKA CHANGING gs_bsika. ***** processa retorno unico da tabela do alv if gs_bsika is INITIAL. " se tabela de escolha for vazia sai do loop exit. endif. " limpa variaveis refresh: gt_bsik. clear: gs_bsika,gs_bsik. "loop para a insero do item escolhida na tabela para continuar o processamento padro do doc LOOP at GT_BSIKA INTO gs_bsika. gs_bsik-BUKRS = gs_bsika-BUKRS. gs_bsik-BELNR = gs_bsika-BELNR. gs_bsik-GJAHR = gs_bsika-GJAHR. gs_bsik-XBLNR = gs_bsika-XBLNR. insert gs_bsik INTO TABLE gt_bsik. clear: gs_bsika,gs_bsik. endloop. *******-------- continua processamento padro do documento conforme form original sort gt_bsik. delete adjacent duplicates from gt_bsik. IF gt_bsik[] IS NOT INITIAL. PERFORM get_unique_belnr using w_dda_moda-cnpj. ENDIF. IF gv_vendor IS NOT INITIAL AND gv_belnr IS NOT INITIAL. *Find the correct line item in a vendor invoice where barcode is to be *updated and also check the due date... lv_amounta = w_dda_moda-amount. SELECT * FROM bseg INTO TABLE gt_bseg WHERE bukrs = w_dda_moda-bukrs AND belnr = gv_belnr AND gjahr = w_dda_moda-gjahr AND dmbtr = lv_amounta AND koart = 'K'. SELECT SINGLE awkey INTO lv_awkeya FROM bkpf WHERE bukrs = w_dda_moda-bukrs AND belnr = gv_belnr AND gjahr = w_dda_moda-gjahr AND awtyp = 'RMRP'. w_dda_moda-doc_num = gv_belnr. w_dda_moda-lifnr = gv_vendor. w_dda_moda-miro_invoice = lv_awkeya(10). ENDIF. ENDIF. LOOP AT gt_bseg INTO gs_bseg. PERFORM check_due_date CHANGING flag_duedatea w_dda_moda. IF flag_duedatea = 'X'. EXIT. ENDIF. ENDLOOP.

If flag_duedatea EQ 'X'. PERFORM check_amount CHANGING flag_amounta w_dda_moda. PERFORM check_cnpj USING gs_bseg-xcpdd CHANGING w_dda_moda flag_cnpja flag_cpfa flag_one_timea. ENDIF. IF ( flag_cnpja = 'X' OR flag_cpfa = 'X') AND flag_amounta = 'X' AND flag_duedatea = 'X'. plinea = gs_bseg-buzei. PERFORM fb09_changing USING w_dda_moda gv_belnr plinea flag_one_timea. *****Call transaction FB09 to update the invoice with the Bar code modea = 'N'. CALL TRANSACTION 'FB09' USING bdcdata MODE modea UPDATE 'S'. IF sy-subrc = 0. w_dda_moda-id = '@08@'. w_dda_moda-status_check = 'S'. CLEAR w_dda_moda-err_reason. w_dda_moda-msg = text-015. MODIFY j1b_error_dda FROM w_dda_moda. DELETE j1b_error_dda FROM w_dda_olda. ENDIF. ELSE. w_dda_moda-id = '@0A@'. w_dda_moda-status_check = 'E'. DELETE j1b_error_dda FROM w_dda_olda. MODIFY j1b_error_dda FROM w_dda_moda. ENDIF. endif. ENDLOOP. PERFORM data_retrieval. rs_selfield-refresh = 'X'. ENDIF. ENDFORM. form alv_doc tables GT_BSIKA like GT_BSIKA CHANGING Gs_BSIKA type ty_bsika. * tabelas alv DATA: vc_exit_c, st_option_c TYPE slis_data_caller_exit, wa_fieldcat_c TYPE slis_fieldcat_alv, st_selecao_c TYPE slis_selfield, it_fieldcat_c TYPE slis_t_fieldcat_alv. * Compondo os campos a serem apresentados CLEAR wa_fieldcat_c. wa_fieldcat_c-tabname = 'GT_BSIKA'. wa_fieldcat_c-fieldname = 'BUKRS'. wa_fieldcat_c-reptext_ddic = 'Empresa'. wa_fieldcat_c-datatype = ''. wa_fieldcat_c-outputlen = '12'. wa_fieldcat_c-just = 'C'. wa_fieldcat_c-checkbox = ''. wa_fieldcat_c-do_sum = ''.

wa_fieldcat_c-hotspot = ''. APPEND wa_fieldcat_c TO it_fieldcat_c. CLEAR wa_fieldcat_c. wa_fieldcat_c-tabname = 'GT_BSIKA'. wa_fieldcat_c-fieldname = 'BELNR'. wa_fieldcat_c-reptext_ddic = 'N Documento'. wa_fieldcat_c-datatype = ''. wa_fieldcat_c-outputlen = '12'. wa_fieldcat_c-just = 'C'. wa_fieldcat_c-checkbox = ''. wa_fieldcat_c-do_sum = ''. wa_fieldcat_c-hotspot = ''. APPEND wa_fieldcat_c TO it_fieldcat_c. CLEAR wa_fieldcat_c. wa_fieldcat_c-tabname = 'GT_BSIKA'. wa_fieldcat_c-fieldname = 'GJAHR'. wa_fieldcat_c-reptext_ddic = 'Exerccio'. wa_fieldcat_c-datatype = ''. wa_fieldcat_c-outputlen = '12'. wa_fieldcat_c-just = 'C'. wa_fieldcat_c-checkbox = ''. wa_fieldcat_c-do_sum = ''. wa_fieldcat_c-hotspot = ''. APPEND wa_fieldcat_c TO it_fieldcat_c. CLEAR wa_fieldcat_c. wa_fieldcat_c-tabname = 'GT_BSIKA'. wa_fieldcat_c-fieldname = 'XBLNR'. wa_fieldcat_c-reptext_ddic = 'Referencia'. wa_fieldcat_c-datatype = ''. wa_fieldcat_c-outputlen = '12'. wa_fieldcat_c-just = 'C'. wa_fieldcat_c-checkbox = ''. wa_fieldcat_c-do_sum = ''. wa_fieldcat_c-hotspot = ''. APPEND wa_fieldcat_c TO it_fieldcat_c. CLEAR wa_fieldcat_c. wa_fieldcat_c-tabname = 'GT_BSIKA'. wa_fieldcat_c-fieldname = 'WRBTR'. wa_fieldcat_c-reptext_ddic = 'Valor'. wa_fieldcat_c-datatype = ''. wa_fieldcat_c-outputlen = '12'. wa_fieldcat_c-just = 'C'. wa_fieldcat_c-checkbox = ''. wa_fieldcat_c-do_sum = ''. wa_fieldcat_c-hotspot = ''. APPEND wa_fieldcat_c TO it_fieldcat_c. CLEAR wa_fieldcat_c. wa_fieldcat_c-tabname = 'GT_BSIKA'. wa_fieldcat_c-fieldname = 'ZFBDT'. wa_fieldcat_c-reptext_ddic = 'DATA'. wa_fieldcat_c-datatype = ''. wa_fieldcat_c-outputlen = '12'. wa_fieldcat_c-just = 'C'. wa_fieldcat_c-checkbox = ''. wa_fieldcat_c-do_sum = ''.

wa_fieldcat_c-hotspot = ''. APPEND wa_fieldcat_c TO it_fieldcat_c. CLEAR wa_fieldcat_c. wa_fieldcat_c-tabname = 'GT_BSIKA'. wa_fieldcat_c-fieldname = 'LIFNR'. wa_fieldcat_c-reptext_ddic = 'Cod. Fornecedor'. wa_fieldcat_c-datatype = ''. wa_fieldcat_c-outputlen = '12'. wa_fieldcat_c-just = 'C'. wa_fieldcat_c-checkbox = ''. wa_fieldcat_c-do_sum = ''. wa_fieldcat_c-hotspot = ''. APPEND wa_fieldcat_c TO it_fieldcat_c. CLEAR wa_fieldcat_c. wa_fieldcat_c-tabname = 'GT_BSIKA'. wa_fieldcat_c-fieldname = 'NAME1'. wa_fieldcat_c-reptext_ddic = 'NOME '. wa_fieldcat_c-datatype = ''. wa_fieldcat_c-outputlen = '12'. wa_fieldcat_c-just = 'C'. wa_fieldcat_c-checkbox = ''. wa_fieldcat_c-do_sum = ''. wa_fieldcat_c-hotspot = ''. APPEND wa_fieldcat_c TO it_fieldcat_c. CLEAR wa_fieldcat_c. wa_fieldcat_c-tabname = 'GT_BSIKA'. wa_fieldcat_c-fieldname = 'STCD1'. wa_fieldcat_c-reptext_ddic = 'CNPJ'. wa_fieldcat_c-datatype = ''. wa_fieldcat_c-outputlen = '12'. wa_fieldcat_c-just = 'C'. wa_fieldcat_c-checkbox = ''. wa_fieldcat_c-do_sum = ''. wa_fieldcat_c-hotspot = ''. APPEND wa_fieldcat_c TO it_fieldcat_c. * Definindo a otimizao das colunas CLEAR st_option_c. st_option_c-columnopt = 'X'. *chamando ALV de escolkha do documento CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT' EXPORTING i_title = 'Escolha a Ficha desejada' i_selection = 'X' i_zebra = 'X' i_tabname = 'GT_BSIKA' it_fieldcat = it_fieldcat_c is_private = st_option_c IMPORTING es_selfield = st_selecao_c e_exit = vc_exit_c TABLES t_outtab = GT_BSIKA 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. * Verifica se o usurio escolheu algo CHECK vc_exit_c = space. clear gs_bsika. * Lendo a tabela original de acordo com a linha na qual * foi dado o CLICK READ TABLE GT_BSIKA INTO gs_bsika INDEX st_selecao_c-tabindex. ENDFORM. ENDENHANCEMENT. *$*$-End: (3)---------------------------------------------------------------------------------$*$*

S-ar putea să vă placă și