|   |   | 
| 
 | Как прервать проведение документа,  и записать его? ↓ (Волшебник 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     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |