|  29.05.2018, 10:09 | #1 | 
| Участник | Ошибка работы .Net business connector при выборке заказов на продажу 
			
			Добрый день, коллеги! При выполнении запроса из стороннего приложения через .net business connector получаю такую ошибку: Microsoft.Dynamics.BusinessConnectorNet.XppException: Невозможно выбрать запись в Заказы на продажу (SalesTable). Из базы данных выбрано нулевое значение (NULL), которое не поддерживается. at Microsoft.Dynamics.BusinessConnectorNet.Axapta.CallStaticClassMethod(String className, String methodName, Object param1) at DynamicsWebService2012.BCProxyAxapta2012.CallStaticClassMethod(String className, String methodName, String param) В Аксапте логика отрабатывает нормально. Опытным путем установили, что ошибка валится на методе find() для определенных заказов на продажу. Ошибка также может генерироваться в конструкциях while select, в попытке получения заказов через запрос (метод queryRun.next()) Подскажите, пожалуйста, как с этим бороться? Та же самая логика из аксапты отрабатывает нормально, ошибок синхронизации данных нет. Проблемные заказы (таких примерно около 1% от общего количества заказов) ничем особым не отличаются от остальных, полей со значениями NULL не обнаружено. Дополнительная информация: MS DAX 2012 R3 (Версия приложения 6.3.164.0), MS SQL Server 2012. Последний раз редактировалось DaxDeveloper; 29.05.2018 в 10:21. Причина: Уточнение версии приложнения | 
|  | 
|  29.05.2018, 11:49 | #2 | 
| Участник | 
			
			БД Аксапты не содержит значения null за исключением "больших" полей типа container. Для начала, убедитесь, что стороннее приложение в принципе находит запись, затем проверьте container-поля на наличие данных. В случае чего надо вести отладку стороннего приложения при наличии такой возможности.
		 
				__________________ // no comments | 
|  | |
| За это сообщение автора поблагодарили: ax_mct (2), DaxDeveloper (1). | |
|  30.05.2018, 11:54 | #3 | 
| Участник | 
			
			Исключение вызывается даже в отладочном методе, содержащем код: X++: select RecId from salesTable where salesTable.RecId == problemSalesRecId; | 
|  | 
|  30.05.2018, 12:10 | #4 | 
| Moderator | 
			
			А попробуйте перед этим вызовом поставить salesTable.disableCache(true). Просто есть шансы что это какие-то странные глюки кэширования. То есть - из таблицы вытаскиваются корректные данные, но где-то по пути между БД, кэшем и приложением, часть полей заменяется мусором.
		 | 
|  | |
| За это сообщение автора поблагодарили: DaxDeveloper (1). | |
|  31.05.2018, 03:59 | #5 | 
| Участник | 
			
			Денис, спасибо.  X++: salesTable.disableCache(true);Денис, еще вопрос. Как отключить кэширование в запросах (Query)? Сходу не нашел... | 
|  | 
|  31.05.2018, 18:22 | #6 | 
| Moderator | Цитата: Вообще я бы посоветовал просто всю проблемную логику перетащить на сервер (в смысле - поставить у классов RunOn=Server и server перед static-методами). Просто .net BC вообще мало кто пользуется. Из за этого там много не выловленых багов, которые просто некому было в MS отрепортить. А серверная компонента используется очень активно, соответственно - баги там исправлены. Можно еще побаловаться с cross company query. Насколько я помню, кэширование работает если в списке компаний для запроса указана только одна компания. Так что можно попробовать указать реальную компанию+dat. Но вообще, эти самые cross company query временами тормозят, так что лекарство может оказаться хуже болезни... | 
|  | |
| За это сообщение автора поблагодарили: sukhanchik (2), alex55 (3). | |
|  31.05.2018, 22:32 | #7 | 
| Участник | 
			
			У QueryRun есть метод setCursor(...). То есть можно объявить курсоры нужных таблиц, настроить параметры этих курсоров и подсунуть их в QueryRun перед запуском выборки queryRun.moveNext(). Не пробовал устанавливать у таких курсоров disableCache, но несколько других свойств таким образом подхватывались.
		 | 
|  | |
| За это сообщение автора поблагодарили: sukhanchik (2). | |
|  01.06.2018, 07:50 | #8 | 
| Участник | 
			
			А если просто кэш почистить? Чтобы аксапта null вернула нужно сильно постараться. Налицо видна переделка таблицы, скорее всего изменения связаны с контейнерным полем, например каким-то образом сменили id, либо меняли тип, а id остался прежним. Очистка кэша на всех клинтах поможет справиться с проблемой. И не надо ничего воротить лишнего.
		 
				__________________ // no comments | 
|  | 
|  01.06.2018, 12:17 | #9 | 
| Участник | 
			
			Коллеги, помог перевод выполнения классов на стороне сервера. Всем огромное спасибо за помощь, особенно Денису ) Вопрос закрыт. | 
|  | 
|  | 
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
| 
 |