0% found this document useful (0 votes)
161 views34 pages

CXCPRD

This document provides a report for batch input to create open items in SAP. It includes tables, constants, data structures, internal tables, and parameters used. The report reads data from an input file, processes it, and writes the output to another file. It validates the data and includes logic for taxes and currency conversion.

Uploaded by

Ruben Tineo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
161 views34 pages

CXCPRD

This document provides a report for batch input to create open items in SAP. It includes tables, constants, data structures, internal tables, and parameters used. The report reads data from an input file, processes it, and writes the output to another file. It validates the data and includes logic for taxes and currency conversion.

Uploaded by

Ruben Tineo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 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