Как в 1С создать урезанную версию типового документа с помощью расширения, оставив конфигурацию на замке?

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

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

Способ 1: Создание копии документа в расширении

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

Чтобы создать новый документ на основе старого, мы можем поступить следующим образом: в дереве основной конфигурации встаем на нужный документ, нажимаем комбинацию клавиш для копирования, затем переходим в расширение, выделяем ветку «Документы» и вставляем. У нас появится новый документ в расширении. Так как имена объектов должны быть уникальными, платформа автоматически добавит цифру к имени (например, АктСписанияМЗ1). Имя, синоним и подсистемы нам предстоит настроить вручную.

Однако, при попытке сохранить расширение мы неизбежно столкнемся с рядом ошибок. Проанализируем ситуацию подробнее.

Решение проблемы: «Обнаружены неразрешимые ссылки»

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

Дело в том, что когда мы втупую переносим (копируем) документ, его реквизиты, табличные части и формы содержат кучу ссылок на другие объекты основной конфигурации. А этих объектов в метаданных расширения пока нет. Чтобы скопированный документ успешно сохранился и заработал, нам необходимо заимствовать (добавить в расширение) все объекты, на которые он ссылается. Это творческий, но кропотливый процесс:

  1. Находим в ошибках все объекты (справочники, планы видов характеристик, перечисления), типы которых используются в реквизитах нашего нового документа.
  2. Находим эти объекты в основной конфигурации, кликаем правой кнопкой мыши и выбираем «Добавить в расширение».
  3. То же самое проделываем с общими модулями, которые вызываются в модуле объекта и модулях форм нашего нового документа.

Настройка прав доступа и видимости для пользователей

Даже если мы успешно скопировали документ и избавились от ошибок ссылок, пользователи могут столкнуться с тем, что документ не виден в интерфейсе или при попытке его открыть выдается ошибка нарушения прав доступа. Типовые роли основной конфигурации ничего не знают о нашем новом объекте, созданном в расширении. Разберем, что нужно сделать:

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

Движения документа по регистрам

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

Для этого мы должны заимствовать требуемый регистр (накопления, сведений или бухгалтерии) в наше расширение. Только после этого наш новый документ сможет выступать регистратором, проводить записи по типовым регистрам, и его данные будут корректно попадать в типовые отчеты. Однако, следует помнить, что это не работает для оборотных регистров накопления с включенными агрегатами.

Подводные камни изоляции нового документа

Создание отдельной физической копии документа — это путь, чреватый сложностями поддержки. Рассмотрим, с чем мы столкнемся:

  1. Ввод на основании: Типовые документы не смогут автоматически вводиться на основании нашего нового документа, и наоборот. Нам придется программировать логику ввода на основании в расширении вручную, заимствуя формы связанных документов.
  2. Печатные формы: Типовой функционал Библиотеки стандартных подсистем (БСП) не подхватит наш новый документ. Все команды печати придется прописывать и подключать самостоятельно.
  3. Потеря данных: Если по какой-то причине нам придется удалить расширение, все данные (документы), созданные в этом расширении, будут безвозвратно удалены из базы. Данные основной конфигурации останутся, но наши урезанные документы исчезнут.

Способ 2: Заимствование и программное скрытие (Рекомендуемый подход)

Исходя из практики, если наша задача состоит лишь в том, чтобы «урезать функции и интерфейс», создание физической копии документа является избыточным и рискованным путем. Гораздо правильнее и безопаснее использовать метод заимствования и программной адаптации.

В этом случае мы не создаем новых объектов. Мы берем оригинальный документ и подстраиваем его под наши нужды для конкретных пользователей. Разберем этот алгоритм по шагам:

  1. Заимствуем оригинальный документ (без копирования, просто «Добавить в расширение»).
  2. Заимствуем форму документа, которую нам нужно урезать.
  3. В расширении создаем новую роль (например, ИспользоватьУрезанныйАкт) и назначаем ее пользователям, которые должны видеть упрощенный интерфейс.
  4. В модуле заимствованной формы, используя расширение обработчиков событий (аннотация &После), мы программно скрываем лишние элементы интерфейса.

Посмотрим на пример того, как может выглядеть код в модуле формы в расширении:


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

Почему второй способ лучше?

Проанализируем преимущества такого подхода:

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

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

← На главную