Произвольный отбор при открытии формы любого динамического списка

05.12.16

Разработка - Механизмы платформы 1С

Как установить хитрый отбор при открытии формы списка, например, отбор формы списка документов по элементу табличной части? Давайте разбираться...

Доброго времени суток, дорогие 1С-ники! Наша сегодняшняя передача посвещена отборам при открытии форм. Допустим, у вас есть внешняя обработка и вы хотите выбрать какие-то документы, элементы справочника или иные какие данные из списка, который не хотите пользователю показывать целиком.

Отчасти с этим помогает справиться параметр "Отбор", передаваемый при открытии формы. Например, так:

  ОткрытьФорму("Документ.ПоступлениеНаРасчетныйСчет.ФормаСписка", Новый Структура("Отбор", Новый Структура("ВидОперации", НужныйВидОперации)), ЭтаФорма, ...);

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

Для того, чтобы получить эти фиксированные настройки, нужно сделать так:

Функция ПолучитьФиксНастройки()

	Схема = Новый СхемаКомпоновкиДанных;
	
	Источник = Схема.ИсточникиДанных.Добавить();
	Источник.Имя = "Источник1";
	Источник.ТипИсточникаДанных = "local";
	
	Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
	Набор.Запрос = "ВЫБРАТЬ * ИЗ Документ.ПоступлениеНаРасчетныйСчет КАК ПоступлениеНаРасчетныйСчет";
	Набор.Имя = "Запрос1";
	Набор.ИсточникДанных ="Источник1";
	Набор.АвтоЗаполнениеДоступныхПолей = Истина;

	АдресСхемы = ПоместитьВоВременноеХранилище(Схема, ЭтаФорма.УникальныйИдентификатор);

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

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

	Возврат КомпоновщикНастроек.ФиксированныеНастройки

КонецФункции

&НаКлиенте
Процедура ОткрытьКом(Команда)

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

КонецПроцедуры

В данном случае мы откроем только те документы, в реквизите "СпособПогашенияЗадолженности" табличной части "РасшифровкаПлатежа" которых установлено значение "Автоматически".

Отбор СКД Управляемые Формы

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    3585    dsdred    48    

66

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5034    YA_418728146    25    

62

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6163    dsdred    36    

110

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18199    SeiOkami    46    

116

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    11767    human_new    27    

72

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8561    YA_418728146    6    

139

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6198    sebekerga    54    

93

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15531    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. slawa 26 06.12.16 05:46 Сейчас в теме
Для чего Схему помещать во временное хранилище?
2. starik-2005 3031 06.12.16 10:52 Сейчас в теме
(1) в принципе тут схема вообще не нужна - можно создать объект настроек компоновки данных. А помещение в хранилище - дань традициям.
jan-pechka; +1 Ответить
3. nomadon 367 06.12.16 14:10 Сейчас в теме
без помещения интерактивно не работают доступные поля, мож и тут что то не работает
4. starik-2005 3031 06.12.16 14:35 Сейчас в теме
(3) тут все работает, но компоновка тут нужна лишь для получения фиксированных настроек, т.е. фактически весь этот код можно заменить на "ФиксНастройки = Новый НастройкиКомпоновкиДанных".
test_mode; zqzq; bulpi; +3 Ответить
7. zqzq 23 07.12.16 08:56 Сейчас в теме
(4) Так и надо всю эту воду из статьи убрать и оставить нужное


	ФиксНастройки = Новый НастройкиКомпоновкиДанных;

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

	УправлениеНебольшойФирмойКлиент.УстановитьЭлементОтбораСписка(ФиксНастройки, "Склад", СССС);

Показать
Мах; Dach; nagimo; TeMochkiN; DAAbramov; bow; Новиков; jaroslav.h; +8 1 Ответить
11. starik-2005 3031 07.12.16 11:08 Сейчас в теме
(7) ну некоторым интересно полностью поглядеть ))
8. Новиков 292 07.12.16 10:13 Сейчас в теме
(4)
но компоновка тут нужна лишь для получения фиксированных настроек, т.е. фактически весь этот код можно заменить на "ФиксНастройки = Новый НастройкиКомпоновкиДанных".


Может быть для потомков покажете вторую редакцию готового кода, с замененными фрагментами? Может как-то бы и в статье это отразить?
И не понятно, если при всех одинаковых вводных, можно написать меньше когда, то почему не воспользоваться данной возможностью? :)
10. starik-2005 3031 07.12.16 11:07 Сейчас в теме
(8) если потомки не смогут сделать это самостоятельно, то за державу станет обидно )))

13. Новиков 292 07.12.16 11:47 Сейчас в теме
(10) Так вы для кого статью то писали, для себя или для других? Если для себя - вопросов нет. Если для других, вы зачем-то предложили длинный путь при наличии короткого. Дальше эту статью очевидно будут находить поисковиком и просто копи-пастить, меняя название документа и табличной части на свое. И расползется ваша портянища по многим и многим конфам. Я уверен, даже до комментов основная масса не дойдет, зная что решение - работает.

Дополните статью коротким вариантом, типа "но код можно подсократить, и я покажу как".

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

Спасибо.
wowik; TeMochkiN; ixijixi; alest; +4 Ответить
14. starik-2005 3031 07.12.16 11:49 Сейчас в теме
(13) как в одном анекдоте про обезьян, прапорщиков, палку и бананы: "что тут думать - прыгать надо!" Отсюда мораль: не стоит упрощать то, что недоступно для понимания масс, чтобы оное оставалось в элитарном сегменте.
Makushimo; +1 Ответить
5. Yashazz 4707 06.12.16 15:54 Сейчас в теме
Ваще чего-то совсем баян. Из серии "как вывести пользователю сообщение". С чего вдруг столько плюсов?..

Автор, насчёт производительности что-нибудь известно? Или это вариант только для простых списков по основной таблице?
pm74; alest; +2 Ответить
6. starik-2005 3031 06.12.16 16:43 Сейчас в теме
(5) все зависит от того, что открывает пользователь. Если первый вариант отбора позволяет на "Равно" и "ВСписке" отбирать, то второй фактически определяет любой отбор, доступный пользователю в настройке списка, только при этом пользователь не видит отбор из фиксированных настроек. Производительность определяется полями отбора, которые уже будут влиять на план запроса в СУБД. Если по индексированному полю отбор происходит - производительность будет высокая, а если по какому-то ПОДОБНО в реквизите табличной части, то все зависит от размера таблицы. Я как-то руками группировку попытался сделать по весьма небольшому справочнику - пятнадцать минут ждал, пока программа что-то вернет.

С другой стороны, если показать пользователю меньше данных, то есть некоторый шанс на то, что пользователь не выберет что-то не то.

ЗЫ: Ты до сих пор не знаешь, за что на Инфостарте плюсуют? Могу как-нибудь рассказать...
9. mitia.mackarevich 72 07.12.16 10:29 Сейчас в теме
Забавно, а что будет автор если пользовательские настройки будут идти в наложении(Например сохраненные) или пользователь захочет потом сам настроить дин. список? вывалиться ошибка, наложение икс и пользовательских настроек недопустимо.Тогда имеет смыл запретить редактирование настроек при открытии динамического списка.
За труды все равно плюсану.
12. starik-2005 3031 07.12.16 11:09 Сейчас в теме
(9) так можно всегда гипотезу попытаться подтвердить или опровергнуть экспериментом!
15. palsergeich 07.12.16 12:26 Сейчас в теме
Использовать фиксированные настройки не гуд, ибо отбор по полю, на которое наложен уже отбор в фиксированных настройках приведет к ошибке. И часто приводит к тому, что такой список становится нафиг никому не нужен.
Почему не использовать пользовательские настройки с доступностью - недоступный?
27. SlavaKron 03.07.19 12:52 Сейчас в теме
(15)(18)(19)
Так что там с параметром формы ПользовательскиеНастройки? Получилось у кого-нибудь через него установить отбор?
28. starik-2005 3031 03.07.19 13:25 Сейчас в теме
29. SlavaKron 03.07.19 13:47 Сейчас в теме
(28) У меня не получилось, потому и спрашиваю.
16. palsergeich 07.12.16 12:29 Сейчас в теме
Что то типо такого.
ПараметрыФормы = Новый Структура("ПользовательскиеНастройки", ПользовательскиеНастройки);
ПараметрыФормы.Вставить("СформироватьПриОткрытии" , Истина);

Форма = ОткрытьФорму("Отчет.XXXXX.Форма.ФормаОтчета", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Источник.УникальныйИдентификатор, ПараметрыВыполненияКоманды.Окно);
17. starik-2005 3031 07.12.16 12:44 Сейчас в теме
(16) это для отчетов. В расширении формы динамического нет параметра "ПользовательскиеНастройки". Или есть? Для расширения формы компоновщика настроек есть.
18. alexei366 07.12.16 12:53 Сейчас в теме
В СП можно ввести "Расширение управляемой формы для динамического списка" и там будут и ФиксированныеНастройки и ПользовательскиеНастройки и КлючПользовательскихНастроек. Так что можно поиграться.
19. starik-2005 3031 07.12.16 13:10 Сейчас в теме
(18) у меня в СП так, пользовательские настройки есть - круто!
Прикрепленные файлы:
20. alexei366 07.12.16 13:28 Сейчас в теме
(19)Ну славо богу, хоть СП сопали)))
21. starik-2005 3031 07.12.16 13:47 Сейчас в теме
(20) с пользовательскими настройками то плохо, что пользователь их может отрубить. При этом фиксированные он срубить не сможет. С другой стороны, пользователь всегда прав - и если так, то можно и пользовательские настройки передавать.
22. alexei366 08.12.16 10:08 Сейчас в теме
(21) Надо тестить, ты же их передавать будешь, они может будут замещать пользовательские, плюк ключ пользовательских настроек можно передать какойнить специфический.
23. Pawlick 10 09.12.16 01:54 Сейчас в теме
1С не работает с соответствием


С какого числа?

Проверил: Платформа 1С:Предприятие 8.3 (8.3.8.1784)

Соответствие = Новый Соответствие;

Работает!!!

...Фух... Перепугался даже
24. starik-2005 3031 09.12.16 12:37 Сейчас в теме
(23) это если выдирать из контекста, то работает, а если с контекстом - нет )))
25. Makushimo 160 23.01.17 05:38 Сейчас в теме
26. пользователь 23.01.17 09:56
Сообщение было скрыто модератором.
...
30. SlavaKron 03.07.19 17:15 Сейчас в теме
Получилось, хоть и не без шаманства. Оказывается, идентификатор пользовательских отборов для любого динамического списка при создании формы всегда один и тот же: "dfcece9d-5077-440b-b6b3-45a5cb4538eb".
Может, кому-нибудь пригодится:
&НаКлиенте
Процедура Реквизит1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)	
	СтандартнаяОбработка = Ложь;
	
	ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
	
	ИдентификаторПользовательскойНастройки = "dfcece9d-5077-440b-b6b3-45a5cb4538eb";
	
	Отбор = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
	Отбор.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки;
	Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто;
	
	ЭлементОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Наименование");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
	ЭлементОтбора.ПравоеЗначение = "Вода";
	ЭлементОтбора.Использование = Истина;
	ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
	ЭлементОтбора.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;
	
	ПараметрыФормы = Новый Структура("ПользовательскиеНастройки", ПользовательскиеНастройки);
	
	ОткрытьФорму("ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма1", ПараметрыФормы, Элемент);
КонецПроцедуры
Показать
Прикрепленные файлы:
ВнешняяОбработка1.epf
user1203706; independ; sevushka; spamyda; user1289861; user1107052; +6 Ответить
33. tormozit 7133 07.08.20 08:05 Сейчас в теме
34. spamyda 42 24.09.20 12:38 Сейчас в теме
(30) Плюсанул.

Небольшая приятность пользователю: если элемент уже выбран, и требуется повторное открытие формы выбора, то можно передать начальное значение выбора:
.....
    ПараметрыФормы = Новый Структура("ПользовательскиеНастройки", ПользовательскиеНастройки);
    //+++
    ПараметрыФормы.Вставить("ТекущаяСтрока", Элемент.Значение);
    //---
    ОткрытьФорму("ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма1", ПараметрыФормы, Элемент);
КонецПроцедуры
35. frkbvfnjh 785 14.03.23 15:15 Сейчас в теме
(30) Да блин, че так сложно все в 1С с этими настройками, особенно с пользовательскими. Какие то гуиды, откуда вообще я должен про эти гуиды знать? Есть где нибудь это в документации, как правильно работать с пользовательскими натсройками?
36. SlavaKron 14.03.23 16:10 Сейчас в теме
(35) Такой странный пример там только из-за того, что задача стояла обойтись параметрами формы. На практике проще открыть форму и на клиенте установить для нее пользовательские отборы.
31. user1289861 06.02.20 16:58 Сейчас в теме
автор молодец. И не слушай что пишут мол можно сделать короче.
Лично я увидел в вашей публикации то что мне было нужно, а вот фиксированные настройки, мне вообще были не нужны
И в целом я так считаю что чем подробней и четче описано явление то это к лучшему.
Можно и два варианта типа длинный и типа короткий.
frkbvfnjh; +1 Ответить
32. independ 1515 18.05.20 14:38 Сейчас в теме
Оставьте свое сообщение