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 1184 korisnika na forumu :: 87 registrovanih, 10 sakrivenih i 1087 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 19602 - dana 30 Mar 2026 00:11

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Akiro, Andrija357, Apok, Aristotle2002, ArmFPGA, Aska, babaroga, berste23, Bobrock1, Bojcca, Bokiboks, Boris BM, boro975, BORUTUS, BSD, bukefal, carinko, CrveniSolaris, Dare, dejno, deLacy, DezurniOperativni, DonRumataEstorski, Dukelander, Ercomero, Fliper, Fog of War, FOX, GH69, Goxy1, Great White, hellenic, HrcAk47, ikan, ilija kz, Jester, Josef, Kaponi, king111, Lieutenant, lima, lucko1, Magistar78, Mali Rambo, MarijaC84, Metanoja, Mig 29, mishkooo, moldway, monomah, nebidrag, neko iz mase, nobutado, Paklenica, Parker, Pavel Medved, Pekman, Pero, PMsnow, proljece, Radio operater, Ran, repac, Rok A Bit, SamoGledam, Semberija, Shadows1, singa, Sirius, skylab1111, Smiljkovich, SpaDej, Sr.Stat., t84dar, Tas011, Teodor60, Toper, tritonus, varda, vathra, vensla, Vladonius, Vladovbl, Vrač, zemljanin, 2001