1с не поддерживается элементом коллекции пользовательских настроек компоновки данных

Обновлено: 07.07.2024

Когда впервые столкнулась с подобным требованием пользователя пришлось потратить немало времени на изучение вопроса.. Надеюсь, что моя статья окажется полезной и сэкономит кому-нибудь время и силы.

Пример программного заполнения настроек построю на основе отчёта по оборотному регистру накопления Продажи с измерениями: Контрагент, Номенклатура и ресурсами: Количество и Сумма.

Создание отчёта и настройка схемы компоновки данных.

Итак. Создаём новый отчёт. Открываем схему компоновки данных и добавляем новый набор данных запрос. В окне запроса пишем следующий запрос:

РегистрНакопления.Продажи.Обороты(, , Авто , ) КАК ПродажиОбороты

На закладке «Ресурсы» указываем в качестве ресурсов поля КоличествоОборот и СуммаОборот.

На закладке «Параметры» добавим новый параметр «Период» типа СтандартныйПериод. Для параметра «НачалоПериода» в качестве выражения укажем следующее значение: &Период.ДатаНачала, для параметра «КонецПериода» - &Период.ДатаОкончания. Таким образом, мы избавим себя от приведения даты окончания к концу дня и установки каждого параметра в отдельности. Настройку структуры отчёта мы не делаем. Она будет сформирована программно.

На этом настройка схемы компоновки закончена. Переходим к настройке интерфейса.

Настройка пользовательского интерфейса.

Вначале создадим реквизиты отчёта. Они понадобятся нам при создании интерфейса и дальнейшей программной обработке указанных пользователем настроек. Добавляем реквизит Период – тип СтандартныйПериод, Количество – тип Булево, Сумма – тип Булево. Данные реквизиты будут отвечать за переданный параметр Период и за вывод ресурсов отчёта КоличествоОборот и СуммаОборот соответственно. Также нам потребуется табличная часть Группировки с реквизитами Поле – тип Строка и ТипГруппировки – тип Строка. Табличная часть будет отвечать за выбранные группировки при формировании отчёта.

Необходимые реквизиты созданы, теперь создаём форму отчёта.

На форме располагаем следующие элементы:

  • Поля ввода для указания периода: ДатаНачала – данные Период.ДатаНачала, Датаокончания - Период.ДатаОкончания, Период – данные Период и кнопку КнопкаВыбораПериода (для кнопки нужно назначить обработчик, открывающий диалог указания периода. Программный код можно посмотреть в прикреплённом внешнем отчёте) .
  • Панель с тремя страницами. Первую страницу назовём Отбор и расположим на ней табличное поле с данными КомпоновщикНастроек.Настройки.Отбор. Вторую страницу назовём УсловноеОформление и расположим на ней табличное поле с данными КомпоновщикНастроек.Настройки.УсловноеОформление. Третью страницу назовём Сортировка и расположим на ней табличное поле с данными КомпоновщикНастроек.Настройки.Порядок.
  • Табличное поле Группировки, связанное с табличной частью отчёта «Группировки», и добавляем командную панель с указанием в качестве источника действий табличного поля «Группировки». На командную панель добавляем кнопки «Добавить», «Удалить», «Переместить вверх», «Переместить вниз».
  • 2 флажка ВыводитьКоличество и ВыводитьСумму, связанные с реквизитами отчёта Количество и Сумма соответственно.
  • Поле табличного документа Результат, автоматически созданное при создании формы, оставляем без изменения.

На этом создание пользовательского интерфейса завершено. Переходим к самому интересному – программной части.

Программная работа со схемой компоновки данных.

В первую очередь, необходимо описать какие группировки будут доступны в нашем отчёте. Для этого в модуле объекта создадим экспортные переменные СписокДоступныхПолейГруппировки и СписокДоступныхТиповГруппировки. В теле основной программы заполним их списками значений:

СписокДоступныхПолейГруппировки = Новый СписокЗначений ;

СписокДоступныхПолейГруппировки . Добавить ( "Регистратор" );

СписокДоступныхПолейГруппировки . Добавить ( "Контрагент" );

СписокДоступныхПолейГруппировки . Добавить ( "Номенклатура" );

СписокДоступныхТиповГруппировки = Новый СписокЗначений ;

СписокДоступныхТиповГруппировки . Добавить ( "Иерархия" );

СписокДоступныхТиповГруппировки . Добавить ( "Элементы" );

При открытии формы заполним группировки значениями по умолчанию

НоваяГруппировка = Группировки . Добавить ();

НоваяГруппировка . Поле = "Регистратор" ;

НоваяГруппировка . ТипГруппировки = "Элементы" ;

НоваяГруппировка . Поле = "Контрагент" ;

НоваяГруппировка . ТипГруппировки = "Элементы" ;

НоваяГруппировка = Группировки . Добавить ();

НоваяГруппировка . Поле = "Номенклатура" ;

НоваяГруппировка . ТипГруппировки = "Элементы" ;

Установим доступные списки выбора для полей группировок :

ЭлементыФормы . Группировки . Колонки . Поле . ЭлементУправления . СписокВыбора = СписокДоступныхПолейГруппировки ;

ЭлементыФормы . Группировки . Колонки . ТипГруппировки . ЭлементУправления . СписокВыбора = СписокДоступныхТиповГруппировки ;

Также нам необходимо определить в модуле объекта обработчик ПриКомпоновкеРезультата, в котором будем загружать наши настройки в схему компоновки данных.

// Добавляет колонки (поля ресурсов) в соответствии с флажками на форме

Если Количество И Не НайтиПолеКомпоновки ( "КоличествоОборот" , НастройкиСКД . Выбор . Элементы ) Тогда

ВыбранноеПоле = НастройкиСКД . Выбор . Элементы . Добавить ( Тип ( "ВыбранноеПолеКомпоновкиДанных" ));

ВыбранноеПоле . Использование = Истина ;

ВыбранноеПоле . Заголовок = "Количество" ;

ВыбранноеПоле . Поле = Новый ПолеКомпоновкиДанных ( "КоличествоОборот" );

Если Сумма И Не НайтиПолеКомпоновки ( "СуммаОборот" , НастройкиСКД . Выбор . Элементы ) Тогда

ВыбранноеПоле = НастройкиСКД . Выбор . Элементы . Добавить ( Тип ( "ВыбранноеПолеКомпоновкиДанных" ));

ВыбранноеПоле . Использование = Истина;

ВыбранноеПоле . Заголовок = "Сумма" ;

ВыбранноеПоле . Поле = Новый ПолеКомпоновкиДанных ( "СуммаОборот" );

//Удаляет колонки, соответствующие флажки которых не были отмечены

Пока Счетчик < НастройкиСКД . Выбор . Элементы . Количество () Цикл

ПолеКомпоновкиДанных = НастройкиСКД . Выбор . Элементы [ Счетчик ];

Если ПолеКомпоновкиДанных . Поле = Новый ПолеКомпоновкиДанных ( "КоличествоОборот" ) И Не Количество Тогда

НастройкиСКД . Выбор . Элементы . Удалить ( ПолеКомпоновкиДанных );

ИначеЕсли ПолеКомпоновкиДанных . Поле = Новый ПолеКомпоновкиДанных ( "СуммаОборот" ) И Не Сумма Тогда

НастройкиСКД . Выбор . Элементы . Удалить ( ПолеКомпоновкиДанных );

Счетчик = Счетчик + 1 ;

//заполняем поля группировок в соответствии с настройками в табличной части Группировки

НастройкиСКД . Структура . Очистить ();

Для Каждого Группировка Из Группировки Цикл

ЭлементСтруктуры = ЭлементСтруктуры . Структура . Добавить ( Тип ( "ГруппировкаКомпоновкиДанных" ));

ЭлементГруппировки = ЭлементСтруктуры . ПоляГруппировки . Элементы . Добавить ( Тип ( "ПолеГруппировкиКомпоновкиДанных" ));

ЭлементГруппировки . Использование = Истина;

ЭлементГруппировки . Поле = Новый ПолеКомпоновкиДанных ( Группировка . Поле );

Если СписокДоступныхТиповГруппировки . НайтиПоЗначению ( Группировка . ТипГруппировки )=Неопределено Тогда

ЭлементГруппировки . ТипГруппировки = ТипГруппировкиКомпоновкиДанных . Элементы ;

ЭлементГруппировки . ТипГруппировки = ТипГруппировкиКомпоновкиДанных [ Группировка . ТипГруппировки ];

ПолеСортировки = ЭлементСтруктуры . Порядок . Элементы . Добавить ( Тип ( "АвтоЭлементПорядкаКомпоновкиДанных" ));

ПолеСортировки . Использование = Истина;

ВыбранноеПоле = ЭлементСтруктуры . Выбор . Элементы . Добавить ( Тип ( "АвтоВыбранноеПолеКомпоновкиДанных" ));

ВыбранноеПоле . Использование = Истина;

Далее, устанавливаем значения параметров и загружаем заполненные настройки

Настройки . ПараметрыДанных . УстановитьЗначениеПараметра ( "Период" , Период );

КомпоновщикНастроек . ЗагрузитьНастройки ( Настройки );

В алгоритме добавления ресурсов в схему компоновки использовалась функция НайтиПолеКомпоновки. Эта функция определяет, есть ли добавляемое поле в выбранных полях схемы или нет. Если уже есть, то добавлять поле не требуется.

Функция НайтиПолеКомпоновки ( Имя , Коллекция )

Для Каждого ПолеКомпоновкиДанных Из Коллекция Цикл

Если ПолеКомпоновкиДанных . Поле = Новый ПолеКомпоновкиДанных ( Имя ) Тогда

Готово. Настройки схемы компоновки данных заполнены, и отчёт может быть сформирован.

Для того чтобы при обработке расшифровки поля отбора и группировок заполнились в соответствии с выбранным полем нужно самостоятельно описать обработчик расшифровки. Для этого создадим булевский реквизит отчёта ЭтоРасшифровка. Реквизит будет показывать, формируем мы простой отчёт или расшифровываем. Для табличного поля Результат создаём обработчик РезультатОбработкаРасшифровки. В созданном обработчике пишем

Если ДанныеРасшифровки = Неопределено Тогда Возврат КонецЕсли;

ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных ( ДанныеРасшифровки , Новый ИсточникДоступныхНастроекКомпоновкиДанных ( СхемаКомпоновкиДанных ));

Настройки = ОбработкаРасшифровки . Выполнить ( Расшифровка );

Если Настройки <>Неопределено Тогда

КомпоновщикНастроек . ЗагрузитьНастройки ( Настройки );

ЭлементыФормы . Результат . Очистить ();

СкомпоноватьРезультат ( ЭлементыФормы . Результат , ДанныеРасшифровки );

А в обработчике ПриКомпоновкеРезультата модуля объекта указываем, что заполнять настройки группировок нужно только в том случае, если это не расшифровка. Таким образом, обработчик ПриКомпоновкеРезультата принимает вид:

Процедура ПриКомпоновкеРезультата ( ДокументРезультат , ДанныеРасшифровки , СтандартнаяОбработка )

Если Не ( Количество ИЛИ Сумма ) Тогда

Сообщить ( "Необходимо выбрать хотя бы один показатель!" );

Настройки = КомпоновщикНастроек . ПолучитьНастройки ();

Если НЕ ЭтоРасшифровка Тогда

Настройки . ПараметрыДанных . УстановитьЗначениеПараметра ( "Период" , Период );

КомпоновщикНастроек . ЗагрузитьНастройки ( Настройки );

Создан отчёт, не требующий заходить в настройки компоновки данных, переключать вкладки и разбираться в настройках структуры отчёта. Все необходимые настройки пользователь видит на форме отчёта. При необходимости можно расширить функционал. Например, сделать сохранение выбранных пользователем настроек, скрывать настройки, если пользователю требуется всегда один вариант и тд.

Также при желании можно сделать отчёт более универсальным. Например, заполнять список полей группировок и настройки по умолчанию из СКД, создать табличную часть параметры и заполнять её параметрами, перечисленными в макете компоновки данных. Таким образом, получится некий шаблон отчёта, на основе которого можно будет легко делать другие отчёты, меняя только запрос, указание ресурсов и список параметров.

Кто-нибудь сталкивался с подобным? Проблема в настройках или в код надо лезть?

(1) Попробуйте в настройках, вид "Расширенный" по очереди поотключать через кнопку "Показывать" каждый из параметров, т.е. сделать их "Не показывать". У меня в аналогичном случае на ERP это был параметр "Вид цены".

(6) Все отключал, не помогло.
(7) А платформа действительно 8.3.13.1513

Сегодня буду обновлять до последнего релиза. Спасибо за совет!

(1) Еще, возможно, у Вас платформа 8.3.13.1513. При переходе на 8.3.13.1644 ошибка перестаёт воспроизводиться. На ERP, по крайней мере (3) предлагаю проверить этот отчет на демо базе УТ11. Если ошибка повторится, то значит проблема в коде. Если нет, то надо на рабочей базе очищать все сохраненные настройки отчетов (4) Проверил, на демо работает. А у меня нет, уже заменил этот отчет в конфигурации отчетом из Демо, все равно та же ошибка. В отчете поснимал галки где только можно, по удалял все поля доступные к удалению в расширенной настройке, ошибка сохраняется(((
Ума не приложу как ещё решить проблему. На УТ 11 не типовая поставили платформу 8.3.13.1513. Появилась такая ошибка, при переходе на 8.3.13.1644 ошибка сохранилась словил такую же ошибку на отчете "Условия закупок" ут 11.4 смена платформы не помогла. Все вышеперечисленные способы тоже не решили проблему. Доброго дня коллеги!
Поймал такую же ситуацию в 1С:Комплексная автоматизация 2 (2.4.6.189)
Платформа 1С:Предприятие 8.3 (8.3.13.1513)
только в другом месте, при попытке вызвать отчет: А как вы решили свою проблему? В настройки отчета ведь не зайти.

Пока просто для временно решения сделал расширение и для процедуры в общем модуле КомпоновкаДанныхСервер сделал следующее.

Костыль, но хоть люди могут отчеты формировать.

(13) данный метод помог при смене режима совместимости с 8.3.6 на 8.3.14 на типовой КА (1) Помогает отключение галочки Включать в пользовательские настройки у ВСЕХ параметров, связанных с диаграммами. В случае с динамикой продаж это Периодичность, Характер анализа, Количество серий в диаграммах, Выделение серий диаграмм, Градиент серий диаграмм, Отображение маркеров точек диаграмм Свойство "ЛевоеЗначение" не поддерживается элементом коллекции пользовательских настроек компоновки данных. - совсем не понятно, что делать. Не работает обработка "Состояние обеспечения заказа" .

Воспользовался такой функцией (взял из КА):

&Вместо("ДобавитьПредставленияПараметраВМассив")
Процедура ВП_ДобавитьПредставленияПараметраВМассив(СхемаКомпоновкиДанных, КомпоновщикНастроек, Параметры, ИмяПараметра)

Параметр = СхемаКомпоновкиДанных.Параметры.Найти(ИмяПараметра);
Если Не Параметр = Неопределено Тогда
ЗаголовокПараметра = Параметр.Заголовок;

ПараметрКомпоновки = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, ИмяПараметра);
Если ЗначениеЗаполнено(ПараметрКомпоновки.ИдентификаторПользовательскойНастройки) Тогда
ИдентификаторНастройки = ПараметрКомпоновки.ИдентификаторПользовательскойНастройки;
Если НЕ КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторНастройки) = Неопределено Тогда
ПользовательскоеПредставлениеПараметра = "";
Иначе
ПользовательскоеПредставлениеПараметра = ПараметрКомпоновки.ПредставлениеПользовательскойНастройки;
КонецЕсли;
Иначе
ПользовательскоеПредставлениеПараметра = ПараметрКомпоновки.ПредставлениеПользовательскойНастройки;
КонецЕсли;

Параметры.Добавить(ЗаголовокПараметра);
Параметры.Добавить(ПользовательскоеПредставлениеПараметра);
КонецЕсли;

Vladal --> Vladal



Просмотр профиля

Самописка на БСП.
Режим совместимости использования модальности: не использовать.
Режим использования синхронных вызовов: Использовать.
Режим интерфейса: такси.
Режим совместимости: Не использовать.

Платформа 1С:Предприятие 8.3 (8.3.13.1513)
Браузер Хром. У пользователя в браузере установлено расширение от 1С.

Обычный "Универсальный отчет", да и наверно любой другой на СКД. При смене поля или вида объектов (переключение между регистрами или справочниками) выдает ошибку:

: Свойство "Параметр" не поддерживается элементом коллекции пользовательских настроек компоновки данных.

В модуле такой текст:

Для типа ЗначениеПараметраНастроекКомпоновкиДанных в синтакс-помощнике написано, что он доступен в веб-клиенте:

Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы.

Гуглил "Свойство не поддерживается элементом коллекции пользовательских настроек компоновки данных.", нашел несколько тем на Инфостарте, решения нет, или не опубликовали.

Что нужно доработать, чтобы отчет на СКД работал в веб-клиенте?

Vofka --> Vofka



Просмотр профиля Если в месте где возникает ошибка в веб клиенте, в тонком клиенте в том же сценарии в том же месте ошибки нету, то это скорее всего баг платформы. Vladal --> Vladal



Просмотр профиля Vofka @ Вчера, 16:23 ,
Да. Это только в веб-клиенте, в тонком работает корректно. Vofka --> Vofka



Просмотр профиля Vladal --> Vladal



Просмотр профиля Vofka @ 28.05.19, 11:47 ,
Да. Во всех мне доступных браузерах ошибка повторяется. На форумах пишут, что не поддерживается в веб-клиенте.
Установили тонкий клиент, ошибка исчезла.
Vofka --> Vofka



Просмотр профиля Vladal, в таком случае я бы это назвал не "не поддерживается в веб-клиенте", а баг платформы (веб клиента, если быть точнее). Можно в 1С написать. Vladal --> Vladal



Просмотр профиля Vladal, в таком случае я бы это назвал не "не поддерживается в веб-клиенте", а баг платформы (веб клиента, если быть точнее). Можно в 1С написать.

Прочитал по диагонали, что

Отказ от неиспользуемых свойств пользовательских настроек компоновки данных

Начиная с версии 8.3.13, не допустимо чтение и запись значений следующих свойств пользовательских настроек компоновки данных:

Выбор, ЗначенияВложенныхПараметров, Идентификатор, Имя, ИспользоватьВГруппировке,
ИспользоватьВЗаголовке, ИспользоватьВЗаголовкеПолей, ИспользоватьВИерархическойГруппировке,
ИспользоватьВОбщемИтоге, ИспользоватьВОтборе, ИспользоватьВПараметрахобъекта, Колонки,
ЛевоеЗначение, Отбор, Параметр (только при попытке установить значение свойства -- вот мой случай), ПараметрыВывода,
Поля, ПоляГруппировки, Порядок, Представление, ПредставлениеПользовательскойНастройки,
Применение, РежимОтображенияобъекта, Родитель, Серии, Состояние, Строки, Структура, ТипГруппы,
Точки, УсловноеОформление.

Рекомендуется выполнить глобальный поиск по подстроке «.ПользовательскиеНастройки».
После проанализировать найденные места на предмет обращения к неиспользуемым свойствам, выполнив одно из следующих действий:

Заменить на обращение к свойствам основных настроек.
При использовании метода ЗаполнитьЗначенияСвойств:
ЗаполнитьЗначенияСвойств(<Приемник>, ЭлементПользовательскойНастройки);
ЗаполнитьЗначенияСвойств(ЭлементПользовательскойНастройки, <Источник>);

указать явно заполняемые свойства:

ЗаполнитьЗначенияСвойств(<Приемник>, ЭлементПользовательскойНастройки, «Использование, ВидСравнения, ПравоеЗначение»);
ЗаполнитьЗначенияСвойств(ЭлементПользовательскойНастройки, <Источник>, «Значение»);

Например, в БСП в форме УсловияОтборовОтчета хранилища настроек ХранилищеВариантовОтчетов, строка:

ЗаполнитьЗначенияСвойств(Строка, ЭлементОсновнойНастройки, «Представление, ПредставлениеПользовательскойНастройки»);
Строка.ВидСравнения = ЭлементПользовательскойНастройки.ВидСравнения;

Действительно, у себя в конфигурации нашел несовместимый код.
Возможно, когда-то сделаю. Но не в этом году.

Vladal --> Vladal



Просмотр профиля

Самописка на БСП.
Режим совместимости использования модальности: не использовать.
Режим использования синхронных вызовов: Использовать.
Режим интерфейса: такси.
Режим совместимости: Не использовать.

Платформа 1С:Предприятие 8.3 (8.3.13.1513)
Браузер Хром. У пользователя в браузере установлено расширение от 1С.

Обычный "Универсальный отчет", да и наверно любой другой на СКД. При смене поля или вида объектов (переключение между регистрами или справочниками) выдает ошибку:

: Свойство "Параметр" не поддерживается элементом коллекции пользовательских настроек компоновки данных.

В модуле такой текст:

Для типа ЗначениеПараметраНастроекКомпоновкиДанных в синтакс-помощнике написано, что он доступен в веб-клиенте:

Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы.

Гуглил "Свойство не поддерживается элементом коллекции пользовательских настроек компоновки данных.", нашел несколько тем на Инфостарте, решения нет, или не опубликовали.

Что нужно доработать, чтобы отчет на СКД работал в веб-клиенте?

Vofka --> Vofka



Просмотр профиля Если в месте где возникает ошибка в веб клиенте, в тонком клиенте в том же сценарии в том же месте ошибки нету, то это скорее всего баг платформы. Vladal --> Vladal



Просмотр профиля Vofka @ Вчера, 16:23 ,
Да. Это только в веб-клиенте, в тонком работает корректно. Vofka --> Vofka



Просмотр профиля Vladal --> Vladal



Просмотр профиля Vofka @ 28.05.19, 11:47 ,
Да. Во всех мне доступных браузерах ошибка повторяется. На форумах пишут, что не поддерживается в веб-клиенте.
Установили тонкий клиент, ошибка исчезла.
Vofka --> Vofka



Просмотр профиля Vladal, в таком случае я бы это назвал не "не поддерживается в веб-клиенте", а баг платформы (веб клиента, если быть точнее). Можно в 1С написать. Vladal --> Vladal



Просмотр профиля Vladal, в таком случае я бы это назвал не "не поддерживается в веб-клиенте", а баг платформы (веб клиента, если быть точнее). Можно в 1С написать.

Прочитал по диагонали, что

Отказ от неиспользуемых свойств пользовательских настроек компоновки данных

Начиная с версии 8.3.13, не допустимо чтение и запись значений следующих свойств пользовательских настроек компоновки данных:

Выбор, ЗначенияВложенныхПараметров, Идентификатор, Имя, ИспользоватьВГруппировке,
ИспользоватьВЗаголовке, ИспользоватьВЗаголовкеПолей, ИспользоватьВИерархическойГруппировке,
ИспользоватьВОбщемИтоге, ИспользоватьВОтборе, ИспользоватьВПараметрахобъекта, Колонки,
ЛевоеЗначение, Отбор, Параметр (только при попытке установить значение свойства -- вот мой случай), ПараметрыВывода,
Поля, ПоляГруппировки, Порядок, Представление, ПредставлениеПользовательскойНастройки,
Применение, РежимОтображенияобъекта, Родитель, Серии, Состояние, Строки, Структура, ТипГруппы,
Точки, УсловноеОформление.

Рекомендуется выполнить глобальный поиск по подстроке «.ПользовательскиеНастройки».
После проанализировать найденные места на предмет обращения к неиспользуемым свойствам, выполнив одно из следующих действий:

Заменить на обращение к свойствам основных настроек.
При использовании метода ЗаполнитьЗначенияСвойств:
ЗаполнитьЗначенияСвойств(<Приемник>, ЭлементПользовательскойНастройки);
ЗаполнитьЗначенияСвойств(ЭлементПользовательскойНастройки, <Источник>);

указать явно заполняемые свойства:

ЗаполнитьЗначенияСвойств(<Приемник>, ЭлементПользовательскойНастройки, «Использование, ВидСравнения, ПравоеЗначение»);
ЗаполнитьЗначенияСвойств(ЭлементПользовательскойНастройки, <Источник>, «Значение»);

Например, в БСП в форме УсловияОтборовОтчета хранилища настроек ХранилищеВариантовОтчетов, строка:

ЗаполнитьЗначенияСвойств(Строка, ЭлементОсновнойНастройки, «Представление, ПредставлениеПользовательскойНастройки»);
Строка.ВидСравнения = ЭлементПользовательскойНастройки.ВидСравнения;

Действительно, у себя в конфигурации нашел несовместимый код.
Возможно, когда-то сделаю. Но не в этом году.

При разработке отчета на СКД часто требуется указать связь между параметрами этого отчета. Например если в отчете имеется параметры "Номенклатура" и "Серия", при выборе серии показывать только серии данной номенклатуры. Или нужно отображать в списке выбора элементов справочника "ЗначенияСвойствОбъектов" только значения, принадлежащие определенному элементу плана видов характеристик "ДополнительныеРеквизитыИСведения". Несмотря на то, что в полях и параметрах СКД есть возможность указать параметры выбора и связи параметров выбора, этот механизм не работает (по крайней мере, так обстоит дело в ERP 2.4.9.98).

Можно написать свою форму отчета, разместить на ней элементы отбора и сделать в ней все, что угодно. Но не хотелось бы терять мощные механизмы общей формы "ФормаОтчета" или копипастить их в свой отчет.

Можно модифицировать общую форму "ФормаОтчета" под свои задачи. Но не хотелось бы это делать каждый раз при разработке нового отчетов.

Предлагаю пример решения этой задачи для двух вариантов:

1. Фиксированный параметр выбора для поля "Отбор". В отчете сделан отбор по полю с типом "Справочник.ЗначенияСвойствОбъектов". При выборе значения отбора требуется показать пользователю только элементы с заданным владельцем.

2. Связи параметров выбора для поля "Параметр". В отчете имеется 2 параметра: Номенклатура и Серия. При выборе серии, показывать пользователю только серии выбранной номенклатуры

1. Фиксированный параметр выбора

Создаем отчет (файл ВнешнийОтчет_ФиксированныеПараметрыОтбора.erf).

Если отчет встроен в расширение, то необходимо:

1. Добавить в расширение подсистему ПодключаемыеОтчетыИОбработки

2. Добавить отчет в эту подсистему

3. В модуле менеджера отчета написать код:

В 1С добавить дополнительный реквизит справочника Номенклатура "Раздел комплектации" с типом значений "Дополнительное значение". Указать или сгенерировать имя реквизита, в моем случае это "РазделКомплектации_c7a03c267bb64e0eb58489873f24c25e"

В отчете составляем текст запроса:

Для поля "РазделКомплектации" нужно указать тип значения СправочникСсылка.ЗначенияСвойствОбъектов

На вкладке "Параметры" укажем выражение для параметра "Свойство": ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "РазделКомплектации_c7a03c267bb64e0eb58489873f24c25e", Истина)

Включим отбор по полю "РазделКомплектации" в пользовательские настройки: на вкладке "Настройки", "Отбор" добавими отбор "РазделКомплектации", щелкнем на нем правой кнопкой мыши, "Свойства элементов пользовательских настроек", установим флажок "Включать в пользовательские настройки".

В модуле отчета указываем, что мы перехватываем событие "ПослеЗаполненияПанелиБыстрыхНастроек":
В обработчике этого события нужно найти элемент формы в панели быстрого отбора, в котором пользователь указывает значение отбора "Раздел комплектации". В параметрах выбора этого элемента задаем отбор по владельцу - плану видов характеристик "Раздел комплектации":

2. Связи параметров выбора

Здесь мне уже не получилось обойтись без модификации общей формы "ФормаОтчета". Произошло это потому, что не получилось задать связи параметров выбора в существующих элементах панели быстрых настроек. Я выбрал обходной путь - скрывать существующий элемент формы со значением отбора, и подставлять на его место свой элемент. Связи параметров выбора зависимого элемента (серии) я задаю с данными этого элемента. Я постарался свести изменения ФормыОтчета к минимуму, и сделать их универсальными (их не нужно переписывать при создании другого отчета).

Создаем отчет (файл ВнешнийОтчет_СвязиПараметровВыбора.erf).

Как и в предыдущем примере, если отчет встроен в расширение, то необходимо:

1. Добавить в расширение подсистему ПодключаемыеОтчетыИОбработки

2. Добавить отчет в эту подсистему

3. В модуле менеджера отчета написать:

В отчете составляем текст запроса:

Параметры "Номенклатура" и "Серия" включим в пользовательские настройки (см. выше).

В модуле отчета указываем, что мы перехватываем событие "ПослеЗаполненияПанелиБыстрыхНастроек":
В обработчике этого события:

1. Находим элементы формы - значения параметров "Номенклатура" и "Серия"

2. Добавляем в форму новый реквизит "МойРеквизит_Номенклатура". Добавить элемент формы для этого реквизита.
Элементу формы указать обработчик события "ПриИзменении" (обработчик этого события и будет то единственным изменением общей формы "ФормаОтчета").

3. Скрываем старый элемент формы "Номенклатура".

4. Для элемента формы "Серия" задаем связи параметров выбора.

5. Сохраняем необходимую в дальнейшем информацию в дополнительных свойствах пользовательских настроек компоновщика настроек:

Читайте также: