销售出库单检验物料库存查询无法填充问题分析
由于历史原因,在版本PT-146915 [8.0.0.202206]之前,销售出库单编辑界面在选择物料时会排除检验物料(物料基础资料中的质量页签如果勾选了发货检验就会不能选择),这样处理就是为了让检验物料先走检验路线再生成销售出库单(发货通知单先下推检验单再出库),但原先的版本处理时有几个小地方没有处理好,比如发货通知单下推销售出库单的单据转换中有一个批号拣货服务,它的前置条件设置为'发货检验物料不批号拣货',如下图1-1所示:
图1-1
从上图1-1可以看到,这个前置条件配置是有问题的,应该是要用发货通知单上的'发货检验'字段当前置条件的,而不是物料上的发货检验字段,因为有可能创建物料时勾选了'发货检验',但在做发货通知单时不启用发货检验,星空通版后续将修改此问题。
另外一个存在的问题就是当发货通知单下推销售出库单时,如果物料是发货检验的,并对此类型的物料使用库存查询功能,则会发现库存查询返回后只有一行数据返回成功,其它数据都不会正确填充。这个问题是因为销售出库单表单插件在物料字段赋值时会排除发货检验物料,显示然种情况是不正确的。针对此问题,星空通版后续预计在2022年9月版本中修复,届时更新补丁即可,如果客户不想升级,则可参照以下步骤解决:打开BOS IDE,扩展销售出库单元数据,在销售出库单的单据插件中注册Python插件,如下图1-2所示:
图1-2
其中的python脚本如下图所示:
# -*- coding: utf-8 -*-
#销售出库单表单插件
import clr
clr.AddReference('System')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
from System import *
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
global deliveryCheckAssociateCopy;
deliveryCheckAssociateCopy = False;
def BeforeDoOperation(e):
if(e.Operation.FormOperation.Operation.ToUpperInvariant() == "ASSOCIATEDCOPYENTRYROW"):
rowIndex = this.View.Model.GetEntryCurrentRowIndex("FEntity");
material = this.View.Model.GetValue("FMaterialId", rowIndex);
if (material is not None and material.DynamicObjectType.Properties.ContainsKey("MaterialQM")):
materialQMs = material["MaterialQM"]
if (materialQMs is not NOne and materialQMs.Count > 0):
mQM = materialQMs[0];
if (mQM is not None and mQM.DynamicObjectType.Properties.ContainsKey("CheckDelivery")):
global deliveryCheckAssociateCopy;
deliveryCheckAssociateCopy = Convert.ToBoolean(mQM["CheckDelivery"]);
def BeforeSetItemValueByNumber(e):
if(e.BaseDataFieldKey.ToUpperInvariant() == "FMATERIALID"):
newFilter = " 1 = 1 ";
bFromGY = Convert.ToString(this.View.Model.GetValue("FThirdSrcType")) == "1";
global deliveryCheckAssociateCopy;
if (not deliveryCheckAssociateCopy and this.View.ClientType != ClientType.WebApi and not bFromGY):
stockQueryFormId = "";
if(this.View.Session.ContainsKey("StockQueryFormId")):
stockQueryFormId = this.View.Session["StockQueryFormId"]
if(stockQueryFormId == "SAL_OUTSTOCK"):
newFilter = newFilter
else:
newFilter = newFilter + " AND FCHECKDELIVERY <> '1'";
if (Convert.ToString(this.View.Model.GetValue("FBussinessType")) == "VMI"):
newFilter = newFilter + " AND FIsVmiBusiness = '1' ";
e.Filter = newFilter;
上面的代码其实和通版的Kingdee.K3.SCM.Sal.Business.PlugIn.OutStockEdit插件中的同名方法中的对应逻辑是很像的,主要是处理了物料字段的过滤逻辑,在排除发货校验物料时如果是库存查询返回的则不处理(库存查询返回时会对Session添加一条记录)。
注:不要直接复制以上代码,因为其中的空格会被转义,可直接使用附件中的代码,如果后续客户升级到了2022年9月之后的版本,则可删除此Python插件。
销售出库单检验物料库存查询无法填充问题分析
本文2024-09-16 17:42:44发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-17468.html