Благими намерениями…
Решил сделать клиенту хорошую вещь — чтобы сеанс автообмена запускался автоматически.
Для этого каждый 15 минут запускаю «C:\Program Files (x86)\1cv8\common\1cestart.exe» с параметрами: /F»C:\MYBASE» /DisableStartupMessages. Авторизация стоит Windows, поэтому имя пользователя прописывать не надо.
DisableStartupMessages — важно, иначе будет зависать на сообщениях, когда конфигурация не соответствует базе данных.
Перед началом работы системы проверяю, не запущен ли уже сеанс автообмена:
&НаКлиенте
Процедура ПередНачаломРаботыСистемы(Отказ)
//Осипов 2020-03-19
ОшибкаЗапускаСеанса = ВозможенЗапускСеанса();
Если ОшибкаЗапускаСеанса <> «» Тогда
Предупреждение(ОшибкаЗапускаСеанса, 3);
ЗавершитьРаботуСистемы(Ложь);
Возврат;
КонецЕсли;
//…
КонецПроцедуры;
Сама проверка такая:
Функция ВозможенЗапускСеанса() Экспорт
//Осипов 2020-03-19
//Пустая строка, если возможно иначе текст ошибки
Если Получить.ЗапретитьОткрытиеНесколькихСеансов() Тогда
//Осипов 2020-03-14
Если Получить.КоличествоСоединенийИнформационнойБазыТекущегоПользователя() > 1 Тогда
Возврат
«Вам запрещено открывать несколько экземпляров программы одновременно!
|НЕ ПЕРЕЗАГРУЖАЙТЕ КОМПЬЮТЕР!!!»
КонецЕсли;
КонецЕсли;
Возврат «»;
КонецФункции
Проверка количества сеансов:
Функция КоличествоСоединенийИнформационнойБазыТекущегоПользователя() Экспорт
Соединения = ПолучитьСоединенияИнформационнойБазы();
ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Количество = 0;
Для Каждого Соединение ИЗ Соединения Цикл
Если Соединение.Пользователь.УникальныйИдентификатор = ТекПользователь.УникальныйИдентификатор Тогда
Количество = Количество + 1;
КонецЕсли;
КонецЦикла;
Возврат Количество;
КонецФункции
Думал, всё ОК, но спустя какое-то время пожаловался, что на точках каждые 15 минут запускается автообмен. Я сразу же отметил эту цифру — 15 минут и понял, что что-то не так с автообменом.
Прошелся отладчиком — и действительн, несмотря на то, что «Перед началом системы» выдает отказ, событие «При начале работы системы все равно стартует». Пришлось и в нем прописать проверку:
Процедура ПриНачалеРаботыСистемы()
//Осипов 2020-03-19, при начале срабатывает даже если ПередНачалом было отказано
ОшибкаЗапускаСеанса = ВозможенЗапускСеанса();
Если ОшибкаЗапускаСеанса <> «» Тогда
ЗавершитьРаботуСистемы(Ложь);
Возврат;
КонецЕсли;
//… Тут был код старта автообмена
КонецПроцедуры
После этого все заработало.
Свежие комментарии