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