Новости экономики и финансов. Курсы валют, ситуация на биржах, акции, котировки, аналитика: 💫 💫 💫 💫 💫 читайте на сайте

Оптимизация Запроса Для Динамического Списка 1C • Постановка задачи

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

1С:Эксперт по технологическим вопросам
Мнение эксперта
1С:Эксперт по технологическим вопросам
Задавайте мне вопросы, и я помогу разобраться!
Платформа 1С Предприятие по умолчанию обновляет содержимое динамических списков при выполнении пользователем стандартных команд по изменению элементов этого списка Записать , Провести , Пометить на удаление и т. 1с 8.3 необязательные параметры запроса динамического списка Обращайтесь в форму связи

Оптимизация запросов в 1С

Получение значения поля составного типа называется разыменованием ссылочного поля.

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

ВЫБРАТЬ
ТоварыНаСкладах . Склад . Наименование
ИЗ
РегистрНакопления . ТоварыНаСкладах КАК ТоварыНаСкладах

ВЫБРАТЬ
Склады . Наименование
ИЗ
РегистрНакопления . ТоварыНаСкладах КАК ТоварыНаСкладах
ЛЕВОЕ СОЕДИНЕНИЕ Справочник . Склады КАК Склады
ПО ТоварыНаСкладах . Склад = Склады . Ссылка

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

Например, если нам нужно получить дату документа регистратора:

ВЫБРАТЬ
ТоварыНаСкладах . Регистратор . Дата
ИЗ
РегистрНакопления . ТоварыНаСкладах КАК ТоварыНаСкладах

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

В случае, если заранее известен тип регистратора, то обязательно нужно ограничиться только им при помощи конструкции ВЫРАЗИТЬ ( КАК ) :

ВЫБРАТЬ
ВЫРАЗИТЬ ( ТоварыНаСкладах . Регистратор КАК Документ . ПоступлениеТоваровУслуг ). Дата КАК ДатаДокумента
ИЗ
РегистрНакопления . ТоварыНаСкладах КАК ТоварыНаСкладах

Когда необходимо сделать отбор в виртуальной таблице хочется написать следующий запрос:

ВЫБРАТЬ
ТоварыНаСкладахОстатки . КоличествоОстаток
ИЗ
РегистрНакопления . ТоварыНаСкладах . Остатки (, ) КАК ТоварыНаСкладахОстатки
ГДЕ
ТоварыНаСкладахОстатки . Склад = &Склад

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

ВЫБРАТЬ
ТоварыНаСкладахОстатки . КоличествоОстаток
ИЗ
РегистрНакопления . ТоварыНаСкладах . Остатки (, Склад = &Склад ) КАК ТоварыНаСкладахОстатки

3. Текстовое представление объекта ссылочного типа

ВЫБРАТЬ
ТоварыНаСкладах . Склад
ИЗ
РегистрНакопления . ТоварыНаСкладах КАК ТоварыНаСкладах

ВЫБРАТЬ
ТоварыНаСкладах . Склад . Наименование
ИЗ
РегистрНакопления . ТоварыНаСкладах КАК ТоварыНаСкладах

В случае, когда необходимо вывести лишь текстовое представление объекта нужно использовать функцию ПРЕДСТАВЛЕНИЕ () :

ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ ( ТоварыНаСкладах . Склад )
ИЗ
РегистрНакопления . ТоварыНаСкладах КАК ТоварыНаСкладах

Запрос в этом случае будет оптимальным, т.к. не будет создаваться дополнительная таблица.

1с 8.3 удалить отбор в динамическом списке. Настройки динамического списка

Однако следующие таблицы могут быть установлены в качестве основной таблицы динамического списка несмотря на отсутствие ключа.

1С:Эксперт по технологическим вопросам
Мнение эксперта
1С:Эксперт по технологическим вопросам
Задавайте мне вопросы, и я помогу разобраться!
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс не забудьте подписаться на YouTube регулярно выходят новые видео. Оптимизация запросов в 1С | Nicholas Mikuslas Обращайтесь в форму связи

Ограничения и особенности

  • По реквизитам табличных частей.
  • Поля представлений.
  • Поле ВерсияДанных.
  • Поле ИмяПредопределенныхДанных.
  • Поле Вид таблицы плана счетов.
  • Поле ВидДвижения таблицы регистра накопления.
  • Поле ТипЗначения таблицы плана видов характеристик.
  • Поле типа Тип;
  • Поле типа Строка (неограниченной длины).
  • Поле типа ДвоичныеДанные.

● Не поддерживается сортировка и группировка по полям Субконто и ВидСубконто таблицы ДвиженияССубконто регистра бухгалтерии.
● Не поддерживается группировка по полям, которые представляют собой выражения языка запросов, содержащие агрегатные функции.
● При выбранной основной таблице, запрос динамического списка имеет следующие ограничения:

  • Не поддерживаются объединения.
  • Не поддерживается использование секции УПОРЯДОЧИТЬ ПО. Следует использовать запрос без основной таблицы или задавать необходимое упорядочивание через настройки динамического списка.

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

Промокоды на Займер на скидки

Займы для физических лиц под низкий процент

  • 💲Сумма: от 2 000 до 30 000 рублей
  • 🕑Срок: от 7 до 30 дней
  • 👍Первый заём для новых клиентов — 0%, повторный — скидка 500 руб

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

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

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

ВЫБОР
КОГДА ЛОЖЬ
ТОГДА 5
ИНАЧЕ
ВЫРАЗИТЬ(&Параметр КАК Строка(100))
КОНЕЦ

1с динамический список отбор по периоду - Все о Windows 10
ВЫБРАТЬ
ВЫРАЗИТЬ ( ТоварыНаСкладах . Регистратор КАК Документ . ПоступлениеТоваровУслуг ). Дата КАК ДатаДокумента
ИЗ
РегистрНакопления . ТоварыНаСкладах КАК ТоварыНаСкладах

1С событие обновления динамического списка

  • РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ – В группе быстрых настроек над списком.
  • РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный – В настройка списка (в подменю Еще).
  • РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный – Запретить пользователю менять этот отбор.

Способы получения и кеширования данных динамическим списком

● В качестве значения свойства Основная таблица указана одна из следующих таблиц: план обмена, справочник, список документов, журнал документов, план видов характеристик, план счетов, план видов расчета, бизнес-процесс, задача, таблица точек бизнес-процесса:

● В качестве значения свойства Основная таблица указана одна из следующих таблиц: основная таблица регистра сведений, регистра накопления, регистра бухгалтерии, регистра расчета, виртуальная таблица регистра бухгалтерии ДвиженияССубконто:

● Свойство Динамическое считывание:
● Установлено: используется способ 1 (описание способов приведено выше).
● Сброшено: используется способ 2 (описание способов приведено выше).

● В качестве свойства Основная таблица указана таблица критерия отбора или таблица задач по исполнителю (ЗадачиПоИсполнителю):
● Ключ, идентифицирующий строку таблицы: Ссылка.

● В качестве свойства Основная таблица указана виртуальная таблица регистра сведений СрезПервых или СрезПоследних:
● Ключ, идентифицирующий строку таблицы: КлючЗаписи.
● Свойство Динамическое считывание не применимо.
● Используется способ 2 (описание способов приведено выше).

● В качестве свойства Основная таблица указана одна из виртуальных таблицы регистров, кроме перечисленных выше:

● Свойство Основная таблица не указано, используется произвольный запрос:
● Ключ, идентифицирующий строку таблицы: Число.
● Свойство Динамическое считывание не применимо.
● Используется способ 3 (описание способов приведено выше).

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

1С:Эксперт по технологическим вопросам
Мнение эксперта
1С:Эксперт по технологическим вопросам
Задавайте мне вопросы, и я помогу разобраться!
После того, как мы разобрались с механизмом получения текста запроса по переданным параметрам, давайте рассмотрим, как его использовать для формирования динамического списка формы выбора. Просмотр регистров через команду «Все функции» Обращайтесь в форму связи

Решение

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

Рисунок 1. Диаграмма последовательности

Предлагаемая подсистема реализует интерфейс для работы следующих сценариев:

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

Подключение к подсистеме производится через вставку вызова в форме выбора и добавление предопределенной процедуры менеджера объекта ОбработкаПолученияДанныхВыбора.

ПОДСИСТЕМА РАБОТА С ДАННЫМИ ВЫБОРА

  • ввод через форму выбора;
  • ввод из списка выбора;
  • определение однозначного значения выбора (предсказание выбора);
  • проверка соответствия значения ограничениям по связям параметров выбора.

Динамический список формы выбора

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

Для работа подсистемы необходимо настроить динамический список формы выбора: установить произвольный запрос и изменить псевдоним основной таблицы на имя «Источник».

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

Листинг 2. Демонстрация разделения параметров в функции ПолучитьТекстЗапроса

Листинг 3. Подключение формы выбора к подсистеме

Примечание: подключаемая форма выбора должна содержать произвольный текст запроса основной таблицы, при этом псевдоним основной таблицы должен быть предопределенным «Источник». Этот же псевдоним используется в подсистеме для построения текста запроса путем добавления условия и соединений.

💥Принимайте участие в опросе и получайте бесплатную консультацию

Related posts