1с сервер недоступен не отвечает завершается аварийно или порт занят другим приложением line 1089
Как отключить пользователей программно в клиент-серверном варианте работы 1С 8.2.
Спасибо, то что нужно.Но есть пару непоняток (для меня):
я заменил "Сервер" на "ИмяСервера" в строке
РабПроц = Коннектор.ConnectWorkingProcess(Сервер + ":" + СтрЗаменить(Порт, Символы.НПП, ""));
и в COMОбъекте Соединение нет значения UserName, т.е. не могу проверить на ИмяПользователя(). Но и в Сеанс, и в Соединение есть SessionID, пришлось выкручиваться через него (получать в Сеанс и проверять в Соединение). UserName только у меня отсутствует? Платформа 8.2.11.236.
Платформа 1С:Предприятие 8.2 (8.2.17.153).
РабПроц.Disconnect(Соединение);
по причине:
Типы не совпадают (1)
Как не пробовал, одно и тоже :(
Вариант кода следующий:
(27) dmbal, Та же ситуация на платформе 15.319, решения не нашел. По синтакс-помощнику GetInfoBaseConnections получает массив описаний соединений информационной базы. А в описании соединения нет свойства UserName. Оно есть в свойствах соединения.Осталось только разобраться как получить не описание соединений, а сами соединения. :D
Хм. Соединения заработали только когда прописал (обгуглившись по самое ну погоди):
ИнформационнаяБаза2 = РабПроц.CreateInfoBaseInfo();
ИнформационнаяБаза2.Name = ИмяБазы;
Соединения = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза2);
При этом проверять запущенные приложения нужно не по Соединение.Application, а по Соединение.AppID. Плюс не мешало бы добавить проверку не только backgroundjob, designer, а и comconsole - а то выкинет и только что аутентифицированное COM-соединение.
Все вышесказанное абсолютно не претендует на истину - пробуйте на свой страх и риск. :D
(3) Спасибо за развитие, честно дальше не копал. По "Сервер" на "ИмяСервера" - это я код не подправил :)
"Плюс не мешало бы добавить проверку не только backgroundjob, designer, а и comconsole - а то выкинет и только что аутентифицированное COM-соединение. " я показал лишь пример, дальше можно расширять как угодно :) моей целью было НЕ убивать текущее фоновое задание и НЕ закрывать конфигуратор, в котором я могу что-то не сохранить :) да и вообще сама идея мочить конфигуратор - ужас.
ИМХО, чтобы не убить своё собственное соединение лучше использовать проверку на SessionID (ConnID), который есть и в соединении (сеансе). Получить SessionID (ConnID) текущего (своего) подключения можно через НомерСеансаИнформационнойБазы() (НомерСоединенияИнформационнойБазы()).
bad_wag; a--jey; PhoenixAOD; bashirov.rs; tradeagent; eeeio; + 6 – Ответить (9) Если ничего не путаю, то именно через SessionID я и выкрутился. Кажется об этом речь в моем первом посте шла (1).Как давно это было. Год прошел. :) (10) V_V_V, Ну, некоторые темы не стареют. Для меня как раз проблемой было как раз узнать ID текущего сеанса, чтобы сравнить с SesionID. Может кому нибудь тоже поможет. Rabajaba , поделитесь, плиз, модулем регламентного задания, отвечающего за резервное копирование. (7) столкнулся с такой ошибкой. Дело в том, что строка подключения к базе данных содержало порт. Таким образом при получении имени сервера, возвращается не имя сервера("127.0.0.1"), а имя сервера + порт ("127.0.0.1:1689").
Заменил строку - все заработало:
//ИмяСервера = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, """") - 1); //для стандартного порта (1541)
ИмяСервера = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, """") - 6); //для не стандартного порта (7) artur.antipin, Заменил строку - все заработало:
//ИмяСервера = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, """") - 1); //для стандартного порта (1541)
ИмяСервера = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, """") - 6); //для не стандартного порта (7) artur.antipin,
Вот не уверен, что это правильно.
Вообще говоря, то ИмяСервера (включая порт), которое мы получаем таким образом, это адрес кластера 1с, на котором крутится эта база. Если порт стандартный, то он совпадает с именем сервера (читай агента сервера). Если порты не стандартные - то они разные.
Так вот. Если вы просто обрежете порт из адреса кластера, то получите обращение по стандартному порту, т.е. 1541, и скорее всего, попадете на другой сервер, не тот, на котором крутится данная база.
Вот в связи с этим вопрос: можно ли как то узнать полный адрес агента сервера, на котором крутится эта база? (36) для администрирования нужен порт не 1541, а 1540. Соответственно, если у вас неск. серверов, то использовать порт из строки подключения не корректно. Нужно хранить порт отдельно или получать из консоли. Вместо -
РабПроц = Коннектор.ConnectWorkingProcess(Имяервера + ":" + СтрЗаменить(Порт, Символы.НПП, ""));
надо -
РабПроц = Коннектор.ConnectWorkingProcess("tcp://" + Процесс.HostName + ":" + Формат(Процесс.MainPort, "ЧГ=0"));
Автору - спасибо! Использовал для отключения юзеров при ночной выгрузке базы
вот обобщенный (рабочий!) вариант:
Если Найти(СтрокаСоединенияИнформационнойБазы(), "Srvr") > 0 Тогда
// серверный вариант
Поиск1 = Найти(СтрокаСоединенияИнформационнойБазы(), "Srvr """) - 1);
// теперь ищем имя базы
Поиск1 = Найти(СтрокаСоединенияИнформационнойБазы(), "Ref """) - 1);
Иначе
// для других способов подключения алгоритм не актуален
Возврат;
КонецЕсли;
Коннектор = Новый COMОбъект("v82.COMConnector");
Агент = Коннектор.ConnectAgent(ИмяСервера);
Кластеры = Агент.GetClusters();
Для каждого Кластер из Кластеры Цикл
АдминистраторКластера = "Имя администратора кластера";
ПарольКластера = "Пароль администратора кластера";
//Агент.Authenticate(Кластер, АдминистраторКластера, ПарольКластера);
Агент.Authenticate(Кластер,,);
Процессы = Агент.GetWorkingProcesses(Кластер);
Для каждого Процесс из Процессы Цикл
Порт = Процесс.MainPort;
// теперь есть адрес и порт для подключения к рабочему процессу
РабПроц = Коннектор.ConnectWorkingProcess(ИмяСервера + ":" + СтрЗаменить(Порт, Символы.НПП, ""));
РабПроц.AddAuthentication("admin", "pass");
Базы = Агент.GetInfoBases(Кластер);
Для каждого База из Базы Цикл
Если База.Name = ИмяБазы Тогда
ИнформационнаяБаза = База;
Прервать;
КонецЕсли;
КонецЦикла;
Если ИнформационнаяБаза = "" Тогда
// база не найдена
КонецЕсли;
Сеансы = Агент.GetInfoBaseSessions(Кластер, ИнформационнаяБаза);
Для каждого Сеанс из Сеансы Цикл
ИнформационнаяБаза2 = РабПроц.CreateInfoBaseInfo();
ИнформационнаяБаза2.Name = ИмяБазы;
СоединенияБазы = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза2);
// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
Если нРег(Соединение.AppID) = "backgroundjob" ИЛИ нРег(Соединение.AppID) = "comconsole" Тогда
Продолжить;
КонецЕсли;
Если Соединение.UserName = ИмяПользователя() Тогда
// это текущий пользователь
Продолжить;
КонецЕсли;
РабПроц.Disconnect(Соединение);
КонецЦикла;
КонецЦикла;
КонецЦикла;
Предупреждение("Завершается работа. ", 5);
ЗавершитьРаботуСистемы(Ложь);
Удалённый доступ с мобильного устройства к видеорегистратору HikVision без статического белого IP адреса. Проброс портов в Windows с помощью portproxy
18 августа 2017 ВК Tw Fb
Не так давно столкнулись со следующей задачей: необходимо предоставить удалённый доступ с Android устройства к видеорегистратору HikVision, который находится в сети, Интернет в которой раздаётся с помощью 4G-модема (то есть нет белого статического IP). Недолго думая, мы предоставили клиенту доступ к нашему OpenVPN, с помощью которого мы собирались связать мобильное устройство на Android и сам видеорегистратор. Ок, на Android существует множество OpenVPN клиентов, но вот на видеорегистратор клиент OpenVPN поставить никак не получится. Тогда было решено задействовать ПК на ОС Windows, который находился в одной сети с видеорегистратором. Подробно рассказываем о наших шагах к достижению поставленной цели.
FreeBSD 11: Обновление портов вручную и по расписанию
Порты - наше всё во FreeBSD. Почти всё ПО, которое нам может пригодится для решения любых задач уже есть в портах. Поэтому необходимо держать их в обновлённом состоянии. Добиваемся этого.
Список часто используемых сетевых портов
28 октября 2016 ВК Tw Fb
Существует множество вариантов использования данной информации (даже в мирных целях). Например, проброс портов за NAT Вашего сетевого оборудования. Вспоминаем наиболее часто используемые порты и их протоколы.
База знаний "Try 2 Fix" Beta
Все материалы свободны
к распространению с обязательным
указанием источника
Доброго времени суток друзья, столкнулся с проблемой, не могу разобраться с ее решением. Обо всем по порядку.
Не так давно, мы начали переход на 1С БП 3.0 и все что на ней основано, по сравнению с 2.0 тормозить она стала раз в 5 больше, базы открывались от 2 до 5 минут! Решение пришло быстро, MS SQL Server.
Так как для меня это первый опыт его настройки, начал я тренироваться в виртуальной машине Hyper-V, все работало более менее, пока я не загрузил туда БД сельхоз отдела, примерно через 2 - 3 часа работы сервер перестает работать, базы не подключается, даже напрямую на этом же сервере. В локальной сети выходит ошибка "1541 descr = сервер не доступен (не отвечает, завершается аварийно или порт занят другим приложением". Сначала я грешил на сетевую карту, потом на брандмауер (его отключение тоже не помогло), и вот вчера я взял физический сервер, все настроил установил, перенес базы и буквально час назад та же беда! Все драйвера обновлены, мощности сервера должно хватать (Xeon X5606 2.13 Ghz/24Gb RAM DDR3 1333/LAN 1Gb) у сети топология "Звезда". Последнее на что грешу то что сервер не включен в домен Active Directory, но тогда почему и на самом сервере база отваливается?
Кратко о ПО:
1С Предприятие 8.3.8.2088
MS SQL Server 2014 SP1
Windows Server 2008R2
Буду рад любому совету.
Дополнено:
Аналогичная проблема проявляется на Debian. С одной базой УТ10 работает нормально. При переносе старой БД (бухгалтерия) с файлового варианта на SQL (postgres) периодически раз в 1-2 недели базы становятся недоступными до перезапуска службы srv1cv83. Есть ощущение что чем больше баз переносится тем меньше срок работы до перезапуска, так при переносе 5 БД срок работы был 2-3 дня.
К одной базе УТ10 доступ осуществляется локально (на одной машине), при добавлении других баз работа с ними начинается через клиентов по сети, но в момент сбоя базы недоступны ни в каком виде до перезапуска службы srv1cv83.
В технологическом журнале из подозрительного можно выделить только следующее:
Если все это Вам требуется - то эта статья с практикой применения для Вас.
Небольшой флешбек:
Задача:
В качестве математики будем использовать механизм преобразования текстов в векторное пространство и косинусное сходство.
Структура статьи:
- Настройки и порядок выполнения работ
- Видео-урок
- Замечания, советы, ссылки.
I) Практика
1 Шаг. Скачиваем необходимые ресурсы
А) Скачиваем обновленную конфигурацию «Мониторинг производительности» и обработку «АвтоматическаяКлассификацияОшибокВекторноеПространство.epf». Устанавливаем конфигурацию, если еще не стоит.
Б) Добавляем обработку в дополнительные отчеты и обработки. Подсистему выбираем «Замеры».
2 Шаг. Заполняем классификатор ошибок.
Открываем справочник "Известные ситуации" в подсистеме "Замеры". Создаем корневой элемент и называем его "Классификатор ошибок ТЖ". А далее создаем набор справочников в соответствии с примером ниже.
Опорные тексты кластеров приведены внутри каждого класса. Обязательно выполняйте настройку под себя изменяя/регулируя тексты, и значения нижней границы. Общий совет - чем меньше текст кластерам и мало в нем уникальных слов, то тем выше необходимо поднимать границу.
-
Доступ – ошибка доступа, права и роли. Нижняя граница сходства > 0.1
Роль, права, доступ, пользователь, пользователи
У пользователя недостаточно прав на исполнение операции над базой данных
Недостаточно прав на изменение реквизитов в документе
Недостаточно прав для просмотра
Недостаточно прав для работы с таблицей
Нарушение прав доступа!
Ошибка разделенного доступа к базе данных
Ошибка в ограничении доступа к данным
Data access restriction error
Идентификация пользователя не выполнена. Неправильное имя или пароль пользователя
Документ, справочник, регистр сведений, регистр накопления, план обмена
Запись, проведение, удаление, пометка на удаление, отмена проведения
Не удалось провести
Не удалось записать
Failed to save
Запись не верна! Период не может быть пустым!
Номер строки
Данные были изменены или удалены другим пользователем
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!
Запись с такими ключевыми полями существует!
Ввод на основании непроведенного документа запрещен
Блокировка, заблокировать
Не удалось заблокировать
Ошибка блокировки объекта. Объект уже заблокирован
Конфликт блокировок при выполнении транзакции. Неустранимый конфликт блокировок
Превышено максимальное время ожидания предоставления блокировки
В данной транзакции уже происходили ошибки
Lock request time out period exceeded
Transaction was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction
Запрос невозможно исполнить
Длина шаблона поиска превышает максимально возможную для используемой СУБД
Microsoft SQL Server Native Client
Ошибка СУБД
Ошибка SDBL
Could not allocate space for object temporary run storage because the filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
User does not have permission to use the KILL statement.
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION
Отчет, вариант отчета, макет
Скомпоновать, СкомпоноватьРезультат
компоновке результата, ОтчетОбъект, СформироватьОтчет
Ошибка компоновки макета
Невозможно применить элемент отбора
Ошибка исполнения отчета
Ошибка при выводе результата
Ошибка при исполнении запроса набора данных
Ошибка создания набора данных
Неверные параметры в операции сравнения
Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов
Преобразование значения к типу Булево не может быть выполнено
Преобразование значения к типу Число не может быть выполнено
Значение индекса выходит за границы диапазона
Индекс находится за границами массива
Ошибка при вызове метода контекста
Ошибка при выполнении операции над данными. Divide by zero error encountered
Синтаксическая ошибка
Поле объекта не обнаружено
Ошибка при получении значения атрибута контекста
Ошибка при установке значения атрибута контекста
Ошибка выполнения запроса
Ошибка при выполнении обработчика
Неверный первый параметр
Ошибка установки значения свойства. Недопустимое значение
Ошибка формата потока. Ошибка преобразования данных XDTO.
Недостаточно фактических параметров
Метод объекта не обнаружен
Процедура или функция с указанным именем не определена
Не задано значение параметра
Не установлено значение параметра
Ошибка обработки представления
Невозможно применить элемент отбора
Недопустимое значение
Непредвиденный символ при чтении JSON
-
Авария служб 1С . Нижняя граница сходства > 0.2
Процесс завершается. Исходящий вызов запрещен
Сервер недоступен (Не отвечает, завершается аварийно или порт занят другим приложением)
No connection could be made because the target machine actively refused it
An existing connection was forcibly closed by the remote host
База данных не обнаружена. База данных отсутствует в сервере баз данных. Не найдена база данных.
Соединение с сервером баз данных непригодно для использования после разрыва соединения администратором и будет переустановлено
Недостаточно свободной памяти для выполнения операции
На сервере 1С:Предприятия произошла неисправимая ошибка. Приложение будет закрыто
На сервере 1С:Предприятия не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!
Не найдено ни одного сервера с размещенным сервисом
Локальный ключ недоступен
Локальный, не установлен
Файл программной лицензии не найден
Поиск лицензии в сервисе лицензирования
Ошибка вызова сервиса лицензирования
Session closed by administrator
Соединение с сервером баз данных разорвано администратором
Выполнение оператора KILL не привело к ошибке СУБД
Выбранная версия объекта отсутствует в программе
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!
Файл не обнаружен
Невозможно открыть файл, удален
Ошибка при выполнении файловой операции
Ресурс не найден
Не удалось выполнить данную операцию. Подробности в Журнале регистрации
3 Шаг. Выполняем настройку обработки
А) Открываем форму "Настройка 'Автоматическая классификация ошибок ТЖ'" дополнительной обработки.
Б) Указываем параметры обработки текстов. Это так называемая процедура подготовки данных для анализа. Настройки можно выполнить согласно рисунку ниже.
В) Указываем стоп слова/ стоп фразы/ синонимы (можете пропустить, если не знаете как и зачем)
Г) Указываем источники для получения данных и выполнения обработки (вкладка 'Данные из базы'/'Выбрать данные из базы'). Обычно это ссылка на замер и свойство 'Descr'.
Д) Используем текстовые данные с текстовым корпусом ошибок из файла или на основе данных базы. Это вкладка "Данные из базы"/"Выбрать данные из классификатора". Жмем кнопку "Выбрать данные из классификатора".
Е) Переходим к формированию базиса и векторного пространства ошибок технологического журнала. Вкладка "Базис".
Ж) Формируем базис данные для классификации. Последовательно нажимаем кнопки "Получить частотность", "Сформировать вектора", "Рассчитать векторное пространство".
З) Сохраняем настройки в замер.
4 Шаг. Выполняем проверку и настройку.
Выполняем оценку качества классификации.
А) Выбираем набор проверочных данных (вкладка 'Данные из базы'/'Выбрать данные из базы'). Жмем "Выбрать данные" (используем период и первые - иначе будет очень долго и тяжело).
Б) После на вкладке "Обработка текста" жмем кнопки последовательно - "Обработать текст", "Заполнить таблицу корпуса слов по текущему тексту".
В) Формируем вектора текстов. На вкладке "Базис". Жмем последовательно кнопки - "Сформировать вектора", "Рассчитать векторное пространство по классификатору".
Г) Переходим на вкладку "Проверка"/"Автоклассификация" формы настройка и выполняем авто классификацию - жмем кнопку "Выполнить автоматическую классификацию по классификатору".
Д) Вычисляем количество верных оценок, принимаем решение о дальнейшей настройки или завершении настроек.
Качество результата обработки можно получить по формуле:
Качество классификации = 100% * Количество правильных классификаций / Количество примеров .
5 Шаг. Запуск в работу!
Запускаем регламентное задание автоматической классификации. На вкладке замера загрузки логов можно увидеть результаты классификации в колонке "decision"
Открываем форму "Монитор 'Классификация ошибок'" анализа данных или журнал замеров и смотрим результат.
Читайте также: