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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2015, 14:38   #1  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Вставка записи и новый RecID
если я делаю экспорт из своей системы в Аксапту и мне необходимо вставить RecId, то можно ли сделать просто максимальное+1 или есть какие -то процедуры?
Старый 12.05.2015, 14:46   #2  
axm2013
Гость
 
n/a
Цитата:
Сообщение от Морковка Посмотреть сообщение
если я делаю экспорт из своей системы в Аксапту и мне необходимо вставить RecId, то можно ли сделать просто максимальное+1 или есть какие -то процедуры?
Если вы пишите в SQL то можно по идее.
Старый 12.05.2015, 15:14   #3  
michel1971 is offline
michel1971
Участник
 
76 / 63 (3) ++++
Регистрация: 14.01.2011
У Вас версия какая? Если 2012, то есть хранимая процедура sp_GetNextRecId
Старый 12.05.2015, 15:52   #4  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Цитата:
Сообщение от michel1971 Посмотреть сообщение
У Вас версия какая? Если 2012, то есть хранимая процедура sp_GetNextRecId
Спасибо! получается моя вставка max(RecId)+1 может вызвать конфликт при стандартной вставке записи аксаптой, т.е. возможно эта процедура из таблицы SYSTEMSEQUENCES получит в следующий раз значение равное моему добавленному макс+1 и начнет ругаться?
Старый 12.05.2015, 15:59   #5  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
желательно не вставлять данные напрямую из других систем в таблицы аксапты, которые активно используются системой. используйте для этого специально созданные для этого таблицы, recid в них не будет иметь особого значения
Старый 12.05.2015, 21:13   #7  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Также можно использовать.NET Business Connector, тогда Аксапта при вставке будет генерировать RecId и другие значения системных полей стандартными механизмами..

Пример кода для вставки записи можно найти по следующей ссылке

Последний раз редактировалось Cardagant; 12.05.2015 в 21:18.
Старый 13.05.2015, 16:45   #8  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Цитата:
Сообщение от Cardagant Посмотреть сообщение
Также можно использовать.NET Business Connector, тогда Аксапта при вставке будет генерировать RecId и другие значения системных полей стандартными механизмами..

Пример кода для вставки записи можно найти по следующей ссылке
там для C+ не знаю как переделать на X++ , некоторые же функции недоступны из используемых по примеру.
Старый 13.05.2015, 17:02   #9  
axm2013
Гость
 
n/a
Цитата:
Сообщение от Морковка Посмотреть сообщение
там для C+ не знаю как переделать на X++ , некоторые же функции недоступны из используемых по примеру.
Как вы вставляете записи в таблицу?
В среде Аксапты и код соответсвенно на X++?
Старый 13.05.2015, 19:20   #10  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от Морковка Посмотреть сообщение
если я делаю экспорт из своей системы в Аксапту
Вы указали, что делаете вставку из некоторой своей системы и я предположил, что эта система оперирует собственным языком программирования. Код, использующий Business Connector, должен быть написан на языке этой системы.

Расскажите пожалуйста подробнее откуда делается вставка.

Также присоединяюсь к вопросу axm2013 .
Старый 14.05.2015, 09:38   #11  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
265 / 808 (27) +++++++
Регистрация: 23.10.2012
Цитата:
Сообщение от Морковка Посмотреть сообщение
exec sp_GetNextRecId 104532
Добрый день!
Так попробуйте:
X++:
declare @my_new_recid bigint
exec sp_GetNextRecId @tableid = 104532, @recid = @my_new_recid output
select @my_new_recid

Последний раз редактировалось Товарищ ♂uatr; 14.05.2015 в 09:48.
Старый 14.05.2015, 09:39   #12  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
ПОМОГИТЕ как вернуть в коде x++ аксапты результат sp_GetNextRecId ??
exstr = strFmt(" exec sp_GetNextRecId 104532 ");
resultSet = wrkADODBConnection.executeQuery(exstr);

ругается на неверное число аргументов или неверный тип аргументов.

Задача из SQLбазы другой системы(которая велась раньше) в коде аксапты вытащить данные (что получилось) и вставить в таблицу аксы, где RECID необходимо генерить поправильному. max(RECID)+1 может пересечься при добавлении через Аксу новой записи руками. проверено.
Старый 14.05.2015, 09:49   #13  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
Добрый день!
Так попробуйте:
X++:
declare @my_new_recid bigint
exec sp_GetNextRecId @tableid = 104532, @recid = @my_new_recid output
select @my_new_recid
Спасибо большое! а дальше как правильно?
exstr = strFmt("declare @my_new_recid as bigint exec sp_GetNextRecId @tableid = 104532, @recid = @my_new_recid output ");
resultSet = wrkADODBConnection.execute(exstr);
RecIdNew = resultSet.getInt(1);


getInt не поддерживается...
Старый 14.05.2015, 09:50   #14  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
265 / 808 (27) +++++++
Регистрация: 23.10.2012
Цитата:
Сообщение от Морковка Посмотреть сообщение
exstr = strFmt("declare @my_new_recid as bigint exec sp_GetNextRecId @tableid = 104532, @recid = @my_new_recid output ");
X++:
strSelect       = @"declare @my_new_recid bigint
exec sp_GetNextRecId @tableid = 104532, @recid = @my_new_recid output
select @my_new_recid";
Цитата:
Сообщение от Морковка Посмотреть сообщение
resultSet.getInt(1)
X++:
resultset.getInt64(1);

Последний раз редактировалось Товарищ ♂uatr; 14.05.2015 в 09:52.
Старый 14.05.2015, 09:52   #15  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
X++:
strSelect       = @"declare @my_new_recid bigint
exec sp_GetNextRecId @tableid = 104532, @recid = @my_new_recid output
select @my_new_recid";
X++:
resultset.getInt64(1);
к сожалению Метод "getInt64" не поддерживается интерфейсом Automation COM-объекта класса "_Recordset".
Старый 14.05.2015, 09:54   #16  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
856 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
сага о X,Y и Z
http://www.gunsmoker.ru/2008/10/x-y-z.html
За это сообщение автора поблагодарили: Товарищ ♂uatr (0).
Старый 14.05.2015, 09:58   #17  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
265 / 808 (27) +++++++
Регистрация: 23.10.2012
Цитата:
Сообщение от Морковка Посмотреть сообщение
к сожалению Метод "getInt64" не поддерживается интерфейсом Automation COM-объекта класса "_Recordset".
Могу изобрести велосипед:

X++:
@"declare @my_new_recid bigint
    exec sp_GetNextRecId @tableid = 104532, @recid = @my_new_recid output
    select CAST(@my_new_recid as varchar(max))"
Соответственно брать не int64 а string.
За это сообщение автора поблагодарили: Морковка (1).
Старый 14.05.2015, 10:00   #18  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от Морковка Посмотреть сообщение
Задача из SQLбазы другой системы(которая велась раньше) в коде аксапты вытащить данные (что получилось) и вставить в таблицу аксы, где RECID необходимо генерить поправильному. max(RECID)+1 может пересечься при добавлении через Аксу новой записи руками. проверено.
А в чём проблема прямо в Аксе (куда вставляете данные) наполнять табличный буфер извлечёнными из другой системы данными и производить вставку? При этом Recid будет генериться при вставке.

Последний раз редактировалось Cardagant; 14.05.2015 в 10:13.
За это сообщение автора поблагодарили: Морковка (1).
Старый 14.05.2015, 10:01   #19  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
Могу изобрести велосипед:

X++:
@"declare @my_new_recid bigint
    exec sp_GetNextRecId @tableid = 104532, @recid = @my_new_recid output
    select CAST(@my_new_recid as varchar(max))"
Соответственно брать не int64 а string.

Это то понятно. хочется сделать как правильно)
Старый 14.05.2015, 11:21   #20  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Цитата:
Сообщение от Cardagant Посмотреть сообщение
А в чём проблема прямо в Аксе (куда вставляете данные) наполнять табличный буфер извлечёнными из другой системы данными и производить вставку? При этом Recid будет генериться при вставке.

Спасибо! Аксапта сама всё делает. Но опыт с вызовом GetRecID мне тоже пригодится.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
EP DAX 2012 - DetailPage вставка новой записи aweaka DAX: Программирование 2 22.01.2015 10:53
AX2012 R2: Partition и RecId первой записи в таблице Kabardian DAX: Прочие вопросы 0 15.09.2014 10:49
axforum blogs: Переделываем RecId в таблицах Blog bot DAX Blogs 0 06.05.2011 19:11
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
Новые записи в таблице без генерации recId Perc DAX: Программирование 23 14.12.2005 18:10
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:42.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.