BATCHINPUTS - BAPIS

  • 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
Ejemplos :


*----------------------------------------------------------------------*
* 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 : type c.
move i_ent2 to x_ent2.
assign x_ent2 to casting type c.
move to c_ent2.

***********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