Имя: Пароль:
1C
1С v8
Как закрыть программу после окончания обмена?
0 Мигрень
 
16.10.16
19:43
УТ 11.2 Файловая. РИБ. Сеанс запустился с планировщика Винды. По регламентному заданию прошел обмен. Как завершить сеанс?
1 RomanYS
 
16.10.16
19:46
(0) смотря где этот код запускался. Где-то достаточно
Отказ = Истина;
В общем случае
ЗавершитьРаботуСистемы();//вроде бы
2 Мигрень
 
16.10.16
19:48
(1) Да про общий случай понятно. Но у меня не общий случай, а частный. Он описан в (0). Какой код вас интересует, который "запускается", я вам расскажу. Но в (0) вроде все подробно доступно описано, где что запускается.
3 MaxS
 
16.10.16
19:54
Подключить внешнюю обработку, которая в регламентом задании проверяет состояние обмена. Если завершен, то (1)
4 Мигрень
 
16.10.16
19:59
(3) Не получится. Команда ЗавершитьРаботуСистемы() выполняется на клиенте. А регламентное задание с запуском на клиенте "Открытие формы" не может быть подключено к регламентному заданию.
5 Мигрень
 
16.10.16
20:13
(+4) Вернее так. Обработка с видом запуска на клиенте (Открытие формы) не может быть подключена к регламентному заданию. Иначе можно было бы написать обработку, имеющую в модуле формы одну строку, подключить её к регламентному заданию, назначить ей расписание и всё.
6 Мигрень
 
16.10.16
20:27
О, придумал. Из модуля приложения запустить форму и пускай она висит открытой. Когда завершится обмен, серверная процедура обмена передаст сообщение форме, а та закроет программу.

Как такое решение? Или можно проще.
7 RomanYS
 
16.10.16
20:36
отказ = истина
приначалеработысистемы
и никаких регламентных
8 Мигрень
 
16.10.16
20:40
(7) Как это? А обмен как же? Мне обмен сделать нужно.
9 RomanYS
 
16.10.16
20:46
(8) так и делай в приначалеработысистемы
10 Мигрень
 
16.10.16
20:53
(9) Ну можно и так, чичас попробую!
11 assasu
 
17.10.16
05:21
(6) не надо заниматься этим тряхомудием...
есть стандартная настройка, которая говорит что выполнять обмен надо при запуске системы. Далее надо запустить под нужным пользователем и потом (1)
12 Wit77
 
17.10.16
05:29
(11) можно чуть проще, в настройках обмена указываем, что запускать обмен при завершении работы системы. Пишем обработку с одной строчкой ЗавершитьРаботуСистемы() и запускаем эту обработку при старте 1с через параметр.
13 Wit77
 
17.10.16
05:29
(12) на обычных формах точно работало.
14 assasu
 
17.10.16
07:06
(12) что удивительно, если обмен делать при запуске, а не при завершении , то обработка будет тоже с одной строчкой ЗавершитьРаботу...
15 MaxS
 
17.10.16
10:23
(4) Моё дело предложить типовое решение, использующее функционал БСП, где обработку можно запускать как на клиенте так и на сервере...
Ваше дело найти причины для изобретения другого велосипеда... ;)
16 Мигрень
 
17.10.16
11:09
(11) Нет такой настройки в УТ 11.2, я не нашел.
17 Мигрень
 
17.10.16
11:11
(12) Нет такой настройки в УТ 11.2, я не нашел.
18 Serg_1960
 
17.10.16
11:24
Не свисти,  денег не будет :) Эта "нет такой настройки" называется обмен данными, "автоматический обмен".

Кстати у меня так работало и не возбухало:

Процедура ПриНачалеРаботыСистемы()
...
   Если ПараметрыСеанса.ТекущийПользователь = Константы.ПользовательДляВыполненияРегламентныхЗаданийВФайловомВарианте.Получить() Тогда
      ЗавершитьРаботуСистемы();
   КонецЕсли;
КонецПроцедуры
19 Serg_1960
 
17.10.16
11:26
+ эээ... Хотя это не принципиально, но у меня УПП, естественно обычные формы, толстый клиент.
20 Serg_1960
 
17.10.16
11:31
(12) Можно ещё проще :) без внесения изменений в конфигурацию. Используем командную строку для вызова внешней обработки, в которой инициализация запуска обмена данными и завершение сеанса работы.
21 Мигрень
 
17.10.16
11:35
(18) Ты видать УТ11 никогда не открывал. Нет такой настройки, чтобы при включении программы обмен шел. И при выключении тоже нет.
22 Мигрень
 
17.10.16
11:37
(20) Да вот так пожалуй и сделаю. Процедуру из БСП, которую нужно дернуть, я уже нашел. Но типовой настройки НЕТ.
23 Wit77
 
17.10.16
11:42
(20) собственно я про это и написал. :) обработка внешняя. Путь к ней передаем как параметр в командной строке. Весь цимес в том, что не надо конфигурацию трогать.
24 Wit77
 
17.10.16
11:43
(20) если нет в 11 настроек таких - тогда да, можно сразу все в обработке написать и старт обмена и завершение работы
25 Мигрень
 
17.10.16
12:13
(20) Н-да, ничего не получилось. Программа сразу закрывается, обмен не происходит. Оно и понятно, поскольку обмен - это фоновое задание.

Вопрос остается открытым. Как закрыть программу после окончания обмена? Как на клиенте отловить момент, когда в фоновом задании на сервере закончился обмен?
26 Мигрень
 
17.10.16
12:23
А молодцы программисты БСП, они предусмотрели отсылку оповещения с сервера после окончания обмена. Его нужно перехватить и обработать.
27 MaxS
 
17.10.16
12:51
Обработку внешнюю можно штатно в режиме предприятия добавить и назначить расписание.
Запускается база, запускается обмен как это сделано сейчас,
параллельно по расписанию например каждые 5 минут в течение ночи запускается обработка в режиме "ВызовСерверногоМетода",  проверяется состояние обмена. Если он завершался этой ночью, завершает работу базы.
Сам такого не пробовал ))
Есть такая команда Disconnect
...
// Получить соединения базы.
СоединенияБазы = Сервер.GetInfoBaseConnections(ИнформационнаяБаза);

// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
      Сервер.Disconnect(Соединение);
КонецЦикла;
28 Мигрень
 
17.10.16
14:24
(27) Нет, это все ерунда.

На данный момент добился следующего. Есть внешняя обработка. Если её открыть через Файл-открыть, то отработает процедура ПриОтркрытии(), которая запустит фоновый обмен и закроет потом программу.

Если же тоже самое сделать, подключив обработку как внешнюю, и открыть её через интерфейс "ДополнительныеОбработки", то она не запускает фоновый процесс обмена.

Если нажать на кнопку на форме обработки и дернуть запуск обмена, то он конечно идет. А автоматически - не идет. Вот зараза.

Какая-то засада в БСП.
29 Мигрень
 
17.10.16
14:59
Ну, в общем, мне надоело возиться с этой ерундой, добавил обработку в конфигурацию и дергаю ей из ПриНачалеРаботыСистемы. Остальное делает обработка.
30 Serg_1960
 
17.10.16
15:35
(25) Тьфу, чёрт, у тебя же файловая версия :( Нет сеанса - некому фоновое задание выполнять :( Тебе нужно было в конце обработки поставить ожидание завершения работы фонового задания.
31 Мигрень
 
17.10.16
16:29
(30) это-то я решил, обработка ждет окончания обмена. Там другая засада, описанная в (28).
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс