Имя: Пароль:
1C
 
Регламентное задание
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с с открытием внешней обработки..

Ужаас.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн