mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-16 20:54:11 +00:00
1472 lines
106 KiB
Plaintext
1472 lines
106 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
// Поместить строку соединения во временное хранилище
|
||
Функция ПоместитьСтрокуСоединенияВХранилищеЛкс(Адрес) Экспорт
|
||
|
||
ПоместитьВоВременноеХранилище(СтрокаСоединенияИнформационнойБазы(), Адрес);
|
||
|
||
КонецФункции
|
||
|
||
// Получить строку соединения сервера
|
||
Функция СтрокаСоединенияСервераЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиФайловаяБазаЛкс() Тогда
|
||
Результат = СтрокаСоединенияИнформационнойБазы();
|
||
Иначе
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
Результат = СтрокаСоединенияИнформационнойБазы();
|
||
Иначе
|
||
// Антибаг https://partners.v8.1c.ru/forum/t/1361906/m/1361906
|
||
//Если МонопольныйРежим() Тогда
|
||
// ВызватьИсключение "Невозможно определить строку соединения сервера в монопольном режиме";
|
||
//КонецЕсли;
|
||
АдресХранилища = ПоместитьВоВременноеХранилище("");
|
||
Параметры = Новый Массив();
|
||
Параметры.Добавить(АдресХранилища);
|
||
ФоновоеЗадание = ФоновыеЗадания.Выполнить("ирСервер.ПоместитьСтрокуСоединенияВХранилищеЛкс", Параметры,, "Получение строки соединения сервера (ИР)");
|
||
Попытка
|
||
ФоновоеЗадание.ОжидатьЗавершения(3);
|
||
Исключение
|
||
// http://www.hostedredmine.com/issues/851201
|
||
ВызватьИсключение "Превышено время ожидания служебного фонового задания ИР. Выключите автоподключение фоновых заданий в отладчике и повторите попытку.";
|
||
КонецПопытки;
|
||
Результат = ПолучитьИзВременногоХранилища(АдресХранилища);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
/////////////////////////////////////////////
|
||
// БСП. Отладка внешних обработок
|
||
|
||
Процедура ПриПодключенииВнешнейОбработки(Ссылка, СтандартнаяОбработка, Результат) Экспорт
|
||
|
||
#Если Сервер И Не Сервер Тогда
|
||
Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка();
|
||
#КонецЕсли
|
||
СтандартнаяОбработка = Истина;
|
||
ОтладкаВключена = ХранилищеСистемныхНастроек.Загрузить("ирОтладкаВнешнихОбработок", "СозданиеВнешнихОбработокЧерезФайл");
|
||
Если ОтладкаВключена = Истина Тогда
|
||
ПутьКФайлу = ПолноеИмяФайлаВнешнейОбработкиВФайловомКэшеЛкс(Ссылка);
|
||
Иначе
|
||
Результат = "";
|
||
Возврат;
|
||
КонецЕсли;
|
||
Если Ложь
|
||
Или Ссылка = Вычислить("Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка()")
|
||
Или ТипЗнч(Ссылка) <> Вычислить("Тип(""СправочникСсылка.ДополнительныеОтчетыИОбработки"")")
|
||
Тогда
|
||
Результат = Неопределено;
|
||
Возврат;
|
||
КонецЕсли;
|
||
Если Ложь
|
||
Или Ссылка.Вид = Вычислить("Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет")
|
||
Или Ссылка.Вид = Вычислить("Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет")
|
||
Тогда
|
||
Менеджер = ВнешниеОтчеты;
|
||
Иначе
|
||
Менеджер = ВнешниеОбработки;
|
||
КонецЕсли;
|
||
ФайлВнешнейОбработки = Новый Файл(ПутьКФайлу);
|
||
Если Не ФайлВнешнейОбработки.Существует() Тогда
|
||
Ссылка.ХранилищеОбработки.Получить().Записать(ФайлВнешнейОбработки.ПолноеИмя);
|
||
КонецЕсли;
|
||
ВнешнийОбъект = Менеджер.Создать(ПутьКФайлу, Ложь);
|
||
ИмяОбработки = ВнешнийОбъект.Метаданные().Имя;
|
||
Результат = ИмяОбработки;
|
||
СтандартнаяОбработка = Ложь;
|
||
Возврат;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ПолноеИмяФайлаВнешнейОбработкиВФайловомКэшеЛкс(Ссылка, КаталогФайловогоКэша = "") Экспорт
|
||
|
||
#Если Сервер И Не Сервер Тогда
|
||
Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка();
|
||
#КонецЕсли
|
||
Если Не ЗначениеЗаполнено(КаталогФайловогоКэша) Тогда
|
||
Обработчик = НайтиПерехватВнешнихОбработокБСПЛкс();
|
||
Если Обработчик = Неопределено Тогда
|
||
ВызватьИсключение "Перехват внеших обработок не включен";
|
||
КонецЕсли;
|
||
КаталогФайловогоКэша = Обработчик.КаталогФайловогоКэша;
|
||
КонецЕсли;
|
||
ИмяФайла = Ссылка.ИмяФайла;
|
||
Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
|
||
ИмяФайла = "" + Ссылка.УникальныйИдентификатор() + ".epf";
|
||
КонецЕсли;
|
||
ПутьКФайлу = КаталогФайловогоКэша + "\" + ИмяФайла;
|
||
Возврат ПутьКФайлу;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ВключитьПерехватВнешнихОбработокБСПЛкс(Знач КаталогФайловогоКэша) Экспорт
|
||
|
||
Если ирКэш.НомерВерсииБСПЛкс() < 204 Тогда
|
||
Обработчики = ПолучитьОбработчикиПриПодключенииВнешнейОбработки();
|
||
СтруктураОбработчика = Новый Структура("Модуль, Версия, Подсистема, КаталогФайловогоКэша", "ирСервер", "", "tormozit", КаталогФайловогоКэша);
|
||
Обработчики.Добавить(СтруктураОбработчика);
|
||
УстановитьОбработчикиПриПодключенииВнешнейОбработки(Обработчики);
|
||
Иначе
|
||
ХранилищеСистемныхНастроек.Сохранить("ирОтладкаВнешнихОбработок", "КаталогФайловогоКэша", КаталогФайловогоКэша);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ПолучитьОбработчикиПриПодключенииВнешнейОбработки()
|
||
|
||
КонстантаПараметрыСлужебныхСобытий = Вычислить("Константы.ПараметрыСлужебныхСобытий");
|
||
ИмяОбработчика = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПодключенииВнешнейОбработки";
|
||
СтруктруаПараметрыСлужебныхСобытий = КонстантаПараметрыСлужебныхСобытий.Получить().Получить();
|
||
ОбработчикиНаСервере = СтруктруаПараметрыСлужебныхСобытий.ОбработчикиСобытий.НаСервере;
|
||
ОбработчикиСлужебныхСобытий = ОбработчикиНаСервере.ОбработчикиСлужебныхСобытий;
|
||
Обработчики = ОбработчикиСлужебныхСобытий[ИмяОбработчика];
|
||
Обработчики = Новый Массив(Обработчики);
|
||
Возврат Обработчики;
|
||
|
||
КонецФункции
|
||
|
||
Процедура УстановитьОбработчикиПриПодключенииВнешнейОбработки(Обработчики)
|
||
|
||
ИмяОбработчика = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки\ПриПодключенииВнешнейОбработки";
|
||
КонстантаПараметрыСлужебныхСобытий = Вычислить("Константы.ПараметрыСлужебныхСобытий");
|
||
СтруктураПараметрыСлужебныхСобытий = КонстантаПараметрыСлужебныхСобытий.Получить().Получить();
|
||
ОбработчикиНаСервере = СтруктураПараметрыСлужебныхСобытий.ОбработчикиСобытий.НаСервере;
|
||
ОбработчикиСлужебныхСобытий = Вычислить("Новый Соответствие(ОбработчикиНаСервере.ОбработчикиСлужебныхСобытий)");
|
||
ОбработчикиСлужебныхСобытий[ИмяОбработчика] = Новый ФиксированныйМассив(Обработчики);
|
||
ОбработчикиНаСервере.ОбработчикиСлужебныхСобытий = Новый ФиксированноеСоответствие(ОбработчикиСлужебныхСобытий);
|
||
КонстантаПараметрыСлужебныхСобытий.Установить(Новый ХранилищеЗначения(СтруктураПараметрыСлужебныхСобытий));
|
||
ОбновитьПовторноИспользуемыеЗначения();
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция НайтиПерехватВнешнихОбработокБСПЛкс(Выключить = Ложь) Экспорт
|
||
|
||
Если ирКэш.НомерВерсииБСПЛкс() < 204 Тогда
|
||
Обработчики = ПолучитьОбработчикиПриПодключенииВнешнейОбработки();
|
||
ОбновитьЗначениеКонстанты = Ложь;
|
||
Для СчетчикОбработчики = - Обработчики.Количество() + 1 По 0 Цикл
|
||
Индекс = -СчетчикОбработчики;
|
||
Обработчик = Обработчики[Индекс];
|
||
Если Обработчик.Модуль = "ирСервер" Тогда
|
||
Если Не Выключить Тогда
|
||
Возврат Обработчик;
|
||
КонецЕсли;
|
||
Обработчики.Удалить(Индекс);
|
||
ОбновитьЗначениеКонстанты = Истина;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Если ОбновитьЗначениеКонстанты Тогда
|
||
УстановитьОбработчикиПриПодключенииВнешнейОбработки(Обработчики);
|
||
КонецЕсли;
|
||
Иначе
|
||
КаталогФайловогоКэша = ХранилищеСистемныхНастроек.Загрузить("ирОтладкаВнешнихОбработок", "КаталогФайловогоКэша");
|
||
Обработчик = Новый Структура("КаталогФайловогоКэша", КаталогФайловогоКэша);
|
||
Возврат Обработчик;
|
||
КонецЕсли;
|
||
Возврат Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
/////////////////////////////////////////////
|
||
// Перенаправление
|
||
|
||
Функция ПолучитьКаталогНастроекПриложения1СЛкс(ВариантРасположенияФайлаНастроек = Истина, СоздатьЕслиОтсутствует = Ложь) Экспорт
|
||
|
||
Результат = ирОбщий.КаталогНастроекПриложения1СЛкс(ВариантРасположенияФайлаНастроек, СоздатьЕслиОтсутствует);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьПолноеИмяФайлаНастройкиПриложения1СЛкс(КраткоеИмяФайла, НаСервере = Ложь, выхВариантРасположенияФайлаНастроек = Неопределено, выхДатаИзменения = Неопределено) Экспорт
|
||
|
||
Результат = ирОбщий.ПолноеИмяФайлаНастройкиПриложения1СЛкс(КраткоеИмяФайла, НаСервере, выхВариантРасположенияФайлаНастроек, выхДатаИзменения);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьИмяФайлаАктивнойНастройкиТехноЖурналаЛкс() Экспорт
|
||
|
||
Результат = ирОбщий.ИмяФайлаАктивнойНастройкиТехноЖурналаЛкс();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиКаталогТехножурналаНедоступенЛкс(КаталогЖурнала) Экспорт
|
||
|
||
Результат = ирОбщий.ЛиКаталогТехножурналаНедоступенЛкс(КаталогЖурнала);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЗаписатьТекстВФайлЛкс(ПолноеИмяФайла, Текст, Кодировка = Неопределено) Экспорт
|
||
|
||
Результат = ирОбщий.ЗаписатьТекстВФайлЛкс(ПолноеИмяФайла, Текст, Кодировка);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПрочитатьТекстИзФайлаЛкс(ПолноеИмяФайла, Кодировка = Неопределено) Экспорт
|
||
|
||
Результат = ирОбщий.ПрочитатьТекстИзФайлаЛкс(ПолноеИмяФайла, Кодировка);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция НайтиИменаФайловЛкс(Путь, Маска = Неопределено, ИскатьВПодкаталогах = Истина) Экспорт
|
||
|
||
Результат = ирОбщий.НайтиИменаФайловЛкс(Путь, Маска, ИскатьВПодкаталогах);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ВычислитьРазмерКаталогаЛкс(Каталог, ВключаяПодкаталоги = Истина) Экспорт
|
||
|
||
Результат = ирОбщий.ВычислитьРазмерКаталогаЛкс(Каталог, ВключаяПодкаталоги);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ТекущаяДатаЛкс() Экспорт
|
||
|
||
Результат = ТекущаяДата();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ОчиститьКаталогТехножурналаЛкс(КаталогЖурнала, ВыводитьПредупрежденияИСообщения = Истина) Экспорт
|
||
|
||
ирОбщий.ОчиститьКаталогТехножурналаЛкс(КаталогЖурнала, , ВыводитьПредупрежденияИСообщения);
|
||
|
||
КонецПроцедуры // ОчиститьКаталогТехножурналаЛкс()
|
||
|
||
Функция АдаптироватьРасширениеЛкс() Экспорт
|
||
|
||
Результат = ирОбщий.АдаптироватьРасширениеЛкс();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ВосстановитьЗначениеЛкс(Знач КлючНастроек) Экспорт
|
||
|
||
Возврат ирОбщий.ВосстановитьЗначениеЛкс(КлючНастроек);
|
||
|
||
КонецФункции
|
||
|
||
Функция СохранитьЗначениеЛкс(Знач КлючНастроек, Знач Значение) Экспорт
|
||
|
||
ирОбщий.СохранитьЗначениеЛкс(КлючНастроек, Значение);
|
||
|
||
КонецФункции
|
||
|
||
Функция УдалитьХранимуюНастройкуЛкс(Знач КлючНастроек) Экспорт
|
||
|
||
ирОбщий.УдалитьХранимуюНастройкуЛкс(КлючНастроек);
|
||
|
||
КонецФункции
|
||
|
||
Функция ПроверитьСоединениеADOЭтойБДЛкс(Знач ИмяСервера, Знач ИмяБД, Знач ИмяПользователя, Знач Пароль, Знач Асинхронно) Экспорт
|
||
|
||
Результат = ирОбщий.ПроверитьСоединениеADOЭтойБДЛкс(ИмяСервера, ИмяБД, ИмяПользователя, Пароль, Ложь, Ложь, Асинхронно);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ВыполнитьЗапросКЭтойБазеЧерезADOЛкс(Знач ТекстЗапроса, Знач СмещениеГода, Знач ИспользованиеGWF) Экспорт
|
||
|
||
Результат = ирОбщий.ВыполнитьЗапросКЭтойБазеЧерезADOЛкс(ТекстЗапроса,,, СмещениеГода, ИспользованиеGWF, Ложь);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция СкомпоноватьОтчетВКонсолиЛкс(Знач АдресКоллекцииВывода, Знач АдресМакетаКомпоновки, ВнешниеНаборыДанных, Автофиксация, МодальныйРежим, ЛиОтладка, АдресДанныхРасшифровки,
|
||
ВыполнятьПредварительныйЗапрос) Экспорт
|
||
|
||
КоллекцияВывода = ПолучитьИзВременногоХранилища(АдресКоллекцииВывода);
|
||
МакетКомпоновкиДанных = ПолучитьИзВременногоХранилища(АдресМакетаКомпоновки);
|
||
Результат = ирОбщий.СкомпоноватьОтчетВКонсолиЛкс(КоллекцияВывода, МакетКомпоновкиДанных, ВнешниеНаборыДанных, Автофиксация, МодальныйРежим, ЛиОтладка, АдресДанныхРасшифровки,
|
||
ВыполнятьПредварительныйЗапрос);
|
||
ПоместитьВоВременноеХранилище(КоллекцияВывода, АдресКоллекцииВывода);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОбработатьПорциюСтрокТаблицыЛкс(Знач АдресТаблицыЗначений, Знач НачальныйНомерСтроки, Знач РазмерПорции, Знач МодальныйРежим = Ложь, Знач ПропускатьОшибки = Ложь, Знач ТекстАлгоритма,
|
||
Знач ПараметраАлгоритмы = Неопределено) Экспорт
|
||
|
||
ирОбщий.ОбработатьПорциюСтрокТаблицыЛкс(АдресТаблицыЗначений, НачальныйНомерСтроки, РазмерПорции, МодальныйРежим, ПропускатьОшибки, ТекстАлгоритма, ПараметраАлгоритмы);
|
||
|
||
КонецФункции
|
||
|
||
Функция НеблокирующиеМетаданныеБСПЛкс() Экспорт
|
||
|
||
Результат = ирОбщий.НеблокирующиеМетаданныеБСПЛкс();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ВычислитьВыраженияПараметровЛкс(Знач ТаблицаВычисляемыхПараметров, СтруктураПараметровXML) Экспорт
|
||
|
||
СтруктураПараметров = ирОбщий.ОбъектИзСтрокиXMLЛкс(СтруктураПараметровXML);
|
||
ирОбщий.ВычислитьВыраженияПараметровЛкс(ТаблицаВычисляемыхПараметров, СтруктураПараметров);
|
||
СтруктураПараметровXML = ирОбщий.ОбъектВСтрокуXMLЛкс(СтруктураПараметров);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПроверитьСхемуКомпоновкиЛкс(Знач ПроверочнаяСхемаXML, Знач НастройкаКомпоновкиXML, Знач ПроверятьДоступностьПолей, Знач ВнешниеФункцииРазрешены) Экспорт
|
||
|
||
ирОбщий.ПроверитьСхемуКомпоновкиЛкс(ирОбщий.ОбъектИзСтрокиXMLЛкс(ПроверочнаяСхемаXML), ирОбщий.ОбъектИзСтрокиXMLЛкс(НастройкаКомпоновкиXML), ПроверятьДоступностьПолей,
|
||
ВнешниеФункцииРазрешены);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура УстановитьИспользованиеИсторииДанныхЛкс(Знач ИменаМД, Знач НовоеИспользование, Знач НовоеИспользованиеПолей) Экспорт
|
||
|
||
ирОбщий.УстановитьИспользованиеИсторииДанныхЛкс(ИменаМД, НовоеИспользование, НовоеИспользованиеПолей);
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ОбработатьСобытиеЛкс(ТаблицаСобытий, ИмяСобытия, выхОписаниеОшибки, П0 = null, П1 = null, П2 = null, П3 = null, П4 = null, П5 = null, П6 = null, П7 = null) Экспорт
|
||
Результат = ирОбщий.ОбработатьСобытиеЛкс(ТаблицаСобытий, ИмяСобытия, выхОписаниеОшибки,, П0, П1, П2, П3, П4, П5, П6, П7);
|
||
Возврат Результат
|
||
КонецФункции
|
||
|
||
Функция КонсольКомпоновки_ПередВыполнениемЛкс(Знач ТаблицаСобытий, ИмяСобытия, ОписаниеОшибки, ВременнаяСхемаКомпоновки, ВременныеНастройкиКомпоновки, СтруктураВнешниеНаборыДанных) Экспорт
|
||
Результат = ирОбщий.КонсольКомпоновки_ПередВыполнениемЛкс(ТаблицаСобытий, ИмяСобытия, ОписаниеОшибки,, ВременнаяСхемаКомпоновки, ВременныеНастройкиКомпоновки, СтруктураВнешниеНаборыДанных);
|
||
Возврат Результат
|
||
КонецФункции
|
||
|
||
////////
|
||
|
||
Процедура ПодключитьСистемнуюФормуЛкс(Знач ИмяВыбраннойФормы) Экспорт
|
||
|
||
ВнешниеОбработки.Подключить("v8res://mngbase/" + ИмяВыбраннойФормы + ".epf");
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПереместитьФайлЛкс(ИмяИсточника, ИмяПриемника) Экспорт
|
||
|
||
ПереместитьФайл(ИмяИсточника, ИмяПриемника);
|
||
|
||
КонецПроцедуры // ПереместитьФайл()
|
||
|
||
Функция ЛиФайлСуществуетЛкс(ПолноеИмяФайла, выхДатаИзменения = Неопределено) Экспорт
|
||
|
||
Файл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) Экспорт
|
||
|
||
Перем Результат;
|
||
Если Истина
|
||
И ирКэш.ЛиПортативныйРежимЛкс()
|
||
И ирПортативный.ЛиСерверныйМодульДоступенЛкс(Ложь)
|
||
Тогда
|
||
ПараметрыКоманды = Новый Структура("_ТекстДляВыполнения, _АлгоритмОбъект", _ТекстДляВыполнения, _АлгоритмОбъект);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Обработки.ирПортативныйСервер.Создать().ВыполнитьАлгоритм();
|
||
#КонецЕсли
|
||
ирПортативный.ВыполнитьСерверныйМетодЛкс("ВыполнитьАлгоритм", ПараметрыКоманды);
|
||
Иначе
|
||
Результат = ирОбщий.ВыполнитьАлгоритм(_ТекстДляВыполнения, _АлгоритмОбъект, _Режим, _П0, _П1, _П2, _П3, _П4, _П5, _П6, _П7, _П8, _П9);
|
||
КонецЕсли;
|
||
Результат = Неопределено; // Защита от возвращения на клиент мутабельного значения в консоли кода http://www.hostedredmine.com/issues/871627
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ВыполнитьАлгоритмБезРезультата(_ТекстДляВыполнения) Экспорт
|
||
|
||
Выполнить(_ТекстДляВыполнения);
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ВычислитьВыражение(Выражение, Параметры = Неопределено) Экспорт
|
||
|
||
Возврат Вычислить(Выражение);
|
||
|
||
КонецФункции
|
||
|
||
Функция ВыполнитьАлгоритмЧерезВнешнююОбработкуЛкс(ИмяФайлаВнешнейОбработки, СтруктураПараметров, выхВремяНачала = Неопределено, ВерсияАлгоритма = Неопределено) Экспорт
|
||
|
||
Перем Результат;
|
||
Если Истина
|
||
И ирКэш.ЛиПортативныйРежимЛкс()
|
||
И ирПортативный.ЛиСерверныйМодульДоступенЛкс(Ложь)
|
||
Тогда
|
||
ПараметрыКоманды = Новый Структура("ИмяФайлаВнешнейОбработки, СтруктураПараметров, выхВремяНачала, ВерсияАлгоритма", ИмяФайлаВнешнейОбработки, СтруктураПараметров, выхВремяНачала, ВерсияАлгоритма);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Обработки.ирПортативныйСервер.Создать().ВыполнитьАлгоритмЧерезВнешнююОбработкуЛкс();
|
||
#КонецЕсли
|
||
ирПортативный.ВыполнитьСерверныйМетодЛкс("ВыполнитьАлгоритмЧерезВнешнююОбработкуЛкс", ПараметрыКоманды);
|
||
выхВремяНачала = ПараметрыКоманды.выхВремяНачала;
|
||
Иначе
|
||
Результат = ирОбщий.ВыполнитьАлгоритмЧерезВнешнююОбработкуЛкс(ИмяФайлаВнешнейОбработки, СтруктураПараметров, выхВремяНачала, ВерсияАлгоритма);
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСнимокОбъектаБДПоКлючуЛкс(Знач ИмяОсновнойТаблицы, Знач КлючОбъекта, Знач СохранятьИдентификаторСсылки, Знач ЧитатьДанные, выхИдентификаторСсылки = Неопределено,
|
||
НомерВерсии = Неопределено) Экспорт
|
||
|
||
СтруктураОбъекта = ирОбщий.ОбъектБДПоКлючуЛкс(ИмяОсновнойТаблицы, КлючОбъекта, СохранятьИдентификаторСсылки, ЧитатьДанные, Истина, выхИдентификаторСсылки, Ложь, НомерВерсии);
|
||
Если СтруктураОбъекта <> Неопределено Тогда
|
||
СтруктураСнимка = Новый Структура;
|
||
СтруктураСнимка.Вставить("ТипОбъекта", ТипЗнч(СтруктураОбъекта.Методы));
|
||
СтруктураСнимка.Вставить("Снимок", СтруктураОбъекта.Методы.Снимок(, Ложь));
|
||
КонецЕсли;
|
||
Возврат СтруктураСнимка;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗаписатьОбъектXMLЛкс(ОбъектXML, ДополнительныеСвойства = Неопределено, Знач РежимЗаписи = Неопределено, Знач РежимПроведения = Неопределено, Знач ОтключатьКонтрольЗаписи = Неопределено,
|
||
Знач БезАвторегистрацииИзменений = Неопределено, Знач ТипОбъекта = Неопределено, Знач ПривилегированныйРежим = Неопределено, Знач ОтключатьЗаписьВерсии = Неопределено) Экспорт
|
||
|
||
#Если Сервер И Не Сервер Тогда
|
||
ирПортативный = Обработки.ирПортативный.Создать();
|
||
#КонецЕсли
|
||
Если Истина
|
||
И ирКэш.ЛиПортативныйРежимЛкс()
|
||
И ирПортативный.ЛиСерверныйМодульДоступенЛкс()
|
||
Тогда
|
||
ПараметрыКоманды = Новый Структура("ОбъектXML, ДополнительныеСвойства, РежимЗаписи, РежимПроведения, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений, ПривилегированныйРежим, ОтключатьЗаписьВерсии",
|
||
ОбъектXML, ДополнительныеСвойства, РежимЗаписи, РежимПроведения, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений, ПривилегированныйРежим, ОтключатьЗаписьВерсии);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Обработки.ирПортативныйСервер.Создать().ЗаписатьОбъектXMLЛкс();
|
||
#КонецЕсли
|
||
ирПортативный.ВыполнитьСерверныйМетодЛкс("ЗаписатьОбъектXMLЛкс", ПараметрыКоманды);
|
||
ДополнительныеСвойства = ПараметрыКоманды.ДополнительныеСвойства;
|
||
ОбъектXML = ПараметрыКоманды.ОбъектXML;
|
||
Иначе
|
||
ЭтоИмитатор = ирОбщий.ЛиТипИмитатораОбъектаЛкс(ТипОбъекта);
|
||
Если ЭтоИмитатор Тогда
|
||
Объект = Новый (ТипОбъекта);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
Объект.ЗагрузитьСнимок(ОбъектXML);
|
||
Иначе
|
||
Объект = ирОбщий.ОбъектИзСтрокиXMLЛкс(ОбъектXML);
|
||
ирОбщий.ВосстановитьДополнительныеСвойстваОбъектаЛкс(Объект, ДополнительныеСвойства);
|
||
КонецЕсли;
|
||
ирОбщий.ЗаписатьОбъектЛкс(Объект, Ложь, РежимЗаписи, РежимПроведения, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений, ПривилегированныйРежим, ОтключатьЗаписьВерсии);
|
||
Если ЭтоИмитатор Тогда
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
ОбъектXML = Объект.Снимок(, Ложь);
|
||
Иначе
|
||
ДополнительныеСвойства = ирОбщий.СериализоватьДополнительныеСвойстваОбъектаЛкс(Объект, Ложь);
|
||
ОбъектXML = ирОбщий.ОбъектВСтрокуXMLЛкс(Объект);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ИзменитьРегистрациюОбъектаДляУзлаЛкс(ОбъектXML, ТипОбъекта, Знач УзлыДляРегистрации, Знач НовоеЗначение, Знач ОдинУзелОбменаДляПроверки, Знач НомерВерсииПлатформы = "") Экспорт
|
||
|
||
Объект = Новый (ТипОбъекта);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
Объект.ЗагрузитьСнимок(ОбъектXML);
|
||
Объект = Объект.ОбъектБД();
|
||
ирОбщий.ИзменитьРегистрациюОбъектаДляУзлаЛкс(УзлыДляРегистрации, Объект, НовоеЗначение, ОдинУзелОбменаДляПроверки, НомерВерсииПлатформы);
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ОбъектБДИзИмитатораВСтрокуXMLЛкс(ОбъектXML, ТипОбъекта, Знач ИспользоватьXDTO = Истина, СообщатьОбОшибках = Истина, Знач Сериализатор = Неопределено) Экспорт
|
||
|
||
Объект = Новый (ТипОбъекта);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
Объект.ЗагрузитьСнимок(ОбъектXML, Истина);
|
||
Результат = Объект.ДанныеВСтрокуXMLЧерезXDTO(ИспользоватьXDTO, СообщатьОбОшибках, Сериализатор);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОбъектБДВИмитаторИзСтрокиXML(ОбъектXML, ТипОбъекта, Знач ИспользоватьXDTO = Истина, СообщатьОбОшибках = Истина) Экспорт
|
||
|
||
ОбъектБД = ирОбщий.ОбъектИзСтрокиXMLЛкс(ОбъектXML,, ИспользоватьXDTO, СообщатьОбОшибках);
|
||
Объект = Новый (ТипОбъекта);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
ОбъектБД = Объект.ДанныеИзСтрокиXMLЧерезXDTO(ИспользоватьXDTO, СообщатьОбОшибках);
|
||
Объект.Конструктор(ОбъектБД);
|
||
Снимок = Объект.Снимок(Истина);
|
||
Возврат Снимок;
|
||
|
||
КонецФункции
|
||
|
||
Процедура УдалитьОбъектXMLЛкс(Знач ОбъектXML, Знач ДополнительныеСвойства, Знач ОтключатьКонтрольЗаписи = Неопределено, Знач БезАвторегистрацииИзменений = Неопределено, Знач ТипОбъекта,
|
||
ПривилегированныйРежим = Неопределено, ОтключатьЗаписьВерсии = Неопределено) Экспорт
|
||
|
||
#Если Сервер И Не Сервер Тогда
|
||
ирПортативный = Обработки.ирПортативный.Создать();
|
||
#КонецЕсли
|
||
Если Истина
|
||
И ирКэш.ЛиПортативныйРежимЛкс()
|
||
И ирПортативный.ЛиСерверныйМодульДоступенЛкс()
|
||
Тогда
|
||
ПараметрыКоманды = Новый Структура("ОбъектXML, ДополнительныеСвойства, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений, ПривилегированныйРежим, ОтключатьЗаписьВерсии",
|
||
ОбъектXML, ДополнительныеСвойства, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений, ПривилегированныйРежим, ОтключатьЗаписьВерсии);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Обработки.ирПортативныйСервер.Создать().УдалитьОбъектXMLЛкс();
|
||
#КонецЕсли
|
||
ирПортативный.ВыполнитьСерверныйМетодЛкс("УдалитьОбъектXMLЛкс", ПараметрыКоманды);
|
||
ДополнительныеСвойства = ПараметрыКоманды.ДополнительныеСвойства;
|
||
ОбъектXML = ПараметрыКоманды.ОбъектXML;
|
||
Иначе
|
||
ЭтоИмитатор = ирОбщий.ЛиТипИмитатораОбъектаЛкс(ТипОбъекта);
|
||
Если ЭтоИмитатор Тогда
|
||
Объект = Новый (ТипОбъекта);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
Объект.ЗагрузитьСнимок(ОбъектXML);
|
||
Иначе
|
||
Объект = ирОбщий.ОбъектИзСтрокиXMLЛкс(ОбъектXML);
|
||
ирОбщий.ВосстановитьДополнительныеСвойстваОбъектаЛкс(Объект, ДополнительныеСвойства);
|
||
КонецЕсли;
|
||
Объект.Прочитать();
|
||
ирОбщий.УдалитьОбъектЛкс(Объект, Ложь, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений, ПривилегированныйРежим, ОтключатьЗаписьВерсии);
|
||
//Если ЭтоИмитатор Тогда
|
||
// #Если Сервер И Не Сервер Тогда
|
||
// Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
// #КонецЕсли
|
||
// ОбъектXML = Объект.Снимок(, Ложь);
|
||
//Иначе
|
||
// ДополнительныеСвойства = ирОбщий.СериализоватьДополнительныеСвойстваОбъектаЛкс(Объект, Ложь);
|
||
// ОбъектXML = ирОбщий.ОбъектВСтрокуXMLЛкс(Объект);
|
||
//КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура УстановитьНовыйКодXMLЛкс(ОбъектXML, ПрефиксКода, ТипОбъекта) Экспорт
|
||
|
||
Объект = Новый (ТипОбъекта);
|
||
Объект.ЗагрузитьСнимок(ОбъектXML);
|
||
Объект.УстановитьНовыйКод(ПрефиксКода);
|
||
ОбъектXML = Объект.Снимок();
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура УстановитьНовыйНомерXMLЛкс(ОбъектXML, ПрефиксНомера, ТипОбъекта) Экспорт
|
||
|
||
Объект = Новый (ТипОбъекта);
|
||
Объект.ЗагрузитьСнимок(ОбъектXML);
|
||
Объект.УстановитьНовыйНомер(ПрефиксНомера);
|
||
ОбъектXML = Объект.Снимок();
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция СкопироватьОбъектЧерезИмитаторЛкс(Знач СнимокОбъекта, ТипОбъекта) Экспорт
|
||
|
||
Объект = Новый (ТипОбъекта);
|
||
Объект.ЗагрузитьСнимок(СнимокОбъекта);
|
||
Объект = Объект.Скопировать(Ложь);
|
||
СнимокОбъекта = Объект.Снимок();
|
||
Возврат СнимокОбъекта;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ПрочитатьОбъектЧерезИмитаторЛкс(СнимокОбъекта, ТипОбъекта) Экспорт
|
||
|
||
Объект = Новый (ТипОбъекта);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
Объект.ЗагрузитьСнимок(СнимокОбъекта, Истина);
|
||
Объект.Прочитать(Ложь);
|
||
СнимокОбъекта = Объект.Снимок(Истина);
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ПолучитьКартуМаршрутаЧерезИмитаторЛкс(СнимокОбъекта, ТипОбъекта) Экспорт
|
||
|
||
Объект = Новый (ТипОбъекта);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
Объект.ЗагрузитьСнимок(СнимокОбъекта, Истина);
|
||
Результат = Объект.ПолучитьКартуМаршрута(Ложь);
|
||
Результат = Новый ХранилищеЗначения(Результат);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура УстановитьПометкуУдаленияОбъектаЛкс(ОбъектXML, ДополнительныеСвойства, ЗначениеПометки = Истина, БезАвторегистрацииИзменений = Неопределено, Знач ТипОбъекта,
|
||
ПривилегированныйРежим = Неопределено, ОтключатьЗаписьВерсии = Неопределено) Экспорт
|
||
|
||
ЭтоИмитатор = ирОбщий.ЛиТипИмитатораОбъектаЛкс(ТипОбъекта);
|
||
Если ЭтоИмитатор Тогда
|
||
Объект = Новый (ТипОбъекта);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
Объект.ЗагрузитьСнимок(ОбъектXML);
|
||
Иначе
|
||
Объект = ирОбщий.ОбъектИзСтрокиXMLЛкс(ОбъектXML);
|
||
ирОбщий.ВосстановитьДополнительныеСвойстваОбъектаЛкс(Объект, ДополнительныеСвойства);
|
||
КонецЕсли;
|
||
Объект.Прочитать(); // Иначе объект будет модифицирован и возникнет ошибка
|
||
ирОбщий.УстановитьПометкуУдаленияОбъектаЛкс(Объект, Ложь, ЗначениеПометки, БезАвторегистрацииИзменений, ПривилегированныйРежим, ОтключатьЗаписьВерсии);
|
||
Если ЭтоИмитатор Тогда
|
||
#Если Сервер И Не Сервер Тогда
|
||
Объект = Обработки.ирИмитаторСсылочныйОбъект.Создать();
|
||
#КонецЕсли
|
||
ОбъектXML = Объект.Снимок(, Ложь);
|
||
Иначе
|
||
ДополнительныеСвойства = ирОбщий.СериализоватьДополнительныеСвойстваОбъектаЛкс(Объект, Ложь);
|
||
ОбъектXML = ирОбщий.ОбъектВСтрокуXMLЛкс(Объект);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ИмяКомпьютераЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
Результат = НСтр(СтрокаСоединенияИнформационнойБазы(), "Srvr");
|
||
Иначе
|
||
Результат = ИмяКомпьютера();
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьИспользованиеСобытияЖурналаРегистрацииКакСтруктуру(ИмяСобытия) Экспорт
|
||
|
||
Результат = Новый Структура("Использование, ОписаниеИспользования");
|
||
ИспользованиеСобытия = ПолучитьИспользованиеСобытияЖурналаРегистрации(ИмяСобытия);
|
||
Если ИспользованиеСобытия = Неопределено И ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
// http://devtool1c.ucoz.ru/forum/2-941-1
|
||
ВызватьИсключение "Функция недоступна в портативном варианте на платформе 8.2 из-за ошибки платформы";
|
||
КонецЕсли;
|
||
Результат.Использование = ИспользованиеСобытия.Использование;
|
||
Если ТипЗнч(ИспользованиеСобытия.ОписаниеИспользования) = Тип("Массив") И ИспользованиеСобытия.ОписаниеИспользования.Количество() > 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;
|
||
Возврат выхИдентификаторПроцесса;
|
||
|
||
КонецФункции
|
||
|
||
// Результат - Булево - надо ли перезапускать сеанс
|
||
Функция ПриНачалеРаботыСистемыРасширениеЛкс(ПараметрЗапуска) Экспорт
|
||
|
||
// Здесь не следует обращить к другим модулям в дежурной части, т.к. код должен очень быстро выполняться
|
||
Если Истина
|
||
И ПравоДоступа("Администрирование", Метаданные)
|
||
И ПравоДоступа("ТолстыйКлиент", Метаданные)
|
||
И Не ЛиЕстьИнтерактивныйДоступКИнструментамЛкс()
|
||
И ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0
|
||
Тогда
|
||
НадоДобавлятьРоль = Ложь;
|
||
Если Найти(НРег(ПараметрЗапуска), НРег("ВключитьИР")) > 0 Тогда
|
||
НадоДобавлятьРоль = Истина;
|
||
ИначеЕсли Не РольДоступна("ирПользователь") Тогда
|
||
ДобавлятьРольИРВсемАдминистраторам = ирОбщий.ВосстановитьЗначениеЛкс("ДобавлятьРольИРВсемАдминистраторам", Истина);
|
||
Если ДобавлятьРольИРВсемАдминистраторам = Ложь Тогда
|
||
НадоДобавлятьРоль = Ложь;
|
||
ИначеЕсли ДобавлятьРольИРВсемАдминистраторам = Неопределено Тогда
|
||
ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей();
|
||
РольРазработчик = Метаданные.Роли.ирРазработчик;
|
||
НадоДобавлятьРоль = Истина;
|
||
Для Каждого ПользовательИБ Из ПользователиИБ Цикл
|
||
#Если Сервер И Не Сервер Тогда
|
||
ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
|
||
#КонецЕсли
|
||
Если ПользовательИБ.Роли.Содержит(РольРазработчик) Тогда
|
||
НадоДобавлятьРоль = Ложь;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Иначе
|
||
НадоДобавлятьРоль = Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если НадоДобавлятьРоль Тогда
|
||
ирОбщий.ДобавитьТекущемуПользователюРолиИРЛкс();
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат Ложь;
|
||
|
||
КонецФункции
|
||
|
||
Функция ИнфоСервераПриложений() Экспорт
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
Если ирПортативный.ЛиСерверныйМодульДоступенЛкс(Ложь) Тогда
|
||
ПараметрыМетода = Новый Структура("Результат");
|
||
#Если Сервер И Не Сервер Тогда
|
||
Обработки.ирПортативныйСервер.Создать().ИнфоСервераПриложений();
|
||
#КонецЕсли
|
||
ирПортативный.ВыполнитьСерверныйМетодЛкс("ИнфоСервераПриложений", ПараметрыМетода);
|
||
ИнфоСервера = ПараметрыМетода.Результат;
|
||
Иначе
|
||
ИнфоСервера = "";
|
||
КонецЕсли;
|
||
Иначе
|
||
ИнфоСервера =
|
||
"Сервер. ОС: " + ирОбщий.ОписаниеОСЛкс() + "
|
||
|Сервер. Процесс: " + ?(ирКэш.Это64битныйПроцессЛкс(), "64", "32") + "б";
|
||
Если ирКэш.ЛиПлатформаWindowsЛкс() Тогда
|
||
СтрокаЗапускаПроцесса = "";
|
||
ирСервер.ПолучитьПараметрыПроцессаАгентаСервера(, СтрокаЗапускаПроцесса);
|
||
ИнфоСервера = ИнфоСервера + Символы.ПС + "Сервер. Отладка: " + ирОбщий.РежимОтладкиИзКоманднойСтрокиЛкс(СтрокаЗапускаПроцесса);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат ИнфоСервера;
|
||
КонецФункции
|
||
|
||
Функция ЗапуститьФоновоеЗаданиеЛкс(Знач ИмяМетода, Знач Параметры = Неопределено, Знач КлючЗадания = Неопределено, Знач НаименованиеЗадания = "") Экспорт
|
||
|
||
Если Истина
|
||
И ирКэш.ЛиПортативныйРежимЛкс()
|
||
И ирПортативный.ЛиСерверныйМодульДоступенЛкс(Ложь)
|
||
Тогда
|
||
ПараметрыМетода = Новый Структура("Результат");
|
||
ПараметрыМетода.Вставить("ИмяМетода", ИмяМетода);
|
||
ПараметрыМетода.Вставить("Параметры", Параметры);
|
||
ПараметрыМетода.Вставить("КлючЗадания", КлючЗадания);
|
||
ПараметрыМетода.Вставить("НаименованиеЗадания", НаименованиеЗадания);
|
||
#Если Сервер И Не Сервер Тогда
|
||
Обработки.ирПортативныйСервер.Создать().ЗапуститьФоновоеЗадание();
|
||
#КонецЕсли
|
||
ирПортативный.ВыполнитьСерверныйМетодЛкс("ЗапуститьФоновоеЗадание", ПараметрыМетода);
|
||
Результат = ПараметрыМетода.Результат;
|
||
Иначе
|
||
ирОбщий.ДобавитьТекущемуПользователюРолиИРЛкс();
|
||
ФоновоеЗадание = ФоновыеЗадания.Выполнить(ИмяМетода, Параметры, КлючЗадания, НаименованиеЗадания);
|
||
Результат = ФоновоеЗадание.УникальныйИдентификатор;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЗаписатьОжибкуЖР() Экспорт
|
||
ЗаписьЖурналаРегистрации("ошибка", УровеньЖурналаРегистрации.Ошибка);
|
||
КонецФункции
|
||
|
||
Функция СписокДопСвойствОбъектаБСПЛкс(СсылкаОбъекта) Экспорт
|
||
|
||
СписокСвойств = Новый Массив;
|
||
МодульУправлениеСвойствами = Вычислить("УправлениеСвойствами");
|
||
#Если Сервер И Не Сервер Тогда
|
||
МодульУправлениеСвойствами = УправлениеСвойствами;
|
||
#КонецЕсли
|
||
Если ирОбщий.МетодРеализованЛкс(МодульУправлениеСвойствами, "СвойстваОбъекта") Тогда
|
||
// БСП 2.4+
|
||
СписокСвойств = МодульУправлениеСвойствами.СвойстваОбъекта(СсылкаОбъекта);
|
||
//ИначеЕсли ирОбщий.МетодРеализованЛкс(МодульУправлениеСвойствами, "ПолучитьСписокСвойств") Тогда
|
||
// // БСП 2.3-
|
||
// // https://www.hostedredmine.com/issues/917471
|
||
// СписокСвойств = МодульУправлениеСвойствами.ПолучитьСписокСвойств(СсылкаОбъекта);
|
||
// Здесь полностью другие свойства свойств https://www.hostedredmine.com/issues/921992
|
||
КонецЕсли;
|
||
Возврат СписокСвойств;
|
||
|
||
КонецФункции
|
||
|
||
Функция СоздатьКаталогТрассыПоПользователюЛкс() Экспорт
|
||
|
||
Каталог = КаталогТрассыПоПользователюЛкс();
|
||
СоздатьКаталог(Каталог);
|
||
Возврат Каталог;
|
||
|
||
КонецФункции
|
||
|
||
Функция КаталогТрассыПоПользователюЛкс() Экспорт
|
||
|
||
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
|
||
Каталог = КаталогВременныхФайлов() + ирОбщий.ИдентификаторИзПредставленияЛкс(СтрокаСоединения) + "\" + ИмяПользователя();
|
||
Возврат Каталог;
|
||
|
||
КонецФункции
|
||
|
||
Функция ТаблицаВсехТаблицБДЛкс() Экспорт
|
||
Возврат ирКэш.ТаблицаВсехТаблицБДЛкс();
|
||
КонецФункции
|
||
|
||
Функция ВыполнитьЗапросСтатистикиПоТаблицамЛкс(БазыДанных, Параметры, ИмяКолонкиКоличества, АдресРезультата = "") Экспорт
|
||
Результат = ирОбщий.ВыполнитьЗапросСтатистикиПоТаблицамЛкс(БазыДанных, Параметры, ИмяКолонкиКоличества);
|
||
Если ЗначениеЗаполнено(АдресРезультата) Тогда
|
||
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
Функция ВыполнитьЗапросЛкс(ТекстЗапроса, Параметры = Неопределено, АдресРезультата = "", выхТекущаяДата = Неопределено) Экспорт
|
||
Результат = ирОбщий.ВыполнитьЗапросЛкс(ТекстЗапроса, Параметры);
|
||
Если ЗначениеЗаполнено(АдресРезультата) Тогда
|
||
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
|
||
КонецЕсли;
|
||
выхТекущаяДата = ТекущаяДата();
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
///////////////////////////////////////////////////
|
||
// Управляемые формы
|
||
|
||
// РежимИмяСиноним - Булево - Истина - Имя
|
||
Функция НастроитьАвтоТаблицуФормыДинамическогоСпискаЛкс(ЭтаФорма, ОсновнойЭУ, ПолноеИмяТаблицыБД, РежимИмяСиноним = Ложь, ПредельноеКоличествоВидимыхКолонок = 10, СоединенныеРегистры = Неопределено) Экспорт
|
||
|
||
#Если Сервер И Не Сервер Тогда
|
||
ОсновнойЭУ = Элементы.ДинамическийСписок;
|
||
СоединенныеРегистры = Новый Массив;
|
||
#КонецЕсли
|
||
ДинамическийСписок = ирОбщий.ДанныеЭлементаФормыЛкс(ОсновнойЭУ);
|
||
ДинамическийСписок.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ИмяТаблицы", ПолноеИмяТаблицыБД);
|
||
ОбъектМД = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(ПолноеИмяТаблицыБД, Истина);
|
||
Если ОбъектМД = Неопределено Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
ПолноеИмяМД = ОбъектМД.ПолноеИмя();
|
||
ТипТаблицы = ирОбщий.ТипТаблицыБДЛкс(ПолноеИмяТаблицыБД);
|
||
КорневойТип = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяМД);
|
||
|
||
////СтруктураХраненияПолей = ирКэш.СтруктураХраненияБДЛкс().НайтиСтроки(Новый Структура("Назначение, Метаданные", "Основная", ПолноеИмяМД))[0].Поля;
|
||
//ФильтрМетаданных = Новый Массив;
|
||
//ФильтрМетаданных.Добавить(ПолноеИмяМД);
|
||
//СтруктураХраненияТаблицы = ПолучитьСтруктуруХраненияБазыДанных(ФильтрМетаданных).НайтиСтроки(Новый Структура("Назначение, Метаданные", "Основная", ПолноеИмяМД))[0];
|
||
//СтруктураХраненияПолей = СтруктураХраненияТаблицы.Поля;
|
||
|
||
КолонкиТП = ОсновнойЭУ.ПодчиненныеЭлементы;
|
||
ПутьКДаннымСписка = ОсновнойЭУ.ПутьКДанным;
|
||
ДинамическийСписок.ПроизвольныйЗапрос = Истина;
|
||
ДинамическийСписок.ДинамическоеСчитываниеДанных = Истина;
|
||
ТекстДопПоля = "";
|
||
Если ирОбщий.ЛиМетаданныеСсылочногоОбъектаЛкс(ОбъектМД) Тогда
|
||
ТекстДопПоля = ТекстДопПоля + ", """" КАК ИдентификаторСсылкиЛкс";
|
||
КонецЕсли;
|
||
ИсточникиДанных = Новый Структура;
|
||
ПсевдонимОсновнойТаблицы = "_Т";
|
||
ТекстИсточников = " ИЗ " + ПолноеИмяТаблицыБД + " КАК " + ПсевдонимОсновнойТаблицы;
|
||
ИсточникиДанных.Вставить(ПсевдонимОсновнойТаблицы, ПолноеИмяТаблицыБД);
|
||
Для Каждого СоединенныйРегистр Из СоединенныеРегистры Цикл
|
||
ТекстИсточников = ТекстИсточников + "
|
||
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений." + СоединенныйРегистр + " КАК " + СоединенныйРегистр + "
|
||
|ПО _Т.Ссылка = " + СоединенныйРегистр + "." + Метаданные.РегистрыСведений[СоединенныйРегистр].Измерения[0].Имя;
|
||
ИсточникиДанных.Вставить(СоединенныйРегистр, "РегистрСведений." + СоединенныйРегистр);
|
||
КонецЦикла;
|
||
СкрытыеПоля = Новый Массив;
|
||
Для Каждого КлючИЗначение Из ИсточникиДанных Цикл
|
||
ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(КлючИЗначение.Значение);
|
||
ПутьКПолю = КлючИЗначение.Ключ + ".";
|
||
Если ирОбщий.ЛиМетаданныеВнешнегоИсточникаДанныхЛкс(ОбъектМД) Тогда
|
||
// Антибаг платформы 8.3.18 теряются значения NULL https://www.hostedredmine.com/issues/925439
|
||
#Если Сервер И Не Сервер Тогда
|
||
ОбъектМД = Метаданные.ВнешниеИсточникиДанных.Tropic.Таблицы.dbo_Dorem;
|
||
#КонецЕсли
|
||
Для Каждого ПолеМД Из ОбъектМД.Поля Цикл
|
||
Если ПолеМД.РазрешитьNULL Тогда
|
||
ИмяПоля = ПолеМД.Имя + "_ЭтоNULL_";
|
||
СкрытыеПоля.Добавить(ИмяПоля);
|
||
ТекстДопПоля = ТекстДопПоля + ",
|
||
|" + ПутьКПолю + ПолеМД.Имя + " ЕСТЬ NULL КАК " + ИмяПоля;
|
||
ДинамическийСписок.УстановитьОбязательноеИспользование(ИмяПоля, Истина);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Продолжить;
|
||
КонецЕсли;
|
||
#Если Сервер И Не Сервер Тогда
|
||
ОбъектМД = Метаданные.Справочники.Валюты;
|
||
#КонецЕсли
|
||
Для Каждого ПолеТаблицы Из ПоляТаблицыБД Цикл
|
||
Если Истина
|
||
И ПолеТаблицы.ТипЗначения.Типы().Количество() > 1
|
||
И НЕ (Истина
|
||
// Антибаг платформы http://www.hostedredmine.com/issues/882688, http://www.hostedredmine.com/issues/882690
|
||
И ПолеТаблицы.Имя = "ВедущаяЗадача"
|
||
И ирОбщий.ЛиКорневойТипБизнесПроцессаЛкс(ТипТаблицы)
|
||
И Метаданные.Задачи.Количество() > 1)
|
||
Тогда
|
||
ТекстДопПоля = ТекстДопПоля + ",
|
||
|ТИПЗНАЧЕНИЯ(" + ПутьКПолю + ПолеТаблицы.Имя + ") КАК " + ПолеТаблицы.Имя + "_ТипЗначения_";
|
||
КонецЕсли;
|
||
Если Истина
|
||
И КлючИЗначение.Значение = ПолноеИмяТаблицыБД
|
||
И ПолеТаблицы.РежимПароля
|
||
И ирКэш.НомерВерсииПлатформыЛкс() >= 803010 // Иначе мы не сможем маскировать текст при выводе
|
||
Тогда
|
||
ТекстДопПоля = ТекстДопПоля + ", """"+" + ПутьКПолю + ПолеТаблицы.Имя + " КАК " + ПолеТаблицы.Имя; // Запароленные поля по умолчанию игнорируются
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
ТекстЗапроса = "ВЫБРАТЬ *" + ТекстДопПоля + ТекстИсточников;
|
||
|
||
ДинамическийСписок.ТекстЗапроса = ТекстЗапроса;
|
||
ПоляСписка = ЭтаФорма.ПолучитьРеквизиты(ПутьКДаннымСписка);
|
||
Пока ОсновнойЭУ.ПодчиненныеЭлементы.Количество() > 0 Цикл
|
||
Попытка
|
||
ЭтаФорма.Элементы.Удалить(ОсновнойЭУ.ПодчиненныеЭлементы[0]);
|
||
Исключение
|
||
Пустышка = 0; // Для отладки
|
||
КонецПопытки;
|
||
КонецЦикла;
|
||
КоличествоВидимыхКолонок = 0;
|
||
Для Каждого ПолеСписка Из ПоляСписка Цикл
|
||
#Если Сервер И Не Сервер Тогда
|
||
ПолеСписка = Новый РеквизитФормы;
|
||
#КонецЕсли
|
||
Если Ложь
|
||
Или ПолеСписка.ТипЗначения.СодержитТип(Тип("Картинка"))
|
||
Или ПолеСписка.ТипЗначения.СодержитТип(Тип("КомпоновщикНастроекКомпоновкиДанных"))
|
||
Или ПолеСписка.ТипЗначения.СодержитТип(Тип("ПорядокКомпоновкиДанных"))
|
||
Или ПолеСписка.ТипЗначения.СодержитТип(Тип("ОтборКомпоновкиДанных"))
|
||
Или ПолеСписка.ТипЗначения.СодержитТип(Тип("ПоляГруппировкиКомпоновкиДанных"))
|
||
Или ПолеСписка.ТипЗначения.СодержитТип(Тип("ЗначенияПараметровДанныхКомпоновкиДанных"))
|
||
Или ПолеСписка.ТипЗначения.СодержитТип(Тип("УсловноеОформлениеКомпоновкиДанных"))
|
||
Или СкрытыеПоля.Найти(ПолеСписка.Имя) <> Неопределено // Так ячейка данных не будет попадать в коллекцию строки
|
||
Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ИмяКолонки = ПолеСписка.Имя;
|
||
ИмяПоля = ОсновнойЭУ.Имя + ИмяКолонки;
|
||
Колонка = КолонкиТП.Найти(ИмяПоля);
|
||
Если Колонка = Неопределено Тогда
|
||
СуществующийЭлемент = ЭтаФорма.Элементы.Найти(ИмяПоля);
|
||
Если СуществующийЭлемент <> Неопределено Тогда
|
||
// https://www.hostedredmine.com/issues/917823
|
||
// Удалить или переименовать его нельзя
|
||
ИмяПоля = "_" + ИмяПоля;
|
||
КонецЕсли;
|
||
Колонка = ЭтаФорма.Элементы.Добавить(ИмяПоля, Тип("ПолеФормы"), ОсновнойЭУ);
|
||
Колонка.Вид = ВидПоляФормы.ПолеНадписи;
|
||
ПутьКДаннымПоля = ПутьКДаннымСписка + "." + ИмяКолонки;
|
||
Попытка
|
||
Колонка.ПутьКДанным = ПутьКДаннымПоля;
|
||
Исключение
|
||
// Например при ИмяКолонки = "ВерсияДанных"
|
||
КонецПопытки;
|
||
Если ИмяКолонки = "Ссылка" Тогда
|
||
ДинамическийСписок.УстановитьОбязательноеИспользование("Ссылка", Истина);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
//Колонка.ТекстШапки = ЭлементОтбора.Представление;
|
||
//Если ТипТаблицы <> "Перечисление" Тогда
|
||
// ДанныеПодключены = Ложь;
|
||
// Если Истина
|
||
// И ЭлементОтбора.ТипЗначения.СодержитТип(Тип("Булево"))
|
||
// И ЭлементОтбора.ТипЗначения.Типы().Количество() = 1
|
||
// Тогда
|
||
// Колонка.УстановитьЭлементУправления(Тип("Флажок"));
|
||
// Попытка
|
||
// Колонка.ДанныеФлажка = ИмяКолонки;
|
||
// ДанныеПодключены = Истина;
|
||
// Исключение
|
||
// ОписаниеОшибки = ОписаниеОшибки(); // Для отладки
|
||
// КонецПопытки;
|
||
// Иначе
|
||
// Колонка.УстановитьЭлементУправления(Тип("ПолеВвода"));
|
||
// Попытка
|
||
// Колонка.Данные = ИмяКолонки;
|
||
// ДанныеПодключены = Истина;
|
||
// Исключение
|
||
// ОписаниеОшибки = ОписаниеОшибки(); // Для отладки
|
||
// КонецПопытки;
|
||
// КонецЕсли;
|
||
// Если Не ДанныеПодключены Тогда
|
||
// Колонка.Видимость = Ложь;
|
||
// КонецЕсли;
|
||
//КонецЕсли;
|
||
|
||
//// Закомментировал 13.02.2011
|
||
////Если ЗначениеЗаполнено(Колонка.Данные) Тогда
|
||
//// Колонка.Имя = Колонка.Данные;
|
||
////КонецЕсли;
|
||
//МетаданныеПоля = ЭлементОтбора.Метаданные;
|
||
//Если МетаданныеПоля <> Неопределено Тогда
|
||
// Попытка
|
||
// Колонка.ПодсказкаВШапке = МетаданныеПоля.Подсказка;
|
||
// Исключение
|
||
// // У графы журнала нет подсказки
|
||
// КонецПопытки;
|
||
//КонецЕсли;
|
||
|
||
//// Антибаг платформы 8.2-8.3.6 https://partners.v8.1c.ru/forum/t/1337995/m/1337995
|
||
//Если Истина
|
||
// И ирКэш.НомерВерсииПлатформыЛкс() < 803008
|
||
// И ЭлементОтбора.ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор"))
|
||
//Тогда
|
||
// ирОбщий.СообщитьЛкс("Колонка """ + ИмяКолонки + """ типа УникальныйИдентификатор не будет отображаться из-за ошибки платформы");
|
||
// КолонкиТП.Удалить(Колонка);
|
||
// Продолжить;
|
||
//КонецЕсли;
|
||
Если КоличествоВидимыхКолонок > ПредельноеКоличествоВидимыхКолонок Тогда
|
||
//Колонка.ПользовательскаяВидимость = Ложь; // Не нашел способа скрыть колонку, чтобы пользователь через "Изменить форму" смог ее включить
|
||
Иначе
|
||
КоличествоВидимыхКолонок = КоличествоВидимыхКолонок + 1;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
//НовыйПорядок = ирОбщий.ВыражениеПорядкаКомпоновкиНаЯзыкеЗапросовЛкс(ДинамическийСписок.КомпоновщикНастроек.ПользовательскиеНастройки.Порядок);
|
||
//Если Не ЗначениеЗаполнено(НовыйПорядок) Тогда
|
||
// // Обязательную установку делаем, чтобы в шапках появились индикаторы сортировки и чтобы он стал виден другим механизмам
|
||
// ирОбщий.СкопироватьПорядокЛюбойЛкс(ДинамическийСписок.КомпоновщикНастроек.ПользовательскиеНастройки.Порядок, ДинамическийСписок.Порядок);
|
||
//КонецЕсли;
|
||
// Порядок по возрастанию важности
|
||
ИменаВажныхКолонок = Новый Массив;
|
||
ИменаВажныхКолонок.Добавить("Ссылка");
|
||
ИменаВажныхКолонок.Добавить("Дата");
|
||
ИменаВажныхКолонок.Добавить("Период");
|
||
ИменаВажныхКолонок.Добавить("Код");
|
||
ИменаВажныхКолонок.Добавить("Наименование");
|
||
ИменаВажныхКолонок.Добавить("НомерСтроки");
|
||
ИменаВажныхКолонок.Добавить("Регистратор");
|
||
Для Каждого ИмяВажнойКолонки Из ИменаВажныхКолонок Цикл
|
||
ПолеФормы = ОсновнойЭУ.ПодчиненныеЭлементы.Найти(ОсновнойЭУ.Имя + ИмяВажнойКолонки);
|
||
Если ПолеФормы <> Неопределено Тогда
|
||
ЭтаФорма.Элементы.Переместить(ПолеФормы, ОсновнойЭУ, ОсновнойЭУ.ПодчиненныеЭлементы[0]);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ирОбщий.НастроитьЗаголовкиАвтоТаблицыФормыДинамическогоСпискаЛкс(ОсновнойЭУ, ПолноеИмяТаблицыБД, РежимИмяСиноним);
|
||
ПолеФормы = ОсновнойЭУ.ПодчиненныеЭлементы.Найти(ОсновнойЭУ.Имя + "Предопределенный");
|
||
Если ПолеФормы <> Неопределено Тогда
|
||
ПолеФормы.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("ирПредопределенный");
|
||
ПолеФормы.Ширина = 1;
|
||
ПолеФормы.АвтоМаксимальнаяШирина = Ложь;
|
||
ПолеФормы.РастягиватьПоГоризонтали = Ложь;
|
||
КонецЕсли;
|
||
ПолеФормы = ОсновнойЭУ.ПодчиненныеЭлементы.Найти(ОсновнойЭУ.Имя + "ПометкаУдаления");
|
||
Если ПолеФормы <> Неопределено Тогда
|
||
ПолеФормы.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("ПометитьНаУдаление");
|
||
ПолеФормы.Ширина = 1;
|
||
ПолеФормы.АвтоМаксимальнаяШирина = Ложь;
|
||
ПолеФормы.РастягиватьПоГоризонтали = Ложь;
|
||
КонецЕсли;
|
||
ПолеФормы = ОсновнойЭУ.ПодчиненныеЭлементы.Найти(ОсновнойЭУ.Имя + "ЭтоГруппа");
|
||
Если ПолеФормы <> Неопределено Тогда
|
||
ПолеФормы.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("ирПапка");
|
||
ПолеФормы.Ширина = 1;
|
||
ПолеФормы.АвтоМаксимальнаяШирина = Ложь;
|
||
ПолеФормы.РастягиватьПоГоризонтали = Ложь;
|
||
КонецЕсли;
|
||
Возврат Истина;
|
||
|
||
КонецФункции
|
||
|
||
Процедура УправляемаяФорма_ПриСозданииЛкс(Знач ЭтаФорма, Отказ, СтандартнаяОбработка, Знач ПоляДляЗапоминанияТипов = Неопределено, Знач ПоляФормыСИсториейВыбора = Неопределено) Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
ирОбщий.СообщитьЛкс("Управляемые формы инструментов не поддерживают работу в портативном режиме");
|
||
Отказ = Истина;
|
||
Возврат;
|
||
КонецЕсли;
|
||
Если ПоляФормыСИсториейВыбора <> Неопределено Тогда
|
||
Если ТипЗнч(ПоляФормыСИсториейВыбора) = Тип("Массив") Тогда
|
||
МассивПолей = ПоляФормыСИсториейВыбора;
|
||
Иначе
|
||
МассивПолей = Новый Массив;
|
||
МассивПолей.Добавить(ПоляФормыСИсториейВыбора);
|
||
КонецЕсли;
|
||
ПоляФормыСИсториейВыбора = МассивПолей;
|
||
Для Каждого ПолеФормыСИсториейВыбора Из ПоляФормыСИсториейВыбора Цикл
|
||
ирСервер.ПолеФормыСИсториейВыбора_ЗаполнитьСписокВыбораЛкс(ПолеФормыСИсториейВыбора, ЭтаФорма.ИмяФормы);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
ИмяКорневогоРеквизита = "мСлужебныеДанные";
|
||
ДобавляемыеРеквизиты = Новый Массив();
|
||
КорневойРеквизитФормы = Новый РеквизитФормы(ИмяКорневогоРеквизита, Новый ОписаниеТипов);
|
||
ДобавляемыеРеквизиты.Добавить(КорневойРеквизитФормы);
|
||
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
|
||
УправляемаяФорма_ОбновитьСлужебныеДанныеЛкс(ЭтаФорма, ПоляДляЗапоминанияТипов, ПоляФормыСИсториейВыбора);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура УправляемаяФорма_ОбновитьСлужебныеДанныеЛкс(Знач ЭтаФорма, Знач ПоляДляЗапоминанияТипов = Неопределено, Знач ПоляСИсториейВыбора = Неопределено) Экспорт
|
||
|
||
СтруктураПутиКДанным = Новый Структура();
|
||
ЗаполнитьСоответствиеПутиКДаннымПодчиненныхЭлементовФормыЛкс(ЭтаФорма, СтруктураПутиКДанным);
|
||
ФиксированнаяСтруктураПутиКДанным = Новый ФиксированнаяСтруктура(СтруктураПутиКДанным);
|
||
|
||
СтруктураТипыЗначений = Новый Структура;
|
||
МассивПолей = Новый Массив();
|
||
Если ПоляДляЗапоминанияТипов <> Неопределено Тогда
|
||
Если ТипЗнч(ПоляДляЗапоминанияТипов) = Тип("Массив") Тогда
|
||
ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(ПоляДляЗапоминанияТипов, МассивПолей);
|
||
Иначе
|
||
МассивПолей.Добавить(ПоляДляЗапоминанияТипов);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если ТипЗнч(ПоляСИсториейВыбора) = Тип("Массив") Тогда
|
||
ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(ПоляСИсториейВыбора, МассивПолей);
|
||
Иначе
|
||
МассивПолей.Добавить(ПоляСИсториейВыбора);
|
||
КонецЕсли;
|
||
ПоляДляЗапоминанияТипов = МассивПолей;
|
||
Для Каждого Поле Из ПоляДляЗапоминанияТипов Цикл
|
||
СтруктураТипыЗначений.Вставить(Поле.Имя, ПолучитьТипЗначенияПоляФормыЛкс(Поле, ЭтаФорма));
|
||
КонецЦикла;
|
||
|
||
КорневыеРеквизиты = ЭтаФорма.ПолучитьРеквизиты();
|
||
СтруктураСохраняемыеДанные = Новый Структура();
|
||
ДинамическиеСписки = Новый Структура();
|
||
Для Каждого КорневойРеквизит Из КорневыеРеквизиты Цикл
|
||
Если КорневойРеквизит.СохраняемыеДанные Тогда
|
||
СтруктураСохраняемыеДанные.Вставить(КорневойРеквизит.Имя);
|
||
КонецЕсли;
|
||
Если КорневойРеквизит.ТипЗначения.СодержитТип(Тип("ДинамическийСписок")) Тогда
|
||
ОписаниеСписка = Новый Структура;
|
||
ОписаниеСписка.Вставить("ОсновнаяТаблица", ЭтаФорма[КорневойРеквизит.Имя].ОсновнаяТаблица);
|
||
ОписаниеСписка.Вставить("ТекстЗапроса", ЭтаФорма[КорневойРеквизит.Имя].ТекстЗапроса);
|
||
ДинамическиеСписки.Вставить(КорневойРеквизит.Имя, ОписаниеСписка);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
СтруктураСохраняемыеДанные = Новый ФиксированнаяСтруктура(СтруктураСохраняемыеДанные);
|
||
ДинамическиеСписки = Новый ФиксированнаяСтруктура(ДинамическиеСписки);
|
||
Попытка
|
||
НеготовыеСтраницы = ЭтаФорма.мСлужебныеДанные.НеготовыеСтраницы;
|
||
Исключение
|
||
НеготовыеСтраницы = Новый СписокЗначений;
|
||
КонецПопытки;
|
||
Для Каждого Элемент Из ЭтаФорма.Элементы Цикл
|
||
//Если Истина
|
||
// И ТипЗнч(Элемент) = Тип("ГруппаФормы")
|
||
// И Элемент.Вид = ВидГруппыФормы.Страница
|
||
// И Найти(Элемент.Имя, "Страница") = 1
|
||
//Тогда
|
||
// НеготовыеСтраницы.Добавить(Элемент.Имя);
|
||
//КонецЕсли;
|
||
Если Истина
|
||
И ТипЗнч(Элемент) = Тип("ПолеФормы")
|
||
И Не Элемент.ТолькоПросмотр
|
||
И Элемент.Доступность
|
||
Тогда
|
||
ТипЗначения = ПолучитьТипЗначенияПоляФормыЛкс(Элемент, ЭтаФорма);
|
||
#Если Сервер И Не Сервер Тогда
|
||
ТипЗначения = Новый ОписаниеТипов;
|
||
#КонецЕсли
|
||
Если ТипЗначения <> Неопределено Тогда
|
||
Типы = ТипЗначения.Типы();
|
||
Если Ложь
|
||
Или Типы.Количество() > 1
|
||
Или Типы.Количество() = 0
|
||
Тогда
|
||
СтруктураТипыЗначений.Вставить(Элемент.Имя, ТипЗначения);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Истина
|
||
И ТипЗнч(Элемент) = Тип("ТаблицаФормы")
|
||
Тогда
|
||
ТипЗначения = ПолучитьТипЗначенияПоляФормыЛкс(Элемент, ЭтаФорма);
|
||
#Если Сервер И Не Сервер Тогда
|
||
ТипЗначения = Новый ОписаниеТипов;
|
||
#КонецЕсли
|
||
СтруктураТипыЗначений.Вставить(Элемент.Имя, ТипЗначения);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ФиксированнаяСтруктураТипыЗначений = Новый ФиксированнаяСтруктура(СтруктураТипыЗначений);
|
||
|
||
СтруктураКорневогоРеквизита = Новый Структура();
|
||
СтруктураКорневогоРеквизита.Вставить("ПутиКДанным", ФиксированнаяСтруктураПутиКДанным);
|
||
СтруктураКорневогоРеквизита.Вставить("СохраняемыеДанные", СтруктураСохраняемыеДанные);
|
||
СтруктураКорневогоРеквизита.Вставить("ТипыЗначений", ФиксированнаяСтруктураТипыЗначений);
|
||
СтруктураКорневогоРеквизита.Вставить("ДинамическиеСписки", ДинамическиеСписки);
|
||
СтруктураКорневогоРеквизита.Вставить("НеготовыеСтраницы", НеготовыеСтраницы);
|
||
ЭтаФорма.мСлужебныеДанные = Новый ФиксированнаяСтруктура(СтруктураКорневогоРеквизита);
|
||
|
||
Возврат;
|
||
// Очень долго на формах с больших количеством реквизитов
|
||
// Преобразуем автозаголовки в статические заголовки для возможности поиска https://partners.v8.1c.ru/forum/topic/1074579
|
||
СоответствиеРеквизитов = СоответствиеРеквизитовФормы(ЭтаФорма);
|
||
Для Каждого ЭлементФормы Из ЭтаФорма.Элементы Цикл
|
||
СтруктураСвойств = Новый Структура("ПутьКДанным, Заголовок");
|
||
ЗаполнитьЗначенияСвойств(СтруктураСвойств, ЭлементФормы);
|
||
Если Истина
|
||
И ЗначениеЗаполнено(СтруктураСвойств.ПутьКДанным)
|
||
И Не ЗначениеЗаполнено(СтруктураСвойств.Заголовок)
|
||
Тогда
|
||
ЭлементФормы.Заголовок = СоответствиеРеквизитов[ЭлементФормы.ПутьКДанным].Заголовок;
|
||
КонецЕсли;
|
||
Если Истина
|
||
И Типзнч(ЭлементФормы) = Тип("КнопкаФормы")
|
||
И ЗначениеЗаполнено(ЭлементФормы.ИмяКоманды)
|
||
И Не ЗначениеЗаполнено(ЭлементФормы.Заголовок)
|
||
Тогда
|
||
КомандаФормы = ЭтаФорма.Команды.Найти(ЭлементФормы.Имя);
|
||
Если КомандаФормы <> Неопределено Тогда
|
||
ЭлементФормы.Заголовок = КомандаФормы.Заголовок;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция СоответствиеРеквизитовФормы(ЭтаФорма, Знач ПутьКРодителю = "", Знач СоответствиеРеквизитов = Неопределено) Экспорт
|
||
|
||
Если СоответствиеРеквизитов = Неопределено Тогда
|
||
СоответствиеРеквизитов = Новый Соответствие;
|
||
КонецЕсли;
|
||
Попытка
|
||
РеквизитыФормы = ЭтаФорма.ПолучитьРеквизиты(ПутьКРодителю);
|
||
Исключение
|
||
Возврат СоответствиеРеквизитов;
|
||
КонецПопытки;
|
||
Для Каждого РеквизитФормы Из РеквизитыФормы Цикл
|
||
ПолноеИмяРеквизита = РеквизитФормы.Имя;
|
||
Если ЗначениеЗаполнено(РеквизитФормы.Путь) Тогда
|
||
ПолноеИмяРеквизита = РеквизитФормы.Путь + "." + ПолноеИмяРеквизита;
|
||
КонецЕсли;
|
||
СоответствиеРеквизитов.Вставить(ПолноеИмяРеквизита, РеквизитФормы);
|
||
СоответствиеРеквизитовФормы(ЭтаФорма, ПолноеИмяРеквизита, СоответствиеРеквизитов);
|
||
КонецЦикла;
|
||
Возврат СоответствиеРеквизитов;
|
||
|
||
КонецФункции
|
||
|
||
// Заполнить соответствие пути К данным подчиненных элементов формы иис
|
||
//
|
||
// Параметры:
|
||
// НачальныйЭлемент - <тип> -
|
||
// СтруктураПутиКДанным - <тип> -
|
||
//
|
||
Процедура ЗаполнитьСоответствиеПутиКДаннымПодчиненныхЭлементовФормыЛкс(НачальныйЭлемент, СтруктураПутиКДанным, Знач ЭтаФорма = Неопределено) Экспорт
|
||
|
||
Если ТипЗнч(НачальныйЭлемент) = Тип("УправляемаяФорма") Тогда
|
||
ЭтаФорма = НачальныйЭлемент;
|
||
КонецЕсли;
|
||
Для Каждого Поле Из НачальныйЭлемент.ПодчиненныеЭлементы Цикл
|
||
Если ТипЗнч(Поле) = Тип("ПолеФормы") Тогда
|
||
Если Поле.ПутьКДанным <> "" Тогда
|
||
ТаблицаФормы = ирОбщий.РодительЭлементаУправляемойФормыЛкс(Поле, Тип("ТаблицаФормы"));
|
||
Если ТаблицаФормы <> Неопределено Тогда
|
||
СтруктураПутиКДанным.Вставить(Поле.Имя, "Элементы." + ТаблицаФормы.Имя + ".ТекущиеДанные." + ирОбщий.ПоследнийФрагментЛкс(Поле.ПутьКДанным));
|
||
Иначе
|
||
СтруктураПутиКДанным.Вставить(Поле.Имя, Поле.ПутьКДанным);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИначеЕсли ТипЗнч(Поле) = Тип("ТаблицаФормы") Тогда
|
||
ТаблицаФормы = Поле;
|
||
Если ТаблицаФормы.ПутьКДанным <> "" Тогда
|
||
СтруктураПутиКДанным.Вставить(ТаблицаФормы.Имя, ТаблицаФормы.ПутьКДанным);
|
||
ТипЗначения = ПолучитьТипЗначенияПоляФормыЛкс(ТаблицаФормы, ЭтаФорма);
|
||
// Антибаг платформы http://www.hostedredmine.com/issues/850204
|
||
Если Истина
|
||
И ТипЗначения <> Неопределено
|
||
И ТипЗначения.СодержитТип(Тип("ДинамическийСписок"))
|
||
Тогда
|
||
НастройкаКомпоновки = ТаблицаФормы.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
|
||
#Если Сервер И Не Сервер Тогда
|
||
НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных;
|
||
#КонецЕсли
|
||
Для Каждого ВыбранноеПоле Из НастройкаКомпоновки.Структура[0].Выбор.Элементы Цикл
|
||
ИмяКолонки = СтрЗаменить(ВыбранноеПоле.Поле, ".", "_");
|
||
ИмяПоля = ТаблицаФормы.Имя + ИмяКолонки;
|
||
Если ТаблицаФормы.ПодчиненныеЭлементы.Найти(ИмяПоля) = Неопределено Тогда
|
||
ИмяПоля = ирОбщий.АвтоУникальноеИмяВКоллекцииЛкс(СтруктураПутиКДанным, ИмяПоля,,,, 0);
|
||
СтруктураПутиКДанным.Вставить(ИмяПоля, "Элементы." + ТаблицаФормы.Имя + ".ТекущиеДанные." + ИмяКолонки);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Ложь
|
||
Или ТипЗнч(Поле) = Тип("ГруппаФормы")
|
||
Или ТипЗнч(Поле) = Тип("ТаблицаФормы")
|
||
Тогда
|
||
ЗаполнитьСоответствиеПутиКДаннымПодчиненныхЭлементовФормыЛкс(Поле, СтруктураПутиКДанным, ЭтаФорма);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПолеФормыСИсториейВыбора_ЗаполнитьСписокВыбораЛкс(ПолеФормы, КлючИстории) Экспорт
|
||
|
||
// Запоминать последние
|
||
КлючНастройки = КлючИстории + "." + ПолеФормы.Имя + ".ПоследниеЗначения";
|
||
ПоследниеЗначения = ирОбщий.ВосстановитьЗначениеЛкс(КлючНастройки);
|
||
Если ТипЗнч(ПоследниеЗначения) = Тип("Массив") Тогда
|
||
ПолеФормы.СписокВыбора.Очистить();
|
||
Для Каждого Значение Из ПоследниеЗначения Цикл
|
||
НовыйЭлемент = ПолеФормы.СписокВыбора.Добавить(Значение);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Получить тип значения поля формы иис
|
||
//
|
||
// Параметры:
|
||
// ПолеФормы - <тип> -
|
||
//
|
||
// Возвращаемое значение: Тип
|
||
//
|
||
Функция ПолучитьТипЗначенияПоляФормыЛкс(ПолеФормы, ЭтаФорма = Неопределено, ВернутьОписаниеТипов = Истина) Экспорт
|
||
|
||
Если ЭтаФорма = Неопределено Тогда
|
||
ЭтаФорма = ирОбщий.РодительЭлементаУправляемойФормыЛкс(ПолеФормы);
|
||
КонецЕсли;
|
||
//Типы = ПолеФормы.ДоступныеТипы.Типы();
|
||
ИмяРеквизита = ирОбщий.ПоследнийФрагментЛкс(ПолеФормы.ПутьКДанным);
|
||
ПутьКРодителю = ирОбщий.СтрокаБезКонцаЛкс(ПолеФормы.ПутьКДанным, СтрДлина(ИмяРеквизита + 1));
|
||
Попытка
|
||
Реквизиты = ЭтаФорма.ПолучитьРеквизиты(ПутьКРодителю); // затратная операция, а нужен всего лишь тип
|
||
Исключение
|
||
// Если ПутьКРодителю содержит "ПользовательскиеНастройки.ТекущиеДанные", то может возникатьошибка "Недопустимое значение параметра (параметр номер '1')"
|
||
Возврат Неопределено;
|
||
КонецПопытки;
|
||
Реквизит = ирОбщий.НайтиЭлементКоллекцииПоЗначениюСвойстваЛкс(Реквизиты, "Имя", ИмяРеквизита);
|
||
Если Реквизит <> Неопределено Тогда
|
||
ТипЗначения = Реквизит.ТипЗначения;
|
||
Если Не ВернутьОписаниеТипов Тогда
|
||
Типы = ТипЗначения.Типы();
|
||
Если Типы.Количество() <> 1 Тогда
|
||
Если ЗначениеЗаполнено(ПолеФормы.СвязьПоТипу.ПутьКДанным) Тогда
|
||
ТаблицаРодитель = ирОбщий.РодительЭлементаУправляемойФормыЛкс(ПолеФормы, Тип("ТаблицаФормы"));
|
||
Если ТаблицаРодитель = Неопределено Тогда
|
||
Попытка
|
||
ТипЗначения = Вычислить("ЭтаФорма." + ПолеФормы.СвязьПоТипу.ПутьКДанным);
|
||
Исключение
|
||
ВызватьИсключение "Ошибка вычисления влияющего типа поля: " + ОписаниеОшибки();
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Попытка
|
||
ТипЗначения = ТипЗначения.Типы()[0]
|
||
Исключение
|
||
КонецПопытки;
|
||
Если ТипЗнч(ТипЗначения) <> Тип("Тип") Тогда
|
||
ТипЗначения = Неопределено;
|
||
КонецЕсли;
|
||
Иначе
|
||
ТипЗначения = Типы[0];
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат ТипЗначения;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьТаблицуДочернихРеквизитовЛкс(ЭлементФормы, РезультатВВидеСтруктуры = Ложь) Экспорт
|
||
|
||
ЭтаФОрма = ирОбщий.РодительЭлементаУправляемойФормыЛкс(ЭлементФормы);
|
||
ПутьКДанным = ирОбщий.ПутьКДаннымЭлементаУправляемойФормыЛкс(ЭлементФормы,, ЭтаФОрма);
|
||
ТаблицаРеквизитов = Новый ТаблицаЗначений;
|
||
ТаблицаРеквизитов.Колонки.Добавить("Заголовок");
|
||
ТаблицаРеквизитов.Колонки.Добавить("Имя");
|
||
ТаблицаРеквизитов.Колонки.Добавить("Путь");
|
||
ТаблицаРеквизитов.Колонки.Добавить("ТипЗначения");
|
||
ТаблицаРеквизитов.Колонки.Добавить("СохраняемыеДанные");
|
||
Структура = Новый Структура;
|
||
Для Каждого Реквизит Из ЭтаФОрма.ПолучитьРеквизиты(ПутьКДанным) Цикл
|
||
СтрокаРеквизита = ТаблицаРеквизитов.Добавить();
|
||
ЗаполнитьЗначенияСвойств(СтрокаРеквизита, Реквизит);
|
||
Структура.Вставить(СтрокаРеквизита.Имя, СтрокаРеквизита);
|
||
КонецЦикла;
|
||
Если РезультатВВидеСтруктуры Тогда
|
||
Результат = Структура;
|
||
Иначе
|
||
Результат = ТаблицаРеквизитов;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Не вызывается в портативном режиме
|
||
Функция ЛиЕстьИнтерактивныйДоступКИнструментамЛкс() Экспорт
|
||
//Результат = ирОбщий.ЛиЕстьИнтерактивныйДоступКИнструментамЛкс(); // Не используем этот способ, чтобы не компилировать огромный модуль
|
||
Возврат ПравоДоступа("Просмотр", Метаданные.Подсистемы.ИнструментыРазработчикаTormozit);
|
||
КонецФункции |