12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795 |
- $PBExportHeader$uo_cusprice.sru
- forward
- global type uo_cusprice from nonvisualobject
- end type
- end forward
- global type uo_cusprice from nonvisualobject
- end type
- global uo_cusprice uo_cusprice
- type variables
- Int uo_option_checkprice_native
- Int uo_option_price_rmb
- Int uo_option_saleprice_list_rebate
- Long cur_poid
- datastore ds_pzmx
- boolean if_chk_mxlist = false //报价时用,true时,使用客户价格表, false时,自己选择价格表
- //boolean if_cmpl_mtrl_chg_auto = True
- boolean if_cmpl_zhpz_pf = false
- //string cmpl_zhpz_cfgname = ''
- s_mtrlcfg_expr s_zhpz[]
- end variables
- forward prototypes
- Public Function Integer uof_autodel_cuspricemx (DateTime arg_begindate, Boolean arg_ifcommit, Ref String arg_msg)
- Public Function Integer uof_del_cusprice (Long arg_cusid, Long arg_mtrlid, DateTime arg_opdate, Long arg_printid, Long arg_moneyid, Boolean arg_ifcommit, Ref String arg_msg)
- public function integer uof_pricestr_cmp (string arg_pricestr, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price)
- Public Function Integer uof_update_custprice (Integer arg_ifth, Long arg_scid, Long arg_cusid, Long arg_mtrlid, String arg_mtrlcode, String arg_status, String arg_woodcode, String arg_pcode, Long arg_outwareid, String arg_outwarecode, DateTime arg_outdate, Decimal arg_fprice, Decimal arg_zqrate, Decimal arg_cost, Long arg_flag, String arg_dscrp, Long arg_printid, Integer arg_buildtype, Long arg_moneyid, Decimal arg_qty, Decimal arg_qty1, Boolean arg_ifcommit, Ref String arg_msg)
- public function integer uof_check_price_saletask (long arg_typeid, long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, long arg_moneyid, long arg_scid, long arg_quoteid, long arg_quoteprintid, decimal arg_price, decimal arg_qty, ref string arg_msg)
- public function integer uof_check_price (long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, decimal arg_price, decimal arg_qty, ref string arg_msg)
- public function integer uof_getmtrlcusprice (long arg_moneyid, long arg_mtrlid, long arg_cusid, ref decimal arg_price, ref decimal arg_zqrate, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg)
- public function integer uof_getprice_saletask (long arg_moneyid, long arg_cusid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_scid, long arg_quoteid, long arg_quoteprintid, integer arg_typeid, ref decimal arg_price, ref decimal arg_rebate, ref string arg_msg)
- public function integer uof_get_pricelistid (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_moneyid, ref long arg_pricelistid, ref string arg_msg)
- Public Function Integer uof_chk_pricelistid (Long arg_moneyid, Ref Long arg_pricelistid, Ref String arg_msg)
- Public Function Integer uof_del_cusprice_auto (Long arg_cusid, Long arg_outwareid, Long arg_printid, Long arg_mtrlid, String arg_status, String arg_woodcode, String arg_pcode, Integer arg_buildtype, Long arg_moneyid, Decimal arg_qty, Decimal arg_qty1, Boolean arg_ifcommit, Ref String arg_msg)
- public function integer uf_cmpl_price_zhpz (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg)
- public function integer uf_cmpl_price (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, integer arg_price_ifpz, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg)
- public function integer uof_get_pricelistinfo (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_status_ori, string arg_woodcode_ori, string arg_pcode_ori, decimal arg_qty, long arg_pricelistid, ref decimal arg_lmsaleprice, ref integer arg_flag, ref string arg_listname, ref decimal arg_rebate, ref string arg_msg)
- public function integer uof_get_pricelist_price (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_status_ori, string arg_woodcode_ori, string arg_pcode_ori, decimal arg_qty, long arg_pricelistid, long arg_moneyid, ref decimal arg_lmsaleprice, ref integer arg_flag, ref string arg_listname, ref decimal arg_rebate, ref string arg_msg)
- public function integer uf_cmpl_price_pack (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, integer arg_price_ifpz, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg)
- public function integer uof_get_mtrl_bjpz (ref datastore ds, long arg_pztype, long arg_type, string arg_col_value_dft, string arg_col_value, integer arg_mtrlpztype, ref string arg_msg)
- public function integer uof_get_mtrl_ygpz (ref datastore ds, long arg_pztype, long arg_type, string arg_col_value_dft, string arg_col_value, ref string arg_msg)
- public function integer uof_get_mtrl_3pz_difprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_difprice, ref string arg_msg)
- public function integer uof_getprice_quote (long arg_moneyid, long arg_pricelistid, long arg_cusid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_scid, ref decimal arg_price, ref decimal arg_rebate, ref string arg_msg)
- end prototypes
- Public Function Integer uof_autodel_cuspricemx (DateTime arg_begindate, Boolean arg_ifcommit, Ref String arg_msg);
- //uf_autodel_cuspricemx(arg_begindate,arg_ifcommit,arg_msg)
- //自动删除客户销售价格明细?指定时间以前的
- Long rslt = 1
- Long cnt = 0
- //参数检查
- IF arg_begindate < DateTime(Date('1900-01-01'),Time(0)) THEN MessageBox('提示','日期太早了')
- IF Trim(arg_msg) = '' THEN arg_msg = ''
- //删除时间范围内的记录
- IF MessageBox(' 重要提示','删除指定时间以前所有商品采购历史价格记录(不能恢复),确认吗?',Exclamation!,OKCancel!) = 1 THEN
- DELETE FROM u_spt_price_mx
- Where u_spt_price_mx.opdate <= :arg_begindate;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络或其他原因删除失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT;
- END IF
- RETURN rslt
- END Function
- Public Function Integer uof_del_cusprice (Long arg_cusid, Long arg_mtrlid, DateTime arg_opdate, Long arg_printid, Long arg_moneyid, Boolean arg_ifcommit, Ref String arg_msg);
- Int rslt = 1
- Long cnt = 0
- SELECT count(*)
- INTO :cnt
- FROM u_cust
- Where u_cust.cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络和其他原因查询客户资料失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF cnt = 0 THEN
- rslt = 0
- arg_msg = '客户不存在'
- GOTO ext
- END IF
- SELECT count(*)
- INTO :cnt
- FROM u_mtrldef
- Where u_mtrldef.mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络和其他原因查询物料资料失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF cnt = 0 THEN
- rslt = 0
- arg_msg = '物料不存在'
- GOTO ext
- END IF
- DELETE FROM u_cus_price_mx
- WHERE u_cus_price_mx.cusid = :arg_cusid
- AND u_cus_price_mx.mtrlid = :arg_mtrlid
- AND u_cus_price_mx.opdate = :arg_opdate
- AND u_cus_price_mx.printid = :arg_printid
- And u_cus_price_mx.moneyid = :arg_moneyid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT;
- END IF
- RETURN rslt
- END Function
- public function integer uof_pricestr_cmp (string arg_pricestr, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price);
- Int rslt = 1
- String s_rtn
- datastore ds_pricestr
- ds_pricestr = Create datastore
- ds_pricestr.DataObject = 'ds_pricestr_cmpl'
- ds_pricestr.SetTransObject(sqlca)
- ds_pricestr.Retrieve()
- IF Trim(arg_pricestr) = '' THEN
- rslt = 2
- GOTO ext
- END IF
- SELECT Top 1 Replace( :arg_pricestr,'不包含',' not like ') Into :arg_pricestr From u_user;
- SELECT Top 1 Replace( :arg_pricestr,'不等于','<>') Into :arg_pricestr From u_user;
- SELECT Top 1 Replace( :arg_pricestr,'包含',' like ') Into :arg_pricestr From u_user;
- SELECT Top 1 Replace( :arg_pricestr,'等于',' = ') Into :arg_pricestr From u_user;
- //'配置'需放在最后一行, 因为配置1, 配置2 没替换的话,有可能导致替换剩下个1 或2
- SELECT Top 1 Replace( :arg_pricestr,'配置1',"'"+:arg_woodcode+"'") Into :arg_pricestr From u_user;
- SELECT Top 1 Replace( :arg_pricestr,'配置2',"'"+:arg_pcode+"'") Into :arg_pricestr From u_user;
- SELECT Top 1 Replace( :arg_pricestr,'配置',"'"+:arg_status+"'") Into :arg_pricestr From u_user;
- ds_pricestr.Modify('cmpl.expression= "'+arg_pricestr+'"')
- s_rtn = String(ds_pricestr.Object.cmpl[1])
- IF s_rtn = 'false' THEN
- rslt = 0
- arg_price = 0
- ELSE
- arg_price = Round(Dec(s_rtn),5)
- END IF
- ext:
- Destroy ds_pricestr
- RETURN rslt
- end function
- Public Function Integer uof_update_custprice (Integer arg_ifth, Long arg_scid, Long arg_cusid, Long arg_mtrlid, String arg_mtrlcode, String arg_status, String arg_woodcode, String arg_pcode, Long arg_outwareid, String arg_outwarecode, DateTime arg_outdate, Decimal arg_fprice, Decimal arg_zqrate, Decimal arg_cost, Long arg_flag, String arg_dscrp, Long arg_printid, Integer arg_buildtype, Long arg_moneyid, Decimal arg_qty, Decimal arg_qty1, Boolean arg_ifcommit, Ref String arg_msg);
- Long rslt = 1
- Long cnt = 0
- DateTime server_dt
- IF arg_ifth = 1 THEN
- rslt = 1
- GOTO ext
- END IF
- //检查参数
- IF IsNull(arg_cusid) THEN arg_cusid = 0
- IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
- IF IsNull(arg_status) THEN arg_status = ''
- IF IsNull(arg_woodcode) THEN arg_woodcode = ''
- IF IsNull(arg_pcode) THEN arg_pcode = ''
- IF IsNull(arg_moneyid) THEN arg_moneyid = 0
- IF IsNull(arg_qty) THEN arg_qty = 0
- IF IsNull(arg_qty1) THEN arg_qty1 = 0
- IF arg_outdate <= DateTime(Date('1900-01-01'),Time(0)) THEN
- rslt = 0
- arg_msg = '错误的发生时间'
- GOTO ext
- END IF
- arg_outwarecode = Trim(arg_outwarecode)
- //获得服务器时间
- SELECT Top 1 getdate() Into :server_dt From u_user;
- //检查客户存在否
- SELECT count(*)
- INTO :cnt
- FROM u_cust
- Where u_cust.cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络和其他原因查询客户资料失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF cnt = 0 THEN
- rslt = 0
- arg_msg = '客户不存在'
- GOTO ext
- END IF
- cnt = 0
- SELECT count(*) INTO :cnt
- FROM cw_currency
- Where moneyid = :arg_moneyid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询币种失败'
- rslt = 0
- GOTO ext
- END IF
- IF cnt = 0 THEN
- arg_msg = '币种资料不存在'
- rslt = 0
- GOTO ext
- END IF
- //检查商品存在否
- SELECT count(*)
- INTO :cnt
- FROM u_mtrldef
- Where u_mtrldef.mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络和其他原因查询物料:'+arg_mtrlcode+'失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF cnt = 0 THEN
- rslt = 0
- arg_msg = '物料不存在:'+arg_mtrlcode
- GOTO ext
- END IF
- // //检查数量范围内是否有重复?
- //SELECT count(*)
- // INTO :cnt
- // FROM u_cus_price
- // WHERE u_cus_price.cusid = :arg_cusid AND
- // u_cus_price.mtrlid = :arg_mtrlid AND
- // u_cus_price.status = :arg_status AND
- // u_cus_price.woodcode = :arg_woodcode AND
- // u_cus_price.pcode = :arg_pcode and
- // ( ( u_cus_price.qty > :arg_qty) AND (u_cus_price.qty < :arg_qty1) or
- // ( u_cus_price.qty1 > :arg_qty) AND (u_cus_price.qty1 < :arg_qty1) ) and
- // u_cus_price.moneyid = :arg_moneyid
- // u_cus_price.ifcancel = 0 ;
- //IF sqlca.SQLCode <> 0 THEN
- // rslt = 0
- // arg_msg = '因网络和其他原因查询客户产品:'+arg_mtrlcode+'最新价格失败'+sqlca.SQLErrText
- // GOTO ext
- //END IF
- //
- //IF cnt > 0 THEN
- // rslt = 0
- // arg_msg = '物料:'+arg_mtrlcode+"数量范围:"+string(arg_qty,'#,##0.#####')+'到'+string(arg_qty1,'#,##0.#####') +'有重叠'
- // GOTO ext
- //END IF
- //1.更新客户销售价表
- SELECT count(*)
- INTO :cnt
- FROM u_cus_price
- WHERE u_cus_price.cusid = :arg_cusid AND
- u_cus_price.mtrlid = :arg_mtrlid AND
- u_cus_price.status = :arg_status AND
- u_cus_price.woodcode = :arg_woodcode AND
- u_cus_price.pcode = :arg_pcode AND
- ( u_cus_price.qty = :arg_qty) AND
- (u_cus_price.qty1 = :arg_qty1) AND
- u_cus_price.moneyid = :arg_moneyid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络和其他原因查询客户产品:'+arg_mtrlcode+'最新价格失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF cnt > 0 THEN
- IF arg_buildtype = 0 THEN
- UPDATE u_cus_price
- SET u_cus_price.cusid = :arg_cusid,
- u_cus_price.mtrlid = :arg_mtrlid,
- u_cus_price.price = :arg_fprice * :arg_zqrate,
- u_cus_price.fprice = :arg_fprice,
- u_cus_price.zqrate = :arg_zqrate,
- u_cus_price.sys_changetime = getdate(),
- u_cus_price.ifcancel = 0
- WHERE u_cus_price.cusid = :arg_cusid AND
- u_cus_price.mtrlid = :arg_mtrlid AND
- u_cus_price.status = :arg_status AND
- u_cus_price.woodcode = :arg_woodcode AND
- u_cus_price.pcode = :arg_pcode AND
- ( u_cus_price.qty = :arg_qty) AND
- (u_cus_price.qty1 = :arg_qty1) AND
- u_cus_price.moneyid = :arg_moneyid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络和其它原因,客户销售价表更新'+arg_mtrlcode+'失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- ELSEIF arg_buildtype = 2 THEN
- UPDATE u_cus_price
- SET u_cus_price.cusid = :arg_cusid,
- u_cus_price.mtrlid = :arg_mtrlid,
- u_cus_price.price_bj = :arg_fprice * :arg_zqrate,
- u_cus_price.fprice_bj = :arg_fprice,
- u_cus_price.zqrate_bj = :arg_zqrate,
- u_cus_price.sys_changetime = getdate(),
- u_cus_price.ifcancel = 0
- WHERE u_cus_price.cusid = :arg_cusid AND
- u_cus_price.mtrlid = :arg_mtrlid AND
- u_cus_price.status = :arg_status AND
- u_cus_price.woodcode = :arg_woodcode AND
- u_cus_price.pcode = :arg_pcode AND
- ( u_cus_price.qty = :arg_qty) AND
- (u_cus_price.qty1 = :arg_qty1) AND
- u_cus_price.moneyid = :arg_moneyid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络和其它原因,客户销售价表更新'+arg_mtrlcode+'失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
- ELSEIF cnt = 0 THEN
- IF arg_buildtype = 0 THEN
- INSERT INTO u_cus_price
- (cusid,
- mtrlid,
- price,
- fprice,
- zqrate,
- dscrp,
- status,
- woodcode,
- pcode,
- moneyid,
- sys_changetime,
- qty,
- qty1)
- VALUES
- (:arg_cusid,
- :arg_mtrlid,
- :arg_fprice * :arg_zqrate,
- :arg_fprice,
- :arg_zqrate,
- :arg_dscrp,
- :arg_status,
- :arg_woodcode,
- :arg_pcode,
- :arg_moneyid,
- getdate(),
- :arg_qty,
- :arg_qty1);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络或其他原因,新增客户销售'+arg_mtrlcode+'价格失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- ELSEIF arg_buildtype = 2 THEN
- INSERT INTO u_cus_price
- (cusid,
- mtrlid,
- price_bj,
- fprice_bj,
- zqrate_bj,
- dscrp,
- status,
- woodcode,
- pcode,
- moneyid,
- sys_changetime,
- qty,
- qty1)
- VALUES
- (:arg_cusid,
- :arg_mtrlid,
- :arg_fprice * :arg_zqrate,
- :arg_fprice,
- :arg_zqrate,
- :arg_dscrp,
- :arg_status,
- :arg_woodcode,
- :arg_pcode,
- :arg_moneyid,
- getdate(),
- :arg_qty,
- :arg_qty1);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络或其他原因,新增客户销售'+arg_mtrlcode+'价格失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
- END IF
- //2.插入客户销售变动明细价表
- INSERT INTO u_cus_price_mx
- (
- u_cus_price_mx.cusid,
- u_cus_price_mx.mtrlid,
- u_cus_price_mx.opdate,
- u_cus_price_mx.opemp,
- u_cus_price_mx.outwareid,
- u_cus_price_mx.outwarecode,
- u_cus_price_mx.outdate,
- u_cus_price_mx.price,
- u_cus_price_mx.fprice,
- u_cus_price_mx.zqrate,
- u_cus_price_mx.cost,
- u_cus_price_mx.status,
- u_cus_price_mx.woodcode,
- u_cus_price_mx.pcode,
- u_cus_price_mx.dscrp,
- u_cus_price_mx.buildtype,
- u_cus_price_mx.printid,
- u_cus_price_mx.moneyid,
- u_cus_price_mx.qty,
- u_cus_price_mx.qty1
- )
- VALUES
- (
- :arg_cusid,
- :arg_mtrlid,
- getdate(),
- :publ_operator,
- :arg_outwareid,
- :arg_outwarecode,
- :arg_outdate,
- :arg_fprice* :arg_zqrate,
- :arg_fprice,
- :arg_zqrate,
- :arg_cost,
- :arg_status,
- :arg_woodcode,
- :arg_pcode,
- :arg_dscrp,
- :arg_flag,
- :arg_printid,
- :arg_moneyid,
- :arg_qty,
- :arg_qty1
- );
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络或其他原因,登记在客户,'+arg_mtrlcode+'售价变动明细表失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSEIF arg_ifcommit And rslt = 1 THEN
- COMMIT;
- END IF
- RETURN rslt
- END Function
- public function integer uof_check_price_saletask (long arg_typeid, long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, long arg_moneyid, long arg_scid, long arg_quoteid, long arg_quoteprintid, decimal arg_price, decimal arg_qty, ref string arg_msg);
- Decimal ld_lmsaleprice,ld_rebate
- String ls_cusname,ls_listname
- Long ll_pricelistid
- Int rslt = 1 //,li_flag
- Long cnt = 0
- Long ll_moneyid,ll_moneyid_pricelist
- s_mtrlcfg_expr s_pz[]
- Long ll_statusflag
- Long ll_i
- String ls_status_zj
- Decimal ld_price_zj,ld_rebate_zj,obj_price
- Long ll_row
- String ls_poexpr,ls_rtn,ls_mtrlcode
- String ls_price
- String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode
- Int li_selecttype,li_price_ifpz
- uo_price_order uo_po
- uo_po = Create uo_price_order
- IF Not f_power_ind(492,sys_msg_pow) Or sys_power_issuper THEN
- rslt = 1
- GOTO ext
- END IF
- IF uo_option_checkprice_native = -1000 THEN
- rslt = 0
- arg_msg = '选项:[056]销售价按本位币限价,读取初始默认值失败,操作取消!'
- GOTO ext
- END IF
- //IF uo_option_price_if_status = -1000 THEN
- // rslt = 0
- // arg_msg = '选项:[021]销售价按颜色约束,读取初始默认值失败,操作取消!'
- // GOTO ext
- //END IF
- String ls_status_ori,ls_woodcode_ori,ls_pcode_ori
- ls_status_ori = arg_status
- ls_woodcode_ori = arg_woodcode
- ls_pcode_ori = arg_pcode
- SELECT selecttype INTO :li_selecttype
- FROM u_saletype
- Where typeid = :arg_typeid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询销售订单分类信息失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- SELECT statusflag,mtrlcode,mtrlsectype,zxmtrlmode,usermtrlmode,price_ifpz
- INTO :ll_statusflag,:ls_mtrlcode,:ls_mtrlsectype,:ls_zxmtrlmode,:ls_usermtrlmode,:li_price_ifpz
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF uo_option_checkprice_native = 1 THEN
- SELECT moneyid INTO :ll_moneyid
- FROM cw_currency
- Where native = 1;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询本位币资料失败,可能本位币资料不存在,请检查'
- rslt = 0
- GOTO ext
- END IF
- ELSE
- ll_moneyid = arg_moneyid
- END IF
- Dec ld_rebate_cus
- SELECT name,pricelistid,rebate INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus
- FROM u_cust
- Where cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询客户资料失败,请检查'
- rslt = 0
- GOTO ext
- END IF
- /////// //检查价格指令
- datastore ds_price
- ds_price = uo_po.uof_getorderprice(arg_cusid, arg_mtrlid, arg_status, arg_woodcode, arg_pcode,arg_qty, arg_msg)
- ll_row = ds_price.RowCount()
- //////////////////// //
- IF ll_row = 0 THEN
- SELECT name,pricelistid INTO :ls_cusname,:ll_pricelistid
- FROM u_cust
- Where cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询操作失败,客户资料"
- GOTO ext
- END IF
-
- IF li_selecttype = 2 And ll_pricelistid = 0 THEN
- rslt = 0
- arg_msg = '销售订单分类设为"只能选客户价格表",但当前客户没有指定价格表,请检查'
- GOTO ext
- END IF
-
-
- IF arg_quoteid = 0 THEN
- IF li_selecttype = 1 THEN //只能选择报价历史
- SELECT top 1 u_cus_price.fprice_bj,u_cus_price.zqrate_bj
- INTO :ld_lmsaleprice,:ld_rebate
- FROM u_cus_price
- WHERE ( u_cus_price.cusid = :arg_cusid ) AND
- ( u_cus_price.mtrlid = :arg_mtrlid ) AND
- ( u_cus_price.status = :arg_status ) AND
- ( u_cus_price.pcode = :arg_pcode ) AND
- ( u_cus_price.woodcode = :arg_woodcode )
- AND ( (u_cus_price.qty = 0 OR u_cus_price.qty <= :arg_qty)
- AND (u_cus_price.qty1 = 0 OR u_cus_price.qty1 >= :arg_qty)) AND
- ( u_cus_price.moneyid = :arg_moneyid)
- Order By sys_changetime Desc;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询产品:"+arg_mtrlcode+" 最新报价失败 " +sqlca.SQLErrText
- GOTO ext
- END IF
-
- IF arg_price < ld_lmsaleprice THEN
- rslt = 0
- arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price,'#,##0.00##')+'} 低于销售限价{'+String(ld_lmsaleprice,'#,##0.00##')+'}'
- GOTO ext
- END IF
-
- ELSE
-
- IF ll_statusflag = 2 And arg_status <> '' THEN
- //组合配置 ,计算价格
- IF uf_cmpl_price_zhpz(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF arg_price < obj_price THEN
- rslt = 0
- arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}'
- GOTO ext
- END IF
- ELSE
- //非组合配置, 查询价格
- IF uf_cmpl_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF arg_price < obj_price * ld_rebate THEN
- rslt = 0
- arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}'
- GOTO ext
- END IF
-
- END IF
-
- END IF
- ELSE
- SELECT u_quotemx.sumprice_1
- INTO :ld_lmsaleprice
- FROM u_quotemx
- WHERE scid = :arg_scid
- AND quoteid = :arg_quoteid
- And printid = :arg_quoteprintid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询产品:'+arg_mtrlcode+'报价单报价失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
-
- IF arg_price < ld_lmsaleprice THEN
- rslt = 0
- arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price,'#,##0.00##')+'} 低于报价单报价{'+String(ld_lmsaleprice,'#,##0.00##')+'}'
- GOTO ext
- END IF
-
- END IF
-
- ELSE
- ls_poexpr = ds_price.Object.poexpr[1]
- ls_price = String(arg_price,'###0.##########')
- SELECT Top 1 Replace( :ls_poexpr,'目标价',:ls_price) Into :ls_poexpr From u_user;
-
- IF Pos(ls_poexpr,'{') > 0 And Pos(ls_poexpr,'}') > 0 THEN
- ll_pricelistid = Long(Mid(ls_poexpr,Pos(ls_poexpr,'[') + 1,Pos(ls_poexpr,']') - Pos(ls_poexpr,'[') - 1))
-
- IF ll_statusflag = 2 And arg_status <> '' THEN
- //组合配置 ,计算价格
- IF uf_cmpl_price_zhpz(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- ELSE
- //非组合配置, 查询价格
- IF uf_cmpl_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- obj_price = obj_price * ld_rebate
-
- END IF
- ls_poexpr = Replace(ls_poexpr,Pos(ls_poexpr,'{'),Pos(ls_poexpr,'}') - Pos(ls_poexpr,'{') + 1,String(obj_price,'###0.00########'))
- END IF
-
- datastore dw_price_check
- dw_price_check = Create datastore
- dw_price_check.DataObject = 'dw_compute_priceorder'
- dw_price_check.InsertRow(0)
- dw_price_check.Modify("compute.expression='"+ls_poexpr+"'")
-
- ls_rtn = String(dw_price_check.Object.compute[ll_row])
- IF ls_rtn = 'false' THEN
- rslt = 0
- arg_msg = '产品:'+ls_mtrlcode+'销售价格受到价格指令限制,不能通过{'+ls_poexpr+'}'
- GOTO ext
- END IF
-
- END IF
- ext:
- Destroy uo_po
- RETURN rslt
- end function
- public function integer uof_check_price (long arg_cusid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, decimal arg_price, decimal arg_qty, ref string arg_msg);
- Decimal ld_lmsaleprice,ld_rebate
- String ls_cusname,ls_listname
- Long ll_pricelistid
- Int rslt = 1//,li_flag
- Long cnt = 0
- Long ll_moneyid,ll_moneyid_pricelist
- s_mtrlcfg_expr s_pz[]
- Long ll_statusflag
- Long ll_i
- String ls_status_zj
- Decimal ld_price_zj,ld_rebate_zj,obj_price
- Long ll_row
- String ls_poexpr,ls_rtn,ls_mtrlcode
- String ls_price
- String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode
- Int li_price_ifpz
- uo_price_order uo_po
- uo_po = Create uo_price_order
- IF Not f_power_ind(492,sys_msg_pow) Or sys_power_issuper THEN
- rslt = 1
- GOTO ext
- END IF
- IF uo_option_checkprice_native = -1000 THEN
- rslt = 0
- arg_msg = '选项:[056]销售价按本位币限价,读取初始默认值失败,操作取消!'
- GOTO ext
- END IF
- //IF uo_option_price_if_status = -1000 THEN
- // rslt = 0
- // arg_msg = '选项:[021]销售价按颜色约束,读取初始默认值失败,操作取消!'
- // GOTO ext
- //END IF
- String ls_status_ori,ls_woodcode_ori,ls_pcode_ori
- ls_status_ori = arg_status
- ls_woodcode_ori = arg_woodcode
- ls_pcode_ori = arg_pcode
- SELECT statusflag,mtrlcode,mtrlsectype,zxmtrlmode,usermtrlmode ,price_ifpz
- INTO :ll_statusflag,:ls_mtrlcode,:ls_mtrlsectype,:ls_zxmtrlmode,:ls_usermtrlmode ,:li_price_ifpz
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF uo_option_checkprice_native = 1 THEN
- SELECT moneyid INTO :ll_moneyid
- FROM cw_currency
- Where native = 1;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询本位币资料失败,可能本位币资料不存在,请检查'
- rslt = 0
- GOTO ext
- END IF
- ELSE
- ll_moneyid = arg_moneyid
- END IF
- decimal ld_rebate_cus
- SELECT name,pricelistid,rebate INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus
- FROM u_cust
- Where cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询客户资料失败,请检查'
- rslt = 0
- GOTO ext
- END IF
- /////// //检查价格指令
- datastore ds_price
- ds_price = uo_po.uof_getorderprice(arg_cusid, arg_mtrlid, arg_status, arg_woodcode, arg_pcode,arg_qty, arg_msg)
- ll_row = ds_price.RowCount()
- //////////////////// //
- IF ll_row = 0 THEN //没有价格指令 , 按价格表检查
- SELECT name,pricelistid INTO :ls_cusname,:ll_pricelistid
- FROM u_cust
- Where cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询操作失败,客户资料"
- GOTO ext
- END IF
-
- IF ll_statusflag = 2 And arg_status <> '' THEN
- //组合配置 ,计算价格
- IF uf_cmpl_price_zhpz(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF arg_price < obj_price THEN
- rslt = 0
- arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}'
- GOTO ext
- END IF
-
- // f_checkpz(arg_status,s_pz[])
- // arg_pcode = ''
- // arg_woodcode = ''
- // obj_price = 0
- // FOR ll_i = 1 To UpperBound(s_pz)
- // ls_status_zj = s_pz[ll_i].cfgname
- // ld_price_zj = 0
- // ld_rebate_zj = 0
- //
- // //取价格表 内容
- // IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, ls_status_zj, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_lmsaleprice, li_flag, ls_listname, ld_rebate, arg_msg) = 0 THEN
- // rslt = 0
- // GOTO ext
- // END IF
- //
- //
- // obj_price = obj_price + ld_lmsaleprice * ld_rebate * Dec(s_pz[ll_i].qty)
- // NEXT
-
- // IF arg_price < obj_price THEN
- // rslt = 0
- // arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}'
- // GOTO ext
- // END IF
- ELSE
- //非组合配置, 查询价格
- IF uf_cmpl_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF arg_price < obj_price * ld_rebate THEN
- rslt = 0
- arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(obj_price,'#,##0.00##')+'}'
- GOTO ext
- END IF
-
- // CHOOSE CASE li_price_ifpz
- // CASE 0
- // arg_status = ''
- // arg_woodcode = ''
- // arg_pcode = ''
- // CASE 1
- // arg_pcode = ''
- // arg_woodcode = ''
- // CASE 2
- // arg_status = ''
- // arg_pcode = ''
- // CASE 3
- // arg_status = ''
- // arg_woodcode = ''
- // CASE 4
- // arg_pcode = ''
- // CASE 5
- // arg_status = ''
- // CASE 6
- // arg_woodcode = ''
- // END CHOOSE
- //
- // //取价格表 内容
- // IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_lmsaleprice, li_flag, ls_listname, ld_rebate, arg_msg) = 0 THEN
- // rslt = 0
- // GOTO ext
- // END IF
- //
- // IF arg_price < ld_lmsaleprice * ld_rebate THEN
- // rslt = 0
- // arg_msg = '客户:'+ls_cusname+',产品:'+arg_mtrlcode+'销售单价{'+String(arg_price * ld_rebate,'#,##0.00##')+'} 低于销售限价{'+String(ld_lmsaleprice,'#,##0.00##')+'}'
- // GOTO ext
- // END IF
- END IF
- ELSE //有价格指令, 按指令检测
- ls_poexpr = ds_price.Object.poexpr[1]
- ls_price = String(arg_price,'###0.##########')
- SELECT Top 1 Replace( :ls_poexpr,'目标价',:ls_price) Into :ls_poexpr From u_user;
-
- IF Pos(ls_poexpr,'{') > 0 And Pos(ls_poexpr,'}') > 0 THEN
- ll_pricelistid = Long(Mid(ls_poexpr,Pos(ls_poexpr,'[') + 1,Pos(ls_poexpr,']') - Pos(ls_poexpr,'[') - 1))
-
- IF ll_statusflag = 2 And arg_status <> '' THEN
- //组合配置 ,计算价格
- IF uf_cmpl_price_zhpz(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- // f_checkpz(arg_status,s_pz[])
- // arg_pcode = ''
- // arg_woodcode = ''
- // obj_price = 0
- // FOR ll_i = 1 To UpperBound(s_pz)
- // ls_status_zj = s_pz[ll_i].cfgname
- // ld_price_zj = 0
- // ld_rebate_zj = 0
- //
- // //取价格表 内容
- // IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, ls_status_zj, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_lmsaleprice, li_flag, ls_listname, ld_rebate, arg_msg) = 0 THEN
- // rslt = 0
- // GOTO ext
- // END IF
- //
- // obj_price = obj_price + ld_lmsaleprice * ld_rebate * Dec(s_pz[ll_i].qty)
- // NEXT
-
- ELSE
- //非组合配置, 查询价格
- IF uf_cmpl_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- obj_price = obj_price * ld_rebate
-
- // CHOOSE CASE li_price_ifpz
- // CASE 0
- // arg_status = ''
- // arg_woodcode = ''
- // arg_pcode = ''
- // CASE 1
- // arg_pcode = ''
- // arg_woodcode = ''
- // CASE 2
- // arg_status = ''
- // arg_pcode = ''
- // CASE 3
- // arg_status = ''
- // arg_woodcode = ''
- // CASE 4
- // arg_pcode = ''
- // CASE 5
- // arg_status = ''
- // CASE 6
- // arg_woodcode = ''
- // END CHOOSE
- //
- // //取价格表 内容
- // IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_lmsaleprice, li_flag, ls_listname, ld_rebate, arg_msg) = 0 THEN
- // rslt = 0
- // GOTO ext
- // END IF
- //
- // obj_price = ld_lmsaleprice * ld_rebate
- END IF
- ls_poexpr = Replace(ls_poexpr,Pos(ls_poexpr,'{'),Pos(ls_poexpr,'}') - Pos(ls_poexpr,'{') + 1,String(obj_price,'###0.00########'))
- END IF
-
- datastore dw_price_check
- dw_price_check = Create datastore
- dw_price_check.DataObject = 'dw_compute_priceorder'
- dw_price_check.InsertRow(0)
- dw_price_check.Modify("compute.expression='"+ls_poexpr+"'")
-
- ls_rtn = String(dw_price_check.Object.compute[ll_row])
- IF ls_rtn = 'false' THEN
- rslt = 0
- arg_msg = '产品:'+ls_mtrlcode+'销售价格受到价格指令限制,不能通过{'+ls_poexpr+'}'
- GOTO ext
- END IF
-
- END IF
- ext:
- Destroy uo_po
- RETURN rslt
- end function
- public function integer uof_getmtrlcusprice (long arg_moneyid, long arg_mtrlid, long arg_cusid, ref decimal arg_price, ref decimal arg_zqrate, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg);
- Int rslt = 1
- Long cnt = 0
- Long count = 1
- Decimal rtn_price,rtn_zqrate
- s_mtrlcfg_expr s_pz[]
- DateTime server_time
- String ls_cusname,ls_listname
- Long ll_moneyid,ll_moneyid_pricelist
- Long ll_pricelistid
- Decimal ld_lmsaleprice,ld_rebate
- //Int li_flag
- Long ll_i
- String ls_status_zj
- Decimal ld_price_zj,ld_rebate_zj
- Decimal obj_price
- Long ll_row
- String ls_poexpr,ls_rtn,ls_mtrlcode
- String ls_price,ls_objprice
- String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode
- Long ll_kind
- String ls_pricestr
- Int li_rslt_cmp
- Decimal ld_rebate_cus
- Decimal ld_price_cmp
- uo_price_order uo_po
- uo_po = Create uo_price_order
- IF uo_option_checkprice_native = -1000 THEN
- rslt = 0
- arg_msg = '选项:[056]销售价按本位币限价,读取初始默认值失败,操作取消!'
- GOTO ext
- END IF
- IF uo_option_saleprice_list_rebate = -1000 THEN
- rslt = 0
- arg_msg = '选项:[237]客户价格表折扣按客户设定,读取初始默认值失败,操作取消!'
- GOTO ext
- END IF
- String ls_status_ori,ls_woodcode_ori,ls_pcode_ori
- ls_status_ori = arg_status
- ls_woodcode_ori = arg_woodcode
- ls_pcode_ori = arg_pcode
- Long ll_statusflag
- Int li_price_ifpz
- SELECT statusflag,mtrlsectype,zxmtrlmode,usermtrlmode,mtrlcode,price_ifpz
- INTO :ll_statusflag,:ls_mtrlsectype,:ls_zxmtrlmode,:ls_usermtrlmode,:ls_mtrlcode,:li_price_ifpz
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF uo_option_checkprice_native = 1 THEN
- SELECT moneyid INTO :ll_moneyid
- FROM cw_currency
- Where native = 1;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询本位币资料失败,可能本位币资料不存在,请检查'
- rslt = 0
- GOTO ext
- END IF
- ELSE
- ll_moneyid = arg_moneyid
- END IF
- //价格指令的在单据上再检查,这里不考虑
- SELECT name,pricelistid,rebate INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus
- FROM u_cust
- Where cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 2
- rtn_price = 0.00
- rtn_zqrate = 1
- GOTO ext
- END IF
- IF ll_statusflag = 2 And arg_status <> '' THEN
- //组合配置 ,计算价格
- IF uf_cmpl_price_zhpz(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 2
- rtn_price = 0.00
- rtn_zqrate = 1
- GOTO ext
- END IF
- rtn_price = obj_price
- rtn_zqrate = ld_rebate
-
- ELSE
- //非组合配置 ,计算价格
- IF uf_cmpl_price(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid, ll_moneyid, ld_rebate_cus, li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN
- rslt = 2
- rtn_price = 0.00
- rtn_zqrate = 1
- GOTO ext
- END IF
- rtn_price = obj_price
- rtn_zqrate = ld_rebate
- END IF
- ext:
- arg_price = rtn_price
- arg_zqrate = rtn_zqrate
- Destroy uo_po
- RETURN rslt
- end function
- public function integer uof_getprice_saletask (long arg_moneyid, long arg_cusid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_scid, long arg_quoteid, long arg_quoteprintid, integer arg_typeid, ref decimal arg_price, ref decimal arg_rebate, ref string arg_msg);
- //产品价格表公式与产品价格策略的限制
- //1.产品价格策略已设置限制的配置不能应用于价格表公式;
- //例如:产品价格策略 选择为 不使用 ; 则价格表公式可以用 配置 配置1, 配置2 设置公式;
- // 产品价格策略 选择为 配置 ; 则价格表公式不能是用 配置 , 但可以用 配置1, 配置2 设置公式;
- // 产品价格策略 选择为 配置 + 配置1; 则价格表公式不能是用 配置 或 配置1 , 但可以用 配置2 设置公式;
- // 产品价格策略 选择为 配置 + 配置1 + 配置3; 则价格表公式不能使用;
- Int rslt = 1
- Long ll_statusflag,li_price_ifpz
- String ls_mtrlcode
- String ls_cusname
- Long ll_pricelistid,ll_pricelistid_arr[],ll_mxbt = 0,ll_pricelistid_tmp
- Decimal ld_lmsaleprice,ld_rebate,obj_price,ld_rebate_arr[],ld_rebate_tmp
- Long ll_i
- String ls_status_zj
- //Int li_flag
- String ls_listname
- Decimal ld_rebate_cus
- Decimal rtn_price,rtn_zqrate
- Int li_selecttype, li_hispriceflag
- Int li_suc = 0
- Int li_ifpackpro,li_ifpricepack
- Long ll_moneyid_native
- Decimal lde_difprice
- s_mtrlcfg_expr s_pz[]
- IF uo_option_saleprice_list_rebate = -1000 THEN
- rslt = 0
- arg_msg = '选项:[237]客户价格表折扣按客户设定,读取初始默认值失败,操作取消!'
- GOTO ext
- END IF
- IF uo_option_price_rmb = -1000 THEN
- rslt = 0
- arg_msg = '选项:[238]销售单价按人民币单价折算,读取初始默认值失败,操作取消!'
- GOTO ext
- END IF
- String ls_status_ori,ls_woodcode_ori,ls_pcode_ori
- ls_status_ori = arg_status
- ls_woodcode_ori = arg_woodcode
- ls_pcode_ori = arg_pcode
- //yyx2012-12-11
- IF uo_option_price_rmb = 1 THEN
- SELECT moneyid INTO :ll_moneyid_native
- From cw_currency Where native = 1;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询本位币种失败,请检查币种是否设置了本位币'
- rslt = 0
- GOTO ext
- END IF
-
- arg_moneyid = ll_moneyid_native
- END IF
- //
- IF f_get_selecttype(arg_typeid,arg_cusid,li_selecttype,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- SELECT hispriceflag INTO :li_hispriceflag
- FROM u_saletype
- Where typeid = :arg_typeid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询销售订单分类选择限制属性失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- SELECT statusflag,mtrlcode,price_ifpz,ifpackpro,ifpricepack
- INTO :ll_statusflag,:ls_mtrlcode,:li_price_ifpz,:li_ifpackpro,:li_ifpricepack
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- GOTO ext
- END IF
- SELECT name,pricelistid,rebate
- INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus
- FROM u_cust
- Where cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询操作失败,客户资料"
- GOTO ext
- END IF
- ll_mxbt = 1
- ll_pricelistid_arr[ll_mxbt] = ll_pricelistid
- ld_rebate_arr[ll_mxbt] = ld_rebate_cus
- DECLARE cur_listmx CURSOR FOR
- SELECT pricelistid,rebate
- FROM u_cus_pricelist_mx
- WHERE cusid = :arg_cusid
- Order By printid;
-
- OPEN cur_listmx;
- FETCH cur_listmx Into :ll_pricelistid_tmp,:ld_rebate_tmp;
- DO WHILE sqlca.SQLCode = 0
- ll_mxbt++
- ll_pricelistid_arr[ll_mxbt] = ll_pricelistid_tmp
- ld_rebate_arr[ll_mxbt] = ld_rebate_tmp
-
- FETCH cur_listmx Into :ll_pricelistid_tmp,:ld_rebate_tmp;
- LOOP
- CLOSE cur_listmx;
- IF li_selecttype = 2 And ll_pricelistid = 0 THEN
- rslt = 0
- arg_msg = '选择限制为"只能选客户价格表",但当前客户没有指定价格表,请检查'
- GOTO ext
- END IF
- IF arg_quoteid > 0 THEN //选择报价单
- SELECT u_quotemx.sumprice_1,
- u_quotemx.rebate
- INTO :ld_lmsaleprice,
- :ld_rebate
- FROM u_quotemx
- WHERE scid = :arg_scid
- AND quoteid = :arg_quoteid
- And printid = :arg_quoteprintid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询产品:'+ls_mtrlcode+'报价单报价失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
-
- rtn_price = ld_lmsaleprice
- rtn_zqrate = ld_rebate
- ELSE
- IF li_selecttype = 1 THEN //只能选择报价历史
- SELECT top 1 u_cus_price.fprice_bj,u_cus_price.zqrate_bj
- INTO :ld_lmsaleprice,:ld_rebate
- FROM u_cus_price
- WHERE ( u_cus_price.cusid = :arg_cusid ) AND
- ( u_cus_price.mtrlid = :arg_mtrlid ) AND
- ( u_cus_price.status = :arg_status ) AND
- ( u_cus_price.pcode = :arg_pcode ) AND
- ( u_cus_price.woodcode = :arg_woodcode )
- AND ( (u_cus_price.qty = 0 OR u_cus_price.qty <= :arg_qty)
- AND (u_cus_price.qty1 = 0 OR u_cus_price.qty1 >= :arg_qty))
- AND ( u_cus_price.moneyid = :arg_moneyid)
- AND ( u_cus_price.ifcancel = 0 )
- Order By sys_changetime Desc;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询产品:"+ls_mtrlcode+" 最新报价失败 " +sqlca.SQLErrText
- GOTO ext
- END IF
-
- rtn_price = ld_lmsaleprice
- rtn_zqrate = ld_rebate
-
- ELSE
-
- If (li_selecttype = 0 Or li_selecttype = 2) And li_hispriceflag = 1 THEN //取客户最新销售价
- SELECT top 1 u_cus_price.fprice,u_cus_price.zqrate
- INTO :ld_lmsaleprice,:ld_rebate
- FROM u_cus_price
- WHERE ( u_cus_price.cusid = :arg_cusid ) AND
- ( u_cus_price.mtrlid = :arg_mtrlid ) AND
- ( u_cus_price.status = :arg_status ) AND
- ( u_cus_price.pcode = :arg_pcode ) AND
- ( u_cus_price.woodcode = :arg_woodcode )
- AND ( (u_cus_price.qty = 0 OR u_cus_price.qty <= :arg_qty)
- AND (u_cus_price.qty1 = 0 OR u_cus_price.qty1 >= :arg_qty))
- AND ( u_cus_price.moneyid = :arg_moneyid)
- Order By sys_changetime Desc;
- IF sqlca.SQLCode <> 0 THEN
- ld_lmsaleprice = 0
- ld_rebate = 0
- END IF
-
- rtn_price = ld_lmsaleprice
- rtn_zqrate = ld_rebate
-
-
- ELSE //选价格表: 1.组合配置产品按组合计算; 2.包件产品按子件计算; 3.其他常规产品直接取价
- FOR ll_i = 1 To ll_mxbt //循环所有该客户有效价格表
-
- IF ll_statusflag = 2 And arg_status <> '' And li_ifpricepack = 0 THEN //组合配置且非整套计算
- //组合配置 ,计算价格
- //如果不按整套,分开子件查价格
- //如果价格按整套,则用整个配置信息查价格
-
- IF uf_cmpl_price_zhpz(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], obj_price, ld_rebate, arg_msg) = 0 THEN
- CONTINUE
- ELSE
- rtn_price = obj_price
- rtn_zqrate = ld_rebate
- li_suc = 1
- EXIT
- END IF
- ELSEIF li_ifpackpro <> 0 And li_ifpricepack = 0 THEN //包件产品且非整套计算
- //2.包件产品,按清单拆分, 取子件价格汇总作为包件价格
- IF uf_cmpl_price_pack(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN
- CONTINUE
- ELSE
- rtn_price = obj_price
- rtn_zqrate = ld_rebate
- li_suc = 1
- EXIT
- END IF
- ELSE //整套计算 or 其他常规取价
- //1.整套计算单价的
- //2.非组合配置的
- //3.非包件产品的
- IF uf_cmpl_price(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN
- CONTINUE
- ELSE
- rtn_price = obj_price
- rtn_zqrate = ld_rebate
- li_suc = 1
- EXIT
- END IF
- END IF
-
- NEXT
-
- //if li_suc = 1 取价成功, 统计部件选配自动换料计算差价
- IF li_suc = 1 THEN
- IF uof_get_mtrl_3pz_difprice(arg_mtrlid, arg_status, arg_woodcode, arg_pcode, lde_difprice, arg_msg) = 0 THEN
- lde_difprice = 0
- END IF
-
- rtn_price = rtn_price + lde_difprice
- // rtn_zqrate = ld_rebate
- // li_suc = 1
- END IF
-
- IF li_suc = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- END IF
-
- END IF
-
- END IF
- ext:
- arg_price = rtn_price
- arg_rebate = rtn_zqrate
- RETURN rslt
- end function
- public function integer uof_get_pricelistid (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_moneyid, ref long arg_pricelistid, ref string arg_msg);
- //取可用价格表,或检查价格表币种
- Int rslt = 1
- Long ll_moneyid_pricelist
- IF arg_pricelistid = 0 THEN
- SELECT u_sale_price_list.pricelistid INTO :arg_pricelistid
- FROM u_sale_price_list,u_sale_price_mx
- WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid
- AND u_sale_price_mx.mtrlid = :arg_mtrlid
- AND u_sale_price_mx.status = :arg_status
- AND u_sale_price_mx.pcode = :arg_pcode
- AND u_sale_price_mx.woodcode = :arg_woodcode
- AND ( (u_sale_price_mx.saleqty = 0 OR u_sale_price_mx.saleqty <= :arg_qty)
- AND (u_sale_price_mx.saleqty1 = 0 OR u_sale_price_mx.saleqty1 >= :arg_qty))
- AND u_sale_price_list.moneyid = :arg_moneyid
- And u_sale_price_list.dftflag = 1;
-
- IF sqlca.SQLCode = 0 THEN
- IF sqlca.SQLNRows = 0 THEN
- rslt = 0
- arg_msg = "产品:"+arg_mtrlcode+",配置:"+arg_status+",标准价格表未设定"
- GOTO ext
- ELSEIF sqlca.SQLNRows > 1 THEN
- rslt = 0
- arg_msg = "产品:"+arg_mtrlcode+",配置:"+arg_status+",有多于两个标准价格表"
- GOTO ext
- END IF
- ELSE
- rslt = 0
- arg_msg = "查询产品:"+arg_mtrlcode+",配置:"+arg_status+",标准价格表操作失败"
- GOTO ext
- END IF
- ELSE
- //检查价格表和对应币种
- IF uof_chk_pricelistid(arg_moneyid, arg_pricelistid, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- ext:
- RETURN rslt
- end function
- Public Function Integer uof_chk_pricelistid (Long arg_moneyid, Ref Long arg_pricelistid, Ref String arg_msg);
- //检查价格表和币种是否对应
- Int rslt = 1
- Long ll_moneyid_pricelist
- IF arg_pricelistid > 0 THEN
-
- SELECT moneyid INTO :ll_moneyid_pricelist
- FROM u_sale_price_list
- Where u_sale_price_list.pricelistid = :arg_pricelistid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询客户价格表对应币种失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- IF ll_moneyid_pricelist <> arg_moneyid THEN
- arg_msg = '客户价格表对应币种与检查币种不相符,请检查'
- rslt = 0
- GOTO ext
- END IF
- END IF
- ext:
- RETURN rslt
- END Function
- Public Function Integer uof_del_cusprice_auto (Long arg_cusid, Long arg_outwareid, Long arg_printid, Long arg_mtrlid, String arg_status, String arg_woodcode, String arg_pcode, Integer arg_buildtype, Long arg_moneyid, Decimal arg_qty, Decimal arg_qty1, Boolean arg_ifcommit, Ref String arg_msg);
- Int rslt = 1
- Long cnt = 0,ll_cnt = 0
- DateTime ld_opdate
- //检查客户存在否
- SELECT count(*)
- INTO :cnt
- FROM u_cust
- Where u_cust.cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络和其他原因查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF cnt = 0 THEN
- rslt = 0
- arg_msg = '客户不存在'
- GOTO ext
- END IF
- cnt = 0
- SELECT count(*) INTO :cnt
- FROM cw_currency
- Where moneyid = :arg_moneyid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询币种失败'
- rslt = 0
- GOTO ext
- END IF
- IF cnt = 0 THEN
- arg_msg = '币种资料不存在'
- rslt = 0
- GOTO ext
- END IF
- //检查商品存在否
- SELECT count(*)
- INTO :cnt
- FROM u_mtrldef
- Where u_mtrldef.mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '因网络和其他原因查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF cnt = 0 THEN
- rslt = 0
- arg_msg = '物料不存在'
- GOTO ext
- END IF
- SELECT count(*) INTO :cnt
- FROM u_cus_price_MX
- WHERE u_cus_price_MX.cusid = :arg_cusid
- AND u_cus_price_MX.mtrlid = :arg_mtrlid
- AND u_cus_price_MX.outwareid = :arg_outwareid
- AND u_cus_price_MX.printid = :arg_printid
- AND u_cus_price_MX.status = :arg_status
- AND u_cus_price_MX.woodcode = :arg_woodcode
- AND u_cus_price_MX.pcode = :arg_pcode
- AND u_cus_price_MX.buildtype = :arg_buildtype
- AND u_cus_price_MX.moneyid = :arg_moneyid
- AND u_cus_price_MX.qty = :arg_qty
- And u_cus_price_mx.qty1 = :arg_qty1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF cnt = 0 THEN
- rslt = 1
- GOTO ext
- END IF
- SELECT top 1 Opdate INTO :ld_opdate
- FROM u_cus_price_MX
- WHERE u_cus_price_MX.cusid = :arg_cusid
- AND u_cus_price_MX.mtrlid = :arg_mtrlid
- AND u_cus_price_MX.outwareid = :arg_outwareid
- AND u_cus_price_MX.printid = :arg_printid
- AND u_cus_price_MX.status = :arg_status
- AND u_cus_price_MX.woodcode = :arg_woodcode
- AND u_cus_price_MX.pcode = :arg_pcode
- AND u_cus_price_mx.buildtype = :arg_buildtype
- AND u_cus_price_mx.moneyid = :arg_moneyid
- AND u_cus_price_MX.qty = :arg_qty
- AND u_cus_price_MX.qty1 = :arg_qty1
- Order By opdate Desc;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- SELECT count(*) INTO :cnt
- FROM u_cus_price_MX
- WHERE u_cus_price_MX.cusid = :arg_cusid
- AND u_cus_price_MX.mtrlid = :arg_mtrlid
- AND u_cus_price_MX.status = :arg_status
- AND u_cus_price_MX.woodcode = :arg_woodcode
- AND u_cus_price_MX.pcode = :arg_pcode
- AND u_cus_price_MX.buildtype = :arg_buildtype
- AND u_cus_price_mx.moneyid = :arg_moneyid
- AND u_cus_price_MX.Opdate > :ld_opdate
- AND u_cus_price_MX.qty = :arg_qty
- And u_cus_price_mx.qty1 = :arg_qty1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- Decimal ld_fprice,ld_zqrate,ld_price
- DateTime ld_sys_changetime,ld_nulldt
- SetNull(ld_nulldt)
- IF cnt = 0 THEN //如果被删明细是最新,用次新明细更新最新价
- SELECT count(*) INTO :ll_cnt
- FROM u_cus_price_MX
- WHERE u_cus_price_MX.cusid = :arg_cusid
- AND u_cus_price_MX.mtrlid = :arg_mtrlid
- AND u_cus_price_MX.status = :arg_status
- AND u_cus_price_MX.woodcode = :arg_woodcode
- AND u_cus_price_MX.pcode = :arg_pcode
- AND u_cus_price_MX.buildtype = :arg_buildtype
- AND u_cus_price_mx.moneyid = :arg_moneyid
- AND u_cus_price_MX.Opdate < :ld_opdate
- AND u_cus_price_MX.qty = :arg_qty
- And u_cus_price_mx.qty1 = :arg_qty1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
-
- IF ll_cnt = 0 THEN
- ld_fprice = 0
- ld_zqrate = 1
- ld_price = 0
- ld_sys_changetime = DateTime(Today(),Now())
- ELSE
- SELECT top 1 fprice,zqrate,price,sys_changetime
- INTO :ld_fprice,:ld_zqrate,:ld_price,:ld_sys_changetime
- FROM u_cus_price_MX
- WHERE u_cus_price_MX.cusid = :arg_cusid
- AND u_cus_price_MX.mtrlid = :arg_mtrlid
- AND u_cus_price_MX.status = :arg_status
- AND u_cus_price_MX.woodcode = :arg_woodcode
- AND u_cus_price_MX.pcode = :arg_pcode
- AND u_cus_price_MX.buildtype = :arg_buildtype
- AND u_cus_price_mx.moneyid = :arg_moneyid
- AND u_cus_price_MX.Opdate < :ld_opdate
- AND u_cus_price_MX.qty = :arg_qty
- AND u_cus_price_MX.qty1 = :arg_qty1
- Order By u_cus_price_mx.opdate Desc;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
-
- IF arg_buildtype = 0 THEN
- UPDATE u_cus_price
- SET fprice = :ld_fprice ,
- zqrate = :ld_zqrate,
- price = :ld_price,
- sys_changetime = :ld_sys_changetime
- WHERE u_cus_price.cusid = :arg_cusid
- AND u_cus_price.mtrlid = :arg_mtrlid
- AND u_cus_price.status = :arg_status
- AND u_cus_price.woodcode = :arg_woodcode
- AND u_cus_price.pcode = :arg_pcode
- AND u_cus_price.moneyid = :arg_moneyid
- AND u_cus_price.qty = :arg_qty
- And u_cus_price.qty1 = :arg_qty1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新最新销售价失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- ELSEIF arg_buildtype = 2 THEN
- UPDATE u_cus_price
- SET fprice_bj = :ld_fprice ,
- zqrate_bj = :ld_zqrate,
- price_bj = :ld_price,
- sys_changetime = :ld_sys_changetime
- WHERE u_cus_price.cusid = :arg_cusid
- AND u_cus_price.mtrlid = :arg_mtrlid
- AND u_cus_price.status = :arg_status
- AND u_cus_price.woodcode = :arg_woodcode
- AND u_cus_price.pcode = :arg_pcode
- AND u_cus_price.moneyid = :arg_moneyid
- AND u_cus_price.qty = :arg_qty
- And u_cus_price.qty1 = :arg_qty1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新最新报价失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
- END IF
- //删除手动添加价格
- DELETE FROM u_cus_price_MX
- WHERE u_cus_price_MX.cusid = :arg_cusid
- AND u_cus_price_MX.mtrlid = :arg_mtrlid
- AND u_cus_price_MX.outwareid = :arg_outwareid
- AND u_cus_price_MX.printid = :arg_printid
- AND u_cus_price_MX.buildtype = :arg_buildtype
- AND u_cus_price_MX.status = :arg_status
- AND u_cus_price_MX.woodcode = :arg_woodcode
- AND u_cus_price_MX.pcode = :arg_pcode
- AND u_cus_price_MX.moneyid = :arg_moneyid
- AND u_cus_price_MX.qty = :arg_qty
- And u_cus_price_mx.qty1 = :arg_qty1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- SELECT count(*) INTO :ll_cnt
- FROM u_cus_price_MX
- WHERE u_cus_price_MX.cusid = :arg_cusid
- AND u_cus_price_MX.mtrlid = :arg_mtrlid
- AND u_cus_price_MX.status = :arg_status
- AND u_cus_price_MX.woodcode = :arg_woodcode
- AND u_cus_price_MX.pcode = :arg_pcode
- AND u_cus_price_mx.moneyid = :arg_moneyid
- AND u_cus_price_MX.Opdate < :ld_opdate
- AND u_cus_price_MX.qty = :arg_qty
- And u_cus_price_mx.qty1 = :arg_qty1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF ll_cnt = 0 THEN
- DELETE FROM u_cus_price
- WHERE u_cus_price.cusid = :arg_cusid
- AND u_cus_price.mtrlid = :arg_mtrlid
- AND u_cus_price.status = :arg_status
- AND u_cus_price.woodcode = :arg_woodcode
- AND u_cus_price.pcode = :arg_pcode
- AND u_cus_price.moneyid = :arg_moneyid
- AND u_cus_price.qty = :arg_qty
- And u_cus_price.qty1 = :arg_qty1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询失败'+sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT;
- END IF
- RETURN rslt
- END Function
- public function integer uf_cmpl_price_zhpz (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg);//计算组合配置产品的价格
- //按status 拆分组合, 按各个组件的价格总和得出组合产品的价格
- //取价格表对应产品价格
- Int rslt = 1
- long ll_i
- dec obj_price
- string ls_status_zj, ls_listname
- dec lde_lmsaleprice, lde_rebate
- int li_flag
- s_mtrlcfg_expr s_pz[]
- String ls_status_ori,ls_woodcode_ori,ls_pcode_ori
- ls_status_ori = arg_status
- ls_woodcode_ori = arg_woodcode
- ls_pcode_ori = arg_pcode
- int li_price_ifpz = 1
- //类似于 price_ifpz = 1
- f_checkpz(arg_status,s_pz[])
- arg_pcode = ''
- arg_woodcode = ''
- //全局用,判断是否在计算组合配置单价
- if_cmpl_zhpz_pf = true
- s_zhpz = s_pz
- obj_price = 0
- FOR ll_i = 1 To UpperBound(s_pz)
- ls_status_zj = s_pz[ll_i].cfgname
-
- //取价格表 价格, 有公式的按公式计算价格
- IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, ls_status_zj, arg_woodcode, arg_pcode, ls_status_ori, ls_woodcode_ori, ls_pcode_ori, arg_qty * Dec(s_pz[ll_i].qty), arg_pricelistid, arg_moneyid, lde_lmsaleprice, li_flag, ls_listname, lde_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uo_option_saleprice_list_rebate = 1 THEN
- lde_rebate = arg_rebate_cus
- END IF
-
- obj_price = obj_price + lde_lmsaleprice * lde_rebate * Dec(s_pz[ll_i].qty)
- NEXT
- rtn_price = obj_price
- rtn_zqrate = 1
-
- ext:
- RETURN rslt
- end function
- public function integer uf_cmpl_price (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, integer arg_price_ifpz, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg);//计算非组合配置 或 组合配置但没有设置组合的 产品的价格
- //根据单价限制策略, 按设置的配置查找价格
- //取价格表对应产品价格
- Int rslt = 1
- Dec obj_price
- String ls_status_zj, ls_listname
- Dec lde_lmsaleprice, lde_rebate
- Int li_flag
- String ls_status_ori,ls_woodcode_ori,ls_pcode_ori
- ls_status_ori = arg_status
- ls_woodcode_ori = arg_woodcode
- ls_pcode_ori = arg_pcode
- CHOOSE CASE arg_price_ifpz
- CASE 0
- arg_status = ''
- arg_woodcode = ''
- arg_pcode = ''
- CASE 1
- arg_pcode = ''
- arg_woodcode = ''
- CASE 2
- arg_status = ''
- arg_pcode = ''
- CASE 3
- arg_status = ''
- arg_woodcode = ''
- CASE 4
- arg_pcode = ''
- CASE 5
- arg_status = ''
- CASE 6
- arg_woodcode = ''
- END CHOOSE
- //取价格表 公式内容
- IF uof_get_pricelist_price(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, ls_status_ori, ls_woodcode_ori, ls_pcode_ori, arg_qty, arg_pricelistid, arg_moneyid, lde_lmsaleprice, li_flag, ls_listname, lde_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF uo_option_saleprice_list_rebate = 1 THEN
- lde_rebate = arg_rebate_cus
- END IF
- rtn_price = lde_lmsaleprice
- rtn_zqrate = lde_rebate
- ext:
- RETURN rslt
- end function
- public function integer uof_get_pricelistinfo (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_status_ori, string arg_woodcode_ori, string arg_pcode_ori, decimal arg_qty, long arg_pricelistid, ref decimal arg_lmsaleprice, ref integer arg_flag, ref string arg_listname, ref decimal arg_rebate, ref string arg_msg);
- //取价格表对应产品价格
- //产品价格表公式与产品价格策略的限制
- Int rslt = 1
- Long ll_moneyid_pricelist
- String ls_pricestr,ls_rebatestr
- Int li_rslt_cmp
- Decimal ld_price_cmp,ld_rebate_cmp
- Int li_price_ifpz
- String ls_status_ori,ls_woodcode_ori,ls_pcode_ori
- ls_status_ori = arg_status
- ls_woodcode_ori = arg_woodcode
- ls_pcode_ori = arg_pcode
- li_price_ifpz = 0
- SELECT u_sale_price_list.listname
- INTO :arg_listname
- FROM u_sale_price_list
- Where pricelistid = :arg_pricelistid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询价格表信息失败,"+sqlca.SQLErrText
- GOTO ext
- END IF
- SELECT u_sale_price_mx.price,
- u_sale_price_mx.flag,
- u_sale_price_mx.rebate,
- u_sale_price_mx.pricestr,
- u_sale_price_mx.rebatestr
- INTO :arg_lmsaleprice,
- :arg_flag,
- :arg_rebate,
- :ls_pricestr,
- :ls_rebatestr
- FROM u_sale_price_list,u_sale_price_mx
- WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid
- AND u_sale_price_mx.mtrlid = :arg_mtrlid
- AND u_sale_price_mx.status = :arg_status
- AND u_sale_price_mx.woodcode = :arg_woodcode
- AND u_sale_price_mx.pcode = :arg_pcode
- AND ( (u_sale_price_mx.saleqty = 0 OR u_sale_price_mx.saleqty <= :arg_qty)
- AND (u_sale_price_mx.saleqty1 = 0 OR u_sale_price_mx.saleqty1 >= :arg_qty))
- And u_sale_price_mx.pricelistid = :arg_pricelistid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- //arg_msg = '查询产品:'+arg_mtrlcode+',配置:'+arg_status+',配置1:'+arg_woodcode+',配置2:'+arg_pcode+',销售限价失败,可能该客户的销售限价还没有设定,请检查'
- if if_chk_mxlist then
- arg_msg = '客户价格表未找到'
- else
- arg_msg = '价格表['+arg_listname+']未找到'
- end if
- arg_msg += '产品:'+arg_mtrlcode
- IF arg_status <> "" THEN
- arg_msg += ',配置:'+arg_status
- END IF
- IF arg_woodcode <> "" THEN
- arg_msg += ',配置1:'+arg_woodcode
- END IF
- IF arg_pcode <> "" THEN
- arg_msg += ',配置2:'+arg_pcode
- END IF
- arg_msg += '的相关信息'
- GOTO ext
- END IF
- IF arg_flag = 0 THEN
- rslt = 0
- if if_chk_mxlist then
- arg_msg = '客户价格表对应'
- else
- arg_msg = '价格表['+arg_listname+']对应'
- end if
- arg_msg += '产品:'+arg_mtrlcode
- IF arg_status <> "" THEN
- arg_msg += ',配置:'+arg_status
- END IF
- IF arg_woodcode <> "" THEN
- arg_msg += ',配置1:'+arg_woodcode
- END IF
- IF arg_pcode <> "" THEN
- arg_msg += ',配置2:'+arg_pcode
- END IF
- arg_msg += '未审核'
- GOTO ext
- END IF
- IF Trim(ls_pricestr) <> '' THEN
- //li_rslt_cmp = uof_pricestr_cmp(ls_pricestr,arg_status,arg_woodcode,arg_pcode,ld_price_cmp)
- li_rslt_cmp = uof_pricestr_cmp(ls_pricestr, arg_status_ori, arg_woodcode_ori, arg_pcode_ori,ld_price_cmp)
-
- IF li_rslt_cmp = 1 THEN
- arg_lmsaleprice = ld_price_cmp
- ELSEIF li_rslt_cmp = 0 THEN
- arg_lmsaleprice = 0
- END IF
-
- END IF
- IF Trim(ls_rebatestr) <> '' THEN
- // li_rslt_cmp = uof_pricestr_cmp(ls_pricestr,arg_status,arg_woodcode,arg_pcode,ld_rebate_cmp)
- li_rslt_cmp = uof_pricestr_cmp(ls_pricestr,arg_status_ori, arg_woodcode_ori, arg_pcode_ori , ld_rebate_cmp)
-
- IF li_rslt_cmp = 1 THEN
- arg_rebate = ld_rebate_cmp
- ELSEIF li_rslt_cmp = 0 THEN
- arg_rebate = 1
- END IF
-
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uof_get_pricelist_price (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_status_ori, string arg_woodcode_ori, string arg_pcode_ori, decimal arg_qty, long arg_pricelistid, long arg_moneyid, ref decimal arg_lmsaleprice, ref integer arg_flag, ref string arg_listname, ref decimal arg_rebate, ref string arg_msg);//要求传人的3个配置是 原配置
- //取价格表对应产品价格
- Int rslt = 1
- //取价格表
- IF arg_pricelistid > 0 THEN
- IF uof_chk_pricelistid( arg_moneyid, arg_pricelistid, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- ELSE
- IF uof_get_pricelistid(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, arg_moneyid, arg_pricelistid, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- //取价格表 公式内容
- IF uof_get_pricelistinfo(arg_mtrlid, arg_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_status_ori, arg_woodcode_ori, arg_pcode_ori, arg_qty, arg_pricelistid, arg_lmsaleprice, arg_flag, arg_listname, arg_rebate, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uf_cmpl_price_pack (long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_pricelistid, long arg_moneyid, decimal arg_rebate_cus, integer arg_price_ifpz, ref decimal rtn_price, ref decimal rtn_zqrate, ref string arg_msg);//计算包件产品的价格
- Int rslt = 1
- String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[]
- Int li_ifover[],li_dipztype[]
- Decimal ld_Sonscale[]
- Long ll_SonMtrlid[]
- string ls_mtrlcode[]
- Long it_mxt = 1,ll_j
- String ls_status_find,ls_woodcode_find,ls_pcode_find
- String ls_status_zj, ls_listname
- Decimal lde_lmsaleprice, lde_rebate,obj_price
- Int li_flag
- String ls_status_ori,ls_woodcode_ori,ls_pcode_ori
- ls_status_ori = arg_status
- ls_woodcode_ori = arg_woodcode
- ls_pcode_ori = arg_pcode
- Declare cur_pf Cursor For
- Select u_PrdPF.SonMtrlid,
- u_PrdPF.status,
- u_PrdPF.woodcode,
- u_PrdPF.pcode,
- u_PrdPF.ifover,
- u_prdpf.dipztype,
- u_prdpf.Sonscale,
- u_mtrldef.mtrlcode
- FROM u_PrdPF INNER JOIN
- u_mtrl_pf ON u_PrdPF.mtrlid = u_mtrl_pf.Mtrlid AND
- u_PrdPF.pfcode = u_mtrl_pf.pfcode INNER JOIN
- u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
- where ( u_PrdPF.mtrlid = :arg_mtrlid )
- And ( u_mtrl_pf.ifdft = 1 );
-
- Open cur_pf;
- Fetch cur_pf Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt],
- :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],
- :li_dipztype[it_mxt],:ld_Sonscale[it_mxt],:ls_mtrlcode[it_mxt];
- Do While sqlca.SQLCode = 0
- it_mxt++
- Fetch cur_pf Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt],
- :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],
- :li_dipztype[it_mxt],:ld_Sonscale[it_mxt],:ls_mtrlcode[it_mxt];
- Loop
- it_mxt = it_mxt - 1
- Close cur_pf;
- For ll_j = 1 To it_mxt
-
- If li_ifover[ll_j] = 1 Then
- Choose Case li_dipztype[ll_j]
- Case 0
- ls_status_find = arg_status
- ls_woodcode_find = ''
- ls_pcode_find = ''
- Case 1
- ls_status_find = ''
- ls_woodcode_find = arg_woodcode
- ls_pcode_find = ''
- Case 2
- ls_status_find = ''
- ls_woodcode_find = ''
- ls_pcode_find = arg_pcode
- Case 3
- ls_status_find = arg_status
- ls_woodcode_find = arg_woodcode
- ls_pcode_find = ''
- Case 4
- ls_status_find = ''
- ls_woodcode_find = arg_woodcode
- ls_pcode_find = arg_pcode
- Case 5
- ls_status_find = arg_status
- ls_woodcode_find = ''
- ls_pcode_find = arg_pcode
- Case 6
- ls_status_find = arg_status
- ls_woodcode_find = arg_woodcode
- ls_pcode_find = arg_pcode
- End Choose
- Else
- ls_status_find = ls_pf_status[ll_j]
- ls_woodcode_find = ls_pf_woodcode[ll_j]
- ls_pcode_find = ls_pf_pcode[ll_j]
- End If
-
- ls_status_find = Trim(ls_status_find)
- ls_woodcode_find = Trim(ls_woodcode_find)
- ls_pcode_find = Trim(ls_pcode_find)
-
- If uof_get_pricelist_price(ll_SonMtrlid[ll_j] ,ls_mtrlcode[ll_j], ls_status_find, ls_woodcode_find, ls_pcode_find, ls_status_ori, ls_woodcode_ori, ls_pcode_ori, arg_qty * Dec(ld_Sonscale[ll_j]), arg_pricelistid, arg_moneyid, lde_lmsaleprice, li_flag, ls_listname, lde_rebate, arg_msg) = 0 Then
- rslt = 0
- Goto ext
- End If
-
- IF uo_option_saleprice_list_rebate = 1 THEN
- lde_rebate = arg_rebate_cus
- END IF
-
- obj_price = obj_price + lde_lmsaleprice * lde_rebate * ld_Sonscale[ll_j]
- Next
- rtn_price = obj_price
- rtn_zqrate = 1
- ext:
- Return rslt
- end function
- public function integer uof_get_mtrl_bjpz (ref datastore ds, long arg_pztype, long arg_type, string arg_col_value_dft, string arg_col_value, integer arg_mtrlpztype, ref string arg_msg);//arg_pztype 属于哪个配置 0 - 配置status; 1- 配置1 woodcode; 2-配置2 pcode
- //arg_type 配置类型,哪个部件配置类型
- Int rslt = 1
- Long ll_row
- String ls_pzcode, ls_pzname
- Int li_inputtype
- Long ll_pzid
- Int li_usechflag, li_secflag
- String ls_contfigtypename
- Decimal lde_price
- //检查分类是否启用换料,是否财审
- SELECT usechflag, secflag, contfigtypename
- INTO :li_usechflag, :li_secflag, :ls_contfigtypename
- FROM u_configure_type
- Where contfigtypeid = :arg_type;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询部件选配分类信息失败,"+sqlca.SQLErrText
- GOTO ext
- END IF
- IF li_usechflag = 0 THEN RETURN 1
- IF li_secflag = 0 THEN //要换但未审
- rslt = 0
- arg_msg = "部件选配分类:"+ls_contfigtypename+" 还未财审"
- GOTO ext
- END IF
- DECLARE cur_pz CURSOR FOR
- SELECT u_configure_code.pzid,
- u_configure_code.pzcode,
- u_configure_code.name,
- inputtype
- FROM u_configure_code
- Where u_configure_code.typeid = :arg_type;
-
- OPEN cur_pz;
- FETCH cur_pz Into :ll_pzid,:ls_pzcode,:ls_pzname, :li_inputtype;
- DO WHILE sqlca.SQLCode = 0
-
-
- IF li_inputtype = 0 And ll_pzid > 0 THEN //只有选择类才能自动换
- ll_row = ds.InsertRow(0)
- ds.Object.pzid[ll_row] = ll_pzid
- ds.Object.pzcode[ll_row] = ls_pzcode
- ds.Object.Name[ll_row] = ls_pzname
- ds.Object.inputtype[ll_row] = li_inputtype
- ds.Object.pztype[ll_row] = arg_pztype
- END IF
- FETCH cur_pz Into :ll_pzid,:ls_pzcode,:ls_pzname, :li_inputtype;
- LOOP
- CLOSE cur_pz;
- Long i, ll_start, ll_i, ll_j
- String ls_name[], ls_namemx[]
- Long ll_printid
- //arg_col_value
- IF Right(arg_col_value,1) <> "|" THEN
- arg_col_value += "|"
- END IF
- i = 0
- ll_start = Pos(arg_col_value, "|")
- DO WHILE ll_start > 0 And arg_col_value <> "|"
- i++
- ls_name[i] = Left(arg_col_value, Pos(arg_col_value,":") - 1)
- ls_namemx[i] = Left(arg_col_value, ll_start - 1)
- ls_namemx[i] = Mid(ls_namemx[i],Pos(ls_namemx[i],':') + 1)
- arg_col_value = Mid(arg_col_value, ll_start + 1)
- ll_start = Pos(arg_col_value, "|")
- LOOP
- FOR ll_i = 1 To ds.RowCount()
- ll_pzid = ds.Object.pzid[ll_i]
- IF UpperBound(ls_namemx) < i THEN EXIT
-
- FOR ll_j = 1 To i
- IF ds.Object.Name[ll_i] = ls_name[ll_j] THEN
- ll_pzid = ds.Object.pzid[ll_i]
- SELECT printid, price
- INTO :ll_printid, :lde_price
- FROM u_configure_codemx
- WHERE namemx = :ls_namemx[ll_j]
- And pzid = :ll_pzid;
- IF sqlca.SQLCode <> 0 THEN
- ll_printid = 0
- lde_price = 0
- END IF
-
-
-
-
- ds.Object.namemx[ll_i] = ls_namemx[ll_j]
- ds.Object.printid[ll_i] = ll_printid
- ds.Object.price[ll_i] = lde_price
- GOTO _next
- END IF
- NEXT
- _next:
- NEXT
- //arg_col_value_dft
- IF Right(arg_col_value_dft,1) <> "|" THEN
- arg_col_value_dft += "|"
- END IF
- i = 0
- ll_start = Pos(arg_col_value_dft, "|")
- DO WHILE ll_start > 0 And arg_col_value_dft <> "|"
- i++
- ls_name[i] = Left(arg_col_value_dft, Pos(arg_col_value_dft,":") - 1)
- ls_namemx[i] = Left(arg_col_value_dft, ll_start - 1)
- ls_namemx[i] = Mid(ls_namemx[i],Pos(ls_namemx[i],':') + 1)
- arg_col_value_dft = Mid(arg_col_value_dft, ll_start + 1)
- ll_start = Pos(arg_col_value_dft, "|")
- LOOP
- FOR ll_i = 1 To ds.RowCount()
- ll_pzid = ds.Object.pzid[ll_i]
- IF UpperBound(ls_namemx) < i THEN EXIT
-
- FOR ll_j = 1 To i
- IF ds.Object.Name[ll_i] = ls_name[ll_j] THEN
- ll_pzid = ds.Object.pzid[ll_i]
- SELECT printid, price
- INTO :ll_printid, :lde_price
- FROM u_configure_codemx
- WHERE namemx = :ls_namemx[ll_j]
- And pzid = :ll_pzid;
- IF sqlca.SQLCode <> 0 THEN
- ll_printid = 0
- lde_price = 0
- END IF
-
- ds.Object.namemx_ori[ll_i] = ls_namemx[ll_j]
- ds.Object.printid_ori[ll_i] = ll_printid
- ds.Object.price_ori[ll_i] = lde_price
- GOTO _next1
- END IF
- NEXT
- _next1:
- NEXT
- //筛选一遍, 将相同的删除; 确定自动换料类型kind; 0 - 换料; 1 - 减料; 2 - 增料
- String ls_namemx_ori, ls_namemx_new
- ll_row = ds.RowCount()
- FOR ll_i = ll_row To 1 Step -1
- IF ds.Object.pzid[ll_i] = 0 THEN
- ds.DeleteRow(ll_i)
- CONTINUE
- END IF
-
- IF ds.Object.pztype[ll_i] = arg_pztype THEN
- ls_namemx_ori = ds.Object.namemx_ori[ll_i]
- ls_namemx_new = ds.Object.namemx[ll_i]
- IF arg_mtrlpztype = 4 THEN
- IF ds.Object.namemx_ori[ll_i] = ds.Object.namemx[ll_i] THEN
- ds.DeleteRow(ll_i)
- CONTINUE
- END IF
- ELSEIF arg_mtrlpztype = 5 THEN
- IF ds.Object.namemx_ori[ll_i] = ds.Object.namemx[ll_i] Or ds.Object.namemx[ll_i] = '' THEN
- ds.DeleteRow(ll_i)
- CONTINUE
- END IF
- END IF
-
- //以下的就是namemx_ori <> namemxi
- IF ds.Object.namemx_ori[ll_i] = "" And ds.Object.namemx[ll_i] <> "" THEN //增料
- ds.Object.Kind[ll_i] = 2
- ELSEIF ds.Object.namemx_ori[ll_i] <> "" And ds.Object.namemx[ll_i] <> "" THEN //替换
- ds.Object.Kind[ll_i] = 0
- ELSEIF ds.Object.namemx_ori[ll_i] <> "" And ds.Object.namemx[ll_i] = "" THEN //减料
- ds.Object.Kind[ll_i] = 1
- END IF
-
- END IF
- NEXT
- //如果系组合配置的, 重新刷一次差价
- IF if_cmpl_zhpz_pf THEN
- Decimal lde_addprice, lde_price_ori
- Long ll_printid_ori
- String ls_mxpzname
- //ll_row = ds.RowCount()
- FOR ll_i = 1 To ds.RowCount()
- IF ds.Object.pztype[ll_i] = arg_pztype THEN
-
- ll_pzid = ds.Object.pzid[ll_i]
- ll_printid = ds.Object.printid[ll_i]
- ll_printid_ori = ds.Object.printid_ori[ll_i]
- lde_price = 0
- lde_price_ori = 0
-
- FOR ll_j = 1 To UpperBound(s_zhpz)
- ls_mxpzname = s_zhpz[ll_j].cfgname
- SELECT price
- INTO :lde_addprice
- FROM u_configure_codemx_pz
- WHERE pzid = :ll_pzid
- AND printid = :ll_printid
- And Name = :ls_mxpzname;
- IF sqlca.SQLCode <> 0 THEN
- lde_addprice = 0
- END IF
- IF IsNull(lde_addprice) THEN lde_addprice = 0
-
- lde_price += lde_addprice * Dec(s_zhpz[ll_j].qty)
-
- SELECT price
- INTO :lde_addprice
- FROM u_configure_codemx_pz
- WHERE pzid = :ll_pzid
- AND printid = :ll_printid_ori
- And Name = :ls_mxpzname;
- IF sqlca.SQLCode <> 0 THEN
- lde_addprice = 0
- END IF
- IF IsNull(lde_addprice) THEN lde_addprice = 0
-
- lde_price_ori += lde_addprice * Dec(s_zhpz[ll_j].qty)
-
- NEXT
-
-
-
- ds.Object.price[ll_i] = lde_price
- ds.Object.price_ori[ll_i] = lde_price_ori
- END IF
- NEXT
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uof_get_mtrl_ygpz (ref datastore ds, long arg_pztype, long arg_type, string arg_col_value_dft, string arg_col_value, ref string arg_msg);IF arg_col_value = arg_col_value_dft THEN RETURN 1 //不需要换的跳过
- Int rslt = 1
- Long ll_row
- String ls_pzcode, ls_pzname
- Int li_inputtype
- Int li_usechflag, li_flag
- String ls_typename
- decimal lde_price, lde_price_ori
- ls_pzcode = "[严格选择]"
- //检查分类是否启用换料,是否技审
- SELECT usechflag, flag, typename
- INTO :li_usechflag, :li_flag, :ls_typename
- FROM u_pztype_def
- Where typeid = :arg_type;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询严格选择配置分类信息失败,"+sqlca.SQLErrText
- GOTO ext
- END IF
- IF li_usechflag = 0 THEN RETURN 1
- IF li_flag = 0 THEN //要换但未审
- rslt = 0
- arg_msg = "严格选择配置分类:"+ls_typename+" 还未审核"
- GOTO ext
- END IF
- SELECT price into :lde_price
- FROM u_pztype_mx
- where (typeid = :arg_type)
- and (dscrp = :arg_col_value);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询严格选择配置分类信息新差价失败,"+sqlca.SQLErrText
- GOTO ext
- END IF
- SELECT price into :lde_price_ori
- FROM u_pztype_mx
- where (typeid = :arg_type)
- and (dscrp = :arg_col_value_dft);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询严格选择配置分类信息原差价失败,"+sqlca.SQLErrText
- GOTO ext
- END IF
- ll_row = ds.InsertRow(0)
- ds.Object.pzid[ll_row] = arg_type
- ds.Object.pzcode[ll_row] = ls_pzcode
- ds.Object.Name[ll_row] = ls_typename
- ds.Object.namemx[ll_row] = arg_col_value
- ds.Object.namemx_ori[ll_row] = arg_col_value_dft
- ds.Object.inputtype[ll_row] = li_inputtype
- ds.Object.pztype[ll_row] = arg_pztype
- ds.Object.price[ll_row] = lde_price
- ds.Object.price_ori[ll_row] = lde_price_ori
- //以下的就是namemx_ori <> namemxi
- IF ds.Object.namemx_ori[ll_row] = "" And ds.Object.namemx[ll_row] <> "" THEN //增料
- ds.Object.Kind[ll_row] = 2
- ELSEIF ds.Object.namemx_ori[ll_row] <> "" And ds.Object.namemx[ll_row] <> "" THEN //替换
- ds.Object.Kind[ll_row] = 0
- ELSEIF ds.Object.namemx_ori[ll_row] <> "" And ds.Object.namemx[ll_row] = "" THEN //减料
- ds.Object.Kind[ll_row] = 1
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uof_get_mtrl_3pz_difprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_difprice, ref string arg_msg);//1.只查询支持换料的行, 计算换料差价, sum(原配置价 - 新配置价)
- //datastore ds_pzmx
- ds_pzmx = Create datastore
- ds_pzmx.DataObject = 'dw_configure_pz_compare'
- Int rslt = 1
- Long ll_row
- Int li_statusflag,li_woodcodeflag,li_pcodeflag
- Long ll_statustype, ll_woodcodetype, ll_pcodetype
- String ls_status_config, ls_woodcode_config, ls_pcode_config
- SELECT statusflag, statustype, woodcodeflag, woodcodetype, pcodeflag, pcodetype,
- status_config, woodcode_config, pcode_config
- INTO :li_statusflag,:ll_statustype,:li_woodcodeflag,:ll_woodcodetype,:li_pcodeflag,:ll_pcodetype,
- :ls_status_config, :ls_woodcode_config, :ls_pcode_config
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询物料资料失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- //status
- IF li_statusflag = 1 THEN
- IF uof_get_mtrl_ygpz(ds_pzmx, 0, ll_statustype, ls_status_config, arg_status, arg_msg) = 0 THEN
- rslt = 0
- arg_msg = "生成严格选择配置换料列表失败,"+arg_msg
- GOTO ext
- END IF
- END IF
- IF li_statusflag = 4 Or li_statusflag = 5 THEN
- IF uof_get_mtrl_bjpz(ds_pzmx, 0, ll_statustype, ls_status_config, arg_status, li_statusflag, arg_msg) = 0 THEN
- rslt = 0
- arg_msg = "生成部件选配配置换料列表失败,"+arg_msg
- GOTO ext
- END IF
- END IF
- //woodcode
- IF li_woodcodeflag = 1 THEN
- IF uof_get_mtrl_ygpz(ds_pzmx, 1, ll_woodcodetype, ls_woodcode_config, arg_woodcode, arg_msg) = 0 THEN
- rslt = 0
- arg_msg = "生成严格选择配置1换料列表失败,"+arg_msg
- GOTO ext
- END IF
- END IF
- IF li_woodcodeflag = 4 Or li_woodcodeflag = 5 THEN
- IF uof_get_mtrl_bjpz(ds_pzmx, 1, ll_woodcodetype, ls_woodcode_config, arg_woodcode, li_woodcodeflag, arg_msg) = 0 THEN
- rslt = 0
- arg_msg = "生成部件选配配置1换料列表失败,"+arg_msg
- GOTO ext
- END IF
- END IF
- //pcode
- IF li_pcodeflag = 1 THEN
- IF uof_get_mtrl_ygpz(ds_pzmx, 2, ll_pcodetype, ls_pcode_config, arg_pcode, arg_msg) = 0 THEN
- rslt = 0
- arg_msg = "生成严格选择配置2换料列表失败,"+arg_msg
- GOTO ext
- END IF
- END IF
- IF li_pcodeflag = 4 Or li_pcodeflag = 5 THEN
- IF uof_get_mtrl_bjpz(ds_pzmx, 2, ll_pcodetype, ls_pcode_config, arg_pcode, li_pcodeflag, arg_msg) = 0 THEN
- rslt = 0
- arg_msg = "生成部件选配配置2换料列表失败,"+arg_msg
- GOTO ext
- END IF
- END IF
- arg_difprice = 0
- FOR ll_row = 1 To ds_pzmx.RowCount()
- arg_difprice += ds_pzmx.Object.price[ll_row] - ds_pzmx.Object.price_ori[ll_row]
- NEXT
- ext:
- destroy ds_pzmx
- IF rslt = 0 THEN
- arg_difprice = 0
- END IF
- RETURN rslt
- end function
- public function integer uof_getprice_quote (long arg_moneyid, long arg_pricelistid, long arg_cusid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_scid, ref decimal arg_price, ref decimal arg_rebate, ref string arg_msg);
- //产品价格表公式与产品价格策略的限制
- //1.产品价格策略已设置限制的配置不能应用于价格表公式;
- //例如:产品价格策略 选择为 不使用 ; 则价格表公式可以用 配置 配置1, 配置2 设置公式;
- // 产品价格策略 选择为 配置 ; 则价格表公式不能是用 配置 , 但可以用 配置1, 配置2 设置公式;
- // 产品价格策略 选择为 配置 + 配置1; 则价格表公式不能是用 配置 或 配置1 , 但可以用 配置2 设置公式;
- // 产品价格策略 选择为 配置 + 配置1 + 配置3; 则价格表公式不能使用;
- Int rslt = 1
- Long ll_statusflag,li_price_ifpz
- String ls_mtrlcode
- String ls_cusname
- Long ll_pricelistid,ll_pricelistid_arr[],ll_mxbt = 0,ll_pricelistid_tmp
- Decimal ld_lmsaleprice,ld_rebate,obj_price,ld_rebate_arr[],ld_rebate_tmp
- Long ll_i
- String ls_status_zj
- //Int li_flag
- String ls_listname
- Decimal ld_rebate_cus
- Decimal rtn_price,rtn_zqrate
- //Int li_selecttype
- Int li_suc = 0
- Int li_ifpackpro,li_ifpricepack
- Long ll_moneyid_native
- Decimal lde_difprice
- s_mtrlcfg_expr s_pz[]
- IF uo_option_saleprice_list_rebate = -1000 THEN
- rslt = 0
- arg_msg = '选项:[237]客户价格表折扣按客户设定,读取初始默认值失败,操作取消!'
- GOTO ext
- END IF
- IF uo_option_price_rmb = -1000 THEN
- rslt = 0
- arg_msg = '选项:[238]销售单价按人民币单价折算,读取初始默认值失败,操作取消!'
- GOTO ext
- END IF
- String ls_status_ori,ls_woodcode_ori,ls_pcode_ori
- ls_status_ori = arg_status
- ls_woodcode_ori = arg_woodcode
- ls_pcode_ori = arg_pcode
- //yyx2012-12-11
- IF uo_option_price_rmb = 1 THEN
- SELECT moneyid INTO :ll_moneyid_native
- From cw_currency Where native = 1;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询本位币种失败,请检查币种是否设置了本位币'
- rslt = 0
- GOTO ext
- END IF
-
- arg_moneyid = ll_moneyid_native
- END IF
- //IF f_get_selecttype(arg_typeid,arg_cusid,li_selecttype,arg_msg) = 0 THEN
- // rslt = 0
- // GOTO ext
- //END IF
- SELECT statusflag,mtrlcode,price_ifpz,ifpackpro,ifpricepack
- INTO :ll_statusflag,:ls_mtrlcode,:li_price_ifpz,:li_ifpackpro,:li_ifpricepack
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- GOTO ext
- END IF
- SELECT name,pricelistid,rebate
- INTO :ls_cusname,:ll_pricelistid,:ld_rebate_cus
- FROM u_cust
- Where cusid = :arg_cusid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "查询操作失败,客户资料"
- GOTO ext
- END IF
- IF arg_pricelistid > 0 THEN
- ll_mxbt = 1
- ll_pricelistid_arr[ll_mxbt] = arg_pricelistid
- ld_rebate_arr[ll_mxbt] = ld_rebate_cus
- END IF
- IF if_chk_mxlist THEN //查客户价格表的,读默认的
- DECLARE cur_listmx CURSOR FOR
- SELECT pricelistid,rebate
- FROM u_cus_pricelist_mx
- WHERE cusid = :arg_cusid
- Order By printid;
-
- OPEN cur_listmx;
-
- FETCH cur_listmx Into :ll_pricelistid_tmp,:ld_rebate_tmp;
-
- DO WHILE sqlca.SQLCode = 0
- ll_mxbt++
- ll_pricelistid_arr[ll_mxbt] = ll_pricelistid_tmp
- ld_rebate_arr[ll_mxbt] = ld_rebate_tmp
-
- FETCH cur_listmx Into :ll_pricelistid_tmp,:ld_rebate_tmp;
- LOOP
-
- CLOSE cur_listmx;
-
- // IF ll_pricelistid = 0 THEN
- // rslt = 0
- // arg_msg = '选择限制为"只能选客户价格表",但当前客户没有指定价格表,请检查'
- // GOTO ext
- // END IF
- END IF
- //选价格表: 1.组合配置产品按组合计算; 2.包件产品按子件计算; 3.其他常规产品直接取价
- FOR ll_i = 1 To ll_mxbt //循环所有该客户有效价格表
-
- IF ll_statusflag = 2 And arg_status <> '' And li_ifpricepack = 0 THEN //组合配置且非整套计算
- //组合配置 ,计算价格
- //如果不按整套,分开子件查价格
- //如果价格按整套,则用整个配置信息查价格
-
- IF uf_cmpl_price_zhpz(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], obj_price, ld_rebate, arg_msg) = 0 THEN
- CONTINUE
- ELSE
- rtn_price = obj_price
- rtn_zqrate = ld_rebate
- li_suc = 1
- EXIT
- END IF
- ELSEIF li_ifpackpro <> 0 And li_ifpricepack = 0 THEN //包件产品且非整套计算
- //2.包件产品,按清单拆分, 取子件价格汇总作为包件价格
- IF uf_cmpl_price_pack(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN
- CONTINUE
- ELSE
- rtn_price = obj_price
- rtn_zqrate = ld_rebate
- li_suc = 1
- EXIT
- END IF
- ELSE //整套计算 or 其他常规取价
- //1.整套计算单价的
- //2.非组合配置的
- //3.非包件产品的
- IF uf_cmpl_price(arg_mtrlid, ls_mtrlcode, arg_status, arg_woodcode, arg_pcode, arg_qty, ll_pricelistid_arr[ll_i], arg_moneyid, ld_rebate_arr[ll_i], li_price_ifpz, obj_price, ld_rebate, arg_msg) = 0 THEN
- CONTINUE
- ELSE
- rtn_price = obj_price
- rtn_zqrate = ld_rebate
- li_suc = 1
- EXIT
- END IF
- END IF
-
- NEXT
- //if li_suc = 1 取价成功, 统计部件选配自动换料计算差价
- IF li_suc = 1 THEN
- IF uof_get_mtrl_3pz_difprice(arg_mtrlid, arg_status, arg_woodcode, arg_pcode, lde_difprice, arg_msg) = 0 THEN
- lde_difprice = 0
- END IF
-
- rtn_price = rtn_price + lde_difprice
- // rtn_zqrate = ld_rebate
- // li_suc = 1
- END IF
- IF li_suc = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- ext:
- arg_price = rtn_price
- arg_rebate = rtn_zqrate
- RETURN rslt
- end function
- on uo_cusprice.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on uo_cusprice.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
- event constructor;
- String str_optionvalue,arg_msg
- f_get_sys_option_value('056',str_optionvalue,arg_msg)
- uo_option_checkprice_native = Long(str_optionvalue)
- f_get_sys_option_value('238',str_optionvalue,arg_msg)
- uo_option_price_rmb = Long(str_optionvalue)
- f_get_sys_option_value('237',str_optionvalue,arg_msg)
- uo_option_saleprice_list_rebate = Long(str_optionvalue)
- end event
|