- Un ”batch-input” es un método seguro, fiable y rápido de transferir grandes cantidades de datos a un sistema SAP, para hacer muchas altas, modificaciones o borrados. Se simula un proceso on-line (transacción donde interacciona el usuario), para someter a los datos a todos los chequeos y validaciones que sufrirían si se metieran manualmente, para salvaguardar la integridad de los mismos (cosa que no ocurriría con un MODIFY directo a una tabla del D.D., eso es lo importante de los batch-inputs). Pero en cambio no requieren interacción.
- Hay 2 métodos de batch-input: “clásico” y “call transaction”. En el método “clásico” se genera una “sesión batch-input”. Se tiene un fichero con los datos, y un programa Abap/4 de conversión que crea la sesión (datos, pantallas, transacciones, comandos, .. es un juego de datos), que simulan la existencia de un usuario que introduciría los datos), que se almacena y se puede procesar. Este método es asíncrono: se procesan los datos ahora pero se actualizan más tarde. Permite múltiples transacciones. Se genera un log para cada sesión, pero no se pueden generar en paralelo desde el mismo programa (sólo puede abrirse un juego de datos cuando se cierra el anterior). Fuente : http://www.abap.es/centro_Manual_08_Batch_Input.htm
*----------------------------------------------------------------------*
* PROGRAMA : Z_MM_BIMM08 *
* AUTOR : DE PIERO,GASTON *
* CREADO : 14/09/2006 *
* REQ# : *
* Clase Desa : ZM00 *
* Auth Grp : *
* Clase Mess : *
* Transaccion : *
* Description : *
*----------------------------------------------------------------------*
REPORT Z_MM_BIMM08 .
INCLUDE Z_MM_BIMM08_VAR.
*Navegar para subir Archivo
************************************************************************
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_INFILE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_file.
.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = pa_file
mask = ',*.txt.'
mode = 'O'
title = 'Subir Archivo'(078)
IMPORTING
filename = pa_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 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.
*****************************************************
*-----------------------------------------------------
* START-OF-SELECTION.
*-----------------------------------------------------
START-OF-SELECTION.
*Funcion que devuelve caracter ascii.
*ASCII del TAB
CALL FUNCTION 'ZASCII'
EXPORTING
C_INT = 9
IMPORTING
C_CHAR = c_ent2
EXCEPTIONS
NUMERO_INVALIDO = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*Lee el archivo y hace el BatchInput.
PERFORM ARCHIVO.
*Carga los datos en SAP
PERFORM LLENAR.
*Borra archivos que se ingresaron con exito.
*PERFORM ERRORES.
INCLUDE Z_MM_BIMM08_BCD.
*----------------------------------------------------------------------*
* INCLUDE Z_MM_BIMM07_VAR *
*----------------------------------------------------------------------*
Types : begin of ty_bc .
include structure BDCDATA.
types : end of ty_bc.
types : begin of ty_bc1.
include structure BDCMSGCOLL.
types : end of ty_bc1.
types : begin of ty_dir.
include structure EPSFILI.
types: end of ty_dir.
types : begin of ty_carga,
prov like EINA-LIFNR,
mate(18) type c," like EINA-MATNR,
orgc like EINE-EKORG,
cent like EINE-WERKS,
info like RM06I-NORMB, "Fijo X
dias(3) type c, "Fijo 10
grpo like EINE-EKGRP,
clva like EINE-BWTAR,
prec(13) type c,
fini(10) type c, " like RV13A-DATAB(01),
ffin(10) type c, "like RV13A-DATBI(01),
end of ty_carga.
types : begin of ty_arch,
line(500) type c,
end of ty_arch.
DATA: wa_bdcdata TYPE ty_bc,
it_bdcdata type STANDARD TABLE OF ty_bc,
it_msgtab type standard table of ty_bc1.
DATA : wa_carga type ty_carga,
ti_carga type standard table of ty_carga.
*Variables para manejo de archivos
DATA:
filename like RLGRAP-FILENAME VALUE '/usr/sap/tmp/Remedy.txt',
wa_rec type ty_arch,
ti_rec type standard table of ty_arch,
tipo(3) type c.
*Para el ENTER2
data c_ent2.
data : i_ent2 type i value 9.
data : x_ent2 type x.
field-symbols :
move i_ent2 to x_ent2.
assign x_ent2 to
move
***********PARAMETROS*******************************************
*PARAMETROS DE ENTRADA
parameters : pa_file like RLGRAP-FILENAME default '/usr/sap/tmp'.
*----------------------------------------------------------------------*
* INCLUDE Z_MM_BIMM07_BCD *
*----------------------------------------------------------------------*
FORM LLENAR_BDCDATA.
*Llenando Batch Input
PERFORM LLENAR_TABLA_BDCDATA USING 'SAPMM06I' '0100' 'X'.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_CURSOR' 'EINA-LIFNR' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_OKCODE' '/00' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'EINA-LIFNR' wa_carga-prov ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'EINA-MATNR' wa_carga-mate ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-EKORG' wa_carga-orgc ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-WERKS' wa_carga-cent ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'RM06I-NORMB' wa_carga-info ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'SAPMM06I' '0101' 'X'.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_CURSOR' 'EINA-MAHN1' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_OKCODE' '/00' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'EINA-MAHN1' '10' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINA-URZLA' 'AR' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINA-REGIO' '00' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING
* 'EINA-TELF1' '4941-9444-MAR...' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINA-MEINS' 'C/U' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINA-UMREZ' '1' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINA-UMREN' '1' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'SAPMM06I' '0102' 'X'.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_CURSOR' 'EINE-NETPR' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_OKCODE' '/00' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-APLFZ' wa_carga-dias ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-EKGRP' wa_carga-grpo ''.
*Clase de valorizacion
PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-BWTAR' wa_carga-clva ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-NETPR' wa_carga-prec ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-WAERS' 'ARS' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-PEINH' '1' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-BPRME' 'C/U' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-BPUMZ' '1' ''.
* PERFORM LLENAR_TABLA_BDCDATA USING 'EINE-BPUMN' '1' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'SAPMM06I' '0105' 'X'.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_CURSOR' 'EINE-ANGNR' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_OKCODE' '=KO' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'SAPMV13A' '1017' 'X'.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_CURSOR' 'RV13A-DATBI(01)' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_OKCODE' '/00' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'RV13A-DATAB(01)' wa_carga-fini ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'RV13A-DATBI(01)' wa_carga-ffin ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'SAPMV13A' '1017' 'X'.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_OKCODE' '/EBAC' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_CURSOR' 'KOMG-ESOKZ(01)' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'SAPMM06I' '0105' 'X'.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_CURSOR' 'EINE-ANGNR' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_OKCODE' '/00' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'SAPMM06I' '0103' 'X'.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_CURSOR' 'RM06I-LTEX1(01)' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_OKCODE' '/00' ''.
PERFORM LLENAR_TABLA_BDCDATA USING 'SAPLSPO1' '0100' 'X'.
PERFORM LLENAR_TABLA_BDCDATA USING 'BDC_OKCODE' '=YES' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form llenar_tablas_bdcdata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM LLENAR_TABLA_BDCDATA USING NAME VALUE DYNBEGIN.
IF DYNBEGIN = 'X'.
CLEAR wa_BDCDATA.
MOVE: NAME TO wa_BDCDATA-PROGRAM,
VALUE TO wa_BDCDATA-DYNPRO,
'X' TO wa_BDCDATA-DYNBEGIN.
APPEND wa_bdcdata to IT_BDCDATA.
ELSE.
CLEAR wa_BDCDATA.
MOVE: NAME TO wa_BDCDATA-FNAM,
VALUE TO wa_BDCDATA-FVAL.
APPEND wa_bdcdata to IT_BDCDATA.
ENDIF.
ENDFORM. " llenar_tablas_bdcdata
*&---------------------------------------------------------------------*
*& Form ARCHIVO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ARCHIVO.
data: a(4) type c,
m(2) type c,
d(2) type c.
*Levantar archivo del servidor.
clear filename.
*Tipo de Archivo
tipo = 'ASC'.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = pa_file
FILETYPE = tipo
TABLES
DATA_TAB = ti_rec
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*Separando columnas
clear ti_carga.
clear wa_carga.
loop at ti_rec into wa_rec.
split wa_rec at c_ent2 into
wa_carga-prov wa_carga-mate wa_carga-orgc
wa_carga-cent wa_carga-grpo wa_carga-clva wa_carga-prec
wa_carga-fini wa_carga-ffin.
wa_carga-info = 'X'.
wa_carga-dias = '10'.
append wa_carga to ti_carga.
clear wa_carga.
endloop.
ENDFORM. " ARCHIVO
*&---------------------------------------------------------------------*
*& Form LLENAR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM LLENAR.
*Modo N no visible , modo A visible
DATA: V_MODO VALUE 'N'.
loop at ti_carga into wa_carga.
REFRESH IT_BDCDATA.
PERFORM LLENAR_BDCDATA.
CALL TRANSACTION 'ME11' USING IT_BDCDATA
MESSAGES INTO IT_MSGTAB
MODE V_MODO.
if sy-subrc eq 0.
write:/ wa_carga-prov,wa_carga-mate,wa_carga-orgc,'----OK'.
else.
write:/ wa_carga-prov,wa_carga-mate,wa_carga-orgc,'---------NO OK'
.
endif.
endloop.
*AGREGA A LA TABLA TI_ARCHI LOS QUE TIENE PROBLEMAS PARA BATCH INPUT
* if sy-subrc ne 0.
* read table ti_archi into wa_archi
* with key filename = wa_archi-filename.
* wa_archi-ok = 'NO'.
* concatenate wa_archi-rem_error '-' wa_aviso-nrem into
* wa_archi-rem_error.
* modify ti_archi from wa_archi index sy-tabix.
* endif.
ENDFORM. " LLENAR
No hay comentarios:
Publicar un comentario