Работа с объектами обработки в 1С:Предприятие 8.3 — одна из ключевых задач для разработчиков, автоматизаторов и опытных пользователей. Без корректного получения ссылки на обработку невозможно запустить её программно, передать параметры или интегрировать с другими модулями системы. Однако начинающие специалисты часто сталкиваются с проблемами: то обработка не находится в глобальном контексте, то возникают ошибки при обращении к несуществующему объекту, то теряются ссылки после обновления конфигурации.
В этой статье мы разберём 5 проверенных способов получения объекта обработки в разных сценариях: от ручного вызова через интерфейс до программного доступа из других модулей. Особое внимание уделим типичным ошибкам (например, Ошибка при вызове метода контекста (Неопределенный идентификатор)) и нюансам работы с обработками в управляемых формах и обычных формах. Материал актуален для платформы 1С:Предприятие 8.3 (всех релизов) и конфигураций на её основе, включая Бухгалтерию 3.0, УТ 11, ЗУП 3.1 и другие.
1. Получение обработки через глобальный контекст (самый простой способ)
Если обработка добавлена в глобальный модуль или подключена как ОбщийМакет, её можно получить напрямую по имени. Этот метод работает для обработок, которые:
- 📌 Зарегистрированы в конфигураторе как глобальные (свойство
Глобальный=Истина). - 🔄 Доступны в текущей сессии (не удалены из памяти).
- 🔐 Имеют уникальное имя в пределах конфигурации.
Пример кода для вызова обработки ОбработкаПечатиДокументов:
Обработка = ГлобальныйКонтекст.Обработки.ОбработкаПечатиДокументов;
Обработка.Открыть();
⚠️ Внимание: Если обработка не найдена, платформа вернёт ошибкуОшибка компиляции: Неопределенный идентификатор (ОбработкаПечатиДокументов). Перед использованием проверьте наличие обработки в дереве метаданных или подключите её черезПодключитьОбработку().
Для обработок, которые не являются глобальными, но добавлены в ОбщиеМакеты, используйте следующий синтаксис:
Обработка = ОбщиеМакеты.ПечатнаяФормаТоварнойНакладной.ПолучитьМакет("Обработка");
Обработка.Выполнить();
2. Программное получение обработки по имени (универсальный метод)
Когда обработка не является глобальной, но её имя известно, можно получить объект через метод ПолучитьОбъектМодуля() или Новый(). Этот подход подходит для:
- 📂 Обработок, хранящихся в файловой системе (вне конфигурации).
- 🔄 Динамически подгружаемых обработок.
- 🛠️ Обработок, которые нужно создать "на лету" с передачей параметров.
Пример для обработки, хранящейся в каталоге шаблонов:
ПутьКФайлу = "C:\1C\Templates\МойОтчет.epf";
Обработка = ПолучитьОбъектМодуля(ПутьКФайлу);
Обработка.ИмяПараметра = Значение;
Обработка.ОткрытьФорму();
Если обработка встроена в конфигурацию, но не глобальная, используйте конструктор Новый():
Обработка = Новый("Обработка.ИмяОбработкиВМетаданных");
Обработка.ВыполнитьДействие("ОсновноеДействие");
⚠️ Внимание: При использованииНовый()убедитесь, что обработка существует в текущей базе. В противном случае возникнет ошибкаОшибка при создании объекта (Обработка: ИмяОбработкиВМетаданных). Для проверки существования используйте функциюМетаданные().Обработки.Найти("Имя").
Имя обработки указано корректно (с учётом регистра)
Обработка существует в метаданных или файловой системе
У пользователя есть права на выполнение обработки
Переданы все обязательные параметры-->
3. Получение обработки через меню "Файл → Открыть"
Для ручного запуска обработки без программного кода используйте стандартное меню 1С:Предприятие:
- Откройте главное меню и выберите
Файл → Открыть. - В диалоговом окне укажите путь к файлу обработки (
.epfили.erf). - Нажмите
Открыть— обработка загрузится в память и станет доступна для работы.
Этот способ подходит для:
- 🔍 Тестирования обработок на этапе разработки.
- 📁 Запуска внешних обработок, не входящих в конфигурацию.
- 🛠️ Однократного выполнения служебных скриптов (например, для чистки базы).
После открытия обработка становится доступна в коллекции ГлобальныйКонтекст.Обработки под именем, указанным в её свойствах. Например, если в обработке задано имя МойОтчет, обратиться к ней можно так:
ГлобальныйКонтекст.Обработки.МойОтчет.Выполнить();
Что делать, если обработка не отображается в меню "Открыть"?
Если файл обработки не виден в диалоговом окне, проверьте:
1. Расширение файла (должно быть `.epf` или `.erf`).
2. Права доступа к папке (1С может не показывать файлы в защищённых каталогах).
3. Настройки фильтра в диалоге (возможно, выбран неверный тип файлов).
4. Целостность файла (повреждённые обработки могут не открываться).
4. Получение обработки из другой обработки или модуля
Часто требуется вызвать одну обработку из другой, например, для передачи данных или последовательного выполнения действий. В этом случае используйте:
- 🔗 Прямой вызов через имя (если обработка глобальная).
- 📎 Передачу ссылки как параметра.
- 🔄 Динамическую загрузку через
ПодключитьОбработку().
Пример передачи обработки как параметра:
// В вызывающей обработке:
Параметры = Новый Структура("Обработка, Данные", ТекущаяОбработка, МоиДанные);
ЦелеваяОбработка = ГлобальныйКонтекст.Обработки.ДругаяОбработка;
ЦелеваяОбработка.Выполнить(Параметры);
// В целевой обработке:
Процедура Выполнить(Параметры) Экспорт
ИсходнаяОбработка = Параметры.Обработка;
Данные = Параметры.Данные;
// ... логика работы
КонецПроцедуры
Для динамической загрузки внешней обработки из файла:
Путь = "C:\Oбработки\ИнтеграцияСБанком.epf";
ПодключитьОбработку(Путь, "ИнтеграцияСБанком", Истина);
Обработка = ГлобальныйКонтекст.Обработки.ИнтеграцияСБанком;
⚠️ Внимание: При передаче обработки как параметра убедитесь, что в целевом модуле не происходит рекурсивного вызова (например, если обработка A вызывает обработку B, а та в свою очередь снова вызывает A). Это приведёт к зависанию системы или переполнению стека.
| Способ получения | Когда использовать | Ограничения |
|---|---|---|
| Глобальный контекст | Для зарегистрированных обработок | Требует настройки свойства Глобальный |
Новый() |
Для встроенных обработок | Не работает с внешними файлами |
ПодключитьОбработку() |
Для внешних .epf/.erf |
Нужны права на файловую систему |
| Меню "Открыть" | Для ручного запуска | Не подходит для автоматизации |
5. Особенности работы с обработками в управляемых формах
В управляемых формах (начиная с платформы 8.2) доступ к обработкам имеет нюансы:
- 🎛️ Обработки, открытые через форму, автоматически попадают в коллекцию
ГлобальныйКонтекст.Обработки. - 🔄 Для динамического создания формы обработки используйте метод
ПолучитьФорму(). - 🚫 Нельзя напрямую манипулировать элементами формы обработки извне (только через экспортные методы).
Пример открытия формы обработки с передачей параметров:
Обработка = Новый("Обработка.МойОтчет");
Форма = Обработка.ПолучитьФорму();
Форма.Параметры.ДатаНачала = ТекущаяДата();
Форма.Открыть();
В управляемых формах обработки не поддерживают методы обычных форм (например, Закрыть() или Обновить()). Для взаимодействия используйте только экспортные процедуры и функции, объявленные в модуле обработки.
Если обработка не открывается в управляемом режиме, проверьте свойство ТолькоОбычноеПриложение в её настройках. Если оно установлено в Истина, обработка не будет работать в тонком клиенте или веб-клиенте.
6. Типичные ошибки и их решения
При работе с обработками разработчики часто сталкиваются с следующими проблемами:
Ошибка 1: Неопределенный идентификатор (ИмяОбработки)
- 🔹 Причина: Обработка не является глобальной или не подключена.
- 🔹 Решение: Используйте
ПодключитьОбработку()или проверьте свойствоГлобальный.
Ошибка 2: Ошибка при вызове метода контекста (Обработка не найдена)
- 🔹 Причина: Обработка удалена из памяти или не была открыта.
- 🔹 Решение: Повторно откройте обработку через меню
Файл → Открыть.
Ошибка 3: Нет прав на выполнение операции
- 🔹 Причина: У пользователя недостаточно прав на запуск обработки.
- 🔹 Решение: Настройте роли в конфигураторе или временно предоставьте права администратора.
Для диагностики ошибок используйте ПоказатьОшибку(ОписаниеОшибки()) или проверяйте существование обработки перед вызовом:
Если Не ЗначениеЗаполнено(ГлобальныйКонтекст.Обработки.МойОтчет) Тогда
Сообщить("Обработка не найдена! Подключите её через меню 'Файл - Открыть'");
Возврат;
КонецЕсли;
Всегда проверяйте существование обработки перед вызовом её методов. Это предотвратит падение системы с критической ошибкой.
FAQ: Частые вопросы по работе с обработками в 1С
Как передать параметры в обработку при программном вызове?
Используйте структуру или массив. Пример:
Параметры = Новый Структура("ДатаНачала, ДатаКонца", '01.01.2026', '31.01.2026');
Обработка.Выполнить(Параметры);
В модуле обработки объявите процедуру с параметром:
Процедура Выполнить(Параметры) Экспорт
ДатаНачала = Параметры.ДатаНачала;
// ... дальнейшая логика
КонецПроцедуры
Можно ли получить обработку из другой базы 1С?
Да, через COM-соединение или HTTP-сервисы. Пример для COM:
ВнешняяБаза = Новый COMОбъект("V83.ComConnector");
Соединение = ВнешняяБаза.Connect("File=C:\Bases\Trade;Usr=Администратор;Pwd=123");
Обработка = Соединение.Обработки.ВнешнийОтчет;
Для HTTP используйте стандартные методы интеграции (REST, SOAP).
Почему обработка открывается, но не выполняет действия?
Возможные причины:
- 🔹 В обработке не реализованы экспортные процедуры (например, отсутствует
Процедура Выполнить() Экспорт). - 🔹 Ошибки в коде обработки (проверьте через
Отладка → Начать отладку). - 🔹 Не переданы обязательные параметры.
Используйте Сообщить() для пошаговой диагностики:
Сообщить("Обработка запущена. Параметры: " + Параметры.ДатаНачала);
Как узнать, какие обработки сейчас загружены в память?
Выведите список из глобального контекста:
Для Каждого Обработка Из ГлобальныйКонтекст.Обработки Цикл
Сообщить(Обработка.Имя);
КонецЦикла;
Или используйте отладчик (Ctrl+Alt+D) и осмотрите переменную ГлобальныйКонтекст.
Можно ли сохранить обработку из памяти в файл без конфигуратора?
Да, с помощью метода Записать():
Обработка.Записать("C:\Temp\МойОтчет.epf");
Убедитесь, что у пользователя есть права на запись в указанный каталог.