12.09.2012, 10:13 | #1 |
Участник
|
View, Union, DateTime
Добрый день. DAX 2009, RU8.
Есть пара View, содержащие поле типа DateTime. Нужно сделать их объединение. Создаю Union-запрос с этими View. Создаю ещё один View и указываю в нем этот запрос. Создаю новое поле для этого View и выбираю в нем то самое поле типа DateTime. Синхронизирую. Падает АОС. Если делать объединение таблиц, а не View - работает. Если добавлять в View-объединение строковые поля - работает (Real, Int, Date и пр. не пробовал). Во вложении небольшой пример. Для падения АОСа достаточно добавить в View CustVendTableView поле createDateTime. У всех так? Нет мыслей как это обойти/ заставить работать? Последний раз редактировалось Dark Light; 12.09.2012 в 10:26. |
|
|
За это сообщение автора поблагодарили: Pustik (1), S.Kuskov (1). |
12.09.2012, 14:05 | #2 |
NavAx
|
Прошу поправить меня, если где-то запутался.
Проведя эксперимент, используя предоставленный проект с вьюхами, выяснил, что при создании CustVendTableView, AOS падает по причине отсутствия поля CREATEDDATETIME1TZID в запросе CustVendTableViewQuery. Как пишется в статье http://msdn.microsoft.com/en-us/libr...(v=ax.50).aspx, для каждого поля UTCdatetime аксапта создает дополнительное поле с кодом fieldTZID, которое недоступно в AOT и в коде. Если строить запросы и вьюхи по вашей схеме используя собственное поле UTCdatetime, то проблем никаких не возникает. Почему-то для системного поля createddatetime этого типа в таблице нет поля createddatetimeTZID (может его и не должно быть?) - отсюда и следует цепочка ошибок (поле отсутствует в запросе, а при создании вьюхи на основе этого запроса система не получает нужного поля createddatetimeTZID). |
|
|
За это сообщение автора поблагодарили: Pustik (2), S.Kuskov (2), Dark Light (2). |
13.09.2012, 08:16 | #3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Pustik (2), Roman777 (1), Dark Light (1). |
13.09.2012, 09:01 | #4 |
Участник
|
Всем спасибо - всё прояснилось. Если брать за основу текущий пример:
Поля VendTableView.createdDateTime1 и CustTableView.createdDateTime1, не смотря на то, что представляют системное поле createDateTime, сами являются пользовательскими. Поэтому должны иметь в БД соотв. TZID-поля, но не имеют. Добавление вручную в БД во View'хи TZID-полей почему-то не решило проблему. В любом случае такой вариант я всё равно бы не выбрал, т.к. 1) Не понятно, что выводить под этим самым TZID-полем (сам выводил один и тот же TZ-код, который видел в другой таблице). 2) Всё разрушится при синхронизации и, соотв., переносе на другое приложение. Представляете, сколько незнающий человек будет искать такую ошибку, которая валит АОС при переносе? Можно использовать следующий способ это обойти: создать недоступные для редактирования пользовательские поля CustTable.createdDateTime1 и VustTable.createdDateTime1 и заполнять из в insert'e. И использовать в View'ах именно их. Но эти костыли я вряд ли стану использовать, а, скорее всего, создам представление вручную в БД, т.к. в самой Аксапте его использовать не планируем. Последний раз редактировалось Dark Light; 13.09.2012 в 09:06. |
|
Теги |
datetime, union, view |
|
|