Имя: Пароль:
1C
1С v8
оповещение пользователю в форме документа Бухгалтерия 3.0
,
0 Новый1сник2
 
30.11.22
13:33
Добрый день!

делаю перед записью в форме документа оповещение пользователю
если пользователь нажимает провести или записать, оповещение работает и в зависимости
от выбора до заполняются, некоторые реквизиты.

если же пользователь нажимает "провести и закрыть", оповещение задает вопрос, но не дожидаясь ответа,
документ проводится и закрывается. при этом еще выводит сообщения.
подскажите как настроить чтобы документ не проводился, пока пользователь не выбрал ответ
1 Максим Нижегородец
 
30.11.22
13:40
Через КОСТЫЛЬ это получается сделать. Добавляется реквизит на форму (типа булево) и пока он Ложь не давать записывать и закрывать форму. А когда ответили на вопрос, то закрывать и записывать с реквизитом  в Истина.
2 arsik
 
гуру
30.11.22
13:42
(0) Добро пожаловать в управляемые формы и асинхронность
3 Новый1сник2
 
30.11.22
13:42
думал об этом, реквизит формы доступен будет в модуле объекта ?
4 Максим Нижегородец
 
30.11.22
13:46
(3) Нет, эта схема работы в рамках формы производится "НаКлиенте".
5 arsik
 
гуру
30.11.22
13:47
(3) Нет конечно. Скорее всего нужно через ДополнительныеСвойства это реализовывать.

ДокументОбъект.<Имя документа> (DocumentObject.<Document name>)
ДополнительныеСвойства (AdditionalProperties)
Использование:
Только чтение.
Описание:
Тип: Структура.
Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
6 rozer76
 
30.11.22
13:50
(4) не знаю как у вас там в БП3 )) но в КА 2.4/УТ11.4 в форме заказе в клиента поглядите как отрабатывается многооборотная тара...и да (2)

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    
    Если НеВыполнятьПроверкуПередЗаписью Тогда
        НеВыполнятьПроверкуПередЗаписью = Ложь;
        Возврат;
    КонецЕсли;
    
    // Если документ проводится, проверим рассчитанность скидок и корректность графика оплаты по заказу.
    Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        
        Отказ = Истина;
        ДополнительныеПараметры = Новый Структура;
        ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
        МногооборотнаяТараКлиент.ПредложитьПодобратьМногооборотнуюТару(
            ЭтаФорма,
            "Товары",
            "Номенклатура,Характеристика,Количество,Склад,ДатаОтгрузки",
            Новый ОписаниеОповещения("ПередЗаписьюПредложитьПодобратьМногооборотнуюТаруЗавершение", ЭтотОбъект, ДополнительныеПараметры));
    КонецЕсли;
7 rozer76
 
30.11.22
13:51
(6) к (0)
8 Новый1сник2
 
30.11.22
13:52
(6) НеВыполнятьПроверкуПередЗаписью это реквизит документа ?
9 rozer76
 
30.11.22
13:53
(8) да, но там надо сначала раскурить как происходит запись - там много чего интересного
10 Максим Нижегородец
 
30.11.22
14:07
Вы меня заинтриговали. Зачем для интерактивного функционала использовать реквизиты Документа (т.е. реквизиты, которые могут быть использованы при проведении обработкой и т.п.)?
11 Новый1сник2
 
30.11.22
14:18
(10) если будет перепроведение то в реквизите уже будет истина

вставил такой код в обработку проведения и перед записью

    Если  Не мНеВыполнятьПроверкуПередПроведением Тогда
        Возврат;
    КонецЕсли;
документ все равно проводится и закрывается
12 Максим Нижегородец
 
30.11.22
14:25
(11) Схема программируется нормально на уровне формы (На Клиенте). Нужно просто предусмотреть обработку событий при нажатии разных КНОПОК и обрабатывать события формы "ПередЗаписью", "ПередЗаписьюНаСервере", "ПослеЗаписиНаСервере" и т.п.
13 Новый1сник2
 
30.11.22
14:26
(12) звучит красиво, как можно перехватить событие "Провести и закрыть" ?
14 Максим Нижегородец
 
30.11.22
14:32
Обрабатывать ПередЗаписью(<Отказ>, <ПараметрыЗаписи>) - закрытие формы происходит позднее (на момент закрытия документ может быть проведен). Если нужно отдельная обработка события именного этой кнопки, придется эту кнопку подменять своей (и вешай на нее что хочешь).
15 Новый1сник2
 
30.11.22
14:44
(14) так перед записью и делаю, оповещение срабатывает, а документ проводится и закрывается.
16 Новый1сник2
 
30.11.22
14:48
(14) добавил
Отказ = Истина;
форма документа остается открытой как бы так и нужно, но выдает ошибку не удалось
Не удалось провести: "Перемещение товаров, материалов"!
17 Максим Нижегородец
 
30.11.22
15:02
(16) В самом начале процедуры ПередЗаписью(<Отказ>, <ПараметрыЗаписи>) выполняем проверку на наше ОСОБОЕ УСЛОВИЕ и далее:

Отказ = Истина;
Возврат; // Это важно, чтобы не было глупых сообщений.
Иначе
Отказ = Ложь;
// Пошли дальше по АЛГОРИТМУ
18 Новый1сник2
 
30.11.22
15:07
(17) так и сделано
Отказ = Истина;
Возврат;
19 Новый1сник2
 
30.11.22
15:08
похоже не получится так сделать, потому что есть и программное создание документов и с этой проверкой не работает.
20 Максим Нижегородец
 
30.11.22
15:20
(19) Есть проверка на вновь созданный документ (еще не записанный), это тоже проверяется при написании логики.
Поверь, пока не нашлось еще такого КОСТЫЛЯ, который не смог написать наш программист для УФ - чтобы пользователь остался доволен (как в былые времена без УФ).
21 Новый1сник2
 
30.11.22
15:22
(20) "Есть проверка на вновь созданный документ (еще не записанный)" это уже есть
22 Новый1сник2
 
30.11.22
15:24
завтра может придумаю костыль, сегодня уже неохота
23 Новый1сник2
 
30.11.22
17:24
поменял логику, сделал оповещение при открытии если документ новый. при записи проверки стали не нужны
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс