Имя: Пароль:
1C
 
сообщение пользователю при проведении документа
,
0 lamme
 
01.12.21
12:38
унф 1,6
сделан робот - на автоматическое проведение документа -= закрытие месяца
время срабатывания - 23,30

при проведении документа возникает ошибка - не типовая.
типа -не заполнен счет учета в проводке ..
те эту ошибку видно только при ручном проведении документа .
и то - это сообщение платформы.
(в типовом проведении есть таблицаошибок - типа ТЗ, но в данной ошибке - эта таблица пустая)

Как такие сообщения отловить и отправить пользователю
которого нет в 1С сейчас?


Попытался отправить письмом
т.е. где то там идет
Попытка
            РассчитатьСтомостьВозвратов(); // предварительный расчет стоимости возвратов.
        исключение
            СделатьРассылкуОбОшибкеПользователю("Ошибка при РассчитатьСтомостьВозвратов()" + ОписаниеОшибки());
        конецпопытки;


В процедуру СделатьРассылкуОбОшибкеПользователю(тСообщения)
пытался и письмо создать
и в регистр новый писать

отваливается  с ошибкой - в данной транзакции происходили ошибки

Логично что они происходили -это и ловим же.
Собственно - как я понимаю-  когда документ проводиться- то все расчеты на уровне платформы идут в транзакции/попытке
и если что - то все откатывается.

т.е. одна попытка/транзакция на уровне запроса (штатная так сказать)
вторая - уже моя.
и понятно  -что "в данной транзакции происходили ошибки"


Как обойти можно ?
1 ДенисЧ
 
01.12.21
12:41
Используй систему взаимодействия. Или пиши в ЖР, а потом отдельно его читай.
2 lamme
 
01.12.21
12:41
Используй систему взаимодействия - подробнее?
3 ДенисЧ
 
01.12.21
12:42
4 lamme
 
01.12.21
12:46
пробовал.
там почему-то все отваливается на вот этом месте
Справочники.Пользователи.НайтиПоНаименованию("Иванова")
те вот такой вот код для создания сообщения в эту систему пользователю Иванова





    ДанныеСообщения = Новый Структура;
            ДанныеСообщения.Вставить("Объект", Пользователи.ТекущийПользователь().ПолучитьОбъект());
            ДанныеСообщения.Вставить("Текст", "Ошибка "+ тОшибки);
            ДанныеСообщения.Вставить("Дата", ТекущаяДата());
            ДанныеСообщения.Вставить("Автор", Пользователи.ТекущийПользователь());
            ДанныеСообщения.Вставить("Данные", ЭтотОбъект.ссылка);
            ДанныеСообщения.Вставить("Действия", Новый СписокЗначений);
            ДанныеСообщения.Вставить("Получатель",Справочники.Пользователи.НайтиПоНаименованию("Иванова"));
            ДанныеСообщения.Вставить("Системный", Ложь);
    
            ОбсужденияУНФ.СоздатьСообщение(ДанныеСообщения);
5 ДенисЧ
 
01.12.21
12:51
Потому что на клиенте делаешь?
6 ДенисЧ
 
01.12.21
12:51
Хотя на клиенте у тебя раньше отвалилось бы.

И да, термин "отваливается" не раскрыт.
7 lamme
 
01.12.21
12:55
проведение - на сервере.
эта процедура - там же


в отладчике идет так
Справочники.Пользователи.НайтиПоНаименованию("Иванова") - не могу найти метод НайтиПоНаименованию
при этом Справочники.Пользователи = нет ничего. те неопределено
8 lamme
 
01.12.21
12:57
(сам справочник в конфиг есть)
и ВНЕ процедыр проведения - те если этот код вставить во внешнюю обработку- то работает

те тут все пляски именно при проведении - транзакия-попытка
9 pechkin
 
01.12.21
13:01
запускай фоновое
10 Dmitrii
 
гуру
01.12.21
13:02
Странно, что вариант "избавиться от ошибки, чтобы её не было" вообще не рассматривается. Но ищутся какие-то бредовые способы сообщить пользователю об ошибке.

Найдите место, где возникает ошибка. Вставьте туда обработчик исключения с выводом внятного сообщения о причине ошибки. Тогда сообщение об этой ошибке появится в "таблице ошибок - типа ТЗ".
11 lamme
 
01.12.21
13:06
(10) этот вопрос рассматривается
но!
1. это проведение запускается ночью и роботом
2. проведение долгое и нудное - днем запускать тяжело - все зависают, те днем воспросизвести ошибку - антиреально.
Получается что робот не отработал. сообщения не показал никому. А пользователь сможет увидеть эту ошибку только завтра вечером, запуская руками и видя не стандарт ошибку.
3. в закрытии месяца - много мест, где может выпасть ошибка. сейчас выпала на том - что "Счет учета не может быть пустым" - и это ошибка платформы , при записи набора записей в РН.
4. я так и делаю - ставлю поптыка/исключение - ловлю саму ошибку от платформы. но дальше ее передать куда-то - не получается.
12 Мимохожий Однако
 
01.12.21
13:10
(11) Тебе же написали, используй журнал регистрации...Пиши туда все сообщения дублем и читай утром за чашкой кофе.
13 lamme
 
01.12.21
13:13
вот
пытаюсь тупо в константу записать тектовое

https://skr.sh/sBIuyPdK8Dq
14 fisher
 
01.12.21
13:13
(9) +1
У фонового задания можно штатным образом получить все выводившиеся в нем сообщения.
15 lamme
 
01.12.21
13:21
а в ЖР работает
16 Ryzeman
 
01.12.21
13:22
(15) у тебя и (13) работает.
Когда выводишь в табло - это обращение как к функции. У метода Установить() нет возвращаемого значение. Тебе надо на следующей точке останова посмотреть в табло через Константы.Константа1.Получить()
17 lamme
 
01.12.21
13:27
не
не работает

там все эти опции проходят в отмене транзакции - которая возникает при проведении документа
поэтому- если и пишет - то откатывает все
18 Has
 
01.12.21
13:27
ключ запуска /Out
не катит?
19 lamme
 
01.12.21
13:29
(16)
во ..
видишь в ЖР в каком статусе события попадают
https://skr.sh/sBIjjRuEgiw
20 Ryzeman
 
01.12.21
13:30
А, у тебя ж в одной транзакции... Тогда да, константу тоже откатит после отмены :) Ну да, тогда в ЖР, верно.
21 Ryzeman
 
01.12.21
13:31
Хотя стоп, что мешает в исключении писать в константу? Ну, помимо того, что в ЖР грамотнее?
22 Мимохожий Однако
 
01.12.21
13:33
Использовать константу для сообщений об ошибках странновато.
23 lamme
 
01.12.21
13:37
(22)
это не использование константы
это попытка понять - почему не записывает никуда
24 Мультук
 
гуру
01.12.21
13:48
(4)

  ДанныеСообщения = Новый Структура;
  ДанныеСообщения.Вставить("Объект", Пользователи.ТекущийПользователь().ПолучитьОбъект());


Оно точно хочет объект, а не ссылку?

P.S.
Когда хочешь что-то понять, то пишешь минимальный воспроизводимый пример и делаешь эксперименты.
Скорость на воспроизведение и понимание значительно повышается.

Например, документ, где в обработке проведения
флаг = 1/0;

дальше исключения, транзакции и т.п.
25 Мимохожий Однако
 
01.12.21
14:11
(23) Не записывает из-за отката транзакции.
Поэтому и используется журнал регистрации
26 lamme
 
01.12.21
14:21
закрыли вопрос
через ЖР