ALTER PROCEDURE dbo.hp_PripravaSkupRegDPH @IdObdobiDPH INT AS SET NOCOUNT ON DECLARE @Id INT, @ICO NVARCHAR(20), @IdObdobi INT, @Sbornik NVARCHAR(3), @CisloDokladu INT, @PZ NVARCHAR(20) DECLARE @ErrStr NVARCHAR(2047) DECLARE @CisloOrg INT, @DICOrg NVARCHAR(15), @DanovyUcet NVARCHAR(30) SELECT @ICO=ICO FROM TabCisOrg WHERE CisloOrg=0 -- musim znat ICO vlastni organizace IF @ICO IS NULL OR @ICO='' BEGIN SET @ErrStr = dbo.hf_FormatError(62310, '') RAISERROR(@ErrStr, 16, 1) --AISERROR 62310 ''Nelze urcit ICO vlastni organizace'''#13+ RETURN END BEGIN TRAN -- vymazani stavajicich pro me ICO a obdobi DPH DELETE FROM TabSkupRegDPH WHERE ICO=@ICO AND IdObdobiDPHSkup=@IdObdobiDPH -- zakladni naplneni INSERT TabSkupRegDPH (Vlastni, ICO, UzivCislo, IdObdobi, IdObdobiSkup, Sbornik, CisloDokladu, CisloRadku, IdObdobiDPH, IdObdobiDPHSkup, ISOKodZeme, MenaDPH, NahradniDPH, UcetDPHSkup, CisloUcet, UcetDPH, DatumDUZP, DatumDoruceni, SazbaDane, ZakladDane, CastkaDane, Castka, CastkaMena, Strana, DatumPripad, ParovaciZnak, Mena, Popis, DICOrg, CisloOrg) SELECT 1, @ICO, convert(NVARCHAR(10),TabDenik.IdObdobi) + N'/' + TabDenik.Sbornik + N'/' + convert(NVARCHAR(10),TabDenik.CisloDokladu) + N'/' + convert(NVARCHAR(10),TabDenik.CisloRadku), TabDenik.IdObdobi, TabDenik.IdObdobi, TabDenik.Sbornik, TabDenik.CisloDokladu, TabDenik.CisloRadku, TabDenik.IdObdobiDPH, TabDenik.IdObdobiDPH, TabObdobiDPH.ISOKodZeme, TabObdobiDPH.Mena, TabObdobiDPH.NahradniDPH, TabDenik.DanovyUcet, TabDenik.CisloUcet, TabDenik.UcetDPH, TabDenik.DatumDUZP, TabDenik.DatumDoruceni, TabDenik.SazbaDane, ISNULL(TabDenik.ZakladDane,0.0), ISNULL(TabDenik.CastkaDane,0.0), TabDenik.Castka, TabDenik.CastkaMena, TabDenik.Strana, TabDenik.DatumPripad, TabDenik.ParovaciZnak, TabDenik.Mena, TabDenik.Popis, TabDenik.DICOrg, TabDenik.CisloOrg FROM TabDenik JOIN TabObdobiDPH ON TabObdobiDPH.Id=TabDenik.IdObdobiDPH WHERE TabDenik.IdObdobiDPH=@IdObdobiDPH AND TabDenik.Zaknihovano>0 AND TabDenik.DatumDUZP IS NOT NULL -- doplneni CisOrg DECLARE c CURSOR FAST_FORWARD LOCAL FOR SELECT IdObdobi,Sbornik,CisloDokladu FROM TabSkupRegDPH WHERE ICO=@ICO AND IdObdobiDPHSkup=@IdObdobiDPH AND CisloOrg IS NULL GROUP BY IdObdobi,Sbornik,CisloDokladu,DanovyUcet OPEN c WHILE 1=1 BEGIN FETCH NEXT FROM c INTO @IdObdobi,@Sbornik,@CisloDokladu IF @@fetch_status<>0 BREAK SET @CisloOrg=NULL SELECT TOP 2 @CisloOrg=CisloOrg FROM TabDenik WHERE IdObdobi=@IdObdobi AND Sbornik=@Sbornik AND CisloDokladu=@CisloDokladu AND CisloOrg IS NOT NULL GROUP BY CisloOrg IF @@ROWCOUNT = 1 BEGIN IF @CisloOrg IS NOT NULL UPDATE TabSkupRegDPH SET CisloOrg=@CisloOrg WHERE IdObdobi=@IdObdobi AND Sbornik=@Sbornik AND CisloDokladu=@CisloDokladu AND CisloOrg IS NULL END END CLOSE c DEALLOCATE c -- doplneni DIC DECLARE c CURSOR FAST_FORWARD LOCAL FOR SELECT IdObdobi,Sbornik,CisloDokladu,DanovyUcet FROM TabSkupRegDPH WHERE ICO=@ICO AND IdObdobiDPHSkup=@IdObdobiDPH AND (DICOrg IS NULL OR DICOrg='') GROUP BY IdObdobi,Sbornik,CisloDokladu,DanovyUcet OPEN c WHILE 1=1 BEGIN FETCH NEXT FROM c INTO @IdObdobi,@Sbornik,@CisloDokladu,@DanovyUcet IF @@fetch_status<>0 BREAK SET @DICOrg=NULL SELECT TOP 2 @DICOrg=DICOrg FROM TabDenik WHERE IdObdobi=@IdObdobi AND Sbornik=@Sbornik AND CisloDokladu=@CisloDokladu AND DICOrg IS NOT NULL AND DICOrg<>'' GROUP BY DICOrg IF @@ROWCOUNT = 1 BEGIN IF @DICOrg IS NOT NULL UPDATE TabSkupRegDPH SET DICOrg=@DICOrg WHERE IdObdobi=@IdObdobi AND Sbornik=@Sbornik AND CisloDokladu=@CisloDokladu AND DanovyUcet=@DanovyUcet AND (DICOrg IS NULL OR DICOrg='') END END CLOSE c DEALLOCATE c -- zeme z DICOrg UPDATE TabSkupRegDPH SET ISOKodZemeDIC=SUBSTRING(DICOrg,1,2) FROM TabSkupRegDPH JOIN TabCisUctDef ON TabCisUctDef.CisloUcet=TabSkupRegDPH.DanovyUcet AND TabCisUctDef.IdObdobi=TabSkupRegDPH.IdObdobi WHERE TabSkupRegDPH.ICO=@ICO AND TabSkupRegDPH.IdObdobiDPHSkup=@IdObdobiDPH AND TabCisUctDef.ClenitPodleZeme=1 -- vyjimka pro Recko UPDATE TabSkupRegDPH SET ISOKodZemeDIC=N'GR' WHERE ICO=@ICO AND IdObdobiDPHSkup=@IdObdobiDPH AND ISOKodZemeDIC=N'EL' -- zeme z organizace UPDATE TabSkupRegDPH SET ISOKodZemeDIC=TabCisOrg.IdZeme FROM TabSkupRegDPH JOIN TabCisUctDef ON TabCisUctDef.CisloUcet=TabSkupRegDPH.DanovyUcet AND TabCisUctDef.IdObdobi=TabSkupRegDPH.IdObdobi JOIN TabCisOrg ON TabCisOrg.CisloOrg=TabSkupRegDPH.CisloOrg WHERE TabSkupRegDPH.ICO=@ICO AND TabSkupRegDPH.IdObdobiDPHSkup=@IdObdobiDPH AND TabCisUctDef.ClenitPodleZeme=1 AND (TabSkupRegDPH.ISOKodZemeDIC IS NULL OR TabSkupRegDPH.ISOKodZemeDIC='') -- doplneni parovaciho znaku DECLARE Kur CURSOR LOCAL FAST_FORWARD FOR SELECT Id, IdObdobi, Sbornik, CisloDokladu FROM TabSkupRegDPH WHERE ICO=@ICO AND IdObdobiDPHSkup=@IdObdobiDPH AND ParovaciZnak='' OPEN Kur WHILE 1=1 BEGIN FETCH NEXT FROM Kur INTO @Id, @IdObdobi, @Sbornik, @CisloDokladu IF @@FETCH_STATUS <> 0 BREAK SET @PZ='' -- PZ je nekde vubec vyplneny IF NOT EXISTS(SELECT * FROM TabDenik WHERE IdObdobi=@IdObdobi AND Sbornik=@Sbornik AND CisloDokladu=@CisloDokladu AND ParovaciZnak>'') CONTINUE -- PZ je jednoznacny v ramci dokladu -> vem ho IF (SELECT COUNT(*) FROM (SELECT ParovaciZnak FROM TabDenik WHERE IdObdobi=@IdObdobi AND Sbornik=@Sbornik AND CisloDokladu=@CisloDokladu AND ParovaciZnak<>'' GROUP BY TabDenik.ParovaciZnak) T)=1 BEGIN SELECT TOP 1 @PZ=ParovaciZnak FROM TabDenik WHERE IdObdobi=@IdObdobi AND Sbornik=@Sbornik AND CisloDokladu=@CisloDokladu AND ParovaciZnak>'' END ELSE BEGIN -- je vice PZ -- Combo v uctech - prioritni uctovani banky IF (SELECT COUNT(*) FROM (SELECT ParovaciZnak FROM TabDenik JOIN TabCisUctDef ON TabCisUctDef.IdObdobi=TabDenik.IdObdobi AND TabCisUctDef.CisloUcet=TabDenik.CisloUcet WHERE TabDenik.IdObdobi=@IdObdobi AND TabDenik.Sbornik=@Sbornik AND TabDenik.CisloDokladu=@CisloDokladu AND TabDenik.ParovaciZnak<>'' AND TabCisUctDef.UctovaniBanka=1 GROUP BY TabDenik.ParovaciZnak) T)=1 BEGIN SELECT TOP 1 @PZ=ParovaciZnak FROM TabDenik JOIN TabCisUctDef ON TabCisUctDef.IdObdobi=TabDenik.IdObdobi AND TabCisUctDef.CisloUcet=TabDenik.CisloUcet WHERE TabDenik.IdObdobi=@IdObdobi AND TabDenik.Sbornik=@Sbornik AND TabDenik.CisloDokladu=@CisloDokladu AND TabDenik.ParovaciZnak<>'' AND TabCisUctDef.UctovaniBanka=1 END ELSE -- vazba na saldo IF (SELECT COUNT(*) FROM (SELECT ParovaciZnak FROM TabDenik JOIN TabVDenikSaldo ON TabVDenikSaldo.IdDenik=TabDenik.Id WHERE TabDenik.IdObdobi=@IdObdobi AND TabDenik.Sbornik=@Sbornik AND TabDenik.CisloDokladu=@CisloDokladu AND TabDenik.ParovaciZnak<>'' GROUP BY TabDenik.ParovaciZnak) T)=1 BEGIN SELECT TOP 1 @PZ=ParovaciZnak FROM TabDenik JOIN TabVDenikSaldo ON TabVDenikSaldo.IdDenik=TabDenik.Id WHERE TabDenik.IdObdobi=@IdObdobi AND TabDenik.Sbornik=@Sbornik AND TabDenik.CisloDokladu=@CisloDokladu AND TabDenik.ParovaciZnak<>'' END END IF @PZ>'' UPDATE TabSkupRegDPH SET ParovaciZnak=@PZ WHERE Id=@Id END CLOSE Kur DEALLOCATE Kur COMMIT