Разработка и Конфигурация · 12 мин
Что такое список в 1С и как с ним работать
Разбираем, что такое список в 1С: список значений, динамический список, списки справочников и документов. Как настроить, отобрать и обойти элементы списка.
Слово «список» в 1С употребляется в нескольких разных смыслах, и это частый источник путаницы у начинающих. Пользователь называет списком форму со строками элементов справочника или документов, а разработчик — объект встроенного языка СписокЗначений, динамический список на форме или колонку таблицы значений. Понимание различий между этими сущностями напрямую влияет на то, как вы будете искать, отбирать и обрабатывать данные.
В этой статье разберём все основные значения термина: какие виды списков существуют в платформе 1С, где каждый из них применяется, как программно создать список значений, обойти его элементы и передать в отбор, а также как настроить динамический список на форме. Материал ориентирован и на пользователей, желающих понять логику интерфейса, и на начинающих разработчиков.
Отдельное внимание уделим практическим вопросам: чем список значений отличается от массива, когда список становится узким местом производительности и каких ошибок стоит избегать при работе с большими выборками данных.
Что означает термин «список» в контексте 1С
В платформе 1С:Предприятие термин «список» объединяет как минимум четыре разные сущности. Первая — формы списков: это окна, которые пользователь видит, открывая справочник «Номенклатура» или журнал документов «Реализация товаров». Вторая — СписокЗначений, объект встроенного языка для хранения упорядоченного набора значений с представлениями и картинками. Третья — динамический список, реквизит формы, который строится на запросе и автоматически обновляется при изменении данных. Четвёртая — списки в прикладном смысле: списки выбора, списки отбора, списки пользователей.
Когда пользователь говорит «откройте список», он почти всегда имеет в виду форму списка. Когда разработчик пишет «передам список в отбор», речь идёт о СписокЗначений или массиве. Прежде чем искать решение, определите, о какой именно сущности идёт речь — от этого зависит и инструментарий, и подход.
Формы списков: что видит пользователь
Форма списка — это стандартное представление данных справочника, документа, плана счетов или регистра сведений в виде таблицы. Платформа генерирует такую форму автоматически, даже если разработчик не создавал её явно. Вверху обычно расположены команды: «Создать», «Скопировать», «Установить пометку удаления», а также поле поиска и кнопки настройки отбора.
Для пользователя ключевые возможности формы списка — отбор, сортировка и поиск. Отбор настраивается через кнопку «Настроить список» (в управляемых формах): можно задать условие по любому доступному полю, например показать только контрагентов из определённой группы. Сортировка выполняется кликом по заголовку колонки. Поиск работает двумя способами: по текущей колонке и полнотекстовый, если он включён в базе.
Практический приём: если список открывается медленно, проверьте, не установлен ли режим просмотра «Дерево» для большого иерархического справочника и не применён ли сложный отбор по невычисляемому полю. Переключение в режим «Список» и отказ от лишних условий часто заметно ускоряют работу.
СписокЗначений: объект встроенного языка
СписокЗначений — универсальная коллекция, которую разработчик создаёт программно. Каждый элемент хранит четыре свойства: Значение, Представление, Пометка (булево) и Картинка. Благодаря пометкам список удобен для диалогов множественного выбора: пользователь отмечает нужные строки флажками, а код затем обрабатывает только отмеченные.
Типовые сценарии применения: заполнение списка выбора у поля ввода, передача набора значений в параметр запроса с оператором «В», вызов диалога выбора из списка, передача данных между формами через параметры. СписокЗначений сериализуется платформой, поэтому его можно сохранять в хранилище значений и передавать между клиентом и сервером.
Как создать и заполнить список программно
Список = Новый СписокЗначений;
Список.Добавить("Москва", "г. Москва");
Список.Добавить("СПб", "г. Санкт-Петербург", Истина);
// Обход элементов
Для Каждого Элемент Из Список Цикл
Сообщить(Элемент.Значение);
КонецЦикла;
// Поиск по значению
Найденный = Список.НайтиПоЗначению("Москва");Метод Добавить принимает значение, представление, пометку и картинку — последние три параметра необязательны. Для обхода используйте цикл «Для Каждого». Метод НайтиПоЗначению возвращает элемент или Неопределено, если значение не найдено, — всегда проверяйте результат перед обращением к свойствам найденного элемента.
Как передать список в запрос
СписокЗначений можно передать в запрос как параметр и использовать с оператором «В». Платформа автоматически разворачивает список в набор значений. Это стандартный способ реализовать множественный отбор, например выбрать документы по нескольким складам.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг ГДЕ Склад В (&Склады)";
Запрос.УстановитьПараметр("Склады", СписокСкладов);
Результат = Запрос.Выполнить().Выгрузить();Динамический список: выборка данных на форме
Динамический список — это реквизит формы, который отображает данные на основе запроса. В отличие от таблицы значений, он не хранит все данные в памяти, а подгружает их порциями по мере прокрутки. Именно динамический список лежит в основе всех стандартных форм списков справочников и документов.
Разработчик может заменить запрос динамического списка на произвольный: снять флаг «Произвольный запрос» и написать свой текст запроса с соединениями и условиями. Например, показать номенклатуру вместе с остатками из регистра накопления. При этом важно указать основную таблицу, чтобы платформа корректно поддерживала интерактивные действия — создание, копирование, пометку удаления.
Настройка отбора динамического списка выполняется через свойство Отбор в дереве настроек формы или программно через коллекцию Элементы отбора. Программный отбор удобен, когда условие зависит от контекста: например, при открытии формы из документа показать только связанные записи.
СписокЗначений, массив или таблица значений: что выбрать
Частый вопрос начинающих разработчиков — какую коллекцию использовать. Выбор зависит от структуры данных и сценария обработки.
Сравнение коллекций
Подходит для передачи вариантов выбора пользователю, отборов с оператором «В», диалогов с пометками. Ограничение: хранит одно значение на элемент, без дополнительных полей.
Оптимален для простого набора однотипных значений, которые обрабатываются только программно. Легче списка, но не имеет представлений и пометок, не отображается интерактивно.
Нужна, когда у каждой строки несколько полей: например, товар, количество и цена. Поддерживает сортировку, поиск, свёртку, но тяжелее и не передаётся напрямую между клиентом и сервером вне контекста формы.
Правило простое: если данные показываются пользователю для выбора — берите СписокЗначений; если обрабатываются только в коде — массив; если у записи несколько атрибутов — таблицу значений. Преобразование между коллекциями выполняется простым обходом, но для запросов СписокЗначений и массив взаимозаменяемы в параметре.
Типичные сценарии работы со списками
Как отобрать элементы в форме списка
- 1Откройте нужный список (справочник или журнал документов).
- 2Нажмите «Ещё» → «Настроить список» или соответствующую кнопку на панели.
- 3Добавьте условие: выберите поле, вид сравнения («Равно», «Содержит», «В списке») и значение.
- 4Нажмите «ОК» и проверьте, что в списке остались только нужные строки.
- 5Чтобы сбросить отбор, снова откройте настройку и удалите условие.
Как выгрузить список в табличный документ
Из большинства форм списков данные можно вывести в табличный документ через команду «Вывести список» в меню «Ещё». Платформа сформирует таблицу с текущими колонками и применённым отбором, которую можно сохранить в Excel или распечатать. Это штатный способ быстро получить выгрузку без обработок и отчётов.
Как показать пользователю диалог выбора из списка
Для интерактивного выбора используется метод ВыбратьЭлемент (модально, в толстом клиенте) или ПоказатьВыборИзСписка с описанием оповещения (в управляемом приложении). Список при этом должен быть заполнен заранее. Помните: в управляемых формах модальные вызовы запрещены, поэтому используйте асинхронный вариант с обработчиком.
Частые ошибки при работе со списками
Отдельно отметим ошибку архитектурного плана: попытку использовать форму списка как инструмент аналитики. Если пользователю нужны итоги, группировки и сравнения — ему нужен отчёт, а не список с десятью отборами. Попытка «натянуть» аналитические задачи на форму списка заканчивается медленной работой и жалобами пользователей.
Как проверить результат
В списке отображаются только строки, удовлетворяющие условию; счётчик записей соответствует ожиданию
Список пустой или, наоборот, отбор не применился — проверьте вид сравнения и тип значения
Запрос возвращает записи по всем значениям списка
Пустой результат — проверьте, что список заполнен и типы значений совпадают с типом поля
Список открывается, команды «Создать» и «Изменить» работают
Команды недоступны — не указана основная таблица или запрос содержит группировку
FAQ: частые вопросы о списках в 1С
Чем список значений отличается от массива в 1С?
Массив — простая индексированная коллекция значений без дополнительных атрибутов. СписокЗначений хранит у каждого элемента представление, пометку и картинку, умеет сортироваться по представлению и использоваться в интерактивных диалогах выбора. Для чисто программной обработки достаточно массива; для взаимодействия с пользователем удобнее список.
Как открыть список всех документов определённого вида?
В интерфейсе «Такси» откройте раздел меню, где размещён журнал документов, или воспользуйтесь командой «Все функции» → «Документы» → нужный вид. Если кнопка «Все функции» скрыта, включите её в параметрах интерфейса — доступ к ней зависит от прав пользователя.
Можно ли сохранить настройку отбора списка?
Да. В управляемых формах платформа автоматически запоминает последние настройки списка для пользователя. Кроме того, в типовых конфигурациях часто есть возможность сохранить вариант списка под своим именем и быстро переключаться между вариантами через выпадающий список настроек.
Почему динамический список тормозит после изменения запроса?
Частые причины: соединение с виртуальными таблицами без отборов, вывод полей через точку от ссылочного поля (платформа дочитывает данные для каждой строки), отсутствие индексов по полям отбора. Проверьте запрос в консоли, уберите лишние соединения и поля, убедитесь, что условия накладываются на индексированные поля.
Как программно установить отбор при открытии формы списка?
Передайте структуру отбора в параметрах формы: в параметре «Отбор» укажите поле и значение, например при вызове ОткрытьФорму("Справочник.Номенклатура.ФормаСписка", Новый Структура("Отбор", Новый Структура("Родитель", ГруппаТоваров))). Платформа применит отбор автоматически при создании формы.
Что делать, если список значений не передаётся между клиентом и сервером?
СписокЗначений сериализуется платформой и обычно передаётся без проблем. Ошибки возникают, если в значениях списка лежат несериализуемые объекты (например, COMОбъект) или мутабельные объекты, привязанные к контексту. Очищайте список от таких значений или передавайте данные в виде массива структур с простыми типами.
Что важно запомнить
«Список» в 1С — это форма списка для пользователя, СписокЗначений для разработчика и динамический список для отображения данных на форме. Выбирайте коллекцию по задаче: список значений — для выбора и отборов, массив — для программной обработки, таблицу значений — для многополевых данных. Не загружайте большие объёмы в список значений и проверяйте работу стандартных команд после изменения запроса динамического списка.