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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.01.2008, 18:49   #1  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
41 / 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
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,832 / 3721 (182) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
а бэкап есть?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 16.01.2008, 19:58   #3  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
41 / 15 (1) ++
Регистрация: 05.10.2007
Адрес: Германия
Бэкап есть, только после этого много модификаций было проделано
Старый 16.01.2008, 22:22   #4  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,832 / 3721 (182) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Пугает вот это.
Цитата:
Сообщение от sgt.Pepper Посмотреть сообщение
...или производить другие манипуляции, это приводит к ухужшению ситуации.
это значит, что вы не очень хорошо знаете код, раз поведение кода для вас является неожиданным. поэтому в своем совете исхожу из того, что вы быстрее разберетесь с базой нежели разберетесь с кодом (если бы могли разобраться с кодом, то и вопрос бы не задавали)

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

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

Таблицы:
custTrans
custTransOpen
custSettlement

vendTrans
vendTransOpen
vendSettlement

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

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

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

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

в общем, сделайте анализ, на что повлияли ваши действия и попытайтесь восстановить эти данные из бэкапа.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
За это сообщение автора поблагодарили: sgt.Pepper (1).
Старый 17.01.2008, 09:16   #5  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,687 / 407 (17) +++++++
Регистрация: 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, время: 15:55.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.