19.02.2009, 15:24 | #1 |
Участник
|
Ошибка 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); } Последний раз редактировалось niktata; 19.02.2009 в 16:08. Причина: Неправильное отображение знаков комментария /* и */ |
|