Имя: Пароль:
1C
1С v8
Тонкий клиент. Проведение документа. Спросить пользователя.
,
0 Target1025
 
18.07.22
12:13
В Толстом клиенте в методе клиента формы ПередЗаписью можно было тормознуть процесс и задать вопрос пользователю. В Тонком клиенте Модальные окна запрещены, вызовы асинхронные, т.е. процесс проведения тормознуть нельзя и пользователя спросить невозможно, так получается?
1 timurhv
 
18.07.22
12:15
Стандартные команды убирать, добавлять свои в форму документа\справочника, а также на формы списка и журналы документов\общие формы.
2 1Сергей
 
18.07.22
12:15
В асинхронном вызове можно указать какая процедура будет выполнятся после реакции пользователя
3 Ryzeman
 
18.07.22
12:17
(2) событие ПередЗаписью-то при этом не тормознётся.. Наверное. ТС об этом.
4 Target1025
 
18.07.22
12:18
(3) Да, об этом. Оно отлетит и проведение пойдет себе дальше. Отменить проведение вопросом пользователю, получается, невозожно.
5 1Сергей
 
18.07.22
12:20
(3) Дык, надо переписывать процедуру при записи. После вызова диалога ничего не делать
6 Ryzeman
 
18.07.22
12:24
(4) ИТС такие огороды рекомендует городить... Если ОЧЕНЬ надо:

https://its.1c.ru/db/metod8dev/content/5272/hdoc
7 RomanYS
 
18.07.22
12:25
(4) Не надо тормозить проведение. Нужно его запускать только при выполнении условий.
(0) Кстати для толстого клиента это тоже очень плохо: подвешивать на неопределенное время открытую транзакцию
8 1Сергей
 
18.07.22
12:25
И посмотрите как в типовых сделано
9 Kassern
 
18.07.22
12:26
(0) " пользователя спросить невозможно, так получается" - все можно, если осторожно и с умом)
Делаете свою кнопку записи/проведения с блекжеком и вопросами
10 Kassern
 
18.07.22
12:27
примерно так же поступают и в типовых конфах
11 Ryzeman
 
18.07.22
12:29
(7) ТС всё правильно делает и вопрос там где надо. Просто сказал чуток криво. Он хочет задавать вопрос ПередЗаписью - это в общем то самое правильное место для диалога с пользователем для его задачи.
12 Target1025
 
18.07.22
12:29
(7) "ПередЗаписью" работает не в транзакции.
(9) Видимо с кнопой и придется работать, спасибо.
13 Ryzeman
 
18.07.22
12:31
(12) А чем вариант ИТС не нравится?) Ну помимо смысловой убогости. По реализации то явно попроще, да и по-понятнее. Из ссылки выше:

&НаКлиенте
Перем ОтветПередЗакрытием;


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


&НаКлиенте
Процедура ПередЗакрытиемЗавершение(Результат, Параметры) Экспорт
       Если Результат = КодВозвратаДиалога.Да Тогда
             ОтветПередЗакрытием = Истина;
             Закрыть();
       КонецЕсли;  
КонецПроцедуры
14 Target1025
 
18.07.22
12:33
(13) Пользователь может нажать "Провести", передЗАкрытием не будет вызвано. Требуется проверить, задать вопрос и при необходимости подправить док.
15 Kassern
 
18.07.22
12:34
(13) и как это поможет ТС? Ему нужно стопорнуть запись объекта и задать вопрос. А от варианта ответа будет зависеть, продолжится запись, или нет.
16 Kassern
 
18.07.22
12:35
(14) посмотрите как в типовой УТ11 сделано. Там эти кнопки переопределены поэтому без проблем задать вопрос, а уж по ответу начать запись, или не начинать.
17 Фрэнки
 
18.07.22
12:38
(14) Вот как раз посмотрел на кнопку Провести

&НаКлиенте
Процедура ПровестиДокумент()
    
    ОчиститьСообщения();
    
    Если Объект.ПометкаУдаления Тогда
        ПоказатьПредупреждение(, НСтр("ru = 'Помеченный на удаление документ не может быть проведен.'"));
        Возврат;
    КонецЕсли;
    
    Если СотрудникиКРасчету.Количество() > 0 Тогда
        РасчетЗарплатыРасширенныйКлиент.ПередЗаписьюДокументаСоСпискомСотрудников(ЭтаФорма, "ПровестиДокументОкончание");
    Иначе
        ПровестиДокументНаКлиенте();
    КонецЕсли;

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

Это в ЗУП в модуле формы документы Начисление
18 Ryzeman
 
18.07.22
12:40
(14)(15)  Да при чём тут перед закрытием... Это ж, блин, пример. Переделать под ПередЗаписью - то же самое. Переменную на отказ записи, её отказ в самой процедуре, а при успешной проверке взводим отказ в ложь и Записать(). Разве что режим записи наследовать надо.
19 Target1025
 
18.07.22
12:41
(17) спасибо!
20 Kassern
 
18.07.22
12:52
(18) Вы предлагаете всегда отказ=истина для записи документа, а после вызывать вопрос и записывать при успешном ответе?
21 Ryzeman
 
18.07.22
12:59
(20) не я, ИТС. Но да. В принципе это происходит ещё до обработки проверки заполнения даже... Тормозить не должно - нечему.
22 Kassern
 
18.07.22
13:07
(21) Типовая торговля придерживается вот такой практики:
&НаКлиенте
Процедура ПровестиДокумент(Команда)
    
    ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма, Истина);
    
КонецПроцедуры
23 1Сергей
 
18.07.22
13:26
(22) В проведении уже никаких вопросов не задается
Независимо от того, куда вы едете — это в гору и против ветра!