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