Свои поля в типовом объекте без снятия с поддержки: реквизиты в расширении конфигурации
Содержание
Чтобы добавить реквизит
в расширение 1С, откройте Конфигурация → Расширения конфигурации в Конфигураторе, заимствуйте нужный объект командой «Добавить в расширение», а затем в дереве расширения создайте реквизит в ветке «Реквизиты» этого объекта. После этого нажмите F7, чтобы обновить конфигурацию
базы данных, и выведите поле на форму. Основную конфигурацию при этом не трогают и с поддержки не снимают. Нужна платформа с номером не ниже 8.3.11 — именно с этого релиза в заимствованные объекты можно добавлять свои реквизиты и табличные части.
Стандартные реквизиты (Код, Наименование, Номер, Дата, ПометкаУдаления и другие) отдельно добавлять не нужно. Они уже есть у любого справочника или документа и становятся доступны в расширении вместе с заимствованным объектом. Расширение позволяет их использовать: выводить на форму, читать в коде и запросах. Менять их тип и длину нельзя.
Стандартные и собственные реквизиты: что умеет расширение
Путаница начинается со слова «стандартные». В 1С так называют реквизиты, которые платформа создаёт сама для каждого вида объекта. Разработчик их не добавляет и не удаляет.
| Вид объекта | Основные стандартные реквизиты |
|---|---|
| Справочник | Ссылка, Код, Наименование, Родитель, Владелец, ПометкаУдаления, Предопределенный |
| Документ | Ссылка, Номер, Дата, Проведен, ПометкаУдаления |
| План видов характеристик | Ссылка, Код, Наименование, ТипЗначения |
| Регистр сведений | Период, Регистратор, Активность (если регистр периодический и подчинён регистратору) |
Что можно сделать в расширении с реквизитами:
- ✅ добавить новый реквизит в заимствованный справочник, документ, план видов характеристик и другие прикладные объекты;
- ✅ добавить реквизит в заимствованную табличную часть или создать новую табличную часть;
- ✅ вывести на форму любой стандартный реквизит, который в типовой форме скрыт;
- ✅ создать в расширении собственный справочник или документ — у него стандартные реквизиты появятся автоматически, а длину кода и номера вы настроите сами;
- ❌ изменить тип, длину или точность существующего реквизита основной конфигурации;
- ❌ удалить реквизит основной конфигурации или поменять длину кода типового справочника.
Если задача звучит как «удлинить код справочника» или «поменять тип реквизита», расширение её не решит. Это изменение структуры основных таблиц, и делается оно только в самой конфигурации.
Шаг 1. Создаём расширение и заимствуем объект
Расширение создаётся один раз, дальше в него добавляют всё новое. Если у вас уже есть рабочее расширение для доработок, используйте его.
Создание расширения
- Откройте базу в Конфигураторе и, если основная конфигурация ещё не открыта, выберите
Конфигурация → Открыть конфигурацию. - Перейдите в
Конфигурация → Расширения конфигурациии нажмите «Добавить». - В окне свойств заполните имя, например
ДоработкиКомпании, синоним и префикс имён, напримерРасш1_. - Выберите назначение: «Исправление», «Адаптация» или «Дополнение». Для своих полей учёта обычно выбирают «Адаптация» или «Дополнение».
- Откройте дерево расширения двойным щелчком по строке в списке.
Префикс решает практическую проблему. Если в следующем релизе типовой конфигурации появится реквизит с тем же именем, без префикса возникнет конфликт имён, и расширение перестанет применяться. С префиксом Расш1_ такого не случится.
Заимствование объекта
- В дереве основной конфигурации найдите объект, например документ
РеализацияТоваровУслуг. - Щёлкните по нему правой кнопкой и выберите «Добавить в расширение».
- Если расширений несколько, укажите нужное.
Объект появится в дереве расширения со значком заимствования. Внутри будут ветки «Реквизиты», «Табличные части», «Формы». Пока они пустые: заимствуются только сам объект и то, что вы явно добавите.
Работайте на копии базы. Обновление структуры данных при подключении расширения с новыми реквизитами — это реструктуризация, а в большой базе она занимает время и требует, чтобы с объектом никто не работал.
Шаг 2. Добавляем реквизит в расширение и настраиваем его свойства
В дереве расширения раскройте заимствованный объект, выделите ветку «Реквизиты» и нажмите «Добавить» (или клавишу Insert). Откроется палитра свойств нового реквизита.
| Свойство | Что указать | Комментарий |
|---|---|---|
| Имя | Расш1_НомерДоговораПоставщика | Префикс подставится, если включить его в настройках расширения |
| Синоним | «Номер договора поставщика» | Это видит пользователь на форме и в отчётах |
| Тип | Строка, длина 50 | Для ссылки выберите нужный справочник |
| Проверка заполнения | «Не проверять» или «Выдавать ошибку» | Второй вариант не даст записать объект с пустым полем |
| Индексирование | «Индексировать» | Только если по полю будут отбирать и искать |
| Подсказка | Короткое пояснение | Покажется во всплывающей подсказке на форме |
Несколько правил, которые сберегут время позже:
- 🔹 строку неограниченной длины не ставьте без нужды: по ней неудобно отбирать и сортировать, а в запросах её приходится приводить к типу;
- 🔹 составной тип допустим, но каждый лишний тип усложняет запросы и отчёты;
- 🔹 индекс добавляйте только под реальный поиск — каждый индекс замедляет запись объекта;
- 🔹 значение по умолчанию лучше задавать кодом в обработчике
ПриЗаполнениимодуля объекта, чем полагаться на пользователя.
Когда свойства заданы, выделите дерево расширения и нажмите F7 (Обновить конфигурацию базы данных). Платформа покажет список изменений структуры: появится новая таблица для данных расширения. Данные реквизитов расширения хранятся в отдельных таблицах базы, а не в основной таблице объекта. Поэтому отключение расширения не портит типовые данные.
Удаление реквизита из расширения удаляет и все значения, которые в нём хранились. Перед этим выгрузите данные, если они нужны.
Новый объект в расширении
Если нужен не реквизит, а целый справочник, создайте его в ветке «Справочники» самого расширения. Стандартные реквизиты появятся сразу. На вкладке «Данные» задайте длину кода и наименования, тип кода, а для документа — длину и тип номера. Здесь эти настройки менять можно, потому что объект целиком принадлежит расширению.
Шаг 3. Выводим реквизит на форму объекта
Сам по себе реквизит на форме не появится: типовые формы управляемые, и элементы в них заданы явно. Есть два способа.
Способ 1. Заимствовать форму и добавить поле мышью
- В основной конфигурации раскройте объект → «Формы», щёлкните правой кнопкой по форме документа и выберите «Добавить в расширение».
- Откройте заимствованную форму в дереве расширения.
- На вкладке «Реквизиты» раскройте реквизит
Объект: новый реквизит уже будет в списке. - Перетащите его в нужную группу дерева «Элементы» — например, рядом с полем договора.
- Обновите конфигурацию базы данных (F7) и проверьте форму в режиме 1С:Предприятие.
Так же выводят и стандартный реквизит, который в типовой форме не показан. Он тоже есть в списке реквизитов Объект.
Способ 2. Создать поле программно
Этот способ спокойнее переживает обновления типовой конфигурации: форма не заимствуется визуально, меняется только модуль.
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Поле = Элементы.Добавить("Расш1_НомерДоговораПоставщика", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "Объект.Расш1_НомерДоговораПоставщика";
КонецПроцедуры
Аннотация &После означает, что ваш код выполнится после типового обработчика ПриСозданииНаСервере. Без указания родителя поле встанет в конец формы. Чтобы поставить его в конкретную группу, передайте третьим параметром нужную группу из коллекции Элементы — её имя посмотрите в дереве элементов заимствованной формы.
Форму всё равно придётся заимствовать, чтобы появился модуль формы в расширении. Но элементы в ней при программном способе вы не трогаете, и при обновлении типовой формы конфликтов меньше.
Список и отчёты
Реквизит расширения доступен в запросах так же, как типовой: Документ.РеализацияТоваровУслуг.Расш1_НомерДоговораПоставщика. В формах списков его добавляют через «Еще → Изменить форму» или заимствованием формы списка. В отчётах на СКД поле появится само, если набор данных строится запросом по этому объекту и в запросе есть нужное поле или вся таблица выбирается через *.
Шаг 4. Реквизиты в табличных частях
С табличными частями порядок тот же, но есть нюанс: сначала заимствуется сама табличная часть.
- В дереве основной конфигурации раскройте объект → «Табличные части».
- Щёлкните правой кнопкой по нужной табличной части, например
Товары, и выберите «Добавить в расширение». - В расширении раскройте заимствованную табличную часть и добавьте реквизит в её ветку «Реквизиты».
- Нажмите F7.
На форме колонку добавляют в элемент-таблицу. В заимствованной форме найдите таблицу Товары, на вкладке «Реквизиты» раскройте Объект → Товары и перетащите новый реквизит внутрь элемента таблицы. Программно — так же через Элементы.Добавить, но с путём данных Объект.Товары.Расш1_ИмяРеквизита и таблицей в качестве родителя.
| Задача | Где делать | Что учесть |
|---|---|---|
| Новое поле в строке товаров | Реквизит в заимствованной табличной части | Пересчёт строк типовым кодом поле не заполнит — пишите свой обработчик |
| Отдельный список строк | Новая табличная часть в заимствованном объекте | На форму её выводят новым элементом-таблицей |
| Числовое поле с итогом | Реквизит в заимствованной табличной части | Итог в подвале таблицы настраивают в свойствах колонки на форме |
Типовые формы часто заполняют табличную часть кодом: подбором, заполнением по основанию, загрузкой из файла. Ваша колонка в этих сценариях останется пустой. Если значение важно, допишите заполнение в обработчики с &После.
Шаг 5. Права доступа и роли для нового реквизита
Реквизит в базе есть, на форме он виден администратору, а пользователь его не видит или не может изменить. Это почти всегда права.
Как работают права на реквизиты расширения
Права на реквизиты задаются в ролях. У ролей основной конфигурации есть флажок «Устанавливать права для реквизитов и табличных частей по умолчанию». Если он включён, новый реквизит получает те же права, что и сам объект, и всё работает сразу. Если выключен, права на новый реквизит не выдаются.
Что делать во втором случае:
- В основной конфигурации раскройте «Общие → Роли», щёлкните правой кнопкой по нужной роли и выберите «Добавить в расширение».
- Откройте заимствованную роль в расширении.
- Найдите объект, раскройте его реквизиты и отметьте права «Просмотр» и «Редактирование» для своего реквизита.
- Обновите конфигурацию базы данных.
Для нового объекта, созданного в расширении, прав нет ни у одной типовой роли. Здесь удобнее создать в расширении собственную роль, например Расш1_РаботаСДоговорамиПоставщиков, и выдать её пользователям.
Конфигурации на БСП
В типовых конфигурациях роли пользователям напрямую не назначают — работают профили групп доступа. Роль из расширения появится в списке ролей профиля в Администрирование → Настройки пользователей и прав → Профили групп доступа. Включите её в нужный профиль или создайте новый профиль.
Если в типовой роли есть ограничения на уровне записей, они действуют на весь объект, включая ваш реквизит. Отдельно ограничивать реквизит расширения не нужно.
Шаг 6. Регистрация изменений и обмен данными
Это место, где доработки чаще всего ломаются незаметно: поле работает в одной базе, но не доходит до другой.
Распределённая информационная база (РИБ)
В РИБ данные реквизитов расширения передаются вместе с объектом, если расширение установлено и в главном, и в подчинённых узлах. Само расширение может передаваться по РИБ, если у него включено свойство использования в распределённой информационной базе. Если расширение ставили вручную в каждый узел, следите, чтобы версии совпадали: при разной структуре загрузка сообщения обмена завершится ошибкой.
Обмены через EnterpriseData и Конвертацию данных 3
В формат EnterpriseData реквизиты расширения автоматически не попадают. Чтобы передать поле в другую программу, нужно:
- 🔸 заимствовать модуль менеджера обмена той конфигурации, из которой идёт выгрузка, и дописать обработчик отправки данных с
&После; - 🔸 сделать то же на принимающей стороне в обработчике получения;
- 🔸 договориться о месте в сообщении: либо через расширение формата, либо через поле дополнительной информации, если формат его предусматривает.
Без доработки обеих сторон поле просто не дойдёт. Ошибки при этом не будет — это и коварно.
Правила регистрации
Объект регистрируется к выгрузке при записи целиком, поэтому изменение одного вашего реквизита обычно тоже ставит объект в очередь. Исключение — узлы, где регистрация настроена по составу реквизитов. В таких правилах учитываются только перечисленные поля, и правка только реквизита расширения может не вызвать регистрацию. Проверить просто: измените только новое поле, запишите объект и посмотрите состав изменений к отправке в настройках синхронизации.
Ошибки при добавлении реквизитов в расширение
Вместо пересказа шагов — частые симптомы и их причины.
Частые вопросы
Можно ли добавить реквизит в расширение без Конфигуратора?
.cfe уже можно подключить в пользовательском режиме через Администрирование → Печатные формы, отчеты и обработки → Расширения.