G
Gal
Hi - anyone out there that can help a tormented soul??!!
I am in the process of doing my first MDB to ADP conversion, and have
come across my first sub-report which I am trying to pass parameters to
via a SP.
Having read through the groups I understand the conflict between using
an SP as a record source and the link parent/child settings on the
form, and found an entry under "solution! subreport based on
parameterized sp" which sounded promising, where the one SP contains
both real queries and uses a "type" parameter to make the parent
query run the child query effectively.
Having tried to implement it, I get no obvious errors, but neither do I
get any data in the subreport.
One thing I am struggling with is how to test my TSQL (in Query
Analyser say) to call the "child".
Alternatively, I am open to any suggestions for alternatives.
Just in case it helps, here is my TSQL (although I have been chopping
it up a bit to try to make it work - so apologies in advance).
ALTER procedure dbo.usp_ContractsChargeOLDetByDate @QType int = 0,
@ContractID bigint ,
@RptContact varchar(100),
@StDate datetime, @EndDate datetime,
@DrCrSet smallint,
@ConUID bigint
AS
--Based on usp_ContractsChargeOLDet
--Used for rptContractChargeDateOLDet
if @QType =0 --Main Form Data
begin
SELECT 'From ' + convert(Char(10),@StDate, 103) + ' to ' +
convert(Char(10),@EndDate, 103) AS RptTitle,
I.ItemUID, I.ItemCode, ConUID,
CASE WHEN CTo.ParentContractUID is null
THEN CTo.Contract
ELSE CPar.Contract END AS ParentContract,
CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END AS RepContact,
CTo.Description as ConToDesc,
TypeDesc + CASE WHEN ItemDesc IS NULL THEN '' ELSE ' ' + ItemDesc
END AS FullDesc,
sum(CASE DrCr WHEN -1 THEN [Qty]*CCOL.[itemValue]*[DrCr] ELSE 0 END)
AS DrChg,
sum(CASE DrCr WHEN 1 THEN [Qty]*CCOL.[itemValue]*[DrCr] ELSE 0 END)
AS CrChg,
10 AS QType ,-1 AS DrCrSet
FROM tblContractChgWOFFScrap CCOL
LEFT JOIN tblItems I
ON I.ItemUID = CCOL.ItemCode
LEFT JOIN tblTypes T
ON T.TypeUID = I.ItemType
JOIN tblContracts CFrom
ON CFrom.ContractUID = CCOL.ConFromUID
JOIN tblContracts CTo
ON CTo.ContractUID = CCOL.ConUID
right JOIN tblContracts CPar
ON CPar.ContractUID = CTo.ParentContractUID
WHERE CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END >= (CASE @RptContact WHEN '' THEN
'0' ELSE @RptContact END) AND
CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END <= (CASE @RptContact WHEN '' THEN
'Z' ELSE @RptContact END) AND
CCOL.ConUID >= (CASE WHEN @ContractID Is null THEN 0 ELSE
@ContractID END) AND
CCOL.ConUID <= (CASE WHEN @ContractID Is null THEN 9999999 ELSE
@ContractID END)
AND ChgDate>= @StDate AND ChgDate<= @EndDate
GROUP BY I.ItemUID, I.ItemCode, ConUID,
CASE WHEN CTo.ParentContractUID is null
THEN CTo.Contract
ELSE CPar.Contract END ,
CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END ,
CTo.Description,
TypeDesc + CASE WHEN ItemDesc IS NULL THEN '' ELSE ' ' + ItemDesc
END
ORDER BY CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END
end
if @QType=10
begin
SELECT CCOL.ItemCode, ConUID,
ChgDate, Qty ,
[Qty]*CCOL.[itemValue]*[DrCr] as TotChg
FROM tblContractChgWOFFScrap CCOL
LEFT JOIN tblItems I
ON I.ItemUID = CCOL.ItemCode
LEFT JOIN tblTypes T
ON T.TypeUID = I.ItemType
JOIN tblContracts CFrom
ON CFrom.ContractUID = CCOL.ConFromUID
JOIN tblContracts CTo
ON CTo.ContractUID = CCOL.ConUID
right JOIN tblContracts CPar
ON CPar.ContractUID = CTo.ParentContractUID
WHERE CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END >= (CASE @RptContact WHEN '' THEN
'0' ELSE @RptContact END) AND
CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END <= (CASE @RptContact WHEN '' THEN
'Z' ELSE @RptContact END) AND
CCOL.ConUID = @ConUID
AND ChgDate>= @StDate AND ChgDate<= @EndDate
AND DrCr = @DrCrSet
end
I am in the process of doing my first MDB to ADP conversion, and have
come across my first sub-report which I am trying to pass parameters to
via a SP.
Having read through the groups I understand the conflict between using
an SP as a record source and the link parent/child settings on the
form, and found an entry under "solution! subreport based on
parameterized sp" which sounded promising, where the one SP contains
both real queries and uses a "type" parameter to make the parent
query run the child query effectively.
Having tried to implement it, I get no obvious errors, but neither do I
get any data in the subreport.
One thing I am struggling with is how to test my TSQL (in Query
Analyser say) to call the "child".
Alternatively, I am open to any suggestions for alternatives.
Just in case it helps, here is my TSQL (although I have been chopping
it up a bit to try to make it work - so apologies in advance).
ALTER procedure dbo.usp_ContractsChargeOLDetByDate @QType int = 0,
@ContractID bigint ,
@RptContact varchar(100),
@StDate datetime, @EndDate datetime,
@DrCrSet smallint,
@ConUID bigint
AS
--Based on usp_ContractsChargeOLDet
--Used for rptContractChargeDateOLDet
if @QType =0 --Main Form Data
begin
SELECT 'From ' + convert(Char(10),@StDate, 103) + ' to ' +
convert(Char(10),@EndDate, 103) AS RptTitle,
I.ItemUID, I.ItemCode, ConUID,
CASE WHEN CTo.ParentContractUID is null
THEN CTo.Contract
ELSE CPar.Contract END AS ParentContract,
CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END AS RepContact,
CTo.Description as ConToDesc,
TypeDesc + CASE WHEN ItemDesc IS NULL THEN '' ELSE ' ' + ItemDesc
END AS FullDesc,
sum(CASE DrCr WHEN -1 THEN [Qty]*CCOL.[itemValue]*[DrCr] ELSE 0 END)
AS DrChg,
sum(CASE DrCr WHEN 1 THEN [Qty]*CCOL.[itemValue]*[DrCr] ELSE 0 END)
AS CrChg,
10 AS QType ,-1 AS DrCrSet
FROM tblContractChgWOFFScrap CCOL
LEFT JOIN tblItems I
ON I.ItemUID = CCOL.ItemCode
LEFT JOIN tblTypes T
ON T.TypeUID = I.ItemType
JOIN tblContracts CFrom
ON CFrom.ContractUID = CCOL.ConFromUID
JOIN tblContracts CTo
ON CTo.ContractUID = CCOL.ConUID
right JOIN tblContracts CPar
ON CPar.ContractUID = CTo.ParentContractUID
WHERE CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END >= (CASE @RptContact WHEN '' THEN
'0' ELSE @RptContact END) AND
CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END <= (CASE @RptContact WHEN '' THEN
'Z' ELSE @RptContact END) AND
CCOL.ConUID >= (CASE WHEN @ContractID Is null THEN 0 ELSE
@ContractID END) AND
CCOL.ConUID <= (CASE WHEN @ContractID Is null THEN 9999999 ELSE
@ContractID END)
AND ChgDate>= @StDate AND ChgDate<= @EndDate
GROUP BY I.ItemUID, I.ItemCode, ConUID,
CASE WHEN CTo.ParentContractUID is null
THEN CTo.Contract
ELSE CPar.Contract END ,
CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END ,
CTo.Description,
TypeDesc + CASE WHEN ItemDesc IS NULL THEN '' ELSE ' ' + ItemDesc
END
ORDER BY CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END
end
if @QType=10
begin
SELECT CCOL.ItemCode, ConUID,
ChgDate, Qty ,
[Qty]*CCOL.[itemValue]*[DrCr] as TotChg
FROM tblContractChgWOFFScrap CCOL
LEFT JOIN tblItems I
ON I.ItemUID = CCOL.ItemCode
LEFT JOIN tblTypes T
ON T.TypeUID = I.ItemType
JOIN tblContracts CFrom
ON CFrom.ContractUID = CCOL.ConFromUID
JOIN tblContracts CTo
ON CTo.ContractUID = CCOL.ConUID
right JOIN tblContracts CPar
ON CPar.ContractUID = CTo.ParentContractUID
WHERE CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END >= (CASE @RptContact WHEN '' THEN
'0' ELSE @RptContact END) AND
CASE WHEN CTo.ParentContractUID is null
THEN CTo.[Report Contact]
ELSE CPar.[Report Contact] END <= (CASE @RptContact WHEN '' THEN
'Z' ELSE @RptContact END) AND
CCOL.ConUID = @ConUID
AND ChgDate>= @StDate AND ChgDate<= @EndDate
AND DrCr = @DrCrSet
end