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