25.08.2011, 12:10 | #1 |
Участник
|
Работа с QBDS
Здраствуйте! Прошу вашей помощи по не сложному запросу:
Сам Query X++: qbds =query.addDataSource(tablenum(VendTrans)); qbr = qbds.addRange(fieldid2Ext(fieldnum(VendTrans, Dimension), 2)); qbr.value (dimVal); // значение статьи затрат введеное с формы qbr.AddRange(fieldnum(VendTrans, TransDate)); qbr.value(queryRange(tdate, fdate)); queryRun = new QueryRun(query); X++: while (quryRun.next()) { _vendTrans = qureryRun.get (tablenum(VendTrans)); select _vendTable where _vendTable.AccountNum == _vendTrans.accountNum; // что бы получить имя поставщика select _dimensions where _dimensions.Num == _vendTrans.Dimension[2]; // что бы получить наименование статьи затрат textBuffer.AppendText(element.appendToBuffer(_vendTrans, _vendTable, _dimensions)); } excelDocument.insertText("A2", textBuffer, workSheet); 2 Вопрос - как в qbds мне сделать ORDER BY по полю Dimension[2] чтоб они по статье затрат отсортировались? Потому что dimVal вводится из формы в виде такого значения: 2*. Заранее спасибо за внимание и помощь! Последний раз редактировалось JuniorAx; 25.08.2011 в 12:17. |
|
25.08.2011, 12:37 | #2 |
Участник
|
Цитата:
Цитата:
X++: qbds.addSortField(fieldId2Ext(fieldNum(VendTrans, Dimension), 2)); |
|
25.08.2011, 12:40 | #3 |
Участник
|
Цитата:
Цитата:
X++: qbds.addOrderByField(fieldId2Ext(fieldnum(VendTrans, Dimension), 2)); |
|
|
За это сообщение автора поблагодарили: JuniorAx (1). |
25.08.2011, 12:52 | #4 |
Участник
|
По-моему, VendTable и Dimension лучше включить в Query - так операция будет выполняться намного быстрее
__________________
Axapta v.3.0 sp5 kr2 |
|
25.08.2011, 12:53 | #5 |
Участник
|
Спасибо за внимание!
Не находит в vendTable, потому что сделал следующее: зашел в vendTrans запомнил accountNum потом залез в vendTable пытаюсь найти поставщика с таким номером в ответ - пусто! Может есть подвох какой, или я не знаю чего то??? :-) И в результате в Excel в колонке с наименованием поставщика, во всех строках одно и то же - 1-ая запись из таблицы VendTable! |
|
25.08.2011, 12:55 | #6 |
Участник
|
Цитата:
Для получения наименования поставщика по проводке лучше использовать _vendTrans.vendTableName()
потому что метода _vendTrans.vendTableName() у меня не выдает. |
|
25.08.2011, 13:02 | #7 |
Участник
|
Цитата:
Цитата:
Цитата:
X++: //BP Deviation Documented display VendName vendTableName() { return (select firstonly Name from vendTable where vendTable.AccountNum == this.AccountNum).Name; } Последний раз редактировалось S.Kuskov; 25.08.2011 в 13:05. |
|
|
За это сообщение автора поблагодарили: JuniorAx (1). |
25.08.2011, 13:15 | #8 |
Участник
|
Только что попробовал VendName() - все заработало!!!
А на функцию qbds.addOrderByField(fieldId2Ext(fieldnum(VendTrans, Dimension), 2)); - ругается: qbds не содержит такую функцию! Сдела через qbds.addSortField(fieldId2Ext(fieldNum(VendTrans, Dimension), 2)); - видимо из-за того, что у меня Ax 3.0! СПАСИБО! Вас не затруднит ответить на еще один вопрос возникший по ходу работы? Сейчас я ввожу в поле на форме: 2* - все прекрасно работает и выводит все записи, в кот. ст.затр. начинается с 2! Я хотел бы добавить возможность вводить например так: 2*, 3* или 2*, !34 т.е. более сложные условия! - как это можно реализовать? Поле для ввода StringEdit! Последний раз редактировалось JuniorAx; 25.08.2011 в 14:02. |
|
25.08.2011, 13:18 | #9 |
Участник
|
|
|
25.08.2011, 13:23 | #10 |
Участник
|
Да, вводил 2*, 3* - в Excel попадают только начинающиеся с двойки!
Вот как получаю dimVal: X++: dimVal = Expenses.ValueStr(); |
|
25.08.2011, 13:29 | #11 |
Участник
|
А записи начинающиеся с тройки вообoе-то есть в самой таблице?
Т.е. данные выберутся, если задать просто "3*"? Что бы точно убедиться в том что запрос сформирован корректно, временно вставьте перед началом цикла вот такую строку X++: info(quryRun.query().dataSourceNo(1).toString()); // <--- while (quryRun.next()) { // ... } |
|
25.08.2011, 13:57 | #12 |
Участник
|
|
|
25.08.2011, 15:10 | #13 |
Участник
|
to S.Kuskov
Вы были правы, статей начинающихся с 3 нет! Попробовал на 1*, 2* все работает! Спасибо! |
|
29.08.2011, 12:54 | #14 |
Участник
|
Появился еще вопрос!
Как можно отследить ячейку в которую вставляется текст? т.е. пишу X++: excelDocument.insertText("A2", textBuffer, workSheet); Последний раз редактировалось JuniorAx; 29.08.2011 в 13:01. |
|
29.08.2011, 13:08 | #15 |
Участник
|
Цитата:
Сообщение от JuniorAx
Появился еще вопрос!
Как можно отследить ячейку в которую вставляется текст? т.е. пишу X++: excelDocument.insertText("A2", textBuffer, workSheet); 1. вычистить количество вставлаемых строк в момент добавления или textBuffer.numLines() 2. добавить нужные строки в textBuffer |
|
|
За это сообщение автора поблагодарили: JuniorAx (1). |
29.08.2011, 13:35 | #16 |
Участник
|
Спасибо! Хотелось бы увидеть пример? Если не сложно. Возвращаемым значением NumLines будет количество строк??
Последний раз редактировалось JuniorAx; 29.08.2011 в 13:41. |
|
29.08.2011, 14:38 | #17 |
Участник
|
Хотелось бы уточнить по поводу NumLines, поставил счетчик после insert'a, при 9501 записи выданных в Excel, он равняется 1360 т.е. я не могу через этот метод посчитать какое кол-во строк было вставлено. Как это можно сделать анализируя буфер? Спасибо!
|
|
29.08.2011, 14:45 | #18 |
Участник
|
строкой в буфере является строка заканчивающаяся на "\n"
|
|
29.08.2011, 14:57 | #19 |
Участник
|
Про \n мне известно/ Мне не понятно как учитывать кол-во строк вставленных в Excel? Я так понимаю потом вместо А надо писать некую строковую переменную в которой будет что то вроде А+CountStr?? Где CountStr = количество уже вставленных строк + 1. Я правильно понимаю?
|
|
29.08.2011, 15:12 | #20 |
Участник
|
если вам нужен bookmark, а извесны номер строки и столбца, то можно использовать ComExcelDocument_RU.numToNameCell()
ПС строковые константы лучше не использовать |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Работа с данными в отчете | 31 | |||
функционал Работа с документами и создание договора в Word | 5 | |||
Работа Range на форме | 14 | |||
QBDS проблема с тремя датасоурсами | 5 | |||
Работа Grid в Lookup формах | 0 |
|