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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.10.2009, 15:05   #1  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Сортировка в оборотно-сальдовой ведомости по поставщикам
Добрый день.

При формировании оборотно-сальдовой ведомости по поставщикам отчет выводится отсортированным по счету контрагента, т.е получается что-то типа:
"1002 - ЧП Пупкин"
"1003 - ИП Иванов"
...

Подскажите, пожалуйста, как организовать сортировку по имени контрагента.

По всей видимости сортировка происходит не на форме, а где-то в классе RLedgerSheetEngine_TurnoverCustVend, т.к. попытки засунуть первым столбец с именем контрагента ни к чему не привели, также как и попытки выводить "ИП Иванов - 1003" - все равно сортировка остается именно по номеру.
Старый 15.10.2009, 15:53   #2  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,436 / 952 (34) +++++++
Регистрация: 22.07.2003
Адрес: МО
Направление поиска:
RLedgerSheetServer_TurnoverCustVend.updateAccounts(...) строка с key = data.getKeyBuild(...).
Сортировка идет по ключу, ключ используется не только в этом классе, позиции компонентов ключа важны.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 20.10.2009, 13:42   #3  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Спасибо, raz.

В результате пришел к такому решению:
1. В методе updateAccounts класса RLedgerSheetServer_TurnoverCustVend изменил участок кода:
X++:
if(this.contragentTable() == tablenum(VendTrans))
    key = data.getKeyBuild([custVendTrans.sumAccount(),
                                      //custVendTrans.AccountNum,
                                       strltrim((select firstonly Name from VendTable where VendTable.AccountNum == custVendTrans.AccountNum).Name),
                                       custVendTrans.RContractCode ? custVendTrans.RContractCode : SysQuery::valueEmptyString(),
                                       custVendTrans.RContractAccount ? custVendTrans.RContractAccount : SysQuery::valueEmptyString()]);

if(this.contragentTable() == tablenum(CustTrans))
    key = data.getKeyBuild([custVendTrans.sumAccount(),
                                       strltrim((select firstonly Name from CustTable where CustTable.AccountNum == custVendTrans.AccountNum).Name),
                                       custVendTrans.RContractCode ? custVendTrans.RContractCode : SysQuery::valueEmptyString(),
                                       custVendTrans.RContractAccount ? custVendTrans.RContractAccount : SysQuery::valueEmptyString()]);
2. В методе insertRow класса RLedgerSheetEngine_TurnoverCustVend изменил следующий участок:
X++:
case keyContragentPosition:
    accName = conpeek(_key,conIterator);
    if(this.contragentTable() == tablenum(VendTrans))
        newFormListItem(strltrim((select firstonly AccountNum from VendTable where VendTable.Name == accName).AccountNum + "@FAV2143" + accName));
    if(this.contragentTable() == tablenum(CustTrans))
        newFormListItem(strltrim((select firstonly AccountNum from CustTable where CustTable.Name == accName).AccountNum + "@FAV2143" + accName));
    //newFormListItem(strltrim(this.getContragentName(_key) + "@FAV2143" + conpeek(_key,conIterator)));
break;
, где accName типа Name.

В таком случае в оборотно-сальдовой ведомости по поставщикам и клиентам имеем сортировку по названию контрагента, а не по его номеру в системе.
Старый 20.10.2009, 17:43   #4  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,436 / 952 (34) +++++++
Регистрация: 22.07.2003
Адрес: МО
возможно лучше было бы расширить ключ до (на случай если будут дубликаты названий):
X++:
    key = data.getKeyBuild([custVendTrans.sumAccount(),
                                       strltrim((select firstonly Name from VendTable where VendTable.AccountNum == custVendTrans.AccountNum).Name),
                                       custVendTrans.AccountNum,
                                       custVendTrans.RContractCode ? custVendTrans.RContractCode : SysQuery::valueEmptyString(),
                                       custVendTrans.RContractAccount ? custVendTrans.RContractAccount : SysQuery::valueEmptyString()]);
хотя, если сделать уникальный индекс по названию, то можно и так
За это сообщение автора поблагодарили: Silphidae (1).
Старый 15.02.2010, 14:40   #5  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Добрый день.
Нашел у данного решения 2 проблемы:
1. При детализации по операциям поставщика (флаг "Проводки контрагента") никакой детализации не происходит.
2. При вызове контекстного меню "Исходный документ" - переходит на пустую форму операций по контрагенту.
Подскажите, пожалуйста, как их решить.
Старый 15.02.2010, 15:19   #6  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Пункт 2 исправлен. Для этого в методе originalDocuments класса RLedgerSheetEngine_TurnoverCustVend нужо внести изменения:
X++:
            accName = conpeek(key,keyContragentPosition);
            if(this.contragentTable() == tablenum(VendTrans))
                accNum = (select firstonly AccountNum from VendTable where VendTable.Name == accName).AccountNum;
            if(this.contragentTable() == tablenum(CustTrans))
                accNum = (select firstonly AccountNum from CustTable where CustTable.Name == accName).AccountNum;

            this.setQueryRanges(transQuery,
                                //keyContragentPosition      ? conpeek(key,keyContragentPosition)      : "",
                                keyContragentPosition      ? accNum : "",
                                keyContractAccountPosition ? conpeek(key,keyContractAccountPosition) : "",
                                keyContractCodePosition    ? conpeek(key,keyContractCodePosition) : "");
, где accName типа Name, accNum типа AccountNum

Вопрос по пункту 1 остается в силе.
Старый 16.02.2010, 15:02   #7  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Все, вопрос снимается.
Решение аналогично предыдущему посту, только исправления нужно внести в метод loopTrans класса RLedgerSheetEngine_TurnoverCustVend.
Теги
оборотно-сальдовая ведомость, сортировка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка оборотно-сальдовой ведомости ГК Serge_DD DAX: Функционал 17 06.05.2011 18:33
Вопрос по оборотно-сальдовой ведомости tusk DAX: Функционал 11 18.12.2007 16:18
Оборотно - сальдовые ведомости по поставщикам (AX 3.0 sp4) Тоба DAX: Прочие вопросы 11 29.08.2006 09:52
Вопрос по оборотно-сальдовой ATimTim DAX: Функционал 1 13.01.2005 17:27
Отрицательная сумма в оборотно-сальдовой ведомости на конец периода tolstjak DAX: Функционал 1 23.11.2004 18:36
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:14.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.