Форма настройки динамического списка

1. ЧерныйКот 25.11.15 15:29 Сейчас в теме
Как программно открыть форму настроек динамического списка?

ОткрытьФорму("ФормаНастроекДинамическихСписков",ПараметрыФормы,Элементы.Список) 

не срабатывает. что я делаю не так?

Конечная цель не открытие формы, а попытка поймать обработчик событий изменения настроек списка.
для стандартного механизма есть только обработчик
ПриОбновленииСоставаПользовательскихНастроекНаСервере()

а он вызывается только если добавили/удалили элементы настроек. а изменение (включение использования, изменение значений отборов)
данное событие не обрабатывает (((
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SerLeon 25.11.15 16:34 Сейчас в теме
Хм, я бы вывел свою кнопку, вместо "Настроить список", которая вызывает КонструкторНастроекКомпоновкиДанных. В обработчике этой команды можешь прописывать, что хочешь.
Посмотри этот объект в СП, может тебе пригодятся методы типа "ПолучитьНастройки"
3. SerLeon 25.11.15 16:51 Сейчас в теме
Список - реквизит формы с типом "Динамический список"

ИсточникДоступныхНастроек = Список.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек();
АдресСхемы = ПоместитьВоВременноеХранилище(ИсточникДоступныхНастроек, УникальныйИдентификатор);

Конструктор = Новый КонструкторНастроекКомпоновкиДанных;
Конструктор.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
Конструктор.УстановитьНастройки(Список.КомпоновщикНастроек.ПолучитьНастройки());

НажатаКнопкаОКВКонструкторе = Конструктор.ОткрытьМодально();
4. ЧерныйКот 25.11.15 17:19 Сейчас в теме
Сделал так:

&НаСервере
Функция ПолучитьСКДСпискаНаСервере()
	Возврат Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
	Схема = ПолучитьСКДСпискаНаСервере();
	Если ТипЗнч(Схема) <> Тип("СхемаКомпоновкиДанных") Тогда
		Возврат;
	КонецЕсли;
	ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
	КонструкторНастроек =  Новый КонструкторНастроекКомпоновкиДанных();
	КонструкторНастроек.Инициализировать(ИсточникНастроек);
	КонструкторНастроек.ОткрытьМодально();
КонецПроцедуры
Показать

или лучше так
&НаКлиенте
Процедура Команда1(Команда)
	ИсточникНастроек = Список.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек();
	КонструкторНастроек =  Новый КонструкторНастроекКомпоновкиДанных();
	КонструкторНастроек.Инициализировать(ИсточникНастроек);
	КонструкторНастроек.ОткрытьМодально();
КонецПроцедуры


Работает, спасибо!, но увы не то что требуется.

Тут еще нюанс - форма открывается только на толстом клиенте, модально. Мне это запрещено, все должно работать на тонком клиенте.
А самое главное, что форма не та, нужна не форма конструктора настроек СКД, а форма настроек динамического списка (там вкладки основные, отборы, группировка, сортировка и т.д.)
5. ЧерныйКот 25.11.15 19:29 Сейчас в теме
Прошу прощения, сглупил.
В общем разобрался, всё работает. завтра отпишу в чем была ошибка.
SerLeon спасибо за дельный совет!
6. ЧерныйКот 26.11.15 10:21 Сейчас в теме
ОткрытьФорму("ФормаНастроекДинамическихСписков",ПараметрыФормы,Элементы.Список) - не срабатывало потому что пыталась открыть ту форму что указана в свойствах конфигурации "Основная форма настройки динамических списков". Так как это свойство было пусто, результат был таким же.

Дальше, как и посоветовали, вместо стандартной "настроить список" вставил свою команду. Создал свою форму настройки, которая через оповещение возвращало измененные настройки и выполняло нужные мне дополнительные действия.
&НаКлиенте
Процедура НастроитьСписок(Команда)
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Заголовок", "Настройка списка");
	ПараметрыФормы.Вставить("ИсточникДоступныхНастроек", Список.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек());
	ПараметрыФормы.Вставить("Настройки", Список.КомпоновщикНастроек.Настройки);
	ПараметрыФормы.Вставить("ПользовательскиеНастройки", Список.КомпоновщикНастроек.ПользовательскиеНастройки);
	ПараметрыФормы.Вставить("ФиксированныеНастройки", Список.КомпоновщикНастроек.ФиксированныеНастройки);
	ОткрытьФорму("ОбщаяФорма.ФормаНастроекДинамическогоСписка",ПараметрыФормы,ЭтаФорма, Истина, ,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

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

Показать


Осталось только два глупых вопроса.
1) а можно ли изменять настройки списка одной формы непосредственно в другой. т.е. без возврата настроек через параметр оповещения?
2) почему форма настроек дин. списка обязательно должна быть общей формой. или нет? у меня не получилось сделать одну из форм объекта формой настройки дин. списка.
shaykhelov; KPAMOP; ateplouhov123; утюгчеловек; SerLeon; +5 Ответить
7. SerLeon 26.11.15 22:17 Сейчас в теме
(6) Вот, что есть в документации:
"5.5.12.6. Сохранение настроек динамических списков
Пользовательские настройки динамических списков сохраняются в хранилище, которое указано в свойствах конфигурации (ХранилищеПользовательскихНастроекДинамическихСписков). Если в свойствах конфигурации не указано хранилище настроек, то используется системное хранилище.
Возможностью автоматического сохранения пользовательских настроек динамического списка управляет свойство Автоматическое сохранение пользовательских настроек реквизита формы типа ДинамическийСписок. Когда свойство установлено в значение Истина, пользовательские настройки автоматически сохраняются при закрытии формы и загружаются при ее открытии.
Форма динамического списка предоставляет команды сохранения и загрузки пользовательских настроек. Также динамический список предоставляет команду для установки стандартных настроек. В случае выполнения данной команды в динамический список попадут настройки, которые находятся в свойстве Список.КомпоновщикНастроек.Настройки."

Если форма не указана то они хранятся в ХранилищеСистемныхНастроек:

"4.4. Хранилище: настроек динамического списка
Настройка: настройки динамического списка
● Ключ объекта – является строковым значением, состоящим из полного имени формы и имени реквизита типа ДинамическийСписок.
Пример ключа объекта: Документ.ПриходТовара.Форма.ФормаСписка.Список
● Ключ настройки – текстовый идентификатор сохраняемых значений.
● Тип сохраняемого значения – ПользовательскиеНастройкиКомпоновкиДанных.

Получается в этом хранилище (системном или назначенном), во время работы в форме, будут лежать еще неизмененные настройки пользователя и сравнив их с текущими можно отловить изменение, это во-первых. А во-вторых можно попробовать самому сохранить пользовательские настройки для другой формы, надо тестить)

P.S. По-моему ваше решение более правильное и простое =)
9. Stackmann 24.02.16 14:26 Сейчас в теме
(6) Здравствуйте. Столкнулся с той же темой. Скажите, получилось форму "ОбщаяФорма.ФормаНастроекДинамическогоСписка" сделать такой же, как открывается по стандартной команде?
10. ЧерныйКот 26.02.16 14:35 Сейчас в теме
(9) Stackmann,
Да, пользователю не заметна подмена. Проблем нет.
Форма обязательно должна быть общей формой...
11. Pawlick 10 24.05.17 12:11 Сейчас в теме
(10)
Андрей, а формой не поделитесь?
13. ЧерныйКот 24.11.17 00:14 Сейчас в теме
(11)(12) так просто в общих формах создаешь форму, выбираешь тип "форма настройки демонического списка". втыкаешь туда свои обработчики какие нужно, и переопределяешь вызов вместо типовой рисуемой платформой - вызываешь свою.
12. Sargez 23.08.17 16:10 Сейчас в теме
(10) здравствуйте, подскажите, пожалуйста, а где вы взяли эту общую форму по настройке динам. списка?

заранее благодарен
14. maximgurov 28.05.18 09:44 Сейчас в теме
(6) На новых конфигурациях всё работает правильно. Но есть конфигурация с режимом совместимости 8.2.16. В ней при попытке открыть таким образом открывает форма с надписью "Не предусмотрено возможности настройки для этого списка". А если форма просто указана как основная для отбора динамического списка, то она вообще не вызывается. Может кто сталкивался?
ЧерныйКот; +1 Ответить
15. ЧерныйКот 28.05.18 12:41 Сейчас в теме
(14) не сталкивался, спасибо за полезное дополнение
8. SerLeon 26.11.15 22:27 Сейчас в теме
Не знаю как отредактировать, "А во-вторых можно попробовать самому сохранить пользовательские настройки для другой формы" имеется ввиду можно сохранить программно настройки для формы, через ХранилищеСистемныхНастроек.Сохранить(<КлючОбъекта>, <КлючНастроек>, <Настройки>, <ОписаниеНастроек>, <ИмяПользователя>)
ЧерныйКот; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот