Skip to main content

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:

  1. Przy złożeniu wniosku reguła sprawdza dostępny budżet.
  2. Po pozytywnej kontroli zapisuje kwotę w kolumnie Rezerwacje.
  3. Po akceptacji faktury zmniejsza Rezerwacje i zwiększa Wykonanie.
  4. 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.
  • SourceSet tworzy 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.

Powiązane artykuły