Имя: Пароль:
1C
1С v8
Как понять в ПослеЗаписиНаСервере что форма будет закрыта (нажато провести и закрыть)?
,
0 MaiorovYury
 
21.10.19
15:52
Всем доброго дня!
Собственно сабж
Есть форма документа, в которой в процедуре ПослеЗаписиНаСервере читаю еще кучу смежных данных. Соответственно если форма сразу же закрывается, то смысла в этом нет. Как понять - форма будет закрыта сразу после записи или нет?
1 Beduin
 
21.10.19
15:56
ПриЗакрытии и ПередЗакрытием обработчики есть
2 Kigo_Kigo
 
21.10.19
15:58
А в параметрах записи нельзя проверить что передается, там есть "выполнить" и "выполнить и закрыть" , что установлено в истину, иль я что то не так понял?
3 MaiorovYury
 
21.10.19
15:58
(1) да, есть. Но они вызываются после ПослеЗаписиНаСервере, так что в моей задаче не помогут
4 MaiorovYury
 
21.10.19
15:59
(2) в параметрах записи только РежимПроведения и РежимЗаписиДокумента
5 Beduin
 
21.10.19
16:00
(3) Тогда объясни, зачем надо именно в этой процедуре читать данные?
6 DrWatson
 
21.10.19
16:02
Событие ПередЗакрытием, делаем СтандартнаяОбработка = Ложь и всю логику реализуем сами. Так мы получим возможность запомнить, что форма закрывается.
7 butterbean
 
21.10.19
16:04
(0) в любой непонятной ситуации - делай свою кнопку
8 MaiorovYury
 
21.10.19
16:28
(5) а какие еще варианты есть? Мне в зависимости от статуса документа нужно скрывать определенные кнопки. Пользователь изменил статус, нажал записать - после записи мне нужно что-то сделать, причем делать это если форма закрывается смысла нет
Смотрел порядок выполнения обработчиков по ссылке ниже и ничего лучше не нашел
https://its.1c.ru/db/pubdevguide83/content/612/hdoc
9 MaiorovYury
 
21.10.19
16:30
(6) так ПередЗакрытием не будет вызываться по кнопке Записать, а мне в таком случае надо как раз обновить данные на форме
10 MaiorovYury
 
21.10.19
16:31
(7) не уж то это единственный вариант?)
11 Дык ё
 
21.10.19
16:58
(10) да
12 D_E_S_131
 
21.10.19
17:11
"причем делать это если форма закрывается смысла нет" - кому-то хуже от этого будет?
13 MaiorovYury
 
21.10.19
17:30
(12) да, производительности хуже
Документ проводится 3 секунды, из них 1 секунду перечитываются данные
Таких проводок тысячи в день
14 Александр Б
 
21.10.19
17:38
(13) Как вариант, типовую "Провести и закрыть" спрятать и добавить свою. В ней сделать нужный флаг.
15 Mort
 
21.10.19
17:43
Может просто стоит подумать как сократить время чтения?
16 pechkin
 
21.10.19
17:49
нужно читать не в после записи, а в при чтении на сервере
17 bolero
 
21.10.19
17:50
(15) расскажи это разработчикам установки цен номенклатуры в УТ11
если там овер 1000 строк - можно смело на обед идти

может у него похожего порядка документ
18 D_E_S_131
 
21.10.19
18:22
(13) "Мне в зависимости от статуса документа нужно скрывать определенные кнопки" - минуточку, какие "1 секунду перечитываются данные"? Мы же статус проверяем, который тут же в документе изменен.
19 bolero
 
22.10.19
11:18
А у меня такая задача сегодня возникла:

При проведении заказа могут быть выданы предупреждения (не ошибки с отказом в проведении, а именно предупреждения, чтобы человек принял решение). Если ткнуть [Провести и закрыть] - эти предупреждения уходят в никуда.

К тому же заметил такой антипаттерн: люди хотят записать документ, а вместо этого нажимают [Провести и закрыть], а потом заново открывают его из списка. На вопрос "зачем" отвечают, что лично им это быстрее, чем найти на форме отдельные кнопки провести или записать.

Так что присоединяюсь к вопросу.
20 Cyberhawk
 
22.10.19
11:22
Могу ошибаться, но и без кнопки можно отличить проведение с закрытием от проведения / записи без закрытия формы объекта - в первом случае объект не перечитывается
21 Cyberhawk
 
22.10.19
11:22
+(20) Соответственно, как подвязаться к перечитыванию объекта уже сам найдешь
22 Ns33
 
22.10.19
11:43
Такая идея:
ПередЗаписью - подключаешь обработчик ожидания, который примерно через 0.5 сек обновляет данные на форме
ПередЗакрытием - отменяешь обработчик. Если ПередЗакрытием  не вызвалось, значит форму не закрывают и обработчик отрабатывает.
23 bolero
 
22.10.19
13:34
(19) ОбщегоНазначенияУТКлиент

&Вместо("ЗаписатьОбъектИЗакрыть")
Процедура ХХХ_ЗаписатьОбъектИЗакрыть(Форма, ПараметрыЗаписи)
    
    // { ХХХ
    Если ТипЗнч(Форма.Объект.Ссылка) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
        // Люди используют кнопку [Провести и закрыть] вместо обычной Провести, так как эта больше.
        // А там важные сообщения исчезают.
        // Ну ок, [Провести и закрыть] теперь работает как [Провести]
        ПараметрыЗаписи.ПринудительноЗакрытьФорму = Ложь;
    Иначе
        ПараметрыЗаписи.ПринудительноЗакрытьФорму = Истина;
    КонецЕсли;
    // } ХХХ
    ОчиститьСообщения();
    
    Если ПараметрыЗаписи.ЕстьВопросыПередЗаписью Тогда
        ПараметрыЗаписи.НовыйОбъект = Не ЗначениеЗаполнено(Форма.Объект.Ссылка);
        Форма.ПринудительноЗакрытьФорму = ПараметрыЗаписи.ПринудительноЗакрытьФорму;
        Форма.Записать(ПараметрыЗаписи);
    Иначе
        Если ЗаписатьОбъект(Форма, ПараметрыЗаписи) Тогда
            Форма.Закрыть();
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.