|
#1
|
|||
|
|||
bucle loop q no funciona
Hola,
En mi código vamos a tabla de cabecera con vbeln y obtenemos el kunmv, vamos a la de posiciones y obtenemos los posnr y sincronizamos ** comentarios *Type KONV si KSCHL = SHIM o DHIM o MHIM,entonces "IVA" y MWSK1 <> *RB, RX o RY, si MWSK1 = RB, RX o RY entonces "IGIC" VBRK KNUMV LOOP AT it_konv WHERE kposn = vbrp-posnr AND knumv = vbrk-knumv. IF kposn_aux <> it_konv-kposn. kposn_aux = it_konv-kposn. Debugando he comprobado que en la tabla interna it_konv tenemos por ej: KNUMV KPOSN 4567777 01 4567777 01 4567777 02 4567777 02 Debido a que Kposn no es único, no corre bien el loop por todos los registros Alguien me puede dar una solución? Saludos |
#2
|
||||
|
||||
Justo antes del LOOP:
*Borramos los registros duplicados. ORDER it_konv BY knumv kpon ASCENDING. DELETE ADJACENT DUPLICATES FROM it_konv. El tema de las Condiciones es un pelín complicado, si tienes incidencias no dudes en escribir. Saludos. |
#3
|
|||
|
|||
¿que es lo que tienes que hacer? Si lo que quieres es ver las posiciones para el registro de condición es lo que comenta yoni si lo que quieres es ver las condiciones aplicadas a las líneas tienes que recorrer sin poner el if.
Saludos |
#4
|
|||
|
|||
loop
Hola,
quiero recorrer registro a registro la tabla interna y verificar el valor de los campos kschl y mwsk1. Entonces meter estas condiciones en el LOOP. ( ( kschl = 'SHIM' ) OR ( kschl = 'DHIM' ) OR ( kschl = 'MHIM' ) ) AND ( ( mwsk1 <> 'RB') OR ( mwsk1 <> 'RX' ) OR ( mwsk1 <> 'RY' ) ). v_taxtype = 'IVA'. v_taxtypeli = 'IVA'. v_supclient = 'IVA'. *si KONV-KSCHL = SHIM o DHIM o MHIM,MWSK1 = RB, RX o RY ----> entonces "IGIC" IF ( ( it_konv-kschl = 'SHIM' ) OR ( it_konv-kschl = 'DHIM' ) OR ( it_konv-kschl = 'MHIM' ) ) AND ( ( it_konv-mwsk1 = 'RB') OR ( it_konv-mwsk1 = 'RX' ) OR ( it_konv-mwsk1 = 'RY' ) ). v_taxtype = 'IGIC'. v_taxtypeli = 'IGIC'. v_supclient = 'IGIC'. ELSE. v_taxtype = ''. v_taxtypeli = ''. v_supclient = ''. ENDIF. IF ( ( it_konv-kschl = 'SHIM' ) OR ( it_konv-kschl = 'DHIM' ) OR ( it_konv-kschl = 'MHIM' ) ) . CLEAR v_impli. v_impli = 10. IF it_konv-kbetr <> 0 AND v_impli <> 0. v_ratetaxli = it_konv-kbetr / v_impli. ENDIF. *IU ELSE. v_ratetaxli = ''. ENDIF. IF it_konv-kbetr <> 0 AND v_imp <> 0. CLEAR v_imp. v_imp = 10. v_ratetax = it_konv-kbetr / v_imp. *IU ELSE. v_ratetax = ''. ENDIF. OJO, porque konv no es unico, y quiero recorrer registro a registro |
#5
|
|||
|
|||
Los registros normalmente son únicos para knumv posición y KSCHL. Para cada condición línea hay una línea por registro de condición. Lo que puedes hacer es recorrer todas las condiciones y cuando hayas encontrado la que te sirve poner la condición para que no siga recorriendo ese knumv.
Saludos |
#6
|
||||
|
||||
Mira este código:
SELECT * INTO CORRESPONDING FIELDS OF TABLE konv_h FROM konv AS v FOR ALL ENTRIES IN tabla_alv WHERE v~knumv = tabla_alv-knumv AND kinak <> flag_x AND kntyp <> 'D'. "IVA * AND KSCHL(2) = 'ZX'. Cuando he recuperado los datos me he fijado solo en el KNTYP para verificar que no fuera IVA. Osea en tu caso KNTYP = 'D'. Pero esto es variable según la casuistica de la empresa. Hablalo con tu consultor o analista. Por otro lado, te recomendaría crear una tabla Z customaizing con vista de actualización (se11, se30) para evitar los literales como 'D' o en tu caso KSCHL = 'SHIM'. DE todos modos hay un campo uniquivoco para cada registro de la condición, osea, por cada KNUMV, encuentras varios KNUMH en la KONV. Todos los KNUMH están recogidos en la tabal KONH. Suelo trabajar haciendome una tabla interna que contenga como mínimo VBELN | KNUMV | KNUMH | KSCHL | De todos modos como te comentaba, consultalo con tu superior. Comenta si quieres cual es el fin de este rporte a ver si se puede dar una orientación ´más concreta. Saludos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|