Как изменить свойство документа «Является основанием для», если он находится на поддержке и в хранилище?

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

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

Выясним причину блокировки свойств

Когда объект (например, документ) находится на поддержке поставщика, его метаданные защищены от случайных изменений. В интерфейсе конфигуратора это отображается в виде иконки «замочка». Если же конфигурация дополнительно подключена к Хранилищу конфигурации, ситуация усложняется: недостаточно просто включить возможность изменения, необходимо также соблюсти правила коллективной разработки. Многие начинающие разработчики пытаются захватить сам объект в хранилище, но обнаруживают, что свойство Является основанием для все равно недоступно для редактирования. Это происходит потому, что изменение структуры связей между документами затрагивает общие настройки конфигурации и правила ее поддержки.

Способ 1: Изменение правил поддержки через корень конфигурации

Это основной метод, который позволяет «разблокировать» редактирование типовых объектов. Разберем его по шагам, учитывая работу с хранилищем.

  1. Захват корня конфигурации в хранилище. Для изменения правил поддержки всей системы или отдельных ее ветвей необходимо захватить самый верхний элемент в дереве метаданных — корень конфигурации. Без этого действия любые манипуляции в окне «Настройка поддержки» будут недоступны.
  2. Открытие окна настройки поддержки. Перейдем в меню Конфигурация — Поддержка — Настройка поддержки. Здесь мы увидим список всех объектов и их текущий статус (например, «Объект поставщика не редактируется»).
  3. Включение возможности изменения. Если кнопка «Включить возможность изменения» активна, нажмем ее. В появившемся окне установим правила для всей конфигурации. Оптимально выбрать вариант «Объект поставщика редактируется с сохранением поддержки» для тех разделов, которые планируется дорабатывать.
  4. Смена правила для конкретного документа. Найдем в списке нужный нам документ-основание и документ-приемник. Напротив них установим правило «Редактируется с сохранением поддержки». После этого иконка «замочка» сменится на иконку «кубика».
  5. Редактирование свойства. Теперь, когда объект захвачен в хранилище и для него разрешено редактирование метаданных, мы можем зайти на вкладку «Ввод на основании» и отметить галочками необходимые связи.

Проанализируем важный момент: после выполнения этих действий необходимо поместить (Commit) корень конфигурации и измененные объекты обратно в хранилище, чтобы остальные участники разработки увидели изменения и смогли работать с обновленной структурой.

Способ 2: Использование расширений (для современных версий платформы)

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

Чтобы сделать типовой документ основанием для вашего нового документа через расширение, выполним следующие действия:

  1. Добавим ваш новый документ в расширение (или создадим его там).
  2. Заимствуем типовой документ, который должен стать основанием, в расширение.
  3. В свойствах вашего документа на вкладке «Ввод на основании» укажем заимствованный типовой документ в качестве основания.

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

Программная реализация заполнения (ОбработкаЗаполнения)

Установка галочки в свойстве Является основанием для — это лишь половина дела. Она визуально добавляет кнопку в меню «Создать на основании», но логику копирования данных из одного документа в другой необходимо прописать в коде. Разберем, как это сделать в модуле объекта документа-приемника.

Для этого используется процедура ОбработкаЗаполнения. Рассмотрим пример кода:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ТиповойДокументОснование") Тогда
        // Заполняем реквизиты из документа-основания
        ЭтотОбъект.Контрагент = ДанныеЗаполнения.Контрагент;
        ЭтотОбъект.Договор    = ДанныеЗаполнения.Договор;
        
        // Заполнение табличной части
        Для Каждого СтрокаОснования Из ДанныеЗаполнения.Товары Цикл
            НоваяСтрока = ЭтотОбъект.Товары.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОснования);
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Если вы используете расширение, вы можете создать аналогичную процедуру в модуле объекта документа-приемника, используя аннотацию &После или &Вместо, чтобы не менять типовой код.

Альтернативный вариант: Общие команды без изменения метаданных

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

Разберем алгоритм:

  1. Создаем новую Общую команду в конфигурации или расширении.
  2. В свойстве Тип параметра команды указываем документ-основание.
  3. В свойстве Группа выбираем Панель создания -> Ввод на основании.
  4. В модуле команды пишем код открытия формы нового документа с передачей ссылки на основание.

Пример кода в модуле общей команды:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    // ПараметрКоманды — это ссылка на документ-основание
    ПараметрыФормы = Новый Структура("Основание", ПараметрКоманды);
    ОткрытьФорму("Документ.НашНовыйДокумент.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры

В этом случае платформа сама добавит кнопку в интерфейс документа-основания, а нам не придется «вскрывать» замочки на типовых объектах. Этот метод наиболее безопасен с точки зрения будущих обновлений конфигурации.

Резюме и рекомендации

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

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

← На главную