Leszek Kos

Leszek Kos właściciel, LEKO

Temat: pole dodatkowe wypełniane przez funkcję SQL

Witam

Używam tabeli "Zamówienia" do tworzenia protokołów reklamacyjnych. Chciałbym utworzyć pole dodatkowe do pozycji zamówienia, które automatycznie wypełni się numerem faktury zakupu tego towaru. W polach dodatkowych jest opcja "Pole wyliczane i zwracane przez funkcję SQL", i po jej zaznaczeniu przechodzimy do zakładki "Parametry funkcji SQL". Niestety nie wiem co dalej. Bardzo proszę o pomoc.

Leszek
Adam Polech

Adam Polech Główny Architekt
Oprogramowania,
Asseco Business
Solution...

Temat: pole dodatkowe wypełniane przez funkcję SQL

Musi Pan utworzyć funkcję sql na serwerze. Np.

create function [dbo].[FuncZam] (
@id_zam numeric
)
Returns varchar(20)
as
begin
declare
@a varchar(20)

select @a='moj numer'+cast(@id_zam as varchar(20))

return (@a)
end

W zakładce parametry funkcji sql w nazwie wpisujemy
dbo.FuncZam i zaznaczamy identyfikator obiektu
Leszek Kos

Leszek Kos właściciel, LEKO

Temat: pole dodatkowe wypełniane przez funkcję SQL

Zrobiłem tak jak Pan napisał, jednak zamiast numeru faktury zawartość pola to "moj numer0".
Adam Polech

Adam Polech Główny Architekt
Oprogramowania,
Asseco Business
Solution...

Temat: pole dodatkowe wypełniane przez funkcję SQL

Czy na pewno zaznaczył Pan przekazywanie parametru identyfikator obiektu?
Leszek Kos

Leszek Kos właściciel, LEKO

Temat: pole dodatkowe wypełniane przez funkcję SQL

Tak, było zaznaczone.
Adam Polech

Adam Polech Główny Architekt
Oprogramowania,
Asseco Business
Solution...

Temat: pole dodatkowe wypełniane przez funkcję SQL

Z konsoli sql proszę uruchomić

declare @id_zam numeric
select @id_zam= tutaj podstawić id zamowienia testowego
select dbo.FuncZam(@id_zam)
Co zwróci funkcja?
Powinno być dla zamówienia o id =100
moj numer100
Leszek Kos

Leszek Kos właściciel, LEKO

Temat: pole dodatkowe wypełniane przez funkcję SQL

Moja wiedza na temat SQL-a jest taka, że potrzebuję kilku godzin i pomocy googla na wykonanie jednego Pańskiego polecenia.
Funkcja wykonuje to co Pan napisał. Jaki wpiszę numer, taki jest w zwrócony.

Jeszcze raz sprawdziłem jak zachowuje się pole dodatkowe na zamówieniu. Po dodaniu pozycji do zamówienia, pole dodatkowe ma wartość "moj numer0". Gdy wcisnę "F2 popraw" i "F10 zapisz" to zmienia swoją wartość na np."moj numer13568", gdzie 13568 jest liczbą kolejną pozycji wszystkich zamówień. Każda dodana pozycja dostaje numer o 1 większy.

Co można zrobić, żeby zamiast numeru kolejnego, wstawiany tam był numer faktury zakupu towaru z danej pozycji zamówienia?

Leszek
Krzysztof Stachyra

Krzysztof Stachyra Szef Wydziału
Produkcji Systemów
Handlowo-Magazynowyc
h i ...

Temat: pole dodatkowe wypełniane przez funkcję SQL

O ile dobrze zrozumiałem problem to w pozycji chce Pan wyświetlić powiązaną dostawę z jakiej towar został pobrany. Adam podał tylko przykład tej funkcji i nie jest to gotowa funkcja realizująca Pana zadanie, jak mniemam Adam zasugerował się iż Pan zna zasady programowania a jedynie chce Pan podpiąć to w programie.
W przeciwnym wypadku trochę trudno będzie dyskutować w zwięzłych postach na temat jak taka funkcja powinna wyglądać. Inna sprawa jest taka, że zadanie jest dosyć rozmyte,
po pierwsze - towar bez rezerwacji nie jest związany, z żadną fakturą zakupu,
po drugie - pozycja może mieć 10 szt a z dostawy może być raptem 3 wtedy trzeba skorzystać z innej i tu funkcja też musi wiedzieć co zwraca
Leszek Kos

Leszek Kos właściciel, LEKO

Temat: pole dodatkowe wypełniane przez funkcję SQL

Towar jest zarezerwowany, bo protokół robię na podstawie zamówienia od odbiorcy. Towar wybieram z konkretnej dostawy, aby uniknąć sytuacji, gdy po otrzymaniu korekty od dostawcy, Wf-Mag mi jej nie przyjmie z powodu rozchodowania towaru z tej dostawy.
Inną sprawą jest moja znajomość tematu. Mam świadomość, że rozmawiać ze mną o sql-u, można tak jak z niewidomym o kolorach. Gdy zaczynałem ten temat, myślałem, że to będzie prosta sprawa i po wypełnieniu jednego pola będzie działać. Na razie pozostaje mi ręczne wypełnianie tego pola i nadzieja, że może w przyszłości wyposażycie program w jakiś moduł do reklamacji.

Bardzo dziękuję za pomoc i życzę owocnej pracy przy programie.

Leszek
Krzysztof Stachyra

Krzysztof Stachyra Szef Wydziału
Produkcji Systemów
Handlowo-Magazynowyc
h i ...

Temat: pole dodatkowe wypełniane przez funkcję SQL

Funkcja w tym przypadku powinna wyglądać jak ta poniżej. W definicji tabeli powinna być podana nazwa funkcji dbo.MAGEXT_Func_PodajNrDostawyDlaPozZam i zaznaczone, że przechodzi id_obiektu .
Funkcja oczywiście nie uwzględnia wszystkich przypadków i zakłada to co ogólnie zostało poruszone w tych postach.

if OBJECT_ID('MAGEXT_Func_PodajNrDostawyDlaPozZam') is not null
drop function MAGEXT_Func_PodajNrDostawyDlaPozZam
go
create function [dbo].[MAGEXT_Func_PodajNrDostawyDlaPozZam] (
@id_obiektu numeric
)
Returns varchar(20)
as
begin
declare
@numer varchar(20)

select top 1 @numer= numer from DOKUMENT_HANDLOWY dh
inner join POZYCJA_DOKUMENTU_MAGAZYNOWEGO pdm
on pdm.ID_DOK_HANDLOWEGO = dh.ID_DOKUMENTU_HANDLOWEGO
inner join POZYCJA_ZAMOWIENIA pz
on pdm.ID_POZ_DOK_MAG = pz.ID_DOSTAWY_REZ
where pz.ID_POZYCJI_ZAMOWIENIA = @id_obiektu

return (@numer)
end
go
Leszek Kos

Leszek Kos właściciel, LEKO

Temat: pole dodatkowe wypełniane przez funkcję SQL

Działa.
Bardzo dziękuję za pomoc.

Leszek
Szymon K.

Szymon K. Student,
Politechnika
Wrocławska

Temat: pole dodatkowe wypełniane przez funkcję SQL

Witam serdecznie!

Aby nie zakładać nowego tematu, mam zapytanie / prośbę o Pomoc.
Dla dokumentu Handlowego dodałem Pole Dodatkowe: Województwo; chciałbym aby z automatu, przy tworzeniu Nowego dokumentu handlowego uzupełniało się to pole dodatkowe Województwem jakie jest przypisane dla tego kontrahenta, dla którego ów dok. handlowy jest tworzony.

Proszę o sugestie.
Pozdrawiam,
Szymon M.

Szymon M. Kierownik działu IT

Temat: pole dodatkowe wypełniane przez funkcję SQL

Jeżeli wersja programu to PRESTIŻ PLUS to można sobie dodać procedurę plus gniazdo rozszerzeń.
Do testów i dalszych przemyśleń można wrzucić do bazy procedurę i stworzyć gniazdo:

USE [WAPRO_DEMO]
GO

DROP PROCEDURE [dbo].[MAGSRC_test]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[MAGSRC_test]
(
@IdObiektu numeric (18, 0),
@wojewodztwo varchar(30) OUTPUT
)
AS
BEGIN

SET @wojewodztwo = (select wojewodztwo from kontrahent k inner join DOKUMENT_HANDLOWY dh on k.ID_KONTRAHENTA=dh.ID_KONTRAHENTA where dh.ID_DOKUMENTU_HANDLOWEGO = @IdObiektu);

declare @errmsg varchar(255)
begin
set xact_abort on
set transaction isolation level REPEATABLE READ
begin transaction

update DOKUMENT_HANDLOWY set POLE8=@wojewodztwo where ID_DOKUMENTU_HANDLOWEGO = @IdObiektu and TYP_DOKUMENTU = 's'

if @@trancount>0 commit transaction
goto Koniec
Error:
raiserror (@errmsg,16,1)
if @@trancount>0 rollback tran
goto Koniec
Koniec:
set transaction isolation level READ COMMITTED
return
end
end

GO

Pozdrawiam
Szymon K.

Szymon K. Student,
Politechnika
Wrocławska

Temat: pole dodatkowe wypełniane przez funkcję SQL

Witam!

Serdecznie dziękuje za odpowiedz!

To na chwile obecna raczej nie przejdzie :( bo mam wersje Prestiz .
Chyba ze jest jakies rozwiazanie, uzyte jak powyzej w przypadku ID Dokumentu...

Pozdrawiam, Szymon
Szymon M.

Szymon M. Kierownik działu IT

Temat: pole dodatkowe wypełniane przez funkcję SQL

USE [WAPRO_DEMO]
GO

/****** Object: UserDefinedFunction [dbo].[Func_Wojewodztwo] Script Date: 2015-02-11 10:48:59 ******/
DROP FUNCTION [dbo].[Func_Wojewodztwo]
GO

/****** Object: UserDefinedFunction [dbo].[Func_Wojewodztwo] Script Date: 2015-02-11 10:48:59 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create function [dbo].[Func_Wojewodztwo] (
@id_obiektu numeric
)
Returns varchar(30)
as
begin
declare
@wojewodztwo varchar(30)

select top 1 @wojewodztwo=k.wojewodztwo from kontrahent k inner join DOKUMENT_HANDLOWY dh on k.ID_KONTRAHENTA=dh.ID_KONTRAHENTA where dh.ID_DOKUMENTU_HANDLOWEGO = @id_obiektu

return (@wojewodztwo)
end

GO

w definicji Pola dodatkowego proszę zaznaczyć Pole wyliczane i zwracane przez funkcję SQL plus nazwa w bazie dbo.Func_Wojewodztwo oraz zaznaczyć identyfikator obiektuTen post został edytowany przez Autora dnia 11.02.15 o godzinie 10:51
Szymon K.

Szymon K. Student,
Politechnika
Wrocławska

Temat: pole dodatkowe wypełniane przez funkcję SQL

Witam!

Chyle czoła, dziękuje za pomoc. Wszystko działa jak należy!

Pozdrawiam, Szymon Kowalski
Szymon K.

Szymon K. Student,
Politechnika
Wrocławska

Temat: pole dodatkowe wypełniane przez funkcję SQL

Witam!

Odświeżam temat po kilku latach :)
Kilka lat, nowe umiejetnosci, nowe wyzwania i nowe problemy.
Mam juz wersje prestiz plus WaproMaga. i chce wykorzystywać Gniazda rozszerzen.
W chwili obecnej dla dokumentu handlowego mam zdefiniowane pole1 Sprzedawca - pole wymagane.
Pole2 to Oddzial.
Mam zdefiniowanego w Pracowniku Pola1 = Sprzedawca i Pole3 = Oddzial.
Chce by po zapisaniu, zmodyfikowaniu dokumentu handlowego wykonalo sie gniazdo rozszerzen, i przypisalo odzial wzgledem pracownika.

Napisałem procedure:

create procedure [dbo].[MAGSRC_Pobieranie_Oddzial]
(
@IdObiektu numeric (18, 0),
@oddzial varchar(100) OUTPUT
)
AS
BEGIN

SET @oddzial = (select top 1 p.pole3 from PRACOWNIK p inner join DOKUMENT_HANDLOWY dh on p.pole1=dh.pole1 where dh.ID_DOKUMENTU_HANDLOWEGO = @IdObiektu);

declare @errmsg varchar(255)
begin
set xact_abort on
set transaction isolation level REPEATABLE READ
begin transaction

update DOKUMENT_HANDLOWY set POLE2=@oddzial where ID_DOKUMENTU_HANDLOWEGO = @IdObiektu and TYP_DOKUMENTU = 's'

if @@trancount>0 commit transaction
goto Koniec
Error:
raiserror (@errmsg,16,1)
if @@trancount>0 rollback tran
goto Koniec
Koniec:
set transaction isolation level READ COMMITTED
return
end
end

GO

w gniezdzie rozszerzen dla poprawianego po dokumentu handlowego i po dodaniu dokumentu handlowego jest dodane nowe gniazdo:

Nazwa: MAGSRC_ Pobieranie_Oddzial
Lista parametrów: @IdObiektu numeric, @oddzial varchar

Gdy dodaje/poprawiam Dokument handlowy, wyskakuje ostrzeżenie:

Incorrect syntax near '&'. i nic sie nie zapisalo.
Jak robie na "sztywno" zapytania dla danego id_dokumentu_handlowego - dane pobieraja sie ok, updatuja tez... ale zapytanie procedura nie rusza...

Czy znacie pomysl, sugetsie na rozwiazanie?
Rafał M.

Rafał M. Dyrektor ds. Asseco
WAPRO ERP, Asseco
Business Solutions
...

Temat: pole dodatkowe wypełniane przez funkcję SQL

Nie istnieje zmienna @Oddzial. Za pole dodatkowe nr 2 odpowiada zmienna @DokHanPole02 na dokumencie handlowy. Proszę przejrzeć listę zmiennych i skorygować

Poza tym proponuję ustawić pole @DokHanPole02 na podstawie pól dodatkowych z pracownika w gnieździe przed zapisem dokumentu - program sam zapisze odpowiednią wartość do pola dodatkowego byleby ją miał czyli:

create procedure [dbo].[MAGSRC_Pobieranie_Oddzial]
(
@IdObiektu numeric (18, 0),
@DokHanPole01 varchar(100) OUTPUT,
@DokHanPole02 varchar(100) OUTPUT
)
AS
BEGIN
if (select 1 fromDOKUMENT_HANDLOWY where ID_DOKUMENTU_HANDLOWEGO = @IdObiektu and TYP_DOKUMENTU = 's')
SET @DokHanPole02 = (select top 1 p.pole3 from PRACOWNIK p where p.pole1=@DokHanPole01);
END
Szymon K.

Szymon K. Student,
Politechnika
Wrocławska

Temat: pole dodatkowe wypełniane przez funkcję SQL

Witam serdecznie!

zmiana Zmiennej... i po temacie :)
Działa!

Widać ja poleciałem na około, bo Pana procedura jest szybsza.

Super, bardzo dziękuje...
Kolejny poziom wyżej :)

Pozdrawiam!
Zbigniew Pochmara

Zbigniew Pochmara Własna działalność -
właściciel firmy,
Biit

Temat: pole dodatkowe wypełniane przez funkcję SQL

Witam wszystkich,
Staram się skopiować informację tekstową (100 znaków) z pola dodatkowego zamówienia, do pola dodatkowego faktury, która z niego powstaje. Funkcja dział tylko wówczas, gdy wpiszę konkretne id zamówienia w wywołaniu, w przeciwnym wypadku niestety brak zwrotu. Funkcja wygląda:

ALTER FUNCTION [dbo].[ZAMOWIENIE_zwroc_P7]
(
@ID_ZAMOWIENIA numeric
)
RETURNS varchar(100)
AS
BEGIN
DECLARE @BRANDING varchar(100)
SELECT @BRANDING=Pole7
from ZAMOWIENIE_V where ID_ZAMOWIENIA=@ID_ZAMOWIENIA
RETURN (@BRANDING)
END

Co powinienem poprawić?
Pozdrawiam



Wyślij zaproszenie do