Wywołanie kartotek systemowych w gniazdach tabeli dodatkowej

Jesteś tutaj:
< Powrót

Wywołanie kartotek systemowych w gniazdach tabeli dodatkowej

W wersji 8.00.0 wprowadzono możliwość wywoływania natywnych kartotek systemowych w celu wyboru rekordu kartoteki np. wywołać można kartoteki artykułow, kontrahentów, magazynów, pracowników oraz kategorii artykułów. Dzięki temu można bardzo łatwo odczytać dane pochodzące z wybranego rekordu, kartoteka po wybraniu wiersza zwraca ID wybranego rekordu np. Id_artykulu, id_magazynu czy id_kontrahenta. Dane przechowywane są w zmiennej @IdWybranegoWierszaKartoteki. Użytkownik może także zainijować w gnieździe “powyżej” wartość tej zmiennej – dzięki temu kartoteka od razu po otwarciu okna podświetli ten rekord jeśli istnieje w kartotece.

W poniższym przykładzie przedstawiono przykładowe zastosowanie, które określa możliwość zdefiniowania przez użytkownika w tabeli dodatkowej dla artykułu wybranie preferowanych dostawców wraz z priorytetem realizacji.

Przykład 1

W tym celu należy dodać nową tabelę dodatkową w konteście artykułów.

Administrator > Definicje > Tabele dodatkowe

Tabela w przykładzie nazywać się będzie Dostawcy oraz posiada 2 kolumny:

1. Dostawca jako teskt z zaznaczeniem opcji Pole wpisywane z przyciskiem do oprogramowania w gnieździe rozszerzeń

2. Priorytet pole jako liczba całkowita

Pola należy dodać także do przeglądarki utworzonej tabeli dodatkowej.

Po zapisaniu danych należy przejść do kartoteki asortymentowej i wybrać listę tabel za pomocą przycisku Tabele. Po podświetleniu naszej tabeli należy wybrać przycisk Przeglądaj tabelę lub klawisz Enter.

Tabela nie będzie zawierała rekordów, należy wybrać przycisk Dodaj aby otworzyć formularz dodawania nowych rekordów a następnie na nim wybrać kombinację Ctrl + Shif + F12 aby wyświetlić dostępne gniazda w kontekście tego formularza. Przy polu Dostawca widoczna będzie ikona folderu, która oznacza możliwość otwarcia kartoteki, zanim jednak zacznie on działać należy go oprogramować w gnieździe za pomocą gniazda Przycisk dla pola: Dostawca w sekcji Dodawanie lub poprawianie wiersza tabeli.

Do gniazda dodamy 2 zdarzenia, pierwsze to zdarzenie o nazwie WybórWierszaKartoteki (typ funkcji Kartoteka programu), które będzie odpowiadało za logikę otwarcia określonej kartoteki i przypisanie odpowiedniej wartości do zmiennej @IdWybraegoWierszaKartoteki.

Poniżej przedstawiono konfigurację tego zdarzenia. Nazwa kartoteki programu w tym przypadku to Kontrahenci a zmienna id_kontrahenta = 0 oznacza to, że po otwarciu ma nie być podświetlony konkretny wybrany rekord tylko domyślnie pierwszy z listy.

Drugie zdarzenie to zdarzenie o nazwie KS_PodajNazweKontrahentaZgniazda (typ funkcji Procedura SQL), zdarzenie to oczekuje, że na serwerze utworzona zostanie procedura składowana o nazwie KS_PodajNazweKontrahentaZgniazda, procedura przyjmuje 2 parametry, jeden to @IdWybranegoWierszaKartoteki (typu IN) a drugi to @Dostawca (typu OUTPUT). Wartość zmiennej @IdWybranegoWierszaKartoteki będzie automatycznie zainicjowana po zdarzeniu pierwszym, zmienna output @Dostawca będzie zainicjowana dopiero w procedurze. Polega to na tym, że należy z odpowiedniej tabeli odczytać odpowiednią kolumnę to tej zmiennej dla określonego rekordu. Numer rekordu determinuje właśnie zmienna @IdWybranegoWierszaKartoteki, który trzeba przyrównać do odpowiedniego identyfikatora, w naszym przypadku sprowadza się to do zapytania umieszczonego w procedurze w postaci:

select @dostawca = nazwa_pelna from kontrahent with (nolock)
    where id_kontrahenta = @IdWybranegoWierszaKartoteki

Aby zmienna $Dostawca była widoczna, należy po zdefiniowaniu pierwszego zdarzenia (wybór kartoteki) dodać przykładowy wiersz, otwierając przy tym kartotekę programu a następnie ją zamykając, lub wykonując opcję Testuj wykonanie dla tego gniazda. Następnie należy zamknąć i uruchomić program ponownie aby zmienne zostały zainicjowane w formularzu.

Aby dodać odpowiednią procedurę należy wpisać jej nazwę do pola Nazwa a następnie wybrać przycisk Pokaż schemat procedury SQL i zastąpić kod:

if exists (select 1 from sysobjects where name = ‘MAGSRC_KS_PodajNazweKontrahentaZgniazda’ and type = ‘P’)

drop procedure MAGSRC_KS_PodajNazweKontrahentaZgniazda

go

create procedure MAGSRC_KS_PodajNazweKontrahentaZgniazda

@IdWybranegoWierszaKartoteki numeric, @DOSTAWCA varchar(255) OUTPUT

as

declare @errmsg varchar(255)

begin

set xact_abort on

set transaction isolation level REPEATABLE READ

begin transaction

select @errmsg = ‘Funkcja dodatkowa KS_PodajNazweKontrahentaZgniazda nie została jeszcze zdefiniowana!’

goto Error

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

go

do postaci:

if exists (select 1 from sysobjects where name = ‘MAGSRC_KS_PodajNazweKontrahentaZgniazda’ and type = ‘P’)

drop procedure MAGSRC_KS_PodajNazweKontrahentaZgniazda

go

create procedure MAGSRC_KS_PodajNazweKontrahentaZgniazda

@IdWybranegoWierszaKartoteki numeric, @DOSTAWCA varchar(255) OUTPUT

as

declare @errmsg varchar(255)

begin

select @dostawca = nazwa_pelna from kontrahent with (nolock)

where id_kontrahenta = @IdWybranegoWierszaKartoteki

end

go

Zmienne inicjowane z formularza, które są kontekstowe (dla danego formularza) mają znak $ poprzedzający, natomiast podczas definiowania procedury należy pamiętać iż wszystkie parametry w języku SQL określone są znakiem @ na początku nazwy zmiennej/parametru. Analogicznie zmienne globalne w systemie oznaczone są znakiem @ na liście zmiennych.

Wynikiem działania tych dwóch zdarzeń będzie w pierwszym kroku przypisanie odpowiedniej wartości do zmiennej, a w drugim przekazanie tej zmiennej jako filtr do procedury i przypisanie zawartości kolumny Nazwa_pelna tabeli kontrahent do zmiennej @Dostawca w procedurze a następnie zwrócenie jej do zmiennej $Dostawca w formularzu co poskutkuje wpisaniem wartości do pola formularza.

Nazwy zmiennych generowane są na podstawie pól zdefiniowanych w strukturze tabeli dodatkowej, więc zmieniając nazwę kolumny zmieni się także nazwa zmiennej jaką należy podawać w kodzie.