* 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