Свои поля в типовом объекте без снятия с поддержки: реквизиты в расширении конфигурации

· 10 мин

Содержание

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

Стандартные реквизиты (Код, Наименование, Номер, Дата, ПометкаУдаления и другие) отдельно добавлять не нужно. Они уже есть у любого справочника или документа и становятся доступны в расширении вместе с заимствованным объектом. Расширение позволяет их использовать: выводить на форму, читать в коде и запросах. Менять их тип и длину нельзя.

Стандартные и собственные реквизиты: что умеет расширение

Путаница начинается со слова «стандартные». В 1С так называют реквизиты, которые платформа создаёт сама для каждого вида объекта. Разработчик их не добавляет и не удаляет.

Вид объектаОсновные стандартные реквизиты
СправочникСсылка, Код, Наименование, Родитель, Владелец, ПометкаУдаления, Предопределенный
ДокументСсылка, Номер, Дата, Проведен, ПометкаУдаления
План видов характеристикСсылка, Код, Наименование, ТипЗначения
Регистр сведенийПериод, Регистратор, Активность (если регистр периодический и подчинён регистратору)

Что можно сделать в расширении с реквизитами:

  • ✅ добавить новый реквизит в заимствованный справочник, документ, план видов характеристик и другие прикладные объекты;
  • ✅ добавить реквизит в заимствованную табличную часть или создать новую табличную часть;
  • ✅ вывести на форму любой стандартный реквизит, который в типовой форме скрыт;
  • ✅ создать в расширении собственный справочник или документ — у него стандартные реквизиты появятся автоматически, а длину кода и номера вы настроите сами;
  • ❌ изменить тип, длину или точность существующего реквизита основной конфигурации;
  • ❌ удалить реквизит основной конфигурации или поменять длину кода типового справочника.

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

Шаг 1. Создаём расширение и заимствуем объект

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

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

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

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

Заимствование объекта

  1. В дереве основной конфигурации найдите объект, например документ РеализацияТоваровУслуг.
  2. Щёлкните по нему правой кнопкой и выберите «Добавить в расширение».
  3. Если расширений несколько, укажите нужное.

Объект появится в дереве расширения со значком заимствования. Внутри будут ветки «Реквизиты», «Табличные части», «Формы». Пока они пустые: заимствуются только сам объект и то, что вы явно добавите.

Работайте на копии базы. Обновление структуры данных при подключении расширения с новыми реквизитами — это реструктуризация, а в большой базе она занимает время и требует, чтобы с объектом никто не работал.

Шаг 2. Добавляем реквизит в расширение и настраиваем его свойства

В дереве расширения раскройте заимствованный объект, выделите ветку «Реквизиты» и нажмите «Добавить» (или клавишу Insert). Откроется палитра свойств нового реквизита.

СвойствоЧто указатьКомментарий
ИмяРасш1_НомерДоговораПоставщикаПрефикс подставится, если включить его в настройках расширения
Синоним«Номер договора поставщика»Это видит пользователь на форме и в отчётах
ТипСтрока, длина 50Для ссылки выберите нужный справочник
Проверка заполнения«Не проверять» или «Выдавать ошибку»Второй вариант не даст записать объект с пустым полем
Индексирование«Индексировать»Только если по полю будут отбирать и искать
ПодсказкаКороткое пояснениеПокажется во всплывающей подсказке на форме

Несколько правил, которые сберегут время позже:

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

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

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

Новый объект в расширении

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

Шаг 3. Выводим реквизит на форму объекта

Сам по себе реквизит на форме не появится: типовые формы управляемые, и элементы в них заданы явно. Есть два способа.

Способ 1. Заимствовать форму и добавить поле мышью

  1. В основной конфигурации раскройте объект → «Формы», щёлкните правой кнопкой по форме документа и выберите «Добавить в расширение».
  2. Откройте заимствованную форму в дереве расширения.
  3. На вкладке «Реквизиты» раскройте реквизит Объект: новый реквизит уже будет в списке.
  4. Перетащите его в нужную группу дерева «Элементы» — например, рядом с полем договора.
  5. Обновите конфигурацию базы данных (F7) и проверьте форму в режиме 1С:Предприятие.

Так же выводят и стандартный реквизит, который в типовой форме не показан. Он тоже есть в списке реквизитов Объект.

Способ 2. Создать поле программно

Этот способ спокойнее переживает обновления типовой конфигурации: форма не заимствуется визуально, меняется только модуль.

&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Поле = Элементы.Добавить("Расш1_НомерДоговораПоставщика", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеВвода;
    Поле.ПутьКДанным = "Объект.Расш1_НомерДоговораПоставщика";

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

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

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

Список и отчёты

Реквизит расширения доступен в запросах так же, как типовой: Документ.РеализацияТоваровУслуг.Расш1_НомерДоговораПоставщика. В формах списков его добавляют через «Еще → Изменить форму» или заимствованием формы списка. В отчётах на СКД поле появится само, если набор данных строится запросом по этому объекту и в запросе есть нужное поле или вся таблица выбирается через *.

Шаг 4. Реквизиты в табличных частях

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

  1. В дереве основной конфигурации раскройте объект → «Табличные части».
  2. Щёлкните правой кнопкой по нужной табличной части, например Товары, и выберите «Добавить в расширение».
  3. В расширении раскройте заимствованную табличную часть и добавьте реквизит в её ветку «Реквизиты».
  4. Нажмите F7.

На форме колонку добавляют в элемент-таблицу. В заимствованной форме найдите таблицу Товары, на вкладке «Реквизиты» раскройте Объект → Товары и перетащите новый реквизит внутрь элемента таблицы. Программно — так же через Элементы.Добавить, но с путём данных Объект.Товары.Расш1_ИмяРеквизита и таблицей в качестве родителя.

ЗадачаГде делатьЧто учесть
Новое поле в строке товаровРеквизит в заимствованной табличной частиПересчёт строк типовым кодом поле не заполнит — пишите свой обработчик
Отдельный список строкНовая табличная часть в заимствованном объектеНа форму её выводят новым элементом-таблицей
Числовое поле с итогомРеквизит в заимствованной табличной частиИтог в подвале таблицы настраивают в свойствах колонки на форме

Типовые формы часто заполняют табличную часть кодом: подбором, заполнением по основанию, загрузкой из файла. Ваша колонка в этих сценариях останется пустой. Если значение важно, допишите заполнение в обработчики с &После.

Шаг 5. Права доступа и роли для нового реквизита

Реквизит в базе есть, на форме он виден администратору, а пользователь его не видит или не может изменить. Это почти всегда права.

Как работают права на реквизиты расширения

Права на реквизиты задаются в ролях. У ролей основной конфигурации есть флажок «Устанавливать права для реквизитов и табличных частей по умолчанию». Если он включён, новый реквизит получает те же права, что и сам объект, и всё работает сразу. Если выключен, права на новый реквизит не выдаются.

Что делать во втором случае:

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

Для нового объекта, созданного в расширении, прав нет ни у одной типовой роли. Здесь удобнее создать в расширении собственную роль, например Расш1_РаботаСДоговорамиПоставщиков, и выдать её пользователям.

Конфигурации на БСП

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

Если в типовой роли есть ограничения на уровне записей, они действуют на весь объект, включая ваш реквизит. Отдельно ограничивать реквизит расширения не нужно.

Шаг 6. Регистрация изменений и обмен данными

Это место, где доработки чаще всего ломаются незаметно: поле работает в одной базе, но не доходит до другой.

Распределённая информационная база (РИБ)

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

Обмены через EnterpriseData и Конвертацию данных 3

В формат EnterpriseData реквизиты расширения автоматически не попадают. Чтобы передать поле в другую программу, нужно:

  • 🔸 заимствовать модуль менеджера обмена той конфигурации, из которой идёт выгрузка, и дописать обработчик отправки данных с &После;
  • 🔸 сделать то же на принимающей стороне в обработчике получения;
  • 🔸 договориться о месте в сообщении: либо через расширение формата, либо через поле дополнительной информации, если формат его предусматривает.

Без доработки обеих сторон поле просто не дойдёт. Ошибки при этом не будет — это и коварно.

Правила регистрации

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

Ошибки при добавлении реквизитов в расширение

Вместо пересказа шагов — частые симптомы и их причины.

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

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

Можно ли добавить реквизит в расширение без Конфигуратора?
Нет. Расширение с реквизитами создают в Конфигураторе или в 1С:EDT. Готовый файл .cfe уже можно подключить в пользовательском режиме через Администрирование → Печатные формы, отчеты и обработки → Расширения.
Нужно ли снимать конфигурацию с поддержки?
Нет. Расширение для того и существует, чтобы дорабатывать типовую конфигурацию без снятия с поддержки. Обновления устанавливаются как обычно.
Сохранятся ли значения реквизитов при обновлении типовой конфигурации?
Да, если расширение после обновления продолжает применяться. Значения лежат в отдельных таблицах расширения и обновлением основной конфигурации не затрагиваются.
Можно ли сделать реквизит расширения обязательным к заполнению?
Да. Поставьте свойству «Проверка заполнения» значение «Выдавать ошибку». Документ с пустым полем не запишется, а пользователь увидит сообщение.
Как перенести реквизит из расширения в основную конфигурацию?
Добавьте такой же реквизит в конфигурацию, перенесите значения обработкой, затем удалите реквизит из расширения. Прямого переноса с сохранением данных платформа не делает.