用友实施日记(遭遇单位设置的日子)

        在一个新的东西面前,除了新鲜,往往伴随更多的痛苦,即使可以潇洒的说痛并快乐着。
用友系统的单位设置,很灵活,一个物料可以有几种包装,也就是说我们常说的件数换算
实际单位。 比如一箱灯管 可能有十二只,也有可能是二十只,如果单纯的用一个换算可能
这时候就变得有点痛苦。
        不过我的痛不在这里。
        用友预设了三种单位,无换算,固定换算和浮动换算,分别表示无包装,固定包装 和
变动包装。 当然在开始使用之前,对这些我还是进行了分析。我的最终决定是,对所有单位
都加入到一个无换算组,即先建一个包装为1的组,也就是相当于不考虑包装,然后对每个
单位建立一个固定换算率组,然后针对不同的包装,在组内设置不同的换算率。我觉得这种
想法还算可以。于是就这样开始整理物料,前期的思考是痛苦的,不过决定下来实施起来却
不会有太多的 痛苦,无非就是将单位替换为我们对应的单位编码。 问题开始于用友顾问,后
来对我说,象这样不同包装同单位放到一个组,以后统计的时候是错误的,因为统计的时候,它
会问用那一个主单位进行换算,这样,只能用到一个包装情况,那么换算下来,结果对否就不
言而喻了。于是删除了辛辛苦苦导了几天掉的物料,重新进行整理。 我还是保留了无换算,但是
对每一种单位编了一个顺序码,然后用个顺序码乘于10000(考虑到包装不可能过万),把这
个结果 加上实际的包装数,就成了单位的组编码,对组内的主单位,处理是最后添一个‘1’
而实际的单位则是末尾加一个字符“2”, 比如 的5个编码规则 个 的顺序码为 15,那么它
的组单位是15 0000  + 5(包装)=150005  而主单位名为“个”编码为150005+“1”即1500051,
实际单位写为“件”编码为150005+“2” 即1500052,没有想到华强的单位特别的多,顺序排
到了一百了,实在痛苦的很。 不过还是把这个问题解决了。 进行重新输入物料,不过有了第一次的
经验,整个过程变得轻松许多。
          快乐永远是短暂的,当系统整整开始试用时又出现了一个新的问题,很大的问题,就是
“无换算组的单位在统计件数时,不会加入计算,也就是件数一栏为空”,这是一个很痛苦的
问题,因为我们定义了很多包装为一的物流。问题的出现还是要我们去最终解决的。 因为起初并
没有看数据字典,所以也不知道在单据中包含单位信息,在我试图删除一个单位时,出现了这个信息提示
,现在情况变得很糟,因为除了变动物料的单位编码,还必须连带去更新单据中的物料的单位编码。

我足足花了一个晚上,从一千多个表中找到,我们已使用的几个单据名称,并写了更新替换的sql语句。
一路执行下来都没有问题,所有我立即进入实际的环境进行刷新。更新完,我打开物料,傻了眼,
单位不见了。 我的第一反应时不管什么先立即恢复数据库,于是到服务器房,用最新的备份恢复。
然后再分析问题, 问题出在第一条语句,把属性列搞错了,因为下面的更新都是用这个列来操作的
所以全部中标。 我急忙修改语句,因为时间越长,那么要更新的表就会变得越扩散。
下面是这个替换语句

1.
替换物料单位
用到表
oldunit
 code          name        gcode        gpcode         grcode
 原来的编码     组名       新组编码     主编码        实际编码
 
invetory
iGroupType   iGroupCode  cComUnitCode   cSAComUnitCode   cPUComUnitCode cSTComUnitCode
换算率类型   编码         主编码         销售编码         采购默认单位   库存默认单位

步骤
a.
 替换 组编码
 update inventory set cGroupCode =
 (
 select gcode from oldunit a
  where a.code = inventory.cComUnitCode
 )
 where iGroupType = 0
b.
 替换 主单位编码 和其他默认件单位
 
 update inventory
 set cComUnitCode = cGroupCode + '1',
 cSAComUnitCode = cGroupCode + '2',
 cPUComUnitCode = cGroupCode + '2',
 cSTComUnitCode = cGroupCode + '2',
 cProductUnit = cGroupCode + '2',
 cShopUnit = cGroupCode + '2'
 where iGroupType= 0
 


c.清空其他默认单位,以免引用错误
cCAComUnitCode 成本默认计量
cAssComUnitCode 辅助计量单位

update inventory set cAssComUnitCode = null,cCAComUnitCode = null;

d. 将所有的物料的换算率类型都改为固定换算率

update inventory set  iGroupType = 1;


2.替换 出入库单 的物料单位 并将件数 直接替换成数量
a.替换单位
update rdrecords
set cAssUnit = (
               select cGroupCode + '2' from inventory a
              where rdrecords.cInvCode = a.cInvCode
              )
             
             
b.
根据主表收发标志去更新 应收和应付字段 的件数
  如果辅计量数量 为空 一律将 数量 复制到辅助计量单位出
  同时也要复制 应收应付的数量到辅助计量单位处

  update rdrecords  set iNum =  iQuantity ,iNNum =iNQuantity
  where iNum is null;
 
 
3.采购单 的物料单位 替换

a.替换单位
update PO_Podetails 
set cUnitID = (
               select cGroupCode + '2' from inventory a
              where PO_Podetails.cInvCode = a.cInvCode
              )
b.件数直接用数量来替换
         
  update PO_Podetails  set iNum =  iQuantity
  where iNum is null;
 
 
4.销售订单的物料单位 替换

a.替换单位
update sO_sodetails 
set cUnitID = (
               select cGroupCode + '2' from inventory a
              where sO_sodetails.cInvCode = a.cInvCode
              )
b.件数直接用数量来替换
         
  update sO_sodetails  set iNum =  iQuantity
  where iNum is null;
  

单位问题到此结束。

你可能感兴趣的:(工作日志,null,数据库,服务器,物流,sql)