【第21期】 金蝶云·星空-BOS平台 | 产品应用典型/热门问答精选原创
金蝶云社区-Dave身份
Dave
162人赞赏了该文章 2,016次浏览 未经作者许可,禁止转载编辑于2023年12月04日 19:02:21

在金蝶云·星空-BOS平台应用中,你需要了解的典型/热门问答都在这里!

本帖不定期持续更新,欢迎小伙伴们收藏本帖,以便随时查看、扩充知识哟


【第21期】

1、想通过BusinessDataServiceHelper.load方法读取单据体的数据,直接输入单据体标识会报错

问题描述:


想通过BusinessDataServiceHelper.load方法读取单据体的数据,直接输入单据体标识会报错,想问问你想取某个单据体下的字段怎么取

上传图片

上传图片


解决方案

此处应该用的是‘属性(ORM实体名)’,另 服务插件,字段需要OnPreparePropertys方法中加载

image.png

image.png



问题来源

想通过BusinessDataServiceHelper.load方法读取单据体的数据,直接输入单据体标识会报错 (kingdee.com)


2、怎么设置单据明细行某字段,只允许填一行,多行时进行提示或不允许保存?

问题描述:

明细多行时,报销科目“额度内交通费”只能选择一行,如果报销科目在多行选择“额度内交通费”,不允许保存,或者有相应提示。

image.png

解决方案

len(filter(lambda x :x.报销科目字段='字段内容' ,单据体)) > 1 做保存校验


问题来源

怎么设置单据明细行某字段,只允许填一行,多行时进行提示或不允许保存? (kingdee.com)



3、列表插件中选中列后,再触发按钮点击,按钮点击没有生效

问题描述:


列表插件中选中列后,再触发按钮点击,按钮点击没有生效,请各位社区大佬帮下忙

上传图片


解决方案

有AfterGetData这个事件吗?

用AfterBindData试试。

另外,模拟菜单点击事件的代码不是这样写的。

 ((IDynamicFormViewService)this.View).MainBarItemClick("tbOptionList");

参考:二开案例.模拟点击.模拟按钮及菜单点击

编辑于 2023年11月01日 20:03:49

追问

上传图片

感谢周总,几点事件可以了。但是我上面的行选中操作没有立即触发,导致菜单点击事件报提示当前没有选中行


问题来源

列表插件中选中列后,再触发按钮点击,按钮点击没有生效 (kingdee.com)


4、请问单据明细里面怎么设置合计?

问题描述:

image.png

解决方案

配置.单据体.分组列信息.分组合计,字段属性配置‘合计’

image.png


image.png


问题来源

请问单据明细里面怎么设置合计? (kingdee.com)


5、流程管理中心-待办任务超时取数来源?单据上如何直观看到各节点审批时效?

问题描述:

问题1:

在流程设计中心已经设置了超时1分钟,但是在流程管理中心-待办任务中显示“是否超时”为否。

问题2:

整个流程很漫长,我需要统计各个节点上的消耗时间,最好是能在单据上上直观展示出来。

解决方案

问题二:用administrator登录系统,在[基础管理]→[公共设置]→[参数设置]→[流程中心]→[工作流]参数中勾选[单据列表记录多级审核信息];用普通用户登录系统,在费用报销单列表过滤界面勾选[多级审核信息]。然后审批节点设置再加上这个审批级次就能满足您的需求了

image.png


问题来源

流程管理中心-待办任务超时取数来源?单据上如何直观看到各节点审批时效? (kingdee.com)



6、 设置值更新还能影响到数据库表名?Ambiguous column name 'F_PYEB_Decimal'.

问题描述:

提示的标识是一个小数字段,用来计算量差的,只是增加简单的加减值更新,导致二开的选单报错,可是我选单的数据都跟报错的这个字段没关系呀

image.png

解决方案

报错的原因是无法确定字段【F_PYEB_Decimal】在哪张表中,请检查插件中的SQL语句,在字段【F_PYEB_Decimal】上加上表名或别名,注意单张表有时也会出现该报错,比如:select *,ClasName From Class order by ClassName。


问题来源

设置值更新还能影响到数据库表名?Ambiguous column name 'F_PYEB_Decimal'. (kingdee.com)



7、采购订单录入物料后打开悬浮窗口显示历史进价,如何实现?

问题描述:

采购订单录入物料后打开悬浮窗口显示历史进价,点击单据体中的行时,悬浮窗口就显示当前行物料的历史进价

上传图片


解决方案

做个Datachange事件,调出个动态表单来,指定出物料的历史价格。如果还不会的话,给你个例子。

/// <summary>

        /// 打开/历史采购订单数量查询 动态表单 Add zdh 2023-4-11

        /// </summary>

        private void OpenLSCGDDSLCX()

        {

            DynamicFormShowParameter formPa = new DynamicFormShowParameter();//调用动态表单

            formPa.FormId = "ETC_PUR_CGDDSLCX";//历史采购订单数量查询

            DynamicObject dobj = this.View.Model.GetValue("FMATERIALID", Convert.ToInt32(this.Model.GetEntryCurrentRowIndex("FCompareEntry"))) as DynamicObject;// 物料

            if (dobj != null)

            {

                formPa.CustomParams.Add("FBASWL", Convert.ToString(dobj["id"]));//

                this.View.ShowForm(formPa);

            }

        }


问题来源

采购订单录入物料后打开悬浮窗口显示历史进价,如何实现? (kingdee.com)


8、生产订单增加了基础资料 自定义字段,计划订单投放生成生产订单时被锁定不能编辑,检查了所有可能,查不到原因

问题描述:

已按照这帖子,检查,上面的情况都没有,但就是被锁定了 技术答疑.字段锁定性.锁定字段的n种方式 (kingdee.com)

解决方案

请参考:字段被锁定的设置有哪些?,还可以通过字段设置检查来快速排查设置锁定的位置
image.png
image.png


问题来源

生产订单增加了基础资料 自定义字段,计划订单投放生成生产订单时被锁定不能编辑,检查了所有可能,查不到原因。 (kingdee.com)



9、单据合法性检验?

问题描述:

需求,在应收单表头加一个字段发票,我是文本字段,然后字段放开随时可编辑,采购员可能在审核后返回录入这个发票,但是要实现这个发票唯一性,所以我想到单据合法性检验,但是有问题,我配置保存操作报错,是不是思路不对
image.png

image.png


解决方案

改为唯一性校验 空值不参与校验

image.png


问题来源

单据合法性检验? (kingdee.com)


10、销售订单,保存时检验字段长度,公式怎么设置(判断不能超过50个字)

问题描述:

销售订单,保存时检验字段长度,公式怎么设置(判断不能超过50个字)

解决方案

 len(FText)> 50   

image.png


问题来源

销售订单,保存时检验字段长度,公式怎么设置(判断不能超过50个字) (kingdee.com)


11、 Python列表插件,获取不到客户的客户名称,要如何写?经测试获取不到FCustId

问题描述:

#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.ServiceHelper')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *
from System.Data import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *

def OnFormatRowConditions(args):
    if(args.DataRow.DynamicObject.DynamicObjectType.Properties.ContainsKey("FDELIVERYDATE")
    and args.DataRow.DynamicObject.DynamicObjectType.Properties.ContainsKey("F_RZ_DATE")
    and args.DataRow.ColumnContains("FCustId")):
        #这里是普通字段作为判断,需要判断列表是否显示了该字段,否则没显示该字段时会报错
        #而且只有显示了这个字段才能判断设置颜色
        FDELIVERYDATE=str(args.DataRow["FDELIVERYDATE"]);#要货日期
        F_Rz_Date=str(args.DataRow["F_RZ_DATE"]);#出库日期
        matObj=args.DataRow.DynamicObject["FCustId"];#客户ID 凤铝ID:221093
        FCustName = ("{0}").format(matObj["FName"])
        #凤铝全称:佛山市三水凤铝铝业有限公司
        t1=DateTime.Parse(FDELIVERYDATE);
        current =DateTime.Now.Date.ToString();
        t2=DateTime.Parse(str(current));
        ts=t1-t2;
        sub=ts.Days;
        ck=len(str(F_Rz_Date));
        this.View.ShowMessage(FCustName);
        this.View.ShowMessage("销售订单");
        if(sub<= 0 and ck==4 and FCustName!="佛山市三水凤铝铝业有限公司"):
            fc=FormatCondition();
            #fc.ForeColor="#FFFF9B98";#前景色
            fc.BackColor="#FE2C2C";#背景色 红色
            #fc.BackColor="#FEB82C";#背景色 黄色
            args.FormatConditions.Add(fc);
        if(sub<= 0 and ck==4 and FCustName=="佛山市三水凤铝铝业有限公司"):
            fc=FormatCondition();
            #fc.ForeColor="#FFFF9B98";#前景色
            fc.BackColor="#ADD8E6";#背景色 浅蓝色
            #fc.BackColor="#FEB82C";#背景色 黄色
            args.FormatConditions.Add(fc);

解决方案

不是这样写的。客户是基础资料字段,要取基础资料属性的话是要这样写:

if (args.DataRow.ColumnContains("FCustId_Ref"))
    custObj=args.DataRow.DynamicObject["FCustId_Ref"];#客户引用数据包
    custName=("{0}").format(custObj["Name"]);#取客户名称

我这文章里面不是强调了吗?没看懂??【Python插件入门】第5篇:单据列表插件

image.png


问题来源

Python列表插件,获取不到客户的客户名称,要如何写?经测试获取不到FCustId (kingdee.com)


12、审核时显示字段

问题描述:

创建单据时不显示字段,审核时显示字段,能否通过做实体服务规则利用单据状态实现?

解决方案

image.png


问题来源

审核时显示字段 (kingdee.com)


13、单据中新增员工任岗明细字段,任何设置选择时默认过滤出当前组织

问题描述:

费用申请单中新增了员工任岗明细字段,bos中设置了使用组织为申请组织,但是单据新增时过滤出来的员工任岗还是全部组织的,bos中还需要修改哪些信息?

解决方案

在过滤设置FUSEORGID='GetValue(申请组织)'
image.png


问题来源

单据中新增员工任岗明细字段,任何设置选择时默认过滤出当前组织 (kingdee.com)



14、用户界面要添加一个字段,在BOS里如何打开呢

问题描述:

image.png

解决方案

BOS搜索用户 找到安全管理下的用户 双击打开用户

image.png

鼠标右键扩展用户 即可增加字段了

image.png


问题来源

用户界面要添加一个字段,在BOS里如何打开呢 (kingdee.com)



15、配置实体服务规则不清空

问题描述:

我通过实体服务规则配置当勾选是否赠品则解锁货品类型字段,但是我选完货品之后去掉勾选值没清空,怎么办

image.png

解决方案

再配置一个值更新,清空第二个字段的值,当是否赠品=false
image.png


问题来源

配置实体服务规则不清空 (kingdee.com)



16、 基础资料绑定物料清单无法显示

问题描述:

  1. 配置后可见:

    image.png

  2. 选择后可见:

    image.png

  3. 光标移开后,消失:

    image.png

  4. 鼠标再点进去,是可以看到字的:

  5. image.png

解决方案

选中的时候显示的是编码。

离开鼠标后默认显示的是名称,你这个名称是空白的,所以看起来就没显示。

image.png

如果只想显示编码的话,可以修改下设置。

image.png


问题来源

基础资料绑定物料清单无法显示 (kingdee.com)



17、通过二开插件自动下推,获取到下推后的数据包,如何对下推后生成的单据字段赋值?

问题描述:


我知当前单据赋值用this.Model.SetValue就行,但对下推后的数据包,请指教,

private void Push(string pushCate,string pushId,string targetId,string formId) {

    OperateOption pushOption = OperateOption.Create();//操作选项
    var pushArgs = this.CreatePushArgs(pushOption,pushCate,pushId,targetId,formId); //构建下推参数
    var convertResult = ConvertServiceHelper.Push(this.Context, pushArgs, pushOption);//调用下推接口



    var targetObjs = (from p in convertResult.TargetDataEntities select p.DataEntity).ToArray();//得到目标单据数据包
    var targetBInfo = this.GetBusinessInfo(pushArgs.ConvertRule.TargetFormId, pushArgs.ConvertRule.TargetFormMetadata);



    var saveResult =  BusinessDataServiceHelper.Save(this.Model.Context, targetBInfo, targetObjs);
    

    if (!saveResult.IsSuccess)
    {
        var errorInfo = string.Join(";", saveResult.ValidationErrors.Select(x => x.Message));
        this.View.ShowErrMessage(errorInfo);
        return;
    }
    else
    {
        this.View.ShowMessage("保存成功");
    }


    }


解决方案

2人赞同了该回答

image.png

// 获取生成的目标单据数据包

            DynamicObject[] objs = (from p in operationResult.TargetDataEntities

                                    select p.DataEntity).ToArray();

         

            int i = 0;

            // var list = datas.ToList<Object>()

 //单据头

            ((DynamicObject)objs[0])["F_Remark"] = str;

            ((DynamicObject)objs[0])["F_InspectionStatus"] = status;

            foreach (var data in datas)

            {

//单据体

                    ((DynamicObject)((DynamicObjectCollection)((DynamicObject)objs[0])["PRD_MORPTENTRY"])[i])["FinishQty"] = Convert.ToDecimal(data["FQTY"].ToString());

                    ((DynamicObject)((DynamicObjectCollection)((DynamicObject)objs[0])["PRD_MORPTENTRY"])[i])["BaseFinishQty"] = Convert.ToDecimal(data["FQTY"].ToString());

  

                 i++;


            }


问题来源

通过二开插件自动下推,获取到下推后的数据包,如何对下推后生成的单据字段赋值? (kingdee.com)



18、如何设置当等于销售订单变更单,清空某些字段

问题描述:

如何设置当等于销售订单变更单,清空某些字段

解决方案

配置实现:

方案一、bos.实体服务规则.'计算定义公式的值并填写到指定列';

方案二、bos.字段属性.值更新配置;

仅供参考:

image.png


image.png


问题来源

如何设置当等于销售订单变更单,清空某些字段 (kingdee.com)



19、校验物料属性等于自制时,批号不能为空,物料为自制,勾选启用批号后还是报错,请问是哪里出了问题

问题描述:

image.png

解决方案

“物料属性”放在前置条件里,“启用批号管理”要等于false,false不用引号,如下图
image.png



问题来源

校验物料属性等于自制时,批号不能为空,物料为自制,勾选启用批号后还是报错,请问是哪里出了问题 (kingdee.com)



20、 引用属性问题麻烦大佬指点一下

问题描述:

需求:将物料这四个字段带到销售订单明细
销售订单字段已加,物料编码引用属性已加,但是未携带成功
image.png
销售订单字段已加
image.png
引用属性已加
image.png
但是没生效

image.png

解决方案


image.png 字段,维护这里属性image.png



image.png这里添加的,image.png这里才能选到

问题来源

引用属性问题麻烦大佬指点一下 (kingdee.com)



21、单据发布到其他模块后,新增单据时,只显示想要的单据类型

问题描述:

新增的一个设备管理模块,现在把采购申请单发布到了设备管理,如何实现在设备管理打开采购申请单,只显示设备采购申请单单据类型

解决方案

image.png


问题来源

单据发布到其他模块后,新增单据时,只显示想要的单据类型 (kingdee.com)



22、Python 多选基础资料赋值提示列只读

问题描述:

python在操作事件中对多选基础字段赋值提示列只读,请问一下红色部分代码是哪里错了吗?正确的写法是什么呢?

image.png



解决方案

mulBaseDataEntitySet 通常是有值的,有值的时候应该是不能改的。

你只需要判断是否为空: mulBaseDataEntitySet  Is None  确保字段的数据包不为空就行了。

不要用字段数据包集合的大小来判空。


image.png


问题来源

Python 多选基础资料赋值提示列只读 (kingdee.com)



已赞 99


图标赞 162
162人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!