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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2007, 09:36   #1  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Фильтр на DataSource из clipBoard
В копилку "бесполезного"

Задача: множество отчетов, данные выкидываются в excel. Соответственно, иногда необходимо найти запись в справочнике Аксапты, по коду. Копируем ячейку с кодом, лезем в аксапту, открываем форму справочника, фильтруемся...
Вот, что бы убрать это "фильтруемся", и предлагаю следующий код (в нем ничего сложного):
X++:
void buf2range(FormDataSource     _formDS)
{
    TextBuffer          textBuffer = new TextBuffer();
    DictTable           dictTable;
    SysDictField        dictField;
    Common              common;
    QueryBuildRange     queryBuildRange;
    ;
    if (_formDS     &&
        WinAPI::isControlButtonDown())      // можно убрать "только при нажатом Ctrl".
    {
        textBuffer.fromClipboard();

        dictTable       = new DictTable(_formDS.cursor().TableId);

        if (dictTable.isMap()   ||
            dictTable.isView()  ||
          ! dictTable.primaryKeyField())
            break;

        dictField       = new SysDictField(dictTable.id(),
                                           dictTable.primaryKeyField());
        if ((dictField.baseType()   == Types::String    ||
             dictField.baseType()   == Types::RString)  &&
             dictField.fieldSize()  >= textBuffer.size())
        {
            common      = dictTable.makeRecord();

            select recId from common
                        where common.(dictField.id())  == textBuffer.getText();

            if (common)
            {
                queryBuildRange = SysQuery::findOrCreateRange(_formDS.query().dataSourceNo(_formDS.query().levelTable(dictTable.id())),
                                                              dictField.id());

                if (queryBuildRange && ! queryBuildRange.value())
                    queryBuildRange.value(queryValue(textBuffer.getText()));
            }
        }
    }
}
Метод можно поместить в класс SysSetupFormRun, и вызывать из метода init() этого класса:
X++:
public void init()
{
    ;
    super();
    SysSecurityFormSetup::loadSecurity(this);

    // --> Slava, 01/02-07 /*  */
    if (this.objectSet())
        this.AA_process(this.objectSet());
    // <-- Slava, 01/02-07
}
__________________
С уважением, Вячеслав.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Динамическое создание DataSource на форме, и добавление элементов дизайна. epack DAX: Программирование 12 24.11.2010 15:31
Обновление таблицы в DataSource при ее изменении Андре DAX: База знаний и проекты 7 22.04.2008 13:16
Два DataSource на одну временную таблицу mou DAX: Программирование 4 22.03.2008 11:00
Заполнение DataSource из постоянной и временной таблиц m_ax DAX: Программирование 2 21.06.2007 13:08
Грид и поле в строке, не связанное с DataSource NataLee DAX: Программирование 2 26.01.2004 17:02

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

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

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