Poprawka, która zniknęła
Handlowiec otwiera kartę klienta, żeby dopisać nowy numer telefonu. W tej samej chwili tę samą kartę otwiera pani Ewa z biura obsługi i zmienia osobę kontaktową. Handlowiec zapisuje pierwszy, pani Ewa kilka minut po nim.
Jeśli aplikacja tego nie pilnuje, zapisuje się karta w takiej postaci, w jakiej pani Ewa ją otworzyła, czyli jeszcze bez nowego telefonu. Poprawka handlowca znika, choć przez kilka minut była w systemie. O tym, że coś się stało, firma dowiaduje się od klienta, który pyta, dlaczego nikt nie oddzwonił na nowy numer.
Tak samo bywa z umową, którą poprawiają dwie osoby, i z cennikiem. Skutki nie zostają w jednym dokumencie. Zła cena trafia do ofert i faktur, a potem do raportów.
Wspólna podstawa: sprawdzenie wersji
Niezależnie od tego, który sposób wybierzemy, żaden zapis nie powinien po cichu nadpisać cudzej pracy. Dlatego dobrze zbudowana aplikacja pamięta, w której wersji jest dokument, czyli ile razy go już zmieniano. Kto otwiera dokument do edycji, pracuje na konkretnej wersji. Przy zapisie aplikacja sprawdza, czy dokument nadal jest w tej wersji. Jeśli w międzyczasie zmienił go ktoś inny, zapis nie nadpisuje tamtej zmiany.
Trzy sposoby opisane niżej nie zastępują tego sprawdzenia. Dokładają do niego inne zabezpieczenia, a aplikacja i tak na końcu sprawdza wersję.
Trzy sposoby obok siebie
Zapis z wersją
Nikt nikogo nie blokuje. Każdy może otworzyć dokument i go zmieniać, a dopiero przy zapisie aplikacja sprawdza wersję, czyli czy ktoś jej nie wyprzedził. Ten sposób zakłada, że kolizje zdarzają się rzadko.
Jeśli ktoś jednak wyprzedził, druga osoba nie traci swojej pracy i nie dostaje niezrozumiałego błędu. Dowiaduje się, że dokument w międzyczasie się zmienił, i widzi, co się zmieniło. Sama decyduje, czy nanieść swoje poprawki na nowszą wersję, czy z nich zrezygnować. Program nie zgaduje za nią, bo tylko ona wie, co poprawiała.
Tak najlepiej działa kartoteka klientów. Dziesięć osób dopisuje telefony i poprawia adresy, a szansa, że dwie zmienią tego samego klienta w tej samej minucie, jest niewielka. Blokada przy każdym otwarciu tylko by przeszkadzała, bo ktoś otworzy kartę, pójdzie na spotkanie, a reszta będzie czekać.
Blokada z prośbą o zwolnienie
Przy niektórych dokumentach porównywanie zmian po fakcie byłoby uciążliwe. Prawnik przez godzinę przeredagowuje umowę, przesuwa paragrafy i dopisuje załącznik. Gdyby w tym czasie handlowiec zmienił w niej termin płatności, łączenie dwóch wersji byłoby żmudne i łatwo coś przeoczyć.
Wtedy lepiej sprawdza się blokada. Kto zaczyna edycję, zakłada blokadę. Inni mogą dokument czytać i widzą, kto nad nim pracuje, ale nie mogą go zmieniać. Kto pilnie potrzebuje coś poprawić, prosi w aplikacji o zwolnienie. Osoba z blokadą widzi prośbę od razu, może zapisać swoją pracę i oddać dokument.
Żeby blokada pomagała, a nie przeszkadzała, musi spełniać kilka warunków. Najważniejsze, że wygasa sama po pewnym czasie bezczynności. Bez tego jedna zapomniana karta przeglądarki potrafi zatrzymać pracę całego działu. Kierownik albo administrator powinien móc zdjąć blokadę, a takie zdjęcie zostaje w historii dokumentu razem z tym, kto je zrobił.
Wniosek o zmianę
Trzeci sposób pasuje tam, gdzie kontroli wymaga sama zmiana. Przykładem jest cennik. Ceny trafiają do każdej oferty i faktury, więc w wielu firmach zmienia je osoba, która za nie odpowiada. Handlowiec może zauważyć nieaktualną cenę, ale decyzję podejmuje kierownik sprzedaży.
Formularz zapisuje wtedy wniosek. Dokument zostaje bez zmian, dopóki ktoś wniosku nie zatwierdzi. Wniosek zawiera listę zmian z wartością dotychczasową i proponowaną przy każdym polu, uzasadnienie oraz informację, na której wersji dokumentu go oparto. Trafia do osoby, która go zatwierdza albo odrzuca.
Najtrudniej jest wtedy, gdy wniosek czeka, a dokument w tym czasie się zmienia. Ktoś złożył wniosek o podniesienie ceny jednego produktu, a zanim kierownik go zatwierdził, ktoś inny zmienił opis innej pozycji. Odrzucanie każdego takiego wniosku byłoby bezpieczne, ale męczące, bo w żywym cenniku ludzie składaliby te same wnioski kilka razy.
Rozsądniej jest sprawdzić, czy zmiany się pokrywają. Jeśli wniosek dotyczy innych pól niż te, które zmieniono w międzyczasie, można go nanieść na nowszą wersję. Jeśli ktoś zmienił tę samą cenę, wniosek wraca do autora razem z różnicą, a autor decyduje, czy jego propozycja jest nadal aktualna.
Nie każde pole musi przechodzić akceptację. Notatkę handlowca przy pozycji cennika można zapisywać od razu.
Kiedy który
Najlepiej ustalić to na początku budowy aplikacji: co ma się stać, gdy dwie osoby zmieniają tę samą rzecz w tym samym czasie. Jeśli nie ma szczególnego powodu, dobrym wyborem jest zapis z wersją. Blokada albo wniosek przydają się tam, gdzie dokument tego wymaga.
| zapis z wersją | blokada | wniosek o zmianę | |
|---|---|---|---|
| kiedy pasuje | dużo drobnych zmian, kolizje rzadkie | jedna osoba długo pracuje nad dokumentem | zmiana wymaga decyzji kogoś odpowiedzialnego |
| przykład | kartoteka klientów | umowa w redakcji | cennik, podpisana umowa |
| co się dzieje przy kolizji | druga osoba widzi różnicę i sama decyduje | do kolizji nie dochodzi, inni czekają albo proszą o zwolnienie | wniosek wraca do autora, jeśli dotyczy tych samych pól |
| koszt | prawie żaden | ktoś czasem czeka | każda zmiana czeka na zatwierdzenie |
Ten sam dokument może potrzebować różnych sposobów na różnych etapach. Umowę w szkicu można edytować swobodnie albo z blokadą. Po podpisaniu nie powinna się już zmieniać zwykłą edycją, a poprawka powinna przejść akceptację. Dlatego dobrze, gdy sposób zapisu da się zmienić w ustawieniach dokumentu, bez przeróbki programu.
Wypróbować na symulacji
Wszystkie trzy sposoby i przykład bez zabezpieczenia można wypróbować na symulacji. Ten sam dokument zmieniają tam kolega z działu katalogu i osoba, która ogląda pokaz, a historia pokazuje każdy krok.