HOla buen dia.
En el trabajo me pidieron hacer una carga de archivo y estoy usando la 'BAPI_ACC_DOCUMENT_POST' para el archivo. Pero desconozco como deberia de salir el resultado. En algun momento hice un batch input, pero ahora no entiendo bien que hace la bapi.
Aqui el codigo.
El consultor funcional como que no es de mucha ayuda, yo tuve que hacer el layout para la carga, pero esperaba que se mostrara tal y como lo veo en el txt.
Espero haberme dado a entender.
Aqui el archivo txt.
1 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 40 650000 1000 SAFI008 SA001 NÓMINA NÓMINA
1 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 50 215000 500 NÓMINA NÓMINA
1 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 31 900000 500 NÓMINA NÓMINA
2 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 40 650000 1000 SAFI008 SA001 NÓMINA NÓMINA
2 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 50 215000 500 NÓMINA NÓMINA
2 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 31 900000 500 NÓMINA NÓMINA
Saludos.
En el trabajo me pidieron hacer una carga de archivo y estoy usando la 'BAPI_ACC_DOCUMENT_POST' para el archivo. Pero desconozco como deberia de salir el resultado. En algun momento hice un batch input, pero ahora no entiendo bien que hace la bapi.
Aqui el codigo.
Código:
REPORT y_bapi_01 NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* INCLUDES *
*----------------------------------------------------------------------*
INCLUDE y_bapi01_top.
INCLUDE y_bapi01_forms.
*----------------------------------------------------------------------*
* AT SELECTION SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ruta.
PERFORM f_leer_ruta USING p_ruta.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM f_carga_archivo.
PERFORM f_proceso.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
WRITE: 25 'Detalle de Documentos financieros' COLOR 1.
SKIP.
ULINE AT (75).
SKIP.
WRITE: 2 'Documento FI creado' COLOR 4, 50 'Póliza Errónea' COLOR 4.
SKIP.
LOOP AT gt_log.
IF gt_log-flag EQ 'X'.
WRITE: 2 gt_log-reg.
SKIP.
ELSE.
WRITE: 50 gt_log-reg.
SKIP.
ENDIF.
ENDLOOP.
*********************************************************
*& Include Y_BAPI01_TOP
*&---------------------------------------------------------------------*
DATA: BEGIN OF gt_carga OCCURS 0,
no_poli(3) TYPE c,
fe_doc(10) TYPE c,
clase(2) TYPE c,
soc TYPE bukrs_vf,
fe_cont(10) TYPE c,
periodo TYPE monat,
moneda TYPE waers,
refe TYPE string,
txt_cab TYPE string,
clave(2) TYPE c,
cuenta(10) TYPE c,
importe(15) TYPE c,
ceco(10) TYPE c,
cebe(10) TYPE c,
asign TYPE string,
txt_pos TYPE string,
END OF gt_carga,
BEGIN OF gt_log OCCURS 0,
flag TYPE c,
reg TYPE string,
END OF gt_log.
* Pantalla de selección.
SELECTION-SCREEN: BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.
PARAMETERS: p_ruta TYPE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK a1.
* rlgrap-filename: Fichero local para upload/download
* RLGRAP: Campos de programa / campos de dynpro SAPLGRAP
*********************************************************
*&---------------------------------------------------------------------*
*& Form F_CARGA_ARCHIVO
*&---------------------------------------------------------------------*
*& Carga un archivo externo.
*----------------------------------------------------------------------*
FORM f_carga_archivo .
DATA: l_ruta TYPE string.
l_ruta = p_ruta.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_ruta
filetype = 'ASC'
* has_field_separator = 'SPACE'
has_field_separator = 'X'
TABLES
data_tab = gt_carga
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 text-100 TYPE 'I'.
* LEAVE TO TRANSACTION 'Z_CARGA_NOM'. " Hacer tx
LEAVE PROGRAM.
ENDIF.
ENDFORM. " F_CARGA_ARCHIVO
*&---------------------------------------------------------------------*
*& Form F_PROCESO
*&---------------------------------------------------------------------*
*& Sin bandera para cálculo de impuesto.
*----------------------------------------------------------------------*
FORM f_proceso .
DATA: lt_account TYPE STANDARD TABLE OF bapiacgl09 WITH HEADER LINE,
lt_currency TYPE STANDARD TABLE OF bapiaccr09 WITH HEADER LINE,
lt_accountp TYPE STANDARD TABLE OF bapiacap09 WITH HEADER LINE,
lt_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
lw_header TYPE bapiache09,
lw_carga LIKE LINE OF gt_carga,
l_obj_type LIKE bapiache09-obj_type, " Op. referencia.
l_obj_key LIKE bapiache09-obj_key, " Clave referencia.
l_obj_sys LIKE bapiache09-obj_sys, " Sist lógico doc de origen
l_cuenta(10) TYPE n,
l_tabix TYPE sy-tabix,
l_item(10) TYPE n,
l_nuevo TYPE c.
* BAPIACGL09 Pos.Cta.de Mayor
* BAPIACCR09 Posiciones de moneda
* BAPIACAP09 Posiciones del acreedor.
* BAPIACHE09 Línea de cabecera.
LOOP AT gt_carga.
l_tabix = sy-tabix + 1.
l_item = l_item + 1.
CLEAR l_cuenta.
MOVE gt_carga-cuenta TO l_cuenta.
IF sy-subrc EQ 1
OR l_nuevo EQ 'X'.
CLEAR lw_header.
CONCATENATE gt_carga-fe_doc+6(4) gt_carga-fe_doc+3(2) gt_carga-fe_doc+0(2)
INTO lw_header-doc_date.
CONCATENATE gt_carga-fe_cont+6(4) gt_carga-fe_cont+3(2) gt_carga-fe_cont+0(2)
INTO lw_header-pstng_date.
lw_header-fisc_year = lw_header-doc_date(4).
MOVE: gt_carga-refe TO lw_header-ref_doc_no,
gt_carga-txt_cab TO lw_header-header_txt,
sy-uname TO lw_header-username,
gt_carga-soc TO lw_header-comp_code,
gt_carga-clase TO lw_header-doc_type.
ENDIF.
IF gt_carga-clave EQ '40' OR gt_carga-clave EQ '50'.
* Cuenta mayor.
CLEAR lt_account.
lt_account-itemno_acc = l_item.
lt_account-gl_account = l_cuenta.
lt_account-item_text = gt_carga-txt_pos.
lt_account-costcenter = gt_carga-ceco.
lt_account-profit_ctr = gt_carga-cebe.
APPEND lt_account.
ELSE.
* Cuenta de proveedor-acreedor.
CLEAR lt_accountp.
SELECT SINGLE akont
INTO lt_accountp-gl_account
FROM lfb1
WHERE lifnr EQ l_cuenta
AND bukrs EQ gt_carga-soc.
IF sy-subrc EQ 0.
SHIFT lt_accountp-gl_account RIGHT DELETING TRAILING space.
OVERLAY lt_accountp-gl_account WITH '0000000000'.
ENDIF.
lt_accountp-itemno_acc = l_item.
lt_accountp-vendor_no = l_cuenta.
lt_accountp-item_text = gt_carga-txt_pos.
APPEND lt_accountp.
ENDIF.
* Importe.
CLEAR lt_currency.
lt_currency-itemno_acc = l_item.
lt_currency-curr_type = '00'.
lt_currency-currency = 'MXN'.
IF gt_carga-clave EQ '40'
OR gt_carga-clave EQ '25'.
lt_currency-amt_doccur = gt_carga-importe.
ELSE.
lt_currency-amt_doccur = gt_carga-importe * -1.
ENDIF.
APPEND lt_currency.
READ TABLE gt_carga INTO lw_carga INDEX l_tabix.
IF sy-subrc NE 0
OR gt_carga-no_poli NE lw_carga-no_poli.
l_nuevo = 'X'.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = lw_header
IMPORTING
obj_type = l_obj_type
obj_key = l_obj_key
obj_sys = l_obj_sys
TABLES
accountgl = lt_account
accountpayable = lt_accountp
currencyamount = lt_currency
return = lt_return.
DELETE ADJACENT DUPLICATES FROM lt_return COMPARING id type number.
LOOP AT lt_return.
CASE lt_return-type.
WHEN 'S'.
IF lt_return-id EQ 'RW'
AND lt_return-number EQ '605'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
CLEAR gt_log.
gt_log-flag = 'X'.
CONCATENATE 'Póliza No.' gt_carga-no_poli INTO gt_log-reg SEPARATED BY space.
CONCATENATE gt_log-reg lt_return-message_v2(10) INTO gt_log-reg SEPARATED BY ' -> '.
APPEND gt_log.
ELSE.
ROLLBACK WORK.
CLEAR gt_log.
CONCATENATE 'Póliza No.' gt_carga-no_poli INTO gt_log-reg SEPARATED BY space.
CONCATENATE gt_log-reg lt_return-message INTO gt_log-reg SEPARATED BY ' -> '.
APPEND gt_log.
ENDIF.
WHEN 'E'.
IF lt_return-id NE 'RW'.
ROLLBACK WORK.
CLEAR gt_log.
CONCATENATE 'Póliza No.' gt_carga-no_poli INTO gt_log-reg SEPARATED BY space.
CONCATENATE gt_log-reg lt_return-message INTO gt_log-reg SEPARATED BY ' -> '.
APPEND gt_log.
ENDIF.
ENDCASE.
ENDLOOP.
REFRESH:
lt_account,
lt_accountp,
lt_currency,
lt_return.
CLEAR: lw_header,
l_item.
ELSE.
CLEAR l_nuevo.
ENDIF.
ENDLOOP.
ENDFORM. "f_proceso
*&---------------------------------------------------------------------*
*& Form F_LEER_RUTA
*&---------------------------------------------------------------------*
* Obtiene la ruta del archivo de pólizas.
*----------------------------------------------------------------------*
FORM f_leer_ruta USING p_ruta TYPE any.
DATA: lt_ruta TYPE filetable,
lw_ruta TYPE file_table, " EStructura
l_rc TYPE sy-subrc.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Carga Archivo de Nómina'
CHANGING
file_table = lt_ruta
rc = l_rc.
READ TABLE lt_ruta INTO lw_ruta INDEX 1.
IF sy-subrc EQ 0.
* pp_ruta = lw_ruta-filename.
p_ruta = lw_ruta-filename.
ENDIF.
ENDFORM. " F_LEER_RUTA
*********************************************************
Espero haberme dado a entender.
Aqui el archivo txt.
1 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 40 650000 1000 SAFI008 SA001 NÓMINA NÓMINA
1 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 50 215000 500 NÓMINA NÓMINA
1 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 31 900000 500 NÓMINA NÓMINA
2 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 40 650000 1000 SAFI008 SA001 NÓMINA NÓMINA
2 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 50 215000 500 NÓMINA NÓMINA
2 02.07.2012 SA 1010 02.07.2012 6 MXN NÓMINA NÓMINA 31 900000 500 NÓMINA NÓMINA
Saludos.
Comentario