Разработка и Конфигурация · 11 мин
Как добавить стандартные реквизиты в расширение 1С
Как добавить стандартные и собственные реквизиты в расширение 1С: заимствование объектов, ограничения платформы, типичные ошибки и проверка результата.
Расширения конфигурации в 1С позволяют дорабатывать типовые решения без снятия их с поддержки, и одна из самых частых задач — добавить к объекту дополнительные реквизиты. При этом у разработчиков регулярно возникает путаница: одно дело — добавить собственный реквизит к заимствованному объекту, и совсем другое — изменить или добавить стандартные реквизиты, которые платформа создаёт автоматически (Код, Наименование, Ссылка, ПометкаУдаления и другие).
Ключевое ограничение, которое нужно понять сразу: стандартные реквизиты формируются платформой, а не конфигурацией. Добавить новый стандартный реквизит к объекту через расширение нельзя — платформа этого не позволяет ни в расширении, ни в основной конфигурации. Зато можно заимствовать объект вместе с его стандартными реквизитами, изменить некоторые их свойства (например, длину наименования — только если это разрешено для конкретного объекта) и добавить собственные реквизиты, которые будут храниться в расширении.
Ниже разобрано, что именно можно сделать с реквизитами через расширение, как правильно заимствовать объект, какие ограничения проверит платформа и как убедиться, что доработка работает без обновления основной конфигурации.
Что такое стандартные реквизиты и почему их нельзя добавить
Стандартные реквизиты — это служебные поля, которые платформа автоматически создаёт для каждого объекта метаданных: Ссылка, Код, Наименование, ПометкаУдаления, Предопределенный для справочников; Номер, Дата, Проведен для документов и так далее. Их состав жёстко определён платформой для каждого типа объекта, и разработчик не может ни удалить их, ни добавить новые.
Это ограничение действует одинаково и для основной конфигурации, и для расширения. Если в дереве конфигурации вы не видите команды «добавить стандартный реквизит» — это не недостаток расширения, а принципиальное устройство платформы. Поэтому, когда в задаче звучит «добавить стандартные реквизиты в расширение», на практике обычно имеется в виду одно из трёх: заимствовать объект со стандартными реквизитами, изменить свойства стандартного реквизита или добавить собственный реквизит, который будет вести себя как обычный реквизит объекта.
Заимствование объекта со стандартными реквизитами
Чтобы работать с реквизитами объекта в расширении, сначала нужно заимствовать сам объект. Откройте расширение в конфигураторе, найдите в основной конфигурации нужный справочник или документ, щёлкните по нему правой кнопкой и выберите «Добавить в расширение». Объект появится в дереве расширения со значком заимствования.
После заимствования платформа автоматически подтянет обязательные элементы объекта, включая стандартные реквизиты — они будут видны в палитре свойств и доступны в коде расширения. Если нужно работать с конкретными типовыми (нестандартными) реквизитами, их тоже следует заимствовать: в свойствах заимствованного объекта откройте состав и отметьте нужные реквизиты, либо добавьте их через контекстное меню.
- 1Создайте новое расширение: Конфигурация → Расширения конфигурации → Создать, задайте имя, префикс и безопасный режим
- 2Найдите в основной конфигурации нужный объект (справочник или документ)
- 3Правой кнопкой по объекту → Добавить в расширение
- 4В свойствах заимствованного объекта проверьте состав заимствованных реквизитов и дозаимствуйте нужные
- 5Обновите конфигурацию базы данных (F7) и проверьте объект в режиме предприятия
Добавление собственных реквизитов через расширение
Собственные реквизиты — основной рабочий сценарий. В заимствованном объекте вызовите контекстное меню на ветке «Реквизиты» и выберите «Добавить». Имя реквизита автоматически получит префикс расширения, чтобы исключить конфликт имён с будущими обновлениями типовой конфигурации. Далее задайте тип, длину, признаки индексирования и другие свойства — всё как в обычной конфигурации.
Такие реквизиты физически хранятся в тех же таблицах базы данных, что и типовые, но принадлежат расширению. При отключении расширения платформа скроет эти реквизиты, а при удалении расширения с очисткой данных — удалит их вместе со значениями. Это важно учитывать: данные, введённые в реквизиты расширения, зависят от жизненного цикла самого расширения.
Добавленный реквизит можно вывести на заимствованную форму, использовать в запросах, отчётах, подписках на события и коде расширения. Ограничение: реквизиты расширения не участвуют в типовых обменах и синхронизациях, если план обмена не доработан отдельно.
Изменение свойств стандартных реквизитов
Изменить состав стандартных реквизитов нельзя, но некоторые их свойства платформа позволяет переопределить в расширении. Классический пример — увеличение длины наименования справочника, когда типовых 100 или 150 символов не хватает. Для этого заимствуется объект, в его свойствах меняется значение «Длина наименования», после чего выполняется обновление конфигурации базы данных с реструктуризацией.
Доступность изменений зависит от конкретного свойства и объекта. Часть свойств платформа блокирует для расширений: например, нельзя уменьшать длину строковых реквизитов ниже типового значения, нельзя менять тип стандартного реквизита, нельзя отключать иерархию или вид документа. Если свойство недоступно для редактирования в расширении, конфигуратор покажет это явно — поле будет заблокировано или изменение не пройдёт проверку.
После изменения длины реквизита обязательно проверьте смежные места: типовые формы, печатные макеты, отчёты и обмены могут быть рассчитаны на старую длину и обрезать значения при выводе, даже если в базе данные хранятся полностью.
Работа с реквизитами расширения в формах и коде
Чтобы пользователи увидели добавленный реквизит, заимствуйте форму объекта и перетащите реквизит из дерева реквизитов формы в дерево элементов. Реквизиты расширения отображаются в списке реквизитов формы с префиксом. При заимствовании формы старайтесь менять минимум: чем меньше изменений в заимствованной форме, тем меньше конфликтов при обновлении типовой конфигурации.
В коде расширения обращение к собственным реквизитам ничем не отличается от обычного: через точку у объекта, в запросах — по имени поля. Стандартные реквизиты доступны аналогично: Наименование, Код, Номер, Дата. Если код основной конфигурации должен учитывать реквизит расширения, используйте аннотации «ИзменениеИКонтроль» для заимствованных методов — это позволит платформе контролировать применимость расширения после обновлений.
Используйте аннотацию «ИзменениеИКонтроль» вместо «Вместо» для заимствованных процедур и функций. Тогда при обновлении типовой конфигурации платформа сама покажет, что контролируемый метод изменился, и вы сможете вовремя скорректировать расширение, а не ловить ошибки у пользователей.
Ограничения и типичные ошибки
Расширения имеют ряд принципиальных ограничений по работе с реквизитами. Нельзя добавлять реквизиты к объектам, которые расширения не поддерживают (например, к планам обмена в ряде режимов совместимости). Нельзя изменять тип заимствованного реквизита. Нельзя добавлять измерения и ресурсы к некоторым регистрам без ограничений — состав расширяемых объектов зависит от версии платформы и режима совместимости конфигурации.
Ещё одна группа проблем связана с обновлением типовой конфигурации. Если в новом релизе поставщик добавил реквизит с именем, совпадающим с вашим (без учёта префикса конфликтов не будет, но логика может задваиваться), или изменил структуру объекта, расширение может стать неприменимым. Платформа при обновлении выполняет проверку применимости и сообщит о конфликтах, но лучше контролировать это заранее на копии базы.
Проверка результата и применимость расширения
После обновления конфигурации базы данных проверьте результат в режиме предприятия: откройте объект, убедитесь, что новый реквизит отображается на форме, сохраняется и доступен в списке. Дополнительно проверьте запросом или отчётом, что данные реально записываются в базу.
Для контроля применимости используйте команду «Проверка применимости» в окне расширений конфигурации. Она покажет, совместимо ли расширение с текущим состоянием основной конфигурации. Эту проверку стоит выполнять после каждого обновления типового релиза.
Как проверить результат
Реквизит виден, редактируется и сохраняется
Реквизита нет на форме или значение не сохраняется после записи
Запрос к объекту возвращает значения нового реквизита
Запрос выдаёт ошибку о несуществующем поле — расширение не применено
Расширение применимо, ошибок нет
Сообщения о конфликтах после обновления типовой конфигурации
Часто задаваемые вопросы
Можно ли через расширение добавить новый стандартный реквизит, например ещё одно поле «Код»?
Нет. Состав стандартных реквизитов определяется платформой и одинаков для всех конфигураций. Если нужно дополнительное поле, добавьте собственный реквизит через расширение — функционально он будет работать как обычный реквизит объекта.
Почему добавленный в расширении реквизит не виден пользователям?
Чаще всего реквизит не выведен на форму: наличие реквизита в метаданных не добавляет его на форму автоматически. Заимствуйте форму и разместите реквизит вручную. Также проверьте, что расширение активно и применено, а у пользователя нет ограничений по правам.
Что произойдёт с данными в реквизитах расширения при обновлении типовой конфигурации?
Само по себе обновление типовой конфигурации данные реквизитов расширения не удаляет. Риск возникает, если расширение стало неприменимым и его отключили, либо если расширение удалили с очисткой данных. Перед обновлением проверяйте применимость на копии базы.
Можно ли изменить длину стандартного наименования справочника через расширение?
Да, увеличение длины наименования — поддерживаемый сценарий для многих объектов. Заимствуйте справочник, измените свойство «Длина наименования» и выполните обновление конфигурации базы данных. Уменьшать длину ниже типового значения нельзя. Операция вызывает реструктуризацию, поэтому требует резервной копии.
Передаются ли реквизиты расширения при обмене между базами?
Типовые планы обмена не знают о реквизитах расширения и не передают их. Чтобы данные участвовали в обмене, нужно доработать правила обмена или состав плана обмена — как правило, это отдельная задача, выходящая за рамки простого расширения.
Расширение перестало применяться после обновления релиза. Что делать?
Откройте расширение в конфигураторе и выполните проверку применимости — платформа укажет конфликтующие объекты. Обычно проблема в изменённых типовых формах или методах, заимствованных без контроля. Синхронизируйте заимствованные элементы с новым релизом и обновите расширение в базе.
Что важно запомнить
Новые стандартные реквизиты добавить нельзя — их состав фиксирован платформой. Рабочий сценарий: заимствовать объект в расширение, добавить собственные реквизиты и при необходимости изменить разрешённые свойства стандартных (например, длину наименования). Перед реструктуризацией делайте резервную копию, после обновлений типового релиза проверяйте применимость расширения.