Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/55: Рейтинг темы: голосов - 55, средняя оценка - 4.76
4 / 4 / 2
Регистрация: 26.08.2015
Сообщений: 59
1
1C 8.x

Обработка результата запроса. Очень нужен дельный совет

02.01.2016, 17:17. Показов 10577. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день дорогие форумчане))) !!!
Всех с наступившим новым годом!!!

Очень нужна любая помощь в следующем:

Есть задача по условию которой, при входе в систему, должна производиться проверка пользователя, является ли он администратором. Если является, то доп. проверки к этому пользователю не применяются. (Администратор - соответствующий булевский реквизит на форме элемента справочника "Пользователи"). Предполагал решить задачу след. образом:

Написать функцию которая будет сравнивать имя текущего пользователя с наименованиями элементов из справочника "Пользователи" у которых реквизит "Администратор" = Истина и если совпадение найдено, тогда возврат истина если нет ложь.

Попытался реализовать это следующим запросом:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Функция ПроверкаПользователяАдмин(ИмяПользователя)Экспорт
Запрос = Новый Запрос;
Запрос.Текст = 
"Выбрать
| Пользователи.Наименование
| ИЗ
| Справочник.Пользователи Как Пользователи
|Где
| Пользователи.Администратор = &Установлен";
Запрос.УстановитьПараметр("Установлен", Истина);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ИмяПользователя = ВыборкаДетальныеЗаписи.Наименование тогда
возврат истина
иначе
возврат ложь
КонецЕсли;
КонецЦикла;
 
КонецФункции
Но данная функция всегда возвращает ложь даже если имена пользователя совпадают.
Консолью запросов проверял, запрос отбирает всех нужных пользователей.
Проверял код отладкой, Выборка Детальные записи, содержит только 1-й элемент отбора т.е. если по результату запроса отбираются Администратор и Администратор1, то выборка хранит в себе только 1-е значение. Помогите пожалуйста заставить работать эту функцию.
За ранее безмерно благодарен!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2016, 17:17
Ответы с готовыми решениями:

Мобильное приложение, нужен дельный совет
ДОбрый вечер, на носу дипломная работа, как вариант предложили написать мобильное приложение на 1с,...

Нужен дельный совет
Здравствуйте участники форума. Сложилась патовая ситуация. Работаю в маленькой фирме(около 10...

Нужен дельный совет
heur trojan.win32.generic мой самый ненавистный вирус, сегодня мой домен подвергся атаке данной...

Нужен дельный совет
Вообщем есть Домен на Windows 2003 r2 есть Wi-fi рутер с антенной на 200 метров, все дело...

5
858 / 657 / 111
Регистрация: 01.11.2012
Сообщений: 2,411
02.01.2016, 17:49 2
А что в имени пользователя? В Отладчике?
Конечных пробелов в наименовании нет?
0
4 / 4 / 2
Регистрация: 26.08.2015
Сообщений: 59
02.01.2016, 17:59  [ТС] 3
Честно говоря не додумался посмотреть, сейчас гляну, но думаю врятли.
0
Модератор
Эксперт 1С
3786 / 2965 / 590
Регистрация: 10.03.2011
Сообщений: 11,670
Записей в блоге: 1
02.01.2016, 18:25 4
1C
1
2
3
4
5
6
7
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ИмяПользователя = ВыборкаДетальныеЗаписи.Наименование тогда
возврат истина
иначе
возврат ложь
КонецЕсли;
КонецЦикла;
Этот код будет работать только в случае если у тебя ОДИН "Администратор" в базе

Добавлено через 1 минуту
enduromen, лучше отрулить ролями (Администратор и Пользователь)
не нужен ни запрос ни флаг булево в справочнике

1C
1
2
3
Если РольДоступна("Администратор") Тогда 
    Сообщить("Это администратор");
КонецЕсли;
1
4 / 4 / 2
Регистрация: 26.08.2015
Сообщений: 59
02.01.2016, 20:45  [ТС] 5
Dethmontt, спасибо большое.
Если не сложно, объясните пожалуйста, почему данный код будет работать если в базе один администратор? Я нуб пока тяжеловато соображать.
Если правильно понимаю то при таком написании в любом случае выбираются все элементы справочника у которых "Администратор"-истина и "ИмяПользователя" должно сравниваться с наименованием каждого элемента.

По поводу варианта с ролями, спасибо, обязательно запомню на будущее.

Добавлено через 29 минут
Коллеги, нашел в чем проблема)
Ситуация была в следующем:
У меня в БД в справочнике "Пользователи", среди прочих, у двух элементов реквизит "Администратор" возведен в Истина. Как следствие, текущее имя пользователя сравнивается с наименованием каждого из элементов. Соответственно возвращаемых значений тоже будет 2 Истина и Ложь, поэтому функция всегда и возвращала ложь.

Поправить код нужно следующим образом:


1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Функция ПроверкаПользователяАдмин(ИмяПользователя) Экспорт
    
        
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Пользователи.Наименование
        |ИЗ
        |   Справочник.Пользователи КАК Пользователи
        |ГДЕ
        |   Пользователи.Администратор = &Установлен";
        
    Запрос.УстановитьПараметр("Установлен", Истина);    
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() цикл
        Если ИмяПользователя = ВыборкаДетальныеЗаписи.Наименование тогда
            возврат истина
        КонецЕсли;
        КонецЦикла;
    
        
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
 
    
 
КонецФункции
Т.Е. убираем ветку иначе, таким образом если выполняется условие возвращается истина, а иначе неопределено.
Вообще конечно кривовато написано, но работает.
Надеюсь что ветка поможет таким же НУБам как я )))
Всем спасибо за проявленное участие!!!
0
Модератор
Эксперт 1С
3786 / 2965 / 590
Регистрация: 10.03.2011
Сообщений: 11,670
Записей в блоге: 1
04.01.2016, 07:40 6
Цитата Сообщение от enduromen Посмотреть сообщение
Поправить код нужно следующим образом:
Молодчик, начал думать!!!

Но к сожалению опять не в ту строну

Если уж и оставлять вариант с поиском по "Наименованию" то лучше пусть запрос сразу возвращение нужне значение без перебора массива
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Функция ПроверкаПользователяАдмин(ИмяПользователя) Экспорт
    
    ВозвращаемоеЗначение = Ложь;    
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Пользователи.Администратор КАК Флаг
        |ИЗ
        |   Справочник.Пользователи КАК Пользователи
        |ГДЕ
        |   Пользователи.Наименование = &ИмяПользователя";
        
    Запрос.УстановитьПараметр("ИмяПользователя", ИмяПользователя);    
    
    Выборка = Запрос.Выполнить().Выбрать();
        
    Если Выборка.Следующий() Тогда
         ВозвращаемоеЗначение = Выборка.Флаг;
    КонецЕсли;
 
    Возврат ВозвращаемоеЗначение;
 
КонецФункции
0
04.01.2016, 07:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2016, 07:40
Помогаю со студенческими работами здесь

Нужен дельный совет по сборке ПК
Беру ПК больше для работы, но и люблю поиграть Dota 2 и Fifa, так что нужен шустрый компьютер. ...

Нужен дельный совет в создании эффекта
Добрый день, уважаемые форумчане!!!! Дело вот в чем: Хотел создать приложение для камеры или...

Не работает UBS-порты, нужен дельный совет
Всем доброго время суток! Описываю проблему/ситуацию: 1) На самом системном блоке есть 2 UBS...

пропал звук на компьютере нужен дельный совет
с начало анти вир предупридил что как о е то скрытое действие я нажал на вкладку...

НЕкорректное отображение уровня заряда. Нужен дельный совет
Всем привет. Не так давно приобрел поддержанный ноутбук Samsung NP450R5E. После некоторого времени...

Нужен дельный совет (дети разлили воду на клавиатуру)
Всем привет вопрос таков дети разлили воду на клавиатуру перестали работать пару кнопок сушил не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru