Создаём справочник в Конфигураторе 1С 8.3 с нуля
Содержание
Справочник добавляют в Конфигураторе: ветка Справочники в дереве конфигурации → кнопка Добавить (или контекстное меню → Добавить). Открывается окно редактора объекта и палитра свойств — дальше задаёте имя, состав реквизитов и формы. В пользовательском режиме (1С:Предприятие) новый справочник создать нельзя, только заполнять.
Ниже — весь путь от пустого объекта до рабочего справочника с проверкой заполнения и правами. Примеры даю на платформе 8.3 с интерфейсом «Такси». Терминология и расположение веток одинаковы для всех конфигураций на управляемых формах — Бухгалтерии, ЗУП, УТ.
Добавляем объект и заполняем основные свойства
Откройте конфигурацию на редактирование (режим Конфигуратора, Конфигурация → Открыть конфигурацию). В дереве найдите ветку Справочники, встаньте на неё и нажмите Добавить. Платформа создаст объект Справочник1 и откроет окно редактора на закладке Основные.
Первым делом — два поля в палитре свойств:
- 📝 Имя — идентификатор для встроенного языка, без пробелов и спецсимволов. Например,
Контрагенты. По нему вы обращаетесь к объекту в коде:Справочники.Контрагенты. - 🏷️ Синоним — то, что видит пользователь в интерфейсе. Заполняется автоматически из имени, но его можно сделать читаемее: «Контрагенты», «Номенклатура поставщиков».
Имя меняйте сразу. Если переименовать объект после того, как на него уже сослался код или другие объекты метаданных, придётся править все ссылки вручную.
Остальные закладки редактора — Подсистемы, Данные, Нумерация, Формы, Права и прочие — заполняются по мере надобности. На закладке Подсистемы отметьте галочками разделы, в командном интерфейсе которых должен появиться справочник, иначе пользователь его просто не увидит в меню.
Настраиваем код, наименование и иерархию
Закладка Данные задаёт, как справочник хранит записи.
| Свойство | Назначение | Типичное значение |
|---|---|---|
| Длина кода | Разрядность поля «Код» | 9–11 |
| Тип кода | Строка или Число | Строка |
| Длина наименования | Максимум символов в поле «Наименование» | 25–150 |
| Основное представление | Как объект показывается в полях ввода | В виде наименования |
Если код нужен буквенно-цифровой (К-00001), оставляйте тип Строка. Число подойдёт, когда важна чисто числовая нумерация.
Иерархия. Когда элементы нужно раскладывать по группам (папкам), перейдите на закладку Иерархия и включите Иерархический справочник. Дальше выбираете вид:
- Иерархия групп и элементов — классические папки: группа не несёт собственных данных, внутри лежат элементы. Так устроена «Номенклатура».
- Иерархия элементов — родителем может быть обычный элемент. Подходит для оргструктуры, статей затрат, где «папка» — это сама запись.
Там же задаётся Ограничение количества уровней иерархии, если глубина должна быть фиксированной. Выбор вида иерархии после ввода данных менять болезненно: перенос элементов между видами в готовой базе чреват путаницей в принадлежности, поэтому вид определяют на этапе проектирования.
Подчинение. Справочник бывает подчинён другому. На закладке Владельцы добавляете справочник-владелец — и тогда каждый элемент привязан к владельцу. Классика: ДоговорыКонтрагентов подчинён Контрагентам. На закладке Нумерация для подчинённого справочника выбирают серию кодов: Во всём справочнике, Внутри подчинения или Внутри подчинения владельцу.
Добавляем реквизиты и выбираем типы данных
Код и наименование — это минимум. Всё остальное хранится в реквизитах. На закладке Данные встаньте на ветку Реквизиты → Добавить.
Для каждого реквизита задайте:
- Имя — например,
ИНН,ОсновнойМенеджер,ДатаРегистрации. - Тип — ключевое поле. Доступные варианты:
- примитивные:
Строка,Число,Дата,Булево; - ссылочные:
СправочникСсылка.Контрагенты,ПеречислениеСсылка.ВидыКонтрагентов; - составной тип — когда в поле нужно хранить ссылки разных видов (отметьте несколько типов в окне редактирования типа).
- примитивные:
- Для Строки — длину и флаг
Неограниченная длина(строка неограниченной длины хранится отдельно и не индексируется). - Для Числа — длину и точность (количество знаков после запятой).
Реквизит, по которому планируете искать и отбирать, пометьте свойством Индексировать (или Индексировать с доп. упорядочиванием). Без индекса отбор по большому справочнику будет тормозить.
Полезные свойства реквизита:
- Проверка заполнения →
Выдавать ошибку— платформа сама не даст записать элемент с пустым полем. Это декларативный способ, без единой строчки кода. - Использование →
Для элемента/Для группы/Для элемента и группы— определяет, у кого из иерархии реквизит виден. У группы «Номенклатура» не нужна цена, а у элемента нужна. - Значение заполнения — что подставить в новый элемент по умолчанию.
- Быстрый выбор — выпадающий список вместо отдельной формы выбора, когда значений немного.
Отдельная тема — связанные реквизиты. Если выбор в одном поле должен зависеть от другого (склад из списка складов конкретной организации), это задают через свойство Связи параметров выбора: платформа подставит в условие отбора значение ведущего поля. Жёстко прописывать такой отбор в коде формы не обязательно — часть сценариев решается настройкой реквизита.
Организуем табличную часть для подчинённых строк
Когда у одного элемента должен быть список однотипных строк — контактные лица контрагента, телефоны, расчётные счета — используют табличную часть.
На закладке Данные встаньте на ветку Табличные части → Добавить, задайте имя (например, КонтактныеЛица). Внутри табличной части так же добавляются свои реквизиты-колонки:
ФИО— типСтрока, длина 100;Должность—Строка, длина 50;Телефон—Строка, длина 20;Основной—Булево.
В коде к строкам обращаетесь через коллекцию:
Для Каждого СтрокаКонтакта Из Объект.КонтактныеЛица Цикл
Если СтрокаКонтакта.Основной Тогда
ОсновнойТелефон = СтрокаКонтакта.Телефон;
Прервать;
КонецЕсли;
КонецЦикла;
Табличная часть не заменяет подчинённый справочник. Разница простая: если строки нужны только внутри одного элемента и не ссылаются из других объектов — берите табличную часть. Если на эти строки должны ссылаться документы (например, выбирать конкретный договор в счёте) — заводите отдельный подчинённый справочник.
Проектируем формы списка и элемента
Платформа умеет генерировать формы автоматически — на старте можно вообще не создавать ни одной, и справочник будет открываться. Собственные формы нужны, когда автогенерируемая не устраивает: надо переставить поля, добавить команду, скрыть реквизит.
На закладке Формы создайте нужные виды через Добавить → откроется Конструктор форм:
- 📋 Форма списка — таблица всех элементов.
- 🗂️ Форма элемента — карточка одной записи.
- 📁 Форма группы — карточка папки (для иерархического справочника).
- ✅ Форма выбора — упрощённый список для выбора значения в поле ввода.
Созданную форму можно назначить основной: свойства справочника → Основная форма списка, Основная форма объекта и т. д. Если поле не назначено, платформа подставит автогенерируемую форму.
В редакторе формы слева — дерево элементов и реквизитов, справа — палитра свойств. Перетаскиванием реквизита из правой панели в дерево элементов добавляете поле на форму. События формы (ПриСозданииНаСервере, ПриИзмененииПоля) открываются двойным кликом в свойствах.
Чтобы добавить на форму свою кнопку, заведите команду на закладке Команды формы, пропишите её обработчик, затем перетащите команду в командную панель формы. Так на карточку контрагента вешают, например, кнопку «Проверить ИНН
в сервисе». Поля, которые не нужно показывать, не удаляйте из реквизитов формы — достаточно снять видимость в свойствах элемента: данные сохранятся, а поле скроется.
Пишем модуль объекта и логику проверки
Серверная логика элемента живёт в модуле объекта. Открыть: правый клик на справочнике → Открыть модуль объекта, либо закладка Прочее → Модуль объекта.
Основные события, которые переопределяют:
- ОбработкаПроверкиЗаполнения — проверки сложнее, чем «поле не пустое».
- ПередЗаписью — нормализация данных перед сохранением.
- ПриЗаписи — действия после записи в транзакции.
- ПередУдалением — контроль, что элемент можно удалять.
Пример: не даём записать контрагента без ИНН и приводим наименование к единому виду.
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если НЕ ЗначениеЗаполнено(ИНН) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Укажите ИНН контрагента";
Сообщение.Поле = "ИНН";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Процедура ПередЗаписью(Отказ)
Наименование = СокрЛП(Наименование);
КонецПроцедуры
Простые проверки «поле обязательно к заполнению» не выносите в модуль — для них есть декларативное свойство реквизита Проверка заполнения = Выдавать ошибку. Код нужен там, где логика зависит от нескольких полей или от данных в базе.
Предопределённые элементы. Если справочнику нужны записи, существующие всегда (например, вид контакта «Телефон»), заведите их в конфигурации: закладка Прочее → Предопределённые → открыть и добавить. Такие элементы создаются при обновлении базы и доступны в коде по имени: Справочники.ВидыКонтактов.Телефон. Удалить их из пользовательского режима нельзя.
Настраиваем права доступа к справочнику
Чтобы пользователи видели и редактировали справочник, нужно выдать права ролям. Права хранятся в объектах Роли, а не в самом справочнике, но удобно открыть их с закладки Права справочника.
Для каждой роли отмечаете флажки:
- Чтение — видеть данные;
- Добавление / Изменение / Удаление — менять состав;
- Просмотр / Редактирование / Интерактивное удаление — действия через интерфейс;
- Ввод по строке — подбор в поле ввода по набору символов.
Право Удаление даёт пометку и прямое удаление. Для рядовых пользователей обычно оставляют только пометку на удаление, а физически чистит базу администратор через Операции → Удаление помеченных объектов (в пользовательском режиме — раздел администрирования).
Ограничение на уровне записей (RLS). Когда менеджер должен видеть только своих контрагентов, в роли на справочнике задают Ограничение доступа к данным — текст условия на языке запросов. Это тонкая настройка: она требует включённой функциональной опции или параметров сеанса и ощутимо нагружает систему, поэтому применяйте её осознанно, а не «на всякий случай».
В типовых конфигурациях на БСП права пользователям раздают не ролями напрямую, а профилями групп доступа — в пользовательском режиме, раздел Администрирование → Настройки пользователей и прав. Сама роль остаётся в конфигурации и лишь входит в профиль. Если добавляете справочник в типовую, учтите: чтобы он стал доступен, его право нужно включить в соответствующую роль, а роль — в профиль, которым пользуются сотрудники.
Сохраняем изменения в базе
Пока вы работали в Конфигураторе, вы правили конфигурацию, а не рабочую базу. Чтобы изменения заработали:
- Нажмите
F7илиКонфигурация → Обновить конфигурацию базы данных. - Платформа покажет окно со списком изменений структуры — новый справочник, его реквизиты, табличные части.
- Подтвердите реструктуризацию.
Обновление структуры базы требует монопольного доступа — его не выполнить, пока в базе работают пользователи. Планируйте реструктуризацию крупного справочника на время, когда все вышли, и предупредите коллег: сеансы придётся завершить.
После обновления откройте 1С:Предприятие (Сервис → 1С:Предприятие или F5) и проверьте, что справочник появился в нужном разделе и открывается.
Если справочник создаётся в типовой конфигурации (Бухгалтерия, ЗУП, УТ), объект добавляют не в основную конфигурацию, а в расширение — отдельный файл поверх типовой. Так доработка переживёт обновление релиза: при следующем апдейте типовой конфигурации ваш справочник из расширения не затрётся. Создают расширение через Конфигурация → Расширения конфигурации; дальнейшие шаги с реквизитами, формами и правами те же.
Частые вопросы
Чем справочник отличается от документа и перечисления?
Можно ли создать справочник прямо в режиме 1С:Предприятие?
Как сделать так, чтобы нельзя было завести двух контрагентов с одинаковым ИНН?
ОбработкаПроверкиЗаполнения или ПередЗаписью делают запрос к базе и при дубле ставят Отказ = Истина.Нужно переименовать реквизит, который уже заполнен данными. Данные потеряются?
Справочник не виден в списке разделов у пользователя. Почему?
Подсистемы), либо у роли пользователя нет права Просмотр. Проверьте оба пункта: добавьте справочник в нужную подсистему и выдайте права в роли.