Сегодня я расскажу тебе, дорогой мой читатель, одну очень увлекательную сказку, а, может, и не сказку...
В 2.5 на сотрудника можно было повесить всего одно основное начисление, был жесткий контроль. При попытке повесить в кадровом приказе два начисления мы получали сообщение "сотруднику не может быть назначено основное начисление дважды"
.
При этом основным называлось то, у которого реквизит "ВидВремени" был равен "Начисление за работу полную смену в пределах нормы времени".
Теперь такого нет, в 1С Зарплата и Управление персонало 3.0 мы легко можем повесить человеку два "основных" начисления. Тут теперь вообще нет такого понятия, как основное/не основное. Сделали это не спроста, на практике бывают хитрые случаи, когда у человека одновременно и тариф по часам и оклад и тариф для сдельной оплаты труда. Это редкость, но такое бывает и структура данных в ЗУП 3.0 этому не мешает.
Так вот, получается, что у человека есть куча плановых начислений, и понять, кто из них основное мы не можем. Как это все настроить, чтобы оно потом корректно считалос - совсем другая история. Наша задача заполнить в шапке абстрактного отчета по сотруднику "оклад/тариф". Хотя, почему абстрактного, в расчетном листке в заголовке как раз он и выводится.
Первая засада с выбором наичсления решается следующим образом: у вида расчета есть поле "РеквизитДопУпорядочивания", у кого он меньше, тот и будет главным.
Этот реквизит не видим пользователю, он определяет порядок вывода видов расчета в расчетке (по нему идет сортировка). Правится его значение в форме списка выидов расчета с помощью стрелочек
Но это не все. Найдя плановое начисление с самым маленьким "порядком", Вы не узнаете его размер. Теперь в ЗУП 3.0 размеры показателей лежат в отдельном регистре сведений. Раньше конфой было ограничено их количество шестью. Теперь их может быть много, и глядя в регистр сведений "ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников" нифига не понятно, кто из них главный.
Чтобы понять, кто из них главный, надо залезть в таб.часть вида расчета "Показатели" и по булеву полю "ОсновнойПоказатель" вычисляем самого главного, он будет гарантировано один.
{loadposition position-14}
Ниже привожу рабочий текст запроса, который возвращает все что нужно
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ПлановыеНачисленияСрезПоследних.Сотрудник КАК Сотрудник,
ПлановыеНачисленияСрезПоследних.Начисление КАК Начисление,
ВЫБОР
КОГДА ПлановыеНачисленияСрезПоследних.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
ИЛИ ПлановыеНачисленияСрезПоследних.ДействуетДо > КОНЕЦПЕРИОДА(&Период, ДЕНЬ)
И &Период <> ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ПлановыеНачисленияСрезПоследних.Используется
ИНАЧЕ ПлановыеНачисленияСрезПоследних.ИспользуетсяПоОкончании
КОНЕЦ КАК Используется
ПОМЕСТИТЬ ВТПлановыеНачисленияСрезПоследних
ИЗ
РегистрСведений.ПлановыеНачисления.СрезПоследних(&Период, Сотрудник = &Сотрудник) КАК ПлановыеНачисленияСрезПоследних
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ПлановыеНачисленияСрезПоследних.Сотрудник КАК Сотрудник,
ПлановыеНачисленияСрезПоследних.Начисление КАК Начисление,
Начисления.РеквизитДопУпорядочивания КАК Порядок,
ЕСТЬNULL(НачисленияПоказатели.Показатель, ЗНАЧЕНИЕ(Справочник.ПоказателиРасчетаЗарплаты.ПустаяСсылка)) КАК ОсновнойПоказатель
ПОМЕСТИТЬ ВТПлановыеНачисленияСотрудниковСПоказателем
ИЗ
ВТПлановыеНачисленияСрезПоследних КАК ПлановыеНачисленияСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления КАК Начисления
ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления.Показатели КАК НачисленияПоказатели
ПО Начисления.Ссылка = НачисленияПоказатели.Ссылка
И (НачисленияПоказатели.ОсновнойПоказатель)
ПО ПлановыеНачисленияСрезПоследних.Начисление = Начисления.Ссылка
ГДЕ
ПлановыеНачисленияСрезПоследних.Используется
ИНДЕКСИРОВАТЬ ПО
Сотрудник,
Порядок,
Начисление
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ПлановыеНачисленияСотрудников.Сотрудник КАК Сотрудник,
МИНИМУМ(ПлановыеНачисленияСотрудников.Порядок) КАК Порядок
ПОМЕСТИТЬ ВТПорядокОсновныхНачислений
ИЗ
ВТПлановыеНачисленияСотрудниковСПоказателем КАК ПлановыеНачисленияСотрудников
СГРУППИРОВАТЬ ПО
ПлановыеНачисленияСотрудников.Сотрудник
ИНДЕКСИРОВАТЬ ПО
Сотрудник,
Порядок
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТПлановыеНачисленияСотрудниковСПоказателем.Сотрудник,
ВТПлановыеНачисленияСотрудниковСПоказателем.Начисление,
ВТПлановыеНачисленияСотрудниковСПоказателем.ОсновнойПоказатель,
ВЫБОР
КОГДА ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.Значение
КОГДА ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.ДействуетДо < &период
ТОГДА ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.ЗначениеПоОкончании
ИНАЧЕ ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.Значение
КОНЕЦ КАК ТарифОклад
ИЗ
ВТПорядокОсновныхНачислений КАК ВТПорядокОсновныхНачислений
ЛЕВОЕ СОЕДИНЕНИЕ ВТПлановыеНачисленияСотрудниковСПоказателем КАК ВТПлановыеНачисленияСотрудниковСПоказателем
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.СрезПоследних(&Период, ) КАК ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних
ПО ВТПлановыеНачисленияСотрудниковСПоказателем.Сотрудник = ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.Сотрудник
И ВТПлановыеНачисленияСотрудниковСПоказателем.ОсновнойПоказатель = ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковСрезПоследних.Показатель
ПО ВТПорядокОсновныхНачислений.Сотрудник = ВТПлановыеНачисленияСотрудниковСПоказателем.Сотрудник
И ВТПорядокОсновныхНачислений.Порядок = ВТПлановыеНачисленияСотрудниковСПоказателем.Порядок