峰峦@叠嶂 2025-03-05 11:17 采纳率: 98%
浏览 6
已结题

发货单号带有后缀字母,需要去掉

请教个问题,我们需要从一个生产数据表,提取出发货单号,如XOUT0069732A,再与ERP系统的相同的发货单号实现对应,从而查询出规定时间范围的发货时间,由于生产数据表,有一部分发货单号,为了做区分,而带上了后缀字母,格式如 XOUT0069732A,我将其截取后续字母,进行关联,但在查询中,总是缺失这部分数量,请看看我截取的方法是否有问题,代码如下;

if (Compro == "销售发货信息")
{
    string Xoutquery = @"select distinct code20,boxCode,wa.orderCode,cd.createTime from da_warehouseOutCode cd
                        Join da_warehouseOut wa on cd.orderID = wa.orderID
                        where cd.createTime >= @startdate and cd.createTime < @enddate";
   
    SqlCommand Cmd3 = new SqlCommand(Xoutquery,ConnRedinfo);
    
    Cmd3.Parameters.AddWithValue("@startdate", startdate); 
    
    Cmd3.Parameters.AddWithValue("@enddate", enddate);

    SqlDataAdapter sda3 = new SqlDataAdapter(Cmd3);

    DataTable reddt = new DataTable();

    sda3.Fill(reddt);

    string connStringK = "server=192.168.2.5;database=AIS2015;user=sa;password=zz";

    using (SqlConnection ConnK = new SqlConnection(connStringK))
    {
        ConnK.Open();

        DataTable ComdtK = new DataTable();

        // 假设正常单据号长度,这里根据 XOUT0068457 是 11int normalLength = 11;

        foreach (DataRow row in reddt.Rows)
        {
            string XoutNo = row["orderCode"].ToString();

            // 如果长度超过正常长度,截取到正常长度
            if (XoutNo.Length > normalLength)
            {
                XoutNo = XoutNo.Substring(0, normalLength);
            }

            string queryK = @"select FBillNo,FHeadSelfB0163 from ICStockBill where FBillNo = @XoutNo";

            SqlCommand CmdK = new SqlCommand(queryK, ConnK);

            CmdK.Parameters.AddWithValue("@XoutNo", XoutNo);

            using (SqlDataReader reader2 = CmdK.ExecuteReader())
            {
                DataTable dtK = new DataTable();
                dtK.Load(reader2);
                ComdtK.Merge(dtK);
            }
        }

        DataTable mergedTable = MergeTables(reddt, ComdtK);

        // 添加“发货机构”列并设置默认值
        DataColumn shippingOrganizationColumn = new DataColumn("发货机构名称", typeof(string));
        shippingOrganizationColumn.DefaultValue = "医药公司";
        mergedTable.Columns.Add(shippingOrganizationColumn);

        // 添加“发货地址”列并设置默认值
        DataColumn shippingAddressColumn = new DataColumn("发货机构地址", typeof(string));
        shippingAddressColumn.DefaultValue = "山东";
        mergedTable.Columns.Add(shippingAddressColumn);

        mergedTable.Columns.Add("发货人身份信息", typeof(string));

        mergedTable.Columns.Add("联系方式", typeof(string));

        dataGridView1.DataSource = mergedTable;

        dataGridView1.Columns[0].HeaderText = "追溯码唯一流水号";
        dataGridView1.Columns[1].HeaderText = "发货单编号";
        dataGridView1.Columns[2].HeaderText = "订货单编号";
        dataGridView1.Columns[3].HeaderText = "发货时间";

        dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
    }
}

  • 写回答

4条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2025-03-05 11:43
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    根据您提供的代码和问题描述,您遇到的问题可能是在截取发货单号时未正确处理带有后缀字母的情况。在您的代码中,您尝试将发货单号截取至正常长度,但可能导致部分发货单号丢失。 为了正确处理带有后缀字母的发货单号,您可以修改代码如下:
    int normalLength = 11; // 正常单据号长度
    foreach (DataRow row in reddt.Rows)
    {
        string XoutNo = row["orderCode"].ToString();
        // 如果发货单号包含字母后缀
        if (XoutNo.Length > normalLength)
        {
            int indexOfLetter = XoutNo.Length - 1; // 找到字母后缀的位置
            if (char.IsLetter(XoutNo[indexOfLetter]))
            {
                XoutNo = XoutNo.Substring(0, indexOfLetter); // 截取发货单号
            }
        }
        // 继续后续处理
        // ...
    }
    

    在这个修改后的代码中,我们在判断发货单号长度超过正常长度的情况下,找到最后一个字符是否为字母后缀,如果是则截取至该位置,保留发货单号的主体部分。 这样可以确保正确处理带有后缀字母的发货单号,避免丢失部分数量的情况。 希望这个修改能够帮助您解决问题。如果您还有任何疑问,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 修改了问题 3月5日
  • 创建了问题 3月5日