К статье
Практический материал

Разработка и Конфигурация · 12 мин

Что такое список в 1С и как с ним работать

Разбираем, что такое список в 1С: список значений, динамический список, списки справочников и документов. Как настроить, отобрать и обойти элементы списка.

Слово «список» в 1С употребляется в нескольких разных смыслах, и это частый источник путаницы у начинающих. Пользователь называет списком форму со строками элементов справочника или документов, а разработчик — объект встроенного языка СписокЗначений, динамический список на форме или колонку таблицы значений. Понимание различий между этими сущностями напрямую влияет на то, как вы будете искать, отбирать и обрабатывать данные.

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

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

Что означает термин «список» в контексте 1С

В платформе 1С:Предприятие термин «список» объединяет как минимум четыре разные сущности. Первая — формы списков: это окна, которые пользователь видит, открывая справочник «Номенклатура» или журнал документов «Реализация товаров». Вторая — СписокЗначений, объект встроенного языка для хранения упорядоченного набора значений с представлениями и картинками. Третья — динамический список, реквизит формы, который строится на запросе и автоматически обновляется при изменении данных. Четвёртая — списки в прикладном смысле: списки выбора, списки отбора, списки пользователей.

Когда пользователь говорит «откройте список», он почти всегда имеет в виду форму списка. Когда разработчик пишет «передам список в отбор», речь идёт о СписокЗначений или массиве. Прежде чем искать решение, определите, о какой именно сущности идёт речь — от этого зависит и инструментарий, и подход.

Формы списков: что видит пользователь

Форма списка — это стандартное представление данных справочника, документа, плана счетов или регистра сведений в виде таблицы. Платформа генерирует такую форму автоматически, даже если разработчик не создавал её явно. Вверху обычно расположены команды: «Создать», «Скопировать», «Установить пометку удаления», а также поле поиска и кнопки настройки отбора.

Для пользователя ключевые возможности формы списка — отбор, сортировка и поиск. Отбор настраивается через кнопку «Настроить список» (в управляемых формах): можно задать условие по любому доступному полю, например показать только контрагентов из определённой группы. Сортировка выполняется кликом по заголовку колонки. Поиск работает двумя способами: по текущей колонке и полнотекстовый, если он включён в базе.

Практический приём: если список открывается медленно, проверьте, не установлен ли режим просмотра «Дерево» для большого иерархического справочника и не применён ли сложный отбор по невычисляемому полю. Переключение в режим «Список» и отказ от лишних условий часто заметно ускоряют работу.

СписокЗначений: объект встроенного языка

СписокЗначений — универсальная коллекция, которую разработчик создаёт программно. Каждый элемент хранит четыре свойства: Значение, Представление, Пометка (булево) и Картинка. Благодаря пометкам список удобен для диалогов множественного выбора: пользователь отмечает нужные строки флажками, а код затем обрабатывает только отмеченные.

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

Как создать и заполнить список программно

bsl
Список = Новый СписокЗначений;
Список.Добавить("Москва", "г. Москва");
Список.Добавить("СПб", "г. Санкт-Петербург", Истина);

// Обход элементов
Для Каждого Элемент Из Список Цикл
    Сообщить(Элемент.Значение);
КонецЦикла;

// Поиск по значению
Найденный = Список.НайтиПоЗначению("Москва");

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

Как передать список в запрос

СписокЗначений можно передать в запрос как параметр и использовать с оператором «В». Платформа автоматически разворачивает список в набор значений. Это стандартный способ реализовать множественный отбор, например выбрать документы по нескольким складам.

bsl
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг ГДЕ Склад В (&Склады)";
Запрос.УстановитьПараметр("Склады", СписокСкладов);
Результат = Запрос.Выполнить().Выгрузить();

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

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

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

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

СписокЗначений, массив или таблица значений: что выбрать

Частый вопрос начинающих разработчиков — какую коллекцию использовать. Выбор зависит от структуры данных и сценария обработки.

Сравнение коллекций

СписокЗначений

Подходит для передачи вариантов выбора пользователю, отборов с оператором «В», диалогов с пометками. Ограничение: хранит одно значение на элемент, без дополнительных полей.

Массив

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

ТаблицаЗначений

Нужна, когда у каждой строки несколько полей: например, товар, количество и цена. Поддерживает сортировку, поиск, свёртку, но тяжелее и не передаётся напрямую между клиентом и сервером вне контекста формы.

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

Типичные сценарии работы со списками

Как отобрать элементы в форме списка

Настройка отбора в форме списка
  1. 1
    Откройте нужный список (справочник или журнал документов).
  2. 2
    Нажмите «Ещё» → «Настроить список» или соответствующую кнопку на панели.
  3. 3
    Добавьте условие: выберите поле, вид сравнения («Равно», «Содержит», «В списке») и значение.
  4. 4
    Нажмите «ОК» и проверьте, что в списке остались только нужные строки.
  5. 5
    Чтобы сбросить отбор, снова откройте настройку и удалите условие.

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

Из большинства форм списков данные можно вывести в табличный документ через команду «Вывести список» в меню «Ещё». Платформа сформирует таблицу с текущими колонками и применённым отбором, которую можно сохранить в Excel или распечатать. Это штатный способ быстро получить выгрузку без обработок и отчётов.

Как показать пользователю диалог выбора из списка

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

Частые ошибки при работе со списками

Типичные ошибки
01
Обращение к элементу без проверки результата НайтиПоЗначению — приводит к ошибке «Поле объекта не обнаружено», если значение не найдено.
02
Загрузка в СписокЗначений всей таблицы справочника ради отбора — вместо этого передайте условие в запрос или отбор динамического списка.
03
Изменение запроса динамического списка без указания основной таблицы — ломает стандартные команды создания и изменения элементов.
04
Использование модального ВыбратьЭлемент в управляемых формах — код не выполняется в тонком и веб-клиенте; нужен ПоказатьВыборИзСписка с оповещением.
05
Отбор динамического списка по полю через точку от ссылки — вызывает обращение к данным каждой строки и замедляет открытие формы.

Отдельно отметим ошибку архитектурного плана: попытку использовать форму списка как инструмент аналитики. Если пользователю нужны итоги, группировки и сравнения — ему нужен отчёт, а не список с десятью отборами. Попытка «натянуть» аналитические задачи на форму списка заканчивается медленной работой и жалобами пользователей.

Контрольные точки

Как проверить результат

Отбор в форме списка
Норма

В списке отображаются только строки, удовлетворяющие условию; счётчик записей соответствует ожиданию

Тревожный признак

Список пустой или, наоборот, отбор не применился — проверьте вид сравнения и тип значения

СписокЗначений в параметре запроса
Норма

Запрос возвращает записи по всем значениям списка

Тревожный признак

Пустой результат — проверьте, что список заполнен и типы значений совпадают с типом поля

Произвольный запрос динамического списка
Норма

Список открывается, команды «Создать» и «Изменить» работают

Тревожный признак

Команды недоступны — не указана основная таблица или запрос содержит группировку

FAQ: частые вопросы о списках в 1С

Чем список значений отличается от массива в 1С?

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

Как открыть список всех документов определённого вида?

В интерфейсе «Такси» откройте раздел меню, где размещён журнал документов, или воспользуйтесь командой «Все функции» → «Документы» → нужный вид. Если кнопка «Все функции» скрыта, включите её в параметрах интерфейса — доступ к ней зависит от прав пользователя.

Можно ли сохранить настройку отбора списка?

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

Почему динамический список тормозит после изменения запроса?

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

Как программно установить отбор при открытии формы списка?

Передайте структуру отбора в параметрах формы: в параметре «Отбор» укажите поле и значение, например при вызове ОткрытьФорму("Справочник.Номенклатура.ФормаСписка", Новый Структура("Отбор", Новый Структура("Родитель", ГруппаТоваров))). Платформа применит отбор автоматически при создании формы.

Что делать, если список значений не передаётся между клиентом и сервером?

СписокЗначений сериализуется платформой и обычно передаётся без проблем. Ошибки возникают, если в значениях списка лежат несериализуемые объекты (например, COMОбъект) или мутабельные объекты, привязанные к контексту. Очищайте список от таких значений или передавайте данные в виде массива структур с простыми типами.

Итог

Что важно запомнить

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