Имя: Пароль:
1C
 
Как прервать проведение документа, и записать его?
🠗 (Волшебник 08.02.2024 19:49)
,
0 tabarigen
 
08.02.24
17:11
Попробовал так

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    //....
    Отказ= Истина;
    Записать(РежимЗаписиДокумента.Запись);
    //....
КонецПроцедуры


но не прокатило.
1 Волшебник
 
08.02.24
17:15
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Возврат;
КонецПроцедуры
2 tabarigen
 
08.02.24
17:16
(1)  а произойдет ли в таком случае Запись?
3 Волшебник
 
08.02.24
17:17
(2) да
4 Garykom
 
гуру
08.02.24
17:23
Движения останутся старыми (если документ был уже ранее проведен)
Получится рассинхронизация между самим документом и его движениями/проводками
5 tabarigen
 
08.02.24
17:24
(3) проверил)
Записи не происходит, что в принципе логично.
6 Волшебник
 
08.02.24
17:27
(5) Плохо проверяли. Должно получиться (4)
7 tabarigen
 
08.02.24
17:40
(4) я же написал, что должны сохраниться изменения но проводиться док  не должен.

например я поменяю значения в реквизите комментарий и  буду проводить док.

Так вот я хочу чтоб док не проводился то есть Отказ=Истина;
и чтоб дох записался при этом  в режиме Запись
8 tabarigen
 
08.02.24
17:42
Если НЕ ТчСоответствуетПеремещению Тогда
        Отказ= Истина;
        Записать(РежимЗаписиДокумента.Запись);
        Возврат;
    КонецЕсли;

скорее всего так

а запись не происхоит потому что типовые процедуры переписаны  вдоль и поперек
9 Волшебник
 
08.02.24
17:52
(7) Уберите Отказ=Истина и остальные строчки, оставьте только Возврат. Не искажайте мою мысль
10 RomanYS
 
08.02.24
18:17
(0) в транзакции проведения боржоми пить уже поздно. Сохранить и не провести не получится. Сделай внешнюю обертку для проведения.
И не надо ничего менять в объекте в процессе проведения, делайте это ПередЗаписью (можно проверить режим записи, если нужно)
11 RomanYS
 
08.02.24
18:19
(7)
Док.Записать();
Док.Записать(РежимЗаписиДокумента.Проведение)
12 RomanYS
 
08.02.24
18:19
+(11) или так
Попытка
    Док.Записать(РежимЗаписиДокумента.Проведение)
Исключение
    Док.Записать();
КонецПопытки;
13 Волшебник
 
08.02.24
18:42
Мне сейчас лениво проверять, но может сработает это?

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
  Если НеДелатьДвижения тогда
    Проведен = Ложь;
    Возврат;
  КонецЕсли;
  
  // ниже стандартная обработка проведения
  // ...

КонецПроцедуры
14 Прохожий
 
08.02.24
18:51
(13) Конечно сработает, но документ будет проведенный. Хоть и без проводок. А он хочет чтобы проведен = ложь после обработки проведения стало. Даже если он перепроводит уже проведенный документ чтобы он тоже стал не проведенным.
15 Волшебник
 
08.02.24
18:54
(14) Вы проверили? Жаль, что платформа присваивает Проведен=Истина в конце. А ведь могло быть красиво: проведение без галочки и непроведение с галочкой - полный полёт фантазии и театр абсурда.
16 Прохожий
 
08.02.24
18:54
(7) Если настала ОбработкаПроведения то он уже проводится. Как может быть "но проводиться док  не должен"?
17 Волшебник
 
08.02.24
18:55
(16) Слово "проводится" ничего не означает.
Это куски программного кода, которые делают движения по регистрам, и галочка "Проведен".
Так Вы проверяли или гадаете вместе со мной?
18 tabarigen
 
08.02.24
18:56
(12) все верно, перенес в ПередЗаписью()

но все равно пока не могу добиться сохранения.


    Если ЗначениеЗаполнено(ТранзитноеПеремещение) Тогда
        ТчСоответствуетПеремещению = ПроверитьСоответствиеТоваровВПеремещении(ТранзитноеПеремещение);
        Если НЕ ТчСоответствуетПеремещению Тогда
            #Если Клиент Тогда
            Сообщить("Для транзитных отгрузок количество товара в накладной должно соответствовать количеству в связанном перемещении");
            #КонецЕсли
        КонецЕсли;
    КонецЕсли;
    
    Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        Попытка
        
            Записать(РежимЗаписиДокумента.Запись);
            Отказ = Истина;
            Возврат;
            
        Исключение
             Сообщить(ОписаниеОшибки());
        КонецПопытки;    
    КонецЕсли;
19 Прохожий
 
08.02.24
18:58
(8) "запись не происхоит" видимо потому что текущая транзакция уже заблокировала этот же объект. По идее самовзаимоблокировка, дэдлок, но кто-то защиту от дурака вставил в платформу.
20 Прохожий
 
08.02.24
18:59
(17) Делайте ставки, господа... Кто ж такое проверяет.
21 Волшебник
 
08.02.24
19:00
(18) Пока Вы оставляете фразу "Отказ = Истина;", ничего не получится. Транзакция отменяется. Транзакция включает в себя и запись документа. Вы хотите не делать движений при определённых условиях. Сдвиньте контекст.
22 Прохожий
 
08.02.24
19:00
Мы проверяем только собственные телепатические способности.
23 Прохожий
 
08.02.24
19:01
Ладно, попробуем сейчас...
24 tabarigen
 
08.02.24
19:05
(21) да все верно.
Я что то концептуально делаю не так..
Возможно не в тех обработчиках.
25 Волшебник
 
08.02.24
19:07
(20) Я проверил. Галочку "Проведен" ставит платформа в конце ОбработкаПроведения.
Так что только обёртки из формы как пишет RomanYS в (10)(11)(12)
26 H A D G E H O G s
 
08.02.24
19:10
Вызови фоновое задание да запиши там.
27 Волшебник
 
08.02.24
19:14
Внутри ОбработкаПроведения() фраза "Отказ=Истина" или выброс исключения приведёт к отмене _записи_ документа, потому что запись+проведение выполняются в одной транзакции.

Если же Вы не проведёте документ по регистрам (не сделаете движения), то всё отработает без ошибок (документ будет записан), но флаг Проведен будет Истина, появится синяя галочка. И не важно, что вы меняли флаг Проведен внутри ОбработкаПроведения, оно присваивается в Истина в конце, потому что не было Отказ=Истина и не было исключения.
28 Волшебник
 
08.02.24
19:15
(26) При чём тут фоновые задания?
29 Asmody
 
08.02.24
19:16
(0) Зачем?!
30 Волшебник
 
08.02.24
19:16
(29) Ну всё, лесник пришёл...
31 tabarigen
 
08.02.24
19:17
В общем сделал так.

В передзаписью()

Проверяю  и устанавливаю флаг ТчСоответствуетПеремещению


    Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        
        ТранзитноеПеремещение = ПолучитьСвязанноеТранзитноеПеремещение();
        Если ЗначениеЗаполнено(ТранзитноеПеремещение) Тогда
            ТчСоответствуетПеремещению = ПроверитьСоответствиеТоваровВПеремещении(ТранзитноеПеремещение);
        КонецЕсли;
        
    КонецЕсли;

А потом уже в ОБработкеПроведения проверяют этот флаг и делаю Отказ
32 Волшебник
 
08.02.24
19:18
(31) Ну ок. Мы нихрена не поняли Вашу бизнес-логику, но если Вас устраивает, то ок.
33 Прохожий
 
08.02.24
19:26
Можно так попробовать, но на сервере оповещений нет. Смысл общий понятен, через длительные операции (фоновым заданием) переделать легко.

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

Процедура ОбработкаПроведенияЗавершение(Результат, ДополнительныеПараметры) Экспорт
    
    Док = ДополнительныеПараметры.ЭтаСсылка.ПолучитьОбъект();
    Пока Док.Заблокирован() Цикл
    КонецЦикла;
    
    Док.Записать(РежимЗаписиДокумента.Запись);
    
КонецПроцедуры
34 Прохожий
 
08.02.24
19:23
(26) + 1
35 Волшебник
 
08.02.24
19:26
(33) Чушь какая-то
36 Прохожий
 
08.02.24
19:26
Мир начинался с хаоса
37 Прохожий
 
08.02.24
19:26
Иначе дорабатывать будет нечего. ТС наш человек.
38 Волшебник
 
08.02.24
19:28
(37) Я слежу за вами всеми и всеми вами. Вы мне не нравитесь.
39 tabarigen
 
08.02.24
19:45
(33)  так у меня вообще Обычные формы)
40 Волшебник
 
08.02.24
19:45
(39) 👍 Наш человек!
41 tabarigen
 
08.02.24
19:46
(37) а ты такое ТЗ бизнеса иначе  не решишь)
Я еще опустил ту часть ТЗ в которой просили в транзации проведения  Создавать и проводить связанные документ)
42 tabarigen
 
08.02.24
19:46
(40) хватит троллить
43 Волшебник
 
08.02.24
19:47
(42) Ага, но я не смогу удержаться, если захочу протроллить кого-то на своём форуме.
44 Волшебник
 
08.02.24
19:50
(41) Ваша орг-фигня не имеет отношения к сабжу, так что я ветку закрываю. Вам даётся право последнего слова.
45 Прохожий
 
10.02.24
20:25
(39) Я надеялся что у вас шестерка, хотел предложить сразу оригинальный переход на 8.3
AdBlock убивает бесплатный контент. 1Сергей