При разработке в среде 1С:ERP Управление предприятием 2.4 (и других конфигурациях на базе БСП) программисты часто сталкиваются с ситуацией: в конфигураторе создан новый предопределенный элемент справочника РолиИсполнителей, но при попытке выбрать его в режиме «1С:Предприятие» (например, в регистре сведений ИсполнителиЗадач) элемент просто отсутствует в списке. При этом другие, «старые» предопределенные элементы видны и доступны для выбора.
Давайте разберем, почему так происходит, проанализируем логику работы типового решения и выясним, какие шаги необходимо предпринять, чтобы новая роль появилась в интерфейсе.
В современных версиях платформы 1С:Предприятие 8.3 создание элемента в дереве метаданных конфигуратора не гарантирует его автоматическое и корректное появление в базе данных. Существует свойство «Обновление предопределенных данных», которое может быть установлено в значение «Автоматически», «Не обновлять» или «Программно».
Если в вашей конфигурации этот процесс управляется программно (что характерно для ERP), платформе нужно «помочь» синхронизировать метаданные с данными в таблицах SQL. Первым делом попробуем запустить информационную базу с параметром обновления:
/c ЗапуститьОбновлениеИнформационнойБазы
Этот параметр инициирует процедуры обработки обновления, заложенные в БСП, что может решить проблему «первоначального появления» записи.
Самая частая причина «невидимости» роли кроется не в отсутствии записи в базе, а в том, что форма выбора или форма списка накладывает жесткие фильтры. В 1С:ERP справочник РолиИсполнителей работает в связке с подсистемой бизнес-процессов. Проанализируем запрос, который обычно используется в форме списка этого справочника:
ВЫБРАТЬ
СправочникРолиИсполнителей.Ссылка,
СправочникРолиИсполнителей.Наименование,
СправочникРолиИсполнителей.ИспользуетсяБезОбъектовАдресации,
СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации
ИЗ
Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей
ПО РолиИсполнителейНазначение.Ссылка = СправочникРолиИсполнителей.Ссылка
ГДЕ
РолиИсполнителейНазначение.ТипПользователей = Значение(Справочник.Пользователи.ПустаяСсылка)
Как мы видим, выборка данных происходит из табличной части Назначение. Если вы создали предопределенный элемент только в конфигураторе, его табличная часть в базе данных будет пустой. Следовательно, внутреннее соединение (или ГДЕ по условию на ТЧ) просто отсекает вашу новую роль из результата запроса. Система «считает», что если назначение роли не определено, то и показывать её пользователю не нужно.
Для корректной работы механизмов адресации задач в ERP роль должна иметь четкие признаки того, как она используется. Рассмотрим важные реквизиты, которые должны быть заполнены:
Истина, если роль является простой (например, «Главный бухгалтер» в целом по компании).Если эти реквизиты не заполнены, роль может не пройти валидацию в программных модулях БСП при попытке записи в регистр ИсполнителиЗадач.
Чтобы новая роль гарантированно появилась в списке, выполним следующие действия:
Справочники.РолиИсполнителей.ОбновитьПредопределенныеДанные();
ОбъектРоли = Справочники.РолиИсполнителей.ВашаНоваяРоль.ПолучитьОбъект();
Если ОбъектРоли.Назначение.Количество() = 0 Тогда
НоваяСтрока = ОбъектРоли.Назначение.Добавить();
НоваяСтрока.ТипПользователей = Справочники.Пользователи.ПустаяСсылка();
ОбъектРоли.ИспользуетсяБезОбъектовАдресации = Истина;
ОбъектРоли.Записать();
КонецЕсли;
ТипПользователей в контексте ERP означает, что роль предназначена для обычных (внутренних) пользователей системы.
ИмяПредопределенныхДанных. Если он пуст у элемента в базе, воспользуемся методом:
УстановитьСоответствиеОбъектаИПредопределенногоЗначения().
При работе с ERP 2.4 и справочником РолиИсполнителей важно помнить, что предопределенный элемент — это лишь «заготовка». Чтобы система «увидела» его в бизнес-процессах и задачах, необходимо обеспечить наличие записи в табличной части Назначение и правильно выставить флаги использования объектов адресации. Без этих данных типовые запросы в формах выбора будут игнорировать ваш новый элемент.