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