【第25期】 金蝶云·星空-BOS平台 | 产品应用典型/热门问答精选原创
金蝶云社区-Dave身份
Dave
10人赞赏了该文章 1,381次浏览 未经作者许可,禁止转载编辑于2024年04月08日 00:36:50

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

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


【第25期】

1、在Python脚本中,如何获取当前登陆用户的用户分组代码

问题描述:

用户管理中,使用了分组。

请问:在Python脚本中,如何获取当前登陆用户的用户分组代码

解决方案

#引入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')
clr.AddReference('Newtonsoft.Json')
#导入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 System.Net import *
from System.Text import *
from System.IO import *
#from System.String import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
def AfterBarItemClick(e):
    key=e.BarItemKey.ToUpperInvariant();
    if(key=="PAEZ_tbButton".ToUpperInvariant()):
        userName =str(this.Context.UserName);
        userID=str(this.Context.UserId);
        sqlGetGroupID=("""select FPRIMARYGROUP from T_SEC_USER
        where FUSERID='{0}'""").format(userID);
        ds = DBServiceHelper.ExecuteDataSet(this.Context,sqlGetGroupID);
        tab = ds.Tables[0];
        userGroupId = tab.Rows[0]["FPRIMARYGROUP"if tab.Rows.Count > 0 else "";
        this.View.ShowMessage("用户ID:"+userID+"用户姓名:"+userName+"用户组ID:"+str(userGroupId));

问题来源

在Python脚本中,如何获取当前登陆用户的用户分组代码 (kingdee.com)


2、账表过虑字段报错

问题描述:

  private string GetCustomFilter(IRptParams filter)
        {
            StringBuilder sql = new StringBuilder();
            var custFilter = filter.FilterParameter.CustomFilter;
            var lstDyn = custFilter["FMaterialNumber1"] as DynamicObjectCollection;
            if (!lstDyn.IsEmpty())
            {
                sql.AppendFormat(" AND FMaterialNumber IN ({0}) ", string.Join(",", lstDyn.Select(m => ObjectUtils.Object2Int(m["FMaterialNumber1_id"]))));
            }

            //DateTime dtStart = GetDateTime(custFilter, "FOrderStartDate", DateTime.MinValue);
            //sql.AppendFormat(" AND FDate >= {0} ", GetKsqlDatetime(dtStart));

            //DateTime dtEnd = GetDateTime(custFilter, "FOrderEndDate", DateTime.MaxValue);
            //sql.AppendFormat(" AND FDate <= {0} ", GetKsqlDatetime(dtEnd));

            return sql.ToString();
        }


lstDyn  CustomAttributes”引发了类型“System.NotImplementedException”的异常

解决方案

FMaterialNumber1  是多选基础资料吗??还是单据体??

否则是不能直接 as DynamicObjectCollection 的!



另外还有一个地方的代码可以改改:

 ObjectUtils.Object2Int(m["FMaterialNumber1_id"]);

改成:m["FMaterialNumber1_id"]+"";

你是拼接SQL ,不需要转int,转字符串就可以了


问题来源

账表过虑字段报错, (kingdee.com)


3、流程需求:审批参与人取部门自定义字段?

问题描述:

在“部门”基础资料中,增加相关字段,例如“负责人、采购员、销售员”等,然后在工作流中,将部门基础资料上增加的这个字段的信息作为审批参与人,后续变更流程直接修改部门基础资料,无需再进行流程设计,可否实现?

解决方案

可以用工作流角色来实现,

创建工作流角色,比如负责人,勾选“按单据部门过滤”,分录里面配置每个部门的负责人。

image.png

然后在审批节点参与人选择“工作流角色”,部门选择单据上的部门。在流程中系统会根据单据上部门字段到对应的工作流角色中找到对应人员作为该节点审批人。

image.png

问题来源

流程需求:审批参与人取部门自定义字段? (kingdee.com)


4、把单据头上基础资料里一个单据体的所有数据复制到当前单据的一个单据体里用python插件怎么写

问题描述:

我在物料里新增了一个单据体,在生产用料清单里也新增了一个单据体,现在想通过一个按钮触发把物料单据体里的数据复制到生产用料清单的单据体里。这个用python插件怎么写?

解决方案

直接数据包解析和数据包赋值就可以了。

①获取物料字段的数据包,物料字段的引用属性要添加相关单据体字段的引用。

②解析物料字段数据包,层层解析,将物料里面的单据体数据包拿到。

③循环拿到的单据体数据包赋值到单据上对应的单据体。

④调用UpdateView("单据上的单据体标识"),刷新单据体。


注意:如果单据体中有基础资料/辅助资料类型的字段,需要用内码ID加载数据包,进行赋值,下面的文章中有写。

参考我这2篇文章:

【Python插件入门】第3篇:插件中如何进行数据操作

【Python插件入门】第4篇:单据表单插件

问题来源

把单据头上基础资料里一个单据体的所有数据复制到当前单据的一个单据体里用python插件怎么写 (kingdee.com)


5、 折扣率字段如何展示为百分比形式?

问题描述:

image.png

解决方案

在bos里,批量编辑字段属性->找到对应的字段->将格式化显示设置为百分比:P,并取消区域设置。
image.png

问题来源

折扣率字段如何展示为百分比形式? (kingdee.com)


6、套打动态字段不能处理辅助资料,找不到辅助资料对象

问题描述:

image.png

image.png

image.png


解决方案

辅助资料的取法如下

1.1、GetDateSourceValue("数据源标识","字段标识","格式")

辅助资料:GetDataSourceValue("FBillHead","F_QTMO_Assistant.FDataValue")


https://vip.kingdee.com/article/137611800287477504?productLineId=1&isKnowledge=2

问题来源

套打动态字段不能处理辅助资料,找不到辅助资料对象 (kingdee.com)


7、物料自定义了“单方量”字段,在销售订单添加相应字段并引用属性,但做单时仍未带出单方量的信息,是哪一步有问题吗?

问题描述:

image.png

image.png

image.png


解决方案

首先物料要引用单方量,其次销售订单单方量字段应该像我截图里面去绑定,把我的材料替换成你的单方量即可
image.png


问题来源

请教大神!物料自定义了“单方量”字段,在销售订单添加相应字段并引用属性,但做单时仍未带出单方量的信息,是哪一步有问题吗? (kingdee.com)


8、文本位置调整

问题描述:

image.png

image.png

解决方案

表格改变列对齐方式

1、描述:字段在BOS设计器中的“文本对齐方式”属性,默认都是缺省,平台缺省的规则是,数字类型字段是右对齐,其余字段默认都是左对齐显示,该属性的设置会同时运用到单据列表上的对齐方式显示,但是,在单据体中,只对锁定单元格有效,因为单据编辑表体的控件在编辑状态下没有对齐一说,其单元格编辑控件的录入习惯,所以单据体的对齐方式是在锁定单元格状态有效

2、动态更改单据体某列的对齐方式(锁定状态有效) .net插件:

this.View.GetControl<EntryGrid>("FEntity").SetCellTextAlign("列名大写", "Left/Right/Center", 行号);

3、动态更改单据列表某列的对齐方式 列表插件的,注册python脚本:

from Kingdee.BOS.JSON import *;
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
def ListCreateColumns(e):
     for objcol in e.Columns:
         if objcol.GetString("dataIndex")=="FQty":#字段名,注意列表在平台构建的列名,如物料编码,是FMaterialId.FNumber
             objcol["defaultColAlignType"]=1;#1-左,2-右,3-居中
             break;

问题来源

文本位置调整 (kingdee.com)


9、基础资料属性根据序号赋值至数量字段中

问题描述:

各位老师,如何实现基础资料属性根据序号排列,比如:在另一个页签有3行固定数据,想要基础资料属性中的一个字段根据序号进行赋值到其中一个序号的字段中

解决方案

在测试过程中编辑单据明细信息实体服务规则设置,前置条件:序号=1,达到条件时文本字段='固定字符',这样设置错误了:https://vip.kingdee.com/link/s/lTp34


您温习一下,然后灵活变化,如下:

在计算服务中设置赋值公式,赋值公式用三元运算符:

被赋值的单据体字段 = 基础资料字段.属性标识 if(FEntity_FSeq==1) else ''

注:为什么要用三元运算符?因为需要根据单据体序号进行赋值(例如等于1),条件成立赋值基础资料字段的属性值,条件不成立赋值空文本(注意,如果字段是文本类型,则赋值空文本;如果字段是数量类型,则赋值0)。


Python三元表达式,示例如:

'固定值' if 源单字段标识.FNumber=='A' else '另一个值' 

公式语法解释:如果蓝色判断条件为True(真),执行if之前的公式;否则,执行else之后的公式。


问题来源

基础资料属性根据序号赋值至数量字段中 (kingdee.com)


10、满足某一 条件,另一字段显示灰色

问题描述:

如何将出差申请单P2的项目阶段字段=非项目二阶段时,项目经理字段显示灰色呢?类似P1的采购申请单

image.png

解决方案

单据头写实体服务规则,前提条件是项目阶段=非项目二阶段时对应的枚举内码
成立则锁定项目经理字段,不成立则不锁定
image.png

问题来源

满足某一 条件,另一字段显示灰色 (kingdee.com)


11、新物料采购走采购总监审批,采购订单能否更新物料采购次数采购日期之类的

问题描述:

新物料采购走采购总监审批,采购订单能否更新物料采购次数采购日期之类的

解决方案

首先明确

1、新物料的判断,是否不存在该物料的已审核采购订单就算新物料?

2、系统有种服务“获取采购参考价格”,以此来判断该物料在一定周期内是否下过采购订单。


以下思路(已验证可行,供参考):

1、采购订单明细新增最近价格字段“最近单价”(F_kd_Price);

image.png

2、新增基础资料属性字段“物料新建日期”(F_kd_BaseProperty,物料编码字段引用添加“新建日期”,基础资料字段关联“物料编码”,关联基础资料字段名“新建日期”);

image.png

3、在“菜单集合”,选择所有的“保存”“提交”菜单,在“点击事件”新增服务“获取参考价”,并根据需求调整服务参数。把新增的服务移到“保存”或“提交”操作前。(这里取价范围设置720天,即若在二年内的已审核采购订单取不到最近采购价就算是新物料采购)。

image.png

4、新增的采购订单保存后,可以自动获取采购订单的最近采购价填写到“最近单价”字段。

image.png

5、在采购订单的流程设计“流转条件”“高级”,编写公式判断明细行是否存在最近单价为0。(只要明细存在“最近参考价”为0,就是存在新物料。)

image.png

len(map(lambda x: x.F_kd_Price, FPOOrderEntry))>0 And any(map(lambda x: x.F_kd_Price=0, FPOOrderEntry))

image.png

6、还可以在条件判断公式添加物料的创建时间作为判断条件,以免确实存在早期创建的物料超过二年没采购的情况(不取审核日期,因为有可能近期反审核修改物料后再审核),这里就不再举例。若不需要这个字段,步骤2可以省略。

问题来源

希望新物料采购走采购总监审批,采购订单能否更新物料采购次数采购日期之类的 (kingdee.com)


12、流程配置中心的操作状态是怎么出来的?

问题描述:

image.png

解决方案

流程设计中心 ==> 流程信息管理 ==> 操作状态

image.png

问题来源

流程配置中心的操作状态是怎么出来的? (kingdee.com)


13、列表里如何加过滤?

问题描述:

就像这样,但不是加到单据里,而是加到列表里

image.png

解决方案

发布的时候添加参数{"ShowFilterRow","true"}试试:

image.png

问题来源

列表里如何加过滤? (kingdee.com)


14、报表中将千分位改成百分位,请问在BOS/前台中如何修改

问题描述:

报表中将千分位改成百分位,请问在BOS/前台中如何修改

解决方案

系统报表中,金额每三位将数分开的符号叫做“千位符”; 可以在bos里面找到对应报表.扩展,取消千位符,如果要把千位符变成百位符,就得二开写插件处理

image.png

问题来源

报表中将千分位改成百分位,请问在BOS/前台中如何修改 (kingdee.com)


15、如图,我设置了把辅助资料 单选字段复制到 名称 字段上,为什么是一段乱码?如何才能把文字复制过去?

问题描述:

image.png

解决方案

你赋值错了,要用辅助资料列表的名称,不能直接赋值辅助资料:

image.png

问题来源

如图,我设置了把辅助资料 单选字段复制到 名称 字段上,为什么是一段乱码?如何才能把文字复制过去? (kingdee.com)


16、采购订单物料设置了排序,能否按照新的排序来进行打印?如何设置?

问题描述:

采购订单物料设置了排序,能否按照新的排序来进行打印?如何设置?

解决方案

image.png

套打模版里有排序字段设置,采购订单明细里按哪个字段排序,模版里按也按相同字段排序

问题来源

采购订单物料设置了排序,能否按照新的排序来进行打印?如何设置? (kingdee.com)


17、单据上新增的自定义字段,如何让其在某个单据类型显示,其他单据类型不显示

问题描述:

单据上新增的自定义字段,如何让其在某个单据类型显示,其他单据类型不显示?就如同只有费用应付单显示费用项目,标准应付单不显示

解决方案

image.pngimage.pngimage.png


问题来源

单据上新增的自定义字段,如何让其在某个单据类型显示,其他单据类型不显示 (kingdee.com)


18、怎么限制这个开始日期只能选每个月1号,结束日期自动取当月最后一天

问题描述:

image.png

解决方案

取本月最后一天:

FEndDate = FStartDate.AddDays(1-float((FStartDate.ToString("dd")))).AddMonths(+1).AddDays(-1)

取本月第一天日期:

日期字段 = @currentshortdate.AddDays((1-float(@currentshortdate.ToString("dd"))))


问题来源

怎么限制这个开始日期只能选每个月1号,结束日期自动取当月最后一天 (kingdee.com)


19、单据转换,多单下推校验某个字段相同不能一起下推怎么配置?

问题描述:


假设销售订单新增了一个字段:合同号;

多张销售订单的合同号可能是相同的;

但是设置一个规则:不同的合同号不能合并下推销售出库;

该规则在哪里设置呢?

上传图片


解决方案

在分组策略的单据分组依据点添加加入合同号

image.png

问题来源

单据转换,多单下推校验某个字段相同不能一起下推怎么配置? (kingdee.com)



查看往期精选:

【汇总】 金蝶云·星空-BOS平台 | 产品应用典型/热门问答精选 (kingdee.com)




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