Numeracja dokumentów: Różnice pomiędzy wersjami
Plaskowski (dyskusja | edycje) (Utworzył nową stronę „'''Numerowanie w Motławie można podzielić na trzy obszary:''' * '''NUMDOK''' - stary, dotyczący wyłącznie dokumenty oparte na tabelach `opng` i `zmng`; * '''NUMD…”) |
Plaskowski (dyskusja | edycje) |
||
(Nie pokazano 7 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 22: | Linia 22: | ||
''Tabela `operdoc` pozwala ustawiać parametry z dokładnością do rodzaju dokumentu czyli nie uwzględnia podrodzaju.'' | ''Tabela `operdoc` pozwala ustawiać parametry z dokładnością do rodzaju dokumentu czyli nie uwzględnia podrodzaju.'' | ||
− | |||
Linia 51: | Linia 50: | ||
Tabela numeratorów czyli ustawień `erp_obj_counters_masks`jest uniwersalna i pozwala zdefiniować dowolny numerator dla dowolnego pola z dowolnej tabeli. | Tabela numeratorów czyli ustawień `erp_obj_counters_masks`jest uniwersalna i pozwala zdefiniować dowolny numerator dla dowolnego pola z dowolnej tabeli. | ||
Nie ma tu ograniczenia do dwóch pól i dwóch tabel. | Nie ma tu ograniczenia do dwóch pól i dwóch tabel. | ||
+ | |||
+ | '''Zobacz także:''' [[Numeracja dokumentów#Numeratory | Numeratory]] | ||
+ | |||
+ | == DEFINICJE == | ||
+ | |||
+ | === Definicja numeratorów === | ||
+ | |||
+ | Każdy numerator określamy jako trójke atrybutów: typ, rodzaj i podrodzaj. | ||
+ | Typ numeratora jest zdefiniowany w tabeli `erp_obj_counters_def` i nazywany jest definicja danego numeratora. | ||
+ | Innymi słowy numeratory definiujemy w `erp_obj_counters_def` natomiast w `erp_obj_counters_masks` gromadzimy wszystkie możliwe wystąpienia rodzajowe danego numeratora (rodzaj, podrodzaj). | ||
+ | |||
+ | Co oprócz samej nazwy zawiera definicja numeratora? | ||
+ | |||
+ | Zawiera konieczne do automatycznego przetwarzania ustawienia: | ||
+ | *'''TableName''' - nazwa tabeli w której znajduje się pole numeru | ||
+ | *'''SQL_GetParams''' - SQL dla pobierania danych koniecznych do pobrania licznika i wypełnienia maski. | ||
+ | *'''SQL_UpdateNum''' - SQL dla wstawienie numeru do tabeli z pola TableName | ||
+ | *'''Disabled''' - określa czy definicja jest jeszcze używana. | ||
+ | |||
+ | ===SQL_GetParams === | ||
+ | SQL-ka dla pobierania danych koniecznych do pobrania licznika i wypełnienia maski. | ||
+ | |||
+ | '''Przykładowa sql-ka dla definicji “opng.nrdokfin”:''' | ||
+ | |||
+ | SELECT | ||
+ | n.nrdokfin AS _Number, | ||
+ | n.Rodzaj, 0 AS PodRodzaj, | ||
+ | IF(n.ZMagazynu != 0, n.ZMagazynu, n.DoMagazynu) AS _Res1, | ||
+ | n.DoMagazynu AS _Res2, | ||
+ | '' AS _ResGUID, | ||
+ | YEAR(n.DataWystaw) AS _NumYear, | ||
+ | MONTH(n.DataWystaw) AS _NumMonth, | ||
+ | DAY(n.DataWystaw) AS _NumDay, | ||
+ | n.RodzajDowodu AS _RodzajDowodu, | ||
+ | n.RV_ID AS _Rv_id, | ||
+ | n.UGrpGUID AS _UGrpGUID, | ||
+ | IFNULL(m1.symbol, '') AS _MGS, | ||
+ | IFNULL(m2.symbol, '') AS _MDS | ||
+ | FROM `#TABLENAME#` n | ||
+ | LEFT JOIN `Magazyny` m1_0 ON m1_0.IdnMagazynu = IF(n.ZMagazynu != 0, n.ZMagazynu, n.DoMagazynu) | ||
+ | LEFT JOIN `Magazyny` m1 ON m1.IdnMagazynu = m1_0.grupa | ||
+ | LEFT JOIN `Magazyny` m2_0 ON m2_0.IdnMagazynu = n.DoMagazynu | ||
+ | LEFT JOIN `Magazyny` m2 ON m2.IdnMagazynu = m2_0.grupa | ||
+ | WHERE | ||
+ | GUID = '#ID#' | ||
+ | INTO | ||
+ | @erp_obj_counters._Number, | ||
+ | @erp_obj_counters._Rodzaj, | ||
+ | @erp_obj_counters._PodRodzaj, | ||
+ | @erp_obj_counters._Res1, | ||
+ | @erp_obj_counters._Res2, | ||
+ | @erp_obj_counters._ResGUID, | ||
+ | @erp_obj_counters._NumYear, | ||
+ | @erp_obj_counters._NumMonth, | ||
+ | @erp_obj_counters._NumDay, | ||
+ | @erp_obj_counters._RodzajDowodu, | ||
+ | @erp_obj_counters._Rv_id, | ||
+ | @erp_obj_counters._UGrpGUID, | ||
+ | @erp_obj_counters._MGS, | ||
+ | @erp_obj_counters._MDS | ||
+ | ; | ||
+ | |||
+ | System automatycznie wykonuje to zapytanie aby otrzymać szereg zmiennych koniecznych do pobrania kolejnego numeru (dane do grupowania) oraz aby wypełnić maskę numeru. | ||
+ | |||
+ | '''UWAGA''' | ||
+ | |||
+ | ''W tabeli `erp_obj_counters_masks` również istnieje pole SQL_GetParams i jesli jest niepuste to jego zawartość jest wykonywana dla danego numeratora.'' | ||
+ | |||
+ | ===SQL_UpdateNum=== | ||
+ | |||
+ | |||
+ | Tę sql-ke system również wykonuje automatycznie. | ||
+ | Ustawia ona pole w określonej tabeli. Parametry #TABLENAME#,#NUMBER# są wypałniane są również automatycznie ze zmiennych i z ustawień. | ||
+ | '''PRZYKŁAD''' | ||
+ | UPDATE `#TABLENAME#` | ||
+ | SET | ||
+ | NrDokFin = '#NUMBER#' | ||
+ | WHERE | ||
+ | GUID = '#ID#' | ||
+ | AND (NrDokFin = '' OR #ALWAYS#) | ||
+ | ; | ||
+ | |||
+ | '''UWAGA''' | ||
+ | |||
+ | ''W tabeli `erp_obj_counters_masks` również istnieje pole SQL_UpdateNum i jesli jest niepuste to jego zawartość jest wykonywana dla danego numeratora.'' | ||
+ | |||
+ | === Numeratory === | ||
+ | |||
+ | Tabela `erp_obj_counters_masks`. Każdy rekord to inny numerator który zawiera wszystkie konieczne ustawienia dotyczące numeracji. | ||
Numeratory dzielimy wg.: | Numeratory dzielimy wg.: | ||
− | * typu | + | * typu numeratora (string - pozwala zdefiniować dowolną liczbę numertorów (np. nrdokfin, nrdokmag, etc) |
* rodzaju i | * rodzaju i | ||
* podrodzaju | * podrodzaju | ||
+ | |||
+ | Innymi słowy dla danej definicji (typu) numeratora określamy tu wszystkie rodzajowe warianty tej definicji. | ||
+ | Przykład, dla definicji (typu) numeratora “opng.nrdokmag” numeratorami będą wszystkie warianty: (rodzaj, podrodzaj) dla których ten typ numeratora ma sens (nie ma sensu np. dla dok. kasowego). | ||
Każdy numerator może być "przekierowany" na inny typ/rodzaj/podrodzaj np. numerator magazynowy dla faktury zakupu może być "przekierowany" na analogiczny numerator o rodzaju WZ. | Każdy numerator może być "przekierowany" na inny typ/rodzaj/podrodzaj np. numerator magazynowy dla faktury zakupu może być "przekierowany" na analogiczny numerator o rodzaju WZ. | ||
Linia 62: | Linia 153: | ||
* ustawić maskę, | * ustawić maskę, | ||
+ | [[Plik:MaskaNew.png]] | ||
* ustalić jak numerator będzie grupować numery (zasoby, rok, miesiąc, dzień) | * ustalić jak numerator będzie grupować numery (zasoby, rok, miesiąc, dzień) | ||
* ustalić zachowanie algorytmów przy przepisywaniu numerów do końcowych pól w tabelach. | * ustalić zachowanie algorytmów przy przepisywaniu numerów do końcowych pól w tabelach. | ||
Linia 71: | Linia 163: | ||
+ | ===POLA NUMERÓW=== | ||
− | + | Wartość numeru przechowywana jest za pomocą pola w określonej w numeratorze tabeli. | |
+ | Ale jeśli korzystamy z nowej numeracji to numer ten przechowywany jest również w tabeli `erp_obj_counters_values`. | ||
+ | Zawiera ona nie tylko cały numer ale i odpowiadający mu numer liczbowy z licznika. | ||
+ | Jeśli numer został nadany ręcznie to numer liczbowy jest nieokreślony. | ||
− | + | == AKTYWACJA I ZARZADZANIE NUMERACJA == | |
− | + | ||
− | + | ||
− | + | Aktywowanie nowej numeracji odbywa się na kilku poziomach. | |
− | + | === Aktywacja === | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Po pierwsze trzeba wiedzieć, że pełna nowa numeracja działa tylko dla dokumentów tworzonych w świecie E. | |
− | + | ||
− | + | Po drugie należy ustawić: | |
− | + | *zmienną globalną erp_obj_counters_values_e_1_rec z tabeli `_db_globals` na 1 | |
− | + | *zmienną IFDEF erp_obj_counters_values_e_1_rec na 1 | |
− | + | ||
− | + | Po trzecie należy ustalić które dokumenty z `opng` i `zmng` będą numerowane po nowemu. | |
− | + | ||
− | + | Umożliwia to etapowe włączanie kolejnych dokumentów. | |
− | + | ||
− | + | Włączanie/wyłączanie odbywa się w tabeli `operdoc_typy`. W polu counter - mamy możliwość ustawienia następujących wartości | |
− | + | ||
− | + | '''NUMDOK''' - pozostaw starą numerację albo | |
− | + | ||
− | + | '''OBJ_COUNTERS''' - nowa numeracja | |
− | + | ||
− | + | [[Plik:operdocIntNetCenter.png]] | |
− | + | ||
− | + | Należy zauważyć że mowa jest tylko i wyłącznie o numeracji dokumentów (które po staremu numerowane są w NUMDOK i NUMWEWN). | |
− | + | ||
− | + | Reasumując możemy uruchomić nową numerację tylko dla dokumentu WZ i MM nie zmieniając sposobu numeracji pozostałych operacji. Ale wymagane jest ustawienie odpowiednich flag i używanie wersji z edycją w świecie E. | |
− | + | ||
− | + | ===Kontrolki numerów w oknie edycji=== | |
− | + | ||
− | + | Jeśli dana operacja ma włączoną nową numerację to w oknie edycji nieco inaczej będzie wyglądały kontrolki numerów. | |
− | + | Dla danej operacji (rodzaj/podrodzaj) wszystkie numeratory będą reprezentowane przez kontrolki edycyjne - bedzie ich tyle ile numeratorów. | |
− | + | ||
− | + | '''Przykład''' - dla faktury zakupu będą to 3 typy numeratorów (opng.nrdokfin, opng.nrdokmag, opng.nrwewn). | |
− | + | ||
− | + | '''Każda z 3 kontrolek może być:''' | |
− | + | * wyszarzona (disabled) jeśli w danym numeratorze pole GUI_Ctrl_option zawiera “EditedNum” | |
− | + | * mieć po prawej przycisk do manualnego nadawania numeru kolejnego o ile GUI_Ctrl_option zawiera “ManualNum” | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | |||
'''UWAGA''' | '''UWAGA''' | ||
− | '' | + | Jeżeli dana operacja ma włączoną nową numerację to każdy typ numeratora będzie widoczny w oknie edycji - '''nie można włączać nowej numeracji z dokładnością do pojedynczego numeratora.''' |
− | + | [[Kategoria: Motława]] | |
− | + | [[Kategoria: HT]] | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Aktualna wersja na dzień 15:34, 11 lut 2015
Numerowanie w Motławie można podzielić na trzy obszary:
- NUMDOK - stary, dotyczący wyłącznie dokumenty oparte na tabelach `opng` i `zmng`;
- NUMDOK/COUNTER - przejściowy, oparty na nowym numeratorze `erp_obj_counters` oraz
- COUNTER - zupełnie nowy oparty na systemie uniwersalnego numerowania.
Spis treści
OBSZARY NUMERACJI
NUMDOK
System numerujący dokumenty oparte na tabelach `opng` i `zmng`.
Licznikiem są
- dla numerów głównych (nrdokfin, nrdokmag, etc) tabela `numdok`
- dla numerów wewnętrznych (nrwewn) tabela `numwewn`.
Maska obu numeratorów oraz dodatkowe ustawienia znajdują się w tabeli `operdoc`.
UWAGA
Tabela `operdoc` pozwala ustawiać parametry z dokładnością do rodzaju dokumentu czyli nie uwzględnia podrodzaju.
NUMDOK/COUNTER
Ten system korzysta z nowych numeratorów jakim są `erp_obj_counters`, ale pozostałe ustawienia nadal są trzymane w tabeli `operdoc`. Niektóre algorytmy "pobierają" numer dla zdarzeń CRM inne tworzą numer z dokładnościa do miesiąca - nowy nuumerator `erp_obj_counters` ma większe możliwości grupowania numerów i dlatego jest używany (patrz liczniki w COUNTER).
Licznikiem jest tabela `erp_obj_counters` Maska numeratorów oraz dodatkowe ustawienia znajdują się w tabeli `operdoc`.
COUNTER
Całkiem nowy system numerowania.
Licznikiem jest tabela `erp_obj_counters` Maski oraz dodatkowe ustawienia znajdują się w tabeli `erp_obj_counters_masks` która nazywamy numeratorami. Każdy rekord to inny numerator który zawiera wszystkie konieczne ustawienia dotyczące numeracji. Nie ma zatem potrzeby wykorzystywania tabeli `operdoc` która dodatkowo ograniczała numerację tylko do dokumentów.
Nowe liczniki mogą grupować numery wg:
- zasobu 1 (np. magazyn)
- zasobu 2 (ustawialne)
- zasobu znakowego (np. RV_ID)
- roku
- miesiąca
- dnia (rok, miesiąc, dzień - podawany jest do procedury ale w automacie podawane jest konkretne pole daty)
Tabela numeratorów czyli ustawień `erp_obj_counters_masks`jest uniwersalna i pozwala zdefiniować dowolny numerator dla dowolnego pola z dowolnej tabeli. Nie ma tu ograniczenia do dwóch pól i dwóch tabel.
Zobacz także: Numeratory
DEFINICJE
Definicja numeratorów
Każdy numerator określamy jako trójke atrybutów: typ, rodzaj i podrodzaj. Typ numeratora jest zdefiniowany w tabeli `erp_obj_counters_def` i nazywany jest definicja danego numeratora. Innymi słowy numeratory definiujemy w `erp_obj_counters_def` natomiast w `erp_obj_counters_masks` gromadzimy wszystkie możliwe wystąpienia rodzajowe danego numeratora (rodzaj, podrodzaj).
Co oprócz samej nazwy zawiera definicja numeratora?
Zawiera konieczne do automatycznego przetwarzania ustawienia:
- TableName - nazwa tabeli w której znajduje się pole numeru
- SQL_GetParams - SQL dla pobierania danych koniecznych do pobrania licznika i wypełnienia maski.
- SQL_UpdateNum - SQL dla wstawienie numeru do tabeli z pola TableName
- Disabled - określa czy definicja jest jeszcze używana.
SQL_GetParams
SQL-ka dla pobierania danych koniecznych do pobrania licznika i wypełnienia maski.
Przykładowa sql-ka dla definicji “opng.nrdokfin”:
SELECT n.nrdokfin AS _Number, n.Rodzaj, 0 AS PodRodzaj, IF(n.ZMagazynu != 0, n.ZMagazynu, n.DoMagazynu) AS _Res1, n.DoMagazynu AS _Res2, AS _ResGUID, YEAR(n.DataWystaw) AS _NumYear, MONTH(n.DataWystaw) AS _NumMonth, DAY(n.DataWystaw) AS _NumDay, n.RodzajDowodu AS _RodzajDowodu, n.RV_ID AS _Rv_id, n.UGrpGUID AS _UGrpGUID, IFNULL(m1.symbol, ) AS _MGS, IFNULL(m2.symbol, ) AS _MDS FROM `#TABLENAME#` n LEFT JOIN `Magazyny` m1_0 ON m1_0.IdnMagazynu = IF(n.ZMagazynu != 0, n.ZMagazynu, n.DoMagazynu) LEFT JOIN `Magazyny` m1 ON m1.IdnMagazynu = m1_0.grupa LEFT JOIN `Magazyny` m2_0 ON m2_0.IdnMagazynu = n.DoMagazynu LEFT JOIN `Magazyny` m2 ON m2.IdnMagazynu = m2_0.grupa WHERE GUID = '#ID#' INTO @erp_obj_counters._Number, @erp_obj_counters._Rodzaj, @erp_obj_counters._PodRodzaj, @erp_obj_counters._Res1, @erp_obj_counters._Res2, @erp_obj_counters._ResGUID, @erp_obj_counters._NumYear, @erp_obj_counters._NumMonth, @erp_obj_counters._NumDay, @erp_obj_counters._RodzajDowodu, @erp_obj_counters._Rv_id, @erp_obj_counters._UGrpGUID, @erp_obj_counters._MGS, @erp_obj_counters._MDS ;
System automatycznie wykonuje to zapytanie aby otrzymać szereg zmiennych koniecznych do pobrania kolejnego numeru (dane do grupowania) oraz aby wypełnić maskę numeru.
UWAGA
W tabeli `erp_obj_counters_masks` również istnieje pole SQL_GetParams i jesli jest niepuste to jego zawartość jest wykonywana dla danego numeratora.
SQL_UpdateNum
Tę sql-ke system również wykonuje automatycznie. Ustawia ona pole w określonej tabeli. Parametry #TABLENAME#,#NUMBER# są wypałniane są również automatycznie ze zmiennych i z ustawień. PRZYKŁAD
UPDATE `#TABLENAME#` SET NrDokFin = '#NUMBER#' WHERE GUID = '#ID#' AND (NrDokFin = OR #ALWAYS#) ;
UWAGA
W tabeli `erp_obj_counters_masks` również istnieje pole SQL_UpdateNum i jesli jest niepuste to jego zawartość jest wykonywana dla danego numeratora.
Numeratory
Tabela `erp_obj_counters_masks`. Każdy rekord to inny numerator który zawiera wszystkie konieczne ustawienia dotyczące numeracji.
Numeratory dzielimy wg.:
- typu numeratora (string - pozwala zdefiniować dowolną liczbę numertorów (np. nrdokfin, nrdokmag, etc)
- rodzaju i
- podrodzaju
Innymi słowy dla danej definicji (typu) numeratora określamy tu wszystkie rodzajowe warianty tej definicji. Przykład, dla definicji (typu) numeratora “opng.nrdokmag” numeratorami będą wszystkie warianty: (rodzaj, podrodzaj) dla których ten typ numeratora ma sens (nie ma sensu np. dla dok. kasowego).
Każdy numerator może być "przekierowany" na inny typ/rodzaj/podrodzaj np. numerator magazynowy dla faktury zakupu może być "przekierowany" na analogiczny numerator o rodzaju WZ.
Ponadto w każdym numeratorze możemy:
- ustawić maskę,
- ustalić jak numerator będzie grupować numery (zasoby, rok, miesiąc, dzień)
- ustalić zachowanie algorytmów przy przepisywaniu numerów do końcowych pól w tabelach.
- ustalić czy numer (określone pole numeru) może być:
- edytowane - EditedNum
- można manualnie pobrać kolejny numer - ManualNum
- program sam ma pobrać kolejny numer przy zapisie (gdy pole puste) - AutoNum czy automatyczna numeracja
- pola SQL_GetParams (SQL dla pobierania danych) oraz SQL_UpdateNum mają nieco szersze znaczenie - patrz ustawienia SQL_GetParams w DEFINICJA numeratorów.
POLA NUMERÓW
Wartość numeru przechowywana jest za pomocą pola w określonej w numeratorze tabeli. Ale jeśli korzystamy z nowej numeracji to numer ten przechowywany jest również w tabeli `erp_obj_counters_values`. Zawiera ona nie tylko cały numer ale i odpowiadający mu numer liczbowy z licznika. Jeśli numer został nadany ręcznie to numer liczbowy jest nieokreślony.
AKTYWACJA I ZARZADZANIE NUMERACJA
Aktywowanie nowej numeracji odbywa się na kilku poziomach.
Aktywacja
Po pierwsze trzeba wiedzieć, że pełna nowa numeracja działa tylko dla dokumentów tworzonych w świecie E.
Po drugie należy ustawić:
- zmienną globalną erp_obj_counters_values_e_1_rec z tabeli `_db_globals` na 1
- zmienną IFDEF erp_obj_counters_values_e_1_rec na 1
Po trzecie należy ustalić które dokumenty z `opng` i `zmng` będą numerowane po nowemu.
Umożliwia to etapowe włączanie kolejnych dokumentów.
Włączanie/wyłączanie odbywa się w tabeli `operdoc_typy`. W polu counter - mamy możliwość ustawienia następujących wartości
NUMDOK - pozostaw starą numerację albo
OBJ_COUNTERS - nowa numeracja
Należy zauważyć że mowa jest tylko i wyłącznie o numeracji dokumentów (które po staremu numerowane są w NUMDOK i NUMWEWN).
Reasumując możemy uruchomić nową numerację tylko dla dokumentu WZ i MM nie zmieniając sposobu numeracji pozostałych operacji. Ale wymagane jest ustawienie odpowiednich flag i używanie wersji z edycją w świecie E.
Kontrolki numerów w oknie edycji
Jeśli dana operacja ma włączoną nową numerację to w oknie edycji nieco inaczej będzie wyglądały kontrolki numerów. Dla danej operacji (rodzaj/podrodzaj) wszystkie numeratory będą reprezentowane przez kontrolki edycyjne - bedzie ich tyle ile numeratorów.
Przykład - dla faktury zakupu będą to 3 typy numeratorów (opng.nrdokfin, opng.nrdokmag, opng.nrwewn).
Każda z 3 kontrolek może być:
- wyszarzona (disabled) jeśli w danym numeratorze pole GUI_Ctrl_option zawiera “EditedNum”
- mieć po prawej przycisk do manualnego nadawania numeru kolejnego o ile GUI_Ctrl_option zawiera “ManualNum”
UWAGA
Jeżeli dana operacja ma włączoną nową numerację to każdy typ numeratora będzie widoczny w oknie edycji - nie można włączać nowej numeracji z dokładnością do pojedynczego numeratora.