AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.02.2010, 11:59   #1  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Себестоимость проданного товара SQL запросом
Добрый день,

Возникла "простая" задача: в процедуре на SQL-сервере получить себестоимость всех проданных товаров за период по всем складам (для начала).
Предполагаю, что данные нужно брать как inventTrans.CostAmountPosted+inventTrans.CostAmountAdjustment.
Есть custInvoiceTrans, которая связана с inventTrans по полям inventTransId и inventDimId.
Какие условия нужно применить, чтобы получить верную информацию?
Старый 26.02.2010, 12:52   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от 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  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Да, и кстати - Вы по какой дате собирались фильтроваться? По физической или финансовой?
Накладные CustInvoice* "датированы" финансовой (DateFinancial) датой.
А вот реальный уход со склада произведен физической (DatePhysical) датой
Просто в условие моего запроса нужно будет еще добавить статус расхода (StatusIssue), равный 1, если интересен статус Продано или 1 и 2, если еще и интересен статус Отпущено.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 26.02.2010 в 13:05.
Старый 26.02.2010, 13:20   #4  
MBurachkov is offline
MBurachkov
КОРУС Консалтинг
КОРУС Консалтинг
 
23 / 14 (1) ++
Регистрация: 18.12.2001
Адрес: Санкт-Петербург
Если нужна точная себестоимость - то нужно обязательно брать InventSettlement - там лежат все коррекции по себестоимости с учетом даты проведения операции.
__________________
Misha Burachkov
Старый 26.02.2010, 13:29   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от MBurachkov Посмотреть сообщение
Если нужна точная себестоимость - то нужно обязательно брать InventSettlement - там лежат все коррекции по себестоимости с учетом даты проведения операции.
на сколько мне известно, коррекция себестоимости записывается в поле CostAmountAdjustment в InventTrans, поэтому брать InventSettlement лишнее...

если я ошибаюсь, поправьте плиз
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 26.02.2010, 13:39   #6  
MBurachkov is offline
MBurachkov
КОРУС Консалтинг
КОРУС Консалтинг
 
23 / 14 (1) ++
Регистрация: 18.12.2001
Адрес: Санкт-Петербург
Цитата:
Сообщение от lev Посмотреть сообщение
на сколько мне известно, коррекция себестоимости записывается в поле CostAmountAdjustment в InventTrans, поэтому брать InventSettlement лишнее...

если я ошибаюсь, поправьте плиз
Не ошибаетесь, но ответ зависит от постановки вопроса. В InventTrans.CostAmountAdjustment пишутся все коррекции независимо от того, когда они возникают и это удовлетворяет бизнес-пользователей в ответе на вопрос "какая себестоимость у проданного товара". А, вот, бухгалтера такой ответ не удовлетворит - т.к. коррекция себестоимости могла быть в другом периоде, поэтому для бухгалтерии коррекции нужно брать из InventSettlement.
Учтите еще, что после закрытия склада себестоимость может поменяться и до и после закрытия один и то же запрос будет выдавать разный результат.
__________________
Misha Burachkov
За это сообщение автора поблагодарили: S.Kuskov (1), Prophetic (1).
Старый 26.02.2010, 13:48   #7  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Да, и кстати - Вы по какой дате собирались фильтроваться? По физической или финансовой?
Накладные CustInvoice* "датированы" финансовой (DateFinancial) датой.
А вот реальный уход со склада произведен физической (DatePhysical) датой
Просто в условие моего запроса нужно будет еще добавить статус расхода (StatusIssue), равный 1, если интересен статус Продано или 1 и 2, если еще и интересен статус Отпущено.
По финансовой дате. А custInvoiceTrans тогда вообще не нужен?
Старый 26.02.2010, 13:50   #8  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от MBurachkov Посмотреть сообщение
Не ошибаетесь, но ответ зависит от постановки вопроса. В InventTrans.CostAmountAdjustment пишутся все коррекции независимо от того, когда они возникают и это удовлетворяет бизнес-пользователей в ответе на вопрос "какая себестоимость у проданного товара". А, вот, бухгалтера такой ответ не удовлетворит - т.к. коррекция себестоимости могла быть в другом периоде, поэтому для бухгалтерии коррекции нужно брать из InventSettlement.
Учтите еще, что после закрытия склада себестоимость может поменяться и до и после закрытия один и то же запрос будет выдавать разный результат.
Вопрос интересный. Отчет, к примеру, берется за прошлый год, за месяц. Год и месяц закрыли. И получается, что по двум этим разным таблицам будет разный результат?
Старый 26.02.2010, 13:51   #9  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
При этом надо не забывать, что InventSettlement может чиститься стандартной процедурой, и, например, по очень старым периодам записей в таблице может не быть.

Про какую версию системы был исходный вопрос? В AX 2009 EE добавили табличку для хранения остатков и себестоимости на дату.
__________________
Ivanhoe as is..
Старый 26.02.2010, 13:54   #10  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
При этом надо не забывать, что InventSettlement может чиститься стандартной процедурой, и, например, по очень старым периодам записей в таблице может не быть.

Про какую версию системы был исходный вопрос? В AX 2009 EE добавили табличку для хранения остатков и себестоимости на дату.
AX 4.0
Старый 26.02.2010, 14:02   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Prophetic Посмотреть сообщение
По финансовой дате. А custInvoiceTrans тогда вообще не нужен?
Не нужен. А по поводу правильного алгоритма расчета коррекции - загляните в отчет InventTurnover_RU - там коррекция на дату правильно считается.
Правда там код написан не очень корректно в плане того, что отчет тем дольше строится - чем больше записей в InventTrans. Но для того чтобы понять как связывать InventTrans и InventSettlement кода будет вполне достаточно.

Только учтите, что данный отчет строится по физической, а не финансовой дате.
__________________
Возможно сделать все. Вопрос времени
Старый 26.02.2010, 14:05   #12  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Prophetic Посмотреть сообщение
Вопрос интересный. Отчет, к примеру, берется за прошлый год, за месяц. Год и месяц закрыли. И получается, что по двум этим разным таблицам будет разный результат?
Конечно. В одном случае мы имеем актуальные данные. В другом случае - исторические.
__________________
Возможно сделать все. Вопрос времени
Старый 26.02.2010, 14:10   #13  
MBurachkov is offline
MBurachkov
КОРУС Консалтинг
КОРУС Консалтинг
 
23 / 14 (1) ++
Регистрация: 18.12.2001
Адрес: Санкт-Петербург
Цитата:
Сообщение от lev Посмотреть сообщение
на сколько мне известно, коррекция себестоимости записывается в поле CostAmountAdjustment в InventTrans, поэтому брать InventSettlement лишнее...

если я ошибаюсь, поправьте плиз
Цитата:
Сообщение от Prophetic Посмотреть сообщение
Вопрос интересный. Отчет, к примеру, берется за прошлый год, за месяц. Год и месяц закрыли. И получается, что по двум этим разным таблицам будет разный результат?
В таблицах данные будут одинаковые. Я хотел сказать, что не забудте, что после закрытия склада себестоимость поменяется. Сегодня пользователь распечатал отчет и увидел маржу, завтра вы закрыли склад и маржа поменялась - пользователь прибежит с криками, что у него вчера была одна цифра, а сегодня другая.
__________________
Misha Burachkov
Старый 26.02.2010, 14:14   #14  
MBurachkov is offline
MBurachkov
КОРУС Консалтинг
КОРУС Консалтинг
 
23 / 14 (1) ++
Регистрация: 18.12.2001
Адрес: Санкт-Петербург
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Конечно. В одном случае мы имеем актуальные данные. В другом случае - исторические.
В таблицах данные одинаковые. Уточняю на всякий случай: если из Trans брать данные за период, то в него попадают корректировки из других периодов. Это не происходит при формировании коррекций из settlement.
Из trans имеет смысл брать данные для бизнеса. Из Settlement для бухгалтерии.
__________________
Misha Burachkov
Старый 26.02.2010, 14:16   #15  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от MBurachkov Посмотреть сообщение
В таблицах данные одинаковые. Уточняю на всякий случай: если из Trans брать данные за период, то в него попадают корректировки из других периодов. Это не происходит при формировании коррекций из settlement.
Из trans имеет смысл брать данные для бизнеса. Из Settlement для бухгалтерии.
А... в такой постановке согласен.
__________________
Возможно сделать все. Вопрос времени
Старый 26.02.2010, 14:39   #16  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Не нужен. А по поводу правильного алгоритма расчета коррекции - загляните в отчет InventTurnover_RU - там коррекция на дату правильно считается.
Только учтите, что данный отчет строится по физической, а не финансовой дате.
Да, благодарю. Связывается по 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. Меня уверяют, что отчет верный. Я пытаюсь в запросе получить такие же данные.

Последний раз редактировалось Prophetic; 26.02.2010 в 14:44.
Старый 26.02.2010, 14:47   #17  
MBurachkov is offline
MBurachkov
КОРУС Консалтинг
КОРУС Консалтинг
 
23 / 14 (1) ++
Регистрация: 18.12.2001
Адрес: Санкт-Петербург
Цитата:
Сообщение от 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. Меня уверяют, что отчет верный. Я пытаюсь в запросе получить такие же данные.
Посмотрите в настройках куба Axcision связки факт-таблиц и то, какую именно себестоимость хотят получить пользователи.
__________________
Misha Burachkov
Старый 26.02.2010, 14:48   #18  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5717 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
При этом надо не забывать, что InventSettlement может чиститься стандартной процедурой, и, например, по очень старым периодам записей в таблице может не быть.
При чистке сопоставлений стандартной процедурой:
1. Система может вычистить из inventSettlement отмененные и отменяющие закрытия/пересчеты (поскольку они и так не влияют на рассчет сальдо по проводке).
2. Система может несколько одинаковых по экономическому смыслу сопоставлений (одинаковые аналитики, счета, корресчета, разноски и ДАТЫ) одной складской проводки, схлопнуть в одну запись в inventSettlement.

Так что записи в таблице сопоставлений ВСЕГДА есть если сумма коррекции в складской проводке не равна нулю. И ВСЕГДА можно плясать от суммы из сопоставлений, а не из исходной складской проводки.
За это сообщение автора поблагодарили: Ivanhoe (7), Prophetic (1).
Старый 26.02.2010, 14:53   #19  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от MBurachkov Посмотреть сообщение
Посмотрите в настройках куба Axcision связки факт-таблиц и то, какую именно себестоимость хотят получить пользователи.
В Кубе привязывается inventTransPosting по полю voucher и InventTransId, а также таблица sales По полю salesid=TransRefId
Старый 26.02.2010, 15:01   #20  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от fed Посмотреть сообщение
Так что записи в таблице сопоставлений ВСЕГДА есть если сумма коррекции в складской проводке не равна нулю. И ВСЕГДА можно плясать от суммы из сопоставлений, а не из исходной складской проводки.
Т.е. "правильно" использовать именно таблицу сопоставлений.
Теги
себестоимость

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Denis Fedotenko: Себестоимость и закрытие склада Blog bot DAX: База знаний и проекты 44 29.03.2010 14:54
Зачистка товара. Себестоимость vey DAX: Функционал 17 16.02.2007 10:48
Помогите с SQL запросом malex DAX: Программирование 8 26.07.2005 13:43
Себестоимость проданного товара Hamster DAX: Функционал 3 12.08.2004 16:02
Физическая себестоимость товара Алексей Контев DAX: Функционал 5 22.08.2002 20:18

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:15.