Часто спрашивают: "у меня Аксапта выдает ошибку такую-то". Что это значит? И что теперь делать? Если текст ошибки в инфологе для вас никак не проясняет ситуацию, то прежде всего стоит найти источник ошибки в коде.

Спасибо за метод Андрею Васько.

Для того, чтобы выяснить источник ошибки надо поставить точку останова в методе info.add().

Точка останова в методе info.add()

Метод add выполняется, для того, чтобы добавить в инфолог любое сообщение. Поэтому, если в инфологе что-то появляется, код этого метода непременно будет выполняться.

Когда вы попадаете в отладчик, то надо обращать внимание на стек вызова и на значения переменных. Если вы будете щелкать в стеке, то отладчик покажет код методов. Если в коде "повисеть" мышкой над переменными, то можно увидеть значения этих переменных. Значения можно проанализировать также и в окне переменных или в watch-окне.

Вот, собственно и все.

 

Разберем на примере, как это работает. Например, ksenia спросила на axforum'е про проблемы при расчете ППДС в Аксапте. Сообщения об ошибке не прояснили ситуацию для ksenia. Особенно невразумительным было сообщение "Должен быть указан код валюты". Непонятно где, непонятно какой код валюты должен быть указан.

Ок. Ставим точку останова в методе info.add(). Запускаем расчет ПДДС (Главное меню \ Периодические операции \ Потребность в валюте \ Расчет потребности в валюте).

Когда Аксапта пытается вывести сообщение, срабатывает точка останова и открывается отладчик.

Щелкаем мышкой вниз по стеку отладки. Интересное находится достаточно быстро. Ошибка возбуждается в строке 69 метода Currency::mSTAmount(). Смотрим чуть выше в коде этого метода и видим, что эта ошибка возбудается, если код валюты не указан. Но метод mSTAmount получает код валюты в аргументе. Значит ошибка происходит в другом методе.

Щелкаем по стеку и переходим к методу CustTransOpen.UpdateLedgerCov(). Код валюты появляется именно здесь. Обратите внимание на окно со значениями переменных. Показаны переменные, которые находятся в контексте этого метода. Обратите внимание, что recID у таблицы CustTrans равно 0. Это значит, что метод this.trans() не нашел записи с проводкой по клиентам.

Ну, а дальше дело техники. Надо открыть this, выяснить какая запись так "плохо себя ведет" и... понять почему так произошло и что надо сделать, чтобы такого больше не было. Разбор ситуации, как правило, выполняется уже не программистом, а консультантом, который знает бизнес-логику.

Нехорошим оказался БизБукет

 

Что касается конкретно этой ошибки... Как правило, отсутствие записи, которая должна быть, означает одно - кто-то пробовал удалять уже разнесенные проводки и не до конца разобрался. Не все связанные таблицы нашел. Пожалуйста, будьте предельно осторожны с удалением разнесенных проводок. Каждую разнесенную проводку, система может широко использовать в своей работе.

 

Буду рад Вашим замечаниям и предложениям.
E-Mail: mazzy@mazzy.ru, Мазуркин Сергей