Mecanismul calculelor periodice complexe. Proprietatea dimensiunii de bază a registrului de calcul Jucând cu recalculări


Cuvinte cheie: registru de calcul, salariu, ZUP

Introducere

Mulți programatori 1C nu au întâlnit niciodată componenta „Calcul” în practica lor, așa că atunci când trebuie să susțină examene pentru un Specialist pe Platforma 8.0, unde fiecare sarcină conține o sarcină de calcule periodice complexe, apar dificultăți, în primul rând dificultăți de înțelegere.
Să încercăm să descoperim această componentă în 8.0.

În loc să rezolvăm diverse probleme de calcul, să încercăm să înțelegem această componentă astfel încât să putem rezolva orice problemă de calcul. După ce ați studiat acest manual, veți înțelege cum sunt structurate și cum funcționează registrele de calcul. De exemplu, vom folosi configurația cadru instalată în timpul examenelor. Sincer să fiu, am încercat multă vreme să-mi dau seama pentru ce mai era nevoie de calcule, dar nu mi-am putut da seama, așa că vom lua în considerare problema calculării salariilor.

Ce sunt calculele

În principiu, produsul final al calculării salariilor este un set de înregistrări din registrul de salarizare sub forma:

Valoarea din coloana „Date” reflectă salariul de bază al angajatului (conform contractului de muncă), dar această sumă poate fi majorată cu sporuri, redusă cu amenzi și absenteism etc., prin urmare, suma efectivă de plătit se înscrie după calculul din coloana „Rezultat”. Acesta este calculul. Suma din coloana „Resurse” pentru acest angajat este salariul care i se cuvine.

Astfel, registrul de calcul este în esență un set de înregistrări, similar ca structură cu registrul de acumulare negociabil. Doar că, pentru a efectua calcule complexe, sunt specificate setări suplimentare pentru acesta, care vă permit apoi să construiți multe tabele virtuale pentru registrul de calcul, deși în esență acest registru este doar un set de înregistrări indicate în figură.

Fiecare înregistrare în registrul de decontare se referă la un anumit tip de decontare și perioadă de timp.

Tipuri de calcule

Fiecare înregistrare a tipurilor de calcul are un atribut de serviciu - tip de calcul.

Un tip de calcul poate fi gândit ca un element al unei cărți de referință speciale, cum ar fi „Planul de tipuri de calcule” - are și detalii, părți tabelare, elemente predefinite și create de utilizator. Pot exista mai multe astfel de „directoare” în sistem.

De exemplu, să creăm un plan pentru tipurile de calcul Principal și în el tipurile predefinite de calcul salariu, bonus, absenteism, călătorie de afaceri.

Tipurile de calcul sunt utilizate funcțional pentru a reflecta influența intrărilor din registrul de calcul unul asupra celuilalt. Dar, pe scurt, vorbesc despre influența tipurilor de calcul unul asupra celuilalt:

Calcule de conducere

Calculul depinde de calculul principal, dar nu direct, ci indirect, i.e. calculul A depinde de calculul de bază B, iar calculul B depinde de calculul de bază B, prin urmare A depinde indirect de B, adică. A depinde de calculul principal B. De fapt, atunci când calculul C se modifică, B se poate schimba și, prin urmare, A se poate modifica automat.

Bonusul depinde de baza de salariu, dar depinde și indirect de absenteism.

Datorită acestei influențe, perioada de valabilitate a înscrierii în registrul de decontare este împărțită în patru perioade:
1. Perioada de înscriere. În ce perioadă a fost înregistrat evenimentul, adică de obicei atunci când este introdus un document.
2. Valabilitate. În ce perioadă operează evenimentul, adică cărei perioade aparține evenimentul.
3. Perioada de bază. Are sens numai pentru perioadele care au o perioadă de bază - descrie intervalul perioadei de bază.
4. Perioada de valabilitate reală. Dacă perioada de valabilitate este înlocuită de alte tipuri de calcule, atunci perioada de valabilitate reală constă din mai multe perioade în care acest tip de calcul este efectiv în vigoare.

Perioada de înregistrare este specificată printr-un număr – începutul perioadei, corespunzător frecvenței registrului de calcul. Chiar dacă setăm o dată diferită în acest domeniu de serviciu, aceasta va fi totuși înlocuită cu începutul perioadei. Perioadele rămase sunt specificate de două câmpuri – începutul și sfârșitul perioadei. Perioada de valabilitate efectivă este un set de perioade, deoarece poate consta din mai multe intervale de date.

Diagrame de timp

Sistemul are capacitatea de a lega datele din registrele de calcul cu diagrame de timp, astfel încât numărul de ore de lucru să poată fi obținut pentru orice perioadă.

O cronologie este un simplu registru de informații în care o dimensiune stochează o dată, alta este asociată cu o dimensiune printr-un registru de calcul, iar una dintre resurse este utilizată pentru a urmări timpul.
Măsurătoarea care este asociată cu registrul de calcul are de obicei semnificația de „vedere grafică”.




Data Tipul graficului Sens
11.01.05 vineriCinci zile8
11.01.05 vineriȘase zile8
12.01.05 sâmbCinci zile0
12.01.05 sâmbȘase zile8

De ce să folosiți dimensiunea dată mai degrabă decât registrul de detalii periodice? Totul este foarte simplu - dacă în 11 ianuarie, vineri, o săptămână de cinci zile, avem 8 ore de lucru, asta nu înseamnă că a doua zi vom avea din nou 8 ore de lucru. Dar dacă am folosi un registru periodic, valoarea pentru ziua următoare ar fi luată din ziua precedentă în lipsa înregistrărilor.

Astfel, având o anumită perioadă (acțiune efectivă, înregistrare, perioadă de bază etc.) putem obține automat numărul de ore pentru această perioadă conform programului.

Recalculare

Recalcularea amintește oarecum de granița unei secvențe. Întrucât avem calcule dependente, atunci când le schimbăm calculele de bază și de început, sistemul trebuie cumva să rețină că trebuie să recalculăm calculele dependente. Pentru asta sunt recalculările.

Dacă calculăm înregistrările de bază, sistemul va nota în alocări că avem nevoie pentru a calcula înregistrările dependente. Odată ce calculăm înregistrările dependente, alocările se vor șterge. În esență, alocările sunt o listă de intrări din registrul de calcul care trebuie alocate. Dacă nu introduceți măsurători în recalculări, atunci când modificați calculele de bază, toate înregistrările dependente vor fi adăugate la lista de recalculări. Dacă creăm dimensiunea „Angajat” în recalculare, atunci când se modifică calculul de bază pentru un angajat, înregistrările dependente numai pentru acest angajat vor fi adăugate la recalculări.

Sarcina practică

Ajunge teorie. Să încercăm să studiem detaliile în practică. Să luăm ca bază configurația cadrului.

Formularea problemei:

Sa fie stabilit bonusul ca procent fix din salariu (minus absenteism si indemnizatii de deplasare).
Să se plătească indemnizațiile de călătorie în salariu dublu + o sumă fixă ​​de plăți pentru fiecare zi de călătorie.

Să i se pună salariatului o amendă în cuantum de jumătate din salariu pentru perioada de absență pentru absenteism.

Progres:

Antrenament initial

Să creăm un nou plan pentru tipurile de calcul „Principal”.

Să definim tipurile de calcule și dependențele dintre ele:

Să adăugăm aceste tipuri de calcule la planul de tipuri de calcul „Principal” și să setăm dependențele în proprietățile tipurilor de calcul conform tabelului.

În registrul de calcul al salariilor vom crea dimensiunea „Angajat” de tip „Persoane fizice” - astfel încât registrul să aibă o secțiune de analiză pentru angajați.

Configurația conține deja documentul „Salarizare”.

Are două date în antet - „data” și „perioada de înregistrare”, precum și două date „data de început” și „data de încheiere” în fiecare rând.

Se înțelege că data este pur și simplu data la care a fost întocmit documentul, perioada de înregistrare indică pentru ce lună numărăm salariul, iar datele din fiecare rând descriu perioada de valabilitate a fiecărui tip de calcul.

Să adăugăm setarea inițială a atributului „Date” la modulul de document - vom introduce salariul de pornire, setând în el perioada de înregistrare, perioada de valabilitate și perioada de bază.

Modulul de document va arăta cam așa:

Pentru fiecare TechStringList din ciclul listă // înregistrează Calcule Mișcare = Movements.Calculations.Add(); Move.Reversal = Fals; Movement.CalculationType = TechStringList.CalculationType; Movement.ActionPeriodStart = StartDay(TexListList.StartDate); Movement.ActionPeriodEnd = EndDay(TexLineList.EndDate); Movement.Registration Period = Perioada de înregistrare; Movement.BasePeriodStart = StartDay(TexListList.StartDate); Movement.BasePeriodEnd = EndDay(TexListList.EndDate); Movement.Employee = TechStringList.Employee; Movement.Work Schedule = TechStringList.Graph; Mișcare.Rezultat = 0 ; Motion.Data = TechStringList.Size; EndCycle;

Atributul „Inversare” este necesar pentru a inversa intrările (analog cu semnul minus).

Indicăm tipul de calcul și setăm datele la începutul și sfârșitul zilei. Desigur, perioada de bază poate fi introdusă doar pentru tipuri de calcul dependente de bază, iar Datele pot fi introduse doar pentru salariu, dar totul funcționează așa.

Vom data toate documentele 20/01/2003, perioada de înregistrare va fi setată la 02/01/2003 (in mod specific indic nu datele de început și de sfârșit, acest lucru nu contează aici, oricum, la înregistrarea în Perioada de înregistrare, este va fi convertit la începutul perioadei 01/01/2003). Folosim ianuarie 2003 pentru că s-au finalizat graficele de lucru pentru această perioadă.

Să creăm o recalculare „Recalculare” și să adăugăm la aceasta dimensiunea „Angajat” asociată cu dimensiunea „Angajat”.

Joacă-te cu recalculări

Pentru a juca jocul, să deschidem consola de solicitări – procesând „RandomRequest” într-o configurație de cadru. Să creăm o nouă interogare folosind designerul de interogări, să adăugăm tabelul virtual Recalculations.Calculations.Recalculation acolo, textul interogării va fi astfel:

SELECT CalculationsRecalculation.Recalculation Object, CalculationsRecalculation.Calculation Type, CalculationsRecalculation.Angajat FROM RegisterCalculation.Calculations.Recalculation AS CalculationsRecalculation

Să generăm trei documente - mai întâi vom plăti salariul angajaților A și B. Salariatul A lucrează de la 1 la 31 ianuarie, B lucrează de la 1 la 20 ianuarie. Al doilea va atribui un bonus angajatului B pentru perioada 1-31 ianuarie, al treilea va atribui absenteismul angajatului A din 20 până în 25 ianuarie.

Jucând cu perioada de valabilitate reală

Să creăm o nouă interogare - de data aceasta vom adăuga date din tabelul Calculation Registers.Calculations.ActualActionPeriod.

Să creăm o cerere și să vedem că perioada de salarizare a angajatului A este împărțită în două perioade – de la 1 la 19 ianuarie și de la 26 la 31 ianuarie. Sper că înțelegeți că perioada a fost împărțită în două, pentru că... absenteismul a înlocuit salariul.

Cred că mecanismele de funcționare a registrului de calcul devin din ce în ce mai clare în fața ochilor noștri.

Studierea graficelor

Acum să încercăm să calculăm salariul pe baza salariului angajatului.

Să creăm o nouă interogare pentru registrul de calcul folosind tabelul virtual Calculation Registers. Pentru acest tabel virtual, puteți seta un parametru - o condiție pentru selectarea înregistrărilor, de exemplu, Employee=&SelectEmployee și Calculation Type=&Calculation Type și Chart=&Graphic Type.
Să setăm anumiți angajați, tipuri de calcule și programări în parametrii de solicitare și să vedem câte ore sunt rezultatul.

Articolul este încă neterminat, multe pot fi îmbunătățite, dar cum va merge cursul tânărului luptător.

Mulți programatori 1C nu au întâlnit niciodată componenta „Calcul” în practica lor, prin urmare, atunci când trebuie să susțină examene pentru un Specialist pe Platforma 8.0, unde fiecare sarcină conține o sarcină de calcule periodice complexe, apar dificultăți, în primul rând dificultăți de înțelegere.

Să încercăm să descoperim această componentă în 8.0. În loc să rezolvăm diverse probleme de calcul, să încercăm să înțelegem această componentă, astfel încât să putem rezolva orice problemă de calcul. După ce ați studiat acest manual, veți înțelege cum sunt aranjate și cum funcționează registrele de calcul.

De exemplu, vom folosi configurația cadru instalată în timpul examenelor.

Sincer să fiu, am încercat multă vreme să-mi dau seama pentru ce mai erau necesare calcule, dar nu am reușit să-mi dau seama, așa că să luăm în considerare problema calculării salariilor.

Ce sunt calculele

Practic, produsul de salarizare final este un set de intrări din registrul de salarizare sub forma:

Angajat

Perioadă

Tipul de calcul

Rezultat

Date

Un comentariu

Măsurare

Oficial

Oficial

Recuzită

Valoarea din coloana „Date” reflectă salariul de bază al angajatului (conform contractului de muncă), dar această sumă poate fi majorată cu sporuri, redusă cu amenzi și absenteism etc., prin urmare, suma efectivă de plătit se înscrie după calculul din coloana „Rezultat”. Acesta este calculul. Suma din coloana „Resurse” pentru un anumit angajat este salariul care i se cuvine.

Astfel, registrul de calcul este în esență un set de înregistrări, similar ca structură cu registrul de acumulare negociabil. Doar că, pentru a efectua calcule complexe, sunt specificate setări suplimentare pentru acesta, care vă permit apoi să construiți multe tabele virtuale pentru registrul de calcul, deși, în esență, acest registru este doar un set de înregistrări indicate în figură.

Fiecare înregistrare în registrul de decontare se referă la un anumit tip de decontare și perioadă de timp.

Tipuri de calcule

Fiecare înregistrare a tipurilor de calcul are un atribut de serviciu - tip de calcul.

Un tip de calcul poate fi gândit ca un element al unei cărți de referință speciale, cum ar fi „Planul de tipuri de calcule” - are și detalii, părți tabelare, elemente predefinite și create de utilizator. Pot exista mai multe astfel de „directoare” în sistem.

De exemplu, să creăm un plan pentru tipurile de calcul Principal și în el tipuri de calcul predefinite salariu, primă, absenta, călătorie de afaceri.

Tipurile de calcul sunt utilizate funcțional pentru a reflecta influența intrărilor din registrul de calcul unul asupra celuilalt. Dar, pe scurt, vorbesc despre influența tipurilor de calcul unul asupra celuilalt:

Tipul de calcul

Descriere

Exemplu

După perioada de bază

Rezultatul calculului perioadei dependente depinde de rezultatul perioadei de bază. Dacă rezultatul perioadei de bază se modifică, rezultatul perioadei dependente trebuie recalculat.

Bonusul depinde de salariul din perioada de bază.

Ștergerea punctului

Perioada de valabilitate a perioadei dependente înlocuiește perioada de valabilitate a perioadei de bază, astfel încât perioada de bază are o valoare reală

Absentismul afectează perioada efectivă a salariului.

Calcule de conducere

Calculul depinde de calculul principal, dar nu direct, ci indirect, adică. calculul A depinde de calculul de bază B, iar calculul B depinde de calculul de bază B, prin urmare A depinde indirect de B, adică. A depinde de calculul principal B. De fapt, atunci când calculul C se modifică, B se poate schimba și, prin urmare, A se poate modifica automat.

Bonusul depinde de baza salariului, dar depinde și indirect de absenteism.

Datorită acestei influențe, perioada de valabilitate a înscrierii în registrul de decontare este împărțită în patru perioade:

Perioadă

Descriere

Perioada de înscriere

În ce perioadă a fost înregistrat evenimentul, adică de obicei atunci când este introdus un document.

Valabilitate

În ce perioadă operează evenimentul, adică cărei perioade aparține evenimentul.

Perioada de bază

Semnificativ doar pentru perioadele care au o perioadă de bază - descrie intervalul perioadei de bază.

Perioada de valabilitate reală

Dacă perioada de valabilitate este înlocuită de alte tipuri de calcule, atunci perioada de valabilitate reală constă din mai multe perioade în care acest tip de calcul este efectiv în vigoare.

Perioada de înregistrare este specificată printr-un număr - începutul perioadei, corespunzător frecvenței registrului de calcul. Chiar dacă setăm o dată diferită în acest domeniu de serviciu, aceasta va fi totuși înlocuită cu începutul perioadei. Perioadele rămase sunt specificate de două câmpuri - începutul și sfârșitul perioadei Perioada reală de valabilitate este un set de perioade, deoarece poate consta din mai multe intervale de date.

Diagrame de timp

Sistemul are capacitatea de a lega datele din registrele de calcul cu diagrame de timp, astfel încât numărul de ore de lucru să poată fi obținut pentru orice perioadă.

O cronologie este un simplu registru de informații în care o dimensiune stochează o dată, alta este asociată cu o dimensiune printr-un registru de calcul, iar una dintre resurse este utilizată pentru a urmări timpul.

O dimensiune care asociat cu registrul de calcul poartă de obicei adică „tip de grafic”.

Data

Tipul graficului

Sens

11.01.05 vineri

Cinci zile

11.01.05 vineri

Șase zile

12.01.05 sat

Cinci zile

12.01.05 sat

Șase zile

De ce să folosiți dimensiunea dată mai degrabă decât registrul de detalii periodice? Totul este foarte simplu - dacă vineri, 11 ianuarie, avem 8 ore de lucru într-o perioadă de cinci zile, asta nu înseamnă că a doua zi vom avea din nou 8 ore de lucru. Dar dacă am folosi un registru periodic, valoarea pentru ziua următoare ar fi luată din ziua precedentă în lipsa înregistrărilor.

Astfel, având o anumită perioadă (acțiune efectivă, înregistrare, perioadă de bază etc.) putem obține automat numărul de ore pentru această perioadă conform programului.

Recalculare

Recalcularea amintește oarecum de granița unei secvențe. Întrucât avem calcule dependente, atunci când le schimbăm calculele de bază și de început, sistemul trebuie cumva să rețină că trebuie să recalculăm calculele dependente.

Pentru asta sunt recalculările.

Dacă calculăm înregistrările de bază, sistemul va nota în alocări că avem nevoie pentru a calcula înregistrările dependente. Odată ce calculăm înregistrările dependente, alocările se vor șterge.

În esență, recalculările sunt o listă de intrări din registrul de calcul care trebuie recalculate.

Dacă nu introduceți măsurători în recalculări, atunci când calculele de bază se schimbă, toate înregistrările dependente vor fi adăugate la lista de recalculări.

Dacă creăm dimensiunea „Angajat” în recalculare, atunci când calculul de bază pentru un angajat este modificat, înregistrările dependente numai pentru acest angajat vor fi adăugate la recalculări.

Sarcina practică

Ajunge teorie. Să încercăm să studiem detaliile în practică. Să luăm ca bază configurația cadrului.

Formularea problemei:

Sa fie stabilit bonusul ca procent fix din salariu (minus absenteism si indemnizatii de deplasare).

Lăsați indemnizațiile de călătorie să fie plătite în salariu dublu + o sumă fixă ​​de plăți pentru fiecare zi de călătorie.

Să i se pună salariatului o amendă în cuantum de jumătate din salariu pentru perioada de absență pentru absenteism.

Progres:

Antrenament initial

Să creăm un nou plan pentru tipurile de calcul „Principal”.

Să definim tipurile de calcule și dependențele dintre ele:

De bază

Deplasare

Prezentatori

Salariu

Absentism, Călătorie de afaceri

Premiu

Absentism, Călătorie de afaceri

Salariu, absenteism, călătorie de afaceri

Călătorie de afaceri

Absenteism

Să adăugăm aceste tipuri de calcule la planul de tipuri de calcul „Principal” și să setăm dependențele în proprietățile tipurilor de calcul conform tabelului.

În registrul de calcul al salariilor vom crea dimensiunea „Angajat” de tip „Persoane fizice” - astfel încât registrul să aibă o secțiune de analiză pentru angajați.

Configurația conține deja documentul „Salarizare”.

Are două date în antet - „data” și „perioada de înregistrare”, precum și două date „data de început” și „data de încheiere” în fiecare rând.

Se înțelege că data este pur și simplu data la care a fost întocmit documentul, perioada de înregistrare indică pentru ce lună numărăm salariul, iar datele din fiecare rând descriu perioada de valabilitate a fiecărui tip de calcul.

Să adăugăm setarea inițială a atributului „Date” la modulul de document - vom introduce salariul de pornire, setând în el perioada de înregistrare, perioada de valabilitate și perioada de bază.

Modulul de document va arăta cam așa:

Pentru Pentru fiecare TechStringList Din ciclul listă

// înregistrează Calcule

Mișcare = Mișcări .Calcule.Adăugaţi();

Circulaţie .S torno= fals;

Circulaţie .În idCalcul = TechStringList.CalculationType;

Circulaţie .PeriodActionsStart= Începutul zilei ( TechStringList.StartDate);

Circulaţie .PeriodActionEnd= EndDay();

Circulaţie .Perioada de înscriere = Perioada de înregistrare;

Circulaţie .BasicPeriodStart= Începutul zilei ( TechStringList.StartDate);

Circulaţie .BasePeriodEnd= EndDay ( TechStringList.Data de încheiere);

Circulaţie .Angajat = TechStringList.Angajat;

Circulaţie .Programa = TechStringList.Graph;

Circulaţie .Rezultat = 0;

Circulaţie .Date = TechStringList.Size;

EndCycle ;

Atributul de inversare este necesar pentru a inversa intrările (analog cu semnul minus).

Indicăm tipul de calcul și setăm datele la începutul și sfârșitul zilei. Desigur, perioada de bază poate fi introdusă doar pentru tipuri de calcul dependente de bază, iar Datele pot fi introduse doar pentru salariu, dar totul funcționează așa.

Vom data toate documentele 20/01/2003, perioada de înregistrare va fi setată la 02/01/2003 (indic în mod specific nu datele de început și de sfârșit, acest lucru nu contează aici, oricum, la înregistrarea în Perioada de înregistrare convertit la începutul perioadei 01/01/2003). Folosim ianuarie 2003 pentru că s-au finalizat graficele de lucru pentru această perioadă.

Să creăm o recalculare „Recalculare” și să adăugăm la aceasta dimensiunea „Angajat” asociată cu dimensiunea „Angajat”.

Jucând cu recalculări.

Pentru a juca jocul, deschideți consola de solicitări - procesare " CustomRequest» într-o configurație de cadru. Să creăm o nouă interogare folosind constructorul de interogări și să adăugăm un tabel virtual acolo Recalculări, textul cererii va fi astfel:

ALEGE

CalculationsRecalculation.Despre obiectul Recalculation,

CalculationsRecalculation.In Calculation ID,

Calcule Recalcul de la angajat

DIN

Registrul de calcul Calcule CUM CalculeRecalculare

Vom genera trei documente - mai întâi vom acumula salarii angajaților A și B. Angajatul A lucrează de la 1 la 31 ianuarie, B lucrează de la 1 la 20 ianuarie. Al doilea va atribui un bonus angajatului B pentru perioada 1-31 ianuarie, al treilea va atribui absenteismul angajatului A din 20 până în 25 ianuarie.

Ne jucăm cu Perioada de valabilitate reală.

Să creăm o nouă interogare - de data aceasta îi vom adăuga date de tabel Registre de calcul Calcule.

Să creăm o cerere și să vedem că perioada de salarizare a angajatului A este împărțită în două perioade - de la 1 la 19 ianuarie și de la 26 la 31 ianuarie. Sper că înțelegeți că perioada a fost împărțită în două, pentru că... absenteismul a înlocuit salariul.

Cred că mecanismele de funcționare a registrului de calcul devin din ce în ce mai clare în fața ochilor noștri.

Să studiem graficele.

Acum să încercăm să calculăm salariul pe baza salariului angajatului.

Să creăm o nouă interogare pentru registrul de calcul folosind un tabel virtual Registre de calcul Calcule. Puteți seta un parametru pentru acest tabel virtual - o condiție pentru selectarea înregistrărilor, de exemplu Employee=&SelectEmployeeȘi Tipul de calcul=&Tipul de calculȘi Graph=&ViewGraphic.

Să setăm anumiți angajați, tipuri de calcule și programări în parametrii de solicitare și să vedem câte ore sunt rezultatul.

Coloana cu rezultate

Sens

ValuePeriodAction

Pentru ce perioadă de valabilitate în ore a fost înscrierea în registru.

ValueActualPeriodAction

Câte ore a lucrat efectiv angajatul?

ValueBasePeriod

Pentru salariu nu are sens, pentru bonusuri - numărul de ore de lucru din perioada de bază.

Valoare Perioada de înregistrare

Câte ore de lucru sunt în perioada de înregistrare (luna ianuarie)

Mecanismul de calcule periodice complexe vă permite să implementați diverse modele de salarizare.

Funcționarea mecanismului de calcule periodice complexe este asigurată de două obiecte ale soluției aplicației: Planul tipurilor de calcul și Registrul de calcul.

Planurile de tip salarizare și registrele de salarizare servesc la implementarea modelelor de salarizare. Acestea vă permit să descrieți diferite tipuri de calcul (de exemplu, salariu, suprataxă personală, pensie alimentară, amendă etc.), să stabiliți reguli conform cărora unele tipuri de calcul pot influența rezultatele altor tipuri de calcul și să stocați date intermediare și rezultatele finale ale calculelor. Cu ajutorul acestor obiecte se pot organiza calculul angajamentelor de bază, calculul impozitului pe venitul persoanelor fizice, repartizarea rezultatelor salariilor în scopul reflectării în contabilitate etc.

Planul tipurilor de calcul utilizate pentru a descrie tipurile de calcule și influența reciprocă a acestora unul asupra celuilalt. Într-o soluție de aplicație, poate exista un număr arbitrar de planuri pentru tipuri de calcul, în funcție de modelul contabil implementat.

Registrul de calcul folosit pentru a stoca înregistrări despre anumite tipuri de calcule care trebuie efectuate, precum și pentru a stoca date intermediare și rezultatele calculelor în sine. O soluție de aplicație poate conține mai multe registre de calcul concepute pentru a reflecta datele dintr-o anumită secțiune de contabilitate.

Registrul de calcul este asociat cu unul dintre planurile de tip de calcul care există în soluția aplicației. Această conexiune face ca fiecare înregistrare de registru să aibă un câmp Tip de calcul, datorită căruia mecanismele de registru pot urmări influența reciprocă a înregistrărilor de calcul unele asupra altora.

O modificare a stării registrului de calcul are loc de obicei atunci când un document este postat. Prin urmare, fiecare intrare de registru este asociată cu un document specific - un registrator și numărul de rând al acestui document. Adăugarea înregistrărilor în registru, modificarea acestora și ștergerea lor este posibilă numai simultan pentru toate înregistrările legate de un singur document.

Registrul de calcul poate fi legat de un orar. O linie temporală este un registru de informații care conține o diagramă temporală a datelor sursă implicate în calcule. Dimensiunile acestui program pot fi, de exemplu, programul de lucru și data, iar resursa poate fi numărul de ore de lucru la această dată. Apoi, va fi posibil să se asocieze o înregistrare din registrul de calcul cu un program de lucru specific și pe viitor, folosind limbajul încorporat, să se obțină informații despre numărul de ore de lucru necesare pentru efectuarea calculelor.

Rapoarte și procesare

Rapoartele și procesarea sunt utilizate pentru a obține date rezumative într-o formă convenabilă pentru vizualizare și analiză. Ele descriu algoritmi de procesare a informațiilor, conțin diferite forme de prezentare a acestor informații către utilizator și permit utilizarea de tabele și diferite tipuri de diagrame pentru afișarea vizuală a datelor.

În „1C:Enterprise 8.1”, un rol este un obiect separat situat în grupul „Roluri” din ramura arborelui de configurare, care descrie un set de drepturi de utilizator pentru a efectua anumite acțiuni pe fiecare dintre obiecte. De exemplu, șeful unei organizații poate avea acces deplin la orice informație stocată în baza de informații, în timp ce un depozitar trebuie să opereze doar cu documente de depozit și să nu aibă acces la alte informații.

Un rol într-o configurație poate corespunde pozițiilor sau activităților diferitelor grupuri de utilizatori pentru care este destinată configurația.

Orez. P2.20. Exemplu de setare a rolurilor în configurare

Pentru fiecare obiect de metadate, un rol determină ce acțiuni poate efectua un utilizator cu acest rol asupra acestui obiect:

Orez. P2.21. Setarea drepturilor pentru fiecare rol în proprietățile unui obiect de metadate în Configurator

Fiecărui utilizator care lucrează în sistemul 1C:Enterprise i se atribuie unul sau mai multe roluri (vezi Atelierul 1-2).

Dacă un utilizator încearcă să efectueze o acțiune pentru care nu are permisiunea, acțiunea nu va fi efectuată, iar sistemul va afișa o fereastră de avertizare „Încălcarea accesului!”

1 FIFO - din engleză. „Prima intrare, prima ieșire” - „primul venit, primul care pleacă”

2 KUDiR - abrevierea „Cartea veniturilor și cheltuielilor”

3 De exemplu, utilizatorii versiunii educaționale nu primesc actualizări, setările sistemului corespund cu starea legii pentru anul specificat în informațiile programului;

Mă întreb când voi mai citi această carte? 8.3 va fi lansat atunci)))

Ce sunt calculele periodice complexe?

Să ne uităm la cuvinte. Cuvântul „Calcul” - sper că este clar că unele numere trebuie calculate. „Periodic” înseamnă că acest lucru trebuie făcut din când în când, la un anumit interval (care se numește „perioadă”, așa cum ar putea ghici un cititor curios). Care este dificultatea? Ei bine, cartea oferă un exemplu de salariu al unei femei. Se numără o dată pe lună (de regulă), iar dificultatea constă în faptul că salariul constă din unele părți, precum salariu, bonus, bonus unic, concediu medical etc. Și fiecare dintre aceste părți este calculată conform propriului algoritm, de exemplu, salariul este costul unei ore standard înmulțit cu numărul de ore lucrate minus impozitul, bonusul este un anumit procent din salariu etc.

Care este tipul de calcul, bază?

Tip de calcul - orice parte a unui calcul periodic complex, de exemplu, un bonus.

Baza este de la care începem când vedem calculul. De exemplu, pentru a calcula un bonus, trebuie să cunoaștem salariul. Mai mult decât atât, nu doar salariul pentru lună este aleatoriu, ci acele numere care se acumulează în acea perioadă (perioada de bază), care vor influența calculul bonusului.

Care este diferența dintre perioada de bază, perioada reală și perioada de valabilitate?

Perioada de valabilitate – specificată de dumneavoastră, adică date valabile pentru perioada specificată.

Perioada reală este ceea ce rămâne din perioada de valabilitate după efectuarea calculelor (de exemplu, toate zilele nelucrătoare sunt eliminate).

Perioada de bază – o perioadă în care sunt analizate rezultatele altor calcule care afectează calculul perioadei de bază.

De fapt, nu înțeleg această întrebare anume. Un fel de act de echilibrare verbală, sincer.

Ce este dependența din perioada de bază?

Ei bine, aici pare mai mult sau mai puțin clar. Dacă trebuie să calculăm bonusul ca procent din salariu, atunci vom avea nevoie nu de un salariu în general, ci de un salariu pe o anumită perioadă, salariul în care afectează bonusul. Atunci perioada poate fi numită perioadă de bază, iar dependența poate fi numită dependență de perioada de bază.

Ce este preempțiunea perioadei?

Să începem cu faptul că „excluderea” este un efect asupra calculului. Apoi credem că cineva a lucrat 20 de zile, i-a calculat salariul, dar s-a dovedit că a lucrat doar 10 zile. Apoi salariul trebuie recalculat tocmai pentru perioada în care angajatul a lucrat direct, asta numesc Odesnikul deplasare pe perioadă de acțiune.

Care este scopul obiectului de configurare Plan tip calcul?

Planul tipurilor de calcul are scopul de a descrie structura de stocare a informațiilor despre posibilele tipuri de calcule. În esență, acesta este un tabel care stochează informații despre ce tipuri de calcule există și care sunt relațiile dintre ele.

În timpul funcționării, utilizatorul însuși poate adăuga noi tipuri de calcule.

Care sunt principalele proprietăți ale planului de tip de calcul?

Următoarele proprietăți: Utilizează perioada de valabilitate - acest tip determină dacă planul de tipuri de calcul conține tipuri de calcul care pot fi înlocuite de perioada de valabilitate.

Dependență de bază – dacă vor exista tipuri de calcul în funcție de perioada de bază.

Dependența de perioada acțiunii - vor fi selectate acele înregistrări pentru care se găsește intersecția perioadei lor reale de acțiune și perioada de bază specificată;

Dependența de perioada de înregistrare - se va lucra cu acele date a căror introducere în câmpul Perioada de înregistrare se încadrează în perioada de bază;

Care este diferența dintre tipurile de calcul de bază, preventiv și de conducere?

De bază – rezultatele tipurilor de calcul de bază ar trebui utilizate pentru recalculare;

Deplasare – deplasează calculele pe baza perioadei de valabilitate;

Leading – dacă rezultatul calculului principal s-a modificat, atunci întregul calcul trebuie recalculat;

Cum se creează un plan pentru tipurile de calcul?

La fel ca tot în 1C! În arborele de configurare, faceți clic dreapta.

Ce este obiectul de configurare Registrul de calcul?

Menit să descrie structura acumulării de date, care sunt rezultatele calculelor.

Mulți programatori 1C nu au întâlnit niciodată componenta „Calcul” în practica lor, prin urmare, atunci când trebuie să susțină examene pentru un Specialist pe Platforma 8.0, unde fiecare sarcină conține o sarcină de calcule periodice complexe, apar dificultăți, în primul rând dificultăți de înțelegere.

Să încercăm să descoperim această componentă în 8.0. În loc să rezolvăm diverse probleme de calcul, să încercăm să înțelegem această componentă, astfel încât să putem rezolva orice problemă de calcul. După ce ați studiat acest manual, veți înțelege cum sunt aranjate și cum funcționează registrele de calcul.

De exemplu, vom folosi configurația cadru instalată în timpul examenelor.

Sincer să fiu, am încercat multă vreme să-mi dau seama pentru ce mai erau necesare calcule, dar nu am reușit să-mi dau seama, așa că să luăm în considerare problema calculării salariilor.

Ce sunt calculele

Practic, produsul de salarizare final este un set de intrări din registrul de salarizare sub forma:

Angajat

Perioadă

Tipul de calcul

Rezultat

Date

Un comentariu

Măsurare

Oficial

Oficial

Recuzită

Valoarea din coloana „Date” reflectă salariul de bază al angajatului (conform contractului de muncă), dar această sumă poate fi majorată cu sporuri, redusă cu amenzi și absenteism etc., prin urmare, suma efectivă de plătit se înscrie după calculul din coloana „Rezultat”. Acesta este calculul. Suma din coloana „Resurse” pentru un anumit angajat este salariul care i se cuvine.

Astfel, registrul de calcul este în esență un set de înregistrări, similar ca structură cu registrul de acumulare negociabil. Doar că, pentru a efectua calcule complexe, sunt specificate setări suplimentare pentru acesta, care vă permit apoi să construiți multe tabele virtuale pentru registrul de calcul, deși, în esență, acest registru este doar un set de înregistrări indicate în figură.

Fiecare înregistrare în registrul de decontare se referă la un anumit tip de decontare și perioadă de timp.

Tipuri de calcule

Fiecare înregistrare a tipurilor de calcul are un atribut de serviciu - tip de calcul.

Un tip de calcul poate fi gândit ca un element al unei cărți de referință speciale, cum ar fi „Planul de tipuri de calcule” - are și detalii, părți tabelare, elemente predefinite și create de utilizator. Pot exista mai multe astfel de „directoare” în sistem.

De exemplu, să creăm un plan pentru tipurile de calcul Principal și în el tipuri de calcul predefinite salariu, primă, absenta, călătorie de afaceri.

Tipurile de calcul sunt utilizate funcțional pentru a reflecta influența intrărilor din registrul de calcul unul asupra celuilalt. Dar, pe scurt, vorbesc despre influența tipurilor de calcul unul asupra celuilalt:

Tipul de calcul

Descriere

Exemplu

După perioada de bază

Rezultatul calculului perioadei dependente depinde de rezultatul perioadei de bază. Dacă rezultatul perioadei de bază se modifică, rezultatul perioadei dependente trebuie recalculat.

Bonusul depinde de salariul din perioada de bază.

Ștergerea punctului

Perioada de valabilitate a perioadei dependente înlocuiește perioada de valabilitate a perioadei de bază, astfel încât perioada de bază are o valoare reală

Absentismul afectează perioada efectivă a salariului.

Calcule de conducere

Calculul depinde de calculul principal, dar nu direct, ci indirect, adică. calculul A depinde de calculul de bază B, iar calculul B depinde de calculul de bază B, prin urmare A depinde indirect de B, adică. A depinde de calculul principal B. De fapt, atunci când calculul C se modifică, B se poate schimba și, prin urmare, A se poate modifica automat.

Bonusul depinde de baza salariului, dar depinde și indirect de absenteism.

Datorită acestei influențe, perioada de valabilitate a înscrierii în registrul de decontare este împărțită în patru perioade:

Perioadă

Descriere

Perioada de înscriere

În ce perioadă a fost înregistrat evenimentul, adică de obicei atunci când este introdus un document.

Valabilitate

În ce perioadă operează evenimentul, adică cărei perioade aparține evenimentul.

Perioada de bază

Semnificativ doar pentru perioadele care au o perioadă de bază - descrie intervalul perioadei de bază.

Perioada de valabilitate reală

Dacă perioada de valabilitate este înlocuită de alte tipuri de calcule, atunci perioada de valabilitate reală constă din mai multe perioade în care acest tip de calcul este efectiv în vigoare.

Perioada de înregistrare este specificată printr-un număr - începutul perioadei, corespunzător frecvenței registrului de calcul. Chiar dacă setăm o dată diferită în acest domeniu de serviciu, aceasta va fi totuși înlocuită cu începutul perioadei. Perioadele rămase sunt specificate de două câmpuri - începutul și sfârșitul perioadei Perioada reală de valabilitate este un set de perioade, deoarece poate consta din mai multe intervale de date.

Diagrame de timp

Sistemul are capacitatea de a lega datele din registrele de calcul cu diagrame de timp, astfel încât numărul de ore de lucru să poată fi obținut pentru orice perioadă.

O cronologie este un simplu registru de informații în care o dimensiune stochează o dată, alta este asociată cu o dimensiune printr-un registru de calcul, iar una dintre resurse este utilizată pentru a urmări timpul.

O dimensiune care asociat cu registrul de calcul poartă de obicei adică „tip de grafic”.

Data

Tipul graficului

Sens

11.01.05 vineri

Cinci zile

11.01.05 vineri

Șase zile

12.01.05 sat

Cinci zile

12.01.05 sat

Șase zile

De ce să folosiți dimensiunea dată mai degrabă decât registrul de detalii periodice? Totul este foarte simplu - dacă vineri, 11 ianuarie, avem 8 ore de lucru într-o perioadă de cinci zile, asta nu înseamnă că a doua zi vom avea din nou 8 ore de lucru. Dar dacă am folosi un registru periodic, valoarea pentru ziua următoare ar fi luată din ziua precedentă în lipsa înregistrărilor.

Astfel, având o anumită perioadă (acțiune efectivă, înregistrare, perioadă de bază etc.) putem obține automat numărul de ore pentru această perioadă conform programului.

Recalculare

Recalcularea amintește oarecum de granița unei secvențe. Întrucât avem calcule dependente, atunci când le schimbăm calculele de bază și de început, sistemul trebuie cumva să rețină că trebuie să recalculăm calculele dependente.

Pentru asta sunt recalculările.

Dacă calculăm înregistrările de bază, sistemul va nota în alocări că avem nevoie pentru a calcula înregistrările dependente. Odată ce calculăm înregistrările dependente, alocările se vor șterge.

În esență, recalculările sunt o listă de intrări din registrul de calcul care trebuie recalculate.

Dacă nu introduceți măsurători în recalculări, atunci când calculele de bază se schimbă, toate înregistrările dependente vor fi adăugate la lista de recalculări.

Dacă creăm dimensiunea „Angajat” în recalculare, atunci când calculul de bază pentru un angajat este modificat, înregistrările dependente numai pentru acest angajat vor fi adăugate la recalculări.

Sarcina practică

Ajunge teorie. Să încercăm să studiem detaliile în practică. Să luăm ca bază configurația cadrului.

Formularea problemei:

Sa fie stabilit bonusul ca procent fix din salariu (minus absenteism si indemnizatii de deplasare).

Lăsați indemnizațiile de călătorie să fie plătite în salariu dublu + o sumă fixă ​​de plăți pentru fiecare zi de călătorie.

Să i se pună salariatului o amendă în cuantum de jumătate din salariu pentru perioada de absență pentru absenteism.

Progres:

Antrenament initial

Să creăm un nou plan pentru tipurile de calcul „Principal”.

Să definim tipurile de calcule și dependențele dintre ele:

De bază

Deplasare

Prezentatori

Salariu

Absentism, Călătorie de afaceri

Premiu

Absentism, Călătorie de afaceri

Salariu, absenteism, călătorie de afaceri

Călătorie de afaceri

Absenteism

Să adăugăm aceste tipuri de calcule la planul de tipuri de calcul „Principal” și să setăm dependențele în proprietățile tipurilor de calcul conform tabelului.

În registrul de calcul al salariilor vom crea dimensiunea „Angajat” de tip „Persoane fizice” - astfel încât registrul să aibă o secțiune de analiză pentru angajați.

Configurația conține deja documentul „Salarizare”.

Are două date în antet - „data” și „perioada de înregistrare”, precum și două date „data de început” și „data de încheiere” în fiecare rând.

Se înțelege că data este pur și simplu data la care a fost întocmit documentul, perioada de înregistrare indică pentru ce lună numărăm salariul, iar datele din fiecare rând descriu perioada de valabilitate a fiecărui tip de calcul.

Să adăugăm setarea inițială a atributului „Date” la modulul de document - vom introduce salariul de pornire, setând în el perioada de înregistrare, perioada de valabilitate și perioada de bază.

Modulul de document va arăta cam așa:

Pentru Pentru fiecare TechStringList Din ciclul listă

// înregistrează Calcule

Mișcare = Mișcări .Calcule.Adăugaţi();

Circulaţie .S torno= fals;

Circulaţie .În idCalcul = TechStringList.CalculationType;

Circulaţie .PeriodActionsStart= Începutul zilei ( TechStringList.StartDate);

Circulaţie .PeriodActionEnd= EndDay();

Circulaţie .Perioada de înscriere = Perioada de înregistrare;

Circulaţie .BasicPeriodStart= Începutul zilei ( TechStringList.StartDate);

Circulaţie .BasePeriodEnd= EndDay ( TechStringList.Data de încheiere);

Circulaţie .Angajat = TechStringList.Angajat;

Circulaţie .Programa = TechStringList.Graph;

Circulaţie .Rezultat = 0;

Circulaţie .Date = TechStringList.Size;

EndCycle ;

Atributul de inversare este necesar pentru a inversa intrările (analog cu semnul minus).

Indicăm tipul de calcul și setăm datele la începutul și sfârșitul zilei. Desigur, perioada de bază poate fi introdusă doar pentru tipuri de calcul dependente de bază, iar Datele pot fi introduse doar pentru salariu, dar totul funcționează așa.

Vom data toate documentele 20/01/2003, perioada de înregistrare va fi setată la 02/01/2003 (indic în mod specific nu datele de început și de sfârșit, acest lucru nu contează aici, oricum, la înregistrarea în Perioada de înregistrare convertit la începutul perioadei 01/01/2003). Folosim ianuarie 2003 pentru că s-au finalizat graficele de lucru pentru această perioadă.

Să creăm o recalculare „Recalculare” și să adăugăm la aceasta dimensiunea „Angajat” asociată cu dimensiunea „Angajat”.

Jucând cu recalculări.

Pentru a juca jocul, deschideți consola de solicitări - procesare " CustomRequest» într-o configurație de cadru. Să creăm o nouă interogare folosind constructorul de interogări și să adăugăm un tabel virtual acolo Recalculări, textul cererii va fi astfel:

ALEGE

CalculationsRecalculation.Despre obiectul Recalculation,

CalculationsRecalculation.In Calculation ID,

Calcule Recalcul de la angajat

DIN

Registrul de calcul Calcule CUM CalculeRecalculare

Vom genera trei documente - mai întâi vom acumula salarii angajaților A și B. Angajatul A lucrează de la 1 la 31 ianuarie, B lucrează de la 1 la 20 ianuarie. Al doilea va atribui un bonus angajatului B pentru perioada 1-31 ianuarie, al treilea va atribui absenteismul angajatului A din 20 până în 25 ianuarie.

Ne jucăm cu Perioada de valabilitate reală.

Să creăm o nouă interogare - de data aceasta îi vom adăuga date de tabel Registre de calcul Calcule.

Să creăm o cerere și să vedem că perioada de salarizare a angajatului A este împărțită în două perioade - de la 1 la 19 ianuarie și de la 26 la 31 ianuarie. Sper că înțelegeți că perioada a fost împărțită în două, pentru că... absenteismul a înlocuit salariul.

Cred că mecanismele de funcționare a registrului de calcul devin din ce în ce mai clare în fața ochilor noștri.

Să studiem graficele.

Acum să încercăm să calculăm salariul pe baza salariului angajatului.

Să creăm o nouă interogare pentru registrul de calcul folosind un tabel virtual Registre de calcul Calcule. Puteți seta un parametru pentru acest tabel virtual - o condiție pentru selectarea înregistrărilor, de exemplu Employee=&SelectEmployeeȘi Tipul de calcul=&Tipul de calculȘi Graph=&ViewGraphic.

Să setăm anumiți angajați, tipuri de calcule și programări în parametrii de solicitare și să vedem câte ore sunt rezultatul.

Coloana cu rezultate

Sens

ValuePeriodAction

Pentru ce perioadă de valabilitate în ore a fost înscrierea în registru.

ValueActualPeriodAction

Câte ore a lucrat efectiv angajatul?

ValueBasePeriod

Pentru salariu nu are sens, pentru bonusuri - numărul de ore de lucru din perioada de bază.

Valoare Perioada de înregistrare

Câte ore de lucru sunt în perioada de înregistrare (luna ianuarie)