Внедрение 1C Блог О нас
 
1С:Франчайзинг На главную Написать нам

1С как установить параметры динамического списка


Динамические списки: использование и установка параметров в 1С 8.2 и 8.3

Давайте представим, что вы работаете в режиме управляемых форм и вам необходимо при работе некоторого справочника постоянно производить фильтрацию элементов по определенному и постоянному отбору. Более того вы к примеру  работаете в документом и при выборе реквизитов необходимо,чтобы открывалась форма выбора элементов справочника, но чтобы в данном списке отображались только те элементы, которые соответствуют определенному условию. В таком случае вам непременно помогут динамические списки. что это такое и с чем его «едят» рассмотрим далее.

К примеру у нас есть справочник СтруктураПосевныхПлощадей, в котором есть наименование культуры, поле  и год в котором данная культура была посажена.

рис.1

Добавим в командную панель поле ВыборГода и перенесем мышкой на форму. В результате чего будем делать отбор по необходимому нам году. Как вы уже заметили в панели реквизитов есть реквизит Список с типом ДинамическийСписок. Вот это именно то, что позволит нам производить любые манипуляции и любые отборы. Если мы нажмем свойства в контекстном меню динамического списка(нажать правой кнопкой),  то увидим что основная таблица состоит полностью из всех реквизитов данных элементов справочника.

рис.2

Если мы поставим галочку в поле ПроизвольныйЗапрос и в настройке списка нажмем открыть, то увидим привычный для нас запрос. Здесь мы можем полностью его переписать  вручную, либо при помощи конструктора запроса, что намного удобнее.

рис.3

Добавим условие, чтобы наш запрос выглядел так, как на рисунке 3. Мы видим, что у нас появился параметр &ВыборГода , в который мы будем передавать данные с поля, который мы поместили на форму.

рис.4

Как передать параметр в динамический список 1С, а именно в запрос, который мы отредактировали? Нам необходимо в модуле формы добавить некоторый код. Для этого нам очень подойдет процедура ПриСозданииНаСервере, так как она отрабатывает еще до открытия формы. &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)     Список.Параметры.УстановитьЗначениеПараметра(«ВыборГода», Параметры.ВыборГода); КонецПроцедуры Таким образом при открытии данного справочника из необходимого вам места вы можете при изменении года тут же фильтровать структуру посевов.

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

Если вы не желаете «заморачиваться» с параметрами и запросами, вы можете перейти во вкладку Настройки и устанавливать уже жесткий отбор. Например установим год  2016. Также вы можете по вашему желанию производить сортировку, группировку и даже использовать оформление.

рис.5

На этом настройка завершена. Как видите данный механизм очень прост и удобен.

1chelp.net

Обработка и оформление данных динамического списка | 1С:Зазеркалье

08.07.2016

Реализовано в версии 8.3.10.2168.

Как вы знаете, динамический список удобен и полезен для быстрого показа больших списков. Он довольно гибок, позволяет вам изменять стандартный запрос, и даже создавать собственный сложный запрос. Благодаря этому у вас есть возможность выводить в списке разные дополнительные данные, связанные с основными данными списка.

Однако такая универсальность имеет и оборотную сторону. Желание «показать сразу всё» может приводить вас к значительному усложнению запроса. В результате вы будете получать неэффективные планы выполнения и, как результат, снижение производительности при отображении и пролистывании списка.

Кроме этого есть ряд прикладных задач, в которых алгоритм отбора и оформления данных списка довольно сложен. В этих случаях возможностей произвольного запроса и условного оформления просто не хватает. Хочется иметь более «свободный» и более «точный» инструмент, который позволит сделать «что угодно» и «только там, где нужно».

Событие ПриПолученииДанныхНаСервере

Специально для этих целей мы реализовали новый обработчик ПриПолученииДанныхНаСервере(). Он добавлен в расширение таблицы, отображающей динамический список.

Этот обработчик вызывается на сервере после того, как динамический список получил и оформил для отображения очередную порцию данных.

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

Вы можете изменить данные, находящиеся в этих строках, или применить к ячейкам собственное оформление. Доступны такие возможности оформления как ЦветФона, ЦветТекста, Шрифт, ГоризонтальноеПоложение, Видимость, Доступность, Отображать, Текст и Формат.

Также, при необходимости, вы можете посмотреть и проанализировать копию полных настроек динамического списка. Но изменить настройки вы не сможете.

Простейший сценарий использования

Проще всего понять назначение этого обработчика на примере. Пример заключается в том, чтобы в списке товаров показать их остатки из регистра накопления. Количество меньше некоторого значения выделить красным цветом.

До сих пор эта задача решалась левым соединением в запросе динамического списка, и условным оформлением списка, устанавливаемым в конфигураторе.

Теперь она решается так. Стандартный запрос списка не усложняется, в него добавляется только фиктивное поле Остаток.

А в обработчике ПриПолученииДанныхНаСервере() только для полученных строк вычисляются остатки. И тут же маленькие остатки выделяются красным.

Здесь, методом ПолучитьКлючи(), из коллекции строк динамического списка вы получаете их ключи (ссылки), и передаёте эти ключи в запрос остатков.

Затем, при обходе результатов запроса, вы получаете нужные строки по ключу, в колонку Остаток помещаете значение, и устанавливаете оформление этого поля, если нужно.

В результате пользователь видит следующий список:

В чём преимущество такого варианта?

Во-первых, запрос списка остаётся простым. Или он не остаётся простым, но количество соединений в нём уменьшается. А это значит, что для него, с большой долей вероятности, будет построен хороший план.

Во-вторых, получение остатков в обработчике будет выполняться только один раз, в то время как запрос списка может быть выполнен несколько раз (в зависимости от настроек списка и сценария листания).

И, в-третьих, новый обработчик выполняется уже после того, как основные данные получены из базы и прошли проверку прав. Это значит, что в некоторых сценариях получение связанных данных в обработчике можно выполнять в привилегированном режиме, без проверки прав. Это ускоряет работу списка.

Ограничения на изменяемые и добавляемые поля

Тот факт, что в обработчике вы можете изменить значения полей списка, несет в себе особенность, которую нужно всегда учитывать.

Если не предпринять дополнительных мер, то пользователь может быть сильно удивлён результатами группировки, сортировки или отбора (в том числе и поиска) по тем полям, которые вы изменили. Ведь эти действия будут выполняться по исходным данным, получаемым запросом, а не по тем данным, которые видит пользователь.

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

Кроме этого, возможно, в некоторых сценариях имеет смысл визуально выделить такие колонки в таблице, чтобы пользователи видели, что эти колонки «особенные», не такие, как все.

wonderland.v8.1c.ru

Как обновить динамический список или реквизит на форме клиента?

 +6 

   

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

НО если нужно обновить сразу в открытой форме, то используйте код:

Код 1C v 8.3  &НаКлиенте Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт Если Не Результат Тогда  Возврат;  КонецЕсли; // Много кода обработки //... //... //... // ОБНОВИМ динамический список файлы Элементы.Файлы.Обновить(); // для обновления Реквизитов ЭтаФорма.Прочитать(); // Обновление данных ЭтаФорма.ОбновитьОтображениеДанных();

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

Обновить() - Обновляет данные в таблице.

Прочитать() - Обновляет объект управляемой формы.

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

helpf.pro


Смотрите также