Transakcja KNKON_GRID.ASPX wyświetla tabelę wszystkich kartotek kontrahentów według ustawień domyślnych. Z tej tabeli operator otwiera kartę dostawcy albo odbiorcy. Zapisane w karcie dane trafiają potem do dokumentów magazynowych.
Spis treści
- Tabela kontrahentów otwierana z menu
- Dane w karcie kontrahenta
- Stronicowanie dużej tabeli kontrahentów
- Dezaktywacja zamiast usuwania kontrahenta
- Uprawnienia do kartoteki kontrahentów
- Kontrahent w dokumentach magazynowych
- Kontrahenci przy integracji z ERP
- Pytania i odpowiedzi o transakcję KNKON_GRID.ASPX
- Glosariusz pojęć związanych z kartoteką kontrahentów
Tabela kontrahentów otwierana z menu
Program magazynowy pozwala wywoływać z menu elementy zwane transakcjami. Transakcja to dowolne wywołanie elementu witryny internetowej programu albo dowolna inna strona z innej witryny. KNKON_GRID.ASPX jest wpisem, który otwiera siatkę z listą kontrahentów.
| Część nazwy | Znaczenie |
|---|---|
| KNKON | człon nazwy wskazujący kartotekę kontrahentów |
| _GRID | widok tabelaryczny z listą wierszy |
| .ASPX | rozszerzenie strony aplikacji internetowej ASP.NET |
| Ustawienia domyślne | lista obejmuje wszystkie kartoteki kontrahentów |
Administrator programu ma wgląd w tabelę dostępnych transakcji. Może ją edytować oraz dopisywać wpisy, a na jej podstawie konfiguruje menu użytkowników. Ten sam mechanizm opisuje strona o transakcji MENU_DPMAG.ASPX, a warianty prezentacji menu strona o konfiguracji menu.
Dane w karcie kontrahenta
Karta kontrahenta ma trzy zakładki. Każda zbiera inny rodzaj informacji, więc operator wypełnia tylko te, które są potrzebne w danym momencie. Kartoteki towarowe i kontrahentów omawia strona o kartotekach magazynowych.
| Zakładka | Przykładowe pola | Zastosowanie |
|---|---|---|
| Dane ewidencyjne | nazwa i nazwa skrócona, adres, NIP, Regon, kraj, osoba kontaktowa, telefony, e-mail, pole Aktywne | identyfikacja firmy i dane teleadresowe |
| Dane uzupełniające | status, grupa, numer GLN, analityka, sposób wydawania i dostawy, warunki płatności, waluta, spedytor | parametry handlowe i logistyczne |
| Inne | nasz numer u klienta, handlowiec, godziny pracy, ubezpieczenie, e-mail autopowiadomienia, kolor | parametry operacyjne i powiadomienia |
Numer GLN jest niezbędny do integracji EDI, więc karta partnera objętego taką wymianą musi go zawierać. Pole Spedytor przypisuje domyślnego przewoźnika, a pole z kolorem wyróżnia kontrahenta na widokach magazynu.
Zakładka z parametrami handlowymi zawiera także listy wyboru. Sposób wydawania i dostawy oraz warunki płatności wybiera się z list. Dzięki liście dwa dokumenty dla tego samego klienta nie zawierają różnych zapisów tego samego warunku. Pole wyboru Cennik indywidualny włącza dedykowany cennik usług magazynowych dla danego kontrahenta.
Zakładka Inne zawiera dane, które operator rampy sprawdza przed przyjazdem pojazdu. Godziny pracy w formacie H:M - H:M wskazują, kiedy odbiorca przyjmuje towar. Adres e-mail autopowiadomienia konfiguruje automatyczne raporty dla klienta magazynu. Rodzaj ubezpieczenia razem z datą jego ważności pozwala pilnować terminów polis.
Stronicowanie dużej tabeli kontrahentów
Tabela wszystkich kartotek rośnie z każdym nowym klientem. Przy tysiącach wierszy przeglądarka nie powinna dostawać całego zbioru naraz, bo wydłuża to odpowiedź i zużywa pamięć serwera. Strona pobiera więc jedną porcję wierszy i dopiero na żądanie kolejną.
Poniższe zapytanie jest ilustracyjne i nie pokazuje kodu produktu. Wyszukuje aktywnych kontrahentów po początku nazwy skróconej i zwraca wskazaną stronę wyników.
CREATE INDEX IX_Kontrahenci_Nazwa
ON dbo.Kontrahenci (Aktywny, NazwaSkrocona) INCLUDE (NIP);
SELECT KontrahentId, NazwaSkrocona, NIP
FROM dbo.Kontrahenci
WHERE Aktywny = 1 AND NazwaSkrocona LIKE @Fraza + N'%'
ORDER BY NazwaSkrocona, KontrahentId
OFFSET (@Strona - 1) * @RozmiarStrony ROWS
FETCH NEXT @RozmiarStrony ROWS ONLY;
- Wzorzec bez wiodącego znaku. Fraza kończąca się znakiem % pozwala silnikowi użyć indeksu przez Index Seek, a wzorzec zaczynający się od % wymusza przeczytanie całej tabeli.
- Dodatkowa kolumna w ORDER BY. KontrahentId nadaje wierszom stały porządek, więc dwie strony nie powtórzą ani nie pominą wiersza o tej samej nazwie.
- OFFSET i FETCH. Klauzule pobierają wskazaną porcję wyników bez przepisywania zapytania dla każdej strony.
- INCLUDE (NIP). Kolumna dołączona do indeksu pozwala odpowiedzieć na zapytanie bez sięgania do tabeli.
Opcje indeksów opisuje dokumentacja CREATE INDEX w SQL Server, a sposób odczytu planu zapytania dokumentacja planów wykonania.
Operator często zna tylko fragment nazwy, a nie jej początek. Wzorzec ze znakiem % na początku nie wykorzysta wtedy indeksu, więc silnik przeczyta wszystkie wiersze. Przy kilku tysiącach kontrahentów różnica jest niezauważalna, a przy kilkuset tysiącach wierszy w tabeli historii wyraźna. Rozwiązaniem bywa osobna kolumna z nazwą w postaci uproszczonej albo wyszukiwanie po NIP, który ma stałą długość.
Reguła: filtr i sortowanie wykonuje baza danych, a nie przeglądarka. Pobranie wszystkich kartotek do pamięci strony i przeszukiwanie ich skryptem działa przy małej tabeli, a przestaje działać, gdy tabela urośnie.
Dezaktywacja zamiast usuwania kontrahenta
Kontrahent, który przestał być klientem, nie znika z bazy. Dokumenty przyjęć i wydań odwołują się do jego karty, więc usunięcie wiersza zniszczyłoby historię operacji. Baza chroni przed tym kluczem obcym: zapis dokumentu wskazuje identyfikator kontrahenta, a silnik odrzuca usunięcie karty, do której istnieją odwołania.
ALTER TABLE dbo.WydaniaNaglowki
ADD CONSTRAINT FK_Wydania_Kontrahenci
FOREIGN KEY (KontrahentId) REFERENCES dbo.Kontrahenci (KontrahentId);
UPDATE dbo.Kontrahenci SET Aktywny = 0 WHERE KontrahentId = @KontrahentId;
Przykład jest ilustracyjny i nie odwzorowuje schematu produktu. Pierwsza instrukcja tworzy ograniczenie, a druga wyłącza kartę bez naruszania historii. Dokumentacja kluczy obcych w SQL Server opisuje składnię i zachowanie przy usuwaniu.
- Pole Aktywne. Wyłączenie karty ukrywa kontrahenta przy wyborze w nowych dokumentach, a stare dokumenty pozostają czytelne.
- Dane historyczne. Raporty z poprzednich lat nadal pokazują nazwę i NIP kontrahenta z chwili wystawienia dokumentu.
Uprawnienia do kartoteki kontrahentów
Karta kontrahenta zawiera dane handlowe, które nie powinny być widoczne dla każdego użytkownika. Cennik indywidualny i warunki płatności interesują kierownika oraz dział handlowy, ale nie operatora terminala. Dlatego transakcja z tabelą kontrahentów jest przydzielana rolom, a nie wszystkim kontom.
Menu pokazuje użytkownikowi tylko te transakcje, które zostały mu nadane. Ukrycie pozycji nie wystarcza jednak jako jedyne zabezpieczenie, bo adres strony można wpisać ręcznie. Strona sprawdza więc uprawnienie przy każdym otwarciu. Podział ról omawia strona o rolach i użytkownikach w systemie WMS.
Kolor kontrahenta z zakładki Inne ułatwia odróżnienie klientów na widokach magazynu, gdy kilku z nich składuje towar w tych samych alejkach. Paleta obejmuje odcienie od 50 do 900 w kilku barwach, więc każdy klient dostaje wyraźny znacznik bez dodatkowej legendy.
Kontrahent w dokumentach magazynowych
Kartoteka kontrahentów jest źródłem pola Kontrahent w dokumentach. W zleceniu przyjęcia ZPZ pole podpowiada nazwę podczas pisania, a w zleceniu wydania ZWZ wskazuje odbiorcę towaru. Każda operacja magazynowa jest więc powiązana z konkretnym klientem lub dostawcą.
Powiązanie ma szczególne znaczenie w magazynie, który obsługuje wielu właścicieli towaru. Zasady takiej obsługi opisuje strona o magazynie klienta, a model rozliczeń strona o 3PL - co to jest. Dokumenty, w których pojawia się kontrahent, opisuje strona o dokumentach magazynowych.
Kontrahenci przy integracji z ERP
Kartoteka kontrahentów należy do pierwszych zbiorów, które wymienia się z systemem ERP. Wymiana dotyczy kartotek i dokumentów, a wśród nich danych kontrahentów, w trybie OnLine albo OffLine. Przy łączeniu dwóch baz najczęściej pojawiają się duplikaty, bo ten sam kontrahent bywa zapisany w obu systemach pod różną nazwą.
Najpewniejszym kluczem porównania jest NIP, a przy kontrahentach zagranicznych numer GLN. Zapytanie z grupowaniem po NIP wskazuje karty do scalenia jeszcze przed pierwszą wymianą. Integrację z SAP opisuje strona o integracji z SAP, a z Subiekt nexo PRO strona o integracji z Subiekt nexo PRO.
Duplikaty NIP przed pierwszą wymianą
Ten sam NIP zapisany z myślnikiem w jednej bazie i bez myślnika w drugiej wygląda jak dwie różne firmy. Porównanie wymaga więc normalizacji, czyli usunięcia znaków dodatkowych. Zapytanie poniżej jest ilustracyjne i wskazuje numery, które występują więcej niż raz.
SELECT REPLACE(REPLACE(NIP, '-', ''), ' ', '') AS NipZnormalizowany, COUNT(*) AS Liczba
FROM dbo.Kontrahenci
GROUP BY REPLACE(REPLACE(NIP, '-', ''), ' ', '')
HAVING COUNT(*) > 1;
Wynik niepusty trzeba przejrzeć ręcznie. Dwie karty o tym samym NIP bywają uzasadnione, na przykład gdy oddział ma osobny adres dostaw, ale w większości przypadków oznaczają błąd, który po wymianie z ERP rozmnoży się w obu systemach.
Częsty dostęp do tabeli kontrahentów można skrócić, zapisując transakcję w menu osobistym. Opisuje to strona o menu ulubionym. Pełny opis programu zawiera strona producenta program magazynowy.
Pytania i odpowiedzi o transakcję KNKON_GRID.ASPX
Wyświetla tabelę wszystkich kartotek kontrahentów według ustawień domyślnych. Z tej tabeli operator otwiera kartę wybranego kontrahenta.
Jest dowolnym wywołaniem elementu witryny programu albo dowolnej innej strony z innej witryny. Menu uruchamia takie transakcje, a administrator rejestruje je w tabeli dostępnych transakcji.
Karta ma trzy zakładki. Dane ewidencyjne zawierają identyfikację i adres, a dane uzupełniające parametry handlowe z numerem GLN. Zakładka Inne zawiera godziny pracy oraz adres e-mail autopowiadomień.
Jest identyfikatorem partnera w wymianie EDI. Bez niego automatyczna wymiana dokumentów z danym kontrahentem nie jest możliwa.
Przy tysiącach wierszy pobranie całego zbioru wydłuża odpowiedź strony i zużywa pamięć serwera. Stronicowanie po stronie bazy zwraca tylko jedną porcję wyników, a indeks na nazwie przyspiesza wyszukiwanie.
Glosariusz pojęć związanych z kartoteką kontrahentów
- KNKON_GRID.ASPX
- Transakcja programu magazynowego wyświetlająca tabelę kartotek kontrahentów według ustawień domyślnych.
- Kartoteka kontrahentów
- Zbiór kart dostawców i odbiorców z danymi identyfikacyjnymi i handlowymi, a także logistycznymi.
- Transakcja menu
- Wywołanie elementu witryny programu albo innej strony internetowej, uruchamiane z poziomu menu.
- GLN
- Globalny numer lokalizacji, który identyfikuje firmę lub miejsce w wymianie dokumentów EDI.
- EDI
- Elektroniczna wymiana dokumentów między systemami partnerów, w ustalonym formacie.
- Stronicowanie
- Pobieranie wyników zapytania w porcjach, z użyciem klauzul OFFSET i FETCH w T-SQL.
- Index Seek
- Operacja w planie wykonania, która odnajduje wiersze przez indeks zamiast czytać całą tabelę.
- Spedytor
- Pole w karcie kontrahenta, które przypisuje domyślnego przewoźnika.