15.10.2009, 15:05 | #1 |
Участник
|
Сортировка в оборотно-сальдовой ведомости по поставщикам
Добрый день.
При формировании оборотно-сальдовой ведомости по поставщикам отчет выводится отсортированным по счету контрагента, т.е получается что-то типа: "1002 - ЧП Пупкин" "1003 - ИП Иванов" ... Подскажите, пожалуйста, как организовать сортировку по имени контрагента. По всей видимости сортировка происходит не на форме, а где-то в классе RLedgerSheetEngine_TurnoverCustVend, т.к. попытки засунуть первым столбец с именем контрагента ни к чему не привели, также как и попытки выводить "ИП Иванов - 1003" - все равно сортировка остается именно по номеру. |
|
15.10.2009, 15:53 | #2 |
NavAx
|
Направление поиска:
RLedgerSheetServer_TurnoverCustVend.updateAccounts(...) строка с key = data.getKeyBuild(...). Сортировка идет по ключу, ключ используется не только в этом классе, позиции компонентов ключа важны. |
|
|
За это сообщение автора поблагодарили: Silphidae (1). |
20.10.2009, 13:42 | #3 |
Участник
|
Спасибо, 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()]); 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; В таком случае в оборотно-сальдовой ведомости по поставщикам и клиентам имеем сортировку по названию контрагента, а не по его номеру в системе. |
|
20.10.2009, 17:43 | #4 |
NavAx
|
возможно лучше было бы расширить ключ до (на случай если будут дубликаты названий):
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 |
Участник
|
Добрый день.
Нашел у данного решения 2 проблемы: 1. При детализации по операциям поставщика (флаг "Проводки контрагента") никакой детализации не происходит. 2. При вызове контекстного меню "Исходный документ" - переходит на пустую форму операций по контрагенту. Подскажите, пожалуйста, как их решить. |
|
15.02.2010, 15:19 | #6 |
Участник
|
Пункт 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) : ""); Вопрос по пункту 1 остается в силе. |
|
16.02.2010, 15:02 | #7 |
Участник
|
Все, вопрос снимается.
Решение аналогично предыдущему посту, только исправления нужно внести в метод loopTrans класса RLedgerSheetEngine_TurnoverCustVend. |
|
Теги |
оборотно-сальдовая ведомость, сортировка |
|
|