mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 13:14:11 +00:00
Редактор объекта БД
*При повторном открытии по ссылке объекта теперь всегда активизируется уже открытая форма редактора
Структура хранения БД
*Восстановлено добавление служебных таблиц БД при включении вычисления размеров без отбора
Конструктор запроса
Конструктор выражения запроса
+При двойном клике по доступному полю оно теперь вставляется в текст, замещая текущее выделение, и становится выделением
+При двойном клике по функции теперь она вставляет в текст, обрамляя текущее выделение, и становится выделением
+При открытии имени поля оно теперь сразу выделяется в тексте и выполняется позиционирование на нем в списке доступных полей
*Исправлены некорректные сообщения об ошибках для условия с агрегатными функциями
+Реализовано восстановление текущих строк в списках доступных полей при их обновлении
+Для доступных полей добавлена команда "Перейти" в контекстном меню
+Добавлена команда "Найти в списке доступных полей" для выбранных полей, элементов отбора, группировок
+При генерации текста пакетного запроса теперь в начало добавляется комментарий с рекомендацией использовать конструктор запроса ИР
*Исправлена ошибка разбора текста запроса в некоторых случаях с секцией ВЫБРАТЬ построителя перед секцией ИЗ запроса
*Теперь игнорируются строки комментариев запроса состоящие только из символа "/"
*Исправлена ошибка при выборе поля в индекс создаваемой временной таблицы
Управление службами серверов 1С
*Исправлено некорректное считывание номера порта и пароля Http отладки
*Исправлено некорректное преобразование номера порта Http отладки в строку при применении настроек
Интерфейсная панель
*Выбор и просмотр подсистем сделан немодальным
+В контекстном меню объектов метаданных добавлена команда "Исследовать метаданные"
Общее
+Во многих инструментах добавлена команда "Открыть объект метаданных" с пиктограммой интерфейсной панели
*Исправлена проблема с регистрацией 64-разрядной компоненты DynamicWrapperX
+Обновлено внутреннее описание платформы от версии 8.3.10
+При интерактивном выводе данных табличного поля в табличных документ, в т.ч. для сравнения, теперь задается вопрос "Быстрый вывод (без оформления)?"
+В форме списка значений подключено расширенное представление значений в ячейках
+В форме массива подключено расширенное представление значений в ячейках
+Конвертор синтакс-помощника встроен в подсистему в виде общей формы "Обновление описания платформы" и теперь может автоматически обновлять таблицы описания платформы в текущей конфигурации
Консоль запросов
+Команда "Перейти к определению" дерева запроса для постоянных таблиц теперь выполняет переход к объекту метаданных
+Реализован подбор типа периода при повторном открытии редактора периода
+Переключателю панели результата назначено сочетание клавиш CTRL+D
+При включении автосохранения в заголовке формы теперь отображается слово "Автосохранение"
*Исправлена проблема отсутствия сигнализации пользователю недоступности файла при его сохранении
+При активизации строки дерева запроса, если включен пакетный результат, то активизируется соответствующий элемент результата
+Для текущего параметра добавлена команда "найти в тексте"
Управление COM классами 1C
+Для списка доступных версий платформы добавлена кнопка Обновить
Подбор и обработка объектов
+Реализовано отображение признака "Измерение" в доступных полях
Консоль компоновки
*Исправлена проблема отсутствия сигнализации пользователю недоступности файла при его сохранении
Консоль кода
*Исправлена проблема отсутствия сигнализации пользователю недоступности файла при его сохранении
Редактор хранилищ настроек
*В портативном варианте исправлена недоступность для изменения поля "Имя содержит"
Исследователь объектов
+При двойном щелчке по значению объекта метаданных выполняется переход к нему в интерфейсной панели
Контекстная подсказка
+Команда "Перейти к определению" (F12) на обращениях к метаданным и их производным типам и таблицам открывает интерфейсную панель и позиционируется на нужном объекте
Редактор констант
+Увеличена максимальная разрядность дробной части значений до 9 знаков
Подбор и обработка объектов
*Исправлена невидимость параметров-ссылок в портативном варианте при запуске алгоритма без проверки
488 lines
32 KiB
Plaintext
488 lines
32 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
// Поместить строку соединения во временное хранилище
|
||
Функция ПоместитьСтрокуСоединенияВХранилищеЛкс(Адрес) Экспорт
|
||
|
||
ПоместитьВоВременноеХранилище(СтрокаСоединенияИнформационнойБазы(), Адрес);
|
||
|
||
КонецФункции
|
||
|
||
// Получить строку соединения сервера
|
||
Функция ПолучитьСтрокуСоединенияСервераЛкс() Экспорт
|
||
|
||
Если ирКэш.ЭтоФайловаяБазаЛкс() Тогда
|
||
Результат = СтрокаСоединенияИнформационнойБазы();
|
||
Иначе
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
Результат = СтрокаСоединенияИнформационнойБазы();
|
||
Иначе
|
||
// Антибаг 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;
|
||
Возврат выхИдентификаторПроцесса;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПриНачалеРаботыСистемыРасширениеЛкс() Экспорт
|
||
|
||
Если Истина
|
||
И ПравоДоступа("Администрирование", Метаданные)
|
||
И ПравоДоступа("ТолстыйКлиент", Метаданные)
|
||
И Не ПравоДоступа("Использование", Метаданные.Обработки.ирПортативный)
|
||
И Не РольДоступна("ирПользователь")
|
||
Тогда
|
||
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
|
||
ТекущийПользователь.Роли.Добавить(Метаданные.Роли.ирРазработчик);
|
||
ТекущийПользователь.Роли.Добавить(Метаданные.Роли.ирПользователь);
|
||
ТекущийПользователь.Записать();
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
Возврат Ложь
|
||
|
||
КонецФункции
|
||
|