Inwentaryzator - logoInwentaryzator - logologo inwentaryzatorSą programy w których proces inwentaryzacji jest nieźle przemyślany, czasami nawet są do tego specjalne moduły, są też programy w których inwentaryzację (jakże ważny element prowadzenia działalności gospodarczej) producent potraktował po macoszemu albo i jeszcze gorzej.

Nie wiem jakie są Państwa spostrzeżenia ale według mnie w Symfonii inwentaryzacja zdecydowanie nie wyszła producentowi – i jest to bardzo delikatne określenie.

Dlatego jakiś czas temu napisałem naprawdę prostą aplikację dla jednego z moich większych klientów która mocno upraszcza cały ten proces a przede wszystkim przyspiesza zdecydowanie pracę. Główną zaletą aplikacji była praca wielostanowiskowa i automatyczne sumowanie wpisanych danych. Program ma też zdecydowaną wadę – w zasadzie muszę być obecny przy jego użytkowaniu (lub ktoś kto choć trochę się na nim zna). Taki był cel. Program skrócił proces inwentaryzacji w dużym sklepie z artykułami motoryzacyjnymi z 20 godzin do 4. Klient jest wyjątkowo zadowolony, paręnaście osób przez 20 godzin to są spore koszty a i sklep nieczynny też przynosi straty. Nawet swego czasu opublikowałem ten program na swojej stronie do bezpłatnego wykorzystania ale szczerze to nie bardzo polecam jego używania. Sprawuje on się w miarę dobrze tylko tam gdzie sprzedaje się towary za pomocą kodów kreskowych a wiadomo jak to jest rozwiązane w Symfonii (następne traktowanie po macoszemu funkcjonalności która powinna być od 20 lat).

Do tematu wróciłem. Powstała aplikacja Inwentaryzator, której zrzuty ekranowe prezentuje poniżej.

Na początek trochę o technicznych aspektach. Aplikacja napisana jest w Delphi 2010, jako silnik danych wykorzystałem Firebird. Aplikacja jest oczywiście wielostanowiskowa.

Po uruchomieniu programu musimy się zalogować do systemu, jest to ważne bo po pierwsze stworzyłem prosty system praw dostępu, po drugie każdy wpis inwentaryzacyjny jest rejestrowany (a dokładnie wprowadzona ilość, data wpisu, użytkownik i stanowisko komputerowe). Prawa dostępu zależą od tego w jakiej grupie znajduje się użytkownik a są to do wyboru: Administrator, Kierownik i Kasjer. Domyślacie się zapewne który z użytkowników może więcej.

No dobrze, rozpoczynamy pracę:
Obrazek

Na ekranie powitalnym programu Inwentaryzator musimy podać login i hasło. Jest także checkbox którego włączenie spowoduje że program zapamięta ostatniego użytkownika prawidłowo zalogowanego i wystarczy wtedy wpisać hasło. Jest to ułatwienie dla użytkowników którzy samodzielnie na danym stanowisku komputerowym obsługują aplikację.

Między polami możemy przechodzić klikając myszką co jest oczywiste oraz za pomocą klawiatury – ułatwienie dla użytkowników przyzwyczajonych do programów dosowych, oraz dla szybszej pracy.
Po podaniu prawidłowych danych możemy zalogować się do programu.

Ujrzymy ekran główny który jest centralnym miejscem do pracy:
Obrazek

Główne okno ma możliwość zmiany rozmiaru i położenia, dane te są także zapisywane na stanowisku w momencie kończenia aplikacji.

Omówię teraz główne elementy programu:

  • na górze znajduje się pasek menu, jego zawartość opiszę później,
  • poniżej jest pasek z informacją w jakich cenach przeprowadzana jest inwentaryzacja oraz informacja podsumowująca pozycji którą właśnie wyróżniliśmy na liście,
  • główną część okna zajmuje lista towarów, ze stopkami podsumowującymi kolumny z wartościami,
  • poniżej znajduje się podsumowanie całej inwentaryzacji,
  • ostatnim elementem jest tzw. StatusBar z informacjami kto jest zalogowany, z jakiej grupy jest użytkownik, jaki jest numer inwentaryzacji (program obsługuje wiele inwentaryzacji) oraz nazwa aktualnie wczytanej inwentaryzacji.

W górnym menu pierwsza pozycja to Program, zawiera jeden element Logowanie który pozwala na wywołanie ekranu logowania.
Ostatni element menu to Pomoc a w nim znajduje się wywołanie okna O programie w którym możemy odczytać wersje programu oraz właściciela licencji. To jest standard.
Teraz opiszę pozycję dokładniej, zacznę od tyłu. W menu Administracja znajduje się okno Ustawienia:
Obrazek

W którym można ustawić:
• skrót nazwy firmy (dane te są zapisane także w pliku licencyjnym ale dałem możliwość ich zmiany użytkownikowi),
• NIP firmy, te dane pochodzą z pliku licencji i nie można ich edytować,
• nazwa firmy w dwóch liniach (możliwość edycji przez użytkownika),
• ulica,
• kod pocztowy,
• miejscowość.
Dane te są zapisywane w bazie danych i są wspólne dla wszystkich stanowisk.

Poniżej można ustawić domyślne drukarki: dla drukowania raportów oraz osobną dla etykiet. Jest też informacyjnie podana domyślna nazwa drukarki w systemie

Następnym ustawieniem są domyślne foldery w których będzie poszukiwany plik wyeksportowany z Symfonii oraz ścieżka do pliku z gotową inwentaryzacja (folder inwentaryzacji w folderze firmy w Symfonii). Program Inwentaryzator ma ułatwiać pracę w maksymalny sposób, dlatego właśnie takie ułatwienia.

Ostatnim elementem jest ustawienie maksymalnej ilości towarów które chcemy jednocześnie wpisać. Zabezpiecza nas to przed wpisaniem jakiś kosmicznych ilości skanerem co się niestety zdarza.
Wszystkie te ustawienia są ustawieniami lokalnymi i zapisywane są w pliku ini.

Okno to może wywołać użytkownik o prawach Administrator.

Następnym ustawieniem są Użytkownicy:
Obrazek

W oknie tym widzimy wszystkich użytkowników programu, ich login, nazwę, zajmowane stanowisko i to czy są aktywni czy też nie.

Jako że użytkownicy mogą wpisywać dane do arkuszy inwentaryzacyjnych oczywistym jest że nie ma możliwości ich usunięcia z listy. Gdy nie chcemy aby dany użytkownik logował się do programu po prostu przestawiamy znacznik Aktywny na False.

Prawa dostępu do tego okna ma użytkownik o prawach Administrator.

Z okna tego możemy dopisać nowego użytkownika:
Obrazek

Wymaganymi polami jest Login i Hasło oraz Stanowisko. Login jest polem unikatowym i nie może to być słowo serwis. Jeśli chodzi o hasło to minimalna jego długości wynosi nie mniej niż 5 znaków. Przycisk Dodaj uaktywnia się gdy wszystkie pola są prawidłowo wypełnione.

Jest także możliwość edycji już istniejącego użytkownika:
Obrazek

Istnieją te same ograniczenia co przy dodawaniu nowego użytkownika. Dodatkowo możemy dezaktywować użytkownika oraz zmienić hasło w nowym oknie:
Obrazek

W menu Zarządzanie pierwszą pozycją jest Podsumowanie inwentaryzacji. Do okna tego mają dostęp użytkownicy o prawach Kierownik i oczywiście Administrator.
Obrazek

W oknie tym możemy podejrzeć lub wydrukować przefiltrowane dane. Potrzebne jest to do szybkiego wyszukiwania pominiętych pozycji w czasie spisu lub spisanych w ilościach mocno odbiegających od oczekiwań.

Funkcjonalność ta jeszcze nie jest ukończona!

Następną pozycją w menu jest Drukowania kart. Nad tą funkcjonalnością jeszcze nie pracowałem ale będzie dostępna w końcowej wersji programu.
Jej zadaniem będzie wydrukowanie list inwentaryzacyjnych które będzie można rozdać pracownikom. Na tych listach będzie nazwa towaru, spodziewana ilość (możliwość wyłączenia tego pola), cena detaliczna, miejsce na wpisanie policzonej ilości i kod kreskowy (jeśli jest prawidłowy) w formie pasków i cyfr.

Listy takie będą sortowane w wybrany przez użytkownika sposób. Gdy listy wrócą do obsługi, wystarczy posortować listę w ten sam sposób jak na liście i ustawić się na pierwszej pozycji z listy, reszta pójdzie już bardzo szybko.

Następna pozycją w menu są Inwentaryzacje:
Obrazek

Jest to bardzo ważny element programu. To tutaj otwieramy nowe inwentaryzacje, ustalamy ich parametry i zamykamy istniejące.

Jak pisałem program ma możliwość obsługi wielu inwentaryzacji, z tym że w danym momencie tylko jednej.

W oknie widzimy id inwentaryzacji nadawane automatycznie, jej datę, nazwę (opis) dla łatwiejszego rozróżnienia, wiemy kto ją utworzył i w jakich cenach będzie liczona inwentaryzacja. Do wyboru są: ceny zakupu netto i ceny sprzedaży brutto.

Tutaj należy się małe wytłumaczenie. Założeniem tego programu jest pomoc w policzeniu towarów a nie zastępowanie Symfonii, dlatego ustawienie to należy traktować bardziej jako pomoc a nie wyznacznik. Chodzi o to że jak w sklepie mamy etykiety towarowe z cenami sprzedaży brutto to znacznie wygodniej jest robić inwentaryzację w tych właśnie cenach ponieważ łatwiej jest rozpoznać towar (gdy są wątpliwości). Racjonalne miejsce do robienia inwentaryzacji w cenach zakupu netto widzę w jakimś magazynie wewnętrznym a i to jest naciągana teoria. W każdym bądź razie jest taka możliwość.

W tym samym oknie widzimy także podsumowania inwentaryzacji, z tym że wartości tzw. systemowe (obliczone z importowanych plików z Symfonii) uaktualniają się w momencie importu plików a wartości spisane wyliczane są w momencie zakańczania inwentaryzacji.

Inwentaryzacje mają swoje statusy. Status Nowa otrzymuje utworzona inwentaryzacja która jeszcze nie miała zaimportowanego pliku z danymi. Aby importować dane do inwentaryzacji należy ją otworzyć. W danym momencie tylko jedna inwentaryzacja może mieć status Otwarta, jeżeli istnieje inna otwarta inwentaryzacja należy ją najpierw zamknąć.

Zamknięte inwentaryzacje można otwierać.

Inwentaryzacje można także usuwać. Wszystkie opcje związane z inwentaryzacją wywołujemy prawym klawiszem myszy ustawiając się na interesującej nas inwentaryzacji. Oczywiście dostęp do tych opcji ma tylko użytkownik o prawach Administrator.
Obrazek

Operacje Otwierania i zamykania inwentaryzacji powinny być robione gdy inne stanowiska nie pracują.

Aby utworzyć nową inwentaryzację wciskamy przycisk Nowa, otwiera się okno:
Obrazek

W którym ustawiamy datę inwentaryzacji, wybieramy w jakich cenach będzie przeprowadzana i wpisujemy jakiś opis dla lepszego rozeznania. Wybranie cen ma znaczenie dla procesu spisywania, program będzie podawał wybrane ceny w kalkulatorach podsumowujących.

Następnym menu jest Eksport a w nim pozycja Eksport arkusza. Opcja ta nie jest jeszcze ukończona. Jak można się domyśleć funkcjonalność ta będzie eksportowała inwentaryzację do systemu Symfonia (tylko zamknięte inwentaryzacje będzie można wyeksportować).

W menu Import mamy możliwość importowania plików wygenerowanych przez system Symfonia:
Obrazek

Najważniejsze, importujemy pliki do aktualnie otwartej inwentaryzacji!

Na górze znajduje się (będzie się znajdować) krótka podpowiedź jak ustawić Symfonię aby wyeksportować plik. Jest to zrobione dla tego że inwentaryzacje najczęściej wykonuje się rzadko i bardzo często pracownicy po prostu nie pamiętają co maja zrobić.

Poniżej możemy za pomocą dyskietki wybrać plik który wyeksportowaliśmy z Symfonii (system podpowie folder zgodnie z ustawieniami). Po wybraniu pliku program poinformuje nas ile pozycji zostało znalezionych w pliku. Jest też informacja do której inwentaryzacji zostaną dopisane pozycje.

Na dole możemy zdecydować co robić z pozycjami które powtarzają się, do wyboru mamy Aktualizuj kartoteki oraz Dopisz kartoteki do spisu.

Jest to bardzo ważne pytanie bo program inaczej będzie reagował na pozycję która ma już w spisie.

W pierwszym przypadku, czyli Aktualizuj kartoteki, powtórzona pozycja zaktualizuje nazwę, ceny i stan w arkuszu inwentaryzacyjnym (oczywiście już spisana ilość nie będzie zmieniona).

W drugim przypadku program zaktualizuje nazwę, ceny ale do aktualnego stanu systemowego dodać ten z pliku eksportowego. Spisane ilości jak poprzednio nie będą zmienione.

Przejdźmy teraz do głównego okna programu. Na górze poniżej menu znajduje się okno z informacja w jakich cenach jest robiona inwentaryzacja i podsumowaniem pozycji na której jesteśmy ustawieni:
Obrazek

Z okna dowiadujemy się ile sztuk towaru jest wg systemu komputerowego, ile mamy spisane do tej pory, jakie są ceny towaru (tutaj właśnie ceny wyświetlane są w zależności w jakich robimy inwentaryzacje), wartości w tych cenach no i najważniejsze jakie są różnice czyli bilans pozycji w cenie netto i brutto. Wartości ujemne wskazują na niedobory a dodatnie na nadwyżki (jak w całym programie).

Poniżej tego okienka jest główna lista towarów:
Obrazek

Po uruchomieniu programu dane są posortowane kolumną Kod towaru. Wszystkie kolumny można sortować rosnąco i malejąco. Sortowanie to ma znaczenie ponieważ program ma możliwość wyszukiwania pozycji poprzez pisanie początku nazwy i właśnie to wyszukiwanie realizowane jest po kolumnie która jest aktualnie sortowana. Polega to na tym że gdy zaczynamy pisać poszukiwana frazę, program ustawia kursor w tabeli na pierwsze pasujące dane, u góry pojawia się także okienko w którym widzimy wpisywaną frazę:
Obrazek

Aby zakończyć poszukiwanie wystarczy skasować znaki lub wcisnąć klawisz ESC.

Gdybyśmy chcieli wyszukać towar po frazie z wnętrza nazwy możemy użyć klawisz F3, pojawi się wtedy dodatkowe okienko:
Obrazek

W okienku tym mamy ważny checkbox: Wyszukiwanie dynamiczne, po jego włączeniu każdy wpisany znak filtruje listę towarów w sposób dynamiczny czyli natychmiastowo. Użycie takie sposobu wyszukiwania polecam użytkownikom szybkich komputerów i szybkich sieci, zresztą każdy może spróbować sam. Kliknięcie tego checkbox-a jest zapamiętywane lokalnie.

Wyszukiwanie to powoduje nie ustawianie się znacznika na wyszukanej pozycji a filtrowanie listy towarów i pozostawienie tylko pasujących. Wyszukiwanie jest prowadzone w polach: Kod towaru, Nazwa towaru, Kod kreskowy.

Może zastanawiać się nad polem ID towaru na liście pozycji, można nim sortować dane ale nie jest ono za bardzo przydatne bo dane w nim zawarte nie są normalnie widoczne w Symfonii, jest to po prostu indeks pozycji towarowej w bazie danych.

Wprowadzanie danych do spisu jest bardzo proste, po zaznaczeniu interesującej nas pozycji (myszą, klawiszami kursora, wyszukiwaniem po początku nazwy lub przez F3) klikamy na tą pozycje lub szybciej naciskamy enter i wyświetla się okno do aktualizacji danych:
Obrazek

W oknie tym mamy do uzupełnienia tylko jedną wartość: ilość policzonego towaru. Możemy wpisać jednorazowo maksimum tego co umożliwiliśmy w ustawieniach programu. Gdyby się okazało że chcemy odjąć od spisu błędnie policzoną pozycję wystarczy że przed wartością podamy znak minus. Oczywiście cały czas obowiązują nas ograniczenia ilościowe.
W oknie tym mamy kilka istotnych informacji jak:
• kod produktu,
• jego nazwę (tutaj cały czas się zastanawiam nad importem pełnej nazwy produktu ze względu na to że w Symfonii nazwa pełna jest zapisywana w bazie notatek i można wpisać bardzo długie łańcuchy znaków, najgorsze jest to że można tam wpisywać znaki sterujące jak enter),
• stan towaru w systemie (zaimportowany plikami),
• cena netto i brutto (zakupu lub sprzedaży w zależności jak robimy inwentaryzację),
• wartość netto i brutto (ta sama zasada),
• informację ile pozycji spisano do tej pory,
• jaki jest aktualny bilans w sztukach i złotówkach (zasada ceny zakupu / sprzedaży).

Zatwierdzamy wprowadzone dane poprzez kliknięcie klawisza Dodaj (zmienia się nazwa na Odejmij gdy wpisujemy wartości ujemne) lub po prostu klawiszem enter.

Aktualizacja danych jest natychmiastowa także w podsumowaniu inwentaryzacji które cały czas jest widoczne w okienku poniżej spisu towarów:
Obrazek

Okno to jest podobne do okna podsumowującego towar (nad spisem towarów) z tym że tutaj mamy podsumowanie całej inwentaryzacji.

Jeśli chodzi o pracę wielostanowiskową długo myślałem nad sposobem odświeżania danych na listach. Oczywiście najlepszym rozwiązaniem byłoby odświeżanie online po każdej zmianie danych w bazie. Z mojego jednak doświadczenia wiem że inwentaryzacja to nie jest sprzedaż i ilość operacji (szczególnie na wielu stanowiskach jednocześnie) jest dość duża. Takie odświeżanie zdecydowanie zmniejszyłoby wydajność programu. Postanowiłem że odświeżanie danych będzie następowało po kliknięciu w którąkolwiek kolumnę (sortowanie) oraz przy zapisie ilości do bazy.

Według mnie proces inwentaryzacji ma polegać na jak najszybszym policzeniu i wpisaniu danych a dopiero później gdy następuje etap poszukiwania braków najczęściej już używamy jednego komputera a reszta pracowników poszukuje zaginionych towarów. Dla nich właśnie zostaną wydrukowane listy z odpowiednio ustawionym filtrowaniem aby nie zajmowali się brakami za kilka złotych a pozycjami na których naprawdę jest duża strata (lub superata przez najprędzej błędne wpisanie danych).

Pozostaje ostatnia kwestia – odpowiedzialność za wpisane dane. Po to właśnie jest okno z pełna historią wpisów każdego towaru. Aby wywołać to okno należy wybrać towar i pod prawym klawiszem myszy wygrać Historia pozycji lub nacisnąć skrót klawiszowy CTRL+H
Obrazek

W oknie tym mamy zarejestrowane wszystkie wpisy dla danej pozycji a dokładnie, datę wpisu, ilość jaka została wpisana (także ze znakiem minus), kto dokonał wpisu i na jakim stanowisku komputerowym.

W przypadku gdy dana pozycja mocno odbiega od oczekiwać zawsze można przejrzeć historie wpisów i ustalić kto popełnił błąd.

Wersja demo powstanie najpewniej w okolicy dwóch / trzech tygodni, najpewniej będzie bez instalatora ale to nie powinno sprawiać problemów. Program powinien pracować na Windowsach od wersji XP do 10, 32 i 64 bitowych. Baza danych to jak pisałem Firebird w wersji 32-bitowej którą należy zainstalować na wybranym komputerze w sieci (chyba że już jest dostępna w sieci to można użyć „obcej” instalacji). Na zaporze należy „puścić” port 3050 (standardowy port firebirda). W folderze programu znajduje sie prosty programik do konfiguracji połączenia z bazą danych, można go użyć lub po prostu zedytować plik baza.ini w którym są wpisane ustawienia połączenia z bazą. Jak ktoś miał kontakt z Firebirdem to od razu będzie wiedział o co chodzi.
Program będzie drukował pewne raporty, formularze będą stworzone za pomocą Fast Report-a i najpewniej będzie możliwość ich edycji bezpośrednio w programie.

Poniżej film przedstawiający program w czasie działania:

Nowości w programie:

  • na głównej liście towarów, przyciśnięcie klawisz Ctrl i obracanie kółkiem myszki zmienia wielkość znaków.

Demo programu Inwentaryzator (w archiwum znajdują się wszystkie potrzebne pliki programu poza silnikiem bazy danych oraz instrukcje instalacji, przygotowania programu Symfonia i importu danych).

32 bitowy silnik bazy danych Firebird pod Windows

64 bitowy silnik bazy danych Firebird pod Windows