Свой реквизит в типовом справочнике без снятия с поддержки

· 10 мин

Содержание

Чтобы добавить реквизит справочника в расширение 1С, откройте Конфигуратор, создайте расширение через Конфигурация → Расширения конфигурации, затем в дереве основной конфигурации щёлкните правой кнопкой по нужному справочнику и выберите Добавить в расширение. В расширении появится заимствованный справочник: в его ветку Реквизиты добавьте новый реквизит, задайте тип, заимствуйте форму элемента и перетащите поле на форму. Остаётся обновить конфигурацию базы данных (F7) и перезапустить сеансы.

Альтернатив у такой задачи две: снять конфигурацию с поддержки и править её напрямую или хранить данные в дополнительных реквизитах БСП. Первый путь дорог при каждом обновлении. Второй не требует программиста, но такие поля хуже работают в запросах и отчётах. Расширение — золотая середина: типовая остаётся на поддержке, а реквизит становится полноценным полем таблицы справочника.

Что подготовить перед созданием расширения

Расширения появились в платформе 8.3.6, а добавлять собственные реквизиты в заимствованные объекты разрешили позже. На актуальной платформе 8.3.2x с этим проблем нет. Если база работает на старой сборке, сначала обновите платформу.

Перед работой проверьте пять вещей:

  • 🔐 Права. Нужен пользователь с ролью «Администратор» или «Полные права»: без них Конфигуратор не даст изменять расширения.
  • 💾 Резервная копия. Выгрузите базу в .dt через Администрирование → Выгрузить информационную базу в Конфигураторе. Расширение, которое меняет структуру данных, добавляет поле в таблицу справочника.
  • 🧪 Копия для экспериментов. Отлаживайте расширение на копии базы, а в рабочую переносите готовый файл .cfe.
  • 📋 Режим совместимости. Посмотрите свойство «Режим совместимости» в корне основной конфигурации. У расширения этот режим не должен быть выше, чем у конфигурации.
  • 👥 Сеансы пользователей. Добавление реквизита меняет структуру данных. Новое поле пользователи увидят только после перезапуска программы, поэтому применяйте изменения вне рабочих часов.

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

Создание расширения и его ключевые свойства

Откройте базу в режиме Конфигуратор и выполните шаги:

  1. Откройте Конфигурация → Открыть конфигурацию, чтобы видеть дерево основной конфигурации.
  2. Выберите Конфигурация → Расширения конфигурации.
  3. В открывшемся списке нажмите Добавить. Платформа создаст расширение с именем вроде Расширение1.
  4. Откройте свойства расширения (двойной щелчок или Alt+Enter на корне его дерева) и заполните поля из таблицы ниже.
СвойствоЧто указатьЗачем
ИмяДопРеквизитыНоменклатурыПонятное имя: через год вы вспомните, что в нём лежит
Синоним«Доп. реквизиты номенклатуры»Отображается в списке расширений у пользователя
Префикс имёнмр_Защита от совпадения имён с будущими реквизитами поставщика
НазначениеАдаптацияДля доработок под конкретную организацию
Режим совместимостиКак у основной конфигурацииИначе расширение не применится

У свойства «Назначение» три значения: «Исправление», «Адаптация» и «Дополнение». От него зависит порядок применения, если расширений в базе несколько. Для собственного реквизита подходит «Адаптация».

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

Расширение уже существует в базе, но пока ничего не меняет.

Как найти нужный справочник и заимствовать его

Начинающие часто путаются с тем, где искать справочник. Искать его нужно в дереве основной конфигурации, а не в дереве расширения: там пока пусто.

  1. В дереве основной конфигурации раскройте ветку Справочники.
  2. Найдите объект. В крупных конфигурациях удобнее поиск: встаньте в дерево и начните набирать имя, например Номенклатура.
  3. Если не знаете имени объекта, откройте элемент справочника в режиме 1С:Предприятие и нажмите Shift+F11 (получить ссылку). В ссылке вида e1cib/data/Справочник.Номенклатура?ref=… видно имя объекта. Имя метаданных отличается от того, что пользователь видит в меню: «Контрагенты» в БП 3.0 — это Справочники.Контрагенты, а «Товары» могут оказаться Справочники.Номенклатура.
  4. Щёлкните по справочнику правой кнопкой и выберите Добавить в расширение.
  5. Если в базе несколько расширений, платформа спросит, в какое именно добавить. Выберите созданное.

В дереве расширения появится ветка Справочники → Номенклатура с пометкой заимствования. Заимствованный объект — это ссылка на объект основной конфигурации. Его исходные реквизиты вы не меняете, но можете добавлять к нему свои.

Заимствуйте только то, что действительно нужно. Каждый лишний заимствованный объект — ещё одна точка, где расширение может сломаться после обновления типовой конфигурации.

Добавление реквизита в справочник через расширение

Теперь сам реквизит. Пример: в справочник «Номенклатура» нужно поле «Гарантия, месяцев».

  1. В дереве расширения раскройте заимствованный справочник.
  2. Щёлкните правой кнопкой по ветке Реквизиты и выберите Добавить.
  3. В палитре свойств задайте имя мр_ГарантияМесяцев и синоним «Гарантия, месяцев».
  4. Укажите тип: Число, длина 3, точность 0.
  5. Настройте дополнительные свойства по таблице ниже.

Свойства, которые стоит заполнить сразу

СвойствоПримерЧто даёт
ТипЧисло (3, 0)Ограничивает ввод, экономит место в таблице
НеотрицательноеВключеноНе даст ввести −12
Значение заполнения12Подставится в новый элемент при создании
Проверка заполненияНе проверятьИначе старые элементы перестанут записываться без этого поля
ИндексироватьНе индексироватьИндекс нужен, только если по полю часто отбирают в запросах
ИспользованиеДля элементаВ иерархических справочниках скрывает поле у групп
Подсказка«Срок гарантии производителя»Всплывает у поля на форме

Какой тип выбрать

  • 🔢 Число — сроки, нормы, коэффициенты. Сразу задайте длину и точность.
  • 🔤 Строка — артикулы, коды поставщика. Задавайте фиксированную длину, например 50. Строка неограниченной длины не участвует в сравнениях и упорядочивании в запросах.
  • ✅ Булево — флажки «Не выгружать на сайт», «Требует сертификата».
  • 📅 Дата — с составом «Дата», если время не нужно.
  • 🔗 Ссылка на справочник — например, СправочникСсылка.Контрагенты для поля «Основной поставщик». Если справочник-тип есть только в основной конфигурации, заимствовать его не обязательно: тип можно выбрать из основной конфигурации.

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

Вывод нового реквизита на форму элемента

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

Заимствование формы элемента

  1. В дереве основной конфигурации раскройте справочник и ветку Формы.
  2. Найдите основную форму элемента. Её имя указано в свойстве справочника «Основная форма объекта». Обычно это ФормаЭлемента.
  3. Щёлкните по форме правой кнопкой и выберите Добавить в расширение.
  4. Откройте заимствованную форму в дереве расширения.

Размещение поля

  1. В редакторе формы на вкладке Реквизиты раскройте реквизит Объект. В конце списка будет мр_ГарантияМесяцев.
  2. Перетащите его мышью в дерево элементов слева, в нужную группу. Например, в группу рядом с единицей измерения.
  3. В свойствах созданного поля проверьте «Путь к данным»: Объект.мр_ГарантияМесяцев.
  4. При необходимости задайте ширину поля и положение заголовка.

Форма элемента в типовых конфигурациях сложная, групп в ней десятки. Найти нужную быстрее так: откройте форму в режиме 1С:Предприятие, посмотрите, рядом с каким полем вы хотите видеть новое, и найдите это поле в дереве элементов по имени.

Если поле нужно только паре сотрудников, а программировать форму не хочется, попробуйте сначала пользовательскую настройку: в форме элемента Ещё → Изменить форму. В списке доступных полей обычно появляется новый реквизит. Настройка сохранится только у этого пользователя.

Колонка в списке

Чтобы видеть реквизит колонкой в списке справочника, тоже есть два пути:

  • 👤 Пользовательский — Ещё → Изменить форму в форме списка и добавление поля.
  • 🛠 Через расширение — заимствовать форму списка и добавить колонку в динамический список. Если у списка произвольный запрос, поле придётся добавить и в запрос.

Применение расширения и заполнение существующих элементов

Сохранение изменений в базе

Расширение хранится в самой информационной базе. Чтобы изменения вступили в силу:

  1. Встаньте в дерево расширения.
  2. Нажмите Конфигурация → Обновить конфигурацию базы данных или F7. Убедитесь, что выбрано именно расширение, а не основная конфигурация.
  3. Платформа покажет изменения структуры: новое поле в таблице справочника. Подтвердите.
  4. Попросите пользователей перезапустить программу. До перезапуска их сеансы работают со старой структурой.

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

Перенос в рабочую базу

На копии: в Конфигураторе, в дереве расширения, Конфигурация → Сохранить конфигурацию в файл. Получится файл .cfe.

В рабочей базе есть два способа загрузки:

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

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

Заполнение старых элементов

У всех существующих элементов новое поле пустое. «Значение заполнения» на них не действует: оно срабатывает только при создании нового элемента.

Варианты:

  • ✏️ Вручную — если элементов десятки.
  • 🧰 Групповое изменение реквизитов — в БП 3.0 и УТ 11: Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов. Выберите справочник, отберите элементы и задайте значение нового поля.
  • 💻 Код — если значение вычисляется по правилу. Его можно выполнить во внешней обработке на копии базы.
// Заполнить гарантию 12 месяцев у всех элементов, где она пустая
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    НЕ Номенклатура.ЭтоГруппа
|    И Номенклатура.мр_ГарантияМесяцев = 0";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    СпрОбъект = Выборка.Ссылка.ПолучитьОбъект();
    СпрОбъект.мр_ГарантияМесяцев = 12;
    СпрОбъект.ОбменДанными.Загрузка = Истина;
    СпрОбъект.Записать();
КонецЦикла;

Строка ОбменДанными.Загрузка = Истина отключает обработчики записи и проверки типовой конфигурации. Это ускоряет массовое заполнение, но и обходит бизнес-логику. Для простого числового поля это безопасно. Для полей, от которых зависят другие данные, уберите эту строку.

Условие НЕ Номенклатура.ЭтоГруппа нужно только для иерархии с группами. Если у справочника групп нет, удалите его, иначе запрос выдаст ошибку.

Проверка и отладка: если реквизит не появился

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

Для отладки кода расширения, например обработчиков формы, подходит обычный отладчик Конфигуратора: точки останова ставят прямо в модулях расширения.

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

Где посмотреть, что расширение активно

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

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

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

Снимается ли конфигурация с поддержки, если добавить реквизит в расширение?
Нет. Основная конфигурация остаётся на полной поддержке и обновляется автоматически, а расширение подключается поверх неё.
Можно ли изменить тип или длину существующего реквизита типовой через расширение?
Нет. Свойства реквизитов основной конфигурации через расширение не меняют. Можно только добавить свой реквизит с нужным типом.
Будет ли новый реквизит доступен в отчётах и запросах?
Да. Это обычное поле таблицы справочника. В запросе к нему обращаются по имени: Номенклатура.мр_ГарантияМесяцев. В отчётах на СКД поле появится в списке доступных полей.
Переживёт ли расширение обновление типовой конфигурации?
Обычно да, данные реквизитов сохраняются. Проблемы бывают, когда поставщик меняет заимствованную форму или объект. После каждого обновления откройте элемент справочника и проверьте поле.
Чем реквизит в расширении лучше дополнительного реквизита БСП?
Он хранится как отдельная колонка таблицы, поэтому отборы и запросы по нему работают быстрее и проще. Дополнительные реквизиты удобнее, если добавлять поля должен сам пользователь без Конфигуратора.