Автоматическое снятие флажка "Показывать в списке выбора" при пометке на удаление".
Добрый день! Только начинаю осваивать 1с. Для себя хочу сделать вот какую вещь. В УПП есть справочник "Пользователи". Там можно завести нового и задать ему пароль и т.д. Так вот я хочу сделать так, чтобы при пометке на удаление пользователя автоматом снималась галочка "Показывать в списке выбора". Открыл конфигурацию, нашел там справочник "Пользователи", там есть различные формы. По идее удаляется пользователь в форме списка. Так вот в модуль формы списка я добавил это:
Синтаксических ошибок не обнаружено, но ничего не работает в итоге.
Вообще в справочнике "Пользователи" нет реквизита "ПоказыватьВСпискеВыбора"(булево), но он размещен на форме "ФормаРедактированиеПользователяИБ" этого справочника.
Зато есть обработка "СписокПользователейИБ", где есть табличная часть "ТабличнаяЧастьПользователей", где собственно и имеются все реквизиты с свойствами пользователя (пароль, показывать в списке и т.д.)
Так вот я запутался куда мне запихивать эту процедуру, и вообще правильно ли она написана? Может кто даст подсказки для верного направления?
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
//Тестовая процедура
ПУ = Элемент.ТекущиеДанные.ПометкаУдаления;
ЕСЛИ ПУ = Истина Тогда
ПоказыватьВСпискеВыбора = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура НаименованиеПриИзменении(Элемент)
//Тестовая процедура
ПУ = Элемент.ТекущиеДанные.ПометкаУдаления;
ЕСЛИ ПУ = Истина Тогда
ПоказыватьВСпискеВыбора = Ложь;
КонецЕсли;
КонецПроцедуры
Синтаксических ошибок не обнаружено, но ничего не работает в итоге.
Вообще в справочнике "Пользователи" нет реквизита "ПоказыватьВСпискеВыбора"(булево), но он размещен на форме "ФормаРедактированиеПользователяИБ" этого справочника.
Зато есть обработка "СписокПользователейИБ", где есть табличная часть "ТабличнаяЧастьПользователей", где собственно и имеются все реквизиты с свойствами пользователя (пароль, показывать в списке и т.д.)
Так вот я запутался куда мне запихивать эту процедуру, и вообще правильно ли она написана? Может кто даст подсказки для верного направления?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вам бы еще на совсем простых примерах поразбираться.. даже не знаю что тут комментировать ).
1. событие пометки на удаление надо отлавливать в специально для этого предусмотренном обработчике ПередЗаписью() в модуле объекта вашего справочника.
2. В вашей задаче на самом деле используется 2 разных объекта: элемент справочника Пользователи, который вы редактируете, помечаете на удаление и т.д. и объект Пользователь информационной базы, соответствующий редактируемому элементу справочника Пользователи. Так вот свойство "Показывать в списке выбора" принадлежит именно второму объекту. Т.е. в модуле объекта в обработчике ПередЗаписью() либо ПриЗаписи() (в вашем случае, наверное, даже больше подходит ПриЗаписи()) нужно получить нужного пользователя информационной базы (смотрите как это происходит в форме элемента), в нем изменить интересующее свойство и записать его
И я вообще не понял почему вы привязались к событию изменения наименования.. вобщем читайте книжки и лучше разбирайте какие-нибудь простейшие примеры
1. событие пометки на удаление надо отлавливать в специально для этого предусмотренном обработчике ПередЗаписью() в модуле объекта вашего справочника.
2. В вашей задаче на самом деле используется 2 разных объекта: элемент справочника Пользователи, который вы редактируете, помечаете на удаление и т.д. и объект Пользователь информационной базы, соответствующий редактируемому элементу справочника Пользователи. Так вот свойство "Показывать в списке выбора" принадлежит именно второму объекту. Т.е. в модуле объекта в обработчике ПередЗаписью() либо ПриЗаписи() (в вашем случае, наверное, даже больше подходит ПриЗаписи()) нужно получить нужного пользователя информационной базы (смотрите как это происходит в форме элемента), в нем изменить интересующее свойство и записать его
И я вообще не понял почему вы привязались к событию изменения наименования.. вобщем читайте книжки и лучше разбирайте какие-нибудь простейшие примеры
(3) serg138, Так работает, только привязывать нужно к ПриИзменении
Процедура СписокПриИзменении(Элемент)
ПУ = Элемент.ТекущиеДанные.Ссылка.ПометкаУдаления;
ЕСЛИ ПУ = Истина Тогда
Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Элемент.ТекущиеДанные.Ссылка.ИдентификаторПользователяИБ);
Пользователь.ПоказыватьВСпискеВыбора = Ложь;
Пользователь.Записать();
КонецЕсли;
КонецПроцедуры
(4) apiary, Спасибо, действительно работает. Я хотел тоже выбрать "при изменении", но только сейчас увидел, что ошибся. Но самое главное, что все остальное у меня не правильно, а ваш листинг полностью рабочий. Попробую разобраться в нем.
Тут даем имя процедуре и присваиваем значение "Элемент". Если это значение убрать, то процедура не работает.
Создаем переменную "ПУ" и присваиваем ей значение. То есть ПУ = значение колонки "ПометкаУдаления" в текущей, выделенной строке. "ПометкаУдаления" это стандартный реквизит справочника.
Соответственно если при измении пометили элемент справочника на удаление, тогда производим действие описанное дальше.
Создаем переменную "Пользователь". "ПользователиИнформационнойБазы" - это обращеение к менеджеру управления списком.
"НайтиПоУникальномуИдентификатору" - ищем пользователя по ИД, который указан в реквизите "ИдентификаторПользователяИБ" в выделенной строке списка.
Снимаем флажок для этого пользователя.
Записываем изменения.
Честно говоря до конца не понял строку "Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору". Вроде как должно идти обращение к табличной части обработки "СписокПользователейИБ", ведь именно там содержится реквизит "ПоказыватьВСпискеВыбора", но имя "СписокПользователейИБ" нигде не упоминается.
Процедура СписокПриИзменении(Элемент)
Тут даем имя процедуре и присваиваем значение "Элемент". Если это значение убрать, то процедура не работает.
ПУ = Элемент.ТекущиеДанные.Ссылка.ПометкаУдаления;
Создаем переменную "ПУ" и присваиваем ей значение. То есть ПУ = значение колонки "ПометкаУдаления" в текущей, выделенной строке. "ПометкаУдаления" это стандартный реквизит справочника.
ЕСЛИ ПУ = Истина Тогда
Соответственно если при измении пометили элемент справочника на удаление, тогда производим действие описанное дальше.
Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Элемент.ТекущиеДанные.Ссылка.ИдентификаторПользователяИБ);
Создаем переменную "Пользователь". "ПользователиИнформационнойБазы" - это обращеение к менеджеру управления списком.
"НайтиПоУникальномуИдентификатору" - ищем пользователя по ИД, который указан в реквизите "ИдентификаторПользователяИБ" в выделенной строке списка.
Пользователь.ПоказыватьВСпискеВыбора = Ложь;
Снимаем флажок для этого пользователя.
Пользователь.Записать();
Записываем изменения.
Честно говоря до конца не понял строку "Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору". Вроде как должно идти обращение к табличной части обработки "СписокПользователейИБ", ведь именно там содержится реквизит "ПоказыватьВСпискеВыбора", но имя "СписокПользователейИБ" нигде не упоминается.
(6) serg138,
Тут делаем переменную "Пользователь". А чтобы в нее засунуть самого пользователя ИБ, а не элемент справочника "Пользователи" и применяется конструкция:
Читая справку вы найдете метод:
Где нужно указать
Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Элемент.ТекущиеДанные.Ссылка.ИдентификаторПользователяИБ);
Тут делаем переменную "Пользователь". А чтобы в нее засунуть самого пользователя ИБ, а не элемент справочника "Пользователи" и применяется конструкция:
ПользователиИнформационнойБазы
Читая справку вы найдете метод:
НайтиПоУникальномуИдентификатору
Где нужно указать
УникальныйИдентификатор = Элемент.ТекущиеДанные.Ссылка.ИдентификаторПользователяИБ
Возникла проблема.Листинг
прекрасно работает на чистой базе, но когда его вставил в рабочую базу в тоже самое место, то ничего не работает.Просто полностью скопировал, но код не отрабатывает.
Процедура СписокПриИзменении(Элемент)
ПУ = Элемент.ТекущиеДанные.Ссылка.ПометкаУдаления;
ЕСЛИ ПУ = Истина Тогда
Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Элемент.ТекущиеДанные.Ссылка.ИдентификаторПользователяИБ);
Пользователь.ПоказыватьВСпискеВыбора = Ложь;
Пользователь.Записать();
КонецЕсли;
КонецПроцедуры
прекрасно работает на чистой базе, но когда его вставил в рабочую базу в тоже самое место, то ничего не работает.Просто полностью скопировал, но код не отрабатывает.
(9) Xershi,
нет, ничего такого не ставил, но уже все заработало. Причем какой раз замечаю такую странность. Если полностью скопировать листинг процедуры в другую конфигурацию, то код не работает, а если выбрать в свойствах "При изменении", нажать лупу и в модуль созданной процедуры добавить содержимое процедуры, то все работает прекрасно. Выходит, что процедуру лучше добавлять лупой , а копировать туда только содержимое.
нет, ничего такого не ставил, но уже все заработало. Причем какой раз замечаю такую странность. Если полностью скопировать листинг процедуры в другую конфигурацию, то код не работает, а если выбрать в свойствах "При изменении", нажать лупу и в модуль созданной процедуры добавить содержимое процедуры, то все работает прекрасно. Выходит, что процедуру лучше добавлять лупой , а копировать туда только содержимое.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот