Ayuda SAP

Consulta de Facturas, Notas crédito por item

sql
Etiquetas: #<Tag:0x00007f22469f0050>

#1

Buen dia, estoy tratando de realizar una consulta donde genere las Facturas, Notas Credito y Facturas Canceladas por item, pero ya casi lo tengo pero tengo un problemita en las notas credito ya que en algunas no me muestra el valor de la nota, este es el codigo que tengo.

SELECT 'Factura de Venta' as Tipo, T2.[Memo], T2.[SlpName], T0.[DocNum], T0.[DocDate], T1.[ItemCode], T1.[Dscription], 
((T1.[Price]-(T1.[Price]*(T0.[DiscPrcnt]/100))) * T1.[Quantity]) as 'Valor neto', 
T1.[Quantity], 
T0.[CardCode], T0.[CardName], T0.[ShipToCode], T3.[Address2S], T3.[StreetS], T3.[CityS], T3.[CountyS],

(((T1.[Price]-(T1.[Price]*(T0.[DiscPrcnt]/100))) * T1.[Quantity])) - ((T1.[GrossBuyPr] *T1.[Quantity])) as 'Margen',

(T1.[GrossBuyPr] *T1.[Quantity]) as 'Costo de Ventas' 

FROM [dbo].[OINV] T0  
INNER JOIN [dbo].[INV1] T1 ON T0.[DocEntry] = T1.[DocEntry] 
INNER JOIN [dbo].[OSLP] T2 ON T0.[SlpCode] = T2.[SlpCode] 
INNER JOIN [dbo].[INV12] T3 ON T0.[DocEntry] = T3.[DocEntry] 

WHERE T0.[DocDate]  between [%0] and [%1] and t0.CANCELED <> 'C'

GROUP BY T2.[Memo], T2.[SlpName], T0.[DocNum], T0.[DocDate], T1.[ItemCode], T1.[Dscription], T1.[Price], T1.[Quantity], 
T0.[DiscPrcnt], T0.[CardCode], T0.[CardName], T0.[ShipToCode],T3.[Address2S], T3.[StreetS], T1.[LineTotal], T1.[GrossBuyPr],
T3.[CityS], T3.[CountyS] 


Union All


SELECT 'Notas Credito' as Tipo, T2.[Memo], T2.[SlpName], T0.[DocNum], T0.[DocDate], T1.[ItemCode], T1.[Dscription], 
((((T1.[Price]-(T1.[Price]*(T0.[DiscPrcnt]/100))) * T1.[Quantity])) * (-1)) as 'Valor neto', 
((T1.[Quantity]) * (-1)) as [Quantity], 
T0.[CardCode], T0.[CardName], T0.[ShipToCode], T3.[Address2S], T3.[StreetS],T3.[CityS], T3.[CountyS],

(((((T1.[Price]-(T1.[Price]*(T0.[DiscPrcnt]/100))) * T1.[Quantity])) - ((T1.[GrossBuyPr] *T1.[Quantity]))) * (-1)) as 'Margen',

(((T1.[GrossBuyPr] *T1.[Quantity])) * (-1)) as 'Costo de Ventas' 

FROM [dbo].[ORIN] T0  
INNER JOIN [dbo].[RIN1] T1 ON T0.[DocEntry] = T1.[DocEntry] 
INNER JOIN [dbo].[OSLP] T2 ON T0.[SlpCode] = T2.[SlpCode] 
INNER JOIN [dbo].[INV12] T3 ON T0.[DocEntry] = T3.[DocEntry] 

WHERE T0.[DocDate]  between [%0] and [%1] and t0.CANCELED = 'N'


GROUP BY T2.[Memo], T2.[SlpName], T0.[DocNum], T0.[DocDate], T1.[ItemCode], T1.[Dscription], T1.[Price], T1.[Quantity], 
T0.[DiscPrcnt], T0.[CardCode], T0.[CardName], T0.[ShipToCode],T3.[Address2S], T3.[StreetS], T1.[LineTotal], T1.[GrossBuyPr], T3.[CityS], T3.[CountyS]


Union All



SELECT 'Facturas Canceladas' as Tipo, T2.[Memo], T2.[SlpName], T0.[DocNum], T0.[DocDate], T1.[ItemCode], T1.[Dscription], 

((((T1.[Price]-(T1.[Price]*(T0.[DiscPrcnt]/100))) * T1.[Quantity])) * (-1)) as 'Valor neto', 
((T1.[Quantity]) * (-1)) as [Quantity], 

T0.[CardCode], T0.[CardName], T0.[ShipToCode], T3.[Address2S], T3.[StreetS], T3.[CityS], T3.[CountyS],

(((((T1.[Price]-(T1.[Price]*(T0.[DiscPrcnt]/100))) * T1.[Quantity])) - ((T1.[GrossBuyPr] *T1.[Quantity]))) * (-1)) as 'Margen',

(((T1.[GrossBuyPr] *T1.[Quantity])) * (-1)) as 'Costo de Ventas' 

FROM [dbo].[OINV] T0  
INNER JOIN [dbo].[INV1] T1 ON T0.[DocEntry] = T1.[DocEntry] 
INNER JOIN [dbo].[OSLP] T2 ON T0.[SlpCode] = T2.[SlpCode] 
INNER JOIN [dbo].[INV12] T3 ON T0.[DocEntry] = T3.[DocEntry] 

WHERE T0.[DocDate]  between [%0] and [%1]  and t0.CANCELED = 'C'


GROUP BY T2.[Memo], T2.[SlpName], T0.[DocNum], T0.[DocDate], T1.[ItemCode], T1.[Dscription], T1.[Price], T1.[Quantity], 
T0.[DiscPrcnt], T0.[CardCode], T0.[CardName], T0.[ShipToCode],T3.[Address2S], T3.[StreetS], T1.[LineTotal], T1.[GrossBuyPr], T3.[CityS], T3.[CountyS]

Creo que el problema esta es que algunas facturas o notas credito los descuetos se aplican de diferente forma, unos van directamente al articulo y otros se aplica a toda la factura, si tienen alguna sugerencia se los agradesco.

Anexo dos notas credito, en una el descuento esta aplicado a cada referencia por que en ocaciones el descuento es diferente para cada referencia. pero el otro se aplica a toda la factura lo que quiere decir que se aplicaria el descuento para cada referencia.

Lo que necesito es generar el reporte de facturas y notas credito por referencia x factura

GRACIAS


#2

Me imagino que el problema es el descuento y el calculo de la division. Pues se me ocurre que uses la funciones CASE, ISNULL y NULLIF

Saludos,


#3

Willy_Caldero, gracias por el aporte pero me prodrias dar una ayudita es que estoy empenzando es mundo de las Consultas SQL o si tienes una pagina que me ayude de tutoria se lo agradezco.


#4

Podrias usar el ISNULL de esta manera:
T1.[Price] - ISNULL((T1.[Price]*(T0.[DiscPrcnt]/100),0)

Saludos,


#5

una ayudita seria que pasarás por la sección de presentaciones.
:thinking:


#6

Buen Dia Willy_Calderon gracias por tu aporte he estado practicando pero no he podido tener resultados, es que estoy iniciando en este mundo de las Consultas SQL de SAP,

realice estas nuevas lineas de codigo para las notas credito.

Con esta linea para la nota cretido numero 83325 me sa bien Sum(((T1.[PriceBefDi])-(T1.[PriceBefDi]*(T1.[DiscPrcnt]/100)))T1.[Quantity]) as ‘x’,
Pero en la nota credito 600545 el valor me da con esta otra linea Sum(((T1.[PriceBefDi])-(T1.[PriceBefDi]
(T0.[DiscPrcnt]/100)))*T1.[Quantity]) as ‘y’

Agradesco en lo que me pueda ayudar

Este el codigo le quite algunos campos al anterior.

SELECT T1.[ItemCode], T1.[Dscription], T0.[DocNum], T1.[Quantity] as ‘Unidades’,
T1.[PriceBefDi] as ‘Precio und’, T1.[DiscPrcnt] as ‘Dcto art’, T0.[DiscPrcnt] as ‘Dcto a fact’,

Sum(((T1.[PriceBefDi])-(T1.[PriceBefDi]*(T1.[DiscPrcnt]/100)))T1.[Quantity]) as ‘xxxxx’,
Sum(((T1.[PriceBefDi])-(T1.[PriceBefDi]
(T0.[DiscPrcnt]/100)))*T1.[Quantity]) as ‘yyyyy’

FROM ORIN T0
INNER JOIN RIN1 T1 ON T0.[DocEntry] = T1.[DocEntry]

WHERE T0.[DocNum] = 600545

–// 83325 600545

GROUP BY T1.[ItemCode], T1.[Dscription], T0.[DocNum], T1.[Price],
T1.[PriceAfVAT], T1.[PriceBefDi], T1.[DiscPrcnt], T0.[DiscPrcnt], T1.[Quantity]


#7

ok, entiendo que quieres sacar en una sola columna, en ese caso necesitar usar la sentencia CASE. de esta manera:

SELECT T1.[ItemCode], T1.[Dscription], T0.[DocNum], T1.[Quantity] as ‘Unidades’,
T1.[PriceBefDi] as ‘Precio und’, T1.[DiscPrcnt] as ‘Dcto art’, T0.[DiscPrcnt] as ‘Dcto a fact’,
CASE
  When T0.[DiscPrcnt]>0 THEN *Sum(((T1.[PriceBefDi])-(T1.[PriceBefDi]* (T0.[DiscPrcnt]/100)))*T1.[Quantity]) 
  ELSE Sum(((T1.[PriceBefDi])-(T1.[PriceBefDi]*(T1.[DiscPrcnt]/100))) *T1.[Quantity])*
END as 'xxyy'

#8

Willy_Caldero Gracias me sirvio mucho la ayuda, el codigo me quedo asi:

SELECT ‘Factura de Venta’ as Tipo, T2.[Memo] as ‘Id_Zona’, T2.[SlpName] as ‘Descripción Zona’, T0.[DocNum], T0.[DocDate] as ‘Fecha Documento’, T1.[ItemCode] as ‘Codigo Articulo’, T1.[Dscription] as ‘Descripción Articulo’,

CASE
When T0.[DiscPrcnt]>=1
THEN Sum(((T1.[PriceBefDi])-(T1.[PriceBefDi]* (T0.[DiscPrcnt]/100)))T1.[Quantity])
ELSE Sum(((T1.[PriceBefDi])-(T1.[PriceBefDi]
(T1.[DiscPrcnt]/100))) *T1.[Quantity])
END as ‘Valor Neto’,

T1.[Quantity] as ‘Venta Unds’

FROM [dbo].[OINV] T0
INNER JOIN [dbo].[INV1] T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN [dbo].[OSLP] T2 ON T0.[SlpCode] = T2.[SlpCode]
INNER JOIN [dbo].[INV12] T3 ON T0.[DocEntry] = T3.[DocEntry]
INNER JOIN [dbo].[OCRD] T4 ON T0.[CardCode] = T4.[CardCode]

WHERE T0.[DocNum]=60012516

GROUP BY T2.[Memo], T2.[SlpName], T0.[DocNum], T0.[DocDate], T1.[ItemCode], T1.[Dscription], T1.[Quantity], T0.[CardName], T0.[ShipToCode], T3.[Address2S], T3.[StreetS],
T3.[CityS], T3.[CountyS],T0.[DiscPrcnt], T1.[PriceBefDi], T1.[DiscPrcnt],
T4.[LicTradNum], T1.[GrossBuyPr]

Me genera esta vista:

Todo iba bien pero resulta que ahora una factura puede tener descuento por linea de producto y descuento aplicado a la factura como la siguiente imagen:

Como puedo lograr que el articulo 54608 “MORRAL ACUARELA” al final me de como resultado 71,125

soy nuevo es esto y cada vez voy aprendiendo y mas con la ayuda de estos foros son excelentes


#9

En ese caso, ya no te sirve el CASE, solo concatena los porcentajes.
Prueba con esta consulta:
Sum( (T1.[PriceBefDi] * (100-T1.[DiscPrcnt])/100 * (100-T0.[DiscPrcnt])/100 ) *T1.[Quantity])

Saludos,


#10

Buen dia, voy bien con ese ultimo codigo, pero cuando ejecuto esa misma rutina en las notas credito no me esta dando el valor de la notas,

Este es el codigo:

SELECT T0.[DocNum], T0.[DocDate] as ‘Fecha Documento’,
T1.[ItemCode] as ‘Codigo Articulo’, T1.[Dscription] as ‘Descripción Articulo’,

SUM(((T1.[PriceBefDi] * (100-T1.[DiscPrcnt])/100) * (100-T0.[DiscPrcnt])/100) * T1.[Quantity]) AS ‘Formula Uno’,

SUM(((T1.[PriceBefDi])* (100-T1.[DiscPrcnt])/100) * T1.[Quantity]) as ‘Formula 22’,
SUM(((T1.[PriceBefDi])* (100-T0.[DiscPrcnt])/100) * T1.[Quantity]) as ‘Formula 33’

FROM [dbo].[ORIN] T0
INNER JOIN [dbo].[RIN1] T1 ON T0.[DocEntry] = T1.[DocEntry]

WHERE T0.[DocNum] = 83975

–// Documento que NO da Igual 83975 84002 84205 84203 84206 83899
–// Documento que SI da Igual 600545 600539 83850

GROUP BY T0.[DocNum], T0.[DocDate], T1.[ItemCode], T1.[Dscription],
T1.[NoInvtryMv], T1.[Quantity], T1.[PriceBefDi], T1.[DiscPrcnt],
T0.[DiscPrcnt], T1.[TaxOnly], T1.[DiscPrcnt], T1.[TaxOnly]

El resultado me deberia dar en la formula Uno pero en algunas notas no me da el valor, el valor me da en la formula dos, como puedo corregir ese pequeño error

Gracias


#11

@Juan_Carlos_7, si bien es buena educación agradecer, por favor evita responder a cada persona diciendo solamente “gracias”, o mensajes de agradecimiento relacionados. En vez de crear una respuesta agradeciendo, lo debes hacer es darle al botón :heart: que tiene debajo el mensaje que te han enviado.

¿Se ha solucionado ya el tema?

Como tú eres el autor de todo el debate, es tu responsabilidad gestionar el tema, y brindar información sobre si lo has solucionado o no.

  • En caso de que hayas encontrado mensajes que te ayudaron con información, o aprendiste algo de las experiencias de otras personas, marca sus mensajes con el icono :heart: que tienes al pié de cada mensaje.

  • Y en caso de que algún mensaje haya solucionado el tema, haz clic en el icono :ballot_box_with_check: para que quede marcado como solucionado. En 7 días después de la última respuesta, el tema se cerrará dejando así un mensaje marcado como “solución”, y estarás colaborando con la organización de toda la comunidad.

Este mensaje es automático cuando los debates parecen resueltos, pero aún su autor no les ha dado el cierre correspondiente. Por favor, no respondas a este mensaje ya que desvirtuará el debate. Si tienes dudas, o comentarios al respecto, abre un tema en #feedback. :+1:

Por favor, no marques este mensaje como solución al debate.