Где изменить запрос в коде ЗУП (3.1.15.96), чтоб при формировании Расчетного листа данные формировались не только по основному подразделению, но и по подразделению совместителя. Т. е. если расчетчица ставит отбор по подразделению одному, то данные по зарплате должны выводится с учетом и внутреннего совместителя? Я так понимаю это можно сделать в ЗарплатаКадрыОтчеты.ПриКомпоновкеРезультатаРасчетныйЛистокПоФизическимЛицам(), но не понимаю на каком этапе формирования запроса его можно изменить?
4.
ixijixi
199210.01.21 02:08 Сейчас в теме+0.5 $m
(1) Уже отвечал тебе в теме https://forum.infostart.ru/forum68/topic253321/ Не надо менять запрос. Меняй отбор. Пользователь отбирает по подразделению, ты преобразуй это в отбор по физлицам подразделения. Типа такого
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Отбор = КомпоновщикНастроек.Настройки.Отбор.Элементы;
Подразделение = Неопределено;
Для Каждого Элемент Из Отбор Цикл
Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Подразделение") Тогда
Элемент.Использование = Ложь;
Подразделение = Элемент.ПравоеЗначение;
Прервать;
КонецЕсли;
КонецЦикла;
Если Подразделение <> Неопределено Тогда
Элемент = Отбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФизическоеЛицо");
Элемент.Использование = Истина;
Элемент.ПравоеЗначение = ТвояФункцияПоСборуФизлицПодразделения(Подразделение);
КонецЕсли;
КонецПроцедуры
В общем сделал так: создал внешний отчет "Расчетный листок". И в процедуре "ПриКомпоновкеРезультатаРасчетныйЛистокПоФизическимЛицам" вставил код:
// Подготовка настроек
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
//Убрать отбор
ОтборУбрать = НастройкиОтчета.Отбор.Элементы;
Подразделение = Неопределено;
Для Каждого Элемент Из ОтборУбрать Цикл
Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеГоловногоСотрудникаНаКонецПериода") Тогда
Элемент.Использование = Ложь;
Подразделение = Элемент.ПравоеЗначение;
Прервать;
КонецЕсли;
КонецЦикла;
Для Каждого Элемент Из ОтборУбрать Цикл
Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФизическоеЛицо") Тогда
Если Элемент.Использование = Ложь Тогда
Элемент.Использование = Истина;
Элемент.ПравоеЗначение = ФункцияПоСборуФизлицПодразделения(Подразделение);
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
//Убрать отбор
(1) Здесьэто уже пытались рассматривать. Мне тоже было бы это интересно. Другой вопрос: а при выводе подразделения, где работник внутренним совместителем, тоже будут выводиться сведения по нему по всем местам?
4.
ixijixi
199210.01.21 02:08 Сейчас в теме+0.5 $m
(1) Уже отвечал тебе в теме https://forum.infostart.ru/forum68/topic253321/ Не надо менять запрос. Меняй отбор. Пользователь отбирает по подразделению, ты преобразуй это в отбор по физлицам подразделения. Типа такого
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Отбор = КомпоновщикНастроек.Настройки.Отбор.Элементы;
Подразделение = Неопределено;
Для Каждого Элемент Из Отбор Цикл
Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Подразделение") Тогда
Элемент.Использование = Ложь;
Подразделение = Элемент.ПравоеЗначение;
Прервать;
КонецЕсли;
КонецЦикла;
Если Подразделение <> Неопределено Тогда
Элемент = Отбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФизическоеЛицо");
Элемент.Использование = Истина;
Элемент.ПравоеЗначение = ТвояФункцияПоСборуФизлицПодразделения(Подразделение);
КонецЕсли;
КонецПроцедуры
В общем сделал так: создал внешний отчет "Расчетный листок". И в процедуре "ПриКомпоновкеРезультатаРасчетныйЛистокПоФизическимЛицам" вставил код:
// Подготовка настроек
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
//Убрать отбор
ОтборУбрать = НастройкиОтчета.Отбор.Элементы;
Подразделение = Неопределено;
Для Каждого Элемент Из ОтборУбрать Цикл
Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеГоловногоСотрудникаНаКонецПериода") Тогда
Элемент.Использование = Ложь;
Подразделение = Элемент.ПравоеЗначение;
Прервать;
КонецЕсли;
КонецЦикла;
Для Каждого Элемент Из ОтборУбрать Цикл
Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФизическоеЛицо") Тогда
Если Элемент.Использование = Ложь Тогда
Элемент.Использование = Истина;
Элемент.ПравоеЗначение = ФункцияПоСборуФизлицПодразделения(Подразделение);
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
//Убрать отбор