04.12.2007, 11:47 | #1 |
Участник
|
Оборотно-сальдовая ведомость??!
Уважаемые коллеги, подскажите:
Есть форма и отчет "оборотно-сальдовая ведомость" по поставщику, так вот они показывают разные данные. Как понять какие данные верные? Да и верные ли? ЗЫ. А может у кого завалялся ПРАВИЛЬНЫЙ запросик ?
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
04.12.2007, 11:59 | #2 |
Участник
|
А как вы валюту указываете в диалогах ? Основную валюту компании ставите ?
В этом случае в "отчёте" идёт фильтрация операций поставщика только по этой валюте, а в "запросе" берутся операции по всем валютам, просто сальдо и обороты отображаются в основной валюте. Тут в диалоге "отчёта" главное не заполнять поле "Валюта" когда "Тип валюты" - Основная.
__________________
Дмитрий Последний раз редактировалось Damn; 04.12.2007 в 12:07. |
|
04.12.2007, 12:20 | #3 |
Участник
|
Цитата:
Сообщение от Damn
А как вы валюту указываете в диалогах ? Основную валюту компании ставите ?
В этом случае в "отчёте" идёт фильтрация операций поставщика только по этой валюте, а в "запросе" берутся операции по всем валютам, просто сальдо и обороты отображаются в основной валюте. Тут в диалоге "отчёта" главное не заполнять поле "Валюта" когда "Тип валюты" - Основная. Есть очень серьезные подозрения, что данные кривые. Для проверки своих подозрений мне и нужно понять, чему можно больше доверять - отчету или запросу?
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
04.12.2007, 13:06 | #4 |
Участник
|
Может так кто поможет?
Правильно ли следущее?
X++: VendTrans checkVendTrans() { VendLedgerAccounts vendLedgerAccounts; ; while select vendTrans where vendTrans.TransDate <= toDate { select firstOnly SumAccount from vendLedgerAccounts where vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile && vendLedgerAccounts.AccountCode == TableGroupAll::Table && vendLedgerAccounts.Num == vendTrans.AccountNum; if (! vendLedgerAccounts.SumAccount) { select firstOnly SumAccount from vendLedgerAccounts where vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile && vendLedgerAccounts.AccountCode == TableGroupAll::GroupId && vendLedgerAccounts.Num == VendTable::find(vendTrans.AccountNum).VendGroup; } if (! vendLedgerAccounts.SumAccount) { select firstOnly SumAccount from vendLedgerAccounts where vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile && vendLedgerAccounts.AccountCode == TableGroupAll::All && vendLedgerAccounts.SumAccount == accountNum; } if (vendLedgerAccounts.SumAccount == accountNum) amountMST += vendTrans.AmountMST; } return vendTrans; }
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) Последний раз редактировалось Silence; 04.12.2007 в 16:55. |
|
04.12.2007, 13:57 | #5 |
Участник
|
Если вы хотите просуммировать проводки по поставщику по бух счету, то так делать нельзя. Да - так делает отчет в расчетах с поставщиками, но в VendTrans не всегда заполняется поле PostingProfile, тогда система берет profile по-умолчанию из параметров модуля(Ax 3 sp 3) .
К тому же по множеству поставщиков и по множеству счетов это может очень долго работать |
|
04.12.2007, 14:00 | #6 |
Участник
|
Цитата:
Сообщение от UNRW
Если вы хотите просуммировать проводки по поставщику по бух счету, то так делать нельзя. Да - так делает отчет в расчетах с поставщиками, но в VendTrans не всегда заполняется поле PostingProfile, тогда система берет profile по-умолчанию из параметров модуля(Ax 3 sp 3) .
К тому же по множеству поставщиков и по множеству счетов это может очень долго работать ЗЫ. Работает не долго, база маленькая.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
04.12.2007, 16:39 | #7 |
Участник
|
желательно одим запросом
"правильный" счет - в проводке по ГК |
|
|
За это сообщение автора поблагодарили: Silence (1). |
04.12.2007, 16:42 | #8 |
Участник
|
мы, например, в проводку по ГК пишем аналитику с кодом контрагента
|
|
04.12.2007, 16:59 | #9 |
Участник
|
Конечно желательно
Спасибо. Хм... К сожалению это не мне решать
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
04.12.2007, 17:20 | #10 |
Участник
|
вы посмотрите есть ли у вас в vendTrans пустые PostingProfile
а еще можно попробовать так X++: VendTrans checkVendTrans() { VendLedgerAccounts vendLedgerAccounts; ; while select vendTrans where vendTrans.TransDate <= toDate outer join SumAccount from vendLedgerAccounts1 where vendLedgerAccounts1.PostingProfile == vendTrans.PostingProfile && vendLedgerAccounts1.AccountCode == TableGroupAll::Table && vendLedgerAccounts1.Num == vendTrans.AccountNum outer join SumAccount from vendLedgerAccounts2 where vendLedgerAccounts2.PostingProfile == vendTrans.PostingProfile && vendLedgerAccounts2.AccountCode == TableGroupAll::GroupId && vendLedgerAccounts2.Num == VendTable::find(vendTrans.AccountNum).VendGroup outer join SumAccount from vendLedgerAccounts3 where vendLedgerAccounts3.PostingProfile == vendTrans.PostingProfile && vendLedgerAccounts3.AccountCode == TableGroupAll::All && vendLedgerAccounts3.SumAccount == accountNum; { .... } } думаю Аксапта не потянет Последний раз редактировалось UNRW; 04.12.2007 в 17:29. |
|
04.12.2007, 17:43 | #11 |
Участник
|
Пустых нету, но есть измененные.
Цитата:
Сообщение от UNRW
а еще можно попробовать так
X++: outer join SumAccount from vendLedgerAccounts2 where vendLedgerAccounts2.PostingProfile == vendTrans.PostingProfile && vendLedgerAccounts2.AccountCode == TableGroupAll::GroupId && vendLedgerAccounts2.Num == VendTable::find(vendTrans.AccountNum).VendGroup думаю Аксапта не потянет X++: vendLedgerAccounts2.Num == VendTable::find(vendTrans.AccountNum).VendGroup Нда, сам не понял что написал Но думаю вы меня правильно поймете.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) Последний раз редактировалось Silence; 04.12.2007 в 17:46. |
|
05.12.2007, 11:52 | #12 |
Участник
|
вот так работает сцуко быстро
X++: static void DK_vendSaldoByProfiles(Args _args) { VendLedgerAccounts vendLedgerAccounts; VendTrans vendTrans; VendTable vendTable; Amount bablosDeb; Amount bablosCred; TransDate transDate; ; transDate = 30\09\2007; while select vendTable group by VendGroup join sum (amountMst) from vendTrans group by AccountNum where vendTrans.TransDate <= transDate && vendTrans.AccountNum == vendTable.AccountNum join vendLedgerAccounts where vendLedgerAccounts.SumAccount == "60.02.0001" && vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile && ( ( vendLedgerAccounts.AccountCode == TableGroupAll::Table && vendLedgerAccounts.Num == vendTrans.AccountNum ) || ( vendLedgerAccounts.AccountCode == TableGroupAll::GroupId && vendLedgerAccounts.Num == vendTable.VendGroup ) || ( vendLedgerAccounts.AccountCode == TableGroupAll::All ) ) { if (vendTrans.AmountMST > 0) bablosDeb += vendTrans.AmountMST; else bablosCred += vendTrans.AmountMST; } info(strfmt("%1 %2 ", bablosDeb, bablosCred)); } даже должен условно правильный результат дать Последний раз редактировалось UNRW; 05.12.2007 в 11:57. |
|
05.12.2007, 13:04 | #13 |
Участник
|
И правда быстро. Спасибо.
Цитата:
Только не совсем правильно, так работает лучше: X++: where vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile && ((vendLedgerAccounts.AccountCode == TableGroupAll::Table && vendLedgerAccounts.Num == vendTrans.AccountNum && vendLedgerAccounts.SumAccount == "60.02.0001") || (vendLedgerAccounts.AccountCode == TableGroupAll::GroupId && vendLedgerAccounts.Num == vendTable.VendGroup) || (vendLedgerAccounts.AccountCode == TableGroupAll::All && vendLedgerAccounts.SumAccount == "60.02.0001"))
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
05.12.2007, 15:54 | #14 |
Участник
|
Извиняюсь, не догнал сразу
Этот код вообще не работоспособен из-за условия ИЛИ. Например: Цитата:
PostingProfile = Table, SumAccount = Счет1
PostingProfile = All, SumAccount = Счет2 ЗЫ. А так хорошо все начиналось...
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
06.12.2007, 10:38 | #15 |
Участник
|
Цитата:
Сообщение от Silence
Извиняюсь, не догнал сразу
Этот код вообще не работоспособен из-за условия ИЛИ. Например: Нам нужны все проводки по счету "Счет2", но Ваш запрос увидев, что таковой существует не обратит внимания на то, что есть еще и "Счет1" который не должен обсчитываться. И соответственно посчитает эту строку. ЗЫ. А так хорошо все начиналось... Последний раз редактировалось UNRW; 06.12.2007 в 10:40. |
|
06.12.2007, 11:14 | #16 |
Участник
|
Правильно. Если есть не одна запись в "vendLedgerAccounts", и даже если там присутствует нужный счет, то запись не должна выбираться.
Хммм... По крайней мере у нас.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
11.12.2007, 14:54 | #17 |
Участник
|
оказалось косяпта лажается на строках
X++: vendLedgerAccounts.AccountCode == TableGroupAll::Table && vendLedgerAccounts.Num == vendTrans.AccountNum vendTrans.AccountNum имеют выравнивания строки Left и Right и SQL сервер не находит совпадений можно попробовать так: X++: vendLedgerAccounts.AccountCode == TableGroupAll::Table
&& vendLedgerAccounts.Num like vendTrans.AccountNum надо бы сделать LTRIM для обоих полей (Аксапта не умеет так делать), но тем не менее: X++: static void DK_vendSaldoByProfiles(Args _args) { VendLedgerAccounts vendLedgerAccounts; VendTrans vendTrans; VendTable vendTable; Amount bablosDeb; Amount bablosCred; TransDate transDate; ; transDate = 30\09\2007; while select vendTable group by VendGroup join sum (amountMst) from vendTrans group by AccountNum where vendTrans.TransDate <= transDate && vendTrans.AccountNum == vendTable.AccountNum join vendLedgerAccounts where vendLedgerAccounts.SumAccount == "60.02.0001" && vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile && ( ( vendLedgerAccounts.AccountCode == TableGroupAll::Table && vendLedgerAccounts.Num like vendTrans.AccountNum ) || ( vendLedgerAccounts.AccountCode == TableGroupAll::GroupId && vendLedgerAccounts.Num == vendTable.VendGroup ) || ( vendLedgerAccounts.AccountCode == TableGroupAll::All ) ) { if (vendTrans.AmountMST > 0) bablosDeb += vendTrans.AmountMST; else bablosCred += vendTrans.AmountMST; } info(strfmt("%1 %2 ", bablosDeb, bablosCred)); } Последний раз редактировалось UNRW; 11.12.2007 в 14:57. |
|