# Jedna pozycja kontraktu, kilka okien edycji: każdy ekran zapisuje własny zestaw kolumn

> W opisywanym wdrożeniu jedna pozycja kontraktu ma sześć okien edycji. Każde okno zapisuje własną część pól, a nagłówek pozycji pokazuje tylko do odczytu.

Adres strony: https://magazyn.softwarestudio.com.pl/jedna-pozycja-kontraktu-edytowana-w-kilku-oknach/

---

W opisywanym wdrożeniu edycja pozycji w osobnych oknach zastępuje jeden długi formularz kontraktu. Kontrakty i ich pozycje są tłem tej strony i pochodzą z systemu zewnętrznego, a my opisujemy wyłącznie edycję pozycji w programie. Operator wybiera w zestawieniu przycisk „Edycja” i otwiera ekran, który zapisze tylko swoją część pozycji.
W opisywanym wdrożeniu jedna pozycja kontraktu nie ma jednego długiego formularza, tylko kilka ekranów edycji otwieranych z różnych zestawień. Każdy ekran odczytuje pozycję po tym samym numerze i zapisuje własny zestaw kolumn, a nagłówek pozycji pokazuje tylko do odczytu.

## Jedna pozycja ma kilka ekranów edycji zamiast jednego długiego formularza

Według konfiguracji opisywanego wdrożenia zestawienia pozycji kontraktu mają przycisk „Edycja”, który otwiera własny ekran. Zestawienie główne ma przyciski edycji pozycji i nagłówka kontraktu. Ekrany otwierają się w oknie rozwiniętym na cały ekran.

Ekran odczytuje numer pozycji z adresu jako klucz, a zapisy ekranów aktualizują wiersz o tym numerze. Pasek każdego ekranu ma te same cztery przyciski: „Notatki” i „Pliki” oraz „Załączniki” i „Zdjęcia”, wszystkie z numerem pozycji jako kluczem. Ekran edycji otwiera się z zestawienia, w którym operator wybrał pozycję, a numer tej pozycji staje się kluczem odczytu.

Według konfiguracji opisywanego wdrożenia pozycję czytają trzy zapytania odczytu: jedno obsługuje dwa ekrany, drugie trzy ekrany, a trzecie ekran kosztów. Każdy z sześciu ekranów ma własne zapytanie zapisu. Zapis aktualizuje jedną lub dwie tabele przez numer pozycji.

## Każdy ekran pokazuje nagłówek pozycji tylko do odczytu

Każdy ekran ma własną kopię nagłówka tylko do odczytu, w której są między innymi klient i numer seryjny. Nagłówek służy informacji: operator widzi w nim, której pozycji dotyczy ekran, ale edytować można tylko dane w sekcji pozycji. Według dokumentacji wdrożenia sekcja pozycji jest jedyną częścią ekranu przeznaczoną do edycji, a poniżej przytaczamy jej zdanie z dokumentacji.

> „Samej edycji podlegają wyłącznie dane w sekcji Pozycja kontraktu.” (dokumentacja wdrożenia)

Cytat dotyczy polecenia „Edycja” ekranu pozycji, a nie wszystkich ekranów. Zapis ekranu pozycji wysyła tylko pola z sekcji edytowalnej. Sekcja informacyjna nie jest wysyłana przy zapisie, więc z tego ekranu nie da się zmienić nagłówka.

## Zapis każdego ekranu dotyka własnego zestawu kolumn

Zapis ekranu aktualizuje wiersz o numerze pozycji, a każdy ekran ma własne zapytanie zapisu i własny zestaw kolumn. Poniższa tabela pokazuje, co zapisują poszczególne ekrany pozycji. Tabela opisuje pięć z sześciu ekranów.

| Ekran | Co zapisuje |
| --- | --- |
| Ekran pozycji | Status i lokalizacja egzemplarza oraz numer seryjny i terminy |
| Ekran rozliczeń | Dane rozliczeniowe pozycji |
| Ekran zwolnienia | Dane zwolnienia i uwagi |
| Ekran protokołu | Dane protokołu |
| Ekran kosztów | Ceny i rabaty oraz sumy kosztów składowych |

Według konfiguracji opisywanego wdrożenia zapis dopisuje także wpis w historii pozycji. Część pól wylicza baza przy zapisie, a pole wyliczane jest na ekranie zablokowane. Podział przebiega po ekranach i zestawieniach, z których się je otwiera.

## Koszty składowe mają osobne okno z listą wpisów

W ekranie kosztów pola sum są zablokowane, a przy każdym stoi przycisk „Zapisz koszty”, który otwiera okno „Modyfikacja pozycji” z listą wpisów. Wpis kosztu ma opis do 50 znaków i wartość. Zapis dopisuje wiersz, a tabela w oknie się odświeża.

Na makiecie u góry stoją pola „Opis pozycji” i „Wartość” z przyciskiem „Dodaj”. Pod nimi po lewej leży tabela wpisów, a po prawej nazwa grupy kosztów z przyciskiem „Zapisz koszty”, bez pola sumy.

Operator widzi więc dwa momenty: wpis pojawia się w tabeli od razu po zapisie, a pole pozycji dostaje nową sumę dopiero po naciśnięciu „Zapisz koszty”. Usunięcie wpisu ma pytanie i oznacza wpis jako usunięty, a wiersz zostaje w bazie. Przycisk „Zapisz koszty” w oknie sumuje aktywne wpisy danej grupy do pola pozycji i oznacza wpisy jako zapisane. Okno się zamyka, a ekran odczytuje sumy z bazy. Usunięcie wpisu zmienia więc sumę dopiero przy kolejnym „Zapisz koszty”.

Według konfiguracji opisywanego wdrożenia ten sam wzorzec obsługuje okno „Korekty”. Lista numerów faktur korygujących stoi w tej samej tabeli wpisów, a odróżnia ją typ wpisu. Liczba wpisów trafia do zablokowanego pola.

Przykład (dane wymyślone): dwóch operatorów pracuje na tej samej pozycji, jeden na ekranie pozycji, a drugi na ekranie kosztów. Kolejne kroki pokazuje lista numerowana.

1. Operator A otwiera ekran pozycji kontraktu i zmienia status oraz lokalizację egzemplarza.
2. W tym samym czasie Operator B otwiera ekran kosztów tej samej pozycji i dopisuje do jednej grupy dwa wpisy.
3. Naciska „Zapisz koszty”, a pole sumy pokazuje sumę obu wpisów.
4. Operator A zapisuje swój ekran. Ekran zapisuje własne kolumny, między innymi status i lokalizację, więc wpisy kosztów Operatora B zostają.
5. Przyciski paska „Notatki” i „Pliki” używają w obu ekranach numeru pozycji jako klucza, więc oba ekrany pracują na notatkach i plikach tej samej pozycji.
6. Gdy Operator B usunie później jeden wpis, suma w pozycji zmieni się dopiero po kolejnym „Zapisz koszty”.

## Nagłówek kontraktu i pozycja są dwoma różnymi zapisami

Nagłówek kontraktu ma osobny ekran, a zestawienie główne otwiera go własnym przyciskiem. Według dokumentacji wdrożenia edycja kontraktu jest osobnym poleceniem, odrębnym od edycji pozycji.

- Zapis pozycji. Ekran odczytuje numer pozycji i aktualizuje wiersz o tym numerze.
- Zapis nagłówka kontraktu. Osobny ekran otwierany własnym przyciskiem w zestawieniu głównym.

Inne ekrany opisywanego wdrożenia opisujemy w artykułach o [zleceniu transportowym w oddziałach](https://www.softwarestudio.com.pl/magazyn-wms-net/zlecenie-transportowe-zaklada-dokumenty-w-oddzialach/) i o [protokole stanu przy wydaniu](https://system.wms.net.pl/protokol-stanu-dziedziczy-po-poprzednim/). Zapis nagłówka bez zerowania numerów na pozycjach opisujemy na stronie T-SQL o [zapisie nagłówka bez naruszania pozycji](https://sql.server.net.pl/sql-server/naglowek-nie-nadpisuje-pozycji/).

## Co uwzględnić, projektując podział na okna

Reguły opisane wyżej przekładają się na cztery decyzje przy podziale formularza na ekrany. Usuwanie pól z jednego formularza opisujemy w artykule o [odchudzaniu formularza](https://system.wms.net.pl/przyjecie-pz-ze-zlecenia-formularz-bez-zbednych-pol/), a tutaj zestawiamy tylko skutki podziału.

- Kopia nagłówka. Każdy ekran ma własną kopię nagłówka tylko do odczytu.
- Klucz pozycji. Ekrany i przyciski paska używają numeru pozycji jako klucza.
- Wartości wyliczane. Część pól wylicza baza przy zapisie, a pole wyliczane jest zablokowane na ekranie.
- Odświeżenie sumy. Usunięcie wpisu kosztu zmienia sumę dopiero przy kolejnym zapisie kosztów.

Dla operatora oznacza to cztery obserwacje. Nagłówek widzi w każdym ekranie osobno, a numer pozycji łączy ekrany i przyciski paska. Pola wyliczane przez bazę widzi jako zablokowane, więc ich nie wpisuje. Sumę kosztów składowych widzi zmienioną dopiero po zapisie kosztów, także po usunięciu wpisu.

## Pytania do analizy

Przed wdrożeniem podobnego rozwiązania zadajemy cztery pytania. To pytania do czytelnika, a nie fakty o opisywanym wdrożeniu.

1. Które pola rekordu zmieniają różne osoby i czy da się je rozdzielić na osobne ekrany bez wspólnych kolumn?
2. Czy nagłówek rekordu ma być kopiowany do każdego ekranu, czy czytany z jednego wspólnego źródła?
3. Które sumy mają powstawać z listy wpisów, a które z pól wpisywanych ręcznie?
4. Jak ekran ma informować o wyniku zapisu, jeśli zamyka się po otrzymaniu odpowiedzi?

## Pytania i odpowiedzi o edycji pozycji kontraktu w osobnych oknach

## Słownik pojęć o edycji pozycji kontraktu w osobnych oknach

Terminy używane przez operatora i wdrożeniowca, gdy jedna pozycja kontraktu ma kilka ekranów edycji.
