Как убрать дублирование кнопок «Создать на основании» в 1С?

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

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

Одна кнопка представляет собой стандартную платформенную иконку, а вторая — полноценную надпись на командной панели, внутри которой находится только ваш новый документ. В этой статье мы подробно разберем, почему возникает этот визуальный баг, как функционируют механизмы платформы и Библиотеки стандартных подсистем (БСП) и рассмотрим два практических способа решения проблемы.

Выясним причину дублирования и научимся настраивать интерфейс в соответствии со стандартами разработки фирмы «1С».

---

Выясняем причину: почему кнопок становится две?

Для начала проанализируем, как устроена генерация команд создания на основании в управляемом интерфейсе 1С. В современных конфигурациях параллельно работают два независимых механизма:

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

Когда вы одновременно указываете связь документов в метаданных («Вводится на основании») и регистрируете этот же документ в модуле менеджера через вызов ДобавитьКомандуСоздатьНаОсновании(), срабатывают оба механизма. Платформа выводит свое автогенерируемое меню, а БСП — свое. В результате пользователь видит две схожие кнопки в командной панели, что путает интерфейс и усложняет работу.

---

Способ 1. Быстрое отключение видимости платформенной команды в конфигураторе

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

Разберем этот процесс по шагам:

  1. Откройте конфигуратор вашей базы данных и найдите документ-источник (в нашем примере это «Приобретение товаров и услуг»).
  2. Перейдите к списку форм этого документа и откройте основную форму документа (форму документа-источника, в которой двоится кнопка).
  3. В окне редактора формы в левом верхнем углу перейдите на вкладку «Командный интерфейс».
  4. В дереве команд найдите раздел «Создать на основании».
  5. В списке команд найдите строку, соответствующую вашему новому документу.
  6. Снимите флаг «Видимость» для этой команды (или отключите видимость по умолчанию для всех ролей пользователей).
  7. Сохраните форму и обновите конфигурацию базы данных.

Результат: стандартная платформенная команда больше не будет выводиться на форму. При этом программная команда, генерируемая БСП, останется на своем месте внутри единого красивого подменю «Создать на основании».

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

---

Способ 2. Рекомендованный стандарт БСП (Чистый программный подход)

Для того чтобы избежать сложностей при последующих обновлениях и сделать код максимально чистым и соответствующим стандартам разработки 1С, рекомендуется полностью отказаться от использования платформенного механизма вывода команд. Мы можем вообще не указывать связь в метаданных на вкладке «Ввод на основании», доверив всю работу механизмам БСП.

Рассмотрим пошагово, как реализовать этот элегантный подход:

Шаг 1. Отключение связи в метаданных

Откройте свойства вашего нового документа (приемника) в конфигураторе. Перейдите на вкладку «Ввод на основании» и снимите флаг с документа-источника («Приобретение товаров и услуг») в списке документов, на основании которых вводится ваш документ. Это гарантирует, что платформа никогда не попытается самостоятельно вывести кнопку для вашего документа.

Шаг 2. Написание процедуры заполнения в модуле объекта

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


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

Шаг 3. Регистрация команды в модуле менеджера вашего документа

Теперь опишем саму команду создания на основании в модуле менеджера вашего нового документа. Добавьте в модуль менеджера следующую экспортную процедуру:


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

Шаг 4. Подключение команды к источнику без изменения его объектов

Чтобы избежать внесения изменений в модуль менеджера или форму типового документа «Приобретение товаров и услуг», мы воспользуемся возможностями переопределяемых общих модулей БСП. Это самый бесконфликтный вариант интеграции, который не создаст проблем при обновлении системы.

Найдите в конфигурации общий модуль СозданиеНаОснованииПереопределяемый. Откройте его и перейдите к процедуре ПередДобавлениемКомандСозданияНаОсновании. Добавьте в нее код вызова вашей процедуры:


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

Проанализируем преимущества такого подхода: мы не меняли форму типового документа, мы не трогали модуль менеджера типового документа. Все интеграционные настройки прописаны в одном переопределяемом общем модуле БСП, который специально предназначен для таких доработок. Риск затереть настройки при обновлении сведен к минимуму.

---

Расширенные настройки команд создания на основании в БСП

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

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

Рассмотрим пример использования расширенных свойств в коде:


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

---

Резюме

Мы детально разобрали проблему дублирования кнопок создания на основании и изучили механизмы управления интерфейсом в 1С 8.3. Использование чистого программного подхода БСП (Способ 2) является наиболее предпочтительным, технологичным и безопасным с точки зрения обновлений конфигурации. Он позволяет полностью управлять видимостью, правами доступа, функциональными опциями и режимами записи новых документов из единой точки конфигурации.

← На главную