Имя: Пароль:
1C
 
Запуск внешних обработок по регламентному заданию. Управляемые формы.
,
0 MakaMaka
 
26.03.18
08:32
Всем привет. Недавно тут ковырял запуск внешних обработок по регламентному заданию и столкнулся с проблемой. Что бы решить проблему, мне надо понять, откуда берутся некоторые параметры.

Итак: запуск регламентного задания начинается, с обращения к самому регламентному заданию, оно называется  :
- «ЗапускДополнительныхОбработок»;
Это самое регламентное задание обращается к процедуре:
- «Процедура ВыполнитьОбработкуПоРегламентномуЗаданию(ВнешняяОбработка, ИдентификаторКоманды) Экспорт». (Поискал глобальным поиском, больше вызовов процедуры ВыполнитьОбработкуПоРегламентномуЗаданию не нашел.)

У меня вопрос к знатокам, где заполняются параметры процедуры? В каком месте конфигурации? Или это делается не программно, а на уровне платформы?
1 Cyberhawk
 
26.03.18
08:34
У метода РЗ, представленного внешней обработкой, не может быть параметров
2 MakaMaka
 
26.03.18
08:39
(1) Параметры в процедуре ВыполнитьОбработкуПоРегламентномуЗаданию, там 2 параметра :
1. ВнешняяОбработка - ссылка на внешнюю обработку;
2. ИдентификаторКоманды - идентификатор выполняемой команды;
3 Cyberhawk
 
26.03.18
08:43
Я вроде не спрашивал, чего ты там и где задаешь, так что зачем ты это мне написал - Я хз
4 MakaMaka
 
26.03.18
08:43
В общем суть в том, что в одной УТ обработка при выполнении, через регламентное задание отрабатывает, в другой УТ (старой версии, не отрабатывает).

В новой версии когда ставлю точку останова в процедуре ВыполнитьОбработкуПоРегламентномуЗаданию параметры заполнены правильно, т.е.
1. ВнешняяОбработка - ссылка на внешнюю обработку;
2. ИдентификаторКоманды - идентификатор выполняемой команды;

В старой версии УТ, они перепутаны:
1. ВнешняяОбработка - идентификатор выполняемой команды;
2. ИдентификаторКоманды - ссылка на внешнюю обработку;

А проблема, в том, что я не понимаю где заполняются параметры, т.к. на процедуру ссылается только Регл. Задание "ЗапускДополнительныхОбработок" и параметры в нее как то подставляются, а где происходит их определение я не понимаю.
5 Мимохожий Однако
 
26.03.18
08:44
(0) "Столкнулся с проблемой".Так какая проблема?
6 MakaMaka
 
26.03.18
08:46
(5) см.(4)
7 Мимохожий Однако
 
26.03.18
08:50
УТ10?
8 Мимохожий Однако
 
26.03.18
08:51
Сравни процедуры регистрации в модулях обработок.
9 MakaMaka
 
26.03.18
08:51
(7) Нет, 11, управляемые формы.
10 MakaMaka
 
26.03.18
08:51
(8) Одна и та же обработка, процедуры регистрации идентичны.
11 MakaMaka
 
26.03.18
08:55
Есть вариант поменять местами параметры, т.е.
1. Так было: Процедура ВыполнитьОбработкуПоРегламентномуЗаданию(ВнешняяОбработка, ИдентификаторКоманды) Экспорт;
2. Так стало: Процедура ВыполнитьОбработкуПоРегламентномуЗаданию( ИдентификаторКоманды, ВнешняяОбработка) Экспорт

Но очень хочется разобраться, понять, что же там все таки происходит.
12 Мимохожий Однако
 
26.03.18
09:04
Если ты смог встать отладчиком и дойти до точки останова, то сможешь по стеку процедур выйти на точку запуска обработки, которая, скорее всего, размещена во временном файле. Описание сего "чуда" изложено в документации БСП. Выясни какое БСП у тебя в конфигурации и почитай.
13 MakaMaka
 
26.03.18
09:10
(12) Когда я встаю отладчиком на процедуру ВыполнитьОбработкуПоРегламентномуЗаданию, то мне не показано откуда она вызывается, он первая в стеке вызовов.

Где взять документацию на БСП? В комплекте поставки с сайта, юзерс? или на ИТС есть?
14 MakaMaka
 
26.03.18
09:13
(12) Даже с БСП засада, в базе указан номер версии: 1.0.6.16, на сайте ИТС не нашел ничего про нее, на сайте юзерс такого тоже нету (
15 MakaMaka
 
26.03.18
09:16
Гугл о моей версии бсп выдает 2 ссылки:
https://www.forum.mista.ru/topic.php?id=504802 (датировано 2010 годом)
И тему на варезнике, от 2013 года.
Засада...
16 Мимохожий Однако
 
26.03.18
09:34
Какая у тебя конфигурация УТ? Номер
17 MakaMaka
 
26.03.18
09:39
(16) Управление торговлей, редакция 11 (11.0.4.6)
18 Мимохожий Однако
 
26.03.18
09:52
(13) Файловая или клиент-серверная база. Дальше отладчиком не шагается? Включи отладку регламентного задания в конфигураторе.
19 MakaMaka
 
26.03.18
09:57
(18) База клиент серверная.
Кофигуратором могу прошагать следующий путь:
1. ВыполнитьОбработкуПоРегламентномуЗаданию
2. Процедура НачалоВыполненияОбработки(ДополнительнаяОбработкаСсылка, ИдентификаторКоманды)
(в процедуре готовится текст сообщения, который будет записан в ЖР;
3. ЗаписатьСобытиеВЖурналРегистрации(ДополнительнаяОбработкаСсылка, ТекстСообщения) - тут ошибка, т.к. идет обращение к метаданным первого параметра, а это у меня строковый тип;

Весь текст процедуры, где происходит ошибка:
Процедура ЗаписатьСобытиеВЖурналРегистрации(ДополнительнаяОбработкаСсылка, ТекстСообщения)
    
ЗаписьЖурналаРегистрации(НСтр("ru = 'Дополнительные отчеты и обработки'"),
УровеньЖурналаРегистрации.Информация,
ДополнительнаяОбработкаСсылка.Метаданные(), ДополнительнаяОбработкаСсылка, ТекстСообщения);
    КонецПроцедуры
20 MakaMaka
 
26.03.18
09:58
(18) отладка фоновых заданий в конфигураторе включена.
21 Мимохожий Однако
 
26.03.18
10:00
Включи отладку на сервере. Параметр -debug в службе агента 1С
22 MakaMaka
 
26.03.18
10:01
Выполнение отваливается при обращении ДополнительнаяОбработкаСсылка.Метаданные(), т.к. параметры у меня перепутаны и тип параметра ДополнительнаяОбработкаСсылка - строка.
23 MakaMaka
 
26.03.18
10:03
(21) Тогда я увижу откуда вызывается процедура ВыполнитьОбработкуПоРегламентномуЗаданию ?
24 MakaMaka
 
26.03.18
10:13
Поправка, Версия БСП: 2.1.8.4. В РС Находится не корректная информация.
25 MakaMaka
 
26.03.18
10:36
Только это ничего не меняет. Откуда заполняется процедура не понятно.
26 MakaMaka
 
26.03.18
11:12
При ручном запуске регламентного задания, в недрах общих модулей, вызывается процедура

Процедура ОбработатьРегламентноеЗаданиеВручную(Знач Задание,
                                               МоментЗапуска = Неопределено,
                                               ИдентификаторФоновогоЗадания = "") Экспорт

    ВызватьИсключениеЕслиНетПраваАдминистрирования();
    
    Задание = ?(ТипЗнч(Задание) = Тип("РегламентноеЗадание"), Задание, ПолучитьРегламентноеЗадание(Задание));
    
    Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
        ОбработатьРегламентноеЗадание(Задание, Истина, МоментЗапуска, ИдентификаторФоновогоЗадания);
        // Обновление состояния уже выполнено в вызванной процедуре.
    Иначе
        НачатьТранзакцию();
        Попытка
            Состояние = ПолучитьСостояниеОбработкиРегламентныхЗаданий(Истина);
            НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), ПредставлениеРегламентногоЗадания(Задание));
            ФоновоеЗадание = ФоновыеЗадания.Выполнить(Задание.Метаданные.ИмяМетода, Задание.Параметры, Задание.Ключ, НаименованиеФоновогоЗадания);
            ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.УникальныйИдентификатор);
            Состояние.Соответствие_ИФЗ_ИРЗ_ЗапущенныеНаСервереВручную.Вставить( ИдентификаторФоновогоЗадания, Строка(Задание.УникальныйИдентификатор) );
            МоментЗапуска = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор).Начало;
            ОбновитьСостояниеОбработкиРегламентныхЗаданий(Состояние);
            ЗафиксироватьТранзакцию();
        Исключение
            ОтменитьТранзакцию();
            ВызватьИсключение;
        КонецПопытки;
    КонецЕсли;
    
КонецПроцедуры // ОбработатьРегламентноеЗаданиеВручную()


Буду дальше рыть.
27 MakaMaka
 
26.03.18
11:51
up
28 Cyberhawk
 
26.03.18
20:06
Сколько платят за решение вопроса?
29 Мимохожий Однако
 
26.03.18
20:19
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс