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

Процедура ПрочитатьНастройкиКолонокИзТабличногоПоля(Знач ТабличноеПоле) Экспорт 
	
	#Если Сервер И Не Сервер Тогда
		ТабличноеПоле = Новый ТабличноеПоле;
	#КонецЕсли
	НастройкиКолонок.Очистить(); 
	Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл
		ОписаниеКолонки = НастройкиКолонок.Добавить();
		ЗаполнитьЗначенияСвойств(ОписаниеКолонки, КолонкаТП,, "Положение"); 
		ОписаниеКолонки.Заголовок = КолонкаТП.ТекстШапки;
		Если Не ЗначениеЗаполнено(ОписаниеКолонки.Заголовок) Тогда
			ОписаниеКолонки.Заголовок = "<" + ОписаниеКолонки.Имя + ">";
		КонецЕсли;
		ОписаниеКолонки.Положение = ирОбщий.ПоследнийФрагментЛкс(ПолучитьПолноеИмяПредопределенногоЗначения(КолонкаТП.Положение));
		ОписаниеКолонки.ВидимостьРазрешено = КолонкаТП.ИзменятьВидимость;
	КонецЦикла;

КонецПроцедуры

Процедура ПрименитьНастройкиКолонокКТабличномуПолю(ТабличноеПоле, Знач ВыбранноеЗначение = Неопределено, Знач ПрименятьПорядок = Истина) Экспорт 
	
	Если ВыбранноеЗначение <> Неопределено Тогда
		#Если Сервер И Не Сервер Тогда
		    ВыбранноеЗначение = Новый Структура;
		#КонецЕсли
		Если ВыбранноеЗначение.Свойство("НастройкиКолонок") Тогда
			Если ВыбранноеЗначение.ПрименятьПорядок Тогда
				НастройкиКолонок.Загрузить(ВыбранноеЗначение.НастройкиКолонок);
			Иначе
				Для Каждого СтрокаКолонки Из НастройкиКолонок Цикл
					СтрокаНастройки = ВыбранноеЗначение.НастройкиКолонок.Найти(СтрокаКолонки.Имя, "Имя");
					ЗаполнитьЗначенияСвойств(СтрокаКолонки, СтрокаНастройки,, "Имя"); 
				КонецЦикла;
			КонецЕсли; 
		КонецЕсли; 
	КонецЕсли;
	НачальноеКоличество = НастройкиКолонок.Количество(); 
	КолонкиТП = ТабличноеПоле.Колонки;
	Для Счетчик = 1 По НачальноеКоличество Цикл
		ОписаниеКолонки = НастройкиКолонок[НачальноеКоличество - Счетчик];
		КолонкаТП = КолонкиТП.Найти(ОписаниеКолонки.Имя);
		Если КолонкаТП <> Неопределено Тогда
			Если ПрименятьПорядок Тогда
				КолонкиТП.Сдвинуть(КолонкаТП, -КолонкиТП.Индекс(КолонкаТП));
			КонецЕсли;
			ЗаполнитьЗначенияСвойств(КолонкаТП, ОписаниеКолонки,, "Имя, ВысотаЯчейки, Положение");
			КолонкаТП.ВысотаЯчейки = Макс(1, ОписаниеКолонки.ВысотаЯчейки);
		КонецЕсли; 
	КонецЦикла; 
	Если ПрименятьПорядок Тогда
		// Второй проход для установки положения колонок. Иначе свойство "Положение" колонки не будет изменяться
		Для Каждого ОписаниеКолонки Из НастройкиКолонок Цикл
			КолонкаТП = КолонкиТП.Найти(ОписаниеКолонки.Имя);
			Если КолонкаТП <> Неопределено Тогда
				#Если Клиент Тогда
					Если ТипЗнч(КолонкаТП) = Тип("КолонкаТабличногоПоля") И ЗначениеЗаполнено(ОписаниеКолонки.Положение) Тогда
						КолонкаТП.Положение = ПредопределенноеЗначение("ПоложениеКолонки." + ОписаниеКолонки.Положение);
						Если ОписаниеКолонки.Положение = "НаСледующейСтроке" Тогда
							КолонкаТП.Положение = ПоложениеКолонки.НаСледующейСтроке;
						КонецЕсли; 
					КонецЕсли; 
				#КонецЕсли 
			КонецЕсли; 
		КонецЦикла;
		// Колонку НомерСтроки оставляем первой слева
		КолонкаНомераСтроки = КолонкиТП.Найти(ирОбщий.ИмяКолонкиНомерСтрокиЛкс());
		Если КолонкаНомераСтроки <> Неопределено Тогда
			КолонкиТП.Сдвинуть(КолонкаНомераСтроки, -КолонкиТП.Индекс(КолонкаНомераСтроки));
		КонецЕсли; 
	КонецЕсли;

КонецПроцедуры

//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный 	Контейнер = Новый Структура();
//ирПортативный 	Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный 	Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный 		ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный 		ирПортативный.Открыть();
//ирПортативный 	КонецЕсли; 
//ирПортативный #Иначе
//ирПортативный 	ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ОбщийМодульЛкс("ирСервер");
//ирПортативный ирКлиент = ирПортативный.ОбщийМодульЛкс("ирКлиент");
