Благими намерениями…

Решил сделать клиенту хорошую вещь — чтобы сеанс автообмена запускался автоматически.

Для этого каждый 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, при начале срабатывает даже если ПередНачалом было отказано
   
ОшибкаЗапускаСеанса = ВозможенЗапускСеанса();
    Если
ОшибкаЗапускаСеанса <> «» Тогда
       
ЗавершитьРаботуСистемы(Ложь);
        Возврат;
    КонецЕсли;

   
//… Тут был код старта автообмена
КонецПроцедуры

После этого все заработало.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *