mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 21:24:11 +00:00
+Теперь при открытии активизируется запрос и часть объединения из позиции курсора в тексте
*Ускорен разбор текста запроса
+Доступные поля теперь выделяются цветом фона для измерений регистров (розовым) и системных полей (голубым)
*Исправлено некорректное чтение строковых литералов вида N'<Строка>'
Анализ техножурнала
+В форме "Конвертор текста СУБД" добавлен флажок "Вставка параметров" для вставки значений параметров в текст запроса
+В форме "Конвертор текста СУБД" добавлен выключенный по умолчанию флажок "Показывать размеры"
*В чтении логов исправлен разбор значений свойств, содержащих двойные кавычки
Настройка техножурнала
+Добавлена поддержка событий ATTN, FTEXTCheck, FTEXTUpd, MAILPARSEERR, CONFLOADFROMFILES, INPUTBYSTRING
Консоль запросов
*Устранено некорректное униточжение временных таблиц перед выполнением запроса, если они сначала уничтожаются, а потом создаются в тексте запроса
*Улучшено управление флажком "Именованные параметры" на закладке ADO
+В дереве запроса теперь сразу проставляется количество строк у обращений к временным таблицам созданным в запросе
Грамматика языка запросов
+Добавлена поддержка строковых функций rtrim, ltrim, trim
Редактор предопределенных
+ Добавлена кнопка "Обновить" над списком предопределенных элементов текущего типа
+При записи объектов в списке предопределенных элементов текущего типа теперь список автоматически обновляется
+Нажатие на лупу в пустой ячейке "Ссылка" теперь предлагает создать объект
Подбор и обработка объектов
+Справа от поля выбора области поиска добавлено информационное поле количества строк без отбора в области поиска
Поиск дублей и замена ссылок
*Исправлены ошибки при работе с произвольным запросом
Динамический список
*Отключено блокирование вывода колонок типа УникальныйИдентификатор на 8.3.8+ в связи с устранением ошибки платформы
Общее
*Исправлена ошибка применения некорректных связей параметров выбора при открытии динамического списка
Контекстная подсказка
*Улучшено вычисление виртуальных таблиц с параметрами для языка запросов
*Исправлено невыполнение поиска подходящей строки в списке слов в некоторых случаях
Анализ журнала регистрации
+Добавлена кнопка "Открыть файл журнала"
1542 lines
83 KiB
Plaintext
1542 lines
83 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
// Переменная документа, представляющего файл
|
||
// настройки технологического журнала
|
||
Перем мДокументДОМ;
|
||
|
||
// Переменные для работы с двоичным представлением числа
|
||
Перем мДвоичноеЧисло;
|
||
Перем мЧисло;
|
||
|
||
// Костанты списков данных
|
||
Перем мВидыСравнения;
|
||
Перем мСписокТипов;
|
||
Перем мСписокСобытий;
|
||
Перем мСписокСвойствСобытий;
|
||
Перем мСоставСвойствСобытий;
|
||
Перем мСписокИменСвойств;
|
||
Перем мСписокДействий;
|
||
Перем мКодировкаФайла;
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// ЗАПОЛНЕНИЕ КОНСТАНТ И ИХ ВОЗВРАТ ПО ТРЕБОВАНИЮ
|
||
|
||
// Возвращает имя конфигурационного файла
|
||
//
|
||
Функция ПолучитьПолноеИмяКонфигурационногоФайла(ИспользоватьОбщий = Неопределено) Экспорт
|
||
|
||
Если ИспользоватьОбщий = Неопределено Тогда
|
||
ИспользоватьОбщий = ИспользоватьОбщийКаталогНастроек;
|
||
КонецЕсли;
|
||
Результат = ПолучитьДиректориюКонфигурационногоФайла(ИспользоватьОбщий);
|
||
Если ЗначениеЗаполнено(Результат) Тогда
|
||
Результат = Результат + "\logcfg.xml";
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает каталог конфигурационного файла
|
||
//
|
||
Функция ПолучитьДиректориюКонфигурационногоФайла(ИспользоватьОбщий = Неопределено, СоздатьЕслиОтсутствует = Ложь) Экспорт
|
||
|
||
Если ИспользоватьОбщий = Неопределено Тогда
|
||
ИспользоватьОбщий = ИспользоватьОбщийКаталогНастроек;
|
||
КонецЕсли;
|
||
Если ЗначениеЗаполнено(КаталогНастройки) Тогда
|
||
Результат = КаталогНастройки;
|
||
ИначеЕсли НаСервере И ирКэш.ЛиПортативныйРежимЛкс() И Не ирКэш.ЭтоФайловаяБазаЛкс() Тогда
|
||
Результат = "";
|
||
Иначе
|
||
Результат = ирОбщий.ПолучитьКаталогНастроекПриложения1СЛкс(ИспользоватьОбщий, СоздатьЕслиОтсутствует, НаСервере);
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает каталог технологического журнала
|
||
//
|
||
Функция ПолучитьДиректориюТехнологическогоЖурнала() Экспорт
|
||
|
||
Возврат КаталогПрограммы() + "logs";
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает каталог дампа
|
||
//
|
||
Функция ПолучитьДиректориюДампа() Экспорт
|
||
|
||
Возврат КаталогПрограммы() + "dumps";
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает имя файла шаблона по имени шаблона
|
||
//
|
||
Функция ПолучитьИмяФайлаШаблона(ИмяШаблона) Экспорт
|
||
|
||
Возврат ПолучитьДиректориюКонфигурационногоФайла() + "\" + ИмяШаблона + ".prst";
|
||
|
||
КонецФункции
|
||
|
||
// Заполнить структуру типов
|
||
//
|
||
Процедура ЗаполнитьСписокТипов()
|
||
|
||
мСписокТипов = Новый Структура;
|
||
СоставСвойствСобытий = ПолучитьСоставСвойствСобытий();
|
||
#Если Сервер И Не Сервер Тогда
|
||
СоставСвойствСобытий = Новый ТаблицаЗначений;
|
||
#КонецЕсли
|
||
Для Счетчик = 1 По СоставСвойствСобытий.Колонки.Количество() - 1 Цикл
|
||
ИмяСвойства = СоставСвойствСобытий.Колонки[Счетчик].Имя;
|
||
ТипСвойства = НРег(СоставСвойствСобытий[0][Счетчик]);
|
||
Если ТипСвойства = "n" Тогда
|
||
СтрокаТипов = "Число";
|
||
ИначеЕсли ТипСвойства = "s" Тогда
|
||
СтрокаТипов = "Строка";
|
||
ИначеЕсли ТипСвойства = "d" Тогда
|
||
СтрокаТипов = "Дата";
|
||
ИначеЕсли ТипСвойства = "b" Тогда
|
||
СтрокаТипов = "Булево";
|
||
Иначе // fl, nl, ll
|
||
СтрокаТипов = "СписокЗначений";
|
||
КонецЕсли;
|
||
ОписаниеТипов = Новый ОписаниеТипов(СтрокаТипов);
|
||
мСписокТипов.Вставить(ИмяСвойства, ОписаниеТипов);
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаполнитьСписокВыбораСрокаХранения(СписокВыбора) Экспорт
|
||
|
||
СписокВыбора.Очистить();
|
||
СписокВыбора.Добавить(2);
|
||
СписокВыбора.Добавить(6);
|
||
СписокВыбора.Добавить(24, "1 день");
|
||
СписокВыбора.Добавить(48, "2 дня");
|
||
СписокВыбора.Добавить(168, "Неделя");
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вернуть константу со списком типов
|
||
//
|
||
Функция ВернутьСписокТипов() Экспорт
|
||
|
||
Если мСписокТипов = Неопределено Тогда
|
||
ЗаполнитьСписокТипов();
|
||
КонецЕсли;
|
||
|
||
Возврат мСписокТипов;
|
||
|
||
КонецФункции
|
||
|
||
// Заполнить структуру списком событий
|
||
//
|
||
Процедура ЗаполнитьСтруктуруСобытий() Экспорт
|
||
|
||
ТаблицаИзМакета = ирОбщий.ПолучитьТаблицуИзТабличногоДокументаЛкс(ПолучитьМакет("События"));
|
||
События.Загрузить(ТаблицаИзМакета);
|
||
События.Сортировать("Имя");
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вернуть константу со списком событий
|
||
//
|
||
Функция ПолучитьСписокСобытий() Экспорт
|
||
|
||
Если мСписокСобытий = Неопределено Тогда
|
||
Если События.Количество() = 0 Тогда
|
||
ЗаполнитьСтруктуруСобытий();
|
||
КонецЕсли;
|
||
мСписокСобытий = Новый СписокЗначений;
|
||
Для Каждого СтрокаТЧ Из События Цикл
|
||
Если ВРег(СтрокаТЧ.Имя) = "<ALL>" Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
мСписокСобытий.Добавить(НРег(СтрокаТЧ.Имя), СтрокаТЧ.Имя + " - " + СтрокаТЧ.Представление
|
||
//+ " (" + СтрокаТЧ.Описание + ")"
|
||
);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
мСписокСобытий.СортироватьПоПредставлению();
|
||
Возврат мСписокСобытий;
|
||
|
||
КонецФункции
|
||
|
||
// Заполнить список представления сравнений
|
||
//
|
||
Процедура ЗаполнитьСписокСравнения()
|
||
|
||
мВидыСравнения = Новый СписокЗначений;
|
||
мВидыСравнения.Добавить("eq", "Равно");
|
||
мВидыСравнения.Добавить("ne", "Не равно");
|
||
мВидыСравнения.Добавить("gt", "Больше");
|
||
мВидыСравнения.Добавить("ge", "Больше или равно");
|
||
мВидыСравнения.Добавить("lt", "Меньше");
|
||
мВидыСравнения.Добавить("le", "Меньше или равно");
|
||
мВидыСравнения.Добавить("like", "Шаблон");
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вернуть константу со списком сравнений
|
||
//
|
||
Функция ПолучитьСписокСравнения() Экспорт
|
||
|
||
Если мВидыСравнения = Неопределено Тогда
|
||
ЗаполнитьСписокСравнения();
|
||
КонецЕсли;
|
||
|
||
Возврат мВидыСравнения;
|
||
|
||
КонецФункции
|
||
|
||
// Поиск значения в списке по представлению
|
||
Функция НайтиПоПредставлению(Список, Представление) Экспорт
|
||
|
||
Результат = "";
|
||
Для Каждого Элемент Из Список Цикл
|
||
|
||
Если Элемент.Представление = Представление Тогда
|
||
Результат = Элемент.Значение;
|
||
Прервать;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСоставСвойствСобытий() Экспорт
|
||
|
||
Если мСоставСвойствСобытий = Неопределено Тогда
|
||
мСоставСвойствСобытий = ирОбщий.ПолучитьТаблицуИзТабличногоДокументаЛкс(ПолучитьМакет("СоставСвойствСобытий"));
|
||
Для Каждого СтрокаТаблицы Из мСоставСвойствСобытий Цикл
|
||
СтрокаТаблицы.MainEvent = ВРег(СтрокаТаблицы.MainEvent);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Возврат мСоставСвойствСобытий;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСтруктуруСвойствСобытия(Событие, ВключатьКолонкуСобытия = Истина) Экспорт
|
||
|
||
ПолучитьСоставСвойствСобытий();
|
||
СтрокаСобытия = мСоставСвойствСобытий.Найти(ВРег(Событие), "MainEvent");
|
||
Если СтрокаСобытия <> Неопределено Тогда
|
||
АктуальныеСвойства = Новый Структура;
|
||
Для Каждого Колонка Из мСоставСвойствСобытий.Колонки Цикл
|
||
Если СтрокаСобытия[Колонка.Имя] = "+" Тогда
|
||
АктуальныеСвойства.Вставить(Колонка.Имя);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Если Не ВключатьКолонкуСобытия Тогда
|
||
АктуальныеСвойства.Удалить("Name");
|
||
КонецЕсли;
|
||
Иначе
|
||
// событие - CONTEXT
|
||
АктуальныеСвойства = Неопределено;
|
||
КонецЕсли;
|
||
Возврат АктуальныеСвойства;
|
||
|
||
КонецФункции
|
||
|
||
// Заполнить структуру свойств событий
|
||
//
|
||
Процедура ЗаполнитьСписокСвойствСобытий() Экспорт
|
||
|
||
ТаблицаИзМакета = ирОбщий.ПолучитьТаблицуИзТабличногоДокументаЛкс(ПолучитьМакет("Свойства"));
|
||
Свойства.Загрузить(ТаблицаИзМакета);
|
||
Для Каждого СтрокаТЧ Из Свойства Цикл
|
||
СтрокаТЧ.НИмя = НРег(СтрокаТЧ.Имя);
|
||
КонецЦикла;
|
||
Свойства.Сортировать("Представление");
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вернуть константу со списком свойств событий
|
||
//
|
||
Функция ПолучитьСписокСвойствСобытий() Экспорт
|
||
|
||
Если мСписокСвойствСобытий = Неопределено Тогда
|
||
мСписокСвойствСобытий = Новый СписокЗначений;
|
||
Если Свойства.Количество() = 0 Тогда
|
||
ЗаполнитьСписокСвойствСобытий();
|
||
КонецЕсли;
|
||
Для Каждого СтрокаТЧ Из Свойства Цикл
|
||
мСписокСвойствСобытий.Добавить(СтрокаТЧ.НИмя, СтрокаТЧ.Представление + " (" + СтрокаТЧ.Имя + ")");
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Возврат мСписокСвойствСобытий;
|
||
|
||
КонецФункции
|
||
|
||
// Заполнить структуру имен свойств
|
||
//
|
||
Процедура ЗаполнитьСписокИменСвойств()
|
||
|
||
мСписокИменСвойств = ПолучитьСписокСвойствСобытий().Скопировать();
|
||
мСписокИменСвойств.Вставить(0, "all", "All (все свойства)");
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вернуть константу со списком имен свойств
|
||
//
|
||
Функция ПолучитьСписокИменСвойств() Экспорт
|
||
|
||
Если мСписокИменСвойств = Неопределено Тогда
|
||
ЗаполнитьСписокИменСвойств();
|
||
КонецЕсли;
|
||
|
||
Возврат мСписокИменСвойств;
|
||
|
||
КонецФункции
|
||
|
||
// Заполнить структуру наименований выполняемого действия
|
||
//
|
||
Процедура ЗаполнитьСписокДействий()
|
||
|
||
ТабличныйДокумент = ПолучитьМакет("ЗначенияСвойств");
|
||
ЗначенияСвойств = ирОбщий.ПолучитьТаблицуИзТабличногоДокументаЛкс(ТабличныйДокумент);
|
||
мСписокДействий = Новый СписокЗначений;
|
||
Для каждого СтрокаУровня Из ЗначенияСвойств Цикл
|
||
мСписокДействий.Добавить(СтрокаУровня.Имя, СтрокаУровня.Представление);
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вернуть константу со списком наименований выполняемого действия
|
||
//
|
||
Функция ПолучитьСписокДействий() Экспорт
|
||
|
||
Если мСписокДействий = Неопределено Тогда
|
||
ЗаполнитьСписокДействий();
|
||
КонецЕсли;
|
||
мСписокДействий.СортироватьПоПредставлению();
|
||
Возврат мСписокДействий;
|
||
|
||
КонецФункции
|
||
|
||
// Поиск в списке значений значения по представлению
|
||
//
|
||
Функция НайтиЗначениеПоПредставлению(Представление) Экспорт
|
||
|
||
Для Инд = 0 По мВидыСравнения.Количество() Цикл
|
||
|
||
Если Представление = мВидыСравнения[Инд].Представление Тогда
|
||
|
||
Возврат мВидыСравнения[Инд].Значение;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьПредставлениеЭлементаОтбораСобытий(ИндексЖурнала, ИндСоб) Экспорт
|
||
|
||
СтрокаПредставления = "";
|
||
УзелУсловия = ПолучитьУзелСобытия(ИндексЖурнала, ИндСоб);
|
||
Если УзелУсловия = Неопределено Тогда
|
||
Возврат СтрокаПредставления;
|
||
КонецЕсли;
|
||
УзелУсловий = УзелУсловия.ПервыйДочерний;
|
||
Пока УзелУсловий <> Неопределено Цикл
|
||
Если СтрокаПредставления <> "" Тогда
|
||
СтрокаПредставления = СтрокаПредставления + " И ";
|
||
КонецЕсли;
|
||
Если УзелУсловий.Атрибуты <> Неопределено Тогда
|
||
Свойство = "";
|
||
Значение = "";
|
||
Для Каждого Атрибут Из УзелУсловий.Атрибуты Цикл
|
||
Если Атрибут.ЛокальноеИмя = "property" Тогда
|
||
Свойство = Атрибут.ЗначениеУзла;
|
||
КонецЕсли;
|
||
Если Атрибут.ЛокальноеИмя = "value" Тогда
|
||
Значение = Атрибут.ЗначениеУзла;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
СтрокаПредставления = СтрокаПредставления + "'" + Свойство + "'"
|
||
+ " " + ПолучитьСписокСравнения().НайтиПоЗначению(НРег(УзелУсловий.ЛокальноеИмя)) + " "
|
||
+ "'" + Значение + "'";
|
||
КонецЕсли;
|
||
УзелУсловий = УзелУсловий.СледующийСоседний;
|
||
КонецЦикла;
|
||
Возврат СтрокаПредставления;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьПредставлениеЭлементаОтбораСвойств(СписокУзлов, ИндСоб) Экспорт
|
||
|
||
СтрокаПредставления = "";
|
||
УзелУсловия = СписокУзлов.Элемент(ИндСоб);
|
||
Если Не ирОбщий.СтрокиРавныЛкс(УзелУсловия.ЛокальноеИмя, "property") Тогда
|
||
Возврат СтрокаПредставления;
|
||
КонецЕсли;
|
||
Для Каждого Атрибут Из УзелУсловия.Атрибуты Цикл
|
||
Если ирОбщий.СтрокиРавныЛкс(Атрибут.ЛокальноеИмя, "name") Тогда
|
||
СтрокаПредставления = Атрибут.ЗначениеУзла;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Если УзелУсловия.ПервыйДочерний <> Неопределено Тогда
|
||
УзелУсловий = УзелУсловия.ПервыйДочерний.ПервыйДочерний;
|
||
СтрокаПредставленияУсловия = "";
|
||
Пока УзелУсловий <> Неопределено Цикл
|
||
Если СтрокаПредставленияУсловия <> "" Тогда
|
||
СтрокаПредставленияУсловия = СтрокаПредставленияУсловия + " И ";
|
||
КонецЕсли;
|
||
Свойство = "";
|
||
Значение = "";
|
||
Для Каждого Атрибут Из УзелУсловий.Атрибуты Цикл
|
||
Если Атрибут.ЛокальноеИмя = "property" Тогда
|
||
Свойство = Атрибут.ЗначениеУзла;
|
||
КонецЕсли;
|
||
Если Атрибут.ЛокальноеИмя = "value" Тогда
|
||
Значение = Атрибут.ЗначениеУзла;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
СтрокаПредставленияУсловия = СтрокаПредставленияУсловия + "'" + Свойство + "'"
|
||
+ " " + ПолучитьСписокСравнения().НайтиПоЗначению(НРег(УзелУсловий.ЛокальноеИмя)) + " "
|
||
+ "'" + Значение + "'";
|
||
УзелУсловий = УзелУсловий.СледующийСоседний;
|
||
КонецЦикла;
|
||
Если ЗначениеЗаполнено(СтрокаПредставленияУсловия) Тогда
|
||
СтрокаПредставления = СтрокаПредставления + "(" + СтрокаПредставленияУсловия + ")";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат СтрокаПредставления;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьИмяСобытияЭлементаОтбораСобытийНаРавенство(УзелСобытий, ИндСоб) Экспорт
|
||
|
||
УзелУсловий = УзелСобытий.Элемент(ИндСоб).ПервыйДочерний;
|
||
Пока УзелУсловий <> Неопределено Цикл
|
||
Если УзелУсловий.ЛокальноеИмя = "eq" Тогда
|
||
АтрибутИмениСобытия = УзелУсловий.Атрибуты.ПолучитьИменованныйЭлемент("property");
|
||
Если Истина
|
||
И АтрибутИмениСобытия <> Неопределено
|
||
И НРег(АтрибутИмениСобытия.ЗначениеУзла) = НРег("Name")
|
||
Тогда
|
||
АтрибутЗначенияИмениСобытия = УзелУсловий.Атрибуты.ПолучитьИменованныйЭлемент("value");
|
||
Если АтрибутЗначенияИмениСобытия <> Неопределено Тогда
|
||
Возврат АтрибутЗначенияИмениСобытия.ЗначениеУзла;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИначеЕсли УзелУсловий.ЛокальноеИмя = "ne" Тогда
|
||
АтрибутИмениСобытия = УзелУсловий.Атрибуты.ПолучитьИменованныйЭлемент("property");
|
||
Если Истина
|
||
И АтрибутИмениСобытия <> Неопределено
|
||
И НРег(АтрибутИмениСобытия.ЗначениеУзла) = НРег("Name")
|
||
Тогда
|
||
АтрибутЗначенияИмениСобытия = УзелУсловий.Атрибуты.ПолучитьИменованныйЭлемент("value");
|
||
Если АтрибутЗначенияИмениСобытия <> Неопределено Тогда
|
||
Если АтрибутЗначенияИмениСобытия.ЗначениеУзла = "" Тогда
|
||
Возврат "<ALL>";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
УзелУсловий = УзелУсловий.СледующийСоседний;
|
||
КонецЦикла;
|
||
Возврат Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
Функция НайтиДобавитьУзелВКоллекцию(Искать = Истина, Документ = Неопределено, Коллекция = Неопределено, ИмяУзла) Экспорт
|
||
|
||
Если Документ = Неопределено Тогда
|
||
Документ = мДокументДОМ;
|
||
КонецЕсли;
|
||
#Если Сервер И Не Сервер Тогда
|
||
Документ = Новый ДокументDOM;
|
||
#КонецЕсли
|
||
Если Коллекция = Неопределено Тогда
|
||
Коллекция = Документ.ПервыйДочерний;
|
||
КонецЕсли;
|
||
Если Искать Тогда
|
||
СписокУзлов = Коллекция.ПолучитьЭлементыПоИмени(ИмяУзла);
|
||
КонецЕсли;
|
||
Если Истина
|
||
И Искать
|
||
И СписокУзлов.Количество() > 0
|
||
Тогда
|
||
Узел = СписокУзлов.Элемент(0);
|
||
Иначе
|
||
Узел = СоздатьЭлементДОМ(ИмяУзла, Документ);
|
||
Коллекция.ДобавитьДочерний(Узел);
|
||
КонецЕсли;
|
||
Возврат Узел;
|
||
|
||
КонецФункции // ДобавитьУзелВКоллекцию()
|
||
|
||
Функция НайтиДобавитьУзелСАтрибутами(Искать = Истина, Документ = Неопределено, Родитель = Неопределено, ИмяУзла, СтруктураАтрибутов = Неопределено) Экспорт
|
||
|
||
Узел = НайтиДобавитьУзелВКоллекцию(Искать, Документ, Родитель, ИмяУзла);
|
||
Если СтруктураАтрибутов <> Неопределено Тогда
|
||
Для каждого Атрибут Из СтруктураАтрибутов Цикл
|
||
Узел.УстановитьАтрибут(Атрибут.Ключ, XMLСтрока(Атрибут.Значение));
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Возврат Узел;
|
||
|
||
КонецФункции
|
||
|
||
// Проверить принадлежность имени к требуемому
|
||
//
|
||
Функция ПроверитьПринадлежность(Имя) Экспорт
|
||
|
||
Если ВернутьСписокСоответствующийИмени(Имя).Количество() > 0 Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
Возврат Ложь;
|
||
|
||
КонецФункции
|
||
|
||
// Проверить принадлежность имени к требуемому
|
||
//
|
||
Функция ВернутьСписокСоответствующийИмени(Имя) Экспорт
|
||
|
||
Если НРег(Имя) = "name" Тогда
|
||
Результат = ПолучитьСписокСобытий();
|
||
ИначеЕсли НРег(Имя) = "func" Тогда
|
||
Результат = ПолучитьСписокДействий();
|
||
ИначеЕсли НРег(Имя) = "level" Тогда
|
||
Результат = ПолучитьСписокУровнейСистемныхСобытий();
|
||
Иначе
|
||
Результат = Новый СписокЗначений;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// ФУНКЦИИ РАБОТЫ С ДОКУМЕНТОМ DOM
|
||
|
||
// Загрузить XML файл в DOM документ
|
||
Функция ЗагрузитьXML(ИмяФайла) Экспорт
|
||
|
||
ТекстХМЛ = ирОбщий.ПрочитатьТекстИзФайлаЛкс(ИмяФайла,, НаСервере);
|
||
ЧтениеХМЛ = Новый ЧтениеXML();
|
||
ЧтениеХМЛ.УстановитьСтроку(ТекстХМЛ);
|
||
ПостроительДом = Новый ПостроительDOM();
|
||
Попытка
|
||
ДокументДОМ = ПостроительДом.Прочитать(ЧтениеХМЛ);
|
||
Исключение
|
||
Сообщить("Ошибка при чтении файла XML: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
|
||
Возврат Неопределено;
|
||
КонецПопытки;
|
||
Возврат ДокументДОМ;
|
||
|
||
КонецФункции
|
||
|
||
Процедура мПереместитьФайл(ИмяИсточника, ИмяПриемника) Экспорт
|
||
|
||
Если НаСервере Тогда
|
||
ирСервер.ПереместитьФайлЛкс(ИмяИсточника, ИмяПриемника);
|
||
Иначе
|
||
мПлатформа = ирКэш.Получить();
|
||
Если Ложь Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
КонецЕсли;
|
||
мПлатформа.ПереместитьФайлКакАдминистратор(ИмяИсточника, ИмяПриемника);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры // ПереместитьФайл()
|
||
|
||
Функция ЛиФайлСуществует(ПолноеИмяФайла, пНаСервере = Неопределено, выхДатаИзменения = Неопределено) Экспорт
|
||
|
||
Если пНаСервере = Неопределено Тогда
|
||
пНаСервере = НаСервере;
|
||
КонецЕсли;
|
||
Если пНаСервере Тогда
|
||
ФайлНайден = ирСервер.ЛиФайлСуществуетЛкс(ПолноеИмяФайла, выхДатаИзменения);
|
||
Иначе
|
||
Файл1 = Новый Файл(ПолноеИмяФайла);
|
||
ФайлНайден = Файл1.Существует();
|
||
Если ФайлНайден Тогда
|
||
выхДатаИзменения = Файл1.ПолучитьВремяИзменения() + ирКэш.ПолучитьСмещениеВремениЛкс();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат ФайлНайден;
|
||
|
||
КонецФункции // ЛиФайлСуществует()
|
||
|
||
// Загрузить конфигурационный файл XML в документ DOM
|
||
//
|
||
Функция ЗагрузитьКонфигурационныйXML(Знач ИмяФайла, пНаСервере = Неопределено) Экспорт
|
||
|
||
Если мДокументДОМ <> Неопределено Тогда
|
||
Возврат мДокументДОМ;
|
||
КонецЕсли;
|
||
|
||
ТекущийЖурнал = -1;
|
||
Если пНаСервере = Неопределено Тогда
|
||
пНаСервере = НаСервере;
|
||
КонецЕсли;
|
||
Шаблон = Ложь;
|
||
|
||
МетаМакет = Метаданные().Макеты.Найти(ИмяФайла);
|
||
Если МетаМакет <> Неопределено Тогда
|
||
ЗагрузитьШаблон(ИмяФайла, "", "");
|
||
Возврат мДокументДОМ;
|
||
ИначеЕсли ЗначениеЗаполнено(ИмяФайла) Тогда
|
||
ФайлСуществует = ЛиФайлСуществует(ИмяФайла, пНаСервере);
|
||
Если Не ФайлСуществует Тогда
|
||
ИмяФайла = ПолучитьИмяФайлаШаблона(ИмяФайла);
|
||
Шаблон = Истина;
|
||
КонецЕсли;
|
||
Иначе
|
||
ИмяФайла = ПолучитьПолноеИмяКонфигурационногоФайла();
|
||
КонецЕсли;
|
||
|
||
КонфигурационныйФайл = Новый Файл(ИмяФайла);
|
||
ФайлСуществует = ЛиФайлСуществует(ИмяФайла, пНаСервере);
|
||
Если Не ФайлСуществует Тогда
|
||
Документ = Новый ДокументDOM("http://v8.1c.ru/v8/tech-log", "config");
|
||
мДокументДОМ = Документ;
|
||
|
||
// Создаем новую настройку техножурнала
|
||
|
||
Элемент = СоздатьЭлементДОМ("dump");
|
||
Элемент.УстановитьАтрибут("create", "true");
|
||
//Элемент.УстановитьАтрибут("location", "");
|
||
Элемент.УстановитьАтрибут("type", "0");
|
||
Элемент.УстановитьАтрибут("prntscrn", "false");
|
||
Документ.ПервыйДочерний.ДобавитьДочерний(Элемент);
|
||
|
||
Элемент = СоздатьЭлементДОМ("log");
|
||
Элемент.УстановитьАтрибут("history", "24");
|
||
Элемент.УстановитьАтрибут("location", "");
|
||
ЭлементProperty = СоздатьЭлементДОМ("property");
|
||
ЭлементProperty.УстановитьАтрибут("name", "all");
|
||
УзелСвойства = Элемент.ДобавитьДочерний(ЭлементProperty);
|
||
Документ.ПервыйДочерний.ДобавитьДочерний(Элемент);
|
||
|
||
УтечкиМетоды.Очистить();
|
||
СистемныеСобытия.Очистить();
|
||
|
||
//ЗаписатьДОМ(Документ, КонфигурационныйФайл.ПолноеИмя);
|
||
УстановитьПути(ОсновнойКаталогЖурнала, ОсновнойКаталогДампов);
|
||
|
||
Иначе
|
||
СтрокаХМЛ = ирОбщий.ПрочитатьТекстИзФайлаЛкс(КонфигурационныйФайл.ПолноеИмя,, пНаСервере);
|
||
ПрочитатьДокументДомИзСтроки(СтрокаХМЛ);
|
||
КонецЕсли;
|
||
|
||
Если Шаблон Тогда
|
||
УдалитьОписаниеШаблона();
|
||
КонецЕсли;
|
||
|
||
Возврат мДокументДОМ;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПрочитатьДокументДомИзСтроки(СтрокаХМЛ)
|
||
|
||
ЧтениеХМЛ = Новый ЧтениеXML();
|
||
ЧтениеХМЛ.УстановитьСтроку(СтрокаХМЛ);
|
||
ПостроительДом = Новый ПостроительDOM();
|
||
Попытка
|
||
мДокументДОМ = ПостроительДом.Прочитать(ЧтениеХМЛ);
|
||
Исключение
|
||
Сообщить("Ошибка при чтении файла XML: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
|
||
Возврат Неопределено;
|
||
КонецПопытки;
|
||
|
||
Возврат Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
// Записать документ DOM в файл XML
|
||
//
|
||
Процедура ЗаписатьДОМ(Документ, ИмяФайла) Экспорт
|
||
|
||
ЗаписьХМЛ = Новый ЗаписьXML();
|
||
ЗаписьХМЛ.УстановитьСтроку(мКодировкаФайла);
|
||
ЗаписатьДом = Новый ЗаписьDOM();
|
||
ЗаписатьДом.Записать(Документ, ЗаписьХМЛ);
|
||
СтрокаХМЛ = ЗаписьХМЛ.Закрыть();
|
||
ирОбщий.ЗаписатьТекстВФайлЛкс(ИмяФайла, СтрокаХМЛ, мКодировкаФайла, НаСервере);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Запись DOM в файл XML, учитывая выбранный шаблон
|
||
//
|
||
Функция ЗаписатьКонфигурационныйXML() Экспорт
|
||
|
||
УдалитьОписаниеШаблона();
|
||
ПолучитьОбновитьДокументДОМ();
|
||
ИмяКонфигурационногоФайла = ПолучитьПолноеИмяКонфигурационногоФайла();
|
||
ЗаписатьДОМ(мДокументДОМ, ИмяКонфигурационногоФайла);
|
||
Возврат ИмяКонфигурационногоФайла;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСписокУровнейСистемныхСобытий() Экспорт
|
||
|
||
ТабличныйДокумент = ПолучитьМакет("УровниСистемныхСобытий");
|
||
ТаблицаУровней = ирОбщий.ПолучитьТаблицуИзТабличногоДокументаЛкс(ТабличныйДокумент);
|
||
Список = Новый СписокЗначений;
|
||
Для каждого СтрокаУровня Из ТаблицаУровней Цикл
|
||
Список.Добавить(СтрокаУровня.Имя, СтрокаУровня.Представление);
|
||
КонецЦикла;
|
||
Возврат Список;
|
||
|
||
КонецФункции
|
||
|
||
// Удаляется из документа описание шаблона
|
||
//
|
||
Процедура УдалитьОписаниеШаблона() Экспорт
|
||
|
||
Попытка
|
||
КоллекцияУзловОписанияШаблона = мДокументДОМ.ПолучитьЭлементыПоИмени("draft");
|
||
Для Инд = 1 По КоллекцияУзловОписанияШаблона.Количество() Цикл
|
||
УзелОписанияШаблона = КоллекцияУзловОписанияШаблона.Элемент(0);
|
||
УзелОписанияШаблона.РодительскийУзел.УдалитьДочерний(УзелОписанияШаблона);
|
||
КонецЦикла;
|
||
Исключение
|
||
КонецПопытки;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Получить строку XML представления документа DOM для записи в
|
||
// поле текстового документа
|
||
Функция ПолучитьСтрокуХМЛ(Документ) Экспорт
|
||
|
||
ЗаписьХМЛ = Новый ЗаписьXML();
|
||
ЗаписьХМЛ.УстановитьСтроку(мКодировкаФайла);
|
||
ЗаписатьДом = Новый ЗаписьDOM();
|
||
|
||
УдалитьОписаниеШаблона();
|
||
|
||
ЗаписатьДом.Записать(Документ, ЗаписьХМЛ);
|
||
Возврат ЗаписьХМЛ.Закрыть();
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьОбновитьДокументДОМ() Экспорт
|
||
|
||
ЗаписатьНастройкиДампа();
|
||
ИмяЭлемента = "defaultlog";
|
||
УдалитьКорневыеЭлементыПоИмени(ИмяЭлемента);
|
||
Если Не ПустаяСтрока(КаталогСистемногоЖурнала) Тогда
|
||
Элемент = НайтиДобавитьУзелВКоллекцию(, , , ИмяЭлемента);
|
||
Если Не ПустаяСтрока(КаталогСистемногоЖурнала) Тогда
|
||
Элемент.УстановитьАтрибут("location", XMLСтрока(КаталогСистемногоЖурнала));
|
||
КонецЕсли;
|
||
Если СрокХраненияСистемногоЖурнала <> 24 Тогда
|
||
Элемент.УстановитьАтрибут("history", XMLСтрока(СрокХраненияСистемногоЖурнала));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ИмяЭлемента = "leaks";
|
||
УдалитьКорневыеЭлементыПоИмени(ИмяЭлемента);
|
||
Если СледитьЗаУтечкамиПамятиВПрикладномКоде Тогда
|
||
Утечки = НайтиДобавитьУзелСАтрибутами(,,, ИмяЭлемента, Новый Структура("collect", Истина));
|
||
Пока Утечки.ПервыйДочерний <> Неопределено Цикл
|
||
Утечки.УдалитьДочерний(Утечки.ПервыйДочерний);
|
||
КонецЦикла;
|
||
Если КонтрольнаяТочкаУтечкиКлиент Тогда
|
||
НайтиДобавитьУзелСАтрибутами(Ложь, , Утечки, "point", Новый Структура("call", "client"));
|
||
КонецЕсли;
|
||
Если КонтрольнаяТочкаУтечкиСервер Тогда
|
||
НайтиДобавитьУзелСАтрибутами(Ложь, , Утечки, "point", Новый Структура("call", "server"));
|
||
КонецЕсли;
|
||
Для каждого СтрокаУтечки Из УтечкиМетоды Цикл
|
||
Если ПустаяСтрока(СтрокаУтечки.Метод) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
НайтиДобавитьУзелСАтрибутами(Ложь, , Утечки, "point", Новый Структура("proc", СтрокаУтечки.Метод));
|
||
КонецЦикла;
|
||
//Для каждого Утечка Из УтечкиПроцедуры Цикл
|
||
// НайтиДобавитьУзелСАтрибутами(Ложь, , Утечки, "point", Новый Структура("on, off", Утечка.Строка1, Утечка.Строка2));
|
||
//КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
ИмяЭлемента = "system";
|
||
УдалитьКорневыеЭлементыПоИмени(ИмяЭлемента);
|
||
Если СистемныеСобытия.Количество() Тогда
|
||
Для каждого СтрокаСобытия Из СистемныеСобытия Цикл
|
||
Если ПустаяСтрока(СтрокаСобытия.Уровень) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Элемент = НайтиДобавитьУзелВКоллекцию(Ложь, , , ИмяЭлемента);
|
||
Элемент.УстановитьАтрибут("level", XMLСтрока(СтрокаСобытия.Уровень));
|
||
Если НЕ ПустаяСтрока(СтрокаСобытия.Компонент) Тогда
|
||
Элемент.УстановитьАтрибут("component", XMLСтрока(СтрокаСобытия.Компонент));
|
||
КонецЕсли;
|
||
Если НЕ ПустаяСтрока(СтрокаСобытия.Класс) Тогда
|
||
Элемент.УстановитьАтрибут("class", XMLСтрока(СтрокаСобытия.Класс));
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
ИмяЭлемента = "mem";
|
||
УдалитьКорневыеЭлементыПоИмени(ИмяЭлемента);
|
||
Если СледитьЗаУтечкамиПамятиВРабочихПроцессах Тогда
|
||
НайтиДобавитьУзелВКоллекцию(, , , ИмяЭлемента);
|
||
КонецЕсли;
|
||
|
||
//ИмяЭлемента = "planSQL";
|
||
ИмяЭлемента = "plansql";
|
||
УдалитьКорневыеЭлементыПоИмени(ИмяЭлемента);
|
||
Если ФиксироватьПланыЗапросовSQL Тогда
|
||
НайтиДобавитьУзелВКоллекцию(, , , ИмяЭлемента);
|
||
КонецЕсли;
|
||
|
||
ИмяЭлемента = "dbmslocks";
|
||
УдалитьКорневыеЭлементыПоИмени(ИмяЭлемента);
|
||
Если СобиратьБлокировкиСУБД Тогда
|
||
НайтиДобавитьУзелВКоллекцию(, , , ИмяЭлемента);
|
||
КонецЕсли;
|
||
Возврат мДокументДОМ;
|
||
|
||
КонецФункции
|
||
|
||
Процедура УдалитьКорневыеЭлементыПоИмени(ИмяЭлемента)
|
||
|
||
НайденныеЭлементы = мДокументДОМ.ПолучитьЭлементыПоИмени(ИмяЭлемента);
|
||
Для Каждого НайденныйЭлемент Из НайденныеЭлементы Цикл
|
||
Если ирОбщий.СтрокиРавныЛкс(НайденныйЭлемент.РодительскийУзел.ЛокальноеИмя, "config") Тогда
|
||
НайденныйЭлемент.РодительскийУзел.УдалитьДочерний(НайденныйЭлемент);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
|
||
// Вернуть документ DOM
|
||
//
|
||
Функция ДокументДОМ() Экспорт
|
||
|
||
Возврат мДокументДОМ;
|
||
|
||
КонецФункции
|
||
|
||
Функция СоздатьЭлементДОМ(ЛокальноеИмяЭлемента, Документ = Неопределено) Экспорт
|
||
|
||
Если Документ = Неопределено Тогда
|
||
Документ = мДокументДОМ;
|
||
КонецЕсли;
|
||
ЭлементДОМ = Документ.СоздатьЭлемент(Документ.ЭлементДокумента.URIПространстваИмен, Документ.ЭлементДокумента.Префикс + ":" + ЛокальноеИмяЭлемента);
|
||
Возврат ЭлементДОМ;
|
||
|
||
КонецФункции
|
||
|
||
// Закрытие документа
|
||
//
|
||
Процедура ЗакрытьДокумент() Экспорт
|
||
|
||
мДокументДОМ = Неопределено;
|
||
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// ФУНКЦИИ ДОСТУПА К ЭЛЕМЕНТАМ ДЕРЕВА ДОКУМЕНТА DOM
|
||
|
||
Функция ПолучитьУзелЖурнала(ИндексЖурнала) Экспорт
|
||
|
||
СписокЭлементов = мДокументДОМ.ПолучитьЭлементыПоИмени("log");
|
||
Если СписокЭлементов.Количество() > 0 Тогда
|
||
Результат = СписокЭлементов.Элемент(ИндексЖурнала);
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ОчиститьЖурнал(Индекс) Экспорт
|
||
|
||
мДокументДОМ.ПервыйДочерний.ЗаменитьДочерний(НовыйЖурнал(), ПолучитьУзелЖурнала(Индекс));
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция НовыйЖурнал() Экспорт
|
||
|
||
Элемент = СоздатьЭлементДОМ("log");
|
||
Элемент.УстановитьАтрибут("history", "");
|
||
Элемент.УстановитьАтрибут("location", "");
|
||
|
||
Возврат Элемент;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьПервыйУзелСобытий(ИндексЖурнала) Экспорт
|
||
|
||
УзлыЖурнала = ПолучитьСписокЖурналов();
|
||
Возврат УзлыЖурнала.Элемент(ИндексЖурнала).ПервыйДочерний;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьУзелСобытия(ИндексЖурнала, ИндексСобытия) Экспорт
|
||
|
||
НомерУзла = 0;
|
||
СписокУзлов = ПолучитьСписокУзловЖурнала(ИндексЖурнала);
|
||
Для Инд = 0 По СписокУзлов.Количество() - 1 Цикл
|
||
|
||
УзелСобытия = СписокУзлов.Элемент(Инд);
|
||
Если Истина
|
||
И ирОбщий.СтрокиРавныЛкс(УзелСобытия.РодительскийУзел.ЛокальноеИмя, "log")
|
||
И ирОбщий.СтрокиРавныЛкс(УзелСобытия.ЛокальноеИмя, "event")
|
||
Тогда
|
||
НомерУзла = НомерУзла + 1;
|
||
КонецЕсли;
|
||
|
||
Если НомерУзла = ИндексСобытия + 1 Тогда
|
||
Возврат УзелСобытия;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьУзелСвойства(НомерЖурнала, НомерСвойства) Экспорт
|
||
|
||
СписокСвойств = ПолучитьСписокСвойств(НомерЖурнала);
|
||
Если СписокСвойств.Количество() >= НомерСвойства Тогда
|
||
Результат = СписокСвойств.Элемент(НомерСвойства - 1);
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСписокЖурналов() Экспорт
|
||
|
||
Результат = мДокументДОМ.ПолучитьЭлементыПоИмени("log");
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСписокУзловЖурнала(ИндексЖурнала) Экспорт
|
||
|
||
УзлыЖурнала = ПолучитьСписокЖурналов();
|
||
//Результат = УзлыЖурнала.Элемент(ИндексЖурнала).ПолучитьЭлементыПоИмени("event"); // Так и субдочерние возращаются, а это вредно
|
||
//Результат = Новый Массив;
|
||
//Для Каждого ДочернийЭлемент Из УзлыЖурнала.Элемент(ИндексЖурнала).ДочерниеУзлы Цикл
|
||
// Если ирОбщий.СтрокиРавныЛкс(ДочернийЭлемент.ЛокальноеИмя, "event") Тогда
|
||
// Результат.Добавить(ДочернийЭлемент);
|
||
// КонецЕсли;
|
||
//КонецЦикла;
|
||
Результат = УзлыЖурнала.Элемент(ИндексЖурнала).ДочерниеУзлы;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСписокСвойств(ИндексЖурнала) Экспорт
|
||
|
||
УзлыЖурнала = ПолучитьСписокЖурналов();
|
||
Результат = УзлыЖурнала.Элемент(ИндексЖурнала).ПолучитьЭлементыПоИмени("property");
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// ФУНКЦИИ РАБОТЫ С ДАМПОМ
|
||
|
||
// Считать настройки дампа из документа DOM
|
||
//
|
||
Процедура ПрочитатьНастройкиДампа() Экспорт
|
||
|
||
ЗаписатьНастройкиД = Ложь;
|
||
ЭлементДамп = мДокументДОМ.ПолучитьЭлементыПоИмени("dump");
|
||
Если ЭлементДамп.Количество() > 0 Тогда
|
||
ПервыйЭлемент = ЭлементДамп.Элемент(0);
|
||
Если ПервыйЭлемент <> Неопределено Тогда
|
||
ТипДампа = ПервыйЭлемент.ПолучитьАтрибут("type");
|
||
РасположениеДампа = ПервыйЭлемент.ПолучитьАтрибут("location");
|
||
Попытка
|
||
ДампСкриншот = XMLЗначение(Тип("Булево"), ПервыйЭлемент.ПолучитьАтрибут("prntscrn"));
|
||
Исключение
|
||
ДампСкриншот = Ложь;
|
||
//ЗаписатьНастройкиД = Истина;
|
||
//ПервыйЭлемент.УстановитьАтрибут("prntscrn", "false");
|
||
КонецПопытки;
|
||
Попытка
|
||
СоздаватьДамп = XMLЗначение(Тип("Булево"), ПервыйЭлемент.ПолучитьАтрибут("create"));
|
||
Исключение
|
||
СоздаватьДамп = Ложь;
|
||
//ЗаписатьНастройкиД = Истина;
|
||
//ПервыйЭлемент.УстановитьАтрибут("create", "false");
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
Иначе
|
||
ТипДампа = 0;
|
||
РасположениеДампа = "";
|
||
ДампСкриншот = Ложь;
|
||
СоздаватьДамп = Ложь;
|
||
КонецЕсли;
|
||
|
||
//Если ЗаписатьНастройкиД Тогда
|
||
// ЗаписатьДОМ(мДокументДОМ, ПолучитьПолноеИмяКонфигурационногоФайла());
|
||
//КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Записать настройки дампа в документа DOM
|
||
//
|
||
Функция ЗаписатьНастройкиДампа() Экспорт
|
||
|
||
Перем ПервыйДочерний;
|
||
|
||
ЭлементДамп = мДокументДОМ.ПолучитьЭлементыПоИмени("dump");
|
||
Если ЭлементДамп.Количество() = 0 Тогда
|
||
Элемент = СоздатьЭлементДОМ("dump");
|
||
Элемент.УстановитьАтрибут("create", "true");
|
||
//Элемент.УстановитьАтрибут("location", "");
|
||
Элемент.УстановитьАтрибут("type", "0");
|
||
Элемент.УстановитьАтрибут("prntscrn", "false");
|
||
ПервыйДочерний = Элемент;
|
||
мДокументДОМ.ПервыйДочерний.ДобавитьДочерний(Элемент);
|
||
Иначе
|
||
ПервыйДочерний = ЭлементДамп.Элемент(0);
|
||
КонецЕсли;
|
||
ПервыйДочерний.УстановитьАтрибут("create", XMLСтрока(СоздаватьДамп));
|
||
ПервыйДочерний.УстановитьАтрибут("type", XMLСтрока(ТипДампа));
|
||
ПервыйДочерний.УстановитьАтрибут("prntscrn", XMLСтрока(ДампСкриншот));
|
||
Если Не ПустаяСтрока(РасположениеДампа) Тогда
|
||
ПервыйДочерний.УстановитьАтрибут("location", РасположениеДампа);
|
||
Иначе
|
||
ПервыйДочерний.УдалитьАтрибут("location");
|
||
КонецЕсли;
|
||
Возврат мДокументДОМ;
|
||
|
||
КонецФункции
|
||
|
||
// Считать настройки журнала из документа DOM
|
||
//
|
||
Процедура ПрочитатьНастройкиЖурнала(Индекс, Местоположение, ВремяХранения, ПредставлениеСобытий = Неопределено) Экспорт
|
||
|
||
УзлыЖурналов = ПолучитьСписокЖурналов();
|
||
УзелЖурнала = УзлыЖурналов.Элемент(Индекс);
|
||
Местоположение = УзелЖурнала.ПолучитьАтрибут("location");
|
||
Если Не ЗначениеЗаполнено(ОсновнойКаталогЖурнала) Тогда
|
||
ЭтотОбъект.ОсновнойКаталогЖурнала = Местоположение;
|
||
КонецЕсли;
|
||
ВремяХранения = УзелЖурнала.ПолучитьАтрибут("history");
|
||
Попытка
|
||
ВремяХранения = Число(ВремяХранения);
|
||
Исключение
|
||
ВремяХранения = 1;
|
||
КонецПопытки;
|
||
//Для Каждого Атрибут Из УзелЖурнала.Атрибуты Цикл
|
||
// Если Атрибут.ЛокальноеИмя = "location" Тогда
|
||
// Попытка
|
||
// Местоположение = Атрибут.ЗначениеУзла;
|
||
// Исключение
|
||
// Местоположение = "";
|
||
// КонецПопытки;
|
||
// КонецЕсли;
|
||
// Если Атрибут.ЛокальноеИмя = "history" Тогда
|
||
// Попытка
|
||
// ВремяХранения = Число(Атрибут.ЗначениеУзла);
|
||
// Исключение
|
||
// ВремяХранения = 1;
|
||
// КонецПопытки;
|
||
// КонецЕсли;
|
||
//КонецЦикла;
|
||
|
||
ПредставлениеСобытий = ПолучитьПредставлениеОтбораСобытийЖурнала(Индекс);
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ПолучитьПредставлениеОтбораСобытийЖурнала(Индекс) Экспорт
|
||
|
||
ПредставлениеСобытий = "";
|
||
СписокУзловЖурнала = ПолучитьСписокУзловЖурнала(Индекс);
|
||
Для ИндексУзлаСобытия = 0 По СписокУзловЖурнала.Количество() - 1 Цикл
|
||
ПредставлениеУсловияСобытий = ПолучитьПредставлениеЭлементаОтбораСобытий(Индекс, ИндексУзлаСобытия);
|
||
Если Не ЗначениеЗаполнено(ПредставлениеУсловияСобытий) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Если ПредставлениеСобытий <> "" Тогда
|
||
ПредставлениеСобытий = ПредставлениеСобытий + " ИЛИ ";
|
||
КонецЕсли;
|
||
ПредставлениеСобытий = ПредставлениеСобытий + "(" + ПредставлениеУсловияСобытий + ")";
|
||
КонецЦикла;
|
||
Возврат ПредставлениеСобытий;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьПредставлениеОтбораСвойствЖурнала(Индекс) Экспорт
|
||
|
||
ПредставлениеСобытий = "";
|
||
СписокУзловЖурнала = ПолучитьСписокУзловЖурнала(Индекс);
|
||
Для ИндексСобытия = 0 По СписокУзловЖурнала.Количество() - 1 Цикл
|
||
ПредставлениеУсловияСобытий = ПолучитьПредставлениеЭлементаОтбораСвойств(СписокУзловЖурнала, ИндексСобытия);
|
||
Если Не ЗначениеЗаполнено(ПредставлениеУсловияСобытий) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Если ПредставлениеСобытий <> "" Тогда
|
||
ПредставлениеСобытий = ПредставлениеСобытий + " ИЛИ ";
|
||
КонецЕсли;
|
||
ПредставлениеСобытий = ПредставлениеСобытий + "(" + ПредставлениеУсловияСобытий + ")";
|
||
КонецЦикла;
|
||
Возврат ПредставлениеСобытий;
|
||
|
||
КонецФункции
|
||
|
||
// Запись настройки журнал в документ DOM
|
||
//
|
||
Процедура ЗаписатьНастройкиЖурнала(Индекс, Местоположение, ВремяХранения) Экспорт
|
||
|
||
ЭлементДомЖурнала = ПолучитьУзелЖурнала(Индекс);
|
||
Если ЭлементДомЖурнала = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
ЭлементДомЖурнала.УстановитьАтрибут("location", XMLСтрока(Местоположение));
|
||
ЭлементДомЖурнала.УстановитьАтрибут("history", XMLСтрока(ВремяХранения));
|
||
|
||
КонецПроцедуры
|
||
|
||
// Считать настройки журналов из документа DOM
|
||
//
|
||
Процедура ПрочитатьНастройкиЖурналов(ТабличноеПолеЖурналы) Экспорт
|
||
|
||
ТабличноеПолеЖурналы.Очистить();
|
||
УзлыЖурналов = ПолучитьСписокЖурналов();
|
||
Для Инд = 0 По УзлыЖурналов.Количество() - 1 Цикл
|
||
Журнал = ТабличноеПолеЖурналы.Добавить();
|
||
Журнал.НомерЖурнала = Инд + 1;
|
||
ПрочитатьНастройкиЖурнала(Инд, Журнал.Местоположение, Журнал.ВремяХранения, Журнал.События);
|
||
Журнал.Доступен = Не ирОбщий.ЛиКаталогТехножурналаНедоступенЛкс(Журнал.Местоположение, НаСервере);
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Изменить пути к файлам технологического журнала
|
||
//
|
||
Процедура УстановитьПути(КаталогЖурнала, КаталогДампа) Экспорт
|
||
|
||
ЭлементДамп = мДокументДОМ.ПолучитьЭлементыПоИмени("dump");
|
||
Если ЭлементДамп.Количество() > 0 Тогда
|
||
ЭлементДамп = ЭлементДамп.Элемент(0);
|
||
Иначе
|
||
ЭлементДамп = Неопределено;
|
||
КонецЕсли;
|
||
Если ЭлементДамп <> Неопределено Тогда
|
||
Если ЗначениеЗаполнено(КаталогДампа) Тогда
|
||
ЭлементДамп.УстановитьАтрибут("location", КаталогДампа);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Журналы = мДокументДОМ.ПолучитьЭлементыПоИмени("log");
|
||
Для Инд = 0 По Журналы.Количество() - 1 Цикл
|
||
Журнал = Журналы.Элемент(Инд);
|
||
Если ЗначениеЗаполнено(КаталогЖурнала) Тогда
|
||
Журнал.УстановитьАтрибут("location", КаталогЖурнала)
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// СЕРВИСНЫЕ ФУНКЦИИ
|
||
|
||
// Перевести десятичное число в двоичное представление и
|
||
// разместить в строке в перевернутом виде
|
||
//
|
||
Процедура ДесятичноеВДвоичное(Знач Число)
|
||
|
||
мДвоичноеЧисло = "";
|
||
мЧисло = Число;
|
||
|
||
Пока Число >= 1 Цикл
|
||
|
||
Остаток = Число % 2;
|
||
Число = Цел(Число / 2);
|
||
|
||
мДвоичноеЧисло = мДвоичноеЧисло + Строка(Остаток);
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Проверка взведения бита в числе
|
||
//
|
||
Функция ПроверитьБит(НомерБита, Число) Экспорт
|
||
|
||
Если Число <> мЧисло Тогда
|
||
ДесятичноеВДвоичное(Число);
|
||
КонецЕсли;
|
||
|
||
Если СтрДлина(мДвоичноеЧисло) < НомерБита Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
|
||
Если Сред(мДвоичноеЧисло, НомерБита, 1) = "1" Тогда
|
||
Возврат Истина;
|
||
Иначе
|
||
Возврат Ложь;
|
||
КонецЕсли
|
||
|
||
КонецФункции
|
||
|
||
// Функция выбора значения при свойстве Name и Func
|
||
//
|
||
Процедура РедактированиеЗначения(ТабличноеПоле, Элемент) Экспорт
|
||
|
||
КолонкаЗначение = ТабличноеПоле.Колонки.Значение;
|
||
Свойство = ТабличноеПоле.ТекущаяСтрока.Свойство;
|
||
Если Свойство = "" Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
СтруктураТиповЗначенийСвойств = ВернутьСписокТипов();
|
||
ТипЗначенияСвойства = Неопределено;
|
||
Если Не СтруктураТиповЗначенийСвойств.Свойство(СтрЗаменить(Свойство, ":", "_"), ТипЗначенияСвойства) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
Если ПроверитьПринадлежность(Свойство) Тогда
|
||
|
||
КолонкаЗначение.УстановитьЭлементУправления(Тип("ПолеВвода"));
|
||
КолонкаЗначение.ЭлементУправления.ТипЗначения = ТипЗначенияСвойства;
|
||
|
||
ДоВыбора = ТабличноеПоле.ТекущаяСтрока.Значение;
|
||
|
||
// В зависимости от имени свойства возвращаем соответствующий список
|
||
КолонкаЗначение.ЭлементУправления.Значение = ВернутьСписокСоответствующийИмени(Свойство);
|
||
Результат = КолонкаЗначение.ЭлементУправления.Значение.ВыбратьЭлемент();
|
||
|
||
КолонкаЗначение.УстановитьЭлементУправления(Тип("ПолеВвода"));
|
||
КолонкаЗначение.ЭлементУправления.ТипЗначения = Новый ОписаниеТипов("Строка");
|
||
КолонкаЗначение.ЭлементУправления.КнопкаВыбора = Истина;
|
||
КолонкаЗначение.ЭлементУправления.РедактированиеТекста = Ложь;
|
||
|
||
Если Результат = Неопределено Тогда
|
||
Если Не ПустаяСтрока(ДоВыбора) Тогда
|
||
ЭлементЗначения = ВернутьСписокСоответствующийИмени(Свойство).НайтиПоЗначению(НРег(ДоВыбора));
|
||
Если ЭлементЗначения <> Неопределено Тогда
|
||
КолонкаЗначение.ЭлементУправления.Значение = ЭлементЗначения.Представление;
|
||
Инд = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока);
|
||
ТабличноеПоле.Значение.Получить(Инд).Значение = ДоВыбора;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
КолонкаЗначение.ЭлементУправления.Значение = Результат.Представление;
|
||
Инд = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока);
|
||
ТабличноеПоле.Значение.Получить(Инд).Значение = Результат.Значение;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Функция заменяет символ на другой
|
||
//
|
||
Функция ЗаменитьСимвол(Строка, Что, НаЧто) Экспорт
|
||
|
||
Возврат СтрЗаменить(Строка, Что, НаЧто);
|
||
|
||
КонецФункции
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// ОБЩИЕ ОБРАБОТЧИКИ СОБЫТИЙ
|
||
|
||
// Процедура обработки события показа строки
|
||
//
|
||
Процедура ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт
|
||
|
||
Если ПроверитьПринадлежность(ДанныеСтроки.Свойство) Тогда
|
||
Если ДанныеСтроки.Значение <> "" И ДанныеСтроки.Значение <> Неопределено Тогда
|
||
НайденноеЗначение = ВернутьСписокСоответствующийИмени(ДанныеСтроки.Свойство).НайтиПоЗначению(НРег(ДанныеСтроки.Значение));
|
||
Если НайденноеЗначение <> Неопределено Тогда
|
||
ОформлениеСтроки.Ячейки.Значение.УстановитьТекст(НайденноеЗначение);
|
||
Иначе
|
||
ОформлениеСтроки.Ячейки.Значение.УстановитьТекст(ДанныеСтроки.Значение);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
Если ДанныеСтроки.Значение <> "" И ДанныеСтроки.Значение <> Неопределено Тогда
|
||
ОформлениеСтроки.Ячейки.Значение.УстановитьТекст(ДанныеСтроки.Значение);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если ДанныеСтроки.Сравнение <> "" И ДанныеСтроки.Сравнение <> Неопределено Тогда
|
||
НайденноеЗначение = ПолучитьСписокСравнения().НайтиПоЗначению(НРег(ДанныеСтроки.Сравнение));
|
||
Если НайденноеЗначение <> Неопределено Тогда
|
||
ОформлениеСтроки.Ячейки.Сравнение.УстановитьТекст(НайденноеЗначение.Представление);
|
||
КонецЕсли;
|
||
Иначе
|
||
ОформлениеСтроки.Ячейки.Сравнение.УстановитьТекст(ПолучитьСписокСравнения().НайтиПоЗначению("eq").Представление);
|
||
КонецЕсли;
|
||
Если ДанныеСтроки.Свойство <> "" И ДанныеСтроки.Свойство <> Неопределено Тогда
|
||
СвойствоСобытия = ПолучитьСписокСвойствСобытий().НайтиПоЗначению(НРег(ЗаменитьСимвол(ДанныеСтроки.Свойство, ":", "_")));
|
||
Если СвойствоСобытия <> Неопределено Тогда
|
||
ОформлениеСтроки.Ячейки.Свойство.УстановитьТекст(СвойствоСобытия.Представление);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Процедура обработки события начала редактирования
|
||
//
|
||
Процедура ПриНачалеРедактирования(ТабличноеПоле, Элемент, НоваяСтрока, Копирование) Экспорт
|
||
|
||
Если НоваяСтрока Тогда
|
||
Если Не Копирование Тогда
|
||
Элемент.ТекущаяСтрока.Сравнение = "eq";
|
||
КонецЕсли;
|
||
Иначе
|
||
Если Элемент.ТекущаяКолонка.Имя = "Значение" Тогда
|
||
Если ПустаяСтрока(Элемент.ТекущаяСтрока.Свойство) Тогда
|
||
// Редактировать нечего, неизвестен тип свойства
|
||
Возврат;
|
||
КонецЕсли;
|
||
Если Не НоваяСтрока Тогда
|
||
КолонкаЗначение = ТабличноеПоле.Колонки.Значение;
|
||
КолонкаЗначение.УстановитьЭлементУправления(Тип("ПолеВвода"));
|
||
КолонкаЗначение.ЭлементУправления.ТипЗначения = ВернутьСписокТипов()[СтрЗаменить(Элемент.ТекущаяСтрока.Свойство, ":", "_")];
|
||
КонецЕсли;
|
||
РедактированиеЗначения(ТабличноеПоле, Элемент);
|
||
Инд = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока);
|
||
ТабличноеПоле.Колонки.Значение.ЭлементУправления.Значение = ТабличноеПоле.Значение.Получить(Инд).Значение;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Процедура обработки события выбора
|
||
//
|
||
Процедура СвойствоОбработкаВыбора(ТабличноеПоле, Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Экспорт
|
||
|
||
СтруктураТиповЗначенийСвойств = ВернутьСписокТипов();
|
||
ТипЗначенияСвойства = Неопределено;
|
||
Если Не СтруктураТиповЗначенийСвойств.Свойство(СтрЗаменить(ВыбранноеЗначение, ":", "_"), ТипЗначенияСвойства) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
КолонкаЗначение = ТабличноеПоле.Колонки.Значение;
|
||
СтароеЗначение = ТабличноеПоле.ТекущаяСтрока.Значение;
|
||
КолонкаЗначение.УстановитьЭлементУправления(Тип("ПолеВвода"));
|
||
КолонкаЗначение.ЭлементУправления.ТипЗначения = ТипЗначенияСвойства;
|
||
ТабличноеПоле.ТекущаяСтрока.Значение = КолонкаЗначение.ЭлементУправления.ТипЗначения.ПривестиЗначение(СтароеЗначение);
|
||
|
||
//Инд = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока);
|
||
//Если Строка(ТипСвойства) = "Строка" Тогда
|
||
// ТабличноеПоле.Значение.Получить(Инд).Значение = "";
|
||
//ИначеЕсли Строка(ТипСвойства) = "Число" Тогда
|
||
// ТабличноеПоле.Значение.Получить(Инд).Значение = "0";
|
||
//ИначеЕсли Строка(ТипСвойства) = "Список значений" Тогда
|
||
// ТабличноеПоле.Значение.Получить(Инд).Значение = "";
|
||
//КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Процедура обработки события выбора
|
||
//
|
||
Процедура ЗначениеНачалоВыбора(ТабличноеПоле, Элемент, СтандартнаяОбработка) Экспорт
|
||
|
||
Свойство = ТабличноеПоле.ТекущаяСтрока.Свойство;
|
||
Если ПроверитьПринадлежность(Свойство) Тогда
|
||
|
||
ДоВыбора = ТабличноеПоле.ТекущаяСтрока.Значение;
|
||
Результат = ВернутьСписокСоответствующийИмени(Свойство).ВыбратьЭлемент();
|
||
Если Результат = Неопределено Тогда
|
||
Если Не ПустаяСтрока(ДоВыбора) Тогда
|
||
ЭлементЗначения = ВернутьСписокСоответствующийИмени(Свойство).НайтиПоЗначению(НРег(ДоВыбора));
|
||
Если ЭлементЗначения <> Неопределено Тогда
|
||
ТабличноеПоле.Колонки.Значение.ЭлементУправления.Значение = ЭлементЗначения.Представление;
|
||
Инд = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока);
|
||
ТабличноеПоле.Значение.Получить(Инд).Значение = ДоВыбора;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
ТабличноеПоле.Колонки.Значение.ЭлементУправления.Значение = Результат.Представление;
|
||
Инд = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока);
|
||
ТабличноеПоле.Значение.Получить(Инд).Значение = Результат.Значение;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// ФУНКЦИИ РАБОТЫ С ШАБЛОНАМИ
|
||
|
||
// Добавляет описание шаблона в кэш
|
||
Процедура ДобавитьОписаниеШаблона(Имя, Описание) Экспорт
|
||
|
||
Элемент = КэшОписанияШаблонов.НайтиПоЗначению(Имя);
|
||
Если Элемент = Неопределено Тогда
|
||
КэшОписанияШаблонов.Добавить(Имя, Описание);
|
||
Иначе
|
||
Элемент = Описание;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Получение описания из кэша
|
||
Функция ПолучитьОписаниеШаблона(Имя) Экспорт
|
||
|
||
Описание = КэшОписанияШаблонов.НайтиПоЗначению(Имя);
|
||
Если Описание = Неопределено Тогда
|
||
Описание = "";
|
||
Файл = Новый Файл(ПолучитьИмяФайлаШаблона(Имя));
|
||
ФайлСуществует = ЛиФайлСуществует(Файл.ПолноеИмя);
|
||
Если ФайлСуществует Тогда
|
||
ДокументДом = ЗагрузитьXML(Файл.ПолноеИмя);
|
||
Шаблон = ДокументДом.ПолучитьЭлементыПоИмени("draft");
|
||
Если Шаблон.Количество() > 0 Тогда
|
||
Шаблон = Шаблон.Элемент(0);
|
||
Попытка
|
||
Описание = Шаблон.ПолучитьЭлементыПоИмени("description").Элемент(0).ТекстовоеСодержимое;
|
||
ДобавитьОписаниеШаблона(Имя, Описание);
|
||
Исключение
|
||
Описание = "";
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
ДокументДом = Неопределено;
|
||
КонецЕсли;
|
||
Иначе
|
||
Описание = Описание.Представление;
|
||
КонецЕсли;
|
||
Возврат Описание;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСодержимоеФайлаШаблона(ИмяШаблона) Экспорт
|
||
|
||
Шаблон = Ложь;
|
||
МетаМакет = Метаданные().Макеты.Найти(ИмяШаблона);
|
||
Если МетаМакет <> Неопределено Тогда
|
||
МакетШаблона = ПолучитьМакет(ИмяШаблона);
|
||
ТекстШаблона = МакетШаблона.ПолучитьТекст();
|
||
ТекстШаблона = Сред(ТекстШаблона, Найти(ТекстШаблона, "<"));
|
||
Возврат ТекстШаблона;
|
||
Иначе //Если ЗначениеЗаполнено(ИмяШаблона) Тогда
|
||
ИмяФайла = ПолучитьИмяФайлаШаблона(ИмяШаблона);
|
||
ТекстШаблона = ирОбщий.ПрочитатьТекстИзФайлаЛкс(ИмяФайла, , НаСервере);
|
||
КонецЕсли;
|
||
Возврат ТекстШаблона;
|
||
|
||
КонецФункции
|
||
|
||
|
||
// Заполнает список значений именем и представлением шаблона
|
||
Процедура ЗаполнитьСписокВыбораШаблона(СписокВыбора, ИсключитьСтандартные) Экспорт
|
||
|
||
Если СписокСтандартныхШаблонов.Количество() = 0 Тогда
|
||
МетаМакеты = Метаданные().Макеты;
|
||
Для Каждого МетаМакет Из МетаМакеты Цикл
|
||
Если Найти(МетаМакет.Имя, "Шаблон") = 1 Тогда
|
||
ПредставлениеМакета = МетаМакет.Представление();
|
||
ПредставлениеМакета = Сред(ПредставлениеМакета, Найти(ПредставлениеМакета, ":") + 1);
|
||
СписокСтандартныхШаблонов.Добавить(МетаМакет.Имя, ПредставлениеМакета);
|
||
МакетШаблона = ПолучитьМакет(МетаМакет.Имя);
|
||
ТекстШаблона = МакетШаблона.ПолучитьТекст();
|
||
Позиция = Найти(ТекстШаблона, "<?xml");
|
||
Описание = Лев(ТекстШаблона, Позиция - 1);
|
||
ДобавитьОписаниеШаблона(МетаМакет.Имя, Описание);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
СписокСтандартныхШаблонов.СортироватьПоПредставлению();
|
||
КонецЕсли;
|
||
|
||
Если Не ИсключитьСтандартные Тогда
|
||
лСписокВыбора = СписокСтандартныхШаблонов.Скопировать();
|
||
лСписокВыбора.ЗаполнитьПометки(Истина);
|
||
СписокВыбора = лСписокВыбора;
|
||
КонецЕсли;
|
||
|
||
ИменаФайлов = ирОбщий.НайтиИменаФайловЛкс(ПолучитьДиректориюКонфигурационногоФайла(), "*.prst", , НаСервере);
|
||
Если ИменаФайлов.Количество() > 0 Тогда
|
||
Для Каждого ПолноеИмяФайла Из ИменаФайлов Цикл
|
||
Файл = Новый Файл(ПолноеИмяФайла);
|
||
Имя = Файл.ИмяБезРасширения;
|
||
ДокументДом = ЗагрузитьXML(Файл.ПолноеИмя);
|
||
Шаблон = ДокументДом.ПолучитьЭлементыПоИмени("draft");
|
||
Если Шаблон.Количество() > 0 Тогда
|
||
Шаблон = Шаблон.Элемент(0);
|
||
Попытка
|
||
Представление = Шаблон.ПолучитьЭлементыПоИмени("presentation").Элемент(0).ТекстовоеСодержимое;
|
||
Исключение
|
||
Представление = Имя;
|
||
КонецПопытки;
|
||
Попытка
|
||
Описание = Шаблон.ПолучитьЭлементыПоИмени("description").Элемент(0).ТекстовоеСодержимое;
|
||
Исключение
|
||
Описание = "";
|
||
КонецПопытки;
|
||
Иначе
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
СписокВыбора.Добавить(Имя, Представление);
|
||
ДобавитьОписаниеШаблона(Имя, Описание);
|
||
ДокументДом = Неопределено;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// Стандартные шаблоны
|
||
|
||
// Пустой шаблон
|
||
//
|
||
Процедура ПустойШаблон(СписокВыбора, КаталогЖурнала, КаталогДампа, Описание)
|
||
|
||
Если Описание Тогда
|
||
|
||
Имя = "__empty";
|
||
Представление = "Пустой шаблон";
|
||
Описание = "Настройка технологического журнала на поведение по умолчанию, " +
|
||
"как если бы конфигурационного файла не было.";
|
||
|
||
СписокВыбора.Добавить(Имя, Представление);
|
||
ДобавитьОписаниеШаблона(Имя, Описание);
|
||
Возврат;
|
||
|
||
КонецЕсли;
|
||
|
||
ЗакрытьДокумент();
|
||
мДокументДОМ = Новый ДокументDOM("http://v8.1c.ru/v8/tech-log", "config");
|
||
Элемент = СоздатьЭлементДОМ("dump");
|
||
Элемент.УстановитьАтрибут("create", "true");
|
||
//Элемент.УстановитьАтрибут("location", "");
|
||
Элемент.УстановитьАтрибут("type", "0");
|
||
Элемент.УстановитьАтрибут("prntscrn", "false");
|
||
мДокументДОМ.ПервыйДочерний.ДобавитьДочерний(Элемент);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗагрузитьШаблон(ИмяШаблона, КаталогЖурнала, КаталогДампа)
|
||
|
||
МакетШаблона = ПолучитьМакет(ИмяШаблона);
|
||
ТекстШаблона = МакетШаблона.ПолучитьТекст();
|
||
Позиция = Найти(ТекстШаблона, "<?xml");
|
||
Описание = Лев(ТекстШаблона, Позиция - 1);
|
||
ТекстШаблона = Сред(ТекстШаблона, Позиция);
|
||
ЗакрытьДокумент();
|
||
ПрочитатьДокументДомИзСтроки(ТекстШаблона);
|
||
|
||
КонецПроцедуры
|
||
|
||
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
|
||
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
|
||
//ирПортативный #Если Клиент Тогда
|
||
//ирПортативный Контейнер = Новый Структура();
|
||
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
|
||
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
|
||
//ирПортативный ирПортативный.Открыть();
|
||
//ирПортативный КонецЕсли;
|
||
//ирПортативный #Иначе
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
|
||
//ирПортативный #КонецЕсли
|
||
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
|
||
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
|
||
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
|
||
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
|
||
|
||
ИспользоватьОбщийКаталогНастроек = Истина;
|
||
мКодировкаФайла = "UTF-8"; |