При работе с крупными корпоративными системами на базе 1С:ERP 2.5 программисты часто сталкиваются с жесткой политикой сопровождения. Типичная ситуация: необходимо добавить справочник или документ в конкретный раздел интерфейса, но регламент компании запрещает создавать новые расширения («чтобы не плодить сущности») и категорически запрещает снимать объекты метаданных с поддержки (оставляя их на «замке»).
В этой статье мы разберем, как решить задачу вывода подразделов и команд в интерфейс, используя штатные механизмы БСП (Библиотеки стандартных подсистем) и возможности платформы «1С:Предприятие 8.3», не нарушая целостность типовой конфигурации.
Традиционно для изменения состава подсистем используется либо прямое редактирование дерева конфигурации, либо механизм расширений. Однако, если мы ограничены «замком» на объектах, мы не можем добавить наш справочник в состав подсистемы в окне метаданных. Многие надеются на модули типа МодификацияКонфигурацииПереопределяемый, но здесь важно понимать ограничение платформы: структура командного интерфейса (дерево подсистем) формируется на этапе компиляции конфигурации. Динамически «впрыснуть» новый справочник в корень подсистемы через программный код в рантайме невозможно, так как это структурное изменение метаданных.
Тем не менее, существуют обходные пути, которые позволяют добиться нужного визуального результата для пользователя.
Это самый «чистый» способ с точки зрения методологии 1С. Если нам нужно предоставить доступ к объекту, мы можем создать внешнюю обработку, которая будет открывать нужный нам справочник или выполнять команду.
Рассмотрим алгоритм действий:
СведенияОВнешнейОбработке() укажем тип ДополнительнаяОбработка.Проанализируем результат: команда появится в подразделе «Дополнительные обработки» выбранной подсистемы. Это полностью соответствует политике «без расширений», хотя и требует от пользователя лишнего клика для перехода в группу дополнительных команд.
Если пользователю нужен быстрый доступ к справочнику, мы можем принудительно добавить ссылку на этот объект в панель «Избранное» при первом входе пользователя в систему. Для этого как раз подходят переопределяемые модули, которые обычно открыты для редактирования даже в строгих конфигурациях.
Разберем пример кода, который можно разместить, например, в модуле ПриНачалеРаботыСистемы (или аналогичном переопределяемом месте, доступном в вашей версии ERP):
// Программное добавление ссылки в избранное пользователю
СсылкаНаСправочник = Справочники.ИмяВашегоСправочника.ПолучитьСсылку();
ТекстСсылки = "Открыть справочник (Спец. раздел)";
ПользовательскиеНастройки = ХранилищеОбщихНастроек.Загрузить("Общее/ПанельИзбранного", "");
// Здесь выполняется логика анализа текущих настроек и добавления новой ссылки
// с использованием метода ХранилищеОбщихНастроек.Сохранить()
Этот метод позволяет «подсунуть» пользователю нужный инструмент прямо перед глазами, не меняя структуру подсистем в метаданных.
Часто бывает так, что объект уже включен в состав подсистемы разработчиками 1С, но он скрыт по умолчанию или выключен функциональной опцией. Проанализируем ситуацию:
Выясним, чем нам может помочь этот модуль. В ERP 2.5 он предназначен для изменения поведения форм и логики объектов. Хотя он не добавит новый элемент в дерево подсистем, через него можно управлять видимостью существующих команд.
Если ваша задача — сделать так, чтобы штатная команда вела себя иначе или открывала другой список, вы можете перехватить создание формы в этом модуле:
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
Если Форма.ИмяФормы = "Справочник.ТиповойСправочник.ФормаСписка" Тогда
// Логика подмены или модификации
КонецЕсли;
КонецПроцедуры
Нужно различать «Снятие с поддержки» и «Включение возможности изменения». Как верно подмечено в обсуждении, включение возможности изменения с сохранением поддержки (объекты остаются на «замке», но правила разрешают редактирование) — это штатный режим работы. Если политика компании запрещает только снятие (когда значок кубика пропадает), то включение редактирования для общей команды или подсистемы может быть допустимым компромиссом.
Однако, если «замок» должен быть абсолютным, то единственными рабочими вариантами остаются Внешние обработки (БСП) и Индивидуальные настройки интерфейса пользователей через хранилище настроек.
Рассмотрев все варианты, мы видим, что динамически изменить метаданные подсистемы «на лету» без расширений нельзя. Но мы можем:
Каждый из этих методов позволяет соблюсти чистоту конфигурации и выполнить требования бизнеса по доступности инструментов для пользователей.