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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2010, 18:07   #1  
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   #2  
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
Просмотров: 350
Размер:	33.5 Кб
ID:	5828   Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 336
Размер:	66.2 Кб
ID:	5829  

Нажмите на изображение для увеличения
Название: 3.JPG
Просмотров: 372
Размер:	54.9 Кб
ID:	5830  
За это сообщение автора поблагодарили: AlGol (1), lev (2), Ivanhoe (3), gl00mie (5), S.Kuskov (3).
Теги
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, время: 04:10.