//******************************************************************************
// глСписокИзФайлаИНИ(Знач Файл, Знач ИспользоватьНРег=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,НРег(ЗагРаздела),ЗагРаздела));
КонецЕсли;
Возврат Сп;
КонецФункции // глСписокИзФайлаИНИ()
Вроде функция самодостаточная... Но если вдруг чего другого потребует - пиши...