|
|
#1 |
|
Участник
|
Уважаемые коллеги, подскажите:
Есть форма и отчет "оборотно-сальдовая ведомость" по поставщику, так вот они показывают разные данные. Как понять какие данные верные? Да и верные ли? ![]() ЗЫ. А может у кого завалялся ПРАВИЛЬНЫЙ запросик ?
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
|
|
|
#2 |
|
Участник
|
А как вы валюту указываете в диалогах ? Основную валюту компании ставите ?
В этом случае в "отчёте" идёт фильтрация операций поставщика только по этой валюте, а в "запросе" берутся операции по всем валютам, просто сальдо и обороты отображаются в основной валюте. Тут в диалоге "отчёта" главное не заполнять поле "Валюта" когда "Тип валюты" - Основная.
__________________
Дмитрий Последний раз редактировалось Damn; 04.12.2007 в 12:07. |
|
|
|
|
#3 |
|
Участник
|
Цитата:
Сообщение от Damn
А как вы валюту указываете в диалогах ? Основную валюту компании ставите ?
В этом случае в "отчёте" идёт фильтрация операций поставщика только по этой валюте, а в "запросе" берутся операции по всем валютам, просто сальдо и обороты отображаются в основной валюте. Тут в диалоге "отчёта" главное не заполнять поле "Валюта" когда "Тип валюты" - Основная. Есть очень серьезные подозрения, что данные кривые. Для проверки своих подозрений мне и нужно понять, чему можно больше доверять - отчету или запросу?
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
|
|
|
#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. |
|
|
|
|
#5 |
|
Участник
|
Если вы хотите просуммировать проводки по поставщику по бух счету, то так делать нельзя. Да - так делает отчет в расчетах с поставщиками, но в VendTrans не всегда заполняется поле PostingProfile, тогда система берет profile по-умолчанию из параметров модуля(Ax 3 sp 3) .
К тому же по множеству поставщиков и по множеству счетов это может очень долго работать |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Сообщение от UNRW
Если вы хотите просуммировать проводки по поставщику по бух счету, то так делать нельзя. Да - так делает отчет в расчетах с поставщиками, но в VendTrans не всегда заполняется поле PostingProfile, тогда система берет profile по-умолчанию из параметров модуля(Ax 3 sp 3) .
К тому же по множеству поставщиков и по множеству счетов это может очень долго работать ![]() ЗЫ. Работает не долго, база маленькая.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
|
|
|
#7 |
|
Участник
|
желательно одим запросом
![]() "правильный" счет - в проводке по ГК
|
|
|
|
| За это сообщение автора поблагодарили: Silence (1). | |
|
|
#8 |
|
Участник
|
мы, например, в проводку по ГК пишем аналитику с кодом контрагента
|
|
|
|
|
#9 |
|
Участник
|
Конечно желательно
![]() Спасибо. ![]() Хм... К сожалению это не мне решать
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
|
|
|
#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. |
|
|
|
|
#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. |
|
|
|
|
#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. |
|
|
|
|
#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"))
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
|
|
|
#14 |
|
Участник
|
Извиняюсь, не догнал сразу
![]() Этот код вообще не работоспособен из-за условия ИЛИ. Например: Цитата:
PostingProfile = Table, SumAccount = Счет1
PostingProfile = All, SumAccount = Счет2 ![]() ЗЫ. А так хорошо все начиналось...
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
|
|
|
#15 |
|
Участник
|
Цитата:
Сообщение от Silence
Извиняюсь, не догнал сразу
![]() Этот код вообще не работоспособен из-за условия ИЛИ. Например: Нам нужны все проводки по счету "Счет2", но Ваш запрос увидев, что таковой существует не обратит внимания на то, что есть еще и "Счет1" который не должен обсчитываться. И соответственно посчитает эту строку. ![]() ЗЫ. А так хорошо все начиналось... ![]() Последний раз редактировалось UNRW; 06.12.2007 в 10:40. |
|
|
|
|
#16 |
|
Участник
|
Правильно. Если есть не одна запись в "vendLedgerAccounts", и даже если там присутствует нужный счет, то запись не должна выбираться.
Хммм... По крайней мере у нас.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
|
|
|
#17 |
|
Участник
|
оказалось косяпта лажается на строках
X++: vendLedgerAccounts.AccountCode == TableGroupAll::Table
&& vendLedgerAccounts.Num == vendTrans.AccountNumvendTrans.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. |
|
|