Как упростить форму типового документа в расширении 1С и избежать ошибок?

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

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

Почему полное копирование документа в расширение — это плохая идея?

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

  1. Потеря движений и регистров: Оригинальный типовой документ является регистратором для множества регистров накопления и бухгалтерии. Ваш новый скопированный объект не будет включен в список регистраторов. Чтобы заставить его делать проводки, вам придется заимствовать все связанные регистры и переписывать процедуру проведения.
  2. Отрыв от Библиотеки стандартных подсистем (БСП): В современных конфигурациях вся общая логика (присоединенные файлы, печатные формы, отчеты, ввод на основании, структура подчиненности) жестко привязана к типам объектов. Скопированный документ выпадет из всех типовых механизмов предприятия.
  3. Сложности при обновлениях: Каждый раз при выходе нового релиза конфигурации вам придется вручную отслеживать изменения в оригинальном документе и дублировать их в свою копию.

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

Способ 1: Использование Общих команд для вывода в интерфейс

Если ваша задача — вывести документ в подсистему под другим именем (например, в подсистему «Выбытие и перемещение» под синонимом «Акт списания для организаций»), не нужно копировать сам документ. Посмотрим на элегантное решение с помощью общих команд.

Добавьте в расширение новую ОбщаяКоманда. Задайте ей нужный синоним и включите в целевую подсистему. В модуле команды пропишите открытие оригинальной формы документа, но с передачей дополнительного параметра. Это позволит при открытии формы понять, что она была вызвана из вашего специального меню, и применить нужные интерфейсные настройки.

Способ 2: Подмена формы через модуль менеджера

Если вам нужно, чтобы при попытке открыть документ (для определенных ролей или условий) открывалась ваша нарисованная с нуля упрощенная форма, добавим ее в расширение и переопределим стандартное событие.

Посмотрим на пример кода. В модуле менеджера заимствованного документа необходимо перехватить процедуру ОбработкаПолученияФормы:


Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    Если ВидФормы = "ФормаДокумента" Тогда
        // Проверяем условия, например, наличие определенной роли у пользователя
        Если РольДоступна("ИспользованиеУпрощенныхФорм") Тогда
            СтандартнаяОбработка = Ложь;
            ВыбраннаяФорма = "ФормаДокументаУпрощенная"; // Имя вашей новой формы в расширении
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Этот метод позволяет полностью перерисовать интерфейс, оставив при этом логику проведения и связи объекта нетронутыми.

Способ 3: Программная адаптация типовой формы (Рекомендуемый метод)

Самый безопасный и гибкий путь — это заимствовать оригинальную форму документа в расширение и скрыть лишние элементы программно. При этом варианте сохраняются все типовые механизмы и обновления от 1С проходят безболезненно.

Разберем по шагам. Создадим в справочнике Пользователи (или в специальном регистре сведений) настройку, например, булево значение «Использовать упрощенную форму». Затем в модуле заимствованной формы перехватим событие ПриСозданииНаСервере с помощью аннотации &После.


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

КонецПроцедуры

Резюме: Никогда не копируйте сложные объекты метаданных в расширение только ради изменения их внешнего вида. Используйте заимствование форм, программное скрытие элементов через Элементы.ИмяЭлемента.Видимость, подмену открываемых форм в модуле менеджера и общие команды. Это сохранит целостность конфигурации и избавит вас от множества ошибок при дальнейшем сопровождении системы.

← На главную