Андрей Смирнов
Время чтения: ~9 мин.
Просмотров: 94

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

Динамический список

1. Общая информация

гл7_3_1.png?fit=750%2C458&ssl=1
Рис. 1. Варианты создания динамического списка

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

При этом если тип значения параметра отличается от типа реквизита объекта (например, Реквизит1 имеет тип Число, а значение параметра – тип Строка), то для корректного отображения поля следует выполнить явное приведение значения параметра к нужному типу:

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

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

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

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

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

  •  таблица оборотов;
  •  таблица остатков;
  •  таблица оборотов и остатков.

● таблицы регистра расчета:

  •  таблица фактического периода действия;
  •  данных графика;
  •  базовых данных.

Если присвоить параметру Параметр значение другого типа, в динамический список для этого поля будет получать значение 0 (значение по умолчанию для типа Число).Если в подобной ситуации требуется выбирать параметр другого типа – рекомендуется использовать конструкцию языка запросов ВЫРАЗИТЬ. Например,если в приведенном выше примере требуется передавать в параметр строку не длиннее 100 символов, то следует заменить простое указание параметра, на выражение с явным приведением типа:

Если в произвольном тексте запроса динамического списка в выражениях полей выборки используются параметры – следует явно указать тип параметров при помощи конструкции ВЫРАЗИТЬ. Например, вместо &Номенклатура КАК Номеклатура использоватьВЫРАЗИТЬ(&Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура. В противном случае поиск через строку поиска может работатьнекорректно или выдавать ошибки.

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

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

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

гл7_3_2.png?fit=782%2C477&ssl=1
Рис. 2. Условное оформление динамического списка

СОВЕТ. Следует помнить о том, что неудачный выбор полей сортировки (равно как отбора и группировки данных) негативно влияет на эффективность динамической выборки.С точки зрения прикладного разработчика, настройки динамического списка состоят из нескольких частей, которые связаны между собой. Основным свойством, через которое можно управлять настройками динамического списка является КомпоновщикНастроек. Это объект содержит три набора настроек, которые при работе системы определяют окончательные настройки, применяемые к динамическому списку:● Настройки – настройки, созданные в режиме Конфигуратора. Свойство динамического списка Порядок предоставляет быстрый доступ к свойству Настройки.Порядок компоновщика настроек динамического списка, таким образом, следующие конструкции являются эквивалентными:Список.Порядок и Список.КомпоновщикНастроек.Настройки.Порядок;● ПользовательскиеНастройки – это настройки, которые изменяет пользователь в режиме «1С:Предприятие»;● ФиксированныеНастройки – эти настройки задаются из встроенного языка. Также в этой свойство попадают значения отбора, которые передаются в форму с помощью ее параметров. Свойства динамического списка Отбор, Параметры, УсловноеОформление предоставляют быстрый доступ к фиксированным настройкам компоновщика настроек динамического списка. Другими словами, данные обращения являются эквивалентными:Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор и Список.Отбор.При формировании окончательной настройки динамического списка, различные варианты настроек комбинируются следующим образом:● Если какой-либо вид настроек целиком отмечен как пользовательский, то в результирующие настройки попадают пользовательские настройки(Список.КомпоновщикНастроек.ПользовательскиеНастройки). При этом если какие-либо элементы настроек отмечены как недоступные, то эти настройки будет помещены в результирующие настройки из свойства Список.КомпоновщикНастроек. Настройки.● Если какой-либо вид настроек отмечен как пользовательский не целиком, а поэлементно, то:● Элементы, отмеченные как пользовательские, попадут в результирующие настройки из свойства Список.КомпоновщикНастроек.ПользовательскиеНастройки.● Элементы, отмеченные как недоступные, попадут в результирующие настройки из свойства Список.КомпоновщикНастроек.Настройки.● Фиксированные настройки (Список.КомпоновщикНастроек.ФиксированныеНастройки) добавляются в результирующие настройки «как есть». При этом недопустима ситуация, когда в фиксированных и пользовательских настройках есть одноименные настройки, например отбор с одинаковым левым значением в условии.

гл7_3_3.png?fit=786%2C474&ssl=1
Рис. 3. Управление включением в пользовательские настройки

5. Поиск в динамическом списке

гл7_3_4.png?fit=796%2C340&ssl=1
Рис. 4. Строка поиска в динамическом списке
гл7_3_5.png?fit=817%2C395&ssl=1
Рис. 5. Состояние поиска в динамическом списке
гл7_3_6.png?fit=781%2C347&ssl=1
Рис. 6. Управление поиском в динамическом списке
гл7_3_7.png?fit=661%2C278&ssl=1
Рис. 7. Диалог поиска

● Открытие диалог поиска путем непосредственного начала набора поисковой строки в динамическом списке приводит к тому, что значение переключателя Как искать устанавливается в значение По части строки, а набираемый текст попадает в поле Что искать.

6. Получение данных, отображаемых динамическим списком

Наконец-то осуществилась мечта любого «семерошника». Как часто пользователи программы 7.7 просили сделать нормальный подбор номенклатуры. Чтобы и остатки можно было видеть, и цены, и установить фильтры. Приходилось придумывать разные хитрости, вплоть до написания внешних компонентов. В 1С 8.2  появились динамические списки. Предлагаю рассмотреть, что это такое и что они нам могут дать в 1С 8.3.

Создание формы выбора

За основу возьмем некую тестовую конфигурацию 1С:»Бухгалтерия предприятия 3.0″. Не будем сейчас делать подбор, просто в справочнике «Номенклатура» добавим еще одну форму выбора и сделаем ее временно основной:

sozdanie-novogo-dinamicheskrnr-spiska-1s-8.3.png

При создании система по умолчанию добавит на форму табличное поле с типом «Динамический список».

Зайдем в его свойства и посмотрим, что там.

В первую очередь нас интересует флажок «Произвольный запрос». Он-то и откроет нам все преимущества динамического списка. У нас появится возможность написать собственный запрос, причем с параметрами. Устанавливаем флажок и нажимаем ссылку «Открыть»:

nastroyki-dinamicheskogo-spiska.png

Откроется окно с уже готовым кодом на языке запросов. Пока что там просто перечислены все поля справочника «Номенклатура».

Получите 267 видеоуроков по 1С бесплатно:

  • Бесплатный видео самоучитель по 1С Бухгалтерии 8.3;
  • Самоучитель по новой версии 1С ЗУП 3.1;

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

Собственный запрос в динамическом списке

Сначала создадим нужный нам запрос с остатками и ценами. Примерно так:

zapros-v-dinamicheskom-spiske-1s-8.3.png

Закладка «Настройки»

И вот теперь самое вкусное! Переходим на закладку «Настройки». И сразу видим, что на первой вкладке мы можем делать любые отборы по любому полю в запросе:

nastroyka-dinamicheskogo-spiska-1s-8.3.png

Программная установка параметров запроса в динамическом списке 1С 8.3

Не забываем, что в запросе у нас присутствуют два параметра: «Период» и «Тип цен». Мы должны передать их в запрос, иначе будет ошибка.

Пропишем эти параметры в параметрах формы, а в модуле формы добавим следующие строки:

&НаСервереПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)  Список.Параметры.УстановитьЗначениеПараметра("Период", Параметры.Дата);  Список.Параметры.УстановитьЗначениеПараметра("ТипЦен", Параметры.ТипЦен);КонецПроцедуры

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

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

Также на форму можно добавить флажок «Запрашивать количество».

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Оцените статью, пожалуйста!

Интересное, Программирование

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

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

Решение: Для реализации этого решения достаточно иметь версию платформы 1с начиная с ‘8.3.6.1977’ и знать два новых метода динамического списка:

  • ПолучитьИсполняемуюСхемуКомпоновкиДанных() – получаем схему компоновки данных;
  • ПолучитьИсполняемыеНастройкиКомпоновкиДанных() – получаем все настройки динамического списка;

Допустим в справочнике “Футбольные клубы” у нас в форме списка есть реквизит “Список” – тип “Динамический список”:

izobrazhenie-5-1024x378.png
Динамический список на форме.

Добавляем на форме команду “ПолучитьДанныеСписка” и прописываем следующий код:

Далее проверяем в режиме 1с предприятия: устанавливаем любой отбор и добавляем поиск по наименованию:

izobrazhenie-6-1024x218.png
Настройки динамического списка.

Нажимаем на команду “ПолучитьДанныеСписка” и смотрим результат:

izobrazhenie-7-1024x377.png
Данные динамического списка.

Вот таким простым способом мы можем считать данные с любого динамического списка под любыми настройками!

Так же можно ознакомиться более подробно с этой информацией по следующей ссылке.

Используемые источники:

  • https://master1c8.ru/platforma-1s-predpriyatie-8/rukovodstvo-razrabottchika/glava-7-form/dinamitcheskiy-spisok/
  • https://programmist1s.ru/rabota-s-dinamicheskim-spiskom-v-1s-8-3-8-2/
  • https://craft1c.ru/poluchenie-dannykh-dinamicheskogo-spiska/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации