金蝶财务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);
        }

  

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

 

posted @   liskov_design  阅读(183)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示