Reporte de reconciliaciones

Buen día a todos espero les estén pasando un excelente lunes!!
Estoy tratando de hacer un reporte de reconciliaciones pero mi problema es que necesito que solo me muestre los que no tengan nota de crédito (CN) y factura (IN) en la reconciliación por ejemplo esta reconciliación con numero de reconciliación 83313 :
image
no debería aparecer en mi reporte ya que tiene una nota de crédito(CN) y una factura(IN) sin embargo no logro dar con el resultado ya que en el query que hice me sigue saliendo ese numero de reconciliación:
image
porque intente hacerlo poniendo la condición de que me mostrara solo los que coincidieran con el numero de objeto que corresponde a la factura(IN) y a pagos recibidos(RC) quedando así la condición: T0.“SrcObjTyp” IN (‘13’, ‘24’) ya que las reconciliaciones que tengan esas dos si me deben de apareces solo las que tengan factura(IN) y nota de crédito (CN) no deben de aparecer. En pocas palabras quiero que me muestre las reconciliaciones que tengan factura(IN) y pago recibidos(RC) que corresponden al numero de objeto ‘13’ y ‘24’ y NO las que tengan nota de factura(IN) y credito(CN) que corresponden al numero de objeto ‘13’ y ‘14’ respectivamente. Espero haberme dado a entender y ojala alguien pudiera ayudarme igual les dejo el query que tengo. Muchas gracias!

SELECT DISTINCT
--T22."Reconciliacion",
T22."Numero reconciliacion",
T22."Fecha reconciliacion", 
T22."Codigo de cliente",
T22."Nombre cliente", 
T22."Agente ventas",
T22."Folio factura",
T22."Fecha factura",
T22."Importe factura",
T22."Articulos" 
FROM
(
SELECT  
T0."ReconNum" AS "Numero reconciliacion",
T1."ReconDate" as "Fecha reconciliacion", 
T0."ShortName" as "Codigo de cliente",
t7."CardName" as "Nombre cliente", 
t5."SlpName" as "Agente ventas",
T2."BaseRef" as "Folio factura",
T4."DocDate" AS "Fecha factura",
T0."ReconSumFC" as "Importe factura",
t6."ItemCode" as "Articulos", 

t5."SlpName",
CASE
WHEN T4."DocType" = 'I' then (t6."Price" * t6."Quantity") * 1.16
ELSE (T6."LineTotal" / T4."DocRate")* 1.16
END as "Precio Articulo + IVA",
CASE
WHEN T4."DocType" = 'I' then (t6."Price" * t6."Quantity")
ELSE (T6."LineTotal" / T4."DocRate")
END as "Precio Articulo",	

CASE
  WHEN T6."ItemCode" = 'A9999997' THEN 6
  ELSE sum((T6."StockPrice" / T4."DocRate") * T6."Quantity")	
  END AS "Costo Articulos",
  CASE
WHEN T6."ItemCode" = 'A9999997' THEN 0
ELSE SUM(T6."Price" * T6."Quantity") -   sum((T6."StockPrice" / T4."DocRate") * T6."Quantity")
END AS "Utilidad"

FROM ITR1 T0

LEFT JOIN OITR T1 ON T0."ReconNum" = T1."ReconNum" AND T0."SrcObjTyp" IN ('13', '24')
LEFT JOIN OJDT T2 ON T0."TransId" = T2."TransId"
LEFT JOIN ORCT T3 ON T2."BaseRef" = T3."DocNum"
LEFT JOIN OINV T4 ON T0."SrcObjAbs" = T4."DocEntry"
LEFT JOIN INV1 T6 ON T4."DocEntry" = T6."DocEntry"
LEFT JOIN OSLP T5 ON T4."SlpCode" = t5."SlpCode"
LEFT JOIN OCRD T7 ON T0."ShortName" = T7."CardCode"

WHERE T1."ReconDate" BETWEEN '2019-06-01' AND '2019-06-30' and  T1."ReconType" = 0 and
t4."SlpCode" = '12' AND T1."Canceled" = 'N'
GROUP BY T0."ReconNum",
T1."ReconDate", 
T0."ShortName",
t7."CardName",
T4."DocNum",
T0."ReconSumFC",
t6."ItemCode",
T4."DocType",
t6."Price", T6."Quantity",T6."LineTotal",T4."DocRate",
T2."BaseRef", 
T0."SrcObjTyp", 
T4."DocDate",
t5."SlpName",
T6."ItemCode",T6."StockPrice",T0."SrcObjTyp", t0."LineSeq"
) T22
ORDER BY T22."Numero reconciliacion"

Hola.

Para que no te aparezcan las Credito (CN), deberias incluir a tu consulta la tabla ORIN, Object code = 14. Y si no deseas que te aparezcan las Facturas (IN) asociadas a las Credito (CN) deberias quitar todas la Facturas(IN) vinculadas por medio del campo trgetentry (tabla INV1) hacia el campo docentry de la tabla ORIN.

Espero te sirva la ayuda.
Saludos.

1 me gusta

Hola que tal! Muchas gracias por responder.
Pero el problema es cuando las relaciones se hacen de forma manual y por lo tanto no se genera el trgetentry y por eso es que me siguen apareciendo facturas que no necesito. Sabes si hay alguna otra manera de solucionarlo cuando las reconciliaciones son manuales? De cualquier manera muchas gracias por responder. Buen dia. :slight_smile:

Vaya dilema, mira para hacer lo que quieres necesitar armar una consulta o funcion que primero recoja todos los tipos de objetos de tu reconciliacion, y luego aplicar la condicion de que contengan los objetos, “13,14”.
La función la puedes hacer usando un cursor, o puedes usar la funcion COALESCE, de esta manera:

CREATE FUNCTION [dbo].[ObjetosRecon]
(
    @ReconNum int
)
RETURNS varchar(max)
AS
BEGIN
    declare @output varchar(max)
    select @output = COALESCE(@output + ', ', '') + SrcObjTyp
    from UserAliases
    where ReconNum = @ReconNum

    return @output
END

una vez tienes la función, ya la puedes usar en tu query para comparar si la cadena tiene los valores ‘13’ y ‘14’, con funciones de cadena (Charindex, o Like).

Este tema se cerró automáticamente 91 días después de la última publicación. No se permiten nuevas respuestas.