在金蝶云·星空-BOS平台应用中,你需要了解的典型/热门问答都在这里!
本帖不定期持续更新,欢迎小伙伴们收藏本帖,以便随时查看、扩充知识哟
【第21期】
1、想通过BusinessDataServiceHelper.load方法读取单据体的数据,直接输入单据体标识会报错
问题描述:
想通过BusinessDataServiceHelper.load方法读取单据体的数据,直接输入单据体标识会报错,想问问你想取某个单据体下的字段怎么取
解决方案:
此处应该用的是‘属性(ORM实体名)’,另 服务插件,字段需要OnPreparePropertys方法中加载
问题来源:
想通过BusinessDataServiceHelper.load方法读取单据体的数据,直接输入单据体标识会报错 (kingdee.com)
2、怎么设置单据明细行某字段,只允许填一行,多行时进行提示或不允许保存?
问题描述:
明细多行时,报销科目“额度内交通费”只能选择一行,如果报销科目在多行选择“额度内交通费”,不允许保存,或者有相应提示。
解决方案:
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、请问单据明细里面怎么设置合计?
问题描述:
解决方案:
配置.单据体.分组列信息.分组合计,字段属性配置‘合计’
问题来源:
5、流程管理中心-待办任务超时取数来源?单据上如何直观看到各节点审批时效?
问题描述:
问题1:
在流程设计中心已经设置了超时1分钟,但是在流程管理中心-待办任务中显示“是否超时”为否。
问题2:
整个流程很漫长,我需要统计各个节点上的消耗时间,最好是能在单据上上直观展示出来。
解决方案:
问题二:用administrator登录系统,在[基础管理]→[公共设置]→[参数设置]→[流程中心]→[工作流]参数中勾选[单据列表记录多级审核信息];用普通用户登录系统,在费用报销单列表过滤界面勾选[多级审核信息]。然后审批节点设置再加上这个审批级次就能满足您的需求了
问题来源:
流程管理中心-待办任务超时取数来源?单据上如何直观看到各节点审批时效? (kingdee.com)
6、 设置值更新还能影响到数据库表名?Ambiguous column name 'F_PYEB_Decimal'.
问题描述:
提示的标识是一个小数字段,用来计算量差的,只是增加简单的加减值更新,导致二开的选单报错,可是我选单的数据都跟报错的这个字段没关系呀
解决方案:
报错的原因是无法确定字段【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)
解决方案:
请参考:字段被锁定的设置有哪些?,还可以通过字段设置检查来快速排查设置锁定的位置
问题来源:
生产订单增加了基础资料 自定义字段,计划订单投放生成生产订单时被锁定不能编辑,检查了所有可能,查不到原因。 (kingdee.com)
9、单据合法性检验?
问题描述:
需求,在应收单表头加一个字段发票,我是文本字段,然后字段放开随时可编辑,采购员可能在审核后返回录入这个发票,但是要实现这个发票唯一性,所以我想到单据合法性检验,但是有问题,我配置保存操作报错,是不是思路不对
解决方案:
改为唯一性校验 空值不参与校验
问题来源:
10、销售订单,保存时检验字段长度,公式怎么设置(判断不能超过50个字)
问题描述:
销售订单,保存时检验字段长度,公式怎么设置(判断不能超过50个字)
解决方案:
len(FText)> 50
问题来源:
销售订单,保存时检验字段长度,公式怎么设置(判断不能超过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篇:单据列表插件
问题来源:
Python列表插件,获取不到客户的客户名称,要如何写?经测试获取不到FCustId (kingdee.com)
12、审核时显示字段
问题描述:
创建单据时不显示字段,审核时显示字段,能否通过做实体服务规则利用单据状态实现?
解决方案:
问题来源:
13、单据中新增员工任岗明细字段,任何设置选择时默认过滤出当前组织
问题描述:
费用申请单中新增了员工任岗明细字段,bos中设置了使用组织为申请组织,但是单据新增时过滤出来的员工任岗还是全部组织的,bos中还需要修改哪些信息?
解决方案:
在过滤设置FUSEORGID='GetValue(申请组织)'
问题来源:
单据中新增员工任岗明细字段,任何设置选择时默认过滤出当前组织 (kingdee.com)
14、用户界面要添加一个字段,在BOS里如何打开呢
问题描述:
解决方案:
BOS搜索用户 找到安全管理下的用户 双击打开用户
鼠标右键扩展用户 即可增加字段了
问题来源:
用户界面要添加一个字段,在BOS里如何打开呢 (kingdee.com)
15、配置实体服务规则不清空
问题描述:
我通过实体服务规则配置当勾选是否赠品则解锁货品类型字段,但是我选完货品之后去掉勾选值没清空,怎么办
解决方案:
再配置一个值更新,清空第二个字段的值,当是否赠品=false
问题来源:
16、 基础资料绑定物料清单无法显示
问题描述:
配置后可见:
选择后可见:
光标移开后,消失:
鼠标再点进去,是可以看到字的:
解决方案:
选中的时候显示的是编码。
离开鼠标后默认显示的是名称,你这个名称是空白的,所以看起来就没显示。
如果只想显示编码的话,可以修改下设置。
问题来源:
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人赞同了该回答
// 获取生成的目标单据数据包
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.字段属性.值更新配置;
仅供参考:
问题来源:
如何设置当等于销售订单变更单,清空某些字段 (kingdee.com)
19、校验物料属性等于自制时,批号不能为空,物料为自制,勾选启用批号后还是报错,请问是哪里出了问题
问题描述:
解决方案:
“物料属性”放在前置条件里,“启用批号管理”要等于false,false不用引号,如下图
问题来源:
校验物料属性等于自制时,批号不能为空,物料为自制,勾选启用批号后还是报错,请问是哪里出了问题 (kingdee.com)
20、 引用属性问题麻烦大佬指点一下
问题描述:
需求:将物料这四个字段带到销售订单明细
销售订单字段已加,物料编码引用属性已加,但是未携带成功
销售订单字段已加
引用属性已加
但是没生效
解决方案:
加 字段,维护这里属性
这里添加的,这里才能选到
问题来源:
21、单据发布到其他模块后,新增单据时,只显示想要的单据类型
问题描述:
新增的一个设备管理模块,现在把采购申请单发布到了设备管理,如何实现在设备管理打开采购申请单,只显示设备采购申请单单据类型
解决方案:
问题来源:
单据发布到其他模块后,新增单据时,只显示想要的单据类型 (kingdee.com)
22、Python 多选基础资料赋值提示列只读
问题描述:
python在操作事件中对多选基础字段赋值提示列只读,请问一下红色部分代码是哪里错了吗?正确的写法是什么呢?
解决方案:
mulBaseDataEntitySet 通常是有值的,有值的时候应该是不能改的。
你只需要判断是否为空: mulBaseDataEntitySet Is None 确保字段的数据包不为空就行了。
不要用字段数据包集合的大小来判空。
问题来源:
Python 多选基础资料赋值提示列只读 (kingdee.com)
推荐阅读