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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.02.2009, 15:24   #1  
niktata is offline
niktata
Участник
 
17 / 10 (1) +
Регистрация: 23.07.2008
Адрес: Санкт-Петербург
Ошибка while next
Добрый день! Делаю выгрузку в excel одного отчета. Код вылетает на next items с ошибкой: "Ошибка времени выполнения: В данном контексте команду NEXT выполнить нельзя. Возможные причины: буфер инициализирован на сервере, не вызван запрос SELECT, SELECT вызван, но строк не найдено, или данные переданы с помощью метода DATA. Ошибка, как я понял, вылетает на последней строке. Таблица items не пустая.
Код прилагается:
X++:
void clicked()
{
    Query                       query;
    QueryBuildDataSource        qbds;
    QueryRun                    qr;
    ELT_BomItemsExplodeCalcTKP  ds;
    //===Variables (for Excel export)=============================//
    comExcelDocument_RU     excelDoc;
    ParseBuffer             text;
    Str                     buffer;
    int i;
    //===changeKeyBoard================================================//
    void changeKeyBoardLanguageRussia() // Перевод раскладки клавиатуры на русский язык (символы в буфере обмена)
    {
        dll dll = new dll("user32");
        dllFunction dllFunction = new dllFunction(dll, "LoadKeyboardLayoutA");
        #define.KLF_ACTIVATE(1)
        ;
        dllFunction.arg(ExtTypes::String, ExtTypes::DWord);
        dllFunction.returns(ExtTypes::DWord);
        dllFunction.call("00000419", #KLF_ACTIVATE); // - русский язык
        //dllFunction.call("00000409", #KLF_ACTIVATE); // - англ. язык
    }
    //=================================================================//
    ;
    super();

    buffer   = "";
    text     = new ParseBuffer("");
    changeKeyBoardLanguageRussia();
    excelDoc = new comExcelDocument_RU();
    excelDoc.newFile(#ReportTemplatePath_RU + 'ELT_BomCalcTKP.xlt',false);

//    query = new Query(items_DS.query());
//    qbds = query.dataSourceNo(1);
//    qbds.addSortField(FieldNum(ELT_BomItemsExplodeCalcTKP, RecId));
//    qbds.orderMode(OrderMode::OrderBy);
//     qr = new QueryRun(query);

    if (SebestCheckbox.value() == 0)
        select items order by RecID ASC where items.RecId;
    else
        select
            items
                order by RecID ASC
                where items.ItemType == ItemType::BOM
                   || items.StopExplode == NoYes::Yes;

    while (items)
    //while (qr.next())
    {
        //ds = qr.getNo(1);
        buffer = items.ItemId                                                      + '\t' +
                 items.ItemName                                                    + '\t' +
                 num2str(items.BOMQty,4,2,2,0)                                     + '\t' +
                 items.UnitID                                                      + '\t' +
                 num2str(items.PurchPrice,4,2,2,0)                                 + '\t' +
                 items.PurchCurrencyCode                                           + '\t' +
                 num2str(items.CurrAmount,4,2,2,0)                                 + '\t';
                 //items.CurrAmountCode                                              + '\t';

        switch (items.PurchCurrencyCode)
        {
            case 'RUR' :  buffer += "=G" + int2Str(2+i) + '\t'; break;
            case 'EUR' :  buffer += "=G" + int2Str(2+i)+'*$N$1' + '\t'; break;
            case 'USD' :  buffer += "=G" + int2Str(2+i)+'*$N$2' + '\t'; break;
        }

        buffer += int2str(items.LevelBom) + '\t' +
                  items.BomItemId + '\t' +
                  date2str(items.TransDate,123,2,2,2,2,2) + '\n';

        text.appendText(buffer);

        i++;

        next items;
    }

    if(buffer == "")
        text.appendText("Ошибка! \n");

    excelDoc.insertText("A2", text,1);
    text.setText(num2str(Euro,4,2,2,0));
    excelDoc.insertText("N1", text,1);
    text.setText(num2str(USD,4,2,2,0));
    excelDoc.insertText("N2", text,1);
    excelDoc.visible(true);
}
Пробовал делать через QueryRun, но не разобрался, как делать выборку из датасурса формы. Датасурсом является временная таблица.

Последний раз редактировалось niktata; 19.02.2009 в 16:08. Причина: Неправильное отображение знаков комментария /* и */
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: Microsoft - The Next Big ERP Innovator Blog bot DAX Blogs 2 02.04.2009 18:55
axStart: Please keep the AOT reports in Dynamics AX next release alive Blog bot DAX Blogs 2 13.12.2008 12:18
Ошибка при выполнении queryRun.next() Poleax DAX: Программирование 6 23.07.2008 18:49
ProductiveGap: Analysis: CRM Is Microsoft's Next Billion-Dollar Baby Blog bot DAX Blogs 0 28.10.2006 18:14
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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