//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирКлиент Экспорт;
Перем мПлатформа Экспорт;

Функция РеквизитыДляСервера(Параметры) Экспорт  
	
	Результат = ирОбщий.РеквизитыОбработкиЛкс(ЭтотОбъект);
	Возврат Результат;
	
КонецФункции

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

мПлатформа = ирКэш.Получить();

