From 65e5324111cde09c14cc8e361f974b2ea1554f79 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 21 Feb 2014 19:26:15 +0100 Subject: [PATCH] avanzamento x generazione nuovo record (ancora non va...) --- C2P.sln | 2 +- C2P/WebUserControls/mod_newQuote.ascx.cs | 24 +- C2P/bin/C2P.dll | Bin 304640 -> 304640 bytes C2P/bin/C2P_Data.dll | Bin 269312 -> 270848 bytes C2P/bin/C2P_Data.pdb | Bin 560640 -> 562688 bytes C2P/bin/SteamWare.dll | Bin 498176 -> 498176 bytes C2P_Data/DS_Quotes.Designer.cs | 102 +- C2P_Data/DS_Quotes.xsd | 21 +- C2P_Data/DS_Quotes.xss | 28 +- .../{C2P_Project.sqlproj => C2P_DB.sqlproj} | 2 +- .../Debug/C2P_DB.sqlproj.FileListAbsolute.txt | 9 + C2P_Project/obj/Debug/C2P_Project.dll | Bin 3584 -> 3584 bytes C2P_Project/obj/Debug/Model.xml | 38116 ++++++++++++++++ 13 files changed, 38280 insertions(+), 24 deletions(-) rename C2P_Project/{C2P_Project.sqlproj => C2P_DB.sqlproj} (99%) create mode 100644 C2P_Project/obj/Debug/C2P_DB.sqlproj.FileListAbsolute.txt create mode 100644 C2P_Project/obj/Debug/Model.xml diff --git a/C2P.sln b/C2P.sln index da921b8..d0260e5 100644 --- a/C2P.sln +++ b/C2P.sln @@ -14,7 +14,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "C2P_Data", "C2P_Data\C2P_Da EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteamWare", "..\SteamWareLibrary\SteamWare\SteamWare.csproj", "{2872DCFE-8B46-43B2-BAA0-842A816A2DD5}" EndProject -Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "C2P_Project", "C2P_Project\C2P_Project.sqlproj", "{84DB66E4-9663-47F7-9DD1-3CB562629FF5}" +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "C2P_DB", "C2P_Project\C2P_DB.sqlproj", "{84DB66E4-9663-47F7-9DD1-3CB562629FF5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/C2P/WebUserControls/mod_newQuote.ascx.cs b/C2P/WebUserControls/mod_newQuote.ascx.cs index a125657..9344eb3 100644 --- a/C2P/WebUserControls/mod_newQuote.ascx.cs +++ b/C2P/WebUserControls/mod_newQuote.ascx.cs @@ -161,7 +161,29 @@ namespace C2P.WebUserControls /// protected void btnNew_Click(object sender, EventArgs e) { - checkBtnNew(); + // se ho tutti i dati creo nuovo record! + decimal RawMatCost = 0; + decimal RawMatExtraCost = 0; + int batchQty = 0; + try + { + RawMatCost = Convert.ToDecimal(txtBaseAl.Text.Trim()); + } + catch + { } + try + { + RawMatExtraCost = Convert.ToDecimal(txtExtraLega.Text.Trim()); + } + catch + { } + try + { + batchQty = Convert.ToInt32(txtLotto.Text.Trim()); + } + catch + { } + C2P_Data.DtProxy.man.taQL.stp_QL_insNew("Q", acCliente.valore, acArticolo.valore, ddlLega.SelectedValue, RawMatCost, RawMatExtraCost, batchQty, ddlConsegna.SelectedValue, txtNote.Text.Trim()); } protected void txtLotto_TextChanged(object sender, EventArgs e) diff --git a/C2P/bin/C2P.dll b/C2P/bin/C2P.dll index a70eb9d6b29c58f0d7e861cee0b2398d9758839c..95f51c25544befb77e88b0581529219f96a2c728 100644 GIT binary patch delta 2050 zcmb_ddr(wW82_ESdmrvD3(Lagf{=)cj4Z1QnwDuYQp(5>xS|3XZ2^j~F6^$LZMmXE zrud+%sg%9!VJ0&<>#NLy$!W%NDk~eOMzqP9GX0~WMza~2zI%679RKake2?GvJLfy! zch0%@u05T&_H^R54V=`|z41P7psjoV!n_S_fE)Cz1&+-%YTn(?MI$T}DQgAN)n95H zY9$-bU0S5BV{20TXtMUqCE>tBx}W@60Hc9ZBW2vUgfKB9Cz)`TY!YCD9OwW{rl>K? z7H}b&VDxz@>RUl7=Xs6C0G|yE&@3)A`(EBWoG-qcrF*Y6i#UcnJ7(uJ|^$>>jTAHn&{kFoDj2!#Y|tSv_UXb!?+7W@CwZfzPy zNJE@F#O%C{&ojaARWp-h^J+?HLaqe=R<$sxAS_2~U#!*MO=d+#a z+sSjYQnZfzjl9+;7pkJh48C2oqC8}@NO^*viK}0}8qFSGlJ;g_mjsUeJlnKv~>>;7qpse&hQvD=+3_Hoj zNBUD#Zge&j<)0J*1xfDao%Gv%je)SY*qUCGk8P!hHs$AS>9zhr2Its6XgQ$Lce{tp@r>DxWvE7 zzErZ%!oF7q`5W8?YQtZOm*Ol{5?Yv;I-YmVM*tTEC)IbE^m+`EZp3$_ z%}6J0M?LA0@R1%vpHwGu(N2DW9-oeFaQZe3SnpBl-%VT$ly@K^cke7q1j400+)!K;4Yo>KrNn0J}=IT2AS7@J6cfF9AUT?6fPO{c#`Q!B}0 zV7|M^Ju`Hr`BV9cM-E@x-+Nm5b%`y~zffd}AIAQ=+O)4VKeKzZ%=NXYgNq(tZ>@U4 ZTE$2>62nnzmGR$V?&8#={U5Pw>_2ULq%Z&g delta 1575 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�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 Peo(QxvpyJW?o;+JDpIS5 delta 49401 zcmc${37pf_)jodjH{Z-mG7B@qtgIP8m<&4zsGx-1C?YQGAOYOs(ovulMNJSyf*W*@ ziyOwGXk4*UK^-*|T;ht9R&5nSQ9Dso+(8ik=REf&vw(fu{`&skem?KXbDneVx#upq z+XUb6w!-k{!WGLp^<0vDmN5TI3actt<_b|_3z4PCllrZEXktM_Ut7StwYDvb^oGLo%m~6Sa&_-o1B>vp*CR&}2 zhyKPnGN*3Wccs?J(Cb=#-`=`N!;=ZF)?T~rmO1L@a_Oo&|GQRd#!OjSx17MxwN&_x z?<+Y04*vX1*-G88Ru*s;RX+@(%E5oSmMUHR!^hT%vhJe&r`fHn>Rokr9&9H+RQsNk zzg8PI%0S)ChdN4Ccker8bz2V=xz;#%z^sKI)xG^ro4Owk70KJ{Tt9h3D~PXsih8r; zu*}WwSt6|J4CScZ#NC{xHXrH5R12@CkMv?H?N#RP-jxF0M%8BBQF6E=S6Y-I(q1B~ ze6l->-0HUfG*sSJS9rLxoQvENJZw{ecXX0H3hA@XcetzyDRVN`!cT;-Yo8&Q&Kq9p zt)MKEE9!1JT<&6LUG%ZT%)NMcki6r`pAO$I%U5!5pwZM*9EfAiExzq(xmQk7@44jw z<#9-N-SiLoseMlAWGz=s&6NYe%X`(GX>9%ZB=teADPa9{lIoCW6j`ax$>6?fZJr#Y zOP{8a8U8%w$xri(RBv03Ju*2Swz>DJ-`bSjQWbK_u(fK0l38-7^~eZS?vev?*`@Yn z_Ip!Ja>;>tjl@SI)a~Tbg!y8G+Fd1kbIWXXT(+!`E7cjLS2|GKhu>AP%Cn& z3trpPPi@bWtxT1gHT4dasLf~TI)+;5$XuYV)yI8NvhMUWxYYpN$6 z_5#_N%6dNUPKu|MtSLBjoVaY>pDFfL97y%~wQNtOalb~X%kWY6^XH}NtyZ$KVD<6M zoZtMlZ0F#KUi(F4cH#<(juPM^ZM(ThmdmvNGn)GVAFGRH z=kmrH-lfpB?~yJn7av82&(W0~$hRa--oLVMTU z`$MJf3Va`s=wB&O-g_wS_Gz3#-R`fe)b}N_FXz@>=hj{4hL5_(zbRGsl*+DTf9y(A z$yeQFW|Rth$THQTOddlHV|yU6Ic4bHTYAWHb$6MpXfZSD3chQPmhCCyDWtN?F_Uim zu6N5>@xnP2`&!yTC{Ou)nOa+piSbCe>|M}&VyNwRlPhmF6!7$!vZ}aMNp;J)(RZyZ zQR6FQ0r_m0DNAhfNe?k>(MDT`Yd_$DeFy#3s`Q9hyDQT3j2C`A&&u>XD{Tx~iH@OczAGDF)(0cxk@PIe&br~wX^H|lOc-?Q|#Z(I~PPT;?Q)w@=*F8+tHrwko zk@iaObq~{C*H*pIR(9#D9jt|)HST3*Lu5}?LY6gkvW^*Z72K4@&~y0%-)#F?2Q$wV+Y!PMyR}wa;Ti6#&)EI`+9XV ze_%20qY67ox61Lz;v+-wV9dQo_4QDQt5u)Q&33Hi>axyqV3RHE4)p{PM{HQ99vPQM zVeaqLh)(IaLnWg5Bx3l?hSXnm?IK^($q&fI)WcqhW(;gXpg~QE#(l=E_8ud1)0@r8 zakN~u?<(7tH0`dvddHcm#&(t6OL+jSY97hP4d)TP;jG7obGF`aj`W*%i{5b7>kVhU z-f-3{Pd8d7)?>q2uP*D>a>H4#H=Ol)!yymeaMokP=~zw6#(LGWTJ|b%Pj0fGtf%d! zT~7Mjpw6g~?aMP0thVVFbiKmLzFx2F>-EaMUeU_l24Bm=HL^gR?Bxvg5>I*X+D>`s z4_e|okwz=~VEUjny;Sv{A$f&gug2EEhNW9iTrAxh(jezdqr8`r3U#^#z zZ>pEqZK@X^SiVjB|Ii(E)8gHM?6hw8YQ8X2BD{XDR~Pp{KD2&whZlTTre5hG^Rtl8 z(`x*gvYq;&hb-vTyf68ilbKx|^RN~c$PvI>eWkjb#0?s`NaPPpZL`ky=0MmQAK*uI#|#7G+zfZRC-mi zszEhh2QyR)FK%1oItVYO(q3jA+(OkhTL(3f_DZjVTh#d8w3KX7D|*Yya`tIl@HjLt zW%XF_GU-?g_cgARI&*mGQ-8fGpykWeSeDnfdNryKojP9HbWI=mo>l%FcZpftzQ``)al71W;JYV+WmgDD8p}2dyl7~cu(~> zK@PLNo1ZK{Y5ZF?K8;nu4b*FQ-XOcdO`Xo__cx~1 zhi)Ww&`m~_e^rT-q|e%Wk;)xP_n_}DQe){;3U$*^+L7Gq4gRQ51wQ)ds!r#RW7P`! z;4Pu=XxU#mhslZ~=L65@xx>}5!_tizs@vg{rU{oq~RzXe}`9p2Y zAD+m6ph}LEZqtYXTG1`hif)ef(rq#r4Ko<6GZ;@!n% zC|#v#_WJb19V#(reG=1ksN|XIlbEDKsW{C~ALT+*(^QZ7IY@Vto}|a>Trg9$K~Gmx z0CU#xO?UF}xMn-~;L@hc!dH3|-+iUpJ&vx8yqs9oygW7T;(ye;cs=jpYW(RkyX}!) z^M0@Q@Or(6*JBUQWc zHJRJZY&7?oDLbTHebZ#S@*^%VCeE-5?mcz)S?LREy3|T-`24IRZngEQSd@`kO;Ug(^3qEi%<)@%@uh8p4O}aBY6U%7!-oP!45sXyqUfxfbh zZw&Q{-WaOra850{o4T#nG;|w1Ebtec-U`Z8WG200HGA@+RcdEFEw9=aAB&~7bbik^@9K`CEwE5r1wrM=AU=pCxI+3iRZX|MF{=pDQgjR?{! zk#?{ae%E;SF|R~yX}mOXjeH&2!IvhvLp>g(+fatok3z_b8{I6NZl*5Fm!=)6{YCUB z6rjG^H2ore6#5f)mbo{5lessoQtK|3d#yd!s+E_}g+bq$R$oE~WT}cSrPEuL8a$8w z(BQjNW~m!4rQ5=vRP<81E%?<_m&(1l6R#7Obto$@E1Ub7DmqDarJ_zXwKjcs=-a5z zR)a35lP7GKsRftQk?@XMI=>&07x(zwr7BVTOX2&>YaSjt!u#Z94^U)j+H7c}1ncj#xN9r_uGMvR}4cHkLl z$5pgvHrxAlr~_Bg-qgImRlkMAwdnAR7s`&h!;e@Dcj(un9eOcD7ns*`gEOz^ZLXI6 z4g6JazAk2{^eSalgKEAmW~dfk&DTYE9c5ko zoT_cME@~njE4?m$j&<>#YiM264%WgSk60Jk(zq^ijl8xs;4vwaWwV01LGaQGCEWBv z*(81wH@u!Vs4K6fg|hx?S|~SPE5DaAr5+E{0(XacF-$KAG1d1LTB`aip*05!2`wCq zaRKkEd^gZ~2Le~|CPe0esavB{=BcSEmwt3=%B7#5ns73qo?cAX@Xu~m2N%ns>cC=p zoEWu)UZ{GjtC!HjiC@((p#|GK?@(g4>U%vcuqmDmX5rt@9nF0*_W~8T9uFj^Ev2$} z=t1(W^ec%^zw!7a-bQ?xmz{x`N1YxjFG4RGEBK9v9(A-zfqr!pt@3P==c>mu_%~`_ z8fX5*j1*6e94$rc0ZY_Xk#vd!RP@Hos;`na(FTRroPnChgOtI@*kHWoXqXH^8QUJZbr@jN0~lq~x+V`IMF(hPt%WSB&0o{;2abLHWekfr- z$K1vGp`-!ZTZ7)-#@4mm-Wv4w)}Xhy2EDyC{KEFuaFmCVhQ^1IhNC=`U@iE?hmwY) zJd~IcM?RD^=!cR9{ZP`NA4(e14<&iUty;BsZfH> zDV@u8m6>htJwkL^XwVyRgWiZ6^hVskclAm&MA5!ReaE{o^&M}+)OY%$#ctftxEtfb z-jLaiIW=6^8(Li08&r!6I}$V(b~5sXy+Pr^ZY;R48;lEk17FxXlNT=E+JY@!!%SN< zTYQ7w;u|uT@88`)mv3q!Z}Zed-ruQ-_-L`sH}E!ZF5lGJW|!{<{!3Al%XdS|%Qy0A zdikcgoVk2An9H|uqQ4z=pd@hlZcw;lI^rW+c8F-;8+nThG<}n1%J%qOnZ89gD881fO>1R&^Q$yX2rk|1F5RF?`AXjG z8ckiuT(fI5H8mi0rVrf1DblsPtl*|LO)ma4j`zqeCCz_}V7g=TMA^PlV;)cbvusE6 zG}S@h3A2o6&Lr7Bjk^=3&e$AHPkdhTo1H)#^ns{BABao{{5j2FIuMnpbMKW?_r&9VNB6|TyaP5r4`rzI>BOoA)%-k^p;~xxu8sFZcrlgs zGWSG>t2~U}d{I2CK3_-YpFY2%^G}caah*7D%&`y$D~zBjo!CGcCijS)EClfa}xh3llq!|ft8ojvj_dI2wg|ND%7*tybN2_ z9}?5#Jxp}(%)aVZPtg7Pu)607`km}y_1Y7%7k&KrgzQ2e9e*#o4C8QFwQp1Du35R= zMRrZ=J`T~AehfRMW%3o~cWn-uT{@j(P({;pTiGp)RDVa+>Ivz@45;P2>vr#NlS7Ts zr70!tKnaa`lD^@G)x}Rrk94S;o|L0ylOLomP&=NaFV)o>=_g2g>Q)}8*tB+|%&{u? zM|o6hcUdmzN1erVXs~HE)UH&|KP4+F_y-ittxmQ+puQmMH2%v>qqP;4&0;Il?(XMU z3$sb1`H0V2zIQiwW;1Aa_rBJ`9OKNNwJ9}g6a7{+r50?GZ_6&~p3U^2df79wlUlZ! zco3arRQ+)??IFfo_%!|Ml755stZb|LJ)QPyr*_p7|GGN8p7IEuIB`C-#RKCx1^by^(@Hy#}a=u#hyzC$9MqdH${nmv=g+24c+$HzW-TreL z>8tcm^k{9R$Ao&Y_Mf@)*uY&6(*NYngVkdkhtCY#KMjxJWcSR#9qFzXy&x+G;#m4m zGOg}Fjdt^Npszx@;q=G-7vu~%UiFGgem|cUm#+`RZ$`hT-Y^q0Yrcm!uisMJ43jgz zikVf7OzjFaV~ecBk4npG>0;y-MNZR)E7Xl!WX(YQFvx`E&N5*i)IpdrVIOK_YS*jJ zI4u9p>iQSuwFOP4MM>={RrC`5hN#Jymef9^PGhdg zfRxn6RfM@FT~|{37xf}@O?sfDcCV5z%lql6;DMKAul78Hd$`PMPXCI6S5K!XcX#h* zRd?9*^~-XT%&#Gz+_F5&F1D&`)KdxhkozQ}gmpM;gk5*7)lc2^s_fnA#0)30=Cz|f zqPxMd#AVfX;108@2dK|qm9wnS@9LtC4jn?jqYGXQS>{b7r`qo5)STM(^f^~)7nO1O z^${+QYL`bdE~}1kc@ZwTFJ@exR6Spp=UPMTx@pd?ZAMT5*`ikmZ)Lx$_i_!#V)^?DcPS<%-Yd* z-RU*$)C2FyV=}}G=e1K`HYGkJk3oNJ;&J-qFhBsh?4!zT!rW(~WxhGfFv4 zaHCr7Z9;IPCN(8mHtOz8*L=>6;>Dyzqh8jH>h~oz>LuN%R{MCkNa05P{+~6fTeC(D z`KEEWF8`)+xbFFehU+8UvWvc@mVL`DJ5#spoo}fjX@XnU@w+Ajx9ozZM9Y@Fyy@oe zj65PPCP(A z=;bgS;kSS*e3&Z4BsibGxC;%BxUGMrxT_I2yEn%ryyDSzs?U$~uk^l)6{`(D$|~y* zy5c_U@CUBAbJ??2J~eLoM!Q+Xdr+2k zLSo$RW&w3eP3gx``t!qlh5w2AtH;lBdQa@4&r><-wioCFE3;mn`+>-=MGhW z_*wQzU;01$nJ)bYxVz1ze+V^%o{MMQHpJ?Egn{n-Pu>=?0@la(-?rO2sf_crs=1|& zxAnvNwr){NLwhSbFV;8SBR%I~L*cfm53{UF6_r+YwsFIyog%2OHqhmDzxrHS?Q+uo zs>rh1(KPR6SzYNjn-eUnzbsS{%kqY@`QM*5pEnsQJ&IN}sOIw~L$&Z~K5yW4lzEd! z)i(P(m?qM(((@)yjdxf>Wu98$uqrFqr*VF8XddBgC(n;gnS88;zQ&oQQ`c^oFfv;e z*jBl_Nok%R*=m$+4U$Fb8rz!F6X&OYd2-}Ct)`QslRD37wJpuzjx{r6n4Tfu+^=qP zTD?kInrM!UQ13V!CkZEKRdaJ2CrQ2&PdXMgmnKQ4>-8i#(sLg6W@@+Em1R}sq#e}b z(yE}sm>>K}uR3jWGQL~#Xo9p?OS5T$bWo3GTm97|*;bBf$hJC#%D5@b=SYT1kC;^r zs`(trP%XTg&k=YXWsbC^YMZSsnn=e=&yluHybW&6vAXor9@fH9jWfW!4YH+i?r@bn zDatT+=*LvOT{I^eS-rL(F}=1l38-6YO7q+)Q+K;8`u#2U*ZVGOdQY6K|K;g(p1X1S z-08MXEGg&iHZy0mo;g>jy>41uT3Tr0BvkL*#)-ojTh-jw#);F;OdM(}Pn;X{#5vLv zXJooCmGQ)(AN=N7**R%1J$uT`?4eK09-Ni90A^1QwJVQiPfz8{r{$%WIzFG4mt(js z&8JR=N)Mz}4XXLn$xto4nok{g9cAj&P_@mL7fqyNrKe8K>H=C_YLu^lRu^_@oFN>U z$M_h%x@6L^7M{{Lw{+&(O|LG;sOJl4CN(L|GvpZcT>-5wy;aXvw7TFn_%Bb7=UO#R z5BkTyom6R|)wZfD_p6yBr|LO!V147CD^Hbb_dMC5jPsxyGs(vJ(A~@jY8lUmh@KBe zdd|bCk(#*aFNM}`%`01*wqIKO?l6!-{?lhC>sY6n9+w>_SN9{=^2Yb6D*fs}uMo$R zq4Ck;1g$lBv@lHi(ZaZ!M~lJqw>j%odF-Z3N~}{P{kx4#rB<)@oYpVBB@EnTm09$b zFr0kSZwbTIOXb!r$BrV3u63jNL-1{F-U51gxn=@&tTpck+N-ab2$)3<*GvK|Rm&=@ zj&h88u)^xppN|9PKjUC6WQST_<1@@;X86mS{!cyhnm1DYRAKd#wW?30)w%3}2Waft zOLNS{(R1RwQ&q6i8hYZkcZKMDtq^_Q6JkDHKs%o`e{S$s7tG`P@O^alNIpQ^gtNqw zkEAFhuJf1){*m;#iu4@yai!J2bgWZ|3i>}9I?;)4wl;nC+tjm-l`li>Ms9Yx#otFw z%W{k7&RTnxTYPcWPLh>pXP@mBeIQSRyae)k$hDA9L+*t9{A?~OC$MZafy-7yPM$Do z!k@$?6Zoig=Y)k5+~Qft_a^+=SuDN`P3WCfEL;S6K9ev7U79=Cc4FK z6Gu%b7OzhHJu#n=k6Ro+>Ccp|4|2_`zOtFxy6%&-D1$>PLs35!;?2VvqX}l zTYNj2edHAOX*Gp?I!!5?QYN|+Qzp)s61vM(EH0hG)i0TH7g4Jr*Fio7`B%tKNxH?* zsXeB;#aWOuNfwJ2rg8&zKprIN7Hy|xpPeOcpT zrf&|>$F%9}dI983kav?T6JJi}ggVUNiYL$D0`q2YxCmjlsDpf*WUw&f=LgU>2u1hGdqQK8t;>CcapFI%^co05O}b9+Jf; ziQ{H-r=2{Ti_M0-jAR?})a*xQyT!Y+7t##)X7+VdIDZby-jHJ;CvN(ty|qP#Zgue7 zPg#GkDn&}%56yD0_Jw#BT3cw}h_|8jgSKD%1KMb4KZ&29odeC1bWEhL%3OyK?M1Hi z+77B=329ZLfHdhT6n8kP=s)dJD0_t9dOsOmqEymJk_x_LG(WUYjCLBdZ2AJS=NYy| zVY-smm9z=a29s7pfBBjZ?R3(5i7HtK?Of9OiEi@uwnfQYL0XaMDc`n3tS*JxOTG)^ zDrmjshtSqR>mxscwt=)#(N}&3?Nw;~AcVB6;tKOn^sm?uB^}nBc7)>@cARQlDu)m%Os;CUMKm?h_^}Z9Pt;D zdq@0@q#Q|Ui6@68bF#7?A6@U77~VAc`J9R2S4m3o!RTx0FSY+5UJA#U-6TuKd_uCz zn9oQK7_*P$p6u($r~Kqcr4*eZPY<1ZwOfjNAooHJ@iWuZ=@b9&iRpg|%WEKCg>33` z%Bc-xy#w+ekb}lD)70n9vE{i^RGh|gCS>fik*xeuz5|DiChKX#enW#Za2Wj;M>6^Jk=7^*Q~uV{I_DPHNBqU9k}k#o`Tw}i4b!?-l(+TpuM+Xiis`0ene zVvSWrPdGv>5^JHIY_vzAJqV5aFyUNdeQUH=hAVNq)rVf|xb@q~cDpq`qYZH0Va@L* zL&iARd8ZZ47>7CUvf@U2XZTyryREU^b(melzi`H^74(3ngZ}J%(%RN9t#!{zSkC^e z>0bMrRRK-++TX0P&~&f;%?gu7^)JrhZu^_%JC+OTZhPOFY&7n+_buN5w&`yBz?u(j zDSGV#>n5XduYF*xfu?(Hmo@JsE~k5Km$k-d+-tk6{j7zkYqkzQD{GfElKzz}x9OGP zcZmo`tpAxySh$4IEU+wvUQ7qF}Dwme4Y(^X4EO1QDXoH=t97~KA+CF@kv(Ry$QQsMU zYgUnC&1E{wuHo-xb$2{6KOOWy)=)=9IIYdhzSI$crh82}?t-R!O*yth)4iq~_98B) zdrdjE8SU5*b=w-p`$pw%TjSVv9lPpoyWO!Ln(nsS9fgb8roW=MJK90hy>^G=;Ein4 zy>^GgbCcG%*Y0qHp>eNm$-cw!y3t-49$GK%bmZL3uH0=~vhQ?MXS4y%yBuRP+FTY|{(c?CD)!p`@BVaWCioWRZtkyQ3Y%e*EGaC2WOAe1>o9?xj9cM$+z4o%>5~J}~ z^kv5aXu8)zuQ&!j#07P?z2XQMjl1m?M;sb=+t=BzIPxB5PyUKNEE0~BjkcX^3CD#Q zZGiJt$4wb+u=6#?=8QJX`MTp>qrEeHfA$+8$NP`#pu2{b=6v87@}$}tOsTuik&H$VKq73bXk)M&a z(`cuR{5of#z1L{xj{JeN{YJZXBWQGH#5?WoZ%8#RcuM~t>? z)LUYRz0GLrN9`hQ`Oa7uY&*)2BqwH^?y(IgO9^f2f_ervCn>=y!)vlB6 zk)+Z7w@sckda3JF`#~7>^crh#fVP+p9|_l3doQ#_;+xUiUE}QJZVvN_JUIG2*LeH& zzq6*xooQF^VQmSOTQ1JDFZ&p_oRMR`bDeE3Guqi>4w4pSEkxrxXN+{8ZErTld1JCk z+YareoLJ5u#MyR((O%4XhO}>u=XW`AF~QFJL|0MndXcm)(6)(VTuVtC0_`PnlIvB{ zE;F`~uD3{A0xh&nOoh6}7?-*JM8+Ns9CVx5?0Qd3v@d|RSiDI=C))Ef+Ah+Tq}X$j zc!zA0>>;0OZPA#wNTWZr!gd$5bB*>Cv;|rViMOHNWQ>oy_fWx&&{m5N-Jc5jgChOU zfe!90ryA`gc}DIr?&%qAUT#nKITNxf9f%hz!kg^PP>We@V{E4Z5$)Xk5iL_T;_XLOu4^+DoAEoOwcCYx_TEo1O_F zI{&dpkXeZ?VI^%PUl585{ITEUN0uHI;WFOb%)A^TmU+O4vzTW!zRTyUExB5j3zq0u^$w$k2Uv>v4W z*4__osd$=NQD^6T!{t_s(^`EhR@oPRhwAmc!d?YU587?^l<(Q52W_<-x(uowwKeuK zqw%P%v7<)gQCnljjdnu*!|pZqM@Bp3-{ijC_WXbfbIMNHod%#{`G#<1E?YPl+&|-GZAzi~jYQ#f!#Ubntdek1a7tnu< zH~m$6#J&%j9<@j8;LmK+qxPsBhNcJYaeIx?c+eiVHyDiv?Qwg%(N4(U?S9<;)@ZX% z{oK95?n95Sv^y-#xti1`>`U+#yEJD5X}`B0G}^1AJ!yYrw8Nxrv^|nvZI|X$j{V&I z2Yb5FP9yCpdyUa9AZ?SqQ)^<$*l*pN?T<3rLHE;k4~wGE?jTl=J?MVc4zMcps6A&d zgQiFAIr|=Hdeok?w?or|_MCm61IdU7#yWDJv$sLhgZ7;LzR`Hlp11cKjR);{+efcS zRKFgz7wlzFw+SA#xV_zIJZf9)3a75(X==qE?P_Rx(6-vkvSGtlZJWIjnjW-m_LVto z(}VV+y#ksZw3qD%wHC_ZQG3~r8zYa}%XZReC*&9AzHHkrRFSi1Y`ff7Y@g8%k(RKp zHd>F<+U34#Z#LRU(q6N_HQIdAUbp+Wb(EV)d&9oOXrbpwebau>sDCEyE&C&_iG8Pa z&fRW*o6%}=-?oS3A`E@i`sMz~z66>cw4L@UXnN3g+7Cn1gSOLtADSMto%Y5&9Yuu3 z9iO|?-U(HY+D?0~(RkGUZ0F>&>o&oo_Gf#%(Rh9Qi@nBZJZSIONu%+gy=zw&=qd`w zba1bc*(rN|#&u?H%3hIi-Rb_!ez1w>XLdZ}IWPA!`~8fkBlmOr+a{i$ z+j*r(hN{1TY}Hz$>W|O;(hm8I%GG~qPtLe56<^wyK+_knFYPEaeF6K@-f1+xfPHDN zD&s2j1#F-Fh|%~0w$ENw&NhAj`pSL0vr#A7?af(jj|%7q)SeexG~DzRPH@443Yo>~~q? z*TKuiJ)QfLJ?j{D)#G&7o)1m8>9GAEG~K4d_WMTTHXXL_>dNJGn|`)88jYLuvwc@L zw&^Ab=XPkiNy6CxEuWoacNW8sC!-yr8rn9w zkk-ITXP3UZ!dsv%hqkif?a=IKd8Km=)YUmV$92l9bZ&sQG$%>RY^8Ij(ZuPj<@Mt* zI<-pY_vtW*Lcc~8fz$a<>gSP^;@oj8F9n_tc`dBh1K$7{S`KO@l&0oJ>=0|nY76$1 z;$F!ATB%TrivL$DJ4#*j{r_KT*-@gJ6BloY%ji;*(S6F50oa?L_ z)$TV|htOuk(Ib7N+z6|l0hGjlDF=>oOHZDEYt*w>Sh>ox#Ok6Neq+`ApQm%@_15tr zDgIA;Mfn$4kN=ujQhuv-6;)4$9A`zg{&D8;{Dj7$By$sN@{^lt_F&l3G-rRe)`)V%(!w3(G8IQ=jB{CDU7zn>`P|G!_1=Ra?!me`6_;XlSa|C<&*GL=_R zftEXg--rAN@^g}OHXP4S`Nbq{(S@W_3?i8&P9~Wx&LNp2enrwHt|RFdt4QXG`$^h) zV&nMCF`}0`wvhied+Ku{Tb3QtU{y(r$seE)!f#AsLc5vh(L@q|; z)`(n!$fbx}CXQ2yCGz9#YIlpaKMHg+PS}RD?jqCdL17%5+F^go0xQt|}xQ1kzSWdEBD3TT8K9ZH< z36gD^PnDi(+>Mr7^|-;>g`OxwPn4r4Dg@_SDLCIYg7a-F9w6Bc>9$9@9guEEr0YSt zRYj}~|H|V21%*zx$xL^eKEFKM zezS$LEg`^YqIND-z(F{VRn!L^m3A*GlOWta}-m<|<~4waY= zZ7?0$3a+gkYHN?$I-s_WdcO5mOK!3%(ACZN7OtfbwG^S2V${+awUnTiQq)q0TFOyN z1!}28Ep1Rs+y7zSG`*sR22&?U@eppU8%a7uf~3S)Hs4KuqRYZjj&1+asf`EJ5+kWD zhd2v0YUZp^6NSz6fJ4%1;v~f-U@j-=5LdzHdPrt0!)!d=B77V8SHZsp96-gt{2WAw z9!oTR5Bje?>`=v0{Ev@FA*%lWpSP!@KXd#ChyIOd8GnNcsq7Tn~8u zA9-*1rS0KJUNiat{GV89{{K?poyhtqYZexkM(h96l2y=r%~G-7TC?ciY39~hgF{R5 zT!LTHU1Ik{`n!X5D7&+C3I0jgl_F!iQr?G|TF+Lad+ z=T7>Bm`f*po>xf`Ja!ey?}>SS(w`{K3Hd+eT`69l^aMrTKB=AU63Iy(lKUpL3(?0x zC|Q%)P%@bfBPKiYU1Hp17s)A;-=Zonp1h0XHNdNYUzl7-))yx)C!T+o<`VoHH)80w zZJf%vWc}-8PIvF*i}U@I&{A;*$t#H;FlBN66l>%ZuN~q{m*=k(7fxB3zlbtjmp_Ht z7bE=oq(9`}E@lnel7BCHXc0n0jO0XDTHB|*oPWFZ`lL75XUa|r&A)V8DO^+A*)h?6 z>fb1G*Qv|%W8&1Q$^56Si>Ll0e~WeH)X%B<>!*6{DIx3DsmIt;tUDkdm|8ElSR1Ck zC8k(UPhBcvl*Cv03953Jc$;L~g54xNbcy8FBt*Yy9y@`7O9&pCgz!ykM-2B_LX4aC zDoO6S1bTFsm`YZcHD_9&fUMNJ2@&FMPoUcqJRXF3I1=LWY4tK8uAfFfCZ)=jQ;3JB zU0m>$#Xp@$S@fH-f&@DIY!U_B`Atj~^d#oTugK{0E$iGfV;HM-B!M{dGQ4$XpyiK8d*)i)+(~q+mw`~=( zb`y?R?ipQL`Kgwr!tdxi!(;m$C(NMEyjS>VysXBow$2CzX6%zyGzn%FR*8#d1PiB- z_mzYnoUyF%a>u3_w-hGC^D|x)RpRX#D+%uc{(8o{E{B=PrAF_Q2BF%b;^1@QoUB922LDjad#bdJZ4IPQW>oU^@XC3VSPitcrk z&fHZLBm5Bs;%W|vZZlIwPdG-*^w>{0X3pG4{L+~}6eXzQpNh7SXG!q^@h15k5J{2} zrBaTc$^R?z=}guUfmBgKObF07-`+YrG@w}8+lOm;Ch#z)%jR}$p<%nIxX8XSaCvc& zxTcI2C@vu`xi?!ohR4%H9^Zy?B*)HSm^LCEf|#UwjwvUBLGN-v@j^ z><(g`$Iw|+!a&T@rH9uYjh9zlmZLf@bE#JoPKGs#Y~yd^GCGwUsJJQ5lPStU7% zDv63Er&1*^p5-gqhzRwNF7d+TDJAt3XJ*O0jtE7#*YUutU1B35`|THJEfrMDtP4s) zRpL*i`0d>!r`Y>u{fesO&Z!bV5K~VxV;+U(6sa&3m}O_p-ds{8b7%ASs_*RAN-n3g zmgEgX#oHiXr(qrd{ zKK2W)9C56@jpRrtr-B;z^b&)`Rh7NO zypVX6KKhH&f?i^TSVs6%;AxO^M3k6?;vJHUMUv!=B1N*b=tHtCLUe{_calC-=|cr0 z#GPV5-U#ue2#{PShLU_(j3W80sLk^u6+d}~mXpHy`jO))C_D!;2qp;EpkdhaBH+c4 z5hJ;M5yXkWe>wPdkTEbZSYw7^|A!cd^0tCXz?^_ zIq;bSpCI@k_=_Ovzl%?07sDq4YXtmq$aUb?!6ybL7J}15P~yOG;H_}liUJAn3GlB% zCXM8l?Sao8_@}_9;QuMGu((%*#hwm}o9D1NMHhIN6+-7g@xaLg>;?7$*FgG=WPd-b zelVv%2EYV>gTO)Hiy*^b!oU&W2=H?2wGd?&g%X7!1{?!^2sjQL2TlMdfM1178p&y; zfK%{ESv-3_1tT166%OtR2c!#(i!jZ9Hz<#h?AjUF3nwpd4Wti@4|oKmAB-RP6v%*) z9A^%2&`4%30uCEVOvtquO2kNZS`HjFl9_eDF;o@QXyP8i9|tH4Pknc3rb zR;(!6_ypm95%6MINm9~_QED+FkR<vG6-FswrXk`#I!iV;t(iNPmk^W=)5 znuow_C7=6SZ$+uC|oDTSL@=pF(jsv3@zxrNC~;&Q4yjJ3BdC zXXlgRP-$l;x2Cg`*K;p?yeL%zJOa`W#t(c7H$dDHwUKmDXbH|e8X_(C& zPLf7_L^gj5{P6U{a}Jm}u+Bj#!sJhw$_C*Xgl8By47?aVi{V3(r(_5r79(5)P7xG{ z8p-*tgU>qntV1zks4~J-Sqz>rl#K(&fw#hQD?GPSS(=^{N48GDCjp;5*&*(h6sQy^ zM-DnF2OS0M1@;1uAbDT;h@3q+v8JB9KMa0QK{u)a69f|h zjsQo2qrfpEIcOYw98AJU=99olSX00$V3Et!i(K*vxm^4~k|~do%y_|j!T5lEzu?lfWq> zIhrdU^WT-v?eH4O27kVm%m={-!9;)~z%e7)CjmYICS@f0ra()M<}J{Y89#V`0p@=Y zN)YA0gECo6%s{gfssskfITpKfxW;!U>~p_*bf{44gd#% zgTP_nFmMDo0vt7x>y3qAh=Ga&$AJ^T3E(7f5;$cf7Z$~wt|&$WjAX_O?1j}2><11S z$^H@Wkz&mM7z{B`2_rdB3VaHTt2L@=jS7Ihz@$+BeqcYW0pI{|&`2&D1|J3!F_QTxa1_=UaEvg`|2U{Ps045V zIB6soP64N26{XCGQlx7nGam3BFkWCUun*V=>^GAA1B^p?0hog@1cAfAVc-aG1UPCW zR~!S5!5TM`gC>9zuqJ_%z$qiStSHlx{X?!Y{&0cv7|Dzm*bA!<*az%4l0yW*2fze@ zgTP_nFmS|3Bn=#cH36ImK}nVI>YW0W0^=&@0h=YMYnssZH(_5%ljgTN6Z*)s+lgEax108SZ+(3R}zs$}dnk{LgEKbT;p zUjIQwjN}3_;24||Msnd4_!Jmd8&uPVd9RVo_`&aEojSyJw~E3@Ln)JBboOD`(X_L2Y`b{a-1;uFqjDAP+kN|6ox2p%t$T}2OkHM z08RiWfs?=~BiUcH(-Nt-(~=nvum@HzuopPw!-o%)-$*VH01m(!1P%g+jpWb~@DVUk z;3#kmI0hUylKm6F30RZB$q>mS;!I}V00H=Uc z9dQ43bwmXnQ30?Q*bnRn4jRdx5%3W(Q6rg;fscWS8_9eEI00+YNHmgoTK`j^goj;) zhYc=Z7qG`jwt9iRu=cmyLI|f&E6ZH3%GpH3A#~ zjv2{i6V)O8!39!qO2O>%q8cyrUSKbv zfQcE2^*;e60dvYo4(jTwB^UPg)sh)MupibSa1c0RBzwld$G{|j6Tm6p6tJtGKL7L^ zobz6Zs~;)=_Vz=Y!1%%V4Q4(FCJ3J(_=u4lCjveOCI-(Kn1qpBOA0 zR0_pJe|8f6(fa;ubs5aO2iOB2FR<5O{`>r0u98AJU=0gc`J+>eTa}tIW zaLQn|ietGa#Ian!Wh65m@E$N;BboOB`(X7O$z}b=a$g2u4S)}Zpah|Wjbzsd_z0LN za1=NO90QI6$AJ^T34^(sBybXZ%18|804=!|?*PnyFDU;2Jv8j0k9 zLw=ZpP=de_Be_5fI0kD1I02k85}{Af5*3`FB`N^#2NMJi0!NHwpI8Wn7^sAim`dPN zMsm>93Cw#3w{}%lcn9aY=ocJ=9WI(ygHajr?^O5=W~(1o-w-bA8^S&T-~ezKI6MUB zpD2_l3~?j5Sn?z;mOP1Ze3X`8fRm#bi_y%B(TqJtGUEgG!5T1VmRSFNP<*r5959m2 zVenxvQ6rg;1IJ-a0w;mR98@p|p@BWXK42ekz)1ECGY+}JFh^mC0>^>lz)2%Hs5loD zoQn#KWX1>VgEe3z`-H)V!9Oj(k4ipO5&!o)8ot6d!QFNOlc_4}*yUM}gzOap0tp2z>#E78fw~7|Dze zybnwOH~<{J0P{Z#C2AxWh{GukCTS!>Ux;chWb6U<0Q-P_zyaU@a2PlY90iU7$Bo4N zPr{G{C4#6Xh!y~QfPKI|;DC|r83qo+8a0y3#=*zIB!QE_;vzKQA~b+7oqs$~d`7Z4 z0H*+$FmM<+3LFKF8_E7j@JTS@Vl?1l<~_h3V4sm}4S)|YL+d{bVNg*cxo{kO98A(k z=EWtb;1X0|Br`tnJ}?0znU4d!QkOCxh75&4C5=R&Uuns%QQ+vWP;o8uq81@8 zW9+$%u@Be>959ltVc_s({M(7}W%IJS7l+{)HIn&g2u@Kl4=awtH4bwed=fYbJ_$x# zjwCMU!s2qI0_*|r0pkPqT|O@>Q0y}d`v-`*zBmAD0DR!`5V8XmCiAVuVHm;)8U-IU zn5|J*<3@5Saafb^OoA8l&|CA+Lq?*X!27@i=5c=n<~!r_>jx<8#a4>gN%N|-Qt1SM|fDV z54;aPKJWqH0QdlyFmTvljur(I1rvpT95@a>4kig1N>Vj};v~#Tn8g*`ZgB+%5?3J8 zE07$p2fT-TZY}nJ_kr<&@xjLjJ^(%dCcJ>-gcl$=BbkYZV2FcC8p(Z-T)skpaS}`trIPST5`Sy4xC+T#g+#Ane{mK135*9;-$J(f7P4nxA=du@l(3O(jxOXr zh{83xkOM_wjT2Angu(0?hcyY$B={s4aWzu88cAHuo*pBa@xbaMhSq-{oP3}HS99wF z26M3htYPA>FAgI_7}hZOsFB>tD6COftM8WS=nk3@Z-9Cu$^HqwtTzGY&ouCTS$s8%n|~Fb@Py0|INJ zC&WGB0po$y1KtP5N7n0$ec*lI1H{k@0c!w!K(DP}!mx(HhrvgIqam2%Va_EU=GG*Q z#P}^@Ml3=P0eco<{1#!I0Ph3iBZgKB!=UGg`LZ|wYXE!z5yIfZV8V-Zjxa<)MGZzZ zOHlC=4(9{*0SAm^YZ!bOOw>r` zDMBx0pQMq@h#Qy@Hy|{y2iOPf0}cQOfWyFH!gT+Qf{KEQ8_9u^z)4ueGE}pStMLGP zfPF@?H2@rdH4GdEjxJ|wbUBxe1IPcr-p)Koit3KzZ{B;&0!vT#^z6>CyC7pl1BTNj zfC_|O78Y2*<&q<)v>_xRL4lwJ$}ue@g+>vUYgiCyVAXWjt()JD4_&Ig@jZK zr5u6;w?r|rPQg*58QT8bNA=OxCiR$SrQQ6HgP0FK&N7<+BQw~DXR;txtR;_X>q%t;nn~X!* zq3niKeLTt@Rej1n<)E6regP@Al$Kel2BbnNW0SYZIFudAZb;R~Bkz&1m(#YEEALQt zD7%zh%3etN{~wR zQ4_HmnmQy+P2MKsgjC+8>{8VWNehto$pj&lXRC8mV^gaY(X30@$}ETaION@pGtyYtrLs!}mkJ(bkFvi>E#q&ZtHO$|fqcQ>c zfDEfs3$r@4B&(wh)zOCF%d8anRA^K+RZrD=m2H*NEo^EyAywI>>{3@RBrQ+br)m(A zrrSbOZ&BH%Y*ThZs_N@4iuJa72mMaHyWUf`_5OOLUZs!H)8lkUpP{eOU(r9;e-fP@ zogG~leJT28^jP#{G-f1>_Qr5yyfMj`X3R9^8BZBYjkQLtvE6vlIB2|K95voE&KQ@B z&x}SxGYzxIyv=NHmYTiH3UjzQ)|_NcGaogdG}oG2%su7-^Uvm6<~j3Yb6adzY=7)f z>`&=fYpbU<*cxZev36Vgt;5!F>y-7rb>6yey%s+lKN^2GemZ_Oej$D(UQp1v;E95_ z3yv3FEo_mn5-k(AByLM|NK__9CnhGQC1xeuM15jU!cY7qaUyX#aUpRnA(HvYc(P5h zL-OuqS#nTvMDqURq~z4(tmORUGs)^CZ%k$`9p&$guNt@oXR@v*ULy7yq|Aqdc7R=)Uk0AwtH29<9mqv3SR%H8rD7L2yCSV#C0;!mD=K0* zmgV9A9fyfs8xRL01B*a?U>oqwyaL=N!OkxN2jt%Z9vP$#lRrhYOf|NpS&N?E(+t|M*^Yi`D5il=-oGoJ`kzbLc;P-(Xe?@*D%zl|14Rt_{hFZbKAp3GG3J0@=XZW)G z^b&EFV+rvAkFcd6rV{6nmxCA~E`Te=M=%+XvpR7Zd5gG$Tu2B98nqu~8Hv-xNuBCeukYBC-e# z4ss@B2`FW27!BksD%&6%#F)Gl#sniQF293p5eww)FondVYzvsrLrE$v)s% zSq6@i<=_uxe{j4U0M5i|4V=xAgTcq;Q1A&^1+J9C!HgU!aK`>Bc^?`zat!#Q90%@| zlwU%u8h#jTXo5%A8y*^vsmSqE%+&CJ|rhih``Z zL`-jop2b%RVS&V~b8r z3S;h~NOPIOIS0AiG(S(X+^1vn^`=dElRR#9usY;Xuh``5Z(`EU>)7#Ec{tNYol%5C z+wg@w+(oj(mSiJF_8Yn2<|7B=viHzz_1@CyUk>XtCVRc5%!@?LQvCK0|8*+OM2lr{ ie(FCi+rC(yjV!YxW;WVNej&JBnvJF8l}L4$yng`=`sb?v diff --git a/C2P/bin/C2P_Data.pdb b/C2P/bin/C2P_Data.pdb index 03fdcc670444ab7a45fe01b34ecda568a4976e74..d67db7954eb8ef4fb457ffcf01648931f909f1c1 100644 GIT binary patch delta 88298 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 diff --git a/C2P/bin/SteamWare.dll b/C2P/bin/SteamWare.dll index 1f2b21b2efc8bd66c8474de63da49a3a8990df64..eb0b2bf63261de65edfd990dd87122ed236e0784 100644 GIT binary patch delta 75 zcmZqJBG<4*ZbAnW>#WAE)-J}@E~eHl=GHEj)-Kl8F1D>*>}-(&9k!fZLf!Wr=l@B2 fKId@R=j{t3+1Ho@wM_S$$gaiMxV>^BdpidJcp4rJ delta 75 zcmZqJBG<4*ZbAo>PD^7~YZqf{7gK8&b88n%YZq&47u(h@cD6_XLC^g=HnXgCXvvr} fA+7P3*7gOF>}$+{TBiF=WY=P>+Fm)4y`2L9Vm2K6 diff --git a/C2P_Data/DS_Quotes.Designer.cs b/C2P_Data/DS_Quotes.Designer.cs index b9a824b..ca1be0a 100644 --- a/C2P_Data/DS_Quotes.Designer.cs +++ b/C2P_Data/DS_Quotes.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34003 +// Runtime Version:4.0.30319.34011 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -8108,7 +8108,7 @@ SELECT QuoteType, CodQuote, QuoteRev, CodClient, CodItem, CodItemGroup, RawMat, [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] private void InitCommandCollection() { - this._commandCollection = new global::System.Data.SqlClient.SqlCommand[2]; + this._commandCollection = new global::System.Data.SqlClient.SqlCommand[3]; this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand(); this._commandCollection[0].Connection = this.Connection; this._commandCollection[0].CommandText = "SELECT QuoteType, CodQuote, QuoteRev, CodClient, CodItem, CodItemGroup, RawMat, U" + @@ -8116,12 +8116,26 @@ SELECT QuoteType, CodQuote, QuoteRev, CodClient, CodItem, CodItemGroup, RawMat, this._commandCollection[0].CommandType = global::System.Data.CommandType.Text; this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand(); this._commandCollection[1].Connection = this.Connection; - this._commandCollection[1].CommandText = "dbo.stp_QL_update"; + this._commandCollection[1].CommandText = "dbo.stp_QL_insNew"; this._commandCollection[1].CommandType = global::System.Data.CommandType.StoredProcedure; this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@RETURN_VALUE", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.ReturnValue, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@QuoteType", global::System.Data.SqlDbType.Char, 1, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); - this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@CodQuote", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 19, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); - this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@QuoteRev", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.Input, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@CodClient", global::System.Data.SqlDbType.NVarChar, 50, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@CodItem", global::System.Data.SqlDbType.NVarChar, 50, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@RawMat", global::System.Data.SqlDbType.NVarChar, 50, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@RawMatCost", global::System.Data.SqlDbType.Decimal, 9, global::System.Data.ParameterDirection.Input, 18, 6, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@RawMatExtraCost", global::System.Data.SqlDbType.Decimal, 9, global::System.Data.ParameterDirection.Input, 18, 6, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@BatchQty", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.Input, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@CodInco", global::System.Data.SqlDbType.NVarChar, 5, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Note", global::System.Data.SqlDbType.NVarChar, 2500, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand(); + this._commandCollection[2].Connection = this.Connection; + this._commandCollection[2].CommandText = "dbo.stp_QL_update"; + this._commandCollection[2].CommandType = global::System.Data.CommandType.StoredProcedure; + this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@RETURN_VALUE", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.ReturnValue, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@QuoteType", global::System.Data.SqlDbType.Char, 1, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@CodQuote", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 19, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@QuoteRev", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.Input, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] @@ -8490,7 +8504,7 @@ SELECT QuoteType, CodQuote, QuoteRev, CodClient, CodItem, CodItemGroup, RawMat, [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] - public virtual int stp_QL_update(string QuoteType, global::System.Nullable CodQuote, global::System.Nullable QuoteRev) { + public virtual int stp_QL_insNew(string QuoteType, string CodClient, string CodItem, string RawMat, global::System.Nullable RawMatCost, global::System.Nullable RawMatExtraCost, global::System.Nullable BatchQty, string CodInco, string Note) { global::System.Data.SqlClient.SqlCommand command = this.CommandCollection[1]; if ((QuoteType == null)) { command.Parameters[1].Value = global::System.DBNull.Value; @@ -8498,6 +8512,82 @@ SELECT QuoteType, CodQuote, QuoteRev, CodClient, CodItem, CodItemGroup, RawMat, else { command.Parameters[1].Value = ((string)(QuoteType)); } + if ((CodClient == null)) { + command.Parameters[2].Value = global::System.DBNull.Value; + } + else { + command.Parameters[2].Value = ((string)(CodClient)); + } + if ((CodItem == null)) { + command.Parameters[3].Value = global::System.DBNull.Value; + } + else { + command.Parameters[3].Value = ((string)(CodItem)); + } + if ((RawMat == null)) { + command.Parameters[4].Value = global::System.DBNull.Value; + } + else { + command.Parameters[4].Value = ((string)(RawMat)); + } + if ((RawMatCost.HasValue == true)) { + command.Parameters[5].Value = ((decimal)(RawMatCost.Value)); + } + else { + command.Parameters[5].Value = global::System.DBNull.Value; + } + if ((RawMatExtraCost.HasValue == true)) { + command.Parameters[6].Value = ((decimal)(RawMatExtraCost.Value)); + } + else { + command.Parameters[6].Value = global::System.DBNull.Value; + } + if ((BatchQty.HasValue == true)) { + command.Parameters[7].Value = ((int)(BatchQty.Value)); + } + else { + command.Parameters[7].Value = global::System.DBNull.Value; + } + if ((CodInco == null)) { + command.Parameters[8].Value = global::System.DBNull.Value; + } + else { + command.Parameters[8].Value = ((string)(CodInco)); + } + if ((Note == null)) { + command.Parameters[9].Value = global::System.DBNull.Value; + } + else { + command.Parameters[9].Value = ((string)(Note)); + } + global::System.Data.ConnectionState previousConnectionState = command.Connection.State; + if (((command.Connection.State & global::System.Data.ConnectionState.Open) + != global::System.Data.ConnectionState.Open)) { + command.Connection.Open(); + } + int returnValue; + try { + returnValue = command.ExecuteNonQuery(); + } + finally { + if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) { + command.Connection.Close(); + } + } + return returnValue; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] + [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + public virtual int stp_QL_update(string QuoteType, global::System.Nullable CodQuote, global::System.Nullable QuoteRev) { + global::System.Data.SqlClient.SqlCommand command = this.CommandCollection[2]; + if ((QuoteType == null)) { + command.Parameters[1].Value = global::System.DBNull.Value; + } + else { + command.Parameters[1].Value = ((string)(QuoteType)); + } if ((CodQuote.HasValue == true)) { command.Parameters[2].Value = ((long)(CodQuote.Value)); } diff --git a/C2P_Data/DS_Quotes.xsd b/C2P_Data/DS_Quotes.xsd index 9eaab66..09449b1 100644 --- a/C2P_Data/DS_Quotes.xsd +++ b/C2P_Data/DS_Quotes.xsd @@ -102,7 +102,26 @@ SELECT QuoteType, CodQuote, QuoteRev, CodClient, CodItem, CodItemGroup, RawMat, - + + + + dbo.stp_QL_insNew + + + + + + + + + + + + + + + + dbo.stp_QL_update diff --git a/C2P_Data/DS_Quotes.xss b/C2P_Data/DS_Quotes.xss index 4d698f5..07b596b 100644 --- a/C2P_Data/DS_Quotes.xss +++ b/C2P_Data/DS_Quotes.xss @@ -4,18 +4,18 @@ Changes to this file may cause incorrect behavior and will be lost if the code is regenerated. --> - + - - - - - - - + + + + + + + - + 462 @@ -27,7 +27,7 @@ - + 462 @@ -39,7 +39,7 @@ - + 645 @@ -55,11 +55,11 @@ - + 562 - 491 + 510 562 @@ -67,7 +67,7 @@ - + 718 diff --git a/C2P_Project/C2P_Project.sqlproj b/C2P_Project/C2P_DB.sqlproj similarity index 99% rename from C2P_Project/C2P_Project.sqlproj rename to C2P_Project/C2P_DB.sqlproj index 0d229c5..9dc56f0 100644 --- a/C2P_Project/C2P_Project.sqlproj +++ b/C2P_Project/C2P_DB.sqlproj @@ -9,7 +9,7 @@ Debug AnyCPU - C2P_Project + C2P_DB 2.0 4.1 {84db66e4-9663-47f7-9dd1-3cb562629ff5} diff --git a/C2P_Project/obj/Debug/C2P_DB.sqlproj.FileListAbsolute.txt b/C2P_Project/obj/Debug/C2P_DB.sqlproj.FileListAbsolute.txt new file mode 100644 index 0000000..8ed8325 --- /dev/null +++ b/C2P_Project/obj/Debug/C2P_DB.sqlproj.FileListAbsolute.txt @@ -0,0 +1,9 @@ +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\bin\Debug\C2P_DB.dacpac +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\bin\Debug\C2P_Project.dll +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\bin\Debug\C2P_Project.pdb +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\Model.xml +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\refactor.xml +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\postdeploy.sql +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\predeploy.sql +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\C2P_Project.dll +C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\C2P_Project.pdb diff --git a/C2P_Project/obj/Debug/C2P_Project.dll b/C2P_Project/obj/Debug/C2P_Project.dll index 872bbaa2e1bb390657e971d3019487bf6a8123fe..563d58d0419eea24ed5fa9e73b417c561637daef 100644 GIT binary patch delta 48 zcmZpWX^@%F!NfXiW7jTbf%3VQMftPyJ*R1^e|uy#No#TlO8`)A@-h}JMy|~lS@byp Dz(x^0 delta 48 zcmZpWX^@%F!DLasv1=EzfScmI2-oI)J~Q7jR9sVOQ=1&Z5&)E&yo^PQk#qA!7JW_t Dz_JlL diff --git a/C2P_Project/obj/Debug/Model.xml b/C2P_Project/obj/Debug/Model.xml new file mode 100644 index 0000000..ecc13ed --- /dev/null +++ b/C2P_Project/obj/Debug/Model.xml @@ -0,0 +1,38116 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0) + -- primo tentativo: cerco il package dato SIA cliente che ITEM + BEGIN + SELECT TOP 1 @output = CodPackag + FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + SELECT TOP 1 @output = CodPackag + FROM Package2Item WHERE CodItem = @CodItem + ORDER BY TotQta DESC + END + + RETURN @output + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0) + -- primo tentativo: cerco il package dato SIA cliente che ITEM + BEGIN + INSERT @Table + SELECT TOP 1 CodItem, CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Item-Client-Package', @CodItem + '-' + @CodClient + '-' + CodPackag + FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE IF EXISTS ( SELECT * FROM Package2Item WHERE CodItem = @CodItem ) + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + INSERT @Table + SELECT TOP 1 CodItem, 'ND' AS CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Item-Package', @CodItem + '-' + CodPackag + FROM Package2Item WHERE CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + INSERT @Table + SELECT TOP 1 'ND', 'ND' AS CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Package', CodPackag + FROM dbo.Package2 WHERE CodPackag = 0 + END + + RETURN +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @separator + SET @str_out = @str_in + @separator ; + ELSE + SET @str_out = @str_in ; + + -- calcolo il numero di elementi della nella stringa + SET @Occurrences = ( (DATALENGTH( REPLACE(@str_out, @separator, @separator+'#')) - DATALENGTH(@str_out)) ) / 2 + + -- se l'elemento richiesto esiste proseguo altrimenti ritorno NULL + IF @Occurrences >= @PosizValue AND @PosizValue <> 0 + BEGIN + + SET @tmpStr = @str_out ; + SET @Counter = 1 ; + + WHILE @Counter <= @PosizValue + BEGIN + SET @Counter = @Counter + 1 ; + SET @str_out = SUBSTRING( @tmpStr, 1, CHARINDEX(@separator,@tmpStr) - 1) ; + -- metto via il resto della stringa + SET @tmpStr = SUBSTRING( @tmpStr, CHARINDEX(@separator,@tmpStr) + DATALENGTH(@separator)/2, 4000) ; + + IF DATALENGTH(@tmpStr) = 0 + BREAK + END + + -- pulisco da caratteri NON voluti + --SET @str_out = REPLACE(@str_out, char(13), '') ; -- carriage return + --SET @str_out = REPLACE(@str_out, char(10), '') ; -- line feed + --SET @str_out = REPLACE(@str_out, char(9), '') ; -- tab + --SET @str_out = LTRIM ( RTRIM (@str_out) ) ; -- blank + END + ELSE + SET @str_out = NULL ; + + RETURN @str_out + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0) + -- primo tentativo: cerco il package dato SIA Cliente che Item che Package + BEGIN + SELECT TOP 1 @Weight = [Weight], @Tare = Tare + FROM Package2ItemClient WHERE CodItem = @CodItem AND CodClient = @CodClient AND CodPackag = @CodPackag + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM e package + BEGIN + SELECT @trovati = COUNT(*) FROM Package2Item WHERE CodItem = @CodItem AND CodPackag = @CodPackag + IF(@trovati > 0) + BEGIN + SELECT TOP 1 @Weight = [Weight], @Tare = Tare + FROM Package2Item WHERE CodItem = @CodItem AND CodPackag = @CodPackag + ORDER BY TotQta DESC + END + ELSE + BEGIN + SELECT @Weight = [Weight], @Tare = Tare + FROM Package2 WHERE CodPackag = @CodPackag + END + END + + + -- faccio ultimi calcoli! + SELECT @PackCost = @RMCost / @Weight, @TareStRat = (@RMWeight - @Tare) / @Weight + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr = i.ItemDescr + , @CodifProfilo = i.Class01 + , @ClasseMerc = i.Class02 + , @CodClientAssoc = i.Class03 + + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- ================================================================================= + -- recupero dall'offerta il valore del PACKAGE/IMBALLO scelto e i dati relativi + -- Secondo la logica Client-Item-Package ( vedi funzione ) + -- ================================================================================= + -- SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + -- attenzione è una function tabellare + SELECT @CodPackag = CodPackag, @PTotQta = TotQta, @PWeight = Weight, @PTare = Tare, + @NumImb = NumImb, @PDurata = Durata, @PLiv = LivPackag , @PLivDett = LivPackagDet + FROM f_getDataCodPackag ( @CodItem, @CodClient) + + -- e aggiorno il CodPackage in QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', @CodifProfilo ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', @ClasseMerc ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', @CodClientAssoc ) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ClientDet + WHERE ClientDet.CodClient = @CodClientAssoc + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant' , @CodPlant ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM' , @KeyAM ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL' , @KeyAMIL ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED' , CONVERT(NVARCHAR(100) , @NumSMED ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo' , CONVERT(NVARCHAR(100) , @KgTeo ) ) + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE #QuoteWorkInt + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE #QuoteWorkInt + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + UPDATE qwi + SET NetProd = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END + FROM #QuoteWorkInt AS qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackage', @PLiv + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackageDett', @PLivDett + + -- calcolo i costi legati alla fase di imballo! + UPDATE #QuoteWorkInt + SET FC4UG = ( ( cp.FC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , VC4UG = ( ( cp.VC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , OH4UG = ( ( cp.OH * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x imballo come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT @MAC_IN = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT @MAC_IM = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che è il + -- primo Update/insert/delete su tabelle non temporanee delete a parte + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 e vita cmq superiore 5000 KG ( escludendo rotture accidentali ) + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG( ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 -- solo matrici rottamate + AND ActLife > 5000 -- solo se hanno Life > 5000 Kg ( non rotture accidentali ) + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM dbo.DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF ( @DiesEOLife > 0) + BEGIN + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + END + ELSE + BEGIN + SET @DiesPriceLife = 0 -- metto a zero il DiesPriceLife + SET @valid = 0 -- indico che valore non è valido ( ND excel ) + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', CONVERT(NVARCHAR(100), @DiesPrice) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', CONVERT(NVARCHAR(100), @DiesExpLife) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', CONVERT(NVARCHAR(100), @DiesEOLife) ) + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR ) + -- inserisco costi per ROTTAME + ,( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR ) + -- inserisco costi per VENDITA + ,( @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR ) + -- inserisco costi per ROTTAME + ,( @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR ) + + -- calcolo Package Cost e RMWeight da tab PackageDet + -- EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + -- stored sostituita perchè la maggior parte dei calcoli li ho già fatti + SELECT @PCost = RMCost / @PWeight + , @PRMWeight = RMWeight + , @PkgDesc = PackagDesc + , @PTareStRatio = ( RMWeight - @PTare) / @PWeight + FROM dbo.PackagDet + WHERE CodPackag = @CodPackag + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', CONVERT(NVARCHAR(100), @PRMWeight ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', CONVERT(NVARCHAR(100), @PWeight ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', CONVERT(NVARCHAR(100), @PTare) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', CONVERT(NVARCHAR(100), @PTareStRatio ) ) + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- carico quote parametri! + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam + + -- carico lavorazioni INTERNE! + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt + + -- carico OTHERCOSTS + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC + + COMMIT TRAN; + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr = i.ItemDescr + , @CodifProfilo = i.Class01 + , @ClasseMerc = i.Class02 + , @CodClientAssoc = i.Class03 + + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- ================================================================================= + -- recupero dall'offerta il valore del PACKAGE/IMBALLO scelto e i dati relativi + -- Secondo la logica Client-Item-Package ( vedi funzione ) + -- ================================================================================= + -- SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + -- attenzione è una function tabellare + SELECT @CodPackag = CodPackag, @PTotQta = TotQta, @PWeight = [Weight], @PTare = Tare, + @NumImb = NumImb, @PDurata = Durata, @PLiv = LivPackag , @PLivDett = LivPackagDet + FROM f_getDataCodPackag ( @CodItem, @CodClient) + + -- e aggiorno il CodPackage in QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', @CodifProfilo + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', @ClasseMerc + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', @CodClientAssoc + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ClientDet WHERE ClientDet.CodClient = @CodClientAssoc + --FROM dbo.ItemDet + --INNER JOIN dbo.ClientDet ON ItemDet.Class03 = ClientDet.CodClient + --WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant' , @CodPlant ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM' , @KeyAM ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL' , @KeyAMIL ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED' , CONVERT(NVARCHAR(50) , @NumSMED ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo' , CONVERT(NVARCHAR(50) , @KgTeo ) ) + + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM', @KeyAM + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL', @KeyAMIL + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED', @NumSMED + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo', @KgTeo + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE #QuoteWorkInt + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE #QuoteWorkInt + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + -- calcolo produttività netta nella fase imballo +-- UPDATE qwi +-- SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END +-- FROM #QuoteWorkInt qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA +-- WHERE qwi.ProcessNum = '04' -- solo imballo + + UPDATE qwi + SET NetProd = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END + FROM #QuoteWorkInt AS qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- ADESSO LO FACCIO GIA' NELLA FUNZIONE DI RECUPERO DATI PACKAGE f_getDataCodPackag + ---- Se Produttività netta ancora = 0 la leggo nella tabella Gruppo Imballo ( Packaging ) + --IF ( SELECT NetProd FROM #QuoteWorkInt WHERE ProcessNum = '04' ) = 0 + -- BEGIN + -- UPDATE qwi + -- SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + -- FROM #QuoteWorkInt qwi + -- INNER JOIN dbo.TabImbGrp ti ON ti.CodPackag = @CodPackag -- packag generico dell' offerta + -- WHERE qwi.ProcessNum = '04' -- solo imballo + -- END + + -- salvo numero imballatori + --SELECT @NumImb = ISNULL(NumImb,0) + --FROM dbo.TabImbArt + --WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackage', @PLiv + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackageDett', @PLivDett + + -- calcolo i costi legati alla fase di imballo! + UPDATE #QuoteWorkInt + SET FC4UG = ( ( cp.FC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , VC4UG = ( ( cp.VC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , OH4UG = ( ( cp.OH * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x imballo come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT @MAC_IN = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT @MAC_IM = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che è il + -- primo Update/insert/delete su tabelle non temporanee + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 e vita cmq superiore 5000 KG ( escludendo rotture accidentali ) + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 -- solo matrici rottamate + AND ActLife > 5000 -- solo se hanno Life > 5000 Kg ( non rotture accidentali ) + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM dbo.DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF ( @DiesEOLife = 0) + BEGIN + SET @DiesEOLife = 1 -- metto 1 kg che è sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita è OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', @DiesPrice + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', @DiesExpLife + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', @DiesEOLife + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + + -- calcolo Package Cost e RMWeight da tab PackageDet + -- EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + -- stored sostituita perchè la maggior parte dei calcoli li ho già fatti + SELECT @PCost = RMCost / @PWeight + , @PRMWeight = RMWeight + , @PkgDesc = PackagDesc + , @PTareStRatio = ( RMWeight - @PTare) / @PWeight + FROM dbo.PackagDet + WHERE CodPackag = @CodPackag + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', @PRMWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', @PWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', @PTare + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', @PTareStRatio + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- carico quote parametri! + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam + + -- carico lavorazioni INTERNE! + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt + + -- carico OTHERCOSTS + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC + + + COMMIT TRAN + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr= i.ItemDescr + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- recupero da dati dell'offerta il valore del package scelto + SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + + -- e aggiorno QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', Class01 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', Class02 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', Class03 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ItemDet INNER JOIN ClientDet ON ItemDet.Class03=ClientDet.CodClient + WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) --@strTemp = SUBSTRING(@CodDiesGroup, 0, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 2, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 5, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant', @CodPlant + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM', @KeyAM + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL', @KeyAMIL + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED', @NumSMED + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo', @KgTeo + + -- tolto: è duplicato di HoleNumDies + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNum', @HoleNum + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + --SELECT @cont = @cont + 1 + --INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumLotti', COUNT(*) + --FROM QuoteList ql INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + --WHERE ql.QuoteType = @QuoteType + -- AND ql.CodQuote = @CodQuote + -- AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE qwi + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + -- calcolo produttività netta nella fase imballo + UPDATE qwi + SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- Se Produttività netta ancora = 0 la leggo nella tabella Gruppo Imballo ( Packaging ) + IF ( SELECT NetProd FROM #QuoteWorkInt WHERE ProcessNum = '04' ) = 0 + BEGIN + UPDATE qwi + SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabImbGrp ti ON ti.CodPackag = @CodPackag -- packag generico dell' offerta + WHERE qwi.ProcessNum = '04' -- solo imballo + END + + -- salvo numero imballatori + SELECT @NumImb = ISNULL(NumImb,0) + FROM dbo.TabImbArt + WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- calcolo i costi legati alla fase di imballo! + -- QUI VA FATTO CALCOLO PUNTUALE SU quotaPlant tramite Articolo-Cliente / Articolo / Packaging + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT + @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT + @MAC_IN = DCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT + @MAC_IM = DCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che è il + -- primo Update/insert/delete su tabelle non temporanee + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SET @DiesEOLife = 1 -- metto 1 kg che è sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita è OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', @DiesPrice + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', @DiesExpLife + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', @DiesEOLife + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC WITH (NOLOCK) + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM RawMatDet rmd INNER JOIN QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + + EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', @PRMWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', @PWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', @PTare + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', @PTareStRatio + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CANCELLO E CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- elimino e carico parametri! + DELETE FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam WITH (NOLOCK) + + -- elimino e carico lavorazioni interne! + DELETE FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt WITH (NOLOCK) + + -- elimino e carico OtherCosts + DELETE FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC WITH (NOLOCK) + + + COMMIT TRAN + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr= i.ItemDescr + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + + -- inserisco note sull'articolo + SELECT @cont = ISNULL(MAX(NumP),0) + 1 + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ItemDescr', @ItemDescr) + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'CodifProfilo', Class01 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ClasseMerc', Class02 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ClienteAssoc', Class03 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'CodDiesGroup', @CodDiesGroup) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) --@strTemp = SUBSTRING(@CodDiesGroup, 0, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'TipoDies', @strTemp) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 2, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'DiamDies', @strTemp) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 5, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'HoleNumDies', @strTemp) + + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + + -- inserisco lavorazione estrusione! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'CodPlant', @CodPlant + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KeyAM', @KeyAM + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KeyAMIL', @KeyAMIL + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'NumCambi', @NumSMED + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KgTeo', @KgTeo + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'HoleNum', @HoleNum + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @cont = ISNULL(MAX(NumP),0) + 1 + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'KgProdotti', SUM(KgTeo) + FROM QuoteList ql + INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + --SELECT @cont = @cont + 1 + --INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumLotti', COUNT(*) + --FROM QuoteList ql INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + --WHERE ql.QuoteType = @QuoteType + -- AND ql.CodQuote = @CodQuote + -- AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE qwi + SET MSR = rmd.CSR + FROM dbo.QuoteWorkInt qwi + INNER JOIN RawMatDet rmd ON qwi.Class03 = rmd.RawMat + WHERE qwi.QuoteType = @QuoteType + AND qwi.CodQuote = @CodQuote + AND qwi.QuoteRev = @QuoteRev + + -- calcolo i costi legati alla fase estrusione! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM dbo.QuoteWorkInt qwi + INNER JOIN Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.QuoteType = @QuoteType + AND qwi.CodQuote = @CodQuote + AND qwi.QuoteRev = @QuoteRev + + -- inserisco lavorazione incestatura! + INSERT INTO QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM dbo.QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco lavorazione imballo! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- calcolo produttività netta nella fase imballo + UPDATE qwi + SET NetProd = ti.TotOut/ ti.Durata + FROM dbo.QuoteWorkInt qwi + INNER JOIN TabImbArt ti ON qwi.Class04 = ti.KeyA + + -- salvo numero imballatori + SELECT @NumImb = ISNULL(NumImb,0) + FROM TabImbArt + WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'NumImballatori', @NumImb + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- calcolo i costi legati alla fase di imballo! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM dbo.QuoteWorkInt qwi + INNER JOIN Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM dbo.QuoteWorkInt qwi + INNER JOIN TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + + -- recupero le MAC fase 01 + SELECT + @MAC_SC = MCR + ,@MAC_ST = WCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT + @MAC_IN = DCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT + @MAC_IM = DCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + + + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO dbo.QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ROW_NUMBER() OVER(ORDER BY CodUtil ASC) AS Row, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = 1 -- metto 1 kg che è sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita è OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco parametri calcolati x matrice + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesPrice', @DiesPrice + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesExpLife', @DiesExpLife + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesEOLife', @DiesEOLife + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @VCF01 = @OCF01 + VC4UG + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM RawMatDet rmd INNER JOIN QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per ROTTAME + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per VENDITA + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per ROTTAME + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + + -- inserisco costi per IMBALLO + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco parametri calcolati x imballaggio + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PkgDesc', @PkgDesc + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'RMWeight', @PRMWeight + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PWeight', @PWeight + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PTare', @PTare + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'TareStRatio', @PTareStRatio + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + + COMMIT TRAN + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + delete from tmp.ItemsRaw + where CodItem IN + ( + SELECT CodItem + FROM ( SELECT DISTINCT * FROM tmp.ItemsRaw ) AS a + GROUP BY CodItem + having COUNT(*)>1 + ) + + + -- ========================================== + -- CARICO DATI IN RAW ( da Char a Tipi corretti ) + -- ========================================== + exec tmp.convertClientsRaw + exec tmp.convertTranspCostRaw + exec tmp.convertItemsRaw + exec tmp.convertProductionLogRaw + exec tmp.convertPackagRaw + exec tmp.convertDiesRaw + + -- necessario se integriamo i dati x i gruppi di matrici con un file + exec tmp.convertDiesGroupRaw + + select top 10 * FROM ext.ProductionLogRaw + select * FROM ext.ClientsRaw + select * FROM ext.ItemsRaw + select * FROM ext.PackagRaw + select * FROM ext.DiesRaw + SELECT * FROM ext.DiesGroupRaw + + -- elimino a mano dato con oltre 68 anni di evento... + select * + --delete + from ext.ProductionLogRaw + where DATEDIFF(YEAR,EventStart,EventEnd)> 10 + + exec ext.stp_mergeAgentsDet + exec ext.stp_mergeClientDet 'ProductionLogRaw' + exec ext.stp_mergeClientDet 'ClientsRaw' + exec ext.stp_mergeTranspCostDet 'TranspCostRaw' + exec ext.stp_mergePlantsDet + exec ext.stp_mergeCost2Plant + exec ext.stp_mergeItemDet 'ItemsRaw' + exec ext.stp_mergePackagDet 'ProductionLogRaw' -- 'PackagRaw' + exec ext.stp_mergePackage2ItemClient 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2Item 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2 'ProductionLog', @dateFrom, @dateTo + + exec ext.stp_mergeDiesDet + -- se ricarico diesgroup... ricarico solo i campi che nel file sono <> '' + exec ext.stp_mergeDiesGroupDet + + exec ext.stp_mergeRawMat + exec ext.stp_updateProductionLog + + ---- aggiorno quota agenti a 0.037 + ----update AgentsDet set quotaperc=0.0374 + + + SELECT DISTINCT dr.CodItem FROM ext.DiesRaw dr LEFT OUTER JOIN ItemDet id ON dr.CodItem = id.CodItem + where id.CodItemGroup is null + + select * from ClientDet + select * from ItemDet + select * from Package2ItemClient + select * from Package2Item + select * from Package2 + select * from PackagDet + select * from DiesGroupDet where EOLLife > 0 + select * from DiesDet + select * from DiesGroupDet + select * from AgentsDet + select * from PlantsDet + select * from Cost2Plant + select * from utilities + select top 100 * from ProductionLog + + --update tmp.ProductionLogRaw + --set + -- okPr = 1 + -- , okDi = 1 + -- , okQM = 1 + -- , okSc = 1 + + select distinct ProcessNum from ProductionLog + + select top 10 * from ext.ProductionLogRaw + + + ---- fix errore packaging + --update tmp.ProductionLogRaw + --SET CodPackag='4' + --where CodPackag LIKE '%4%' and CodPackag <> '4' + --select * from tmp.ProductionLogRaw where CodPackag LIKE '%4%' and CodPackag <> '4' + + SELECT p.CodDies, CodItem, CodClient, CodPackag, p.* FROM ext.ProductionLogRaw AS p + LEFT JOIN dbo.DiesDet AS d ON p.CodDies = d.CodDies + WHERE CodItem IS NULL + + + + -- parte CALCOLI!!! + + select * from QuoteList + + select * from ClientDet where CodClient='05000001048' + + select * from itemdet + where CodItem like '1PT00102%' + + select * from RawMatDet + + + --Q 1312130001 0 05000001048 1PT00102 A 7020 7673,400 1000 CPT NULL NULL NULL NULL + + SELECT --TOP 10 + dd.CodItem, pl.RawMat, dd.CodItem + '-' + pl.RawMat as KeyAM, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ,dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL + ,0 as NumSMED -- numero cambi, da sistemare... + , SUM(QtyOUT) as KgTeorici, SUM(Duration) AS Durata + ,ISNULL(SUM(QtyOUT),0)/ISNULL(SUM(Duration), 1) as ProduttTeo + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum='01' and pl.EventType=1 + GROUP BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ORDER BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC + + -- ========================================== + -- re-insert dei dati di produzione x statistiche + -- ========================================== + exec stp_TPS_upsert @dateFrom, @dateTo + exec stp_TD_upsert @dateFrom , @dateTo +-- exec stp_TI_upsert @dateFrom , @dateTo -- adesso sono già calcolati e inseriti in Package2 / Package2Item + + -- ========================================== + -- salvo nuova revisione dati di produzione... + -- Va messa in ogni procedura di update con 'procedura' e versione anno-mese-giorno + -- ========================================== + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione x fase 04 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + + select * from RevHistory + + -- simulazione tempo di calcolo: circa 50/sec + ---- aggiornamento dei dati dell'offerta in oggetto + --DECLARE @tick DATETIME, + -- @idx INT = 100 + --SET @tick = GETDATE() + --WHILE @idx > 0 + --BEGIN + -- EXEC stp_QL_update 'Q', 1312130001, 0 + -- SELECT @idx = @idx - 1 + --END + --SELECT GETDATE() - @tick as tempo + + DECLARE @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 1312130001, + @QuoteRev INT = 0 + + EXEC stp_QL_update @QuoteType, @CodQuote, @QuoteRev + SELECT * FROM QuoteList WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteRM WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkInt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkExt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteOC WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteParam WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + + select top 10 * from ItemDet + + SELECT * FROM RawMatDet + + SELECT top 10 * FROM TabProdSc + SELECT top 10 * FROM TabDifett +-- SELECT * FROM TabImbArt +-- SELECT * FROM TabImbGrp + SELECT * FROM PackagDet + SELECT * FROM Package2 + + ---- test gestione selezione CodPackag corretto + --SELECT TOP 5 * FROM Package2ItemClient + --SELECT TOP 5 * FROM Package2Item + --SELECT TOP 5 * FROM Package2 + + SELECT dbo.f_getCodPackag('1EL00005', '05000001048') + --SELECT dbo.f_getCodPackag('1AN00001', '05000000137') + + + +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '')]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '')]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + BEGIN + WHILE @Riga <= @TotRighe + BEGIN + SELECT @WhereCond = WhereCond FROM #tmpTable WHERE Riga = @Riga + + SET @Sql = @Sql + ' OR ' + @WhereCond; + SET @Riga = @Riga + 1; + END + END + + -- Ritorno la select eseguita + SELECT @Sql + -- ======================================================= + -- Eseguo la select/delete e ritorno i record elaborati + -- ======================================================= + EXEC sp_executesql @Sql + SELECT @@ROWCOUNT + +-- SELECT * FROM ext.ProductionLogRaw_KO + + IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL + DROP TABLE #tmpTable +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5000 THEN ActLife END ),0 ) AS EOLLife -- solo Matrici rottamate e vita > 5000KG + FROM dbo.DiesDet + GROUP BY CodDiesGroup + ) AS Source + ON Target.CodDiesGroup = Source.CodDiesGroup + WHEN MATCHED THEN + UPDATE SET CodDiesGroup = Source.CodDiesGroup, Price = Source.Price, QtyTot = Source.QtyTot + , QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife + , DateMod = GETDATE(), UserMod = 'IMPORT_DiesRaw' + + WHEN NOT MATCHED BY TARGET THEN + INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod ,UserMod ) + VALUES ( CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'IMPORT_DiesRaw' ) -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife + OUTPUT $action INTO @SummaryOfChanges; + + + ---- a questo punto calcolo il VERO update dalle inforamzioni di dbo.DiesDet --> dbo.DiesGroupDet + --MERGE INTO dbo.DiesGroupDet AS Target + --USING ( + -- SELECT coddiesgroup, + -- Avg(Isnull(price, 0)) AS Price, + -- Count(*) AS QtyTot, + -- Count(*) - Sum(Active) AS QtyEOL, + -- Avg(Isnull(ExpLife, 0.1)) AS ExpLife, -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife + -- Sum(Isnull(ActLife * (1 - Active), 0)) / (Count(*) - Sum(Active)) AS EOLLife + -- FROM dbo.DiesDet + -- WHERE ActLife > 5000 + -- GROUP BY CodDiesGroup + -- HAVING Count(*) > Sum(Active) -- ci siano rottamate + -- ) + -- AS Source + --ON Target.CodDiesGroup = Source.CodDiesGroup + --WHEN MATCHED THEN + -- UPDATE SET Price = Source.Price, QtyTot = Source.QtyTot, QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife + --OUTPUT $action INTO @SummaryOfChanges; + + COMMIT tran + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 ( li ritengo come non passati ) + MERGE INTO dbo.DiesGroupDet AS Target + USING ( SELECT * FROM ext.DiesGroupRaw ) + AS Source + ON Target.CodDiesGroup = Source.CodDiesGroup + WHEN MATCHED THEN + UPDATE SET Price = CASE Source.Price WHEN 0 THEN Target.Price ELSE Source.Price END + , QtyTot = CASE Source.QtyTot WHEN 0 THEN Target.QtyTot ELSE Source.QtyTot END + , QtyEOL = CASE Source.QtyEOL WHEN 0 THEN Target.QtyEOL ELSE Source.QtyEOL END + , ExpLife = CASE Source.ExpLife WHEN 0 THEN Target.ExpLife ELSE Source.ExpLife END + , EOLLife = CASE Source.EOLLife WHEN 0 THEN Target.EOLLife ELSE Source.EOLLife END + , DateMod = GETDATE() + , UserMod = 'UPDATE_DiesGroupRaw' + WHEN NOT MATCHED BY TARGET THEN + INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod, UserMod ) + VALUES ( Source.CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'INSERT_DiesGroupRaw' ) +-- VALUES ( CodDiesGroup, 0, 1, 0, 0.1, 0.1 ) -- mi da errori in calcoli successivi altrimenti con 0 a ExpLife e EOLLife + OUTPUT $action INTO @SummaryOfChanges; + + COMMIT TRAN + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + --GROUP BY plr.CodPackag + SELECT + pl.CodPackag + , SUM(QtyOUT) AS TotQta +-- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + + -- dati produttività imballo + , ROUND(SUM(QtyOUT * QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + -- , SUM(QtyOUT) AS TotOut -- unificata a TotQta + , SUM(Duration) AS Durata + FROM ProductionLog pl + INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' -- cmq filtro righe con package VUOTO + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY pl.CodPackag + ) + AS Source + ON Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2Package AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + -- GROUP BY plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, TotQty, [Weight], Tare) VALUES (CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2Package AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + --GROUP BY dd.CodItem, plr.CodPackag + SELECT + dd.CodItem + , pl.CodPackag + , SUM(QtyOUT) AS TotQta + -- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- dati produttività imballo + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(Duration) AS Durata + FROM ProductionLog pl + INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.CodPackag + ) + AS Source + ON Target.CodItem = Source.CodItem AND Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodItem, CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2Package AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + -- GROUP BY dd.CodItem, plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodItem = Source.CodItem AND Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, CodPackag, TotQty, [Weight], Tare) VALUES (CodItem, CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2Package AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + --GROUP BY dd.CodItem, plr.CodClient, plr.CodPackag + SELECT + dd.CodItem + , pl.CodClient + , pl.CodPackag + , SUM(QtyOUT) AS TotQta + -- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- dati produttività imballo + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(Duration) AS Durata + FROM dbo.ProductionLog pl + INNER JOIN dbo.DiesDet dd ON pl.CodDies=dd.CodDies + + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.CodClient, pl.CodPackag + + ) + AS Source + ON Target.CodItem = Source.CodItem AND Target.CodClient = Source.CodClient AND Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, CodClient, CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodItem, CodClient, CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2PackageClient AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '' + -- GROUP BY dd.CodItem, plr.CodClient, plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodItem = Source.CodItem AND Target.CodClient = Source.CodClient AND Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, CodClient, CodPackag, TotQty, [Weight], Tare) VALUES (CodItem, CodClient, CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2PackageClient AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + in C = costi di contab industriale, P = da ProductionLog, S = Sistema di calcolo']]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + ) AS Dupl ON Prod.EventStart = Dupl.EventStart AND + Prod.EventEnd = Dupl.EventEnd AND + Prod.CodPlant = Dupl.CodPlant AND + Prod.ProcessNum = Dupl.ProcessNum AND + Prod.NrPos = Dupl.NrPos AND + Prod.CodDies = Dupl.CodDies + + -- Cancello i record con chiave duplicata + DELETE Prod + WITH (TABLOCK) + FROM tmp.ProductionLogRaw AS Prod + INNER JOIN + ( + SELECT EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + FROM tmp.ProductionLogRaw + GROUP BY EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + HAVING COUNT(*)>1 + ) AS Dupl ON Prod.EventStart = Dupl.EventStart AND + Prod.EventEnd = Dupl.EventEnd AND + Prod.CodPlant = Dupl.CodPlant AND + Prod.ProcessNum = Dupl.ProcessNum AND + Prod.NrPos = Dupl.NrPos AND + Prod.CodDies = Dupl.CodDies + + -- =============================================================================== + -- pulisco la tabella dai record con date non corrette + -- =============================================================================== + DELETE FROM tmp.ProductionLogRaw + WITH (TABLOCK) + OUTPUT deleted.* INTO tmp.ProductionLogRaw_KO -- salvo i record cancellati in tabella KO + ( EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies, CodClient, OrderNum, BatchNum, ProcessType, EventType, RawMat + , CodPackag, QtyIN, QtyOUT, QtyEXT, NumIN, NumOUT, QuotaPlant, QuotaMan, Tags, okPr, okQM, okSc, okDi ) + WHERE EventStart >= EventEnd + OR CONVERT( BIGINT , EventStart ) + 68000000000000 <= EventEnd -- record che darebbero errore poi nel datediff > 68 anni + OR EventStart IS NULL + OR EventEnd IS NULL + +-- SELECT * FROM tmp.ProductionLogRaw_KO + + --ROLLBACK + COMMIT + + SELECT COUNT(*) AS RecordsIn FROM tmp.ProductionLogRaw + + END +END]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file