軟體開發(軟件開發)

網智數位主要提供套裝及客製化的軟體系統解決方案,專為客戶量身訂做客製化的軟體,達成客製化、智慧化及網路化的管理功能。

室內設計、裝潢、窗簾報價估算軟體

網智數位主要提供套裝及客製化的軟體系統解決方案,針對室內設計師、木工、裝潢業產業,量身訂做客製化的軟體,達成客製化、智慧化及網路化的商用軟體。

商用軟體-客製化設計

網智數位主要提供套裝及客製化的軟體系統解決方案,專為客戶量身訂做客製化的軟體,達成客製化、智慧化及網路化的管理功能。

IOT 物聯網-系統開發

根據客戶實際狀況,結合雲端與載具進行客製化物聯網IOT導入與軟體開發

雲端VPS虛擬主機租用

我們的雲端VPS虛擬主機是採用雲端(虛擬化)技術所開發之全新雲端伺服器服務,可以選擇多種作業系統(Windows、Linux等),客戶可載入自訂的應用環境,執行自己所要提供的網路服務,我們的雲端服務可為您的網站提供最完美的解決方案。

ERP軟體客製化導入

ERP軟體客製化導入,室內設計、營造業、裝潢、木作工程、系統櫃工程、會計系統,全面提升公司管理營運效率。

搜尋引擎最佳化SEO

搜尋引擎最佳化(SEO)不僅能提高網站在搜尋結果的排名,更能帶來大量對我們產品或服務真正有需求的訪客。SEO 最棒的特質之一就是不像廣告一樣亂槍打鳥而導致用戶的反感,反而更能提升點閱率跟成交率喔。

服務宗旨

網智數位主要提供套裝及客製化的軟體系統解決方案,專為客戶量身訂做客製化的軟體,達成客製化、智慧化及網路化的管理功能。

我們的成立宗旨就是要以最猛的IT技術讓這個世界更Smart,在我們貫徹我們裡想的同時,我們希望可以把我們所開發的系統帶給台灣的中小企業,除了要推薦好的東西之外,我們也希望做點改變,所以我們的第一目標就是要使用最好用的系統再加上您寶貴的創意,不僅僅可以節省你大量的荷包,還可以有一個像樣的網站。我們可以幫你做的有

企業管理
  • 策略管理
  • 目標管理
  • 行銷管理
  • 財會管理
  • ERP導入
  • 企業流程自訂
資訊管理
  • 網站架設
  • 虛擬化/雲端架設
  • 主機代管
  • 私有雲建制與導入
軟體開發
  • UML設計
  • 版本控管
  • 企業軟體開發
  • APP開發
  • 網頁設計
資訊安全
  • 網頁弱點掃描
  • 主機弱點掃描
  • 木馬檢測
  • 資安鑑識
  • 設計網路架構
  • 資安監控
行銷
  • 關鍵字SEO
  • 社群網路行銷
  • 部落格行銷
  • FaceBook 粉絲團
其他
  • 協助企業申請Google Email
好玩工具開發

講出你的創意吧!沒有甚麼是資訊辦不到的

2015年1月15日 星期四

管理軟體商機

     昨晚參加一個各產業領域交流的聚會,認識許多新朋友,也激發我不一樣的思維,有人知道我從事資訊業,大致也會問我 APP 委外開發、Web網頁開發雲端導入等相關問題,事實上我一直思考的是,事實上資訊管理軟體長期是屬於被動需求 ,也就是通常不是一家企業會很主動的導入軟體,除非當企業遇到管理問題(例如庫存混亂、成本無法估算、人力成本等),才開始被動的想要藉由管理軟體的幫助下,來提升企業的管理便利性。











     例如我昨晚認識一個作硬碟損壞救援的公司,還是透過內部自行做的表單,來記錄客戶的報修、保固、會員資料,但因為實在太多表單,根本資料無法一致化,客戶多以後,真的才開始發現內勤服務人員,光是維護輸入這些資料就要重覆輸入,我也很誠心的建議可以根據內部真正的營運流程建置一個符合自己的管理系統,這樣企業的管理自然而然就會提高,事實上所需預算不如他們想象的高。


   
     雖然最近一直忙於客戶的專案,比較沒空寫文章,但我盡可能抽出時間的學習各種知識,不論是IT技術還是管理知識、企業流程,也思考個人與團隊的下一個發展契機,身處於快速變化的資訊產業,技術的革新以及衝擊,我要求自己與團隊在現有的技能上面,也要突破再進步,但時間的有限的狀況下,也開始思考合作聯盟,利益共享的機會,與人競爭不如一起合作,這也是我近些日子最大的改變,因為我目前無法要求自己各種專業技術、知識都可以精通,我多年來認真專研企業資訊系統與微軟.NET & SQL Server 解決方案(當然也有其他平台),因為自己深深認為選擇一個平台去專研,變成自己的工具,在透過觀察與經驗去了解各產業客戶對資訊系統的需求,真正要求團隊開發出客戶需要的功能,而不是爭論平台的優劣勢。





 

     而隨著雲端化的浪潮下以及智慧手機、平板APP的普及,開始許多朋友(客戶)會問我是否可以利用 APP協助他們,達到某些用途,例如 業務在外面可以下訂單、主管可以隨時看任何報表、網頁的購物車是否也可以開發手機版,這些都是商機,也需要各種不同專業技術的IT人共同合作,如果你有相關技能,也真的歡迎寫mail 給我 (allen@netqna.com),大家一起合作發展,合作模式都可以討論。


2014年11月15日 星期六

庫存量正確性衡量法則

      我在協助企業導入資訊管理系統時,不論小至進銷存系統、POS系統、MRP管理系統到大型的ERP企業資源管理系統,最常被問到的議題之一,就是我們公司用貴公司的開發的資訊系統後,我們公司的庫存量可以"完全信賴"於資訊系統嗎?以及存貨的成本價值正確性如何?以及大概多久需要進行人工實際盤點?這些疑問是不斷地重覆提起.....因為這些客戶期待用了花費購買的資訊系統後,可以有效控制合理以及正確的庫存量。

     






     或許我可以這樣大膽地說,一個導入進銷存、POS、MRP、ERP管理系統成功的店家或企業,一個必須衡量的指標就是系統庫存數字必須到達 95% 的正確性,(而如果是導入 MRP的一定還需包含可以透過系統自動計算所需生產計劃的工單和採購計劃的採購單),那麼各位您們有仔細思考,所謂庫存量 95%正確性如何計算呢?我導入的客戶,幾乎都這樣回答我,就是系統的庫存數量與實際倉庫的盤點數量,兩者誤差之絕對值,再除以倉庫實際數量,得出誤差率,但這絕對不是一個準確的衡量庫存量正確性的方法,所以我特別寫了這篇文章,就是想跟大家說說可以正確衡量庫存量的方式。

     比較正規的庫存量衡量目前有5種計算法,分別為以下
1.金額盤盈盤虧抵消法
2.金額絕對差異法
3.數量絕對差異法
4.數量絕對差異平均百分比法
5.計數容限法

現在我用一個表格來說明講解這5種計算方式

料號庫存試算表1



金額盤盈盤虧抵消法
這種計算方式,就是把所有物料盤點後,盤虧的金額加上盤盈的金額,正負抵消後取絕對值,接著再除以系統的帳面價值
 60,900(金額差異的絕對值) ÷ 6,106,000(系統帳面價值) = 0.010
 (1 -  ( 60,900(金額差異的絕對值) ÷ 6,106,000(系統帳面價值)) ) * 100% = 99.0026 %

金額絕對差異法
這種計算方式,是不管倉庫盤點後是盤盈或盤虧,都絕對採用盤點金額的絕對值來相加計算,接著再除以系統的帳面價值
 61,900(金額差異-絕對值) ÷ 6,106,000(系統帳面價值) = 0.010
 (1 - (61,900(金額差異-絕對值) ÷ 6,106,000(系統帳面價值)) ) * 100% =  98.986 %

數量絕對差異法
這種計算方式,是不管倉庫盤點後是盤盈或盤虧,都絕對採用盤點數量的絕對值來相加計算,接著再除以系統的帳面庫存數量
 58(數值差異) ÷ 1200(系統數量) = 0.0483
(1- (58(數值差異) ÷ 1200(系統數量)))*  100% = 95.166 %

數量絕對差異平均百分比法
這種計算方式,針對每個物料盤點後的誤差去絕對值後,再分別除以每個物料系統的庫存數量,最後再加總,並總平均
由上圖 料號庫存試算表1 數量差異(絕)/系統數量 欄位可以看到最後計算結果為 97 %

計數容限法
這也是我最推薦的法則,因為它是充分利用ABC分類法,針對每個分類設定一個可以允許的誤差率,例如這個案例,我設定A類可以接受的誤差為 0%(因為A類價值較昂貴,單價成本較高),
B類設定為 2% , C類為 5% ,但設定好符合企業或店家自己衡量的準則後,就可以針對每個物料盤點除以每個物料系統帳面的數量,得出庫存數量誤差率,再比對每項物料的分類是否高於設定的界限,
如果高於就是有誤差率,最後相加,就是庫存最終誤差率,看上圖料號庫存試算表1  計數容限法 欄位可以看到最後計算結果為 95.67 %
(何謂ABC分類法)
"A類"產品: 這類產品的價值占庫存總價值的80%,而其數量只佔庫存總產品數量的20%
"B類"產品: 這類產品的價值占庫存總價值的15%,而其數量占庫存總產品數量的30%
"C類"產品: 這類產品的價值只佔庫存總價值的5%,而其數量占庫存總產品數量的50%


以上我很仔細的介紹了,評估庫存數量的衡量 5 種計算方式,希望各位企業或店家能夠仔細從頭好好深思如何有效益的做好庫存控管,不過最後我還是要補充,這篇只是利用數學科學計算的方式去驗證庫存量正確性,
但企業如何有效減低庫存,或者提供庫存周轉率,是要針對每個企業的營運環節去思考,例如採購部門是否提早購進太多物料或太晚,生產部門部門領料入單據是否落實,造成系統帳面數量虛的,
不管如何,有效控制庫存量正確性,對企業的營運是即為關鍵,但好的軟體系統是絕對對企業有極大的效益。


(其他參考文章)
MPS主生產計畫專文介紹(一)
MRPⅡ/ERP 能力需求計畫原理
庫存管理-概念與釐清
庫存管理探討-VMI
真正的庫存量形成探討
庫存管理的中樞控管法則(上)
庫存管理的中樞控管法則(下)
庫存目標6大範疇(程式開發、程式設計、軟體開發、系統開發)
BOM表管理與設定﹣輔料是否需輸入BOM
何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】
ERP 產品成本管理與計算
庫存量正確性衡量法則
粗能力需求計畫(RCCP) - 專文介紹
如何利用軟體來協助企業銷售統計和分析
開發進銷存、ERP、PDM,物料欄位收集與建立重要性(ERP開發、軟體開發、進銷存)
ERP 各種計劃階段的差異
ERP 系統的淺談與優勢
[ ERP/MRP 系統 ] - 專案導入深入剖析






2014年11月12日 星期三

[Entity Framework] 效能深入探討(二)

     在上一篇我花了一些時間談到,當我們載入資料庫模型是屬於 1 對多 (One-To-Many)時,預設值 Entity Framework 6 是利用一個稱為 Lazy Loading 機制,也就是當需要一個資料的其他相關(關聯)資料時,EF 才會產生SQL語法去跟後端資料庫要求相關資料,而資料應用程式效能的殺手之一,就是太繁複去跟後端資料庫來回存取,為了克服 EF 預設行為的效能問題,我想來介紹一個 EF 另外一個機制術語,稱為 Eager Loading ....


 

     使用 Eager Loading 機制,主要可以在一開始讀取資料時,例如讀取 Customer Table 時,如果我們知道後續一定會讀取相關聯的資料表(類別),如案例的 CustomerCate Table、CustomerEvent Table,那麼我們就可以在第一次讀取 Customer Table 時就一次讀取所有相關的資料表,這樣後續應用程式需要相關資料時,只要在記憶體立即讀取,而不是需要用到時,才延遲跟資料庫索取相關資料,解釋那麼多,到底程式語法該如何實作呢?我們會用到一個方法(Method)為 Include ....

    PS.這次實作我完全根據 上一篇[Entity Framework] 效能深入探討(一) 繼續介紹,前端我暫時利用 Windows Form 來簡單的 Demo
,然後我會把焦點放在 Include Loading(1) 與  Include Loading(2) 的 程式語法
 

在  Include Loading(1) Button Click事件,我撰寫了一些程式碼:

  1. this.richTextBox1.Clear();
  2. this.richTextBox1.AppendText("使用 Eager Loading 機制 Include Method ! \r\n");
  3. this.richTextBox1.AppendText("------------------------------------------------------------------------- \r\n");

  4. using (CRMEF ef = new CRMEF())
  5. {
  6.      var customers = ef.Customer.Include("CustomerCate").Include("CustomerEvent");

  7.      foreach (var cust in customers)
  8.      {
  9.           this.richTextBox1.AppendText("客戶編號 : " + cust.No + " 客戶姓名 :" + cust.ENmae + "\t  類型 :" + cust.CustomerCate.Name + "\r\n");
  10.           this.richTextBox1.AppendText("--------------------------------事件記錄------------------------------------ \r\n");

  11.           foreach (var evt in cust.CustomerEvent)
  12.           {
  13.                this.richTextBox1.AppendText(evt.Desc + "\r\n");
  14.           }

  15.           this.richTextBox1.AppendText("\r\r\n");
  16.      }
  17. }

     注意上述程式碼的第 7 行我使用了2次 Include 方法,並在該方法傳遞是關聯類型的字串,透過這樣的方式,但程式第一次需要讀取 Customer 資料表時,
Entity Framewok(EF)就會自動產生的 SQL語法是把 Customer、CustomerCate、CustomerEvent 3個 Table,一次完全跟後端資料庫的索取,並記錄到記憶體(DataContext Cache),所以整個 SQL 傳輸只有 1 次,而不是上一篇介紹的 7 次哦(效能差很大,這也是一般書上很少寫的)。

底下我列出我追蹤的 SQL 語法如下
  1. SELECT
  2.     [Project1] .[C1] AS [C1],
  3.     [Project1] .[No] AS [No],
  4.     [Project1] .[CName] AS [CName],
  5.     [Project1] .[ENmae] AS [ENmae],
  6.     [Project1] .[CateCode] AS [CateCode],
  7.     [Project1] .[Code] AS [Code],
  8.     [Project1] .[Name] AS [Name],
  9.     [Project1] .[C2] AS [C2],
  10.     [Project1] .[EventID] AS [EventID],
  11.     [Project1] .[CustNo] AS [CustNo],
  12.     [Project1] .[Desc] AS [Desc],
  13.     [Project1] .[CreateDate] AS [CreateDate]
  14.      FROM ( SELECT
  15.         [Extent1] .[No] AS [No],
  16.         [Extent1] .[CName] AS [CName],
  17.         [Extent1] .[ENmae] AS [ENmae],
  18.         [Extent1] .[CateCode] AS [CateCode],
  19.         [Extent2] .[Code] AS [Code],
  20.         [Extent2] .[Name] AS [Name],
  21.         1 AS [C1],
  22.         [Extent3] .[EventID] AS [EventID],
  23.         [Extent3] .[CustNo] AS [CustNo],
  24.         [Extent3] .[Desc] AS [Desc],
  25.         [Extent3] .[CreateDate] AS [CreateDate],
  26.          CASE WHEN ([Extent3]. [EventID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2]
  27.          FROM   [dbo]. [Customer] AS [Extent1]
  28.          LEFT OUTER JOIN [dbo] .[CustomerCate] AS [Extent2] ON [Extent1] .[CateCode] = [Extent2].[Code]
  29.          LEFT OUTER JOIN [dbo] .[CustomerEvent] AS [Extent3] ON [Extent1] .[No] = [Extent3].[CustNo]
  30.      )  AS [Project1]
  31.      ORDER BY [Project1].[No] ASC, [Project1] .[Code] ASC , [Project1]. [C2] ASC


看吧看吧,是不是 EF很聰明的產生一個完全都包含的表格(Table)。


接下來,我們來看第二種 Include 語法的寫法,2種執行結果都相同。

  1. this.richTextBox1.Clear();
  2. this.richTextBox1.AppendText("使用 Eager Loading 機制 Include Method 2 ! \r\n");
  3. this.richTextBox1.AppendText("------------------------------------------------------------------------- \r\n");

  4. using (CRMEF ef = new CRMEF())
  5. {
  6.      var customers = ef.Customer.Include(t => t.CustomerCate).Include(t => t.CustomerEvent);

  7.      foreach (var cust in customers)
  8.      {
  9.           this.richTextBox1.AppendText("客戶編號 : " + cust.No + " 客戶姓名 :" + cust.ENmae + "\t  類型 :" + cust.CustomerCate.Name + "\r\n");
  10.           this.richTextBox1.AppendText("--------------------------------事件記錄------------------------------------ \r\n");

  11.           foreach (var evt in cust.CustomerEvent)
  12.           {
  13.                this.richTextBox1.AppendText(evt.Desc + "\r\n");
  14.           }

  15.           this.richTextBox1.AppendText("\r\r\n");
  16.      }
  17. }

以上介紹完 Eager Loading Inclue 的技巧,希望各位操控 EntityFramework 6 可以更加熟析在最適當的狀況下,來調整預設存取行為機制。