163 lines
5.3 KiB
Transact-SQL
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
|
|
|