8.х Не выполняется регламентное задание

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем fusiok, 23 мар 2014.

  1. TopicStarter Overlay
    fusiok
    Offline

    fusiok Опытный в 1С

    Регистрация:
    30 окт 2013
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте! есть такой код:

    Код:
    Блокировка=Новый БлокировкаСеансов;
        Блокировка.КодРазрешения="КодРазрешения";
        Блокировка.Начало=ТекущаяДата();
        Блокировка.Конец=ТекущаяДата()+180;
        Блокировка.Сообщение="Запрещена работа с системой на время выполнения регламентных заданий!!!";
        Блокировка.Установлена=Истина;
        //УстановитьБлокировкуУстановкиСоединений(Блокировка); 
        УстановитьБлокировкуСеансов(Блокировка);
       
        ПодстрокиСтрокиСоединения  = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаСоединенияИнформационнойБазы(),";");
           
            Если ПодстрокиСтрокиСоединения.Количество()> 1 и Лев(ПодстрокиСтрокиСоединения[0], 5) = "Srvr=" и Лев(ПодстрокиСтрокиСоединения[1], 4) = "Ref=" Тогда
               
                ИмяСервера = Сред(ПодстрокиСтрокиСоединения[0],7, СтрДлина(ПодстрокиСтрокиСоединения[0]) - 7);
                ИмяИБ      = Сред(ПодстрокиСтрокиСоединения[1],6, СтрДлина(ПодстрокиСтрокиСоединения[1]) - 6);
               
                ПодстрокиПараметровЗапуска = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска,";");
               
                Попытка
                   
                    ComConnector = Новый COMОбъект(УправлениеСоединениямиИБ.ИмяCOMСоединителя());
                   
                    РазделительПорта = Найти(ИмяСервера, ":");
                    Если РазделительПорта > 0 Тогда
                        ИмяСервера = Сред(ИмяСервера, 1, (РазделительПорта - 1));
                        НомерПортаКластера = Число(Сред(ИмяСервера, (РазделительПорта + 1)));
                    Иначе
                        НомерПортаКластера = ComConnector.RMngrPortDefault;
                    КонецЕсли;
                   
                    // Подключение к агенту сервера
                    ServerAgent = ComConnector.ConnectAgent(ИмяСервера);
                   
                    // Получим массив кластеров сервера у агента сервера
                    Clasters = ServerAgent.GetClusters();
                   
                    // Найдем необходимый нам кластер
                    Для Каждого Claster Из Clasters Цикл
                        Если Claster.MainPort <> НомерПортаКластера Тогда
                            Продолжить;
                        КонецЕсли;
                       
                        // Аутефикация к найденному кластеру
                        Если ПодстрокиПараметровЗапуска.Количество() > 2 Тогда //и Врег(ПодстрокиПараметровЗапуска[0]) = Врег("ЗавершитьРаботуПользователей") Тогда
                            ServerAgent.Authenticate(Claster,"Администратор", "пароль"); //ПодстрокиПараметровЗапуска[1], ПодстрокиПараметровЗапуска[2]);
                        Иначе
                            ServerAgent.Authenticate(Claster, "", "");
                        КонецЕсли;
                       
                        // Получаем список рабочих процессов
                        WorkingProcesses = ServerAgent.GetWorkingProcesses(Claster);
                       
                        Для Каждого WorkingProcess Из WorkingProcesses Цикл
                           
                            Если WorkingProcess.Running <> 1 Тогда
                                Продолжить;
                            КонецЕсли;
                           
                            // Для каждого рабочего процесса создаем соединение с рабочим процессом
                            ConnectToWorkProcess = ComConnector.ConnectWorkingProcess("tcp://" + WorkingProcess.HostName + ":" + Формат(WorkingProcess.MainPort, "ЧГ=0"));
                           
                            Если ПодстрокиПараметровЗапуска.Количество() > 2 Тогда // и Врег(ПодстрокиПараметровЗапуска[0]) = Врег("ЗавершитьРаботуПользователей") Тогда
                                ConnectToWorkProcess.AddAuthentication("Администратор", "пароль"); //ПодстрокиПараметровЗапуска[1], ПодстрокиПараметровЗапуска[2]);
                            Иначе
                                ConnectToWorkProcess.AddAuthentication(ИмяПользователя(), "");
                            КонецЕсли;
                           
                            // Получаем список ИБ рабочего процесса
                            InfoBases = ConnectToWorkProcess.GetInfoBases();
                            Для Каждого InfoBase Из InfoBases Цикл
                                // Ищем нужную базу
                                Если InfoBase.Name = ИмяИБ Тогда
                                   
                                    // Получаем массив соединений с ИБ
                                    Connections = ConnectToWorkProcess.GetInfoBaseConnections(InfoBase);
                                    Для Каждого Connection Из Connections Цикл
                                        Если ИмяПользователя() <> connection.userName Тогда
                                            // Разрываем Connections с ИБ
                                            СтрСообщения = "Разрывается соединение: Пользователь " + Connection.UserName + ", компьютер " + Connection.HostName + ", установлено " + Connection.ConnectedAt + ", режим " + Connection.AppID;
                                            ЗаписьЖурналаРегистрации("Завершение работы пользователей", УровеньЖурналаРегистрации.Информация, , , СтрСообщения);
                                            ConnectToWorkProcess.Disconnect(Connection);                                       
                                        КонецЕсли;
                                    КонецЦикла;
                                   
                                КонецЕсли;
                            КонецЦикла;
                           
                        КонецЦикла;
                       
                    КонецЦикла;
                   
                Исключение
                    ЗаписьЖурналаРегистрации("Завершение работы пользователей", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
                КонецПопытки;
               
            КонецЕсли;
           
           
            Соединения = ПолучитьСоединенияИнформационнойБазы();
            Если Соединения.Количество() > 1 Тогда
               
                Сообщение = "Не удалось завершить работу пользователей:";
               
                Для каждого Соединение Из Соединения Цикл
                    Если Не Соединение.НомерСоединения = НомерСоединенияИнформационнойБазы() Тогда
                        Сообщение = Сообщение + Символы.ПС + " - " + Соединение;
                    КонецЕсли;
                КонецЦикла; 
               
                Сообщить(Сообщение, СтатусСообщения.Внимание);
                ЗаписьЖурналаРегистрации("Завершение работы пользователей", УровеньЖурналаРегистрации.Предупреждение, , , Сообщение);
            Иначе
                Сообщить("Завершение работы пользователей выполнено успешно.", СтатусСообщения.Информация);
            КонецЕсли;
           
            ЗавершитьРаботуСистемы(Ложь);
    Если запускать его вручную - всё работает. А если сделать регламентное задание - КонсольЗаданий показывает ошибку на строке:
    ПодстрокиПараметровЗапуска=ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска,";");
    Текст ошибки: Переменная не определена "ПараметрЗапуска". Код - из типовой УТ 10.3
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Посмотрите в типовой откуда берется переменная ПараметрЗапуска и как она заполняется.
  3. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Регламентное задание тоже типовое?
  4. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Если переменная "ПараметрЗапуска" инициализируется в модуле обычного приложения, то она не будет доступна в фоновых заданиях.
  5. TopicStarter Overlay
    fusiok
    Offline

    fusiok Опытный в 1С

    Регистрация:
    30 окт 2013
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    Дело вот в чём:
    Глобальный контекст.ПараметрЗапуска (Global context.LaunchParameter)
    Глобальный контекст (Global context)
    ПараметрЗапуска (LaunchParameter)
    Использование:

    Только чтение.
    Описание:

    Тип: Строка.
    Используется для доступа к параметру запуска, передаваемому через ключ командной строки /C.
    Доступность:

    Сервер, толстый клиент, внешнее соединение.
  6. TopicStarter Overlay
    fusiok
    Offline

    fusiok Опытный в 1С

    Регистрация:
    30 окт 2013
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    Никто не знает?
  7. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Так, какие функции вызываются у Вас в регламентном задании? Приведенная ошибка когда возникает? Что за конфигурация? Если что-то самописная, то чуть подкорректируйте процедуру.
  8. TopicStarter Overlay
    fusiok
    Offline

    fusiok Опытный в 1С

    Регистрация:
    30 окт 2013
    Сообщения:
    69
    Симпатии:
    0
    Баллы:
    26
    Конфигурация - УТ 10.3 В регламентном задании я хочу сделать отключение пользователей и установить блокировку сеансов. Код процедуры взят из типовой (Процедура ЗавершитьРаботуПользователей()) и немного переделан. И если его занести в обработку и вызвать её - всё работает. А в регламентном задании ругается на системную переменную "ПараметрЗапуска". Меня интересует почему?
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    В различных версиях СП указана различная доступность метода. Есть еще вариант "Тонкий клиент, веб-клиент, толстый клиент". Что, на мой взгляд, более верно.
    Чем вызвано различие - действительно поменявшимся функционалом, или ошибкой в справке 1С в текущей платформе сказать не могу, тестировать самому честно говоря тоже лень, лучше им письмо написать и спросить.
Похожие темы
  1. zaka4ek
    Ответов:
    39
    Просмотров:
    16.938
Загрузка...

Поделиться этой страницей