Форма Т-1, Т-5 для ЗУП 3.1.8




Внешняя печатная форма для Приема на работу Т-1 и Кадрового перевода Т-5.
Вывод данных полностью идентичен типовому, добавлен вывод дополнительных данных по начислениям.

Потребовалось вывести: ставку, значения коэффициентов (районный коэффициент, северная надбавка), к коэффициентам суммы и надбавки.

Испытания проводились на полностью типовой конфигурации, значения коэффициентов хранятся в разных местах, надбавки могут быть как типовыми, так и добавленными.
Выложенный ранее алгоритм и код оказался не совсем корректным, т.к. выводил значения установленные первым документом, которым они введены. Если спустя некоторое время размер выплаты или процент коэффициента был изменен, в получении данных это не отражалось. Получается что данные хранятся только по дате ввода, изменения рассчитываются.
Причем этим кодом пользовался уже давно и ни разу не попал на скорректированные суммы начислений, соответственно был уверен в правильности, тем более что это на основе кода написанного специалистом из франчайза. Как оказалось пренебрегать тестами не стоит.
Изобретать велосипед не очень хотелось, хотя его почти и собрал, поэтому решил поискать функционал в коде конфигурации ЗУП. И все было найдено, с небольшими доработками получаем все данные. В БД где вел тестирование используется СН, РК и различные надбавки. Странным оказалось только одно, процент СН (северной надбавки) получается отдельной процедурой. Логично было бы получать одной все начисления, но СН оказался отдельно.

Печатные формы полностью типовые как по макету, так и по коду, разве что внешние.

Вот код в части вывода начислений:

  Параметры.СН = КадровыйУчетРасширенный.ПроцентСевернойНадбавки(Параметры.Ссылка.Сотрудник, ТекущаяДатаСеанса());

Параметры.РК = "";
Параметры.НадбавкаЦелаяЧасть   = 0;
Параметры.НадбавкаДробнаяЧасть = "00";
Параметры.РКЦелаяЧасть         = 0;
Параметры.РКДробнаяЧасть       = "00";
Параметры.СНЦелаяЧасть         = 0;
Параметры.СНДробнаяЧасть       = "00";
Параметры.ГрафикРаботы = Параметры.Ссылка.ГрафикРаботы.Наименование;
Надбавка = 0;
ТЗДанных = ПолучитьДанныеНачисленийСотрудника(Выборка.Ссылка, Параметры.Ссылка.Сотрудник);
Для каждого СтрокаТЗДанных из ТЗДанных Цикл
Если СтрокаТЗДанных.Значение = Параметры.ОкладТарифнаяСтавкаЦелаяЧасть или СтрокаТЗДанных.Начисление = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оплата по окладу", Истина) Тогда
ИначеЕсли СтрокаТЗДанных.Начисление = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Районный коэффициент", Истина) Тогда
Параметры.РК             = СтрокаТЗДанных.Значение;
Параметры.РКЦелаяЧасть   = Цел(СтрокаТЗДанных.Размер);
ДробнаяЧасть             = СтрокаТЗДанных.Размер - Параметры.РКЦелаяЧасть;
Параметры.РКДробнаяЧасть = ?(ДробнаяЧасть = 0, "00", ДробнаяЧасть*100);
ИначеЕсли СтрокаТЗДанных.Начисление = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Северная надбавка", Истина) Тогда
Параметры.СНЦелаяЧасть   = Цел(СтрокаТЗДанных.Размер);
ДробнаяЧасть             = СтрокаТЗДанных.Размер - Параметры.СНЦелаяЧасть;
Параметры.СНДробнаяЧасть = ?(ДробнаяЧасть = 0, "00", ДробнаяЧасть*100);
Иначе
Надбавка = Надбавка + СтрокаТЗДанных.Значение;
КонецЕсли;
КонецЦикла;
Параметры.НадбавкаЦелаяЧасть   = Цел(Надбавка);
ДробнаяЧасть                   = Надбавка - Параметры.НадбавкаЦелаяЧасть;
Параметры.НадбавкаДробнаяЧасть = ?(ДробнаяЧасть = 0, "00", ДробнаяЧасть*100);

 

Вот дополнительные процедуры по получению начислений, вставлены в модуль печатной формы:

Функция ПолучитьДанныеНачисленийСотрудника(ДокументСсылка=Неопределено, Сотрудник) Экспорт

ТаблицаСотрудников = Новый ТаблицаЗначений;
ТаблицаСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаСотрудников.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));

СтрокаСотрудник = ТаблицаСотрудников.Добавить();
СтрокаСотрудник.Сотрудник = Сотрудник.Ссылка;
СтрокаСотрудник.Период = ТекущаяДатаСеанса();
//СтрокаСотрудник.Период = ДокументСсылка.Дата+24*60*60;// Нам нужны показатели включая текущий документ      //ТекущаяДатаСеанса();

ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыРасчета();

ДанныеПлановыхРасчетов = Новый ТаблицаЗначений;
ДанныеПлановыхРасчетов.Колонки.Добавить("Начисление");
ДанныеПлановыхРасчетов.Колонки.Добавить("ИдентификаторСтрокиВидаРасчета");
ДанныеПлановыхРасчетов.Колонки.Добавить("Размер");
ДанныеПлановыхРасчетов.Колонки.Добавить("Регистратор");
ДанныеПлановыхРасчетов.Колонки.Добавить("Применение");
ДанныеПлановыхРасчетов.Колонки.Добавить("ДокументОснование");

ДанныеПоказателей = Новый ТаблицаЗначений;
ДанныеПоказателей.Колонки.Добавить("Показатель");
ДанныеПоказателей.Колонки.Добавить("Значение");
ДанныеПоказателей.Колонки.Добавить("ИдентификаторСтрокиВидаРасчета");

ФормироватьСПериодичностьДень = Истина;
ИсключатьПособия = Истина;
ИсключатьВременноОтмененные = Ложь;
ДанныеДолжностей = Неопределено;

ЗарплатаКадрыРасширенный.ДействующиеНачисленияВРеквизит(Неопределено, ТаблицаСотрудников, ДанныеПлановыхРасчетов, ДанныеПоказателей, ОписаниеТаблицыВидовРасчета, ФормироватьСПериодичностьДень, ИсключатьПособия, ИсключатьВременноОтмененные, ДанныеДолжностей);
//ЗарплатаКадрыРасширенный.ДействующиеНачисленияВРеквизит(ДокументСсылка, ТаблицаСотрудников, ДанныеПлановыхРасчетов, ДанныеПоказателей, ОписаниеТаблицыВидовРасчета, ФормироватьСПериодичностьДень, ИсключатьПособия, ИсключатьВременноОтмененные, ДанныеДолжностей);

ДанныеПлановыхРасчетов.Колонки.Добавить("Показатель");
ДанныеПлановыхРасчетов.Колонки.Добавить("Значение");

Для каждого СтрокаДанныеПлановыхРасчетов из ДанныеПлановыхРасчетов Цикл
Для каждого СтрокаДанныеПоказателей из ДанныеПоказателей Цикл
Если СтрокаДанныеПлановыхРасчетов.ИдентификаторСтрокиВидаРасчета = СтрокаДанныеПоказателей.ИдентификаторСтрокиВидаРасчета Тогда
ЗаполнитьЗначенияСвойств(СтрокаДанныеПлановыхРасчетов, СтрокаДанныеПоказателей);
КонецЕсли;
КонецЦикла;
КонецЦикла;

Возврат ДанныеПлановыхРасчетов;

КонецФункции

&НаСервере
Функция ОписаниеТаблицыРасчета()

ОписаниеТаблицыВидовРасчета = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыПлановыхНачислений();
ОписаниеТаблицыВидовРасчета.ПутьКДанным = "Начисления";
ОписаниеТаблицыВидовРасчета.ПутьКДаннымПоказателей = "Показатели";
ОписаниеТаблицыВидовРасчета.ИмяПоляДляВставкиПоказателей = "НачисленияДокументОснование";
ОписаниеТаблицыВидовРасчета.ИмяРеквизитаДокументОснование = "";

Возврат ОписаниеТаблицыВидовРасчета;

КонецФункции

 

Тестировалось на 3.1.5.99 и на 3.1.8.246.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *