Budżet MPK w źródle zarządzanym regułami
Scenariusz
Firma planuje budżet kosztów według MPK, roku i miesiąca. Każdy wniosek kosztowy w AMODIT wskazuje MPK, miesiąc rozliczenia i kwotę. Proces ma sprawdzić dostępny budżet przed akceptacją, a po akceptacji zapisać nowe wykonanie.
Źródło BudzetMPK przechowuje plan oraz aktualny stan wykonania. Reguły procesu odczytują dane przez SourceGet, porównują kwoty i zapisują nowy stan przez SourceSet.
Proponowana struktura źródła
| Kolumna | Przykład | Opis |
|---|---|---|
Klucz |
2026|MPK-100|01 |
Jedyny klucz główny źródła. |
Rok |
2026 |
Rok budżetowy. |
MPK |
MPK-100 |
Miejsce powstawania kosztu. |
Miesiac |
01 |
Miesiąc budżetu. |
Budzet |
50000 |
Plan budżetu dla danego MPK i miesiąca. |
Wykonanie |
12000 |
Koszty zaakceptowane. |
Rezerwacje |
3000 |
Koszty zarezerwowane, ale jeszcze nierozliczone. |
Kolumna Klucz jest pojedynczym kluczem głównym. Wymiary biznesowe zostają też w osobnych kolumnach, aby można było filtrować i sumować dane.
Budowanie klucza w regule
rok = FormatValue([Data kosztu], "yyyy");
mpk = [MPK];
miesiac = FormatValue([Data kosztu], "MM");
klucz = rok + "|" + mpk + "|" + miesiac;
W przykładzie [MPK] i [Data kosztu] są polami formularza. Rok można też pobrać z osobnego pola formularza albo zapisać jako stałą wartość, jeżeli proces dotyczy jednego roku budżetowego.
Sprawdzenie dostępnego budżetu
query = CreateObject();
query.srcName = "BudzetMPK";
query.keyValue = klucz;
query.columns = "Budzet,Wykonanie,Rezerwacje";
budzet = SourceGet(query);
dostepne = budzet.Budzet - budzet.Wykonanie - budzet.Rezerwacje;
kwota = [Kwota];
if(kwota > dostepne)
{
ShowMessage(1, "Kwota przekracza dostępny budżet dla wybranego MPK i miesiąca.");
}
Reguła pobiera trzy wartości z jednego wiersza i porównuje kwotę wniosku z dostępnym budżetem. Komunikat z parametrem 1 jest komunikatem błędu.
Zapis wykonania po akceptacji
Po akceptacji kosztu proces może zwiększyć wykonanie.
noweWykonanie = budzet.Wykonanie + kwota;
SourceSet("BudzetMPK", klucz, "Wykonanie", noweWykonanie);
Jeżeli w procesie używasz rezerwacji, możesz najpierw zmniejszyć Rezerwacje, a potem zwiększyć Wykonanie.
values = CreateObject();
values.Rezerwacje = budzet.Rezerwacje - kwota;
values.Wykonanie = budzet.Wykonanie + kwota;
SourceSet("BudzetMPK", klucz, values);
Kontrola roczna przez SourceSum
Dla kontroli rocznego wykonania MPK można zsumować miesięczne wiersze.
query = CreateObject();
query.srcName = "BudzetMPK";
query.aggColumns = "Budzet,Wykonanie,Rezerwacje";
query.whereQuery = "'Rok' = '2026' AND 'MPK' = '" + mpk + "'";
suma = SourceSum(query);
Taki odczyt przydaje się w regule informacyjnej, raporcie kontrolnym albo decyzji o przekroczeniu rocznego limitu.
Wariant z rezerwacją
W procesach zakupowych często warto rozdzielić rezerwację i wykonanie:
- Przy złożeniu wniosku reguła sprawdza dostępny budżet.
- Po pozytywnej kontroli zapisuje kwotę w kolumnie
Rezerwacje. - Po akceptacji faktury zmniejsza
Rezerwacjei zwiększaWykonanie. - Po anulowaniu wniosku zmniejsza
Rezerwacje.
Ten wariant pozwala widzieć planowane obciążenia jeszcze przed końcowym rozliczeniem.
Na co uważać
- Klucz główny funkcji
Source*ma jedną kolumnę, dlatego kilka wymiarów biznesowych najlepiej połączyć w jednej kolumnie technicznej. SourceSettworzy wiersz, gdy podany klucz nie istnieje. Przy budżetach warto wcześniej kontrolować, czy wiersz planu został przygotowany.- Dla danych finansowych ustal zasady audytu i korekt. Czasem lepsze będzie dopisanie korekty w osobnym źródle niż bezpośrednia zmiana wykonania.
