|
Регламентное задание | ☑ | ||
---|---|---|---|---|
0
first_may
21.11.19
✎
11:16
|
Добрый день.
Есть некоторая обработка на УФ, которая выполняет алгоритм при нажатии кнопки на клиенте, то есть вызывается процедура, находящаяся в общем модуле с флажком Клиент. Подскажите пож, можно ли сделать регламентное задание, на основании кода этой обработки? То есть вызвать код на клиенте? |
|||
1
Радим1987
21.11.19
✎
11:28
|
А в чем сложность перенести на ОМ с флажком сервер?
|
|||
2
Darych
21.11.19
✎
11:28
|
фоновое... а зачем на клиенте?
|
|||
3
first_may
21.11.19
✎
11:33
|
(1) в конфиге поставить еще и Сервер?
(2) обработка уже работает на клиенте.. приходится постоянно запускать 1с и нажимать кнопку "Выполнить обмен" |
|||
4
Darych
21.11.19
✎
11:35
|
(3) задачу в общий модуль - запускать из обработки в фоне.
|
|||
5
ZDenis
21.11.19
✎
11:43
|
(1) На клиенте нельзя. Можно сделать папку, доступную по сети серверу 1С, и туда на локалке кидать файл обмена. Ну и само регламентное будет запускаться со стороны сервера соответственно
|
|||
6
ZDenis
21.11.19
✎
11:43
|
(5) --> (0)
|
|||
7
first_may
21.11.19
✎
11:44
|
(4) не совсем понял..
сейчас &НаКлиенте Процедура ВыполнитьОбмен() Экспорт ИнтеграцияКлиент.ВыполнитьОбмен(); КонецПроцедуры хотелось бы - это уже в модуле обработки для регламентного задания Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт Если ИдентификаторКоманды = "ОбменФоновая" Тогда ИнтеграцияКлиент.ВыполнитьОбмен(); - вот тут естественно ошибка КонецЕсли; КонецПроцедуры {ВнешняяОбработка.Обмен.МодульОбъекта(59,3)}: Переменная не определена (ИнтеграцияКлиент) <<?>>ИнтеграцияКлиент.ВыполнитьОбмен(); (Проверка: Сервер) |
|||
8
План счетов
21.11.19
✎
11:46
|
(7) не получится так
|
|||
9
План счетов
21.11.19
✎
11:46
|
Если уж точно клиент нужен по расписанию то
типа так: https://forum.infostart.ru/forum86/topic165369/ |
|||
10
Darych
21.11.19
✎
11:50
|
(9) не.. там проще - по педальке хотят.
|
|||
11
План счетов
21.11.19
✎
11:54
|
А есть у 1С видимость формы?
если есть то при открытии ПодключитьОбработчикОжидания + сделать форму невидимой ))) |
|||
12
Darych
21.11.19
✎
11:57
|
(11) а нах в УФ невидимой?)
|
|||
13
dmpl
21.11.19
✎
12:12
|
(7) Ну там же все равно потом идет вызов сервера - так что просто скопировать себе текст из ИнтеграцияКлиент.ВыполнитьОбмен()
|
|||
14
first_may
21.11.19
✎
12:19
|
для модуля ИнтеграцияКлиент
поставил флажок Сервер.. вроде как прошло, но выдалось сообщение в другом месте {ОбщийМодуль.ИнтеграцияКлиент.Модуль(88,22)}: Тип не определен (ОписаниеОповещения). Обработчик = Новый ОписаниеОповещения("ПодготовитьСообщенияКПередачеПодтверждениеПроведения", ИнтеграцияСлужебныйКлиент, Контекст); |
|||
15
Darych
21.11.19
✎
12:24
|
дык не спеши... почитай про фоновые задачи)
напихал) |
|||
16
first_may
21.11.19
✎
12:25
|
(15) "почитай про фоновые задачи" - что именно :)
|
|||
17
Darych
21.11.19
✎
12:30
|
(16) на итс найди для начала + описаниеоповещения() как работает)))
|
|||
18
first_may
21.11.19
✎
12:39
|
(17) вернул все обратно :)
|
|||
19
Darych
21.11.19
✎
12:40
|
(18) ну вот)))
|
|||
20
first_may
21.11.19
✎
12:47
|
(19) вернулся к началу.. с чего начать?
|
|||
21
Darych
21.11.19
✎
12:53
|
(20) по кнопке вызывай процедуру серверную с оповещением, которая будет делать то, что те нужно
|
|||
22
first_may
21.11.19
✎
13:14
|
(21) еще раз..
сейчас по кнопке &НаКлиенте Процедура ВыполнитьОбмен(Команда) ИнтеграцияКлиент.ВыполнитьОбмен(); КонецПроцедуры мне надо вместо этого написать то, что есть в ИнтеграцияКлиент.ВыполнитьОбмен(), то есть что в ней Процедура ВыполнитьОбмен(Организация = Неопределено, МестоДеятельности = Неопределено, ОповещениеПриЗавершении = Неопределено) Экспорт ОчиститьСообщения(); ДанныеДляВыполненияОбменаНаКлиенте = ИнтеграцияВызовСервера.ВыполнитьОбмен(Организация, МестоДеятельности); ИнтеграцияСлужебныйКлиент.ОбработатьОчередьПередачиДанных( ДанныеДляВыполненияОбменаНаКлиенте, ОповещениеПриЗавершении); КонецПроцедуры |
|||
23
Darych
21.11.19
✎
13:27
|
||||
24
first_may
21.11.19
✎
13:37
|
(23) я и делал аналогично..
в СведенияОВнешнейОбработке написал ДобавитьКоманду(Команды, "Обмен (фоновая)", "ОбменФоновая", "ВызовКлиентскогоМетода", Истина, ""); далее Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт Если ИдентификаторКоманды = "ОбменФоновая" Тогда ВыполнитьОбмен(); - вот эта находится в модуле формы и ее не видит КонецЕсли; КонецПроцедуры |
|||
25
Darych
21.11.19
✎
13:54
|
&НаСервере // не видит он с сервака твоих клиентских процедур
Процедура ВыполнитьОбмен(Команда) ИнтеграцияКлиент.ВыполнитьОбмен(); КонецПроцедуры |
|||
26
Darych
21.11.19
✎
13:56
|
&НаКлиенте
Процедура ВыполнитьОбменКлиент(Команда) ВыполнитьОбменКлиентСервер(); КонецПроцедуры &НаСервере Процедура ВыполнитьОбменКлиентСервер() ИнтеграцияКлиент.ВыполнитьОбмен(); КонецПроцедуры |
|||
27
first_may
21.11.19
✎
13:58
|
(25) да..
Но в описании сказано: Вариант "Вызов клиентского метода" означает, что будет вызвана процедура, размещённая в модуле формы внешней обработки. (26) и так я писал, но ИнтеграцияКлиент - он на клиенте.. если только у него флажок поставить Сервер |
|||
28
Darych
21.11.19
✎
13:58
|
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
Если ИдентификаторКоманды = "ОбменФоновая" Тогда ВыполнитьОбменКлиентСервер(); КонецЕсли; КонецПроцедуры |
|||
29
Darych
21.11.19
✎
14:02
|
вмандоль код процедуры из ом в обработку
|
|||
30
first_may
21.11.19
✎
14:11
|
(29) Все получилось!!! :)
Сейчас напишу как сделал. |
|||
31
first_may
21.11.19
✎
14:24
|
1 в СведенияОВнешнейОбработке() пишем
ДобавитьКоманду(Команды, "Обмен (фоновая)", "ОбменФоновая", "ВызовКлиентскогоМетода", Ложь, ""); 2 в модуле формы &НаКлиенте Процедура ВыполнитьОбмен(Команда) ВыполнитьОбменНаКлиенте(); КонецПроцедуры &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт Если ИдентификаторКоманды = "ОбменФоновая" Тогда ВыполнитьОбменНаКлиенте(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ВыполнитьОбменНаКлиенте() ИнтеграцияКлиент.ВыполнитьОбмен(); КонецПроцедуры а я писал в модуле объекта.. в итоге фоновое задание срабатывает, но настроить расписание нельзя, так как "Неприменимо для команд с вариантом запуска "Вызов клиентского метода" вот теперь второй вопрос, как заставить все это работать каждые 5 минут :). |
|||
32
Darych
21.11.19
✎
14:26
|
Вмандолить в сервер. Он рулит регламентом, а соотвессно и расписанием
|
|||
33
first_may
21.11.19
✎
14:30
|
(32) как писал выше?
|
|||
34
Darych
21.11.19
✎
14:34
|
(33) попробуй, мож взлетит...
|
|||
35
ГдеСобака Зарыта
21.11.19
✎
14:59
|
Всего то надо вызвать в регламенте серверную процедуру обмена, а понаписали тут всякой чепухи.
|
|||
36
first_may
21.11.19
✎
15:00
|
(35) вызвать в регламенте серверную процедуру обмена - да, но процедура на клиенте же.
|
|||
37
Darych
21.11.19
✎
15:03
|
(35) ниче ты не понимаешь в одинананизме.. уходи)
|
|||
38
ГдеСобака Зарыта
21.11.19
✎
15:04
|
Клиентская процедура серверную вызывает. Ты посмотри что там дальше по стеку
|
|||
39
Darych
21.11.19
✎
15:05
|
(38) что, серверная клиентскую зовет?)
|
|||
40
ГдеСобака Зарыта
21.11.19
✎
15:09
|
(39) Ты даже читать не умеешь. Понятно почему вы уже три часа на всякую ерунду потратили
|
|||
41
Darych
21.11.19
✎
15:12
|
(40) иди в пень... пришел разрульщик стеком размахивая... ессно, что вызывает сервак: данные то не с клиента берет. Потешил свое эго, мегакодер? Человек зато поковырялся и немного запомнил
|
|||
42
first_may
21.11.19
✎
15:13
|
:)
Надо сделать регламентное задание по расписанию. Для этого необходимо что бы вызов был на сервере - это сделал. Алгоритм уже работает, но на клиенте. Вот надо как это это соеденить. Не хотелось бы вызывать конечно 1с с вызовом внешней обработкой. |
|||
43
ГдеСобака Зарыта
21.11.19
✎
15:17
|
(42) Да что ж ты какой непроходимый?
Покажи код что у тебя в этой вот функции ИнтеграцияВызовСервера.ВыполнитьОбмен(Организация, МестоДеятельности) |
|||
44
first_may
21.11.19
✎
15:19
|
(43) вот
ВозвращаемоеЗначение = Новый Структура; ВозвращаемоеЗначение.Вставить("Изменения" , Новый Массив); ВозвращаемоеЗначение.Вставить("СообщенияКПередаче" , Новый Массив); ВозвращаемоеЗначение.Вставить("НастройкиОбмена" , Новый Соответствие); ВозвращаемоеЗначение.Вставить("РегистраторыВыбытия" , Новый Соответствие); ВозвращаемоеЗначение.Вставить("ВыполнитьОбменПоРасписанию", Ложь); НастройкиОбмена = НастройкиОбмена(Организация, МестоДеятельности, ДатыПоследнегоЗапуска); ВозвращаемоеЗначение.НастройкиОбмена = НастройкиОбмена.ОбменНаКлиенте; ВозвращаемоеЗначение.РегистраторыВыбытия = НастройкиОбмена.РегистраторыВыбытия; //ВозвращаемоеЗначение.ВыполнитьОбменПоРасписанию = // ДатыПоследнегоЗапуска <> Неопределено // И НастройкиОбмена.ОбменНаКлиенте.Количество() > 0; РезультатОбработкиОчереди = ОбработатьОчередьПередачиДанных(НастройкиОбмена); Для Каждого ЭлементДанных Из РезультатОбработкиОчереди.Изменения Цикл ВозвращаемоеЗначение.Изменения.Добавить(ЭлементДанных); КонецЦикла; Для Каждого ЭлементДанных Из РезультатОбработкиОчереди.СообщенияКПередаче Цикл ВозвращаемоеЗначение.СообщенияКПередаче.Добавить(ЭлементДанных); КонецЦикла; Для Каждого ТранспортныйМодуль Из НастройкиОбмена.ОбменНаСервере Цикл Если ТранспортныйМодуль.Значение.ЗагружатьВходящиеДокументы Тогда Транспорт.ПолучитьВходящиеСообщения(ТранспортныйМодуль.Значение); КонецЕсли; КонецЦикла; Если НастройкиОбмена.ОбменНаСервере.Количество() > 0 Тогда Результат = ОбработатьВходящиеСообщения(ИнтеграцияКлиентСервер.СубъектыОбращенияНастроекОбмена(НастройкиОбмена.ОбменНаСервере)); Для Каждого ЭлементДанных Из Результат.Изменения Цикл ВозвращаемоеЗначение.Изменения.Добавить(ЭлементДанных); КонецЦикла; КонецЕсли; ШаблонСообщения = НСтр("ru = 'Для места деятельности %1 не заданы настройки подключения.'"); Для Каждого ОрганизацияБезНастроек Из НастройкиОбмена.БезНастроек Цикл Если ЗначениеЗаполнено(ОрганизацияБезНастроек.МестоДеятельности) Тогда ПредставлениеОрганизации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", ОрганизацияБезНастроек.Организация, ОрганизацияБезНастроек.МестоДеятельности); Иначе ПредставлениеОрганизации = Строка(ОрганизацияБезНастроек.Организация); КонецЕсли; ОбщегоНазначения.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ПредставлениеОрганизации)); КонецЦикла; Возврат ВозвращаемоеЗначение; |
|||
45
ГдеСобака Зарыта
21.11.19
✎
15:38
|
(44) Чухонцы какие-то писали тебе конфу. Даже запуска в серверном модуле нет. Можешь попробовать поставить на модуль ИнтеграцияВызовСервера галку сервер, да вызывать эту процедуру.
|
|||
46
first_may
21.11.19
✎
16:28
|
(45) поставить на модуль ИнтеграцияВызовСервера галку сервер - уже есть..
С одной этой процедурой не получается обмен. Да и по тексту вижу, что все построено на клиенте. Например ТранспортКлиент.ПолучитьВходящиеСообщения(ТранспортныйМодуль, Оповестить); |
|||
47
first_may
21.11.19
✎
16:41
|
Бред наверное, но спрошу.
А можно по регламентному заданию на сервере открывать допобработку, а уже в ней при открытии на клиенте вызывать то, что надо? |
|||
48
ДенисЧ
21.11.19
✎
16:43
|
(47) А как ты с сервера уйдешь на клиента, чтобы там получить "открытие на клиенте"?
|
|||
49
first_may
21.11.19
✎
16:44
|
В итоге надо переписывать все под сервер. Или пусть винда запускает 1с с открытием внешней обработки..
Ужаас. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |