11.10.2012, 15:30 | #1 |
Участник
|
Копирование табличной переменной
Добрый день! Подскажите в чём может быть дело: Создал дублированием таблицы RContractTable временную таблицу, ,в цикле while select по таблице договоров в зависимости от определенных условий мне нужно заполнять временную таблицу. В итоге она должна представлять собой немного укороченную (в смысле количества записей) таблицу договоров.
Собственно копирование строк пытаюсь сделать так X++: while select RContractTable if (...) { buf2buf(RContractTable, TmpRContractTable) TmpRContractTable.insert(); } В чём проблема??? Наверняка что то из-за дублирования таблицы?? Спасибо! |
|
11.10.2012, 15:46 | #3 |
Участник
|
Спасибо! В этой ветке обсуждается что так как я хочу, делать нельзя :-) И нужно описать свои методы. Но мне как раз то и нужно целиком записи копировать, без всяких ухищрений и желательно как можно проще это сделать.
Я еще пробовал через TmpRContractTable.data(RContractTable); TmpRContractTable.insert(); но в таком случае выскакивает ошибка: "Невозможно создать запись в "Договоры" ("TmpRContractTable") Запись уже существует. причем ошибка выскакивает при первом же проходе! Последний раз редактировалось JuniorAx; 11.10.2012 в 15:53. |
|
11.10.2012, 15:51 | #4 |
Участник
|
buf2buf() не канает, т.к. у тебя 2 разные таблицы, хоть и поля в них одинаковые. Если устроит, то можно из RContractTable сделать временную таблицу методом setTmp(). Второй вариант использовать следующую конструкцию:
X++: insert_recordset TmpRContractTable (<fields>) select <fields> from RContractTable [where <>] [join <. >]
__________________
// no comments |
|
11.10.2012, 15:58 | #5 |
северный Будда
|
А можно вопрос - что вы хотите сделать с полученными данными? Группировок у вас там нет, расчёты по полям можно было бы и без темповой таблицы сделать....
Мне необходимость такой конструкции (если не нужно сделать duplicate записи в таблице) представляется совершенно неочевидной.
__________________
С уважением, Вячеслав |
|
11.10.2012, 16:04 | #6 |
Участник
|
Спасибо!
to dech: Я правильно понимаю что в случае использования второго способа, мне придется все поля вручную перечислять в select'е ?? to pitersky: По этой таблице в дальнейшем будут сделаны группировки для удаления повторяющихся договоров. Но сначала необходимо заполнить таблицу договорами среди которых будем искать повторяющиеся (в зависимости от определенный условий). |
|
11.10.2012, 16:10 | #7 |
NavAx
|
Прочтите внимательно сообщение по ссылке, там есть пример, который решает проблему.
|
|
|
За это сообщение автора поблагодарили: JuniorAx (1). |
11.10.2012, 16:37 | #8 |
Участник
|
To raz: Спасибо огромное!!! Взял ваш код для buf2buf - отлично всё скопировалось!
|
|
11.10.2012, 16:38 | #9 |
Участник
|
Может кто подсказать как быстро вычислить сальдо по договору???
|
|
12.10.2012, 08:06 | #10 |
Участник
|
это можно через map сделать
Замечание, если нужна немного более укороченная таблица договоров то проще и надежнее сделать так X++: RContractTable RContractTable; RContractTable TmpRContractTable; ; TmpRContractTable.setTmp(); while select RContractTable if (...) { buf2buf(RContractTable, TmpRContractTable); TmpRContractTable.insert(); }
__________________
Нет ничего сложного есть простое и неправильное |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
12.10.2012, 08:37 | #11 |
Участник
|
Цитата:
Сообщение от JuniorAx
Добрый день! Подскажите в чём может быть дело: Создал дублированием таблицы RContractTable временную таблицу, ,в цикле while select по таблице договоров в зависимости от определенных условий мне нужно заполнять временную таблицу. В итоге она должна представлять собой немного укороченную (в смысле количества записей) таблицу договоров.
Вам нужно заполнить временную таблицу именно копиями, а не ссылками на строки? Вы будете потом редактировать скопированные данные? Если достаточно иметь только ссылки на строки, например для реализации сложного фильтра, то есть ещё другие варианты Например: Выборка произвольных записей одним запросом |
|
12.10.2012, 09:13 | #12 |
Участник
|
Ню, можно как-нибудь так
PHP код:
|
|
12.10.2012, 10:30 | #13 |
северный Будда
|
Цитата:
хотя я совершенно не понимаю, зачем тут нужна временная таблица. искать дубликаты вполне себе можно и на основной, а удалять так только там и надо
__________________
С уважением, Вячеслав |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
12.10.2012, 10:37 | #14 |
Участник
|
|
|
12.10.2012, 13:08 | #15 |
Участник
|
|
|
13.10.2012, 18:54 | #16 |
Участник
|
Добрый день! Благодарю за помощь всех кто откликнулся!
Задача: Мне необходимо выбрать договоры по которым есть не нулевое сальдо и затем произвести по ним поиск тех что встречаются более одного раза - т.е. дублированные! Я решил поступить так: Пробегаемся по таблице договоров отбираем только те что нам нужны, помещаю те что подходят во временную таблицу и уже в ней делаю поиск дубликатов. Собственно вот и всё! Это решение мне показалось не сложным и достаточно быстрым! Проблему с копированием во временную таблицу, которую я озвучил в начале темы, я решил с помощью кода от сюда: Есть ли в Axapta ф-ия схожая с TRANSFERFIELDS из Nav? Спасибо raz! Было бы очень интересно услышать какие ещё способы можно применить к решению этой задачи?? И еще что имел ввиду S.Kuskov когда говорил про таблицу с ссылками на записи? Я ни когда с таким не работал - просветите пожалуйста! :-) Всем спасибо ещё раз! |
|
14.10.2012, 15:53 | #17 |
Участник
|
Обратите внимание на код от jasper - вам совсем нет необходимости дублировать таблицу договоров в АОТ, достаточно временное ее сделать временной и заполнить значениями. Это будет точно то же, и при этом нет проблем с buf2buf(), как у вас.
А вообще люди советуют написать все одним запросом к настоящей таблице договоров, чтобы сразу найти дубликаты, без необходимости заполнения временной таблицы, так как с этим связаны существенные проблемы производительности кода. |
|