軟體開發(軟件開發)

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

雲端VPS虛擬主機租用

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

搜尋引擎最佳化SEO

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

服務宗旨

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

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

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

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

2016年11月28日 星期一

庫存目標6大範疇(程式開發、程式設計、軟體開發、系統開發)

      這一個月去一家經營40幾年的代工廠,委託我們協助分析他們現行 ERP系統,很多庫存數量都一直無法精確,當然這邊所謂的精確,不完全是軟體系統庫存數字的正確,或進行盤盈盤虧進行調整數字動作,而是他們想要一個方式可以進行一個針對各種產品品項設定一個好的庫存量控制,我就詢問他們如何定義跟衡量一個產品、零件、材料的庫存數字(安全庫存、現有庫存量),我發現真的很多企業主管、工廠倉庫管理人員、採購人員大多數針對庫存量的控管都是只有幾個原則,一、庫存量越低現金流動率越高。二、針對常用物品、通用零材料設定安全庫存數字。



    上述二大原則方向,一定正確無誤,但我會幾乎都會接著直接問客戶,那麼安全庫存您怎麼決定【數字 (QTY)】,我相信大多數都是說經驗法則,訂單銷售量、生產領料過程的用料量、耗損量等考慮因素,不過我幾乎都會根據實際情況、產業特性、企業流程各種因素給予調整建議,這也是很多客戶委託我們量身定做開發最具有價值的一環,絕對不是只有一個軟體使用,我們是整個進行流程討論,在討論過程我們會把相關產業的做法提出來,雙方共同腦力激蕩,因為客戶的流程與瓶頸客戶最知道,但往往發覺跟我們討論完,才發覺有許多創新變革的流程管理可以導入。 
    在這篇分享文,我要特別提出一些對於庫存管理的實施做法(針對加工業、代工廠,單純的買賣業就不需要如此做法),在一個比較複雜的生產過程中,每個產品會經過一連串的製程(或稱工序),而庫存量不是只有針對最終完成品(產品)來控管,必須在各個環節都需進行設定控管基準線,在針對各個工序間我們也必須認真看待每一道工序完成後移交到下一個工序之前的轉移、未轉移的數量,也成為半成品,這些在一個好的管理軟體系統,必須有個工序對應的物料編碼(跟產品編碼是有所區隔),而針對工序角度思考的庫存控管,我們在此可以稱為【流動庫存(Flow)】, 其他的庫存控管稱之為【常備庫存(Stock)】,另外再針對這2種性質的庫存觀念又可以再次各自分類為 【計劃庫存】、【調整庫存】、【偶發庫存】。

    這樣解釋或許大家很難懂,我整理一下表格
計劃庫存 調整庫存 偶發庫存
常備庫存 (1)
以生產目標的庫存控制、季節性的庫存量控管、定期維修措施應變等
(3)
所有品項的安全庫存、JIT看板方式中的加工品
(5)
因疏忽導致過度生產的庫存量、或按生產訂單如期製作,但訂單忽然取消,造成的庫存量增加。
流動庫存 (2)
就是所謂的【帳齡庫存】
(4)
在工序之前進行緩衝調整庫存量、運輸過程的庫存量等。
(6)
工序之間生產速度不一致、或者調度部順利,造成某個工序的半成品特別異常。

(1)計劃常備庫存:
       它是一種依據“生產目標”為目的的庫存控制觀念,非常適合用於按照標準量劃分的產品,維持其庫存水平的情況,以及我們常發生的季節性庫存也是屬於這種類型,因為有些產業受到季節性等因素影響,月生產量非常不平均的行業我相信也是非常多,而這些行業的工廠設備普遍來說,都不具備可以在高峰季節(旺季)有相對應的生產能力,所以我們必須在這些行業中,積極主動地在需求量較少的淡季,生產較多的產品進行庫存,來因應旺季的到來。
      在該庫存量的制定方式,主要是根據一整年的宏觀需求預測為基礎來進行,這個軟體系統就必須根據多年來的歷史訂單、或者市場調查進行預測分析。

(2)計劃流動庫存
        存貨帳齡(帳齡庫存)就是典型屬於這一類,這也是產品工程設計中,都必須提前準備的庫存量。

(3)調整常備庫存
        這就是我們一直常聽到的JIT看板方式中的加工數量控制、或者大家最知道的【安全庫存量】設定,它是一種用於應對需求方的緊急變動,或為吸收生產作業線因為供應方問題導致供應數量的瓶頸,主動安全防範的庫存量。

(4)調整流動庫存
      這類型就是在工序與工序間,在加工製造過程中用於緩衝調整加工品的數量、或者運輸過程中的庫存量,都歸於這個類型。
     以及我要而外一提,常常因為原物料供應商和工廠製造商因為在“批量”的不一致,例如生產時採用件數為單位,而供應商發貨包裝是採用貨板單位,在這種狀況下,產品到了裝滿1貨板就需要臨時保管;相反來看就是,購買原物料時採用貨板單位,而供應商發貨是採用件數單位,這樣同樣都需要等到填補批量差異的調整庫存。

(5)偶發常備庫存
       就是因疏忽導致過度生產的庫存量、或按生產訂單如期製作,但訂單忽然取消,造成的庫存量增加。

(6)偶發流動庫存
     工序之間生產速度不一致、或者調度部順利,造成某個工序的半成品特別異常。
     也因為調度的不順暢、先前作業完成之後,需要接續的工序作業無法繼續進行生產,也是屬於這類性庫存定義。

  而我特別整理上述這些庫存管理的範疇,在好的一個軟體管理系統(ERP、MRP、進銷存、POS系統、MES等),都應該在某個功能進行輔助,例如(1)計劃常備庫存和 (3)調整常備庫存,就是常看到的設定品項安全庫存量、根據訂單跑出生產計劃需求量,這個我建議可以參考我其他寫的文章,當然如果您有任何問題,也跟歡迎聯繫我們,任何問題我們都可以提出一些看法,也針對客戶產業流程特性進行專業的系統分析。


(其他參考文章)

MPS主生產計畫專文介紹(一)
MRPⅡ/ERP 能力需求計畫原理
庫存管理-概念與釐清
庫存管理探討-VMI
真正的庫存量形成探討
庫存管理的中樞控管法則(上)
庫存管理的中樞控管法則(下)
BOM表管理與設定﹣輔料是否需輸入BOM
何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】
ERP 產品成本管理與計算
庫存量正確性衡量法則
粗能力需求計畫(RCCP) - 專文介紹
如何利用軟體來協助企業銷售統計和分析




網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870 

公司電話:02-55991310
skype: netqna
line:netqna
微信:netqna
黃先生 Allen



2016年11月11日 星期五

繪圖程式-折線圖、區域圖 實作一(軟體設計、軟體開發、程式開發)

        這半年來一直不斷被客戶要求開發相關繪圖功能的程式,礙於現在很多程式開發人員,已經越來越多人只會資料庫的CRUD,對於繪圖程式撰寫掌握度不是很好,甚至基本觀念也沒有,所以大多數程式開發人員都是去找相關的Chart套件,也很少有人示範在 Windows 10 APP 如何開發相關繪圖程式功能(很抱歉目前Windows 10 似乎沒有提供相關繪圖控制箱可以直接使用,所以要真的自己寫繪圖功能),所以我這篇就來教導如何在 Windows Universal APP 開發一個 折線圖功能,折線圖在軟體應用上面常用於股票分析、統計分析、銷售分析、趨勢走向等圖表展現。

(折線圖)
r-data-exploration-and-visualization-line-plot-1


(區域圖)
886d1a27-3744-417b-a3e5-e9b9878e5760



折線圖原理其實就是在一個二維的空間(平面)中,利用多個 【X,Y】坐標點透過直線連結起來,所形成的趨勢圖形,通常 X 軸代表一個某種類別例如月份、年份、型別等,而Y軸代表某類別的實際值,例如業績、銷售量、收入、人數等。在折線圖中,X軸都呈現等量(距)的增加。
現在我們知道了簡單的折線圖原理後,在Windows 10 (UWP)平台開發上,是必須使用 Polyline 繪圖技術來進行開發,可以在界面直接選告 XAML 語法,例如底下Code:

<Polyline Stroke=“Blue” StrokThickness="3”Points=”5,10 20,30 25,40 100,120”/>

其中最重要的來自于 Points 屬性 ,5,10 =》代表一個點 [5,10] =>X=5,Y=10
但通常在開發繪圖功能時,都是動態繪圖產生,所以在這邊我也示範如何完全在背後使用程式開發一個折線圖功能,我在界面上我簡單的設計2個按鈕,分別作為繪製 折線圖跟區域圖,前端界面如下

image


//XAML Code
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="100"/>
            <RowDefinition Height="Auto"/>

        </Grid.RowDefinitions>
        <StackPanel  Grid.Row="0" Orientation="Horizontal">
            <Button Content="折線圖繪製" Click="DrawChart_1" Margin="12" Background="AliceBlue"></Button>
            <Button Content="區域圖繪製" Click="DrawChart_2" Margin="12" Background="Wheat"></Button>
        </StackPanel>
        <Grid x:Name="gdChartCanvas" Grid.Row="1" Height="auto" HorizontalAlignment="Center" VerticalAlignment="Center">

        </Grid>
</Grid>



在後端的程式碼,分別設計了 GetAllPoints()方法、與對應的 DrawChart_1 、DrawChart_2 事件方法

       /// <summary>
       /// 取得所有折線圖、區域圖的 Y值清單
       /// </summary>
       /// <param name="yValues">Y值清單</param>
       /// <param name="perWidth">X等距寬度</param>
       /// <param name="yStartValue">Y起始值</param>
       /// <returns></returns>
       private PointCollection GetAllPoints(List<double> yValues, double perWidth, double yStartValue)
       {
           PointCollection points = new PointCollection();
           double x = 0;

           foreach (double yVal in yValues)
           {
               double y;

               //判斷 Y 值是否小於 Y坐標起始值,因為畫布是從 100 開始
               if (yVal < yStartValue)
               {
                   y = 100;
               }
               else
               {
                   //可以套用自己的公式來設定Y值
                   //y = Math.Floor((500 - (yVal * 200) / 300));
                   y = yVal;
               }

               Point point = new Point(x, y);
               points.Add(point);
               x += perWidth;
           }

           return points;
       }


      /// <summary>
      /// 繪製折線圖
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void DrawChart_1(object sender, RoutedEventArgs e)
      {
          //清除畫布
          this.gdChartCanvas.Children.Clear();

          //Y值清單
          List<double> datas = new List<double> { 185, 130, 230, 140, 200, 60, 170, 150, 190, 150, 110, 220, 130, 190, 150 };

          //取得套用公式的Y轉變值
          PointCollection pointCollection = GetAllPoints(datas, 45, 100);

          Polyline polyline = new Polyline { Points = pointCollection, Stroke = new SolidColorBrush(Colors.Red) };
          this.gdChartCanvas.Children.Add(polyline);
      }




上述程式撰寫完畢後,就可以直接點選【折線圖繪製】按鈕,畫面馬上呈現折線圖,如下執行結果

image
image







網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen






2016年11月6日 星期日

Windows 10 UWP 存取 JSON 格式 - 程式實作講解(軟體開發、客製化軟體、程式設計、程式開發)

      在我們開發各種專案時,一定多少都會需要存取各種跨平台傳輸的資料,目前最普遍的傳輸格式為 XML 與 JSON , 而今天我想要深入講解在 Windows 10 Universal APP (UWP)平台下,如何讀取跟儲存 JSON 格式資料。

      images


    JSON 的全名為 Java Script Object Notation , 它是一種輕量級的資料傳輸交換格式語言,特點是容易閱讀、依字串為基礎,格式都是經過壓縮地所以在網路傳輸過程,佔用的頻寬極小,因此被廣泛地應用在跨平台、跨程式語言。
JSON 的格式在宣告一個類別/物件,是用 大括號 { };宣告一個陣列使用 中括號 [ ] ;而在大括號裡面,是使用 名稱 :值 ,下圖是官方的範例圖解釋
1356331778-696014507


例如 我在此 有個 員工類別 ,分別屬性有員工編號、姓名、職位、學歷,則對應的 JSON 格式為 
(JSON Code)
var empJsonObj = { “員工編號”:“emp001”, “姓名”: “台灣李奧納多,”“職位”: “技術總監”,"年齡”:33 } ;

接下來,就是要開始講解如何在 Windows 10 Universal APP (UWP)平台,存取 JSON 格式的支援與程式開發技巧。
在 Windows 10 UWP 平台,主要有 2 種技巧來存取 JSON 格式,第一種是使用 DataContractJsonSerializer (MSDN 介紹),透過 DataContractJsonSerializer 來對 JSON 數據進行序列化與反系列化動作 ;而第二種是使用 JsonObject 類別來自行定義 JSON 物件。這兩種方式我都會在這篇完整介紹。


1.透過 DataContractJsonSerializer 對 JSON 資料進行序列化與反序列化
      使用 DataContractJsonSerializer 類別來對 JSON 數據進行序列化與反序列化,這是最簡單的方式,所謂序列化過程就是把 實體類別物件 轉成 JSON 格式化的字串,反之 反序列化 過程,就是把 JSON 物件字串({ 名稱:值,名稱1:值1….}) 轉換成對應的 .NET 類別。

下圖,是實際程式範例
image


image



2.透過使用 JsonObject 類別來自行定義 JSON 物件
這個就讓我直接用實際程式碼來講解….
首先我先新增2個類別 ,分別為 員工類別 (Employee)和研發群組類別(RDGroup),在此我假設一個員工可以同時歸屬多於于一個研發群組以上。

底下為 員工類別程式碼:

   /// <summary>
   /// 員工類別
   /// </summary>
   public class Employee
   {
       private const string idKey = "id";
       private const string nameKey = "name";
       private const string rdKey = "rd";
       private const string ageKey = "age";
       private const string enableKey = "enable";

       public Employee()
       {
           Id = "";
           Name = "";
           RDGroups = new ObservableCollection<RDGroup>();
       }

       public Employee(string jsonString) : this()
       {
           JsonObject jsonObject = JsonObject.Parse(jsonString);
           Id = jsonObject.GetNamedString(idKey, "");
           Name = jsonObject.GetNamedString(nameKey, "");
           Age = jsonObject.GetNamedNumber(ageKey, 0);
           Enable = jsonObject.GetNamedBoolean(enableKey, false);

           foreach (IJsonValue jsonValue in jsonObject.GetNamedArray(rdKey, new JsonArray()))
           {
               if (jsonValue.ValueType == JsonValueType.Object)
               {
                   RDGroups.Add(new RDGroup(jsonValue.GetObject()));
               }
           }
       }
       public string Stringify()
       {
           JsonArray jsonArray = new JsonArray();
           foreach (RDGroup group in RDGroups)
           {
               jsonArray.Add(group.ToJsonObject());
           }

           JsonObject jsonObject = new JsonObject();
           jsonObject[idKey] = JsonValue.CreateStringValue(Id);
           jsonObject[nameKey] = JsonValue.CreateStringValue(Name);
           jsonObject[rdKey] = jsonArray;
           jsonObject[ageKey] = JsonValue.CreateNumberValue(Age);
           jsonObject[enableKey] = JsonValue.CreateBooleanValue(Enable);

           return jsonObject.Stringify();
       }

       public string Id { get; set; }
       public string Name { get; set; }
       public ObservableCollection<RDGroup> RDGroups { get; set; }
       public double Age { get; set; }
       public bool Enable { get; set; }

   }

底下為 研發群組類別(RDGroup)程式碼:

  /// <summary>
  /// 研發群組 類別,一個員工可以歸屬多個研發群組
  /// </summary>
  public class RDGroup
  {
      private const string idKey = "id";
      private const string rdKey = "rd";
      private const string nameKey = "name";

      public RDGroup()
      {
          Id = "";
          Name = "";
      }

      public RDGroup(JsonObject jsonObject)
      {
          JsonObject schoolObject = jsonObject.GetNamedObject(rdKey, null);
          if (schoolObject != null)
          {
              Id = schoolObject.GetNamedString(idKey, "");
              Name = schoolObject.GetNamedString(nameKey, "");
          }
      }

      public JsonObject ToJsonObject()
      {
          JsonObject schoolObject = new JsonObject();
          schoolObject.SetNamedValue(idKey, JsonValue.CreateStringValue(Id));
          schoolObject.SetNamedValue(nameKey, JsonValue.CreateStringValue(Name));

          JsonObject jsonObject = new JsonObject();
          jsonObject.SetNamedValue(rdKey, schoolObject);
          return jsonObject;
      }

      public string Id { get; set; }
      public string Name { get; set; }
  }



再來我設計一個前端UI界面,作為讀取與寫入 JSON 的案例實作

前端界面
image



在執行存檔時,我們將新增一個 Employee 類別,並透過 JsonObject 轉成(序列化)為 JSON 字串,儲存在設定檔。
image

而在【讀取資料】時,是透過 JsonObject 進行反序列化,將 Json String 轉回成 .Net 的 Employee 類別(Class)
image



程式執行結果畫面
存檔
image


讀取資料
image






網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen





2016年11月2日 星期三

工業4.0 的好影片介紹

        最近跟同業、客戶、各種研討會,大家除了物聯網、大數據,還會談另外一個名詞,叫做工業 4.0,剛好看到一個天下雜誌非常好的影片介紹,在此轉介分享,台灣的驅動新型力量..






網智數位-軟體開發(軟件開發) 
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2016年11月1日 星期二

機電行業-軟體解決方案(紅外線、局部放電、點料表)

        今年我公司針對機電行業領域,開發出一個針對紅外線、局部放電檢測的測試報告,轉為一個獨立的專案管理報告,該管理軟體可以協助將客戶歷年來的紅外線、局部放電的報告資料,如拍攝位置、拍攝盤名、檢測人員、天氣狀況、環境溫度、濕度、相關電流(R、S、T、N)、額定電流、檢測照片、可見光圖片等欄位作有效資料管理。

image

         並且針對每個檢測報告的的【判定結果】也會根據溫度、電流等條件進行結果的系統判定,可以大幅減少人工判定作業的誤差與錯誤,如下圖

image

           在每個報告項目我們都可以指定報告是否有異常原因、異常項目(後續我們的管理軟體,都可以針對所有異常原因、異常項目)進行分析統計趨勢報表,作為管理層級人員的追蹤檢討事項、以及執行面的調整。

image

管理軟體部分統計圖表

image

image

image

image

image


以上所有功能皆可匯出 Excel 檔作為報表、提供給客戶,提升機電產業的管理績效,以往我們的客戶在還沒有使用我們的管理軟體時,每次產生一個報告都需要人工在 Excel、Word作業,行政助理到處複製貼上,初步估計人工花費至少超過10天,現在使用我們的軟體,只需要一個按鈕就可以馬上產出給客戶一個完整的報告),而且案子一多根本無法有效作管理,例如想知道目前有設備過熱的地點有哪些、散熱發生的又有哪些;所以使用我們的管理軟體後,可以有效的跟客戶呈現一個即時的報告,作為提升機電產業的競爭性,目前已經有多家新竹大廠導入我們的軟體,如果您有這個需求,可以聯繫我們,我們可以安排時間到現場Demo我們的系統。




網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870 

公司電話:02-55991310
skype: netqna
line:netqna
微信:netqna
黃先生 Allen