1С как установить параметры динамического списка
Динамические списки: использование и установка параметров в 1С 8.2 и 8.3
![](../img/1s-kak-ustanovit-parametry-dinamicheskogo-spiska_0.jpg)
Давайте представим, что вы работаете в режиме управляемых форм и вам необходимо при работе некоторого справочника постоянно производить фильтрацию элементов по определенному и постоянному отбору. Более того вы к примеру работаете в документом и при выборе реквизитов необходимо,чтобы открывалась форма выбора элементов справочника, но чтобы в данном списке отображались только те элементы, которые соответствуют определенному условию. В таком случае вам непременно помогут динамические списки. что это такое и с чем его «едят» рассмотрим далее.
К примеру у нас есть справочник СтруктураПосевныхПлощадей, в котором есть наименование культуры, поле и год в котором данная культура была посажена.
![](../img/1s-kak-ustanovit-parametry-dinamicheskogo-spiska_1.jpg)
рис.1
Добавим в командную панель поле ВыборГода и перенесем мышкой на форму. В результате чего будем делать отбор по необходимому нам году. Как вы уже заметили в панели реквизитов есть реквизит Список с типом ДинамическийСписок. Вот это именно то, что позволит нам производить любые манипуляции и любые отборы. Если мы нажмем свойства в контекстном меню динамического списка(нажать правой кнопкой), то увидим что основная таблица состоит полностью из всех реквизитов данных элементов справочника.
![](../img/1s-kak-ustanovit-parametry-dinamicheskogo-spiska_2.jpg)
рис.2
Если мы поставим галочку в поле ПроизвольныйЗапрос и в настройке списка нажмем открыть, то увидим привычный для нас запрос. Здесь мы можем полностью его переписать вручную, либо при помощи конструктора запроса, что намного удобнее.
![](../img/1s-kak-ustanovit-parametry-dinamicheskogo-spiska_3.jpg)
рис.3
Добавим условие, чтобы наш запрос выглядел так, как на рисунке 3. Мы видим, что у нас появился параметр &ВыборГода , в который мы будем передавать данные с поля, который мы поместили на форму.
![](../img/1s-kak-ustanovit-parametry-dinamicheskogo-spiska_4.jpg)
рис.4
Как передать параметр в динамический список 1С, а именно в запрос, который мы отредактировали? Нам необходимо в модуле формы добавить некоторый код. Для этого нам очень подойдет процедура ПриСозданииНаСервере, так как она отрабатывает еще до открытия формы. &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Список.Параметры.УстановитьЗначениеПараметра(«ВыборГода», Параметры.ВыборГода); КонецПроцедуры Таким образом при открытии данного справочника из необходимого вам места вы можете при изменении года тут же фильтровать структуру посевов.
Настройки динамического списка
Если вы не желаете «заморачиваться» с параметрами и запросами, вы можете перейти во вкладку Настройки и устанавливать уже жесткий отбор. Например установим год 2016. Также вы можете по вашему желанию производить сортировку, группировку и даже использовать оформление.
![](../img/1s-kak-ustanovit-parametry-dinamicheskogo-spiska_5.jpg)
рис.5
На этом настройка завершена. Как видите данный механизм очень прост и удобен.
1chelp.net
Обработка и оформление данных динамического списка | 1С:Зазеркалье
08.07.2016
Реализовано в версии 8.3.10.2168.
Как вы знаете, динамический список удобен и полезен для быстрого показа больших списков. Он довольно гибок, позволяет вам изменять стандартный запрос, и даже создавать собственный сложный запрос. Благодаря этому у вас есть возможность выводить в списке разные дополнительные данные, связанные с основными данными списка.
Однако такая универсальность имеет и оборотную сторону. Желание «показать сразу всё» может приводить вас к значительному усложнению запроса. В результате вы будете получать неэффективные планы выполнения и, как результат, снижение производительности при отображении и пролистывании списка.
Кроме этого есть ряд прикладных задач, в которых алгоритм отбора и оформления данных списка довольно сложен. В этих случаях возможностей произвольного запроса и условного оформления просто не хватает. Хочется иметь более «свободный» и более «точный» инструмент, который позволит сделать «что угодно» и «только там, где нужно».
Событие ПриПолученииДанныхНаСервере
Специально для этих целей мы реализовали новый обработчик ПриПолученииДанныхНаСервере(). Он добавлен в расширение таблицы, отображающей динамический список.
Этот обработчик вызывается на сервере после того, как динамический список получил и оформил для отображения очередную порцию данных.
Важная особенность заключается в том, что в этом обработчике недоступен контекст формы. Вы можете оперировать только коллекцией тех строк списка, которые получены из базы, уже отобраны и оформлены в соответствии с настройками динамического списка.
Вы можете изменить данные, находящиеся в этих строках, или применить к ячейкам собственное оформление. Доступны такие возможности оформления как ЦветФона, ЦветТекста, Шрифт, ГоризонтальноеПоложение, Видимость, Доступность, Отображать, Текст и Формат.
Также, при необходимости, вы можете посмотреть и проанализировать копию полных настроек динамического списка. Но изменить настройки вы не сможете.
Простейший сценарий использования
Проще всего понять назначение этого обработчика на примере. Пример заключается в том, чтобы в списке товаров показать их остатки из регистра накопления. Количество меньше некоторого значения выделить красным цветом.
До сих пор эта задача решалась левым соединением в запросе динамического списка, и условным оформлением списка, устанавливаемым в конфигураторе.
Теперь она решается так. Стандартный запрос списка не усложняется, в него добавляется только фиктивное поле Остаток.
А в обработчике ПриПолученииДанныхНаСервере() только для полученных строк вычисляются остатки. И тут же маленькие остатки выделяются красным.
Здесь, методом ПолучитьКлючи(), из коллекции строк динамического списка вы получаете их ключи (ссылки), и передаёте эти ключи в запрос остатков.
Затем, при обходе результатов запроса, вы получаете нужные строки по ключу, в колонку Остаток помещаете значение, и устанавливаете оформление этого поля, если нужно.
В результате пользователь видит следующий список:
В чём преимущество такого варианта?
Во-первых, запрос списка остаётся простым. Или он не остаётся простым, но количество соединений в нём уменьшается. А это значит, что для него, с большой долей вероятности, будет построен хороший план.
Во-вторых, получение остатков в обработчике будет выполняться только один раз, в то время как запрос списка может быть выполнен несколько раз (в зависимости от настроек списка и сценария листания).
И, в-третьих, новый обработчик выполняется уже после того, как основные данные получены из базы и прошли проверку прав. Это значит, что в некоторых сценариях получение связанных данных в обработчике можно выполнять в привилегированном режиме, без проверки прав. Это ускоряет работу списка.
Ограничения на изменяемые и добавляемые поля
Тот факт, что в обработчике вы можете изменить значения полей списка, несет в себе особенность, которую нужно всегда учитывать.
Если не предпринять дополнительных мер, то пользователь может быть сильно удивлён результатами группировки, сортировки или отбора (в том числе и поиска) по тем полям, которые вы изменили. Ведь эти действия будут выполняться по исходным данным, получаемым запросом, а не по тем данным, которые видит пользователь.
Поэтому в тех случаях, когда вы изменяете значения полей, не забывайте исключить их из группировки, порядка и отбора. Специально для этого мы реализовали три новых метода.
Кроме этого, возможно, в некоторых сценариях имеет смысл визуально выделить такие колонки в таблице, чтобы пользователи видели, что эти колонки «особенные», не такие, как все.
wonderland.v8.1c.ru
Как обновить динамический список или реквизит на форме клиента?
+6
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закрыть форму и открыть снова - все обновится
НО если нужно обновить сразу в открытой форме, то используйте код:
Код 1C v 8.3 &НаКлиенте Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт Если Не Результат Тогда Возврат; КонецЕсли; // Много кода обработки //... //... //... // ОБНОВИМ динамический список файлы Элементы.Файлы.Обновить(); // для обновления Реквизитов ЭтаФорма.Прочитать(); // Обновление данных ЭтаФорма.ОбновитьОтображениеДанных(); КонецПроцедуры
Обновить() - Обновляет данные в таблице.
Прочитать() - Обновляет объект управляемой формы.
ОбновитьОтображениеДанных() - В принудительном порядке обновляет содержание элементов управления. Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране.
helpf.pro