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

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 Ответить
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)