Запуск внешней обработки через регламентное задание #512353


#0 by RoboTech
Здравствуйте! Возникла следующая проблема. В конфигурации, редактировать которую мы не можем, работа с регламентными заданиями реализована следующим образом: существует справочник "Дополнительные внешние обработки", куда добавляется элемент. В этом элементе можно указать ссылку на внешнюю форму (она сохраняется в хранилище значений), можно задать расписание для выполнения задания и в специальном поле указать код который будет выполняться при выполнении задания. При выполнении задания указанный в элементе код выполняется следующим образом: Выполнить(Указанный код). Естественно это жутко неудобно. Получается что обработка которую привязываешь вообще не при чем. И никак её запустить не удается. Пытался сделать через внешние обработки. В коде который выполняется в задании нахожу необходимый элемент справочника "Дополнительные внешние обработки", сохраняют привязанную к нему обработку во временный файл, подключаю его через внешние обработки, а дальше не получается. Пытался открывать форму, но видимо при выполнении регламентного задания формы не открываются. Пытался вызывать функции обработки, тоже не получается. Подскажите что можно сделать в этом случае? Или это в принципе невозможно реализовать?
#1 by kroll
Регламентное задание выполняется на сервере. Так что ни о каких интерфесных штучках типа открытия формы речи быть не может. Или я неправильно понял условия задачи?
#2 by RoboTech
Да, всё правильно. А выполнить функции обработки как-то можно?
#3 by kroll
если в модуле объекта (обработки) определены экспортные процедуры и функции - то можно.
#4 by RoboTech
Допустим в модуле обработке есть экспортная процедура ЗапускОбработки. Для простоты приведу код который выполняется. ИмяФ = ПолучитьИмяВременногоФайла("epf"); Обр - содержит ссылку на внешнюю обработку. Доступны только методы ОткрытьФорму и Метаданные. Если попытаться вызвать функцию Обр.ЗапускОбработки то ничего не получается
#5 by kroll
а что делается в ЗапускОбработки?
#6 by RoboTech
Там выполняется запрос, выбираются элементы справочника и меняются в необходимых случаях значения реквизита. Но смысл не в этом. Процедура в принципе не видится.
#7 by kroll
как определили, что не видится?
#8 by RoboTech
Самое интересное что если выполнить этот же код в обычной обработке, то всё нормально. Получаем ссылку на внешнюю обработку, вызываем процедуру ЗапускОбработки которая нормально отрабатывает. А если в регламентной операции, то при выполнении кода: Выполнить(Указанный код) выдает ошибку:
#9 by kroll
что-то там в УказанныйКод содержится, что нельзя выполнить на сервере.
#10 by RoboTech
По-моему есть какой-то режим отладки или тестирования когда проверяется сможет он выполнится на сервере или нет. Или я ошибаюсь? Скорее всего вы правы. Только вот как узнать что именно не может выполниться
#11 by kroll
ну если у тебя обработка внешняя, да и еще с переменным именем, то как ты поставишь точку остановки в такой обработке? Как вариант - на время сохранить и вызывать эту обработку по конкретному имени. Ну или более затратный - ставить "метки выполнения", то есть поместить в код обработки строки типа ... ... Сообщить("Дошли до сюда 134")
#12 by RoboTech
На данный момент выяснил что на сервере нельзя использовать команду ВнешниеОбработки.Создать. Вообще ВнешниеОбработки не доступны при выполнении кода на сервере ... Думаю как теперь по другому получить доступ к обработке ...
#13 by kroll
ВнешниеОбработкиМенеджер (ExternalDataProcessorsManager) Методы: Описание: Предназначен для управления внешними обработками и позволяет получать значения типа ВнешняяОбработка при помощи метода Создать. Доступ к объекту осуществляется через свойство глобального контекста ВнешниеОбработки. Доступность: Сервер, толстый клиент, внешнее соединение. См. также: Глобальный контекст, свойство ВнешниеОбработки
#14 by kroll
ВнешниеОбработки.Создать также доступно на сервере
#15 by RoboTech
У нас платформа 8.1. У вас скорее всего 8.2 ...
#16 by kroll
а и правда... сколько бы времени сэкономили, если бы с самого начала было написано Ж)
#17 by RoboTech
Решил проблему двумя способами: 1) объединил функции и процедуры которые должны были выполняться обработкой в одну процедуру и её код вставил в поле, откуда во время выполнения регламентного задания берётся код для исполнения. Заработало. Но не удобно. 2) написал батник, который запускает 1С, выполняет нужную обработку. В обработке последней строкой идёт ЗавершитьРаботуСистемы. Прописал в назначенных заданиях windows на сервере запуск этого батника в нужное время. Запускается, выполняется. Кому интересно вот текст батника: Выводы: на платформе 8.1 нормально реализовать это невозможно. А вот в 8.2 вполне
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С