Имя: Пароль:
1C
1С v8
Создание внешней обработки для фонового регламентного задания
,
0 NIGHTHUNTER
 
05.05.22
13:10
По примеру создал внешнюю обработку, необходимую для выполнения фонового регламентного задания.


//
Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид",             "ДополнительнаяОбработка");
    ПараметрыРегистрации.Вставить("Наименование",    "Отправка уведомления на рассчитанную дату");
    ПараметрыРегистрации.Вставить("Версия",          "0.2");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация",      "Отправка уведомления на рассчитанную дату");
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд,
    "Отправка уведомления на рассчитанную дату",
    "Идентификатор",
    "ВызовСерверногоМетода",
    Истина,"");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции
//
Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление",          Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор",          Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование",          Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор",          Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции
//
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда                          = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление          = Представление;
    НоваяКоманда.Идентификатор          = Идентификатор;
    НоваяКоманда.Использование           = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор          = Модификатор;
КонецПроцедуры
//
// Интерфейс для запуска логики обработки.
Процедура ВыполнитьКоманду(Идентификатор, ОбъектыНазначения = Неопределено) Экспорт
    ОтправкаУведомленияНаРаcсчитаннуюДату();
КонецПроцедуры
//
Процедура ОтправкаУведомленияНаРаcсчитаннуюДату() Экспорт
    Сообщение       = Новый СообщениеПользователю;
    Сообщение.Текст = "Отправка уведомления на рассчитанную дату!" + ФОРМАТ(ТекущаяДата(), "ДЛФ=DT");
    Сообщение.Сообщить();
КонецПроцедуры
//


Ставлю расписание выполнять, каждые три секунды.
И думаю увидеть вывод сообщения, каждые три секунды.
Но в фоновом задании пишется об ошибках. Подскажите пожалуйста, что я неправильно делаю?
1 vicof
 
05.05.22
13:11
Ты делаешь ошибки
2 NIGHTHUNTER
 
05.05.22
13:15
Написана у фонового задания, такая ошибка

Недостаточно фактических параметров для метода фонового задания .


Сейчас такая ошибка

Изменилась строка соединения информационной базы.
Возможно информационная база была перемещена.
Регламентное задание "Запуск дополнительных обработок" отключено.
{ОбщийМодуль.БлокировкаРаботыСВнешнимиРесурсами.Модуль(213)}:    ВызватьИсключение ТекстИсключения;
{ОбщийМодуль.ОбщегоНазначения.Модуль(5427)}:        МодульБлокировкаРаботыСВнешнимиРесурсами.ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание);
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(1744)}:    ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок);
3 NIGHTHUNTER
 
05.05.22
13:16
фоновое задание появляется само?

Как я загружаю внешнюю обработку?
4 Kassern
 
05.05.22
13:16
(0) и кому вы решили это регламентом сообщать?
Сообщение       = Новый СообщениеПользователю;
    Сообщение.Текст = "Отправка уведомления на рассчитанную дату!" + ФОРМАТ(ТекущаяДата(), "ДЛФ=DT");
    Сообщение.Сообщить();
5 Kassern
 
05.05.22
13:18
"Регламентное задание "Запуск дополнительных обработок" отключено." - так включите
6 NIGHTHUNTER
 
05.05.22
13:21
(4) Я для тестирования на экран, что оно работает проверить

(5) все вроде включено.
7 Kassern
 
05.05.22
13:23
(6) так вы поймите, что вам на экран ничего не выйдет, если мне не изменяет память. Хотите проверить, попробуйте что-то в базе записать, или файлик какой-нибудь создать, письмо там отправить.
8 NIGHTHUNTER
 
05.05.22
13:23
(5) А где включить?
9 Kassern
 
05.05.22
13:24
и откуда вы взяли параметры для Выполнить команду?
Вот так вроде должно быть:
// Интерфейс для запуска логики обработки.
Процедура ВыполнитьКоманду(ИмяКоманды, ПараметрыВыполнения) Экспорт
    
.....
КонецПроцедуры
10 Kassern
 
05.05.22
13:26
а вот так примерно выглядит процедура со сведениями
Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.0.0.0");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Версия = "1.1";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = Имя вашего задания'");
    НоваяКоманда.Идентификатор = "ИдентификаторЗадания";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;

    
    Возврат ПараметрыРегистрации;
    
КонецФункции
11 NIGHTHUNTER
 
05.05.22
13:34
(9) Взял из примера, на основе которого делаю.
12 NIGHTHUNTER
 
05.05.22
13:34
(10) Я делаю по примеру имеющейся обработки.
13 NIGHTHUNTER
 
05.05.22
13:35
как появляется фоновое задание?
14 NIGHTHUNTER
 
05.05.22
13:36
как мне отладить (0) ?
15 vicof
 
05.05.22
13:53
(14) Поставить режим отладчик и запустить отладчик с подклчюенными фоновыми заданиями и отладкой на сервере.
16 vicof
 
05.05.22
13:54
режим отладки*
17 NIGHTHUNTER
 
05.05.22
15:40
(15) Буду пробовать!!!!
А то я реально осел, и стал затухать.

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

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

Я ее переделал, на вывод сообщения пока. Но с фоновыми заданиями не работал же. И регламентными. ну так, не часто.

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

Нужно собраться и делать. Буду.
18 Kassern
 
05.05.22
15:49
(14) а смысл регламентные задания так ловить и отлаживать? Не проще поместить код во внешнюю обработку и проверить, что она работает. Просто нужно учитывать как работают регламентные задания, что там можно делать, а что нельзя. Если понимание есть, то без проблем ваш код, проверенный во внешней обработке будет работать в регламентном задании.
19 Kassern
 
05.05.22
15:51
всякие там оповещения на форму и т.д. не надо пихать в регламентные задания. если уж хотите оповестить, создайте задачу зверу, или письмо ему напишите. Так же сервер может не совпадать с вашей рабочей машинкой, это тоже нужно учитывать. Так же стоить понимать, под каким юзвером будет запускаться данное рег задание и есть ли у него права на исполнение этого кода.
20 NIGHTHUNTER
 
05.05.22
15:57
(18) Я проверил во внешней обработке его. Там тольк овывод сообщения. Оно выводится. По кнопке с формы.

//
&НаКлиенте
Процедура ОтправитьУведомление(Команда)
    ОтправитьУведомлениеНаСервере();
КонецПроцедуры
//
Процедура ОтправитьУведомлениеНаСервере()
    ДанныйОбъект = РеквизитФормыВЗначение("Объект");
    ДанныйОбъект.ОтправкаУведомленияНаРаcсчитаннуюДату();
КонецПроцедуры
//

Дальше, я уже переделав, код модуля на тот что в (0), загружаю обработку во внешние. И делаю расписание. Запускать каждые три секунды например.

И надеюсь вывод даты времени в сообщении, каждые три секунды на экране. Но что то не идет. Какие то ошибки. Я с непривычки, в шоке и не понимаю. что смотреть. Что где не так?!
21 NIGHTHUNTER
 
05.05.22
15:58
(19) Пока просто доступ к регламентному фоновому заданию в отладке хотел получить и увидеть что выводятся сообщения.

И уже настраиваться на свою задачу. На проверку даты в документе. И отправки уведомлений.
22 Kassern
 
05.05.22
15:59
(20) блин услышьте меня, не будет вам регламентное задание возвращать сообщение на форму, оно к ней не привязано
23 Kassern
 
05.05.22
15:59
(20) хотите проверить, тупо создайте текстовый файлик с сообщением на жестком диске.
24 Fish
 
05.05.22
16:01
Блин. ТС - это же LivingStar
25 Kassern
 
05.05.22
16:02
вы когда обычной обработкой сообщение пользователю делаете, у вас оно возвращается обратно на клиент, а регламентное задание без всякого клиента запускается, сразу на сервере, ему некуда возвращать сообщение
26 Kassern
 
05.05.22
16:03
(24) видите какой уже прогресс, уже с ЕРП работает)
27 NIGHTHUNTER
 
05.05.22
16:09
(22) Понял! Извините, я не знал. Спасибо, за подсказку. Буду проверять как то тогда.

Там какие то ошибки, шли, может из за этого конечно.
28 nodrama
 
05.05.22
16:17
Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    
    //представление команды в пользовательском режиме
    НоваяКоманда.Представление = "Команда1НаСервере";
    НоваяКоманда.Идентификатор = НоваяКоманда.Представление;
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    
    Возврат ПараметрыРегистрации;
    
КонецФункции    


Функция ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды) Экспорт
    
    Если ИдентификаторКоманды = "Команда1НаСервере" Тогда
        Команда1НаСервере();
    КонецЕсли;
    
КонецФункции

&НаСервере
Процедура Команда1НаСервере()
// Тут то что нужно сделать регламентным заданием.
КонецПроцедуры

Все работает, пользуйся, мб пригодится

Далее расписание в обработке настраиваешь и усе
29 NIGHTHUNTER
 
05.05.22
16:19
(28) Спасибо, я буду пробовать!
В (0) взято сказали из работающей внешней обработки регламентного задания.
Там больше процедур чем у вас, пока не знаю на сколько они все важны. Я буду проверять.
30 nodrama
 
05.05.22
16:30
(29) Ну моя точно работает, вчера создавал себе ))
31 NIGHTHUNTER
 
05.05.22
16:35
Ок, завтра буду проверять.

Но отсутствующие процедуры, что в (0) тоже для чего то нужны. Что то куда то добавляют.

Завтра буду настраивать.
32 hhhh
 
05.05.22
17:23
(31) в (0) у вас вообще старинный какой-то пример, наверно где-то 2009 года. Скопипастите более свежий пример этой функции СведенияОВнешнейОбработке() . в демобазе БСП посмотрите.
33 Kassern
 
05.05.22
17:24
(32) я ему уже привел выше прям код для этой процедуры верный
34 NIGHTHUNTER
 
06.05.22
03:31
Буду собирать сегодня.
35 NIGHTHUNTER
 
06.05.22
10:11
Создал я прототип необходимого регламентного фонового задания.
Как сейчас его подключать?

Загрузить в Администрирование - Печатные формы и обработки - Дополнительные отчеты и обработки ?

Как оно должно появиться в Администрирование - Обслуживание - Регламентные операции - Регламентные и фоновые задания ?
36 NIGHTHUNTER
 
06.05.22
10:12
Как написали в (28) добавить нужно только в Администрирование - Печатные формы и обработки - Дополнительные отчеты и обработки и настроить расписание ?

Тут само появится Администрирование - Обслуживание - Регламентные операции - Регламентные и фоновые задания ?
37 Kassern
 
06.05.22
10:13
(35) а вы добавьте и все увидите
38 NIGHTHUNTER
 
06.05.22
10:22
(37) Ясно, спасибо!
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.