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

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

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

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

