Работа с динамическим списком в 1С 8.3 (8.2)
Наконец-то осуществилась мечта любого «семерошника». Как часто пользователи программы 7.7 просили сделать нормальный подбор номенклатуры. Чтобы и остатки можно было видеть, и цены, и установить фильтры. Приходилось придумывать разные хитрости, вплоть до написания внешних компонентов. В 1С 8.2 появились динамические списки. Предлагаю рассмотреть, что это такое и что они нам могут дать в 1С 8.3.
Содержание
Создание формы выбора
За основу возьмем некую тестовую конфигурацию 1С:»Бухгалтерия предприятия 3.0″. Не будем сейчас делать подбор, просто в справочнике «Номенклатура» добавим еще одну форму выбора и сделаем ее временно основной:
При создании система по умолчанию добавит на форму табличное поле с типом «Динамический список».
Зайдем в его свойства и посмотрим, что там.
В первую очередь нас интересует флажок «Произвольный запрос». Он-то и откроет нам все преимущества динамического списка. У нас появится возможность написать собственный запрос, причем с параметрами. Устанавливаем флажок и нажимаем ссылку «Открыть»:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Откроется окно с уже готовым кодом на языке запросов. Пока что там просто перечислены все поля справочника «Номенклатура».
Как видим, имеется кнопка вызова «Конструктора запроса» и флажок, который дает возможность динамически изменять содержимое списка. То есть когда другой пользователь меняет что-то в справочнике, в нашем списке это тоже изменится. Кроме того, имеется закладка «Настройки», но ее мы коснемся позже.
Собственный запрос в динамическом списке
Сначала создадим нужный нам запрос с остатками и ценами. Примерно так:
Закладка «Настройки»
И вот теперь самое вкусное! Переходим на закладку «Настройки». И сразу видим, что на первой вкладке мы можем делать любые отборы по любому полю в запросе:
Программная установка параметров запроса в динамическом списке 1С 8.3
Не забываем, что в запросе у нас присутствуют два параметра: «Период» и «Тип цен». Мы должны передать их в запрос, иначе будет ошибка.
Пропишем эти параметры в параметрах формы, а в модуле формы добавим следующие строки:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Список.Параметры.УстановитьЗначениеПараметра("Период", Параметры.Дата); Список.Параметры.УстановитьЗначениеПараметра("ТипЦен", Параметры.ТипЦен); КонецПроцедуры
Значения параметров можно передать из объекта, откуда вызывается форма, либо другие, установленные по умолчанию.
Далее на форму с «Динамическим списком» можно добавить таблицу значений, куда будут при двойном клике передаваться строки с выбранным товаром и затем переноситься в документ.
Также на форму можно добавить флажок «Запрашивать количество».
В этом случае мы получаем уже простенький подбор товаров, однако с достаточно расширенными возможностями.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Дмитрий:
Пишет вот такую ошибку :
Ошибка при выполнении запроса. Ошибка при выполнении запроса.
по причине:
Ошибка в элементе отбора: глобальные элементы отбора обязательно должны использовать поля «DataParameters.Period Равно 24.05.2016 0:00:00»
Михаил:
Все работает в 11.2 (11.2.3.195) УТ. Только пришлось вывести доп.Колонку (Родитель) иначе ругается что нет такой колонки.
Аноним:
Как программно сдвинуть колонку в начало?
Аноним:
Не понятно как создать в самом начале список
Дмитрий:
Добавляешь в форму новый реквизит с наименованием Список и типом Динамический список
SMS:
как получить текст строки поиска динамического списка?
Петя:
Вот только в «1С:Бухгалтерия предприятия 3.0» нет такого регистра накопления «ОстаткиНоменклатуры». И вообще я там регистра накопления для номенклатуры не нашёл, потому что они скорее всего хранятся там в регистре бухгалтерии (на счету бухгалтерского учёта), по которому запрос, как я понимаю, должен выглядеть иначе.
Hot_Serg:
В форме списка Номенклатуры внизу сделан Динамический список с колонками Склад (перечисляет строками все склады, на котором есть остатки), колонка Количество на этих складах, колонка Свободный остаток (Количество — Количество в резерве) и колонка СкладыРезерва (на которых зарезервирован товар). Когда в верхнем списке Номенклатуры встаём на позицию (не группу), то внизу отображает информацию по остаткам. Но если товар зарезервирован на нескольких складах, то отображает один склад в несколько строк с разными складами резерва.
Как сделать так, чтобы Склад был одной строкой, а СкладыРезерва перечислялись в одну строку?
Дмитрий:
А что эффективнее и методически правильнее — делать отбор в запросе в параметрах виртуальных таблиц (если возможно), отбор в запросе через ГДЕ или в настройках Динамического списка?
Casey1984:
Приоритет на параметрах виртуальных таблиц, далее — отбор в соединении таблиц, далее — секция ГДЕ или настройки Динамического списка (равнозначны).