2012-06-26 14 views
5

लागत यहाँ एक दिलचस्प लेख है कि मैं अपने प्रोजेक्ट पर उपयोगी पाया हैप्रथम-इन-फर्स्ट-आउट (फीफो) सूची

जो हम का ट्रैक गतिविधियों पर नज़र करने के लिए उपयोग

स्टॉक तालिका हमारे काल्पनिक स्टॉक गोदाम में और बाहर स्टॉक। हमारे गोदाम शुरू में खाली है, और शेयर तो या अनुवर्ती वापसी (tranCode = 'आरईटी') की वजह से स्टॉक खरीद (tranCode = 'में) की वजह से गोदाम में ले जाता है, और शेयर गोदाम जब से बाहर ले जाता है यह बेचा जाता है (tranCode = 'आउट')। प्रत्येक प्रकार के स्टॉक टेम्प को ArticleID द्वारा इंडेंट किया जाता है। में या गोदाम, एक खरीद, बिक्री या किसी खास आइटम की वापसी के कारण से बाहर स्टॉक में से हर आंदोलन, एक पंक्ति में परिणाम स्टॉक तालिका में जोड़ा जा रहा है, विशिष्ट, StockID पहचान स्तंभ में मान से पहचान और कितने का वर्णन वस्तुओं को जोड़ा या हटा दिया गया, खरीद के लिए मूल्य, लेनदेन की तारीख, और इसी तरह।

हालांकि मैं इसे अपने चल रहे प्रोजेक्ट पर उपयोग कर रहा हूं, मैं इस बात पर अटक गया कि प्रत्येक लेनदेन 'आउट' पर मूल्य-शुल्क कैसे प्राप्त किया जाए। मुझे यह निर्धारित करने के लिए यह मूल्य होना चाहिए कि मैं अपने ग्राहकों को कितना चार्ज करूंगा।

  1. पहले 8 सेब का जायजा कुल करने के लिए शेयर करने के लिए 5 सेब (प्रत्येक $ 10.00) जोड़ने के लिए, $ 50.00

  2. के लिए कुल 3 सेब (प्रत्येक $ 20.00) जोड़े, $ 110.00 की कुल कीमत के लिए

  3. फिर 6 आइटम (5 प्रत्येक $ 10.00 और 1 प्रत्येक $ 20.00) $ 70 कुल

  4. लेनदेन यह $ 40

  5. 012 के कुल के साथ 2 सेब @ $ 20 प्रत्येक छोड़ना होगा के बाद बाहर ले

Here's my current table 
Item transaction code qty  price 
apple IN     5  10.00  
apple IN     3  20.00 
apple OUT     6   

Manual computation for the OUT transaction price (FIFO) 
QTY  price total price 
5  10.00 50.00 
1  20.00 20.00 
TOTAL:6   70.00 

Output of the script: 
Item CurrentItems CurrentValue 
apple 2   40.00 

What I need: 
Item transaction code qty  price CurrentItems CurrentValue 
apple IN     5  10.00 5    50.00 
apple IN     3  20.00 8    110.00 
apple OUT     6    2     40.00 

This too will be OK 
Item transaction code qty  price CurrentItems  
apple IN     5  10.00 0    
apple IN     3  20.00 0     
apple OUT     6   70 

स्क्रिप्ट पोस्ट किया है कि जीता प्रतियोगिता बहुत उपयोगी था, मुझे आशा है कि किसी को कैसे प्रति 'बाहर' लेन-देन

+0

आपको प्रत्येक लेनदेन (इन, आउट, रेट) को एक अद्वितीय संख्या देने की आवश्यकता है ताकि आप सेब के क्यूटी और कीमत को जान सकें। उस पर आधारित आप गणना कर सकते हैं कि गणना (qty * कीमत) –

+0

स्टॉक तालिका में प्राथमिक कुंजी है। यह सिर्फ इतना है कि मैं इसे सादगी के लिए नहीं दिखाना चाहता था, मैं शब्द सेब के बजाय आइटम आईडी का भी उपयोग कर रहा हूं। आप केवल कीमत (qty * कीमत) की गणना नहीं कर सकते हैं, याद रखें कि मुझे फीफो नियम लागू करने की आवश्यकता है। – samantha07

उत्तर

0

मूल्य प्राप्त करने पर मेरी मदद कर सकते कैसे एक मेज है जो निर्माण के बारे में उत्पाद प्रति पंक्ति एक पंक्ति, इसलिए प्रत्येक सेब के लिए एक पंक्ति इसके मूल्य और उपलब्धता (बेची गई/बेची गई) के साथ डाली जाती है।
तो फिर तुम सिर्फ शीर्ष n आइटम का चयन कर सकते हैं, उत्पादों आप चाहते हैं में से प्रत्येक के साथ जुड़े मूल्य के साथ। मूलतः तुम सिर्फ मदों की एक कतार बनाने और लोगों को कि कतार के सामने (सबसे पुराना डालने की तारीख के साथ) से "बिना बिकी" हैं निकाल रहे हैं।

+0

धन्यवाद। यह वही है जो मेरी मेज कर रही है। शायद मुझे तुम्हारा मुद्दा नहीं मिला, क्या आप मुझे एक उदाहरण दे सकते हैं? – samantha07

0

लेख के आधार पर, नतीजा यह है कि स्क्रिप्ट मिल सूची का मूल्य था। आपको इसे संशोधित करने की आवश्यकता होगी ताकि सभी सूची के लिए गणना करने की बजाय, आप केवल पहले एन आइटम का उपयोग करें।

मैं प्रत्येक 'आईएन' से वस्तुओं की संख्या निर्धारित करने के लिए एक केस स्टेटमेंट का सुझाव दूंगा क्योंकि आप इनवेंटरी आइटम और जिस नंबर को लेना चाहते हैं, उसके बाद से आप चल रहे कुल के खिलाफ जांच करते हैं। अपनी मेज, अर्थात करने के लिए एक नई फ़ील्ड जोड़ें:

1

मैं नीचे के रूप में अपनी मेज डिजाइन करने के लिए सुझाव हैqty_out

बेचने से पहले तालिका:

Item transaction code qty  qty_out price 
apple IN     5 0  10.00  
apple IN     3 0  20.00 
apple OUT     6 null 

और 6 वस्तुओं की बिक्री के बाद तालिका:

Item transaction code qty  qty_out price 
apple IN     5 5  10.00  
apple IN     3 1  20.00 
apple OUT     6 null 

आप को खोजने के लिए के साथ "qty_out" (IN लेनदेन के लिए) "मात्रा" तुलना कर सकते हैं कीमत से बाहर

0

आप प्रत्येक आउट लेनदेन को ट्रैक नहीं कर सकते हैं, लेकिन आप इसे अंतिम रूप से ले कर गणना कर सकते हैं (जिसे आप गणना करेंगे) पंक्ति में या आउट करें और यह वर्तमान मान कॉलम और माइनस वर्तमान मान है जिसके लिए आप गणना करना चाहते हैं।

इस उदाहरण

StockID ArticleID TranDate TranCode Items Price CurrentItems CurrentValue 
4567  10000  10:45:07 IN   738 245.94    738 181,503.72 
21628 10000  12:05:25 OUT   600      138  33,939.72 
22571 10000  14:39:27 IN   62 199.95    200  46,336.62 
30263 10000  16:14:13 OUT   165      35  6,998.25 
42090 10000  18:18:58 RET   5      40  7,998.00 
53143 10000  20:18:54 IN   500 135.91    540  75,953.00 

लेन-देन के लिए में

30263 कीमत हो जाएगा 46,336.62 - 6,998.25 = 39,338.37

0

नीचे कोड देखें TSQL में। मूल विचार

  1. प्रत्येक के लिए

    पंक्ति बेचते हैं, का कहना है कि मात्रा मात्रा है, पहले वर्तमान पंक्ति के लिए कुल बिक्री चल गणना, यह Previous_Sold कहते हैं।

  2. चरण 1 में प्रत्येक विक्रय पंक्ति के लिए, सभी पिछली बार पंक्तियां खोजें और कुल स्टॉक यूपी खरीदने की गणना करें, इसे खरीदने के लिए पिछला_Running_Stock।

  3. चरण 2 में खरीद पंक्तियों के लिए

    , गणना

Open_Stock = Previous_Running_Stock - Previous_Sold

Close_stock = Previous_Running_Stock - Previous_Sold - मात्रा।

  1. फ़िल्टर और केवल पंक्तियों खरीदते हैं

open_stock> 0, जिसका अर्थ है वहाँ बेचने के क्रम

और close_stock < 0, अर्थ को भरने के लिए पर्याप्त स्टॉक है रखना खरीद पंक्ति से स्टॉक सभी का उपयोग किया जाता है, या सबसे पुरानी (पहली पंक्ति) जहां close_stock> = 0, जिसका मतलब है कि उस पंक्ति से खरीद आंशिक रूप से उपयोग की जाती है।

  1. कुल (का योग उत्पाद) मूल्य और मात्रा कदम 4.

में LIFO लागत पाने के लिए मेरा मानना ​​है कि यह आसानी से भी LIFO और औसत मूल्य को संशोधित किया जा सकता।

--initial table of trades 
item  item_trade_order  direction unit_price qty 
Apple  1     buy  10   100 
Apple  2     buy  9    150 
Blueberry 1     buy  5    300 
Apple  3     sell  12   50 
Apple  4     buy  11   200 
Apple  5     sell  10   350 
Blueberry 2     sell  10   50 


--code, using CTE 


; with step1 as 
(
    select * 
     , coalesce(sum(case direction when 'sell' then 1 else 0 end * qty) over(partition by item order by item_order rows between unbounded preceding and 1 preceding), 0) Previous_Sold 
    from trade 
) 
, step2_3 as 
(
    select * 
     , Previous_running_stock - Previous_Sold Open_Stock 
     , Previous_running_stock - Previous_Sold - qty Close_Stock 
     , ROW_NUMBER() over(partition by item, item_order order by (case when Previous_running_stock - Previous_Sold - qty < 0 then null else 0 - item_order end) desc) rnk 
    from step1 t1 
    cross apply 
    (
     select item_order batch_order, price batch_prc, qty batch_qty 
      , sum(qty) over(order by item_order rows unbounded preceding) Previous_running_stock 
     from trade 
     where direction = 'buy' 
     and item = t1.item 
     and item_order < t1.item_order 
    ) batch 
    where t1.direction = 'sell' 
) 
, step4 as 
(
    select * 
    from step2_3 
    where Open_Stock > 0 
    and (Close_Stock < 0 or rnk = 1) 
) 
select item, item_order, direction, AVG(price) prc, AVG(qty) qty 
    , sum(case when Close_Stock > 0 then batch_qty - close_stock else case when open_stock < batch_qty then open_stock else batch_qty end end * Batch_Prc)/nullif(avg(qty), 0) FifoUnitCost 
from step4 
group by item, item_order, direction 
order by item, item_order 
संबंधित मुद्दे