mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 05:04:11 +00:00
139 lines
18 KiB
Plaintext
139 lines
18 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирКлиент Экспорт;
|
||
Перем мПлатформа Экспорт;
|
||
|
||
Функция РеквизитыДляСервера(Параметры) Экспорт
|
||
|
||
Результат = ирОбщий.РеквизитыОбработкиЛкс(ЭтотОбъект);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЗаполнитьТаблицуКолонок(Параметры) Экспорт
|
||
#Если Сервер И Не Сервер Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
ПолноеИмяТаблицыБД = Параметры.ПолноеИмяТаблицыБД;
|
||
ЭтаФорма = Параметры.ЭтаФорма;
|
||
Результат = Новый Структура;
|
||
_РежимОтладки = ирКэш.РежимОтладкиЛкс();
|
||
Если КолонкиБД.Количество() = 0 Тогда
|
||
Если ЭтаФорма <> Неопределено Тогда
|
||
ЭтаФорма.ПодключитьОбработчикОжидания("ОчиститьКолонкиБД", 0.1, Истина);
|
||
КонецЕсли;
|
||
ТаблицаВсехТаблицБД = ирКэш.ТаблицаВсехТаблицБДЛкс();
|
||
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТаблицаВсехТаблицБД.Количество(), "Анализ метаданных колонок БД");
|
||
Для Каждого ОписаниеТаблицы Из ТаблицаВсехТаблицБД Цикл
|
||
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
|
||
Если Ложь
|
||
Или ирОбщий.ЛиКорневойТипКритерияОтбораЛкс(ОписаниеТаблицы.Тип)
|
||
Или ОписаниеТаблицы.Тип = "ВиртуальнаяТаблица"
|
||
Или ОписаниеТаблицы.Тип = "Изменения"
|
||
Или ПолноеИмяТаблицыБД <> Неопределено И ОписаниеТаблицы.ПолноеИмя <> ПолноеИмяТаблицыБД
|
||
Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ОписаниеТаблицы.ПолноеИмя);
|
||
Если ПоляТаблицыБД = Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
#Если Сервер И Не Сервер Тогда
|
||
ПоляТаблицыБД = НайтиПоСсылкам().Колонки;
|
||
#КонецЕсли
|
||
// Ускорено 5.3с->2.3с
|
||
Если _РежимОтладки Тогда // Можно менять на Истина в точке останова, например условием ирОбщий.ПрЛкс(_РежимОтладки, 1, 1)
|
||
// Пассивный оригинал расположенного ниже однострочного кода. Выполняйте изменения синхронно в обоих вариантах.
|
||
Для Каждого ПолеТаблицыБД Из ПоляТаблицыБД Цикл
|
||
ТипЗначения = ПолеТаблицыБД.ТипЗначения;
|
||
Если Ложь
|
||
Или ТипЗначения.СодержитТип(Тип("ТаблицаЗначений"))
|
||
Или (Истина
|
||
И Не УчитыватьВсеКолонкиТаблицИзменений
|
||
И ОписаниеТаблицы.Тип = "Изменения"
|
||
И Не ирОбщий.СтрокиРавныЛкс(ПолеТаблицыБД.Имя, "Узел"))
|
||
Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтрокаКолонкиБД = КолонкиБД.Добавить();
|
||
СтрокаКолонкиБД.КоличествоСтрокНайдено = "?";
|
||
СтрокаКолонкиБД.ТипТаблицы = ОписаниеТаблицы.Тип;
|
||
СтрокаКолонкиБД.ИмяТаблицы = ОписаниеТаблицы.Имя;
|
||
СтрокаКолонкиБД.ПолноеИмяТаблицы = ОписаниеТаблицы.ПолноеИмя;
|
||
СтрокаКолонкиБД.ПредставлениеТаблицы = ОписаниеТаблицы.Представление;
|
||
СтрокаКолонкиБД.ИмяКолонки = ПолеТаблицыБД.Имя;
|
||
СтрокаКолонкиБД.ПредставлениеКолонки = ПолеТаблицыБД.Заголовок;
|
||
СтрокаКолонкиБД.ЕстьДоступ = ОписаниеТаблицы.ЕстьДоступ;
|
||
СтрокаКолонкиБД.КоличествоСтрокВТаблице = ОписаниеТаблицы.КоличествоСтрок;
|
||
СтрокаКолонкиБД.КоличествоТипов = ТипЗначения.Типы().Количество();
|
||
СтрокаКолонкиБД.ТипБулевоЕсть = ТипЗначения.СодержитТип(Тип("Булево"));
|
||
СтрокаКолонкиБД.ТипУникальныйИдентификаторЕсть = ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор"));
|
||
СтрокаКолонкиБД.ТипХранилищеЗначенияЕсть = ТипЗначения.СодержитТип(Тип("ХранилищеЗначения"));
|
||
СтрокаКолонкиБД.ТипСтрокаЕсть = ТипЗначения.СодержитТип(Тип("Строка"));
|
||
Если СтрокаКолонкиБД.ТипСтрокаЕсть Тогда
|
||
СтрокаКолонкиБД.ТипСтрокаДлина = ТипЗначения.КвалификаторыСтроки.Длина;
|
||
СтрокаКолонкиБД.ТипСтрокаФиксированнаяДлина = ТипЗначения.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Фиксированная;
|
||
КонецЕсли;
|
||
СтрокаКолонкиБД.ТипЧислоЕсть = ТипЗначения.СодержитТип(Тип("Число"));
|
||
Если СтрокаКолонкиБД.ТипЧислоЕсть Тогда
|
||
СтрокаКолонкиБД.ТипЧислоРазрядность = ТипЗначения.КвалификаторыЧисла.Разрядность;
|
||
СтрокаКолонкиБД.ТипЧислоРазрядностьДробнойЧасти = ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти;
|
||
КонецЕсли;
|
||
СтрокаКолонкиБД.ТипДатаЕсть = ТипЗначения.СодержитТип(Тип("Дата"));
|
||
Если СтрокаКолонкиБД.ТипДатаЕсть Тогда
|
||
СтрокаКолонкиБД.ТипДатаЧастьДата = ТипЗначения.КвалификаторыДаты.ЧастиДаты <> ЧастиДаты.Время;
|
||
СтрокаКолонкиБД.ТипДатаЧастьВремя = ТипЗначения.КвалификаторыДаты.ЧастиДаты <> ЧастиДаты.Дата;
|
||
КонецЕсли;
|
||
СтрокаКолонкиБД.ТипНеопределеноЕсть = СтрокаКолонкиБД.КоличествоТипов > 1;
|
||
Если ПолеТаблицыБД.Метаданные <> Неопределено Тогда
|
||
Попытка
|
||
СтрокаКолонкиБД.ПодсказкаКолонки = ПолеТаблицыБД.Метаданные.Подсказка;
|
||
Исключение
|
||
// тип таблицы БД "Перерасчет"
|
||
КонецПопытки;
|
||
СтрокаКолонкиБД.РольМетаданных = ирОбщий.РольПоляБДЛкс(ПолеТаблицыБД.Метаданные);
|
||
КонецЕсли;
|
||
СтрокаКолонкиБД.ПолноеИмяКолонки = СтрокаКолонкиБД.ПолноеИмяТаблицы + "." + СтрокаКолонкиБД.ИмяКолонки;
|
||
СтрокаКолонкиБД.КоличествоСсылочныхТипов = СтрокаКолонкиБД.КоличествоТипов - ?(СтрокаКолонкиБД.ТипБулевоЕсть, 1, 0) - ?(СтрокаКолонкиБД.ТипДатаЕсть, 1, 0)
|
||
- ?(СтрокаКолонкиБД.ТипСтрокаДлина, 1, 0) - ?(СтрокаКолонкиБД.ТипЧислоЕсть, 1, 0) - ?(СтрокаКолонкиБД.ТипУникальныйИдентификаторЕсть, 1, 0) - ?(СтрокаКолонкиБД.ТипХранилищеЗначенияЕсть, 1, 0);
|
||
//Если ОписаниеТаблицы.СтруктураКлюча <> Неопределено Тогда
|
||
// СтрокаКолонкиБД.Ключевая = ОписаниеТаблицы.СтруктураКлюча.Свойство(ПолеТаблицыБД.Имя);
|
||
//КонецЕсли;
|
||
КонецЦикла;
|
||
Иначе
|
||
// Однострочный код использован для ускорения. Выше расположен оригинал. Выполняйте изменения синхронно в обоих вариантах. Преобразовано консолью кода из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru)
|
||
Для Каждого ПолеТаблицыБД Из ПоляТаблицыБД Цикл ТипЗначения = ПолеТаблицыБД.ТипЗначения; Если Ложь Или ТипЗначения.СодержитТип(Тип("ТаблицаЗначений")) Или (Истина И Не УчитыватьВсеКолонкиТаблицИзменений И ОписаниеТаблицы.Тип = "Изменения" И Не ирОбщий.СтрокиРавныЛкс(ПолеТаблицыБД.Имя, "Узел")) Тогда Продолжить; КонецЕсли; СтрокаКолонкиБД = КолонкиБД.Добавить(); СтрокаКолонкиБД.КоличествоСтрокНайдено = "?"; СтрокаКолонкиБД.ТипТаблицы = ОписаниеТаблицы.Тип; СтрокаКолонкиБД.ИмяТаблицы = ОписаниеТаблицы.Имя; СтрокаКолонкиБД.ПолноеИмяТаблицы = ОписаниеТаблицы.ПолноеИмя; СтрокаКолонкиБД.ПредставлениеТаблицы = ОписаниеТаблицы.Представление; СтрокаКолонкиБД.ИмяКолонки = ПолеТаблицыБД.Имя; СтрокаКолонкиБД.ПредставлениеКолонки = ПолеТаблицыБД.Заголовок; СтрокаКолонкиБД.ЕстьДоступ = ОписаниеТаблицы.ЕстьДоступ; СтрокаКолонкиБД.КоличествоСтрокВТаблице = ОписаниеТаблицы.КоличествоСтрок; СтрокаКолонкиБД.КоличествоТипов = ТипЗначения.Типы().Количество(); СтрокаКолонкиБД.ТипБулевоЕсть = ТипЗначения.СодержитТип(Тип("Булево")); СтрокаКолонкиБД.ТипУникальныйИдентификаторЕсть = ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор")); СтрокаКолонкиБД.ТипХранилищеЗначенияЕсть = ТипЗначения.СодержитТип(Тип("ХранилищеЗначения")); СтрокаКолонкиБД.ТипСтрокаЕсть = ТипЗначения.СодержитТип(Тип("Строка")); Если СтрокаКолонкиБД.ТипСтрокаЕсть Тогда СтрокаКолонкиБД.ТипСтрокаДлина = ТипЗначения.КвалификаторыСтроки.Длина; СтрокаКолонкиБД.ТипСтрокаФиксированнаяДлина = ТипЗначения.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Фиксированная; КонецЕсли; СтрокаКолонкиБД.ТипЧислоЕсть = ТипЗначения.СодержитТип(Тип("Число")); Если СтрокаКолонкиБД.ТипЧислоЕсть Тогда СтрокаКолонкиБД.ТипЧислоРазрядность = ТипЗначения.КвалификаторыЧисла.Разрядность; СтрокаКолонкиБД.ТипЧислоРазрядностьДробнойЧасти = ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти; КонецЕсли; СтрокаКолонкиБД.ТипДатаЕсть = ТипЗначения.СодержитТип(Тип("Дата")); Если СтрокаКолонкиБД.ТипДатаЕсть Тогда СтрокаКолонкиБД.ТипДатаЧастьДата = ТипЗначения.КвалификаторыДаты.ЧастиДаты <> ЧастиДаты.Время; СтрокаКолонкиБД.ТипДатаЧастьВремя = ТипЗначения.КвалификаторыДаты.ЧастиДаты <> ЧастиДаты.Дата; КонецЕсли; СтрокаКолонкиБД.ТипНеопределеноЕсть = СтрокаКолонкиБД.КоличествоТипов > 1; Если ПолеТаблицыБД.Метаданные <> Неопределено Тогда Попытка СтрокаКолонкиБД.ПодсказкаКолонки = ПолеТаблицыБД.Метаданные.Подсказка; Исключение КонецПопытки; СтрокаКолонкиБД.РольМетаданных = ирОбщий.РольПоляБДЛкс(ПолеТаблицыБД.Метаданные); КонецЕсли; СтрокаКолонкиБД.ПолноеИмяКолонки = СтрокаКолонкиБД.ПолноеИмяТаблицы + "." + СтрокаКолонкиБД.ИмяКолонки; СтрокаКолонкиБД.КоличествоСсылочныхТипов = СтрокаКолонкиБД.КоличествоТипов - ?(СтрокаКолонкиБД.ТипБулевоЕсть, 1, 0) - ?(СтрокаКолонкиБД.ТипДатаЕсть, 1, 0) - ?(СтрокаКолонкиБД.ТипСтрокаДлина, 1, 0) - ?(СтрокаКолонкиБД.ТипЧислоЕсть, 1, 0) - ?(СтрокаКолонкиБД.ТипУникальныйИдентификаторЕсть, 1, 0) - ?(СтрокаКолонкиБД.ТипХранилищеЗначенияЕсть, 1, 0); КонецЦикла;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
Если ЭтаФорма <> Неопределено Тогда
|
||
ЭтаФорма.ОтключитьОбработчикОжидания("ОчиститьКолонкиБД");
|
||
Иначе
|
||
Результат.Вставить("КолонкиБД", КолонкиБД.Выгрузить());
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
|
||
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
|
||
//ирПортативный #Если Клиент Тогда
|
||
//ирПортативный Контейнер = Новый Структура();
|
||
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
|
||
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
|
||
//ирПортативный ирПортативный.Открыть();
|
||
//ирПортативный КонецЕсли;
|
||
//ирПортативный #Иначе
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
|
||
//ирПортативный #КонецЕсли
|
||
//ирПортативный ирОбщий = ирПортативный.ОбщийМодульЛкс("ирОбщий");
|
||
//ирПортативный ирКэш = ирПортативный.ОбщийМодульЛкс("ирКэш");
|
||
//ирПортативный ирСервер = ирПортативный.ОбщийМодульЛкс("ирСервер");
|
||
//ирПортативный ирКлиент = ирПортативный.ОбщийМодульЛкс("ирКлиент");
|
||
|
||
мПлатформа = ирКэш.Получить();
|
||
|