dpinw_insert.aspx

Transakcja dpinw_insert.aspx wykorzystywana w programie Studio magazyn WMS.net służy do wygenerowania arkusza inwentaryzacyjnego.

Transakcja dpinw_insert.aspx wykorzystywana w programie Studio magazyn WMS.net służy do wygenerowania arkusza inwentaryzacyjnego.

Opis działania

Po wywołaniu transakcji zostanie wyświetlone okno

Inwentaryzacja może zostać wygenerowana dla wybranego magazynu, dla wskazanej lokalizacji, wybranego asortymentu lub kontrahenta. W zależności od wybranego rodzaju inwentaryzacji zostanie wyświetlone okno z wyborem stosownej informacji. W przypadku inwentaryzacji wg kontrahenta zostanie wyświetlone okno jak poniżej

Co ważne w polu Kontrahent należy wskazać kontrahenta, dla którego chcemy dokonać spisu z natury. Po wskazaniu kontrahenta należy uruchomić przycisk ZAPISZ, by arkusz został wygenerowany. Przed wygenerowaniem arkusza system dokona kontroli, czy wszystkie dokumenty skojarzone z wybranym kontrahentem są zatwierdzone (nie ma dokumentów w buforze). Jeżeli weryfikacja przebiegnie pomyślnie zostanie wygenerowany arkusz, co zostanie potwierdzone komunikatem:

Kartoteki lokalizacji, które występują w arkuszu zostają zablokowane, by nie można było na nich dokonywać obrotów. Lokalizacje zostaną ponownie odblokowane po zamknięciu arkusza inwentaryzacji.

Uruchomienie

Transakcję wywołujemy bez wskazywania dodatkowych parametrów, a więc np. studiosystemdemo.softwarestudio.com.pl/role_wms/dpinw_insert.aspx

Transakcja dpinw_insert.aspx

Poniższy opis przedstawia mechanizm działania rozwiązania, które umożliwia generowanie arkusza inwentaryzacyjnego oraz zapis wyników do bazy danych. Rozwiązanie składa się z części klienta – napisanej w JavaScript z użyciem jQuery – oraz części serwerowej w technologii ASP.NET (C#). Poniżej przedstawiono szczegółowy opis poszczególnych etapów działania systemu.


1. Inicjalizacja i pobieranie danych sesji

JavaScript – $(document).ready oraz DocumentReady()

  • Inicjalizacja zmiennych
    Na początku definiowane są zmienne globalne, takie jak cRodzaj, ssSessionId, gcRefno, cZrodloUser i cUserRole, które będą wykorzystywane w trakcie działania aplikacji.
  • Pobranie identyfikatora sesji i referencyjnego numeru dokumentu
    Po załadowaniu dokumentu wywoływana jest funkcja DocumentReady(). W tej funkcji zmienne ssSessionId oraz gcRefno są inicjowane na podstawie wartości przekazanych przez serwer (przez tablicę ssVar).
  • Weryfikacja danych użytkownika
    Funkcja wywołuje metodę ssDataSQL (prawdopodobnie abstrakcję umożliwiającą wykonanie zapytania SQL), aby pobrać dane użytkownika. Jeżeli dane nie zostaną znalezione, użytkownik otrzymuje komunikat o braku danych, a dalsze wykonywanie funkcji zostaje przerwane.
  • Ustalenie roli użytkownika
    Po pobraniu danych użytkownika, zmienna cUserRole jest ustawiana. W przypadku, gdy użytkownik posiada rolę „SuperVisor”, zmienna ta przyjmuje dodatkową wartość z pola SUPERVISOR.
  • Konfiguracja interfejsu
    Następnie wykonywana jest funkcja ssTlumaczenie(), która prawdopodobnie odpowiada za tłumaczenie elementów interfejsu użytkownika. Początkowo ukrywane są przyciski akcji, a widoczny zostaje główny kontener formularza.

2. Generowanie arkusza inwentaryzacyjnego

Funkcja ThisArkusz(cTypInw)

  • Wybór rodzaju inwentaryzacji
    Funkcja ThisArkusz przyjmuje jako parametr typ arkusza (cTypInw), który może przyjmować wartości:
    • "mag" – arkusz dla wybranego magazynu,
    • "lok" – arkusz dla lokalizacji magazynowej,
    • "aso" – arkusz dla asortymentu,
    • "ktr" – arkusz dla kontrahenta.
  • Dynamiczne generowanie formularza
    Na podstawie wybranego typu, formularz jest budowany dynamicznie w zmiennej cTekst. W zależności od typu arkusza, w formularzu wyświetlane są odpowiednie nagłówki oraz informacje o oddziale, magazynie lub innych parametrach użytkownika.
  • Wstawienie kontrolki wyboru
    Dla każdego typu arkusza generowany jest element kontrolki (WebComboFly), skonfigurowany do pobierania danych z odpowiedniego źródła (np. dane magazynowe, lokalizacyjne, asortymentowe lub kontrahentów). Warto zauważyć, że kontrolki te wspierają mechanizm wyszukiwania (placeholder: „wpisz 2 znaki, aby wyszukać”), co ułatwia odnalezienie odpowiedniej pozycji w dużym zbiorze danych.
  • Konfiguracja kontrolek
    Po wstawieniu formularza do DOM, wszystkie elementy oznaczone klasą WebComboFly są konfigurowane przy użyciu funkcji KonfigurujjqxComboFly, co umożliwia ich poprawne działanie (np. inicjalizację kontrolki jQWidgets).

3. Zapis arkusza inwentaryzacyjnego

Funkcja btnZapisz()

  • Walidacja formularza
    Przed wykonaniem zapisu, wykonywana jest walidacja formularza przy użyciu funkcji JqxTestWypelnienia, która sprawdza, czy wszystkie wymagane pola zostały uzupełnione.
  • Pobranie wybranej wartości
    Z kontrolki wyboru (identyfikowanej przez #ssID) pobierana jest wartość, która reprezentuje identyfikator wybranej pozycji (np. numer magazynu lub identyfikator lokalizacji).
  • Wywołanie metody serwerowej
    Następnie, przy użyciu mechanizmu PageMethods, wywoływana jest metoda serwerowa SaveForm, przekazując identyfikator sesji, numer referencyjny, wybraną wartość oraz rodzaj arkusza. W trakcie zapisu wyświetlany jest komunikat z animacją oczekiwania (preloader).
  • Obsługa wyniku
    Po wykonaniu operacji na serwerze, funkcja ThisSuccessAdd interpretuje wynik. W zależności od zwróconej treści (czy zawiera komunikat o błędzie czy potwierdzenie poprawnego wykonania operacji), użytkownik otrzymuje odpowiedni komunikat:
    • W przypadku błędu – komunikat informujący o problemie oraz ilości pozycji blokujących zapis.
    • W przypadku sukcesu – informację o poprawnym przygotowaniu arkusza inwentaryzacyjnego i zablokowaniu lokalizacji.

4. Logika serwerowa (C# ASP.NET)

Inicjalizacja strony (dpinw_insert.aspx.cs)

  • Inicjalizacja parametrów
    W metodzie Page_Load, przy pierwszym wywołaniu strony (nie jest to postback), generowany jest unikalny numer referencyjny (gcRefno) oraz identyfikator sesji (ssSessionId). Dodatkowo, z danych użytkownika (przechowywanych w sesji) pobierane są informacje takie jak oddział, magazyn, numer MPK, rola systemowa oraz nazwa użytkownika.
  • Utworzenie sesji
    Utworzony jest słownik z parametrami, który jest zapisywany w sesji – pozwala to na późniejszą weryfikację zgodności sesji przy zapisie arkusza.

Metoda SaveForm

  • Weryfikacja sesji
    Metoda statyczna SaveForm pobiera parametry sesji oraz dane użytkownika, weryfikując zgodność przekazanego numeru referencyjnego z danymi zapisanymi w sesji. W przypadku niezgodności, metoda zwraca komunikat o błędzie.
  • Wywołanie zapisu arkusza
    W zależności od przekazanego rodzaju arkusza (cRodzaj), wykonywana jest metoda ZapiszInwenture, która realizuje główną logikę zapisu danych.

Metoda ZapiszInwenture

  • Sprawdzenie blokady dokumentów
    Na początku wykonywane są zapytania do bazy danych w celu sprawdzenia, czy dla wybranego magazynu, lokalizacji, asortymentu lub kontrahenta nie istnieją już dokumenty w buforze (pole ACH równe 0). Jeśli takie dokumenty występują, zapis arkusza zostaje zablokowany, a użytkownik otrzymuje komunikat wraz z informacją o liczbie pozycji.
  • Pobranie danych inwentaryzacyjnych
    W zależności od rodzaju inwentaryzacji, konstruowane jest zapytanie SQL do procedury lub widoku wms_inwentura, które pobiera dane niezbędne do sporządzenia arkusza.
  • Iteracyjne wstawianie danych
    Dla każdego wiersza danych pobranych z bazy wykonywana jest iteracyjna operacja wstawiania (INSERT) do odpowiedniej tabeli (np. dpinw). Każdy rekord wstawiany jest przy użyciu parametrów SQL, które są dynamicznie aktualizowane dla poszczególnych pozycji. Numeracja pozycji oraz stronicowanie (przy zwiększaniu numeru strony po przekroczeniu 14 pozycji) są realizowane wewnątrz pętli.
  • Blokada lokalizacji i asortymentu
    Po wykonaniu wstawień wykonywane są aktualizacje (UPDATE) w tabelach magazynowych, lokalizacyjnych i asortymentowych, które blokują dalsze operacje na tych rekordach (ustawienie pola ACH na odpowiednią wartość).
  • Rejestracja w historii
    Na zakończenie operacji wykonywane jest wstawienie rekordu do tabeli _HISTORIA, co pozwala na zachowanie informacji o utworzeniu nowego arkusza inwentaryzacyjnego oraz liczbie pozycji.
  • Obsługa wyjątków
    Cały proces wstawiania danych opakowany jest w blok try-catch. W przypadku wystąpienia błędu, wykonywana jest procedura logowania błędów, a metoda zwraca komunikat o niepowodzeniu operacji.

Podsumowanie

Przedstawiony kod realizuje kompleksowy proces przygotowania arkusza inwentaryzacyjnego, łącząc interaktywność po stronie klienta (dynamiczne generowanie formularza, walidacja, komunikacja AJAX) z zaawansowaną logiką serwerową odpowiedzialną za pobieranie danych, walidację stanu magazynu oraz wstawianie rekordów do bazy danych. Mechanizm ten gwarantuje, że operacja zostanie przeprowadzona tylko wtedy, gdy nie występują blokady wynikające z dokumentów w buforze, a wszystkie operacje zapisu są odpowiednio rejestrowane, co umożliwia śledzenie aktywności użytkowników.

Skrypt dpinw_insert.js

1. Inicjalizacja i wczytywanie strony

Po załadowaniu dokumentu przeglądarki funkcja $(document).ready() wywołuje metodę DocumentReady(). Skrypt natychmiast pobiera dane sesji oraz przygotowuje interfejs do dalszych operacji. Na początku kod przypisuje wartości z tablicy ssVar do zmiennych globalnych ssSessionId oraz gcRefno, dzięki czemu system uzyskuje unikalny identyfikator sesji oraz numer referencyjny umożliwiający dalszą komunikację z serwerem.

2. Weryfikacja danych użytkownika

Następnie skrypt wykonuje zapytanie do bazy danych za pomocą funkcji ssDataSQL, które pobiera dane użytkownika i zapisuje je w zmiennej cZrodloUser. Jeżeli długość otrzymanej tablicy wynosi 0, skrypt wyświetla komunikat alert o braku danych użytkownika i przerywa dalsze wykonywanie funkcji. Następnie kod przypisuje wartość pola ROLA do zmiennej cUserRole i, jeśli rola wynosi „SuperVisor”, zmienia ją na wartość pola SUPERVISOR. Po ustaleniu roli kod wywołuje funkcję ssTlumaczenie(), która aktualizuje elementy interfejsu zgodnie z ustawionym językiem, a następnie ukrywa elementy oznaczone klasą mybutton i wyświetla główny kontener formularza o identyfikatorze Container.

3. Generowanie formularza arkusza inwentaryzacyjnego

Funkcja ThisArkusz(cTypInw) uruchamia się po wybraniu przez użytkownika jednego z typów inwentaryzacji. Kod przypisuje wartość parametru cTypInw do zmiennej globalnej cRodzaj i ukrywa element odpowiadający wyborowi rodzaju inwentaryzacji (rowRodzajInw). Następnie system wyświetla przyciski akcji. Skrypt buduje zmienną cTekst, w której krok po kroku dodaje elementy HTML. W zależności od wybranego typu (np. "mag", "lok", "aso" lub "ktr") kod dodaje odpowiedni nagłówek oraz informację o oddziale, a dla typów innych niż magazyn dodaje także informację o magazynie. Dzięki temu użytkownik otrzymuje przejrzysty formularz odpowiadający wybranemu rodzajowi inwentaryzacji.

W dalszej części system wstawia kontrolkę WebComboFly, która umożliwia wybór pozycji (np. magazynu, lokalizacji, asortymentu lub kontrahenta). System przypisuje kontrolce odpowiednie atrybuty, takie jak szerokość, identyfikator danych (data-ssUID) oraz parametry wyszukiwania (ssplaceholder). Po wstawieniu dynamicznego formularza kod konfiguruje wszystkie elementy oznaczone klasą WebComboFly przy użyciu funkcji KonfigurujjqxComboFly(), co zapewnia poprawne działanie kontrolki i gotowość interfejsu do interakcji.

4. Zapis arkusza inwentaryzacyjnego

Funkcja btnZapisz() odpowiada za zapis przygotowanego arkusza. Skrypt najpierw przeprowadza walidację formularza, wywołując funkcję JqxTestWypelnienia z odpowiednimi parametrami, aby upewnić się, że wszystkie wymagane pola zostały uzupełnione. Następnie kod pobiera wartość kontrolki wyboru za pomocą metody jqxComboBox('val'), co ustala identyfikator wybranej pozycji. Po tym system wyświetla komunikat z animacją oczekiwania i wywołuje metodę PageMethods.SaveForm(), przekazując identyfikator sesji, numer referencyjny, wybraną wartość oraz rodzaj arkusza. Dzięki temu system komunikuje się z serwerem i przekazuje dane do dalszego przetwarzania.

5. Obsługa wyniku zapisu

Funkcja ThisSuccessAdd(wynik) reaguje na odpowiedź zwróconą przez serwer. Jeśli wynik zawiera treść komunikatu, kod generuje pole komunikatu o ważnym komunikacie, wyświetlając informację o błędzie oraz przycisk umożliwiający anulowanie operacji. Jeśli wynik nie zawiera komunikatu, system generuje komunikat potwierdzający przygotowanie arkusza i informuje użytkownika o zablokowaniu lokalizacji. Na końcu funkcji kod wywołuje metodę ssTlumaczenie(), która aktualizuje treści interfejsu w zależności od ustawionego języka.

Podsumowanie

Skrypt dpinw_insert.js inicjuje interfejs, weryfikuje dane użytkownika oraz dynamicznie generuje formularz arkusza inwentaryzacyjnego. Następnie system przeprowadza walidację danych, pobiera wybraną pozycję i wysyła dane do serwera przy użyciu metody PageMethods.SaveForm(). Ostatecznie system wyświetla komunikat o wyniku operacji, informując użytkownika o powodzeniu lub błędzie. Dzięki zastosowaniu słów łączących zdania oraz strony czynnej, opis przedstawia przejrzysty i spójny mechanizm działania, który zapewnia bezpieczeństwo i poprawność wykonywanych operacji.

Czytaj więcej:

  • Usunięcie inwentaryzacji – jqs_dpinw_delete.js

    Skrypt wykorzystywany w programie WMS.net umożliwiający użytkownikowi na usunięcie dokumentu inwentaryzacji, który znajduje się w buforze.

    Transakcje WMS

  • dpinw_zamknij.aspx

    Transakcja dpinw_zamknij.aspx wykorzystywana w programie Studio Magazyn WMS.net służy do zamknięcia arkusza inwentaryzacji oraz wygenerowania dokumentów różnic inwentaryzacyjnych.

    Transakcje WMS

  • dpmag_insert_mxj.aspx

    Transakcja dpmag_insert_mxj.aspx wykorzystywana jest w programie Studio Magazyn WMS.net do dopisania dokumentu tworzenia palety mix. Opis dzialania Po wywołaniu transakcji dpmag_insert_mxj.aspx wyświetlone zostanie okno dopisania dokumentu: W polu asortyment należy wskazać rodzaj przesuwanego towaru. Wyszukiwanie w polu ułatwi funkcja filtrowania. Po wpisaniu w polu ciągu dowolnych znaków lista zostanie zawężona do rekordów zawierających wpisane znaki. W polu Lokalizacja

    Transakcje WMS

  • jqs_dpinw_insert

    Skrypt jqs_dpinw_insert.js realizuje kompleksowy proces dopisywania inwentaryzacji. Na początku inicjuje i konfiguruje interfejs, pobiera dane użytkownika oraz generuje dynamiczny formularz na podstawie wybranego rodzaju inwentaryzacji. Następnie system aktywnie waliduje dane, sprawdza istnienie dokumentów w buforze oraz weryfikuje, czy dana inwentaryzacja nie została już wcześniej dopisana.

    Transakcje WMS

  • jqs_dpinw_zamknij

    Skrypt jqs_dpinw_zamknij.js realizuje kompleksowy proces zamykania inwentaryzacji. Na początku dynamicznie generuje interfejs, wyświetlając dane inwentaryzacji, takie jak numer i data. Następnie skrypt sprawdza, czy inwentaryzacja zawiera pozycje bez bilansu otwarcia, co może blokować zamknięcie.

    Transakcje WMS