|
Программно установить флажок "Потребовать установку (смену) пароля при входе" | ☑ | ||
---|---|---|---|---|
0
Егор123
09.01.17
✎
14:10
|
Доброго времени суток! Поставили задачу написать обработку программной установки данного флага у выбранных пользователей. За основу взял обработку уведомлений (там тоже регистр сведений, но ссылаются они не справочники, а на перечисления).
Не получается обратиться к реквезиту ПотребоватьСменуПароляПриВходе, который находится на ФормаЭлемента справочника Пользователи. Начинающий программист - камне много попрошу не кидать и написать по делу что я делаю не так или возможно сталкивался кто-то с подобным. Пользователль = Справочники.Пользователи.ПолучитьФорму("ФормаЭлемента").ЭлементыФормы.ПотребоватьСменуПароляПриВходе; //ВидСобытия = Перечисления.СобытияУведомлений.СозданиеЗаписиКалендаря; //СпособУведомлений = Перечисления.СпособыУведомления.ПоПочте; Для Каждого Строка Из ТаблицаПользователей Цикл Пользователь = Строка.Пользователь; Если Не ЗначениеЗаполнено(Пользователь) Тогда Продолжить; КонецЕсли; ПользователиСлужебныйКлиентСервер.УстановитьНаличиеПароля(Пользователи , "" // , СпособУведомлений , Пользователль , Строка.Выбран); КонецЦикла; |
|||
1
Cool_Profi
09.01.17
✎
14:13
|
А зачем ты пытаешься изменить реквизит формы, если тебе надо менять реквизит объекта?
|
|||
2
Егор123
09.01.17
✎
14:23
|
(1), в списке реквизитов объекта нет нужного мне. Вот код с уведомлениями (который я закоментил) - он ссылался на объект Перечесления, в котором были необходимые Значения - ПоПочте и СозданиеЗаписиКалендаря. В справочнике Пользователи я таких данных не нашёл. И в моём случае не понимаю как достать эти данные (ПотребоватьСменуПароляПриВходе)...
|
|||
3
Fish
09.01.17
✎
14:27
|
(2) Ну так посмотри в коде, где эти данные хранятся в базе.
|
|||
4
Егор123
10.01.17
✎
12:50
|
Сейчас попытался написать внешнюю обработку, чтоб у всех пользователей при нажатии на кнопку галочка "ПотребоватЬСменуПароляПриВходе" - стала true. Подскажите - что я делаю не так? Пишет:
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(149)}: Слишком много фактических параметров НаборЗаписейКоды.Добавить(УдаляемаяЗапись); НаборЗаписейКоды = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); НаборЗаписейКоды.Прочитать(); МассивУдаляемых3 = Новый Массив(); Для каждого Запись Из НаборЗаписейКоды Цикл Если Запись.ПотребоватьСменуПароляПриВходе = Ложь Тогда МассивУдаляемых3.Добавить(Запись); КонецЕсли; КонецЦикла; Для каждого УдаляемаяЗапись Из МассивУдаляемых3 Цикл НаборЗаписейКоды.Добавить(УдаляемаяЗапись); КонецЦикла; НаборЗаписейКоды.Записать(); |
|||
5
Fish
10.01.17
✎
12:54
|
(4) А что в строке 149?
|
|||
6
Егор123
10.01.17
✎
12:55
|
(5)
Для каждого УдаляемаяЗапись Из МассивУдаляемых3 Цикл НаборЗаписейКоды.Добавить(УдаляемаяЗапись); КонецЦикла; |
|||
7
zvial
10.01.17
✎
12:57
|
Так это ж набор записей, у метода Добавить нет параметров
|
|||
8
zvial
10.01.17
✎
12:59
|
Надо как то так:
НовЗапись = НаборЗаписейКоды.Добавить(); НовЗапись.Реквизит = ЗначениеРеквизита; Но, вообще не понятен код - зачем добавлять в РС уже имеющиеся данные из массива удаляемых? Может, их удалять над было? |
|||
9
Егор123
10.01.17
✎
13:03
|
(8) В начале я делаю отбор тех данных (пользователей), у которых ПотребоватьСменуПароля = Ложь. А потом я хочу их записать в регистр со значением Истина. Как это в целом будет выглядеть?
|
|||
10
zvial
10.01.17
✎
13:08
|
Возможно, так:
НаборЗаписейКоды = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); НаборЗаписейКоды.Прочитать(); времТЗ = НаборЗаписейКоды.Выгрузить(); времТЗ.ЗаполнитьЗначения(Истина, "ПотребоватьСменуПароляПриВходе "); НаборЗаписейКоды.Загрузить(); НаборЗаписейКоды.Записать(); |
|||
11
zvial
10.01.17
✎
13:09
|
Либо просто в цикле по набору записей для всех записей установить значение ПотребоватьСменуПароляПриВходе = Истина
|
|||
12
Егор123
10.01.17
✎
13:09
|
(10) тоже пишет, что недостаточно фактических параметров
|
|||
13
Егор123
10.01.17
✎
13:11
|
(11) да, вот так сделал. спасибо)
|
|||
14
zvial
10.01.17
✎
13:11
|
Ну так, блин, посмотрите в СП требуемые параметры методов
НаборЗаписейКоды.Загрузить(времТЗ); |
|||
15
zvial
10.01.17
✎
13:12
|
Хорошо
|
|||
16
Егор123
10.01.17
✎
13:16
|
(14) я не ещё не столь шарю)
мало ли кому пригодится НаборЗаписейПользователей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); НаборЗаписейПользователей.Прочитать(); Для каждого Запись Из НаборЗаписейПользователей Цикл Запись.ПотребоватьСменуПароляПриВходе = Истина; КонецЦикла; НаборЗаписейПользователей.Записать(); |
|||
17
Егор123
10.01.17
✎
16:14
|
(15) А как вывести сообщением список тех пользователей, у которых уже была эта галочка?
|
|||
18
trdm
10.01.17
✎
16:46
|
(0) > ПотребоватьСменуПароляПриВходе
Надо еще проверку даты времени установки старого пароля знать и запоминать и проверку на заполненность пароля. И что-бы не чаще чем в пол года пароль менять, (если не пустой). А то Unscrew eggs.... |
|||
19
Егор123
11.01.17
✎
09:23
|
Что делаю не так подскажите? Пишет, что не соответствие типов (параметр 2).. хочу вывести сообщением тех пользователей, у которых значение Ложь...
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СведенияОПользователях.ПотребоватьСменуПароляПриВходе |ИЗ | РегистрСведений.СведенияОПользователях КАК СведенияОПользователях |ГДЕ | (СведенияОПользователях.ПотребоватьСменуПароляПриВходе = ЛОЖЬ)"; Результат = Запрос.Выполнить(); Если Результат.Пустой() тогда Возврат; КонецЕсли; Сообщить("Результат запроса", Результат); |
|||
20
Cool_Profi
11.01.17
✎
09:31
|
Сообщить("Результат запроса", Результат);
И увидишь ты в лучшем случае строку "Результат запроса" Перебирать-то его кто будет? Алексей Николаевич? Или Сам ВВ? |
|||
21
Егор123
11.01.17
✎
09:36
|
(20), боюсь ВВ меня пошлёт) а как перебрать это всё дело? Я вроде в запросе уже указал что мне нужно выбрать и откуда, а потом пытаюсь получить соответствующие запросу данные.
|
|||
22
Fish
11.01.17
✎
09:37
|
(21) Открой наконец СП и почитай.
|
|||
23
Cool_Profi
11.01.17
✎
09:38
|
(21) Открой справочку и посмотри, что тебе возвращает Запрос.Выполнить(). И что с этим можно потом делать.
|
|||
24
Fish
11.01.17
✎
09:39
|
(23) Продай ему СП :)
|
|||
25
Cool_Profi
11.01.17
✎
09:40
|
(24) Ээээ.... А я тут каким боком? ;-)
|
|||
26
Егор123
11.01.17
✎
09:40
|
(22) (24) да открыл я СП, всё равно не могу понять как это сделать...
|
|||
27
Cool_Profi
11.01.17
✎
09:42
|
(26) Тогда теперь открой книжку Радченко и найди там главу про запросы.
|
|||
28
Fish
11.01.17
✎
09:42
|
(26) Тогда для начала надо почитать какую-нибудь литературу по 1С, посмотреть видеоуроки. Если же и это не поможет - тогда 1С - это просто не твоё.
|
|||
29
Cool_Profi
11.01.17
✎
09:43
|
(26) а ещё можно нажать Ф1 в конфигураторе - содержание - встроенный язык - работа с запросами - выполнение и работа с запросами во встроенном языке.
|
|||
30
Егор123
11.01.17
✎
10:05
|
(28) так я для этого на форуме и зарегался чтобы спрашивать то,что непонятно .. я не понимаю как обратиться к данным, как их вывести на экран. (27) книгу открыл. начал пробовать так, как там - не выходит. Мне нужно, чтоб показали как делать на похожем запросе - тогда я въеду в тему..
|
|||
31
Cool_Profi
11.01.17
✎
10:10
|
(30) сделай как в (29) там есть пример
|
|||
32
Егор123
11.01.17
✎
10:21
|
(31) Спасибо. Нашёл, смог, познал!)
|
|||
33
Егор123
11.01.17
✎
13:05
|
А можно сделать так, чтобы в запросе читались не все пользователи? (т.е., например, исключить одно подразделение).
|
|||
34
Fish
11.01.17
✎
13:09
|
(33) Можно. Условие надо в запросе написать.
|
|||
35
Егор123
11.01.17
✎
13:41
|
(34) А как в запросе обратиться к строке? Если кавычки - ругается. Если убрать, пишет что такого поля необнаружено.
| (СведенияОПользователяхДокументооборот.Подразделение <> "Бухгалтерия" |
|||
36
Cool_Profi
11.01.17
✎
13:42
|
| (СведенияОПользователяхДокументооборот.Подразделение <> ""Бухгалтерия""
|
|||
37
Cool_Profi
11.01.17
✎
13:42
|
Да и вообще - подразделение - это ссылка на справочник, а не строка
|
|||
38
Fish
11.01.17
✎
13:49
|
(35) Тебе надо почитать про параметры в запросе.
|
|||
39
Егор123
11.01.17
✎
13:55
|
(37) ну да, не помогло. а как тогда обратиться к конкретному элементу справочника?
|
|||
40
Fish
11.01.17
✎
13:56
|
(39) Он предопределённый?
|
|||
41
Егор123
11.01.17
✎
14:01
|
(40) нет. Это подразделение же.
|
|||
42
Fish
11.01.17
✎
14:03
|
(41) Тогда через параметр. В запросе пишешь:
СведенияОПользователяхДокументооборот.Подразделение <> &Бухгалтерия А после запроса что-то типа: Запрос.УстановитьПараметр("Бухгалтерия", БухгалтерияСсылка), где переменная БухгалтерияСсылка должна содержать нужную тебе ссылку. |
|||
43
Егор123
11.01.17
✎
14:04
|
(42) я сейчас так и сделал, ошибку пишет..
МассивОРПП = Новый Массив(); МассивОРПП.Добавить("Бухгалтерия"); Запрос = Новый Запрос; Запрос.УстановитьПараметр("Бухгалтерия",МассивОРПП); Запрос.Текст = "ВЫБРАТЬ | СведенияОПользователях.ПотребоватьСменуПароляПриВходе, | СведенияОПользователях.Пользователь, | СведенияОПользователяхДокументооборот.Подразделение, | СведенияОПользователяхДокументооборот.Пользователь |ИЗ | РегистрСведений.СведенияОПользователях КАК СведенияОПользователях | ПОЛНОЕ СОЕДИНЕНИЕ | РегистрСведений.СведенияОПользователяхДокументооборот КАК СведенияОПользователяхДокументооборот | ПО | СведенияОПользователях.Пользователь = СведенияОПользователяхДокументооборот.Пользователь | |ГДЕ | (СведенияОПользователяхДокументооборот.Подразделение <> (&МассивОРПП) | ИЛИ СведенияОПользователях.ПотребоватьСменуПароляПриВходе = Ложь)"; // Выполним запрос и запишем результат |
|||
44
Егор123
11.01.17
✎
14:08
|
(43) {ВнешняяОбработка.ПотребоватьСменуПароляУВсехПользователей.Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить(); по причине: {(14, 59)}: Не задано значение параметра "МассивОРПП" (СведенияОПользователяхДокументооборот.Подразделение <> (<<?>>&МассивОРПП) |
|||
45
Cool_Profi
11.01.17
✎
14:09
|
(44) @ Не задано значение параметра "МассивОРПП" @
Вот ведь Боря... Старался... Писал программу на русском языке... И всё равно находятся люди, которые не понимают... |
|||
46
Егор123
11.01.17
✎
14:29
|
Может скажите что не так.. я не понимаю почему пишет ошибку, помогите исправить.
ЗаписьОРПП = РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьМенеджерЗаписи(); ЗаписьОРПП.Прочитать(); ЗаписьОРПП.Подразделение = "ОРПП"; ЗаписьОРПП.Записать(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ЗаписьОРПП",ЗаписьОРПП); Запрос.Текст = "ВЫБРАТЬ | СведенияОПользователях.ПотребоватьСменуПароляПриВходе, | СведенияОПользователях.Пользователь, | СведенияОПользователяхДокументооборот.Подразделение, | СведенияОПользователяхДокументооборот.Пользователь |ИЗ | РегистрСведений.СведенияОПользователях КАК СведенияОПользователях | ПОЛНОЕ СОЕДИНЕНИЕ | РегистрСведений.СведенияОПользователяхДокументооборот КАК СведенияОПользователяхДокументооборот | ПО | СведенияОПользователях.Пользователь = СведенияОПользователяхДокументооборот.Пользователь | |ГДЕ | (СведенияОПользователяхДокументооборот.Подразделение <> &ЗаписьОРПП | ИЛИ СведенияОПользователях.ПотребоватьСменуПароляПриВходе = Ложь)"; // Выполним запрос и запишем результат в переменную РезультатЗапроса. РезультатЗапроса = Запрос.Выполнить(); |
|||
47
Cool_Profi
11.01.17
✎
14:30
|
Раз
ЗаписьОРПП.Подразделение = "ОРПП"; два ЗаписьОРПП = РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьМенеджерЗаписи(); Запрос.УстановитьПараметр("ЗаписьОРПП",ЗаписьОРПП); |
|||
48
Егор123
11.01.17
✎
14:56
|
(47) а нужно то как?
|
|||
49
Fish
11.01.17
✎
14:58
|
(48) Для начала нужно понять, что из себя представляет ссылка на элемент справочника, и как её получить.
|
|||
50
Егор123
11.01.17
✎
15:03
|
(49) ну В РегистрыСведений.СведенияОПользователяхДокументооборот есть ресурс Подразделения он ссылается на справочник СтруктураПредприятия
|
|||
51
Егор123
11.01.17
✎
15:23
|
(49) и что с этой информацией делать?)
|
|||
52
Fish
11.01.17
✎
16:02
|
(50) Ресурс регистра с типом СправочникСсылка.СтруктураПредприятия и ссылка на элемент справочника, хоть и имеющая тот же тип - это две разные вещи. Когда поймёшь это (прочитав хотя бы азы), тогда сразу поймёшь, что с этим делать.
|
|||
53
Егор123
11.01.17
✎
16:04
|
(52) Я понимаю, что разные. но не понимаю как получить ссылку на элемент. как узнать где он хранится. можете просто сказать как надо?
|
|||
54
Fish
11.01.17
✎
16:31
|
(53) Можно открыть СП и посмотреть примеры. Или воспользоваться поиском. Это, кстати, и в правилах написано:
"Скорее всего Вы не первый, кто столкнулся с этой проблемой. Попробуйте найти ответ на форуме (в правом нижнем углу есть окно поиска) или в многочисленных статьях и FAQ по 1С, ссылки на которые вы найдете на сайте http://www.mista.ru. В любом случае полученные знания не будут лишними." http://www.forum.mista.ru/rules.php#rec А разжёвывать азы лениво, если честно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |