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