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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.05.2016, 15:07   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Ошибка времени выполнения: Буфер записей равен null.
Привет всем.
Кто-нибудь сталкивался с ошибкой "Буфера записей равен NULL" ?
2009-я аксапта.
Код выполняется внутри транзакции, дергается серверный статический метод внутри которого идет большое число вызовов то клиентского, то серверного методов.

В конце идет выход из серверного статического метода. В этот момент аксапта задумывается и выскакивает ошибка "Буфера записей равен NULL". (Похоже на сервере в этот момент идет очистка мусора).
Если статический метод переделать на Called from то все исполнение идет на клиенте и указанной ошибки не возникает. С чем это может быть связано ?

P.S.
Естественно, код надо переписывать на нормальное исполнение, но вопрос связан именно с упомянутой ошибкой. Не должно ее возникать.
Старый 23.05.2016, 16:27   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
В интернетах нашёл: http://dax-cz.blogspot.ru/2009/08/re...r-is-null.html

Пишут, что это из-за того что возвращается курсор выбранный для обновления.

Попробуйте перед возвратом курсору сделать .SelectForUpdate(false)
За это сообщение автора поблагодарили: Logger (7), Ace of Database (3).
Старый 23.05.2016, 21:24   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
В интернетах нашёл: http://dax-cz.blogspot.ru/2009/08/re...r-is-null.html
Спасибо за помощь.
Поковырялся - у нас все оказалось немного по другому.
Пример не такой как у чехов а с точностью до наоборот.

У них серверный метод дергает клиентский код, который возвращает forupdate курсор.
У нас клиентский метод дергает серверный код который возвращает forupdate курсор (получен при помощи insert() ).

Ваш способ помог, но не совсем. Вызов .SelectForUpdate(false) после того как курсор вставили и еще и обновили не сбрасывает его свойство selectforupdate - пришлось возвращать дубликат курсора вызовом data()

Потом, посмотрел получше и вообще избавился от предшествующих клиент-серверных вызовов и это тоже помогло !
Т.е. изначально работало так :
Клиентский класс дергает серверный статический метод, который внутри себя создает шапку документа и его строки и по мере заполнения строк делает кучу клиентских вызовов к классу wmsTransportInvoiceReport_RU (он, зараза, клиентским оказался), а в конце возвращает созданную шапку.
Мне показалось странным что глюк от этого возник, т.к. сценарий когда из клиентского кода дергают серверный код, который создает запись и возвращает ее - используется сплошь и рядом. Должна была быть еще какая-то причина возникновения бага.

Если же класс wmsTransportInvoiceReport_RU сделать called from, т.е. убрать в процессе заполнения множество клиент-серверных вызовов, то тоже глюк пропадает сам по себе. Видимо эти множественные клиент-серверные вызовы что-то после себя оставляют, что потом и приводит к появлению глюка. Вполне возможно что после выхода из статического метода синхронный сборщик мусора пытается наконец все почистить пробегаясь по куче ссылок на клиенте и сервере и это приводит к проблемам.

Т.е. нахождение объектов на разных tier однозначное зло. И за классами надо внимательнее смотреть куда они приписаны - called from, client или server

Последний раз редактировалось Logger; 23.05.2016 в 21:30.
За это сообщение автора поблагодарили: Ace of Database (3), gl00mie (2).
Старый 24.05.2016, 07:24   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Logger Посмотреть сообщение
Мне показалось странным что глюк от этого возник, т.к. сценарий когда из клиентского кода дергают серверный код, который создает запись и возвращает ее - используется сплошь и рядом. Должна была быть еще какая-то причина возникновения бага.
Уточните, пожалуйста, у вас перед возвращением курсор просто вставлялся или после вставки всё-таки ещё и обновлялся, а потом уже возвращался?
Старый 24.05.2016, 07:27   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Вставка.
Затем обновление.
И только потом возврат.
Старый 24.05.2016, 09:42   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Уточните, пожалуйста, у вас перед возвращением курсор просто вставлялся или после вставки всё-таки ещё и обновлялся, а потом уже возвращался?
Курсор обновлялся после вставки.
Попробовал пропускать обновление в тестовом примере - все равно баг воспроизводится, т.е. обновление не влияет.
Теги
баг

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Странная ошибка(Ошибка времени выполнения: Неправильный тип индекса массива.) raniel DAX: Программирование 7 21.01.2011 14:45
Ошибка времени выполнения: В NumberSeqReference_Empl_RU (Объект), не найден исполнимый код метода "loadModule" Ksju DAX: Функционал 14 21.10.2009 13:00
Ошибка времени выполнения laxel DAX: Администрирование 2 28.08.2008 09:03
Быстрый способ добавить фильтр на FormDataSource Maxim Gorbunov DAX: База знаний и проекты 28 14.06.2005 17:16
Ошибка времени выполнения tolstjak DAX: Администрирование 4 04.04.2003 16:17

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

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

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