|
|
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Коллеги, хочу спросить совет, кто как решал задачу, если с такой сталкивался. PB 9.0.2 (7661) Oracle 9.2.0.7 Имеется форма (DW) по расходам, который всегда приводились к одной валюте USD: Перелет USD 1000 Такси USD 100 Гостиница USD 400 Такси USD 200 Сумма 1700 Теперь хотят вести расходы в той валюте, в которой оплачивали и получать сумму затрат в каждой валюте: Перелет RUB 27000 Такси RUB 800 Гостиница EUR 300 Такси USD 200 Сумма RUB 27800, USD 200, EUR 300 Вопрос как лучше реализовать. Я вижу пока два варианта и не могу выбрать оптимальный: 1) текстовое поле в Summary которое я ручками заполняю из кода, обрабатывая событие Retrieveend и EditChanged 2) в Summary вставить отчет типа N_Up - которое будет считать только суммы по валютам. Один минус, данный отчет будет выдавать сумму только после выборки/сохранения, но в процессе редактирования данные будут на последнее сохранение. Может есть еще варианты? Буду признателен за советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 15:50 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Вопрос Обозначения валюты в другой колонке Если да то сделай по ней группу, а внизу вставь compute-поле с суммами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 17:25 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
spas2001Вопрос Обозначения валюты в другой колонке Если да то сделай по ней группу, а внизу вставь compute-поле с суммами Да валюта в отдельном поле. Тогда я так понимаю весь отчет будет разбит по валютам, а пользователи хотят чтобы все счета шли списком, а в низу финальные суммы по валютам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 17:44 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
sum( if( valuta= 'RUB', sum, 0)) // итого в рублях sum( if( valuta= 'USD', sum, 0)) // итого в долларах и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 18:10 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
крыsum( if( valuta= 'RUB', sum, 0)) // итого в рублях sum( if( valuta= 'USD', sum, 0)) // итого в долларах и т.д. У меня таких валют :)) и в мире и море, мне что все ручками обиграть? Нет это не лучший вариант программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 09:23 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Вопрос поставлен не совсем корректно, все зависит немного от того как хранить в базе деньги. Вариантов несколько: все хранить в одной валюте, например USD иметь таблицу курсов (девочка регулярно их ведет) написать процедуру/функцию которая будет возвращать курс на дату (учитывать то что девочка могла не ввести все курсы и брать ближайший курс по требуемой дате. А девочку чморить - что б вводила... в банках это нормально - вводят как надо) В отчетах можно выводить в любой валюте, так как для этого все есть: в базе USD курс в требуемой валюте известен. И учитывая что все расчеты в ye на день предшествовавшей оплате, все с этим учетом в норме (можете ввести свои бизнес правила) Если хранить в базе и сумму и валюту, все немного иначе, немного, но разница существенна в самом подходе. Потому с учетом всего весьма полезно иметь процедурное апи на сервере, реализовывающее процедуры/функции например возврата суммы в требуемой валюте с учетом кросс-курсов (сколько стоит к примеру USD в евро и т.п) У нас на ms sql 2000 есть например такое удобное чудо(по параметрам сами догадаетесь): Код: plaintext 1. 2. 3. 4. 5. 6. Не буду дальше отписывать все что у нас есть по этому поводу. но могу сказать, что если завтра отчеты нужно будет считать в другой валюте, меня это не сильно расстроит. Реализовывать подобную логику на клиенте - верх ненормальности. Это пререготива базы данных в первую очередь, клиент это все навсего инструмент для ввода запросов и отчетности, а никак не логики. Не согласны? Тогда скажу что в нашей функции к примеру в свое время была учтена деноминация рублей и процедура возвращала на дату реальные в то время деньги (миллионы рублей) и вся эта логика до сих пор работает на сервере и полностью отражает всю жизнь, а значит мы можем выполнить любые отчеты на любую дату с учетом тех требований которые были в то время что запросили в отчете, на клиенте на этот счет есть спец. реализация истории изменения форм отчетности и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 10:57 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
PavelBuilderВопрос поставлен не совсем корректно, все зависит немного от того как хранить в базе деньги. Вариантов несколько: все хранить в одной валюте, например USD иметь таблицу курсов Если хранить в базе и сумму и валюту, все немного иначе, немного, но разница существенна в самом подходе. Мне не нужно пересчитывать!!!!!! Мне нужно выдать в конце сумму по каждой валюте, которые участвовали в отчете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 12:10 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Ну так и выдай ту сумму и ту валюту. Resultset продедуры вернет сумму sum_a и валюту currency_nm или ее код currency_iso или внутрений код из справочника (классификатора) если надо currency_c. Честно говоря не понимаю в чем сложность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 12:57 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
PavelBuilderНу так и выдай ту сумму и ту валюту. Resultset продедуры вернет сумму sum_a и валюту currency_nm или ее код currency_iso или внутрений код из справочника (классификатора) если надо currency_c. Честно говоря не понимаю в чем сложность а понял к чему клонишь На MSSQL это попроще решить посравнению с Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 13:58 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Pasha2) в Summary вставить отчет типа N_Up - которое будет считать только суммы по валютам. Один минус, данный отчет будет выдавать сумму только после выборки/сохранения, но в процессе редактирования данные будут на последнее сохранение. Не очень понял последнюю фразу, что значит в процессе редактирования... отчета? Если сталкивался с такими проблемами "Итого в разрезе чего - либо" то делал вложенный отчет с расчетом агрегированной информации. Единственный минус это двойной расчет данных при выдаче отчета, но ктож машинное время считает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 16:06 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
авторЕсли сталкивался с такими проблемами "Итого в разрезе чего - либо" то делал вложенный отчет с расчетом агрегированной информации. Единственный минус это двойной расчет данных при выдаче отчета, но ктож машинное время считает. И если в момент между select'ами удачно вставить/удалить документ, то сумма совпадать не будет. Очень хорошее решение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 16:19 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
PashaЯ вижу пока два варианта и не могу выбрать оптимальный: 1) текстовое поле в Summary которое я ручками заполняю из кода, обрабатывая событие Retrieveend и EditChanged 2) в Summary вставить отчет типа N_Up - которое будет считать только суммы по валютам. Один минус, данный отчет будет выдавать сумму только после выборки/сохранения, но в процессе редактирования данные будут на последнее сохранение. Может есть еще варианты? Буду признателен за советы. Еще как вариант: расшарить данные, в Datastore в котором сделать группировку по типу валюты и выражение для подсчета суммы по группе. При Retrieveend и EditChanged в цикле пробегать по всем группам и собирать значения сумм в строку. Не очень автоматически, т.к. итоговая строка все равно будет вставляться в DW вручную, но по крайней мере не надо писать кучу if. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 06:54 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Я имел ввиду, что внизу поставить, что-то вроде string(sum1)+' RUB, '+ string(sum2)+' USD, '..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 08:55 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Еще вариант: добавить второй DW, для которого расшарить данные первого. В первом - детальная инфа, во втором - а)упорядочение по валютам, б)итоги по валютам, в)но детальная инфа скрыта, отображаются только итоги. Сам не экспериментировал, надо пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 10:13 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Промежуточный итог (можете попинать если криво что-то сделал) В окне редактирования/просмотра на события: retrieveend, Editchanged, itemchanged и pfc_deleterow написал обработчик: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. Теперь жду в каком виде захотят отчет получать. :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 10:42 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Я думаю быстрее будет в цикле - поставить фильтр, убрать фильтр Пример setredraw(false) for k =1 to ....(перебор значения справочника ll_sum=0 ls_fil=" exp_cur ='RUB'" dw_bottom.setfilter(ls_fil) dw_bottom.filter(ls_fil) if dw_bottom.rowcount() >0 then for i=1 to dw_bottom.rowcount() ll_sum+=dw_bottom.object.sum1[row] next dw_total.object.text = dw_total.object.text +string(ll_sum) end if ls_fil='' dw_bottom.setfilter(ls_fil) dw_bottom.filter(ls_fil) next setredraw(true) Примерно так. Значения валют наверняка в dw child, так что быстрее однако ЗЫ: Не претендую на 100% красоту данного кода и полное решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 14:03 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Да ошибки там есть, извиняюсь, тороплюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 14:04 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
о спасибо помыслю к радости или к сожалению скорость мне не протестировать, т.к. максимально бывает 20 счетов на запись и там это не актуально :)) а вот возможно в финальном годовом отчетет будет вариант для эксперимента спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 14:24 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Pashaа вот возможно в финальном годовом отчетет будет вариант для эксперимента спасибо Это наверное будет работать, но на мой взгляд это неправильный подход к испльзованию PB, работать с данными должен сервер БД, для этого он и предназначен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2006, 10:47 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Estets Pashaа вот возможно в финальном годовом отчетет будет вариант для эксперимента спасибо Это наверное будет работать, но на мой взгляд это неправильный подход к испльзованию PB, работать с данными должен сервер БД, для этого он и предназначен. я с вами полностью согласен. Но нормально связать процедуру, которая выбирает данные, из БД Oracle и DW у меня не получается. Может знаний не хватает. Для примера связка процедура Ms SQL и DW работает на отлично. Соотвтсвенно такой отчет, как я выше описал при связке с Ms SQL выполняется все на серваке, а клиент получает только данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2006, 16:38 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
PashaНо нормально связать процедуру, которая выбирает данные, из БД Oracle и DW у меня не получается. Может знаний не хватает. Ну тогда стоит поискать на форуме, где-то было описание как делать процедуры для DW на ORACLE, вообщем достаточно просто только в DW передается не SELECT а курсор, ну и в старом PB6 были на сколько я помню какие-то проблемы в именем пакеджа, который необходимо было толи стирать, толи заносить руками, давно это было но работало ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 09:44 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Estets PashaНо нормально связать процедуру, которая выбирает данные, из БД Oracle и DW у меня не получается. Может знаний не хватает. Ну тогда стоит поискать на форуме, где-то было описание как делать процедуры для DW на ORACLE, вообщем достаточно просто только в DW передается не SELECT а курсор, ну и в старом PB6 были на сколько я помню какие-то проблемы в именем пакеджа, который необходимо было толи стирать, толи заносить руками, давно это было но работало ;) я про этот вариант и говорию :)) не очень он мне нравится пару раз натыкался на траблы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 12:05 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
Pasha Estets PashaНо нормально связать процедуру, которая выбирает данные, из БД Oracle и DW у меня не получается. Может знаний не хватает. Ну тогда стоит поискать на форуме, где-то было описание как делать процедуры для DW на ORACLE, вообщем достаточно просто только в DW передается не SELECT а курсор, ну и в старом PB6 были на сколько я помню какие-то проблемы в именем пакеджа, который необходимо было толи стирать, толи заносить руками, давно это было но работало ;) я про этот вариант и говорию :)) не очень он мне нравится пару раз натыкался на траблы Ага, только работает как часы в течении нескольких лет на 100+- datawindows у 30+- клиентов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 18:24 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
ФилиппАга, только работает как часы в течении нескольких лет на 100+- datawindows у 30+- клиентов... мною было замечено, при внесении корректировки в таблицу, которая была связана с процедурой и соотвесвенно с пакаджем, необходимо было перекомпилить пакадж. После перекомпилирования пакаджа, сыпалось dw. Делалось попыток раз 3 использовать данный механизм, и когда парур раз натыкались на вилы, было принято решение отказаться до лучших времен. вот только не могу вспомнить такой глюк выскакивал на восьмерке или на девятке PB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 09:13 |
|
||
|
Прошу совета. Многоуровневая сумма в отчете
|
|||
|---|---|---|---|
|
#18+
PashaПосле перекомпилирования пакаджа, сыпалось dw. Очень странно, если процедура работает т.е. вызывается из plus-а то DW должна работать "полубому", она операется только на совпадение ResultSet да и то не всегда выдает ошибку, например при отсутствии последней колонки. Что то вы наверное не все перекомпиляли, или пересоздавали процедуры без прав, но есть подозрение что PB тут не при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 12:37 |
|
||
|
|

start [/forum/topic.php?fid=15&tid=1337550]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 465ms |

| 0 / 0 |
