1с внешниеобработки создать ошибка

Обновлено: 06.07.2024

Механизм, о котором пойдет речь ниже, позволяет гибко и оперативно создавать и настраивать регламентные задания без запуска конфигуратора. Это действенный инструмент, которого порой просто не хватает под рукой.

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

И пока коллеги со второй категории скачивают обработку, мы ее напишем :)

1. Создать регламентное задание с названием "ВыполнениеОбработки".

2. В качестве исполнительного метода регламентного задания указать метод ВыполнениеОбработки() из общего модуля МодульРегламентныхЗаданий (или любого другого общего модуля с такими же настройками свойств). Описать логику работы метода.

3. Написать обработку, которая будет программно создавать экземпляры регламентного задания с заданными параметрами.

Важно!

Любое регламентное задание имеет такое свойство как Параметры. Это Массив, назначение которого очевидно - хранение параметров, которые передаются на вход исполнительного метода регламентного задания. Более детально можно прочесть в синтаксис помощнике. Отметим только, что устанавливаются параметры регламентного задания только программно. Также следует помнить, что количество и состав параметров должны соответствовать параметрам метода регламентного задания.

Приступим.

Первым делом, создадим регламентное задание. Укажем исполнительный метод. Опишем его логику работы исходя из следующих условий

  • Регламентное задание должно уметь запускать как внешние, так и встроенные обработки.
  • Уметь передавать входящие параметры (первоначальные настройки) обработке на выполнение.
  • Логировать все свои действия в журнал регистрации
Первым параметром метода регламентного задания укажем ключ обработки. Он понадобится нам для идентификации обработки, которую нужно запустить на выполнение. В случае с внешней обработкой - это будет ее код из справочника "Внешние обработки", в случае со встроенной - имя из дерева метаданных. Второй параметр метода регламентного задания - произвольные настройки, которые хранятся в объекте с типом ХранилищеЗначения. Ниже приведен листинг метода регламентного задания.

Теперь опишем обработку, которая будет создавать экземпляры выше описанного регламентного задания.

Как все работает изнутри, лучше всего расскажет программный код исполнительной процедуры (обработчик нажатия на кнопку "Запустить регламентное задание").

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

Оставляйте свои вопросы и предложения по улучшению функциональности механизма в комментариях.



skype: live:di-sem

@programmist_1C

Ошибка "Внешняя обработка отладки, загружаемая из файла на диске, не поддерживается." Ошибка при отладке правил конвертации 2.1 в новых конфигурациях

Убираем ошибку "Внешняя обработка отладки, загружаемая из файла на диске, не поддерживается."
Правила, созданные в КД2, снова отлаживаются

Сделал я правила обмена в КД2.

Решил их отладить и получаю ошибку:

Внешняя обработка отладки, загружаемая из файла на диске, не поддерживается.

Искал решение в интернете, но как-то неудачно.

А отлаживать-то нужно.

Решение:

Обработка "УниверсальныйОбменДаннымиXML.epf". То есть та обработка, с помощью которой мы хотим отлаживать.

Идем в модуль обработки, в процедуру

Процедура ИнициализацияВнешнейОбработкиОбработчиковСобытий(РаботаВозможна, ОбъектВладелец) Экспорт

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

На всякий случай скрин:

Внешняя обработка отладки, загружаемая из файла на диске, не поддерживается.

Результат:

Отладка правил, созданных в КД2

Методика решения проблемы с открытием старой версии внешней обработки

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

В конфигураторе создается внешняя обработка. В режиме 1С:Предприятие (в режиме отладки или нет) она проверяется. В конфигураторе в обработку вносятся некоторые изменения. В режиме 1С:Предприятие обработка закрывается и открывается заново, для проверки внесенных изменений. Начиная с определенного момента вносимые изменения перестают появляться, то есть в режиме 1С:Предприятие открывается старая версия внешней обработки. Проблема решается только перегрузкой 1С:Предприятия.

Причина возникновения проблемы

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

Рассмотрим ситуацию несколько подробнее. В режиме исполнения (1С:Предприятие) объект обработка существует в памяти в качестве реквизита формы обработки. При закрытии формы обработка прекращает свое существование.

Данная схема нарушается в двух случаях. На саму обработку возникла дополнительная ссылка, либо ссылка возникла на форму, в этом случае закрытие окна формы не означает уничтожение объекта - формы. Соответственно, остается в памяти и обработка.

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

Рекомендации по предотвращению возникновения проблемы

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

Если "обратная связь" между обработкой и формой все же необходима, следует явным образом позаботиться о ее разрыве. Это можно сделать, например, в обработчике закрытия формы.

Методика устранения проблемы

Даже следование всем рекомендациям не может застраховать от возникновения подобной проблемы.

В первую очередь следует проанализировать алгоритм исполнения обработки на предмет циклических ссылок. Иногда источник проблемы не очевиден. Циклы могут носить достаточно сложный характер, да и возникновение проблемы можно заметить не сразу.

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

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

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

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

Как программно открыть внешнюю обработку?

В версии 8.2 приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере.

Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:

  • Передать файл внешней обработки на сервер
  • Подключить внешнюю обработку
  • Открыть форму внешней обработки

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

В четвертом параметре этого метода указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина , то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр - Ложь , а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре метода.

При вызове метода ПоместитьФайл() первым его параметром, АдресХранилища , мы указываем пустую строку. После выполнения метода в нее будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.

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

Для открытия формы внешней обработки используется метод глобального контекста ОткрытьФорму() , в который передается имя формы в виде следующей строки: "ВнешняяОбработка."+ ИмяОбработки +".Форма" . В приведенном варианте открывается основная форма обработки. Можно открыть также и неосновную форму обработки - об этом рассказывается в вопросе Как получить неосновную форму обработки?.

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

Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации: 1С:Предприятие 8.2. Руководство разработчика , Раздел 5.5.4.3: Объекты конфигурации - Ветвь конфигурации «Общие» - Роли и права доступа - Безопасный режим работы .

Подробнее об использовании метода ПоместитьФайл() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции работы с файлами.

Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике: Прикладные объекты - Внешние обработки и отчеты - ВнешниеОбработкиМенеджер - Методы.

Читайте также: