Свой реквизит в типовом справочнике без снятия с поддержки
Содержание
Чтобы добавить реквизит
справочника в расширение 1С, откройте Конфигуратор, создайте расширение через Конфигурация → Расширения конфигурации, затем в дереве основной конфигурации щёлкните правой кнопкой по нужному справочнику и выберите Добавить в расширение. В расширении появится заимствованный справочник: в его ветку Реквизиты добавьте новый реквизит, задайте тип, заимствуйте форму элемента и перетащите поле на форму. Остаётся обновить конфигурацию
базы данных (F7) и перезапустить сеансы.
Альтернатив у такой задачи две: снять конфигурацию с поддержки и править её напрямую или хранить данные в дополнительных реквизитах БСП. Первый путь дорог при каждом обновлении. Второй не требует программиста, но такие поля хуже работают в запросах и отчётах. Расширение — золотая середина: типовая остаётся на поддержке, а реквизит становится полноценным полем таблицы справочника.
Что подготовить перед созданием расширения
Расширения появились в платформе 8.3.6, а добавлять собственные реквизиты в заимствованные объекты разрешили позже. На актуальной платформе 8.3.2x с этим проблем нет. Если база работает на старой сборке, сначала обновите платформу.
Перед работой проверьте пять вещей:
- 🔐 Права. Нужен пользователь с ролью «Администратор» или «Полные права»: без них Конфигуратор не даст изменять расширения.
- 💾 Резервная копия. Выгрузите базу в
.dtчерезАдминистрирование → Выгрузить информационную базув Конфигураторе. Расширение, которое меняет структуру данных, добавляет поле в таблицу справочника. - 🧪 Копия для экспериментов. Отлаживайте расширение на копии базы, а в рабочую переносите готовый файл
.cfe. - 📋 Режим совместимости. Посмотрите свойство «Режим совместимости» в корне основной конфигурации. У расширения этот режим не должен быть выше, чем у конфигурации.
- 👥 Сеансы пользователей. Добавление реквизита меняет структуру данных. Новое поле пользователи увидят только после перезапуска программы, поэтому применяйте изменения вне рабочих часов.
Не тренируйтесь на рабочей базе. Ошибка в обработчике формы или в коде заполнения повлияет на всех, кто открывает справочник.
Создание расширения и его ключевые свойства
Откройте базу в режиме Конфигуратор и выполните шаги:
- Откройте
Конфигурация → Открыть конфигурацию, чтобы видеть дерево основной конфигурации. - Выберите
Конфигурация → Расширения конфигурации. - В открывшемся списке нажмите
Добавить. Платформа создаст расширение с именем вродеРасширение1. - Откройте свойства расширения (двойной щелчок или
Alt+Enterна корне его дерева) и заполните поля из таблицы ниже.
| Свойство | Что указать | Зачем |
|---|---|---|
| Имя | ДопРеквизитыНоменклатуры | Понятное имя: через год вы вспомните, что в нём лежит |
| Синоним | «Доп. реквизиты номенклатуры» | Отображается в списке расширений у пользователя |
| Префикс имён | мр_ | Защита от совпадения имён с будущими реквизитами поставщика |
| Назначение | Адаптация | Для доработок под конкретную организацию |
| Режим совместимости | Как у основной конфигурации | Иначе расширение не применится |
У свойства «Назначение» три значения: «Исправление», «Адаптация» и «Дополнение». От него зависит порядок применения, если расширений в базе несколько. Для собственного реквизита подходит «Адаптация».
Префикс нужен ради будущего. Если поставщик в следующем релизе добавит в справочник реквизит ГарантияМесяцев, а у вас тоже ГарантияМесяцев, расширение перестанет применяться. С именем мр_ГарантияМесяцев конфликта не будет.
Расширение уже существует в базе, но пока ничего не меняет.
Как найти нужный справочник и заимствовать его
Начинающие часто путаются с тем, где искать справочник. Искать его нужно в дереве основной конфигурации, а не в дереве расширения: там пока пусто.
- В дереве основной конфигурации раскройте ветку
Справочники. - Найдите объект. В крупных конфигурациях удобнее поиск: встаньте в дерево и начните набирать имя, например
Номенклатура. - Если не знаете имени объекта, откройте элемент справочника в режиме 1С:Предприятие и нажмите
Shift+F11(получить ссылку). В ссылке видаe1cib/data/Справочник.Номенклатура?ref=…видно имя объекта. Имя метаданных отличается от того, что пользователь видит в меню: «Контрагенты» в БП 3.0 — этоСправочники.Контрагенты, а «Товары» могут оказатьсяСправочники.Номенклатура. - Щёлкните по справочнику правой кнопкой и выберите
Добавить в расширение. - Если в базе несколько расширений, платформа спросит, в какое именно добавить. Выберите созданное.
В дереве расширения появится ветка Справочники → Номенклатура с пометкой заимствования. Заимствованный объект — это ссылка на объект основной конфигурации. Его исходные реквизиты вы не меняете, но можете добавлять к нему свои.
Заимствуйте только то, что действительно нужно. Каждый лишний заимствованный объект — ещё одна точка, где расширение может сломаться после обновления типовой конфигурации.
Добавление реквизита в справочник через расширение
Теперь сам реквизит. Пример: в справочник «Номенклатура» нужно поле «Гарантия, месяцев».
- В дереве расширения раскройте заимствованный справочник.
- Щёлкните правой кнопкой по ветке
Реквизитыи выберитеДобавить. - В палитре свойств задайте имя
мр_ГарантияМесяцеви синоним «Гарантия, месяцев». - Укажите тип:
Число, длина 3, точность 0. - Настройте дополнительные свойства по таблице ниже.
Свойства, которые стоит заполнить сразу
| Свойство | Пример | Что даёт |
|---|---|---|
| Тип | Число (3, 0) | Ограничивает ввод, экономит место в таблице |
| Неотрицательное | Включено | Не даст ввести −12 |
| Значение заполнения | 12 | Подставится в новый элемент при создании |
| Проверка заполнения | Не проверять | Иначе старые элементы перестанут записываться без этого поля |
| Индексировать | Не индексировать | Индекс нужен, только если по полю часто отбирают в запросах |
| Использование | Для элемента | В иерархических справочниках скрывает поле у групп |
| Подсказка | «Срок гарантии производителя» | Всплывает у поля на форме |
Какой тип выбрать
- 🔢 Число — сроки, нормы, коэффициенты. Сразу задайте длину и точность.
- 🔤 Строка — артикулы, коды поставщика. Задавайте фиксированную длину, например 50. Строка неограниченной длины не участвует в сравнениях и упорядочивании в запросах.
- ✅ Булево — флажки «Не выгружать на сайт», «Требует сертификата».
- 📅 Дата — с составом «Дата», если время не нужно.
- 🔗 Ссылка на справочник — например,
СправочникСсылка.Контрагентыдля поля «Основной поставщик». Если справочник-тип есть только в основной конфигурации, заимствовать его не обязательно: тип можно выбрать из основной конфигурации.
Поле «Проверка заполнения: Выдавать ошибку» у нового реквизита — частая ловушка. Тысячи уже существующих элементов пустые. Любой пользователь, открывший и записавший старый элемент, получит ошибку. Включайте проверку только после того, как заполните поле у всех элементов.
Вывод нового реквизита на форму элемента
Сам по себе реквизит в таблице есть, но на экране его не видно. Чтобы пользователь мог его заполнять, нужна форма.
Заимствование формы элемента
- В дереве основной конфигурации раскройте справочник и ветку
Формы. - Найдите основную форму элемента. Её имя указано в свойстве справочника «Основная форма объекта». Обычно это
ФормаЭлемента. - Щёлкните по форме правой кнопкой и выберите
Добавить в расширение. - Откройте заимствованную форму в дереве расширения.
Размещение поля
- В редакторе формы на вкладке
Реквизитыраскройте реквизитОбъект. В конце списка будетмр_ГарантияМесяцев. - Перетащите его мышью в дерево элементов слева, в нужную группу. Например, в группу рядом с единицей измерения.
- В свойствах созданного поля проверьте «Путь к данным»:
Объект.мр_ГарантияМесяцев. - При необходимости задайте ширину поля и положение заголовка.
Форма элемента в типовых конфигурациях сложная, групп в ней десятки. Найти нужную быстрее так: откройте форму в режиме 1С:Предприятие, посмотрите, рядом с каким полем вы хотите видеть новое, и найдите это поле в дереве элементов по имени.
Если поле нужно только паре сотрудников, а программировать форму не хочется, попробуйте сначала пользовательскую настройку: в форме элемента Ещё → Изменить форму. В списке доступных полей обычно появляется новый реквизит. Настройка сохранится только у этого пользователя.
Колонка в списке
Чтобы видеть реквизит колонкой в списке справочника, тоже есть два пути:
- 👤 Пользовательский —
Ещё → Изменить формув форме списка и добавление поля. - 🛠 Через расширение — заимствовать форму списка и добавить колонку в динамический список. Если у списка произвольный запрос, поле придётся добавить и в запрос.
Применение расширения и заполнение существующих элементов
Сохранение изменений в базе
Расширение хранится в самой информационной базе. Чтобы изменения вступили в силу:
- Встаньте в дерево расширения.
- Нажмите
Конфигурация → Обновить конфигурацию базы данныхилиF7. Убедитесь, что выбрано именно расширение, а не основная конфигурация. - Платформа покажет изменения структуры: новое поле в таблице справочника. Подтвердите.
- Попросите пользователей перезапустить программу. До перезапуска их сеансы работают со старой структурой.
Если в базе работают люди, платформа может отказать в обновлении и сообщить, что нужно завершить сеансы. Завершайте их только после предупреждения пользователей: несохранённые документы будут потеряны.
Перенос в рабочую базу
На копии: в Конфигураторе, в дереве расширения, Конфигурация → Сохранить конфигурацию в файл. Получится файл .cfe.
В рабочей базе есть два способа загрузки:
| Способ | Где | Когда удобен |
|---|---|---|
| Конфигуратор | Конфигурация → Расширения конфигурации, затем загрузка из файла и F7 | Есть доступ к Конфигуратору, нужен контроль |
| Режим 1С:Предприятие | Администрирование → Печатные формы, отчеты и обработки → Расширения, кнопка добавления из файла | Конфигуратор недоступен, базу ведёт администратор без программиста |
Второй путь есть в конфигурациях на БСП: БП 3.0, ЗУП 3.1, УТ 11. После загрузки программа предложит перезапуск.
Заполнение старых элементов
У всех существующих элементов новое поле пустое. «Значение заполнения» на них не действует: оно срабатывает только при создании нового элемента.
Варианты:
- ✏️ Вручную — если элементов десятки.
- 🧰 Групповое изменение реквизитов — в БП 3.0 и УТ 11:
Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов. Выберите справочник, отберите элементы и задайте значение нового поля. - 💻 Код — если значение вычисляется по правилу. Его можно выполнить во внешней обработке на копии базы.
// Заполнить гарантию 12 месяцев у всех элементов, где она пустая
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа
| И Номенклатура.мр_ГарантияМесяцев = 0";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СпрОбъект = Выборка.Ссылка.ПолучитьОбъект();
СпрОбъект.мр_ГарантияМесяцев = 12;
СпрОбъект.ОбменДанными.Загрузка = Истина;
СпрОбъект.Записать();
КонецЦикла;
Строка ОбменДанными.Загрузка = Истина отключает обработчики записи и проверки типовой конфигурации. Это ускоряет массовое заполнение, но и обходит бизнес-логику. Для простого числового поля это безопасно. Для полей, от которых зависят другие данные, уберите эту строку.
Условие НЕ Номенклатура.ЭтоГруппа нужно только для иерархии с группами. Если у справочника групп нет, удалите его, иначе запрос выдаст ошибку.
Проверка и отладка: если реквизит не появился
После применения откройте любой элемент справочника. Новое поле должно стоять там, куда вы его поместили. Потом проверьте три сценария: создание нового элемента (подставилось ли значение заполнения), запись старого и отбор по полю в списке.
Для отладки кода расширения, например обработчиков формы, подходит обычный отладчик Конфигуратора: точки останова ставят прямо в модулях расширения.
Ещё → Изменить форму и верните стандартные настройки.Где посмотреть, что расширение активно
В режиме 1С:Предприятие на БСП откройте Администрирование → Печатные формы, отчеты и обработки → Расширения. В списке должно быть ваше расширение с включённым флажком активности. В Конфигураторе — список Конфигурация → Расширения конфигурации, колонка «Активно».
Удаление расширения удаляет и данные его реквизитов. Если в поле уже заполнены тысячи значений, перед удалением выгрузите их отчётом или обработкой, иначе восстанавливать придётся из резервной копии.
Частые вопросы
Снимается ли конфигурация с поддержки, если добавить реквизит в расширение?
Можно ли изменить тип или длину существующего реквизита типовой через расширение?
Будет ли новый реквизит доступен в отчётах и запросах?
Номенклатура.мр_ГарантияМесяцев. В отчётах на СКД поле появится в списке доступных полей.