mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-18 05:34:12 +00:00
+В списке добавлена группа колонок свойств настроек управляемого приложения
+Добавлена кнопка "Установить..." для установки настроек управляемого приложения выделенным пользователям
+В форме запуска под пользователем добавлен флажок "Режим интерфейса "Такси""
+Запуск под пользователем с флагом "Разрешить отладку" теперь сразу подключает текущий отладчик к запускаемому сеансу
Общее
+Команда "Запустить обычное приложение" теперь в обоих типах управляемого приложения открывает одинаковую форму, в которой добавлен включенный по умолчанию флажок "Текущий пользователь"
+Команда "Запустить связанный тонкий клиент" теперь передает имя текущего пользователя в строке соединения
+При включенной параметром запуска /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С"
Поиск дублей и замена ссылок
*Исправлена ошибка вывода сообщения об ошибке при отказе в записи независимых регистров сведений
*Исправлено неверное замещение неуникальных записей в подчиненных регистрах сведений
Подбор и обработка объектов
*Исправлены ошибки при работе с подчиненными регистрами сведений
Общее
*Исправлено восстановление пароля в форме подключения СУБД
*Исправлено свежее незапланированное изменение в поведении кнопки "Редактор объекта БД"
Консоль компоновки данных
*Кнопка "Исполняемый запрос" теперь открывает консоль запросов немодально
Различные значения колонки
+Добавлена кнопка "В список"
*Исправлено некорректное вычисление типов значений
Редактор объекта БД
+Реализована поддержка флагов "Многострочный режим" и "Расширенное редактирование" колонок табличных частей и наборов записей
313 lines
24 KiB
Plaintext
313 lines
24 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
Перем мПлатформа;
|
||
Перем мДоступныеСборкиПлатформы Экспорт;
|
||
|
||
Функция ПрименитьИзменения() Экспорт
|
||
|
||
Если Не ЗначениеЗаполнено(Компьютер) Тогда
|
||
Компьютер = ИмяКомпьютера();
|
||
КонецЕсли;
|
||
Служба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";
|
||
//ирПортативный #Если Клиент Тогда
|
||
//ирПортативный Контейнер = Новый Структура();
|
||
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
|
||
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
|
||
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = ВосстановитьЗначение("ирПолноеИмяФайлаОсновногоМодуля");
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
|
||
//ирПортативный КонецЕсли;
|
||
//ирПортативный #Иначе
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
|
||
//ирПортативный #КонецЕсли
|
||
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
|
||
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
|
||
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
|
||
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
|
||
|
||
мПлатформа = ирКэш.Получить(); |