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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.03.2013, 14:17   #1  
NNB is offline
NNB
Участник
 
103 / 12 (1) ++
Регистрация: 31.08.2006
Висящие проводки
Добрый день
Изредка, в результате непонятно каких действий пользователей создается след. ситуация:
в InventTrans появляются проводки у которых StatusIssue - 'Физ. зарезервировано' и TransRefId ссылаются на некий журнал переноса.
В журнале переноса соответствующие строчки были удалены.
Методы на таблицах не менялись, да и, в любом случае, ошибка появляется только изредка.
Перезагрузок не было.
У кого есть какие мысли?
Заранее спасибо
Старый 27.03.2013, 15:10   #2  
andrewK is offline
andrewK
Участник
 
45 / 22 (1) +++
Регистрация: 03.11.2005
Может быть строки журнала не удаляются, а происходит переименование кода журнала?
Ссылка на обсуждение
Старый 27.03.2013, 19:55   #3  
ashu is offline
ashu
MCTS
MCBMSS
 
255 / 78 (3) ++++
Регистрация: 24.06.2008
Кстати, довольно частая проблема. Причем начиная с версии 3.0 и вплоть до 5 встречался с разными ее вариациями.
Воспроизвести (и понять полностью) в чем причина, ни как не удавалось (хотя особо и не старались), кроме двух вариантов (которые не всегда срабатывали, только если было определенное сочетание фазы луны, давления, делал это пользователь или конс ,а не программист в дебагере и тд):
1. при удалении строк складского журнала, прерывать процедуру.
2. удаление шапки складского журнала

кроме ситуации когда реально нет строк журнала, но есть запись в инвенттранс, наиболее часто встречалась когда нет самого журнала (шапки), а есть записи строк, и соответственно инветтрансы, что тоже не гуд.

на эти случаи были простенькие джобики, которые такие случаи находили и/или исправляли, потому с такими моментами особого не парились и не уделяли внимание

Последний раз редактировалось ashu; 27.03.2013 в 19:57.
Старый 28.03.2013, 08:30   #4  
NNB is offline
NNB
Участник
 
103 / 12 (1) ++
Регистрация: 31.08.2006
Вис пров
Особой проблемы конечно нет, но интересно
Старый 28.03.2013, 10:30   #5  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 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.
Старый 28.03.2013, 10:37   #6  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Ну и на InventJournaltrans поставьте логирование изменений и удалений.
Старый 28.03.2013, 10:41   #7  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Вот код метода stackTraceStr который у меня добавлен в таблице SysDatabaseLog
X++:
str stackTraceStr(container stackTrace)
{
    int i;
    str s="";
    ;
    for(i = 7; i<=conLen(stackTrace); i+=2)
        s+=strFmt("%1:%2\r\n", conPeek(stackTrace, i), conPeek(stackTrace, i+1));

    return s;
}
Старый 28.03.2013, 10:52   #8  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Сообщение от ashu Посмотреть сообщение
наиболее часто встречалась когда нет самого журнала (шапки), а есть записи строк, и соответственно инветтрансы, что тоже не гуд.
Проверьте, что у вас на таблице InventJournalTable в узле DeleteActions добавлена таблица InventJournalTrans, и для нее включен каскад. В стандарте по умолчанию все включено.
Старый 28.03.2013, 11:04   #9  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Анализ истории удаления журнала или строк журнала нужен, чтобы определить, не удаляются ли где-то строки или сам журнал через вызов doDelete()
Старый 28.03.2013, 11:14   #10  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Еще можно проверить, не менялся ли InventTransId в строке журнала в процессе ее жизни до удаления. Это совсем параноидальная проверка, но если зависают проводки, то почему бы и нет.
В стандарте изменения уже присвоенного InventTransId нигде нет. Но если у вас работало много программистов на большом навороченном проекте, то все может быть
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Складские проводки по накладным расходам. Ax 2009 Dolores DAX: Функционал 8 22.05.2012 19:42
Проводки с типом SummedUp при закрытии склада в DAX 2009 ansoft DAX: Функционал 15 20.09.2010 08:28
Заказы на перемещения и проводки в ГК в DAX2009 Starling DAX: Функционал 16 10.06.2009 11:43
Закрывающие/открывающие проводки KatyN DAX: Функционал 11 24.07.2006 16:15
Знак в форме ГК/Бухгалтерские проводки chel DAX: Функционал 7 11.03.2005 04:28
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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