1С динамический список произвольный запрос

1С динамический список произвольный запрос

Пусть у нас есть форма, содержащая динамический список с произвольным запросом. И этот запрос содержит какие-то параметры. Как установить нужные параметры при открытии формы? Это решается с помощью создания дополнительных параметров формы, передачи в них необходимых значений и установки их в параметры запроса в обработчике события формы ПриСозданииНаСервере() .

Предположим, что мы имеем дело с регистром сведений ЦеныТоваров . В форме списка этого регистра содержится динамический список с произвольным запросом:

Как видно из текста запроса, у запроса есть три параметра: Товар , НачалоПериода и КонецПериода . Для нормального функционирования формы значения этих параметров должны быть заданы при открытии формы, иначе в результате открытия формы будет получена ошибка.

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

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

Итак, создадим у формы списка регистра сведений три параметра:

  • НачалоПериода , (тип Дата );
  • КонецПериода (тип Дата );
  • Товар (тип СправочникСсылка.Товары ).

Теперь в форме элемента справочника Товары создадим команду ЦеныДекабря со следующим обработчиком:

В самой форме регистра сведений, в обработчике события формы ПриСозданииНаСервере() , установим переданные значения в качестве параметров произвольного запроса динамического списка следующим образом:

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

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

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

Читайте также:  Ноут не видит принтер через usb

Динамическое считывание данных становится возможным благодаря тому, что списку указывается основная таблица. Ключевые поля этой таблицы используются платформой для однозначной идентификации строк списка. Например, если список отображает данные справочника или документа, то в качестве ключевого поля используется поле Ссылка. Если список отображает записи какого-нибудь регистра, то для идентификации отдельных строк платформа использует объекты, содержащие значения нескольких ключевых полей. Эти объекты имеют разные названия для разных таблиц, но у них есть общая часть – «КлючЗаписи». Например, РегистрСведенийКлючЗаписи. , РегистрРасчетаКлючЗаписи. и т.д.

Однако возможности динамических списков гораздо шире, чем просто «стандартное» получение данных из одной таблицы. Вы можете написать произвольный запрос для динамического списка. Такой запрос может получать данные из таблиц, которые «в обычной ситуации» не используются для непосредственного отображения в интерфейсе (например, из таблицы остатков регистра или из таблицы регистрации изменений). Также вы можете в произвольном запросе получать данные сразу из нескольких таблиц, соединяя их с помощью языка запросов.

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

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

Читайте также:  Настройки роутера д линк дир 300

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

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

Вид ключа может быть указан следующим образом:

  • ЗначениеПоля – для такого ключа вам нужно выбрать одно единственное ключевое поле, и поведение списка в этом случае будет таким же, как у списка, содержащего ссылочные объекты (список справочника, список документа и т.д.);
  • КлючСтроки – для такого ключа вам нужно выбрать одно или несколько ключевых полей, и поведение списка в этом случае будет таким же, как у списка, содержащего записи (список регистра накопления, список регистра сведений и т.д.);
  • НомерСтроки – это имитация того поведения, которое существовало раньше; в качестве ключа будет использоваться номер строки в выборке со всеми вытекающими из этого недостатками;
  • Авто – в этом случае платформа сама автоматически определит вид ключа как один из трех перечисленных выше: если ключевые поля не заданы, то будет НомерСтроки, если задано одно ключевое поле, то ЗначениеПоля, если более одного ключевого поля, то КлючСтроки.

Таким образом, теперь, если вы выбираете для своего произвольного запроса вид ключа ЗначениеПоля или КлючСтроки, вам становятся доступны:

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

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

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

Читайте также:  Какой фирмы выбрать внешний аккумулятор

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

Для вывода используется используется запрос:

Чтобы при открытии не отображалась информацию по другим клиентам, необходимо установить параметр динамического списка, сделаем это так:

Можно и просто настроить отбор через настройки, используя ЭлементОтбораКомпоновкиДанных

Похожие FAQ

Еще в этой же категории

Как на управляемой форме разместить список регистра сведений с отбором? 15
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Поле выбора

Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Как обновить динамический список или реквизит на форме клиента? 8
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Поле выбора

Как ограничить список выбора? 7
Ограничим список элементов, установив отбор в открываемой форме //Пример 1 Процедура СтатьяПДРНачалоВыбора(Элемент, СтандартнаяОбработка) ФормаВыбора = Справочники.ПрочиеДоходыИРасходы.ПолучитьФормуВыбора(, Элемент); ЭлементОтбораВидПДР = Форма Форма

Программное создание таблицы значений с условным оформлением 7
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Посмотреть все в категории Работа с Формой (Диалог) и её элементами

Ссылка на основную публикацию
Adblock detector