PDA

Ver la Versión Completa : Help con a VA01


amam2605
16/07/12, 21:55:35
Hola a todos
tengo este programa BI de la VA01 pero no se como hacer para que me lea la cantidad de devoluicion de cada posicion.

El archivo de entrada esta asi:

11001495726 (Indicador 1 luego nro de pedido)
4000000000000800212000000000000002 (Indicador de material, material, canti)
4000000000000800460000000000000003


Programa:

REPORT ZBI_PED_DEVOL
MESSAGE-ID 00.

TABLES: VBAK.

DATA:
W_TRATAMIENTO(1) VALUE 'N',
XFICHERO LIKE RLGRAP-FILENAME,
LIN TYPE N, MARCA, W_AVANCE TYPE N,
W_VAR(25), W_TOTAL-MATERIAL TYPE I,
NRO_PEDIDO(10),
W_VAR1(25), W_AVANCE1 TYPE N, W_POSUP(2),
TCODE_TRANS LIKE TSTC-TCODE VALUE ' ',
TCODE_PED_CREA LIKE TSTC-TCODE VALUE 'VA01', " Transacción
TCODE_PED_BORR LIKE TSTC-TCODE VALUE 'VA02', "Borrar Pedido
W_GRABAR-ANTERIOR(2) VALUE 'NO',
PED_AUX(4), ORG_AUX(4), MAT_AUX(18), IND_PED,
TIPPED(4),
MSG(100), REG(50).

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.

DATA REC TYPE REC_T OCCURS 1 WITH HEADER LINE.


*--
DATA: BEGIN OF TAB-LISTA-MAT OCCURS 10,
MATNR(18), " Material de la lista
END OF TAB-LISTA-MAT.

*----------ESTRUCTURA PARA LA BDC-DATA -----------------------------*
DATA: BEGIN OF BDC_TAB OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDC_TAB.

*------------- TABLA INTERNA DONDE SE VOLCARÁ EL FICHERO --------------*

DATA: BEGIN OF TAB-DATA OCCURS 100,
DATOS(91), " Registro de extracción
END OF TAB-DATA.

*------- TABLA INTERNA DONDE SE VOLCARÁ LOS PEDIDOS OKEY -------------

DATA: BEGIN OF T_PEDIDO_POSICIONES OCCURS 40000,
K-VBELN LIKE VBAK-VBELN, " N° de pedido
VBELN LIKE VBAK-VBELN, " N° de PEDIDO
POSN TYPE I, "Contador posicion
END OF T_PEDIDO_POSICIONES.

*------------- PARAMETROS ---------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BL3 WITH FRAME TITLE TEXT-003
NO INTERVALS.

*PARAMETERS: FICHERO LIKE RLGRAP-FILENAME DEFAULT
* 'C:\devolucion.txt'.

PARAMETERS: FICHERO LIKE RLGRAP-FILENAME.

PARAMETERS: USRNM_P(12) DEFAULT 'DEVOL-PEDIDO'.

SELECTION-SCREEN END OF BLOCK BL3.

*------------- PROGRAMA PRINCIPAL -------------------------------------*

START-OF-SELECTION.

PERFORM CREAR-BDC-GROUP-PEDIDOS.
IF SY-SUBRC = 0.
PERFORM ABRIR-DATA-INPUT.
PERFORM PROCESAR-TAB-DATA.
PERFORM BDC-CLOSE-GROUP.
ENDIF.
END-OF-SELECTION.

************************************************************************
*--- ABRIR LA SESION PARA GENERRA EL JUEGO DE DATOS *******************
************************************************************************
FORM CREAR-BDC-GROUP-PEDIDOS.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = USRNM_P
USER = SY-UNAME
KEEP = 'X'.
ENDFORM.
*-------------------------------------------------------------------
FORM ABRIR-DATA-INPUT.
CALL FUNCTION 'UPLOAD'
EXPORTING
FILENAME = FICHERO
FILETYPE = 'DAT'
TABLES
DATA_TAB = TAB-DATA
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 PROCESAR-TAB-DATA.
LOOP AT TAB-DATA.

IF TAB-DATA-DATOS+0(1) = '1'. "Nro de Pedido Nuevo
IF W_GRABAR-ANTERIOR = 'SI'.
IF IND_PED = 'X'.
PERFORM GRABAR-REGISTRO.
ENDIF.
PERFORM BDC-INSERT-PEDIDOS USING TCODE_PED_CREA.
W_GRABAR-ANTERIOR = 'NO'.
ENDIF.
CLEAR W_TOTAL-MATERIAL.
PERFORM BUSQUEDA.
PERFORM GENERAR-DATOS-ORGANIZACION.
* PERFORM GENERAR-DATOS-CABEZA-DOC.
PERFORM GENERAR-POSICION-NORMAL. " Se unio al codigo 4
ENDIF.
*
* IF TAB-DATA-DATOS+0(1) = '2'.
* ADD 1 TO W_TOTAL-MATERIAL.
* PERFORM GENERAR-POSICION-NORMAL.
* W_GRABAR-ANTERIOR = 'SI'.
* ENDIF.
*
* IF TAB-DATA-DATOS+0(1) = '3'.
* ADD 1 TO W_TOTAL-MATERIAL.
* PERFORM GENERAR-POSICION-NORMAL.
* W_GRABAR-ANTERIOR = 'SI'.
* ENDIF.

IF TAB-DATA-DATOS+0(1) = '4'.
PERFORM GENERAR-LISTA-MATERIALES.
W_GRABAR-ANTERIOR = 'SI'.
ENDIF.


AT LAST.
IF W_GRABAR-ANTERIOR = 'SI'.
IF IND_PED = 'X'.
PERFORM GRABAR-REGISTRO.
ENDIF.
PERFORM BDC-INSERT-PEDIDOS USING TCODE_PED_CREA.
ENDIF.
ENDAT.

ENDLOOP.
ENDFORM.



FORM GENERAR-DATOS-ORGANIZACION.

CLEAR BDC_TAB.
REFRESH BDC_TAB.

BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '0101'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.

BDC_TAB-FNAM = 'VBAK-AUART'.
BDC_TAB-FVAL = TIPPED. "Clase de Pedido
APPEND BDC_TAB.
CLEAR BDC_TAB.
PED_AUX = TIPPED.

BDC_TAB-FNAM = 'VBAK-VKORG'.
BDC_TAB-FVAL = REC-OV. "Organizacion de Ventas
APPEND BDC_TAB.
CLEAR BDC_TAB.
ORG_AUX = REC-OV.

BDC_TAB-FNAM = 'VBAK-VTWEG'.
BDC_TAB-FVAL = REC-CANAL. "Canal de Distribucion
APPEND BDC_TAB.
CLEAR BDC_TAB.

BDC_TAB-FNAM = 'VBAK-SPART'.
BDC_TAB-FVAL = REC-SECTOR. "Sector
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '/0'.
APPEND BDC_TAB.
CLEAR BDC_TAB.

ENDFORM.




FORM GENERAR-POSICION-NORMAL.


BDC_TAB-PROGRAM = 'SAPLV45C'.
BDC_TAB-DYNPRO = '0100'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'LV45C-VBELN'.
BDC_TAB-FVAL = TAB-DATA-DATOS+1(10). "Numero del Pedido
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '=UEBR'.
APPEND BDC_TAB.
CLEAR BDC_TAB.
ENDFORM.



FORM GENERAR-LISTA-MATERIALES.

BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4001'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = 'P++ '.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'VBAK-AUGRU'.
BDC_TAB-FVAL = 'Z05'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'RV45A-VBAP_SELKZ(01)'. " Para que sombree y tome la posicion
BDC_TAB-FVAL = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '=PKAU'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4003'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'RV45A-KWMENG'.
BDC_TAB-FVAL = TAB-DATA-DATOS+19(15). "Cantidad del Pedido
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '/EBACK'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4001'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '=KBES'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4002'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '/EBACK'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'VBKD-IHREZ_E'.
BDC_TAB-FVAL = '0'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4001'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'RV45A-VBAP_SELKZ(02)'. " Para que sombree y tome la posicion
BDC_TAB-FVAL = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'VBAK-AUGRU'.
BDC_TAB-FVAL = 'Z05'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '=PKAU'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4003'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'RV45A-KWMENG'.
BDC_TAB-FVAL = TAB-DATA-DATOS+19(15). "Cantidad del Pedido
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '/EBACK'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4001'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '=KBES'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4003'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


*
* BDC_TAB-FNAM = 'VBAP-MATNR(2)'.
* BDC_TAB-FVAL = TAB-DATA-DATOS+1(18). "Numero del Material
*


BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4002'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'BDC_OKCODE'. " ***
BDC_TAB-FVAL = '/EBACK'.
APPEND BDC_TAB.
CLEAR BDC_TAB.



BDC_TAB-FNAM = 'VBKD-IHREZ_E'.
BDC_TAB-FVAL = '0'.
APPEND BDC_TAB.
CLEAR BDC_TAB.


BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '=SICH'.
APPEND BDC_TAB.
CLEAR BDC_TAB.

ENDFORM.




*FORM GENERAR-POSICION-ESTAMPAS.
*
* BDC_TAB-PROGRAM = 'SAPMV45A'.
* BDC_TAB-DYNPRO = '4001'.
* BDC_TAB-DYNBEGIN = 'X'.
* APPEND BDC_TAB.
* CLEAR BDC_TAB.
*
* BDC_TAB-FNAM = 'BDC_OKCODE'.
* BDC_TAB-FVAL = '/0'.
* APPEND BDC_TAB.
* CLEAR BDC_TAB.
*
* W_POSUP = W_TOTAL-MATERIAL.
* W_POSUP = W_POSUP * 10.
* W_AVANCE1 = W_TOTAL-MATERIAL + LIN + 1.
*
* CONCATENATE 'VBAP-MATNR(' W_AVANCE1 ')' INTO W_VAR1.
* BDC_TAB-FNAM = W_VAR1.
* BDC_TAB-FVAL = TAB-DATA-DATOS+1(18). "Numero del Material
* APPEND BDC_TAB.
* CLEAR BDC_TAB.
*
* CONCATENATE 'RV45A-KWMENG('W_AVANCE1 ')' INTO W_VAR1.
* BDC_TAB-FNAM = W_VAR1.
* BDC_TAB-FVAL = TAB-DATA-DATOS+19(15). "Cantidad del Pedido
* APPEND BDC_TAB.
* CLEAR BDC_TAB.
*
*
* BDC_TAB-FNAM = 'BDC_OKCODE'.
* BDC_TAB-FVAL = '/0 '.
* APPEND BDC_TAB.
* CLEAR BDC_TAB.
*
*ENDFORM.
*


FORM GRABAR-REGISTRO.

BDC_TAB-PROGRAM = 'SAPMV45A'.
BDC_TAB-DYNPRO = '4001'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.

BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '/11'.
APPEND BDC_TAB.
CLEAR BDC_TAB.

ENDFORM.



FORM BDC-INSERT-PEDIDOS USING TCODE_TRANS.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = TCODE_TRANS
TABLES
DYNPROTAB = BDC_TAB.

ENDFORM.



FORM BDC-CLOSE-GROUP.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDFORM.


FORM busqueda.

NRO_PEDIDO = TAB-DATA-DATOS+1(10).

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 VBELN = NRO_PEDIDO
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.


CASE VBAK-AUART.
WHEN 'ZRE4'.
TIPPED = 'ZRE5'.
IND_PED = 'X'.
WHEN 'ZPSA'.
TIPPED = 'ZRE2'.
IND_PED = 'X'.
WHEN 'ZPF9'.
TIPPED = 'ZRE3'.
IND_PED = 'X'.
WHEN 'ZPFH'.
TIPPED = 'ZPGH'.
IND_PED = 'X'.
WHEN 'ZPFI'.
TIPPED = 'ZRE6'.
IND_PED = 'X'.
WHEN 'ZP00'.
TIPPED = 'ZRE7'.
IND_PED = 'X'.
WHEN 'ZP01'.
TIPPED = 'ZRE8'.
IND_PED = 'X'.
WHEN 'ZP02'.
TIPPED = 'ZRE9'.
IND_PED = 'X'.
ENDCASE.
ENDSELECT.
ENDFORM.

Gracias de Antemano.

Saludos

AMAM