К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как обратиться к модулю обработки 1С

Как обратиться к модулю обработки в 1С: вызов через Обработки.Имя, ПолучитьФорму, внешние обработки из файла, серверные вызовы и типичные ошибки.

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

Главное различие, которое нужно понимать сразу: у обработки есть модуль объекта и модуль формы. Модуль объекта доступен через создание объекта обработки, модуль формы — только внутри самой формы или через обращение к открытой форме. Путаница между этими двумя контекстами — самая частая причина ошибок вида «Процедура или функция с указанным именем не определена».

Ниже разобраны рабочие способы обращения к модулям обработки: через менеджер Обработки, через создание объекта, через внешние файлы EPF, а также ограничения клиент-серверного взаимодействия и типичные ошибки.

Что такое модуль обработки и какие контексты у него есть

У обработки в 1С существует несколько модулей с разным назначением. Модуль объекта содержит экспортные процедуры и функции, которые можно вызывать после создания объекта обработки. Модуль менеджера обработки используется редко — в основном для предопределённых методов подсистем. Модуль формы отвечает за логику конкретной формы и недоступен напрямую извне.

Экспортные процедуры и функции объявляются с ключевым словом Экспорт. Без него метод считается локальным и вызвать его из другого модуля нельзя. Это первое, что стоит проверить, если вызов не работает.

Ещё один важный момент — директивы компиляции. Если процедура в модуле объекта помечена как &НаКлиенте, вызвать её с сервера не получится. Для модуля объекта обработки стандартный контекст — серверный, и в толстом клиенте он может выполняться и на клиенте, но в тонком клиенте и веб-клиенте объект обработки создаётся только на сервере.

Обращение к встроенной обработке через менеджер Обработки

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

ОбъектОбработки = Обработки.ЗагрузкаДанныхИзФайла.Создать();

ОбъектОбработки.ВыполнитьЗагрузку(ПутьКФайлу);

Также через менеджер доступны методы без создания объекта, если они объявлены в модуле менеджера обработки — но на практике это встречается редко. Чаще всего именно связка Создать() + вызов метода объекта является рабочим вариантом.

Обратите внимание: создание объекта обработки — это серверная операция. Если код выполняется в тонком клиенте, вызов нужно оборачивать в серверную процедуру общего модуля с признаками «Сервер» и «Вызов сервера», иначе получите ошибку о недопустимости операции в текущем контексте.

bsl
&НаСервере
Процедура ЗапуститьОбработкуНаСервере()
    ОбъектОбработки = Обработки.ЗагрузкаДанныхИзФайла.Создать();
    ОбъектОбработки.ВыполнитьЗагрузку(ПутьКФайлу);
КонецПроцедуры

Вызов формы обработки и обращение к её модулю

Когда нужно открыть форму обработки и передать в неё данные, используется функция ПолучитьФорму с указанием полного пути:

ФормаОбработки = ПолучитьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.Форма");

ФормаОбработки.Открыть();

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

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

Обращение к внешней обработке из файла EPF

Внешние обработки хранятся в файлах с расширением .epf и подключаются иначе. Для создания объекта внешней обработки используется менеджер ВнешниеОбработки:

ВнешняяОбработка = ВнешниеОбработки.Создать("C:\Обработки\МояОбработка.epf", Ложь);

ВнешняяОбработка.ВыполнитьДействие();

Второй параметр отвечает за безопасный режим. В файловой базе путь должен быть доступен с того компьютера, где выполняется код; в клиент-серверном варианте — с сервера 1С, что часто становится причиной ошибки «файл не найден», когда разработчик указывает локальный путь своего компьютера.

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

Клиент-серверное взаимодействие и ограничения

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

Типичная схема выглядит так: клиентская процедура формы вызывает серверную процедуру (в модуле формы с директивой &НаСервере или в общем модуле), та создаёт объект обработки и выполняет нужный метод, результат возвращается на клиент через возвращаемое значение. Передать сам объект обработки на клиент нельзя — он несериализуем.

Если нужно открыть внешнюю обработку интерактивно, в тонком клиенте используют ПолучитьФорму с путём к внешней обработке или методы подсистемы дополнительных обработок. Прямое создание объекта ВнешниеОбработки.Создать() на клиенте в тонком клиенте недоступно.

Маршрут решения

Как выбрать способ вызова

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

Проверка результата и типичные ошибки

После написания вызова проверьте три вещи: что метод объявлен с ключевым словом Экспорт, что контекст вызова совместим (клиент/сервер), и что имя обработки в строке вызова совпадает с именем в конфигураторе с точностью до символа. Ошибка в имени проявляется только в момент выполнения, а не при проверке модуля.

Частая ошибка — попытка вызвать метод модуля объекта без создания объекта: Обработки.Имя.Метод() работает только для методов модуля менеджера. Другая типичная ситуация — обращение к экспортным переменным объекта после того, как объект был создан на сервере, а обращение идёт с клиента в следующем вызове: объект уже не существует, состояние потеряно.

Типичные ошибки
01
Вызов метода без Экспорт — ошибка «Процедура или функция не определена»
02
Создание объекта обработки на клиенте в тонком клиенте — ошибка о недопустимости операции
03
Локальный путь к EPF-файлу в клиент-серверной базе — файл не найден на сервере
04
Хранение объекта обработки между серверными вызовами — состояние теряется, объект не сериализуется
05
Опечатка в имени обработки в строке ПолучитьФорму — ошибка только в момент выполнения

Для отладки удобно временно выводить результат вызова через Сообщить() или проверять создание объекта в попытке-исключении, чтобы получить понятный текст ошибки вместо падения всей операции.

Альтернативы: когда обработку лучше заменить общим модулем

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

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

Итог

Что важно запомнить

Модуль объекта вызывают через Обработки.Имя.Создать(), форму — через ПолучитьФорму, внешний EPF — через ВнешниеОбработки.Создать() на сервере. Проверяйте Экспорт, контекст выполнения и точность имени обработки. Для чистой логики без интерфейса предпочтительнее общий модуль.

Частые вопросы

Как вызвать процедуру модуля объекта обработки из другой обработки?

Точно так же, как из любого другого модуля: создайте объект через Обработки.ИмяОбработки.Создать() и вызовите экспортную процедуру. Убедитесь, что обе обработки выполняются в одном контексте — например, обе на сервере.

Почему возникает ошибка «Процедура или функция с указанным именем не определена»?

Чаще всего метод не объявлен с ключевым словом Экспорт, либо вы обращаетесь к модулю формы через менеджер обработки. Проверьте также, что вы создали объект через Создать(), а не вызываете метод напрямую у менеджера.

Можно ли открыть внешнюю обработку в тонком клиенте?

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

Как передать параметры в форму обработки при открытии?

Передайте структуру вторым параметром в ПолучитьФорму или в ОткрытьФорму. В модуле формы значения будут доступны в обработчике ПриСозданииНаСервере через коллекцию Параметры.

Чем обращение к обработке отличается от обращения к отчету?

Синтаксис аналогичен: Отчеты.ИмяОтчета.Создать() и ВнешниеОтчеты.Создать(Путь). Различия в назначении: у отчётов основной механизм — формирование результата через СКД, у обработок — произвольные действия над данными.

Работает ли вызов обработки в фоновом задании?

Да, фоновое задание выполняется на сервере, поэтому создание объекта обработки и вызов его методов работают без ограничений. Формы, естественно, открыть нельзя — в фоне нет пользовательского интерфейса.