Как настроить выбор команды во внешней обработке, если вместо открытия формы сразу запускается серверный метод?

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

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

Анализ механизма работы БСП с командами

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

  1. ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода() — для фонового выполнения.
  2. ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы() — для интерактивного взаимодействия.

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

Шаг 1. Проверка регистрации в модуле объекта

Рассмотрим структуру формирования таблицы команд в модуле внешней обработки. Убедимся, что обе команды корректно добавлены в таблицу. Проанализируем типичный пример кода регистрации:


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

Важный нюанс: Порядок строк в таблице команд имеет значение. Рекомендуется ставить наиболее приоритетную для пользователя команду (в нашем случае — открытие формы) первой в списке. Это помогает системе корректно определять действие по умолчанию в некоторых интерфейсных сценариях.

Шаг 2. Настройка видимости команд в режиме «Предприятие»

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

  1. Откройте список «Дополнительные отчеты и обработки» (обычно находится в разделе Администрирование — Печатные формы, отчеты и обработки).
  2. Найдите вашу обработку и откройте её карточку.
  3. Перейдите на закладку «Команды».
  4. Обратите внимание на колонку «Размещение». Если вы разместили обработку в подсистеме (например, «Продажи»), нажмите на гиперссылку в колонке «Настроить» напротив каждой команды.
  5. Проверьте, установлены ли флажки видимости для обеих команд в выбранном разделе. Если флажок стоит только у серверной команды, то в разделе «Дополнительные обработки» данной подсистемы будет доступна только она, и 1С запустит её без лишних вопросов.

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

Шаг 3. Решение проблемы «кэширования» настроек

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

  1. В карточке обработки полностью удалите все разделы из списка «Размещение».
  2. Запишите объект.
  3. Снова добавьте нужные разделы.
  4. Проверьте, что в табличной части «Команды» появились все строки, которые вы добавили в функции СведенияОВнешнейОбработке().
  5. Установите флажки видимости для каждой команды.

Шаг 4. Разделение логики выполнения

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


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

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

Резюме

Подведем итог. Если вместо открытия формы срабатывает серверный код:

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

← На главную