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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.05.2007, 19:56   #1  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
Скорее всего блокировка таблиц.
Привет !

Задача:

1) Создаем в purchFormLetter_PackingSlip новый метод с таким кодом:

static void method1( PurchLine _purchLine)
{
InventTrans inventTrans;
Voucher voucher;
;
while select inventTrans
where inventTrans.InventTransId == _purchLine.InventTransId &&
(
inventTrans.StatusReceipt == StatusReceipt::Registered ||
inventTrans.Voucher == voucher
)
{
info("1");
}
}

2) Вствляем вызов этого метода в purchFormLetter_PackingSlip.updateNow() на 35 линию:
PurchFormLetter_PackingSlip::method1( PurchLine );

3) Создаем purchesOrder ( AccountsPayable -> Purches order ). В нем создаем две линии с товаром DPI-02 в количесвте 2 и 3 штук. (Товар можно и OL-2500-T, главное чтобы был SerialNumber в InventoryDimension)

4) Резервируем (на форме Inventory->Reservation)

Результат:
Выводится только 3 раза инфо.

Вопрос:
Почему выводится 3 раза, если должно выводится 5 раз?

Предположение:
Возможно таблица блокируется при выполении селекта и селект не проходит.

Такая вот проблема, может кто-то что-то посоветует, может линки есть почитать.

Самое интересное (непонятное) :
Если закоментировать в селекте строку с inventTrans.Voucher == voucher, то все будет работать хорошо!

Если кто дочитал , объясните в чем проблема!
За это сообщение автора поблагодарили: AndyD (5).
Старый 10.05.2007, 10:26   #2  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
Жаль, что никому не интересно.
Потомучто это ошибка Аксапты, хотелось бы услышать мнение людей о причинах.
ЗЫ: использовалась AX40
Старый 10.05.2007, 11:06   #3  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
переменная Voucher у Вас где инициализируется?? Она же всегда тут пустая....Зачем она? Может в этом соль
Старый 10.05.2007, 11:26   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
может быть у вас не || а && - иначе это условие не должно влиять
Старый 10.05.2007, 11:28   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
может быть у вас не || а && - иначе это условие не должно влиять
Максим взял все карты раскрыл . Дай подумать человеку
Старый 10.05.2007, 12:38   #6  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
Кстати в 3-ке тоже не работает, так что у кого нет 4-ки может попробовать.(Только вставлять нужно в 32 линию)

В том то и дело , что условие стоит по "ИЛИ" и ваучер не должен влиять на выборку (потомучто StatusReceipt всегда Registered).
Но это если рассуждать логично.

А тут ошибка Аксапты или какие-то неизвестные мне глубины.

Повторюсь, ошибок в коде нет.
Старый 10.05.2007, 12:43   #7  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
То SADA: переменная ваучер должна быть пустой (вообще это не важно, потомучто оно идет по ИЛИ)

Я тут уже все умы подключил на работе... не решили

Скажу сразу, пробовали куча вариантов (гипотез), кажется просто все .... а работать не хочет
Старый 10.05.2007, 12:43   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
SQL на сервер правильный уходит?
Старый 10.05.2007, 12:49   #9  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
А что за задачка то? Что сделать нужно? Может как то по другому можно решить.
Старый 10.05.2007, 14:10   #10  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
To belugin: SQL-запрос не формируется. Не знаю почему. Т.е. в дебагере доходит до селекта. Смотрю трейс - SQL-запроса нет.
(Прога отлавливает запросы к конкретной таблице, поэтому ошибки нет. )

Получается так - для первой линии(Заказ-а\PurchesOrder-а) селект выполняется, для второй нет.

To SADA: самый простой способ решения это сделать два цикла и все будет работать.

Еще раз повторюсь если закоментировать inventTrans.Voucher == voucher , то все работает.

Мистика
Старый 10.05.2007, 16:17   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Что-то у нее (Ax) с кэшем крышу сносит.
Если перед селектом поставить inventTrans.DisableCache(True), то все будет выполняться на ура. Причем, на таблице кэширование выключено и WasCache() возвращает CachedHow::NotCached
__________________
Axapta v.3.0 sp5 kr2
Старый 10.05.2007, 16:39   #12  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
классно, действительно помогло.
Только это к сожалению не помогло в проэкте - есть селекты, которым не помогает ни:
1) flush inventTrans;
2) inventTrans.DisableCache(true)
3) ttsbegin select ttscommit - на всякий случай
4) inex.... index hint

Вобщем будте осторожны с таблице inventTrans!

Если еще есть гипотезы прошу.... интересно найти правду

... если нужно могу подумать и выложит код которому не помогает
inventTrans.DisableCache(true)
Старый 10.05.2007, 16:47   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Выкладывайте
__________________
Axapta v.3.0 sp5 kr2
Старый 10.05.2007, 17:30   #14  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А вообще-то, никакой загадки нет.
Если посмотреть дальше по коду, то увидим вызов
\Data Dictionary\Tables\InventTrans\Methods\viewCacheInventTransId
в котором выборка по inventTransId засовывается в кэш (return new RecordViewCache(inventTrans); ).
Так что, второй запрос просто делает выборку не в таблице, а в кэше (почему это происходит с включенным в запрос Voucher могу только гадать).

Для обхода такого негативного влияния кэширования просто вставьте такой код
X++:
    while (purchParmLine)
    {
        inventMovement = null;
Надеюсь, остальные ваши проблемы с InventTrans так же пропадут

PS Или вызывайте код по работе с InventTrans после
X++:
 inventMovement = InventMovement::construct(purchLine);
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 10.05.2007 в 17:33.
За это сообщение автора поблагодарили: belugin (6), kashperuk (3).
Старый 10.05.2007, 17:36   #15  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
Погорячился !
Срабатывает везде.
Дейсвтительно, получается значения берутся из кеша. Этим и объясняется отсутствие запроса к базе данных в профайле.

Спасибо еще раз!

Вывод: использовать совет AndyD - inventTrans.disableCache(true), если возникнут такие проблемы.

Причины возниконвения: фичя аксапты (или )
Старый 10.05.2007, 18:05   #16  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
Спасибо огромное !

ЗЫ: Когда писал последний пост, не знал, что ответ уже дан.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Блокировка таблиц пр InnerJoin Logger DAX: Программирование 5 26.11.2007 18:21
Владельцы таблиц в БД аксапты AxaptaUser DAX: Администрирование 11 23.05.2007 18:33
Блокировка ключа индекса Sequel DAX: Программирование 4 06.07.2006 16:08
Блокировка всех таблиц DreamCreator DAX: Администрирование 1 09.08.2005 16:07
Как настроить репликацию таблиц Аксапта в хранилище данных для OLAP max_spbti DAX: Функционал 4 28.06.2004 10:32

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

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

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