金蝶财务2023年最新模板的生成软件的环境自动化配置方法
金蝶财务2023年最新模板的生成软件的环境自动化配置方法
配置文件长这样
1 2 | <!-- 程序运行环境,prod为生产环境,test为45测试环境 --> RunEnvironment=test |
程序代码中的获取
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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" ; |
变量的定义和环境获取的方法:
1 2 3 4 5 6 7 8 9 10 | /// <summary> /// 运行环境 /// </summary> public static string RunEnvironment = "debug" ; /// <summary> /// debug /// </summary> /// <returns></returns> public static bool isDebug() => RunEnvironment == "debug" ; |
金蝶核销对账2023年模板的规则:
1 2 3 4 5 6 7 | 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)的规则:
1 2 | FVOUCHERID FENTRYID FACCTNUM FACCTNAME FOPPENTRYID FOPPACCTNUM FOPPACCTNAME FITEMNUM FITEMNAME FSUBITEMNUM FSUBITEMNAME FCURRENCYNUM FCURRENCYNAME FAMOUNTFOR FAMOUNT 单据头(序号) 本方分录#单据体(序号) 本方科目#编码 本方科目#名称 对方分录#单据体(序号) 对方科目#编码 对方科目#名称 *主表项目#编码 *主表项目#名称 *附表项目#编码 *附表项目#名称 币别#编码 币别#名称 *原币金额 *本位币金额 |
获取本地模板生成一个DataTable对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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年金蝶销账模板的平账:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | /// <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年金蝶销账模板的平账:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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); } |
生成金蝶凭证的业务代码就不贴了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库