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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.04.2011, 10:41   #21  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от pitersky Посмотреть сообщение
Одно дело, когда мы запускаем обработку по записям с объективным уровнем общности (одинаковые значения полей, на которые можно наложить фильтр), и совсем другое - если пользователь хочет обработать произвольный набор записей, ничем не объединённый (кроме его доброй воли).
да, но исходная тема совсем о другом
напомню

Цитата:
Сообщение от Geo Посмотреть сообщение
Потребовалось запускать этот метод для обработки записей, выводящихся на гриде, то есть с учетом установленных фильтров.
Цитата:
Сообщение от pitersky Посмотреть сообщение
И кстати говоря - не стал бы я так уж хаять механизм селектов. Достаточно много есть задач, где нужна жёсткая выборка с простейшим суммированием, типа
X++:
while select sum(Qty)
from MyTable
group by ItemId
{...}
Разворачивать здесь Query ИМХО = стрелять из пушки по воробьям. Т.е. можно, но зачем?
А я бы стал хаять даже для таких "простейших" случаев.
хотя бы потому что в myTable может быть много миллионов записей.

попытка сделать одновременно два алгоритма - один для малого количества записей, другой для большого количества записей - приведет к неоправданному усложнению. и к принципиально спорной задаче - какое количество является малым.

еще раз посмотрите на исследование axaptapedia: Tutorial Form MultiSelectCheckBox

====================
и еще раз напомню, что первоначальный вопрос был о записях, которые попали в грид, а не о записях выбранных пользователем.
__________________
полезное на axForum, github, vk, coub.
Старый 19.04.2011, 10:51   #22  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Сообщение от mazzy Посмотреть сообщение
надо отметить, что в Аксапте query и select-написанный-в-коде никогда не пересекаются. и никогда друг в друга не преобразуются. это два совершенно разных инструмента. Query никогда не преобразуется в select, а select никогда не преобразуется в Query.
Да ну?

QueryRun.query().dataSourceNo(1).toString();

С Уважением,
Георгий
Старый 19.04.2011, 11:06   #23  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от mazzy Посмотреть сообщение
А я бы стал хаять даже для таких "простейших" случаев.
хотя бы потому что в myTable может быть много миллионов записей.
попытка сделать одновременно два алгоритма - один для малого количества записей, другой для большого количества записей - приведет к неоправданному усложнению. и к принципиально спорной задаче - какое количество является малым.
а зачем делать два алгоритма??? у нас есть, условно говоря, газонокосилка и электробритва. В зависимости от ситуации пользуемся чем-то одним. Но это же не значит, что надо от электробритвы отказываться

Цитата:
Сообщение от mazzy Посмотреть сообщение
и еще раз напомню, что первоначальный вопрос был о записях, которые попали в грид, а не о записях выбранных пользователем.
Изначальный вопрос состоял в обработке набора записей в таблице, без уточнения способа отбора. Я вполне могу себе представить ситуацию, когда пользователь хочет обработать две-три отдельные строки, а не всё, что относится к фильтрованной выборке. Если принято решение, что такого быть не должно - тогда да, нам грид не нужен, достаточно серверной Query
__________________
С уважением,
Вячеслав

Последний раз редактировалось pitersky; 19.04.2011 в 11:09.
Старый 19.04.2011, 11:08   #24  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от George Nordic Посмотреть сообщение
Да ну?

QueryRun.query().dataSourceNo(1).toString();

С Уважением,
Георгий
Я так подозреваю, что любой синтаксис в Аксапте (хоть селект, хоть query) всё равно преобразуется в язык SQL-запроса при передаче в обработку на сервере.
__________________
С уважением,
Вячеслав
Старый 19.04.2011, 11:11   #25  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от George Nordic Посмотреть сообщение
Да ну?

QueryRun.query().dataSourceNo(1).toString();

С Уважением,
Георгий
ну да.
to string - это строка, а не "select в коде".
с этим toString ты ничего не сможешь сделать. только вывести и посмотреть на него. даже в runbuf не засунешь.

Цитата:
Сообщение от pitersky Посмотреть сообщение
а зачем делать два алгоритма??? у нас есть, условно говоря, газонокосилка и электробритва. В зависимости от ситуации пользуемся чем-то одним. Но это же не значит, что надо прям сразу от электробритвы отказываться
как-то идет плавный дрейф в понятиях.
выборка -> грид -> хаять -> отказываться.

я и не говорил про "отказываться".
я говорил про "хаять".


Изначальный вопрос состоял в обработке набора записей в таблице, без уточнения способа отбора. Я вполне могу себе представить ситуацию, когда пользователь хочет обработать две-три отдельные строки, а не всё, что относится к фильтрованной выборке. Если принято решение, что такого быть не должно - тогда да, нам грид не нужен, достаточно серверной Query[/QUOTE]
__________________
полезное на axForum, github, vk, coub.
Старый 19.04.2011, 11:35   #26  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Geo Посмотреть сообщение
Вот это я изначально и хотел получить - результаты, которые SQL-сервер отдает в ответ на Query. Не по одной записи (как делает QueryRun.get()), а сразу всё, чтобы передать в метод и там обработать. Вижу по обсуждению, что такого в АХ не предусмотрено.
Возможно, я ошибась, но, как мне кажется, Вы исходите из предположения, что на клиенте уже находятся все записи, удовлетворяющие условиям отбора, указанным в Query. На самом деле это не так. Axapta вообще в крайне редких случаях копирует на клиента все записи выборки. Как правило, они копируются исключительно "по требованию".

Как следствие, передать в качестве параметра "все записи Grid", как правило, невозможно (есть исключения, но это отдельный разговор). Их просто физически нет. Нечего передавать-то. Точнее, есть, конечно, но только те, которые были просмотрены "глазами".

Соответсвенно, и стратегия обработки данных строится исходя из этого правила. Обработка по одной записи за раз, поскольку на клиенте просто нет всех записей (опять же, есть исключения, но это отдельный разговор ).

А с Query, использующимися для форм вообще надо быть крайне и предельно осторожными, поскольку там образуется самая причудливая смесь фильтров в которую свою лепту вносит еще и сам пользователь. Как следствие, есть риск изменить не те записи или не изменить те, что нужно.

Поэтому, Вам нужно "знать" некий базовый Query, который не зависит от действий пользователя. И именно его и передавать как параметр в метод обработки. При этом "держа в уме", что то, что Вы передаете - не есть собственно данные. Это всего-лишь условия, по которым Вам еще только предстоит выбрать данные.
За это сообщение автора поблагодарили: Geo (1).
Старый 20.04.2011, 18:02   #27  
Geo is offline
Geo
Участник
Аватар для Geo
 
258 / 47 (2) +++
Регистрация: 04.04.2008
Цитата:
Сообщение от mazzy Посмотреть сообщение
Как это не предусмотрено?! *впал в ступор*

queryRun - это и есть результаты, которые SQL-сервер отдает в ответ на Query.
Ну как? Вы же писали:
Цитата:
Сообщение от mazzy Посмотреть сообщение
надо отметить, что в Аксапте query и select-написанный-в-коде никогда не пересекаются. и никогда друг в друга не преобразуются. это два совершенно разных инструмента. Query никогда не преобразуется в select, а select никогда не преобразуется в Query.
По-моему, это и означает, что взаимопреобразования QueryRun и Select в АХ не предусмотрено.
Старый 20.04.2011, 18:12   #28  
Geo is offline
Geo
Участник
Аватар для Geo
 
258 / 47 (2) +++
Регистрация: 04.04.2008
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Возможно, я ошибась, но, как мне кажется, Вы исходите из предположения, что на клиенте уже находятся все записи, удовлетворяющие условиям отбора, указанным в Query. На самом деле это не так. Axapta вообще в крайне редких случаях копирует на клиента все записи выборки. Как правило, они копируются исключительно "по требованию".
Да мне, в общем-то, сами записи грида не нужны. Я, изначально, хотел получить значения фильтров в таком виде, чтобы можно было сделать с ними Select.
Однако спасибо за уточнение, что этот Select нужно делать уже на сервере. По умолчанию с кнопки формы (как я сначала делал) он бы запустился на клиенте, как я понимаю.


Цитата:
Поэтому, Вам нужно "знать" некий базовый Query, который не зависит от действий пользователя. И именно его и передавать как параметр в метод обработки. При этом "держа в уме", что то, что Вы передаете - не есть собственно данные. Это всего-лишь условия, по которым Вам еще только предстоит выбрать данные.
Спасибо. Я об этом и думаю в последнее время: определить типичные важные поля, по которым может строиться фильтр, вытаскивать их условия из Query (если они там есть) и вручную строить Select с этими условиями, не забывая об ограниченности синтаксиса select'а по сравнению с query value.
Старый 21.04.2011, 10:53   #29  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А почему именно select хотите использовать?
Запаковывайте QueryRun().Query(). Передавайте на сервер, там создавайте Query и работайте уже с ним. Если надо, добавляйте еще датасорсы и фильтры.
А дальше создавайте QueryRun - и получайте результаты
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Geo (1).
Старый 21.04.2011, 21:52   #30  
Geo is offline
Geo
Участник
Аватар для Geo
 
258 / 47 (2) +++
Регистрация: 04.04.2008
Цитата:
Сообщение от AndyD Посмотреть сообщение
А почему именно select хотите использовать?
Запаковывайте QueryRun().Query(). Передавайте на сервер, там создавайте Query и работайте уже с ним. Если надо, добавляйте еще датасорсы и фильтры.
А дальше создавайте QueryRun - и получайте результаты
Спасибо, подумаю.
Теги
grid, query, датасорс (datasource), табличный курсор, фильтр

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
jinx: Dynamics AX – Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05
Query на Datasource в LookUp-форме. dynamax DAX: Программирование 26 09.10.2009 15:58
Как удалить DataSource из Query??? Maxim Gorbunov DAX: Программирование 17 01.09.2008 14:00
axcoder: Tabax 0.2.14: View query of the active datasource Blog bot DAX Blogs 2 02.02.2007 12:10
How do I delete a datasource from a query ? (by stelsig) Maxim Gorbunov DAX in English 0 22.03.2006 12:21
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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