AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.01.2008, 18:49   #1  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
43 / 15 (1) ++
Регистрация: 05.10.2007
Адрес: Германия
Неверный откат сопоставленных транзакций
Проблема: при импорте транзакций из внешней системы в главный журнал была допущена ошибка, в результате которой журнал был проведен неверно. Чтобы вручную не откатывать 1500 транзакций, я написал скрипт, который откатывает их автоматически. Пример:
X++:
    LedgerJournalTrans          ledgerJournalTrans;
    LedgerTrans                 ledgerTrans;
    CustTrans                   custTrans;
    VendTrans                   vendTrans;

    Args                        reverseArgs = new Args();
    MenuFunction                menuFunction;
    SysOperationProgress        progress;
    TempStr                     message;
    TmkImportStatus             journalImportStatus = TmkImportStatus::Imported;

// find ledgerJournalTrans
...

            switch(ledgerJournalTrans.AccountType)
            {
                case LedgerJournalAcType::Cust:
                    custTrans = CustTrans::findFromInvoice(line.InvoiceId, line.AccountNum);
                    reverseArgs.record(custTrans);
                    menuFunction = new MenuFunction(menuitemactionstr(TransactionReversal_Cust), MenuItemType::Action);
                    menuFunction.run(reverseArgs);
                    break;
                case LedgerJournalAcType::Vend:
                    vendTrans = VendTrans::findVoucherDateAmount(ledgerJournalTrans.Voucher, ledgerJournalTrans.DocumentDate, line.GrossAmountCur);
                    reverseArgs.record(vendTrans);
                    menuFunction = new MenuFunction(menuitemactionstr(TransactionReversal_Vend), MenuItemType::Action);
                    menuFunction.run(reverseArgs);
                    break;
                case LedgerJournalAcType::Ledger:
                    ledgerTrans = LedgerTrans::findVoucher(ledgerJournalTrans.Voucher);
                    while select ledgerTrans
                        index VoucherDateIdx
                        where ledgerTrans.Voucher == ledgerJournalTrans.Voucher
                    {
                        reverseArgs.record(ledgerTrans);
                        menuFunction = new MenuFunction(menuitemactionstr(TransactionReversal_Ledger), MenuItemType::Action);
                        menuFunction.run(reverseArgs);
                    }
                    break;
                default:
                    error("@TMK180"); // This type of transaction cannot be reversed
            }
Тлько я не учел одной вещи - при поиске обнаружились такие же транзакции за более ранний период, которые уже были сопоставлены.
В результате отката появилась разница между сальдо на общем счете клиентов и суммой открытых транзакций по клиентам.
Провел исследования - при если откатывать откат или производить другие манипуляции, это приводит к ухужшению ситуации.

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

Может кто посоветует что делать в этой ситуации, может просто почистить таблицы CustSettlement, CustOpenTrans и подправить в CustTrans все что связано с settlement? Но тогда есть еще налоги, курсовые разницы и прочие интересные штуки.

Ax 4.0 SP1
Старый 16.01.2008, 19:27   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а бэкап есть?
__________________
полезное на axForum, github, vk, coub.
Старый 16.01.2008, 19:58   #3  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
43 / 15 (1) ++
Регистрация: 05.10.2007
Адрес: Германия
Бэкап есть, только после этого много модификаций было проделано
Старый 16.01.2008, 22:22   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Пугает вот это.
Цитата:
Сообщение от sgt.Pepper Посмотреть сообщение
...или производить другие манипуляции, это приводит к ухужшению ситуации.
это значит, что вы не очень хорошо знаете код, раз поведение кода для вас является неожиданным. поэтому в своем совете исхожу из того, что вы быстрее разберетесь с базой нежели разберетесь с кодом (если бы могли разобраться с кодом, то и вопрос бы не задавали)

внимание, при неправильных действиях мой совет может ухудшить ситуацию. Сначала потренируйтесь на тестовой базе.

Восстановите бэкап в соседнюю базу.
сравните по recid. если изменения вызваны только вашими действиями, то замените записи в рабочей на записи из бэкапа.

Таблицы:
custTrans
custTransOpen
custSettlement

vendTrans
vendTransOpen
vendSettlement

предупредите всех, что вы отмените галочки сопоставления и удалите все записи в specTrans.

Теперь удаление ваших отмен.
придется удалить лишние записи в перечисленных таблицах плюс, возможно
ledgerTrans
taxTrans
custinvoicejour
custinvoicejourtrans
vendinvoicejour
vendinvoicejourtrans

если у вас не дай бог ведется книга продаж и книга покупок, то придется чистить и там. если ведутся письма напоминания и штрафы, то и их чистить. если у вас автоматически начисляется агентские вознаграждения, то их тоже чистить. если есть свои таблицы, то и их тоже. связующее поле - Voucher (Документ ГК)

после всех этих действий сделайте пересчет перидов в главной книге (внимание, пересчет может занять продолжительное время. он заблокирует всех пользователей, поэтому пересчет лучше делать ночью или выгнать всех пользователей)

в общем, сделайте анализ, на что повлияли ваши действия и попытайтесь восстановить эти данные из бэкапа.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: sgt.Pepper (1).
Старый 17.01.2008, 09:16   #5  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
А может стоит поиграться с Проверкой целостности данных компании.
У меня как то проводки с остатками не сходились я запустил с галами складские проводки, в наличии в режими коррекция ошибок система всё сама корректно исправила. Правда база была не рабочая. Без экстрима.
Но поиграться было интересно.
Вообщем может вам тоже поставить необходимые галки и поставить режим проверки Проверка. Может то что вам нужно система сама найдёт.
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Чтение только завершенных транзакций. raz DAX: Программирование 4 19.05.2017 10:20
IMTS (Система множественных складских транзакций) yuranio DAX: Функционал 7 04.03.2005 17:56
Какая связь между Сводным планированием и Система множественных складских транзакций Wamr DAX: Функционал 6 27.09.2004 17:03
Очень частая фиксация транзакций - без этого никак? avzh DAX: Программирование 10 12.07.2004 10:35
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:46.