Как исправить ошибку «Неправильный формат параметра ИмяЭкспортнойПроцедуры» при обмене с Битрикс24?

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

При внедрении модулей интеграции между 1С и внешними системами, такими как Битрикс24, специалисты часто сталкиваются с проблемами совместимости. Особенно это актуально, когда модуль, изначально разработанный для одной конфигурации (например, 1С:Управление торговлей 10.3), переносится в другую (например, 1С:Управление производственным предприятием 1.3). Одной из самых распространенных ошибок в таких случаях является сообщение: «Неправильный формат параметра ИмяЭкспортнойПроцедуры», возникающее в общем модуле ДлительныеОперации.

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

Анализ проблемы и поиск причины ошибки

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

Проанализируем участок кода, который инициирует запуск обмена:


РезультатВыполненияЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
    УникальныйИдентификатор,
    "ВыгрузкаВРеальномВремениВФоне",
    ПараметрыЗапуска,
    НаименованиеФоновогоЗадания);

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

Шаг 1: Поиск расположения процедуры в конфигурации

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

Выполним следующие действия:

  1. Откроем Конфигуратор.
  2. Нажмем сочетание клавиш Ctrl + Shift + F для глобального поиска.
  3. В строке поиска введем: Процедура ВыгрузкаВРеальномВремениВФоне.
  4. В результатах поиска найдем общий модуль, в котором объявлена эта процедура. Убедимся, что перед именем процедуры стоит ключевое слово Экспорт.

Допустим, процедура нашлась в модуле Б24_ОбменДанными.

Шаг 2: Исправление формата вызова процедуры

Теперь, когда мы знаем точное местоположение процедуры, нам нужно изменить формат передачи параметра. Вместо простого имени функции мы должны указать «ПолноеИмяОбщегоМодуля.ИмяПроцедуры».

Рассмотрим, как должен выглядеть исправленный код:


// Было:
// "ВыгрузкаВРеальномВремениВФоне"

// Стало (пример):
ИмяПроцедурыДляФона = "Б24_ОбменДанными.ВыгрузкаВРеальномВремениВФоне";

РезультатВыполненияЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
    УникальныйИдентификатор,
    ИмяПроцедурыДляФона,
    ПараметрыЗапуска,
    НаименованиеФоновогоЗадания);

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

Шаг 3: Проверка свойств общего модуля

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

Проанализируем свойства найденного модуля Б24_ОбменДанными (или аналогичного) и при необходимости проставим недостающие галочки.

Шаг 4: Отладка фонового задания

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

Для того чтобы «поймать» ошибку внутри фонового задания, выполним следующие рекомендации:

  1. В Конфигураторе перейдем в меню Сервис — Параметры.
  2. На вкладке Запуск 1С:Предприятия — Основные в поле Параметр запуска впишем значение РежимОтладки.
  3. В самом коде вызова ДлительныеОперации.ЗапуститьВыполнениеВФоне подсистема часто проверяет наличие этого параметра. Если он передан, система может попытаться выполнить код в текущем сеансе, а не в фоновом, что позволит нам увидеть ошибку через обычную точку останова.
  4. Также не забудьте зайти в меню Отладка — Подключение и нажать кнопку Автоматическое подключение, установив флаг Фоновые задания.

Особенности использования ДлительныеОперации.ОжидатьЗавершения

Часто после запуска задания используется метод ДлительныеОперации.ОжидатьЗавершения. Если вы видите ошибку «При ожидании завершения заданий наступил таймаут», это не всегда означает, что программа «зависла». Это может быть следствием того, что фоновое задание упало с критической ошибкой в самом начале (например, из-за отсутствия прав или неверных параметров инициализации), и менеджер заданий просто не успел вернуть статус.

Посмотрим на пример правильной обработки ожидания:


ПараметрыОжидания = ДлительныеОперации.ПараметрыОжидания(500); // Увеличиваем таймаут
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;

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

Увеличение таймаута (например, до 500 секунд) помогает только в том случае, если данных для выгрузки действительно много. Если же ошибка «Неправильный формат параметра» не устранена, никакое увеличение времени ожидания не поможет, так как задание даже не начнет выполняться.

Резюме по исправлению

Подводя итог, можно выделить основной алгоритм решения проблемы:

  1. Выясняем, что 1С требует формат Модуль.Процедура для фоновых вызовов.
  2. Находим модуль обмена Битрикс24, где лежит экспортная процедура ВыгрузкаВРеальномВремениВФоне.
  3. Исправляем строковый параметр в методе ЗапуститьВыполнениеВФоне.
  4. Проверяем серверные свойства общего модуля.
  5. Используем Журнал регистрации, чтобы увидеть подробности ошибки, если фоновое задание все равно завершается со статусом «Ошибка».

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

← На главную