Регламентное задание - ВызовКлиентскогоМетода

1. Timur.V 78 01.02.19 16:52 Сейчас в теме
Нужно создать регламентное задание, которые будет выгружать файлы по расписанию.
Выгрузка на яндекс-диск работает только на Клиенте (тот код, который ниже).
Поэтому рег.задание тоже должно выполняться на клиенте по расписанию, без участия человека.

Вот мой код:

#Область Регистрация_внешней_Обработки

Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Версия = "1.0.1";
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
	
	ПараметрыРегистрации.Вставить("Наименование", "Выгрузка файлов на Яндекс-диск");
	ПараметрыРегистрации.Вставить("Информация", "Выгрузка файлов на Яндекс-диск");
	
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Выгрузка файлов на Яндекс-диск'");
    НоваяКоманда.Идентификатор = "ВыгрузкаФайлов";
    НоваяКоманда.Использование = "ВызовКлиентскогоМетода";
	
	Возврат ПараметрыРегистрации;
КонецФункции

#КонецОбласти 
Показать


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	             	  
	Если ИдентификаторКоманды = "ВыгрузкаФайлов" Тогда 
		

	///подключаем ЯД 
	Попытка
		WshShell = Новый COMОбъект("WScript.Shell");WshShell.Run("D:\TT\YandexDisk.bat", 2 , 1);
	Исключение
		Сообщить(ОписаниеОшибки() );
	КонецПопытки;
	 	                       
	ТекстС = Новый ТекстовыйДокумент ;
	ИмяФайлаС = "H:\Старт_Тест" + Строка(ТекущаяДата()) + ".txt";
	ТекстС.ДобавитьСтроку("Старт тест: " + ТекущаяДата() );
   	ТекстС.Записать(ИмяФайлаС, КодировкаТекста.UTF8); 

	//Отключаем ЯД
   	Попытка
    	WshShell = Новый COMОбъект("WScript.Shell");WshShell.Run("D:\TT\delYandexDisk.bat", 2 , 1);
    Исключение
    	Сообщить(ОписаниеОшибки() );
    КонецПопытки;	
		
	КонецЕсли;
		             	     				
КонецПроцедуры 

Показать


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

Файлы для выгрузки формируются на сервере.

Может у меня рег. задание неправильно настроено?
Можно ли выполнять код на Клиенте в рег.задании по расписанию?
Прикрепленные файлы:
ВыгрузкаФайловЯндекс.epf
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 01.02.19 17:17 Сейчас в теме
(1) на сервере выгружать в определенную папку. Эту папке расшарить.
На киенте при необходимости копировать/перемещать файлы в яндекс-диск папку. Простой батник.
5. Timur.V 78 01.02.19 17:20 Сейчас в теме
(4)
Мне нужен робот.
Делать задачи в операционной системе, чтобы запускать батник? (не нравится такое решение)
Хотелось бы решить средствами 1С эту задачу.
7. spacecraft 01.02.19 17:24 Сейчас в теме
(5) тут варианты: нельзя или не нравится. Выбирайте.
Можно сервис сделать, как файлы (а лучше по выставлению флага) появятся в нужной папке, тогда запускать копирование/перемещение.
6. Xershi 1486 01.02.19 17:23 Сейчас в теме
(1) Нет и нет.
Переписать обработку для регламентного задания.
Например как 5 обработке https://infostart.ru/public/622195/
8. Timur.V 78 01.02.19 17:28 Сейчас в теме
(6)
А она мне точно подойдет?
Я выложил в самом начале как выглядит у меня рег.задание.

Мне нужно выполнять код &НаКлиенте по расписанию (только так у меня яндекс-диск работает)
11. Xershi 1486 01.02.19 17:41 Сейчас в теме
(8) в обработке сможете посмотреть пример, как реализовывать код для регламентного задания.
Еще раз повторю регламентное задание выполняет код только на сервере. Пора это уже понять и не привязываться к &НаКлиенте!
15. Timur.V 78 01.02.19 17:53 Сейчас в теме
(11)
У меня есть пример, робот выполняет работу на сервере (рег.задание по расписанию).
https://infostart.ru/public/875699/
Но как мне это может помочь?

Расскажите пожалуйста, как бы вы делали эту задачу?
Чтобы выгружались и загружались файлы между базами через яндекс-диск, по расписанию.
Желательно всё сделать средствами 1С.

Из того, что есть - пользователь должен руками нажимать кнопку (внешняя обработка), чтобы запустился процесс
выгрузки файлов из 1с и копирования на яндекс-диск.
Хочется всё на робота повесить.
22. Xershi 1486 01.02.19 18:13 Сейчас в теме
(15) переписал код, как в примере, чтобы кнопка была в коде.
23. Timur.V 78 01.02.19 18:27 Сейчас в теме
(22)
Что нужно скачать, 5-ую обработку?
то что в (15) получится сделать автоматом?
25. Xershi 1486 01.02.19 18:30 Сейчас в теме
(23) в 5 там пример того что вам нужно сделать. Какой код там заменить будете решать сами проанализировав ваш, который выполняется на клиенте.
26. Timur.V 78 01.02.19 19:08 Сейчас в теме
(25)
Скачал вашу обработку.
Получается, вы предлагаете пользователю нажимать кнопку.
Автоматом сделать так, чтобы выгружались данные из 1с в файлы и загружались невозможно?
(используя яндекс-диск т.к. связи между базами 1с совсем нет)

http-сервисы - нельзя настроить для этой задачи.
27. Xershi 1486 01.02.19 20:31 Сейчас в теме
(26) почему не возможно, заложите статику и выполняйте в регламенте.
29. oleg-x 27 04.02.19 12:57 Сейчас в теме
(1) Тут два нормальных варианта может быть
1) Переделать на работу через сервер.
2) Написать скрипт (подключение к базе и запуск процедура, которая работает на клиенте), который будет запускаться по расписанию (настроить расписание в операционке) .
Все остальное костыли, хотя и второй вариант костыльный, но не будет нагружать сервер.
2. antz 01.02.19 16:56 Сейчас в теме
Ну, регламентные задания выполняются на сервере, с сервера до клиента достучаться нельзя.
Почему нельзя выгружать на яндекс-диск с сервера? Для этого не нужно никаких батников, это прекрасно делается командой КопироватьФайл.
Maximysis; +1 Ответить
3. Timur.V 78 01.02.19 17:10 Сейчас в теме
(2)
&НаКлиенте - и яндекс-диск подключается и копирование происходит.

а если использовать &НаСервере - яндекс-диск не подключается (руками подключаем)
КопироватьФайл("D:\TT\1.txt", "H:\88.txt"); - не копирует.
9. antz 01.02.19 17:29 Сейчас в теме
То есть, на сервере такая команда

КопироватьФайл(ИмяФайлаИсточника, "https://login:password@webdav.yandex.ru/" + ИмяФайла);


не работает?
10. Timur.V 78 01.02.19 17:39 Сейчас в теме
(9)
КопироватьФайл(ИмяФайлаИсточника, "https://login:password@webdav.yandex.ru/" + ИмяФайла);

&НаСервере
Процедура Команда2НаСервере()
//КопироватьФайл("D:\TT\1.txt", "H:\88.txt");
КопироватьФайл("D:\TT\1.txt", "https://Почта:Пароль@webdav.yandex.ru/" + "882.txt");
КонецПроцедуры

Ошибка работы с Интернет: Не могу установить соединение
12. independ 1520 01.02.19 17:41 Сейчас в теме
(10) можно копировать утилитой Curl
curl -k -T backup.rar https://login:password@webdav.yandex.ru -o /dev/stdout

рабочий вариант
14. Timur.V 78 01.02.19 17:46 Сейчас в теме
(12)
утилитой Curl

У меня win7 на компьютерах. Доп. программы нежелательны.
16. independ 1520 01.02.19 17:57 Сейчас в теме
(14) тогда через подключение сетевого диска
net use z: https://webdav.yandex.ru password/USER:Login /persistent:yes
17. Timur.V 78 01.02.19 18:02 Сейчас в теме
(16)
У меня сетевой диск яндекса подключается только &НаКлиенте
Поэтому и вопрос, как сделать робота ?
(если рег.задание нельзя запустить по расписанию, чтобы выполнился клиентский код)

Как автоматизировать процесс выгрузки и загрузки? (нужно без участия человека)
Если рег.здания выполняются только на сервере.
19. spacecraft 01.02.19 18:06 Сейчас в теме
(17) если только средствами 1С и на клиенте, тогда:
На клиенте подключить обработчик ожидания, который будет запускать фоновое задание и передавать туда адрес во временном хранилище. По выполнению фонового хранилища загружать во временное хранилище двоичные данные файла. На клиенте получать и сохранять.
21. Timur.V 78 01.02.19 18:11 Сейчас в теме
(19)
(18)
У меня типовые базы. Хотелось бы, чтобы они таковыми и остались.
Не очень понял, к чему подключать обработчик ожидания? Может пример есть?
13. antz 01.02.19 17:45 Сейчас в теме
(10) Просто на клиенте, чтобы работало "по расписанию" нужно запускать на клиентской машине 1с с включенной обработкой ожидания, которая проверяет текущее время на совпадение с временем расписания и что-то делает, если оно совпадает. Других вариантов организовать что-либо на клиенте по расписанию нет. Или пытать админа, чтобы открыл доступ к ЯД на сервере или продолжать делать руками.
18. acanta 01.02.19 18:04 Сейчас в теме
Обработка ожидания на клиентской форме в управляемых формах тоже уже не работает?
20. acanta 01.02.19 18:09 Сейчас в теме
На клиенте как можно узнать о том, что 1) фоновое задание запущено 2) фоновое задание завершено?
https://its.1c.ru/db/v8std/content/2149184291/hdoc
28. palsergeich 01.02.19 21:58 Сейчас в теме
Если админ параноик, что в общем то не является минусом, то пусть развернет отдельную виртуалку c минимальным набором прав, из которой будет выход только на яндекс и одну папку в сети.
Реализация на обработчиках ожидания - очень плохо для производительности (между сеансами единственный (ну есть еще сервер взаимодействия и костыли типо отметок на шаре) способ передать информацию - обратится на сервер), и такими микрозапросами можно очень здорово словить проблем.
Я видел базу в которой 90% нагрузки по результатам ТЖ был код обращения к серверу из обработчиков ожидания, 99,9 из которых холостые.
Естественно пользователи очень страдали.
30. user596430_gleb21 3 04.02.19 14:35 Сейчас в теме
Повесить обработчик ожидания на открытие какой нибудь формы на начальной странице.
Интервал установить расчетный ( например разница между временем запуска обработки и временем при открытии )
Выполнять однократно.
Можно сделать в расширении.
spodAlex095; user1278402; +2 Ответить
31. shetill 30 16.12.19 19:08 Сейчас в теме
Понимаю .что тема уже устарела. Но! Меня аж прям распирает))) Сколько всего написано. А такой вариант никто не предложил,

&НаКлиенте 
Функция СведенияОВнешнейОбработке() Экспорт
....

    НоваяКоманда.Использование = "ВызовКлиентскогоМетода";
......
КонецФункции


и тогда спокойно можно назначать расписание, для клиентского метода
32. Xershi 1486 16.12.19 19:39 Сейчас в теме
(31) а что толку. Он же пользователю на сервере порезал права.
user1278402; +1 Ответить
33. spacecraft 16.12.19 20:03 Сейчас в теме
(31) ага, в регламентном задании...
Хорошо если в техжурнал ошибку напишет.
user1278402; +1 Ответить
34. Mihasya 40 18.12.19 06:38 Сейчас в теме
(31) Автор же написал:
При настройке внешней обработки, где настраивается расписание, там надпись: "Неприменимо для команд с вариантом запуска Вызов клиентского метода"
user1278402; +1 Ответить
35. shetill 30 18.12.19 09:34 Сейчас в теме
(34)
Вы внимательно посмотрите, что я написал! Код! Особое внимание, уделите директиве функции СведенияОВнешнейОбработке()
36. dhurricane 18.12.19 09:37 Сейчас в теме
(35) А не могли бы Вы прокомментировать, где именно необходимо в таком случае разместить функцию "СведенияОВнешнейОбработке"?
user1278402; +1 Ответить
37. shetill 30 18.12.19 09:43 Сейчас в теме
(36)
Всё там же, в модуле объекта (внешней обработки). Я проверял всё работает. Хотя для меня было открытием, что в модуле внешней обработки можно указать директиву "&НаКлиенте".
Что я проверил: сделал для функции "СведенияОВнешнейОбработке" директиву "&НаКлиенте", указал использование "ВызовКлиентскогоМетода" расписание, подключил к базе, в доп. обработки и "вуаля" расписание доступно. А вот как оно будет работать и как оно сможет вызывать клиентскую функцию (к какому клиенту привязываться), я честно говоря не представляю.
user1278402; +1 Ответить
38. Sashares 34 18.12.19 09:52 Сейчас в теме
(37) Даже если оно доступно в расписании, это ничего не даст. Регламентные задания запускаются на сервере. На сервере, Карл.
С чего вы решили, что ваша обработка вообще запускается и клиенсткий метод выполняется по этому расписанию?
user1278402; +1 Ответить
39. dhurricane 18.12.19 10:06 Сейчас в теме
(37) Я не поленился, откопал БСП версии 2.2 и проверил. Не сработало.

Хотя для меня было открытием, что в модуле внешней обработки можно указать директиву "&НаКлиенте".
Нет никакой загадки, если Вы запускаете 1С в толстом клиенте. В противном случае компилятор не выругается, но и функция при регистрации обработки найдена не будет.

"вуаля" расписание доступно
Нет, расписание доступным не стало. На какой конфигурации Вы тестировали? Какая у нее версия стандартной библиотеки?

А вот как оно будет работать и как оно сможет вызывать клиентскую функцию (к какому клиенту привязываться), я честно говоря не представляю.
Это ключевой момент. Извините за резкость, но зачем же Вы спешите советовать, если даже не представляете, как оно будет работать?
user774630; +1 Ответить
40. shetill 30 18.12.19 11:30 Сейчас в теме
Да. Что-то я погорячился (лопухнулся).
Делал всё на УТ11+CRM (от рарус).
Сейчас ещё раз всё детально проверил и что выяснил:
1.Дало мне сделать для клиентского вызова, потому что я уже подключенную обработку, через обновить делал. По этому и расписание доступно оставалось, думаю баг какой-то. Что самое плохое в этом баге, что при обновлении не ругается и дает настроить расписание, но если принудительно запустить команду, выскакивает ошибка что функция "СведенияОВнешнейОбработке" не обнаружена
2.Если удалить и заново подключить, то расписание не доступно.
3.Действительно не ругается из-за того, что толстый клиент запускаю. Все из-за консоли СКД, не дает она в наборы данных заходить в тонком клиенте, вот я и добавил кнопку запуска толстого клиента и уже привык в нем запускать.
ivprovotorov; user1278402; +2 Ответить
41. Nowa 44 22.07.21 16:44 Сейчас в теме
https://its.1c.ru/db/metod8dev/content/5918/hdoc

Обработка есть, но возможности нет.

"регламентные задания существуют только в контексте сервера."
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот