|   |   | 
| 
 | v7: Проведение документа в 1С 7.7 | ☑ | ||
|---|---|---|---|---|
| 0
    
        Franchiser 12.09.24✎ 13:13 | 
        Во внешней обработки есть код: 
 Статус = ДокОбъект.Провести(); Если Статус = 0 Тогда ТекстСообщения = "Не проведен! "+ ДокОбъект; Сообщить(ТекстСообщения); КонецЕсли; В семерке ошибка при проведении не приводит к возникновению исключительной ситуации. Есть ли возможность детализировать причину ошибки по которой документ не провелся? | |||
| 1
    
        Guk 12.09.24✎ 19:44 | Попытка Статус = ДокОбъект.Провести(); Исключение Сообщить(ОписаниеОшибки()) КонецПопытки; но скорее всего вернет какую-нибудь хрень. вообще ошибки при проведении лучше прописывать в сообщениях процедуры Обработка Проведения... | |||
| 2
    
        MWWRuza гуру 12.09.24✎ 13:43 | 
        Да, все так... Попытка/исключение выводит системные ошибки, например, если объект заблокирован кем-то, какой-то реквизит к которому обращаешься отсутствует, или еще чего-то вроде этого...
 То, что не хватает какого-то товара или еще какая-то причина в алгоритме самого действия, это не те ошибки, и надо их самому обрабатывать и выводить понятную расшифровку. | |||
| 3
    
        mishaPH 12.09.24✎ 13:50 | 
        (0) 
 ДокОбъект.Провести(); Если ДокОбъект.Проведен() = 0 Тогда ТекстСообщения = "Не проведен! "+ ДокОбъект.ТекущийДокумент(); Сообщить(ТекстСообщения); КонецЕсли; | |||
| 4
    
        uno-group 12.09.24✎ 14:11 | 
        (3) Провести(); возвращает 0 или 1 в зависимости от того удалось провести или нет. Проведен() тут лишнее.
 В обработке проведение расписаны (расписывают) причины и они в окно сообщений выводятся. Возможно где то в настройках нужно включить уровень детализации ошибок проведения, чтобы это подробнее описывалось | |||
| 5
    
        АльПачин 12.09.24✎ 14:28 | 
        в добавок к (3)
 ДокОбъект.Провести(); Если ДокОбъект.Проведен() = 0 Тогда приведет к тому что если ПЕРЕПРОВОДИТСЯ уже проведенный документ, и проведение было неудачным, то Док.Проведен() - все так же будет =1... | |||
| 6
    
        Arbuz 12.09.24✎ 15:23 | 
        (0) Дэк, "причина ошибки по которой документ не провелся" ограничена лишь фантазией прога в модуле проведения этого документа (СтатусВозврата(0) и НеПроводитьДокумент()).
 Причём да, если при проведении документа произойдёт действительно исключительная ситуация, то она не ловится обёрткой Попытка-КонецПопытки метода Провести(). | |||
| 7
    
        Franchiser 12.09.24✎ 19:04 | 
        (1) так дело в том что если документ не удалось провести в исключение не попадает.
 По какой причине вообще документ может быть не проведен? Только если статус возврата(0) в обработке проведения? Как его поймать извне если обработка запускается в регламенте, нужно записать во внешней обработке более точное описание ошибки во внешнюю систему? Можете привести кейс при котором метод провести() выдаст значение 0 без попадания в статусвозврата(0) в обработке проведения? Может быть это какой то случай когда проводится документ помеченный на удаление? | |||
| 8
    
        Злопчинский 12.09.24✎ 19:35 | 
        (7) "Только если статус возврата(0) в обработке проведения?"
 - не обязательно, например деление на ноль приведет к тому что Провести() вернет 0 или синтаксическая ошибка времени исполнения итд . "Как его поймать извне если обработка запускается в регламенте" - никак, ловить то, что возвращает Док.Провести() . "нужно записать во внешней обработке более точное описание ошибки во внешнюю систему?" - системно генерируемые платформой сообщения выводятся в окно сообщений, иное - то что напишет погромист в лог или в то же самое окно сообщений. . текущий релиз формекса предоставляет развитые средства как перехвата сообщений в системное окно сообщений, так и записи содержимого окна сообщений в файл и организации нескольких оконс сообщений - что надо/как хочется - так и делаешь... | |||
| 9
    
        Злопчинский 12.09.24✎ 19:36 | 
        в свое время писал неоднократно пакетные проведения с логгированием сообщений выводимых в окно сообщений (еще с использованием 1spy), нормально все...     | |||
| 10
    
        Franchiser 12.09.24✎ 21:30 | 
        (9) я правильно понял, что ошибка timeout то же может привести к тому, что провести()=0?
 Где тогда увидеть сообщение что причина ошибки именно во времени ожидания? Это выведется платформой в окно сообщений? Можно ли как то искусственно воспроизвести ошибку времени ожидания? | |||
| 11
    
        Злопчинский 13.09.24✎ 01:01 | 
        (10) это когда про блокировку/транзакцию выскакивает интерактивное окно? хз, даже не знаю что выдаст платформа в окно если выбрать кансел... моделировать лень (по отдельному предметному запросу если только)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |