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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.05.2007, 08:13   #1  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Поиск в Grid по полю DataMethod
В форме "Строки", которая вызывается из формы "* приказы" нужно сделать поиск по полю "Фамилия Имя Отчество". Поле заполняется через метод emplName таблицы RHRMOrderTrans. Т.е. стандартные поиск и фильтрация по нему не работают. В ТЗ написали, чтобы поиск был через отдельный EditText форме. (Что-то типа поиска по подразделению в штатном расписании) Но как его связать с полем "ФИО"?
Старый 08.05.2007, 08:51   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
При изменении добавлять в RHRMOrderTrans_ds.query exist join на EmplTable.

Если надо снять фильтр, то восстнавливать изначальный query предварительно запакованный (правда при попытке паковки чего-то с дайналинками вываливается ошибка).

Если вы точно знаете что в EmplID всегда есть значение, то второй пункт пропустить.
Старый 08.05.2007, 09:44   #3  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Что такое RHRMOrderTrans_ds.query ?
Старый 08.05.2007, 10:06   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от belugin Посмотреть сообщение
Если надо снять фильтр, то восстнавливать изначальный query предварительно запакованный (правда при попытке паковки чего-то с дайналинками вываливается ошибка).
Цитата:
public container pack( [boolean _doCheck=TRUE] )
Arguments
doCheck : If this argument is TRUE, an error is flagged when a datasource in the query has references to an outside cursor (i.e. a dynalink was added to the datasource). The default value is TRUE (i.e. enforce the constraint).
Надо просто передавать FALSE при упаковке

Кроме того, надо изменять запрос в QueryRun - тогда сброс фильтра будет стандартный
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: belugin (5).
Старый 08.05.2007, 10:07   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
xxx_ds - это FormDataSource на форме. query - это фильтр в этом источнике данных. Вернее query() т.к. это свойство.

то есть если вы хотите обратиться к \Forms\RHRMOrderTrans\Data Sources\RHRMOrderTrans из программы внутри этой вформы надо вызывать
RHRMOrderTrans_ds - это объект, представляющий источник данных.
Старый 08.05.2007, 10:08   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Кроме того, надо изменять запрос в QueryRun - тогда сброс фильтра будет стандартный
только при этом надо обеспечить чтобы значение в новом поле на форме отражало все изменения пользхователя в пользовательском запросе.
Старый 08.05.2007, 10:19   #7  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Да мне не нужны изменения мне бы только голимый поиск по этому полю... Понимаете, в чем проблема, они пишут, что у них в приказе может быть до 1500 человек и искать им в этом списке в лом (а станартного поиска по этому полю нету). По таб.номеру искать они скорее всего не хотят. Вот и все. Никаких изменений. Или изменения в выводе грида? Про какие изменения говорим-то?
Старый 08.05.2007, 10:24   #8  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
В data source нет поля emplName, кстати... Только emplid. А emplName подтягивается из EmplTable. Поэтому мне нет смысла обращаться к этому датасорсу.
Вижу только как такой вариант:
Пользователь вводит фамилию, я из таблицы EmplTable выискиваю его Таб№ и потом по нему делаю фильтр на датасоурс. Это же через Ж... !!!
Старый 08.05.2007, 10:30   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от belugin Посмотреть сообщение
только при этом надо обеспечить чтобы значение в новом поле на форме отражало все изменения пользхователя в пользовательском запросе.
Конечно.
Только в стандарте этого не делают (взять, хотя бы, складские журналы - фильтр разнесенным жунралам)
__________________
Axapta v.3.0 sp5 kr2
Старый 08.05.2007, 12:15   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Tiruvileijadal' Посмотреть сообщение
Пользователь вводит фамилию, я из таблицы EmplTable выискиваю его Таб№ и потом по нему делаю фильтр на датасоурс. Это же через Ж... !!!
Предлагается при изменении поля-фильтра добавить динамически другой датаурс (причем QueryBuildDataSource а не FormDataSource), связанный с первым.
Старый 08.05.2007, 13:20   #11  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Объясните, плз, что означает сей код:
X++:
for (i = 1 ; i <= RHRMStaffList_DS.query().dataSourceCount() ; i++)
    {
        switch (RHRMStaffList_DS.query().dataSourceNo(i).table())
        {
            case tableNum(RHRMStaffList):
                dsStaff = i;
                break;
            case tableNum(PersonTitleTable):
                dsTitle = i;
                break;
            case tableNum(RPayHRMOrganization):
                dsOrg = i;
                break;
        }
    }
Старый 08.05.2007, 13:24   #12  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
dsStaff, dsTitle, dsOrg переменные типа int.
Старый 08.05.2007, 14:16   #13  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
В этом коде перебираются все источники данных этого запроса и в зависимости от того какая это таблица int переменным присваевается значения, скорей всего для того что бы в дальнейшем обращатся к источнику данных по номеру
Старый 10.05.2007, 09:27   #14  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Вопрос номер 1: как в дебагере посмотреть содержимое таблицы. А то я только одну запись вижу и толку мне от нее? Или хотя бы сколько в ней записей на данный момент?
Вопрос номер 2: как бегать по джоиной таблице? Пыталась:
X++:
while (emplTable.RecId)
                  {
                       filter_str += ','+emplTable.emplId;
                       next emplTable;
                  }
отладчик ругается на next. если его не делать - зацикливание.
Старый 10.05.2007, 09:39   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
1. В отладчике - никак.
2. Бегайте по первому (ведущему) датасорсу - остальные синхронизируются автоматом
__________________
Axapta v.3.0 sp5 kr2
Старый 10.05.2007, 10:02   #16  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Объясните, плиз, что должно происходить (и происходит ли вообще что-нибудь) в этом коде:
X++:
s2 = FindEdit.valueStr();
emplTable_ds.filter(fieldnum(EmplTable, lastName), s2);
et = emplTable_ds.getFirst(1);
где s2 - текст
et - типа EmplTable.
Старый 10.05.2007, 11:36   #17  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Если emplTable_ds - подчиненный датасорс, то при вызове emplTable_ds.filter() ничего не произойдет. Для фильтрации по этому полю надо дополнительно вызвать [Имя главного датасорса]_ds.research().

Для строки
X++:
et = emplTable_ds.getFirst(1);
, если фильтрация выполнится, будет возвращена пустая табличная переменная, так как нет выделенных пользователем строк
__________________
Axapta v.3.0 sp5 kr2
Старый 10.05.2007, 13:44   #18  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Тогда скажите, как сделать такой алгоритм.
У датасорса RHRMOrderTrans есть InnerJoin EmplTable (он тоже датасоурс). Мне нужно сделать выборку EmplId из таблицы EmplTable по введенной в строке поиска фамилии (т.е. фильтр по полю LastName) и потом этими выбранными EmplId отфильтровать RHRMOrderTrans_ds. Как это сделать через датасоурсы?
Я пока сделала через обращение к самой таблице EmplTable, в которой по введенной фамилии выбираются подходящие EmplId. Из них делаю стринговую переменную (перечеслением через ',') и потом использую эту переменную как фильтр для RHRMOrderTrans_ds. Но если какой-то умный пользватель введет только первую букву, то будет куча фамилий, соответственно куча таб.номеров и стринг обрежется (у него же есть ограничение по длинне 255 символов?), в общем не все таб.номера влезут и могут некоторые фамилии потеряться.
Старый 10.05.2007, 13:51   #19  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
почему вы не слушаете советы?
Вам же сказали, сделайте exists join EmplTable в случае, если введен фильтр, и накладывайте фильтр на поле этого нового источника на соответствующее поле (ФИО)
Старый 10.05.2007, 14:28   #20  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
О, по одной простой причине: сделать нужно вчера (как всегда), а я ничего не понимаю из написанного, а разбираться времени не было. Сейчас появилось, попробую разобраться.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поиск в таблице по текстовому полю madproger DAX: Программирование 2 14.11.2006 15:21
По полю InventSizeId в формах не работает поиск и сортировка? Hidden DAX: Функционал 4 04.04.2006 17:24
Поиск по полю временной таблицы Swetik DAX: Программирование 2 10.12.2003 11:35
Как в grid подсчитать сумму по полю и показать ее (с учетом фильтра)? edd DAX: Программирование 5 06.02.2003 20:10
Поиск в Grid по полю из другой таблицы Dron AKA andy DAX: Программирование 9 01.08.2002 16:36
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.