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