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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.03.2004, 17:18   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
? Длина Range
Какое есть ограничение на длину Range (или всего Query)?

У меня сформирован список значений и надо сделать Query выводящий записи только с этими значениями. Имеется в виду

QueryBuildDataSource.addRange(fieldnum(...)).value("1,2,3,4,...")

Т.е. много значений Value (до нескольких сотен)

Допустимо делать несколько Query по очереди.

На какой длине (и длине чего - Value или Query) следует остановиться.

PS:
Про то, что временные таблицы - лучше, я в курсе. Можно ли это реализовать БЕЗ временной таблицы.
Старый 02.03.2004, 17:52   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
вроде 250 символов.
Старый 02.03.2004, 17:59   #3  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
побольше
MSSQL, Ax 2.5
Менее 1000 элементов - sql загибается
__________________
С уважением, Игорь Ласийчук.
Старый 02.03.2004, 18:16   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Проблема в том, что собственно сам Range().Value() глотает значения без ограничений, но вот на этапе формирования выражения SQL у него получается примерно следующее:

(((((((((((((((((((Field=1)
OR Field=2)
OR Field=3)
OR Field=4)
...

И при некоторой длине выражения получается синтаксическая ошибка об отсутствии закрывающей скобки.

Мне непонятно в какой момент происходит это "обрезание" - в момент подстановки Range().Value() или в момент формирования окончательного выражения SELECT.

И еще, может быть можно как-то по другому ограничить выборку (не считая временных таблиц)?

Была идея по возможности задавать диапазоны (1...5,10,15...20), но непонятно, как можно отсортировать контейнер или map в которых хранится список значений.
Старый 02.03.2004, 18:24   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
не знаю. я бы таки ориентировался на тип Range, длина которого 250 символов
не уверен, что другие варианты будут совместимы.

Владимир Максимов, я правильно понимаю, что вы хотите используя QUERY отобрать записи из СПИСКА значений? И при этом вы НЕ используете временные таблицы? может вы код сюда поместите? Очень похоже на 1Совскую терминологию.

Скорее всего вы используете не тот инструмент не в то место.
Старый 02.03.2004, 18:38   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Правильно поняли постановку задачи. Речь идет о формировании отчета. Очень дурацкое ТЗ к этому отчету. Отчет формируется в текстовый файл.

В отчет выводятся все строки заказов и отображается количество из связанных предварительных заказов (если есть). За период, разумеется.

Но кроме этого надо отобразить те строки предварительных заказов, которые не попали в первую выборку. При этом учитываются только те предварительные заказы, которые упоминались в первой выборке.

Если первая выборка - это довольно простой Query, то вот со второй выборкой проблемы

Проблема еще в том, что связь между предварительными и основными заказами осуществляется через дополнительное поле (не из стандартной конфигурации) в таблице SalesLine

Пока я поступаю так: в процессе сканирования основного Query запоминаю в Map все использованные коды предварительных заказав и все использованные коды строк этих предварительных заказов. И потом цикл по Map с модификацией Range исходного Query.

Но это слишком долго получается. Вот и пытаюсь как-то ускорить это безобразие.
Старый 02.03.2004, 18:43   #7  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Ну отсортировать то не проблемма, а вот надо ли?
А что за источник этих значений?
Старый 02.03.2004, 18:52   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
SalesTable.Salesid - отобрать все записи с заданными значениями (список)
SalesLine.InventTransId - исключая записи с заданными значениями (список)
Старый 02.03.2004, 19:00   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
понятно.
а почему от временных таблиц отказались?

с временной то таблицей намного легче было бы в трехуровневой среде нормальное взаимодействие организовать. ИМХО.
Старый 02.03.2004, 19:09   #10  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Или попробывать применить NotExistJoin...
Старый 02.03.2004, 19:12   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Да не отказывался я. Просто не привык еще за собой "мусор" оставлять. Что в Axapta постоянно происходит. А временную таблицу я воспринимаю именно как мусор, который должен быть удален по завершении отчета.

Т.е. я понимаю, что ее физически все-равно не будет в базе данных, но пока еще это для меня непривычно - раз объект есть в АОТ, то я воспринимаю этот объект как постоянный.

В АОТ и так уже достаточно реального мусора (т.е. кто-то что-то тестировал, а потом за собой не убрал). Вот и не хочется плодить лишнего.
Старый 02.03.2004, 19:14   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Или попробывать применить NotExistJoin
В данном случае это не пройдет. Глюк построителя Query в Axapta (там несколько таблиц связанных по Join). Он его просто проигнорирует. Пробовал уже.
Старый 02.03.2004, 19:27   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Владимир Максимов
А временную таблицу я воспринимаю именно как мусор, который должен быть удален по завершении отчета.
Хм... ну дык, Аксапта и удаляет. сама и автоматически. И данные видны только в контексте переменной.

Может я неправ, но может вам стоит почитать доку?
Старый 02.03.2004, 19:41   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Физическую логику работы я прекрасно понимаю.
Проблема чисто психологическая - раз что-то есть в АОТ, то это что-то постоянный объект.

Кстати, временная таблица в данном случае нормально соединится по Join с готовым Query? Речь идет о 3-х звенке. Axapata 2.5 (Вроде были какие-то замечание по поводу глюков)
Старый 02.03.2004, 20:00   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10

соединится. прозрачно для программиста.

временная таблица живет в свопе там, где ее создали.
до sql она не доходит. sql возвращает результаты без учета этой таблицы, затем Аксапта сама своими средствами делает join.

прозрачность заключается втом, что программисту этого знать необязательно

я бы не назвал это нормальным. прозрачно.

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

Или сделать нормальный двухпроходной процесс. Сначала заполняете временную таблицу, затем выводите ее в отчете.
Старый 02.03.2004, 20:07   #16  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Спасибо. Завтра буду экспериментировать.
Старый 03.03.2004, 18:38   #17  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Результат экспериментов:

Временная таблица не подошла по той причине, что ее можно подключать по INNER JOIN только если эта временная таблица является главной (первый DataSource). А у меня уже готовый Query и перекачивать его весь ПОД эту временную таблицу слишком утомительно.

Сделал постоянную таблицу в базе, используя ее как временную. Время выполнения сократилось в разы (приблизительно в 5 раз)
Старый 04.03.2004, 18:18   #18  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано Владимир Максимов
Проблема чисто психологическая - раз что-то есть в АОТ, то это что-то постоянный объект.
Необязательно создавать элемент AOT под временную таблицу. Если структура временной таблицы повторяет структуру одной из постоянных таблиц AOT, то можно создать переменную-временную таблицу при помощи метода setTmp()
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 05.03.2004, 08:57   #19  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Цитата:
можно создать переменную-временную таблицу при помощи метода setTmp()
Тогда психологическая проблема удваивается вроде таблица и вроде постоянная... а данные пропадают.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
HRM,склонение ФИО и все все все OmenSore DAX: Функционал 22 09.02.2009 17:08
axaptapedia: Packing date range values in queries Blog bot DAX Blogs 1 09.11.2007 13:10
axaptafreak: Label for Query Range cannot be modified (still) Blog bot DAX Blogs 2 25.07.2007 10:09
Работа с Excel через COM и ошибка 0x800A03EC (Range.AutoFilter) gl00mie DAX: Программирование 15 30.03.2007 18:37

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

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

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