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,438 / 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:52   #4  
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, 12:53   #5  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Спасибо за внимание!
Не находит в vendTable, потому что сделал следующее: зашел в vendTrans запомнил accountNum потом залез в vendTable пытаюсь найти поставщика с таким номером в ответ - пусто! Может есть подвох какой, или я не знаю чего то??? :-)
И в результате в Excel в колонке с наименованием поставщика, во всех строках одно и то же - 1-ая запись из таблицы VendTable!
Старый 25.08.2011, 12:55   #6  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Цитата:
Для получения наименования поставщика по проводке лучше использовать _vendTrans.vendTableName()
Я так понимаю имелось ввиду _vendTrans.VendName(); <--???
потому что метода _vendTrans.vendTableName() у меня не выдает.
Старый 25.08.2011, 13:02   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 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   #8  
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, 13:18   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
Я хотел бы добавить возможность вводить например так: 2*, 3*
А сейчас такой возможности нет? Вы проверяли?
Старый 25.08.2011, 13:23   #10  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Да, вводил 2*, 3* - в Excel попадают только начинающиеся с двойки!
Вот как получаю dimVal:
X++:
dimVal = Expenses.ValueStr();
Старый 25.08.2011, 13:29   #11  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
Да, вводил 2*, 3* - в Excel попадают только начинающиеся с двойки!
А записи начинающиеся с тройки вообoе-то есть в самой таблице?
Т.е. данные выберутся, если задать просто "3*"?

Что бы точно убедиться в том что запрос сформирован корректно, временно вставьте перед началом цикла вот такую строку
X++:
info(quryRun.query().dataSourceNo(1).toString()); // <---
while (quryRun.next())
{
    // ...
}
Старый 25.08.2011, 13:57   #12  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
попробывал
:FACEPALM:
Старый 25.08.2011, 15:10   #13  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
to S.Kuskov
Вы были правы, статей начинающихся с 3 нет! Попробовал на 1*, 2* все работает! Спасибо!
Старый 29.08.2011, 12:54   #14  
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   #15  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (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   #16  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Спасибо! Хотелось бы увидеть пример? Если не сложно. Возвращаемым значением NumLines будет количество строк??

Последний раз редактировалось JuniorAx; 29.08.2011 в 13:41.
Старый 29.08.2011, 14:38   #17  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Хотелось бы уточнить по поводу NumLines, поставил счетчик после insert'a, при 9501 записи выданных в Excel, он равняется 1360 т.е. я не могу через этот метод посчитать какое кол-во строк было вставлено. Как это можно сделать анализируя буфер? Спасибо!
Старый 29.08.2011, 14:45   #18  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
строкой в буфере является строка заканчивающаяся на "\n"
Старый 29.08.2011, 14:57   #19  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Про \n мне известно/ Мне не понятно как учитывать кол-во строк вставленных в Excel? Я так понимаю потом вместо А надо писать некую строковую переменную в которой будет что то вроде А+CountStr?? Где CountStr = количество уже вставленных строк + 1. Я правильно понимаю?
Старый 29.08.2011, 15:12   #20  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
если вам нужен bookmark, а извесны номер строки и столбца, то можно использовать ComExcelDocument_RU.numToNameCell()
ПС строковые константы лучше не использовать
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Работа с данными в отчете 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, время: 12:50.