RDT1C/DataProcessors/ирИсторияДанных/Ext/ObjectModule.bsl
Администратор 22e1ad7d17 .
2020-12-14 00:13:47 +03:00

188 lines
14 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
Перем мПлатформа Экспорт;
Перем мОписанияТиповПолей Экспорт;
Процедура ОбновитьПредставлениеПолейВСтрокеТипа(Знач НастройкиИстории, ОбъектМД, Знач СтрокаДанных, ВычислятьПоля = Ложь) Экспорт
СтрокаДанных.ПоляВключенные = "?";
СтрокаДанных.ПоляВыключенные = "?";
ИспользованиеПолейНастроекИстории = Неопределено;
Если НастройкиИстории <> Неопределено Тогда
СтрокаДанных.Использование = НастройкиИстории.Использование;
ИспользованиеПолейНастроекИстории = НастройкиИстории.ИспользованиеПолей;
КонецЕсли;
Если Не ВычислятьПоля Тогда
Возврат;
КонецЕсли;
ТаблицаПолей = ИспользованиеПолей(ОбъектМД, ИспользованиеПолейНастроекИстории);
СтрокаДанных.ПоляВключенные = ПредставлениеПолей(ТаблицаПолей, Истина);
СтрокаДанных.ПоляВыключенные = ПредставлениеПолей(ТаблицаПолей, Ложь);
КонецПроцедуры
Функция ИспользованиеПолей(ОбъектМД, ИспользованиеПолейНастроекИстории = Неопределено, Подробно = Ложь) Экспорт
#Если Сервер И Не Сервер Тогда
ОбъектМД = Метаданные.Справочники.ирАлгоритмы;
#КонецЕсли
Если ИспользованиеПолейНастроекИстории = Неопределено Тогда
ИсторияДанныхМоя = Вычислить("ИсторияДанных");
#Если Сервер И Не Сервер Тогда
ИсторияДанныхМоя = ИсторияДанных;
#КонецЕсли
НастройкиИстории = ИсторияДанныхМоя.ПолучитьНастройки(ОбъектМД);
Если НастройкиИстории <> Неопределено Тогда
ИспользованиеПолейНастроекИстории = НастройкиИстории.ИспользованиеПолей;
КонецЕсли;
КонецЕсли;
ТаблицаПолей = Поля.ВыгрузитьКолонки();
ИспользованиеИсторииДанныхИспользовать = Метаданные.СвойстваОбъектов.ИспользованиеИсторииДанных.Использовать;
Если Метаданные.Константы.Содержит(ОбъектМД) Тогда
Возврат ТаблицаПолей;
КонецЕсли;
#Если Сервер И Не Сервер Тогда
ТаблицаПолей = Поля;
#КонецЕсли
ИмяПоляВерсияДанных = ирОбщий.ПеревестиСтроку("ВерсияДанных");
ИмяПоляНомерСтроки = ирОбщий.ПеревестиСтроку("НомерСтроки");
ИмяПоляСсылка = ирОбщий.ПеревестиСтроку("Ссылка");
Если Подробно Тогда
мОписанияТиповПолей = Новый ТаблицаЗначений;
мОписанияТиповПолей.Колонки.Добавить("Имя");
мОписанияТиповПолей.Колонки.Добавить("ОписаниеТипов");
КонецЕсли;
Для Каждого СтандартныйРеквизит Из ОбъектМД.СтандартныеРеквизиты Цикл
Если СтандартныйРеквизит.Имя = ИмяПоляСсылка Тогда
Продолжить;
КонецЕсли;
СтрокаПоля = ТаблицаПолей.Добавить();
СтрокаПоля.ИмяПоля = СтандартныйРеквизит.Имя;
СтрокаПоля.ПредставлениеПоля = СтандартныйРеквизит.Представление();
СтрокаПоля.ИспользованиеВМетаданных = СтандартныйРеквизит.ИсторияДанных = ИспользованиеИсторииДанныхИспользовать;
СтрокаПоля.Использование = СтрокаПоля.ИспользованиеВМетаданных;
СтрокаПоля.ТипПоля = 1;
Если ИспользованиеПолейНастроекИстории <> Неопределено И ИспользованиеПолейНастроекИстории[СтрокаПоля.ИмяПоля] <> Неопределено Тогда
СтрокаПоля.Использование = ИспользованиеПолейНастроекИстории[СтрокаПоля.ИмяПоля];
КонецЕсли;
Если Подробно Тогда
СтрокаОписанияТипов = мОписанияТиповПолей.Добавить();
СтрокаОписанияТипов.Имя = СтрокаПоля.ИмяПоля;
СтрокаОписанияТипов.ОписаниеТипов = СтандартныйРеквизит.Тип;
СтрокаПоля.ОписаниеТипов = ирОбщий.РасширенноеПредставлениеЗначенияЛкс(СтрокаОписанияТипов.ОписаниеТипов);
КонецЕсли;
КонецЦикла;
ТабличныеЧасти = ирОбщий.ТабличныеЧастиОбъектаЛкс(ОбъектМД);
#Если Сервер И Не Сервер Тогда
ТабличныеЧасти = Новый Структура;
#КонецЕсли
ТабличныеЧасти.Вставить("_", ОбъектМД);
ИмяТаблицыБД = ирОбщий.ИмяТаблицыИзМетаданныхЛкс(ОбъектМД);
Для Каждого ОписаниеТЧ Из ТабличныеЧасти Цикл
Если ОписаниеТЧ.Ключ = "_" Тогда
ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ИмяТаблицыБД);
Иначе
ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ИмяТаблицыБД + "." + ОписаниеТЧ.Ключ);
КонецЕсли;
Если ПоляТаблицыБД = Неопределено Тогда
Продолжить;
КонецЕсли;
Для Каждого СтрокаПоляБД Из ПоляТаблицыБД Цикл
ИмяПоля = СтрокаПоляБД.Имя;
ПредставлениеПоля = СтрокаПоляБД.Заголовок;
Если ОписаниеТЧ.Ключ = "_" Тогда
Если Ложь
Или ТаблицаПолей.Найти(ИмяПоля, "ИмяПоля") <> Неопределено
Или ИмяПоля = ИмяПоляСсылка
Или ИмяПоля = ИмяПоляВерсияДанных
Или СтрокаПоляБД.ТипЗначения.СодержитТип(Тип("ТаблицаЗначений"))
Тогда
Продолжить;
КонецЕсли;
ТипПоля = 2;
Иначе
Если Ложь
Или ИмяПоля = ИмяПоляСсылка
Или ИмяПоля = ИмяПоляНомерСтроки
Тогда
Продолжить;
КонецЕсли;
ИмяПоля = ОписаниеТЧ.Ключ + "." + ИмяПоля;
ПредставлениеПоля = ОписаниеТЧ.Значение + "." + ПредставлениеПоля;
ТипПоля = 3;
КонецЕсли;
СтрокаПоля = ТаблицаПолей.Добавить();
СтрокаПоля.ИмяПоля = ИмяПоля;
СтрокаПоля.ПредставлениеПоля = ПредставлениеПоля;
МетаданныеПоля = СтрокаПоляБД.Метаданные;
Если МетаданныеПоля <> Неопределено Тогда
СтрокаПоля.ИспользованиеВМетаданных = МетаданныеПоля.ИсторияДанных = ИспользованиеИсторииДанныхИспользовать;
КонецЕсли;
СтрокаПоля.Использование = СтрокаПоля.ИспользованиеВМетаданных;
СтрокаПоля.ТипПоля = ТипПоля;
Если ИспользованиеПолейНастроекИстории <> Неопределено И ИспользованиеПолейНастроекИстории[ИмяПоля] <> Неопределено Тогда
СтрокаПоля.Использование = ИспользованиеПолейНастроекИстории[ИмяПоля];
КонецЕсли;
Если Подробно Тогда
СтрокаОписанияТипов = мОписанияТиповПолей.Добавить();
СтрокаОписанияТипов.Имя = СтрокаПоля.ИмяПоля;
СтрокаОписанияТипов.ОписаниеТипов = СтрокаПоляБД.ТипЗначения;
СтрокаПоля.ОписаниеТипов = ирОбщий.РасширенноеПредставлениеЗначенияЛкс(СтрокаОписанияТипов.ОписаниеТипов);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ТаблицаПолей.Сортировать("ТипПоля, ИмяПоля");
Возврат ТаблицаПолей;
КонецФункции
Функция ПредставлениеПолей(ТаблицаПолей, Использование)
#Если Сервер И Не Сервер Тогда
ТаблицаПолей = Поля;
#КонецЕсли
Результат = Новый ЗаписьXML;
Результат.УстановитьСтроку("");
ВыбранныеПоля = ТаблицаПолей.НайтиСтроки(Новый Структура("Использование", Использование));
Если ВыбранныеПоля.Количество() > 0 Тогда
Результат.ЗаписатьБезОбработки("" + ВыбранныеПоля.Количество() + ": ");
ЭтоПервоеПоле = Истина;
Для Каждого СтрокаПоля Из ВыбранныеПоля Цикл
#Если Сервер И Не Сервер Тогда
СтрокаПоля = ТаблицаПолей.Добавить();
#КонецЕсли
Если Не ЭтоПервоеПоле Тогда
Результат.ЗаписатьБезОбработки(", ");
КонецЕсли;
Результат.ЗаписатьБезОбработки(СтрокаПоля.ИмяПоля);
ЭтоПервоеПоле = Ложь;
КонецЦикла;
КонецЕсли;
Результат = Результат.Закрыть();
Возврат Результат;
КонецФункции
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный ирПортативный.Открыть();
//ирПортативный КонецЕсли;
//ирПортативный #Иначе
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
мПлатформа = ирКэш.Получить();