|
26.02.2010, 11:59 | #1 |
Участник
|
Себестоимость проданного товара SQL запросом
Добрый день,
Возникла "простая" задача: в процедуре на SQL-сервере получить себестоимость всех проданных товаров за период по всем складам (для начала). Предполагаю, что данные нужно брать как inventTrans.CostAmountPosted+inventTrans.CostAmountAdjustment. Есть custInvoiceTrans, которая связана с inventTrans по полям inventTransId и inventDimId. Какие условия нужно применить, чтобы получить верную информацию? |
|
26.02.2010, 12:52 | #2 |
Administrator
|
Цитата:
Сообщение от Prophetic
Добрый день,
Возникла "простая" задача: в процедуре на SQL-сервере получить себестоимость всех проданных товаров за период по всем складам (для начала). Предполагаю, что данные нужно брать как inventTrans.CostAmountPosted+inventTrans.CostAmountAdjustment. Есть custInvoiceTrans, которая связана с inventTrans по полям inventTransId и inventDimId. Какие условия нужно применить, чтобы получить верную информацию? SELECT SUM(CostAmountPosted) + SUM(CostAmountAdjustment) FROM INVENTRANS WHERE TRANSTYPE = 0 -- Заказ на продажу Но. Ключевое слово "За период". Так Вы получите только текущую себестоимость, т.е. с учетом всех введенных коррекций и накладных расходов. Т.е., строя запрос на 01.01.10 Вы получите себестоимость уже с учетом накладных расходов, которые допустим были введены 01.02.10 Т.о. если Вы планируете по этому запросу "сверяться" с ГК - то у Вас цифры могут не сойтись. Также, тут учтутся все возвраты по заказам на продажу. И если где-то не проставлен номер возвращенного лота - то возвраты будут учтены с нулевой ценой. При этом тут не учтутся прочие списания товара со склада (в результате недостачи к примеру или возвраты поставщикам).
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Prophetic (1). |
26.02.2010, 13:01 | #3 |
Administrator
|
Да, и кстати - Вы по какой дате собирались фильтроваться? По физической или финансовой?
Накладные CustInvoice* "датированы" финансовой (DateFinancial) датой. А вот реальный уход со склада произведен физической (DatePhysical) датой Просто в условие моего запроса нужно будет еще добавить статус расхода (StatusIssue), равный 1, если интересен статус Продано или 1 и 2, если еще и интересен статус Отпущено.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 26.02.2010 в 13:05. |
|
26.02.2010, 13:48 | #4 |
Участник
|
Цитата:
Сообщение от sukhanchik
Да, и кстати - Вы по какой дате собирались фильтроваться? По физической или финансовой?
Накладные CustInvoice* "датированы" финансовой (DateFinancial) датой. А вот реальный уход со склада произведен физической (DatePhysical) датой Просто в условие моего запроса нужно будет еще добавить статус расхода (StatusIssue), равный 1, если интересен статус Продано или 1 и 2, если еще и интересен статус Отпущено. |
|
26.02.2010, 14:02 | #5 |
Administrator
|
Не нужен. А по поводу правильного алгоритма расчета коррекции - загляните в отчет InventTurnover_RU - там коррекция на дату правильно считается.
Правда там код написан не очень корректно в плане того, что отчет тем дольше строится - чем больше записей в InventTrans. Но для того чтобы понять как связывать InventTrans и InventSettlement кода будет вполне достаточно. Только учтите, что данный отчет строится по физической, а не финансовой дате.
__________________
Возможно сделать все. Вопрос времени |
|
26.02.2010, 14:39 | #6 |
Участник
|
Цитата:
Но, для начала, нужно посчитать просто СostAmountPosted. Попробую обойтись без custInvoiceTrans. Я написал вот что: Код: set @DtBeg = N'01.12.2009' set @DtEnd = N'31.12.2009' select sum(itr.CostAmountPosted) from inventTrans itr where itr.TransType = 0 and itr.StatusIssue = 1 or itr.statusIssue=2 and itr.dateFinancial <=@DtEnd Поясню -- у меня есть отчет по продажам, сделанный в Axcision. Меня уверяют, что отчет верный. Я пытаюсь в запросе получить такие же данные. Последний раз редактировалось Prophetic; 26.02.2010 в 14:44. |
|
26.02.2010, 14:47 | #7 |
КОРУС Консалтинг
|
Цитата:
Сообщение от Prophetic
Да, благодарю. Связывается по inventTable.RecID, если я правильно понял.
Но, для начала, нужно посчитать просто СostAmountPosted. Попробую обойтись без custInvoiceTrans. Я написал вот что: Код: set @DtBeg = N'01.12.2009' set @DtEnd = N'31.12.2009' select sum(itr.CostAmountPosted) from inventTrans itr where itr.TransType = 0 and itr.StatusIssue = 1 or itr.statusIssue=2 and itr.dateFinancial <=@DtEnd Поясню -- у меня есть отчет по продажам, сделанный в Axcision. Меня уверяют, что отчет верный. Я пытаюсь в запросе получить такие же данные.
__________________
Misha Burachkov |
|
26.02.2010, 15:17 | #8 |
Administrator
|
Цитата:
Цитата:
Иначе - косяк получится. Вы просуммируете все проводки в статусе Отпущено независимо от даты (т.к. 1900-й год заведомо раньше). Так что в Вашем запросе фразу or itr.statusIssue=2 лучше убрать
__________________
Возможно сделать все. Вопрос времени |
|
26.02.2010, 13:20 | #9 |
КОРУС Консалтинг
|
Если нужна точная себестоимость - то нужно обязательно брать InventSettlement - там лежат все коррекции по себестоимости с учетом даты проведения операции.
__________________
Misha Burachkov |
|
26.02.2010, 13:29 | #10 |
Ищущий знания...
|
Цитата:
если я ошибаюсь, поправьте плиз
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
26.02.2010, 13:39 | #11 |
КОРУС Консалтинг
|
Цитата:
Учтите еще, что после закрытия склада себестоимость может поменяться и до и после закрытия один и то же запрос будет выдавать разный результат.
__________________
Misha Burachkov |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1), Prophetic (1). |
26.02.2010, 13:50 | #12 |
Участник
|
Цитата:
Сообщение от MBurachkov
Не ошибаетесь, но ответ зависит от постановки вопроса. В InventTrans.CostAmountAdjustment пишутся все коррекции независимо от того, когда они возникают и это удовлетворяет бизнес-пользователей в ответе на вопрос "какая себестоимость у проданного товара". А, вот, бухгалтера такой ответ не удовлетворит - т.к. коррекция себестоимости могла быть в другом периоде, поэтому для бухгалтерии коррекции нужно брать из InventSettlement.
Учтите еще, что после закрытия склада себестоимость может поменяться и до и после закрытия один и то же запрос будет выдавать разный результат. |
|
26.02.2010, 14:05 | #13 |
Administrator
|
Конечно. В одном случае мы имеем актуальные данные. В другом случае - исторические.
__________________
Возможно сделать все. Вопрос времени |
|
26.02.2010, 14:10 | #14 |
КОРУС Консалтинг
|
Цитата:
__________________
Misha Burachkov |
|
26.02.2010, 13:51 | #15 |
Участник
|
При этом надо не забывать, что InventSettlement может чиститься стандартной процедурой, и, например, по очень старым периодам записей в таблице может не быть.
Про какую версию системы был исходный вопрос? В AX 2009 EE добавили табличку для хранения остатков и себестоимости на дату.
__________________
Ivanhoe as is.. |
|
26.02.2010, 13:54 | #16 |
Участник
|
Цитата:
Сообщение от Ivanhoe
При этом надо не забывать, что InventSettlement может чиститься стандартной процедурой, и, например, по очень старым периодам записей в таблице может не быть.
Про какую версию системы был исходный вопрос? В AX 2009 EE добавили табличку для хранения остатков и себестоимости на дату. |
|
26.02.2010, 14:48 | #17 |
Moderator
|
Цитата:
1. Система может вычистить из inventSettlement отмененные и отменяющие закрытия/пересчеты (поскольку они и так не влияют на рассчет сальдо по проводке). 2. Система может несколько одинаковых по экономическому смыслу сопоставлений (одинаковые аналитики, счета, корресчета, разноски и ДАТЫ) одной складской проводки, схлопнуть в одну запись в inventSettlement. Так что записи в таблице сопоставлений ВСЕГДА есть если сумма коррекции в складской проводке не равна нулю. И ВСЕГДА можно плясать от суммы из сопоставлений, а не из исходной складской проводки. |
|
|
За это сообщение автора поблагодарили: Ivanhoe (7), Prophetic (1). |
26.02.2010, 15:01 | #18 |
Участник
|
|
|
26.02.2010, 15:04 | #19 |
Moderator
|
Правильно, но долго Тупой запрос по inventTrans быстрее отрабатывает, хотя и выдает неправильные данные для даты из прошлого.
Хотя с другой стороны - если вы все равно данные потом в куб закачиваете, большой беды от замедления выборки в два раза не будет, так что можно всегда от inventSettlement идти... |
|
|
За это сообщение автора поблагодарили: Prophetic (1). |
26.02.2010, 16:46 | #20 |
Administrator
|
А в остальном запрос у Вас остался тот же? А то там суммируется все на конечную дату - т.е. мы имеем сумму товара в ценах себестоимости, который отгрузили с начала времен до 31.12.09.
И почему бы ей не быть безумной? Возьмите сумму по CustInvoiceTrans.LineAmount за тот же период (сумма отгрузок в ценах продажи) и сравните. Может будет такая же безумная сумма
__________________
Возможно сделать все. Вопрос времени |
|
Теги |
себестоимость |
|
Похожие темы | ||||
Тема | Ответов | |||
Denis Fedotenko: Себестоимость и закрытие склада | 44 | |||
Зачистка товара. Себестоимость | 17 | |||
Помогите с SQL запросом | 8 | |||
Себестоимость проданного товара | 3 | |||
Физическая себестоимость товара | 5 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|