Reporte de líneas de facturas, ayuda para Query

Hola que tal, Mi nombre es Beto Medina

Necesito de su ayuda con este problema que tengo para hacer un query.

En la facturación podemos incluir artículos de venta y artículos mano de obra, me pidieron crear un artículo para entregar un obsequio un articulo promocional, dicho artículo se creó para meterlo al inventario y controlar la existencia, se obsequió en algunas ventas a los clientes y se estuvo incluyendo en la factura para hacer las salidas correspondientes de la existencia del almacén.

Ahora me piden un reporte de cada factura donde se haya facturado el articulo publicitario pero que además aparezcan las líneas de los artículos de venta que están en esa factura, esto para saber en que artículos de venta se obsequiaron y poder tener una estadística de que artículos fueron los más vendidos donde se entregaron los obsequios.

Ya hice el query que es muy fácil para saber que facturas son las que contienen el articulo publicitario, el resultado arroja esto:

Número de documento Fecha de contabilización ID interno de documento Número de artículo Descripción artículo/serv. Cantidad Precio tras el descuento

1 1045105 01/06/2018 528594 ARTPROM ARTICULO PUBLICITARIO 1 0.01
2 7023879 01/06/2018 528603 ARTPROM ARTICULO PUBLICITARIO 1 0.01
3 4044612 01/06/2018 528611 ARTPROM ARTICULO PUBLICITARIO 1 0.01
4 5035290 02/06/2018 528639 ARTPROM ARTICULO PUBLICITARIO 1 0.01
5 4044616 04/06/2018 528671 ARTPROM ARTICULO PUBLICITARIO 1 0.01

Se requiere que el resultado sea de la siguiente manera y excluyendo los artículos de mano de obra:

Número de documento Fecha de contabilización ID interno de documento Número de artículo Descripción artículo/serv. Cantidad Precio tras el descuento

1 1045105 01/06/2018 528594 ARTICULO 1 PLATO 1 20.00
2 1045105 01/06/2018 528594 ARTICULO 2 VASO 1 15.00
3 1045105 01/06/2018 528594 ARTPROM ARTICULO PUBLICITARIO 1 0.01
4 7023879 01/06/2018 528603 ARTICULO 3 TENEDOR 1 5.00
5 7023879 01/06/2018 528603 ARTICULO 4 CUCHARA 1 4.00
6 7023879 01/06/2018 528603 ARTPROM ARTICULO PUBLICITARIO 1 0.01
7 4044612 01/06/2018 528611 ARTICULO 5 TENEDOR 1 5.00
8 4044612 01/06/2018 528611 ARTICULO 6 CUCHARA 1 4.00
9 4044612 01/06/2018 528611 ARTPROM ARTICULO PUBLICITARIO 2 0.01
10 5035290 02/06/2018 528639 ARTICULO 7 FLORERO 1 25.00
11 5035290 02/06/2018 528639 ARTICULO 8 MACETA 1 30.00
12 5035290 02/06/2018 528639 ARTPROM ARTICULO PUBLICITARIO 2 0.01
13 4044616 04/06/2018 528671 ARTICULO 4 CUCHARA 1 4.00
14 4044616 04/06/2018 528671 ARTPROM ARTICULO PUBLICITARIO 1 0.01

No sé cómo hacer para obtener solo las líneas los artículos de venta y los artículos publicitarios y que en el caso que en la factura tenga líneas con artículos de mano de obra los excluya, no soy un experto en SQL y solo hago algunas consultas con lo básico para obtener algunos resultados relacionando tablas, cosas simples.

No sé si se pueda hacer por medio de una variable que tome el número de factura y dentro de la consulta hacer una sub-consulta que utilice la variable antes mencionada y se obtengan las líneas que se necesitan excluyendo las líneas de los artículos de mano de obra.

No tengo una idea muy clara de cómo hacerlo porque la lógica y no sé los comando para poder elaborar la consulta pero si me dan un indicio de cómo lo puedo hacer :nerd_face: me pongo a investigar :man_technologist:t2: para aprender un poco más, ahora si me ayudan con la consulta sería mejor (:blush: ji ji ji :blush:), quizá la forma que pienso de cómo hacerlo no es la correcta pero apelo a su ayuda.

Espero haberme explicado lo que necesito hacer.

Saludos, gracias por anticipado y quedo al pendiente. :raising_hand_man:t2:

1 me gusta

Hola @Jammunico

1.- Pasa por el tema de #presentaciones, de esta manera sabremos el rol y el conocimiento que tienes entorno a SAP.

2.- Comparte tu consulta, será el punto de partida para poder ayudarte, de acuerdo a lo que comentas parece que será algo sencillo, creo que solo se involucrarán las tablas OINV e INV1

Saludos.

2 Me gusta

Hola, Gracias por el Tip, te comparto lo que puse en el tema de #presentaciones.

https://foros.consultoria-sap.com/t/presentacion-beto-medina/27781?u=jammunico

Saludos. :handshake:

1 me gusta

Gracias, si tienes posibilidad de compartir tu consulta con gusto te ayudo.

Creo que te será de ayuda el siguiente vídeo, habla de kits, si posteriormente en tu empresa tienen algún otro articulo promocional podrías generar un kit y así saber cuando se dio salida a dicho articulo.

Saludos

1 me gusta

Hola @Jammunico, te comparto este tema en el que colaboré en días pasados, donde se menciona el uso de LIKE y NOT LIKE, si lo que requieres por ahora es generar el query, este ejemplo te será de utilidad, solo cambian las tablas.

Orden de Venta y sus artículos

1 me gusta

Puedes compartir tu consulta , los items de mano de obra la tienes en un grupo de articulos exclusivo verdad este podria ser nuestro condicionante para la consulta y como lo menciona @JonathanAzael utilizando el not like ‘grupo de articulos’ , podria dar el resultado que requieres

1 me gusta

Hola @pcarrasco, @JonathanAzael, @Un_Tal_Erik_J
Gracias por sus respuestas.

@pcarrasco, agradezco tu respuesta el video, no es un kit son artículos individuales, si manejo kit de ventas precisamente para artículos que son mano de obra.

La empresa es una distribuidora de llantas (neumáticos, cauchos o gomas) con servicios de mantenimiento de vehículos (mano de obra).

El query es el siguiente:

SELECT T0.[DocNum], T0.[DocDate], T0.[CardCode], T0.[CardName], T1.[DocEntry], T1.[ItemCode], T1.[Dscription],T1.[FreeTxt], T1.[Quantity], T1.[Price] FROM OINV T0 INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry] INNER JOIN NNM1 T2 ON T0.[Series] = T2.[Series] WHERE (T1.[FreeTxt] Like ‘%%PLAYERA%%’ OR T1.[FreeTxt] Like ‘%%BALO%%’ ) AND T0.[DocDate] BETWEEN ‘[%0]’ AND ‘[%1]’

Este sería el resultado del query

# Tipo Número de artículo Descripción del artículo Texto libre Cantidad Precio unit. Precio C/DESC Precio bruto Total (ML) Existencia
1 STAFA4AB AFINACION 4 CILINDROS Y CAMBIO DE ACEITE B 1 $1,293.10 $1,293.10 $1,500.00 $1,293.10
2 STCG0000 MANO DE OBRA 1
3 STAFBUJI BUJIA 4
4 STAFFLAR FILTRO DE AIRE 1
5 STAFFLGS FILTRO DE GASOLINA 1
6 STLBAMLT LITRO DE ACEITE MINERAL 5 15
7 STLBFLAC FILTRO DE ACEITE 1 5
8 STCG0500 MANO DE OBRA COMPLEMENTO AFINACION DE MOTOR 1 $431.03 $431.03 $499.99 $431.03
9 15552050000 185/60 R15 84H CN SL SC EURODRIVE 2 2 $1,104.95 $1,104.95 $1,281.74 $2,209.90 2
10 STLLVALN VALVULA NORMAL 2 $21.55 $21.55 $25.00 $43.10 18
11 STLLBALN BALANCEO DE 1 RUEDA NORMAL 2 $43.10 $43.10 $50.00 $86.20
12 ARTPROM ARTICULO PROMOCIONAL PLAYERA 1 $0.01 $0.01 $0.01 $0.01 17

Como pueden ver solo he podido obtener el renglón 12 de cada factura y necesito reportar el renglón 9 y 12.

@pcarrasco, desde la línea 1 hasta la 7 conforman un kit de ventas que es un artículo de mano de obra y son los que no quiero que aparezcan en el reporte.

@JonathanAzael, ahora que compartí el query, no sé como podría incluir las condicionantes LKE y NOT LIKE.

@Un_Tal_Erik_J, es correcto que los ítems de mano de obra están en grupo de artículos exclusivo los tengo en el grupo 108, los grupos de artículos que tengo son los siguientes:

# Número Nombre de grupo Bloqueado Fuente de datos
1 100 ARTÍCULOS N N
2 101 LLANTA AUTO-CAMIONET N N
3 102 LLANTA CAMIÓN N N
4 103 LLANTA AGRÍCOLA YOTR N N
5 104 LLANTAS RENOVADAS N N
6 105 CÁMARAS Y CORBATAS N N
7 106 AMORTIGUADORES N N
8 107 OTROS N N
9 108 SERVICIOS PATIO N N

El renglón 9 de la factura de arriba pertenece al grupo 101 y el renglón 12 pertenece al grupo 107 pero en el query lo busco por medio del campo FreeTxt porque solo quiero los que tengan PLAYERA :tshirt: o BALON :soccer:.

Espero haberme explicado mejor esta vez de lo que necesito reportar. :neutral_face: disculpen si no lo hice correctamente al inicio.:slightly_frowning_face:

Muchas gracias por sus respuestas y ayuda.

Quedo al pendiente.

Saludos.

Hola, gracias por tu respuesta, ya amplié la información sobre la ayuda que necesito, ojalá puedas revisarla y darme tu ayuda la cual agradezco mucho.

Saludos.:handshake:

Hola, agradezco tu respuesta y espero puedas revisar la información que acabo de ampliar, ojalá puedas revisarla.

saludos. :handshake:

Hola, agradezco la respuesta que me diste y por lo mismo amplié más la información, ojalá puedas revisarla y darme tu ayuda.

Saludos. :handshake:

Hola, porque las líneas 10 y 11 no las incluyes?

anexale la OITM para tomar el campo [ItmsGrpCod] en el wehere de tu consulta quedando

T3.[ItmsGrpCod] IN ( '101 ’ ,
'102 ’ ,
'103 ’ ,
'104 ’ ,
'105 ’ ,
'106 ’ ,
'107 ’ ) AND – lo que tienes en tu consulta , aqui le indicas que solo los articulos que estan en estos grupos por lo cual ya te excluiria el grupo 108

Saludos

1 me gusta

Hola @Oscar1900 , las consideramos como parte del servicio de mano de obra porque las tenemos clasificadas en el grupo 108.

Saludos.

Si del numero de linea 1 al 7 corresponden al grupo 108 y este lo quieres quitar de tu consulta, esta quedaría así

select 
    T0.[DocNum], 
	T0.[DocDate], 
	T0.[CardCode], 
	T0.[CardName], 
	T1.[DocEntry], 
	T1.[ItemCode], 
	T1.[Dscription],
	T1.[FreeTxt], 
	T1.[Quantity], 
	T1.[Price] 
from OINV T0 
    inner join INV1 T1 on T0.[DocEntry] = T1.[DocEntry] 
    inner join NNM1 T2 on T0.[Series] = T2.[Series] 
	inner join OITM T3 on T1.[ItemCode] = T3.[ItemCode] -- nueva tabla --  
        where (T1.[FreeTxt] Like ‘%%PLAYERA%%’ OR T1.[FreeTxt] Like ‘%%BALO%%’ ) 
		and T0.[DocDate] BETWEEN ‘[%0]’ AND ‘[%1]’
		and T3.[ItmsGrpCod] not in (108) -- nueva condición --

Nos cuentas como te fue, saludos.

Hola, gracias pero sigue dando el mismo resultado

Estuve tentado a hacerle otro cambio en las condiciones WHERE pero analizando el cambio me va a mostrar todas las facturas con artículos de todos los grupos a excepción de los del 108 y lo que se quiere es obtener solo las facturas que tengan los artículos publicitarios en especifico la playera o el balón.

Gracias por tu respuesta.

Ya hice los cambios que me indicas y no tuvo ningún cambio siguió igual.

Saludos.

Gracias @pcarrasco / @Un_Tal_Erik_J

El resultado debería ser algo así.

# Número de documento Fecha de contabilización Código de cliente/proveedor Nombre de cliente/proveedor ID interno de documento Número de artículo Descripción artículo/serv. Texto libre Cantidad Precio tras el descuento
1 1045105 01/06/2018 ORICONT Orizaba Venta Contado Mostrador 528594 15552050000 185/60 R15 84H CN SL SC EURODRIVE 2 2 1104.95
2 1045105 01/06/2018 ORICONT Orizaba Venta Contado Mostrador 528594 ARTPROM ARTICULO PROMOCIONAL PLAYERA 1 0.01
3 1045117 04/06/2018 ORICONT Orizaba Venta Contado Mostrador 528700 15488760000 245/75 R16 (LT) 120/116Q OVERLANDER AT 4 2187.76
4 1045117 04/06/2018 ORICONT Orizaba Venta Contado Mostrador 528700 ARTPROM ARTICULO PROMOCIONAL PLAYERA Y BALON 2 0.01
5 3035877 05/06/2018 HUACONT Huatusco Venta Contado Mostrador 528747 15488750000 235/75 R16 108S OVERLANDER AT 2 1443.22
6 3035877 05/06/2018 HUACONT Huatusco Venta Contado Mostrador 528747 ARTPROM ARTICULO PROMOCIONAL PLAYERA 1 0.01
7 3035879 05/06/2018 HUACONT Huatusco Venta Contado Mostrador 528756 15485620000 175/70 R13 82T CN SL SC CONTI POWER CONTACT 2 676.88
8 3035879 05/06/2018 HUACONT Huatusco Venta Contado Mostrador 528756 ARTPROM ARTICULO PROMOCIONAL PLAYERA 1 0.01
9 4044622 04/06/2018 TBCCONT Tierra Blanca Venta Contado Mostrador 528711 15495550009 195/65 R15 91H CN SL SC PROCONTACT TX EO 4 1144.28
10 4044622 04/06/2018 TBCCONT Tierra Blanca Venta Contado Mostrador 528711 ARTPROM ARTICULO PROMOCIONAL PLAYERA Y BALON 2 0.01
11 4044616 04/06/2018 TBCCONT Tierra Blanca Venta Contado Mostrador 528671 03502230000 205/55 R16 91W PREMIUM CONTACT 2 2 $1,375.20
12 4044616 04/06/2018 TBCCONT Tierra Blanca Venta Contado Mostrador 528671 ARTPROM ARTICULO PROMOCIONAL PLAYERA 1 0.01
13 4044612 01/06/2018 TBCCONT Tierra Blanca Venta Contado Mostrador 528611 15507700000 175/70 R13 82T EURODRIVE 2 4 $642.95
14 4044612 01/06/2018 TBCCONT Tierra Blanca Venta Contado Mostrador 528611 ARTPROM ARTICULO PROMOCIONAL BALON Y PLAYERA 2 0.01
15 5035290 02/06/2018 TUXCONT Tuxtepec Venta Contado Mostrado 528639 15552040000 205/65 R15 94H CN SL SC EURODRIVE 2 2 $1,162.70
16 5035290 02/06/2018 TUXCONT Tuxtepec Venta Contado Mostrado 528639 ARTPROM ARTICULO PROMOCIONAL PLAYERA 1 0.01

Hola @Jammunico

Así

select 
    T0.[DocNum], 
	T0.[DocDate], 
	T0.[CardCode], 
	T0.[CardName], 
	T1.[DocEntry], 
	T1.[ItemCode], 
	T1.[Dscription],
	T1.[FreeTxt], 
	T1.[Quantity], 
	T1.[Price] 
from OINV T0 
    inner join INV1 T1 on T0.[DocEntry] = T1.[DocEntry] 
    inner join NNM1 T2 on T0.[Series] = T2.[Series] 
	inner join OITM T3 on T1.[ItemCode] = T3.[ItemCode] -- nueva tabla --  
        where  
		 T0.[DocDate] BETWEEN '2018-06-27 00:00:00.000' AND '2018-07-27 00:00:00.000'
		 and T3.[ItmsGrpCod] not in (108) -- nueva condición --

Te devolverá todas las facturas del periodo de tiempo indicado en DocDate excluyendo los artículos del grupo 108, ahora lo que nos faltará es reducir esa búsqueda donde solo se incluyan aquellas facturas que tienen el promocional, para eso ese campo NO deberá estar a nivel de linea, en la INV1, porque de ser así solo te mostrará esos item, el WHERE promocional deberá estar en la OINV para esto se me ocurre crear un UDF llamado PROMOCIÓN con valores validos S o N, crear un query que me regrese todas las facturas que tengan un item promocional y a esas indicarles S, posterior en la consulta que ya estamos trabajando agregar en el WHERE

and   T0.U_Promocion = 'S'

De esta manera obtendrás el resultado que necesitas.

Saludos

Gracias por tu respuesta.
¿Un campo más UDF? :thinking:

Bueno, es una solución pero ya no quisiera aumentar más campos UDF, tengo muchísimos campos en OINV que siento como que ya está saturado de tantos por lo de las facturación electrónica y otros campos para control que solo se usaron poco tiempo y a parte sería actualizar cada una de las facturas que ya están elaboradas, además cuando se termine esa promoción creo que tendré un campo UDF más sin utilizar como muchos otros que ya están en OINV

Pensé todavía como programaba en CLIPPER que podía meter el valor del numero de factura en una variable y hacer una subrutina o función que me trajera las líneas que necesitaba.

Pero si no hay otra solución, pues a chambear con un nuevo campo UDF, :sweat_smile::sweat_smile::sweat_smile:

Gracias nuevamente por el tiempo que tomaste en ayudarme.

Saludos y buen fin de semana:handshake:

Puedes utilizar un campo ya creado, por ejemplo el campo de referencia de la OINV, le colocas la palabra PROMOCION

Con un query obtienes las facturas que tienen promoción y por medio de DTW haces el update al campo.

Para futuras facturas con promoción creas una búsqueda formateada que se ejecute en automático(así no se le pasará al que factura), al encontrar el articulo PROMOCIÓN alimente el campo referencia con la palabra PROMOCIÓN, de esta manera el reporte funcionará.

Saludos.

1 me gusta