Добрый день, уважаемые коллеги!
Все мы люди и все мы работаем, в следствии чего получаем заработную плату. Работая с программой 1С ЗУП 3.1, я заметил один нюанс, который несколько усложняет жизнь расчётчика заработной платы. К сожалению отсутствует возможность быстрого подбора сотрудников в ведомость на выплату заработной платы в банк по зарплатному проекту. Увы, только ручками сидеть и набивать людей.
Я хочу поделиться небольшой доработкой, которая подбирает в расчётную ведомость сотрудников по вышесказанному критерию и пользуясь стандартным механизмом, рассчитывает заработную плату.
Итак, поехали.
Работать будем через расширения и первым делом добавим в него документ "ВедомостьНаВыплатуЗарплатыВБанк" и его форму. Создадим кнопку на форму ("Заполнить по зарплатному проекту") и обработчик события (нажатие на кнопку).
&НаКлиенте
Процедура Расш_ЗаполнитьПоЗарплатномуПроектуПосле(Команда)
Расш_ЗаполнитьПоЗарплатномуПроектуПослеНаСервере();
КонецПроцедуры
//Формирует список ФЛ механизмом представлений и передаёт его в
//стандартную процедуру расчёта ЗП
&НаСервере
Процедура Расш_ЗаполнитьПоЗарплатномуПроектуПослеНаСервере()
ВедомостьНаВыплатуЗарплатыФормы.СоставОбработкаВыбораНаСервере(ЭтотОбъект,
ПолучитьФизЛицПоЗарплатномуПроекту(Новый Структура("ЗарплатныйПроект, ЗарплатныйПроектПустой",
Объект.ЗарплатныйПроект,
НЕ ЗначениеЗаполнено(Объект.ЗарплатныйПроект))),
Истина);
КонецПроцедуры
Коротенько о механизме представлений:
1) Нет необходимости писать запросы, система сама отберёт поля из регистров, которые нам необходимы;
2) Обработает запрос, исходя из сформированных и переданных отборов и вернёт таблицу значений.
А вообще, удобная вещь, для получения скажем, выборки актуальных сотрудников на дату или заданный период.
Сама функция компоновки набора данных, для передачи его механизму представлений (как пример, добавил в запрос поле "ДатаРождения"):
//Возвращает список ФЛ (см. функцию "Расш_ЗаполнитьПоЗарплатномуПроектуПослеНаСервере")
//Параметры:
//СтруктураДанных - Тип "Структура".
//Поля в структуре: "Зарплатный проект" - тип СправочникСсылка.ЗарплатныеПроекты
// "ЗарплатныйПроектПустой" - тип Булево.
Функция ПолучитьФизЛицПоЗарплатномуПроекту(СтруктураДанных)
//Формируем отбор для механизма представлений
ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц.ОкончаниеПериода = ?(Объект.Дата = Дата(1,1,1,0,0,0), КонецДня(ТекущаяДата()), КонецДня(Объект.Дата));
ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц.ВключаяУволенныхНаНачалоПериода = Ложь;
ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц.КадровыеДанные = "ДатаРождения";
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц.Отборы, "ВидЗанятости", "<>", Перечисления.ВидыЗанятости.Совместительство);
//Получаем набор физлиц, работающих в организации
ТаблицаФЛ = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц );
ФизическиеЛица = ТаблицаФЛ.ВыгрузитьКолонку("ФизическоеЛицо");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
|ГДЕ
| ВЫБОР
| КОГДА &ЗарплатныйПроектПустой
| ТОГДА ЛОЖЬ
| ИНАЧЕ ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо В (&ФизическоеЛицо)
| И ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект = &ЗарплатныйПроект
|КОНЕЦ";
Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическиеЛица);
Запрос.УстановитьПараметр("ЗарплатныйПроектПустой", СтруктураДанных.ЗарплатныйПроектПустой);
Запрос.УстановитьПараметр("ЗарплатныйПроект", СтруктураДанных.ЗарплатныйПроект);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаСотрудников = РезультатЗапроса.Выгрузить();
Возврат ТаблицаСотрудников.ВыгрузитьКолонку("ФизическоеЛицо");
КонецФункции
На выходе из функции у нас уже есть массив физлиц, которые закреплены за определённым зарплатным проектом. Следует уточнить, что при формировании отборов в моём случае использовалась конкретная ситуация.
Для отбора за период, в код функции можно добавить дату начала:
ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц.ОкончаниеПериода = ?(Объект.Дата = Дата(1,1,1,0,0,0), НачалоДня(ТекущаяДата()), НачалоДня(Объект.Дата));
Либо, нам нужны только совместители:
ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц.Отборы, "ВидЗанятости", "=", Перечисления.ВидыЗанятости.Совместительство);
Или же необходимо получить ещё и уволенных за период, то просто меняем в следующей строке значение "Ложь" на значение "Истина":
ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц.ВключаяУволенныхНаНачалоПериода = Истина;
Можно так же дополнить запрос условием отбора по подразделению, из реквизита "Подразделение" в документе-ведомости. Это уже на Ваш вкус.
При разработке данного кода подглядывал в статью Универсальные процедуры и функции ЗУП 3.1
Надеюсь, что статья пригодится тем, кто столкнётся с подобным вопросом. Спасибо за внимание и уделённое время:)