RDT1C/DataProcessors/ирУправлениеСлужбамиСерверов1С/Ext/ObjectModule.bsl
Администратор ebf21867b6 Редактор пользователей
+В списке добавлена группа колонок свойств настроек управляемого приложения
        +Добавлена кнопка "Установить..." для установки настроек управляемого приложения выделенным пользователям
        +В форме запуска под пользователем добавлен флажок "Режим интерфейса "Такси""
        +Запуск под пользователем с флагом "Разрешить отладку" теперь сразу подключает текущий отладчик к запускаемому сеансу
    Общее
        +Команда "Запустить обычное приложение" теперь в обоих типах управляемого приложения открывает одинаковую форму, в которой добавлен включенный по умолчанию флажок "Текущий пользователь"
        +Команда "Запустить связанный тонкий клиент" теперь передает имя текущего пользователя в строке соединения
        +При включенной параметром запуска /EnableCheckModal проверке модальности теперь при первом в сеансе открытии любой формы подсистемы предлагается запуск нового сеанса без проверки модальности
    Интерфейсная панель.
        +В контекстном меню добавлена команда "Связанный динамический список", открывающая единое окно динамического списка, обновляющее список при активизации строки
    Динамический список
        +Добавлена кнопка "Связанный редактор объекта БД", открывающая прикрепленное окно редактора объекта БД, загружающее объект при активизации строки
        +Реализовано автоматическое обновление отображаемых строк при записи объекта в редакторе объекта БД
        *Реализован обход ошибки платформы установки табличному полю типа списка независимого непериодического регистра сведений без измерений
    Редактор объекта БД
        *Увеличена длина дробной части значений отбора набора записей
    Контекстная подсказка
        *Исправлена ошибка инициализации формы списка слов при отсутствии activex компоненты Forms20
    Консоль запросов
        *Кнопка "Найти в дереве запроса" теперь доступна только в режиме просмотра узла дерева запроса
        *При сохранении узла дерева запроса, текущий узел теперь ищется не по именам, а по индексам узлов
        *Исправлено зависание программы при копировании папки дерева запросов
        *Исправлено некорректное определение имени узла дерева запроса в некоторых случаях при наличии функции ЗНАЧЕНИЕ(...)
        *При выборе основного элемента результата пакетного запроса теперь игнорируются результаты уничтожения таблиц
    Редактор табличного документа
        +Добавлена кнопка "Сохранить"

3.70
    Консоль компоновки данных
        +В настройках компоновки в таблице условного оформления добавлен пример оформления текста в колонке "Пример"
    Консоль кода
        +Добавлено дерево алгоритмов
        +Изменен формат файлов на t1c, старый формат f1c доступен только для открытия файлов
        *После сохранения в файл теперь сбрасывается модифицированность формы
        +Добавлена кнопка объединения с файлом
        +Добавлено подменю последних открытых файлов
        +Для булевых параметров реализовано отображение флажка
    Консоль запросов
        +При генерации текста модуля пакетного запроса теперь добавляется установка переменных вида "Индекс_<ИмяЗапроса>=<Индекс>" для всех именованных запросов
        +Команде "Найти в дереве" назначено сочетание клавиш CTRL+T
        +Для булевых параметров реализовано отображение флажка
        *Исправлено некорректное отображение количества строк в дереве результата при наличии выборок итогов
    Общее
        *Исправлены ошибки работы подсистемы при наличии общего модуля с именем ОбменДанными
        *Кнопка "Установить одинаковую ширину для всех колонок" заменена на "Расширить все колонки на 5 символов"
    Синтакс-помощник
        *Исправлено построение дерева, сломавшееся несколько версий назад
    Управление службами серверов 1С
        *Исправлена ошибка чтения служб при наличии службы сервера 1С без ключа "range" в строке запуска
    Редактор объекта БД
        +Для наборов записей добавлена фиксированная колонка картинки вида движения регистра накопления
        +По умолчанию для списка движений теперь включен отбор "Только не пустые"
        +Кнопка открытия редактора для таблицы движений теперь передает текущую строку
    Подбор и обработка объектов
        +Реализована поддержка журналов документов в однотабличном режиме
    Динамический список
        +В режиме выбора в заголовке теперь добавляется "(выбор)"
    Интерфейсная панель
        +Теперь уважает настройку использования "Динамический список / Основная форма списка"

3.69
    Общее
        +Вместо форм выбора теперь по умолчанию всегда открывается динамический список
        -Кнопка "Редактировать список" для значения отбор компоновки везде удалена, теперь редактирование списка всегда выполняется в расширенном режиме
    Динамический список
        +Добавлен флажок "Вместо основной" сохраняемый в настройках пользователя в разрезе объектов метаданных, управляющий подменой форм выбора
    Консоль компоновки
        *Исправлена ошибка команды "переставить с родителем" для группировок колонок и строк таблиц
    Контекстная подсказка
        *Кнопка "Удалить переносы" теперь еще заменяет двойные кавычки обычными
    Конструктор запросов
        +Для списка доступных таблиц добавлена закладка-отбор "Параметр"
        +При добавлении таблицы-параметра в выбранные таблицы сразу устанавливать тип запроса и имя временной таблицы
    Консоль запросов
        *Исправлена вычисление группировок итогов с закомментированным словом ОБЩИЕ
        +Кнопки выполнения запроса разделены на "Выполнить отображаемый запрос (F7)" и "Выполнить полный запрос (F8)"
    Редактор объекта БД
        *Исправлена ошибка поиска значения в бизнес процессе

3.68
    Редактор констант
        +Добавлена частичная поддержка констант с типом значения "Хранилище значения"
    Динамический список
        +Добавлена кнопка открытия основной формы списка с передачей отбора, текущей строки и владельца формы
        *Исправлена свежая ошибки открытия журнала документов
    Менеджер табличного поля
        *Исправлено ограничение типа значений элементов отбора
    Редактор объекта БД
        +В элементах управления колонок набора записей и движений реализован учет многострочного режима и других свойств из метаданных
        *Исправлена свежая поломка привязок на вкладке "Связанные колонки"
    Управление службами 1с
        *Исправлено перезаполнение списка при изменении компьютера
    Консоль запросов
        +Реализовано сохранение и восстановление позиции в тексте запроса при переходе между запросами и переключении режима дерева запроса
        +Для поля текста запроса добавлена команда "найти в дереве запроса" (текущую позицию в тексте запроса)
    Поиск дублей и замена ссылок
        *Исправлена свежая ошибка выполнения замены в иерархическом справочнике без флажка "Изменять поля по связям параметров выбора"
    Расширенный ввод значений
        +Добавлено распознавание навигационных ссылок
    Общее
        +Кнопка запуска связанного тонкого клиента теперь при повторном нажатии позволяет открыть в редакторе объекта БД один из открытых в связанном сеансе объектов
    Контекстная подсказка
        +Включена поддержка 8.3.8 в низкоуровневом получении описаний объектов

3.67
    Управление службами серверов 1С
        *Устранена ошибка открытия при наличии в строке соединения порта
        *Исправлено открытие при ошибках подключения WMI
    Консоль компоновки
        *Исправлена ошибка расшифровки при наличии пользовательских настроек компоновки
        +В панели настроек добавлена закладка "Пользовательские настройки" только для просмотра
        +В подменю "Исследовать" добавлена команда "Пользовательские настройки"
        +При сохранении варианта настроек добавлен пункт "<Новый>"
        +Реализовано перетаскивание полей на строки-коллекции в структуре
    Консоль запросов
        *Исправлена некорректная работа команды "найти результат" дерева запроса
        *Исправлена некорректная работа команды "Встроить из подзапроса" дерева запроса
    Конструктор запросов
        *Исправлено обновление представления условия связи при перетаскивании элементов отбора между связями
    Подбор и обработка объектов
        *Исправлены свежие ошибки при обработке подчиненных регистров сведений
    Редактор объекта БД
        *Исправлена недоступность для изменения основной формы измененного объекта
        +Добавлена кнопка "Отрыть основную форму объекта по ссылке"
        +При двойном клике по имени регистра в списке движений открывается его форма списка с отбором по регистратору
        *Исправлен сломанный несколько версий назад расширенный ввод значений в поле Ссылка
    Общее
        +В панели инструментов добавлена кнопка "Запустить связанный тонкий клиент"
    Интерфейсная панель
        +Реализовано явное отображение пустых ссылок в дереве
    Динамический список
        +Добавлена команда "Редактор объекта БД ячейки"
    Поиск дублей и замена ссылок
        +При выполнении замены реализовано предотвращение зацикливания уровней путем поднятия до ближайшего корректного родителя
    Настройка техножурнала
        *Реализован обход проблемы платформы со смещением времени изменения файла на 1ч

3.66
    +Добавлен инструмент "Управление службами серверов 1С"
    Поиск дублей и замена ссылок
        *Исправлена ошибка вывода сообщения об ошибке при отказе в записи независимых регистров сведений
        *Исправлено неверное замещение неуникальных записей в подчиненных регистрах сведений
    Подбор и обработка объектов
        *Исправлены ошибки при работе с подчиненными регистрами сведений
    Общее
        *Исправлено восстановление пароля в форме подключения СУБД
        *Исправлено свежее незапланированное изменение в поведении кнопки "Редактор объекта БД"
    Консоль компоновки данных
        *Кнопка "Исполняемый запрос" теперь открывает консоль запросов немодально
    Различные значения колонки
        +Добавлена кнопка "В список"
        *Исправлено некорректное вычисление типов значений
    Редактор объекта БД
        +Реализована поддержка флагов "Многострочный режим" и "Расширенное редактирование" колонок табличных частей и наборов записей
2016-12-04 00:22:14 +03:00

313 lines
24 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
Перем мПлатформа;
Перем мДоступныеСборкиПлатформы Экспорт;
Функция ПрименитьИзменения() Экспорт
Если Не ЗначениеЗаполнено(Компьютер) Тогда
Компьютер = ИмяКомпьютера();
КонецЕсли;
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Для Каждого СтрокаСлужбы Из СлужбыАгентовСерверов1С Цикл
АктуальныеСлужбы = СлужбаWMI.ExecQuery("SELECT *
|FROM Win32_Service
|WHERE NAME = '" + СтрокаСлужбы.Имя + "'");
АктуальнаяСлужба = Неопределено;
Для Каждого АктуальнаяСлужба Из АктуальныеСлужбы Цикл
Прервать;
КонецЦикла;
Команда = "sc \\" + Компьютер;
Порт = СтрокаСлужбы.Порт;
Если Не ЗначениеЗаполнено(Порт) Тогда
Порт = 1540;
КонецЕсли;
НачальныйПортРабочихПроцессов = СтрокаСлужбы.НачальныйПортРабочихПроцессов;
Если Ложь
Или Не ЗначениеЗаполнено(НачальныйПортРабочихПроцессов)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", НачальныйПортРабочихПроцессов)
Тогда
НачальныйПортРабочихПроцессов = Порт + 20;
КонецЕсли;
КонечныйПортРабочихПроцессов = СтрокаСлужбы.КонечныйПортРабочихПроцессов;
Если Ложь
Или Не ЗначениеЗаполнено(КонечныйПортРабочихПроцессов)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", КонечныйПортРабочихПроцессов)
Тогда
КонечныйПортРабочихПроцессов = Порт + 51;
КонецЕсли;
ДиапазонПортов = XMLСтрока(НачальныйПортРабочихПроцессов) + ":" + XMLСтрока(КонечныйПортРабочихПроцессов);
ПортКластера = XMLСтрока(Порт + 1);
ПортАгента = XMLСтрока(Порт);
ИмяСлужбы = СтрокаСлужбы.Имя;
Если Ложь
Или Не ЗначениеЗаполнено(ИмяСлужбы)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", ИмяСлужбы)
Тогда
ИмяСлужбы = "1C:Enterprise Server Agent " + ПортАгента;
КонецЕсли;
ТекстИмяСлужбы = """" + ИмяСлужбы + """";
Если СтрокаСлужбы.Удалить Тогда
Команда = Команда + " delete " + ТекстИмяСлужбы;
Иначе
ОтборВерсий = Новый Структура("Сервер, СборкаПлатформы", Истина, СтрокаСлужбы.СборкаПлатформыНовая);
ПодходящиеВерсии = мДоступныеСборкиПлатформы.Скопировать(ОтборВерсий);
ПодходящиеВерсии.Сортировать("x64 Убыв");
ОписаниеВерсии = ПодходящиеВерсии[0];
КаталогКонфигурации = СтрокаСлужбы.КаталогКонфигурации;
Если Ложь
Или Не ЗначениеЗаполнено(КаталогКонфигурации)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", КаталогКонфигурации)
Тогда
ФайлКаталогаВерсии = Новый Файл(ОписаниеВерсии.Каталог);
КаталогКонфигурации = ФайлКаталогаВерсии.Путь + "srvinfo" + XMLСтрока(ПортАгента);
КонецЕсли;
ПредставлениеСлужбы = СтрокаСлужбы.Представление;
Если Ложь
Или Не ЗначениеЗаполнено(ПредставлениеСлужбы)
Или ирОбщий.СтрокиРавныЛкс("<Авто>", ПредставлениеСлужбы)
Тогда
ПредставлениеСлужбы = "1C:Enterprise Server Agent " + ПортАгента;
КонецЕсли;
ПредставлениеСлужбы = """" + ПредставлениеСлужбы + """";
//СтрокаЗапускаСлужбы = БазовыйКаталог + "\" + СборкаПлатформы + "\bin\ragent.exe -srvc -agent -regport " + ПортКластера + " -port " + ПортАгента + " -range "
СтрокаЗапускаСлужбы = "\""" + ОписаниеВерсии.Каталог + "bin\ragent.exe\"" -srvc -agent -regport " + ПортКластера + " -port "
+ ПортАгента + " -range " + ДиапазонПортов + " -d \""" + КаталогКонфигурации + "\""";
Если СтрокаСлужбы.Отладка Тогда
СтрокаЗапускаСлужбы = СтрокаЗапускаСлужбы + " -debug";
КонецЕсли;
СоздатьКаталог(КаталогКонфигурации);
//Если УдалитьСуществующуюПоИмени Тогда
// Команда = "sc delete " + ТекстИмяСлужбы;
// Результат = ирОбщий.ПолучитьТекстРезультатаКомандыОСЛкс(Команда);
// Сообщить(Результат);
//КонецЕсли;
Если АктуальнаяСлужба = Неопределено Тогда
ТипОперации = "create";
Иначе
ТипОперации = "config";
КонецЕсли;
Если СтрокаСлужбы.Автозапуск Тогда
РежимЗапускаСлужбы = "auto";
Иначе
РежимЗапускаСлужбы = "demand";
КонецЕсли;
Команда = Команда + " " + ТипОперации + " " + ТекстИмяСлужбы + " binPath= """ + СтрокаЗапускаСлужбы + """ start= " + РежимЗапускаСлужбы + " displayname= " + ТекстИмяСлужбы
+ " depend= Dnscache/Tcpip/lanmanworkstation/lanmanserver displayname= " + ПредставлениеСлужбы;
Если ЗначениеЗаполнено(СтрокаСлужбы.ПарольПользователя) Тогда
Команда = Команда + " obj= " + СтрокаСлужбы.ИмяПользователя + " password= " + СтрокаСлужбы.ПарольПользователя;
КонецЕсли;
КонецЕсли;
Результат = ирОбщий.ПолучитьТекстРезультатаКомандыОСЛкс(Команда);
Если Не ЗначениеЗаполнено(Результат) Тогда
Результат = "Не удалось получить результат обработки службы агента";
КонецЕсли;
Сообщить(Результат);
//Если ЗапуститьСразу Тогда
// Команда = "net start " + ТекстИмяСлужбы;
// Результат = ирОбщий.ПолучитьТекстРезультатаКомандыОСЛкс(Команда);
// Сообщить(Результат);
//КонецЕсли;
КонецЦикла;
Результат = Истина;
Возврат Результат;
КонецФункции
Процедура Заполнить() Экспорт
ЗаполнитьДоступныеСборкиПлатформы();
ПортПоУмолчанию = 1540;
СлужбыАгентовСерверов1С.Очистить();
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат;
КонецЕсли;
АктуальныеСлужбы = СлужбаWMI.ExecQuery("SELECT
|*
|FROM Win32_Service
|WHERE PathName LIKE '%ragent.exe%'
|AND PathName LIKE '%-srvc -agent%'");
Для Каждого АктуальнаяСлужба Из АктуальныеСлужбы Цикл
СтрокаЗапускаСлужбы = АктуальнаяСлужба.PathName;
СтрокаСлужбыАгента = СлужбыАгентовСерверов1С.Добавить();
СтрокаСлужбыАгента.Имя = АктуальнаяСлужба.Name;
СтрокаСлужбыАгента.СтрокаЗапускаНовая = СтрокаЗапускаСлужбы;
Если ЗначениеЗаполнено(АктуальнаяСлужба.ProcessId) Тогда
АктивныйПроцесс = ирОбщий.ПолучитьПроцессОСЛкс(АктуальнаяСлужба.ProcessId);
Если ТипЗнч(АктивныйПроцесс) <> Тип("Строка") Тогда
СтрокаСлужбыАгента.СтрокаЗапускаАктивная = АктивныйПроцесс.CommandLine;
СтрокаСлужбыАгента.ПараметрыИзменены = Не ирОбщий.СтрокиРавныЛкс(СтрокаСлужбыАгента.СтрокаЗапускаАктивная, СтрокаСлужбыАгента.СтрокаЗапускаНовая);
КонецЕсли;
КонецЕсли;
СтрокаСлужбыАгента.Представление = АктуальнаяСлужба.Caption;
СтрокаСлужбыАгента.ИмяПользователя = АктуальнаяСлужба.StartName;
СтрокаСлужбыАгента.ИдентификаторПроцесса = АктуальнаяСлужба.ProcessId;
СтрокаСлужбыАгента.Отладка = Найти(НРег(СтрокаЗапускаСлужбы), "-debug");
СтрокаСлужбыАгента.Порт = Число(ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), "-port ", " ", Ложь));
СтрокаДиапазона = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(НРег(СтрокаЗапускаСлужбы), "-range ", " ", Ложь);
Если ЗначениеЗаполнено(СтрокаДиапазона) Тогда
ФрагментыДиапазона = ирОбщий.ПолучитьМассивИзСтрокиСРазделителемЛкс(СтрокаДиапазона, ":");
СтрокаСлужбыАгента.НачальныйПортРабочихПроцессов = Число(ФрагментыДиапазона[0]);
СтрокаСлужбыАгента.КонечныйПортРабочихПроцессов = Число(ФрагментыДиапазона[1]);
КонецЕсли;
СтрокаСлужбыАгента.Выполняется = ирОбщий.СтрокиРавныЛкс(АктуальнаяСлужба.State, "Running");
СтрокаСлужбыАгента.Автозапуск = ирОбщий.СтрокиРавныЛкс(АктуальнаяСлужба.StartMode, "Auto");
СтрокаСлужбыАгента.КаталогКонфигурации = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(СтрокаЗапускаСлужбы, "-d """, """"); // Регистрозависимость маркера не убрана!
Если ЗначениеЗаполнено(СтрокаСлужбыАгента.ИдентификаторПроцесса) Тогда
АктивныйПроцесс = ирОбщий.ПолучитьПроцессОСЛкс(АктуальнаяСлужба.ProcessId, , Компьютер);
СтрокаЗапускаПроцесса = АктивныйПроцесс.CommandLine;
Иначе
АктивныйПроцесс = Неопределено;
КонецЕсли;
СтрокаСлужбыАгента.СборкаПлатформыНовая = ПолучитьСборкуПлатформуИзКоманднойСтроки(СтрокаЗапускаСлужбы);
Если АктивныйПроцесс <> Неопределено И ТипЗнч(СтрокаЗапускаПроцесса) = Тип("Строка") Тогда
СтрокаСлужбыАгента.СборкаПлатформыАктивная = ПолучитьСборкуПлатформуИзКоманднойСтроки(СтрокаЗапускаПроцесса);
КонецЕсли;
КонецЦикла;
СлужбыАгентовСерверов1С.Сортировать("Имя");
КонецПроцедуры // Заполнить()
Процедура ЗаполнитьДоступныеСборкиПлатформы() Экспорт
мДоступныеСборкиПлатформы = Новый ТаблицаЗначений;
мДоступныеСборкиПлатформы.Колонки.Добавить("Каталог");
мДоступныеСборкиПлатформы.Колонки.Добавить("СборкаПлатформы");
мДоступныеСборкиПлатформы.Колонки.Добавить("Сервер");
мДоступныеСборкиПлатформы.Колонки.Добавить("x64");
мДоступныеСборкиПлатформы.Колонки.Добавить("ФайлыСуществуют");
// Оба варианта пришлось оставить, т.к. WMI вариант очень долгий
Если ирОбщий.ЭтоИмяЛокальногоСервераЛкс(Компьютер) Тогда
Инсталлер = Новый COMОбъект("WindowsInstaller.Installer");
Продукты = Инсталлер.Products;
Иначе
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат;
КонецЕсли;
Продукты = СлужбаWMI.ExecQuery("SELECT * FROM Win32_Product WHERE Vendor LIKE '1C' OR Vendor LIKE '1С'");
КонецЕсли;
Для Каждого Продукт Из Продукты Цикл
Если ирОбщий.ЭтоИмяЛокальногоСервераЛкс(Компьютер) Тогда
Попытка
ПубликаторПродукта = Инсталлер.ProductInfo(Продукт, "Publisher");
Исключение
Продолжить;
КонецПопытки;
Если Истина
И ПубликаторПродукта <> "1C" // латинские буквы
И ПубликаторПродукта <> "1С" // русские буквы
Тогда
Продолжить;
КонецЕсли;
//НаименованиеПродукта = Инсталлер.ProductInfo(Продукт, "ProductName");
КаталогВерсии = Инсталлер.ProductInfo(Продукт, "InstallLocation");
//СтрокаРелиза = Инсталлер.ProductInfo(Продукт, "VersionString");
Иначе
КаталогВерсии = Продукт.InstallLocation;
КонецЕсли;
СтрокаТаблицыСборок = мДоступныеСборкиПлатформы.Добавить();
СтрокаТаблицыСборок.Каталог = КаталогВерсии;
ФайлПолученияВерсии = Неопределено;
ФайлСерверногоПриложения = ирОбщий.ПолучитьФайлWMIЛкс(СтрокаТаблицыСборок.Каталог + "bin\ragent.exe", Компьютер);
СтрокаТаблицыСборок.Сервер = ФайлСерверногоПриложения <> Неопределено;
Если СтрокаТаблицыСборок.Сервер Тогда
ФайлПолученияВерсии = ФайлСерверногоПриложения;
КонецЕсли;
Если ФайлПолученияВерсии <> Неопределено Тогда
СтрокаТаблицыСборок.ФайлыСуществуют = Истина;
СтрокаТаблицыСборок.x64 = ирКэш.Это64битнаяОСЛкс() И Найти(СтрокаТаблицыСборок.Каталог, "(x86)") = 0;
СтрокаТаблицыСборок.СборкаПлатформы = ФайлПолученияВерсии.Version;
КонецЕсли;
КонецЦикла;
мДоступныеСборкиПлатформы.Сортировать("ФайлыСуществуют Убыв, СборкаПлатформы Убыв, x64");
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Отказ = Ложь;
МассивИсключений = Новый Массив;
МассивИсключений.Добавить("");
МассивИсключений.Добавить("<Авто>");
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, "СлужбыАгентовСерверов1С", "Имя",,, МассивИсключений);
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, "СлужбыАгентовСерверов1С", "Представление",,, МассивИсключений);
Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеЛкс(ЭтотОбъект, "СлужбыАгентовСерверов1С", "Порт", , Новый Структура("Автозапуск", Истина));
//Отказ = Отказ Или Не ирОбщий.ПроверитьУникальностьСтрокТЧПоКолонкеИис(ЭтотОбъект, "СлужбыАгентовСерверов1С", "КаталогКонфигурации", , Новый Структура("Автозапуск", Истина));
Для Индекс = 0 По СлужбыАгентовСерверов1С.Количество() - 1 Цикл
СтрокаСлужбы = СлужбыАгентовСерверов1С[Индекс];
Если Не СтрокаСлужбы.Удалить Тогда
МассивПутейКДанным = Новый Соответствие;
//МассивПутейКДанным.Вставить("СлужбыАгентовСерверов1С[" + Индекс + "].КаталогКонфигурации");
МассивПутейКДанным.Вставить("СлужбыАгентовСерверов1С[" + Индекс + "].СборкаПлатформыНовая");
МассивПутейКДанным.Вставить("СлужбыАгентовСерверов1С[" + Индекс + "].Порт");
ирОбщий.ПроверитьЗаполнениеРеквизитовОбъектаЛкс(ЭтотОбъект, МассивПутейКДанным, Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ПолучитьWMIОбъектСлужбы(ИмяСлужбы, Компьютер = Неопределено, ВызыватьИсключениеЕслиНеНайдена = Истина) Экспорт
СлужбаWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
Если СлужбаWMI = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ТекстЗапросаWQL = "Select * from Win32_Service Where Name = '" + ИмяСлужбы + "'";
ВыборкаСистемныхСлужб = СлужбаWMI.ExecQuery(ТекстЗапросаWQL);
Для Каждого лСистемнаяСлужба Из ВыборкаСистемныхСлужб Цикл
СистемнаяСлужба = лСистемнаяСлужба;
КонецЦикла;
Если СистемнаяСлужба = Неопределено Тогда
СистемнаяСлужба = "Системная служба с именем """ + ИмяСлужбы + """ не найдена на компьютере """ + Компьютер + """" ; // Сигнатура (начало строки) используется в Обработка.ПоддержаниеСервераПриложенийИис
Если ВызыватьИсключениеЕслиНеНайдена Тогда
ВызватьИсключение СистемнаяСлужба;
КонецЕсли;
КонецЕсли;
Возврат СистемнаяСлужба;
КонецФункции
Функция ПолучитьСборкуПлатформуИзКоманднойСтроки(Строка)
#Если _ Тогда
мПлатформа = Обработки.ирПлатформа.Создать();
#КонецЕсли
ВычислительРегулярок = мПлатформа.RegExp;
ВычислительРегулярок.Pattern = "\\(\d+\.\d+\.\d+\.\d+)\\";
Вхождения = ВычислительРегулярок.Execute(Строка);
Если Вхождения.Count > 0 Тогда
Результат = Вхождения.Item(0).Submatches(0);
Иначе
Результат = "";
КонецЕсли;
Возврат Результат;
КонецФункции
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = ВосстановитьЗначение("ирПолноеИмяФайлаОсновногоМодуля");
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный КонецЕсли;
//ирПортативный #Иначе
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
мПлатформа = ирКэш.Получить();