Gjoreski |
20.09.2013 14:40 |
Predmet:Re: stored procedure Kako?
imam edno queri vo stariot program koe koristi dve ili tri funcii kako ova query da go napravam vo stored procedura
PreuzmiIzvorni kôd (SQL):SELECT tblFakturi.Faktura_Broj, tblFakturi.Tip_Faktura, tblFaktura_Stavki.Ed_Cena, tblFaktura_Stavki.Kolicina, tblFaktura_Stavki.Popust, tblFaktura_Stavki.DDV, [Ed_Cena]-([Ed_Cena]*[Popust]/100) AS Ed_Cena_So_Rabat, Format(BezDDV([Ed_Cena],[DDV]),"Fixed") AS Ed_Cena_Bez_DDV, [Ed_Cena_So_Rabat]*[Kolicina] AS Vkupno, tblFaktura_Stavki.Stavka, tblFaktura_Stavki.Ed_Mera, Zaokruzi(PresmetkaDDV([Ed_Cena],[DDV]))*[Kolicina] AS VkDDV, tblFakturi.DATA, tblFakturi.Valuta, tblFakturi.Po_Dokument, tblFakturi.Magacin, tblKomitenti.Komitent_Firma, tblFakturi.Komitent_Partner, BezDDV([Ed_Cena],[DDV])*[Kolicina] AS Vkupno_Bez_DDV, BezDDV([Prodazna_So_DDV],[DDV])*[Kolicina] AS VkProdaznaBezDDV, tblFaktura_Stavki.Posledna_Prod_Cena AS Prodazna_So_DDV, [Prodazna_So_DDV]*[Kolicina] AS Vkupno_Pr_So_DDV, PresmetkaDDV([Prodazna_So_DDV],[DDV])*[Kolicina] AS VkupnoProdaznoDDV, [VkProdaznaBezDDV]-[Vkupno_Bez_DDV] AS RazlikaVoCena, tblFakturi.VoMagacin, tblFaktura_Stavki.ID_Stavka, tblFaktura_Stavki.Barkod, tblFakturi.ID_Faktura
FROM tblKomitenti INNER JOIN ((tblDokumenti INNER JOIN tblFakturi ON tblDokumenti.ID_Vid_Dokument = tblFakturi.Tip_Faktura) INNER JOIN tblFaktura_Stavki ON tblFakturi.ID_Faktura = tblFaktura_Stavki.Faktura_Br) ON tblKomitenti.ID_Komitent = tblFakturi.Komitent_Partner
WHERE (((tblFakturi.ID_Faktura)=[Forms]![frmFakturi_Izlez]![ID_Faktura]))
ORDER BY tblFaktura_Stavki.Stavka, tblFaktura_Stavki.ID_Stavka;
eve gi i funkciite
PreuzmiIzvorni kôd (Visual Basic):'Funkcija za presmetka na cena na artikal bez DDV
Function BezDDV(Cena As Double, Stapka As Double)
If Stapka = 0 Then
BezDDV = Cena
Else
BezDDV = Cena - (Cena - Cena / DDVK(Stapka))
End If
End Function
Function DDVK(DDVA As Double)
If DDVA = 25 Then DDVK = 1.25
If DDVA = 24 Then DDVK = 1.24
If DDVA = 23 Then DDVK = 1.23
If DDVA = 22 Then DDVK = 1.22
If DDVA = 21 Then DDVK = 1.21
If DDVA = 20 Then DDVK = 1.2
If DDVA = 19 Then DDVK = 1.19
If DDVA = 18 Then DDVK = 1.18
If DDVA = 17 Then DDVK = 1.17
If DDVA = 16 Then DDVK = 1.16
If DDVA = 15 Then DDVK = 1.15
If DDVA = 14 Then DDVK = 1.14
If DDVA = 13 Then DDVK = 1.13
If DDVA = 12 Then DDVK = 1.12
If DDVA = 11 Then DDVK = 1.11
If DDVA = 10 Then DDVK = 1.1
If DDVA = 9 Then DDVK = 1.09
If DDVA = 8 Then DDVK = 1.08
If DDVA = 7 Then DDVK = 1.07
If DDVA = 6 Then DDVK = 1.06
If DDVA = 5 Then DDVK = 1.05
If DDVA = 4 Then DDVK = 1.04
If DDVA = 3 Then DDVK = 1.03
If DDVA = 2 Then DDVK = 1.02
If DDVA = 1 Then DDVK = 1.01
'If DDVA = 0 Then DDVK = 0
End Function
'funkcija za da se napravi negativnata od storno faktura vo pozitivna
Function Prevrti(SumaNegativna As String)
If SumaNegativna < 0 Then Prevrti = SumaNegativna - (SumaNegativna * 2)
End Function
Function PresmetkaDDV(Cena As Double, Stapka As Double)
If Stapka = 0 Then
PresmetkaDDV = Cena - Cena
Else
PresmetkaDDV = Cena - (Cena / DDVK(Stapka))
End If
End Function
Function Zaokruzi(Broj) 'za zaokruzuvajne na 4 decimali
Zaokruzi = Round(Broj, 4)
End Function
|
zidar |
23.09.2013 16:21 |
Predmet:Re: stored procedure Kako?
Bez obzira na verziju MS SQL, mnogo bi ti bilo lakse da funkciju Function DDVK pretvoris u tabelu sa dve kolone
PreuzmiIzvorni kôd (Text):CREATE TABLE DDVA_u_DDVK
(
DDVA int NOT NULL CHECK DDVA BETWEEN 1 AND25
, DDVK decimal (6,2) NOT NULL
, PRIMARY KEY (DDVA)
, UNIQUE (DDVK)
)
Onda bi pisao manje koda u VB ili VBNET, svejedno. Ceo stos sa MS SQL je da se smanji pisanje koda. Takodje, kombinacja (Crystal,neki programski jezik) ne moze da tuce Access u generisanju i upravljanju reportima, bez obzira na bask end bazu. To je probano mnogo puta u praksi i redovno s zavrsavalo lose. Ako negde i radi, trazi jako mnogo rada na odrzavanju i konstantnom popravljanju problema koji se pojavljuju niotkuda. |
Gjoreski |
23.09.2013 21:11 |
Predmet:Re: stored procedure Kako?
Ne rabotam jas sega vo Access tuku rabotam vo vb6 i cristal report , no ovie raboti sto gi baram gi imam koristeno vo accesot i sega baram kako ovi funkcii sto gi imam vo starite aplikcii da gi zamenam odnosno da gi importiram vo SQL.
Zatoa postaviv primer i cekam da dobijam nekakov predlog.
Neznam sega dali vo SQL Serverot moram sve da resavam so Tabeli , jas mislev deka vo funkcii vo SQL serverot moze da se pisuva nekoj slicen cod kako vo VBA ta .
Uslovite na koi rabotam se tie i jas bi sakal da mozam da gi koristam access raportite no ne mozam . |
zxz |
23.09.2013 21:13 |
Predmet:Re: stored procedure Kako?
Exporuj dvadesetak redova ove tabele iz SQL pa zakaci lakse je kada ima tabela. |
Gjoreski |
24.09.2013 10:11 |
Predmet:Re: stored procedure Kako?
U[eav da go resam ova .Moze da se gradat funkcii slicni kako VBA ta a vo SQL Serverot se vikaat Scalar-Valued Functions eve kako bi izgledala mojata funkcija DDVK kako SQL finkcija
PreuzmiIzvorni kôd (SQL):FUNCTION [dbo].[DDVK]
(
-- Add the parameters for the function here
@DDVA INT
)
RETURNS DECIMAL(18, 2)
AS
BEGIN
IF @DDVA = 24 RETURN 1.24;
IF @DDVA = 23 RETURN 1.23;
IF @DDVA = 22 RETURN 1.22;
IF @DDVA = 21 RETURN 1.21;
IF @DDVA = 20 RETURN 1.2;
IF @DDVA = 19 RETURN 1.19;
IF @DDVA = 18 RETURN 1.18;
IF @DDVA = 17 RETURN 1.17;
IF @DDVA = 16 RETURN 1.16;
IF @DDVA = 15 RETURN 1.15;
IF @DDVA = 14 RETURN 1.14;
IF @DDVA = 13 RETURN 1.13;
IF @DDVA = 12 RETURN 1.12;
IF @DDVA = 11 RETURN 1.11;
IF @DDVA = 10 RETURN 1.1;
IF @DDVA = 9 RETURN 1.09;
IF @DDVA = 8 RETURN 1.08;
IF @DDVA = 7 RETURN 1.07;
IF @DDVA = 6 RETURN 1.06;
IF @DDVA = 5 RETURN 1.05;
IF @DDVA = 4 RETURN 1.04;
IF @DDVA = 3 RETURN 1.03;
IF @DDVA = 2 RETURN 1.02;
IF @DDVA = 1 RETURN 1.01;
/*
If @DDVA = 0 return 0;
*/
RETURN 0;
END
|
zxz |
24.09.2013 11:05 |
Predmet:Re: stored procedure Kako?
Koliko ja vidim netrebaju ti silni ifovi.
Moze se to ovako rijesiti.
DDVK=DVA/100+1
Imas ti i ovdje neku proceduru u vb koliko vidim:
Format(BezDDV([Ed_Cena],[DDV]),"Fixed") AS Ed_Cena_Bez_DDV
Najbolje bi bilo da zakacis bar to sto imas u accessu.
Tesko je napraviti ponovo tabelu i popuniti podacima koje neznas. |
Gjoreski |
24.09.2013 12:09 |
Predmet:Re: stored procedure Kako?
ok ne e problem ke ja zakacam bazata no ova sto go rabotam e samo vezbajne sega odnosno se pripremam za ona sto me ceka.
Sakam da vidam kako ke se snaogam so ova novo nesto za mene
eve i baza |
Prilozi: Data.rar (Velicina datoteke:413.01 KB)
|
zxz |
26.09.2013 19:55 |
Predmet:Re: stored procedure Kako?
Tvoj Query sto si naveo ima jos procedura koje nisi dao pa sam ja napravio jednu srored proceduru kao primjer pa se nadam da ce ti pomoci da napravis ono sto zelis.
Ovu tored proceduru postavi u svoju bazu MsSQL.
PreuzmiIzvorni kôd (SQL):CREATE PROCEDURE ArtikalBR @ID INT
AS
SELECT
ID_Artikal,
Artikal_Sifra,
Artikal_Ime,
Artikal_Prodazna_cena,
Artikal_DDV,
(Artikal_Prodazna_cena*Artikal_DDV) AS CENA
FROM tblArtikli
WHERE ID_Artikal=@id
GO
Ovo ide u VB.
PreuzmiIzvorni kôd (Visual Basic):Function RSArtikla(IDArt As Integer)
Dim Kon As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim SQL As String
Dim strUserName As String, strPassWord As String, strDatabase As String, strServer As String
strUserName = "Ime"
strPassWord = "Sifra"
strDatabase = "Baza"
strServer = "ImeTvogServera"
Kon.CursorLocation = adUseClient
Kon.Open "Provider=MSDASQL; DRIVER=Sql Server; SERVER=" & strServer & "; DATABASE=" _
& strDatabase & "; UID=" & strUserName & "; PWD=" & strPassWord & ";"
Set Rs = New ADODB.Recordset
SQL = "EXECUTE ArtikalBR " & IDArt
Rs.Open SQL, Kon, adOpenKeyset
MsgBox Rs!Artikal_Ime & "----" & Rs!CENA
Kon.Close
End Function
|
Gjoreski |
27.09.2013 15:05 |
Predmet:Re: stored procedure Kako?
Jas se izvinuvam mislev deka sum go stavil resenieto bidejki ova go resiv ne e dovrseno no izrabotiv stored procedura koja sega zasega bi trebalo da zadovoli eden del od potrebite.
Eve vaka go resiv ova :
Tocno deka vo ova moe queri ima i drugi funkcii koi vo osnova se site slicni i imaat slicna namena a toa e presmetka na DDV i ceni BEZ DDV i ceni SO DDV .
Eve Stored kako izgleda:PreuzmiIzvorni kôd (SQL):Proc [dbo].[spPLT]
@IDFaktura INT
AS
BEGIN
SELECT
tblFaktura_Stavki.ID_Stavka
, tblFaktura_Stavki.Barkod
, tblArtikli.Artikal_Ime AS Stavka
, tblFaktura_Stavki.Ed_Mera
, tblFaktura_Stavki.Ed_Cena
, tblFaktura_Stavki.Kolicina
, tblFaktura_Stavki.Popust
, tblFaktura_Stavki.DDV
, tblFaktura_Stavki.Posledna_Prod_Cena AS Prodazna_So_DDV
, tblFaktura_Stavki.Ed_Cena*tblFaktura_Stavki.DDV AS VkunoNabavnaSoDDV
, CAST(isnull(tblFaktura_Stavki.DDV,0) AS DECIMAL) / 1000 AS DDVrocent
, (dbo.PresmetkaDDV (tblFaktura_Stavki.Ed_Cena,tblFaktura_Stavki.DDV))*tblFaktura_Stavki.Kolicina AS VkDDV
-- , (dbo.PresmetkaDDV (180.5,tblFaktura_Stavki.DDV))* tblFaktura_Stavki.Kolicina as VkDDV
, tblFakturi.ID_Faktura
, tblFakturi.Faktura_Broj
, tblFakturi.Tip_Faktura
, tblFakturi.DATA
, tblFakturi.Valuta
, tblFakturi.Po_Dokument
, tblFakturi.Magacin
, tblKomitenti.Komitent_Firma
, tblFakturi.Komitent_Partner
, tblFakturi.VoMagacin
FROM tblArtikli INNER JOIN (tblKomitenti INNER JOIN (tblFakturi INNER JOIN tblFaktura_Stavki ON tblFakturi.ID_Faktura = tblFaktura_Stavki.Faktura_Br) ON tblKomitenti.ID_Komitent = tblFakturi.Komitent_Partner) ON tblArtikli.ID_Artikal = tblFaktura_Stavki.Stavka
WHERE tblFakturi.ID_Faktura = @IDFaktura
ORDER BY tblFaktura_Stavki.ID_Stavka;
I dvete funkcii
PreuzmiIzvorni kôd (SQL):FUNCTION [dbo].[DDVK]
(
-- Add the parameters for the function here
@DDVA INT
)
RETURNS DECIMAL(18, 2)
AS
BEGIN
IF @DDVA = 24 RETURN 1.24;
IF @DDVA = 23 RETURN 1.23;
IF @DDVA = 22 RETURN 1.22;
IF @DDVA = 21 RETURN 1.21;
IF @DDVA = 20 RETURN 1.2;
IF @DDVA = 19 RETURN 1.19;
IF @DDVA = 18 RETURN 1.18;
IF @DDVA = 17 RETURN 1.17;
IF @DDVA = 16 RETURN 1.16;
IF @DDVA = 15 RETURN 1.15;
IF @DDVA = 14 RETURN 1.14;
IF @DDVA = 13 RETURN 1.13;
IF @DDVA = 12 RETURN 1.12;
IF @DDVA = 11 RETURN 1.11;
IF @DDVA = 10 RETURN 1.1;
IF @DDVA = 9 RETURN 1.09;
IF @DDVA = 8 RETURN 1.08;
IF @DDVA = 7 RETURN 1.07;
IF @DDVA = 6 RETURN 1.06;
IF @DDVA = 5 RETURN 1.05;
IF @DDVA = 4 RETURN 1.04;
IF @DDVA = 3 RETURN 1.03;
IF @DDVA = 2 RETURN 1.02;
IF @DDVA = 1 RETURN 1.01;
/*
If @DDVA = 0 return 0;
*/
RETURN 0;
END
UNCTION [dbo].[PresmetkaDDV]
(@Cena FLOAT , @Stapka INT)
--RETURNS decimal(18, 8)
RETURNS FLOAT
AS
BEGIN
IF @Stapka = 0 RETURN @Cena - @Cena;
IF @Stapka <> 0 RETURN @Cena - (@Cena / dbo.DDVK(@Stapka));
/*
If @DDVA = 0 return 0;
*/
RETURN 0;
END
go vidov i ona predhodno sto mi predlozi za ovaj koeficient sto go koristam za presmetka no toa ne mi e prakticno bidejki koeficientot vo ovaj slucaj se dvizi od 1.01 do 1.24 no nekogas mi treba da bode 0.01 ili razlicno od ova no toa ne e bitno sega bidejki ova za pocetok e odlicno skolo ,isto taka interesno e toa sto go zabelezav dokolku mnozis delis ili vrsis nekoi operacii na dva podatoci od tipot na Float i Integer togas dobivas nevaliden podatok moze da bide bez decimali ili ako e pomal od 1 togas dobivas 0 ( Zaklicaok vo SQL server sekogas vrsi operacii nad isti tip na podatok ).
Ovaa tema nema da ja zatvoram ke imam uste prasajna no neznam kako ke se odvivaat rabotite .
I uste edna molba Dali moze eden primer od Cristal Report odnosno Report i Subreport koi imaat
dva razlicni DataSource od dve stored proceduri odnosto mi treba na primer Faktura kako Report i
Rekapitulacija kako Subreport koja ke sodrzi nekoi grupirani i sumirani stavki od fakturata.
pozdrav |
zxz |
27.09.2013 15:36 |
Predmet:Re: stored procedure Kako?
Imas visual linking export pa tables i dodas novu tabelu ili query.
E sad mozes dodati i group section ako su podaci napr 1-vise.
Dali moze sub report kao kod accessa to neznam a i nisam naisao da treba. |