|
Попробуй так, но должна быть компоненнта compound.dll: Функция глДатьСписокПользователей(usr_файл = "",tmp_файл = "") Экспорт
//ИмяПользователя //ПолноеИмяПользователя //ДиректорияПользователя //ИнтерфейсПользователя //ПраваПользователя тз = СоздатьОбъект("ТаблицаЗначений"); тз.НоваяКолонка("ИмяПользователя","Строка"); тз.НоваяКолонка("ПолноеИмяПользователя","Строка"); тз.НоваяКолонка("ДиректорияПользователя","Строка"); тз.НоваяКолонка("ИнтерфейсПользователя","Строка"); тз.НоваяКолонка("ПраваПользователя","Строка"); Если usr_файл = "" Тогда usr_файл = КаталогИБ()+"usrdef\users.usr"; КонецЕсли; УдалятьВременныйФайл = 0; Если tmp_файл = "" Тогда стр = КаталогПользователя()+"tmp"; //Сообщить(стр); //Если ФС.Существуетфайл(ВремПуть + "\NUL") = 0 Тогда Если ФС.Существуетфайл(стр) = 0 Тогда ФС.СоздатьКаталог(стр); КонецЕсли; Гуид = СоздатьОбъект("Guid"); Гуид.Новый(); tmp_файл = стр + "\"+Гуид.ВСтроку()+".txt"; УдалятьВременныйФайл = 1; КонецЕсли; Попытка Объект = СоздатьОбъект("Amber.Compound"); Исключение Попытка Если ЗагрузитьВнешнююКомпоненту("compound.dll") = 1 Тогда Объект = СоздатьОбъект("Amber.Compound"); Иначе Сообщить("Не найден файл compound.dll"); Возврат тз; КонецЕсли; Исключение Сообщить("Не удалось создать объект Amber.Compound"); Возврат тз; КонецПопытки; КонецПопытки; обФСО = Создатьобъект("Scripting.FileSystemObject");
Рез = Объект.Stream2file(usr_файл, "Container.Contents", tmp_файл, 0); Если Рез <> 0 Тогда Сообщить("Ошибка Compound №"+Рез); Возврат СоздатьОбъект("ТаблицаЗначений"); КонецЕсли; обФайл = обФСО.OpenTextFile(tmp_файл,1,0,0); стр = обФайл.ReadLine(); стр = Сред(стр,23,СтрДлина(стр)-23); Стр = СтрЗаменить(стр,"},{","}"+РазделительСтрок+"{"); Стр = СтрЗаменить(стр,"{""UserItemType"",""",""); Стр = СтрЗаменить(стр,""",""""}",""); Стр = СтрЗаменить(стр,""",""",","); Стр = СтрЗаменить(стр,"}",""); Для сч = 1 По СтрКоличествоСтрок(стр) Цикл времстр = СтрПолучитьСтроку(стр,сч); поз = Найти(времстр,","); иф = Лев(времстр,поз-1); тз.НоваяСтрока(); тз.ИмяПользователя = Сред(времстр,поз+1);
Рез = Объект.Stream2file(usr_файл, иф, tmp_файл, 0); Если Рез <> 0 Тогда Сообщить("Ошибка Compound №"+Рез); Продолжить;; КонецЕсли; ПолноеИмя_ = ""; Путь_ = ""; Интерфейс_ = ""; Права_ = ""; обФайл = обФСО.OpenTextFile(tmp_файл,1,0,0); //пропустим шапку обФайл.Read(8); стрСимвол = обФайл.Read(1); Если КодСимв(стрСимвол) = 32 Тогда //есть пароль обФайл.Read(33); //вычитываем хэш пароля (32 символа + разделитель) Иначе //нет пароля обФайл.Read(4); //233 + разделитель КонецЕсли; пока обФайл.AtEndOfStream = 0 цикл стрСимвол = обФайл.Read(1); если кодсимв(стрСимвол) > 31 тогда ПолноеИмя_ = ПолноеИмя_ + стрСимвол; Иначе Прервать; конецесли; конеццикла; пока обФайл.AtEndOfStream = 0 цикл стрСимвол = обФайл.Read(1); если кодсимв(стрСимвол) > 31 тогда Путь_ = Путь_ + стрСимвол; Иначе Прервать; конецесли; конеццикла; флаг = 0; пока обФайл.AtEndOfStream = 0 цикл стрСимвол = обФайл.Read(1); если кодсимв(стрСимвол) > 31 тогда Флаг = 1; Интерфейс_ = Интерфейс_ + стрСимвол; ИначеЕсли Флаг = 1 Тогда Прервать; конецесли; конеццикла; флаг = 0; пока обФайл.AtEndOfStream = 0 цикл стрСимвол = обФайл.Read(1); если кодсимв(стрСимвол) > 31 тогда Флаг = 1; Права_ = Права_ + стрСимвол; ИначеЕсли Флаг = 1 Тогда Прервать; конецесли; конеццикла; тз.ПолноеИмяПользователя = ПолноеИмя_; тз.ДиректорияПользователя = Путь_; тз.ИнтерфейсПользователя = Интерфейс_; тз.ПраваПользователя = Права_; КонецЦикла;
Если УдалятьВременныйФайл = 1 Тогда ФС.УдалитьФайл(tmp_файл); КонецЕсли; Возврат тз; КонецФункции
|