PDA

Ver la Versión Completa : Batch Input de la VA01


amam2605
18/06/12, 19:24:13
Hola a Todos !! Estoy realizando u batch input de la transaccion VA01 el archivo me lo han pasado de la sigueinte forma:

0 1001495368
1 600000 1
1 600033 2
0 1001493228
1 800212 1
1 800460 3

Donde: el 0 indica que es un Pedido al que se le hara una devolucion
1001495368 y 1001493228 son los nros de pedidos
1: indica los nros de material que tienen esos pedidos en sus posiciones 10 y 20.
1 y 2 - 1 y 3 que acompañan a los nros de materiales son la cantidad que tendra de devolucion cada pedido.

No se como leer esto en un batch input o si hay otra forma mejor de hacerlo. Aqui esta el programa que he realizado pero solo lee un solo nro de pedido y su cantidad.

REPORT ZBI_DEVOLUCION NO STANDARD PAGE HEADING.


* Definición de tabla que recibe datos del archivo de texto
TYPES: BEGIN OF REC_T,
TIPPED1(4), " Tipo pedido
OV(4), " Organizacion Venta
CANAL(2), " Canal
SECTOR(2), " Sector
PEDIDO(10), " Nro. pedido
POS(6), " Posicion
CANTIDAD(5), " Cantidad ejemplares
END OF REC_T.

TABLES: VBAP,
VBAK.

DATA REC TYPE REC_T OCCURS 1 WITH HEADER LINE.
DATA: NUMPOS(6),
TIPPED(4),
CANTI TYPE I.


* Tabla interna donde se volcara el fichero.

DATA: BEGIN OF TI OCCURS 0,
INDI(1), " Indicador
DEVOLU(12), " Numero de Devolucion
CANTI_PEDI(5), " Cantidad de Pedido
END OF TI.


DATA: BEGIN OF BDC_TAB OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDC_TAB.

*------------- PARAMETROS----------------------------------------------*
PARAMETERS:

* Archivo de donde se cargaran los datos
N_FICH LIKE RLGRAP-FILENAME DEFAULT ' ',

* Nombre del Grupo de Sesiòn
NOMBREJD LIKE APQI-GROUPID DEFAULT 'PEDIDO_DEVOL'.



*------------- PROGRAMA PRINCIPAL -------------------------------------*
START-OF-SELECTION.


* Abre el Grupo de Sesiòn

CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = NOMBREJD
USER = SY-UNAME
KEEP = 'X'.

* Carga el Archivo de Datos pasado por paràmetro en la Tabla Interna TI

PERFORM CARGAR_TABLA.
CLEAR: TI.
LOOP AT TI.
IF TI-DEVOLU IS INITIAL.
EXIT.
ELSE.
*---- Carga la tabla interna BDC_TAB con los datos de ti

PERFORM TRATAMIENTO_PRINCIPAL.
ENDIF.
ENDLOOP.
* Cierra el grupo de sesiòn
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
WRITE: / 'JUEGO DE DATOS CREADO CON EL NOMBRE: ',
NOMBREJD LEFT-JUSTIFIED.
END-OF-SELECTION.

*-----------------------------------------------------------------------
* FORM CARGAR_TABLA
*-----------------------------------------------------------------------
* LLama a la Funciòn Upload con el nombre del archivo pasado por paramt.

FORM CARGAR_TABLA.
CALL FUNCTION 'UPLOAD'
EXPORTING
FILENAME = N_FICH
FILETYPE = 'DAT'
TABLES
DATA_TAB = TI
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
OTHERS = 7.
ENDFORM.

*-----------------------------------------------------------------------
* FORM INSERTAR_EN_BDC_TAB
*-----------------------------------------------------------------------
* Llama a la funciòn BDC_INSERT con el nùmero de transaciòn que va a
* emular y el nombre de la tabla.

FORM INSERTAR_EN_BDC_TAB.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'VA01'
TABLES
DYNPROTAB = BDC_TAB
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7.
ENDFORM.

*-----------------------------------------------------------------------
* FORM TRATAMIENTO_PRINCIPAL
*-----------------------------------------------------------------------
* LLama al form Dynpro con los paràmetros correspondientes a cada
* pantalla de la transacciòn. LLama a Insertar_en_BDC_Tab.

FORM TRATAMIENTO_PRINCIPAL.

REFRESH BDC_TAB.
CLEAR BDC_TAB.

SELECT VKORG VTWEG SPART VBELN AUART
INTO (VBAK-VKORG , VBAK-VTWEG , VBAK-SPART , VBAK-VBELN , VBAK-AUART)
FROM VBAK
WHERE AUART IN ('ZRE4','ZPSA','ZPF9','ZPFH','ZPFI','ZP00','ZP01','ZP02')
AND VBAK~VBELN = TI-DEVOLU
AND FAKSK = ' '
ORDER BY VBELN.

REC-TIPPED1 = VBAK-AUART.
REC-OV = VBAK-VKORG.
REC-CANAL = VBAK-VTWEG.
REC-SECTOR = VBAK-SPART.
REC-PEDIDO = VBAK-VBELN.
* REC-POS = VBAP-POSNR.
* CANTI = VBAP-KWMENG.
* REC-CANTIDAD = CANTI.

APPEND REC.
CLEAR REC.
ENDSELECT.


LOOP AT REC.
IF REC-TIPPED1 = 'ZRE4'.
TIPPED = 'ZRE5'.
ENDIF.
IF REC-TIPPED1 = 'ZPSA'.
TIPPED = 'ZRE2'.
ENDIF.
IF REC-TIPPED1 = 'ZPF9'.
TIPPED = 'ZRE3'.
ENDIF.
IF REC-TIPPED1 = 'ZPFH'.
TIPPED = 'ZPGH'.
ENDIF.
IF REC-TIPPED1 = 'ZPFI'.
TIPPED = 'ZRE6'.
ENDIF.
IF REC-TIPPED1 = 'ZP00'.
TIPPED = 'ZRE7'.
ENDIF.
IF REC-TIPPED1 = 'ZP01'.
TIPPED = 'ZRE8'.
ENDIF.
IF REC-TIPPED1 = 'ZP02'.
TIPPED = 'ZRE9'.
ENDIF.

* Busca Nro. posiciones pedido original

SELECT MAX( POSNR ) INTO NUMPOS FROM VBAP
WHERE VBELN = REC-PEDIDO.
IF NUMPOS = ''.
WRITE: / REC-PEDIDO, 'NO EXISTE'.
TIPPED = ''.
ENDIF.


PERFORM DYNPRO USING:
'X' 'SAPMV45A' '0101',
' ' 'VBAK-AUART' TIPPED,
' ' 'VBAK-VKORG' REC-OV,
' ' 'VBAK-VTWEG' REC-CANAL,
' ' 'VBAK-SPART' REC-SECTOR,
' ' 'BDC_OKCODE' '/00'.

PERFORM DYNPRO USING:
'X' 'SAPLV45C' '0100',
' ' 'LV45C-VBELN' TI-DEVOLU,
' ' 'BDC_CURSOR' 'LV45C-VBELN',
' ' 'BDC_OKCODE' '=UEBR'.


PERFORM DYNPRO USING:
'X' 'SAPMV45A' '4001',
' ' 'VBAK-AUGRU' 'Z05',
' ' 'BDC_SUBSCR' 'SAPMV45A 4050SUBSCREEN_BUTTONS',
' ' 'RV45A-VBAP_SELKZ(01)' 'X',
' ' 'BDC_CURSOR' 'VBAP-POSNR(01)',
' ' 'BDC_SUBSCR' 'SAPMV45A 4021SUBSCREEN_HEADER',
' ' 'BDC_SUBSCR' 'SAPMV45A 4701PART-SUB',
' ' 'BDC_OKCODE' '=PKAU'.

PERFORM DYNPRO USING:
'X' 'SAPMV45A' '4003',
' ' 'RV45A-KWMENG' TI-CANTI_PEDI,
' ' 'BDC_OKCODE' '/EBACK'.


PERFORM DYNPRO USING:
'X' 'SAPMV45A' '4001',
' ' 'BDC_OKCODE' '=KBES'.


PERFORM DYNPRO USING:
'X' 'SAPMV45A' '4002',
' ' 'VBKD-IHREZ_E' '0',
' ' 'BDC_CURSOR' 'VBKD-IHREZ_E',
' ' 'BDC_SUBSCR' 'SAPMV45A 4351SUBSCREEN_BODY',
' ' 'BDC_SUBSCR' 'SAPMV45A 4012SUBSCREEN_HEADER',
' ' 'BDC_OKCODE' '=SICH'.

PERFORM INSERTAR_EN_BDC_TAB.
ENDLOOP.
ENDFORM.

*-----------------------------------------------------------------------
* FORM DYNPRO
*-----------------------------------------------------------------------
* Carga la tabla interna bdc con los datos de cada una de las pantallas

FORM DYNPRO USING DYNBEGIN CAMPO VALOR.
CLEAR BDC_TAB.
IF DYNBEGIN = 'X'.
MOVE: CAMPO TO BDC_TAB-PROGRAM,
VALOR TO BDC_TAB-DYNPRO,
'X' TO BDC_TAB-DYNBEGIN.
ELSE.
MOVE: CAMPO TO BDC_TAB-FNAM,
VALOR TO BDC_TAB-FVAL.
ENDIF.
APPEND BDC_TAB.
ENDFORM.

Muchas Gracias por alguna ayuda o sugerencia.

Saludos


AMAM