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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.05.2016, 09:48   #1  
Staxs_Huck is offline
Staxs_Huck
Участник
 
28 / 10 (1) +
Регистрация: 27.05.2016
Dynamics AX4.0 ошибка REGID по LedgerTrans.
В Axapta 4.0 произошла ошибка по REGID. При разноске любого документа выходит сообщение
Невозможно создать запись в Операции ГК (LedgerTrans). Операция: КНКЛN02873348, 27.05.2016.
Запись уже существует.
Провел проверку по ошибке , такой операций нету. Следовательно дошел до того что аксапта не может увеличить(не могу понять из-за чего) номер следующего REGID. Подскажите пожалуйста какие существуют варианты решения данной проблемы.
Старый 27.05.2016, 10:19   #2  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Я пользуюсь таким скриптом для AX 2012. Попробуйте применить его для AX 4 на тестовом приложении.
После исправлений, выполненных скриптом, перегрузите АОС.

X++:
protected void checkNextVal(boolean _fixNextVal = false)
{
    SystemSequences systemSequences;
    Common          record;

    while select forUpdate systemSequences
           where systemSequences.TabId != 0
    {
        if (!(new SysDictTable(systemSequences.TabId)))
            continue;

        record = new SysDictTable(systemSequences.TabId).makeRecord();

        new SkipAOSValidationPermission().assert();
        record.skipAosValidation(true);

        select firstOnly crossCompany RecId
          from record
         where record.RecId >= systemSequences.NextVal;

        if (record.RecId)
        {
            warning(tableId2Name(systemSequences.TabId));

            new SystemSequence().suspendRecIds(systemSequences.TabId);
            new SystemSequence().flushValues(systemSequences.TabId);

            if (_fixNextVal)
            {
                this.fixNextVal(systemSequences.TabId);
            }
        }

        CodeAccessPermission::revertAssert();
    }
}
X++:
protected void fixNextVal(TableId _tableId)
{
    Connection dbConnection = new Connection();
    str        sqlStatement;
    Common     record       = new SysDictTable(_tableId).makeRecord();

    select crossCompany maxOf(RecId)
      from record;

    sqlStatement = strFmt('update %1 set NextVal = %2 where TabId = %3',
                          new SysDictTable(tableNum(SystemSequences)).name(DbBackend::Sql),
                          int642str(record.RecId + 1),
                          int2str(_tableId));

    new SqlStatementExecutePermission(sqlStatement).assert();
    dbConnection.createStatement().executeUpdate(sqlStatement);
    CodeAccessPermission::revertAssert();
}

Последний раз редактировалось Morpheus; 27.05.2016 в 10:24.
За это сообщение автора поблагодарили: AlGol (2).
Старый 27.05.2016, 10:27   #3  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Посмотрите на результаты следующих запросов:
X++:
SELECT nextval FROM SystemSequences where SystemSequences.tabid == 225
X++:
SELECT maxof(recid) FROM LedgerTrans
Результат первого запроса должен быть больше второго. Если нет, то должен помочь предложенный выше скрипт.
__________________
Андрей.
Старый 27.05.2016, 10:48   #4  
Staxs_Huck is offline
Staxs_Huck
Участник
 
28 / 10 (1) +
Регистрация: 27.05.2016
Спасибо сейчас проверю,TabLId это ledgerTrans я правильно понимаю?
Старый 27.05.2016, 10:51   #5  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Да, tableNum(LedgerTrans)
__________________
Андрей.
Старый 27.05.2016, 11:03   #6  
Staxs_Huck is offline
Staxs_Huck
Участник
 
28 / 10 (1) +
Регистрация: 27.05.2016
Подскажите пожалуйста из-за чего может возникать данная ошибка?(Пока не проверил скрипт поднимаю тестовую базу)
Старый 27.05.2016, 12:35   #7  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Staxs_Huck, для 64-битного идентификатора записи естественным путем достичь предела за прошедший с момента появления 4-ки срок - нереально (вставляйте по миллиону записей в секунду - он кончится через пол-миллиона лет). Нет ли каких сторонних программных продуктов, обитающих в вашей IT-епархии и вставляющих записи в БД DAX и пользующих/обновляющих таблицу SystemSequences ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 27.05.2016, 12:53   #8  
Staxs_Huck is offline
Staxs_Huck
Участник
 
28 / 10 (1) +
Регистрация: 27.05.2016
Нет такого нету,весь импорт производится через ADO после чего все созданные документы разносятся непосредственно в системе.
Старый 27.05.2016, 13:27   #9  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Staxs_Huck Посмотреть сообщение
Следовательно дошел до того что аксапта не может увеличить(не могу понять из-за чего) номер следующего REGID.
Не так. Axapta формирует очередное значение RecId, но запись с таким значением RecId уже существует. Т.е. у Вас значение поля SystemSequences.NextVal в записи для таблицы LedgerTrans не соответствует максимальному значению RecId+1 по таблице LedgerTrans. Что вам, собственно, и предлагают проверить


Я бы советовал запустить профайлер SQL. Поймать команду INSERT ... INTO LEDGERTRANS, скопировать эту команду в Management Studio и попытаться выполнить вручную.

Тут дело в том, что сообщение об ошибке, выдаваемое Axapta очень часть не соответствует действительности. Подозреваю, Axapta большую часть ошибок SQL отображает как "Запись уже существует" вне зависимости от реальной ошибки. Например, такое сообщение может выдать если в таблице нет какого-то поля

Цитата:
Сообщение от Staxs_Huck Посмотреть сообщение
Подскажите пожалуйста из-за чего может возникать данная ошибка?(Пока не проверил скрипт поднимаю тестовую базу)
Две причины:

1. Вы вручную, из вне Axapta вставляете записи в таблицу LedgerTrans, но не корректируете значение счетчика в SystemSequences

2. Вот из-за этого еще может быть, раз Вы пользуетесь закачкой через ADO. Проблема с настройкой SET NOCOUNT в хранимых процедурах

AX2009: Ошибка оптимистической модели обновления

Правда, в этом случае подобная ошибка будет выскакивать произвольно в любой момент на любой таблице.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 27.05.2016, 14:57   #10  
Staxs_Huck is offline
Staxs_Huck
Участник
 
28 / 10 (1) +
Регистрация: 27.05.2016
Извените а что означает данная переменная crossCompany -?
Старый 27.05.2016, 15:58   #11  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Staxs_Huck Посмотреть сообщение
Извените а что означает данная переменная crossCompany -?
Это не переменная, а элемент языка запросов, появившийся в DAX2009.
В DAX4 придется пробежаться по всем компаниям и найти максимальное значение учитывая все компании. Ну для такого простого действия проще будет в Management studio (или в любом другом средстве, позволяющем создавать запросы к MS SQL Server) запрос сделать что по таблице проводок, что по SystemSequences.
Старый 27.05.2016, 16:14   #12  
Staxs_Huck is offline
Staxs_Huck
Участник
 
28 / 10 (1) +
Регистрация: 27.05.2016
Копания одна, получается мне нужно взять максимальное значение по РЕГайди(я ток начал разбираться в языке х++,до этого все решал спокойно с помощью SQL).и подставить его в значение LedgerTrans. Или я не уловил смысл запороса.
Старый 28.05.2016, 10:25   #13  
Staxs_Huck is offline
Staxs_Huck
Участник
 
28 / 10 (1) +
Регистрация: 27.05.2016
Всем большое спасибо,проблема исправлена
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
DAX: Official Dynamics AX 2012 R2 Content (update) - Where is it, and how can you find out about updates? Blog bot DAX Blogs 0 03.12.2012 11:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
Developer for Microsoft Dynamics AX Certification Roadmap Blog bot DAX Blogs 1 13.05.2009 16:17
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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