Axapta 很多交易中都有红手

Axapta 很多交易中都有红手,axapta,dynamics-ax-2009,Axapta,Dynamics Ax 2009,在“公开供应商交易”中,我们突然有了很多红手。由于缺乏数据库维护计划,我们遇到了一些奇怪的问题,现在系统已经启动并运行,但是出现了太多的新手 我在MS 但这不是很实际,因为这不是一个令人不快的记录,而是很多 是否有任何方法可以快速发现不应出现在transact-SQL中的标记事务 在SpecTrans与VendTransOpen中找到孤儿是否是一个良好的开端 谢谢 编辑:考虑到这一点,在SpecTrans中查找孤立记录可能不会有帮助,因为红手可能意味着该事务是在SpecTrans中找到的 编辑#

在“公开供应商交易”中,我们突然有了很多红手。由于缺乏数据库维护计划,我们遇到了一些奇怪的问题,现在系统已经启动并运行,但是出现了太多的新手

我在MS

但这不是很实际,因为这不是一个令人不快的记录,而是很多

是否有任何方法可以快速发现不应出现在transact-SQL中的标记事务

在SpecTrans与VendTransOpen中找到孤儿是否是一个良好的开端

谢谢

编辑:考虑到这一点,在SpecTrans中查找孤立记录可能不会有帮助,因为红手可能意味着该事务是在SpecTrans中找到的


编辑#2:我发现要取消某些交易的标记,但当我执行建议的操作时,我找不到任何关联的日记账。这可能就是问题所在。

备份表后,我最后做的就是:

delete from SPECTRANS where SPECTRANS.RECID in
(
     select st.RECID from VENDTRANS vt
     inner join VENDTRANSOPEN vto on vto.REFRECID = vt.RECID
     inner join SPECTRANS st on st.REFRECID = vto.RECID
     where st.SPECTABLEID=470 and st.DATAAREAID in ('company1', 'company2')
)
“红手”的原因有时可能是指向不再存在的
LedgerJournalTrans
记录的
SpecTrans
记录

用于删除它们的作业(仅限当前公司):


还应应用对DATAAREAID和分区的选择。
RecId
对于每个表都是唯一的,这使您的删除正确(但可能很慢)。@JanB.Kjeldsen我在任何地方都找不到分区。我正在使用AX2009 RU8。这可能只是AX2012。使用风险自负。
static void RedHandDirtyVendRemove(Args _args)
{
    SpecTrans st;
    VendTrans vt;
    VendTransOpen vto;    
    LedgerJournalTrans ljt;
    while select count(RecId) from st 
        group SpecTableId
        where st.RefTableId == tableNum(VendTransOpen) &&
              st.SpecCompany == curext() &&
              st.RefCompany == curext()
        exists join vto 
        where vto.RecId == st.RefRecId 
    {
        info(strFmt('%1: %2', st.RecId, tableId2name(st.SpecTableId)));
    }
    while select st 
        where st.RefTableId == tableNum(VendTransOpen) &&
              st.SpecTableId == tableNum(LedgerJournalTrans) && 
              st.SpecCompany == curext() &&
              st.RefCompany == curext()
        join vto 
        where vto.RecId == st.RefRecId 
        join vt
        where vt.RecId == vto.RefRecId
        notExists join ljt
        where ljt.RecId == st.SpecRecId 
    {
        info(strFmt('%1: %2 %3', st.RecId, vt.Voucher, vt.AccountNum));
    }
    delete_from st 
        where st.RefTableId == tableNum(VendTransOpen) &&
              st.SpecTableId == tableNum(LedgerJournalTrans) && 
              st.SpecCompany == curext() &&
              st.RefCompany == curext()
        exists join vto 
        where vto.RecId == st.RefRecId 
        exists join vt
        where vt.RecId == vto.RefRecId
        notExists join ljt
        where ljt.RecId == st.SpecRecId;
    info(strFmt('%1', st.RowCount()));
}