Почему не появляется команда Создать на основании в 1С и как правильно настроить связь между документами

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

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

1. Проверяем направление связи в метаданных

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

Рассмотрим конкретный пример. У нас есть документ ЗаявкаНаМонтаж (ЗМ), и мы хотим, чтобы на его основании создавался ЗаказКлиента (ЗК). Выясним, где ставить галочки:

  1. Откроем в конфигураторе дерево метаданных и найдем целевой документ — тот, который будет создаваться (в нашем случае это ЗаказКлиента).
  2. Перейдем на вкладку «Ввод на основании».
  3. В нижнем списке «Является основанием для» мы ничего не трогаем (если не планируем вводить что-то НА ОСНОВАНИИ заказа).
  4. Нас интересует верхнее окно — «Вводится на основании». Именно здесь нужно нажать кнопку «Подбор» и выбрать наш исходный документ ЗаявкаНаМонтаж.

Важно: Если вы укажете связь наоборот (в документе ЗМ пропишете, что он является основанием для ЗК), платформа поймет намерение, но для корректного отображения команды в автоматическом режиме «правильным» считается именно заполнение списка «Вводится на основании» у документа-приемника.

2. Особенности типовых конфигураций и роль БСП

Если вы работаете в УТ 11 или ERP, простой настройки метаданных может быть недостаточно. В современных конфигурациях меню «Создать на основании» формируется динамически с помощью механизмов БСП (Библиотеки стандартных подсистем). Это позволяет системе гибко управлять видимостью команд в зависимости от прав доступа, функциональных опций и состояния документа.

Проанализируем ситуацию: вы добавили связь в метаданных, но кнопки нет. В этом случае документ нужно «зарегистрировать» в программном коде подсистемы. Рассмотрим, как это сделать:

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

3. Использование расширений для типовых документов

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

  1. Создайте новое расширение и добавьте в него оба документа (источник и приемник).
  2. В расширении откройте свойства документа-приемника и на вкладке «Ввод на основании» добавьте документ-источник в список.
  3. Это позволит системе увидеть связь, не меняя основную конфигурацию.

Однако помните, что для работы команды в типовых формах часто требуется вызвать инициализацию подменю в коде формы документа-источника. Обычно это выглядит как вызов метода СозданиеНаОсновании.ПриСозданииНаСервере в обработчике ПриСозданииНаСервере формы документа.

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

Настройка интерфейса — это лишь половина дела. Чтобы данные действительно перенеслись из ЗаявкиНаМонтаж в ЗаказКлиента, необходимо прописать логику в модуле объекта целевого документа. Разберем пример кода в процедуре ОбработкаЗаполнения:


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

Обратите внимание на параметр ДанныеЗаполнения. При интерактивном вводе на основании туда передается ссылка на документ-источник. Проверка типа обязательна, так как один и тот же документ может создаваться на основании разных объектов.

5. Почему кнопка всё равно может быть скрыта?

Если метаданные настроены верно и код написан, но кнопки нет, проверим следующие факторы:

6. Альтернативный вариант: Внешние обработки

В некоторых случаях, особенно когда нужно реализовать сложную логику без изменения конфигурации, можно использовать механизм Дополнительных отчетов и обработок. Вы можете создать внешнюю обработку с типом «Заполнение объекта». Это позволит добавить пункт меню в подменю «Заполнение» или «Создать на основании» через настройки в пользовательском режиме (НСИ и Администрирование — Печатные формы, отчеты и обработки).

Подведем итог: для настройки ввода на основании в 1С 8.3 УТ 11 нужно не только правильно выбрать направление связи в метаданных (от приемника к источнику), но и учитывать программные механизмы БСП, расширения и функциональные опции системы.

← На главную