PDA

Ver la Versión Completa : dudas con un LOOP


romario2
19/02/09, 09:05:09
Hola,

este loop no acaba de funcionarme bien,
alguien me podría dar algún consejo?

Muchas gracias de antemano:p


* recorremos tabla interna cuando cliente esté informado
LOOP AT it_bsid WHERE kunnr <> ''.
IF bel_aux <> it_bsid-belnr.
bel_aux = it_bsid-belnr.

* En la selección de documentos se deberán quitar
* todos los documentos que estén anulados, es decir en la tabla BKPF ( con belnr)
* todos aquellos registros que tengan informado el campo STBLG.
SELECT SINGLE *
INTO bkpf
FROM bkpf
WHERE stblg <> ''
AND belnr = it_bsid-belnr
AND gjahr = p_gjahr
AND bukrs = p_bukrs.

SELECT SINGLE *
INTO tgsbt
FROM tgsbt
WHERE gsber IN s_gsber.

SELECT SINGLE *
INTO vbrk
FROM vbrk
WHERE belnr = it_bsid-belnr
AND gjahr = p_gjahr
AND bukrs = p_bukrs.

IF sy-subrc = 0.
p_kunrg = vbrk-kunrg.
ENDIF.

SELECT SINGLE *
INTO kna1
FROM kna1
WHERE kunnr IN rg_kunnr.

IF bkpf-psoak = c_pend.
MOVE-CORRESPONDING it_bsid TO it_alv.
it_alv-zuonr = bsid-zuonr.
it_alv-psoak = bkpf-psoak.
it_alv-dokid = bkpf-dokid.
it_alv-gtext = tgsbt-gtext.
it_alv-vbeln = vbrk-vbeln.
it_alv-name1 = kna1-name1.
* it_alv-zsabe = knb1-zsabe.
it_alv-blart = bsid-blart .
APPEND it_alv.
ELSE.
* DELETE it_bsid WHERE belnr = bkpf-belnr.
ENDIF.
ENDIF.
ENDLOOP.

Bmamba
19/02/09, 09:34:57
No sé si te he entendido bien, pero yo haría algo así como esto:


* recorremos tabla interna cuando cliente esté informado
LOOP AT it_bsid WHERE not kunnr is initial.
IF bel_aux <> it_bsid-belnr.
bel_aux = it_bsid-belnr.

* En la selección de documentos se deberán quitar
* todos los documentos que estén anulados, es decir en la tabla BKPF ( con belnr)
* todos aquellos registros que tengan informado el campo STBLG.
SELECT SINGLE *
INTO bkpf
FROM bkpf
WHERE stblg <> ''
AND belnr = it_bsid-belnr
AND gjahr = p_gjahr
AND bukrs = p_bukrs.
* Si se encontró algún registro que cumpla con la condición, se
* agrega
if sy-subrc = 0.

SELECT SINGLE *
INTO tgsbt
FROM tgsbt
WHERE gsber IN s_gsber.

SELECT SINGLE *
INTO vbrk
FROM vbrk
WHERE belnr = it_bsid-belnr
AND gjahr = p_gjahr
AND bukrs = p_bukrs.

IF sy-subrc = 0.
p_kunrg = vbrk-kunrg.
ENDIF.

SELECT SINGLE *
INTO kna1
FROM kna1
WHERE kunnr IN rg_kunnr.

IF bkpf-psoak = c_pend.
MOVE-CORRESPONDING it_bsid TO it_alv.
it_alv-zuonr = bsid-zuonr.
it_alv-psoak = bkpf-psoak.
it_alv-dokid = bkpf-dokid.
it_alv-gtext = tgsbt-gtext.
it_alv-vbeln = vbrk-vbeln.
it_alv-name1 = kna1-name1.
* it_alv-zsabe = knb1-zsabe.
it_alv-blart = bsid-blart .
APPEND it_alv.
ELSE.
* DELETE it_bsid WHERE belnr = bkpf-belnr.
ENDIF.
else.
delete it_bsid.
endif.
ENDIF.

ENDLOOP

becariosap
19/02/09, 10:00:48
Hola a todos,

Tengo un pequeño gran problema,
Resulta que estamos haciendo una migracion de 4.0 a ECC6.0.
Tengo una maquina de test(T) y una maquina de produccion(p) cuando ejecuto un B.I en la maquina de test La pantalla que todos conocemos de la tx VA01 se vuelve pequeña a comparacion de cuando lo ejecuto el B.I en la maquina de Produccion.

Lo que me gustaria sabes es que cuando hago una grabacion me sale estos campos y no se donde encontrarlos o en que performs o subrutina standar la tiene.

T VA01 BS AA X F

Muchas gracias.