Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Список пользователей 1с 7.7 (число прочтений - 21585 )
alehander
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 18. Декабря 2008
Список пользователей 1с 7.7
26. Декабря 2008 :: 06:18
Печать  
Доброго времени суток. Если вопрос не в тот раздел то переместите его пожалуйста
Как можно получить список пользователей в 1с с их правами, путями к папке итд? Находил в сети ссылки на 3 архива но архивы битые
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Список пользователей 1с 7.7
Ответ #1 - 26. Декабря 2008 :: 07:11
Печать  
Попробуй так, но должна быть компоненнта 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_файл);
     КонецЕсли;
     
     Возврат тз;
КонецФункции
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Список пользователей 1с 7.7
Ответ #2 - 26. Декабря 2008 :: 07:54
Печать  
а есть готовые процедуры по управлению списком (операции: добавить, изменить, удалить)?
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
alehander
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 18. Декабря 2008
Re: Список пользователей 1с 7.7
Ответ #3 - 26. Декабря 2008 :: 07:55
Печать  
Гуид = СоздатьОбъект("Guid");
Неудачная попытка создания объекта (Guid)
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Список пользователей 1с 7.7
Ответ #4 - 26. Декабря 2008 :: 08:56
Печать  
alehander писал(а) 26. Декабря 2008 :: 07:55:
Гуид = СоздатьОбъект("Guid");
Неудачная попытка создания объекта (Guid)


Надо подключить еще 1с++:
ЗагрузитьВнешнююКомпоненту("1CPP.dll");

либо можно пользовать родную:

ЗагрузитьВнешнююКомпоненту("V7Plus.dll");
V7SysInfo = СоздатьОбъект("AddIn.V7SysInfo");
Гуид = V7SysInfo.CreateGUID();

а можно вообще с этим не заморачиваться а использовать заранее заготовленное имя файла. Но тогда есть возможность перехлестнуться нескольким пользователям если у них не назначен каталог.
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Список пользователей 1с 7.7
Ответ #5 - 26. Декабря 2008 :: 08:58
Печать  
Phoenix писал(а) 26. Декабря 2008 :: 07:54:
а есть готовые процедуры по управлению списком (операции: добавить, изменить, удалить)?

нет, не задумывался над этим даже... а думаешь можно вот так вот запросто в этом файлике хозяйничать? наверно стоит попробовать...
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Список пользователей 1с 7.7
Ответ #6 - 26. Декабря 2008 :: 09:59
Печать  
Есть ВК которая это делает
но с ней часто бывают проблемы.
у нас 6000 записей в списке, родными средствами с этим работать фактически невозможно.
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
alehander
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 18. Декабря 2008
Re: Список пользователей 1с 7.7
Ответ #7 - 26. Декабря 2008 :: 10:00
Печать  
Phoenix писал(а) 26. Декабря 2008 :: 09:59:
Есть ВК которая это делает
но с ней часто бывают проблемы.
у нас 6000 записей в списке, родными средствами с этим работать фактически невозможно.

поясните пожалуйста
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Список пользователей 1с 7.7
Ответ #8 - 26. Декабря 2008 :: 10:54
Печать  
Нередко виснет намертво при изменении данных в файле.
Позавчера, например, вообще users.usr сдох при записи.
При записи бывает очищает файл с настройками скл соединения.
это из основного, что мне сказали админы.
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
novichek
Экс-Участник


Re: Список пользователей 1с 7.7
Ответ #9 - 26. Декабря 2008 :: 10:59
Печать  
Phoenix писал(а) 26. Декабря 2008 :: 09:59:
Есть ВК которая это делает
но с ней часто бывают проблемы.
у нас 6000 записей в списке, родными средствами с этим работать фактически невозможно.


о как! а зачем пожет понадобится 6000 пользователей?!
опиши конкретней что нужно, и, если тебе самому лень разбираться, может набросаю чего Улыбка . сразу оговорюсь, что с паролем скорее всего не получится.

ЗЫ: а используешь не UsersDef.dll случаем?
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Список пользователей 1с 7.7
Ответ #10 - 26. Декабря 2008 :: 11:13
Печать  
Цитата:
Phoenix писал(а) 26. Декабря 2008 :: 09:59:
Есть ВК которая это делает
но с ней часто бывают проблемы.
у нас 6000 записей в списке, родными средствами с этим работать фактически невозможно.


о как! а зачем пожет понадобится 6000 пользователей?!
опиши конкретней что нужно, и, если тебе самому лень разбираться, может набросаю чего Улыбка . сразу оговорюсь, что с паролем скорее всего не получится.

ЗЫ: а используешь не UsersDef.dll случаем?


ее используют.
у нас столько пользователей в БД, онлайн 1200.
а чего нужно: возможность добавлять пользователя, удалять, изменять.
никаких паролей пользователей нет.
соответственно используются: Имя, ПолноеИмя, интерфейс, наборПрав.

чуть что погонять на больших объемах - всегда пожалуйста.
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
novichek
Экс-Участник


Re: Список пользователей 1с 7.7
Ответ #11 - 26. Декабря 2008 :: 11:25
Печать  
Насколько я понимаю, максимум мы получим тот же функционал что и в вышеуказанной ДЛЛ. А чтобы ничего не падало надо проверять на существование открытого конфигуратора текущей конфы, и если он открыт, запрещать изменения.

Ноги, видимо, растут оттуда же что и в: http://www.1cpp.ru/forum/YaBB.pl?num=1185425540

Так что глянь, а то может и не стоит затевать изобретение велосипеда?

ЗЫ: а с паролем тоже можно сделать через формекс Улыбка
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Список пользователей 1с 7.7
Ответ #12 - 26. Декабря 2008 :: 11:32
Печать  
сейчас так проверки и сделаны.
глянул ветку, да похоже на наше.
хочется чей-то более быстрое Улыбка
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
novichek
Экс-Участник


Re: Список пользователей 1с 7.7
Ответ #13 - 26. Декабря 2008 :: 11:55
Печать  
скинь, как сейчас сделана проверка на "запущенность" конфигуратора, а я попробую сейчас вычитывание переработать, да подправить, и скину - сравнишь по скорости (есть смысл дальше пробовать или нет)
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Список пользователей 1с 7.7
Ответ #14 - 26. Декабря 2008 :: 12:10
Печать  
Код
Выбрать все
Функция Подключения()
	ТЗподключения = СоздатьОбъект("ТаблицаЗначений");
    ТЗ=ОбъектВК.АктивныеПодключения();
	ТЗ.Выгрузить(ТЗподключения);
	Стр = 0;

	СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
	Если ТЗподключения.НайтиЗначение("К",Стр,"Режим") = 1 Тогда
		Сообщить("Открыт конфигуратор! ");
		Логин = ТЗподключения.ПолучитьЗначение(Стр,"Имя");
		Сообщить("Логин: "+Логин);
		Сообщить("Компьютер: "+ТЗподключения.ПолучитьЗначение(Стр,"Компьютер"));
		//найдем доп инфу в спр.сотрудники
		Если СпрСотр.НайтиПоРеквизиту("УдалДост",Логин,1) = 1 Тогда
			Сообщить("Имя: "+СпрСотр.Код);
			Сообщить("Телефон: "+СпрСотр.Мест);
		КонецЕсли;
		Возврат 0;
	КонецЕсли;
	Возврат 1;
КонецФункции 

  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать