U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Reporting: Hoe en kalender genereren om er gegevens aan te koppelen?

0000002806     -      03-04-2018

Bij sommige rapporten wordt er soms gevraagd om een periode weer te geven in een lijst met hierin alle datums en indien nodig een totaal van verkopen.(bijvoorbeeld)

Het is daarom noodzakelijk om een lijst met datums te genereren, ook voor datums waarop er geen verkopen geregistreerd werden.

In het bijgevoegd voorbeeld genereren we een temp tabel met hierin een record voor iedere dag voor de periode van 1 maand.

Vervolgens zoeken we alle betrokken documenten uit het commercieel beheer om ze te koppelen aan de verschillende datums in de Temp tabel.

Het resultaat geeft dan een volledige kalender met de bedragen naast bepaalde datums.

Dit voorbeeld kan worden gebruikt als basis voor rapporten waarin dagen, weken of perioden opgesomd worden.

 

SET dateformat dmy

declare @mois char(7), @annee char(4), @debutmois date, @finmois date, @cntNbrJours int = 1, @DateToAdd datetime

select @mois = left(@mois_1, 2),
@annee = right(@mois_1, 4),
@debutmois = CAST('01/' + @mois_1 as DATE),
@finmois = dateadd(day, -1, dateadd(month, 1, @debutmois)),
@cntNbrJours = day(@finmois) - day(@debutmois) + 1, @DateToAdd = CAST('01/' + @mois_1 as DATE)

/*----- Génération tableau des jours du mois ----*/
CREATE TABLE [dbo].[#TmpJours](
[COMPTEUR] [INT] NULL,
[DATE] [datetime] NULL,
[ANNEE] [INT] NULL,
[MOIS] [INT] NULL,
[JOUR] [INT] NULL
) ON [PRIMARY]

declare @cnt int = 1

while @cnt <= @cntNbrJours
begin
INSERT INTO #TmpJours (COMPTEUR, DATE, ANNEE, MOIS, JOUR)
VALUES (@cnt, @DateToAdd, YEAR(@DateToAdd), MONTH(@DateToAdd), DAY(@DateToAdd));
set @DateToAdd = DATEADD(day,1,@DateToAdd)
set @cnt = @cnt + 1
end

/*---- Récupérer les données de gestion commerciale ----*/ select pieds_v.date as date, round(sum(pieds_v.TOT_TTC_FB), 2) as tot_ttc_fb into dbo.#tmpVente
from pieds_v
where pieds_v.type = 1 and month(pieds_v.DATE) = @mois and year(pieds_v.DATE) = @annee
group by pieds_v.date

/*---- Regrouper les données ----*/
select dbo.#TmpJours.compteur, #TmpJours.date, dbo.#tmpVente.tot_ttc_fb
from dbo.#TmpJours
left join dbo.#tmpVente on dbo.#tmpVente.date = dbo.#TmpJours.date
order by dbo.#TmpJours.compteur

drop table #TmpJours
drop table dbo.#tmpVente