天天看點

通過外挂程式實作SBO中的價格控制政策

寫在前面

竟然做起了基于SBO的開發。

SBO 2004 2B是一個輕型的企業業務管理軟體,結構和架構設計的很不錯,也很靈活。但是畢竟是國外産品,進入到中國,還是要有水土适應期。

本來,SBO是提供軟體開發接口的,但是SBO的軟體供應商沒有進行很好的交接,這些資料完全沒有,不過在網上看到更多的是,SBO的開發版SDK是需要Money的。

既然沒有更多的資料,也隻能憑借自身的經驗和對SBO軟體的淺薄了解做一些力所能力的開發了。

開發需求

對全省各個門店實行商品的價格控制,價格控制方案為:

1、預設情況下對公司經營的所有商品進行價格控制。

2、根據銷售量、銷售趨勢、毛利潤、廠家政策、季節因素、經營性質(經銷、代銷)商品動态定義産品的價格控制類型為正常、主流、主推、特價等10個價格控制類型。

3、不同品類的不同價格類型的具有不同的價格控制參數(就是說:銷售價格必須不低于成本價*(1+r),其中r是價格控制參數)。

4、支援按照以下方式進行價格政策排除:

    A、某門店或者某幾個門店的所有商品不參加價格控制

    B、某品類或者某幾個品類商品不參加價格控制

    C、某門店或者某幾個門店的某個品類或者某幾個品類在某個時段内不參加價格控制

    D、某門店的某種或者某些單品在某個時段内不參加價格控制

程式實作

在SBO 2004 2B中無法直接實作上述的價格控制,需要二次開發。開發方案如下:

1、資料結構

為了完成以上的價格控制政策,需要對SBO的資料結構進行如下修改。

1.1、加入使用者表:u_SHOP,用于定義門店屬性,其中包括字段ShopID, ShopName。為了對價格控制予以支援,還有字段:bNoPCtrl,bit, 不參加價格控制标志,預設為0;SDATE, EDATE,不參加價格控制的時段。

1.2、對門店倉庫進行屬性擴充,加入門店屬性,字段為u_ShopID。

1.3、對操作員進行門店屬性擴充,每個操作員特别的銷售人員門店位置化,加入門店屬性,字段為u_ShopID。

1.4、對采銷發票資訊、明細清單門店化,加入門店屬性,字段為u_ShopID。

1.5、對商品主檔案表加入價格控制級别字段:u_CPriType char(1),支援62個類别(0-9, a-z, A-Z)。 

1.6、加入使用者表:u_MPCList,用于定義品類價格控制參數,主要字段:itmsGrpCod 商品品類, CPriType 價格控制類型, cRate 價格控制參數,CFlag 是否啟用此價格控制方案, DFlag 是否按照時段進行價控, SDate, EDate,如果按照時段價控的起止時間。如果不啟用此價控方案,按照時段進行價控及其時段參數都将無效。

1.7、加入使用者表:u_NPCList,用于定義門店價控排除的品類,主要字段:ShopID 門店, itmsGrpCod 品類, CFlag 是否啟用此價控排除方案, DFlag 是否按照時段進行價控排除, SDate, EDate,如果按照時段價控排除的起止時間。如果不啟用此價控排除方案,按照時段進行價控排除及其時段參數都将無效。

1.8、加入使用者表:u_NPCItems,用于定義門店價控排除的單品,主要字段:ShopID 門店, itmCode 品類, CFlag 是否啟用此價控排除方案, SDate, EDate,價控排除的起止時間。

2、商品價控類别

因為可能涉及到公司經營機密,價格控制類别的算法略。價格控制類别動态完成之後,可以通過UI界面進行維護和調整。

應該說,上述資料結構通過UI界面進行增加删除修改的操作,也是很容易實作的。以下顯示的是商品價格控制排除維護界面,更多的實作界面略。(可以使用不同的語言來實作,VS.NET 2005是非常好的開發平台,推薦一下

通過外挂程式實作SBO中的價格控制政策

3、價格控制

上面的資料結構實作了,價格控制其實就很簡單了。在銷售存盤的時候通過以下SQL為主體的存儲過程進行銷售價格控制校驗即可。

if Exists(select top 1 1 from u_sysparm where SPID='PriCtrlPalicy' and PARM='YES!')

begin

   declare @shopid nvarchar(20)

   select @shopid=u_part from oinv where docEntry=@nEntry

   if not exists (select top 1 1 from u_shop a where a.u_shopid=@shopid and isnull(a.u_bNoPCtrl,0)=1)

   begin

    --價格控制

    if exists( select top 1 1 from

      union all

      select a.itemcode, b.itemName, a.Price, c.sRate from inv1 a, oitm b, u_mpcList c, oinv d where a.docentry=@nEntry and a.itemcode=b.itemcode and a.docEntry=d.docEntry and b.u_priCType=c.priCType and b.itmsgrpcod=c.itmsgrpcod and isNull(uFlag,0)=1 and isNUll(dFlag,0)=1 and a.docDate>=c.sdate and a.docDate<=c.edate

(select inv1.itemcode, case p1.price when 0 then oitw.avgprice*1.17 else p1.price end avgprice  from inv1 inner join oitw on inv1.itemcode=oitw.itemcode and inv1.whscode=oitw.whscode inner join oitm on inv1.itemcode=oitm.itemcode left join itm1 p1 on inv1.itemcode=p1.itemcode and p1.pricelist=2  where inv1.docentry=@nEntry

     where a.itemcode=b.itemcode and cast(Price as numeric(20,0))<cast(avgprice*(1+sRate/100) as numeric(20,0)) )

    begin

     select '您所銷售的商品低于最低限價, 銷售被拒絕!'

     return -1

    end

    select ''

    return 0

end

本文轉自foresun  51CTO部落格,原文連結:http://blog.51cto.com/foresun/40490,如需轉載請自行聯系原作者

繼續閱讀