Разработка и Конфигурация · 10 мин
Как обратиться к модулю обработки 1С
Как обратиться к модулю обработки в 1С: вызов через Обработки.Имя, ПолучитьФорму, внешние обработки из файла, серверные вызовы и типичные ошибки.
Обращение к модулю обработки — одна из базовых задач при доработке конфигураций 1С. Обработки используют как хранилища переиспользуемых процедур, как инструменты обслуживания данных и как носители форм, поэтому способ вызова зависит от того, где находится обработка (в составе конфигурации или во внешнем файле) и откуда выполняется вызов — с клиента или с сервера.
Главное различие, которое нужно понимать сразу: у обработки есть модуль объекта и модуль формы. Модуль объекта доступен через создание объекта обработки, модуль формы — только внутри самой формы или через обращение к открытой форме. Путаница между этими двумя контекстами — самая частая причина ошибок вида «Процедура или функция с указанным именем не определена».
Ниже разобраны рабочие способы обращения к модулям обработки: через менеджер Обработки, через создание объекта, через внешние файлы EPF, а также ограничения клиент-серверного взаимодействия и типичные ошибки.
Что такое модуль обработки и какие контексты у него есть
У обработки в 1С существует несколько модулей с разным назначением. Модуль объекта содержит экспортные процедуры и функции, которые можно вызывать после создания объекта обработки. Модуль менеджера обработки используется редко — в основном для предопределённых методов подсистем. Модуль формы отвечает за логику конкретной формы и недоступен напрямую извне.
Экспортные процедуры и функции объявляются с ключевым словом Экспорт. Без него метод считается локальным и вызвать его из другого модуля нельзя. Это первое, что стоит проверить, если вызов не работает.
Ещё один важный момент — директивы компиляции. Если процедура в модуле объекта помечена как &НаКлиенте, вызвать её с сервера не получится. Для модуля объекта обработки стандартный контекст — серверный, и в толстом клиенте он может выполняться и на клиенте, но в тонком клиенте и веб-клиенте объект обработки создаётся только на сервере.
Обращение к встроенной обработке через менеджер Обработки
Если обработка входит в состав конфигурации, обращение выполняется через менеджер Обработки. Чтобы вызвать экспортную процедуру модуля объекта, сначала создают объект, затем вызывают метод:
ОбъектОбработки = Обработки.ЗагрузкаДанныхИзФайла.Создать();
ОбъектОбработки.ВыполнитьЗагрузку(ПутьКФайлу);
Также через менеджер доступны методы без создания объекта, если они объявлены в модуле менеджера обработки — но на практике это встречается редко. Чаще всего именно связка Создать() + вызов метода объекта является рабочим вариантом.
Обратите внимание: создание объекта обработки — это серверная операция. Если код выполняется в тонком клиенте, вызов нужно оборачивать в серверную процедуру общего модуля с признаками «Сервер» и «Вызов сервера», иначе получите ошибку о недопустимости операции в текущем контексте.
&НаСервере
Процедура ЗапуститьОбработкуНаСервере()
ОбъектОбработки = Обработки.ЗагрузкаДанныхИзФайла.Создать();
ОбъектОбработки.ВыполнитьЗагрузку(ПутьКФайлу);
КонецПроцедурыВызов формы обработки и обращение к её модулю
Когда нужно открыть форму обработки и передать в неё данные, используется функция ПолучитьФорму с указанием полного пути:
ФормаОбработки = ПолучитьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.Форма");
ФормаОбработки.Открыть();
Если форма называется иначе, имя подставляется после «Форма.». Для основной формы обработки допустим и короткий путь ПолучитьФорму("Обработка.Имя.Форма"). Передать параметры можно вторым аргументом — структурой, которая попадёт в обработчик ПриСозданииНаСервере через коллекцию Параметры.
Напрямую вызывать экспортные процедуры модуля формы из другого объекта технически возможно через полученный объект формы, но это считается плохой практикой: форма может быть не создана, а при её закрытии вызов приведёт к ошибке. Общую логику правильнее выносить в модуль объекта или в общий модуль.
Обращение к внешней обработке из файла EPF
Внешние обработки хранятся в файлах с расширением .epf и подключаются иначе. Для создания объекта внешней обработки используется менеджер ВнешниеОбработки:
ВнешняяОбработка = ВнешниеОбработки.Создать("C:\Обработки\МояОбработка.epf", Ложь);
ВнешняяОбработка.ВыполнитьДействие();
Второй параметр отвечает за безопасный режим. В файловой базе путь должен быть доступен с того компьютера, где выполняется код; в клиент-серверном варианте — с сервера 1С, что часто становится причиной ошибки «файл не найден», когда разработчик указывает локальный путь своего компьютера.
Для управляемого приложения в типовых конфигурациях внешние обработки обычно подключаются через подсистему «Дополнительные отчеты и обработки» (БСП). Тогда обращение идёт не по пути к файлу, а через механизмы подсистемы: обработка регистрируется в справочнике, а её команды вызываются платформой автоматически.
Клиент-серверное взаимодействие и ограничения
В управляемом приложении код делится на клиентский и серверный, и это накладывает жёсткие ограничения на обращение к обработкам. На клиенте доступны: открытие формы, работа с данными формы, вызов серверных процедур. На сервере доступно: создание объекта обработки, вызов методов модуля объекта, работа с данными.
Типичная схема выглядит так: клиентская процедура формы вызывает серверную процедуру (в модуле формы с директивой &НаСервере или в общем модуле), та создаёт объект обработки и выполняет нужный метод, результат возвращается на клиент через возвращаемое значение. Передать сам объект обработки на клиент нельзя — он несериализуем.
Если нужно открыть внешнюю обработку интерактивно, в тонком клиенте используют ПолучитьФорму с путём к внешней обработке или методы подсистемы дополнительных обработок. Прямое создание объекта ВнешниеОбработки.Создать() на клиенте в тонком клиенте недоступно.
Как выбрать способ вызова
Проверка результата и типичные ошибки
После написания вызова проверьте три вещи: что метод объявлен с ключевым словом Экспорт, что контекст вызова совместим (клиент/сервер), и что имя обработки в строке вызова совпадает с именем в конфигураторе с точностью до символа. Ошибка в имени проявляется только в момент выполнения, а не при проверке модуля.
Частая ошибка — попытка вызвать метод модуля объекта без создания объекта: Обработки.Имя.Метод() работает только для методов модуля менеджера. Другая типичная ситуация — обращение к экспортным переменным объекта после того, как объект был создан на сервере, а обращение идёт с клиента в следующем вызове: объект уже не существует, состояние потеряно.
Для отладки удобно временно выводить результат вызова через Сообщить() или проверять создание объекта в попытке-исключении, чтобы получить понятный текст ошибки вместо падения всей операции.
Альтернативы: когда обработку лучше заменить общим модулем
Если обработка используется только как контейнер для процедур без формы и без сохраняемых данных, часто правильнее перенести код в общий модуль. Общий модуль не требует создания объекта, вызовы из него короче (ИмяМодуля.Метод()), а флаги «Сервер» и «Вызов сервера» явно задают контекст выполнения.
Обработка оправдана, когда нужны: форма для интерактивной работы, макеты (табличные документы, схемы компоновки), сохранение настроек в данных объекта, подключение как внешнего инструмента без изменения конфигурации. Во всех остальных случаях общий модуль проще и надёжнее.
Что важно запомнить
Модуль объекта вызывают через Обработки.Имя.Создать(), форму — через ПолучитьФорму, внешний EPF — через ВнешниеОбработки.Создать() на сервере. Проверяйте Экспорт, контекст выполнения и точность имени обработки. Для чистой логики без интерфейса предпочтительнее общий модуль.
Частые вопросы
Как вызвать процедуру модуля объекта обработки из другой обработки?
Точно так же, как из любого другого модуля: создайте объект через Обработки.ИмяОбработки.Создать() и вызовите экспортную процедуру. Убедитесь, что обе обработки выполняются в одном контексте — например, обе на сервере.
Почему возникает ошибка «Процедура или функция с указанным именем не определена»?
Чаще всего метод не объявлен с ключевым словом Экспорт, либо вы обращаетесь к модулю формы через менеджер обработки. Проверьте также, что вы создали объект через Создать(), а не вызываете метод напрямую у менеджера.
Можно ли открыть внешнюю обработку в тонком клиенте?
Да, через ПолучитьФорму с указанием пути к файлу обработки или через подсистему дополнительных отчетов и обработок в типовых конфигурациях. Создать объект внешней обработки методом ВнешниеОбработки.Создать() в тонком клиенте нельзя — только на сервере.
Как передать параметры в форму обработки при открытии?
Передайте структуру вторым параметром в ПолучитьФорму или в ОткрытьФорму. В модуле формы значения будут доступны в обработчике ПриСозданииНаСервере через коллекцию Параметры.
Чем обращение к обработке отличается от обращения к отчету?
Синтаксис аналогичен: Отчеты.ИмяОтчета.Создать() и ВнешниеОтчеты.Создать(Путь). Различия в назначении: у отчётов основной механизм — формирование результата через СКД, у обработок — произвольные действия над данными.
Работает ли вызов обработки в фоновом задании?
Да, фоновое задание выполняется на сервере, поэтому создание объекта обработки и вызов его методов работают без ограничений. Формы, естественно, открыть нельзя — в фоне нет пользовательского интерфейса.