Имя: Пароль:
1C
1C 7.7
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) это когда про блокировку/транзакцию выскакивает интерактивное окно? хз, даже не знаю что выдаст платформа в окно если выбрать кансел... моделировать лень (по отдельному предметному запросу если только)