Почему во внешней подключаемой обработке 1С нет кнопки «Выполнить» и как это исправить

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

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

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

Выясняем причины: как БСП управляет видимостью кнопки «Выполнить»

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

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


ЭтоГлобальнаяОбработка = (Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет);
КоличествоКоманд = Объект.Команды.Количество();
Элементы.ВыполнитьКоманду.Видимость = Ложь;

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

Исходя из этого алгоритма, кнопка «Выполнить» станет доступной только при одновременном выполнении следующих условий:

  1. Объект определен как глобальная обработка или дополнительный отчет (свойство Вид задано корректно).
  2. В таблице команд присутствует хотя бы одна строка.
  3. Вариант запуска команды соответствует одному из предопределенных значений перечисления СпособыВызоваДополнительныхОбработок.

Если хотя бы одно из этих условий нарушено — например, некорректно заполнен тип вызова команды или допущена опечатка в описании вида обработки — кнопка просто не отобразится в форме.

Анализ типичных ошибок в СведенияОВнешнейОбработке()

Рассмотрим наиболее распространенные ошибки программистов при написании регистрационной функции:

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

2. Использование текстовых констант вместо методов БСП. Прописывая строку ДанныеДляРег.Вставить("Вид", "ДополнительнаяОбработка") или НовСтрока.Использование = "ОткрытиеФормы", легко совершить опечатку. Более того, в разных версиях БСП типы данных для этих полей могут отличаться (где-то требуется строка, где-то — перечисление). Безопаснее использовать экспортные функции программного интерфейса БСП.

3. Отсутствие настройки размещения. Если вы регистрируете глобальную обработку (вид ДополнительнаяОбработка), БСП требует указать разделы командного интерфейса, где она будет выводиться. Если разделы не заданы ни в коде, ни вручную в карточке справочника, пользователи не увидят обработку в интерфейсе программы.

Пошаговое руководство: пишем правильный код регистрации

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

Ниже приведен эталонный пример кода, который необходимо разместить в модуле объекта вашей внешней обработки:


Функция СведенияОВнешнейОбработке() Экспорт

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

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

КонецФункции

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

Этот шаблон гарантирует создание таблицы команд со всеми необходимыми БСП системными полями, что исключит ошибки инициализации структуры в справочнике.

Настройка размещения и быстрого доступа в «1С:Предприятие»

Даже при идеально написанном коде обработки кнопка запуска может не появиться в интерфейсе у пользователей. Это связано с правами доступа и настройками видимости внутри самой ИБ. Чтобы решить эту проблему, выполним следующие шаги в режиме предприятия:

  1. Перейдем в раздел НСИ и администрирование (или Администрирование в зависимости от конфигурации) — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  2. Найдем нашу загруженную обработку и откроем ее карточку.
  3. Обратим внимание на табличную часть команд внизу формы. В колонке «Быстрый доступ» по умолчанию для всех новых команд установлено значение «Нет» или «Не определено». Это означает, что ни один пользователь программы команду не увидит.
  4. Нажмем на ссылку в колонке «Быстрый доступ» напротив нашей команды и добавим в список конкретных пользователей или группу пользователей (например, «Все пользователи»), которым должна быть доступна данная обработка.
  5. Заполним поле «Размещение» в верхней части карточки. Укажем разделы интерфейса (например, «Продажи» или «Закупки»), в которых должна отображаться команда вызова обработки.
  6. Убедимся, что статус публикации обработки установлен в значение «Используется». Режим «Режим отладки» делает обработку видимой только для пользователей с полными правами (администраторов), а статус «Отключена» скрывает ее для всех.
  7. Сохраним изменения, нажав кнопку «Записать и закрыть».

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

Как эффективно отлаживать и тестировать подключаемую обработку

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

Способ 1. Проверка структуры через Конфигуратор («Табло»)

Для того чтобы быстро проверить, правильно ли ваша функция СведенияОВнешнейОбработке() формирует структуру данных и таблицу команд, нет необходимости загружать ее в базу. Достаточно открыть базу в режиме отладки, запустить Конфигуратор, открыть окно «Табло» (сочетание клавиш Ctrl + Alt + W) и вычислить выражение:


ВнешниеОбработки.Создать("C:\ПутьКФайлу\МояОбработка.epf").СведенияОВнешнейОбработке()

Проанализируем полученную структуру в окне просмотра значений. Проверим тип поля Вид, количество строк в таблице Команды и убедимся, что все имена колонок написаны без ошибок.

Способ 2. Создание тестовой кнопки на форме обработки

При обычном интерактивном открытии внешней обработки через меню Файл -> Открыть механизмы БСП не задействуются. Ваша основная логика, прописанная для серверного или клиентского вызова через БСП, не сработает автоматически.

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


&НаКлиенте
Процедура ТестВыполнения(Команда)
    
    // Имитируем вызов БСП. Передаем идентификатор нашей команды
    ИдентификаторКоманды = "ОткрытьОбработку";
    
    // Вызываем экспортную процедуру модуля объекта или формы
    ВыполнитьКоманду(ИдентификаторКоманды);
    
КонецПроцедуры

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

Работа в безопасном режиме

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

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

← На главную