Základ není správně vypočítán – Kaminsoft
V tomto článku se budeme zabývat teoretickými základy práce s výpočetními registry a také vypočítáme plat zaměstnance v poměru k počtu odpracovaných hodin.
Teorie
Registr vypořádání (RR) — objekt konfiguračních metadat používaný k implementaci periodických výpočtů v systému 1C. Ze zřejmých oblastí použití výpočtových registrů lze rozlišit: výpočet platu, výpočet nájemného, výpočet nájemného.
Výpočtové registry jsou svou strukturou podobné akumulačním registrům nebo informačním registrům. Stejně jako akumulační registry mají dimenze, zdroje a podrobnosti, ale princip fungování výpočtových registrů je zcela odlišný.
V podstatě měření v akumulačním registru slouží jako „filtr„v kontextu, v němž přijímáme data z akumulačního registru. Jako příklad si vezměme „zůstatky“ akumulačního registru „Zůstatky zboží“ v kontextu určité nomenklatury nebo „poslední řez“ v informačním registru „Platy zaměstnanců“ v kontextu určitého zaměstnance. Na rozdíl od akumulačního registru slouží měření v periodickém výpočtovém registru k implementaci „mechanismus posunutí podle doby působení„(v tomto případě si časově prodloužené typy výpočtu konkurují v intervalu doby platnosti záznamu, tj. například typ výpočtu pracovní cesta nahrazuje typ výpočtu plat o dobu platnosti) a“mechanismus závislosti základního období„(v tomto případě typ výpočtu bonusu závisí na typu výpočtu platu za předchozí období).“

Obrázek výše graficky znázorňuje princip „mechanismus posunutí podle doby působení„:
Zde vidíme, že typ výpočtu „Služební cesta“ má dobu trvání v čase a je platný od 10. dubna do 20. dubna, „Služební cesta“ je zadána jako posunující typ výpočtu pro typ výpočtu „Plat“. „Plat“ má také dobu trvání v čase a je platný od 1. dubna do 30. dubna. Protože „Služební cesta“ je pro typ výpočtu „Plat“ zadána jako posunující typ výpočtu (má vyšší prioritu než plat) a je platná během doby platnosti platu, je plat posunut o pracovní cestu a vzniká „Doba platnosti skutečného platu“. „Doba platnosti skutečného platu“ je doba platnosti platu po posunutí o pracovní cestu, v našem případě se skládá ze 2 období – od 1. dubna do 9. dubna a od 21. dubna do 30. dubna a celkem je 19 dní. Mechanismus posunu o dobu platnosti funguje pouze pro výpočty, které jsou časově prodlouženy.

Obrázek výše graficky znázorňuje princip „mechanismus závislosti základního období„:
Řekněme, že na konci dubna 2017 chceme zaměstnanci připsat bonus ve výši 10 % z platu. Plat je uveden jako základní typ výpočtu pro bonus.
Ale jako „základ“ pro výpočet bonusu nebudeme brát celý měsíc duben, ale pouze interval od 10. do 20. dubna (11 dní). Vypočítáme základ pro bonus, plat zaměstnance je 60000 30 rublů, měsíc má 60000 dní, denní mzda = 30 2000 / 2000 = 11 22000 rublů. Pak 22000 XNUMX * XNUMX = XNUMX XNUMX rublů. Základ pro výpočet bonusu je XNUMX XNUMX rublů.
Vypočítáme bonus: (22000/100)*10 = 2200 rublů. Bonus ve výši 10 % z platu je 2200 rublů.
Výpočetní registr je úzce propojen s použitým metadatovým objektem „Graf typů výpočtů“.
Plán typů výpočtů (PVR) — objekt konfiguračních metadat, který ukládá informace o typech výpočtů a určuje vzájemný vliv různých výpočtů.
Jeden graf typů výpočtů lze použít v několika výpočetních registrech, ale jeden výpočetní registr nemůže používat několik grafů typů výpočtů současně.
Výpočetní registr je tabulka, ve které jsou uložena vypočítaná data a výpočtové algoritmy pro tato data jsou uloženy v plánu typů výpočtů. Výpočetní registr musí nutně obsahovat alespoň jeden registrační dokument, který provádí pohyby v tomto výpočtovém registru (například Přírůstek platu).
Výpočtové mechanismy v systému 1C Enterprise jsou navrženy tak, že nejprve je nutné provést záznamy do výpočetního registru a teprve poté provést výpočet na základě těchto dat. Například bonus nelze vypočítat na základě platu, dokud není tento plat zaznamenán do výpočetního registru.
Praxe
Pojďme se blíže podívat na výpočtové registry v praxi:
Krok 1Začněme s plánem typů výpočtů. Plán typů výpočtů musí být vytvořen před vytvořením registru výpočtů. Plán typů výpočtů vytváříme před registrem výpočtů, protože před vytvořením tabulky pro ukládání vypočítaných dat (tj. registru výpočtů) je nutné nastavit algoritmy výpočtů pro tato data (tj. plán typů výpočtů).
Vytvořme si plán typů výpočtů „Hlavní časové rozlišení“. Přejděme ihned na kartu „Výpočet“. Zde ihned uvidíme příznak „Používá dobu platnosti„, pokud je tento příznak nastaven, všechny typy výpočtů zahrnuté v tomto plánu budou mít trvání v čase(například Plat, Služební cesta) a pro tento plán typů výpočtů „mechanismus posunutí podle doby působení„. Pokud není nastaven příznak „Používá dobu platnosti“, pak typy výpočtů nebudou mít časovou délku (například Bonus, Penalizace) a „mechanismus posunutí podle doby platnosti“ nebude fungovat. Na této kartě se také nacházejí sekce „Závislost na základu“ a „Základní plány typů výpočtů“ – ty slouží k implementaci „mechanismus závislosti základního období„, ale o tom si povíme později. Prozatím ponechme „Závislost na bázi“ v režimu „Nezávisí“.
Dále přejděte na kartu „Ostatní“. Klikněte na tlačítko „Předdefinované“. Otevře se okno s předdefinovanými typy výpočtů.

Vytvořme si předdefinovaný typ výpočtu „Plat“. Vše je jednoduché na kartě „Hlavní“. Nastavíme název a kód typu výpočtu.

Díky tomu, že jsme vztyčili vlajku „Používá dobu platnosti„Máme záložku“Vytesnyayushchie„a zapnul“mechanismus posunutí podle doby působení„.
Na této kartě uvádíme typy výpočtů, které nahradí plat po dobu platnosti (například Služební cesta).
Poznámka: v části „Přesun“ můžete přidat typy výpočtů, které patří pouze do tohoto plánu typů výpočtů.
Je zde také záložkaVedoucí„— určuje typy výpočtů, při jejichž změně by se měl aktuální typ výpočtu přepočítat. Zde můžete také zadat typy výpočtů z jiných plánů typů výpočtů. Například typ výpočtu „Plat“ je hlavní pro typ výpočtu „Bonus“, tj. při změně platu by se měl přepočítat i náš bonus, protože bonus se připočítává v závislosti na platu. V tomto případě patří typ výpočtu „Plat“ do PVR „Základní časové rozlišení“ s použitím doby platnosti a typ výpočtu „Bonus“ patří do PVR „Doplňkové časové rozlišení“ bez použití doby platnosti.
Krok 2Vytvořme adresář „Schedules“ s výchozí strukturou. V adresáři „Schedules“ budeme ukládat pracovní rozvrhy zaměstnanců (pětidenní pracovní týden, šestidenní pracovní týden atd.).
Krok 3Dále potřebujeme objekt, ve kterém budeme ukládat Produkční kalendář (pracovní a víkendové dny). Pro tyto účely používáme neperiodický nezávislý registr informací.
Vytvořme neperiodický nezávislý registr informací „Pracovní rozvrhy“ se 2 dimenzemi „Datum“ a „Rozvrh“ a zdrojem „Počet hodin“.

Díky informačnímu registru „Pracovní rozvrhy“ budeme moci vypočítat mzdu z platu v poměru k počtu odpracovaných dnů.
Krok 4Vytvořme dokument „Mzdy“ se strukturou údajů uvedenou níže:

Zaměstnanec – typ „DirectoryReference.Individuals“;
Typ výpočtu – typ „PlánTypyVýpočtuReference.HlavníČasovéRozpočty“;
Graf – typ „DirectoryReference.Graphs“;
Provozní provedení jsme nastavili na „Zakázat“. protože to nedává smysl pro mechanismus periodických výpočtů v 1C – nikdy nevypočítáváme bonusy, platy ani pokuty v reálném čase.
Vytvořme formulář dokumentu s výchozím nastavením.
Krok 5Konečně jsme se dostali k vytvoření výpočetních registrů.
Objekt metadat výpočetního registru se nachází ve větvi „Výpočetní registry“ v konfigurátoru.
Vytvořme si výpočetní registr „Hlavní časové rozlišení“. Nastavení výpočetního registru je popsáno níže:

1. V poli „Plán typů výpočtů“ uveďte PVR „Hlavní časové rozlišení“ vytvořený v kroku 1.
2. Nastavte příznak „Doba platnosti“ na „True“, protože PVR zadaný v kroku 1 má trvání v čase.
Po nastavení tohoto příznaku se nám okamžitě zpřístupní standardní detaily „ActionPeriod“, „ActionPeriodStart“, „ActionPeriodEnd“, což znamená, že typy výpočtů registrované v tomto výpočetním registru mají také trvání v čase a máme přístup k „mechanismus posunutí podle doby působení„.
P.S. Pokud zadáte PVR, který má trvání v čase Pro RR s příznakem „Period of Action“ nastaveným na „False“ bude tento PVR fungovat jako PVR, který nemá trvání v čase.
3. Po nastavení příznaku „Doba platnosti“ na „True“ se nám zpřístupní pole „Plán“, „Hodnota plánu“ a „Datum plánu“.
V poli „Plán“ uvedeme informační registr „Pracovní harmonogramy“ vytvořený v kroku 3.
V poli „Hodnota plánu“ uvádíme zdroj „Počet hodin“ z informačního registru „Pracovní plány“.
V poli „Datum plánování“ uvádíme dimenzi „Datum“ informačního registru „Pracovní plány“.
4. V poli „Četnost“ uvedeme hodnotu „Měsíc“, to znamená, že data budou do registru zadávána měsíčně.
Struktura metadat registru je uvedena níže:

Příznak „Základní“ pro dimenzi ovlivňuje pouze výkon, není nutné ho nastavovat, ale pokud ho nastavíte, pole „Zaměstnanec“ bude indexováno.
Dimenze „Zaměstnanec“ – používá se v „mechanismus posunutí podle doby působení„A“mechanismus závislosti na základním období„.
Zdroj „Částka“ – tam bude zapsána vypočítaná mzda.
Atribut „Graf“ je specifikován jako atribut, nikoli jako dimenze registru, protože ani on, ani on nic neposouvá – v podstatě jde o referenční pole. Důležité: Nezapomeňte vyplnit pole „Připojení k plánu“. U atributu „Plán“ musí být v informačním registru „Pracovní plány“ uvedena dimenze „Plán“, jinak se výše mzdy nevypočítá.
Vlastnost „Parametr“ uloží hodnotu platu.
Nyní, když jsme specifikovali propojení s RS „Pracovní rozvrhy“, vypočítáme plat zaměstnance v poměru k počtu odpracovaných dnů.
Jako registrátor označujeme dokument „Mzdy„, vytvořený v kroku 4.
Krok 6Provádíme pohyby v registru výpočtů „Hlavní časové rozlišení“.
Vraťme se k dokumentu „Mzdy“ vytvořenému v kroku 4.
Popišme si zpracování spuštění v modulu objektu dokumentu:
Procedura PostingProcessing(Refusal, PostingMode) // registrace MainAccruals Movements.MainAccruals.Write = True; Movements.MainAccruals.Clear(); RegistrationPeriod=BeginningOfMonth(Date); Pro každý CurrentLineMainAccruals Z cyklu MainAccruals Movement = Movements.MainAccruals.Add(); Movement.Reversal = False; Movement.CalculationType = CurrentLineMainAccruals.CalculationType; Movement.ActionPeriodBegin = CurrentLineMainAccruals.StartDate; Movement.ActionPeriodEnd = EndOfDay(CurrentLineMainAccruals.EndDate); Movement.RegistrationPeriod = RegistrationPeriod; Movement.Employee = CurrentLineMainAccruals.Employee; Movement.Schedule = CurrentLineMainAccruals.Schedule; Movement.Parameter = CurrentLineMainAccruals.Size; EndCycle; EndProcedure
Vytvořme testovací dokument a spusťme ho:
Pojďme na „Přesuny dokumentů“:
Vidíme, že registrační období je nastaveno na začátek měsíce, protože frekvence RR je nastavena na „Měsíc“. Také vidíme, že všechna pole jsou vyplněna kromě částky (plat ještě nebyl vypočítán).
Krok 7Napišme si kód pro výpočet mezd.
Vytvořme společný modul „Výpočet“ s následujícími příznaky:

V tomto obecném modulu proběhne samotný výpočet.
Napišme exportní funkci „Vypočítat časové rozlišení“ v modulu „Výpočet“:
Protože jsme v nastavení RR „Hlavní časové rozlišení“ vyplnili pole „Plán“, „Hodnota plánu“, „Datum plánu“, zpřístupnila se nám virtuální tabulka registru výpočtů. DataGraphics, V dotazu na virtuální tabulku nás zajímají tato pole:
„Počet hodinSkutečná doba trvání“ — obsahuje počet skutečně odpracovaných hodin vypočítaný na základě dat z grafu
„Počet hodin akčního období“ — obsahuje počet pracovních hodin ve výpočtovém období vypočítaný na základě dat z rozvrhu
Procedura VypočítatČasovéRozpisy(Registrar, SadaZáznamů) Export //DotazPlat = NovýDotaz; Query.Text="SELECT | ISNULL(HlavníPlánDatAkcí.PočetHodinSkutečnýObdobíPlatnost, 0) AS HoursActual, | MainAccrualsDataSchedule.Parameter, | ISNULL(HlavníPlánDatAkcí.PočetHodinAkčníObdobí, 0) AS HoursPlan, | MainAccrualsDataSchedule.ČísloŘádku | FROM | VýpočetníRegister.HlavníČasovéRozpisy.DataSchedule( | Registrátor = &Registrar | AND TypVýpočtu = &TypVýpočtuPlat) AS MainAccrualsDataSchedule"; Query.SetParameter("Registrar", Registrátor); // předáme dokument registrátorovi, aby vyhledávání probíhalo pouze podle aktuálního dokumentu Query.SetParameter("TypVýpočtuPlat", TypVýpočtuPlány.HlavníČasovéRozpisy.Plat); // typ výpočtu nastavíme na plat, protože počítáme plat Selection=Query.Execute().Select(); SearchStructure=New Structure; SearchStructure.Insert("RowNumber",0); // vytvoříme strukturu pro vyhledávání dat pro výpočet podle čísla řádku For Each Record From RecordSet Loop // projdeme množinu záznamů aktuálního dokumentu SearchStructure.RowNumber=Record.RowNumber; //doplníme číslo řádku pro vyhledávání If Selection.FindNext(SearchStructure) Then //vyhledáme ve výběru data pro výpočet podle aktuálního čísla řádku Record.Amount =?(Sample.HoursPlan=0,0, Selection.HoursFact/Sample.HoursPlan * Selection.Parameter); //vypočítáme plat proporcionálně k odpracovaným dnům, v Parametru - aktuální plat EndIf; Selection.Reset(); //resetujeme výběr, potřebujeme další záznam v sadě záznamů, abychom nejprve prohledali výběr EndCycle; RecordSet.Write(,True); //zapíše vypočítané záznamy do databáze, předá parametr Replace = True EndProcedure Na konci zpracování zaúčtování dokumentů, po předchozím zaznamenání kolekce pohybů dokumentů, zavoláme proceduru „Vypočítat časové rozlišení“:
Movements.Write(); Výpočet.VypočítatČasové rozlišení(Reference, Movements.HlavníČasové rozlišení);
Krok 8Vypočítáme si plat zaměstnance.
Vyplňme si předem „Pracovní rozvrhy“ RS na rok 2017, rozvrh je pětidenní pracovní týden, každý pracovní den má 8 hodin:
Spusťme znovu dříve vytvořený dokument Mzdy a uvidíme, že náš plat byl vypočítán proporcionálně k odpracované době:
Dobrý den. Dobrý den, vážení členové fóra. Prosím, pomozte mi to vyřešit. Při výpočtu pojistného se základ počítá nesprávně. Jak to mohu opravit, prosím, řekněte mi.
VELMI DĚKUJI VŠEM, KTEŘÍ REAGUJÍ
Téma je uzavřeno.
Olga Artěmjevová
Platinový člen


11. srpna 2016 11:29 #2
#2 od Olgy Artemjevové
Podrobně popište, co je to odpočet, jak se nastavuje, jaký by měl být základ a co se odečítá.
Obecně se vyplatí zkontrolovat způsob zahrnutí všech časových rozlišení do databáze pojištění v adresáři „Časové rozlišení“.
Artemyeva Olga, skupina společností KAMIN
Téma je uzavřeno.
Děkuji, řekl: Andrey Lanshin
Nováček


11. srpna 2016 11:45 #3
Ano, samozřejmě, prosím.
Téma je uzavřeno.
![]()
Olga Artěmjevová
Platinový člen


11. srpna 2016 12:54 #4
#4 od Olgy Artemjevové
A za předchozí měsíce byl výpočet správný? Uveďte souhrn srážek a daní za období 01.01. – 30.06.
Artemyeva Olga, skupina společností KAMIN
Téma je uzavřeno.
Děkuji, řekl: Andrey Lanshin
Nováček


11. srpna 2016 13:56 #5
za předchozí měsíce bylo vše vypočítáno správně
Téma je uzavřeno.
![]()


11. srpna 2016 14:17 #6
Mám pocit, že se to nezaokrouhluje nahoru jako dřív. Zkoušel jsem to vypočítat od dubna a výsledek je stejný – nezahrnuje to celý základ.
Téma je uzavřeno.
Olga Artěmjevová
Platinový člen


11. srpna 2016 14:18 #7
#7 od Olgy Artemjevové
Zkuste vypočítat leden. Stejný problém?
Artemyeva Olga, skupina společností KAMIN
Téma je uzavřeno.
Nováček


11. srpna 2016 14:23 #8
Ne, za leden se vypočítá, jako by mělo být nahromaděno 44000 44000, a základ pro výpočet příspěvků se vypočítá z XNUMX XNUMX.
Téma je uzavřeno.
Olga Artěmjevová
Platinový člen


11. srpna 2016 14:24 #9
#9 od Olgy Artemjevové
Pak pokračujte v měsíčním přepočítávání. Hledejte měsíc, ve kterém se objeví nesrovnalost.
Artemyeva Olga, skupina společností KAMIN
Téma je uzavřeno.
Děkuji, řekl: Andrey Lanshin
Nováček


11. srpna 2016 14:34 #10
Moc děkuji za pomoc, převedla jsem příspěvky za duben a to je vše. Všechno do sebe zapadlo. OBROVSKÉ díky.
Téma je uzavřeno.
Nováček


11. srpna 2016 14:35 #11
A prosím, řekněte mi, jestli jste se podíval/a, jestli mám správně nastavené časové rozlišení?
Téma je uzavřeno.
Olga Artěmjevová
Platinový člen


11. srpna 2016 14:38 #12
#12 od Olgy Artemjevové
V části Časové rozlišení si prosím všimněte, že zaškrtávací políčko „Existuje základ“ (na první záložce) je nastaveno pouze u těch časových rozlišení, které se vypočítávají na základě základu, například nemocenská, dovolená, pracovní cesty. U nich specifikujete, které časové rozlišení tvoří základ pro výpočet. Toto zaškrtávací políčko máte nastavené u mzdy a pracovní dohody, což je nesprávné.