Вот полный код. Пытался разбивать на 2 транзакции, то же самое...
X++:
public void DoCopy()
{
LedgerJournalTrans ljt1;
LedgerJournalTrans ljt2;
LedgerJournalTrans ljt3;
CustVendPaymJournalFee cv1;
CustVendPaymJournalFee cv2;
LedgerJournalTable ljt;
NumberSequenceTable numberSequenceTable;
NumberSequenceCode nsc;
Voucher voucher;
LedgerVoucher ledgerVoucher;
it = new MapIterator(paMarked);
while (it.more())
{
ttsbegin;
ljt = LedgerJournalTable::findByJournalNum(JN);
nsc = numberSequenceTable::find(ljt.NumberSequenceTable).NumberSequence;
voucher = NumberSeq::newGetNumFromCode(nsc).num();
ljt1 = LedgerJournalTrans::findRecId(it.key(), false);
ljt2.data(ljt1);
ljt2.TransDate = ljt.NASLedgerJourDate;
ljt2.Voucher = voucher;
ljt2.JournalNum = JN;
if(_Reverse)
{
ljt2.AmountCurDebit = ljt2.AmountCurDebit * -1;
ljt2.AmountCurCredit = ljt2.AmountCurCredit * -1;
}
if (!ljt2.validateWrite())
{
throw Exception::Error;
}
ljt2.insert();
//ttscommit;
//ttsbegin;
//ljt3 = LedgerJournalTrans::find(JN, voucher, false);
while select cv1 where cv1.RefRecId == ljt1.RecId
{
//cv2.data(cv1);
buf2Buf(cv1, cv2);
//cv2.RefRecId = ljt3.RecId;
cv2.RefRecId = ljt2.RecId;
if (!cv2.validateWrite())
{
throw Exception::Error;
}
cv2.insert();
}
ttscommit;
it.next();
}
}