【应用场景】 客户自己需要加了一个退料类型的字段,这个字段要包含在未领料数量的计算逻辑上 & d( A. }2 W0 g0 V, E
【实现步骤】
9 h2 O4 k; { A% e7 A K# u<1>未领数量=应发-已领+良品退料+来料不良数量-多领退回数量,客户需要在用料清单上加一个字段,用于生产退料单第四种退料类型反写回来。 二开一个反写插件,挂在生产退料单的反写插件上面,如下图: ) U! f* J+ O# x% P
0 X8 j4 H y# m+ U$ I/ ~
<2>二开代码实例如下: ) ^# X8 v# O9 \0 X% p p
using Kingdee.BOS.Core.BusinessFlow.PlugIn.Args;* R1 X. S4 q# D% k" x+ D
using Kingdee.K3.Core.MFG;
/ B! W: S- a; o5 V8 } C- J# v9 Cusing Kingdee.K3.MFG.App.ServicePlugIn;
3 T( C* p; ] ] U0 }2 m% o) _using Kingdee.K3.Core.MFG.EntityHelper;* O( K/ R$ l3 N/ {
using Kingdee.BOS.Util;- ?$ v5 x* `5 D4 X
using System;4 F$ s. `/ h$ Z. N8 f5 }3 O6 U
using System.Collections.Generic;
+ q. W+ ]/ m$ a" susing System.Linq;
" a! K: j2 Y7 V1 I/ z: Rusing System.Text;0 J1 I/ T( h# v$ X# ?2 t+ }$ H
* R: p% w9 z M U9 n" Lnamespace EK.Kingdee.K3.MFG.PRD.App.ServicePlugIn
5 q; r9 [" h7 W" `. V k& V; |{
& c& G8 L, x$ k$ C% t. v public class ReturnMtrlBussinessFlow : AbstractMfgBusinessFlowServicePlugIn
8 }3 B0 d- v+ v/ `2 R {
- h8 y; Q: ~7 A /// <summary>3 g3 _1 Z7 l% L2 q: @' s
/// 获取是否跟新wip和已消耗数参数
/ _" }" n# ^" U. q$ R9 M w /// </summary>
: t6 }2 Z# x* k; o; y5 F /// <param name="e"></param>
' `! Z) b+ I! ?) W3 w1 R) v3 x public override void BeforeTrackBusinessFlow(BeforeTrackBusinessFlowEventArgs e), g3 K! G5 V* @+ y; ?3 N
{- Q, H$ h- K6 y3 T
base.BeforeTrackBusinessFlow(e);# O% q# A" U. d- w2 ^
base.GetIsUpdateWipConsume();
9 i- q5 v; x' f: K& d- u. S& B }
6 e# M0 J* M/ m8 I( R" y( K% ~1 o/ ?4 B$ O& q
/// <summary>
5 K5 r% O9 a' v' `% { /// 待反写用料清单分录内码
7 [& Y2 l, s' g- D: X /// </summary>$ u, J: a9 Y' ?( v$ r2 a. E- B1 v
private List<long> UpdatePpbomEntryIds { get; set; }, M& c& I' v! P& i
: ~- q) C( F, X0 d, e
/// <summary># g5 p# t T1 D- B$ }) x
/// 重载此事件用于收集PPBOM分录ID
, v+ e; [3 D. [ /// </summary>
2 p) M! O) @3 c, X/ x1 D. ? /// <param name="e"></param>
, _% l! H1 U) [) k' W public override void AfterCommitAmount(AfterCommitAmountEventArgs e)
0 @, f1 _. j5 C, `+ D6 r {
1 B* R' P/ v- r% ]+ J+ u4 _ base.AfterCommitAmount(e);
/ T* S8 `0 A: _7 e- q0 a if (!base.IsUpdateWipConsume) return;0 W, y7 k5 S+ l0 Y
( R. m. d5 g3 j. D
if (UpdatePpbomEntryIds == null) UpdatePpbomEntryIds = new List<long>();
; C& G2 c8 Q" n% l5 { if (string.CompareOrdinal(e.Rule.SourceFormId, MFGFormIdConst.SubSys_PRD.PPBOMBill) == 0)
0 |2 r8 L- p( L: j0 b; P0 }$ I8 s {! v( D$ I* Q- X1 d, I' @
UpdatePpbomEntryIds.Add(e.SourceActiveRow.GetDynamicObjectItemValue<long>("Id"));( h$ S- N6 R) s, P6 Y6 r& ], r
} y. f" `2 F- E2 y7 q& f) L9 E
}, [7 Y. K; E. z. t
- T* Q+ w: A# R6 \: B) \ /// <summary>5 B; y) L5 y. u M4 ~+ }; U
/// 所有单据反写完成,统一反写用料清单的未领数量7 q* Y; ^/ y2 e* l1 y: q
/// </summary>7 {8 u$ G. S" M& v3 U
/// <param name="e"></param>* U1 v2 Q; z9 w) D. a+ } {2 r
public override void FinishWriteBack(FinishWriteBackEventArgs e)2 o- B7 j# f7 ?
{
+ J# K" E# h; J# L% U base.FinishWriteBack(e);* ~0 w( l1 I6 i# x, V* f
if (!UpdatePpbomEntryIds.IsEmpty())7 i- S' W2 ^6 E9 f5 A
{: B8 A- f/ z {& R; w
//这里通过SQL语句更新未领数量
- F" }! C) b I/ I( [# `0 P }
- r d) u. r5 p0 h: }% D }6 @: I9 ?! v% U+ v
}" X) Z0 C7 z* _2 R3 N: f
}: o8 |% h: O7 c) C( r& u6 E
1 Q+ D0 Y3 q8 } " N, t# P- W: W+ j5 b1 y. [
: f1 b" L |' r0 s; K' a& i
|