Files
Rootvin-pluginHDCRTN/_sql/ep_Vyroba_GenSouhrnnyVydej.sql
2025-05-21 21:06:33 +02:00

163 lines
5.3 KiB
Transact-SQL

-- dbo.ep_Vyroba_GenSouhrnnyVydej
CREATE PROCEDURE dbo.ep_Vyroba_GenSouhrnnyVydej
@datum DATETIME=NULL,
@radaVydej NVARCHAR(3)=NULL,
@idSklad NVARCHAR(30)=NULL,
@errorMsg NVARCHAR(500)=N'' OUT
AS
-- HD Consulting Strakonice, T. Buzin
-- generuje souhrnnou vydejku (z vydejek prikazu, storna, rucnich korekci zaslanych z terminalu od PH) do jedne vydejky za dany den
-- data z technologickeho/pomocneho skladu, vydejka na sklad Pekarna 211 (lze ovlivnit parametrem idSklad)
-- pokud neni @datum zadane, bere se vcerejsek
SET NOCOUNT ON
DECLARE
@errMsg NVARCHAR(500),
@tranPred INT,
@debugXml XML,
@iTemp INT,
@bTemp BIT
DECLARE
@idObd INT,
@datumOd DATETIME,
@datumDo DATETIME,
@sklMatHlavni NVARCHAR(30)=N'311',
@sklPekarna NVARCHAR(30)=N'211',
@sklTechnolog NVARCHAR(30),
@idDZ INT,
@idPZ INT,
@idSS INT,
@idKZ INT,
@mnoz NUMERIC(19,6),
@cOrg INT=0,
@dzMena NUMERIC(19,6),
@dpz TINYINT=4, -- vydej v evid.cene
@vstC TINYINT,
@jednM INT,
@dzKurz NUMERIC(19,6),
@dzKurzE NUMERIC(19,6)
DECLARE @vydeje TABLE (SkupZbo NVARCHAR(3) NOT NULL, RegCis NVARCHAR(30) NOT NULL, IDKmenZbozi INT, IDPohybZbozi INT, IDPrikaz INT, Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0.0,
PRIMARY KEY (SkupZbo,RegCis) )
IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL
CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) )
SET @sklTechnolog=(SELECT TOP(1) Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%neúè%' AND CisloStr LIKE N'2%')
IF (@sklTechnolog IS NULL)
SET @sklTechnolog = N'261'
SET @sklPekarna=(SELECT TOP(1) Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna')
IF (@sklPekarna IS NULL)
SET @sklPekarna = N'211'
IF (@idSklad IS NULL)
SET @idSklad = @sklPekarna
IF (@datum IS NULL)
SET @datum = DATEADD(second, -1, dbo.hf_TruncDate(GETDATE())) -- vcerejsi pulnoc
SET @datumOd = dbo.hf_TruncDate(@datum) -- 00:00:00 daneho dne
SET @datumDo = DATEADD(second, -1, DATEADD(day, 1, @datumOd)) -- 23:59:59 daneho dne
EXEC @idObd = dbo.hp_GetObdobiDleDatumu @Datum=@datumOd, @JakyDatum=0, @HlasitUzavreno=0
IF (@radaVydej IS NULL)
SET @radaVydej = (SELECT TOP(1) RadaDokladu FROM dbo.TabDruhDokZbo WHERE DruhPohybuZbo=4 AND Nazev LIKE N'%eba PEK'
AND ID NOT IN (SELECT d.IDDruhDZ FROM dbo.TabDruhDokZboDef d WHERE d.IdObdobi=@idObd AND d.Blokovano=1) )
IF (@radaVydej IS NULL)
SET @radaVydej = (SELECT TOP(1) RadaDokladu FROM dbo.TabDruhDokZbo WHERE DruhPohybuZbo=4 AND Nazev LIKE N'%eba PEK')
IF (@radaVydej IS NULL)
SET @radaVydej = N'223' -- vyrobni spotreba PEK
INSERT @vydeje (SkupZbo, RegCis, IDKmenZbozi, IDPohybZbozi, IDPrikaz, Mnozstvi)
SELECT p.SkupZbo, p.RegCis, k.ID, p.ID, ISNULL(p.IDPrikaz, d.IDPrikaz), p.MnozstviDruhove
FROM dbo.TabPohybyZbozi p
INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad)
INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad)
INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi)
WHERE d.DatPorizeni BETWEEN @datumOd AND @datumDo
AND d.RadaDokladu IN (@radaVydej, N'229', N'292') -- standardne by melo byt: 223 vydej spotreba PEK, 229 Storno vydej spotreba, 292 Prijem vyrovnani do normy
AND d.DruhPohybuZbo IN (0,1,3,4)
AND s.IDSklad=@sklTechnolog
AND p.Mnozstvi>0
AND k.Sluzba=0
ORDER BY d.ParovaciZnak, p.Poradi
MERGE @vydeje AS T
USING dbo.TabKmenZbozi AS S ON (S.SkupZbo=T.SkupZbo AND S.RegCis=T.RegCis)
WHEN MATCHED AND T.IDKmenZbozi IS NULL THEN UPDATE SET T.IDKmenZbozi=S.ID;
SET @debugXml=(SELECT * FROM @vydeje FOR XML AUTO)
BEGIN TRY
SET @tranPred = @@TRANCOUNT
IF (@tranPred=0)
BEGIN TRAN
IF EXISTS (SELECT 1 FROM @vydeje WHERE Mnozstvi<>0 AND IDKmenZbozi IS NOT NULL)
BEGIN
EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZ OUT, @Sklad=@idSklad, @DruhPohybuZbo=@dpz, @RadaDokladu=@radaVydej, @CisloOrg=@cOrg, @DatumPorizeni=@datumDo
IF (@idDZ IS NOT NULL)
BEGIN
SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @vstC=VstupniCena, @jednM=JednotkaMeny FROM dbo.TabDokladyZbozi WHERE ID=@idDZ
DECLARE p CURSOR LOCAL FOR
SELECT DISTINCT(IDKmenZbozi), SUM(Mnozstvi)
FROM @vydeje
WHERE IDKmenZbozi IS NOT NULL
GROUP BY IDKmenZbozi
OPEN p
WHILE (1=1)
BEGIN
FETCH NEXT FROM p INTO @idKZ, @mnoz
IF (@@FETCH_STATUS<>0) BREAK
SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDSklad=@sklPekarna AND IDKmenZbozi=@idKZ)
IF (@idSS IS NULL)
EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@sklPekarna, @IDZboSklad=@idSS OUT
IF (@idSS IS NOT NULL)
BEGIN
EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZ OUT, @IDDoklad=@idDZ, @DruhPohybu=@dpz, @CisloOrg=@cOrg, @IDZboSklad=@idSS, @Mena=@dzMena,
@Kurz=@dzKurz, @KurzEuro=@dzKurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0,
@VstupniCena=@vstC, @PovolitDuplicitu=1, @PovolitBlokovane=1, @Mnozstvi=@mnoz
END -- @idSS IS NOT NULL
END
CLOSE p
DEALLOCATE p
END -- @idDZ IS NOT NULL
END -- mam neco v tabulici @vydeje
IF (@tranPred=0) AND (@@TRANCOUNT>0)
COMMIT TRAN
END TRY
BEGIN CATCH
IF (@tranPred=0) AND (@@TRANCOUNT>0)
ROLLBACK TRAN
SET @errMsg = ERROR_MESSAGE() + N' / ' + ERROR_PROCEDURE() + N' / r. ' + CONVERT(nvarchar, ERROR_LINE())
END CATCH