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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.09.2015, 14:25   #1  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Копирование строки
Доброго времени суток, пытаюсь скопировать строку из таблицы и изменить ее связь (RefRecId) перед вставкой. Проблема в том что данное поле является FK, и не разрешает себя изменить. Как можно еще такое провернуть?

Мой код:
X++:
while select cv1 where cv1.RefRecId == ljt1.RecId
        {
            cv2.data(cv1);
            cv2.RefRecId = ljt2.RecId;
            if (!cv2.validateWrite())
            {
                throw Exception::Error;
            }
            cv2.insert();
        }
Старый 14.09.2015, 15:03   #2  
axm2013
Гость
 
n/a
не очень понял в чем проблема.
Как ругается то?
Старый 14.09.2015, 15:04   #3  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
По сути оно не ругается, просто ничего в таблицу не записывается. В дебаггере на переменно пишет что то типа "Replacemnt FAILED FK key" на поле cv2.RefRecId
Старый 14.09.2015, 15:16   #4  
A_BAS is offline
A_BAS
Участник
Аватар для A_BAS
 
77 / 48 (2) +++
Регистрация: 19.04.2012
попробуйте вместо этого
X++:
cv2.data(cv1);
использовать
X++:
buf2buf(cv1, cv2);
метод data копирует вроде как все поля включая системные и включая RecId (на который, видимо, и ругается)
Старый 14.09.2015, 15:16   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
"Replacemnt FAILED FK key" в отладчике означает лишь то, что отладчик не смог по FK подтянуть для отображения ключ замены: либо на таблице не настроен relation для FK, либо на связанной таблице не настроен ключ замены, либо там нет записи, на которую ссылается FK.
Старый 14.09.2015, 15:24   #6  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Вот полный код. Пытался разбивать на 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();
    }
}
Старый 14.09.2015, 16:17   #7  
axm2013
Гость
 
n/a
По ощущениям
X++:
ljt = LedgerJournalTable::findByJournalNum(JN);

        nsc = numberSequenceTable::find(ljt.NumberSequenceTable).NumberSequence;
можно вынести из цикла.

Цитата:
По сути оно не ругается, просто ничего в таблицу не записывается
Т.е insert проходит и проблема только в том что refRecID = 0 в итоге?

ЗЫ и вы конечно видите что метод insert на CustVendPaymJournalFee не так уж и прост
boolean skipTrans = false и т п?

Последний раз редактировалось axm2013; 14.09.2015 в 16:20.
Старый 14.09.2015, 16:36   #8  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Видел, проверял. Все ключевые поля проверил, все везде заполнено.

Старый 14.09.2015, 16:44   #9  
axm2013
Гость
 
n/a
Ну ок.

Replacemnt FAILED FK key как пишут выше это информация отладчика не более.

Что в итоге то не так?

ЗЫ сори если что за несообразительность но не могу понять в чем проблема то.
Старый 14.09.2015, 16:48   #10  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Запись просто не отображается, хотя никаких ошибок не возникает и по идее она даже вставляется в таблицу

Последний раз редактировалось syl; 14.09.2015 в 16:53.
Старый 14.09.2015, 16:58   #11  
axm2013
Гость
 
n/a
Т.е. insert отрабатывает но записи в таблице CustVendPaymJournalFee c RecID видимым в отладчике не обнаруживается после отработки всего и вся?
Может запись далее где то затирается?
Старый 14.09.2015, 17:04   #12  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Все разобрался. Источник данных таблицы CustVendPaymJournalFee с LinkDataSource LedgerJournalTrans. Связаны они по двум полям:
X++:
cv2.RefRecId = ljt3.RecId;
cv2.feeTransRecId = ljt3.RecId;
Проблема была именно тут cv2.feeTransRecId = ljt3.RecId; Сразу не обратил внимания на эту связь, после добавления ее все заработало

Последний раз редактировалось syl; 14.09.2015 в 17:11.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
OXMLWorksheet_RU копирование ячейки из другой строки trudel DAX: Программирование 1 07.06.2015 09:09
Сортировка после изменения номера строки alicedr DAX: Программирование 4 11.11.2012 00:29
копирование строки в таблице timaluhs DAX: Программирование 7 03.05.2011 10:57
При создании строки в закупке статус строки становится "Отменено" AlexUnik DAX: Функционал 4 27.09.2004 16:05
Функция "Удалить строки" Oks DAX: Функционал 1 03.07.2002 18:09

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

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

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