金蝶财务2023年最新模板的生成软件的环境自动化配置方法

金蝶财务2023年最新模板的生成软件的环境自动化配置方法

 

配置文件长这样

<!-- 程序运行环境,prod为生产环境,test为45测试环境 -->
RunEnvironment=test

程序代码中的获取

if (File.Exists("exe.config").is_true())
            {
                var arr = File.ReadAllText("exe.config").Split(new[] {"\r\n"}, StringSplitOptions.None);

                foreach (var x in arr)
                {
                    if (x.is_null_or_empty() || x.Contains("<!--")) continue;

                    if (x.is_not_null_or_empty() && x.ToLower().Contains("prod")) comx.RunEnvironment = "prod";
                }
            }

            label_environment.Text = comx.isDebug() ? "Test" : "Prod";

变量的定义和环境获取的方法:

        /// <summary>
        /// 运行环境
        /// </summary>
        public static string RunEnvironment = "debug";

        /// <summary>
        /// debug
        /// </summary>
        /// <returns></returns>
        public static bool isDebug() => RunEnvironment == "debug";

  

金蝶核销对账2023年模板的规则:

FBillHead(GL_VOUCHER)	FAccountBookID	FAccountBookID#Name	FDate	FBUSDATE	FYEAR	FPERIOD	FVOUCHERGROUPID	FVOUCHERGROUPID#Name	FVOUCHERGROUPNO	FATTACHMENTS	FISADJUSTVOUCHER	FACCBOOKORGID	FACCBOOKORGID#Name	FSourceBillKey	FSourceBillKey#Name	FIMPORTVERSION	FCreatorId	FCreatorId#Name	*Split*1	FEntity	FEXPLANATION	FACCOUNTID	FACCOUNTID#Name	FDetailID#FF100010	FDetailID#FF100010#Name	FDetailID#FF100013	FDetailID#FF100013#Name	FDetailID#FF100015	FDetailID#FF100015#Name	FDetailID#FF100012	FDetailID#FF100012#Name	FDetailID#FF100007	FDetailID#FF100007#Name	FDetailID#FF100008	FDetailID#FF100008#Name	FDetailID#FF100011	FDetailID#FF100011#Name	FDetailID#FF100016	FDetailID#FF100016#Name	FDetailID#FF100020	FDetailID#FF100020#Name	FDetailID#FF100022	FDetailID#FF100022#Name	FDetailID#FF100023	FDetailID#FF100023#Name	FDetailID#FF100014	FDetailID#FF100014#Name	FDetailID#FF100017	FDetailID#FF100017#Name	FDetailID#FF100018	FDetailID#FF100018#Name	FDetailID#FF100019	FDetailID#FF100019#Name	FDetailID#FFlex7	FDetailID#FFlex7#Name	FDetailID#FFlex8	FDetailID#FFlex8#Name	FDetailID#FFLEX9	FDetailID#FFLEX9#Name	FDetailID#FFlex6	FDetailID#FFlex6#Name	FDetailID#FFlex4	FDetailID#FFlex4#Name	FDetailID#FFlex5	FDetailID#FFlex5#Name	FDetailID#FFlex10	FDetailID#FFlex10#Name	FDetailID#FF100003	FDetailID#FF100003#Name	FDetailID#FF100005	FDetailID#FF100005#Name	FDetailID#FF100006	FDetailID#FF100006#Name	FDetailID#FF100002	FDetailID#FF100002#Name	FDetailID#FFLEX11	FDetailID#FFLEX11#Name	FDetailID#FFLEX12	FDetailID#FFLEX12#Name	FDetailID#FFLEX13	FDetailID#FFLEX13#Name	FCURRENCYID	FCURRENCYID#Name	FEXCHANGERATETYPE	FEXCHANGERATETYPE#Name	FEXCHANGERATE	FUnitId	FUnitId#Name	FPrice	FQty	FAMOUNTFOR	FDEBIT	FCREDIT	FSettleTypeID	FSettleTypeID#Name	FSETTLENO	FBUSNO	FEXPORTENTRYID
*单据头(序号)	*(单据头)账簿#编码	(单据头)账簿#名称	*(单据头)日期	(单据头)业务日期	(单据头)会计年度	(单据头)期间	*(单据头)凭证字#编码	(单据头)凭证字#名称	*(单据头)凭证号	(单据头)附件数	(单据头)是否调整期凭证	(单据头)核算组织#编码	(单据头)核算组织#名称	(单据头)业务类型#编码	(单据头)业务类型#名称	(单据头)引入版本号	(单据头)制单#编码	(单据头)制单#名称	间隔列	*分录(序号)	(分录)摘要	*(分录)科目编码#编码	(分录)科目编码#名称	(分录)英美部门#编码	(分录)英美部门#名称(Null)	(分录)结账中心#编码	(分录)结账中心#名称(Null)	(分录)费用预付#编码	(分录)费用预付#名称(Null)	(分录)英美客户#编码	(分录)英美客户#名称(Null)	(分录)米加客户#编码	(分录)米加客户#名称(Null)	(分录)米加职员#编码	(分录)米加职员#名称(Null)	(分录)英美供应商#编码	(分录)英美供应商#名称(Null)	(分录)舱单充值#编码	(分录)舱单充值#名称(Null)	(分录)业务预收#编码	(分录)业务预收#名称(Null)	(分录)客商名称#编码	(分录)客商名称#名称(Null)	(分录)金融投资#编码	(分录)金融投资#名称(Null)	(分录)业务预付#编码	(分录)业务预付#名称(Null)	(分录)暂付款#编码	(分录)暂付款#名称(Null)	(分录)暂收款#编码	(分录)暂收款#名称(Null)	(分录)保证金#编码	(分录)保证金#名称(Null)	(分录)员工#编码	(分录)员工#名称(Null)	(分录)物料#编码	(分录)物料#名称(Null)	(分录)费用类型#编码	(分录)费用类型#名称(Null)	(分录)客户#编码	(分录)客户#名称(Null)	(分录)供应商#编码	(分录)供应商#名称(Null)	(分录)部门#编码	(分录)部门#名称(Null)	(分录)资产类别#编码	(分录)资产类别#名称(Null)	(分录)岗位信息#编码	(分录)岗位信息#名称(Null)	(分录)米加部门#编码	(分录)米加部门#名称(Null)	(分录)米加供应商#编码	(分录)米加供应商#名称(Null)	(分录)海外出差地#编码	(分录)海外出差地#名称(Null)	(分录)组织机构#编码	(分录)组织机构#名称(Null)	(分录)物料分组#编码	(分录)物料分组#名称(Null)	(分录)客户分组#编码	(分录)客户分组#名称(Null)	*(分录)币别#编码	(分录)币别#名称	*(分录)汇率类型#编码	(分录)汇率类型#名称	(分录)汇率	(分录)单位#编码	(分录)单位#名称	(分录)单价	(分录)数量	(分录)原币金额	(分录)借方金额	(分录)贷方金额	(分录)结算方式#编码	(分录)结算方式#名称	(分录)结算号	(分录)业务编号	(分录)现金流量#分录ID
固定值:280037	根据账簿的编码	根据账簿的名称	银行交易月份的最后一天	银行交易月份的最后一天	银行交易日期的年份	银行交易日期的月份	固定值:PRE001	固定值:记	固定值:1	固定值:0	固定值:False	根据账簿的核算组织编码	根据账簿的核算组织名称	固定值:c9452aee-0ac4-4a59-9a58-b1c619631b81	固定值:凭证引入	固定值:***	/	用户名	/	7位编码升序	银行摘要:交易类型*银行交易抬头*销账号码*银行流水号	银行科目编码和科目名称(见附表1)																				/	/																																							银行币别编码和币别名称(见附表1)		固定值:HLTX01_SYS	固定值:固定汇率	根据银行交易日期和币别取直接汇率(详见汇率表)					银行的交易金额	来账的交易金额*汇率(保留两位)	往账的交易金额*汇率(保留两位)					7位编码开始升序
	=DISPIMG("ID_DDFCF53497B146B4909D11154AE6AA92",1)																			7位编码升序	IFREIGHT系统销账明细表:账单号码*账单客户*主单号*分单号*开航日*销账号码*发票号码 (海运)	根据销账明细表的应收付和币别判断(详见附表2)																				客商抬头编码	客商抬头名称																																							根据销账明细表的币别判断(详见附表2)		固定值:HLTX01_SYS	固定值:固定汇率	根据销账明细表中的“账单原币”和银行交易日期取直接汇率(详见汇率表)					IFREIGHT销账明细表的“销账金额(账单)”	C:IFREIGHT销账明细表的“销账金额(账单)”*汇率(保留两位)	D:IFREIGHT销账明细表的“销账金额(账单)”*汇率(保留两位)					7位编码开始升序
																				7位编码升序	51GAGRO系统销账明细表:入录号*对象名称 *MAWB*JOB*ETD*销账号码*合并号码 (空运)	根据销账明细表的应收付和币别判断(详见附表2)																				客商抬头编码	客商抬头名称																																							根据销账明细表的币别判断(详见附表2)		固定值:HLTX01_SYS	固定值:固定汇率	根据销账明细表中的“币种”和银行交易日期取直接汇率(详见汇率表)					51GAGRO销账明细表中的“金额”	应付:51GAGRO销账明细表的“金额”*汇率(保留两位)	应收:51GAGRO销账明细表的“金额”*汇率(保留两位)					7位编码开始升序
																				7位编码升序	暂收款摘要:“暂收”*银行交易抬头*销账号码*银行流水号	固定值:2241.31	固定值:暂收款																			暂存表的客商抬头编码	暂存表的客商抬头名称																																							根据暂收表的币别判断(详见附表2)		固定值:HLTX01_SYS	固定值:固定汇率	根据银行交易日期和“币别”取直接汇率(详见汇率表)					暂收表的“收款金额”	/	暂收表的收款金额*汇率(保留两位)					7位编码开始升序
																				7位编码升序	汇兑损益摘要:“汇兑损益”*销账号码	固定值:6603.03	固定值:汇兑损益																			/	/																																							固定值:PRE001	固定值:人民币	固定值:HLTX01_SYS	固定值:固定汇率	固定值:1					倒挤该金额,使SUM借方金额=SUM贷方金额	倒挤该金额,使SUM借方金额=SUM贷方金额	/					7位编码开始升序

  

金蝶核销对账2023年模板2-现金流量(CashFlow)的规则:

FVOUCHERID	FENTRYID	FACCTNUM	FACCTNAME	FOPPENTRYID	FOPPACCTNUM	FOPPACCTNAME	FITEMNUM	FITEMNAME	FSUBITEMNUM	FSUBITEMNAME	FCURRENCYNUM	FCURRENCYNAME	FAMOUNTFOR	FAMOUNT
单据头(序号)	本方分录#单据体(序号)	本方科目#编码	本方科目#名称	对方分录#单据体(序号)	对方科目#编码	对方科目#名称	*主表项目#编码	*主表项目#名称	*附表项目#编码	*附表项目#名称	币别#编码	币别#名称	*原币金额	*本位币金额

 

获取本地模板生成一个DataTable对象:

public static DataTable get_datatable_from_file_full_path(string file_path, int sheet_at = 0)
        {
            try
            {
                DataTable dataTable = new DataTable();
                string lower = Path.GetExtension(file_path).ToLower();
                using (FileStream fileStream = new FileStream(file_path, FileMode.Open, FileAccess.Read))
                {
                    IWorkbook workbook = !(lower == ".xlsx") ? (!(lower == ".xls") ? (IWorkbook) null : (IWorkbook) new HSSFWorkbook((Stream) fileStream)) : (IWorkbook) new XSSFWorkbook((Stream) fileStream);
                    if (workbook == null)
                        return (DataTable) null;
                    ISheet sheetAt = workbook.GetSheetAt(sheet_at);
                    IRow row1 = sheetAt.GetRow(sheetAt.FirstRowNum);
                    List<int> intList = new List<int>();
                    for (int cellnum = 0; cellnum < (int) row1.LastCellNum; ++cellnum)
                    {
                        object valueType = Utility.GetValueType(file_path, workbook, row1.GetCell(cellnum));
                        if (valueType != null && !(valueType.ToString() == string.Empty))
                        {
                            dataTable.Columns.Add(new DataColumn(valueType.ToString()));
                            intList.Add(cellnum);
                        }
                        else
                            break;
                    }

                    for (int rownum = sheetAt.FirstRowNum + 1; rownum <= sheetAt.LastRowNum; ++rownum)
                    {
                        DataRow row2 = dataTable.NewRow();
                        bool flag = false;
                        foreach (int num in intList)
                        {
                            try
                            {
                                row2[num] = Utility.GetValueType(file_path, workbook, sheetAt.GetRow(rownum).GetCell(num));
                                if (row2[num] != null && row2[num].ToString() != string.Empty)
                                    flag = true;
                            }
                            catch
                            {
                            }
                        }

                        if (flag)
                            dataTable.Rows.Add(row2);
                        else
                            break;
                    }
                }

                return dataTable;
            }
            catch
            {
                return (DataTable) null;
            }
        }

 

2022年金蝶销账模板的平账:

        /// <summary>
        /// 平账
        /// </summary>
        /// <param name="dtx"></param>
        /// <param name="startIndex"></param>
        /// <param name="list"></param>
        /// <returns></returns>
        private DataTable op_finally_heng_chou_just_2022(DataTable dtx, int startIndex, ref List<postion_model> list)
        {
            int length = dtx.Rows.Count;
            if (startIndex >= length) return dtx;
            DataRow dataRow;
            int a = -1, b = -1;
            for (int i = startIndex; i < length; i++)
            {
                dataRow = dtx.get_row_by_index(i);
                if (dataRow.get_cell_val("FEXPLANATION").StartsWith("来账") || dataRow.get_cell_val("FEXPLANATION").StartsWith("往账"))
                    if (a == -1) a = i;
                    else b = i;
                if (a != -1 && b != -1) break;
                if (i == length - 1) b = length;
            }

            if (a == -1 || b == -1) return dtx;
            decimal cm = 0, cn = 0;
            for (int i = a; i < b; i++)
            {
                cm += dtx.get_row_by_index(i).get_cell_val("FDEBIT").to_decimal();
                cn += dtx.get_row_by_index(i).get_cell_val("FCREDIT").to_decimal();
            }

            if (cm == cn) return op_finally_heng_chou_just_2022(dtx, b, ref list);
            decimal x = Math.Abs(cm - cn);
            if (x > 0.5M)
            {
                setTextMessage(dtx.get_row_by_index(a).get_cell_val("FEXPLANATION") + "->销账号借贷不平,因为差额值大于0.5,跳过继续......");
                //-----------------------------------平账平不了的跳过继续,不生成20220816----------------------------------------begin
                DataTable dt2 = dtx.Copy();
                dt2.Clear();
                length = dtx.Rows.Count;
                DataRow dataRow2;
                for (int i = 0; i < length; i++)
                {
                    if (i >= a && i < b) continue;
                    dataRow2 = dt2.NewRow();
                    dataRow2.ItemArray = dtx.Rows[i].ItemArray;
                    dt2.Rows.Add(dataRow2);
                }

                return op_finally_heng_chou_just_2022(dt2, 1, ref list);
                //-----------------------------------平账平不了的跳过继续,不生成20220816----------------------------------------end
            }

            int countx = Convert.ToInt32((x * 100).ToString().Replace(".00", ""));

            //-----------------------------------平账平不了的跳过继续,不生成20220816----------------------------------------begin
            //绝对值(a-b)定义为x,如果销账明细分个数小于x则平账失败-》该条不再进行平账操作
            if (countx > Math.Abs(b - a) + 1)
            {
                DataTable dt2 = dtx.Copy();
                dt2.Clear();
                length = dtx.Rows.Count;
                DataRow dataRow2;
                for (int i = 0; i < length; i++)
                {
                    if (i >= a && i < b) continue;
                    dataRow2 = dt2.NewRow();
                    dataRow2.ItemArray = dtx.Rows[i].ItemArray;
                    dt2.Rows.Add(dataRow2);
                }

                return op_finally_heng_chou_just_2022(dt2, b, ref list);
            }
            //-----------------------------------平账平不了的跳过继续,不生成20220816----------------------------------------end

            decimal opx = -0.01M;
            if (dtx.get_row_by_index(a).get_cell_val("FEXPLANATION").StartsWith("来账"))
            {
                if (cm > cn) opx = 0.01M;
                int i = a;
                while (countx > 0)
                {
                    i++;
                    if (dtx.get_row_by_index(i).get_cell_val("FCREDIT").is_null_or_empty()) continue;
                    dtx.Rows[i]["FCREDIT"] = dtx.get_row_by_index(i).get_cell_val("FCREDIT").to_decimal() + opx;
                    list.Add(new postion_model() {row = i + 1, cell = 91}); //91 CN列
                    countx--;
                }
            }
            else
            {
                if (cm > cn) opx = 0.01M;
                int i = a;
                while (countx > 0)
                {
                    i++;
                    if (dtx.get_row_by_index(i).get_cell_val("FDEBIT").is_null_or_empty()) continue;
                    dtx.Rows[i]["FDEBIT"] = dtx.get_row_by_index(i).get_cell_val("FDEBIT").to_decimal() + opx;
                    list.Add(new postion_model() {row = i + 1, cell = 90}); //90 CM列
                    countx--;
                }
            }

            return op_finally_heng_chou_just_2022(dtx, b - 1, ref list);
        }

  

2023年金蝶销账模板的平账:

private DataTable op_finally_exchange_gain_loss_2023(DataTable dataTable, int startIndex)
        {
            var length = dataTable.Rows.Count;
            if (startIndex >= length) return dataTable;

            int a = -1, b = -1;
            for (var i = startIndex; i < length; i++)
            {
                var dataRow = dataTable.get_row_by_index(i);

                if (dataRow.get_cell_val("FEXPLANATION").StartsWith("来账") || dataRow.get_cell_val("FEXPLANATION").StartsWith("往账"))
                    if (a == -1) a = i;
                    else b = i;

                if (a != -1 && b != -1) break;

                if (i == length - 1) b = length;
            }

            if (a == -1 || b == -1) return dataTable;

            decimal co = 0, cp = 0;
            for (var i = a; i < b; i++)
            {
                co += Math.Abs(dataTable.get_row_by_index(i).get_cell_val("FDEBIT").to_decimal());
                cp += Math.Abs(dataTable.get_row_by_index(i).get_cell_val("FCREDIT").to_decimal());
            }

            b--;

            if (co == cp)
            {
                dataTable.Rows[b]["FAMOUNTFOR"] = "0";
                dataTable.Rows[b]["FDEBIT"] = "0";

                return op_finally_exchange_gain_loss_2023(dataTable, b);
            }

            dataTable.Rows[b]["FAMOUNTFOR"] = Math.Abs(co - cp); //反向操作差值
            dataTable.Rows[b]["FDEBIT"] = dataTable.Rows[b]["FAMOUNTFOR"];

            return op_finally_exchange_gain_loss_2023(dataTable, b + 1);
        }

  

生成金蝶凭证的业务代码就不贴了。

 

posted @ 2023-01-13 16:23  liskov_design  阅读(138)  评论(0编辑  收藏  举报