Numeracja dokumentów

Z Motława

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.


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ę,

MaskaNew.png

  • 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

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

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.