Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Функция получения РК для сотрудника в ЗУП 3

Функция получения РК для сотрудника в ЗУП 3
Я
   егаис
 
03.06.20 - 07:49
Перерыл кажется все БСП ЗУП-ское, не могу найти функцию, которая бы вернула районный коэффициент сотрудника на дату, конечно, с учетом ведения рк по территориям.
   егаис
 
1 - 03.06.20 - 07:57
пока вижу только запрос к РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.СрезПоследних с соединением с регистром Территориии
Но все же думаю, что есть универсальная функция
   Фрэнки
 
2 - 03.06.20 - 08:03
Не могу сказать, чтоб совсем пристально с этим разобрался, но навскидку впечатление, что РК берут просто как одно из назначенных сотруднику плановых начислений. Т.е. не просто некий показатель, а начисление с показателем. Поэтому универсальной функцией будет запрос по сотрудникам плановых начислений.
   егаис
 
3 - 03.06.20 - 08:06
(2) в плановых нет показателя, и территория там точно не учитывается
   егаис
 
4 - 03.06.20 - 08:08
пока думаю так
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.Показатель КАК Показатель,
    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.Значение КАК Значение,
    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.ДействуетДо КАК ДействуетДо,
    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.Организация КАК Организация
ИЗ
    РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.СрезПоследних(&ТекДата, (Сотрудник = &Сотрудник) и (Показатель = &Показатель) И ((ДействуетДо = ДатаВремя(1,1,1,0,0,0)) ИЛИ (ДействуетДо > &ТекДата))) КАК ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних

еще надо с РС территорий соединить и взять оттуда, если есть запись
   Фрэнки
 
5 - 03.06.20 - 08:10
не хочу ломать голову... надоело.

Но вот так, через запросы с клиентского уровня и сразу на обращения в контексте сервера - это теперь не кошерно
   егаис
 
6 - 03.06.20 - 08:11
(5) вот и я о том же, задницей чую, должна быть функция
   Фрэнки
 
7 - 03.06.20 - 08:12
И твой запрос, кстати, тебя же опровергает. При построении таблицы с плановыми начислениями - если до самых потрохов доходить, то регистр там этот же
   егаис
 
8 - 03.06.20 - 08:43
Колхоз-подход, но работает
        КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотрудник, "Территория", Дата);
        РК = 0;
        РассчитыватьРКПоПоказателям = Истина;
        Если КадровыеДанныеСотрудников.Количество() > 0 Тогда
            ТерриторияСотрудника = КадровыеДанныеСотрудников[0].Территория;
            Если ТерриторияСотрудника = NULL Тогда
            ИначеЕсли НЕ ТерриторияСотрудника.Пустая() Тогда
                РК = (ТерриторияСотрудника.РайонныйКоэффициент - 1)*100;
                РассчитыватьРКПоПоказателям = Ложь;
            КонецЕсли;    
        КонецЕсли;        
        Если РассчитыватьРКПоПоказателям Тогда 
            Запрос = Новый Запрос;
            Запрос.Текст = 
                "ВЫБРАТЬ РАЗЛИЧНЫЕ
                |    ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.Значение КАК Значение
                    |ИЗ
                |    РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.СрезПоследних(
                |            &ТекДата,
                |            Сотрудник = &Сотрудник
                |                И Показатель = &Показатель
                |                И (ДействуетДо = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                |                    ИЛИ ДействуетДо > &ТекДата)) КАК ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних";
            
            Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
            Запрос.УстановитьПараметр("Показатель", Справочники.ПоказателиРасчетаЗарплаты.РайонныйКоэффициент);
            Запрос.УстановитьПараметр("ТекДата", КонецДня(Дата));
            
            РезультатЗапросаВыборка = Запрос.Выполнить().Выбрать();
            Если РезультатЗапросаВыборка.Следующий() Тогда
                РК = (РезультатЗапросаВыборка.Значение - 1)*100;
            КонецЕсли;
        КонецЕсли;
   Фрэнки
 
9 - 03.06.20 - 08:46
(8) угу. похоже на рабочий код. Но его можно переписать на встроенные процедуры. С тем же результатом.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.