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