MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 16/05/12, 15:57:36
amam2605 amam2605 is offline
Senior Member
 
Fecha de Ingreso: ene 2009
Mensajes: 150
Programa

Hola a Todos !!!

Tengo un caso a ver si me puedes por favor ayudar, tengo que seleccionar informacion donde solo se imprima cuando tenga unicamente las areas 1000-10-67 y 1000-11-67 si esta acompañada por otra area no se debe imprimir.

Por ejemplo el codigo 42867 si se debe imprimir por que solo tiene esas dos areas.

Codigo Organizacion Canal Sector
42867 1000 10 67
42867 1000 11 67


Este codigo 18273 no se debe imprimir ya que aparte de las areas 1000-10-67 y 1000-11-67 tambien tiene el area 1000-10-11.

Codigo Organizacion Canal Sector
18273 1000 10 11
18273 1000 10 67
18273 1000 11 67

En el programa seleccione de la tabla knvv todas los codigos que esten en el area 1000 pero como extraer que solo sean los que tengan 1000-10-67 y 1000-11-67 unicamente. Si coloco que traiga los que tengan SPART = 67 tambien me trae los que tengan el SPART = 10.


El codigo que tengo actualmente es:


TABLES: KNVV,
KNA1.


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

DATA: BEGIN OF TABLA OCCURS 0,
KUNNR LIKE KNVV-KUNNR,
VKORG LIKE KNVV-VKORG,
VTWEG LIKE KNVV-VTWEG,
SPART LIKE KNVV-SPART,
END OF TABLA.


DATA: BEGIN OF TABLA2 OCCURS 0,
KUNNR LIKE KNVV-KUNNR,
VKORG LIKE KNVV-VKORG,
VTWEG LIKE KNVV-VTWEG,
SPART LIKE KNVV-SPART,
END OF TABLA2.


START-OF-SELECTION.

WRITE: / 'Codigo',
013 'Nombre',
050 'Organizacion',
065 'Canal',
074 'Sector'.

SELECT KUNNR VKORG VTWEG SPART INTO (TABLA-KUNNR, TABLA-VKORG, TABLA-VTWEG, TABLA-SPART)
FROM KNVV
WHERE VKORG = '1000'
AND VTWEG IN ('10','11').

MOVE TABLA TO TABLA2.
IF TABLA2-SPART NE '67'.
DELETE TABLA2 WHERE KUNNR = TABLA-KUNNR.
CONTINUE.
ENDIF.

APPEND TABLA2.
SELECT SINGLE * FROM KNA1
WHERE KUNNR = TABLA-KUNNR.

WRITE: / TABLA2-KUNNR,
013 KNA1-NAME1,
050 TABLA2-VKORG,
065 TABLA2-VTWEG,
074 TABLA2-SPART.

ENDSELECT.

Si me pueden orientar ya que asi no esta respetando que traiga solo los codgos que tengan unicamnete las areas 1000-10-67 o 1000-11-67.

Gracias

Saludos

AMAM
Responder Con Cita
  #2  
Viejo 16/05/12, 17:02:38
rafa_fonseca rafa_fonseca is offline
Junior Member
 
Fecha de Ingreso: abr 2012
Mensajes: 12
falta loop para borrar

buenas, creo que tu problema es este:

IF TABLA2-SPART NE '67'.
DELETE TABLA2 WHERE KUNNR = TABLA-KUNNR.
CONTINUE.
ENDIF.

no estas usando un loop para recorrer la tabla por ende no te va borrar el registro podrias hacer lo siguiente:

loop at tabla2
where spart ne '67'.
delete tabla2.
endloop.


saludos
Responder Con Cita
  #3  
Viejo 16/05/12, 19:22:46
Mari.Sole Mari.Sole is offline
Senior Member
 
Fecha de Ingreso: nov 2010
Localización: Argentina
Mensajes: 121
Hola Amam2605,
Si no entendí mal tu necesidad, debes obtener los datos comerciales de los clientes que tengan:
VKORG = '1000'.
VTWEG = '10' o '11'
SPART = '67'.

Y para todos estos clientes obtener luego su Nombre (NAME1).

Yo haría algo así:

* Obtener los datos comerciales de los clientes

SELECT KUNNR VKORG VTWEG SPART
FROM KNVV
INTO TABLE TABLA1
WHERE VKORG EQ '1000'
AND ( VTWEG EQ '10' OR VTWEG EQ '11')
AND SPART EQ '67'.

*Obtener el Nombre para todos los clientes

SELECT KUNNR NAME1
FROM KNA1
INTO TABLE TABLA2
FOR ALL ENTRIES TABLA1
WHERE KUNNR EQ TABLA1-KUNNR.


* Armo tabla FINAL a mostrar

LOOP AT TABLA1 INTO R_TABLA1
READ TABLE TABLA2 INTO R_TABLA2 WITH KEY KUNNR = R_TABLA1-KUNNR.

IF SY-SUBRC IS INITIAL.

MOVE R_TABLA1-KUNNR TO R_TABLA_FINAL-KUNNR.
MOVE R_TABLA2-NAME1 TO R_TABLA_FINAL-NAME1.
MOVE R_TABLA1-VKORG TO R_TABLA_FINAL-VKORG.
MOVE R_TABLA1-VTWEG TO R_TABLA_FINAL-VTWEG.
MOVE R_TABLA1-SPART TO R_TABLA_FINAL-SPART.

APPEND R_TABLA_FINAL TO TABLA_FINAL.
CLEAR R_TABLA_FINAL.

ENDIF.
ENDLOOP.

Luego sólo restaría imprimir en pantalla la TABLA_FINAL con Write o un ALV.

Espero te sirva,

Saludos.
Responder Con Cita
  #4  
Viejo 17/05/12, 12:43:27
amam2605 amam2605 is offline
Senior Member
 
Fecha de Ingreso: ene 2009
Mensajes: 150
programa

Hola Mari.Sole como estas, si debe imprimir como dices pero si el codigo al seleccionar tiene aparte de las areas 1000-10-67 y/o 1000-11-67 tiene otra area ese codigo no se debe imprimir solo se imprimen los que tengas esas dos areas o una de ellas si esta acompañada por otras areas no se imprime.

El prgrama que me indicas las imprime sin tomar en cuenta esta condicion. cierto?

Muchas Gracias

Saludos

AMAM

Responder Con Cita
  #5  
Viejo 17/05/12, 16:25:39
Mari.Sole Mari.Sole is offline
Senior Member
 
Fecha de Ingreso: nov 2010
Localización: Argentina
Mensajes: 121
Hola amam2605,
Ahora sí me queda más claro. Podríamos entonces hacer sl siguiente cambio al código que te pasé:

* Obtener los datos comerciales de los clientes

SELECT KUNNR VKORG VTWEG SPART
FROM KNVV
INTO TABLE TABLA1
WHERE VKORG EQ '1000'
AND ( VTWEG EQ '10' OR VTWEG EQ '11').

* Encontrar clientes con Sector (SPART) distinto a 67

LOOP TABLA1 INTO R_TABLA1.
IF R_TABLA1-SPART NE '67'.
MOVE R_TABLA1 -KUNNR TO R_TABLA3-KUNNR.
APPEND R_TABLA3 TO TABLA3.
CLEAR R_TABLA3.
ENDIF.
ENDLOOP.

* Eliminar clientes con Sector (SPART) distinto a 67

CLEAR D_INDEX.
LOOP TABLA1 INTO R_TABLA1.
D_INDEX = SY-TABIX.
READ TABLE TABLA3 INTO R_TABLA3 WITH KEY KUNNR = R_TABLA1-KUNNR.
IF SY-SUBRC IS INITIAL.
DELETE TABLA1 INDEX D_INDEX.
ENDIF.
ENDLOOP.


Luego continuaría con el resto del código donde obtiene a partir de la TABLA1 los nombres de los clientes, y por ultimo arma la tabla final a mostrar, ese código no debería sufrir ninguna modificación.
Se podrían ahorrar unos cuantos pasos volcando desde el comienzo todo a una tabla final y sólo ir modificando registros o eliminando pero traté de hacerlo así bien desglosado para que se entienda bien que se está haciendo.
Se puede optimizar muchísimo más sin problemas.
Espero te sea útil.
Responder Con Cita
  #6  
Viejo 18/05/12, 12:41:47
amam2605 amam2605 is offline
Senior Member
 
Fecha de Ingreso: ene 2009
Mensajes: 150
Muchas Gracias Amiga por tomarte toso ese tiempo en ayudarme.

Saludos

AMAM


Responder Con Cita
  #7  
Viejo 18/05/12, 14:42:51
Mari.Sole Mari.Sole is offline
Senior Member
 
Fecha de Ingreso: nov 2010
Localización: Argentina
Mensajes: 121
De nada AMAM, espero te haya servido y se haya entendido el código.
Y esto es apenas un pequeño granito de arena que es mi manera de devolver toda la ayuda que siempre he encontrado aquí en el foro.

Saludos.
Responder Con Cita
  #8  
Viejo 18/05/12, 15:42:31
amam2605 amam2605 is offline
Senior Member
 
Fecha de Ingreso: ene 2009
Mensajes: 150
Hola Amiga

Donde puedo ver ejemplos de rutura de control en programas, tengo un caso con otro programa que coloque en el foro pero no he trabajado con ese procedimiento.

Muchas Gracias por tu ayuda.

Saludos

AMAM


Archivos Adjuntos
Tipo de Archivo: txt Z_FACT_VENTAS_AVISOS_UNA_PAGI2.txt (7.5 KB, 4 visitas)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 18:01:13.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web