Свой справочник в расширении конфигурации: от создания до прав и выгрузки .cfe

· 9 мин

Содержание

Чтобы добавить справочник в расширение 1С, откройте в Конфигураторе Конфигурация → Расширения конфигурации, создайте или выберите расширение, раскройте его дерево и в ветке «Справочники» нажмите «Добавить». Дальше — реквизиты, формы, роль с правами, подсистема для показа в интерфейсе и Обновить конфигурацию базы данных. Собственные объекты данных в расширениях поддерживаются в платформе с номером не ниже 8.3.11.

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

Подготовка: версия платформы, расширение и префикс

Перед тем как добавлять объект, проверьте три вещи.

  • 🧩 Платформа. Справочники, документы и регистры в расширении доступны с 8.3.11. Номер версии смотрите в Конфигураторе: Справка → О программе.
  • ⚙️ Режим совместимости расширения. У самого расширения есть свойство «Режим совместимости». Если оно ниже 8.3.11, ветка «Справочники» не даст создать новый объект — поднимите значение в палитре свойств расширения.
  • 💾 Копия базы. Расширение с данными меняет структуру базы. Перед первым применением сделайте выгрузку .dt или резервную копию средствами СУБД.

Когда расширение лучше доработки конфигурации

Расширение выбирают, когда типовую нельзя снимать с поддержки. Обновления релизов ставятся как обычно, а ваш справочник живёт отдельно и не попадает в сравнение-объединение. Если же конфигурация уже сильно переписана и снята с поддержки, новый справочник проще добавить прямо в неё: так данные не зависят от судьбы отдельного файла .cfe.

Создание расширения

  1. Откройте базу в Конфигураторе. Конфигурацию основной базы открывать не нужно.
  2. Выберите Конфигурация → Расширения конфигурации.
  3. Нажмите «Добавить». Задайте:
    • Имя — латиницей или кириллицей без пробелов, например ДопСправочники;
    • Синоним — то, что увидит пользователь в списке расширений;
    • Префикс — короткая метка, например дс_;
    • Назначение — для новых объектов данных обычно ставят «Дополнение».
  4. Откройте дерево расширения: в окне расширений выделите строку и выполните Конфигурация → Открыть конфигурацию.

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

Добавление объекта

В дереве расширения правой кнопкой по ветке «Справочники» → «Добавить». Конфигуратор сразу подставит префикс в имя: допишите после него смысловую часть, например дс_ВидыДоговоров. Синоним без префикса: «Виды договоров».

Новый справочник появляется в дереве как собственный объект расширения. Заимствованные объекты типовой помечены отдельным значком, свои — нет. Это удобно, когда расширение разрастается.

Реквизиты, табличные части и виды справочника

Справочник в расширении настраивается теми же вкладками, что и в основной конфигурации. Ниже — что стоит решить сразу, потому что потом менять дороже.

Основная вкладка «Данные»

СвойствоЧто задаётСовет
Длина кодаСколько символов в коде9 хватает почти всегда
Тип кодаСтрока или числоСтрока удобнее при загрузке из Excel
Длина наименованияМаксимум символов100–150 для «человеческих» названий
АвтонумерацияКод присваивается самВключайте, если код не несёт смысла
Контроль уникальностиЗапрет дублей кодаНужен при обменах

Иерархия и подчинение

На вкладке «Иерархия» решите, нужны ли группы:

  • 📁 Иерархия групп и элементов — классика: папки и элементы внутри.
  • 🌳 Иерархия элементов — элемент может быть родителем другого элемента.
  • 🔢 Ограничение уровней — задаёт глубину дерева.

На вкладке «Владельцы» можно подчинить ваш справочник справочнику типовой конфигурации. Пример: дс_КонтактыПоДоговору с владельцем «Контрагенты». Тогда в карточке контрагента появится доступ к подчинённому списку.

Реквизиты и табличные части

Реквизиты добавляются в одноимённой ветке. Тип можно брать как из расширения, так и из основной конфигурации: СправочникСсылка.Контрагенты, СправочникСсылка.Организации и так далее.

Табличная часть — если у элемента есть повторяющиеся строки. Например, у вида договора — список обязательных документов к нему.

Предопределённые элементы

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

Формы элемента и списка

Без своих форм справочник откроется в автоматически сгенерированных. Для двух-трёх реквизитов этого хватает. Если нужна раскладка по группам, подсказки или свои команды — создайте формы.

  1. Вкладка «Формы» → «Добавить» рядом с полем «Основная форма объекта».
  2. В конструкторе выберите тип «Форма элемента справочника» и отметьте, какие реквизиты вывести.
  3. Повторите для «Формы списка». Если включена иерархия, имеет смысл отдельно задать форму выбора группы.
  4. Убедитесь, что созданные формы указаны в полях основных форм — иначе платформа продолжит открывать автоматические.

Что обычно дорабатывают в форме элемента

  • 🗂 Группы на форме: «Основное», «Дополнительно», табличная часть на отдельной странице.
  • 🔒 Доступность полей по условию: например, поле «Срок» доступно только при флаге «Срочный».
  • 🔎 Связи параметров выбора: в поле «Договор» показывать только договоры выбранного контрагента.

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

Форма списка

В форме списка динамический список строится по основной таблице справочника. Если нужно вывести в колонку поле из связанного объекта (скажем, ИНН владельца), включите для списка «Произвольный запрос» и допишите соединение. Без необходимости этого не делайте: произвольный запрос медленнее на больших справочниках.

Модуль объекта: проверки и логика записи

У собственного справочника расширения модули обычные. Аннотации &Перед, &После, &Вместо нужны только для заимствованных объектов, здесь их нет.

Типичные задачи модуля объекта:

  • ✅ проверка заполнения сверх флагов «Проверка заполнения» в реквизитах;
  • ✍️ заполнение служебных реквизитов перед записью;
  • 🚫 запрет на изменение элемента при определённом условии.

Пример: у справочника есть реквизиты ИНН (строка 12) и ЮрЛицо (булево). Проверяем длину ИНН в зависимости от типа лица.

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

	Если Не ЗначениеЗаполнено(ИНН) Тогда
		Возврат;
	КонецЕсли;

	НужнаяДлина = ?(ЮрЛицо, 10, 12);
	Если СтрДлина(СокрЛП(ИНН)) <> НужнаяДлина Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = СтрШаблон("ИНН должен содержать %1 цифр.", НужнаяДлина);
		Сообщение.Поле = "ИНН";
		Сообщение.УстановитьДанные(ЭтотОбъект);
		Сообщение.Сообщить();
		Отказ = Истина;
	КонецЕсли;

КонецПроцедуры

Процедура ПередЗаписью(Отказ)

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	Наименование = СокрЛП(Наименование);

КонецПроцедуры

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

Общие функции, которые нужны и форме, и модулю объекта, выносите в общий модуль расширения с префиксом: дс_ВидыДоговоровСервер. Так их проще найти и они не пересекутся с модулями типовой.

Обращение к справочнику в запросах и коде

Для запросов и кода справочник расширения ничем не отличается от типового. В тексте запроса: ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.дс_ВидыДоговоров. В коде: Справочники.дс_ВидыДоговоров.СоздатьЭлемент(). Если расширение отключено, такой код в основной конфигурации упадёт с ошибкой, поэтому обращения к объектам расширения держите внутри самого расширения.

Права доступа и роли

Самая частая причина фразы «справочник добавил, а пользователи его не видят» — права. Новый объект расширения никому не доступен, пока его не включат в роль.

Вариант 1. Своя роль в расширении

  1. В ветке «Роли» расширения добавьте роль, например дс_ЧтениеВидовДоговоров.
  2. Откройте её и найдите справочник в списке объектов.
  3. Отметьте нужные права: «Чтение», «Просмотр» для пользователей; «Добавление», «Изменение», «Удаление» и интерактивные варианты — для тех, кто ведёт справочник.
  4. Сделайте вторую роль для редактирования, если права должны различаться.

Вариант 2. Заимствованная роль

Заимствуйте в расширение типовую роль, например ПолныеПрава, и проставьте в ней права на свой справочник. Администратор сразу увидит объект без отдельной настройки. Для рядовых пользователей лучше всё же своя роль — так прозрачнее.

Как выдать роль в базах на БСП

В БП 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП роли напрямую пользователям не назначают. Порядок такой:

  1. Администрирование → Настройки пользователей и прав → Профили групп доступа.
  2. Скопируйте подходящий профиль или откройте свой, отметьте роль из расширения.
  3. Включите пользователей в группу доступа с этим профилем.

Видимость в интерфейсе

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

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

Сохранение, обновление базы и перенос в рабочую базу

Применение в текущей базе

После правок выполните в окне расширения Конфигурация → Обновить конфигурацию базы данных (F7). Для расширения с данными платформа покажет изменения структуры — примите их. Пока обновление не выполнено, в режиме Предприятия работает прежняя версия расширения.

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

Выгрузка в файл .cfe

Готовое расширение сохраняется отдельным файлом: в окне расширений Конфигурация → Сохранить в файл. Получится ДопСправочники.cfe. Этот файл переносят в рабочую базу.

Загрузка в рабочую базу

Есть два пути, выбирайте по ситуации.

СпособГдеКогда удобен
Через КонфигураторКонфигурация → Расширения конфигурации → выбрать расширение → Конфигурация → Загрузить из файла → F7Есть доступ к Конфигуратору, нужен контроль изменений структуры
Через режим Предприятия (БСП)Администрирование → Печатные формы, отчеты и обработки → РасширенияНет Конфигуратора, работаете в облаке или у клиента

Загрузка .cfe и обновление структуры — два отдельных шага. В режиме Предприятия расширение начинает действовать при следующем запуске программы, поэтому после загрузки пользователей просят перезайти.

При загрузке новой версии поверх старой загружайте её в то же расширение, а не создавайте второе с тем же именем. Иначе получите два расширения со своими таблицами, и данные останутся в старом.

Обновление типовой конфигурации

Перед обновлением релиза БП, ЗУП или УТ полезно проверить, применится ли расширение к новой версии. Собственный справочник с префиксом обычно переживает обновление спокойно. Ломаются чаще заимствованные объекты: роль, подсистема, справочник-владелец. Если их переименовали в новом релизе, расширение отключится — поправьте заимствование и сохраните новую версию .cfe.

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

  • ❌ Удаление расширения «чтобы переустановить». Вместе с ним удалятся все элементы ваших справочников. Для обновления загружайте новую версию поверх.
  • ❌ Имена без префикса. Конфликт с будущим релизом типовой проявится не сразу, а после очередного обновления.
  • ❌ Справочник подчинён объекту, который потом заимствовали и изменили. Владелец из типовой — нормально. Но если в нём менялись свойства через заимствование, при обновлении конфигурации следите за применимостью.
  • ❌ Бизнес-логика в форме вместо модуля объекта. Проверки в форме не сработают при записи из обработки, обмена или загрузки. Проверки данных — в модуле объекта.
  • ❌ Флажок «Безопасный режим» снят «на всякий случай». Без необходимости не снимайте: расширение получит права выполнять внешний код и обращаться к файлам.
Можно ли добавить реквизит в типовой справочник с типом моего справочника из расширения?
Да. Заимствуйте типовой справочник в расширение и добавьте ему реквизит с типом СправочникСсылка.дс_.... Данные нового реквизита хранятся вместе с расширением и тоже пропадут при его удалении.
Что будет с данными, если выключить флаг «Активно» у расширения?
Расширение перестанет применяться, справочник исчезнет из интерфейса. Для сохранности данных надёжнее не выключать, а держать активным; перед любыми манипуляциями сделайте копию базы.
Можно ли перенести справочник из расширения в основную конфигурацию?
Напрямую — нет. Создают такой же справочник в конфигурации, переносят данные обработкой или через выгрузку-загрузку, затем удаляют объект из расширения.
Участвует ли справочник из расширения в типовых обменах?
Сам по себе нет. Правила обмена типовой о нём не знают, поэтому для синхронизации их нужно дорабатывать или переносить данные отдельной обработкой.
Нужен ли монопольный режим для загрузки расширения?
Для расширения, которое меняет структуру данных, обновление структуры требует, чтобы пользователи перезапустили сеансы. Планируйте это на нерабочее время.