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