Имя: Пароль:
1C
1C 7.7
v7: Процедура ПриЗакрытии() документа
,
0 Mafiozaa
 
18.02.22
05:06
Приветствую, возник вопрос, когда я закрываю документ, выскакивает штатное окно, сохранить (да/нет/отмена)
Создаю процедуру ПриЗакрытии() прописываю туда условия что мне нужны, условия такие, если нет пустых и дублей, то закрыть сохранить, иначе не дать возможность закрыть документ глушу СтатусомВозврата(0).
Вопрос в том, что сперва отрабатывает штатная обработка, а моя лишь по нажатию на Да/Нет/Отмена тоесть если юзер нажмет да, сама форма не закроется, но док сохранится
1 vladmenleo
 
18.02.22
05:28
(0) Штатно на кнопке ОК висят команды
#Записать Провести? Закрыть
вот они и отрабатывают
2 Mafiozaa
 
18.02.22
05:31
(1) Допустим, а как мне провалится в свойства свернуть развернуть и крестика чтоб посмотреть что на них действует, если в модуле ничего про это не прописано
3 vladmenleo
 
18.02.22
05:33
(2) ? что значит в свойства "свернуть развернуть и крестика"
4 Mafiozaa
 
18.02.22
05:35
(3) Я закрываю документ, не по какой то кнопке аля провести и тд на форме, а закрываю через штатный крестик на форме, по нажатию на крестик вылетает окно сохранить да/нет/отмена
5 Mafiozaa
 
18.02.22
05:35
(3) Это какая то предопределенная функция
6 vladmenleo
 
18.02.22
05:35
(2) Жмешь "крестик" - это закрытие формы, соответственно должна отработать процедура кнопки по умолчанию, а что там у тебя назначено тебе видней
7 Mafiozaa
 
18.02.22
05:37
(6) Воот, но процедуры в модуле документа нет, быть может он в глобальном модуле, но там не хотелось бы что то править
8 vladmenleo
 
18.02.22
05:39
(7) Процедура прямо в кнопке прописана
9 vladmenleo
 
18.02.22
05:40
(7) В свойствах кнопки вкладка дополнительно
10 Mafiozaa
 
18.02.22
05:42
(9) Я понимаю, как мне войти в свойства кнопки если это крестик, а не обычная кнопка на форме, когда я двойной щелчок делаю по крестику, вылетает свойства формы
11 vladmenleo
 
18.02.22
05:43
(10) Да забудь ты про крестик, нафиг он тебе сдался. Читай (6) до посинения
12 vladmenleo
 
18.02.22
05:44
(10) Вот из стандартной тис из процедуры приоткрытии
// кнопка по умолчанию
    Если (Форма.ТолькоПросмотр() = 1) ИЛИ ((ДатаДок < Макс(РабочаяДата(), ПолучитьДатуТА()) ) И (Выбран() = 1)) Тогда
        Форма.КнопкаПоУмолчанию("кнЗакрыть");
    Иначе
        Форма.КнопкаПоУмолчанию("кнОК");
    КонецЕсли;
13 Mafiozaa
 
18.02.22
05:47
(12) Это ты где смотришь, в глобальном модуле? не в модуле документа же
14 vladmenleo
 
18.02.22
05:49
(13) в форме документа
15 Kigo_Kigo
 
18.02.22
09:12
По крестику -  утедя будет попрос - сохранить, да нет отмена
если за то ты попадаешь должен попадать в процедуру ПриЗаписи(), Нет - тебя не должно волновать что там, док не запиишится и не сохранится, отмена- обратно в форму
16 Kigo_Kigo
 
18.02.22
09:13
И вообще глупо анализировать данные в приЗакрытии, толку от этого ноль, надо ПриЗаписи()
17 Guk
 
18.02.22
09:52
(16) В некоторых случаях, очень даже не глупо. в 77 нет процедуры ПослеЗаписи, а иногда надо проанализировать что-то с записанным текущим документом. В новом документе в ПриЗаписи ТекущийДокумент() будет пусто...
18 Злопчинский
 
18.02.22
10:41
(7) "соответственно должна отработать процедура кнопки по умолчанию," нихрена подобного
по крестику отрабатывает не процедура кнопки по умолчанию, а ПриЗакрытии()
19 vladmenleo
 
18.02.22
10:55
(18) Сначала срабатывает ПриЗаписи(), потом ОбработкаПроведения() и только потом ПриЗакрытии()
20 Злопчинский
 
18.02.22
11:06
21 Ёпрст
 
18.02.22
11:20
(19) только, ели была модифицированна форма
22 Ёпрст
 
18.02.22
11:20
да и то, там можно играться ПриЗаписиАепепроводить(флаг)
23 Ёпрст
 
18.02.22
11:21
ну и пр кнопку-по умолчанию, тут да, бред, не Пит
24 Злопчинский
 
18.02.22
11:24
(23) я даже кино снял про Бреда Непита в (20), не поленился..
Жду Оскара:
- за сценарий
- за лучшую озвучку
- за лучшую роль второго плана
25 vladmenleo
 
18.02.22
11:40
(20) Разговор про документ, поэтому кина не та :) я тоже проверил на документе  и выводит именно в той последовательности что я показал
26 vladmenleo
 
18.02.22
11:42
(23) может про кнопку и ступил, согласен. а если не модифицировали ничего то тогда конечно только призакрытии, но зачем это вообще отрабатывать немного не понятно
27 Злопчинский
 
18.02.22
13:00
возьму на себя смелость утверждать что в документе ровно та же самая как в кино.
иначе была бы полная хрень
28 Злопчинский
 
18.02.22
13:01
да даже если и модифицировали.
если модифицировали - то перед закрытием отработает ПриЗаписи
но никакого отношения к кнопке по умолчанию не имеет
29 Злопчинский
 
18.02.22
13:40
вторая серия.
форма документа ведет точно также как форма обработки.
при закрытии окна никакие процедуры навешанные на "кнопку по умолчанию" не отрабатывают
https://www.screencast.com/t/V6gYHzefz - демо
.
не вводите Мафиозу в заблуждение.
30 vladmenleo
 
18.02.22
15:42
(29) Еще раз, для некоторых. в (26) я уже признал свою неправоту по поводу кнопки по умолчанию. Прочитай плиз внимательно (19) и закончим эту тупую дискуссию.
31 Злопчинский
 
18.02.22
16:09
919) не тупи. ОбработкаПроведения() срабатывает если документ проведен, да и то - при явном указании в коде ПриЗаписиПерепроводить()
32 Злопчинский
 
18.02.22
16:11
И при чем тут вообще обработка проведения если речь в ошибочном утверждении шла о срабатывании кнопки "по умолчанию" при закрытии крестиком...
документ вообще может не иметь режима проведения.
.
короче - все следим за своими словами пердельно бздительно!  ;-)
33 серый КТУЛХУ
 
18.02.22
19:36
vladmenleo перестаньте пороть чушь и плясать с кнопками по умолчанию как тот дурак с писаной торбой.
кнопки по умолчанию и прочиет процедуры при закрытии по "крестику"/[Esc] - никаким боком. читайте (18) по слогам до просветления и не сыпьте эпидермис в ленту.
34 Злопчинский
 
18.02.22
19:44
(33) он уже понял всю глубину своего падения и сознался что ступил, но попытался увильнуть, приплетя обработкуПроведения зачем-то...
35 Злопчинский
 
18.02.22
19:44
хотя ладно, чего это мы злопствуем...
бывает
ступил человек...
36 Mafiozaa
 
21.02.22
08:50
(29) Посмотрел, логика ясна, но вот беда, нажимаю на крестик форма не закрывается, так как условие по закрытию не выполняется, но док в журнале записывается, вот пример наглядно

    Процедура ПриЗаписи()
        Сохранить = 1;
        ВыбратьСтроки();
        Пока ПолучитьСтроку() = 1 Цикл
            Если ПустоеЗначение(КодМаркировки) = 1 Тогда
                Сообщить("В строке №: " + НомерСтроки + " " + "не внесен код маркировки. Документ не сохранен!!!");
                Сохранить = 0;
            КонецЕсли;    
        КонецЦикла;
        Если Сохранить = 1 Тогда
            ЗначениеВФайл(КаталогИБ()+"SaveMark\"+ДокОснование.НомерДок+ДокОснование.ДатаДок+"Mark.dat",ИтогТЗ);
            Записать();
        КонецЕсли;
    КонецПроцедуры
    
    Процедура ПриЗакрытии()
        СтатусВозврата(0);
    КонецПроцедуры

Логика какая, если есть пустые строки в документе док не сохраняем, и форму не закрываем пока не исправится, в итоге что вижу я, в доке пустые строки есть, форма не закрывается, но док в журнале записывается.
А если пустых строк нет, то оно как бы правильно и отрабатывает, так вот почему при пустой строке, при форме которая не закрывается через крестик, происходит запись дока в журнал
37 Mafiozaa
 
21.02.22
09:08
+ (36) При закрытии стоит статус возврата, тоесть он впринципе не должен мне форму закрывать ни при каких условиях, даже при полных строках он закрывает
38 серый КТУЛХУ
 
21.02.22
17:18
да не надо тебе ничего в ПриЗакрытии.
в ПриЗаписи - если есть ошибочная строка - сразу после сообщения влепи СтатусВозврата(0);
и всё.
39 Злопчинский
 
21.02.22
17:46
(37) трындеж. смотри/копай внимательнее
40 Злопчинский
 
21.02.22
17:55
(36) см. (38)
       Если Сохранить = 1 Тогда
            ЗначениеВФайл(КаталогИБ()+"SaveMark\"+ДокОснование.НомерДок+ДокОснование.ДатаДок+"Mark.dat",ИтогТЗ);
       КонецЕсли;
       СтатусВозврата(Сохранить);
КонецПроцедуры.
.
но тут надо сильно подумать что будет если во время записи документа платформа напорется на транзакцию и получится отлуп (или какойнить ч(м)удал затер номер или дату документа - запись сломается, а у тебя уже во внешний каталог инфа скинута, сие есть ябка
Посему я бы подстраховался типа
.
        Если Сохранить = 1 Тогда
            Попытка Записать();
            Исключение
              Сообщить(ОписаниеОшибки);
              СтатусВозврат(0);
              Возврат;
            КонецПопытки;
            ЗначениеВФайл(КаталогИБ()+"SaveMark\"+ДокОснование.НомерДок+ДокОснование.ДатаДок+"Mark.dat",ИтогТЗ);
        КонецЕсли;
        СтатусВозврата(Сохранить);
41 Злопчинский
 
21.02.22
17:58
(36) " так вот почему при пустой строке, при форме которая не закрывается через крестик, происходит запись дока в журнал"
потому что ты ывно не указал что ПриЗаписи() должна закончиться с отлупом по СтатусВозврата(0);
.
если ПриЗаписи заканчивается со статусВозврата = 1Ю то выполняется запись - поэтому делать саму Записать() в ПриЗаписи() - не всегда полезно...