SQL upit

2

SQL upit

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Ovaj nije najveci, i nije uopste komplikovan, samo je velik.
Ima dosta, dosta manjih querija, a dosta komplikovanijih.

Ovaj query donosi polja za ekran na kome se edituju minimalan broj polja (od 324 moguca polja). Glavna tabela je "Contratados" (zaposleni).

SELECT A.CON_CdiContratado,A.CON_CdiFolha, H0.FOL_D1SFOLHA DssFolha02 ,I0.LOC_D1SLOCAL DssLocal02 ,J0.EMP_DssEmpresa DssEmpresa02 ,K0.GEM_D1SGRUPOEMPRESA DssGrupoEmpresa02 ,A.CON_CdiCargo,L0.CAR_D1sCargo,A.CON_CdiCentroCusto,M0.CCU_D1SCENTROCUSTO, M0.CCU_CosEstrutura,VAG9.VAG_CdiVaga ,ge.GEM_D1SGRUPOEMPRESA DssGrupoEmpresa, em.EMP_DssApelido EmpApelido, lo.LOC_D1SLOCAL DssLocal, fo.FOL_D1SFOLHA DssFolha, cc.CCU_D1SCENTROCUSTORES DssCentroCustoRes, ca.CAR_D1SCARGORES DssCargoRes , A.CON_VlnSalario,A.CON_CdiTabelaSalarial,T0.TBS_D1sTabelaSalarial,A.CON_CdiTabelaSalarialColuna,V0.DCT_D1sTabelaSalarialColunaD as DCT_D1sTabelaSalarialColunaDKL, W0.TSL_NuiTabelaSalarialLinha as TSL_NuiTabelaSalarialLinhaKL,W0.TSL_QtiPontosMinima as TSL_QtiPontosMinimaKL,W0.TSL_QtiPontosMaxima as TSL_QtiPontosMaximaKL, X0.TBS_D1sTabelaSalarial as TBS_D1sTabelaSalarialKL,U0.TSC_VlnSalario as TSC_VlnSalarioKL, A.CON_DtdAdmissao,A.CON_CdiVinculo,Y0.VIN_D1sVinculo,A.CON_CdiCategoria, Z0.CAT_D1sCategoria,A.CON_CdiSindicato,A1.SIN_D1sSindicato, A.CON_CdiSituacaoSindical,B1.SSS_D1sSituacaoSindical,A.CON_CdiTipoEmprego, C1.TEM_D1sTipoEmprego,A.CON_CdiPrazoContratado,D1.PZC_D1sPrazoContratado, A.CON_CdiTextoAdmissaoGrupo,E1.GDA_D1sTextoAdmissaoGrupo,A.CON_DssNome, A.CON_DsbFoto,A.CON_CdiSexo,F1.SEX_D1sSexo,A.CON_DtdNascimentoData,A.CON_CdiNacionalidade,G1.NAC_D1sNacionalidade,A.CON_CdiEstado_Naturalidade,H1.EST_DssEstado, A.CON_DssNascimentoLocal,A.CON_CdiGrauInstrucao,I1.GIN_D1sGrauInstrucao, A.CON_CdiEstadoCivil,J1.ETC_D1sEstadoCivil,A.CON_CdiCorPele,K1.CPL_D1sCorPele, A.CON_CdiTipoEndereco,L1.TEN_D1sTipoEndereco,A.CON_DssEnderecoBase, A.CON_DssEnderecoNumero,A.CON_DssBairro,A.CON_DssMunicipio, A.CON_CdiEstado_Resid,M1.EST_DssEstado,A.CON_NusCep,A.CON_NusCICNumero, A.CON_NusNumeroPis,A.CON_NusNumeroCarProf,A.CON_NusSerieCarProf, A.CON_CdiEstado_CarProf,N1.EST_DssEstado,A.CON_CdiMeioPagamento, O1.MPG_D1sMeioPagamento,A.CON_CdiAgenciaBanco_Credito,agb.AGB_DSSAGENCIABANCO as AgenciaCredito,bcn.BAN_DSSBANCO as BancoCredito,A.CON_CosPagamentoConta, A.CON_CosPagamentoContaDigito,A.CON_QtiDepSalFamilia,A.CON_QtiDepImpRenda, A.CON_CdiTipoJurosFGTS,R1.TJF_D1sTipoJurosFGTS,A.CON_CdiHorario, S1.HOR_D1sHorario,A.CON_CdiQuantidadeHoraMes,T1.HMV_QtnQuantidadeHoraMes FROM Contratados A INNER JOIN ConMedicina PSM9 ON (A.CON_CdiContratado = PSM9.PSM_CdiContratado) INNER JOIN ConSeguranca PSS9 ON (A.CON_CdiContratado = PSS9.PSS_CdiContratado) INNER JOIN ContratadosFlexiveis COF9 ON (A.CON_CdiContratado = COF9.COF_CdiContratado) LEFT JOIN Vagas VAG9 ON (A.CON_CdiContratado = VAG9.VAG_CdiContratado) INNER JOIN ContratadosExtras COE9 ON (A.CON_CdiContratado = COE9.COE_CdiContratado) INNER JOIN ConUltimosDados CUD9 ON (A.CON_CdiContratado = CUD9.CUD_CdiContratado) Left Join Folhas H0 on ( A.CON_CdiFolha = H0.FOL_CdiFolha )  Left Join Locais I0 on ( H0.FOL_CdiLocal = I0.LOC_CdiLocal )  Left Join Empresas J0 on ( I0.LOC_CdiEmpresa = J0.EMP_CdiEmpresa )  Left Join GruposEmpresas K0 on ( J0.EMP_CdiGrupoEmpresa = K0.GEM_CdiGrupoEmpresa ) INNER JOIN Cargos L0 on ( A.CON_CdiCargo = L0.CAR_CdiCargo )  Left Join CentrosCustos M0 on ( A.CON_CdiCentroCusto = M0.CCU_CdiCentroCusto ) Left Join Folhas fo on ( VAG_CdiFolha = fo.FOL_CdiFolha ) Left Join Locais lo on ( fo.FOL_CdiLocal = lo.LOC_CdiLocal ) Left Join Empresas em on ( lo.LOC_CdiEmpresa = em.EMP_CdiEmpresa ) Left Join GruposEmpresas ge on ( em.EMP_CdiGrupoEmpresa = ge.GEM_CdiGrupoEmpresa ) Left Join Cargos ca on ( VAG_CdiCargo = ca.CAR_CdiCargo ) Left Join CentrosCustos cc on ( VAG_CdiCentroCusto = cc.CCU_CdiCentroCusto ) INNER JOIN TabelasSalariais T0 on ( A.CON_CdiTabelaSalarial = T0.TBS_CdiTabelaSalarial )  inner join TabelasSalariaisColunas U0 on ( A.CON_CdiTabelaSalarialColuna = U0.TSC_CdiTabelaSalarialColuna )  inner join TabelasSalariaisColunasDs V0 on (U0.TSC_CdiTabelaSalarialColunaD = V0.DCT_CdiTabelaSalarialColunaD )  inner join TabelasSalariaisLinhas W0 on (U0.TSC_CdiTabelaSalarialLinha = W0.TSL_CdiTabelaSalarialLinha )  inner join TabelasSalariais X0 on (W0.TSL_CdiTabelaSalarial = X0.TBS_CdiTabelaSalarial ) INNER JOIN Vinculos Y0 on ( A.CON_CdiVinculo = Y0.VIN_CdiVinculo ) INNER JOIN Categorias Z0 on ( A.CON_CdiCategoria = Z0.CAT_CdiCategoria ) INNER JOIN Sindicatos A1 on ( A.CON_CdiSindicato = A1.SIN_CdiSindicato ) INNER JOIN SituacoesSindicais B1 on ( A.CON_CdiSituacaoSindical = B1.SSS_CdiSituacaoSindical ) INNER JOIN TiposEmpregos C1 on ( A.CON_CdiTipoEmprego = C1.TEM_CdiTipoEmprego ) INNER JOIN PrazosContratos D1 on ( A.CON_CdiPrazoContratado = D1.PZC_CdiPrazoContratado ) INNER JOIN TextosAdmissoesGrupos E1 on ( A.CON_CdiTextoAdmissaoGrupo = E1.GDA_CdiTextoAdmissaoGrupo ) INNER JOIN Sexos F1 on ( A.CON_CdiSexo = F1.SEX_CdiSexo ) INNER JOIN Nacionalidades G1 on ( A.CON_CdiNacionalidade = G1.NAC_CdiNacionalidade ) INNER JOIN Estados H1 on ( A.CON_CdiEstado_Naturalidade = H1.EST_CdiEstado ) INNER JOIN GrausInstrucoes I1 on ( A.CON_CdiGrauInstrucao = I1.GIN_CdiGrauInstrucao ) INNER JOIN EstadosCivis J1 on ( A.CON_CdiEstadoCivil = J1.ETC_CdiEstadoCivil ) INNER JOIN CoresPele K1 on ( A.CON_CdiCorPele = K1.CPL_CdiCorPele ) INNER JOIN TiposEnderecos L1 on ( A.CON_CdiTipoEndereco = L1.TEN_CdiTipoEndereco ) INNER JOIN Estados M1 on ( A.CON_CdiEstado_Resid = M1.EST_CdiEstado ) INNER JOIN Estados N1 on ( A.CON_CdiEstado_CarProf = N1.EST_CdiEstado ) INNER JOIN MeiosPagamentos O1 on ( A.CON_CdiMeioPagamento = O1.MPG_CdiMeioPagamento )  Left Join AGENCIASBANCOS agb on ( a.CON_CdiAgenciaBanco_Credito = agb.AGB_CDIAGENCIABANCO )  Left Join bancos bcn on ( agb.AGB_CDIBANCO = bcn.BAN_CDIBANCO ) INNER JOIN TiposJurosFGTS R1 on ( A.CON_CdiTipoJurosFGTS = R1.TJF_CdiTipoJurosFGTS ) INNER JOIN Horarios S1 on ( A.CON_CdiHorario = S1.HOR_CdiHorario ) INNER JOIN QuantidadesHorasMes T1 on ( A.CON_CdiQuantidadeHoraMes = T1.HMV_CdiQuantidadeHoraMes ) WHERE ( A.CON_CdiContratado = :pFocusedEmployee ) and  ( Exists ( Select aa.CON_CdiContratado from Contratados aa, Folhas fo1, Locais lo1, Empresas em1 where ( ( ( select PRF_CdiTipoAcessoPerfil_Folhas from Perfis where PRF_CdiPerfil = 1 ) <> 2 and   ( select PRF_CdiTipoAcessoPerfil_Folhas from Perfis where PRF_CdiPerfil = 1 ) = 1 or     ( ( select PRF_CdiTipoAcessoPerfil_Folhas from Perfis where PRF_CdiPerfil = 1 ) in (3,5) and aa.CON_CdiFolha in ( Select PFP_CdiFolha from PerfisxFolhas where PFP_CdiPerfil = 1 ) ) or     ( ( select PRF_CdiTipoAcessoPerfil_Folhas from Perfis where PRF_CdiPerfil = 1 ) in (4,5) and aa.CON_CdiFolha in ( Select UXO_CdiFolha from UsuariosxFolhas where UXO_CdiUsuario = 1 ) ) ) and  ( aa.CON_CdiSituacao <> 99 and ( aa.CON_CdiSituacao <> 2 or aa.CON_DtdRescisao >= ( select AVQ_DtdLimiteInativos from DefSisConfiguracoesGerais where AVQ_CdiSistema=1 ) )  )  ) and fo1.FOL_CdiFolha = aa.CON_CdiFolha and lo1.LOC_CdiLocal = fo1.FOL_CdiLocal and em1.EMP_CdiEmpresa = lo1.LOC_CdiEmpresa  and aa.CON_CdiContratado = A.CON_CdiContratado and  ( CON_CdiSituacao <> 99 and ( CON_CdiSituacao <> 2 or CON_DtdRescisao >= ( select AVQ_DtdLimiteInativos from DefSisConfiguracoesGerais where AVQ_CdiSistema=1 ) )  ) ) ) ORDER BY A.CON_CdiContratado



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 08 Jan 2007
  • Poruke: 279
  • Gde živiš: Srbija

@beli0135
Hvala na primeru queryija.

Neću praviti pitanja, poštujem tvoj odgovor i iskustvo. Možda ima neke logike pri izradi izveštaja, pa recimo da ne izvlačiš, npr., id llca, ime, prezime pojedinačno, te sve to lepo spojiš u jedan atribut, pa šalješ na štampu, dobija se i na prostoru. Verovatno se može iskoristiti za gomilu stvari kao što je tvoj slučaj.

Zbog mog načina rada i projektovanja baze, nisam imao potrebu za tim te to ne praktikujem iz prostog razloga jer to lako spojim i opet dobijem isto.

Pozdrav.



offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Jeste, a da li si siguran da ta tvoja aplikacijica nece nekome da se svidi, pa da ti poruci da je malo prosiris tu i tamo, i da se odjednom nadjes u haosu...

offline
  • Pridružio: 08 Jan 2007
  • Poruke: 279
  • Gde živiš: Srbija

Imao sam takve slučajeve, ali pri početnom projektovanju normalizujem bazu, te nisam imao problema sa implementacijom novih stvari.

offline
  • srdjos  Male
  • Zaslužni građanin
  • Pridružio: 27 Sep 2005
  • Poruke: 678

nekad se mnogo veca efikasnost aplikacije postigne
razbijajnjem velikih query-ja na vise manjih
bar kod interfejsa, izvestaji jako retko

x puta mi se desilo da napravim queri koji odradi stvar pun gas
onda neki bajo projektant padne sa neba i kaze:
"ej, zaboravio sam da ti kazem..... "
onda ja njemu lepo sve po spisku

onda vidim da moram da razbijam query jer sa vise
poziva dobijam mnogo vece mogucnosti

pusticu vam i ja jedan queri sa case-om
mislim da je cursor u pitanju
samo da ga nadjem

pozdrav
Srdjos

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Ja nisam te srece. Moji queriji moraju da rade na Oracle, MSSQL, PostgreSQL i DB2, ponekad i istovremeno...

offline
  • srdjos  Male
  • Zaslužni građanin
  • Pridružio: 27 Sep 2005
  • Poruke: 678

hm, nisi jedini, sad sam i ja u takvoj situaciji,
queriji moraju da nam rade na svim tim bazama
koje si ti pomenuo plus Interbase i Sybase

i onda testiranje pun gas, da odlepis,
mora da se radi onaj cisti sql standard SQL-92
uglavnom, najvise nas Interbase zajebava

ovo je kod jos dok sam bio u NS-u
main bazica je bila MS SQL 2000 ,
u pitanju je cursor koji na MS SQL-u
kazu da se ne preteruje u koriscenju istog
(nije PL baza)

ovo je knjizenje nama famoznog PDV-a u glavnu knjigu
to bilo pre vise od godinu dana

ne moze cak ni da se formatira ovde
bolje da sam ga stavio u neki txt fajl

SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_PDVShemaProknjizi] (         @sh_SifKnjiz INT,         @sh_VaziOd smalldatetime,         @sh_Magacin NVARCHAR(5),         @sh_VrDok NVARCHAR(3),         @sh_NalFin NVARCHAR(2),         @sh_DatOd SMALLDATETIME,         @sh_DatDo SMALLDATETIME ) AS         BEGIN TRAN roba_fina         -- DugPot 0-potrazuje 1-duguje         -- Znak 1 pozitiva, -1 negativa         -- Vrednost                 --  0 - nabavna vrednost                 --  1 - prodajna vrednost bez PDV-a                 --  2 - iznosPDV-a                 --  3 - prodajna vrednost sa PDV-om                 --  4 - rabat                 --  5 - Maloprodajna vrednost         -- Tip partnera                 --  0 - domaci                 --  1 - inostrani                 --  2 - Crna Gora                 --  3 - poljoprivrednik                 --  4 - licne potrebe preduzeca                 DECLARE @magacin NVARCHAR(5), @oznaka NVARCHAR(3), @broj INT, @pdvdane BIT,                         @tippartnera SMALLINT, @datum SMALLDATETIME, @dokument NVARCHAR(100),                         @partner INT, @valutaR INT, @nabvred NUMERIC(18,4), @ProdVredbezPDV NUMERIC(18,4),                         @ProdVredPDV NUMERIC(18,4), @rabat NUMERIC(18,4), @mpVred NUMERIC (18,4),                         @porez NUMERIC (18,4), @marza NUMERIC(18,2),         -- deklaracija pomocnih promenjivih, pratim fakturu po fakturu                         @pommag NVARCHAR(5), @pomozn NVARCHAR(3), @pombr INT,                         @part_dane bit, @polje VARCHAR(20), @sql VARCHAR(4000),                         @vpmp_magacin BIT,         -- deklaracije za drugi kursor                         @konto NVARCHAR(8), @dugpot BIT, @znak SMALLINT,                         @vrednost TINYINT, @tarifa INTEGER, @PDVOvbveznik BIT,                         @tippartnera_s SMALLINT,         -- promenjive za fin. nalog i promene                         @f_unet BIT, @f_broj INT, @f_rbr INT,                         @f_tipanal TINYINT, @f_anal INT,                         @f_dokument NVARCHAR(20), @f_opis NVARCHAR(20),                         @f_dugpot NUMERIC(18, 2),                         @f_duguje NUMERIC(18,2), @f_potrazuje NUMERIC(18,2),                         @f_mestros INT,         -- promenjiva za gresku                         @greska INT,         -- promenjiva za obracunavanje rabata                         @obrRabata INT                 SET @greska=0                 SET @part_dane=(SELECT ISNULL(Part, 0) FROM _VPVrDok WHERE Oznaka=@sh_VrDok) --------        neke od provera                 IF @part_dane=1                 BEGIN                         IF EXISTS(SELECT TipPartnera                                         FROM _Partneri                                         WHERE Sifra IN (SELECT Partner FROM _VPDok                                                         WHERE Magacin=@sh_Magacin                                                         AND Oznaka=@sh_VrDok)                                         AND (TipPartnera<0 OR TipPartnera IS NULL))                         BEGIN                                 SET @dokument=(SELECT TOP 1 Naziv                                                         FROM _Partneri                                                         WHERE Sifra IN (SELECT Partner FROM _VPDok                                                                                 WHERE Magacin=@sh_Magacin                                                                                 AND Oznaka=@sh_VrDok)                                                         AND (TipPartnera<0 OR TipPartnera IS NULL))                                 RAISERROR('Tip partnera ne odgovara : %s , podaci neae biti upisani', 16, 1, @dokument)                                 GOTO kraj                         END                 END                 IF NOT EXISTS(SELECT rd.Magacin, rd.Oznaka, rd.Broj, rd.PDVDaNe, part.TipPartnera,                                 rd.Datum, ISNULL(rd.Dokument,'') AS Dokument, rd.Partner, rd.ValutaR                                 FROM _VPDokStavke rds                                 INNER JOIN _VPDok rd                                 ON rds.Magacin=rd.Magacin                                 AND rds.Oznaka=rd.Oznaka                                 AND rds.Broj=rd.Broj                                 LEFT JOIN _Partneri part                                 ON rd.Partner=part.Sifra                                 WHERE rd.Magacin=@sh_Magacin                                 AND rd.Oznaka=@sh_VrDok                                 AND Knjizeno IS NULL                                 AND rd.Datum BETWEEN @sh_DatOd AND @sh_DatDo                                 GROUP BY rd.Magacin, rd.Oznaka, rd.Broj, rd.Datum, rd.Dokument,                                         rd.Partner, rd.ValutaR, part.TipPartnera, rd.PDVDaNe)                 BEGIN                         RAISERROR('Bez podataka za knjiženje u finansijsko',16,1)                         GOTO kraj                 END ----------      kraj provera -- uzimam nacin obracuna rabata                 SET @obrRabata=(SELECT ISNULL(ObrRabata, 1) FROM _regi WHERE Sifra=1)                 DECLARE RobFin_kursor CURSOR FOR                 SELECT rd.Magacin, rd.Oznaka, rd.Broj, ISNULL(rd.PDVDaNe, 1) ASPDVDaNe, ISNULL(part.TipPartnera,0) AS TipPartnera,                         rd.Datum, ISNULL(rd.Dokument,'') AS Dokument, rd.Partner, rd.ValutaR                 FROM _VPDokStavke rds                 INNER JOIN _VPDok rd                 ON rds.Magacin=rd.Magacin                 AND rds.Oznaka=rd.Oznaka                 AND rds.Broj=rd.Broj                 LEFT JOIN _Partneri part                 ON rd.Partner=part.Sifra                 WHERE rd.Magacin=@sh_Magacin                 AND rd.Oznaka=@sh_VrDok                 AND Knjizeno IS NULL                 AND rd.Datum BETWEEN @sh_DatOd AND @sh_DatDo                 GROUP BY rd.Magacin, rd.Oznaka, rd.Broj, rd.Datum, rd.Dokument,                         rd.Partner, rd.ValutaR, part.TipPartnera, rd.PDVDaNe                 ORDER BY rd.Magacin, rd.Oznaka, rd.Broj                 OPEN RobFin_kursor                 FETCH NEXT FROM RobFin_kursor                 INTO @magacin, @oznaka, @broj, @pdvdane, @tippartnera, @datum, @dokument, @partner, @valutaR                 WHILE @@fetch_status=0                 BEGIN                         SET @pommag=@magacin SET @pomozn=@oznaka SET @pombr=@broj                                 DECLARE Shema_kursor CURSOR FOR                         SELECT Konto, DugPot, Znak, Vrednost, Tarifa, PDVObveznik, TipPartnera                         FROM _ShemaKnjiz                         WHERE SifKnjiz=@sh_SifKnjiz                         AND  VaziOd<=(SELECT MAX(VaziOd)                                         FROM _ShemaKnjiz                                         WHERE SifKnjiz=@sh_SifKnjiz                                         AND VaziOd<=@sh_VaziOd)                         AND PDVObveznik=@pdvdane                         AND TipPartnera=@tippartnera         --              AND Tarifa IN (SELECT Tarifa         --                              FROM _VPDokStavke         --                              WHERE Magacin=@magacin         --                              AND Oznaka=@oznaka         --                              AND Broj=@broj)                         ORDER BY RBr -- setujem unos naloga fin knjigovodstva kao da nije unet                         SET @f_unet=0                         OPEN Shema_kursor                         FETCH NEXT FROM Shema_kursor                         INTO @konto, @dugpot, @znak, @vrednost, @tarifa,                                 @PDVOvbveznik, @tippartnera_s                         WHILE (@pommag=@magacin) AND                                 (@pomozn=@oznaka) AND                                 (@pombr=@broj) AND                                 (@@fetch_status=0)                                              BEGIN                 -- unos naloga finansijskog knjigovodstva                                 IF @f_unet=0                                 BEGIN                                         SET @f_broj=(SELECT ISNULL(MAX(Broj)+1,1) FROM _FNal WHERE Oznaka=@sh_NalFin)                                         INSERT INTO _FNal (Oznaka, Broj, Datum, StatusNal)                                         VALUES (@sh_NalFin, @f_broj, @datum, 0)                                                                         SET @greska=@greska+@@ERROR                                         -- nalog unet                                         SET @f_unet=1                                 END                                 -- ne pitaj zastoooooooooooooo je moralooooooooo ovakoooooooooooo,                                 -- ako ima tarifu, razbija po tarifama, u suprotnom, sumira sve zajedno --  @vpmp_magacin=1 -- veleprodaja, razlika je u racunanju poreza ovde se racuna, kod maloprodaje se porez izbija                                 IF @sh_VrDok<>'MK'                                 BEGIN                                         IF @tarifa IS NULL                                         BEGIN                                                 SELECT @nabvred=(SUM(rds.Kolicina*rds.NabCena)),                                                         @ProdVredBezPDV=(SUM(rds.Kolicina*rds.ProdCena)),                                                         @ProdVredPDV=(SUM(rds.Kolicina*(rds.ProdCena*(1+(rds.ProcPor/100))))),--(SUM(rds.Kolicina*(ROUND(rds.ProdCena*(1+(rds.ProcPor/100)), 2)))),                                                         @Rabat=                                                                 CASE @obrRabata                                                                         WHEN 0 THEN SUM(rds.Kolicina*(rds.ProdCena*((rd.Rabat+rds.Rabat)/100)) )                                                                         WHEN 1 THEN SUM( (rds.Kolicina*rds.ProdCena) - (rds.Kolicina*(rds.ProdCena*(1-(rds.Rabat/100))*(1-(rd.Rabat/100)))) )                                                                 END,                                                         @porez=                                                                 CASE @obrRabata                                                                         WHEN 0 THEN SUM(rds.Kolicina*(rds.ProdCena*(1-((rds.Rabat+rd.Rabat)/100)))*(rds.ProcPor/100) )                                                                         WHEN 1 THEN SUM(rds.Kolicina*(rds.ProdCena*(1-(rds.Rabat/100)) * (1-(rd.Rabat/100)))*(rds.ProcPor/100) )                                                                 END,                                                         @mpVred=                                                                 CASE @obrrabata                                                                                                          WHEN 0 THEN SUM(rds.Kolicina*(rds.MPCena*(1-((rds.Rabat+rd.Rabat)/100))) )                                                                         WHEN 1 THEN SUM(rds.Kolicina*(rds.MPCena*(1-(rds.Rabat/100))*(1-(rd.Rabat/100))) )                                                                 END                                                 FROM _VPDokStavke rds                                                 INNER JOIN _VPDok rd                                                 ON rds.Magacin=rd.Magacin                                                 AND rds.Oznaka=rd.Oznaka                                                 AND rds.Broj=rd.Broj                                                 WHERE rd.Magacin=@magacin                                                 AND rd.Oznaka=@oznaka                                                 AND rd.Broj=@broj                                         END                                         ELSE                                         BEGIN                                                 SELECT @nabvred=(SUM(rds.Kolicina*rds.NabCena)),                                                         @ProdVredBezPDV=(SUM(rds.Kolicina*rds.ProdCena)),                                                         @ProdVredPDV=(SUM(rds.Kolicina*(rds.ProdCena*(1+(rds.ProcPor/100))))),--(SUM(rds.Kolicina*(ROUND(rds.ProdCena*(1+(rds.ProcPor/100)), 2)))),                                                         @Rabat=                                                                 CASE @obrRabata                                                                         WHEN 0 THEN SUM(rds.Kolicina*(rds.ProdCena*((rd.Rabat+rds.Rabat)/100)) )                                                                         WHEN 1 THEN SUM( (rds.Kolicina*rds.ProdCena) - (rds.Kolicina*(rds.ProdCena*(1-(rds.Rabat/100))*(1-(rd.Rabat/100)))) )                                                                 END,                                                         @porez=                                                                 CASE @obrRabata                                                                         WHEN 0 THEN SUM(rds.Kolicina*(rds.ProdCena*(1-((rds.Rabat+rd.Rabat)/100)))*(rds.ProcPor/100) )                                                                         WHEN 1 THEN SUM(rds.Kolicina*(rds.ProdCena*(1-(rds.Rabat/100)) * (1-(rd.Rabat/100)))*(rds.ProcPor/100) )                                                                 END,                                                         @mpVred=                                                                 CASE @obrrabata                                                                                                          WHEN 0 THEN SUM(rds.Kolicina*(rds.MPCena*(1-((rds.Rabat+rd.Rabat)/100))) )                                                                         WHEN 1 THEN SUM(rds.Kolicina*(rds.MPCena*(1-(rds.Rabat/100))*(1-(rd.Rabat/100))) )                                                                 END                                                 FROM _VPDokStavke rds                                                 INNER JOIN _VPDok rd                                                 ON rds.Magacin=rd.Magacin                                                 AND rds.Oznaka=rd.Oznaka                                                 AND rds.Broj=rd.Broj                                                 WHERE rd.Magacin=@magacin                                                 AND rd.Oznaka=@oznaka                                                 AND rd.Broj=@broj                                                 AND rds.Tarifa=@tarifa                                         END                                 END                                 ELSE  -- samo maloprodajne kalkulacije                                 BEGIN                                         IF @tarifa IS NULL                                         BEGIN                                                 SELECT @nabvred=(SUM(rds.Kolicina*rds.NabCena)),                                                         @ProdVredBezPDV=SUM(rds.Kolicina*rds.ProdCena),                                                         @ProdVredPDV=(SUM(rds.Kolicina*(rds.ProdCena*(1+(rds.ProcPor/100))))),                                                         @Rabat=                                                                 CASE @obrRabata                                                                         WHEN 0 THEN SUM(rds.Kolicina*(rds.MPCena*((rd.Rabat+rds.Rabat)/100)) )                                                                         WHEN 1 THEN SUM( (rds.Kolicina*rds.MPCena) - (rds.Kolicina*(rds.MPCena*(1-(rds.Rabat/100))*(1-(rd.Rabat/100))))  )                                                                 END,                                                         @porez=                                                                 CASE @obrrabata                                                                         WHEN 0 THEN SUM( ((rds.Kolicina*rds.MPCena)*(1-((rds.Rabat+rd.Rabat)/100)) )*(rds.ProcPor/(100+rds.ProcPor)) )                                                                         WHEN 1 THEN SUM( ((rds.Kolicina*rds.MPCena)*(1-(rds.Rabat/100)) * (1-(rd.Rabat/100)) )*(rds.ProcPor/(100+rds.ProcPor)) )                                                                 END,                                                         @mpVred=                                                                 CASE @obrrabata                                                                                                          WHEN 0 THEN SUM(rds.Kolicina*(rds.MPCena*(1-((rds.Rabat+rd.Rabat)/100))) )                                                                         WHEN 1 THEN SUM(rds.Kolicina*(rds.MPCena*(1-(rds.Rabat/100))*(1-(rd.Rabat/100))) )                                                                 END                                                 FROM _VPDokStavke rds                                                 INNER JOIN _VPDok rd                                                 ON rds.Magacin=rd.Magacin                                                 AND rds.Oznaka=rd.Oznaka                                                 AND rds.Broj=rd.Broj                                                 WHERE rd.Magacin=@magacin                                                 AND rd.Oznaka=@oznaka                                                 AND rd.Broj=@broj                                         END                                         ELSE                                         BEGIN                                                 SELECT @nabvred=(SUM(rds.Kolicina*rds.NabCena)),                                                         @ProdVredBezPDV=SUM(rds.Kolicina*rds.ProdCena),                                                         @ProdVredPDV=(SUM(rds.Kolicina*(rds.ProdCena*(1+(rds.ProcPor/100))))),                                                         @Rabat=                                                                 CASE @obrRabata                                                                         WHEN 0 THEN SUM(rds.Kolicina*(rds.MPCena*((rd.Rabat+rds.Rabat)/100)) )                                                                         WHEN 1 THEN SUM( (rds.Kolicina*rds.MPCena) - (rds.Kolicina*(rds.MPCena*(1-(rds.Rabat/100))*(1-(rd.Rabat/100))))  )                                                                 END,                                                         @porez=                                                                 CASE @obrrabata                                                                         WHEN 0 THEN SUM( ((rds.Kolicina*rds.MPCena)*(1-((rds.Rabat+rd.Rabat)/100)) )*(rds.ProcPor/(100+rds.ProcPor)) )                                                                         WHEN 1 THEN SUM( ((rds.Kolicina*rds.MPCena)*(1-(rds.Rabat/100)) * (1-(rd.Rabat/100)) )*(rds.ProcPor/(100+rds.ProcPor)) )                                                                 END,                                                         @mpVred=                                                                 CASE @obrrabata                                                                                                          WHEN 0 THEN SUM(rds.Kolicina*(rds.MPCena*(1-((rds.Rabat+rd.Rabat)/100))) )                                                                         WHEN 1 THEN SUM(rds.Kolicina*(rds.MPCena*(1-(rds.Rabat/100))*(1-(rd.Rabat/100))) )                                                                 END                                                 FROM _VPDokStavke rds                                                 INNER JOIN _VPDok rd                                                 ON rds.Magacin=rd.Magacin                                                 AND rds.Oznaka=rd.Oznaka                                                 AND rds.Broj=rd.Broj                                                 WHERE rd.Magacin=@magacin                                                 AND rd.Oznaka=@oznaka                                                 AND rd.Broj=@broj                                                 AND rds.Tarifa=@tarifa                                         END                                 END                                 SET @greska=@greska+@@ERROR                 -- unos promena naloga                                 SET @f_dugpot=(SELECT CASE @tippartnera                                                 WHEN 0 THEN-- domaci                                                         (SELECT CASE @pdvdane                                                                         WHEN 1 THEN -- obveznik                                                                         (SELECT CASE @vrednost                                                                                         WHEN 0 THEN @nabvred                                                                                         WHEN 1 THEN @ProdVredbezPDV                                                                                         WHEN 2 THEN @porez                                                                                         WHEN 3 THEN @ProdVredbezPDV-@rabat+@porez                                                                                         WHEN 4 THEN @rabat                                                                                         WHEN 5 THEN @mpVred                                                                                 END)                                                                         WHEN 0 THEN -- nije obveznik                                                                         (SELECT CASE @vrednost                                                                                         WHEN 0 THEN @nabvred                                                                                         WHEN 1 THEN @ProdVredbezPDV                                                                                         WHEN 2 THEN @porez                                                                                         WHEN 3 THEN @ProdVredbezPDV-@rabat+@porez                                                                                         WHEN 4 THEN @rabat                                                                                         WHEN 5 THEN @mpVred                                                                                 END)                                                                 END)                                                 WHEN 1 THEN -- INOSTRANI                                                         (SELECT CASE @pdvdane                                                                         WHEN 1 THEN -- obveznik                                                                         (SELECT CASE @vrednost                                                                                         WHEN 0 THEN @nabvred                                                                                         WHEN 1 THEN @ProdVredbezPDV                                                                                         WHEN 2 THEN @porez                                                                                         WHEN 3 THEN @ProdVredbezPDV-@rabat+@porez                                                                                         WHEN 4 THEN @rabat                                                                                         WHEN 5 THEN @mpVred                                                                                 END)                                                                         WHEN 0 THEN -- nije obveznik                                                                         (SELECT CASE @vrednost                                                                                         WHEN 0 THEN @nabvred                                                                                         WHEN 1 THEN @ProdVredbezPDV                                                                                         WHEN 2 THEN @porez                                                                                         WHEN 3 THEN @ProdVredbezPDV-@rabat+@porez                                                                                         WHEN 4 THEN @rabat                                                                                         WHEN 5 THEN @mpVred                                                                                 END)                                                                 END)                                                 WHEN 2 THEN -- CRNA GORA                                                         (SELECT CASE @pdvdane                                                                         WHEN 1 THEN -- obveznik                                                                         (SELECT CASE @vrednost                                                                                         WHEN 0 THEN @nabvred                                                                                         WHEN 1 THEN @ProdVredbezPDV                                                                                         WHEN 2 THEN @porez                                                                                         WHEN 3 THEN @ProdVredbezPDV-@rabat+@porez                                                                                         WHEN 4 THEN @rabat                                                                                         WHEN 5 THEN @mpVred                                                                                 END)                                                                         WHEN 0 THEN -- nije obveznik                                                                         (SELECT CASE @vrednost                                                                                         WHEN 0 THEN @nabvred                                                                                         WHEN 1 THEN @ProdVredbezPDV                                                                                         WHEN 2 THEN @porez                                                                                         WHEN 3 THEN @ProdVredbezPDV-@rabat+@porez                                                                                         WHEN 4 THEN @rabat                                                                                         WHEN 5 THEN @mpVred                                                                                 END)                                                                 END)                                                 WHEN 4 THEN -- LICNE POTREBE PREDUZECA                                                         (SELECT CASE @pdvdane                                                                         WHEN 1 THEN -- obveznik                                                                         (SELECT CASE @vrednost                                                                                         WHEN 0 THEN @nabvred                                                                                         WHEN 1 THEN @ProdVredbezPDV                                                                                         WHEN 2 THEN @porez                                                                                         WHEN 3 THEN @ProdVredbezPDV-@rabat+@porez                                                                                         WHEN 4 THEN @rabat                                                                                         WHEN 5 THEN @mpVred                                                                                 END)                                                                         WHEN 0 THEN -- nije obveznik                                                                         (SELECT CASE @vrednost                                                                                         WHEN 0 THEN @nabvred                                                                                         WHEN 1 THEN @ProdVredbezPDV                                                                                         WHEN 2 THEN @porez                                                                                         WHEN 3 THEN @ProdVredbezPDV-@rabat+@porez                                                                                         WHEN 4 THEN @rabat                                                                                         WHEN 5 THEN @mpVred                                                                                 END)                                                                 END)                                                      END)                 -- odavle                                                                IF @dugpot=1                                 BEGIN                                         SET @f_duguje=(@znak*@f_dugpot)                                         SET @f_potrazuje=0.00                                 END                                 ELSE                                 BEGIN                                         SET @f_duguje=0.00                                         SET @F_potrazuje=(@znak*@f_dugpot)                                 END                                 IF (SELECT ISNULL(Analitika,0) FROM _FKon WHERE Konto=@konto)=1                                 BEGIN                                         SET @f_tipAnal=(SELECT TipAnal FROM _FKon WHERE Konto=@konto)                                         SET @f_anal=@partner                                 END                                 ELSE                                 BEGIN                                         SET @f_tipAnal=NULL                                         SET @f_anal=NULL                                 END --                              IF (SELECT ISNULL(TrMesto,0) FROM _FKon WHERE Konto=@konto)=1 --                                      SET @f_mestros=(SELECT MestoTroska FROM _VPMagacin WHERE Oznaka=@sh_Magacin) --                              ELSE                                                                            SET @f_mestros=null                                 SET @f_dokument=UPPER(@magacin+'/'+@oznaka+'/'+CAST(@broj AS NVARCHAR(8)))                                 SET @f_opis=LEFT(@dokument,20)                                 SET @f_rbr=(SELECT ISNULL(MAX(Id)+1, 1)                                                 FROM _FPromene                                                 WHERE Oznaka=@sh_NalFin                                                 AND Broj=@f_broj)                                 BEGIN TRAN UnosStavke                                         IF (@f_duguje<>0 OR @f_potrazuje<>0)                                         BEGIN                                                 INSERT INTO _FPromene (Oznaka,Broj,Id,DPO,Konto,Opis,Dokument,Valuta,                                                                         Duguje,Potrazuje, Mesto, TipAnalitike, Analitika)                                                 VALUES (@sh_NalFin, @f_broj, @f_rbr, @datum, @konto, @f_opis, @f_dokument,                                                         @valutaR, @f_duguje, @f_potrazuje, @f_mestros, @f_tipanal, @f_anal)                                                 SET @greska=@greska+@@ERROR                                         END                                                 COMMIT TRAN UnosStavke                                         SELECT  @sql =                                         CASE @f_tipanal                                                 WHEN 1 THEN 'UPDATE _FPromene SET Kupac='+CAST(@f_anal AS VARCHAR(20)) +' WHERE Oznaka='''+CAST(@sh_NalFin AS VARCHAR(2))+''' AND Broj='+CAST(@f_broj AS VARCHAR(20))+' AND Id='+CAST(@f_rbr AS VARCHAR(20))                                                 WHEN 2 THEN 'UPDATE _FPromene SET Dobavljac='+CAST(@f_anal AS VARCHAR(20)) +' WHERE Oznaka='''+CAST(@sh_NalFin AS VARCHAR(2))+''' AND Broj='+CAST(@f_broj AS VARCHAR(20))+' AND Id='+CAST(@f_rbr AS VARCHAR(20))                                                 WHEN 3 THEN 'UPDATE _FPromene SET Pogon='+CAST(@f_anal AS VARCHAR(20)) +' WHERE Oznaka='''+CAST(@sh_NalFin AS VARCHAR(2))+''' AND Broj='+CAST(@f_broj AS VARCHAR(20))+' AND Id='+CAST(@f_rbr AS VARCHAR(20))                                                 WHEN 4 THEN 'UPDATE _FPromene SET Zaposlen='+CAST(@f_anal AS VARCHAR(20)) +' WHERE Oznaka='''+CAST(@sh_NalFin AS VARCHAR(2))+''' AND Broj='+CAST(@f_broj AS VARCHAR(20))+' AND Id='+CAST(@f_rbr AS VARCHAR(20))                                                 WHEN 5 THEN 'UPDATE _FPromene SET Kredit='+CAST(@f_anal AS VARCHAR(20)) +' WHERE Oznaka='''+CAST(@sh_NalFin AS VARCHAR(2))+''' AND Broj='+CAST(@f_broj AS VARCHAR(20))+' AND Id='+CAST(@f_rbr AS VARCHAR(20))                                                 WHEN 6 THEN 'UPDATE _FPromene SET PrivLice='+CAST(@f_anal AS VARCHAR(20)) +' WHERE Oznaka='''+CAST(@sh_NalFin AS VARCHAR(2))+''' AND Broj='+CAST(@f_broj AS VARCHAR(20))+' AND Id='+CAST(@f_rbr AS VARCHAR(20))                                                 WHEN 7 THEN 'UPDATE _FPromene SET PosAnal='+CAST(@f_anal AS VARCHAR(20)) +' WHERE Oznaka='''+CAST(@sh_NalFin AS VARCHAR(2))+''' AND Broj='+CAST(@f_broj AS VARCHAR(20))+' AND Id='+CAST(@f_rbr AS VARCHAR(20))                                         ELSE NULL                                         END                                 IF @sql IS NOT  NULL                                         EXEC(@sql)                                 SET @greska=@greska+@@ERROR                                 FETCH NEXT FROM Shema_kursor                                 INTO @konto, @dugpot, @znak, @vrednost, @tarifa,                                         @PDVOvbveznik, @tippartnera_s                         END                         CLOSE Shema_kursor                         DEALLOCATE Shema_kursor                         BEGIN TRAN UpdateDokumenta                                         UPDATE _VPDok                                 SET Knjizeno=@sh_NalFin+'/'+CAST(@f_broj AS NVARCHAR(10))                                 WHERE Magacin=@magacin                                 AND Oznaka=@oznaka                                 AND Broj=@Broj                                 SET @greska=@greska+@@error                         COMMIT TRAN UpdateDokumenta                                 FETCH NEXT FROM RobFin_kursor                         INTO @magacin, @oznaka, @broj, @pdvdane, @tippartnera, @datum, @dokument, @partner, @valutaR                 END                         CLOSE RobFin_kursor                 DEALLOCATE RobFin_kursor                 SET @greska=@greska+@@error         IF @greska <> 0                 GOTO kraj         ELSE                 COMMIT TRAN roba_fina kraj:         ROLLBACK TRAN roba_fina         RETURN @greska

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Ne mozes da koristis StoredProcedures ako radis na vise baza... to samo pravi nevidjene probleme i troskove odrzavanja

offline
  • srdjos  Male
  • Zaslužni građanin
  • Pridružio: 27 Sep 2005
  • Poruke: 678

@Beli,

da, naravno, u istoj smo situaciji

ne mogu da se koriste nikakvi silni feature od tih
baza osim primarnih kljuceva, foreign kljuceva i indexa
cisti SQL-92

sto po meni i nije bas dobro
ispod ti stoji mocan sistem za upravljanje bazama podataka
a koristis nekih 10% njegovih mogucnosti

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Pa jeste, to je prokletstvo rada na vise baza. Medjutim, ako sistem radi na vise baza, bolje ga prodajes Very Happy

Pa nece klijent zbog tvog software-a da menja bazu koju je platio i koja mu besprekorno radi godinama.

Ko je trenutno na forumu
 

Ukupno su 1352 korisnika na forumu :: 31 registrovanih, 3 sakrivenih i 1318 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: bojank, bojcistv, ccoogg123, CikaKURE, darkangel, dekir, DonRumataEstorski, dragoljub11987, drimer, Excalibur13, galijot, hyla, ikan, jackreacher011011, janbo, Kruger, Kubovac, Lazarus, Leonov, Mcdado, Milometer, Milos ZA, milutin134, mnn2, nenad81, novator, sasa87, Srle993, Trpe Grozni, Vlada1389, VP6919