Списки в 1С: справочники, перечисления и выборки данных

· 9 мин

Содержание

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

Справочник и перечисление создают в Конфигураторе, динамический список настраивают в форме списка, коллекции собирают в коде. Разберём каждый по шагам — с путями меню, примерами и отличиями. Всё — для 1С 8.3 с интерфейсом «Такси».

Три вида списков: чем они отличаются

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

ИнструментЧто этоКогда применять
СправочникРедактируемый перечень записей в базеДанных много, пользователь их пополняет и правит
ПеречислениеФиксированный набор значений от разработчикаВарианты не должны меняться (статусы, виды)
Динамический списокВыборка строк на формеПоказать, отфильтровать и отсортировать записи таблицы
СписокЗначений, Массив, ТаблицаЗначенийКоллекции в памятиВременные данные внутри алгоритма

Главный критерий между справочником и перечислением — кто управляет составом списка. Если значения должен добавлять пользователь — только справочник. Если набор закрыт и задаётся программистом — перечисление.

Как создать справочник в Конфигураторе

Справочник — основной способ хранить список объектов учёта. Порядок действий в Конфигураторе:

  1. В дереве конфигурации найдите ветку Справочники, нажмите правой кнопкой → Добавить (или клавишу Ins).
  2. На вкладке Основные задайте Имя (латиницей, без пробелов) и Синоним (как увидит пользователь).
  3. На вкладке Данные настройте стандартные реквизиты. По умолчанию справочник уже содержит Код и Наименование — здесь меняют их длину и тип кода (число или строка).
  4. Добавьте собственные реквизиты: нажмите на подветке Реквизиты → Добавить, укажите имя и тип (строка, число, ссылка на другой справочник).
  5. Если строки должны группироваться в папки, откройте вкладку Иерархия, включите флажок Иерархический справочник и выберите Иерархия групп и элементов.
  6. При необходимости своих колонок внутри элемента добавьте Табличные части.

Отдельно стоит продумать два свойства справочника:

  • Подчинение. Если элементы одного справочника принадлежат элементам другого (например, договоры подчинены контрагентам), на вкладке Владельцы укажите справочник-владелец. Тогда у каждого договора будет свой контрагент, а список договоров можно отбирать по владельцу.
  • Предопределённые элементы. На вкладке Прочее → Предопределённые заводят строки, которые создаются вместе с базой и на которые удобно ссылаться из кода по имени (Справочники.СтатьиЗатрат.ОсновноеПроизводство). Пользователь не сможет их удалить.

Формы списка и элемента можно не рисовать вручную — платформа сгенерирует их автоматически при первом открытии. Создавайте формы отдельно, только когда нужен нестандартный вид.

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

Перед созданием справочника проверьте
Выполнено: 0 / 5

Перечисление: список фиксированных значений

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

Как создать:

  1. Правой кнопкой по ветке Перечисления → Добавить.
  2. Задайте Имя и Синоним.
  3. Откройте вкладку Данные, в таблице Значения перечисления добавьте нужные элементы. Каждому задайте Имя (для обращения из кода) и Синоним (для показа на экране).

Чтобы использовать перечисление, добавьте реквизиту документа или справочника тип ПеречислениеСсылка.ИмяПеречисления. В коде на значение ссылаются напрямую:

Если Документ.ВидОперации = Перечисления.ВидыОпераций.Приход Тогда
    // обработка прихода
КонецЕсли;

Чем перечисление отличается от справочника:

  • 🔒 состав задаётся в Конфигураторе и в режиме «1С:Предприятие» не меняется;
  • ⚡ значения хранятся компактно, обращение к ним быстрее, чем к элементам справочника;
  • 🚫 у перечисления нет кода и наименования — только имя и синоним.

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

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

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

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

Чтобы добавить свой динамический список на управляемую форму:

  1. Откройте форму, перейдите на вкладку Реквизиты, нажмите Добавить и выберите тип ДинамическийСписок.
  2. В свойствах укажите Основная таблица — например, Справочник.Номенклатура или Документ.РеализацияТоваровУслуг.
  3. Перетащите реквизит в дерево элементов формы — появится таблица с колонками.

Если нужны данные из нескольких таблиц или расчётные колонки, включите свойство Произвольный запрос и напишите текст запроса в конструкторе настройки списка:

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

Даже при произвольном запросе заполните поле Основная таблица — тогда сохранятся редактирование строк из списка, динамическое считывание и стандартные команды. Без него список станет «только для чтения».

Чтобы выборка зависела от данных формы, в произвольный запрос добавляют параметры (&ДатаНачала, &Организация) и заполняют их в коде через Список.Параметры.УстановитьЗначениеПараметра. Так один и тот же список показывает документы то за месяц, то за квартал — без переписывания запроса.

Колонки таблицы настраивают в дереве элементов формы: порядок, видимость, ширину и заголовок. Лишние поля из запроса можно не выводить на экран — они останутся доступны для отбора и сортировки.

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

Настройка списка в режиме «1С:Предприятие»

Пользователю не нужен Конфигуратор — список настраивается прямо на форме. В «Такси» эти команды собраны в меню Еще.

  • Сортировка. Щёлкните по заголовку колонки — список отсортируется по ней. Повторный клик меняет направление. Сложную сортировку задают через Еще → Настроить список → вкладка Сортировка.
  • Отбор. Еще → Настроить список → Отбор. Добавьте поле, условие и значение — останутся только подходящие строки.
  • Быстрый отбор. Правой кнопкой по ячейке → команда отбора по значению в ней.
  • Поиск. Ctrl+F или кнопка поиска — найдёт строки по части текста.
  • Группировка. На вкладке Группировка соберите строки по значению поля (например, заказы по контрагенту).
  • Условное оформление. Вкладка Условное оформление — подсветить строки цветом по условию (например, просроченные — красным).

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

Если одни и те же наборы отборов нужны регулярно, их сохраняют как отдельные варианты через Еще → Сохранить настройки. Потом переключаются между ними командой Выбрать настройки — не настраивая отбор заново каждый раз. Это заметно ускоряет работу, когда список приходится смотреть то по одной организации, то по другой, то за разный период.

Списки в коде: СписокЗначений, Массив и ТаблицаЗначений

Когда данные нужны временно, в памяти, их собирают в коллекции встроенного языка. Разберём три основные.

Массив — простой перечень значений без названий колонок:

Товары = Новый Массив;
Товары.Добавить("Карандаш");
Товары.Добавить("Тетрадь");

Для Каждого Товар Из Товары Цикл
    Сообщить(Товар);
КонецЦикла;

СписокЗначений — список, где у каждого элемента есть значение и представление (текст для показа), а также пометка и картинка. Удобен для выбора вариантов пользователем:

Дни = Новый СписокЗначений;
Дни.Добавить(1, "Понедельник");
Дни.Добавить(2, "Вторник");

НайденныйЭлемент = Дни.НайтиПоЗначению(2);
Если НайденныйЭлемент <> Неопределено Тогда
    Сообщить(НайденныйЭлемент.Представление);
КонецЕсли;

У СписокЗначений есть методы Количество(), СортироватьПоЗначению(), СортироватьПоПредставлению() и ВыгрузитьЗначения(). В управляемой форме выбор из такого списка показывают методом ПоказатьВыборИзСписка.

ТаблицаЗначений — таблица с именованными колонками и строками:

Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Количество");

Строка = Таблица.Добавить();
Строка.Товар = "Карандаш";
Строка.Количество = 10;

Для поиска по таблице используют Найти(Значение, "Колонка") и НайтиСтроки(Отбор).

Соответствие хранит пары «ключ — значение» и удобно, когда нужно быстро находить данные по идентификатору:

Цены = Новый Соответствие;
Цены.Вставить("Карандаш", 15);
Цены.Вставить("Тетрадь", 40);

ЦенаКарандаша = Цены.Получить("Карандаш"); // 15

Коллекции легко перегонять одну в другую. Отдельную колонку таблицы выгружают в массив через Таблица.ВыгрузитьКолонку("Товар"), а список значений наполняют сразу из массива методом ЗагрузитьЗначения(Массив). Это избавляет от ручных циклов при подготовке данных для отбора или выбора.

Как ускорить работу с большими списками

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

  • 🔎 Индексирование реквизитов. Если по реквизиту часто отбирают или сортируют, в его свойствах задайте Индексировать. Платформа построит индекс, и выборка по этому полю пойдёт на порядок быстрее. Индекс на каждый реквизит не вешают — он замедляет запись, поэтому индексируют только то, по чему реально ищут.
  • 🗂️ Иерархия вместо плоского списка. В большом справочнике папки (Иерархия групп и элементов) позволяют грузить элементы по текущей группе, а не весь перечень сразу.
  • 📉 Меньше данных на экране. Убирайте из динамического списка колонки, которые не нужны пользователю, и ограничивайте выборку отбором по умолчанию — читать придётся меньше.

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

Типичные ошибки при создании списков

Эти ошибки чаще всего ломают только что созданный список.

Диагностика: выберите симптом

Ещё одна частая промашка — путать перечисление с реквизитом типа «булево». Если вариантов ровно два и других не будет (да/нет, вкл/выкл), хватит типа Булево; перечисление заводят от трёх вариантов и больше.

Частые вопросы

Можно ли превратить перечисление в справочник, не теряя данные?
Напрямую — нет. Нужно создать справочник, перенести значения и обработкой заменить ссылки в документах со старого типа на новый. В работающей базе это делают через переходный период, когда реквизит принимает оба типа.
Чем динамический список отличается от табличной части?
Динамический список читает данные из базы и показывает их на форме, сам их не хранит. Табличная часть — это собственные строки внутри документа или справочника, они хранятся вместе с объектом.
Как сделать список значений для поля ввода, чтобы пользователь выбирал из вариантов?
Для фиксированного набора подойдёт перечисление. Если набор формируется на лету, заполните СписокЗначений в коде и свяжите его с полем выбора через свойство списка выбора.
Почему в динамическом списке не видно только что добавленной записи?
Список кэширует данные между чтениями. Обновите его командой обновления на форме списка (F5) — платформа перечитает строки из базы.
Что быстрее работает — справочник или перечисление?
Перечисление, потому что его значения хранятся как часть метаданных и не требуют обращения к таблице справочника. Но выигрыш заметен только в больших выборках, а гибкости у перечисления меньше.