Показать сообщение отдельно
Старый 28.03.2013, 10:30   #5  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Попробуйте следующие варианты:
1) Включите в журнале базы данных логирование удаления, обновления и переименования складских журналов. Потом, когда обнаружите зависшую проводку, из поля TransRefId проводки возьмите номер журнала. Найдите историю изменений этого журнала в журнале базе данных. Для анализа истории изменений полезно сделать небольшую модифу, которая при вставке записи в таблицу SysDatabaseLog заполняет созданное вами строковое поле стеком вызова, из которого произошло удаление или переименование журнала. Это чтобы понять, каким образом журнал исчез. В методе insert() таблицы SysDatabaseLog вставьте строку
X++:
this.Callstack = this.stackTraceStr(xSession::xppCallStack());
где Callstack - добавленное новое поле длиной 1000 символов.

На форму отображения истории журнала базы данных SysDatabaseLog выведете это текстовое поле.

2) Проверьте, не модифицирован ли у вас класс InventUpd_DeleteMovement, который отвечает за удаление складских проводок. Сравните изменения в слоях для этого класса. Проверьте, заполнены ли у зависших проводок поля TransChildType, TransChildRefId. Если поля заполнены, то это тоже подозрительно.

3) Проверьте метод delete в таблице InventJournaltrans. Он должен содержать такие строки для AX2009:
X++:
    InventUpd_DeleteMovement::newMovement(InventMovement::construct(this)).updateNow();
    if (this.JournalType == InventJournalType::Transfer && this.ToInventTransId && this.ToInventTransId != this.InventTransId)
    {        InventUpd_DeleteMovement::newMovement(InventMovement::construct(this,InventMovSubType::TransferReceipt)).updateNow();
    }
4) Через SQL Managemet Studio прямым запросом SQL проверьте, не остались ли в базе строки по журналу. Строки могут быть не видны на форме в Аксапте (например, удалили InventDim, на который ссылается строка журнала)
X++:
select * from InventJournalTrans where JournalId like '%10021234'
like нужен, если для journalId включено выравнивание вправо

5) Запросом SQL проверьте, не остался ли в базе сам журнал. Журнал может быть не виден на форме по разным причинам.
X++:
select * from InventJournalTable where JournalId like '%10021234'

Последний раз редактировалось Ace of Database; 28.03.2013 в 10:38.