RDT1C/CommonModules/ирСервер/Ext/Module.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

458 lines
30 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.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
// Поместить строку соединения во временное хранилище
Функция ПоместитьСтрокуСоединенияВХранилищеЛкс(Адрес) Экспорт
ПоместитьВоВременноеХранилище(СтрокаСоединенияИнформационнойБазы(), Адрес);
КонецФункции
// Получить строку соединения сервера
Функция ПолучитьСтрокуСоединенияСервераЛкс() Экспорт
Если ирКэш.ЭтоФайловаяБазаЛкс() Тогда
Результат = СтрокаСоединенияИнформационнойБазы();
Иначе
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
Результат = СтрокаСоединенияИнформационнойБазы();
Иначе
// Антибаг https://partners.v8.1c.ru/forum/t/1361906/m/1361906
//Если МонопольныйРежим() Тогда
// ВызватьИсключение "Невозможно определить строку соединения сервера в монопольном режиме";
//КонецЕсли;
АдресХранилища = ПоместитьВоВременноеХранилище("");
Параметры = Новый Массив();
Параметры.Добавить(АдресХранилища);
ФоновоеЗадание = ФоновыеЗадания.Выполнить("ирСервер.ПоместитьСтрокуСоединенияВХранилищеЛкс", Параметры,, "Получение строки соединения сервера (ИР)");
ФоновоеЗадание.ОжидатьЗавершения();
Результат = ПолучитьИзВременногоХранилища(АдресХранилища);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
/////////////////////////////////////////////
// БСП. Отладка внешних обработок
Процедура ПриПодключенииВнешнейОбработки(Ссылка, СтандартнаяОбработка, Результат) Экспорт
#Если _ Тогда
Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка();
#КонецЕсли
СтандартнаяОбработка = Истина;
ОтладкаВключена = ХранилищеСистемныхНастроек.Загрузить("ирОтладкаВнешнихОбработок", "СозданиеВнешнихОбработокЧерезФайл");
Если ОтладкаВключена = Истина Тогда
ПутьКФайлу = ПолноеИмяФайлаВнешнейОбработкиВФайловомКэшеЛкс(Ссылка);
Иначе
Результат = "";
Возврат;
КонецЕсли;
Если Ложь
Или Ссылка = Вычислить("Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка()")
Или ТипЗнч(Ссылка) <> Вычислить("Тип(""СправочникСсылка.ДополнительныеОтчетыИОбработки"")")
Тогда
Результат = Неопределено;
Возврат;
КонецЕсли;
Если Ложь
Или Ссылка.Вид = Вычислить("Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет")
Или Ссылка.Вид = Вычислить("Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет")
Тогда
Менеджер = ВнешниеОтчеты;
Иначе
Менеджер = ВнешниеОбработки;
КонецЕсли;
ФайлВнешнейОбработки = Новый Файл(ПутьКФайлу);
Если Не ФайлВнешнейОбработки.Существует() Тогда
Ссылка.ХранилищеОбработки.Получить().Записать(ФайлВнешнейОбработки.ПолноеИмя);
КонецЕсли;
ВнешнийОбъект = Менеджер.Создать(ПутьКФайлу, Ложь);
ИмяОбработки = ВнешнийОбъект.Метаданные().Имя;
Результат = ИмяОбработки;
СтандартнаяОбработка = Ложь;
Возврат;
КонецПроцедуры
Функция ПолноеИмяФайлаВнешнейОбработкиВФайловомКэшеЛкс(Ссылка, КаталогФайловогоКэша = "") Экспорт
#Если _ Тогда
Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка();
#КонецЕсли
Если Не ЗначениеЗаполнено(КаталогФайловогоКэша) Тогда
Обработчик = НайтиПерехватВнешнихОбработокБСПЛкс();
Если Обработчик = Неопределено Тогда
ВызватьИсключение "Перехват внеших обработок не включен";
КонецЕсли;
КаталогФайловогоКэша = Обработчик.КаталогФайловогоКэша;
КонецЕсли;
ИмяФайла = Ссылка.ИмяФайла;
Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
ИмяФайла = "" + Ссылка.УникальныйИдентификатор() + ".epf";
КонецЕсли;
ПутьКФайлу = КаталогФайловогоКэша + "\" + ИмяФайла;
Возврат ПутьКФайлу;
КонецФункции
Процедура ВключитьПерехватВнешнихОбработокБСПЛкс(Знач КаталогФайловогоКэша) Экспорт
Обработчики = ПолучитьОбработчикиПриПодключенииВнешнейОбработки();
СтруктураОбработчика = Новый Структура("Модуль, Версия, Подсистема, КаталогФайловогоКэша", "ирСервер", "", "tormozit", КаталогФайловогоКэша);
Обработчики.Добавить(СтруктураОбработчика);
УстановитьОбработчикиПриПодключенииВнешнейОбработки(Обработчики);
КонецПроцедуры
Функция ПолучитьОбработчикиПриПодключенииВнешнейОбработки()
ИмяОбработчика = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПодключенииВнешнейОбработки";
КонстантаПараметрыСлужебныхСобытий = Вычислить("Константы.ПараметрыСлужебныхСобытий");
СтруктруаПараметрыСлужебныхСобытий = КонстантаПараметрыСлужебныхСобытий.Получить().Получить();
ОбработчикиНаСервере = СтруктруаПараметрыСлужебныхСобытий.ОбработчикиСобытий.НаСервере;
ОбработчикиСлужебныхСобытий = ОбработчикиНаСервере.ОбработчикиСлужебныхСобытий;
Обработчики = ОбработчикиСлужебныхСобытий[ИмяОбработчика];
Обработчики = Новый Массив(Обработчики);
Возврат Обработчики;
КонецФункции
Процедура УстановитьОбработчикиПриПодключенииВнешнейОбработки(Обработчики)
ИмяОбработчика = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПодключенииВнешнейОбработки";
КонстантаПараметрыСлужебныхСобытий = Вычислить("Константы.ПараметрыСлужебныхСобытий");
СтруктруаПараметрыСлужебныхСобытий = КонстантаПараметрыСлужебныхСобытий.Получить().Получить();
ОбработчикиНаСервере = СтруктруаПараметрыСлужебныхСобытий.ОбработчикиСобытий.НаСервере;
ОбработчикиСлужебныхСобытий = Вычислить("Новый Соответствие(ОбработчикиНаСервере.ОбработчикиСлужебныхСобытий)");
ОбработчикиСлужебныхСобытий[ИмяОбработчика] = Новый ФиксированныйМассив(Обработчики);
ОбработчикиНаСервере.ОбработчикиСлужебныхСобытий = Новый ФиксированноеСоответствие(ОбработчикиСлужебныхСобытий);
КонстантаПараметрыСлужебныхСобытий.Установить(Новый ХранилищеЗначения(СтруктруаПараметрыСлужебныхСобытий));
ОбновитьПовторноИспользуемыеЗначения();
КонецПроцедуры
Функция НайтиПерехватВнешнихОбработокБСПЛкс(Выключить = Ложь) Экспорт
Обработчики = ПолучитьОбработчикиПриПодключенииВнешнейОбработки();
ОбновитьЗначениеКонстанты = Ложь;
Для СчетчикОбработчики = - Обработчики.Количество() + 1 По 0 Цикл
Индекс = -СчетчикОбработчики;
Обработчик = Обработчики[Индекс];
Если Обработчик.Модуль = "ирСервер" Тогда
Если Не Выключить Тогда
Возврат Обработчик;
КонецЕсли;
Обработчики.Удалить(Индекс);
ОбновитьЗначениеКонстанты = Истина;
КонецЕсли;
КонецЦикла;
Если ОбновитьЗначениеКонстанты Тогда
УстановитьОбработчикиПриПодключенииВнешнейОбработки(Обработчики);
КонецЕсли;
Возврат Неопределено;
КонецФункции
/////////////////////////////////////////////
// Редиректы
Функция ПолучитьКаталогНастроекПриложения1СЛкс(ИспользоватьОбщийКаталогНастроек = Истина, СоздатьЕслиОтсутствует = Ложь) Экспорт
Результат = ирОбщий.ПолучитьКаталогНастроекПриложения1СЛкс(ИспользоватьОбщийКаталогНастроек, СоздатьЕслиОтсутствует);
Возврат Результат;
КонецФункции
Функция ПолучитьИмяФайлаАктивнойНастройкиТехноЖурналаЛкс() Экспорт
Результат = ирОбщий.ПолучитьИмяФайлаАктивнойНастройкиТехноЖурналаЛкс();
Возврат Результат;
КонецФункции
Функция ЛиКаталогТехножурналаНедоступенЛкс(КаталогЖурнала) Экспорт
Результат = ирОбщий.ЛиКаталогТехножурналаНедоступенЛкс(КаталогЖурнала);
Возврат Результат;
КонецФункции
Функция ЗаписатьТекстВФайлЛкс(ПолноеИмяФайла, Текст, Кодировка = Неопределено) Экспорт
Результат = ирОбщий.ЗаписатьТекстВФайлЛкс(ПолноеИмяФайла, Текст, Кодировка);
Возврат Результат;
КонецФункции
Функция ПрочитатьТекстИзФайлаЛкс(ПолноеИмяФайла, Кодировка = Неопределено) Экспорт
Результат = ирОбщий.ПрочитатьТекстИзФайлаЛкс(ПолноеИмяФайла, Кодировка);
Возврат Результат;
КонецФункции
Функция НайтиИменаФайловЛкс(Путь, Маска = Неопределено, ИскатьВПодкаталогах = Истина) Экспорт
Результат = ирОбщий.НайтиИменаФайловЛкс(Путь, Маска, ИскатьВПодкаталогах);
Возврат Результат;
КонецФункции
Функция ВычислитьРазмерКаталогаЛкс(Каталог, ВключаяПодкаталоги = Истина) Экспорт
Результат = ирОбщий.ВычислитьРазмерКаталогаЛкс(Каталог, ВключаяПодкаталоги);
Возврат Результат;
КонецФункции
Функция ПолучитьТекущуюДатуЛкс() Экспорт
Результат = ирОбщий.ПолучитьТекущуюДатуЛкс();
Возврат Результат;
КонецФункции
Процедура ОчиститьКаталогТехножурналаЛкс(КаталогЖурнала, ВыводитьПредупрежденияИСообщения = Истина) Экспорт
ирОбщий.ОчиститьКаталогТехножурналаЛкс(КаталогЖурнала, , ВыводитьПредупрежденияИСообщения);
КонецПроцедуры // ОчиститьКаталогТехножурналаЛкс()
Процедура ВыполнитьЗапросЛкс(ТекстЗапроса) Экспорт
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.Выполнить();
КонецПроцедуры
Процедура ПереместитьФайлЛкс(ИмяИсточника, ИмяПриемника) Экспорт
ПереместитьФайл(ИмяИсточника, ИмяПриемника);
КонецПроцедуры // ПереместитьФайл()
Функция ЛиФайлСуществуетЛкс(ПолноеИмяФайла, выхДатаИзменения = Неопределено) Экспорт
Файл1 = Новый Файл(ПолноеИмяФайла);
ФайлНайден = Файл1.Существует();
Если ФайлНайден Тогда
выхДатаИзменения = Файл1.ПолучитьВремяИзменения() + ирКэш.ПолучитьСмещениеВремениЛкс();
КонецЕсли;
Возврат ФайлНайден;
КонецФункции // ЛиФайлСуществует()
// Выполняет текст алгоритма.
//
// Параметры:
// ТекстДляВыполнения Строка;
// _АлгоритмОбъект - СправочникОбъект
// *СтруктураПараметров - Структура, *Неопределено.
//
Функция ВыполнитьАлгоритм(_ТекстДляВыполнения, _АлгоритмОбъект = Null, _Режим = Null,
_П0 = Null, _П1 = Null, _П2 = Null, _П3 = Null, _П4 = Null, _П5 = Null, _П6 = Null, _П7 = Null, _П8 = Null, _П9 = Null) Экспорт
Перем Результат;
Если Истина
И ирКэш.ЛиПортативныйРежимЛкс()
И ирПортативный.ЛиСерверныйМодульДоступенЛкс(Ложь)
Тогда
ПараметрыКоманды = Новый Структура("_ТекстДляВыполнения, _АлгоритмОбъект", _ТекстДляВыполнения, _АлгоритмОбъект);
ирПортативный.ВыполнитьСерверныйМетодЛкс("ВыполнитьАлгоритм", ПараметрыКоманды);
Иначе
Выполнить(_ТекстДляВыполнения);
КонецЕсли;
Возврат Результат;
КонецФункции // ПозиционныйМетод()
Процедура ВыполнитьАлгоритмБезРезультата(_ТекстДляВыполнения) Экспорт
Выполнить(_ТекстДляВыполнения);
КонецПроцедуры
Функция ВычислитьВыражение(Выражение) Экспорт
Возврат Вычислить(Выражение);
КонецФункции
Процедура ЗаписатьОбъектXMLЛкс(ОбъектXML, ДополнительныеСвойства, РежимЗаписи = Неопределено, РежимПроведения = Неопределено, ОтключатьКонтрольЗаписи = Неопределено,
БезАвторегистрацииИзменений = Неопределено) Экспорт
Если Истина
И ирКэш.ЛиПортативныйРежимЛкс()
И ирПортативный.ЛиСерверныйМодульДоступенЛкс()
Тогда
ПараметрыКоманды = Новый Структура("ОбъектXML, ДополнительныеСвойства, РежимЗаписи, РежимПроведения, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений",
ОбъектXML, ДополнительныеСвойства, РежимЗаписи, РежимПроведения, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений);
ирПортативный.ВыполнитьСерверныйМетодЛкс("ЗаписатьОбъектXMLЛкс", ПараметрыКоманды);
ДополнительныеСвойства = ПараметрыКоманды.ДополнительныеСвойства;
ОбъектXML = ПараметрыКоманды.ОбъектXML;
Иначе
Объект = ирОбщий.ВосстановитьОбъектИзСтрокиXMLЛкс(ОбъектXML);
ирОбщий.ВосстановитьДополнительныеСвойстваОбъектаЛкс(Объект, ДополнительныеСвойства);
ирОбщий.ЗаписатьОбъектЛкс(Объект, Ложь, РежимЗаписи, РежимПроведения, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений);
ДополнительныеСвойства = ирОбщий.СериализоватьДополнительныеСвойстваОбъектаЛкс(Объект);
ОбъектXML = ирОбщий.СохранитьОбъектВВидеСтрокиXMLЛкс(Объект);
КонецЕсли;
КонецПроцедуры
Процедура УдалитьОбъектЛкс(ХМЛ, СтруктураДополнительныхСвойств) Экспорт
Объект = ирОбщий.ВосстановитьОбъектИзСтрокиXMLЛкс(ХМЛ);
Объект.Прочитать();
ирОбщий.ВосстановитьДополнительныеСвойстваОбъектаЛкс(Объект, СтруктураДополнительныхСвойств);
//Объект.Удалить();
ирОбщий.УдалитьОбъектЛкс(Объект, Ложь);
КонецПроцедуры
Процедура УстановитьПометкуУдаленияОбъектаЛкс(ОбъектXML, СтруктураДополнительныхСвойств, ЗначениеПометки = Истина, БезАвторегистрацииИзменений = Неопределено) Экспорт
Объект = ирОбщий.ВосстановитьОбъектИзСтрокиXMLЛкс(ОбъектXML);
Объект.Прочитать(); // Иначе объект будет модифицирован и возникнет ошибка
ирОбщий.ВосстановитьДополнительныеСвойстваОбъектаЛкс(Объект, СтруктураДополнительныхСвойств);
ирОбщий.УстановитьПометкуУдаленияОбъектаЛкс(Объект,, ЗначениеПометки, БезАвторегистрацииИзменений);
ДополнительныеСвойства = ирОбщий.СериализоватьДополнительныеСвойстваОбъектаЛкс(Объект);
ОбъектXML = ирОбщий.СохранитьОбъектВВидеСтрокиXMLЛкс(Объект);
КонецПроцедуры
Функция ПолучитьИмяКомпьютераЛкс() Экспорт
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
Результат = НСтр(СтрокаСоединенияИнформационнойБазы(), "Srvr");
Иначе
Результат = ИмяКомпьютера();
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ПолучитьИспользованиеСобытияЖурналаРегистрацииКакСтруктуру(ИмяСобытия) Экспорт
Результат = Новый Структура("Использование, ОписаниеИспользования");
ИспользованиеСобытия = ПолучитьИспользованиеСобытияЖурналаРегистрации(ИмяСобытия);
Результат.Использование = ИспользованиеСобытия.Использование;
Если ТипЗнч(ИспользованиеСобытия.ОписаниеИспользования) = Тип("Массив") И ИспользованиеСобытия.ОписаниеИспользования.Количество() > 0 Тогда
ОписаниеИспользования = Новый Массив();
Если ТипЗнч(ИспользованиеСобытия.ОписаниеИспользования[0]) = Тип("ОписаниеИспользованияСобытияДоступЖурналаРегистрации") Тогда
СтрокаКлючей = "Объект, ПоляРегистрации, ПоляДоступа";
ИначеЕсли ТипЗнч(ИспользованиеСобытия.ОписаниеИспользования[0]) = Тип("ОписаниеИспользованияСобытияОтказВДоступеЖурналаРегистрации") Тогда
СтрокаКлючей = "Объект, ПоляРегистрации";
Иначе
//ВызватьИсключение "Неизвестный тип " + ТипЗнч(ИспользованиеСобытия.ОписаниеИспользования[0]);
КонецЕсли;
Для Каждого ЭлементОписания Из ИспользованиеСобытия.ОписаниеИспользования Цикл
ЭлементМассива = Новый Структура(СтрокаКлючей);
ЗаполнитьЗначенияСвойств(ЭлементМассива, ЭлементОписания);
ОписаниеИспользования.Добавить(ЭлементМассива);
КонецЦикла;
Результат.ОписаниеИспользования = ОписаниеИспользования;
Иначе
Результат.ОписаниеИспользования = Неопределено;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура УстановитьИспользованиеСобытияЖурналаРегистрацииПоСтруктуре(ИмяСобытия, пИспользованиеСобытия) Экспорт
ИспользованиеСобытия = Новый ИспользованиеСобытияЖурналаРегистрации;
ИспользованиеСобытия.Использование = пИспользованиеСобытия.Использование;
пОписаниеИспользования = Неопределено;
пИспользованиеСобытия.Свойство("ОписаниеИспользования", пОписаниеИспользования);
Если Истина
И ТипЗнч(пОписаниеИспользования) = Тип("Массив")
И пОписаниеИспользования.Количество() > 0
И (Ложь
Или ИмяСобытия = "_$Access$_.Access"
Или ИмяСобытия = "_$Access$_.AccessDenied") Тогда
ТипОписанияСтрокой = ?(ИмяСобытия = "_$Access$_.Access", "ОписаниеИспользованияСобытияДоступЖурналаРегистрации","ОписаниеИспользованияСобытияОтказВДоступеЖурналаРегистрации");
ОписаниеИспользования = Новый Массив();
Для Каждого пЭлементОписания Из пОписаниеИспользования Цикл
ЭлементОписания = Новый(ТипОписанияСтрокой);
ЗаполнитьЗначенияСвойств(ЭлементОписания, пЭлементОписания);
ОписаниеИспользования.Добавить(ЭлементОписания);
КонецЦикла;
ИспользованиеСобытия.ОписаниеИспользования = ОписаниеИспользования;
КонецЕсли;
УстановитьИспользованиеСобытияЖурналаРегистрации(ИмяСобытия, ИспользованиеСобытия)
КонецПроцедуры
Функция ПолучитьПараметрыПроцессаАгентаСервера(выхИдентификаторПроцесса = Неопределено, выхКомманднаяСтрока = Неопределено, выхИмяСлужбы = Неопределено) Экспорт
выхИмяСлужбы = Неопределено;
РабочийПроцесс = ирОбщий.ПолучитьПроцессОСЛкс(ирКэш.Получить().ПолучитьИдентификаторПроцессаОС());
Если ТипЗнч(РабочийПроцесс) = Тип("Строка") Тогда
Сообщить("Ошибка обращения к процессу ОС рабочего процесса: " + РабочийПроцесс);
Возврат Неопределено;
КонецЕсли;
КомпьютерКластера = ирОбщий.ИмяКомпьютераКластераЛкс();
Если Не ЗначениеЗаполнено(КомпьютерКластера) Тогда
Возврат Неопределено;
КонецЕсли;
Попытка
WMIЛокатор = ирКэш.ПолучитьCOMОбъектWMIЛкс(КомпьютерКластера);
Исключение
Сообщить("У пользователя рабочего процесса нет прав на подключение к WMI кластера: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
выхИдентификаторПроцесса = РабочийПроцесс.ParentProcessId;
ПроцессАгента = ирОбщий.ПолучитьПроцессОСЛкс(выхИдентификаторПроцесса,, КомпьютерКластера);
Если ТипЗнч(ПроцессАгента) = Тип("COMОбъект") Тогда
выхКомманднаяСтрока = ПроцессАгента.CommandLine;
ТекстЗапросаWQL = "Select * from Win32_Service Where ProcessId = " + XMLСтрока(выхИдентификаторПроцесса);
ВыборкаСистемныхСлужб = WMIЛокатор.ExecQuery(ТекстЗапросаWQL);
Для Каждого лСистемнаяСлужба Из ВыборкаСистемныхСлужб Цикл
СистемнаяСлужба = лСистемнаяСлужба;
Прервать;
КонецЦикла;
КонецЕсли;
Если СистемнаяСлужба = Неопределено Тогда
//Сообщить("Не удалось определить имя системной службы агента сервера приложений", СтатусСообщения.Внимание);
Возврат Неопределено;
КонецЕсли;
выхИмяСлужбы = СистемнаяСлужба.Name;
Возврат выхИдентификаторПроцесса;
КонецФункции