Skrypt do generowania raportów cyklicznych

Napięte nici osnowy na krosnach tkackich

Zestawienie robione ręcznie co miesiąc jest robione tak samo tylko wtedy, gdy robi je ta sama osoba. Skrypt usuwa oba warunki.

Zakres dat wyliczany

„Poprzedni miesiąc" liczony przez skrypt, nie wpisywany ręcznie. Wpisywanie dat jest najczęstszym źródłem raportu za niewłaściwy okres.

Zakres trzeba opisać jednoznacznie: czy dzień końcowy wchodzi do wyniku, według której daty liczymy dokument — wystawienia, sprzedaży czy zapłaty — i co się dzieje z korektami wystawionymi w kolejnym okresie. Dwa raporty liczone różnie nigdy się nie zgodzą, a spór o to, który jest prawidłowy, zajmuje więcej czasu niż samo zestawienie.

Kompletność danych

Raport za miesiąc uruchomiony pierwszego dnia następnego może nie objąć dokumentów wprowadzanych z opóźnieniem. Warto uzgodnić moment odcięcia.

Bezpieczniejsze jest przesunięcie uruchomienia o kilka dni niż tłumaczenie różnicy przy każdym zamknięciu okresu. Jeśli raport musi wyjść pierwszego, powinien wprost zaznaczać, że jest wstępny.

Osobna sprawa to raport liczony z kilku źródeł. Jeśli jedno z nich aktualizuje się w innym rytmie, zestawienie miesza dane z dwóch momentów. Wtedy skrypt powinien najpierw sprawdzić, czy wszystkie źródła są gotowe, i wstrzymać się, zamiast wysyłać wynik niepełny.

Format wyniku

Arkusz, gdy odbiorca będzie liczył dalej. Dokument do druku, gdy zestawienie jest ostateczne. Wysyłanie obu na wszelki wypadek mnoży wersje.

W nagłówku warto umieścić zakres dat, moment wygenerowania i źródło danych. Zestawienie bez tych informacji po tygodniu leży w skrzynce jako plik, o którym nikt nie wie, czego dotyczy.

Nazwa pliku powinna zawierać okres, a nie datę wysyłki. Kilkanaście załączników o tej samej nazwie w jednej skrzynce to gwarancja pomyłki przy odszukiwaniu właściwego miesiąca.

Odbiorcy w konfiguracji

Lista adresów poza kodem skryptu. Zmiana odbiorcy nie powinna wymagać zmiany narzędzia.

Jeśli raport zawiera dane osobowe albo wynagrodzenia, wysyłka pocztą nie zawsze jest właściwa. Alternatywą jest zapis do katalogu z ograniczonym dostępem i powiadomienie o gotowym pliku. Przy odejściu pracownika lista odbiorców jest wtedy jednym miejscem do poprawienia, a nie kilkoma zadaniami do przeszukania.

Powiadomienie o pustym wyniku

Raport bez danych może oznaczać spokojny okres albo awarię źródła. Skrypt powinien to rozróżniać i sygnalizować drugą sytuację.

Najprostsze rozwiązanie to porównanie z poprzednim okresem. Wynik zerowy tam, gdzie zwykle są setki pozycji, to sygnał o problemie ze źródłem, a nie wniosek biznesowy. Podobnie działa kontrola sum kontrolnych opisana w tekście o kontroli poprawności danych.

Archiwum

Wygenerowane zestawienia zapisywane w jednym miejscu z datą. Odtwarzanie raportu sprzed roku bywa niemożliwe, gdy dane w międzyczasie się zmieniły.

Archiwum rozstrzyga też spory o to, co pokazywał raport w dniu decyzji. Samo zadanie musi mieć przy tym blokadę uruchomienia równoległego i zapis czasu wykonania — zasady wpinania takich narzędzi opisuje tekst o zadaniach cyklicznych i harmonogramie.