金蝶云星空表单插件单据体批量删除,序号自增

76 篇文章 0 订阅
32 篇文章 0 订阅

金蝶云星空表单插件单据体批量删除,序号自增

字段标识说明

单据体标识:FEntity
序号标识:Seq
物料标识:F_XXXX_MaterialId
【一键删除】操作标识:CleanEmptyEntity

表单插件

在这里插入图片描述

获取单据体数据包

//获取单据体,为空提示操作失败
var entityD = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
if (entityD==null || entityD.Count<=0)
{
    e.Cancel = true;
    base.View.ShowErrMessage("明细信息为空,无需操作。");
    break;
}
//不为空时,将物料为空的行全部删除,如果没有为空的行,那就提示操作失败
var canEntity = entityD.Where(s=>(s["F_XXXX_MaterialId_Id"]+"").Equals("0")).ToList();
if (canEntity == null || canEntity.Count <= 0)
{
    e.Cancel = true;
    base.View.ShowErrMessage("明细信息全部有效,无需操作。");
    break;
}

移除物料为空的行

 //循环删除分录1 测试通过
for (int i = entityD.Count - 1; i >= 0; i--)
{
    string seq = Convert.ToString(entityD[i]["Seq"]);
    var getIsDelete = canEntity.Where(s => (s["Seq"] + "").Equals(seq)).ToList().FirstOrDefault();
    if (getIsDelete != null)
    {
        entityD.RemoveAt(i);
    }
}

其他移除物料为空的行的方式,但是测试不通过,不建议使用

//循环删除分录4 测试不通过 删除第一条后,下一次循环获取报错:集合已修改;可能无法执行枚举操作。
foreach (var item in entityD)
{
    //直接判断 物料编码为空,则直接删除
    if ((item["F_XXXX_MaterialId_Id"] + "").Equals("0"))
    {
        entityD.Remove(item);
    }
}

在这里插入图片描述

//循环删除分录2 测试不通过 每删除一行,集合就少一行,然而循环的索引是递增的,所以就会有需要删除的行往前挪了,错过了判断删除的时机
//for (int i = 0; i <= entityD.Count - 1; i++)
//{
//    string seq = Convert.ToString(entityD[i]["Seq"]);
//    var getIsDelete = canEntity.Where(s => (s["Seq"] + "").Equals(seq)).ToList().FirstOrDefault();
//    if (getIsDelete != null)
//    {
//        entityD.RemoveAt(i);
//    }
//}

//循环删除分录3 测试不通过 不影响原来的实体
//for (int i = canEntity.Count - 1; i >= 0; i--)
//{
//    canEntity.RemoveAt(i);
//}


//循环删除分录5 测试不通过,无反应
//entityD.ToList().RemoveAll(s => (s["F_XXXX_MaterialId_Id"] + "").Equals("0"));
//entityD.ToList().RemoveAll(canEntity);
//entityD.ToList().RemoveAll(s => canEntity.Select(d => (d["F_XXXX_MaterialId_Id"] + "")).ToList().Contains((s["F_XXXX_MaterialId_Id"] + "")));
//entityD.ToList().RemoveAll(s => "0".Contains(s["F_XXXX_MaterialId_Id"] + ""));

序号重新生成

 //获取已经生成的行的最大序号,新的行按照这个继续递增
int maxSeq = entityD.Where(s => Convert.ToInt64(s["Id"]) > 0).Max(d => Convert.ToInt32(d["Seq"]));
//需要 序号重新编号
var sortSeqE = entityD.Where(s => Convert.ToInt64(s["Id"]) == 0).ToList();
for (int i=0;i< sortSeqE.Count();i++) 
{
    sortSeqE[i]["Seq"] = ++maxSeq;
}

this.View.UpdateView("FEntity");//刷新单据体

测试

在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VBA(Visual Basic for Applications)是一种基于Microsoft Visual Basic的编程语言,它可以用于自动化操作和增强Microsoft Office套件中的各种应用程序。对接金蝶云星空是指通过VBA来实现与金蝶云星空系统的数据交互和操作。 在使用VBA对接金蝶云星空时,可以利用VBA提供的对象模型和方法来连接金蝶云星空系统,并进行数据的导入、导出、更新等操作。具的步骤如下: 1. 导入金蝶云星空的VBA引用:在VBA编辑器中,选择工具-引用,勾选金蝶云星空相关的引用,以便在代码中使用金蝶云星空的对象和方法。 2. 连接金蝶云星空系统:使用VBA中的对象和方法,如CreateObject函数和Login方法来建立与金蝶云星空系统的连接,并进行用户登录验证。 3. 数据的导入和导出:利用金蝶云星空提供的API接口,通过VBA的HTTP请求方法和XML解析方法,可以实现数据在系统和Excel、Access等应用之间的导入和导出。 4. 数据的更新和查询:使用VBA来编写SQL语句,并通过金蝶云星空提供的数据操作接口,实现数据的更新和查询操作,包括增删改查等。 5. 错误处理和日志记录:在VBA代码中添加错误处理机制,捕获异常并进行处理,同时可以将错误信息记录到日志文件中,以便后续排查和分析问题。 通过以上步骤,可以实现VBA与金蝶云星空的对接,实现自动化的数据操作和管理。这样可以提高工作效率,减少人工操作的错误和繁琐性,使数据处理和管理更加高效和准确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值