Имя: Пароль:
1C
1C 7.7
v7: Перебор пользователей
0 vladimirpetrov11
 
12.04.12
13:29
Привет всем! Как программно перебрать список пользователей, заведенных в системе? (1Cv7)
1 zak555
 
12.04.12
13:30
конфа ?
2 povar
 
12.04.12
13:31
admin.dll
3 vladimirpetrov11
 
12.04.12
13:35
мне нужно написать код, чтобы при вводе в таблицу по нажатию кнопки вылетал список пользователей, которые есть в программе
4 vladimirpetrov11
 
12.04.12
13:35
как то через метаданные вытянуть может...
5 povar
 
12.04.12
13:36
(4) у вас пользователи в метаданных ?
6 Torquader
 
12.04.12
13:42
Пользователи живут в файле userdef.usr и только там их можно найти.
Другое дело, что почти в любой конфигурации есть справочник пользователи, чтобы проставлять, например, автора документа.
7 zak555
 
12.04.12
13:43
автору осталось объяснить зачем ему изврат данный
8 vladimirpetrov11
 
12.04.12
13:44
(6)Вооот им как же вытащить их из файла userdef.usr программно??
9 FN
 
12.04.12
13:45
FSO=createobject("Scripting.FileSystemObject");
   WshShell = CreateObject("WScript.Shell");
   Txt=FSO.OpenTextFile(КаталогИБ()+"usrdef\users.usr");
   LineUser="";
   ChI=0;
   Пока Txt.AtEndOfStream=0 Цикл
       Chi=Chi+1;
       Buf=Txt.Read(1);
       Если КодСимв(Buf)>31 Тогда
           LineUser=LineUser+Buf;
       КонецЕсли;
   КонецЦикла;
   LineBof="{"+chr(34)+"Container.Contents"+chr(34)+",";
   LineUser=Сред(LineUser,Найти(LineUser,LineBof)+23);
   LineUser=Сред(LineUser,1,Найти(LineUser,"}}"));
   LineUser=СтрЗаменить(LineUser,РазделительСтрок," ");
   LineUser=СтрЗаменить(LineUser,"},{",РазделительСтрок);
   Для к=1 По СтрКоличествоСтрок(LineUser) Цикл
       а=СтрЗаменить(СтрПолучитьСтроку(LineUser,к),Симв(34),"");
       а=СтрЗаменить(СтрПолучитьСтроку(LineUser,к),"}","");
       а=Сред(а,19);
       а=Сред(а,Найти(а,",")+1);
       а=Сред(а,1,Найти(а,",")-1);  
       а=СтрЗаменить(а,"""",""); // уберем кавычки
       ТЗПользователи.НоваяСтрока();
       ТЗПользователи.Пользователь = а;
   КонецЦикла;
10 povar
 
12.04.12
13:46
11 vladimirpetrov11
 
12.04.12
13:46
(7) Создаю справочник пользователей с паролями, который просматривать смогу только сам, чтоб заходить под ними и проверять
12 zak555
 
12.04.12
13:47
(11) смысл ?
13 povar
 
12.04.12
13:47
(11) попахивает бредятиной
14 Гость2
 
12.04.12
13:48
функция сзПолучитьПользователей(стрПутьКБазе)
   // Создаем список значений для возврата
   Ответ = создатьобъект("СписокЗначений");
   // Формируем полное имя файла, в котором 1С
   // хранит информацию о пользователях базы.
   стрИмяФайла = стрПутьКБазе + "\UsrDEF\Users.USR";
   // Проверим его наличие.
   если фс.СуществуетФайл(стрИмяФайла) > 0 тогда
       // Создаем объект FSO для работы с файлами.
       обФСО = создатьобъект("Scripting.FileSystemObject");
       // Открываем файл пользователей как текстовый.
       тхтФайл = обФСО.OpenTextFile(стрИмяФайла);
       // Инициализация первоначальных переменных
       // Загружаем в буфер(тестовую строку) информацию из файла.
       стрБуфер = "";
       чисПозиция = 0;
       // Перебеирать файл придеться посимвольно, так как 1С не совсеми
       // символами может работать коректно если они находяться в строке.
       пока тхтФайл.AtEndOfStream = 0 цикл
           // Получаем очередную позицию в файле.
           чисПозиция = чисПозиция + 1;
           // Получаем символ из данной позиции.
           стрСимв = тхтФайл.Read(1);
           // Если код символа больше 31
           если кодсимв(стрСимв) > 31 тогда
               // Тогда добавляем его к буферу.
               стрБуфер = стрБуфер + стрСимв;
           конецесли;
       конеццикла;
       // После формирования буфера начнем искать пользователей в нем.
       // Признаком для пользователя будет строка '{"UserItemType","Page.'
       стрПоиска = "{""UserItemType"",""Page.";
       // Получаем позицию первого пользователя.
       чисПозиция = найти(стрБуфер, стрПоиска);
       // Проверяем если в буфере нужная нам строка
       если чисПозиция > 0 тогда
           // Если есть, вырезаем из строки ненужную информацию.
           стрБуфер = сред(стрБуфер, чисПозиция);
           // Позиция после отрезания становиться в единицу
           чисПозиция = 1;
       конецесли;
       // В цикле получаем информацию о пользователях БД
       пока чисПозиция > 0 цикл
           // Удаляем из буфера 'мусор'
           стрБуфер = сред(стрБуфер, чисПозиция + 22);
           // Находим признак начала информации об имени пользователя.
           чисСмещение = найти(стрБуфер, """,""") + 3;
           // Перемещаем начало буфера на начало информации об имени пользователя
           стрБуфер = сред(стрБуфер, чисСмещение);
           // Получаем имя пользователя
           стрИмяПользователя = лев(стрБуфер, найти(стрБуфер, """,""") - 1);
           // Добовляем имя к нашему списку.
           Ответ.ДобавитьЗначение(стрИмяПользователя);
           // Получаем очередную позицию информации о пользователе
           чисПозиция = найти(стрБуфер, стрПоиска);
       конеццикла;
   конецесли;
   // Возращаем полученный список значений
   возврат Ответ;
конецфункции
15 Mikeware
 
12.04.12
13:49
(13) Причем изысканой бредятиной...
наверняка 1986...
16 Санта Клаус
 
12.04.12
13:49
попахивает 86-ым..
17 vladimirpetrov11
 
12.04.12
13:53
Пользователей в системе дофига, и частенько нужно заходить под кем ниб, чтобы проверить как работает программа, что не так и т.п. А каждый раз искать бумажку с паролями или искать в файле excel их это как-то поднадоело.
Всем спасибо, кто посоветовал способы решения, а не просто зашел и тупо поржал*)
18 zak555
 
12.04.12
13:55
(17) > дофига


это сколько ?
19 Mikeware
 
12.04.12
13:55
а ведь я угадал....
20 Гость2
 
12.04.12
13:57
(18) Пять!
21 Mikeware
 
12.04.12
13:59
(20) не "пять" , а "оба" :-)
22 viktor_vv
 
12.04.12
14:00
(17) Ты это в рабочей базе собрался под ними заходить?
А если у них прописан каталог и этот пользователь в данный момент в программе ?
А если ты совершенно случайно под этим пользователем какую-нибудь фигню сделаешь в рабочей базе, кого дрючить потом будут ?

Для этого есть отладочная база, где меняешь ему пароль и делай что хочешь.
23 vladimirpetrov11
 
12.04.12
14:13
(18) более 200
(22) Я всё понимаю и что-то создавать, изменять и удалять под ними не собираюсь.
24 Ёпрст
 
12.04.12
14:15
(23) врешь ты всё.. конторы, в которых 200 юзверей, таких не держат
25 Ыщъ
 
12.04.12
14:23
(24) Увы. Бывает.
26 Обработка
 
12.04.12
14:24
ТО что 1С разработчики в свое время в 77  придумал иммено такой механизм паролей это конечно извращение. Нормальных Ит-шников всегда это бесило. Но что сделано то сделано.
Раньше  у меня тоже была проблема с этими юзерами и их паролями. Часто забывали. Или потребность проверить их доступы итп.
Хотел придумать такую вещь.
1. Все юзеры заходят в 1С через свои имена но без пароля, но вот пароль 1С будет просить при начале работы системы. И это пароль виде реквизита хранится в справочнике пользователей при этом она шифруется. Это я в свое время реализовал но потом подумал что не удобно и не кошерно отказался от этой идеи хотя все было реализовано . И даже пользователь мог сам менять пароли.
27 Обработка
 
12.04.12
14:27
(0) Совет.
Если надо под ним заходить то сделай себе юзера бота который будет служить для тестов. Меняешь интерфес и права потом в предприяетие делаешь аналгичную настройку и провряешь под тем юзером якобы.

Другой вариант. Сбиваешь пароль тестишь . А юзеру пишешь что пароль такой-то.

Третий вариант есть приблуды кторый показывает пароли юзеров.
28 Mikeware
 
12.04.12
14:31
(27) У него наверняка в коде чонить типа:
если ИмяПользователя()= "Марьиванна" Тогда...
29 Обработка
 
12.04.12
14:34
(28) Не будем включать телепата.  Все мы прошли через это.
30 vladimirpetrov11
 
13.04.12
08:37
(9) FN огромаднейшее спасибо!!! То что нужно прямо!!!