В конфигурации 1С:ЗУП 3.1 часто возникает задача: при формировании расчетного листка по конкретному подразделению пользователь хочет видеть не только основную зарплату сотрудника, но и начисления по его внутреннему совместительству, которые могут числиться в другом подразделении. Типовой механизм отчетов при жестком отборе по подразделению отсекает все начисления, не входящие в выбранную группу. Рассмотрим, как решить эту задачу программными методами и пользовательскими настройками.
Если вы разрабатываете внешний отчет или меняете функционал существующего, самым эффективным способом является перехват настроек отбора перед выполнением компоновки данных. Суть метода заключается в том, чтобы программно заменить фильтр по Подразделение на фильтр по списку ФизическоеЛицо, отобранных по данному подразделению.
Для реализации этого подхода используем процедуру ПриКомпоновкеРезультата. Давайте разберем по шагам логику обработки настроек:
КомпоновщикНастроек.Настройки.Отбор.ЛевоеЗначение равно Подразделение.Элемент.Использование = Ложь) и запоминаем выбранное значение.ФизическоеЛицо с видом сравнения ВСписке и передаем туда наш массив сотрудников.Пример кода для реализации данного механизма:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
НастройкиОтчета = КомпоновщикНастроек.Настройки;
Отбор = НастройкиОтчета.Отбор.Элементы;
Подразделение = Неопределено;
Для Каждого Элемент Из Отбор Цикл
Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Подразделение") Тогда
Элемент.Использование = Ложь;
Подразделение = Элемент.ПравоеЗначение;
Прервать;
КонецЕсли;
КонецЦикла;
Если Подразделение <> Неопределено Тогда
ЭлементОтбора = Отбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФизическоеЛицо");
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.ПравоеЗначение = ПолучитьМассивФизЛицПоПодразделению(Подразделение);
КонецЕсли;
КонецПроцедуры
Важное примечание: если после выполнения данного кода данные в отчете не меняются, убедитесь, что вы загружаете измененные настройки обратно в КомпоновщикНастроек методом ЗагрузитьНастройки(НастройкиОтчета), так как ядро СКД может использовать исходные данные из кэша настроек.
Если вы не хотите вносить изменения в конфигуратор, вы можете воспользоваться гибкими настройками стандартного отчета Расчетный листок.
Рассмотрим порядок действий для получения нужного результата:
Расчетный листок в режиме «1С:Предприятие».Подразделение.ФизическоеЛицо с видом сравнения ВСписке.В этом случае 1С сформирует расчетные листки по выбранным сотрудникам, при этом в каждый листок попадут все их начисления, включая работу по внутреннему совместительству, независимо от того, в каком подразделении они числятся.
При работе с внутренними совместителями система 1С:ЗУП 3.1 рассматривает их как одного человека (физическое лицо), но как разных сотрудников (кадровые записи). Когда вы устанавливаете отбор по подразделению, отчет ограничивает выборку только теми кадровыми записями, которые относятся к этому подразделению. Если вы хотите видеть «полную картину» по человеку, всегда ориентируйтесь на отбор по объекту ФизическоеЛицо, а не на кадровые параметры подразделения.
Используя предложенные способы, вы сможете настроить получение корректных данных, которые учитывают все выплаты сотрудника, что критически важно для корректного информирования персонала о заработной плате.