|
|
|
Запуск внешней обработки через регламентное задание | ☑ | ||
|---|---|---|---|---|
|
0
RoboTech
22.10.10
✎
05:47
|
Здравствуйте!
Возникла следующая проблема. В конфигурации, редактировать которую мы не можем, работа с регламентными заданиями реализована следующим образом: существует справочник "Дополнительные внешние обработки", куда добавляется элемент. В этом элементе можно указать ссылку на внешнюю форму (она сохраняется в хранилище значений), можно задать расписание для выполнения задания и в специальном поле указать код который будет выполняться при выполнении задания. При выполнении задания указанный в элементе код выполняется следующим образом: Выполнить(Указанный код). Естественно это жутко неудобно. Получается что обработка которую привязываешь вообще не при чем. И никак её запустить не удается. Пытался сделать через внешние обработки. В коде который выполняется в задании нахожу необходимый элемент справочника "Дополнительные внешние обработки", сохраняют привязанную к нему обработку во временный файл, подключаю его через внешние обработки, а дальше не получается. Пытался открывать форму, но видимо при выполнении регламентного задания формы не открываются. Пытался вызывать функции обработки, тоже не получается. Подскажите что можно сделать в этом случае? Или это в принципе невозможно реализовать? |
|||
|
1
kroll
22.10.10
✎
05:58
|
Регламентное задание выполняется на сервере. Так что ни о каких интерфесных штучках типа открытия формы речи быть не может. Или я неправильно понял условия задачи?
|
|||
|
2
RoboTech
22.10.10
✎
05:59
|
Да, всё правильно. А выполнить функции обработки как-то можно?
|
|||
|
3
kroll
22.10.10
✎
06:07
|
если в модуле объекта (обработки) определены экспортные процедуры и функции - то можно.
|
|||
|
4
RoboTech
22.10.10
✎
06:15
|
Допустим в модуле обработке есть экспортная процедура ЗапускОбработки().
Для простоты приведу код который выполняется. ИмяФ = ПолучитьИмяВременногоФайла("epf"); ДвДан.Записать(ИмяФ); Обр = ВнешниеОбработки.Создать(ИмяФ); Обр - содержит ссылку на внешнюю обработку. Доступны только методы ОткрытьФорму() и Метаданные(). Если попытаться вызвать функцию Обр.ЗапускОбработки() то ничего не получается |
|||
|
5
kroll
22.10.10
✎
06:26
|
а что делается в ЗапускОбработки?
|
|||
|
6
RoboTech
22.10.10
✎
06:36
|
Там выполняется запрос, выбираются элементы справочника и меняются в необходимых случаях значения реквизита.
Но смысл не в этом. Процедура в принципе не видится. |
|||
|
7
kroll
22.10.10
✎
06:47
|
как определили, что не видится?
|
|||
|
8
RoboTech
22.10.10
✎
06:53
|
Самое интересное что если выполнить этот же код в обычной обработке, то всё нормально. Получаем ссылку на внешнюю обработку, вызываем процедуру ЗапускОбработки() которая нормально отрабатывает.
А если в регламентной операции, то при выполнении кода: Выполнить(Указанный код) выдает ошибку: "Ошибка компиляции при вычислении выражения или выполнении фрагмента кода" |
|||
|
9
kroll
22.10.10
✎
06:54
|
что-то там в УказанныйКод содержится, что нельзя выполнить на сервере.
|
|||
|
10
RoboTech
22.10.10
✎
06:59
|
По-моему есть какой-то режим отладки или тестирования когда проверяется сможет он выполнится на сервере или нет. Или я ошибаюсь?
Скорее всего вы правы. Только вот как узнать что именно не может выполниться |
|||
|
11
kroll
22.10.10
✎
07:20
|
ну если у тебя обработка внешняя, да и еще с переменным именем, то как ты поставишь точку остановки в такой обработке? Как вариант - на время сохранить и вызывать эту обработку по конкретному имени.
Ну или более затратный - ставить "метки выполнения", то есть поместить в код обработки строки типа Сообщить("Вот здесь еще работает 1"); ... ... Сообщить("Дошли до сюда 134") |
|||
|
12
RoboTech
22.10.10
✎
08:49
|
На данный момент выяснил что на сервере нельзя использовать команду ВнешниеОбработки.Создать(). Вообще ВнешниеОбработки не доступны при выполнении кода на сервере ... Думаю как теперь по другому получить доступ к обработке ...
|
|||
|
13
kroll
22.10.10
✎
08:52
|
ВнешниеОбработкиМенеджер (ExternalDataProcessorsManager)
ВнешниеОбработкиМенеджер (ExternalDataProcessorsManager) Методы: Подключить (Connect) ПолучитьФорму (GetForm) Создать (Create) Описание: Предназначен для управления внешними обработками и позволяет получать значения типа ВнешняяОбработка при помощи метода Создать. Доступ к объекту осуществляется через свойство глобального контекста ВнешниеОбработки. Доступность: Сервер, толстый клиент, внешнее соединение. См. также: Глобальный контекст, свойство ВнешниеОбработки |
|||
|
14
kroll
22.10.10
✎
08:53
|
ВнешниеОбработки.Создать() также доступно на сервере
|
|||
|
15
RoboTech
22.10.10
✎
08:54
|
У нас платформа 8.1. У вас скорее всего 8.2 ...
|
|||
|
16
kroll
22.10.10
✎
08:58
|
а и правда... сколько бы времени сэкономили, если бы с самого начала было написано Ж)
|
|||
|
17
RoboTech
22.10.10
✎
10:59
|
Решил проблему двумя способами:
1) объединил функции и процедуры которые должны были выполняться обработкой в одну процедуру и её код вставил в поле, откуда во время выполнения регламентного задания берётся код для исполнения. Заработало. Но не удобно. 2) написал батник, который запускает 1С, выполняет нужную обработку. В обработке последней строкой идёт ЗавершитьРаботуСистемы(). Прописал в назначенных заданиях windows на сервере запуск этого батника в нужное время. Запускается, выполняется. Кому интересно вот текст батника: "C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /Stest-server\test_base /NTestUser /P123 /Execute "C:\Test.epf" Выводы: на платформе 8.1 нормально реализовать это невозможно. А вот в 8.2 вполне |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |