Имя: Пароль:
1C
 
Как с помощью сохранения стека отладить код? У кого был опыт.
0 Обработка
 
12.07.21
14:44
Есть база Розница с кучей дописок.
Документ Заказ прилетает из битрикса.
В нем добавляется услуга "доставка"?
Проблема в том что в некоторых доках по 2 строк доставки.
Перепахали все участки кода где создается где перезаписывается где редактируется документ пока не нашли где именно это происходит.
Пока только при записи (Передзаписью) отловил и в журнал записал когда и кем это создается.
Но это ни о чем не говорит. Есть куча обработок и не понятно где и как дублируется запись.
Есть автообработки регламентные которые работают по заказу с ее статусами.

Как отловить стек откуда дубль  пришел. С кокой обработки или функции???
Пока поняли что битрикс точно двойников не присылает. Уверенность на 95% )))
1 Вафель
 
12.07.21
14:46
А включить версионирование?
2 Вафель
 
12.07.21
14:46
Всем регламентам и сервимам  назначить разных юзеров
3 palsergeich
 
12.07.21
14:49
Старым дедовским методом - в ТЖ на событии dbmssql фильтром Update%ИмяТаблицы
Там если повезет и стек будет
Ну и это тоже (2)
4 Обработка
 
12.07.21
14:52
(1) Включено. Не помогает.
Юзеров много и все это хаотично повяляется.
5 Hmster
 
12.07.21
14:55
(4) смотришь по версионированию когда появляется, по обычному смотришь что за сеанс это был. человек или обработка по расписанию
6 Обработка
 
12.07.21
14:58
(5) И сеанс известен и юзер известен и время. Но это ничего не дает. У юзера нет смысла спрашивать отлов событие одно время а анализ происходит после позже.
7 Обработка
 
12.07.21
14:59
Есть вероятность что не все внешние доп обработки анализировал. Или не внимательно прошелся по коду.
8 Вафель
 
12.07.21
15:02
ну так юзер или обмен делает уже определился?
9 DrZombi
 
гуру
12.07.21
15:06
(4) Всем запретить, ожидать взбучки, если не наступил, считай лишний автомат отрубил :)
10 mistеr
 
12.07.21
15:14
(0) Вызвать исключение?
11 mistеr
 
12.07.21
15:16
(10) + Контекст прокинуть через ДополнительныеСвойства
12 Вафель
 
12.07.21
15:21
ну можно еще в передзаписью стек собирать типа

Попытка
а = 1/0;
Исключение
//тут обираем стек
КонецПопытки
13 Обработка
 
12.07.21
18:23
(12) Читал такое сегодня попробую внедрить этот механизм.
14 H A D G E H O G s
 
12.07.21
18:26
ИнформацияОбОшибке()

Там можно собрать стек
15 Вафель
 
12.07.21
20:01
Единственное что эта операция не быстрая. Поэтому на постоянке такого лучше не делать
16 Обработка
 
13.07.21
05:24
(15) Да конечно в курсе.
17 Адинэснег
 
13.07.21
06:40
(0) поставь отказ в записи объекта с двумя доставками
18 Обработка
 
13.07.21
06:56
(17) Не молу ибо это может происходить не интерактивно
19 Обработка
 
13.07.21
06:58
Прописал так:

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


Получил что ПолныйТекстОшибкиВключаяСтекВызовов  = {Документ.ЗаказПокупателя.МодульОбъекта(2723)}: Любой текст¶           ВызватьИсключение "Любой текст";

И что мне это дало? Собственно ничего (((
20 acanta
 
13.07.21
07:11
А можно написать
Отказ = истина;
Записьжурналарегистрации("сообщение");
Вместо попытки?
21 Галахад
 
гуру
13.07.21
07:20
(19) Платформа древняя?
22 DrZombi
 
гуру
13.07.21
07:26
(19) Вы начинаете понимать, что бы пресечь все непонятно, надо это отловить и ограничить.

- Регламенты, вы смогете ограничить сами.
- Обработки внешние, вам надо запретит запускать (внешние, которые открывает сам пользователь)
- Обработки по феншую БСП вы способны сами отслеживать, они подконтрольны :)
23 DrZombi
 
гуру
13.07.21
07:29
+(22) >>> внешние, которые открывает сам пользователь

Через файл - "Открыть"
24 TormozIT
 
гуру
13.07.21
07:39
В обычном приложении стек добавляется в описание ошибки только начиная с 8.3.19
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан