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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.05.2010, 11:12   #1  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Не выделяется Recid в Dynax2009
Доброго времени суток!

Запускаю джоб (DAX 2009 SP1, SQL Server 2005)
X++:
  PurchParmSubTable table;
  ;
  table.OrigPurchId = "03184";
  table.ParmId = "SID0937843";
  table.PurchName = "Fibber Global Tech Limited";
  table.TableRefId = "SID0937844";
  try
    {
    table.insert();
    }
  catch
    {
      error("error");
    }
В результате вываливается ошибка (см. картинку). Как показывает профайлер кода, при вставке записи в базу не передается Recid (вернее, передается 0). Наших доработок на таблице нет, метод Insert не перекрыт, на "братской" таблице SalesParmSubTable все нормально работает. Таблицу синхронизировал (никаких ошибок не было), удалял в SQL, потом восстанавливал через синхронизацию в DynAx - не помогает. Что надо пнуть, чтобы восстановить выделение recid?
Миниатюры
Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 312
Размер:	51.7 Кб
ID:	5813   Нажмите на изображение для увеличения
Название: 3.JPG
Просмотров: 383
Размер:	31.4 Кб
ID:	5814  

Старый 11.05.2010, 11:18   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А в таблице SystemSequences для строки с TABID == tablenum(PurchParmSubTable) какие значения в NEXTVAL/MINVAL/MAXVAL?
За это сообщение автора поблагодарили: Lemming (10).
Старый 11.05.2010, 11:20   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Вы перевходили в Ax? Не может быть такого, что был вызван PurchFormLettrer.suspendRecIDs в той же сессии?
За это сообщение автора поблагодарили: MikeR (7).
Старый 11.05.2010, 11:37   #4  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от kashperuk Посмотреть сообщение
А в таблице SystemSequences для строки с TABID == tablenum(PurchParmSubTable) какие значения в NEXTVAL/MINVAL/MAXVAL?
У нас в этой таблице вообще только одна запись
Миниатюры
Нажмите на изображение для увеличения
Название: 4.JPG
Просмотров: 344
Размер:	38.5 Кб
ID:	5816  
Старый 11.05.2010, 13:01   #5  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Надо смотреть в компании dat.
__________________
Ivanhoe as is..
Старый 11.05.2010, 14:57   #6  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Надо смотреть в компании dat.
Пардон, туплю, конечно же, запись есть.

MinVal = 1
MaxVal = 9223372036854775807
NextVal = 5637171578
Старый 11.05.2010, 15:29   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Пардон, туплю, конечно же, запись есть.

MinVal = 1
MaxVal = 9223372036854775807
NextVal = 5637171578
Ну, соответственно, если не было suspension of recId allocation (см. пост Максима выше), то должно сохранять запись со значением RecId == NextVAL
Старый 11.05.2010, 16:20   #8  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
suspension of recId allocation не было, но все равно вместо нормального recid приходит 0
Старый 11.05.2010, 16:36   #9  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
2 Oleg
Попробуйте дописать спереди NextVal какую нибудь циферку и перегрузите АОС.
После этого все так же?

Последний раз редактировалось trud; 11.05.2010 в 16:38.
Старый 11.05.2010, 16:48   #10  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от trud Посмотреть сообщение
2 Oleg
Попробуйте дописать спереди NextVal какую нибудь циферку и перегрузите АОС.
После этого все так же?
Не помогло
Старый 11.05.2010, 20:07   #11  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Стоит попробовать компиляцию таблицы и реиндексацию объектов приложения.
__________________
С уважением,
glibs®
Старый 12.05.2010, 11:39   #12  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от glibs Посмотреть сообщение
Стоит попробовать компиляцию таблицы и реиндексацию объектов приложения.
Два раза джоб отработал нормально, потом опять ошибка
Старый 12.05.2010, 18:07   #13  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Сделал синхронизацию, переиндексацию (для всех таблиц), глоб. компиляцию. Удалил запись в systemSequences кот. относится к PurchParmSubTable. После всего наблюдается след. эффект: джоб работает стабильно, все хорошо до тех пор, пока не делается попыток разнести счет(накладную) по поставщику. после этого опять та же ошибка. Если перезайти в Аксапту, то все повторяется - джоб опять работает и т.д..

Цитата:
Сообщение от belugin Посмотреть сообщение
Вы перевходили в Ax? Не может быть такого, что был вызван PurchFormLettrer.suspendRecIDs в той же сессии?
А это разве плохо? Я смотрел в отладчике - при разноске счета(накладной) по поставщику PurchFormLettrer.suspendRecIDs вызывается для каждого счета, и все это в одной сессии.
Старый 14.05.2010, 12:23   #14  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Разобрался. Ключевым моментом оказалось использование разработчиками объекта RecordInsertList для вставки запиесй.

Во время разноски используется метод
X++:
PurchFormLettrer.suspendRecIDs()
отключение автовыделения recid при добавлении записей, соотв. дальше, при вставке, этот recid нужно явно присвоить.

Вставка происходит след образом - табл. purchParmTable.insert, внутри Insert вызывается метод
X++:
purchParmSubTable::createFromPurchParmTable(PurchParmTable _purchParmTable, boolean _insert = true)
кот. вызывает метод
X++:
purchParmSubTable.insert()
В моем случае createFromPurchParmTable отрабатывал два раза: первый раз он вызывался с параметром _insert = false. Причем в методе
X++:
this.insertPurchParmSubTable(purchParmSubTable)
как раз и происходит "ручное" присвоение recid для purchParmSubTable.

Второй раз вызов createFromPurchParmTable (уже с параметром _insert = true) происходит при отработке метода
X++:
protected void recordInsertListInsert()
{
    recordInsertPurchParmTable.insertDatabase();
    recordInsertPurchParmSubTable.insertDatabase();
    recordInsertPurchParmLine.insertDatabase();
    recordInsertPurchParmLine_Asset.insertDatabase();
    this.removeRecIdSuspension();
}
в частности метода
X++:
recordInsertPurchParmTable.insertDatabase()
и в этот момент уже никто не выделяет recid. Соотв, вываливается ошибка и при этом НИКТО НЕ СНИМАЕТ ОТКЛЮЧЕНИЕ АВТОВЫДЕЛЕНИЯ recid на таблицах. Поэтому и джоб переставал работать после попытки разнести счет или накладную.

А происходит повторный вызов из-за того, что у нас включено логирование на таблице purchParmSubTable (на Insert). Как только отключили логирование все заработало.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.JPG
Просмотров: 347
Размер:	33.5 Кб
ID:	5828   Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 331
Размер:	66.2 Кб
ID:	5829  

Нажмите на изображение для увеличения
Название: 3.JPG
Просмотров: 366
Размер:	54.9 Кб
ID:	5830  
За это сообщение автора поблагодарили: AlGol (1), lev (2), Ivanhoe (3), gl00mie (5), S.Kuskov (3).
Старый 14.05.2010, 12:41   #15  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Спасибо за отчет.
А можно попросить написать резюме буквально в двух предложениях (для консультантов : при таких-то условиях не работает то-то, обходить проблему - так-то.
__________________
Ivanhoe as is..
Старый 14.05.2010, 13:11   #16  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Если при разноске счета на оплату (накладной) по закупке появляется ошибка "Невозможно создать запись ... База данных SQL обнаружила ошибку", проверить настроено ли логирование на вставку записей по этой таблице (Администрирование -> Журнал базы данных). Если настроено, отключить.
Также в сообщении об ошибке кроме таблицы PurchParmSubTable могут быть таблицы PurchParmTable, PurchParmLine, PurchParmLine_Asset. После появления этой ошибки обязятельно перезайти в Аксапту.
Миниатюры
Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 235
Размер:	51.7 Кб
ID:	5831  
За это сообщение автора поблагодарили: vmoskalenko (0).
Старый 14.05.2010, 14:06   #17  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Cool
Смысл временного отключения генерации RecId ?
Боятся, что кончится быстро ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 16.06.2010, 14:24   #18  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Журнал БД отключен, но ошибка есть

Поиск по базе знаний MS находит такую запись: Error message when you post a purchase order in Microsoft Dynamics AX 2009: "Cannot create a record in Purchase order header - Updating table (PurchParmSubTable)" (доступ к Partner / Customer Source).

Но при попытке открыть статью - выдает ошибку "Примите наши извинения... При получении данного документа произошла ошибка. Повторите поиск.". Аналогичная ошибка при открытии других статей.

Попытка скачать обновление напрямую (используя совет с форума) не дает результата: "В статья базы знаний нет открытого для скачивания исправления. Пожалуйста свяжитесь со службой поддержки, если Вам нужна срочная помощь."

Ждем ответа от MS
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: Daiver (1).
Старый 16.06.2010, 17:13   #19  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Статья KB961909, в ней описание нужных исправлений, поэтому нет хот-фикса для загрузки. Ошибка появляется как для включенного Журнала БД, так и для включенного аудит-трейла Life-Science.

Я так понимаю, оба случая - довольно редкие, специально настраивать журнал БД на эту таблицу я не вижу смысла, Life-Science вообще мало у кого куплен
__________________
Ivanhoe as is..
Старый 04.07.2011, 11:24   #20  
vanokh is offline
vanokh
Участник
 
108 / 63 (3) ++++
Регистрация: 23.10.2008
имхо, дело не в генерации RecId, а в том, что insert срабатывает два (!) раза.
сначала создал свою ошибка работы RecordInsertList?, потом заметил эту тему

логгирование выключено
Теги
ax2009, purchparmsubtable, recid, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 23:19.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.