销售订单新变更单Python排序单据体及设置背景色试例原创
金蝶云社区-文安根
文安根
20人赞赏了该文章 691次浏览 未经作者许可,禁止转载编辑于2022年10月24日 09:38:44

    销售订单的收款条件为按物料明细收款时,如果销售订单需要变更,则会校验必须是整单变更,不能选择某个单的某几条分录进行变更。当选择整单所有分录作变更操作后,且订单明细分录中有几百条记录,但只变更了其中的某几条,默认打开单据时都是按序号排序单据体的,这种情况不利于客户查询哪些行已经被变更过。客户可以在销售订单新变更单上二开一个复选框字段(假设字段名为修改过,标识KEY为 F_ora_Modified )用于标识是否变更过,然后通过Python插件将此二开字段和默认的分录序号字段当作排序依据,并将二开字段'修改过'为true的行高亮显示,这样就可以使打开单据时变更过的记录在前面显示,未变更过的在后面显示,下面演示相关操作步骤。

    1,首先扩展销售订单新变更单,新加一个复选框字段,如下图1-1所示:

image.png

图1-1


    2,在BOSIDE的表单插件列表中,注册一个Python类型的插件,输入Python脚本代码,如下图1-2所示:

image.png

图1-2


    脚本代码如下所示:注意要使用附件中的代码,不要直接在论坛中复制

import clr
clr.AddReference('System')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS')

from Kingdee.BOS.Core import *
from System import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System.Collections.Generic import *
from Kingdee.BOS.JSON import *


def AfterBindData(e):
    grid = this.View.GetControl[EntryGrid]("FSaleOrderEntry");
    sorts = List[KeyValuePair[String, EntryGridFieldSortOrder]]();
    sort = KeyValuePair[String, EntryGridFieldSortOrder]("F_ora_Modified", EntryGridFieldSortOrder.Descending);    
    sorts.Add(sort);
    sort = KeyValuePair[String, EntryGridFieldSortOrder]("FSeq", EntryGridFieldSortOrder.Ascending);
    sorts.Add(sort);
    grid.SetSort(sorts);

    entity = this.View.BusinessInfo.GetEntity("FSaleOrderEntry");
    rowCount = this.Model.GetEntryRowCount("FSaleOrderEntry");
    formState = this.View.GetService[IDynamicFormState]();
    for i in range (0, rowCount):
        dyRow = this.Model.GetEntityDataObject(entity, i)
        modifyFlag = Convert.ToString(dyRow["F_ora_Modified"])
        if modifyFlag == 'True':
            backGroundJson = JSONObject.Parse('{"backcolor": {"' + i.ToString() + '": "#FF0000"}}');        	      
            formState.AftInvokeControlMethod(grid.ControlAppearance, "UpdateFieldStates", backGroundJson);


    3,变更一个销售订单,对已变更的行的'修改过'字段勾选,保存后重新打开销售订单新变更订单(保存后其实界面就被刷新了),可以看到默认就已按是否'修改过'字段排好序且高亮显示修改过的行,序号为1,3,4的行排在前面,序号为2的行排在最后,修改过和序号这两列在打开单据时就自动在列头中有向下和向上的小箭头,如下图1-3所示:

image.png

图1-3


    写在最后:从上图1-3可以看到二开的'修改过'字段为勾选状态的行,其中的背景色不是所有字段都相同(比如物料编码字段),那是因为如果某个字段是可编辑的,那它就没有背景色,比如上图中的第三行(分录里面的序号为4的行)的变更类型就是新增,它是可以改物料编码的,所以第三行的物料编码是没有背景色,但是第一和第二行它们的变更类型是修改,只能改数量和单价等之类的字段,不能改物料编码字段,所以他们的物料编码是有背景色的,另外根据Jack的描述,如果使用grid.SetRowBackcolor(colors);设置背景色可能存在问题,经过测试,在销售订单新变更单上如果调用SetRowBackcolor确实是没有效果的,详情可参阅:https://vip.kingdee.com/article/160697075289073920?productLineId=1&isKnowledge=2  。


赞 20