Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

УФ. Задать вопрос пользователю при изменение реквизита

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует