|
05.09.2012, 01:25 | #1 |
Участник
|
Цитата:
Сообщение от mazzy
Цикл отработает 1000 раз.
infolog.shutDown(true) всего лишь информирует систему, что Аксапту нужно закрыть когда будет возможность. Аксапта выйдет, когда перейдет в режим ожидания. Пока выполняется код выхода из системы не будет. Не заставляйте выходить из аксапты принудительно. Разбейте задачу на две части: 1. проинфорируйте систему что вы ее хотите закрыть. 2. заставьте ваш код завершить выполнение чтобы заставить ваш код завершить выполнение, не надо ломать dll'ки. достаточно обычных break и return. Стоит делема - остановить пользователей из за иногда возникающей проблемы генерирующей по 4,5 млн записей в лог за 240 минут (а на лог еще и умудрились повесить генератор оповещений, да еще и не один пользователь т.е. 4,5 млн * кол-во пользователей, а потом еще и невозможность открыть аксапту при логине пользователей), или, до выяснения, в своем коде, гарантированно без транзакций при возникновении подозрения на бестактное поведение - просто закрывать аксапту. Да, это не красиво, да может быть прощет в архитектуре и лога и поведении системы, но для того что бы работа не остановилась и было время на корректное исправление и приведения системы с break и return - нужно время и ... вот такая заплатка. |
|
05.09.2012, 09:37 | #2 |
NavAx
|
Цитата:
Сообщение от f18
речь идет о трудно вычислимом баге, и попытке его поймать. То что это концептуально неправильно ясно, но все равно спасибо за дополнительное целенаведение.
Стоит делема - остановить пользователей из за иногда возникающей проблемы генерирующей по 4,5 млн записей в лог за 240 минут (а на лог еще и умудрились повесить генератор оповещений, да еще и не один пользователь т.е. 4,5 млн * кол-во пользователей, а потом еще и невозможность открыть аксапту при логине пользователей), или, до выяснения, в своем коде, гарантированно без транзакций при возникновении подозрения на бестактное поведение - просто закрывать аксапту. Да, это не красиво, да может быть прощет в архитектуре и лога и поведении системы, но для того что бы работа не остановилась и было время на корректное исправление и приведения системы с break и return - нужно время и ... вот такая заплатка. Статус "Отменено" в строках заказа |
|
05.09.2012, 13:37 | #3 |
Участник
|
Цитата:
Сообщение от raz
А если попытаться найти причину?
Статус "Отменено" в строках заказа Итак что есть ... Есть некая логика Класс TSession - хранит в себе информацию о неком пользователе системы, ссылку на TProcess, ссылку на TFormUpdater TProcess - класс выполняющий некую работу в системе, в зависимости от введенной пользователем информации. TFormUpdater обновляется классом TProcess и его заддача хранить текущие переменные для отображения на экране. Логика создавалась не для форм аксапты, но жизнь такова, что есть формы работающие с этими классами и в аксапте - прикреплены примеры форм. На форме только одно окно (СтрингЭдит) для ввода информации. Задачи этого контролла - после нажатия пользователем энтера передать эту информацию в TSession (допустим метод ВВОД) , очистится и перечитать в свои объекты на форме состояние измененного TFormUpdater. TSession вызывает метод ВВОД класса TProcess. В TProcess.ВВОД стоит try catch и если происходит исключительное состояние - запонить инфолог в некий лог, что бы пользователь мог его прочитать. Теперь форма в аксапте. СтрингЭдит - исходя из задач кот перед ним стоят - реализован в виде эдит метода с кодом (набираю руками - могу ошибится) X++: edit str (boolean _set, str _value) { if (set) { TSession.(_value); } return ""; } Как вариант - пользователь ввел какое-то значение в СтрингЭдит, нажал на форме эскейп, форма спросила - Я Изменилась, сохранить незаписаннные данные - а пользователь нажал - сохранить ... Возможные направления исправления ошибки - отказаться от эдит метода и отрабатывать просто модифай + попросить форму не заадавать вопроса, но здесь сложнее, обработка многошаговая, есть шаги когда вопрос просто необходимо задавать. Трай в эдит методе не могу делать - большая обработка инфолога + не факт что такое же можно будет сделать в форме не аксапты. Пока до форм не аксапты не добрались - и ошибку не пофиксили было принято решение пользователям продолжать работать в системе, уведомить что бы все отказывались от всего предлагаемого + жуть-жуть-жжжжжуть. |
|
05.09.2012, 14:29 | #4 |
NavAx
|
Если я правильно понимаю, то лог - это некий доработанный лог, не SysDataBaseLog аксапты, причем это таблица.
Если я прав, то можно настоить журнал базы данных на эту таблицу, и, после повторения проблемы, проанализировать стек вызовов. |
|
05.09.2012, 14:35 | #5 |
Участник
|
да, это Тлог, - отдельная таблица в которой хранится все история введения пользователем данных и реакция системы на эти данные. Плохая реакция - красный крестик, хорошая - зеленая галка.
Спасибо, как раз и настраиваю лог, но ... предположим без этого жжжуткого фикса - он будет писать записи в тлог а еще и в журнал базы данных много-много записей..., поэтому ужасный фикс и анализ. |
|