You are on page 1of 34

*&---------------------------------------------------------------------*

*& Report ZFIC_OPEN_ITEMS *


* 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

You might also like