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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.05.2009, 18:40   #1  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Пропуск номеров RecId
У таблицы в АХ 4.0 получилось так, что последовательность гененрируемых RecId наложилась на уже сужествующие в таблице.
Каковы есть варианты решения проблемы?
В форуме нашел описание использование класса SystemSequence, но для 4.0 это не подходит. В 4.0, например, нет метода nextVal()
Старый 05.05.2009, 19:34   #2  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
остновить аос(ы)
исправить поле NEXTVAL таблицы SystemSequence в записи для нужной таблицы (TabId - Id таблицы, ID=-1) любым доступым или любимым инструментом (SQLServer Management Studio, например)
Старый 05.05.2009, 20:38   #3  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
ИМХО, если эта таблица не имеет связок по RecId, то можно через SQL проапдейтить у нее RecId на меньшие (меньше тех что генерятся). Тем более это DAX4. Если конечно в минуса не уйдет.
Типа:
update myTable set recid = recid - 10000;

Последний раз редактировалось raz; 05.05.2009 в 20:42.
Старый 06.05.2009, 09:53   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Кстати, а случайно нет хранимой процедуры типа "CheckRecId" или "FixRecId"?

С Уважением,
Георгий
Старый 06.05.2009, 11:41   #5  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Хочется обойтись средствами самой АХ. Будем считать что нет доступа к БД.
А как теперь в AX4 сбросить кеш номеров?
Половину функций поубирали из SystemSequence
Старый 07.05.2009, 15:28   #6  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от kia Посмотреть сообщение
Хочется обойтись средствами самой АХ. Будем считать что нет доступа к БД.
А как теперь в AX4 сбросить кеш номеров?
Половину функций поубирали из SystemSequence
можно тупо сделать джобик типа while(NextVal in SystemSequence недостаточно велик) try ttsBegin insert ttsAbort catch
(на уровне идеи - реализовать не сложно, как мне кажеться)
__________________
Zhirenkov Vitaly
Старый 07.05.2009, 15:31   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kia Посмотреть сообщение
У таблицы в АХ 4.0 получилось так, что последовательность гененрируемых RecId наложилась на уже сужествующие в таблице.
Еще один пострадавший от прямых запросов и ручного генерирования RecID...
И, наверняка, расхлебывает кашу совсем не тот, кто был автором этого "гениально простого" решения, из-за которых дублируются recid.

извините.
__________________
полезное на axForum, github, vk, coub.
Старый 07.05.2009, 15:41   #8  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от mazzy Посмотреть сообщение
Еще один пострадавший от прямых запросов и ручного неправильного генерирования RecID...
И, наверняка, расхлебывает кашу совсем не тот, кто был автором этого "гениально простого" решения, из-за которых дублируются recid.

извините.
это важно

Оффтоп:
Когда-то очень давно моей первой процедурой (пакетом) на PL/SQL для работы с Аксаптой извне была именно процедура правильной генерации RecID...
Для тройки. Работает до сих пор иногда, уже много лет, ни одного бага.
Если кому интересно могу выложить...


А если по сути, то не обязательно такое может случиться из-за кривой работы с RecID извне. Альтернативный например - делали дамп БД с какой-то базы, с которой в данный момент шла работа, импортнули в другое место, (иссественно CONSISTENT не использовали ) - получили аналогичный результат.
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 07.05.2009 в 16:01.
Старый 07.05.2009, 15:59   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ZVV Посмотреть сообщение
Если кому интересно могу выложить...
Да, было бы здорово.
особенно если дополнить уже существующие темы
Вставка строк в таблицы Аксапты сторонними средствами

См. также:
SystemSequences - Выделение RecId
Как сформировать RecId

а также для ax3.0: Как выполнять дефрагментирование RecID
__________________
полезное на axForum, github, vk, coub.
Старый 07.05.2009, 16:52   #10  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от mazzy Посмотреть сообщение
Да, было бы здорово.
особенно если дополнить уже существующие темы
Вставка строк в таблицы Аксапты сторонними средствами
ок, дополнил
__________________
Zhirenkov Vitaly
Старый 07.05.2009, 20:19   #11  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от mazzy Посмотреть сообщение
Еще один пострадавший от прямых запросов и ручного генерирования RecID...
Все получилось в стандартном режиме. (Почти )
А ситуация была следующая.
У Заказчика обновление модуля ставиться установкой слоя.
У Заказчика была создана таблица (с каким-то TableId), которая наполнялась данными.
Чтобы после обновления она не пропала, то она была включена в новый слой (c другим TableId) и слой был установлен (слой usr удален).
После синхронизации у таблицы изменился TableId и значенеи Next в таблице SystemSequences.
Старый 12.05.2009, 11:02   #12  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от kia Посмотреть сообщение
Хочется обойтись средствами самой АХ. Будем считать что нет доступа к БД.
Для АХ 4.0 :
1. Заходим в АХ монопольно.
2. Создаем класс, запускаемый на сервере.
3. Создаем в нем метод main и вносим в него имя нужной таблицы :
X++:
#define.TableName("MyTable")

public static void main(Args _args)
{
    Connection                      con;
    Statement                       stmt;
    SqlStatementExecutePermission   ssep;
    SqlDictionary                   sqlDictionary;
    str                             sqlStr;
    int                             result;
    ;
    con  = new Connection();
    stmt = con.createStatement();

    select firstonly sqlDictionary where sqlDictionary.TabId == tablenum(#TableName) && !sqlDictionary.fieldId;

    if (sqlDictionary)
    {
        ttsbegin;

        sqlStr  = "UPDATE SystemSequences \n";
        sqlStr += "SET NextVal = (SELECT MAX(RecID) FROM " + sqlDictionary.sqlName + " WITH (TABLOCK)) + 1 \n";
        sqlStr += "WHERE DataAreaId = 'dat' AND Id = -1 AND TabId = " + int642str(tablenum(#TableName)) + " \n";

        ssep =  new SqlStatementExecutePermission(sqlStr);
        ssep.assert();
        result = stmt.executeUpdate(sqlStr);
        CodeAccessPermission::revertAssert();

        ttscommit;
    }
}
4. Запускаем класс
5. Перезапускаем АОС.
6. Проверяем на всякий случай присвоение нового RecId с помощью вставки строки.

PS. Если нет уверенности, то сначала "тренируемся на кошках"
За это сообщение автора поблагодарили: Logger (2), Poleax (2), AvrDen (1).
Теги
recid, systemsequences, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56
Форма InventOnhandItem, Почему RecID у InventSum в этой форме всегда 0? Кирилл DAX: Программирование 2 25.05.2004 18:15

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

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

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