Здравствуйте! Помогите пожалуйста, ломаю голову и не могу прийти к решению. Условие :При открытии документа нужно ввести пароль («123»), после этого должно открываться документ Начисление заработной платы,
Если введен неправильный пароль, вывести предупреждение
«Неправильный пароль», и не открывать документ вовсе
Подскажите пожалуйста!!!!!
---
Как вариант можно так. Создаем еще одну форму ввода пароля, назначаем ее основной для документа, а основную в произвольную, и при вводе с основной открываем произвольную с передачей ключа ... )
---
```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)

    Элементы.СекретноеПоле.Видимость = Ложь; //скрываем что хотим спрятать

    ДопПараметры=Неопределено;
    Оповещение = Новый ОписаниеОповещения("ПослеВводаСтроки", ЭтотОбъект, ДопПараметры);
    ПоказатьВводСтроки(Оповещение, ","Введите пароль", 0, Ложь);

    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеВводаСтроки(ВведенныйПароль, Параметры) Экспорт

    Пароль= "123";

    Если НЕ ВведенныйПароль = Пароль Тогда
    ПоказатьПредупреждение(,"Неверный пароль!",10);
    ЭтаФорма.Закрыть();
    Иначе
    Элементы.СекретноеПоле.Видимость = Истина; //показываем обратно
    КонецЕсли;

    КонецПроцедуры;
```
---
а зачем изобретать свой велосипед? Чем доступ по ролям не устраивает?
---
Подожди, не торопись, вспомни анекдот про дайвера и акулу.
Я вот жду, когда возникнет тема, чтобы на каждый документ устанавливать свой пароль. Вот тогда и покуражимся.
---
https://memepedia.ru/wp-content/uploads/2018/10/obezyana-mem.jpg
 не хочу говорить что я делал такое, но... хотя никаких но, просто не скажу что я делал уже такое)
---
а отчет по начисленной ЗП и ведомости на перечисление тоже под паролем будут? и отчетность тоже?
Выв с чем боретесь? с посмотреть или изменить?
Вам уже подсказали - РЛС - лучшее решение.
---
Судя по логину "G_Какие-то-цифры", городу Абинску и 0 дней на форуме - это однодневки для решения тестовых вопросов. Никакого отношения их вопросы к реальности не имеют.
---
Ясен пень. Но лично я просто развлекаюсь с этой задачкой.
---
Это извращение. Всё равно, нужно использовать роли. В противном случае любой пользователь с помощью какого-нибудь универсального отчета может все данные из документа посмотреть без вызова формы.
---
1. Создать форму ввода пароля.
2. В обработчике ПриОткрытии() вызывать форму ввода пароля, а форму документа не открывать (Отказ = Истина).
3. После ввода пароля - форму пароля закрывать, а форму документа открывать с параметром типа НеЗапрашиватьПароль.
---
1. Создать форму ввода пароля.
Можно использовать метод ВвестиСтроку/ПоказатьВводСтроки
---
ПоказатьВводСтроки И там есть возможность включить "Режим пароля"?
---
как вызвать форму пароля?
Извиняюсь если жестко туплю
---
Как и любую другую - ОткрытьФорму().
---
Процедура КнопкаВыполнитьНажатие(Кнопка)

 Проверка = ВвестиСтроку(Пароль,"123");
 Если Проверка Тогда
  ОткрытьФорму(Документы.НачислениеЗаработнойПлаты.Форма.ФормаДокумента);
 Иначе
  Предупреждение("Неправильный пароль");
 КонецЕсли

КонецПроцедуры

Не находит форму(
---
Читаем СП, о том, какого типа параметры используются в методе ОткрытьФорму()
---
ОткрытьФорму() Вроде все правильно указываю
---
Круто, рад за вас. Кстати, а чем строка от числа отличается, не в курсе?
---
Перед открытием основной формы нужно открыть форму ввода пароля и если всё успешно то из этой формы открыть основную. Если речь об управляемых формах, то в модуле менеджера есть ОбработкаПолученияФормы.
---
Не спасет. Вам в форму ввода пароля необходимо передать параметры формы документа, для того, чтобы потом открыть её в случае успешного пароля. Сделать это можно только через клиентский метод ОткрытьФорму(). Тупое Серверное переопределение имени формы вас не спасет.
---
Переопределенная форма получит все параметры, предназначавшиеся для формы документа. Эти параметры можно закэшировать в реквизит формы типа Произвольный, тогда они всегда будут доступны и на клиенте и на сервере.
---
Ну ок, значит на один шаг меньше в программировании. Отлично ))
---
А кто будет получать зачет, кто решит задачу или автор вопроса?
---
```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)

    ДопПараметры=Неопределено;
    Оповещение = Новый ОписаниеОповещения("ПослеВводаСтроки", ЭтотОбъект, ДопПараметры);
    ПоказатьВводСтроки(Оповещение, ","Введите пароль", 0, Ложь);

    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеВводаСтроки(ВведенныйПароль, Параметры) Экспорт

    Пароль= "123";

    Если НЕ ВведенныйПароль = Пароль Тогда
    ПоказатьПредупреждение(,"Неверный пароль!",10);
    ЭтаФорма.Закрыть();
    КонецЕсли;

    КонецПроцедуры;
```
---
При этом форму будет визуально видно, она откроется. Можно посмотреть на ней всякие секретные данные и сфотографировать...
---
неа.
---
Ага
---
Фейк.
---
Да ладно???
---
Ладно не фейк. Ты прав.
---
Опередил...

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Оповещение = новый ОписаниеОповещения("ПослеВводаПароля",ЭтотОбъект);
    ПоказатьВводСтроки(Оповещение,,"Введите пароль",3);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеВводаПароля(Результат,ДопПараметры) Экспорт
    Если Результат = Неопределено ИЛИ НЕ Результат = "123" Тогда
    ПоказатьОповещениеПользователя("Отказ!",,"Введен не правильный пароль");
    Закрыть();
    КонецЕсли;
    КонецПроцедуры
```
---
При этом форма все равно откроется, её можно смотреть, фотографировать... Только данные нельзя будет изменить и по вкладкам побегать...
---
```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)

    Элементы.СекретноеПоле.Видимость = Ложь; //скрываем что хотим спрятать

    ДопПараметры=Неопределено;
    Оповещение = Новый ОписаниеОповещения("ПослеВводаСтроки", ЭтотОбъект, ДопПараметры);
    ПоказатьВводСтроки(Оповещение, ","Введите пароль", 0, Ложь);

    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеВводаСтроки(ВведенныйПароль, Параметры) Экспорт

    Пароль= "123";

    Если НЕ ВведенныйПароль = Пароль Тогда
    ПоказатьПредупреждение(,"Неверный пароль!",10);
    ЭтаФорма.Закрыть();
    Иначе
    Элементы.СекретноеПоле.Видимость = Истина; //показываем обратно
    КонецЕсли;

    КонецПроцедуры;
```
---
Костыль хардкодный. Уволил бы за такое.
---
Нормальное решение, то же мне увольнятор. В типовых сплошь и рядом такое: видимостью элементов формы управляют значения реквизитов, например "хозяйственная операция". Но в с этим похоже не знакомы.
---
Проверку надо делать либо до открытия формы, либо ПриСозданиеНаСервере, когда форма еще не открыта, но тогда как параметр, надо передать пароль для проверки.
---
При создании на сервере рано, нам же с пользователем на клиенте сначала надо пообщаться.
---
А пообщаться надо при попытке открыть форму. Например в списке в событие "Выбор".
---
Форма может открываться из тысячи мест в конфигурации, включая внешние обработки и отчеты. Нужен универсальный механизм, привязанный к событию самой формы, а не привязка к триггерам вызывающим её открытие.
---
Блин, ну что вы такие темы не в пятницу устраиваете? Ни пива, блин, ни попкорна.

ТС, кто Вам такие задачи ставит?
---
Ни пива, блин, ни попкорна. В офисе работаешь, что ль?
---
В офисе работаешь, что ль?
не всё время, но директор в течение недели то должен в офисе появляться :)
---
Так у директора вообще мини-бар на работе должен быть...
---
а ты хитёр! :)
---
Да и это, после компрометации/смены пароля, во сколько форм нужно внести изменения?
---
Это нюансы, пароль можно где-то и врегистре хранить, а потом доставать при проверке. Ну в простом примере не будешь все это реализовывать.
---
ну и зачем такая архитектура?
чтобы потом все переделывать?
---
Я бы еще регламентное задание сделал, которое в полночь превращает все пароли в тыкву, и рассылает новые пароли на мыло приближенным особам... Б-Безопасность!
---
Переделывать для чего ?
---
Переделывать для чего ?
а Вы реально не понимаете, что вся эта задача, не в контексте реализации, а в контексте бизнес-процесса, абсурдна!?
---
Ясен перец, для меня это теоретическая задачка.
---
Как вариант можно так. Создаем еще одну форму ввода пароля, назначаем ее основной для документа, а основную в произвольную, и при вводе с основной открываем произвольную с передачей ключа ... )
---
Сложно. Иногда/часто в типовых формы открываются по командам, т.е. откроется форма , которая прописана, а не та, что назначена основной.
---
Поэтому см. вариант (2). И вариации реализации из ответов (9) и (30)
---
А ага, проинициализируем полностью форму на сервере два раза : "П - производительность"
"уволил бы за такое" )))
---
Ну, с этим меня поправили уже как раз в вариациях 9 и 30. И я на них ссылаюсь, конечно же.

Излишние вызовы сервера - повод для оптимизации и развития )))
А вот трудно поддерживаемый хардкод - повод для увольнения, несомненно ;-)
---
Ну не знаю где там хардкор в управлении видимостью парой реквизитов и нескольких строчек кода.
Что повсеместно используется в типовых конфигурациях, как самое оптимально, правда, для других задач.

Ясно же что задача высосана из пальца и решается типовыми методами, например ролями с разграничением на уровне записей.

Но ваше решение в (2) одно из самых неоптимальных.
---
В том, что завтра начальник захочет скрывать другие реквизиты, а потом еще как-то и так далее. Правильный подход - не открывать форму вообще. А уже после открытия рулить доступностями и правами на уровне ролей, прав и функциональных опций. Если состав "секретных реквизитов" часто меняется - можно создать РС, в который оперативно добавлять/удалять имена реквизитов и условия их отображения. Вот это будет не хардкод. Хотя и сама по себе задача параноидальная.

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

А еще в типовых конфигурациях табличные части объединены в группы, так что управлять видимостью придется одним или двумя элементами, и не важно что потом там переменится.
---
Вы похоже не в курсе, но доступность и управление формой списка настраивает разработчик.
---
Да весь код пишет разработчик ) Как и тот, что в примерах этой темы.
---
почему в рознице на выполнение каких-то действий требуется пароль или даже несколько, а в 1с все решается типовыми ролями?
---
Как вариант.. Решений много конечно, на крайний случай можно включить модальность и открыть форму ввода пароля модально