如何利用極致業務基礎平台構建一個通用企業ERP之十二收款單設計


收款單設計界面如下:

要求實現如下功能;

1.初始登錄時候自動賦值界面上的一些值。

2.選擇幣別后,輸入賬號只能選擇該幣別的賬號。

3選擇往來單位后grid自動填充該客戶該幣別的應收記錄。

4審核的時候,自動更新結算賬戶余額,並更改應收清單記錄。

5反審核的時候回寫到審核前狀態,結算賬戶和應收清單記錄都要。

6.可以看到該客戶的歷史收款記錄。

客戶端代碼:

 /// <summary>
    /// 收款單基類
    /// </summary>
    class SCMShoufuKuanBaseBill : Jeez.MulEntityInput.BaseBillUI
    {
        //控件聲明定義
        private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txWLDW;//往來單位
        private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txOrg;//組織機構
        private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txDept;//部門
        private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txEmployee;//業務員


        private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txZH;//結算賬戶

        private Jeez.Control.JeezUltraTextBox.JeezUltraTextBox txBibie;//幣別
        private Jeez.Control.JeezNumberTextBox.JeezNumberTextBox txRat;//匯率  

        private Jeez.Control.JeezCurrencyTextBox.JeezCurrencyTextBox txYBMoney;//原幣金額

        private Jeez.Control.JeezUltraCalendarCombo.JeezUltraCalendarCombo dtDate;//日期

 

        private Jeez.Control.JeezGrid.JeezGrid gridZY;//明細grid
        private Jeez.Control.JeezUltraTabControl.JeezUltraTabControl pagecontrol1 = null;//下方頁框控件 
        private Jeez.Control.JeezGrid.JeezGrid gridBaojiaHistory;//歷史 

        private bool isLoading = true;
        //定義幾個初始化常見的值
        private static int BibieID = 0;//默認幣別ID
        private static int WLDWID = 0;//默認往來單位ID
        private bool isSelect = true;//是否選單


        /// <summary>
        /// 加載控件,以及控件相關事件定義
        /// </summary>
        /// <returns></returns>
        public override bool LoadUI()
        {
            bool b = base.LoadUI();
            if (b)
            {
                txWLDW = base.GetControlByName("JeezTextBox5") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
                txOrg = base.GetControlByName("JeezTextBox2") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
                txDept = base.GetControlByName("JeezTextBox3") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
                txEmployee = base.GetControlByName("JeezTextBox4") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
                txBibie = base.GetControlByName("JeezTextBox6") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;
                txZH = base.GetControlByName("JeezTextBox7") as Jeez.Control.JeezUltraTextBox.JeezUltraTextBox;

                txRat = base.GetControlByName("JeezNumberTextBox1") as Jeez.Control.JeezNumberTextBox.JeezNumberTextBox;
                txYBMoney = base.GetControlByName("JeezCurrencyTextBox1") as Jeez.Control.JeezCurrencyTextBox.JeezCurrencyTextBox;
                dtDate = base.GetControlByName("JeezCalendarCombo1") as Jeez.Control.JeezUltraCalendarCombo.JeezUltraCalendarCombo;
                pagecontrol1 = base.GetControlByName("JeezTabControl1") as Jeez.Control.JeezUltraTabControl.JeezUltraTabControl;
                gridZY = base.GetControlByName("JeezGrid1") as Jeez.Control.JeezGrid.JeezGrid;
                gridBaojiaHistory = base.GetControlByName("gridRefHistory") as Jeez.Control.JeezGrid.JeezGrid;

                pagecontrol1.SelectedTabChanged += new Infragistics.Win.UltraWinTabControl.SelectedTabChangedEventHandler(pagecontrol1_SelectedTabChanged);

                txBibie.ValueChanged +=new EventHandler(txBibie_ValueChanged);
                txWLDW.ValueChanged += new EventHandler(txWLDW_ValueChanged);
                gridZY.AfterCellUpdate += new CellEventHandler(gridZY_AfterCellUpdate);
               
            }
            return b;
        }

 
        /// <summary>
        /// 更改Grid的構建方式
        /// </summary>
        /// <param name="CTL"></param>
        /// <param name="EOL"></param>
        /// <param name="IsDeleteChildEntity"></param>
        protected override void FillGridDataToEntity(Jeez.ControlManager.ControlHelper CTL, EntityObjectList EOL, bool IsDeleteChildEntity)
        {
            base.FillGridDataToEntity(CTL, EOL, false);
        } 
        /// <summary>
        /// 頁框輪換點擊事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void pagecontrol1_SelectedTabChanged(object sender, Infragistics.Win.UltraWinTabControl.SelectedTabChangedEventArgs e)
        {

            if (e.Tab.Index == 1)
            {
                if (gridBaojiaHistory != null)
                {
                    if (txWLDW.Tag != null && (int)txWLDW.Tag != 0 && txBibie.Tag != null && (int)txBibie.Tag != 0)
                    {


                        DataTable dt = new DataTable();
                        DataSet ds = new DataSet();

                        Jeez.Core.NativeQueryCommand cmd;
                        Jeez.Core.INativeQuery quary = Jeez.Login.RemoteCall.GetNativeQuery();
                        cmd = new NativeQueryCommand();


                         
                            cmd.CommandText = string.Format(@"select a.BillNO as  單號,a.Date as 日期, e.Number as 客戶編號,e.Name as 客戶,f.Name as 幣別,
a.Rate as 匯率, a.Amount as 金額 
from jzShoukuanBill a  
                     left join jzRefUnit e on e.ID=a.RefUnitID
                     left join jzCurrency f on f.ID=a.CurrencyID
where   e.ID={0} and f.ID={1}  ", (int)txWLDW.Tag, (int)txBibie.Tag);
                       
                        try
                        {

                            dt = quary.GetDataTable(this.objContext.ConnectionString, cmd);

                            ds = new System.Data.DataSet();
                            ds.Tables.Add(dt);
                            gridBaojiaHistory.DataSource = ds.Tables[0];
                            gridBaojiaHistory.FixCol = 3;//設置表格固定列為第三列
                        }
                        catch (Exception ex)
                        {
                            Jeez.Common.UI.MsgBox.Show(ex.Message.ToString());
                        }


                    }
                }
            }
        }
        /// <summary>
        /// 設置菜單控件狀態
        /// </summary>
        public override void SetMenuStatus()
        {
            base.SetMenuStatus();
            
        }
        /// <summary>
        /// 保存前檢查事件
        /// </summary>
        /// <returns></returns>
        protected override bool BeforeSaveCheck()
        {
            bool b = base.BeforeSaveCheck();
            if (b)
            {

                CalAmount();

            }
            return b;
        }
        /// <summary>
        /// 新增事件
        /// </summary>
        protected override void AddNew()
        {
            base.AddNew();
            if (this.entityobject == null)
            {
                InitByDefine();
            }
        }

        void txWLDW_ValueChanged(object sender, EventArgs e)
        {
            if (!isLoading)
                return;
            //下推過程中以下推傳過來的數據為主,不然會被沖掉
            if (UserData != null)
                return;
            if (!isSelect)
                return;
            FillYingshouYingfu();
        }
        
        /// <summary>
        /// 幣別變化事件,要自動算出該幣別該單據的匯率,是固定匯率還是浮動匯率,還要調整子表的物料單價
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void txBibie_ValueChanged(object sender, EventArgs e)
        {
            if (!isLoading)
                return;
            //下推過程中以下推傳過來的數據為主,不然會被沖掉
            if (UserData != null)
                return;
            if (!isSelect)
                return;
            CalRat();
            if(txBibie.Tag!=null)
            txZH.AutoDropdownListFilter=string.Format(@"CurrencyID={0}",(int)txBibie.Tag);
            FillYingshouYingfu();
            


        }

        void FillYingshouYingfu()
        {
            if (txWLDW.Tag != null && txBibie.Tag != null)
            {
                EntityObjectList eol = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.Yingshou).Find("RefUnitID={0} and WAmount!=0 and CurrencyID={1}", txWLDW.Tag, txBibie.Tag);
                this.gridZY.DeleteAllRow();
                foreach (EntityObject eo in eol)
                {
                    this.gridZY.InsertRow(this.gridZY.Rows.Count);
                    Infragistics.Win.UltraWinGrid.UltraGridRow row = this.gridZY.Rows[this.gridZY.Rows.Count - 1];
                    row.Cells["YingshouID"].Tag = eo.PrimaryKeyValue;
                    row.Cells["YingshouID"].Value = eo.ToString();

                    row.Cells["BAmount"].Value = eo.GetProperty("WAmount");
                }
            }
        }
        /// <summary>
        /// 計算匯率
        /// </summary>
        void CalRat()
        {
            if ((int)txBibie.Tag != 0 && (int)txBibie.PropertyPage.Value.IndexOf("RMB") < 0 && txBibie.PropertyPage.Value.ToString() != "")
            { //如果不是人民幣
                if (dtDate.PropertyPage.Datetime == Jeez.Core.Toolkit.GetDateTimeDefaultValue())
                {
                    Jeez.Common.UI.MsgBox.Show("請先輸入單據日期,因為單據日期決定了幣別匯率!");
                    return;
                }
                if (txOrg.Tag == null)
                {
                    Jeez.Common.UI.MsgBox.Show("請先輸入組織機構,因為匯率不同組織機構可能都有差異!");
                    return;
                }
                EntityObjectFactory eofBibi = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.Currency);
                EntityObject eoBibie = eofBibi.FindObject((int)txBibie.Tag);
                if (eoBibie != null)
                {
                    bool IsFixRat = (bool)eoBibie.GetProperty("IsFixRate");
                    if (IsFixRat)
                    {
                        //如果是固定匯率
                        EntityObjectList eolFixRat = eoBibie.GetChildEntityObjects(EntityIDEnum.FixedRate);
                        EntityObject eoFixRat = eolFixRat.FindFirst("Year={0} and Period={1} and OrganizationID={2}", (int)dtDate.PropertyPage.Datetime.Year, (int)dtDate.PropertyPage.Datetime.Month, (int)txOrg.Tag);
                        if (eoFixRat != null)
                        {
                            txRat.PropertyPage.Value = (decimal)eoFixRat.GetProperty("AccountBookRate");
                        }
                        else
                        {
                            Jeez.Common.UI.MsgBox.Show("請先在系統維護,基礎資料,幣別中輸入該幣別該期間的固定匯率");
                            return;
                        }
                    }
                    else
                    {
                        //如果是浮動匯率
                        EntityObjectList eolFixRat = eoBibie.GetChildEntityObjects(EntityIDEnum.FloatingRate);
                        EntityObject eoFixRat = eolFixRat.FindFirst("OrganizationID={0} and ", (int)txOrg.Tag, dtDate.PropertyPage.Datetime);
                        if (eoFixRat != null)
                        {
                            txRat.PropertyPage.Value = (decimal)eoFixRat.GetProperty("FloatRate");
                        }
                        else
                        {
                            Jeez.Common.UI.MsgBox.Show("請先在系統維護,基礎資料,幣別中輸入該幣別該期間的浮動匯率");
                            return;
                        }
                    }
                }
            }
            else
            {
                txRat.PropertyPage.Value = 1.0m;
            }

        }
        /// <summary>
        /// 單元格值變化事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void gridZY_AfterCellUpdate(object sender, Infragistics.Win.UltraWinGrid.CellEventArgs e)
        {
            if (!isLoading)
                return;
            //下推過程中以下推傳過來的數據為主,不然會被沖掉
            if (UserData != null)
                return;
            if (!isSelect)
                return;

            if (e.Cell.Column.Key.ToLower() == "wamount")
            {
                e.Cell.Row.Cells["BAmount"].Value = e.Cell.Value;
            }
            if (e.Cell.Column.Key.ToLower() == "bamount")
            {
                //計算匯總將子表的金額合計匯總到父表
                CalAmount();
            }
        }

        /// <summary>
        /// 自動計算價格匯總
        /// </summary>
        protected virtual void CalAmount()
        {

            decimal amount = 0;
            if (txYBMoney != null)
            {
                foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in gridZY.Rows)
                {
                    amount += Convert.ToDecimal(BaseFunc.IsNull(row.Cells["BAmount"].Value, 0));

                }

                txYBMoney.PropertyPage.Value = amount;

             


            }

        }

 

       
        /// <summary>
        /// 彈出窗體事件,
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="EntityID"></param>
        /// <param name="RunTimeFilter"></param>
        protected override void ShowUISelectedForm(object sender, int EntityID, ArrayList RunTimeFilter)
        {
            //如果是往來單位表
            if (EntityID == EntityIDEnum.RefUnit)
            {
                ArrayList ar = new ArrayList();
                //過濾只有客戶的往來單位
                Jeez.Runtime.Base.General.RunTimefilterDefine fd;

                fd = new Jeez.Runtime.Base.General.RunTimefilterDefine("{jzRefUnit.IsCustomer}", 0, 0, Jeez.FormProperty.FilterDefineCompare.Equals, Jeez.FormProperty.FilterDefineLogic.NONE, 1);

                ar.Add(fd);

                base.ShowUISelectedForm(sender, EntityID, ar);


            }   //如果是賬戶
            else if (EntityID == EntityIDEnum.BankAcount)
            {
                ArrayList ar = new ArrayList();
                //過濾只有客戶的往來單位
                Jeez.Runtime.Base.General.RunTimefilterDefine fd;

                fd = new Jeez.Runtime.Base.General.RunTimefilterDefine("{jzBankAcount.CurrencyID}", 0, 0, Jeez.FormProperty.FilterDefineCompare.Equals, Jeez.FormProperty.FilterDefineLogic.NONE, (int)txBibie.Tag);

                ar.Add(fd);

                base.ShowUISelectedForm(sender, EntityID, ar);


            }
            else if (EntityID == EntityIDEnum.Yingshou)
            {
                ArrayList ar = new ArrayList();
                //過濾只有客戶的往來單位
                Jeez.Runtime.Base.General.RunTimefilterDefine fd;

                fd = new Jeez.Runtime.Base.General.RunTimefilterDefine("{jzYingshou.CurrencyID}", 0, 0, Jeez.FormProperty.FilterDefineCompare.Equals, Jeez.FormProperty.FilterDefineLogic.AND, (int)txBibie.Tag);

                ar.Add(fd);

                fd = new Jeez.Runtime.Base.General.RunTimefilterDefine("{jzYingshou.RefUnitID}", 0, 0, Jeez.FormProperty.FilterDefineCompare.Equals, Jeez.FormProperty.FilterDefineLogic.NONE, (int)txWLDW.Tag);

                ar.Add(fd);

                base.ShowUISelectedForm(sender, EntityID, ar);


            } 
            else
            {
                base.ShowUISelectedForm(sender, EntityID, RunTimeFilter);
            }
        }

        protected override void BillUI_Load(object sender, EventArgs e)
        {

            base.BillUI_Load(sender, e);
            if (this.entityobject == null)
            {
                //公共的初始化值
                InitByDefine();

            }
            

        }
        /// <summary>
        /// 將實體數據banding到控件上的事件
        /// </summary>
        protected override void LoadEntityDataToControl()
        {
            isLoading = false;
            base.LoadEntityDataToControl();
            isLoading = true;
            
        }

        protected override void SetInvokeBusiLogicName(out string ServerDllName, out string ServerClassName)
        {
            ServerDllName = "FolyerERPServer.dll";
            ServerClassName = "FolyerERPServer.FolyerERPServer_SCM.ShoukuanServer";
        }

        /// <summary>
        /// 自定義初始化控件上的一些值
        /// </summary> 
        void InitByDefine()
        {
            //實現往來單位只能選擇客戶數據
            txWLDW.AutoDropdownListFilter = string.Format("IsCustomer=1");
            //實現自動將當前登錄用戶所對應的職員信息的部門,組織機構,本身職員信息填充到界面上的三個控件減少輸入
            EntityObjectFactory eofEmployee = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.Employee);
            EntityObject eoEmp = eofEmployee.FindFirst("SysUserID={0}", Jeez.Login.Environment.UserID);
            if (eoEmp != null && txEmployee != null)
            {

                txEmployee.Tag = eoEmp.PrimaryKeyValue;
                txEmployee.VALUE = eoEmp.ToString();

                txOrg.Tag = eoEmp.GetRelatedObject("OrganizationID").PrimaryKeyValue;
                txOrg.VALUE = eoEmp.GetRelatedObject("OrganizationID").ToString();


                txDept.Tag = eoEmp.GetRelatedObject("DepartMentID").PrimaryKeyValue;
                txDept.VALUE = eoEmp.GetRelatedObject("DepartMentID").ToString();
            }
            //默認登錄的時候幣別為系統默認的幣別
            ////默認登錄的時候往來單位ID獲取
            EntityObjectFactory eofInnit = EntityObjectFactory.GetInstance(objContext, EntityIDEnum.SystemInit);
            EntityObject eoInit = eofInnit.FindFirst("ID>0");
            EntityObject eoBibie = eoInit.GetRelatedObject("CurrencyID");
            if (eoBibie != null)
            {
                txBibie.Tag = eoBibie.PrimaryKeyValue;
                txBibie.VALUE = eoBibie.ToString();
                txRat.PropertyPage.Value = 1.0m;
                BibieID = (int)eoBibie.PrimaryKeyValue;
            }

            EntityObject eoWLDW = eoInit.GetRelatedObject("RefUnitID");


            if (eoWLDW != null)
            {
                txWLDW.Tag = eoWLDW.PrimaryKeyValue;
                txWLDW.VALUE = eoWLDW.ToString();

                WLDWID = (int)eoWLDW.PrimaryKeyValue;
            }

            EntityObject eoZH = eoInit.GetRelatedObject("BankAcountID");


            if (eoZH != null)
            {
                txZH.Tag = eoZH.PrimaryKeyValue;
                txZH.VALUE = eoZH.ToString();

                
            }

            this.gridZY.RowCount = 5;//默認設置5行
        }


        /// <summary>
        /// 菜單事件的擴展
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <param name="Tool"></param>
        public override void ResponseMenuToolClickEvent(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e, object Tool)
        {
            Jeez.FormProperty.JeezTool tool = Tool as Jeez.FormProperty.JeezTool;
            if (tool == null) return;
            this.Cursor = Jeez.Common.UI.Waitcursor.WaitCursor;
            switch (tool.Name)
            {
                 
                default:
                    break;
            }
            base.ResponseMenuToolClickEvent(sender, e, Tool);
            this.Cursor = Jeez.Common.UI.Waitcursor.Default;
        }
 

    }
View Code

  服務端代碼:

/// <summary>
    /// 收款服務端類
    /// </summary>
    class ShoukuanServer : Jeez.Runtime.BusiLogic.RuntimeBusiLogic
    {
        protected override bool CheckValidate(EntityObject eo, bool IsCheck, ref string strMessage)
        {
            bool b = base.CheckValidate(eo, IsCheck, ref strMessage);
            if (b)
            {
                //return ERPServerFunc.Shoukuan(Context, eo, EntityIDEnum.ShoukuanDetail, IsCheck, ref strMessage);
                try
                {
                    if (IsCheck)
                    {
                        //更新即時賬戶余額
                        EntityObject eoAccount = eo.GetRelatedObject("BankAcountID");
                        if (eoAccount != null)
                        {
                            decimal oldMoney = (decimal)eoAccount.GetProperty("Amount");
                            eoAccount.SetProperty("Amount", oldMoney + (decimal)eo.GetProperty("Amount"));
                        }

                        //更新應收清單已收金額未收金額
                        foreach (EntityObject eod in eo.GetChildEntityObjects(EntityIDEnum.ShoukuanDetail))
                        {
                            EntityObject eoAp = eod.GetRelatedObject("YingshouID");
                            if (eoAp != null)
                            {
                                if ((decimal)eod.GetProperty("BAmount") > 0)
                                {
                                    if ((decimal)eoAp.GetProperty("WAmount") < (decimal)eod.GetProperty("BAmount"))
                                    {
                                        strMessage = string.Format("{0}的收款余額小於本次收款金額", eoAp.ToString());
                                        return false;
                                    }
                                }
                                else
                                {
                                    if ((decimal)eoAp.GetProperty("WAmount") > (decimal)eod.GetProperty("BAmount"))
                                    {
                                        strMessage = string.Format("{0}的收款余額小於本次收款金額", eoAp.ToString());
                                        return false;
                                    }
                                }
                                eoAp.SetProperty("YAmount", (decimal)eoAp.GetProperty("YAmount") + (decimal)eod.GetProperty("BAmount"));
                                eoAp.SetProperty("WAmount", (decimal)eoAp.GetProperty("WAmount") - (decimal)eod.GetProperty("BAmount"));
                            }
                        }
                        Context.SaveChanges();
                    }
                    else
                    {   //反審核
                        //更新即時賬戶余額
                        EntityObject eoAccount = eo.GetRelatedObject("BankAcountID");
                        if (eoAccount != null)
                        {
                            decimal oldMoney = (decimal)eoAccount.GetProperty("Amount");
                            if (oldMoney < (decimal)eo.GetProperty("Amount"))
                            {
                                strMessage = "賬戶余額不足,不足以完成此次反審核";
                                return false;
                            }
                            eoAccount.SetProperty("Amount", oldMoney - (decimal)eo.GetProperty("Amount"));
                        }

                        //更新應收清單已收金額未收金額
                        foreach (EntityObject eod in eo.GetChildEntityObjects(EntityIDEnum.ShoukuanDetail))
                        {
                            EntityObject eoAp = eod.GetRelatedObject("YingshouID");
                            if (eoAp != null)
                            {


                                eoAp.SetProperty("YAmount", (decimal)eoAp.GetProperty("YAmount") - (decimal)eod.GetProperty("BAmount"));
                                eoAp.SetProperty("WAmount", (decimal)eoAp.GetProperty("WAmount") + (decimal)eod.GetProperty("BAmount"));
                            }
                        }
                        Context.SaveChanges();
                    }
                }
                catch (Exception ex)
                {
                    strMessage = ex.Message.ToString();
                    return false;

                }
                return true;
            }
            return b;
        }
    }
View Code

 

極致平台開發十大特點:

1. 一個數據庫下可以同時進行N套業務系統開發,開發出來的產品可以根據您客戶的需要按模塊界面組發布,客戶想要啥模塊就可以給啥模塊。而且一個數據庫下開發所有功能,當客戶需要從你的人力資源增加客戶關系管理模塊的時候,你只要做個升級包就可以了。解決企業多個業務系統信息孤島問題。
2. 智能升級功能,當客戶從A模塊增加B模塊的時候,您只需要做一個升級包即可,給客戶升級后,客戶原來錄入的數據不會有影響,而且所有客戶端都是智能感應智能升級,大大節省您的部署成本。
3. 工作流套打報表均可以運行時候自定義,比如費用報銷單,您100家客戶就有一百種費用報銷的流程,套打的格式,用我們平台您只需要設計好這個費用報銷單,至於哪個客戶走什么流程,完全可以讓客戶自己去定義,而不需要像傳統開發那樣,提前在開發中設置好,100個客戶就維護100套代碼。套打也是如此。
4. 支持數據授權,當您開發多組織架構的系統的時候,我們只要業務單據引用組織機構即可,然后組織機構支持數據授權,這樣就可以不需要編寫任何一行代碼就可以做到,組織與組織之間數據彼此隔離,我想給哪個用戶看哪個組織的數據只要給這個用戶這個組織的數據權限即可。
5. 支持字段授權,對於一些表的核心字段對用戶進行屏蔽直接利用我們平台的字段授權功能即可,比如職員薪酬字段進行字段授權,讓有的用戶在看職員信息的時候,自動隱藏薪酬的數據。這也是無需編寫任何一行代碼。
6. 單據界面自動生成,我們開發的時候只要設計好實體,也就是傳統開發所說的表結構即可,還可以設置哪些字段是必錄,可見,不允許重復,在界面生成的時候,會自動生成一個界面,而且這個界面的增刪改查是無需寫一行代碼的,您只要對您特有業務邏輯編碼即可,相對傳統開發,你代碼量可以節省2/3,開發周期縮短2/3
7.一次開發同時具有單機局域互聯網三個版本,客戶想要單機就給單機想要互聯網版就給互聯網版。 

8.強大的公式引擎,讓您可以靈活設計計算類的項目,比如工資,預算。

9.包含強大的各種控件,比如文本控件支持F8調用,編碼名稱自動帶出。Grid控件支持表頭過濾,單元格融合,固定列,表格列,表格行各種公式匯總,復合表頭,表格寬度可以自己隨意調整,而且關閉后會自動記錄之前的寬度。還支持表格列隨意調整順序。

10.平台內置很多基礎功能,比如權限管理,用戶角色管理,還有實施的一些導入導出工具都能幫助客戶大大提高一個項目驗收進度。

 

官網:www.jeez.com.cn
平台介紹:www.jeez.com.cn/jbf  
平台下載地址:http://www.jeez.com.cn/upfiles/jbfsetuppro.rar

(下載即可有3個月免費試用)
聯系電話:13826519021 18988763421 QQ:180315586  420977542 (加我注明極致軟件即可)

平台銷售經理:李先生 

將互聯網時代的管理軟件做到極致!
==================================================================

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM