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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.08.2011, 12:10   #1  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Работа с 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);
1 Вопрос - почему в таблице VendTable не находится Имя поставщика по его коду, переданному из VendTrans? Может не в той таблице ищю?
2 Вопрос - как в qbds мне сделать ORDER BY по полю Dimension[2] чтоб они по статье затрат отсортировались? Потому что dimVal вводится из формы в виде такого значения: 2*.

Заранее спасибо за внимание и помощь!

Последний раз редактировалось JuniorAx; 25.08.2011 в 12:17.
Старый 25.08.2011, 12:37   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
1 Вопрос - почему в таблице VendTable не находится Имя поставщика по его коду, переданному из VendTrans? Может не в той таблице ищю?
Почему вы думаете что оно не находится?
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
2 Вопрос - как в qbds мне сделать ORDER BY по полю Dimension[2] чтоб они по статье затрат отсортировались?
Вот так:
X++:
qbds.addSortField(fieldId2Ext(fieldNum(VendTrans, Dimension), 2));
Старый 25.08.2011, 12:40   #3  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
1 Вопрос - почему в таблице VendTable не находится Имя поставщика по его коду, переданному из VendTrans? Может не в той таблице ищю?
Для получения наименования поставщика по проводке лучше использовать _vendTrans.vendTableName()
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
2 Вопрос - как в qbds мне сделать ORDER BY по полю Dimension[2] чтоб они по статье затрат отсортировались? Потому что dimVal вводится из формы в виде такого значения: 2*.
X++:
qbds.addOrderByField(fieldId2Ext(fieldnum(VendTrans, Dimension), 2));
За это сообщение автора поблагодарили: JuniorAx (1).
Старый 25.08.2011, 12:53   #4  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Спасибо за внимание!
Не находит в vendTable, потому что сделал следующее: зашел в vendTrans запомнил accountNum потом залез в vendTable пытаюсь найти поставщика с таким номером в ответ - пусто! Может есть подвох какой, или я не знаю чего то??? :-)
И в результате в Excel в колонке с наименованием поставщика, во всех строках одно и то же - 1-ая запись из таблицы VendTable!
Старый 25.08.2011, 12:55   #5  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Цитата:
Для получения наименования поставщика по проводке лучше использовать _vendTrans.vendTableName()
Я так понимаю имелось ввиду _vendTrans.VendName(); <--???
потому что метода _vendTrans.vendTableName() у меня не выдает.
Старый 25.08.2011, 13:02   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
сделал следующее: зашел в vendTrans запомнил accountNum потом залез в vendTable пытаюсь найти поставщика с таким номером в ответ - пусто! Может есть подвох какой, или я не знаю чего то??? :-)
Не должно быть так. Нет такого подвоха.
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
И в результате в Excel в колонке с наименованием поставщика, во всех строках одно и то же - 1-ая запись из таблицы VendTable!
Возможно проблема уже где-то в коде метода appendToBuffer?

Цитата:
Сообщение от JuniorAx Посмотреть сообщение
Я так понимаю имелось ввиду _vendTrans.VendName(); <--???
потому что метода _vendTrans.vendTableName() у меня не выдает.
Какая у вас версия аксапты? Вот текст этого метода из версии AX2009:
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  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Только что попробовал 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  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
По-моему, VendTable и Dimension лучше включить в Query - так операция будет выполняться намного быстрее
__________________
Axapta v.3.0 sp5 kr2
Старый 25.08.2011, 15:10   #9  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
to S.Kuskov
Вы были правы, статей начинающихся с 3 нет! Попробовал на 1*, 2* все работает! Спасибо!
Старый 29.08.2011, 12:54   #10  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Появился еще вопрос!
Как можно отследить ячейку в которую вставляется текст? т.е. пишу
X++:
excelDocument.insertText("A2", textBuffer, workSheet);
- я знаю что вставка пойдет с ячейки А2, я хочу выводить подитог по каждой статье затрат! Как мне определить что писать в первый параметр insertText??? В какую ячейку вставлять? Спасибо!

Последний раз редактировалось JuniorAx; 29.08.2011 в 13:01.
Старый 29.08.2011, 13:08   #11  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,740 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
Появился еще вопрос!
Как можно отследить ячейку в которую вставляется текст? т.е. пишу
X++:
excelDocument.insertText("A2", textBuffer, workSheet);
- я знаю что вставка пойдет с ячейки А2, я хочу выводить подитог по каждой статье затрат! Как мне определить что писать в первый параметр insertText??? В какую ячейку вставлять? Спасибо!
есть несколько способов:
1. вычистить количество вставлаемых строк в момент добавления или textBuffer.numLines()
2. добавить нужные строки в textBuffer
За это сообщение автора поблагодарили: JuniorAx (1).
Старый 29.08.2011, 13:35   #12  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Спасибо! Хотелось бы увидеть пример? Если не сложно. Возвращаемым значением NumLines будет количество строк??

Последний раз редактировалось JuniorAx; 29.08.2011 в 13:41.
Старый 29.08.2011, 14:38   #13  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Хотелось бы уточнить по поводу NumLines, поставил счетчик после insert'a, при 9501 записи выданных в Excel, он равняется 1360 т.е. я не могу через этот метод посчитать какое кол-во строк было вставлено. Как это можно сделать анализируя буфер? Спасибо!
Старый 29.08.2011, 14:45   #14  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,740 / 404 (17) +++++++
Регистрация: 23.03.2006
строкой в буфере является строка заканчивающаяся на "\n"
Старый 29.08.2011, 14:57   #15  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Про \n мне известно/ Мне не понятно как учитывать кол-во строк вставленных в Excel? Я так понимаю потом вместо А надо писать некую строковую переменную в которой будет что то вроде А+CountStr?? Где CountStr = количество уже вставленных строк + 1. Я правильно понимаю?
Старый 29.08.2011, 15:12   #16  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,740 / 404 (17) +++++++
Регистрация: 23.03.2006
если вам нужен bookmark, а извесны номер строки и столбца, то можно использовать ComExcelDocument_RU.numToNameCell()
ПС строковые константы лучше не использовать
Старый 29.08.2011, 15:42   #17  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Мне не известен номер строки и столбца, Я плохо пока знаю класс ComExcelDocument_RU, я например формирую строки отчета по статьям затрат, и начинаю выводить их из А2 потому что знаю что в этой ячейке нет данных! И что это следующая после заголовка строка! Я пытаюсь понять как мне находить ту ячейку в которую вставлять строку с подитогом по статье???И как это можно сделать я и хочу спросить :-) Мне главное делать это через буфер и insertText. Спасибо!
Старый 29.08.2011, 16:24   #18  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,740 / 404 (17) +++++++
Регистрация: 23.03.2006
чтоб получить начальные номера строки и столбца используйте ComExcelDocument_RU::cellRegion2ColRow("A2");
Старый 29.08.2011, 16:36   #19  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Простите за мою глупость :-) Я просто пытаюсь склеить все вами написанное! Сейчас алгоритм такой, вывели строку заголовка отчета начиная с ячейки А1, дальше цикле по QueryRun заполняем буфер и встявляем строку заканчивающуюся на \n начиная с ячейки А2. Теперь я хочу, анализируя изменение статьи затрат, т.е. когда все проводи по 1 статье выведены и цикл переходит к след. статье, я хочу встявить строку с подитогами по предидущей статье затрат (сумму всех проводок)! Делать это хочу используя другую переменную буфера (кот. заполняется в другом запросе), но вот как отловить то место и указать insert'у с какой ячейки встявлять строку не могу понять??? Если вы более подробно раскажете как это можно будет сделать, то буду вам очень благодарен!
Старый 29.08.2011, 16:35   #20  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Не понимаю, что тут сложного
1) Заведите переменную-счётчик, которая содержит значение текущей строки (например, i)
2) Определитесь с колонкой вывода подитогов (например, 5)
3) Вставляйте подитог по адресу ComExcelDocument_RU:numToNameCell(i, 5)

или вы чего-то недоговориваете по условию задачи
__________________
С уважением,
Вячеслав
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Работа с данными в отчете romanja DAX: Программирование 31 31.03.2011 16:30
функционал Работа с документами и создание договора в Word GM2005 DAX: Функционал 5 28.09.2009 14:49
Работа Range на форме Pustik DAX: Программирование 14 18.07.2005 12:25
QBDS проблема с тремя датасоурсами xshaman DAX: Программирование 5 22.01.2004 15:00
Работа Grid в Lookup формах Maxim Gorbunov DAX: База знаний и проекты 0 28.11.2001 17:37

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

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

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