This document provides a report for batch input to create open items in SAP. It includes tables, constants, data structures, internal tables, and parameters used. The report reads data from an input file, processes it, and writes the output to another file. It validates the data and includes logic for taxes and currency conversion.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
161 views34 pages
CXCPRD
This document provides a report for batch input to create open items in SAP. It includes tables, constants, data structures, internal tables, and parameters used. The report reads data from an input file, processes it, and writes the output to another file. It validates the data and includes logic for taxes and currency conversion.
* Description : Batch Input for Create Open Items/RFBIBL00 * * Date/Author : Benjamin Arismendi -> NCG * * Table Updates: * * Input : File parameter * * Output : File parameter * * Return codes : * * Special Logic: * * Includes : * ************************************************************************ * M O D I F I C A T I O N L O G * ************************************************************************ * Date Programmer Request # Description * * -------- ------------ ----------- ------------------------------ * * 20071206 MHERRERA 01 AGREGAR CLASE CONTAB. '12' * * 20071206 MHERRERA 02 AGREGAR CLASE CONTAB. '22' * ************************************************************************ REPORT zfic_open_items. TYPE-POOLS: slis. ************************************************************************ * T A B L E S ************************************************************************ TABLES: bgr00, " Batch input structure for session data bkpf, " Header bbkpf, " Header for accntng document (batch input structure) bbseg, " Accounting document segment (batch input structure) bbtax, " Document taxes (batch input structure) bwith, " Document-withholding tax (batch input structure) lfb1, " Vendor Master (Company Code) knb1, " Customer Master (Company Code) skb1, " Cuentas Mayores csks, " Centros de Costos cepc, " centro de Beneficio zfit_cxc, tbsl. "Posting Key ************************************************************************ * C O N S T A N T S ************************************************************************ CONSTANTS: formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'. ************************************************************************ * D A T A ************************************************************************ CLASS cl_gui_frontend_services DEFINITION LOAD. *INCLUDE bdcrecx1. INCLUDE zbci_bdcrecx1. ** Input File Structure TYPES: BEGIN OF input_structure, bldat LIKE bbkpf-bldat, "8 blart LIKE bbkpf-blart, "2 bukrs LIKE bbkpf-bukrs, "4 newbk LIKE bbseg-newbk, "4 budat LIKE bbkpf-budat, "8 waers LIKE bbkpf-waers, "5 xblnr LIKE bbkpf-xblnr, "16 bktxt LIKE bbkpf-bktxt, "25 newbs LIKE bbseg-newbs, "2 Posting Key wrbtr LIKE bbseg-wrbtr, "16 Amount zfbdt LIKE bbseg-zfbdt, "8 Fecha de Vencimiento Oblig. sgtxt LIKE bbseg-sgtxt, "50 Texto Largo newko LIKE bbseg-hkont, "Cuenta / Codigo Cliente kostl LIKE bbseg-kostl, "Centro de Beneficio tasa LIKE bbkpf-kursf, "10 Tipo de cambio comment(080), END OF input_structure. ** Input file structure TYPES: BEGIN OF input_file_structure, bldat LIKE bbkpf-bldat, "8 blart LIKE bbkpf-blart, "2 bukrs LIKE bbkpf-bukrs, "4 budat LIKE bbkpf-budat, "8 monat LIKE bbkpf-monat, "2 Obtenida de la fecha waers LIKE bbkpf-waers, "5 kursf LIKE bbkpf-kursf, "10 Exchange Rate belnr LIKE bbkpf-belnr, "10 Documento wwert LIKE bbkpf-wwert, "8 Fecha? xblnr LIKE bbkpf-xblnr, "16 bktxt LIKE bbkpf-bktxt, "25 xmwst LIKE bbkpf-xmwst, newbs LIKE bbseg-newbs, "2 Posting Key newko LIKE bbseg-newko, newbk LIKE bbseg-newbk, newum LIKE bbseg-newum, newbw LIKE bbseg-newbw, wrbtr LIKE bbseg-wrbtr, wmwst LIKE bbseg-wmwst, mwskz LIKE bbseg-mwskz, zterm LIKE bbseg-zterm, zfbdt LIKE bbseg-zfbdt, zlspr LIKE bbseg-zlspr, zlsch LIKE bbseg-zlsch, pycur LIKE bbseg-pycur, zuonr LIKE bbseg-zuonr, sgtxt LIKE bbseg-sgtxt, dmbtr LIKE bbseg-dmbtr, bvtyp LIKE bbseg-bvtyp, hbkid LIKE bbseg-hbkid, hzuon LIKE bbseg-hzuon, xref1 LIKE bbseg-xref1, kostl LIKE bbseg-kostl, aufnr LIKE bbseg-aufnr, rke_pspnr LIKE bbseg-rke_pspnr, menge LIKE bbseg-menge, meins LIKE bbseg-meins, * GRUPO # 1 DE IMPUESTOS witht1 LIKE bwith-witht, wt_withcd1 LIKE bwith-wt_withcd, wt_qsshb1 LIKE bwith-wt_qsshb, wt_qbuihb1 LIKE bwith-wt_qbuihb, * GRUPO # 2 DE IMPUESTOS witht2 LIKE bwith-witht, wt_withcd2 LIKE bwith-wt_withcd, wt_qsshb2 LIKE bwith-wt_qsshb, wt_qbuihb2 LIKE bwith-wt_qbuihb, * GRUPO # 3 DE IMPUESTOS witht3 LIKE bwith-witht, wt_withcd3 LIKE bwith-wt_withcd, wt_qsshb3 LIKE bwith-wt_qsshb, wt_qbuihb3 LIKE bwith-wt_qbuihb, * GRUPO # 4 DE IMPUESTOS witht4 LIKE bwith-witht, wt_withcd4 LIKE bwith-wt_withcd, wt_qsshb4 LIKE bwith-wt_qsshb, wt_qbuihb4 LIKE bwith-wt_qbuihb, * GRUPO VAT DE IMPUESTOS witht5 LIKE bwith-witht, wt_withcd5 LIKE bwith-wt_withcd, wt_qsshb5 LIKE bwith-wt_qsshb, wt_qbuihb5 LIKE bwith-wt_qbuihb, katyp LIKE cskb-katyp, END OF input_file_structure. * Tabla de Validacin de Data. * Se validar unicamente por sociedad, tipo de documento y referencia. DATA: BEGIN OF t_validate, bukrs LIKE bkpf-bukrs, blart LIKE bkpf-blart, bldat LIKE bkpf-bldat, xblnr LIKE bkpf-xblnr, comment(080), END OF t_validate. DATA: it_validate LIKE TABLE OF t_validate WITH HEADER LINE. * Input file type table DATA: wa_input_structure TYPE input_structure. DATA: input_file TYPE TABLE OF input_structure WITH HEADER LINE, input_file_exclu TYPE TABLE OF input_structure WITH HEADER LINE, input_file_exclu_190000400 TYPE TABLE OF input_structure WITH HEADER LINE, tmp_input_file TYPE TABLE OF input_structure WITH HEADER LINE. DATA: wa_file_structure TYPE input_file_structure. DATA: wa_input_file TYPE input_structure. DATA: input_file_hd TYPE TABLE OF input_file_structure WITH HEADER LINE. ** Output file TYPES: BEGIN OF output_file_structure, record(4000), END OF output_file_structure. ** Working area for BGR00 DATA: BEGIN OF wa_bgr00. INCLUDE STRUCTURE bgr00. DATA: END OF wa_bgr00. ** Working area for BBKPF DATA: BEGIN OF wa_bbkpf. INCLUDE STRUCTURE bbkpf. DATA: END OF wa_bbkpf. ** Working area for BBSEG DATA: BEGIN OF wa_bbseg. INCLUDE STRUCTURE bbseg. DATA: END OF wa_bbseg. ** Working area for BBTAX DATA: BEGIN OF wa_bbtax. INCLUDE STRUCTURE bbtax. DATA: END OF wa_bbtax. ** Working area for BWITH DATA: BEGIN OF wa_bwith. INCLUDE STRUCTURE bwith. DATA: END OF wa_bwith. ** Internal tables DATA: output_file TYPE TABLE OF output_file_structure WITH HEADER LINE. ** FIELD-SYMBOLS <f>. DATA: tcode(4) TYPE c VALUE 'FB01', "Transaccin no_data TYPE c VALUE '/', "Caracter no_data group1(12) TYPE c VALUE 'NEW_INVOICE', "Grupo group(12) TYPE c VALUE 'NEW_PAYMENT', "Grupo cobro separat TYPE c VALUE '#'. DATA: fieldcat TYPE slis_t_fieldcat_alv, fieldcat_ln LIKE LINE OF fieldcat, sortcat TYPE slis_t_sortinfo_alv, sortcat_ln LIKE LINE OF sortcat, eventcat TYPE slis_t_event, eventcat_ln LIKE LINE OF eventcat, heading TYPE slis_t_listheader, hline TYPE slis_listheader, layout TYPE slis_layout_alv, i_name_id LIKE icon-name, g_repid LIKE sy-repid, col_pos TYPE i, nreg TYPE i, reg_total TYPE i. * Archivo de Salida al servidor. *DATA: p_oufile TYPE rfpdo-rfbifile * VALUE '\usr\sap\trans\tmp\carga_cxc.txt'. *Vpuello DATA: retcode LIKE sy-subrc. *Vpuello RANGES: s_centro_costos FOR bbseg-kostl. ************************************************************************ * P A R A M E T E R S ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS: p_infile TYPE rfpdo-rfbifile, "default 'xx' "Input File. p_oufile LIKE rfpdo-rfbifile DEFAULT '\\SAPPRD\interfcxc\carga_cxc.txt'."Output File. * '\\SAPDEV\sapmnt\trans\tmp\carga_cxc.txt' . "Output File. SELECTION-SCREEN SKIP. PARAMETERS: simulate AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK b1. * Initialization INITIALIZATION. DATA: path TYPE rfpdo-rfbifile. CONCATENATE '\\DOCS_SERVER1\AISAP\01' sy-datum+6(2) sy-datum+4(2) sy-datum(4) '.txt' INTO path. p_infile = path. ************************************************************************ * A T S E L E C T I O N - S C R E E N ************************************************************************ AT SELECTION-SCREEN ON p_infile. TRANSLATE p_infile TO LOWER CASE. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile. PERFORM search_file. *AT SELECTION-SCREEN. * SELECT SINGLE * FROM zfit_cxc WHERE datum EQ sy-datum * AND zfile EQ p_infile * AND zuser EQ sy-uname. * IF sy-subrc EQ 0. * MESSAGE e368(00) WITH 'ERROR: Ya existe registro para el da ' * sy-datum. * ENDIF. ************************************************************************ * S T A R T O F S E L E C T I O N ************************************************************************ START-OF-SELECTION. g_repid = sy-repid. * Inicializar Rangos. PERFORM init_ranges. * READ INPUT FILE PERFORM read_input_file. * Validacin Inicial and Move Data... tmp_input_file[] = input_file[]. PERFORM move_data. * BUILD OUTPUT FILE ( Tambin se hacen Validaciones de Diferencias, * Cuentas, etc.) IF NOT input_file_hd[] IS INITIAL. PERFORM build_output_file. ENDIF. IF simulate NE 'X' AND NOT input_file_hd[] IS INITIAL. *vpuello 25-06-2012 excluir ZM con valor en el campo tasa de cambio para genera r BI usando la TCODE (FBB1) PERFORM upload_docs. ENDIF. * WRITE REPORT input_file[] = tmp_input_file[]. PERFORM fill_error_log. PERFORM write_report. ************************************************************************ * F O R M S ************************************************************************ *&---------------------------------------------------------------------* *& FORM SEARCH_FILE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM search_file . DATA: file TYPE filetable, rc TYPE i. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = 'Select File' default_extension = '*.txt' CHANGING file_table = file rc = rc EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. READ TABLE file INDEX 1 INTO p_infile. ENDFORM. " SEARCH_FILE *&---------------------------------------------------------------------* *& Form init_ranges *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM init_ranges. s_centro_costos-low = '510103001'. s_centro_costos-high = '699999999'. s_centro_costos-sign = 'I'. s_centro_costos-option = 'BT'. APPEND s_centro_costos. CLEAR s_centro_costos. ENDFORM. "init_ranges *&---------------------------------------------------------------------* *& Form READ_INPUT_FILE *&---------------------------------------------------------------------* * Open Input File *&---------------------------------------------------------------------* FORM read_input_file. DATA: in_file_name TYPE string. MOVE p_infile TO in_file_name. * Read File Frontend. IF sy-batch NE 'X'. CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = in_file_name * has_field_separator = separat filetype = 'ASC' read_by_line = 'X' * DAT_MODE = 'X' CHANGING data_tab = input_file[] EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 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. CLEAR input_file_hd. ELSE. DATA: path(080). WRITE p_infile TO path. FIELD-SYMBOLS: <table>." type string. DATA: text_in(266). PERFORM open_close_file USING path 'O'. DO. READ DATASET path INTO text_in . "LENGTH LENG. MOVE text_in TO input_file. APPEND input_file. IF sy-subrc <> 0. EXIT. ENDIF. ENDDO. DATA: i_lines TYPE i. DESCRIBE TABLE input_file LINES i_lines. PERFORM open_close_file USING path 'C'. ENDIF. DELETE input_file WHERE xblnr IS INITIAL AND blart IS INITIAL AND bukrs IS INITIAL. * Sort Data. SORT input_file BY xblnr ASCENDING blart DESCENDING bukrs ASCENDING waers ASCENDING. ENDFORM. " READ_INPUT_FILE *&---------------------------------------------------------------------* *& Form open_close_file *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->FILE text * -->VALUE(VARIABLE) text *----------------------------------------------------------------------* FORM open_close_file USING file value(variable). TRANSLATE file TO LOWER CASE. IF variable EQ 'O'. OPEN DATASET file FOR INPUT IN TEXT MODE ENCODING DEFAULT. IF sy-subrc NE 0. MESSAGE e368(00) WITH 'Error al abrir el archivo de datos' sy-subrc. ENDIF. ELSEIF variable EQ 'C'. CLOSE DATASET file. ENDIF. ENDFORM. " open_close_file *&---------------------------------------------------------------------* *& Form BUILD_OUTPUT_FILE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * Create Batch Input File *----------------------------------------------------------------------* FORM build_output_file. DATA: tab_idx LIKE sy-tabix, cont_50 LIKE bseg-wrbtr, cont_40 LIKE bseg-wrbtr, dummy LIKE bseg-wrbtr, dif LIKE bseg-wrbtr. DATA: dif_txt(016). DATA: dif_pos LIKE bseg-wrbtr, dif_neg LIKE bseg-wrbtr. LOOP AT input_file_hd. tab_idx = sy-tabix. ON CHANGE OF input_file_hd-blart OR input_file_hd-bukrs OR input_file_hd-waers OR input_file_hd-xblnr. IF NOT cont_50 IS INITIAL AND NOT cont_40 IS INITIAL. dif = cont_50 - cont_40. dummy = dif * 100. IF wa_file_structure-waers = 'DOP'. dif_pos = 900. " 9 pESOS dif_neg = dif_pos * -1. ELSE. dif_pos = 30. " 0.3 dOLARES. dif_neg = dif_pos * -1. ENDIF. IF dummy NE 0 AND NOT dummy GE dif_pos AND NOT dummy LE dif_neg. * Crear registros de Ajustes IF dummy GT 0. wa_file_structure-kostl = ''. wa_file_structure-newbs = '40'. wa_file_structure-sgtxt = 'Ajustes Mnimos'. wa_file_structure-newko = '610802099'. wa_file_structure-wrbtr = dif. INSERT wa_file_structure INTO input_file_hd INDEX tab_idx. ELSE. " dif lt 0 wa_file_structure-kostl = ''. wa_file_structure-newbs = '50'. wa_file_structure-sgtxt = 'Ajustes Mnimos'. wa_file_structure-newko = '610802099'. wa_file_structure-wrbtr = -1 * dif. INSERT wa_file_structure INTO input_file_hd INDEX tab_idx. ENDIF. ELSE. IF dummy GE dif_pos OR dummy LE dif_neg. MOVE-CORRESPONDING wa_file_structure TO it_validate. it_validate-comment = 'Descuadre de Saldos'. APPEND it_validate. CLEAR it_validate. DELETE input_file_hd WHERE bukrs EQ wa_file_structure-bukrs AND blart EQ wa_file_structure-blart AND xblnr EQ wa_file_structure-xblnr. ENDIF. ENDIF. CLEAR: cont_50, cont_40. ENDIF. ENDON. MOVE-CORRESPONDING input_file_hd TO wa_file_structure. * IF input_file_hd-blart EQ 'ZN'. IF input_file_hd-waers NE 'USD' AND input_file_hd-waers NE 'DOP'. PERFORM currency_conversion USING input_file_hd-waers 'USD' input_file_hd-bldat CHANGING input_file_hd-wrbtr. ENDIF. IF input_file_hd-newbs EQ '50' OR input_file_hd-newbs EQ '31' *MH-BEGIN01 AGREGAR CLASE CONTAB. '12' COMO UN CREDITO. CHARLES FORT. OR input_file_hd-newbs EQ '12'. *MH-END. cont_50 = cont_50 + input_file_hd-wrbtr. ELSEIF input_file_hd-newbs EQ '40' OR input_file_hd-newbs EQ '01' *MH-BEGIN02 AGREGAR CLASE CONTAB. '22' COMO UN DEDITO. CHARLES FORT OR input_file_hd-newbs EQ '22'. *MH-END. cont_40 = cont_40 + input_file_hd-wrbtr. ENDIF. * ENDIF. ENDLOOP. * Validar la diferencia del ultimo Registro. IF NOT cont_50 IS INITIAL AND NOT cont_40 IS INITIAL. dif = cont_50 - cont_40. dummy = dif * 100. IF wa_file_structure-waers = 'DOP'. dif_pos = 900. " 9 pESOS dif_neg = dif_pos * -1. ELSE. dif_pos = 30. " 0.3 dOLARES. dif_neg = dif_pos * -1. ENDIF. IF dummy NE 0 AND NOT dummy GE dif_pos AND NOT dummy LE dif_neg. * Crear registros de Ajustes IF dummy GT 0. wa_file_structure-kostl = ''. wa_file_structure-newbs = '40'. wa_file_structure-sgtxt = 'Ajustes Mnimos'. wa_file_structure-newko = '610802099'. wa_file_structure-wrbtr = dif. INSERT wa_file_structure INTO TABLE input_file_hd. ELSE. " dif lt 0 wa_file_structure-kostl = ''. wa_file_structure-newbs = '50'. wa_file_structure-sgtxt = 'Ajustes Mnimos'. wa_file_structure-newko = '610802099'. wa_file_structure-wrbtr = -1 * dif. INSERT wa_file_structure INTO TABLE input_file_hd. ENDIF. ELSE. IF dummy GE dif_pos OR dummy LE dif_neg. MOVE-CORRESPONDING wa_file_structure TO it_validate. WRITE dif TO dif_txt. CONCATENATE 'Descuadre de Saldos, Excedente de' dif_txt INTO it_validate-comment SEPARATED BY space. APPEND it_validate. CLEAR it_validate. DELETE input_file_hd WHERE bukrs EQ input_file_hd-bukrs AND blart EQ input_file_hd-blart AND xblnr EQ input_file_hd-xblnr. ENDIF. ENDIF. CLEAR: cont_50, cont_40. ENDIF. LOOP AT input_file_hd. IF NOT input_file_hd-newko IS INITIAL. ** Posting key validation SELECT SINGLE koart INTO tbsl-koart FROM tbsl WHERE bschl EQ input_file_hd-newbs. IF sy-subrc EQ 0. ** Search Vendors IF tbsl-koart EQ 'K'. DATA: proveedor TYPE lfa1-lifnr. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = input_file_hd-newko IMPORTING output = proveedor. SELECT SINGLE * FROM lfb1 WHERE lifnr EQ proveedor AND bukrs EQ input_file_hd-bukrs. IF sy-subrc EQ 0. input_file_hd-newko = proveedor. MODIFY input_file_hd. ELSE. MOVE-CORRESPONDING input_file_hd TO it_validate. CONCATENATE 'Proveedor No Existe ' proveedor INTO it_validate-comment SEPARATED BY space. APPEND it_validate. CLEAR it_validate. DELETE input_file_hd WHERE bukrs EQ input_file_hd-bukrs AND blart EQ input_file_hd-blart AND xblnr EQ input_file_hd-xblnr. CONTINUE. ENDIF. ** Search Customer ELSEIF tbsl-koart EQ 'D'. DATA: cliente TYPE kna1-kunnr. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = input_file_hd-newko IMPORTING output = cliente. SELECT SINGLE * FROM knb1 WHERE kunnr EQ cliente AND bukrs EQ input_file_hd-bukrs. IF sy-subrc EQ 0. input_file_hd-newko = cliente. MODIFY input_file_hd. ELSE. MOVE-CORRESPONDING input_file_hd TO it_validate. CONCATENATE 'Cliente No Existe ' cliente INTO it_validate-comment SEPARATED BY space. APPEND it_validate. CLEAR it_validate. DELETE input_file_hd WHERE bukrs EQ input_file_hd-bukrs AND blart EQ input_file_hd-blart AND xblnr EQ input_file_hd-xblnr. CONTINUE. ENDIF. ** Search Account ELSEIF tbsl-koart EQ 'S'. DATA: cuenta TYPE saknr. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = input_file_hd-newko IMPORTING output = cuenta. SELECT SINGLE * FROM skb1 WHERE saknr EQ cuenta AND bukrs EQ input_file_hd-bukrs. IF sy-subrc NE 0. MOVE-CORRESPONDING input_file_hd TO it_validate. CONCATENATE 'Cuenta de Mayor No Existe ' cuenta INTO it_validate-comment SEPARATED BY space. APPEND it_validate. CLEAR it_validate. DELETE input_file_hd WHERE bukrs EQ input_file_hd-bukrs AND blart EQ input_file_hd-blart AND xblnr EQ input_file_hd-xblnr. CONTINUE. ENDIF. ENDIF. ELSE. MOVE-CORRESPONDING input_file_hd TO it_validate. it_validate-comment = 'Posting Key Invalido'. APPEND it_validate. CLEAR it_validate. DELETE input_file_hd WHERE bukrs EQ input_file_hd-bukrs AND blart EQ input_file_hd-blart AND xblnr EQ input_file_hd-xblnr. CONTINUE. ENDIF. ELSE. MOVE-CORRESPONDING input_file_hd TO it_validate. it_validate-comment = 'Cuenta Vacia'. APPEND it_validate. CLEAR it_validate. DELETE input_file_hd WHERE bukrs EQ input_file_hd-bukrs AND blart EQ input_file_hd-blart AND xblnr EQ input_file_hd-xblnr. CONTINUE. ENDIF. * Validacin del Centro de Beneficio. IF NOT input_file_hd-kostl IS INITIAL. DATA: char_ind(001). char_ind = input_file_hd-kostl+0(1). IF char_ind EQ 'B'. SELECT SINGLE * FROM cepc WHERE prctr EQ input_file_hd-kostl. IF sy-subrc NE 0. MOVE-CORRESPONDING input_file_hd TO it_validate. CONCATENATE 'Centro de Beneficio no Existe ' input_file_hd-kostl INTO it_validate-comment SEPARATED BY space. APPEND it_validate. CLEAR it_validate. DELETE input_file_hd WHERE bukrs EQ input_file_hd-bukrs AND blart EQ input_file_hd-blart AND xblnr EQ input_file_hd-xblnr. CONTINUE. ENDIF. ELSEIF char_ind EQ 'C'. SELECT SINGLE * FROM csks WHERE kostl EQ input_file_hd-kostl AND bukrs EQ input_file_hd-bukrs. IF sy-subrc NE 0. MOVE-CORRESPONDING input_file_hd TO it_validate. CONCATENATE 'Centro de Costo no Existe ' input_file_hd-kostl INTO it_validate-comment SEPARATED BY space. APPEND it_validate. CLEAR it_validate. DELETE input_file_hd WHERE bukrs EQ input_file_hd-bukrs AND blart EQ input_file_hd-blart AND xblnr EQ input_file_hd-xblnr. CONTINUE. ENDIF. ENDIF. ENDIF. ENDLOOP. * Indicador de IVA * Este campo debe ser llenado Manualmente ya que siempre ser el mismo, * y depender del Porcentaje del ITBIS en el da. * El valor inicial ser A1 asociado al 16% de ITBIS. DATA: v_katyp LIKE cskb-katyp, v_kstar LIKE cskb-kstar. LOOP AT input_file_hd. tab_idx = sy-tabix. * Manera mas facil de validar si el registro esta asociado a una cuenta * y no a un proveedor o cliente. IF input_file_hd-newko NE '610802099'. IF NOT input_file_hd-kostl IS INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = input_file_hd-newko IMPORTING output = v_kstar. SELECT SINGLE katyp INTO input_file_hd-katyp FROM cskb WHERE kstar EQ v_kstar. IF sy-subrc EQ 0. IF input_file_hd-katyp NE '11' AND input_file_hd-katyp NE '12'. MOVE 'V0' TO input_file_hd-mwskz. MODIFY input_file_hd INDEX tab_idx. ELSEIF input_file_hd-newbs EQ '50'. MOVE 'A1' TO input_file_hd-mwskz. MODIFY input_file_hd INDEX tab_idx. ELSE. MODIFY input_file_hd INDEX tab_idx. ENDIF. * IF input_file_hd-newko IN s_centro_costos. * MOVE 'V0' TO input_file_hd-mwskz. * MODIFY input_file_hd INDEX tab_idx. * ELSEIF input_file_hd-newbs EQ '50'. * MOVE 'A1' TO input_file_hd-mwskz. * MODIFY input_file_hd INDEX tab_idx. * ENDIF. * ENDIF. ELSE. IF input_file_hd-newbs EQ '50'. MOVE 'A1' TO input_file_hd-mwskz. MODIFY input_file_hd INDEX tab_idx. ENDIF. ENDIF. ENDIF. ENDLOOP. * Construir el Archivo. IF simulate NE 'X'. ** Fill BGR00 PERFORM build_bgr00. LOOP AT input_file_hd. ON CHANGE OF input_file_hd-blart OR input_file_hd-bukrs OR input_file_hd-waers OR input_file_hd-xblnr. PERFORM build_bbkpf. reg_total = reg_total + 1. ENDON. PERFORM build_bbseg. IF NOT input_file_hd-witht1 IS INITIAL. PERFORM build_bwith. ENDIF. ENDLOOP. ** Transfer to output file OPEN DATASET p_oufile FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. LOOP AT output_file. TRANSFER output_file-record TO p_oufile. ENDLOOP. CLOSE DATASET p_oufile. ENDIF. ENDFORM. " BUILD_OUTPUT_FILE *&---------------------------------------------------------------------* *& Form BUILD_BGR00 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM build_bgr00 . PERFORM init_structure USING wa_bgr00. MOVE: '0' TO wa_bgr00-stype, group1 TO wa_bgr00-group, '' TO wa_bgr00-start, sy-mandt TO wa_bgr00-mandt, sy-uname TO wa_bgr00-usnam, 'X' TO wa_bgr00-xkeep. MOVE wa_bgr00 TO output_file-record. APPEND output_file. ENDFORM. " BUILD_BGR00 *&---------------------------------------------------------------------* *& FORM INIT_STRUCTURE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM init_structure USING p_wa. DATA: n TYPE i. CLEAR: p_wa. n = 0. DO. ADD 1 TO n. ASSIGN COMPONENT n OF STRUCTURE p_wa TO <f>. IF sy-subrc = 0. MOVE no_data TO <f>. ELSE. EXIT. ENDIF. ENDDO. ENDFORM. " INIT_STRUCTURE *&---------------------------------------------------------------------* *& Form BUILD_BBKPF *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM build_bbkpf. PERFORM init_structure USING wa_bbkpf. MOVE: '1' TO wa_bbkpf-stype, tcode TO wa_bbkpf-tcode, input_file_hd-bldat TO wa_bbkpf-bldat, input_file_hd-blart TO wa_bbkpf-blart, input_file_hd-bukrs TO wa_bbkpf-bukrs, input_file_hd-budat TO wa_bbkpf-budat, input_file_hd-monat TO wa_bbkpf-monat, input_file_hd-waers TO wa_bbkpf-waers. IF NOT input_file_hd-xblnr IS INITIAL. MOVE input_file_hd-xblnr TO wa_bbkpf-xblnr. ENDIF. IF NOT input_file_hd-kursf IS INITIAL. MOVE input_file_hd-kursf TO wa_bbkpf-kursf. ENDIF. IF NOT input_file_hd-belnr IS INITIAL. MOVE input_file_hd-belnr TO wa_bbkpf-belnr. ENDIF. IF NOT input_file_hd-wwert IS INITIAL. MOVE input_file_hd-wwert TO wa_bbkpf-wwert. ENDIF. IF NOT input_file_hd-bktxt IS INITIAL. MOVE input_file_hd-bktxt TO wa_bbkpf-bktxt. ENDIF. IF NOT input_file_hd-xmwst IS INITIAL. MOVE input_file_hd-xmwst TO wa_bbkpf-xmwst. ENDIF. CLEAR output_file-record. MOVE wa_bbkpf TO output_file-record. APPEND output_file. ENDFORM. " BUILD_BBKPF *&---------------------------------------------------------------------* *& Form BUILD_BBSEG *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM build_bbseg . PERFORM init_structure USING wa_bbseg. MOVE: '2' TO wa_bbseg-stype, 'BBSEG' TO wa_bbseg-tbnam, input_file_hd-newbs TO wa_bbseg-newbs, input_file_hd-newko TO wa_bbseg-newko, input_file_hd-wrbtr TO wa_bbseg-wrbtr, input_file_hd-sgtxt TO wa_bbseg-sgtxt. * Fecha del Batch Input. * IF NOT input_file_hd-zfbdt IS INITIAL. * MOVE input_file_hd-zfbdt TO wa_bbseg-zfbdt. * ENDIF. IF NOT input_file_hd-mwskz IS INITIAL. MOVE input_file_hd-mwskz TO wa_bbseg-mwskz. ENDIF. IF NOT input_file_hd-sgtxt IS INITIAL. MOVE input_file_hd-sgtxt TO wa_bbseg-zuonr. ENDIF. IF NOT input_file_hd-zterm IS INITIAL. MOVE input_file_hd-zterm TO wa_bbseg-zterm. ENDIF. IF NOT input_file_hd-zlspr IS INITIAL. MOVE input_file_hd-zlspr TO wa_bbseg-zlspr. ENDIF. IF NOT input_file_hd-newum IS INITIAL. MOVE input_file_hd-newum TO wa_bbseg-newum. ENDIF. IF NOT input_file_hd-newbw IS INITIAL. MOVE input_file_hd-newbw TO wa_bbseg-newbw. ENDIF. IF NOT input_file_hd-newbk IS INITIAL. MOVE input_file_hd-newbk TO wa_bbseg-newbk. ENDIF. IF NOT input_file_hd-wmwst IS INITIAL. MOVE input_file_hd-wmwst TO wa_bbseg-wmwst. ENDIF. IF NOT input_file_hd-zlsch IS INITIAL. MOVE input_file_hd-zlsch TO wa_bbseg-zlsch. ENDIF. IF NOT input_file_hd-pycur IS INITIAL. MOVE input_file_hd-pycur TO wa_bbseg-pycur. ENDIF. IF NOT input_file_hd-dmbtr IS INITIAL. MOVE input_file_hd-dmbtr TO wa_bbseg-dmbtr. ENDIF. IF NOT input_file_hd-bvtyp IS INITIAL. MOVE input_file_hd-bvtyp TO wa_bbseg-bvtyp. ENDIF. IF NOT input_file_hd-hbkid IS INITIAL. MOVE input_file_hd-hbkid TO wa_bbseg-hbkid. ENDIF. IF NOT input_file_hd-hzuon IS INITIAL. MOVE input_file_hd-hzuon TO wa_bbseg-hzuon. ENDIF. IF NOT input_file_hd-xref1 IS INITIAL. MOVE input_file_hd-xref1 TO wa_bbseg-xref1. ENDIF. * Diferenciar entre asignar un Centro de Costo o un Centro de Beneficio. IF NOT input_file_hd-kostl IS INITIAL. IF input_file_hd-katyp NE '11' AND input_file_hd-katyp NE '12'. * IF input_file_hd-newko IN s_centro_costos. MOVE input_file_hd-kostl TO wa_bbseg-kostl. ELSE. MOVE input_file_hd-kostl TO wa_bbseg-prctr. ENDIF. ENDIF. IF NOT input_file_hd-aufnr IS INITIAL. MOVE input_file_hd-aufnr TO wa_bbseg-aufnr. ENDIF. IF NOT input_file_hd-rke_pspnr IS INITIAL. MOVE input_file_hd-rke_pspnr TO wa_bbseg-rke_pspnr. ENDIF. IF NOT input_file_hd-menge IS INITIAL. MOVE input_file_hd-menge TO wa_bbseg-menge. ENDIF. IF NOT input_file_hd-meins IS INITIAL. MOVE input_file_hd-meins TO wa_bbseg-meins. ENDIF. CLEAR output_file-record. MOVE wa_bbseg TO output_file-record. APPEND output_file. ENDFORM. " BUILD_BBSEG *&---------------------------------------------------------------------* *& Form BUILD_BWITH *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM build_bwith . PERFORM init_structure USING wa_bwith. MOVE: '2' TO wa_bwith-stype, 'BWITH' TO wa_bwith-tbnam. ** Withholding Tax 1 IF NOT input_file_hd-witht1 IS INITIAL. MOVE input_file_hd-witht1 TO wa_bwith-witht. IF NOT input_file_hd-wt_withcd1 IS INITIAL. MOVE input_file_hd-wt_withcd1 TO wa_bwith-wt_withcd. ENDIF. IF NOT input_file_hd-wt_qsshb1 IS INITIAL. MOVE input_file_hd-wt_qsshb1 TO wa_bwith-wt_qsshb. ENDIF. IF NOT input_file_hd-wt_qbuihb1 IS INITIAL. MOVE input_file_hd-wt_qbuihb1 TO wa_bwith-wt_qbuihb. ENDIF. CLEAR output_file-record. MOVE wa_bwith TO output_file-record. APPEND output_file. ENDIF. ** Withholding Tax 2 IF NOT input_file_hd-witht2 IS INITIAL. MOVE input_file_hd-witht2 TO wa_bwith-witht. IF NOT input_file_hd-wt_withcd2 IS INITIAL. MOVE input_file_hd-wt_withcd2 TO wa_bwith-wt_withcd. ENDIF. IF NOT input_file_hd-wt_qsshb2 IS INITIAL. MOVE input_file_hd-wt_qsshb2 TO wa_bwith-wt_qsshb. ENDIF. IF NOT input_file_hd-wt_qbuihb2 IS INITIAL. MOVE input_file_hd-wt_qbuihb2 TO wa_bwith-wt_qbuihb. ENDIF. CLEAR output_file-record. MOVE wa_bwith TO output_file-record. APPEND output_file. ENDIF. *** Withholding Tax 3 IF NOT input_file_hd-witht3 IS INITIAL. MOVE input_file_hd-witht3 TO wa_bwith-witht. IF NOT input_file_hd-wt_withcd3 IS INITIAL. MOVE input_file_hd-wt_withcd3 TO wa_bwith-wt_withcd. ENDIF. IF NOT input_file_hd-wt_qsshb3 IS INITIAL. MOVE input_file_hd-wt_qsshb3 TO wa_bwith-wt_qsshb. ENDIF. IF NOT input_file_hd-wt_qbuihb3 IS INITIAL. MOVE input_file_hd-wt_qbuihb3 TO wa_bwith-wt_qbuihb. ENDIF. CLEAR output_file-record. MOVE wa_bwith TO output_file-record. APPEND output_file. ENDIF. ** Withholding Tax 4 IF NOT input_file_hd-witht4 IS INITIAL. MOVE input_file_hd-witht4 TO wa_bwith-witht. IF NOT input_file_hd-wt_withcd4 IS INITIAL. MOVE input_file_hd-wt_withcd4 TO wa_bwith-wt_withcd. ENDIF. IF NOT input_file_hd-wt_qsshb4 IS INITIAL. MOVE input_file_hd-wt_qsshb4 TO wa_bwith-wt_qsshb. ENDIF. IF NOT input_file_hd-wt_qbuihb4 IS INITIAL. MOVE input_file_hd-wt_qbuihb4 TO wa_bwith-wt_qbuihb. ENDIF. CLEAR output_file-record. MOVE wa_bwith TO output_file-record. APPEND output_file. ENDIF. ** Withholding VAT IF NOT input_file_hd-witht5 IS INITIAL. MOVE input_file_hd-witht5 TO wa_bwith-witht. IF NOT input_file_hd-wt_withcd5 IS INITIAL. MOVE input_file_hd-wt_withcd5 TO wa_bwith-wt_withcd. ENDIF. IF NOT input_file_hd-wt_qsshb5 IS INITIAL. MOVE input_file_hd-wt_qsshb5 TO wa_bwith-wt_qsshb. ENDIF. IF NOT input_file_hd-wt_qbuihb5 IS INITIAL. MOVE input_file_hd-wt_qbuihb5 TO wa_bwith-wt_qbuihb. ENDIF. CLEAR output_file-record. MOVE wa_bwith TO output_file-record. APPEND output_file. ENDIF. ENDFORM. " BUILD_BWITH *&---------------------------------------------------------------------* *& Form move_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM move_data. REFRESH: input_file_exclu_190000400, input_file_exclu. CLEAR: input_file_exclu_190000400, input_file_exclu. * Valido que los registros no se encuentren ya registrados * en el sistema. PERFORM validate_entries. LOOP AT input_file. IF input_file-bldat IS INITIAL OR input_file-blart IS INITIAL OR input_file-bukrs IS INITIAL OR input_file-budat IS INITIAL OR input_file-waers IS INITIAL OR input_file-xblnr IS INITIAL OR input_file-newbs IS INITIAL OR input_file-zfbdt IS INITIAL OR input_file-newko IS INITIAL. MOVE-CORRESPONDING input_file TO it_validate. it_validate-comment = 'Datos Incompletos'. APPEND it_validate. CLEAR it_validate. DELETE input_file WHERE bldat EQ input_file-bldat AND blart EQ input_file-blart AND bukrs EQ input_file-bukrs AND xblnr EQ input_file-xblnr. ENDIF. ENDLOOP. CLEAR: wa_input_file. *vpuello (excluir de la tabla principal los pagos en pesos para las facturas en dolares) LOOP AT input_file INTO wa_input_file. *{ REPLACE PRUK900090 1 *\ IF NOT wa_input_file-tasa IS INITIAL AND wa_input_file-blart = 'ZM' AND wa _input_file-waers = 'DOP' *\ AND wa_input_file-waers = 'USD'. "Condicin para que no se de IF NOT wa_input_file-tasa IS INITIAL AND wa_input_file-blart = 'ZM' AND ( wa _input_file-waers = 'DOP' OR wa_input_file-waers = 'EUR' ) . *} REPLACE READ TABLE input_file WITH KEY waers = 'USD' xblnr = wa_input_file-xblnr bktxt = wa_input_file-bktxt bldat = wa_input_file-bldat bukrs = wa_input_file-bukrs. IF syst-subrc = 0. MOVE-CORRESPONDING wa_input_file TO input_file_exclu. APPEND input_file_exclu. CLEAR: input_file_exclu, wa_input_file. ENDIF. ENDIF. ENDLOOP. IF NOT input_file_exclu[] IS INITIAL. LOOP AT input_file_exclu. DELETE input_file WHERE bukrs = input_file_exclu-bukrs AND bldat = input_file_exclu-bldat AND xblnr = input_file_exclu-xblnr AND bktxt = input_file_exclu-bktxt AND blart = 'ZM' *{ REPLACE PRUK900090 2 *\ AND waers = 'DOP'. AND ( waers = 'DOP' OR waers = 'EUR' ). *} REPLACE ENDLOOP. LOOP AT input_file_exclu. IF input_file_exclu-newko = '190000400'. MOVE-CORRESPONDING input_file_exclu TO input_file_exclu_190000400. APPEND input_file_exclu_190000400. CLEAR input_file_exclu_190000400. ENDIF. ENDLOOP. DELETE input_file_exclu WHERE newko = '190000400'. ENDIF. *vpuello LOOP AT input_file. MOVE-CORRESPONDING input_file TO input_file_hd. APPEND input_file_hd. CLEAR input_file_hd. ENDLOOP. ENDFORM. "move_data *&---------------------------------------------------------------------* *& Form validate_entries *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM validate_entries. DATA: tab_idx LIKE sy-tabix. DATA: BEGIN OF t_valid, bukrs LIKE bkpf-bukrs, blart LIKE bkpf-blart, bldat LIKE bkpf-bldat, xblnr LIKE bkpf-xblnr, END OF t_valid. DATA: it_valid LIKE TABLE OF t_valid WITH HEADER LINE. DATA: tmp_bldat(8). LOOP AT input_file. MOVE-CORRESPONDING input_file TO it_validate. it_validate-comment = 'Registro Duplicado'. * BArismendi 2007 * Error de Duplicidad de Registros. CONCATENATE input_file-bldat+4(4) input_file-bldat+2(2) input_file-bldat+0(2) INTO tmp_bldat. it_validate-bldat = tmp_bldat. APPEND it_validate. CLEAR it_validate. ENDLOOP. DELETE ADJACENT DUPLICATES FROM it_validate COMPARING ALL FIELDS. SELECT * INTO CORRESPONDING FIELDS OF TABLE it_valid FROM bkpf FOR ALL ENTRIES IN it_validate WHERE bukrs EQ it_validate-bukrs AND blart EQ it_validate-blart AND bldat EQ it_validate-bldat AND xblnr EQ it_validate-xblnr AND stblg EQ space. LOOP AT it_validate. tab_idx = sy-tabix. * BArismendi 2007 * Error de Duplicidad de Registros. CONCATENATE it_validate-bldat+6(2) it_validate-bldat+4(2) it_validate-bldat+0(4) INTO tmp_bldat. READ TABLE it_valid WITH KEY bukrs = it_validate-bukrs blart = it_validate-blart bldat = it_validate-bldat xblnr = it_validate-xblnr. IF sy-subrc EQ 0. DELETE input_file WHERE bukrs EQ it_validate-bukrs AND blart EQ it_validate-blart AND bldat EQ tmp_bldat AND xblnr EQ it_validate-xblnr. ELSE. DELETE it_validate INDEX tab_idx. CLEAR it_validate. ENDIF. ENDLOOP. ENDFORM. "validate_entries *&---------------------------------------------------------------------* *& Form upload_docs *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM upload_docs. PERFORM validate_entry. *vpuello IF NOT input_file_exclu[] IS INITIAL. PERFORM bi_fbb1. ENDIF. *FBB1 *vpuello SUBMIT rfbibl00 WITH ds_name EQ p_oufile WITH callmode EQ 'B' WITH xinf EQ 'X' AND RETURN. SUBMIT rsbdcsub WITH mappe EQ group1 WITH von EQ sy-datum WITH z_verarb EQ 'X' WITH fehler EQ ' ' AND RETURN. ENDFORM. "upload_docs *&---------------------------------------------------------------------* *& Form FILL_CONTROL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM validate_entry. DATA: wa_cxc LIKE zfit_cxc. wa_cxc-datum = sy-datum. wa_cxc-timlo = sy-timlo. wa_cxc-zfile = p_infile. wa_cxc-zuser = sy-uname. INSERT INTO zfit_cxc VALUES wa_cxc. IF sy-subrc NE 0. MESSAGE e368(00) WITH 'ERROR: Ya existe registro en tabla control'. ENDIF. ENDFORM. "FILL_CONTROL *&---------------------------------------------------------------------* *& Form fill_error_log *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM fill_error_log. DATA: tab_idx LIKE sy-tabix. LOOP AT input_file. tab_idx = sy-tabix. READ TABLE it_validate WITH KEY bukrs = input_file-bukrs blart = input_file-blart xblnr = input_file-xblnr. IF sy-subrc NE 0. DELETE input_file WHERE bukrs EQ input_file-bukrs AND blart EQ input_file-blart AND xblnr EQ input_file-xblnr. ELSE. input_file-comment = it_validate-comment. MODIFY input_file INDEX tab_idx. ENDIF. CLEAR it_validate. ENDLOOP. ENDFORM. "fill_error_log *&---------------------------------------------------------------------* *& Form WRITE_REPORT *&---------------------------------------------------------------------* FORM write_report . DESCRIBE TABLE input_file LINES nreg. IF nreg GT 0. g_repid = sy-repid. PERFORM layout. PERFORM fieldcat. PERFORM build_eventtab USING eventcat[]. PERFORM build_comment USING heading[]. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = g_repid is_layout = layout it_fieldcat = fieldcat[] i_default = 'X' i_save = 'A' it_events = eventcat[] TABLES t_outtab = input_file[] EXCEPTIONS program_error = 1 OTHERS = 2. ELSE. MESSAGE s368(00) WITH text-003. ENDIF. ENDFORM. " WRITE_REPORT *&--------------------------------------------------------------------* *& Form LAYOUT *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM layout . layout-zebra = 'X'. layout-detail_popup = 'X'. layout-colwidth_optimize = 'X'. * layout-info_fieldname = 'LINE_COLOR'. ENDFORM. " LAYOUT *&---------------------------------------------------------------------* *& FORM FIELDCAT *&---------------------------------------------------------------------* FORM fieldcat. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'BLDAT'. fieldcat_ln-seltext_m = 'Fecha Doc.'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'BLART'. fieldcat_ln-seltext_m = 'Tipo'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'BUKRS'. fieldcat_ln-seltext_m = 'Sociedad'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'NEWBK'. fieldcat_ln-seltext_m = 'Intercompaia'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'BUDAT'. fieldcat_ln-seltext_m = 'Fecha Posteo'. fieldcat_ln-datatype = 'DATS'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'WAERS'. fieldcat_ln-seltext_m = 'Moneda'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'XBLNR'. fieldcat_ln-seltext_m = 'Referencia'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'BKTXT'. fieldcat_ln-seltext_m = 'Texto Corto'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'NEWBS'. fieldcat_ln-seltext_m = 'Posting Key'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'WRBTR'. fieldcat_ln-seltext_m = 'Monto'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'ZFBDT'. fieldcat_ln-seltext_m = 'Fecha Ven.'. fieldcat_ln-datatype = 'DATS'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'SGTXT'. fieldcat_ln-seltext_m = 'Texto'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'NEWKO'. fieldcat_ln-seltext_m = 'Cuenta/Cliente'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'KOSTL'. fieldcat_ln-seltext_m = 'Centro de Beneficio'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. fieldcat_ln-tabname = 'input_file'. fieldcat_ln-fieldname = 'COMMENT'. fieldcat_ln-seltext_m = 'Causa de Error'. APPEND fieldcat_ln TO fieldcat. CLEAR fieldcat_ln. ENDFORM. " fieldcat *&---------------------------------------------------------------------* *& FORM BUILD_EVENTTAB *&---------------------------------------------------------------------* FORM build_eventtab USING p_events TYPE slis_t_event. DATA: ls_event TYPE slis_alv_event. CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = p_events. READ TABLE p_events WITH KEY name = slis_ev_top_of_page INTO ls_event. IF sy-subrc = 0. MOVE formname_top_of_page TO ls_event-form. APPEND ls_event TO p_events. ENDIF. ENDFORM. " BUILD_EVENTTAB *&---------------------------------------------------------------------* *& FORM BUILD_COMMENT *&---------------------------------------------------------------------* FORM build_comment USING heading TYPE slis_t_listheader. DATA: var_text(60), v1(30), v2(30). CLEAR: var_text. *** Print Tittle CLEAR: hline, var_text. hline-typ = 'H'. hline-info = text-004. APPEND hline TO heading. * *** Print Date CLEAR: hline, v1, var_text. hline-typ = 'A'. WRITE: sy-datum TO v1. CONCATENATE text-005 v1 INTO var_text SEPARATED BY space. hline-info = var_text. APPEND hline TO heading. ENDFORM. " BUILD_COMMENT *&---------------------------------------------------------------------* *& FORM TOP_OF_PAGE * *&---------------------------------------------------------------------* FORM top_of_page. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING i_logo = 'LOGO_GPC_50' it_list_commentary = heading. ** I_END_OF_LIST_GRID = 'X'. ENDFORM. "TOP_OF_PAGE * Convert value to Currency value *&---------------------------------------------------------------------* *& Form currency_conversion *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_GD_FCURR text * -->P_GD_TCURR text * -->P_GD_DATE text * <--P_GD_VALUE text *----------------------------------------------------------------------* FORM currency_conversion USING p_fcurr p_tcurr p_date CHANGING p_value. DATA: t_er TYPE tcurr-ukurs, t_ff TYPE tcurr-ffact, t_lf TYPE tcurr-tfact, tmp_char(8), tmp_datum TYPE datum, t_vfd TYPE datum, ld_erate(12) TYPE c. CONCATENATE p_date+4(4) p_date+2(2) p_date+0(2) INTO tmp_char. tmp_datum = tmp_char. CALL FUNCTION 'READ_EXCHANGE_RATE' EXPORTING * CLIENT = SY-MANDT date = tmp_datum foreign_currency = p_fcurr local_currency = p_tcurr type_of_rate = 'M' * EXACT_DATE = ' ' IMPORTING exchange_rate = t_er foreign_factor = t_ff local_factor = t_lf valid_from_date = t_vfd * DERIVED_RATE_TYPE = * FIXED_RATE = * OLDEST_RATE_FROM = EXCEPTIONS no_rate_found = 1 no_factors_found = 2 no_spread_found = 3 derived_2_times = 4 overflow = 5 zero_rate = 6 OTHERS = 7 . IF sy-subrc EQ 0. ld_erate = t_er / ( t_ff / t_lf ). p_value = p_value * ld_erate. ENDIF. ENDFORM. " currency_conversion *&---------------------------------------------------------------------* *& Form BI_FBB1 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_INPUT_FILE_EXCLU text *----------------------------------------------------------------------* FORM bi_fbb1 . *{ REPLACE PRUK900090 5 *\ DATA: monto_fact LIKE bbseg-wrbtr. DATA: monto_fact LIKE bbseg-wrbtr, v_wrbtr LIKE bseg-wrbtr, v_exch_ratee LIKE bapi1093_0, v_dmbe2 LIKE bseg-dmbe2, v_i_dmbe2 LIKE bbseg-dmbe2, v_dmbtr LIKE bseg-dmbtr, v_i_dmbtr LIKE bbseg-dmbtr. *} REPLACE DATA: cb LIKE bbseg-kostl. "Centro de Beneficio DATA: diferencia LIKE bbseg-wrbtr, clave_dif LIKE bbseg-newbs, "2 Posting Key. cuenta_dif LIKE bbseg-newko, "cuenta de ganacia o perdida fecha_tasa LIKE bapi1093_2-trans_date. DATA: wa TYPE input_structure, wa_dif_190000400 TYPE input_structure, v_exch_rate LIKE bapi1093_0, v_return LIKE bapiret1, v_monat LIKE bkpf-monat, v_fecha LIKE bkpf-budat, v_soc LIKE t001-bukrs. * PERFORM open_group. PERFORM OPEN_GROUP_ALT USING GROUP. LOOP AT input_file_exclu_190000400. CLEAR: monto_fact, wa, v_exch_rate, v_return, wa_dif_190000400, diferencia, clave_dif, cuenta_dif, cb, fecha_tasa, v_fecha, v_soc. REFRESH bdcdata. CONCATENATE input_file_exclu_190000400-budat+4(4) input_file_exclu_190000400 -budat+2(2) input_file_exclu_190000400-budat+0(2) INTO v_fecha. v_soc = input_file_exclu_190000400-bukrs. IF input_file_exclu-waers EQ 'DOP'. CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL' EXPORTING rate_type = 'M' from_curr = 'USD' to_currncy = 'DOP' date = v_fecha IMPORTING exch_rate = v_exch_rate return = v_return. ELSEIF input_file_exclu-waers EQ 'EUR'. CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL' EXPORTING rate_type = 'M' from_curr = 'USD' to_currncy = 'DOP' date = v_fecha IMPORTING exch_rate = v_exch_rate return = v_return. CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL' EXPORTING rate_type = 'EURX' from_curr = 'USD' to_currncy = 'EUR' date = v_fecha IMPORTING exch_rate = v_exch_ratee return = v_return. ENDIF. *} REPLACE READ TABLE input_file WITH KEY bldat = input_file_exclu_190000400-bldat bla rt = 'ZN' bukrs = input_file_exclu_190000400-bukrs xblnr = input_file_exclu_190000400-xblnr bktxt = input_file_exclu_190000400-bktxt newko = '190000400' INTO wa. *{ REPLACE PRUK900090 6 *\ monto_fact = wa-wrbtr * v_exch_rate-exch_rate. v_wrbtr = wa-wrbtr * v_exch_rate-exch_rate. * v_dmbtr = wa-wrbtr * v_exch_rate-exch_rate monto_fact = v_wrbtr. *} REPLACE PERFORM bdc_dynpro USING 'SAPMF05A' '0100'. PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'. PERFORM bdc_field USING 'BDC_OKCODE' '/00'. PERFORM bdc_field USING 'BKPF-BLDAT' input_file_exclu_190000400-bldat . PERFORM bdc_field USING 'BKPF-BLART' input_file_exclu_190000400-blart . PERFORM bdc_field USING 'BKPF-BUKRS' input_file_exclu_190000400-bukrs . PERFORM bdc_field USING 'BKPF-BUDAT' input_file_exclu_190000400-budat . * PERFORM bdc_field USING 'BKPF-MONAT' v_monat. PERFORM bdc_field USING 'BKPF-WAERS' input_file_exclu_190000400-waers . PERFORM bdc_field USING 'BKPF-XBLNR' input_file_exclu_190000400-xblnr . PERFORM bdc_field USING 'BKPF-BKTXT' input_file_exclu_190000400-bktxt . PERFORM bdc_field USING 'FS006-DOCID' '*'. PERFORM bdc_field USING 'RF05A-NEWBS' input_file_exclu_190000400-newb s. PERFORM bdc_field USING 'RF05A-NEWKO' input_file_exclu_190000400-newk o. PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPMF05A'. PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLSEXM'. PERFORM bdc_dynpro USING 'SAPMF05A' '0300'. PERFORM bdc_field USING 'BDC_CURSOR' 'BSEG-SGTXT'. PERFORM bdc_field USING 'BDC_OKCODE' '=ZK'. IF input_file_exclu-waers EQ 'DOP'. PERFORM bdc_field USING 'BSEG-WRBTR' monto_fact. PERFORM bdc_field USING 'BSEG-DMBTR' monto_fact. ELSE. PERFORM bdc_field USING 'BSEG-WRBTR' input_file_exclu_190000400-wrbt r. PERFORM bdc_field USING 'BSEG-DMBTR' monto_fact. ENDIF. *} REPLACE PERFORM bdc_field USING 'BSEG-SGTXT' input_file_exclu_190000400-sgtxt. PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLKACB'. PERFORM bdc_field USING 'DKACB-FMORE' 'X'. PERFORM bdc_dynpro USING 'SAPLKACB' '0002'. PERFORM bdc_field USING 'BDC_CURSOR' 'COBL-ANLN1'. PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'. PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLKACB '. * READ TABLE input_file_exclu WITH KEY bldat = input_file_exclu_190000400-bld at bukrs = input_file_exclu_190000400-buk rs xblnr = input_file_exclu_190000400-xbl nr bktxt = input_file_exclu_190000400-bkt xt INTO wa_dif_190000400. PERFORM bdc_dynpro USING 'SAPMF05A' '0330'. PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'. PERFORM bdc_field USING 'BDC_OKCODE' '/00'. *{ REPLACE PRUK900090 8 *\ PERFORM bdc_field USING 'BSEG-DMBE2' wa-wrbtr. IF input_file_exclu-waers EQ 'DOP'. PERFORM bdc_field USING 'BSEG-DMBE2' wa-wrbtr. ELSE. PERFORM bdc_field USING 'BSEG-DMBE2' wa-wrbtr. ENDIF. *} REPLACE PERFORM bdc_field USING 'RF05A-NEWBS' wa_dif_190000400-newbs. PERFORM bdc_field USING 'RF05A-NEWKO' wa_dif_190000400-newko. ********************************************************************* PERFORM bdc_dynpro USING 'SAPMF05A' '0300'. PERFORM bdc_field USING 'BDC_CURSOR' 'BSEG-SGTXT'. PERFORM bdc_field USING 'BDC_OKCODE' '=ZK'. PERFORM bdc_field USING 'BSEG-WRBTR' wa_dif_190000400-wrbtr. *{ REPLACE PRUK900090 9 *\ PERFORM bdc_field USING 'BSEG-DMBTR' wa_dif_190000400-wrbtr. CLEAR: v_dmbe2, v_i_dmbe2, v_dmbtr, v_i_dmbtr. IF input_file_exclu-waers EQ 'DOP'. PERFORM bdc_field USING 'BSEG-DMBTR' wa_dif_190000400-wrbtr. diferencia = input_file_exclu_190000400-wrbtr - monto_fact. ELSE. IF wa_dif_190000400-tasa <> 0. v_dmbe2 = wa_dif_190000400-wrbtr / wa_dif_190000400-tasa. v_i_dmbe2 = v_dmbe2. ENDIF. CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL' EXPORTING rate_type = 'ZEUR' from_curr = 'DOP' to_currncy = 'EUR' date = v_fecha IMPORTING exch_rate = v_exch_ratee return = v_return. IF v_exch_ratee-exch_rate_v > 0. v_dmbtr = wa_dif_190000400-wrbtr * v_exch_ratee-exch_rate_v. v_i_dmbtr = v_dmbtr. ENDIF. PERFORM bdc_field USING 'BSEG-DMBTR' v_i_dmbtr. * PERFORM bdc_field USING 'BSEG-DMBE2' v_i_dmbe2. diferencia = v_dmbtr - monto_fact. ENDIF. *} REPLACE PERFORM bdc_field USING 'BSEG-SGTXT' wa_dif_190000400-sgtxt. PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLKACB'. PERFORM bdc_field USING 'DKACB-FMORE' 'X'. PERFORM bdc_dynpro USING 'SAPLKACB' '0002'. PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'. PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLKACB'. *calulo de anacia o perdida IF input_file_exclu-waers NE 'DOP'. PERFORM bdc_dynpro USING 'SAPMF05A' '0330'. PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'. PERFORM bdc_field USING 'BDC_OKCODE' '/00'. PERFORM bdc_field USING 'BSEG-DMBE2' v_i_dmbe2. ENDIF. *} INSERT IF diferencia > 0. clave_dif = '50'. cuenta_dif = '410202002'. ELSEIF diferencia < 0. clave_dif = '40'. cuenta_dif = '610803001'. ENDIF. *{ INSERT PRUK900090 11 diferencia = ABS( diferencia ). IF diferencia <> 0. *} INSERT PERFORM bdc_dynpro USING 'SAPMF05A' '0330'. PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'. PERFORM bdc_field USING 'BDC_OKCODE' '/00'. PERFORM bdc_field USING 'BSEG-DMBE2' wa-wrbtr. PERFORM bdc_field USING 'RF05A-NEWBS' clave_dif. PERFORM bdc_field USING 'RF05A-NEWKO' cuenta_dif. PERFORM bdc_dynpro USING 'SAPMF05A' '0300'. PERFORM bdc_field USING 'BDC_CURSOR' 'BSEG-SGTXT'. PERFORM bdc_field USING 'BDC_OKCODE' '=ZK'. IF input_file_exclu-waers EQ 'DOP'. PERFORM bdc_field USING 'BSEG-WRBTR' diferencia. PERFORM bdc_field USING 'BSEG-DMBTR' diferencia. ELSE. PERFORM bdc_field USING 'BSEG-WRBTR' '0'. PERFORM bdc_field USING 'BSEG-DMBTR' diferencia. ENDIF. *} REPLACE PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLKACB'. PERFORM bdc_field USING 'DKACB-FMORE' 'X'. CLEAR: wa. *Buscar centro de costo LOOP AT input_file INTO wa WHERE bldat = input_file_exclu_190000400-bldat AND blart = 'ZN' AND bukrs = input_file_exclu_190000400-bukrs AND xblnr = input_file_exclu_190000400-xblnr AND bktxt = input_file_exclu_190000400-bktxt AND kostl <> ''. cb = wa-kostl. ENDLOOP. PERFORM bdc_dynpro USING 'SAPLKACB' '0002'. PERFORM bdc_field USING 'BDC_CURSOR' 'COBL-KOSTL'. PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'. PERFORM bdc_field USING 'COBL-PRCTR' cb. PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLKACB'. PERFORM bdc_dynpro USING 'SAPMF05A' '0330'. PERFORM bdc_field USING 'BDC_CURSOR' 'BSEG-DMBE2'. PERFORM bdc_field USING 'BDC_OKCODE' '=BU'. *{ INSERT PRUK900090 3 ENDIF. *} INSERT * PERFORM bdc_transaction USING 'FBB1'. CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = 'FBB1' "cdigo de la transaccin a ejecutar pop_local TABLES dynprotab = bdcdata. "tabla interna con estructura BDCDATA ENDLOOP. * Cerrar sesin de batch-input * PERFORM BDC_TRANSACTION_ALT USING 'FB01'. PERFORM CLOSE_GROUP_ALT. SUBMIT rsbdcsub WITH mappe EQ group WITH von EQ sy-datum WITH z_verarb EQ 'X' WITH fehler EQ ' ' AND RETURN. *} REPLACE ENDFORM. " BI_FBB1