电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

套打.二开案例.自实现合并套打所选子分录

来源:金蝶云社区作者:金蝶2024-09-232

套打.二开案例.自实现合并套打所选子分录

【现状】

系统针对子分录只有连续套打所选子分录操作;而合并操作只有合并单据和合并分录操作。

【演示数据】

以工序计划为例,套打模板如下设置,数据表格绑定工序序列单据体,数据行嵌套文本控件绑定单据头字段,嵌套简单数据表格绑定工序列表子单据体。

image.webp


合并套打所选分录效果如下(会打印所选分录下的所有子分录):

image.webp


连续套打所选子分录效果如下(不同单据会换页):

image.webp


image.webp


那么如果我们想实现合并套打所选子分录(不同单据不换页,且只打印勾选的子分录数据)应该怎么实现呢。

可以利用合并套打所选分录操作,然后对子分录数据按照列表勾选行进行过滤。

【解决方案】

<1>在业务对象的列表菜单增加菜单项,菜单的点击事件调用系统操作“合并预览所选分录”(这个是预览操作,打印操作则改为“合并套打所选分录”)。

image.webp

<2>挂设列表插件,实现套打数据包修改

image.webp

image.webp

image.webp

<3>效果验证

image.webp

image.webp


示例代码如下:

public class MergeSubEntryListPlugIn : AbstractListPlugIn

    {

        string targetSubEntry = string.Empty;

        bool mergeSubEntryList = false;


        public override void BarItemClick(BarItemClickEventArgs e)

        {

            base.BarItemClick(e);

            mergeSubEntryList = false;

            targetSubEntry = string.Empty;

            if (e.BarItemKey.EqualsIgnoreCase("MergeSelectSubEntry"))

            {

                //前提校验,需要过滤方案存在三个实体

                List<FilterEntity> selectEntitnes = this.ListView.Model.FilterParameter.SelectedEntities;

                var headEntity = selectEntitnes.FirstOrDefault(x => x.EntityType == BOSEnums.Enum_EntityType.Header);

                var entryEntity = selectEntitnes.FirstOrDefault(x => x.EntityType == BOSEnums.Enum_EntityType.Entity);

                var subEntryEntity = selectEntitnes.FirstOrDefault(x => x.EntityType == BOSEnums.Enum_EntityType.SubEntity);

                if (headEntity == null || entryEntity == null || subEntryEntity == null)

                {

                    this.View.ShowWarnningMessage("过滤方案中的选择实体没有勾选到子分录,无法进行合并套打所选子分录");

                    e.Cancel = true;

                    return;

                }

                //标记为合并子分录操作,记录目标子分录标识

                mergeSubEntryList = true;

                targetSubEntry = subEntryEntity.Key;

            }

        }


        public override void OnPrepareNotePrintData(PreparePrintDataEventArgs e)

        {

            base.OnPrepareNotePrintData(e);

            if (!mergeSubEntryList || e.DataObjects == null || e.DataObjects.Length == 0)

                return;

            var curEntity = this.View.BillBusinessInfo.GetEntity(e.DataSourceId) as SubEntryEntity;

            //不是目标子单据体则不干预数据

            if (curEntity == null || !curEntity.Key.EqualsIgnoreCase(targetSubEntry))

                return;

            HeadEntity headEntity = this.View.BillBusinessInfo.Entrys.FirstOrDefault(x => x is HeadEntity) as HeadEntity;

            if (headEntity == null || curEntity.ParentEntity == null)

                return;

            List<DynamicObject> selectRowNoteData = new List<DynamicObject>();

            foreach (var notePrintDataRow in e.DataObjects)

            {

                string billPk = null, entryPk = null,

套打.二开案例.自实现合并套打所选子分录

【现状】系统针对子分录只有连续套打所选子分录操作;而合并操作只有合并单据和合并分录操作。【演示数据】以工序计划为例,套打模板如下设...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信