Имя: Пароль:
1C
1С v8
УФ. Задать вопрос пользователю при изменение реквизита
,
0 Wefast
 
26.04.18
09:37
На форме выведен реквизит.
Нужно при выборе определенного значения выводить пользователю вопрос. "Вы точно уверены. При изменение удалю данные".

Если он согласен - значение реквизита меняется и я выполняю ряд других действий. А если нет - то ничего не делаю.

Событие ОбработкаВыбора я думаю мне нужна. Там видно что я выбрал и видно что я изменяю.

В нем я могу отказаться от изменения написав СтандартнаяОбработка = Ложь.

Но мне там надо задать вопрос. И тогда я выйду из контекста этой процедуры.

Видел пример с событием ПриЗакрытие, где задавалась глобальная переменная и в событие проверялось ее значение, а в обработке события вопроса завалось ее значение и писалось Закрыть() чем вызывало событие ПриЗакрытие еще раз.

Я вроде видел где то в типовых кон-ях подобно, но не помню где чтобы поискать
1 zwei
 
26.04.18
09:41
Кто тот негодяй, который запрещает тебе присвоить нужное выбраное значение без "контекста это процедуры"?
2 Wefast
 
26.04.18
09:45
(1) я

Там же пишется
3 Wefast
 
26.04.18
09:46
ПоказатьВопрос(Новый ОписаниеОповещения("ОбработкаВыбораЗавершение", ЭтотОбъект),
                                                        "Закрывать форму?", РежимДиалогаВопрос.ДаНет)


И все. в эту процедуру он уже не вернется
4 Wefast
 
26.04.18
09:48
Вижу такое решение.

В обработке ПриИзменение запросом получать значение реквизита из базы и сравнивать, в случае нужного ответа возвращать значение назад.

Но что то мне кажется это не правильно.
5 zwei
 
26.04.18
09:50
(3) МойВажныйРеквизит = ДополнительныеПараметры.ВыбраноеЗначение;
6 Mort
 
26.04.18
09:50
В первый раз этот вопрос пользователя напугает, а в последующие он тупо будет жать на автомате. Бесполезняк.
7 zwei
 
26.04.18
09:51
Вообще да, такое надо перед записью спрашивать, когда все изменения применяются.
8 Cyberhawk
 
26.04.18
09:51
"при выборе определенного значения" // Подробнее
9 Тихий омут
 
26.04.18
09:51
(4) У конструктора описания оповещения третьим параметром идёт произвольный доп. параметр, он будет передан в обработчик оповещения - ну и передай через него выбранное значение, а в обработчике оповещения результата вопроса в зависимости от ответа пользвоателя присваивай это значение своему реквизиту или нет.
10 zwei
 
26.04.18
09:52
(8) Вы выбрали торговую точку, проклятую генереальным. Ваша зарплата будет очищена. Продолжить?
11 Mort
 
26.04.18
09:53
А причина подобных нелепых вопросов, конечно, в кривой архитектуре процесса работы с формой. Нефиг менять какие либо данные в базе пока юзер не нажмет записать.
12 Митяйский
 
26.04.18
09:55
А не лучше ли сделать на манер стандартной блокировки редактирования номера документа?
То есть хочешь влезть в опасный реквизит - будь добр нажать кнопку, снимающую с него ридонли.

И регулировать все это дело доступностью полей, безо всяких голимых асинхронных вызовов
13 Mort
 
26.04.18
09:55
(7) не нужно ничего спрашивать, информации на форме должно быть достаточно чтобы все остальное сделать без вопросов.
14 Wefast
 
26.04.18
10:00
В общем зачем мне все это надо.

Есть реквизит "Вид операции"

Если вид операции №1 то обязательные реквизиты для заполнения одни.
Если другой - другие.

Если они зайдут и выберут первый вид операции, заполнят все. А потом захотят изменить тип, я хочу удалить значения реквизитов которые не участвуют в другом виде операции.

Но считаю что пользователь должен быть предупрежден
15 Wefast
 
26.04.18
10:04
(5) не очень понял.
1.в событие ОбработкаВыбора сразу написать СтандартнаяОбработка = Ложь
2. Передать выбранное значение в вопросе
3. В обработке результата вопроса написать Объект.МойРевизит = ДопПараметры.ВыбранноеЗначение

Правильно?
16 _Дайвер_
 
26.04.18
10:05
(14) Если они у тебя постоянные, значения твоего вида операции, заполни сам. Или просто при изменении Вопрос задай, даНет, и очищай по ответу. Это еще делается доступностью элементов формы, если реквизыты отличаются
17 Wefast
 
26.04.18
10:08
(16) Первую часть не понял. Но в ПриИзменение предыдущее значение уже не доступно через точку, мне кажется получать его из базы, сравнивать и присваивать нужное значение не правильно. Опять заморачиваться с модифицированностью, чтобы если пользователь по факту ничего не менял, то не было признака изменения
18 _Дайвер_
 
26.04.18
10:10
(17) Если ВИДЫОПЕРАЦИИ используют только определенные значения, тогда при изменении ВИДАОПЕРАЦИИ заполняй остальные реквизиты сам, и доступность элементов поставь ЛОЖЬ
19 zwei
 
26.04.18
10:11
(13) Боже упаси от подобных "проектировщиков".
20 zwei
 
26.04.18
10:13
"А почему, Галина Ивановна, вы перед записю не заглянули на 15 вкладку, где серенький чекбокс полностью меняет смысл операции?"
21 Wefast
 
26.04.18
10:20
(18) И откуда я возьму  эти значение других реквизитов, если их вводит пользователь?

Т.е. для одного вида операции важно чтобы был к примеру указан договор.
А для другого не важен, так зачем записывать его значение если пользователь умудрился его заполнить?

(20) Ну я готов услышать годную версию как это делается.

Есть документ. Им принимается продукция от поставщика, а так же он используется для приемки товара с другого склада внутри производства.

Если от поставщика то нужно знать номер и дату входящего документа.

Если же пользователь выберет вид операции "из другого склада", то у этой операции нет даты и номера входящего документа.
Я делаю эти реквизиты на форме не доступными
Но их же нужно очистить. А для этого я хочу спросить пользователя, что он знает что делает.
22 Aletar
 
26.04.18
10:20
Предложу такое решение.

В палитре свойств элемента формы есть такие свойства:
"ОтображатьПредупреждениеПриРедактированиии" и "ПредупреждениеПриРедактировании" (см. http://joxi.ru/YmEYJjGhZ4Xebm )

Можно установить эти свойства, а при изменении поля уже безусловно выполнять нужный алгоритм.
23 Wefast
 
26.04.18
10:24
(22) Как вариант, но не спасает, если пользователь открыл документ. Начал менять реквизит, согласился с предупреждением. Заполнил все. Опять "случайно" поменял вид операции и он уже не предупреждает о последствиях
24 Wefast
 
26.04.18
10:38
В общем сделал так:

&НаКлиенте
Процедура ВидПриемкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    
    Если ВыбранноеЗначение <> Объект.ВидПриемки И ВыбранноеЗначение = ПолучитьВидПриемкиШокер() Тогда
        ПоказатьВопрос(Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект,ВыбранноеЗначение),
        "Данные о входящем документе будут очищены. Продолжить?", РежимДиалогаВопрос.ДаНет);
        СтандартнаяОбработка = ЛОЖЬ;
    ИначеЕсли ВыбранноеЗначение <> Объект.ВидПриемки Тогда
        Элементы.ВходящийНомерДата.Доступность = Истина;    
        
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытиемЗавершение(РезультатВопроса, ПараметрыЗаписи) Экспорт
        
         Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
             Объект.ВидПриемки = ПараметрыЗаписи;
             Элементы.ВходящийНомерДата.Доступность = ЛОЖЬ;
             Объект.НомерВходящегоДокумента = Неопределено;
             Объект.ДатаВходящегоДокумента = Неопределено;
             Объект.ДатаПроизводства = Неопределено;
         КонецЕсли;
        
КонецПроцедуры

Функция ПолучитьВидПриемкиШокер()
    Возврат Перечисления.КА_ВидыПриемки.ИзШокера;
КонецФункции
25 Mort
 
26.04.18
11:13
(20) 15 вкладок и галку изменяющую суть операции делают те же люди, которые задают вопросы перед записью.
26 Mort
 
26.04.18
11:14
+(25) И для них есть отдельное название.