Зачем в расширение 1С добавляются отдельные измерения и ресурсы регистра без кода?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Рассмотрим весьма распространенную ситуацию при разработке и аудите конфигураций 1С. Вы открываете чужое или старое расширение с типом «Адаптация» и видите, что в дерево метаданных добавлены отдельные измерения, ресурсы и реквизиты какого-либо РегистрНакопления. При этом модуль менеджера регистра и модуль набора записей в расширении абсолютно чистые. Возникает логичный вопрос: для чего разработчик добавил эти элементы, если программный код для них отсутствует?

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

1. Автоматическое заимствование при добавлении форм (и последствия "лени")

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

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

2. Полноценная работа Конструктора запросов

Рассмотрим подробнее работу с запросами. Конструктор запросов в Конфигураторе «видит» только те объекты и их поля, которые физически присутствуют в дереве расширения. Если нам необходимо написать или отредактировать запрос к таблице регистра (например, в модуле объекта документа или в обработке), и поля не будут заимствованы, Конструктор при открытии такого текста запроса просто сломается, выдаст ошибку или не покажет нужные поля для визуального редактирования.

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

3. Обход ошибок синтаксического контроля платформы

Посмотрим на пример работы с кодом в общих модулях или модулях документов. Если в расширении пишется код, который напрямую обращается к конкретному измерению или ресурсу регистра, Конфигуратор при проверке синтаксиса выдаст ошибку «Переменная не определена», если это поле не добавлено в само расширение.


// Пример кода в модуле документа расширения
Движение = Движения.НашРегистр.Добавить();
Движение.Период = Дата;
// Если измерение Номенклатура не заимствовано, проверка синтаксиса выдаст ошибку
Движение.Номенклатура = СтрокаТаблицы.Номенклатура; 

Хотя в пользовательском режиме (1С:Предприятие) этот код отработал бы без ошибок, так как там основная конфигурация и расширение сливаются воедино, разработчики заимствуют нужные поля просто чтобы код проходил строгую проверку в конфигураторе и стабильно работала контекстная подсказка (IntelliSense).

4. Настройка прав доступа и создание новых ролей

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

Если поле не заимствовано, разработчик просто не увидит его в матрице настройки прав доступа для новой роли. Это еще одна веская причина, по которой мы можем наблюдать одинокие реквизиты регистра без какого-либо программного кода в модулях.

5. Перенос кода из других баз и технические ограничения

Наконец, разработчики могут переносить готовые блоки кода или сложные запросы из другой конфигурации без переделки. Чтобы перенесенный код быстро скомпилировался и заработал в текущей базе через расширение, они просто "прокликивают" и заимствуют все сущности, на которые этот код ссылается.

Важно помнить технические ограничения платформы: изменять структуру типовых регистров накопления (добавлять туда новые измерения) платформа 1С строго не рекомендует. В расширениях допускается создание полностью новых регистров, но если вы видите в расширении поля типового регистра — это именно заимствованные (уже существующие в базе) реквизиты, добавленные туда исключительно ради связности метаданных в конфигураторе.

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

← На главную