|
12.04.2012, 12:36 | #1 |
Участник
|
Ошибка при копировании/вставке строк таблицы
Добрый день, уважаемые программисты.
Стоит такая задача: однократно скопировать строки таблицы в неё же, заменив значение 1 поля. Использую для этого buf2buf и получаю сообщение о том, что "Запись не может быть вставлена, запись уже существует". Причем сообщение это вываливается не на всех копируемых строках, а только на некоторых. Индекс на таблице состоит из 3 полей. Проверила - сочетание их значений во вставляемой мной "проблемной" записи уникально. Ума не приложу, в чем проблема. Чем еще воспользоваться для своей задачи, не знаю. Прочитала следующие темы: Копирование строк таблицы с помощью DictTable копирование строки в таблице И некоторые другие, более бесполезные для моей задачи, темы. DAX ядро 4.0.2503.454, приложение 4.0.2501.122, СУБД не знаю. А вот код: X++: static void Job49(Args _args) { LedgerRRGESectionProperties_W prs, prt; LedgerRRGEPropertyCells_W cells, cellt; ; ttsbegin; while select cells join prs where prs.TemplateId == 'БухОт_2011' && prs.RecId == cells.PropertyRefRecId { select prt where prt.TemplateId == 'БухОт_2012' && prt.SectionId == prs.SectionId && prt.PropertyId == prs.PropertyId; buf2buf(cells,cellt); cellt.PropertyRefRecId = prt.RecId; cellt.insert(); } ttsabort; }
__________________
"казалось бы, зачем виртуализировать виртуализаторы виртуализаторов виртуальных ява-машин, но Оракл было уже не остановить..." © Башорг |
|
12.04.2012, 13:12 | #2 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Cathome (1). |
12.04.2012, 13:15 | #3 |
Программатор
|
X++: void copyLedgerJournalTrans() { LedgerJournalTrans ledgerJournalTrans, ledgerJournalTransNew; NumberSeq numSeq; ; while select ledgerJournalTrans where ledgerJournalTrans.JournalNum == .LedgerJournalNum { ledgerJournalTransNew.clear(); ledgerJournalTransNew.data(ledgerJournalTrans); ledgerJournalTransNew.JournalNum = ledgerJournalTable.JournalNum; ledgerJournalTransNew.AmountCurCredit = -ledgerJournalTransNew.AmountCurCredit; numSeq = NumberSeq::newGetVoucherFromCode(ledgerJournalTable.VoucherSeries, false); ledgerJournalTransNew.voucher = numSeq.voucher(); ledgerJournalTransNew.insert(); } } Последний раз редактировалось Sada; 12.04.2012 в 13:18. |
|
12.04.2012, 13:25 | #4 |
----------------
|
я так понимаю, что проблема не в том КАК копируется, а в том что копируется.
вы уверены, что у вас всегда есть prt. И кстати, связь между prs и cells по двум полям - смотрите relations И вообще, может лучше кнопками на форме шаблонов выполнить копирование или экспорт-импорт? |
|
12.04.2012, 16:14 | #5 |
Участник
|
Всем спасибо! Почему-то, когда пытаешься обсудить проблему с кем-то, начинаешь думать. До этого несколько дней не было никаких мыслей, а сейчас нашла, в чем была загвоздка. И с индексом, и с копированием - все в порядке. Проблема была в наложенных ограничениях, а вот туда мне как-то не приходило в голову посмотреть.
Цитата:
Кнопками на форме не проще. Стандартное копирование копирует всю структуру шаблона. Смысл как раз в том, что реквизиты практически все те же остались, да вот организованы в новую структуру. Дело оказалось в том, что записи в prs, prt оказались не уникальны. Надо проверять, чтобы у одинаковых реквизитов еще и все дерево разделов совпадало. В общем, буду думать, как лучше это провернуть.. (и стоит ли оно таких мучений )
__________________
"казалось бы, зачем виртуализировать виртуализаторы виртуализаторов виртуальных ява-машин, но Оракл было уже не остановить..." © Башорг |
|
Теги |
buf2buf, вставка, записи таблицы, копирование |
|
|