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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.11.2010, 10:41   #1  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Какое-то странное у вас требование к отчёту. Неужели нужно показыват именно текст всплывающей подсказки? Сомневаюсь, что требование звучит именно так. Скорее необходимо показывать информацию, которая именно на данный момент совпадает с текстом подсказки. Представьте что какие-то модификации или переход на следующую версию изменят алгоритм отображения подсказки. Как должен вести себя ваш отчёт?
Прошу прощения, но требование к отчету нормальные. А подход к его формированию следующий: чем меньше кода написано. тем лучше. Если можно использовать уже имеющееся в системе, это надо делать. А пример с номенклатуром, может быть не совсем удачным. Посмотрите на подсказку на форме проводок номенклатурного справочника, когда курсор подводите с полю в столбце Код. Хотя надо признать, что этот метод (toolTipRecord() ) хорош, но в данном отчете не пригодился. Клиентам как всегда захотелось увидеть больше....
__________________
Александр
Старый 24.11.2010, 12:19   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от tolstjak Посмотреть сообщение
А подход к его формированию следующий: чем меньше кода написано. тем лучше.
Мне кажется, это не совсем тот случай, когда надо экономить на коде. Ведь текст toolTipRecord может быть легко воспроизведен с помощью несложного шаблона для функции strFmt:
X++:
{
    InventTable inventTable;
    ;
    select firstonly inventTable;
    info( inventTable.toolTipRecord());
    info( strFmt('Номенклатура: %1, %2', inventTable.ItemId, inventTable.ItemName));
}
Т.е. для включения в отчет эквивалентной информации имеем два обращения к табличной переменной (inventTable.ItemId, inventTable.ItemName) вместо одного (inventTable.toolTipRecord). Не думаю, что это стоить считать лишним кодом. Зато два поля вы можете поместить в разные поля отчета, сделав его гораздо гибче, чем всё в одном "флаконе", к тому же с избыточным словом "Номенклатура"...
За это сообщение автора поблагодарили: Poleax (1).
Старый 24.11.2010, 16:44   #3  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от Gustav Посмотреть сообщение
Мне кажется, это не совсем тот случай, когда надо экономить на коде. ..... Зато два поля вы можете поместить в разные поля отчета, сделав его гораздо гибче, чем всё в одном "флаконе", к тому же с избыточным словом "Номенклатура"...
Возможно Вы правы, но взгляните на подсказку на форме проводок номенклатурного справочника, там такого кода без использования tool..... будет значительно больше. И разумеется я никому не навязываю свое мнение.
__________________
Александр
За это сообщение автора поблагодарили: Gustav (2).
Старый 24.11.2010, 20:11   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от tolstjak Посмотреть сообщение
Посмотрите на подсказку на форме проводок номенклатурного справочника, когда курсор подводите с полю в столбце Код.
Цитата:
Сообщение от tolstjak Посмотреть сообщение
...там такого кода без использования tool..... будет значительно больше
Взглянул. Интересно, спасибо. Не понял, как делается - в super toolTip'а не пустили, а также как этим можно просто воспользоваться, например, в отчете? Не из формы же читать всякий раз... Хотя чисто технически возможно:
X++:
static void Job_ToolTipViaFormControl(Args _args)
{
    Args            args;
    FormRun         formRun;
    InventTrans     inventTrans;
    ;

    inventTrans.clear();

    // последовательно раскомментируем записи по одной и позапускаем
    select firstonly inventTrans where inventTrans.TransType == InventTransType::Purch;
    //select firstonly inventTrans where inventTrans.TransType == InventTransType::InventTransaction;
    //select firstonly inventTrans where inventTrans.TransType == InventTransType::InventTransfer;

    args = new Args(formstr(InventTrans));
    args.record(inventTrans);

    formRun = classFactory.formRunClass(args);
    formRun.init();
    //formRun.design().visible(false);  // раскомментируй для невидимости формы
    formRun.run();

    box::info(formRun.design().controlName('InventTrans_TransRefId').toolTip());

    formRun.wait();     // ЗАкомментируй для невидимости формы
    //formRun.close();  // раскомментируй для невидимости формы
}
Попробовал исполнить по аналогии - что-то получилось, привожу ниже. В switch прописал только те типы движения, которые встречаются у нас в системе. При желании список легко расширяется.
X++:
static void Job_ToolTipImitation(Args _args)
{
    // имитация текста всплывающей подсказки на поле Код в форме складских проводок

    InventTrans inventTrans;
    Common      common;
    str         ourToolTipText;
    DictTable   dictTable;
    ;

    // последовательно раскомментируем записи по одной и позапускаем
    select firstonly inventTrans where inventTrans.TransType == InventTransType::Purch;
    //select firstonly inventTrans where inventTrans.TransType == InventTransType::InventTransaction;
    //select firstonly inventTrans where inventTrans.TransType == InventTransType::InventTransfer;

    switch (inventTrans.TransType)
    {
        case InventTransType::Purch : // Закупка
            common = PurchTable::find(inventTrans.TransRefId);
            break;

        case InventTransType::InventTransaction : // Проводка
        case InventTransType::InventTransfer    : // Перенос
            common = InventJournalTable::find(inventTrans.TransRefId);
            break;

        default:
            box::stop('Непредусмотренный случай.');
            return;
    }

    // создадим через strFmt нашу собственную подсказку
    dictTable = new DictTable(common.TableId);
    ourToolTipText = strFmt('%1: %2, %3',
                        new DictField(common.TableId, dictTable.titleField1()).label(), // Закупка   // Журнал
                        common.(dictTable.titleField1()),                               // PurchId   // JournalId
                        common.(dictTable.titleField2()));                              // PurchName // Description

    // для сравнения отобразим обе версии подсказки друг под другом
    box::info(strFmt('%1\n%2', common.toolTipRecord(),  // фирменная
                               ourToolTipText ));       // самопальная
В общем, кода - не смертельное количество. Хотя и не 2 строки
Старый 24.11.2010, 20:46   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Gustav Посмотреть сообщение
Взглянул. Интересно, спасибо. Не понял, как делается - в super toolTip'а не пустили, а также как этим можно просто воспользоваться, например, в отчете? Не из формы же читать всякий раз... Хотя чисто технически возможно:
Не надо так сложно
Есть метод ToolTipField()
X++:
...
select firstonly inventTrans where inventTrans.TransType == InventTransType::Purch;
info(inventTrans.ToolTipField(fieldNum(InventTrans, TransRefId)));
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Gustav (6).
Старый 24.11.2010, 21:06   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от AndyD Посмотреть сообщение
Не надо так сложно
Есть метод ToolTipField()
X++:
...
select firstonly inventTrans where inventTrans.TransType == InventTransType::Purch;
info(inventTrans.ToolTipField(fieldNum(InventTrans, TransRefId)));
Да уж...И в этом случае tolstjak абсолютно прав, и проще разобрать на две колонки текст столь легко полученного toolTip'а, чем сначала определять, из какой же таблицы надо получить 2 поля...
В общем, I'm impressed!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Планирование номенклатуры с типом Основное средство AlexeyBP DAX: Функционал 19 29.01.2009 07:42
класс InventSumDateValueReportDim Физические запасы? Poleax DAX: Программирование 12 01.07.2008 15:27
Проблема с передачей контролов из формы в класс matew DAX: Программирование 0 28.04.2008 17:37
Не могу изменить название номенклатуры slava09 DAX: Функционал 14 21.03.2007 18:01
Конфигуратор продуции - создание новой номенклатуры против создания новой конфигураци OliaM DAX: Функционал 6 15.04.2005 20:11

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

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

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