Показать сообщение отдельно
Старый 09.06.2019, 11:17   #2  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,831 / 2526 (90) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Не занимался отладкой в LedgerVoucher, но описанные выше задачи (AX3..AX2009) решал достаточно просто.

Предположение:
Люди, которые программировали в тех местах, которые я раскапывал - были либо из Microsoft, либо не усложняли себе жизнь и делали проводки не с помощью классов LedgerVoucher, а с помощью LedgerJournalTable / LedgerJournalTrans. Т.е. если разработчик малоопытный - то он не полезет использовать LedgerVoucher, а если он с большим опытом, то либо тем более не полезет ), либо воспользуется грамотно (т.е. как в Microsoft)

Исходя из этого - делаем следующее:
1. Ищем вызовы LedgerVoucherTransObject::newCreateTrans по перекрестным ссылкам и ставим туда бряку.
2. Для каждого счета есть свое значение енума LedgerPostingType, по которому практически однозначно можно определить - из какой настройки берётся счет. Т.е. если у меня взялся не тот счет или создалась не та проводка - то в ней проставилось какое-то значение енума LedgerPostingType, по которому я могу практически однозначно сказать из какой настройки он взялся (ну или сильно сузить круг подозреваемых настроек).
3. В отладчике в методе newCreateTrans я вижу все вычисленные счета и суммы, которые в этот метод передаются, т.о. я могу на бумажку выписать все счета и суммы, которые задействовались в разноске и исходя из этого сделать вывод о том, где у меня пошла не та сумма, которую я ожидал. И уже начинаю искать причины вне классов LedgerVoucher*

Собственно всё. Здесь обычно все проблемы решаются. Точнее их поиск уходит из классов LedgerVoucher*.

Безусловно, могут быть случаи, когда:
- не был задействован метод newCreateTrans. В этом случае все равно нужно искать место, где инициализируется объект LedgerVoucherTransObject и смотреть, какие счета и суммы приходят в него (перекрестные ссылки - наше всё).
- кто-то решил выпендриться и покодить в классах LedgerVoucher. В этом случае ошибку надо искать в том месте, в котором покодили . Ну или как вариант - нафиг удалять все изменения ) и применять метод, описанный выше (а лучше переделать на генерацию LedgerJournalTable / LedgerJournalTrans)
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 09.06.2019 в 11:21.
За это сообщение автора поблагодарили: mazzy (5).