//ирПортативный Перем ирПортативный Экспорт; //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; //ирПортативный Перем ирКлиент Экспорт; Перем мПлатформа Экспорт; Функция РеквизитыДляСервера(Параметры) Экспорт Результат = ирОбщий.РеквизитыОбработкиЛкс(ЭтотОбъект); Возврат Результат; КонецФункции Функция ЗаполнитьТаблицуКолонок(Параметры) Экспорт #Если Сервер И Не Сервер Тогда мПлатформа = Обработки.ирПлатформа.Создать(); #КонецЕсли ПолноеИмяТаблицыБД = Параметры.ПолноеИмяТаблицыБД; ЭтаФорма = Параметры.ЭтаФорма; Результат = Новый Структура; _РежимОтладки = ирКэш.РежимОтладкиЛкс(); Если КолонкиБД.Количество() = 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"; //ирПортативный #Если Клиент Тогда //ирПортативный Контейнер = Новый Структура(); //ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер); //ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда //ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля); //ирПортативный ирПортативный.Открыть(); //ирПортативный КонецЕсли; //ирПортативный #Иначе //ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта //ирПортативный #КонецЕсли //ирПортативный ирОбщий = ирПортативный.ОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ОбщийМодульЛкс("ирСервер"); //ирПортативный ирКлиент = ирПортативный.ОбщийМодульЛкс("ирКлиент"); мПлатформа = ирКэш.Получить();