环思产品论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2796|回复: 0
打印 上一主题 下一主题

[51180 ]大货处方单(染绒、染纱)

[复制链接]

59

主题

63

帖子

875

积分

版主

Rank: 7Rank: 7Rank: 7

积分
875
跳转到指定楼层
楼主
发表于 2016-4-11 16:19:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xuming 于 2016-6-12 10:39 编辑

功能概述
根据染色卡来进行开处方,生成处方单和上传处方单的功能页面
操作流程
   操作流程说明:
   1、用户打开界面
   2、用户点击新建,会在当前染色卡下的处方列表里新建一条处方。
   3、系统自动根据用户操作进行保存处理。
   4、UI原型图

参数说明
1、参数功能说明
   
参数分为两种一个为染绒和脱色,染纱。根据不同的参数来进行对form的分类
Ref参照
   1单据状态:从常量明细表pbConstDtl里面查询出可用的并且常量值为292的信息
   2处方类型:从常量明细表pcConstDtl里面查询出可用的并且常量值为1355的信息
   3、辅助染程:从染程主表tmDyeingCurveHdr里面查询出可用的辅助染程编号,辅助染程名称和ID
   4、染程:从染程主表tmDyeingCurveHdr里面查询出可用的染程编号,染程名称和ID
   5、物料名称;从染化料物料表mmMaterialChemical里面查询出可用的染化料ID,染化料编号和染化料名称。
   6、用量类型:从常量明细表pbConstDtl里面查询出可用的并且常量值为1444的信息。
   7、来源:从常量明细表pbConstDtl里面查询出可用的并且常量值为1493的信息。
查询业务逻辑
  1、染色卡列表:从染色工卡表里面查询出当前参数值的所有染色卡
   2、处方列表:根据选中的染色卡查询出对应的处方列表
   3、染色处方明细:根据选中的处方列表查询出对应的染色处方明细

单点功能说明
   1、生成处方单:
   IIf(EntitySet.IsNotEmpty(dtlEntitySet),HS.Success,HS.Default);
   如果dtl实体集不为空,则执行HS.Success,否则执行HS.Default
   HS.Default=EntitySet.AddNew.BySql(dtlEntitySet,38788 ,mainEntitySet+IndexEntitySet);
   RefreshUI();
   HS.Default=通过sql38788来新建数据,参数取自main实体集和index实体集。
   刷新UI
   HS.Success=Ask(当前已有处方单,新增则会删除原有的处方单,是否继续?);
   EntitySet.Clear(dtlEntitySet);
   EntitySet.AddNew.BySql(dtlEntitySet,38788 ,mainEntitySet+IndexEntitySet);
   RefreshUI();

   HS.Success=询问‘当前已有处方单,新增则会删除原有的处方单,是否继续?’
   是则执行清空实体集dtl,否则不做修改。
   清空后执行新增sql38788来新建数据,参数取自main实体集和Index实体集。
   刷新UI


   SQL--38788=SELECT a.iIden,a.iMaterialId,nDosage=CAST(A.nDosage AS DECIMAL(18,4))
   ,c.iStepNo,e.sMaterialNo,e.sMaterialName
   ,sDyeingCurveName=c.sRemark
   ,iDyeingCurveId=c.iIden
   ,sDyeingCurveNo=c.sBillNo
   ,iSourceType=CONVERT(INT,0)
   ,iCalcType=CONVERT(INT,3)
   FROM dbo.tmDyeingColorTemplateRecipe a WITH(NOLOCK)
   JOIN dbo.tmColor b WITH(NOLOCK) ON a.iHdrId=b.iIden
   JOIN dbo.tmDyeingCurveHdr c WITH(NOLOCK) ON b.iDyeingCurveId=c.iIden
   LEFT JOIN dbo.pbUnit d WITH(NOLOCK) ON a.iUseUnitId=d.iIden
   LEFT JOIN dbo.mmMaterial e ON a.iMaterialId=e.iIden
   WHERE a.iHdrId=:iColorId
   查询出信息定义来源类型为0配方燃料,并且用量类型为3缸卡百分比的所有处方单


   UNION ALL
   SELECT A.iIden,A.iMaterialId,nDosage=CAST(A.nDosage AS DECIMAL(18,4))
   ,A.iStepNo,B.sMaterialNo,B.sMaterialName
   ,sDyeingCurveName=C.sRemark
   ,iDyeingCurveId=A.iHdrId
   ,sDyeingCurveNo=C.sBillNo
   ,iSourceType=CONVERT(INT,1)
   ,iCalcType=CONVERT(INT,1)
   FROM dbo.tmDyeingArtRouteChemicalDtl A WITH(NOLOCK)
   LEFT JOIN dbo.mmMaterial B WITH(NOLOCK) ON A.iMaterialId=B.iIden
   LEFT JOIN dbo.tmDyeingCurveHdr C WITH(NOLOCK) ON A.iHdrId=C.iIden
   WHERE A.iHdrId=:iDyeingCurveId AND A.iDyeingCardType=:iDyeingCardType


   UNION ALL
   SELECT A.iIden,A.iMaterialId,nDosage=CAST(A.nDosage AS DECIMAL(18,4))
   ,A.iStepNo,B.sMaterialNo,B.sMaterialName
   ,sDyeingCurveName=C.sRemark
   ,iDyeingCurveId=A.iHdrId
   ,sDyeingCurveNo=C.sBillNo
   ,iSourceType=CONVERT(INT,2)
   ,iCalcType=CONVERT(INT,2)
   FROM dbo.tmDyeingArtRouteChemicalDtl A WITH(NOLOCK)
   LEFT JOIN dbo.mmMaterial B WITH(NOLOCK) ON A.iMaterialId=B.iIden
   LEFT JOIN dbo.tmDyeingCurveHdr C WITH(NOLOCK) ON A.iHdrId=C.iIden
   WHERE A.iHdrId=:iDyeingCurveExId AND A.iDyeingCardType=:iDyeingCardType
   2、上传处方单:
   3、删除处方单:
   4、批量开处方:
EntitySet.ValidateEmpty(mainEntitySet,您未指定任何行!);  --判断是否选中一行main实体集的数据。
EntitySet.JoinText(outParam.sCardNos,indexEntitySet,sCardNo);--将index实体集的sCardNo串联起来,默认‘,’间隔,传给外部参数sCardNos
ExecSql(38722);--执行sql38722
DoLastQuery();--速查
sql执行脚本321_BatchPrescription
--需要开处方单的卡
--查询卡信息,合卡的要汇总产量,写入临时表
--循环生成处方单
--计算染色水位
--写入处方头
--先写入配方染料
--再写入染程助剂
--辅助染程助剂
--更新染料百分比处方单位用量
--更新处方用量
--加此变量是为了抛出错误显示小色号
--写入处方明细
   5、计算用量:
GridView.GetSelectedRowsXML(grvDtl,nDosage+nCustomerDosage+iSourceType+iCalcType,outParam.sXML,,true);--将选中行的数据转化为临时表,写入选择的列。
EntitySet.RetriveBySql(dtlEntitySet,38831,outParam+indexEntitySet,,false,iIden,3);--刷新实体类行的数据。
--计算过程
UPDATE A
        SET @nDosage=Round(@nDosageSum * A.nOriginalRate,4)
        ,@nDosage=CASE WHEN @nDosage<0.4 THEN 0.4 WHEN @nDosage>1.5 THEN 1.5 ELSE @nDosage END
        ,nDosage=@nDosage
        ,nQty=CASE                                
                WHEN iSourceType IN (0,2) THEN ROUND(@nQty * A.nDosage * 10,3)--配方和手工加的都是缸卡比例算
                WHEN iCalcType=1 THEN A.nDosage                --固定用量
                WHEN iCalcType=3 THEN Round(@nQty * A.nDosage * 10, 3)        --缸卡百分比
                WHEN iCalcType=2 THEN --染料百分比
                        CASE WHEN nCustomerDosage<0 THEN ROUND(@nQty * @nDosage * 10, 3)
                        ELSE Round(@nQty * A.nCustomerDosage * 10, 3)
                        END
                ELSE -1 --错误情况
                END
        FROM #Dtl A
        WHERE iSourceType NOT IN (0,2) AND A.iCalcType=2

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|上海环思 ( 沪ICP备11022428号 )

GMT+8, 2024-9-17 09:51 , Processed in 0.110505 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表