Списки в 1С: справочники, перечисления и выборки данных
Содержание
За словом «список» в 1С скрываются три разные вещи, и инструмент выбирают по задаче. Перечень данных, который ведут пользователи (номенклатура, контрагенты), — это справочник. Короткий неизменяемый набор вариантов (статусы, виды операций) — перечисление. Выборка записей из базы на экране — динамический список на форме. Отдельно стоят коллекции во встроенном языке: СписокЗначений, Массив, ТаблицаЗначений.
Справочник и перечисление создают в Конфигураторе, динамический список настраивают в форме списка, коллекции собирают в коде. Разберём каждый по шагам — с путями меню, примерами и отличиями. Всё — для 1С 8.3 с интерфейсом «Такси».
Три вида списков: чем они отличаются
Прежде чем создавать объект, определите, что именно нужно хранить и кто будет это менять.
| Инструмент | Что это | Когда применять |
|---|---|---|
| Справочник | Редактируемый перечень записей в базе | Данных много, пользователь их пополняет и правит |
| Перечисление | Фиксированный набор значений от разработчика | Варианты не должны меняться (статусы, виды) |
| Динамический список | Выборка строк на форме | Показать, отфильтровать и отсортировать записи таблицы |
СписокЗначений, Массив, ТаблицаЗначений | Коллекции в памяти | Временные данные внутри алгоритма |
Главный критерий между справочником и перечислением — кто управляет составом списка. Если значения должен добавлять пользователь — только справочник. Если набор закрыт и задаётся программистом — перечисление.
Как создать справочник в Конфигураторе
Справочник — основной способ хранить список объектов учёта. Порядок действий в Конфигураторе:
- В дереве конфигурации найдите ветку
Справочники, нажмите правой кнопкой →Добавить(или клавишуIns). - На вкладке
ОсновныезадайтеИмя(латиницей, без пробелов) иСиноним(как увидит пользователь). - На вкладке
Данныенастройте стандартные реквизиты. По умолчанию справочник уже содержитКодиНаименование— здесь меняют их длину и тип кода (число или строка). - Добавьте собственные реквизиты: нажмите на подветке
Реквизиты→Добавить, укажите имя и тип (строка, число, ссылка на другой справочник). - Если строки должны группироваться в папки, откройте вкладку
Иерархия, включите флажокИерархический справочники выберитеИерархия групп и элементов. - При необходимости своих колонок внутри элемента добавьте
Табличные части.
Отдельно стоит продумать два свойства справочника:
- Подчинение. Если элементы одного справочника принадлежат элементам другого (например, договоры подчинены контрагентам), на вкладке
Владельцыукажите справочник-владелец. Тогда у каждого договора будет свой контрагент, а список договоров можно отбирать по владельцу. - Предопределённые элементы. На вкладке
Прочее→Предопределённыезаводят строки, которые создаются вместе с базой и на которые удобно ссылаться из кода по имени (Справочники.СтатьиЗатрат.ОсновноеПроизводство). Пользователь не сможет их удалить.
Формы списка и элемента можно не рисовать вручную — платформа сгенерирует их автоматически при первом открытии. Создавайте формы отдельно, только когда нужен нестандартный вид.
После сохранения конфигурации выполните Обновить конфигурацию базы данных (F7). Пока обновление не выполнено, нового справочника в режиме «1С:Предприятие» не будет. Если в базе работают пользователи, обновление структуры потребует монопольного доступа — делайте его вне рабочего времени.
Перечисление: список фиксированных значений
Перечисление хранит закрытый набор вариантов, который пользователь не может расширить. Типичные примеры — пол сотрудника, вид контрагента, способ доставки.
Как создать:
- Правой кнопкой по ветке
Перечисления→Добавить. - Задайте
ИмяиСиноним. - Откройте вкладку
Данные, в таблицеЗначения перечислениядобавьте нужные элементы. Каждому задайтеИмя(для обращения из кода) иСиноним(для показа на экране).
Чтобы использовать перечисление, добавьте реквизиту документа или справочника тип ПеречислениеСсылка.ИмяПеречисления. В коде на значение ссылаются напрямую:
Если Документ.ВидОперации = Перечисления.ВидыОпераций.Приход Тогда
// обработка прихода
КонецЕсли;
Чем перечисление отличается от справочника:
- 🔒 состав задаётся в Конфигураторе и в режиме «1С:Предприятие» не меняется;
- ⚡ значения хранятся компактно, обращение к ним быстрее, чем к элементам справочника;
- 🚫 у перечисления нет кода и наименования — только имя и синоним.
Если в будущем список вариантов должен пополняться пользователем, перечисление не подойдёт — выбирайте справочник сразу. Переделка типа реквизита в работающей базе — трудоёмкая операция.
Динамический список: выборка данных на форме
Динамический список — это элемент формы, который читает строки прямо из базы порциями, по мере прокрутки. На нём построены все стандартные формы списков справочников и документов.
Чтобы добавить свой динамический список на управляемую форму:
- Откройте форму, перейдите на вкладку
Реквизиты, нажмитеДобавитьи выберите типДинамическийСписок. - В свойствах укажите
Основная таблица— например,Справочник.НоменклатураилиДокумент.РеализацияТоваровУслуг. - Перетащите реквизит в дерево элементов формы — появится таблица с колонками.
Если нужны данные из нескольких таблиц или расчётные колонки, включите свойство Произвольный запрос и напишите текст запроса в конструкторе настройки списка:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка,
Номенклатура.Наименование КАК Наименование,
Номенклатура.Артикул КАК Артикул
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ПометкаУдаления
Даже при произвольном запросе заполните поле Основная таблица — тогда сохранятся редактирование строк из списка, динамическое считывание и стандартные команды. Без него список станет «только для чтения».
Чтобы выборка зависела от данных формы, в произвольный запрос добавляют параметры (&ДатаНачала, &Организация) и заполняют их в коде через Список.Параметры.УстановитьЗначениеПараметра. Так один и тот же список показывает документы то за месяц, то за квартал — без переписывания запроса.
Колонки таблицы настраивают в дереве элементов формы: порядок, видимость, ширину и заголовок. Лишние поля из запроса можно не выводить на экран — они останутся доступны для отбора и сортировки.
Ключевое свойство — Динамическое считывание. Когда оно включено, платформа подгружает строки по мере прокрутки, а не читает всю таблицу разом. Для списков на сотни тысяч записей это обязательное условие нормальной скорости.
Настройка списка в режиме «1С:Предприятие»
Пользователю не нужен Конфигуратор — список настраивается прямо на форме. В «Такси» эти команды собраны в меню Еще.
- Сортировка. Щёлкните по заголовку колонки — список отсортируется по ней. Повторный клик меняет направление. Сложную сортировку задают через
Еще→Настроить список→ вкладкаСортировка. - Отбор.
Еще→Настроить список→Отбор. Добавьте поле, условие и значение — останутся только подходящие строки. - Быстрый отбор. Правой кнопкой по ячейке → команда отбора по значению в ней.
- Поиск.
Ctrl+Fили кнопка поиска — найдёт строки по части текста. - Группировка. На вкладке
Группировкасоберите строки по значению поля (например, заказы по контрагенту). - Условное оформление. Вкладка
Условное оформление— подсветить строки цветом по условию (например, просроченные — красным).
Настройки списка сохраняются для пользователя автоматически и применяются при следующем открытии формы. Чтобы вернуть вид по умолчанию, в том же меню выберите команду сброса настроек.
Если одни и те же наборы отборов нужны регулярно, их сохраняют как отдельные варианты через Еще → Сохранить настройки. Потом переключаются между ними командой Выбрать настройки — не настраивая отбор заново каждый раз. Это заметно ускоряет работу, когда список приходится смотреть то по одной организации, то по другой, то за разный период.
Списки в коде: СписокЗначений, Массив и ТаблицаЗначений
Когда данные нужны временно, в памяти, их собирают в коллекции встроенного языка. Разберём три основные.
Массив — простой перечень значений без названий колонок:
Товары = Новый Массив;
Товары.Добавить("Карандаш");
Товары.Добавить("Тетрадь");
Для Каждого Товар Из Товары Цикл
Сообщить(Товар);
КонецЦикла;
СписокЗначений — список, где у каждого элемента есть значение и представление (текст для показа), а также пометка и картинка. Удобен для выбора вариантов пользователем:
Дни = Новый СписокЗначений;
Дни.Добавить(1, "Понедельник");
Дни.Добавить(2, "Вторник");
НайденныйЭлемент = Дни.НайтиПоЗначению(2);
Если НайденныйЭлемент <> Неопределено Тогда
Сообщить(НайденныйЭлемент.Представление);
КонецЕсли;
У СписокЗначений есть методы Количество(), СортироватьПоЗначению(), СортироватьПоПредставлению() и ВыгрузитьЗначения(). В управляемой форме выбор из такого списка показывают методом ПоказатьВыборИзСписка.
ТаблицаЗначений — таблица с именованными колонками и строками:
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Количество");
Строка = Таблица.Добавить();
Строка.Товар = "Карандаш";
Строка.Количество = 10;
Для поиска по таблице используют Найти(Значение, "Колонка") и НайтиСтроки(Отбор).
Соответствие хранит пары «ключ — значение» и удобно, когда нужно быстро находить данные по идентификатору:
Цены = Новый Соответствие;
Цены.Вставить("Карандаш", 15);
Цены.Вставить("Тетрадь", 40);
ЦенаКарандаша = Цены.Получить("Карандаш"); // 15
Коллекции легко перегонять одну в другую. Отдельную колонку таблицы выгружают в массив через Таблица.ВыгрузитьКолонку("Товар"), а список значений наполняют сразу из массива методом ЗагрузитьЗначения(Массив). Это избавляет от ручных циклов при подготовке данных для отбора или выбора.
Как ускорить работу с большими списками
Когда в справочнике десятки и сотни тысяч элементов, скорость открытия и отбора начинает заметно проседать. Помогают настройки на стороне конфигурации.
- 🔎 Индексирование реквизитов. Если по реквизиту часто отбирают или сортируют, в его свойствах задайте
Индексировать. Платформа построит индекс, и выборка по этому полю пойдёт на порядок быстрее. Индекс на каждый реквизит не вешают — он замедляет запись, поэтому индексируют только то, по чему реально ищут. - 🗂️ Иерархия вместо плоского списка. В большом справочнике папки (
Иерархия групп и элементов) позволяют грузить элементы по текущей группе, а не весь перечень сразу. - 📉 Меньше данных на экране. Убирайте из динамического списка колонки, которые не нужны пользователю, и ограничивайте выборку отбором по умолчанию — читать придётся меньше.
Коллекции в коде (ТаблицаЗначений, СписокЗначений) держите компактными: не загружайте в память всю таблицу базы, если достаточно отобрать нужные строки запросом и обработать их порциями.
Типичные ошибки при создании списков
Эти ошибки чаще всего ломают только что созданный список.
F7, при работающих пользователях — вне рабочего времени.Основная таблица. Укажите основную таблицу — редактирование и динамическое считывание вернутся.Для Сч = Таблица.Количество() - 1 По 0 Цикл Таблица.Удалить(Сч); КонецЦикла;.Динамическое считывание или в запросе соединено много таблиц. Включите динамическое считывание и уберите лишние соединения и расчётные поля.Ещё одна частая промашка — путать перечисление с реквизитом типа «булево». Если вариантов ровно два и других не будет (да/нет, вкл/выкл), хватит типа Булево; перечисление заводят от трёх вариантов и больше.
Частые вопросы
Можно ли превратить перечисление в справочник, не теряя данные?
Чем динамический список отличается от табличной части?
Как сделать список значений для поля ввода, чтобы пользователь выбирал из вариантов?
СписокЗначений в коде и свяжите его с полем выбора через свойство списка выбора.Почему в динамическом списке не видно только что добавленной записи?
F5) — платформа перечитает строки из базы.