|
10.11.2004, 10:28 | #1 |
Участник
|
Оборотно-сальдовая одним запросом ???
Уважаемый All, есть маленькая проблема.
Необходимо разработать оборотно-сальдовую ведомость, в которой обороты разрезаются по нескольким дополнительным аналитикам, например - по датам, по номенклатурным группам. При этом необходим режим "Только итоги по номенклатурным группам", или "Только итоги по датам". В стандартном SQL - это просто GROUP BY. В Аксапта при генерации отчета тоже можно поставить признак "Только итоги". Единственное ограничение - результирующий набор должен извлекаться одним Query. В MS SQL я могу написать оборотно сальдовую одним SQL-запросом: select ItemId, NameAlias, (select (sum(AvailPhysical) from InventSum S where S.ItemId = N.ItemId) as SaldoNow, (select sum(Qty) from InventTrans T where T.ItemId = N.ItemId and DatePhysical < @DateBegin and StatusReceipt > 0) as Obr1In, (select sum(Qty) from InventTrans T where T.ItemId = N.ItemId and DatePhysical < @DateBegin and StatusIssue > 0) as Obr1Out, ... SaldoNow - Obr1In + Obr1Out as SaldoBegin, ...... from InventTable N; Принцип понятен. Используются вложенные запросы. Каждый вложенный запрос я могу оформить отдельной функцией, тогда оборотку можно будет извлечь так: select ItemId, NameAlias, SaldoBegin(ItemId, @DateBegin), ObrIn(ItemId, @DateBegin, @DateEnd), ObrOut(ItemId, @DateBegin, @DateEnd), SaldoEnd(ItemId, @DateEnd), from InventTable; Такой запрос можно джойнить к дополнительным таблицам и получать отчеты с группировками с помощью стандартного Query. Вопрос - такое возможно в Аксапта ? Я просто смотрел код оборотки - там используется цикл, а сальдо и обороты извлекаются отдельными запросами. Соответственно - все промежуточныи итоги и группировки надо програмить явно. А это - очень грустно. Хочется простого и универсального механизма. Заранее благодарен за рассмотрение.
__________________
С уважением, Евгений. |
|
15.05.2006, 14:54 | #2 |
Участник
|
Цитата:
Изначально опубликовано macklakov
P.S. "Оборотно сальдовая ведомость по складу", порочное наследие с тех времен, когда в аксапте никто толком не разбирался. И вообще, поосторожнее с кодом, имеющим суффикс RU ;-) И в чем же заключается проблемма(ы)? спрашиваю не из праздного любопытства, мы активно пользуемся ОСВ по складу и прочими запросами с суффиксом RU, причем некоторые модифицированы |
|
15.05.2006, 15:13 | #3 |
злыдень
|
Цитата:
Сообщение от stavteam
Вопрос - такое возможно в Аксапта ?
Я просто смотрел код оборотки - там используется цикл, а сальдо и обороты извлекаются отдельными запросами. Соответственно - все промежуточныи итоги и группировки надо програмить явно. А это - очень грустно. Хочется простого и универсального механизма. Заранее благодарен за рассмотрение. Цитата:
Сообщение от stavteam
Хочется простого и универсального механизма.
Кстати, судя по навыкам в скуле Вас должен порадовать MS reporting services
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ Последний раз редактировалось Recoilme; 15.05.2006 в 15:37. |
|
15.05.2006, 16:02 | #4 |
Участник
|
Подумайте, прежде чем такой запрос пытаться осуществить (на MS-SQL). У него большая вероятность получить несогласованные данные, либо надолго заблокировать работу большого кол-ва пользователей. Как не неприятен ручной механизм получения данных, он все-же позволит избежать узких мест.
С уважением, itfs. |
|
15.05.2006, 16:20 | #5 |
Administrator
|
Вообще, прежде всего надо определиться, что конкретно Вы понимаете под оборотами и сальдо в приложении к Аксапте. Обратите внимание, что в Аксапте есть физическое и финансовое движение, даты которых могут быть расположены совершенно произвольно друг относительно друга. Кроме того, в Аксапте есть два вида возвратов: по отборочной накладной и по инвойсу. Посмотрите, как эти возвраты обрабатываются стандартными отчетами по статусу склада. Вообще, разберитесь для начала с этими отчетами. Ведь в конечном итоге одним из основных критериев правильности Вашего отчета будет соответствие остатков по складу на начало и конец отчетного периода значениям в стандартных отчетах.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
21.05.2006, 12:00 | #6 |
Участник
|
А как получить остаток на начало периода, остаток на конец периода,себестоимость (такое же поле как и в стандартном отчете ОСВ) , если я иду по InventTrans,но оборотов за данный период не было?? Заранее благодарен.
|
|
21.05.2006, 12:43 | #7 |
Administrator
|
Тогда, очевидно, Остаток на конец периода = Остаток на начало периода = Остаток на конец предыдущего периода, в котором были обороты. Себестоимости, соответственно, тоже равны.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
21.05.2006, 14:57 | #8 |
Участник
|
2MaximGorbunov: Да это очевидно и для меня. Просто вопрос в том из какой таблицы вытащить остаток на начало и себестоимость. Можно ли из InventSum (если да, то на какую дату ориентироваться), или придется из InventTrans брать сумму до определенного периода CostAmountAdjastmеnt+ CostAmount****(какое втoрое точно не помню так как дома нохожусь и Аксапты нет под рукой)???
|
|
22.05.2006, 12:27 | #9 |
Administrator
|
Теоритически, можно и так, и так. На практике: смотрите классы InventSumPhysical и InventSumFinancial.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|