Форма настройки динамического списка
Как программно открыть форму настроек динамического списка?
не срабатывает. что я делаю не так?
Конечная цель не открытие формы, а попытка поймать обработчик событий изменения настроек списка.
для стандартного механизма есть только обработчик
а он вызывается только если добавили/удалили элементы настроек. а изменение (включение использования, изменение значений отборов)
данное событие не обрабатывает (((
ОткрытьФорму("ФормаНастроекДинамическихСписков",ПараметрыФормы,Элементы.Список)
не срабатывает. что я делаю не так?
Конечная цель не открытие формы, а попытка поймать обработчик событий изменения настроек списка.
для стандартного механизма есть только обработчик
ПриОбновленииСоставаПользовательскихНастроекНаСервере()
а он вызывается только если добавили/удалили элементы настроек. а изменение (включение использования, изменение значений отборов)
данное событие не обрабатывает (((
По теме из базы знаний
- Подсистема сохранения и восстановления настроек динамических списков
- Программное управление пользовательскими настройками динамического списка
- Расширенная настройка динамического списка УФ
- Ускоряем медленный/долгий и тормозной стандартный поиск по динамическому списку, настраиваем его под себя
- Использование формы "Ввод значений списком с флажками" в настройках динамического списка
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Хм, я бы вывел свою кнопку, вместо "Настроить список", которая вызывает КонструкторНастроекКомпоновкиДанных. В обработчике этой команды можешь прописывать, что хочешь.
Посмотри этот объект в СП, может тебе пригодятся методы типа "ПолучитьНастройки"
Посмотри этот объект в СП, может тебе пригодятся методы типа "ПолучитьНастройки"
Список - реквизит формы с типом "Динамический список"
ИсточникДоступныхНастроек = Список.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек();
АдресСхемы = ПоместитьВоВременноеХранилище(ИсточникДоступныхНастроек, УникальныйИдентификатор);
Конструктор = Новый КонструкторНастроекКомпоновкиДанных;
Конструктор.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
Конструктор.УстановитьНастройки(Список.КомпоновщикНастроек.ПолучитьНастройки());
НажатаКнопкаОКВКонструкторе = Конструктор.ОткрытьМодально();
Сделал так:
или лучше так
Работает, спасибо!, но увы не то что требуется.
Тут еще нюанс - форма открывается только на толстом клиенте, модально. Мне это запрещено, все должно работать на тонком клиенте.
А самое главное, что форма не та, нужна не форма конструктора настроек СКД, а форма настроек динамического списка (там вкладки основные, отборы, группировка, сортировка и т.д.)
&НаСервере
Функция ПолучитьСКДСпискаНаСервере()
Возврат Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
КонецФункции
&НаКлиенте
Процедура Команда1(Команда)
Схема = ПолучитьСКДСпискаНаСервере();
Если ТипЗнч(Схема) <> Тип("СхемаКомпоновкиДанных") Тогда
Возврат;
КонецЕсли;
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
КонструкторНастроек = Новый КонструкторНастроекКомпоновкиДанных();
КонструкторНастроек.Инициализировать(ИсточникНастроек);
КонструкторНастроек.ОткрытьМодально();
КонецПроцедуры
Показатьили лучше так
&НаКлиенте
Процедура Команда1(Команда)
ИсточникНастроек = Список.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек();
КонструкторНастроек = Новый КонструкторНастроекКомпоновкиДанных();
КонструкторНастроек.Инициализировать(ИсточникНастроек);
КонструкторНастроек.ОткрытьМодально();
КонецПроцедуры
Работает, спасибо!, но увы не то что требуется.
Тут еще нюанс - форма открывается только на толстом клиенте, модально. Мне это запрещено, все должно работать на тонком клиенте.
А самое главное, что форма не та, нужна не форма конструктора настроек СКД, а форма настроек динамического списка (там вкладки основные, отборы, группировка, сортировка и т.д.)
ОткрытьФорму("ФормаНастроекДинамическихСписков",ПараметрыФормы,Элементы.Список) - не срабатывало потому что пыталась открыть ту форму что указана в свойствах конфигурации "Основная форма настройки динамических списков". Так как это свойство было пусто, результат был таким же.
Дальше, как и посоветовали, вместо стандартной "настроить список" вставил свою команду. Создал свою форму настройки, которая через оповещение возвращало измененные настройки и выполняло нужные мне дополнительные действия.
Осталось только два глупых вопроса.
1) а можно ли изменять настройки списка одной формы непосредственно в другой. т.е. без возврата настроек через параметр оповещения?
2) почему форма настроек дин. списка обязательно должна быть общей формой. или нет? у меня не получилось сделать одну из форм объекта формой настройки дин. списка.
Дальше, как и посоветовали, вместо стандартной "настроить список" вставил свою команду. Создал свою форму настройки, которая через оповещение возвращало измененные настройки и выполняло нужные мне дополнительные действия.
&НаКлиенте
Процедура НастроитьСписок(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Заголовок", "Настройка списка");
ПараметрыФормы.Вставить("ИсточникДоступныхНастроек", Список.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек());
ПараметрыФормы.Вставить("Настройки", Список.КомпоновщикНастроек.Настройки);
ПараметрыФормы.Вставить("ПользовательскиеНастройки", Список.КомпоновщикНастроек.ПользовательскиеНастройки);
ПараметрыФормы.Вставить("ФиксированныеНастройки", Список.КомпоновщикНастроек.ФиксированныеНастройки);
ОткрытьФорму("ОбщаяФорма.ФормаНастроекДинамическогоСписка",ПараметрыФормы,ЭтаФорма, Истина, ,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ФормаНастроекДинамическогоСпискаЗакрытие" Тогда
// тут еще проверка а соответствует ли событие именно этой конкретной форме, или вызвано из другого экземпляра формы
Список.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(Параметр.ПользовательскиеНастройки);
// доп обработка
КонецЕсли;
КонецПроцедуры
ПоказатьОсталось только два глупых вопроса.
1) а можно ли изменять настройки списка одной формы непосредственно в другой. т.е. без возврата настроек через параметр оповещения?
2) почему форма настроек дин. списка обязательно должна быть общей формой. или нет? у меня не получилось сделать одну из форм объекта формой настройки дин. списка.
(6) Вот, что есть в документации:
"5.5.12.6. Сохранение настроек динамических списков
Пользовательские настройки динамических списков сохраняются в хранилище, которое указано в свойствах конфигурации (ХранилищеПользовательскихНастроекДинамическихСписков). Если в свойствах конфигурации не указано хранилище настроек, то используется системное хранилище.
Возможностью автоматического сохранения пользовательских настроек динамического списка управляет свойство Автоматическое сохранение пользовательских настроек реквизита формы типа ДинамическийСписок. Когда свойство установлено в значение Истина, пользовательские настройки автоматически сохраняются при закрытии формы и загружаются при ее открытии.
Форма динамического списка предоставляет команды сохранения и загрузки пользовательских настроек. Также динамический список предоставляет команду для установки стандартных настроек. В случае выполнения данной команды в динамический список попадут настройки, которые находятся в свойстве Список.КомпоновщикНастроек.Настройки."
Если форма не указана то они хранятся в ХранилищеСистемныхНастроек:
"4.4. Хранилище: настроек динамического списка
Настройка: настройки динамического списка
● Ключ объекта – является строковым значением, состоящим из полного имени формы и имени реквизита типа ДинамическийСписок.
Пример ключа объекта: Документ.ПриходТовара.Форма.ФормаСписка.Список
● Ключ настройки – текстовый идентификатор сохраняемых значений.
● Тип сохраняемого значения – ПользовательскиеНастройкиКомпоновкиДанных.
Получается в этом хранилище (системном или назначенном), во время работы в форме, будут лежать еще неизмененные настройки пользователя и сравнив их с текущими можно отловить изменение, это во-первых. А во-вторых можно попробовать самому сохранить пользовательские настройки для другой формы, надо тестить)
P.S. По-моему ваше решение более правильное и простое =)
"5.5.12.6. Сохранение настроек динамических списков
Пользовательские настройки динамических списков сохраняются в хранилище, которое указано в свойствах конфигурации (ХранилищеПользовательскихНастроекДинамическихСписков). Если в свойствах конфигурации не указано хранилище настроек, то используется системное хранилище.
Возможностью автоматического сохранения пользовательских настроек динамического списка управляет свойство Автоматическое сохранение пользовательских настроек реквизита формы типа ДинамическийСписок. Когда свойство установлено в значение Истина, пользовательские настройки автоматически сохраняются при закрытии формы и загружаются при ее открытии.
Форма динамического списка предоставляет команды сохранения и загрузки пользовательских настроек. Также динамический список предоставляет команду для установки стандартных настроек. В случае выполнения данной команды в динамический список попадут настройки, которые находятся в свойстве Список.КомпоновщикНастроек.Настройки."
Если форма не указана то они хранятся в ХранилищеСистемныхНастроек:
"4.4. Хранилище: настроек динамического списка
Настройка: настройки динамического списка
● Ключ объекта – является строковым значением, состоящим из полного имени формы и имени реквизита типа ДинамическийСписок.
Пример ключа объекта: Документ.ПриходТовара.Форма.ФормаСписка.Список
● Ключ настройки – текстовый идентификатор сохраняемых значений.
● Тип сохраняемого значения – ПользовательскиеНастройкиКомпоновкиДанных.
Получается в этом хранилище (системном или назначенном), во время работы в форме, будут лежать еще неизмененные настройки пользователя и сравнив их с текущими можно отловить изменение, это во-первых. А во-вторых можно попробовать самому сохранить пользовательские настройки для другой формы, надо тестить)
P.S. По-моему ваше решение более правильное и простое =)
(6) На новых конфигурациях всё работает правильно. Но есть конфигурация с режимом совместимости 8.2.16. В ней при попытке открыть таким образом открывает форма с надписью "Не предусмотрено возможности настройки для этого списка". А если форма просто указана как основная для отбора динамического списка, то она вообще не вызывается. Может кто сталкивался?
Не знаю как отредактировать, "А во-вторых можно попробовать самому сохранить пользовательские настройки для другой формы" имеется ввиду можно сохранить программно настройки для формы, через ХранилищеСистемныхНастроек.Сохранить(<КлючОбъекта>, <КлючНастроек>, <Настройки>, <ОписаниеНастроек>, <ИмяПользователя>)
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)