Stosunkowo często na forum pojawiają się projekty, których zadaniem jest utworzenie grafiku pracy, służby czy zmian. Przyglądając się tym projektom, zauważyłem, że często autorzy mają problem z automatycznym wygenerowaniem dni dla wybranego miesiąca.
Dlatego przygotowałem przykładowy projekt, który dla wybranego miesiąca w roku generuje liczby porządkowe dla wszystkich dni występujących w danym miesiącu. W tym przykładowym rozwiązaniu oznaczam wyróżnieniem dni wolne od pracy. Rozwiązanie uwzględnia dni ustawowo wolne w Polsce, pozwala dodać także inne dni wolne. Ponadto można oznaczyć opcję, czy soboty mają być traktowane jako dni robocze, czy wolne.
Skoroszyt składa się z dwóch arkuszy. Arkusza "Grafik" zawierającego wygenerowany grafik dla konkretnego miesiąca i arkusza "Roboczy", który zawiera pomocnicze informacje.
Arkusz "Roboczy".
W komórce $Roboczy.B1 należy wstawić rok, dla którego grafik będzie obowiązywał.
W komórce $Roboczy.C1 (komórka ta ma przypisaną nazwę "soboty") należy wstawić cokolwiek innego niż 0 (uwaga: komórka pusta jest traktowana tak, jakby zawierała 0) aby grafik uznał, że soboty też są dniami wolnymi.
W części "Dni wolne od pracy" znajduje się wykaz dni wolnych. Święta zależne od Wielkanocy są wyznaczane automatycznie na podstawie podanego roku. Jednym z takich dni są Zielone Świątki. To święto zawsze wypada w niedzielę, która i tak jest dniem wolnym, więc nie znajduje się w tym wykazie. Daty pozostałych świąt są wyznaczane na podstawie dnia, miesiąca i roku. W tym obszarze przewidziałem trzy dodatkowe pozycje opisane jako "Inny" pozwalające podać "prywatne" dni wolne, np. imieniny prezesa albo Dzień Górnika. Obszar zawierający wyznaczone tutaj daty ma przypisaną nazwę "święta".
Obszar o nazwie "miesiące" zawiera nazwy miesięcy, które będą użyte w arkuszu "Grafik" podczas wybierania miesiąca dla grafiku.
Arkusz "Roboczy" zawiera także wiersz roboczy, w którym na podstawie wskazanego roku oraz wybranego miesiąca, generowane są daty 31 kolejnych dni od początku wybranego miesiąca. Komórki te zawierają daty tych dni, natomiast wyświetlane są jako wynik formatowania daty do ukazywania tylko numeru dnia.
Arkusz "Roboczy" jest arkuszem chronionym, w którym można wpisywać dane tylko w obszarze zaznaczonym żółtym tłem. Ochrona nie jest objęta hasłem.
Arkusz "Grafik".
W tym arkuszu odtwarzany jest rok wskazany w arkuszu "Roboczy". W komórce $Grafik.B2 należy wpisać nazwę miesiąca. Komórka ma przypisaną właściwość "Poprawność danych" pozwalającą na wybór nazwy miesiąca z rozwijanej listy.
Wiersze 7. i 8. zawierają daty dni przypisane tylko do wybranego miesiąca. Daty po 28. dniu są wyznaczane formułami powodującymi ukrycie dni, których dany miesiąc nie ma. Daty z wierszy 7. i 8. są prezentowane przez zastosowanie formatowania daty jako numeru porządkowego dnia (wiersz 7.) i nazwy dnia tygodnia (wiersz 8.).
W tym arkuszu zastosowałem formatowanie warunkowe polegające na tym, że kolumny odpowiadające dniom wolnym (w tym przykładzie do wiersza 15.) są wyróżnione. Formatowanie warunkowe sprawdza kolejno: czy data dnia znajduje się w wykazie "święta", czy data dnia jest 7. dniem tygodnia (niedzielą), czy data dnia jest 6. dniem tygodnia (sobotą) i jednocześnie sobota ma być dniem wolnym.
Mam nadzieję, że ten przykład przyda się przy tworzeniu własnych rozwiązań. Uwaga: W załączonym pliku nieopatrznie usunąłem z komórki B1 arkusza "Grafik" formułę =$Roboczy.B1, więc rok wpisany w tej komórce nie zmieni się gdy w arkuszu "Roboczy" zostanie podany nowy rok. Należy to poprawić w swoich kopiach. Chociaż teraz wydaje mi się, że wygodniej byłoby, gdyby wymagany rok był wpisywany od razu do arkusza "Grafik" i zawartość tej komórki była wykorzystana w formułach.
Aby tak to zrobić, należy wyciąć zawartość komórki Roboczy.B1 (CTRL+X) i wkleić ją do komórki B1 w arkuszu "Grafik" (CTRL+V).
Nowy plik po modyfikacjach.
Przygotowany w LibreOffice Calc w. 7.5.9
- Arkusz "Roboczy" zmienił nazwę na "Ustawienia".
- Dodałem tworzony automatycznie wykaz niedziel handlowych w roku.
- W związku z tym pojawiła się także możliwość zaznaczenia, czy te niedziele mają być wyróżnione w grafiku. Do wyróżnienia stosowany jest styl "Dobry".
- Dodałem wykaz skrótowych nazw dni tygodnia. Użytkownik musi samodzielnie wpisać, jak te dni będą prezentowane w grafiku. Pierwsza nazwa dotyczy poniedziałku.
- Dodałem wykaz symboli dostępnych do umieszczenia na grafiku. Przewidziałem miejsce dla 11. Tylko symbole z tej listy mogą być wstawione w grafiku.
- Arkusz "Grafik"
- Scalona komórka B1 służy do wpisania roku.
- Obszar objęty formatowaniem warunkowym obejmuje 34 wiersze, dwa nagłówkowe i 32 przeznaczone na dane o pracownikach.
- Skrótowe nazwy dnia tygodnia są teraz pobierane z arkusza "Ustawienia". Skrócone nazwy dni tygodnia pobierane z aplikacji miały różną długość, od trzyznakowych (np. wt.) do sześcioznakowych (niedz.).
- Wszystkie komórki grafiku dotyczące dnia obsługuje opcja sprawdzania poprawności danych, z rozwijaną listą symboli do wstawienia.
- Wszystkie komórki poza komórkami B1, B2 i obszarem A9:AF40 mają status komórek chronionych.