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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.04.2013, 13:32   #1  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Увеличьте значение макроса currentVersion - присвойте следующую версию. А то у вас отображается старая версия Query, сохраненная методом pack до того, как вы добавили Range.
И по тому полю, что стоит у табьлицы индексом, добавьте Range и сделайте его Hidden. Ну а вообще да, лучше создать Query в АОТ, чтобы наглядно можно было его редактировать.
Не знал, что увеличение значения в макросе даёт такие изменения.
Значение увеличил - появилось нужное мне поле - сотрудник(EmplTaBle.EmplId).

Цитата:
Сообщение от Ace of Database
И по тому полю, что стоит у табьлицы индексом, добавьте Range и сделайте его Hidden.
Вы имеете ввиду в методе initQuery добавить строку

X++:
   qbr = qbds.addRange(fieldnum(VendSpListJour, EmplId));
? Или что?
Старый 02.04.2013, 13:36   #2  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Добавить две строки
X++:
qbr = SysQuery::findOrCreateRange(qbds, fieldnum(VendSpListJour, EmplId));
qbr.status(RangeStatus::Hidden);
Старый 02.04.2013, 13:39   #3  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Добавил эти две строчки - пропало моё поле и снова появилось то, которое стоит индексом на таблице.

Значение в currentversion пробовал увеличивать - не помогло.
Старый 02.04.2013, 13:42   #4  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
А у вас что, поле EmplId есть в двух таблицах? Тогда без разницы, по какой таблице идет фильтрация. Попробуйте поиграться с конструктором Query в АОТ, как я написал.
Старый 02.04.2013, 13:44   #5  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
А у вас что, поле EmplId есть в двух таблицах? Тогда без разницы, по какой таблице идет фильтрация. Попробуйте поиграться с конструктором Query в АОТ, как я написал.
Нет, в одной оно есть.
Хорошо, спасибо, буду делать query.

Вот если оставить так

X++:
 qbr = qbds.addRange(fieldnum(VendSpListJour EmplId));
то работает, но в label пишется не то, что мне нужно, блин ))

Буду искать как их делать, чтобы был нужный запрос. Спасибо вам ещё раз.
Старый 02.04.2013, 13:45   #6  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Сообщение от user_ax Посмотреть сообщение
Добавил эти две строчки - пропало моё поле и снова появилось то, которое стоит индексом на таблице.

Значение в currentversion пробовал увеличивать - не помогло.
А какое поле стоит индексом в таблице? Поведение Query такое, что когда вы прячете в Range одно индексное поле, Аксапта начинает отображать поле из следующего индекса. Надо по следующему полю тоже Range добавлять и делать его hidden. И так до тех пор, пока все индексные поля не кончатся, и Аксапта не перестанет их добавлять на форму.

Последний раз редактировалось Ace of Database; 02.04.2013 в 13:47.
Старый 02.04.2013, 13:47   #7  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
А какое поле стоит индексом в таблице?
InternalSP, код спецификации(гененрируется номерной серией).
Старый 02.04.2013, 13:49   #8  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
По этому полю тоже сделайте Range со статусом Hidden. И так до тех пор, пока все индексные поля не кончатся, и Аксапта не перестанет их добавлять на форму
Старый 02.04.2013, 13:52   #9  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
По этому полю тоже сделайте Range со статусом Hidden. И так до тех пор, пока все индексные поля не кончатся, и Аксапта не перестанет их добавлять на форму
Попробовал сделать так, как вы сказали, в итоге опять пустой Group.

Мне нужно, чтобы в label, где спецификация к договору было Сотрудник.

Старый 02.04.2013, 13:53   #10  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Сейчас код выглядит так

X++:
    qbds = query.addDataSource(tablenum(VendSpListJour));
 //  qbr = qbds.addRange(fieldnum(VendSpListJour, EmplId));
    qbr = SysQuery::findOrCreateRange(qbds, fieldnum(VendSpListJour, InternalSp));
    qbr.status(RangeStatus::Hidden);
    qbr = SysQuery::findOrCreateRange(qbds, fieldnum(VendSpListJour, EmplId));
    //qbr.status(RangeStatus::Hidden);
Старый 02.04.2013, 13:59   #11  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Попробуйте добавить строку
X++:
qbr.label("Сотрудник");
Старый 02.04.2013, 14:00   #12  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Попробуйте добавить строку
X++:
qbr.label("Сотрудник");
Не сработало.
Старый 02.04.2013, 14:08   #13  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
У себя попробовал в дизайнере Query метку у Range поменять - тоже не работает. Значит надо либо так и оставить, либо метку поля VendSpListJour.EmplId в таблице поменять.
Старый 02.04.2013, 14:12   #14  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
У себя попробовал в дизайнере Query метку у Range поменять - тоже не работает. Значит надо либо так и оставить, либо метку поля VendSpListJour.EmplId в таблице поменять.
Не совсем так, она работает, но не на этой форме, а на форме, которую вызывает prompt, там в поле "поле" Пишет Сотрудник.

Так оставить точно не получиться, консультант по головке не погладит.

Так метка ведь верно выводится, если её изменить, измениться только названия поля, а название самое Group останется таким же.
Я вот про это


А то может я неверно выразился
Старый 02.04.2013, 14:47   #15  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Я так понял, что эта метка - название таблицы, которая добавлена в источник.

Хотел добавить в источники ещё и таблицу EmplTable, чтобы отображалось нужное название, но выдаёт ошибку "недопустимый диапазон"(

X++:
 qbds = query.addDataSource(tablenum(EmplTable));
    qbds = query.addDataSource(tablenum(VendSpListJour));
    qbr = SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, EmplId));
    qbr.status(RangeStatus::Hidden);
        qbr = SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable,AltNum));
    qbr.status(RangeStatus::Hidden);
        qbr = SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, DEL_Alias));
    qbr.status(RangeStatus::Hidden);
        qbr = SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, PartyId));
    qbr.status(RangeStatus::Hidden);
    qbr = qbds.addRange(fieldnum(VendSpListJour, EmplId));

    queryRun = new QueryRun(query);
Старый 02.04.2013, 15:04   #16  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Мне наш ещё один программист подсказал почти такой же способ, как и вы, но с одним "но": создать 2 объекта datasource для двух таблиц EmplTable и VendSpListJour и в источник EmplTable привязать к VendSpListJour, как дочерний, после активировать их связи и тогда получается то, что мне необходимо В любом случае спасибку нажал вам за то, что потратили своё время и помогли мне.
Старый 02.04.2013, 18:31   #17  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Если когда-нибудь будете делать через Query в АОТ, то метод paсk должен выглядеть так:
X++:
public container pack()
{
    return [#CurrentVersion, #CurrentList, (queryRun) ? queryRun.pack() : conNull()];
}
а метод unpack так:
X++:
public boolean unpack(container packedClass)
{
    version     version = runbase::getVersion(packedClass);
    container   queryCon;

    switch (version)
    {
        case #CurrentVersion:
            [version,#CurrentList,queryCon] = packedClass;
            if (sysQuery::isPackedOk(queryCon))
                queryRun = new queryRun(queryCon);
            else
                this.initQuery();
            break;
        default:
            return false;
    }

    return true;
}
Старый 02.04.2013, 18:36   #18  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Еще для себя напишу, чтобы не забыть
На моем примере на картинке в начале этой темы я показал форму, которая построена на Query, использующую таблицу InventBatch. Это необычная таблица, привязанная сразу к двум таблицам в запросе: к таблице InventDim по полю InventBatchId и к таблице InventTable по полю ItemId.

Чтобы запрос с этой таблицей работал корректно, я источник данных для нее сделал дочерним к InventDim через дизайнер Query в АОТ, а в методе initQuery() моего класса программно добавил связку с источником данных InventTable
X++:
void initQuery()
{
    Query query = new Query(queryStr(zInventAdvanceProdDateReport));
    QueryBuildDatasource    qbds;
    QueryBuildRange         qbr;
    ;

    qbds = query.dataSourceTable(tableNum(InventBatch));
    qbr = sysQuery::findOrCreateRange(qbds, fieldNum(InventBatch, ItemId));
    qbr.value("((ItemId == InventTable_1.ItemId))");
    qbr.status(RangeStatus::Hidden);

    queryRun = new QueryRun(query);
}

Последний раз редактировалось Ace of Database; 02.04.2013 в 18:40.
Старый 29.05.2013, 18:14   #19  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Подниму этот вопрос.

Мне нужно производить определённые действия(проставлять checkbox-ы) только для тех строк в таблице, в которых поле сотрудник равно тому, что я выбрал в динамическом фильтре. В туториалах нет такого. Подскажите, как мне сравнивать со значением из дин.фильтра моё значение?

Заранее спасибо за ответы.
Старый 29.05.2013, 18:26   #20  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Global::inRange(), хотя если есть "динамический фильтр", то, наверно, есть и запрос, и лучше использовать запрос, а не пытаться его расковырять и анализировать "вручную".
Теги
runbasereport, диалог, динамическая форма, периодическая операция, программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Универсальный изменятель значений полей wojzeh DAX: Программирование 17 26.09.2013 17:47
Последовательная замена множества уникальных значений на другие без возникновения дубликатов gl00mie DAX: Программирование 23 24.11.2010 15:05
Периодическая операция Приемка. Ошибка в спецификации. Объясните RSJustInTime DAX: Функционал 6 02.02.2006 14:02
Сводное планирование - изменения&изменения мин. Alexm DAX: Прочие вопросы 1 05.04.2005 10:43
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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