|
Как узнать, какую кнопку нажал пользователь? | ☑ | ||
---|---|---|---|---|
0
bahtik
10.07.14
✎
14:21
|
Здравствуйте!
Такая задача. При интерактивном проведении документа необходимо проверить некое условие, задать вопрос пользователю и в зависимости от его ответа либо выполнить проведение, либо отменить команду. Т.к. режим использования модальности отключен, то такой код: &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда Если Не ПараметрыЗаписи.Свойство("ВыборВидаРасчетаПодтвержден") Тогда Если Объект.ВидРасчетов = ПредопределенноеЗначение("Перечисление.ВидыРасчетов.Наличными") И рфОстатокНаДепозите >= 10 Тогда // 10 грн - чтобы не спрашивало в случаях, когда на депозите какая-то мелочь. Отказ = Истина; ОписаниеОповещения = Новый ОписаниеОповещения("ОтветНаВопросОСпособеРасчетаПолучен", ЭтаФорма, ПараметрыЗаписи); Если рфОстатокНаДепозите >= Объект.ПереченьУслугМойки.Итог("Сумма") + Объект.ПереченьУслугХимчистки.Итог("Сумма") + Объект.ПереченьУслугШиномонтажа.Итог("Сумма") Тогда ТекстВопроса = "У клиента имеется достаточно средств на депозите, чтобы оплатить оказанные ему услуги. Клиент действительно хочет рассчитаться наличными?"; Иначе ТекстВопроса = "У клиента имеются средства на депозите для частичной оплаты оказанных ему услуг. Клиент действительно хочет оплатить всю сумма наличными?"; КонецЕсли; ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОтветНаВопросОСпособеРасчетаПолучен(Результат, ПараметрыЗаписи) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда ПараметрыЗаписи.Вставить("ВыборВидаРасчетаПодтвержден"); Записать(ПараметрыЗаписи); КонецЕсли; КонецПроцедуры Все работает, но возникает проблема, что если пользователь нажал "Провести и закрыть", то после его утвердительного ответа документ проведется но форма не закроется. В общем, нужно узнать, какую кнопку нажал пользователь: "Провести и закрыть" или просто "Провести". Как это сделать? |
|||
1
Лефмихалыч
10.07.14
✎
14:24
|
(0) убрать системные кнопки и нарисовать свои
|
|||
2
Ёпрст
10.07.14
✎
14:24
|
примитив - записать в переменную что либо в принажатиикнопки. потом смотри эту переменную где угодно
|
|||
3
Лефмихалыч
10.07.14
✎
14:24
|
Но так делают только мудаки.
Ответы на такие вопросы должны храниться в документе, а для этого предусмотрены реквизиты объектов и проверки заполнения |
|||
4
bahtik
10.07.14
✎
14:24
|
Это понятно. А стандартных механизмов никаких нет? Что-то вроде кода возврата диалога и т.п.?
|
|||
5
bahtik
10.07.14
✎
14:26
|
(3) Как тут использовать реквизиты объектов и проверки заполнения? Нужно задать уточняющий вопрос, а не проверять, все ли правильно заполнил пользователь.
|
|||
6
Fish
10.07.14
✎
14:27
|
(4) Когда же люди научатся читать СП?
"Глобальный контекст (Global context) ПоказатьВопрос (ShowQueryBox) Синтаксис: ПоказатьВопрос(<ОписаниеОповещенияОЗавершении>, <ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>) Параметры: <ОписаниеОповещенияОЗавершении> (обязательный) Тип: ОписаниеОповещения. Содержит описание процедуры, которая будет вызвана после закрытия окна ввода значения со следующими параметрами: <РезультатВопроса> - результат выбора пользователя: значение системного перечисления или значение, связанное с нажатой кнопкой. В случае закрытия диалога по истечении времени - значение Таймаут, <ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения" |
|||
8
bahtik
10.07.14
✎
14:32
|
(6) Ну и? Читать умею вроде. И в курсе про дополнительные параметры. И если посмотришь на код, то я их там и использую. И вопрос как раз и заключается в том, как узнать, что нажал пользователь, чтобы передать это значение в дополнительные параметры.
|
|||
9
Fragster
гуру
10.07.14
✎
14:33
|
||||
10
bahtik
10.07.14
✎
14:33
|
Еще раз повторяю, если кто неправильно понял мой вопрос: нужно просто узнать, нажал пользователь "Провести и закрыть" или "Провести". Еще до самого вопроса.
|
|||
11
Лефмихалыч
10.07.14
✎
14:35
|
(5) ниух все уточняющие вопросы. Если для проведения нужно какое-то значение, его нужно хранить в документе и не давать проводить, пока значение не заполнено.
|
|||
12
Лефмихалыч
10.07.14
✎
14:35
|
(10) неа, нужно тебе что-то другое, а это просто то, *как* ты придумал этого добиться
|
|||
13
bahtik
10.07.14
✎
14:38
|
(11) Да причем тут заполнено или не заполнено? Еще раз: пользователь выбрал, что клиент рассчитывается наличными, но при этом на депозите клиента есть бабло. Вот я и спрашиваю пользователя, а клиент реально не хочет использовать бабло с депозита, или это ты забыл изменить режим оплаты с "наличными" на "с депозита"? Никаких тут реквизитов и т.п.
|
|||
14
bahtik
10.07.14
✎
14:40
|
Если пользователь отвечает "Да" (т.е. "ну да, ничего я не забыл, просто клиент так хочет"), то так и продолжаем проводить документ. А если пользователь выбирает "нет" (т.е. "ой, да, забыл, ща выберу, что надо"), то отменяем команду и позволяем пользователю подумать и выбрать другой режим оплаты.
|
|||
15
Fragster
гуру
10.07.14
✎
14:41
|
(10) см (9), поиск по "Вопрос в обработчике формы ПередЗаписью "
|
|||
16
Fragster
гуру
10.07.14
✎
14:41
|
в обсуждении на партнерском сказали не выпендриваться и сделать свои кнопки.
|
|||
17
bahtik
10.07.14
✎
14:43
|
(9) Блин, ну и зачем мне про "режим модальности". Короче, упрощаю вопрос. Просто ситуация: пользователь нажал одну из двух кнопок в документе, либо "Провести и закрыть", либо "Провести". Как узнать какую из них?
|
|||
18
Лефмихалыч
10.07.14
✎
14:44
|
(17) ни как. Удалить генерируемые системой кнопки и сделай свои, которые будут вызывать нужные тебе методы
|
|||
19
bahtik
10.07.14
✎
14:44
|
(6) Когда уже ты научишься читать вопрос и понимать его?
|
|||
20
bahtik
10.07.14
✎
14:46
|
(18) Ну это я и так понимаю, просто думал, что должны же быть какие-то стандартные механизмы.
|
|||
21
Fragster
гуру
10.07.14
✎
14:47
|
(17) потому что в той статье написано, цитата:
В обработчике события формы ПередЗаписью также может возникнуть потребность задать вопрос. Как и в предыдущем примере. Однако здесь вопрос так просто не решается. Отличие заключается в следующем. В предыдущем примере, оказываясь в обработчике ПередЗакрытием, мы однозначно знали действие, которое должно быть выполнено. Это закрытие формы. Поэтому в обработке оповещения мы смело писали Закрыть(). Но в обработчике ПередЗаписью мы такой однозначной информации не имеем. В этом обработчике мы можем оказаться по двум причинам: если пользователь нажал Записать, или если он нажал Записать и закрыть. То есть дальнейший сценарий действий нам неизвестен. Определить его стандартными способами, находясь внутри этого обработчика, мы не можем. Поэтому тут можно предложить три варианта, но все они, к сожалению, обладают недостатками: Изменить логику прикладного решения так, чтобы не было диалога с пользователем в этом обработчике. Это не всегда возможно; В обработке оповещения с помощью собственной блокирующей формы задавать пользователю развернутый вопрос, предполагающий точное описание дальнейших действий: Отказаться?, Только записать?, Записать и закрыть? Это может выглядеть не очень красиво, ведь пользователь уже нажал "Записать и закрыть", а его опять об этом спрашивают; Не использовать стандартные команды формы Записать, "Записать и закрыть". Вместо них создать собственные команды, в которых и выполнять необходимые алгоритмы. Создание собственных команд потребует дополнительных трудозатрат. |
|||
22
bahtik
10.07.14
✎
14:50
|
(21) Понятно. Т.е. стандартного механизма нет. Печально. Ладно, придется делать свои кнопки... Спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |