自定义公式设置专题演讲者:刘瑞环2024年7月8日U8支持服务应用部目录单据-自定义公式设置1单据列表-栏目设置2报表-自定义公式设置3U8支持服务应用部PART1单据-自定义公式设置-遵循js语法U8支持服务应用部单据自定义公式设置【区分】:在设置自定义公式时,是通过已有值,计算另一个字段。不是针对单个字段的公式设置,如当前字段输入A时,自动显示为是,输入B时,显示为否。此种情况,可以参考自定义档案是否符合需求。U8支持服务应用部单据自定义公式设置【区分】:在设置自定义公式时,是通过已有值,计算另一个字段。不是针对单个字段的公式设置,如当前字段输入A时,自动显示为是,输入B时,显示为否。此种情况,可以参考自定义档案是否符合需求。U8支持服务应用部单据自定义公式设置【区分】:在设置自定义公式时,是通过已有值,计算另一个字段。不是针对单个字段的公式设置,如当前字段输入A时,自动显示为是,输入B时,显示为否。此种情况,可以参考自定义档案是否符合需求。U8支持服务应用部案例一:当条件满足A时,返回“A1”,满足B时,返回“B1”.....•【业务场景】:•1)非A即B-发货单中,当销售类型为“普通销售”时,返回“A”,否则返回“B”。•【参考脚本】:•cstr([表头:销售类型]=="普通销售"?"A":"B";)U8支持服务应用部案例一:当条件满足A时,返回“A1”,满足B时,返回“B1”.....•【业务场景】:•1)非A即B-发货单中,当销售类型为“普通销售”时,返回“A”,否则返回“B”。•【参考脚本】:•cstr([表头:销售类型]=="普通销售"?"A":"B";)U8支持服务应用部案例一:当条件满足A时,返回“A1”,满足B时,返回“B1”.....•【业务场景】:•2)销售订单中当业务类型为“普通销售”时,返回“A”,当为直运销售时,返回“B”,其他情况,返回“Other”•【参考脚本】-1:•cstr([表头:销售类型]=="普通销售"?"A":([表头:销售类型]=="直运销售"?"B":"Other");)U8支持服务应用部案例一:当条件满足A时,返回“A1”,满足B时,返回“B1”.....•【业务场景】:•2)销售订单中当业务类型为“普通销售”时,返回“A”,当为直运销售时,返回“B”,其他情况,返回“Other”•【参考脚本】-1:•cstr([表头:销售类型]=="普通销售"?"A":([表头:销售类型]=="直运销售"?"B":"Other");)U8支持服务应用部案例一:当条件满足A时,返回“A1”,满足B时,返回“B1”.....•【业务场景】:•2)销售订单中当业务类型为“普通销售”时,返回“A”,当为直运销售时,返回“B”,其他情况,返回“Other”•【参考脚本】-1:•cstr([表头:销售类型]=="普通销售"?"A":([表头:销售类型]=="直运销售"?"B":"Other");)U8支持服务应用部案例一:当条件满足A时,返回“A1”,满足B时,返回“B1”.....•【业务场景】:•2)销售订单中当业务类型为“普通销售”时,返回“A”,当为直运销售时,返回“B”,其他情况,返回“Other”•【参考脚本】-2:•cstr(if([表头:销售类型]=="普通销售"){value="A"}elseif([表头:销售类型]=="直运销售"){value="B"}else{value="Other"})•【参考脚本】-3:•cstr(varv1=[表头:销售类型];switch(v1){case"普通销售":value="A";break;case"直运销售":value="B";break;default:value="Other";})U8支持服务应用部案例二:判断A的值是否在数组B中•【业务场景】:销售报价单添加表头自定义项,预设部分业务员的信息【如:“王铭”“李响”“111”】,当表头选择的操作员在预设列表内,则返回信息是“是”,否则返回信息是“否”。U8支持服务应用部案例二:判断A的值是否在数组B中•【参考脚本】:•cstr(varv2=[表头:业务员];varv3=0;varv1=["李响","王铭","111"];•for(vari=0;i)【注意】:先as一个别名用于和标准字段进行区分。【为什么】?U8支持服务应用部案例二:列表增加栏目【错误现象】:U8支持服务应用部案例二:列表增加栏目【后台跟踪语句】-部分:U8支持服务应用部案例二:列表增加栏目【区分】:两种写法结果不同从语句角度分析:(selecttop1t.d1from(selectdDateasd1,cCodeasc1fromRdRecord01)twheret.c1=$<入库单号>)ccode是作为入库单号字段进行匹配的,当where后面为ccode=ccode和1=1的效果是一样的,恒等。U8支持服务应用部案例二:列表增加栏目【业务场景】-2:销售订单列表增加显示项目分类,需要考虑若订单中关联多个项目大类时,如何关联显示?U8支持服务应用部案例二:列表增加栏目【参考代码】:(selecttop1cc1from(select(casewhens.cItem_class='00'then(selectc1from(selectcitemcnameasc1,t2.citemnameasc2fromfitemss00classt1leftjoinfitemss00t2ont1.cItemCcode=t2.citemccode)twherec2=s.cItemName)whens.cItem_class='97'then(selectc1from(selectcitemcnameasc1,t2.citemnameasc2fromfitemss97classt1leftjoinfitemss97t2ont1.cItemCcode=t2.citemccode)twherec2=s.cItemName)whens.cItem_class='01'then(selectc1from(selectcitemcnameasc1,t2.citemnameasc2fromfitemss01classt1leftjoinfitemss01t2ont1.cItemCcode=t2.citemccode)twherec2=s.cItemName)end)ascc1,CONVERT(nvarchar,s.iSOsID)ascc2fromso_sodetailss)twheret.cc2=$<订单子表ID>)U8支持服务应用部案例二:列表增加栏目【参考代码】:(selecttop1cc1from(select(casewhens.cItem_class='00'then(selectc1from(selectcitemcnameasc1,t2.citemnameasc2fromfitemss00classt1leftjoinfitemss00t2ont1.cItemCcode=t2.citemccode)twherec2=s.cItemName)whens.cItem_class='97'then(selectc1from(selectcitemcnameasc1,t2.citemnameasc2fromfitemss97classt1leftjoinfitemss97t2ont1.cItemCcode=t2.citemccode)twherec2=s.cItemName)whens.cItem_class='01'then(selectc1from(selectcitemcnameasc1,t2.citemnameasc2fromfitemss01classt1leftjoinfitemss01t2ont1.cItemCcode=t2.citemccode)twherec2=s.cItemName)end)ascc1,CONVERT(nvarchar,s.iSOsID)ascc2fromso_sodetailss)twheret.cc2=$<订单子表ID>)U8支持服务应用部PART3系统报表-自定义公式设置-C#脚本U8支持服务应用部案例一:UAP报表日期类计算【业务场景】:采购订单执行统计表,使用计划交货日期减订单日期计算预计到货周期,或根据已有值算出日期。U8支持服务应用部案例一:UAP报表日期类计算【参考脚本】-1:根据已有值计算出日期,以日期+自定义项15为例。可用简单计算列(其他)实现:当前报表中,支持日期直接加int、floor类型的数字计算出最新日期。floor类型若含有小数时,会自动换算日期,如日期为2015/1/5自定义项16为10.5那将计算出来2015/1/1512:00:00U8支持服务应用部案例一:UAP报表日期类计算【参考脚本】-2:使用计划交货日期减订单日期计算预计到货周期。可用复杂计算列(其他)实现:C#也不支持日期直接计算差值,可使用下方脚本实现return(current.darrivedate.Subtract(current.dPODate)).Days;U8支持服务应用部案例二:UAP报表条件类运算【业务场景】:现存量表中增加最高库存、最低库存列,当现存量大于最高库存时,显示高于最高库存的量,低于最低库存时,显示低于最低库的量。U8支持服务应用部案例二:UAP报表条件类运算【参考脚本】:可用复杂计算列实现,使用IF条件实现。if(current.iQtty>current.iTopSum&¤t.iTopSum!=0){returncurrent.iQtty-current.iTopSum;}elseif(current.iQtty($<当前日期>>$<计划到货日期>,1,0)U8支持服务应用部案例三:UAP报表-输出事件【参考脚本】-2:使用报表输出事件实现if(DateTime.Now>current.darrivedate&¤t.入库状态=="入库未完成"){row.BackColor=Color.Red;}注意:输出事件对于维度扩展项会显示异常,建议只针对报表自带字段进行设置。U8支持服务应用部U8支持服务应用部