|
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:53 | #4 |
Участник
|
Спасибо за внимание!
Не находит в vendTable, потому что сделал следующее: зашел в vendTrans запомнил accountNum потом залез в vendTable пытаюсь найти поставщика с таким номером в ответ - пусто! Может есть подвох какой, или я не знаю чего то??? :-) И в результате в Excel в колонке с наименованием поставщика, во всех строках одно и то же - 1-ая запись из таблицы VendTable! |
|
25.08.2011, 12:55 | #5 |
Участник
|
Цитата:
Для получения наименования поставщика по проводке лучше использовать _vendTrans.vendTableName()
потому что метода _vendTrans.vendTableName() у меня не выдает. |
|
25.08.2011, 13:02 | #6 |
Участник
|
Цитата:
Цитата:
Цитата:
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 | #7 |
Участник
|
Только что попробовал 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, 12:52 | #8 |
Участник
|
По-моему, VendTable и Dimension лучше включить в Query - так операция будет выполняться намного быстрее
__________________
Axapta v.3.0 sp5 kr2 |
|
25.08.2011, 15:10 | #9 |
Участник
|
to S.Kuskov
Вы были правы, статей начинающихся с 3 нет! Попробовал на 1*, 2* все работает! Спасибо! |
|
29.08.2011, 12:54 | #10 |
Участник
|
Появился еще вопрос!
Как можно отследить ячейку в которую вставляется текст? т.е. пишу X++: excelDocument.insertText("A2", textBuffer, workSheet); Последний раз редактировалось JuniorAx; 29.08.2011 в 13:01. |
|
29.08.2011, 13:08 | #11 |
Участник
|
Цитата:
Сообщение от JuniorAx
Появился еще вопрос!
Как можно отследить ячейку в которую вставляется текст? т.е. пишу X++: excelDocument.insertText("A2", textBuffer, workSheet); 1. вычистить количество вставлаемых строк в момент добавления или textBuffer.numLines() 2. добавить нужные строки в textBuffer |
|
|
За это сообщение автора поблагодарили: JuniorAx (1). |
29.08.2011, 13:35 | #12 |
Участник
|
Спасибо! Хотелось бы увидеть пример? Если не сложно. Возвращаемым значением NumLines будет количество строк??
Последний раз редактировалось JuniorAx; 29.08.2011 в 13:41. |
|
29.08.2011, 14:38 | #13 |
Участник
|
Хотелось бы уточнить по поводу NumLines, поставил счетчик после insert'a, при 9501 записи выданных в Excel, он равняется 1360 т.е. я не могу через этот метод посчитать какое кол-во строк было вставлено. Как это можно сделать анализируя буфер? Спасибо!
|
|
29.08.2011, 14:45 | #14 |
Участник
|
строкой в буфере является строка заканчивающаяся на "\n"
|
|
29.08.2011, 14:57 | #15 |
Участник
|
Про \n мне известно/ Мне не понятно как учитывать кол-во строк вставленных в Excel? Я так понимаю потом вместо А надо писать некую строковую переменную в которой будет что то вроде А+CountStr?? Где CountStr = количество уже вставленных строк + 1. Я правильно понимаю?
|
|
29.08.2011, 15:12 | #16 |
Участник
|
если вам нужен bookmark, а извесны номер строки и столбца, то можно использовать ComExcelDocument_RU.numToNameCell()
ПС строковые константы лучше не использовать |
|
29.08.2011, 15:42 | #17 |
Участник
|
Мне не известен номер строки и столбца, Я плохо пока знаю класс ComExcelDocument_RU, я например формирую строки отчета по статьям затрат, и начинаю выводить их из А2 потому что знаю что в этой ячейке нет данных! И что это следующая после заголовка строка! Я пытаюсь понять как мне находить ту ячейку в которую вставлять строку с подитогом по статье???И как это можно сделать я и хочу спросить :-) Мне главное делать это через буфер и insertText. Спасибо!
|
|
29.08.2011, 16:24 | #18 |
Участник
|
чтоб получить начальные номера строки и столбца используйте ComExcelDocument_RU::cellRegion2ColRow("A2");
|
|
29.08.2011, 16:36 | #19 |
Участник
|
Простите за мою глупость :-) Я просто пытаюсь склеить все вами написанное! Сейчас алгоритм такой, вывели строку заголовка отчета начиная с ячейки А1, дальше цикле по QueryRun заполняем буфер и встявляем строку заканчивающуюся на \n начиная с ячейки А2. Теперь я хочу, анализируя изменение статьи затрат, т.е. когда все проводи по 1 статье выведены и цикл переходит к след. статье, я хочу встявить строку с подитогами по предидущей статье затрат (сумму всех проводок)! Делать это хочу используя другую переменную буфера (кот. заполняется в другом запросе), но вот как отловить то место и указать insert'у с какой ячейки встявлять строку не могу понять??? Если вы более подробно раскажете как это можно будет сделать, то буду вам очень благодарен!
|
|
29.08.2011, 16:35 | #20 |
северный Будда
|
Не понимаю, что тут сложного
1) Заведите переменную-счётчик, которая содержит значение текущей строки (например, i) 2) Определитесь с колонкой вывода подитогов (например, 5) 3) Вставляйте подитог по адресу ComExcelDocument_RU:numToNameCell(i, 5) или вы чего-то недоговориваете по условию задачи
__________________
С уважением, Вячеслав |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Работа с данными в отчете | 31 | |||
функционал Работа с документами и создание договора в Word | 5 | |||
Работа Range на форме | 14 | |||
QBDS проблема с тремя датасоурсами | 5 | |||
Работа Grid в Lookup формах | 0 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|