mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 21:24:11 +00:00
+В непортативном режиме в форму запуска нового сеанса добавлена кнопка "Запустить толстый клиент"
+В полях ввода расширенных значений реализована поддержка типов ХранилищеЗначения и ДвоичныеДанные
Анализ техножурнала
*Исправлена ошибка неоткрытия формы анализа управляемой блокировки
Структура формы
*Исправлены свежие ошибки в портативном режиме
Подготовка к изменению структуры БД
+Реализован полностью корректный метод сравнения конфигураций на 8.3.8+
Контекстная подсказка
*Исправлена свежая ошибка возвращения периодической потери формой модуля
Анализ журнала регистрации
*Исправлена актуализация списков доступных значений в отборе
Конструктор запроса
*Исправлено вычисление типов выбранных полей
*Исправлено обновление доступных полей временных таблиц из предыдущих запросов пакета
+У поля объединения добавлена кнопка перехода к его части объединения
Удаление объектов с контролем ссылок
*Исправлена плавающая ошибка чтения доп. полей объектов ссылающихся на кандидатов
Редактор пользователей
*Исправлен сброс пароля пользователя при запуске под пользователем при "Подменить пароль на время запуска" = Выкл
+Добавлена поддержка свойства СохраняемоеЗначениеПароля
575 lines
42 KiB
Plaintext
575 lines
42 KiB
Plaintext
Перем ирПлатформа;
|
||
|
||
// Параметры:
|
||
// КаталогРаспаковки - Строка(0,П)
|
||
//
|
||
Функция ПолучитьФайлСтруктурыХранилищаОбъектаМетаданных(Знач КаталогРаспаковки = "") Экспорт
|
||
|
||
RegExp = ирПлатформа.RegExp;
|
||
RegExp.Global = Ложь;
|
||
RegExp.Pattern = "{2,(" + ирПлатформа.шGUID + "),";
|
||
ФайлКорневогоУказателя = Новый Файл(КаталогРаспаковки + "root.data.und");
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Прочитать(ФайлКорневогоУказателя.ПолноеИмя);
|
||
РезультатыПоиска = RegExp.Execute(ТекстовыйДокумент.ПолучитьТекст());
|
||
КорневойИД = РезультатыПоиска.Item(0).Submatches(0);
|
||
ФайлСтруктуры = Новый Файл(КаталогРаспаковки + КорневойИД + ".data.und");
|
||
Результат = ФайлСтруктуры;
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
// Параметры:
|
||
// ПолноеИмяФайлаВнешнейОбработки - Строка(0,П)
|
||
// ИмяФормы - Строка(0,П) - Если не указана, используется Основая форма, а если основная форма не указана, используется единственная форма. Для быстрого выполнения нужно указывать.
|
||
// МассивДобавляемыхРеквизитов - Массив - !Проверка уникальности не выполняется. Ее нужно делать снаружи
|
||
// СтарыйТекстМодуля - Строка(0,П)
|
||
//
|
||
Функция ПроверитьОбновитьМодульИРеквизитыФормыВФайле(Знач ПолноеИмяФайлаВнешнейОбработки = "", Знач ИмяФормы = "", Знач МассивДобавляемыхРеквизитов, НовыйТекстМодуля,
|
||
СтарыйТекстМодуля = "") Экспорт
|
||
|
||
ФайлВнешнейОбработки = Новый Файл(ПолноеИмяФайлаВнешнейОбработки);
|
||
Если Не ЗначениеЗаполнено(ИмяФормы) Тогда
|
||
ВнешнийОбъект = ВнешниеОбработки.Создать(ФайлВнешнейОбработки.ПолноеИмя);
|
||
ОбъектМетаданных = ВнешнийОбъект.Метаданные();
|
||
Если ОбъектМетаданных.ОсновнаяФорма <> Неопределено Тогда
|
||
ИмяФормы = ОбъектМетаданных.ОсновнаяФорма.Имя;
|
||
ИначеЕсли ОбъектМетаданных.Формы.Количество() = 1 Тогда
|
||
ИмяФормы = ОбъектМетаданных.Формы[0].Имя;
|
||
Иначе
|
||
ВызватьИсключение "Невозможно определить форму внешней обработки для обновления";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИмяКаталогаСборки = "Rebuild";
|
||
ИмяКаталогаРаспаковки = ФайлВнешнейОбработки.Путь + ИмяКаталогаСборки;
|
||
КаталогРаспаковки = ИмяКаталогаРаспаковки + "\";
|
||
УдалитьФайлы(ИмяКаталогаРаспаковки, "*.*");
|
||
СоздатьКаталог(ИмяКаталогаРаспаковки);
|
||
ирПлатформа.РаспаковатьФайлВнешнейОбработки(ФайлВнешнейОбработки.ПолноеИмя, КаталогРаспаковки);
|
||
БылаМодификация = Ложь;
|
||
RegExp = ирПлатформа.RegExp;
|
||
|
||
// Получаем модуль формы и изменяем его, если не соответствует стандарту
|
||
|
||
//ФайлСпискаФорм = Новый файл(КаталогРаспаковки + "copyinfo.data.und");
|
||
//ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
//ТекстовыйДокумент.Прочитать(ФайлСпискаФорм.ПолноеИмя);
|
||
//RegExp.Global = Ложь;
|
||
//RegExp.Pattern = "(" + ирПлатформа.шGUID + "),1,\n\{d5b0e5ed-256d-401c-9c36-f630cafd8a62,""" + ИмяФормы + """";
|
||
//РезультатыПоиска = RegExp.Execute(ТекстовыйДокумент.ПолучитьТекст());
|
||
//СтарыеТекстыМодулейФорм = Новый Структура;
|
||
//ИДФормы = РезультатыПоиска.Item(0).Submatches(0);
|
||
|
||
ФайлСтруктуры = ПолучитьФайлСтруктурыХранилищаОбъектаМетаданных(КаталогРаспаковки);
|
||
ТекстСтруктуры = Новый ТекстовыйДокумент;
|
||
ТекстСтруктуры.Прочитать(ФайлСтруктуры.ПолноеИмя);
|
||
RegExp.Global = Ложь;
|
||
RegExp.Pattern = "\{d5b0e5ed-256d-401c-9c36-f630cafd8a62,\d+((?:," + ирПлатформа.шGUID + ")*)\}";
|
||
РезультатыПоиска = RegExp.Execute(ТекстСтруктуры.ПолучитьТекст());
|
||
ТекстСпискаИД = РезультатыПоиска.Item(0).Submatches(0);
|
||
RegExp.Global = Истина;
|
||
RegExp.Pattern = ирПлатформа.шGUID;
|
||
РезультатыПоиска = RegExp.Execute(ТекстСпискаИД);
|
||
Для Каждого Вхождение Из РезультатыПоиска Цикл
|
||
ТекстФайлаФормы = Новый ТекстовыйДокумент;
|
||
ТекстФайлаФормы.Прочитать(КаталогРаспаковки + Вхождение.Value + ".data.und");
|
||
//RegExp.Global = Ложь;
|
||
//RegExp.Pattern = Вхождение.Value + "\},""(" + ирПлатформа.шИмя + ")"";
|
||
//РезультатыПоиска2 = RegExp.Execute(ТекстФайлаФормы.ПолучитьТекст());
|
||
Маркер = Вхождение.Value + "},""" + ИмяФормы + """";
|
||
Если Найти(НРег(ТекстФайлаФормы.ПолучитьТекст()), Нрег(Маркер)) > 0 Тогда
|
||
ИДФормы = Вхождение.Value;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Если ИДФормы = Неопределено Тогда
|
||
ВызватьИсключение "Не удалось определить внутренний идентификатор формы """ + ИмяФормы + """";
|
||
КонецЕсли;
|
||
|
||
ФайлМодуляФормы = Новый Файл(КаталогРаспаковки + ИДФормы + ".0.data.und.unp\" + "module.data");
|
||
СтарыйТекстМодуляФормы = Неопределено;
|
||
|
||
Результат = Ложь;
|
||
ТекстДляПроверки = Новый ТекстовыйДокумент;
|
||
ТекстДляПроверки.Прочитать(ФайлМодуляФормы.ПолноеИмя);
|
||
ТекстОбразец = Новый ТекстовыйДокумент;
|
||
ТекстОбразец.УстановитьТекст(НовыйТекстМодуля);
|
||
СтарыйТекстМодуля = ТекстДляПроверки.ПолучитьТекст();
|
||
Если ТекстОбразец.ПолучитьТекст() <> СтарыйТекстМодуля Тогда
|
||
ТекстОбразец.Записать(ФайлМодуляФормы.ПолноеИмя);
|
||
Результат = Истина;
|
||
КонецЕсли;
|
||
|
||
Если Истина
|
||
И МассивДобавляемыхРеквизитов <> Неопределено
|
||
И МассивДобавляемыхРеквизитов.Количество() > 0
|
||
Тогда
|
||
ФайлДиалогаФормы = Новый Файл(ФайлМодуляФормы.Путь + "form.data");
|
||
ТекстДиалога = Новый ТекстовыйДокумент;
|
||
ТекстДиалога.Прочитать(ФайлДиалогаФормы.ПолноеИмя);
|
||
КоличествоНовыхРеквизитов = МассивДобавляемыхРеквизитов.Количество();
|
||
ОстатокТекста0 = ТекстДиалога.ПолучитьТекст();
|
||
|
||
RegExp.Global = Ложь;
|
||
RegExp.Pattern = "},\d+,\d+,\d+,0,\d+,4,4,\d+},";
|
||
Вхождения = RegExp.Execute(ОстатокТекста0);
|
||
Если Вхождения.Count = 0 Тогда
|
||
Сообщить("При анализе диалога не найден маркер1");
|
||
Возврат Неопределено;
|
||
ИначеЕсли Вхождения.Count > 1 Тогда
|
||
Сообщить("При анализе диалога найдено более одного маркера1");
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Позиция = Вхождения.Item(0).FirstIndex;
|
||
Позиция = Позиция + СтрДлина(Вхождения.Item(0).Value);
|
||
Фрагмент1 = Лев(ОстатокТекста0, Позиция);
|
||
ОстатокТекста1 = Сред(ОстатокТекста0, Позиция + 1);
|
||
|
||
//Маркер = "},";
|
||
//Позиция = Найти(ОстатокТекста1, Маркер);
|
||
//Фрагмент2 = Лев(ОстатокТекста1, Позиция + СтрДлина(Маркер));
|
||
Фрагмент2 = "";
|
||
ОстатокТекста2 = Сред(ОстатокТекста1, СтрДлина(Фрагмент2) + 1);
|
||
|
||
Маркер = ",
|
||
|{";
|
||
Позиция = Найти(ОстатокТекста2, Маркер);
|
||
Если Позиция = 0 Тогда
|
||
Сообщить("Не найден маркер2");
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Позиция = Позиция + СтрДлина(Маркер) - 1;
|
||
Фрагмент3 = Лев(ОстатокТекста2, Позиция);
|
||
ОстатокТекста3 = Сред(ОстатокТекста2, СтрДлина(Фрагмент3) + 1);
|
||
|
||
Позиция = Найти(ОстатокТекста3, "}");
|
||
Позиция2 = Найти(ОстатокТекста3, ",");
|
||
Если Позиция2 > 0 Тогда
|
||
Позиция = Мин(Позиция, Позиция2);
|
||
КонецЕсли;
|
||
Фрагмент4 = Лев(ОстатокТекста3, Позиция - 1);
|
||
ОстатокТекста4 = Сред(ОстатокТекста3, СтрДлина(Фрагмент4) + 1);
|
||
Число = Число(Фрагмент4);
|
||
Число = Число + КоличествоНовыхРеквизитов;
|
||
Фрагмент4 = Формат(Число, "ЧГ=");
|
||
|
||
Разделитель = ",";
|
||
СтрокаРеквизитов = "";
|
||
Счетчик = 1;
|
||
|
||
// Если у формы нет ни одного реквизита, то может получиться ошибка формата потока
|
||
Строка1 = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ОстатокТекста4, "},", ",""");
|
||
Если Ложь
|
||
Или Не ЗначениеЗаполнено(Строка1)
|
||
Или СтрДлина(Строка1) > 5
|
||
Тогда
|
||
// у формы нет ни одного реквизита
|
||
Если ирПлатформа.ИДВерсииПлатформы = "81" Тогда
|
||
Строка1 = "0,1";
|
||
ИначеЕсли ирПлатформа.ИДВерсииПлатформы >= "82" Тогда
|
||
// Здесь может быть нужно и "0,1" использовать, если в конфигураторе форму ни разу не сохраняли еще, а только конвертировали через ConvertFiles
|
||
// Если такое случается, то при попытке открыть такую внешнюю обработку платформа будет падать
|
||
Строка1 = "1,0,1";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Для Каждого ИмяРеквизита Из МассивДобавляемыхРеквизитов Цикл
|
||
СтрокаРеквизитов = СтрокаРеквизитов + Разделитель + "
|
||
|{
|
||
|{" + Формат(1000 + Счетчик, "ЧГ=") + "}," + Строка1 + ",""" + ИмяРеквизита + """,
|
||
|{""Pattern""}
|
||
|}";
|
||
Счетчик = Счетчик + 1;
|
||
КонецЦикла;
|
||
НовыйТекст = Фрагмент1 + Фрагмент2 + Фрагмент3 + Фрагмент4 + СтрокаРеквизитов + ОстатокТекста4;
|
||
ТекстДиалога.УстановитьТекст(НовыйТекст);
|
||
ТекстДиалога.Записать(ФайлДиалогаФормы.ПолноеИмя);
|
||
Результат = Истина;
|
||
КонецЕсли;
|
||
|
||
Если Результат Тогда
|
||
// Здесь часто возникает ошибка
|
||
//{Обработка.ирПлатформа.МодульОбъекта(5 163)}:
|
||
//Ошибка при вызове метода контекста (Записать)
|
||
// ПолучитьМакет("v8unpack").Записать(Каталог + "\" + ИмяФайлаПакера);
|
||
//Ошибка совместного доступа к файлу 'D:\Users\Сергей\AppData\Local\1C\1Cv82\File__D__1C_v82_DB_2iSРазработка__\b\Rebuild\v8unpack.exe'
|
||
// ВызватьИсключение Ошибка;//#Служебное
|
||
ирПлатформа.УпаковатьФайлВнешнейОбработки(КаталогРаспаковки, ФайлВнешнейОбработки.ПолноеИмя);
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
Функция ТабличныйДокументИзОбщихКартинокПодсистемы() Экспорт
|
||
|
||
ТабличныйДокумент = Новый ТабличныйДокумент;
|
||
ШрифтЖирный = Новый Шрифт(,,Истина);
|
||
ТабличныйДокумент.Область("R1C1:R1C1").Текст = "Имя";
|
||
ТабличныйДокумент.Область("R1C2:R1C2").Текст = "Картинка";
|
||
ТабличныйДокумент.Область("R1C1:R1C2").Шрифт = ШрифтЖирный;
|
||
Для Каждого ОбщаяКартинка Из Метаданные.ОбщиеКартинки Цикл
|
||
Если Не Метаданные.Подсистемы.ИнструментыРазработчикаTormozit.Состав.Содержит(ОбщаяКартинка) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
|
||
Рисунок.Картинка = БиблиотекаКартинок[ОбщаяКартинка.Имя];
|
||
Рисунок.Имя = ОбщаяКартинка.Имя;
|
||
Рисунок.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
|
||
ВысотаТаблицы = ТабличныйДокумент.ВысотаТаблицы + 1;
|
||
ТабличныйДокумент.Область("R" + XMLСтрока(ВысотаТаблицы) + "C1:R" + XMLСтрока(ВысотаТаблицы) + "C1").Текст = ОбщаяКартинка.Имя;
|
||
Рисунок.Расположить(ТабличныйДокумент.Область("R" + XMLСтрока(ВысотаТаблицы) + "C2:R" + XMLСтрока(ВысотаТаблицы) + "C2"));
|
||
КонецЦикла;
|
||
Возврат ТабличныйДокумент;
|
||
|
||
КонецФункции
|
||
|
||
Функция СгенерироватьМодульИнициализацииФормПодсистемыДляПортативногоРежима() Экспорт
|
||
|
||
ТекстМодуля = Новый ЗаписьXML;
|
||
ТекстМодуля.УстановитьСтроку("");
|
||
//ТекстМодуля.ЗаписатьБезОбработки("
|
||
//|Перем ирОбщий Экспорт;
|
||
//|Перем ирСервер Экспорт;
|
||
//|Перем ирКэш Экспорт;
|
||
//|Перем ирПривилегированный Экспорт;
|
||
//|Перем ирПортативный Экспорт;
|
||
//|
|
||
//|Перем ирПлатформа Экспорт;
|
||
//|");
|
||
ТипыМетаданных = ирПлатформа.ПолучитьТаблицуТиповМетаОбъектов(Истина, Ложь, Ложь);
|
||
ИндикаторТиповМетаданных = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТипыМетаданных.Количество(), "Типы метаданных");
|
||
Для Каждого СтрокаТипаМетаданных Из ТипыМетаданных Цикл
|
||
ирОбщий.ОбработатьИндикаторЛкс(ИндикаторТиповМетаданных);
|
||
Если СтрокаТипаМетаданных.Единственное = "Перерасчет" Тогда
|
||
КоллекцияМетаОбъектов = Новый Массив;
|
||
Для Каждого МетаРегистрРасчета Из Метаданные.РегистрыРасчета Цикл
|
||
Для Каждого Перерасчет Из МетаРегистрРасчета.Перерасчеты Цикл
|
||
КоллекцияМетаОбъектов.Добавить(Перерасчет);
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
Иначе
|
||
КоллекцияМетаОбъектов = Метаданные[СтрокаТипаМетаданных.Множественное];
|
||
КонецЕсли;
|
||
Индикатор2 = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоллекцияМетаОбъектов.Количество(), СтрокаТипаМетаданных.Множественное);
|
||
Для Каждого МетаОбъект Из КоллекцияМетаОбъектов Цикл
|
||
Если Не Метаданные.Подсистемы.ИнструментыРазработчикаTormozit.Состав.Содержит(МетаОбъект) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ирОбщий.ОбработатьИндикаторЛкс(Индикатор2);
|
||
Попытка
|
||
МетаФормы = МетаОбъект.Формы;
|
||
Исключение
|
||
Продолжить;
|
||
КонецПопытки;
|
||
МенеджерОбъектаМетаданных = ирОбщий.ПолучитьМенеджерЛкс(МетаОбъект);
|
||
Индикатор3 = ирОбщий.ПолучитьИндикаторПроцессаЛкс(МетаФормы.Количество(), "Формы");
|
||
Для Каждого МетаФорма Из МетаФормы Цикл
|
||
ирОбщий.ОбработатьИндикаторЛкс(Индикатор3);
|
||
ПолноеИмяФормы = МетаФорма.ПолноеИмя();
|
||
//Сообщить(ПолноеИмяФормы);
|
||
//ПолноеИмяФормы = МетаОбъект.ПолноеИмя() + ".Форма." + МетаФорма.Имя;
|
||
Попытка
|
||
//Форма = ПолучитьФорму(ПолноеИмяФормы); // Так исключение не сработает и будет отображен диалог об ошибке. Особенность платформы
|
||
Форма = МенеджерОбъектаМетаданных.ПолучитьФорму(МетаФорма.Имя,,Новый УникальныйИдентификатор());
|
||
Исключение
|
||
Сообщить("Ошибка при получении формы " + ПолноеИмяФормы + ": " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
|
||
Продолжить;
|
||
КонецПопытки;
|
||
ТелоМетода = Новый ЗаписьXML;
|
||
ТелоМетода.УстановитьСтроку("");
|
||
ПроверитьСвойстваОбъектаДляПортативногоРежимаЛкс("ЭтаФорма", Форма, ТелоМетода);
|
||
ТелоМетода = ТелоМетода.Закрыть();
|
||
ТекстМодуля.ЗаписатьБезОбработки("
|
||
|Процедура ИнициализироватьФорму_" + ирПлатформа.ПолучитьИдентификаторИзПредставления(ПолноеИмяФормы) + "(ЭтаФорма) Экспорт
|
||
|
|
||
|" + ТелоМетода + "
|
||
|КонецПроцедуры
|
||
|");
|
||
КонецЦикла;
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
КонецЦикла;
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
КонецЦикла;
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
Результат =
|
||
"//#Область ОбработчикиИнициализацииФорм
|
||
|" + ТекстМодуля.Закрыть() + "
|
||
|//#КонецОбласти";
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ПроверитьСвойстваОбъектаДляПортативногоРежимаЛкс(ПутьКОбъекту, Объект, ТелоМетода)
|
||
|
||
СтруктураТипа = ирПлатформа.ПолучитьСтруктуруТипаИзЗначения(Объект);
|
||
ВнутренняяТаблицаСлов = ирПлатформа.ПолучитьТаблицуСловСтруктурыТипа(СтруктураТипа);
|
||
Для Каждого ВнутренняяСтрокаСлова Из ВнутренняяТаблицаСлов Цикл
|
||
Если ВнутренняяСтрокаСлова.ТипСлова = "Свойство" Тогда
|
||
ИмяСвойства = ВнутренняяСтрокаСлова.Слово;
|
||
Если Ложь
|
||
Или ИмяСвойства = "ИсточникДействий"
|
||
Или ИмяСвойства = "КонтекстноеМеню"
|
||
Тогда
|
||
// Защита от длинных путей и зацикливания
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Попытка
|
||
Структура = Новый Структура(ИмяСвойства);
|
||
Исключение
|
||
// "КартинкаКнопкиВыбора#&^@^%&*^#1"
|
||
Продолжить;
|
||
КонецПопытки;
|
||
Попытка
|
||
ЗаполнитьЗначенияСвойств(Структура, Объект);
|
||
Исключение
|
||
// Не всегда доступное свойство
|
||
Продолжить;
|
||
КонецПопытки;
|
||
ЗначениеСвойства = Структура[ИмяСвойства];
|
||
Если ТипЗнч(ЗначениеСвойства) = Тип("Картинка") Тогда
|
||
Если ЗначениеСвойства.Вид = ВидКартинки.ИзБиблиотеки Тогда
|
||
ИмяОбщейКартинки = СериализаторXDTO.записатьXDTO(ЗначениеСвойства).ref.ЛокальноеИмя;
|
||
Если Метаданные.ОбщиеКартинки.Найти(ИмяОбщейКартинки) <> Неопределено Тогда
|
||
ТелоМетода.ЗаписатьБезОбработки(Символы.Таб + ПутьКОбъекту + "." + ИмяСвойства + " = ирОбщий.ПолучитьОбщуюКартинкуЛкс("""
|
||
+ ИмяОбщейКартинки + """);" + Символы.ПС);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("Цвет") Тогда
|
||
ИмяЦветаСтиля = СериализаторXDTO.записатьXDTO(ЗначениеСвойства).ЛексическоеЗначение;
|
||
ПозицияСкобки = Найти(ИмяЦветаСтиля, "}");
|
||
Если ПозицияСкобки > 0 Тогда
|
||
ИмяЦветаСтиля = Сред(ИмяЦветаСтиля, ПозицияСкобки + 1);
|
||
Если Метаданные.ЭлементыСтиля.Найти(ИмяЦветаСтиля) <> Неопределено Тогда
|
||
ТелоМетода.ЗаписатьБезОбработки(Символы.Таб + ПутьКОбъекту + "." + ИмяСвойства + " = ирОбщий.ПолучитьЦветСтиляЛкс("""
|
||
+ ИмяЦветаСтиля + """);" + Символы.ПС);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если ирПлатформа.мМассивТиповЭлементовУправления.Найти(ТипЗнч(ЗначениеСвойства)) <> Неопределено Тогда
|
||
ПроверитьСвойстваОбъектаДляПортативногоРежимаЛкс(ПутьКОбъекту + "." + ИмяСвойства, ЗначениеСвойства, ТелоМетода);
|
||
КонецЕсли;
|
||
Если ирОбщий.ЭтоКоллекцияЛкс(ЗначениеСвойства) Тогда
|
||
ЕстьИндексПоИмени = Ложь;
|
||
Для Каждого ЭлементКоллекции Из ЗначениеСвойства Цикл
|
||
Если Не ЕстьИндексПоИмени Тогда
|
||
Попытка
|
||
Пустышка = Вычислить("ЗначениеСвойства." + ЭлементКоллекции.Имя);
|
||
Исключение
|
||
// Если к элементу по имени нельзя обратиться, то он нас не интересует.
|
||
Прервать;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
ЕстьИндексПоИмени = Истина;
|
||
Если Ложь
|
||
Или ирПлатформа.мМассивТиповЭлементовУправления.Найти(ТипЗнч(ЭлементКоллекции)) <> Неопределено
|
||
Или ТипЗнч(ЭлементКоллекции) = Тип("КнопкаКоманднойПанели")
|
||
Тогда
|
||
ПроверитьСвойстваОбъектаДляПортативногоРежимаЛкс(ПутьКОбъекту + "." + ИмяСвойства + "." + ЭлементКоллекции.Имя, ЭлементКоллекции, ТелоМетода);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ОсновныеДействияФормыВыполнить(Кнопка)
|
||
|
||
ИмяРасширения = "Расширение1";
|
||
ТекстЛога = "";
|
||
ВерсияРасширения = Метаданные.Версия + "e";
|
||
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("cfe");
|
||
ПолучитьОбщийМакет("ирШаблонРасширения").Записать(ИмяВременногоФайла);
|
||
Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/LoadCfg """ + ИмяВременногоФайла + """ -Extension """ + ИмяРасширения + """", , ТекстЛога);
|
||
Если Не Успех Тогда
|
||
УдалитьФайлы(ИмяВременногоФайла);
|
||
Сообщить(ТекстЛога);
|
||
Возврат;
|
||
КонецЕсли;
|
||
УдалитьФайлы(ИмяВременногоФайла);
|
||
КаталогВыгрузкиРасширения = ПолучитьИмяВременногоФайла();
|
||
СоздатьКаталог(КаталогВыгрузкиРасширения);
|
||
// Выгружаем расширение в файлы
|
||
Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpConfigToFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога);
|
||
Если Не Успех Тогда
|
||
УдалитьФайлы(КаталогВыгрузкиРасширения);
|
||
Сообщить(ТекстЛога);
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
КаталогВыгрузкиКонфигурации = ПолучитьИмяВременногоФайла();
|
||
СоздатьКаталог(КаталогВыгрузкиКонфигурации);
|
||
ТекстЛога = "";
|
||
// Выгружаем конфигурацию в файлы
|
||
Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpConfigToFiles """ + КаталогВыгрузкиКонфигурации + """ -Format Hierarchical", СтрокаСоединенияИнформационнойБазы(), ТекстЛога);
|
||
Если Не Успех Тогда
|
||
УдалитьФайлы(КаталогВыгрузкиКонфигурации);
|
||
Сообщить(ТекстЛога);
|
||
Возврат;
|
||
КонецЕсли;
|
||
//КаталогВыгрузкиКонфигурации = "Z:\Ир"; // Для отладки
|
||
|
||
// Скопируем все папки кроме Catalogs и Ext и файла ConfigDumpInfo.xml
|
||
Файлы = НайтиФайлы(КаталогВыгрузкиКонфигурации, "*");
|
||
Для Каждого Файл Из Файлы Цикл
|
||
Если Ложь
|
||
Или Файл.Имя = "Catalogs"
|
||
Или Файл.Имя = "Ext"
|
||
Или Не Файл.ЭтоКаталог()
|
||
Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ФайлПриемник = Новый Файл(КаталогВыгрузкиРасширения + "\" + Файл.Имя);
|
||
Если Не ФайлПриемник.Существует() Тогда
|
||
СоздатьКаталог(ФайлПриемник.ПолноеИмя);
|
||
КонецЕсли;
|
||
ирОбщий.СкопироватьФайлыЛкс(КаталогВыгрузкиКонфигурации + "\" + Файл.Имя, КаталогВыгрузкиРасширения + "\" + Файл.Имя);
|
||
КонецЦикла;
|
||
|
||
// Переименуем язык Русский->ирРусский
|
||
ИмяФайла = КаталогВыгрузкиРасширения + "\Languages\Русский.xml";
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Прочитать(ИмяФайла);
|
||
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||
ТекстФайла = СтрЗаменить(ТекстФайла, "<Name>Русский</Name>", "<Name>ирРусский</Name>");
|
||
ТекстовыйДокумент.УстановитьТекст(ТекстФайла);
|
||
ТекстовыйДокумент.Записать(ИмяФайла);
|
||
|
||
// Во всех CommonCommands удалить <CommandParameterType>...</CommandParameterType>
|
||
Файлы = НайтиФайлы(КаталогВыгрузкиРасширения + "\CommonCommands", "*.xml");
|
||
Для Каждого Файл Из Файлы Цикл
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Прочитать(Файл.ПолноеИмя);
|
||
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||
ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "<CommandParameterType>", "</CommandParameterType>", Ложь, Истина);
|
||
ТекстФайла = СтрЗаменить(ТекстФайла, ЧтоЗаменить, "");
|
||
ТекстовыйДокумент.УстановитьТекст(ТекстФайла);
|
||
ТекстовыйДокумент.Записать(Файл.ПолноеИмя);
|
||
КонецЦикла;
|
||
|
||
// Из SubSystems вырезаем фрагменты <xr:Item xsi:type="xr:MDObjectRef">Catalog.ирОбъектыДляОтладки</xr:Item>
|
||
Файлы = НайтиФайлы(КаталогВыгрузкиРасширения + "\SubSystems", "*.xml");
|
||
Для Каждого Файл Из Файлы Цикл
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Прочитать(Файл.ПолноеИмя);
|
||
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||
ТекстФайла = СтрЗаменить(ТекстФайла, "<xr:Item xsi:type=""xr:MDObjectRef"">Catalog.ирАлгоритмы</xr:Item>", "");
|
||
ТекстФайла = СтрЗаменить(ТекстФайла, "<xr:Item xsi:type=""xr:MDObjectRef"">Catalog.ирКомандаРедактироватьОбъект</xr:Item>", "");
|
||
ТекстФайла = СтрЗаменить(ТекстФайла, "<xr:Item xsi:type=""xr:MDObjectRef"">Catalog.ирОбъектыДляОтладки</xr:Item>", "");
|
||
ТекстовыйДокумент.УстановитьТекст(ТекстФайла);
|
||
ТекстовыйДокумент.Записать(Файл.ПолноеИмя);
|
||
КонецЦикла;
|
||
|
||
// У общего модуля ирГлобальный убираем флажок Сервер
|
||
ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирГлобальный.xml";
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Прочитать(ИмяФайла);
|
||
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||
ТекстФайла = СтрЗаменить(ТекстФайла, "<Server>true</Server>", "<Server>false</Server>");
|
||
ТекстовыйДокумент.УстановитьТекст(ТекстФайла);
|
||
ТекстовыйДокумент.Записать(ИмяФайла);
|
||
|
||
//// Скопируем глобальные методы в общий модуль ирОтладка
|
||
//ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирГлобальный\Ext\Module.bsl";
|
||
//ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
//ТекстовыйДокумент.Прочитать(ИмяФайла);
|
||
//ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||
//ТекстМетодов = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "#Область ГлобальныеПортативныеМетоды", "#КонецОбласти", Ложь, Истина);
|
||
//ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирОтладка\Ext\Module.bsl";
|
||
//ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
//ТекстовыйДокумент.Прочитать(ИмяФайла);
|
||
//ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||
//ТекстФайла = ТекстФайла + ТекстМетодов;
|
||
//ТекстовыйДокумент.УстановитьТекст(ТекстФайла);
|
||
//ТекстовыйДокумент.Записать(ИмяФайла);
|
||
|
||
// У общего модуля ирПривилегированный убираем флажок Привилегированный
|
||
ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирПривилегированный.xml";
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Прочитать(ИмяФайла);
|
||
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||
ТекстФайла = СтрЗаменить(ТекстФайла, "<Privileged>true</Privileged>", "<Privileged>false</Privileged>");
|
||
ТекстовыйДокумент.УстановитьТекст(ТекстФайла);
|
||
ТекстовыйДокумент.Записать(ИмяФайла);
|
||
|
||
// У подсистемы ИнструментыРазработчикаTormozit обновим версию
|
||
ИмяФайла = КаталогВыгрузкиРасширения + "\SubSystems\ИнструментыРазработчикаTormozit.xml";
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Прочитать(ИмяФайла);
|
||
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||
ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "<Comment>", "</Comment>", Ложь, Истина);
|
||
ТекстФайла = СтрЗаменить(ТекстФайла, ЧтоЗаменить, "<Comment>" + ВерсияРасширения + "</Comment>");
|
||
ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "<v8:content>Инструменты разработчика ", "</v8:content>", Ложь, Истина);
|
||
ТекстФайла = СтрЗаменить(ТекстФайла, ЧтоЗаменить, "<v8:content>Инструменты разработчика " + ВерсияРасширения + "</v8:content>");
|
||
ТекстовыйДокумент.УстановитьТекст(ТекстФайла);
|
||
ТекстовыйДокумент.Записать(ИмяФайла);
|
||
|
||
// Заменим элемент <ChildObjects> в файле Configuration.xml
|
||
ФайлКонфигурацииИсточника = КаталогВыгрузкиКонфигурации + "\Configuration.xml";
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Прочитать(ФайлКонфигурацииИсточника);
|
||
ТекстФайлаИсточника = ТекстовыйДокумент.ПолучитьТекст();
|
||
ФайлКонфигурацииПриемника = КаталогВыгрузкиРасширения + "\Configuration.xml";
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Прочитать(ФайлКонфигурацииПриемника);
|
||
ТекстФайлаПриемника = ТекстовыйДокумент.ПолучитьТекст();
|
||
ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайлаПриемника, "<ChildObjects>", "</ChildObjects>", Ложь, Истина);
|
||
НаЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайлаИсточника, "<ChildObjects>", "</ChildObjects>", Ложь, Истина);
|
||
ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, ЧтоЗаменить, НаЧтоЗаменить);
|
||
ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, "<Version>4.00</Version>", "<Version>" + ВерсияРасширения + "</Version>");
|
||
ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, "<ScriptVariant>Russian</ScriptVariant>", "<ScriptVariant>Russian</ScriptVariant><DefaultLanguage>Language.Русский</DefaultLanguage>"); // Без этого многоязычные строки все будут пустыми
|
||
ТекстовыйДокумент.УстановитьТекст(ТекстФайлаПриемника);
|
||
ТекстовыйДокумент.Записать(ФайлКонфигурацииПриемника);
|
||
|
||
// Загружаем расширение из файлов
|
||
Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/LoadConfigFromFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога);
|
||
Если Не Успех Тогда
|
||
УдалитьФайлы(КаталогВыгрузкиРасширения);
|
||
Сообщить(ТекстЛога);
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
// Выгружаем расширение
|
||
КонечныйФайл = Каталог + "\ИР " + Метаданные.Версия + ".cfe";
|
||
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("cfe");
|
||
ПолучитьОбщийМакет("ирШаблонРасширения").Записать(ИмяВременногоФайла);
|
||
Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpCfg """ + КонечныйФайл + """ -Extension """ + ИмяРасширения + """", , ТекстЛога);
|
||
Если Не Успех Тогда
|
||
УдалитьФайлы(ИмяВременногоФайла);
|
||
Сообщить(ТекстЛога);
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
УдалитьФайлы(КаталогВыгрузкиКонфигурации);
|
||
УдалитьФайлы(КаталогВыгрузкиРасширения);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура КаталогНачалоВыбора(Элемент, СтандартнаяОбработка)
|
||
|
||
ирОбщий.ВыбратьКаталогВФормеЛкс(Каталог);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПриЗакрытии()
|
||
|
||
СохранитьЗначение("ирВыпускРасширение.Каталог", Каталог);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПриОткрытии()
|
||
|
||
Подверсия = "1";
|
||
Каталог = ВосстановитьЗначение("ирВыпускРасширение.Каталог");
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
|
||
|
||
ВерсияПлатформы = ирПлатформа.ВерсияПлатформы;
|
||
Если ВерсияПлатформы < 803010 Тогда
|
||
Сообщить("Поддерживается только платформа 8.3.10 и выше");
|
||
Отказ = Истина;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
ирПлатформа = ирКэш.Получить(); |