RDT1C/DataProcessors/ирКолонкиБД/Ext/ObjectModule.bsl
Администратор 81ca30a507 .
2021-04-04 23:59:29 +03:00

120 lines
11 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.

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