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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.02.2009, 11:35   #1  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
! вопрос по Buf2Buf
Имеется такой код, но при выполнении выдает ошибку:
"Поле с кодом "1" в таблице "Common" не обнаружено."
как можно избежать эту ошибку? или только использовать переменные таблиц каждого типа, определять тип _record и уже в нужную переменную копировать.
Хотелось бы кода по минимуму и чтобы метод был универсальным для записи любой таблицы, переданной в качестве параметра.
X++:
Common _newrecord, _record;
    ;

....
    ChangeCompany("DAT")
    {
        buf2buf(_record,_newrecord);
        _newrecord.insert();

    }
Старый 27.02.2009, 11:44   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
buf2buf можно использовать только для таблиц, у которых одинаковая структура полей, полностью совпадает...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.02.2009, 11:48   #3  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
а в моем случае она совпадает.
в _record я передаю запись
а _newrecord так и остается common.
Старый 27.02.2009, 11:48   #4  
tourist is offline
tourist
Участник
 
21 / 14 (1) ++
Регистрация: 03.05.2006
Перед вызовом buf2buf используйте makeRecord
X++:
_newrecord = new DictTable(record.tableId).makeRecord();
За это сообщение автора поблагодарили: propeller (1).
Старый 27.02.2009, 11:55   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от propeller Посмотреть сообщение
а в моем случае она совпадает.
в _record я передаю запись
а _newrecord так и остается common.
сами себе противоречите если newRecord у Вас common, то структура поле у него с Record не совпадает
воспользуйтесь советом tourist
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.02.2009, 12:12   #6  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от lev Посмотреть сообщение
сами себе противоречите если newRecord у Вас common, то структура поле у него с Record не совпадает
воспользуйтесь советом tourist
Вы бы сами попробовали сначала, прежде чем говорить про противоречие...

propeller, совершенно верно вам выше подсказали, нужно табличную переменную "коммон" как бы инициализировать нужным типом, иначе она останется просто "коммон" и с ней практически ничего нельзя будет сделать.
buf2buf() или data() этого не делают.
__________________
Zhirenkov Vitaly
Старый 27.02.2009, 12:35   #7  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
да уже так сделал. пока все супер, спасибо за совет
Старый 27.02.2009, 12:47   #8  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ZVV Посмотреть сообщение
Вы бы сами попробовали сначала, прежде чем говорить про противоречие...

... нужно табличную переменную "коммон" как бы инициализировать нужным типом, иначе она останется просто "коммон" и с ней практически ничего нельзя будет сделать.
buf2buf() или data() этого не делают.
кодга говорил про противоречие, именно это и имел ввиду "иначе она останется просто "коммон" и с ней практически ничего нельзя будет сделать"!
в обычном common нет полей (TableId, RecId не считаю)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.02.2009, 17:21   #9  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
а вот такой вопрос еще:
видимо makerecord() создает запись уже с новым (сгенерированым) recid .
можно ли как-то скопировать запись в другую компанию чтобы RecId был одинаковым. ?
Старый 27.02.2009, 17:33   #10  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от propeller Посмотреть сообщение
а вот такой вопрос еще:
видимо makerecord() создает запись уже с новым (сгенерированым) recid .
можно ли как-то скопировать запись в другую компанию чтобы RecId был одинаковым. ?
Откуда такой вывод? Вроде как остаётся 0-ик...
Учтите, что buf2buf() recid не копирует, а data() - копирует.

X++:
static void Job216(Args _args)
{
    SalesTable st;
    Common st3;
    ;

    select firstonly st;
    
    st3 = new DictTable(st.tableId).makeRecord();
    info(int2str(st3.RecId));

    buf2buf(st,st3);
    info(int2str(st3.RecId));

    st3.clear();
    st3.data(st);
    info(int2str(st3.RecId));
}
Цитата:
Сообщение (16:31:15)
0
0
102439380
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: samolalex (1).
Старый 27.02.2009, 17:35   #11  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от propeller Посмотреть сообщение
а вот такой вопрос еще:
видимо makerecord() создает запись уже с новым (сгенерированым) recid .
можно ли как-то скопировать запись в другую компанию чтобы RecId был одинаковым. ?
Ну вообщето не желательно... Ведь в другой компании тот RecId, который вы копируете, может уже использоваться. Да и вообще лучше не трогать RecId, потом может возникнуть много проблем.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.02.2009, 17:41   #12  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
тогда я не знаю. как мне зацепится.
потому что у меня не только insert() но и update().
нужно как то найти если такая запись в другой компании для того чтобы понять апдейтить ее или инсертить. кроме recid больше не знаю как можно выйти из такой ситуации. ведь у меня могут быть разные таблицы , соответственно и поля в них разные.
Старый 27.02.2009, 17:44   #13  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от propeller Посмотреть сообщение
тогда я не знаю. как мне зацепится.
потому что у меня не только insert() но и update().
нужно как то найти если такая запись в другой компании для того чтобы понять апдейтить ее или инсертить. кроме recid больше не знаю как можно выйти из такой ситуации. ведь у меня могут быть разные таблицы , соответственно и поля в них разные.
"зацепится" за какие-то другие общие уникальные поля, если их нет, придётся ввести..
но не recId...
__________________
Zhirenkov Vitaly
Старый 27.02.2009, 17:47   #14  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
ввести это тоже проблема. у меня может 15 таблиц копироваться, не хочется во всех таблицах добавлять поле(
Старый 27.02.2009, 17:53   #15  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от propeller Посмотреть сообщение
ввести это тоже проблема. у меня может 15 таблиц копироваться, не хочется во всех таблицах добавлять поле(
"Ну вам шашечки или ехать?" (с)

С recId не получится, т.к. они в разных компаниях разные, свой генератор последовательности.. Если вы на них завяжетесь будет не "очень хорошо"...

Да и сделать инсерт() с желаемым recId всё равно аксапта не даст - сгенерит свой..
__________________
Zhirenkov Vitaly
Старый 27.02.2009, 18:12   #16  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от propeller Посмотреть сообщение
Хотелось бы кода по минимуму и чтобы метод был универсальным для записи любой таблицы, переданной в качестве параметра.
А может не стоит она того, эта псевдоуниверсальность, ради 15-то таблиц? Слишком уж плохое это слово, "любой". Не буду повторять одну из любимых фраз Маззи.

А то была вот такая вот тема помнится (Как вызвать один метод при записи в любую таблицу), так сначала спросили про "любую таблицу", а потом оказалось, что их всего пять.
Старый 02.03.2009, 11:35   #17  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
Всем спасибо за помощь.
вот такой еще вопрос. можно ли не вешая на каждую таблицу в инсерте и в апдейте эту трансляцию, а где то все это в одном месте перекрыть?
Старый 02.03.2009, 12:17   #18  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Простите, я не прочитал всю ветку полностью, но рискну дать совет:

X++:
Common _newrecord, _record;
    ;

....
    ChangeCompany("DAT")
    {
[B]       _newRecord = null;[/B]
        buf2buf(_record,_newrecord);
        _newrecord.insert();

    }
Возможно кто-то это уже посоветовал
Старый 02.03.2009, 12:46   #19  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
можно и без ChangeCompany

X++:
static void Job2(Args _args)
{
    SalesTable  salesTable;
    SalesTable  salesTableNew;
    ;
    select firstonly reverse salesTable;

    salesTableNew = null;
    salesTableNew.company("DAT");
    buf2Buf(salestable, salesTableNew);
    salesTableNew.doinsert();

    ChangeCompany("DAT")
    {
        salesTableNew = null;
        salesTableNew = SalesTable::find(salesTable.SalesId);
        info(strfmt("%1   %2   %3", salesTableNew.dataAreaId, salesTableNew.RecId, salesTableNew.SalesId));
    }
}
Старый 02.03.2009, 13:37   #20  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
да с этим уже все понятно. вот может кто на мой последний вопрос подскажет.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по возвратам soad DAX: Функционал 2 24.07.2008 13:04
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
Вопрос по проектам Фиксированная цена PSA DAX: Функционал 9 29.06.2006 14:23
Еще вопрос про покрытие по аналитикам в Сводном планировании rt2 DAX: Функционал 3 24.03.2006 18:56
расчеты с персоналом. НДФЛ. вопрос чайника shumelka DAX: Функционал 2 25.03.2004 11:36

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

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

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