發表文章

目前顯示的是有「電子發票」標籤的文章

財政部 Turnkey 3.0.1 軟體更新

圖片
  Turnkey 3.0.1 於 5/10 發布了更新,要如何進行更新呢? 請先到財政務網頁下載更新檔,該檔案是個zip檔案, 這裡下載 。 要注意的是,這不是完整的程式,只是更新的部份檔案,所以要使用下面操作。 一、下載更新zip檔案 (EINVPatch_3.0.1.zip) 二、關閉Turnkey  三、在 Tunrkey 安裝路徑自行建立EINVUPGRADE 資料夾(原本沒有) 四、複製 EINVPatch_3.0.1.zip 到 EINVUPGRADE 資料夾 五、重新執行 Turnkey,程式就會發現更新檔案 六、按『確定』進行更新 七、更新完後重新啟動 Turnkey 即可

財政部 Turnkey 3.0 下載與安裝(基礎)

圖片
2023-05-01 財政部發佈了 Turnkey 3.0 版本 但是很不幸的是,這個版本的安裝在官網上都沒有很清楚的說明,因此為了能夠交接,所以在這裡做了說明。 作業環境: Windows X64 一部 MS SQL Server 2016 一部 需求檔案: Turnkey3.0.zip OpenJDK11U-jdk_x64_windows_hotspot_11.0.19_7.zip

財政部電子發票平台 Turnkey 接收檔案檢測程式(小工具)

圖片
Turnkey 是財政部電子發票平台的一套傳送工具 說真的,這套工具還蠻陽春的,對於有獨立伺服器的公司來說,不是很好用。 首先,它必須在使用者登入的桌面中執行,無法作為服務使用 其次,它執行排程時,背後一堆開啟的視窗不能關掉 最後,處理狀況的查詢,只能在該機器上直接查詢,無法透過遠端查詢(這個真的麻煩,尤其伺服器不能隨便把帳號密碼給使用者) 這次會開發這個工具的原因在於, 財務單位她們有自己的系統會產生傳給Turnkey的XML檔案,並直接丟到Turnkey處理的資料夾下 有時後,財務的系統沒有正常產生,導致電子發票平台一直沒收到資料,搞到去懷疑Turnkey主機有問題。 因此,特別開發這樣的程式來檢測Turnkey處理資料夾下是否有檔案被丟進來,並且整理後發郵件告知使用者。 先看看Turnkey處理資料檔案的類型與結構 相對於Turnkey處理黨案的預設路徑在 C:\Program Files\EINVTurnkey\UpCast 該路徑下的資料夾結構會有對應的名稱 下面還有分類資料夾: 每個分類資料夾下還會有3個資料夾,分別是SRC、BAK、ERR 通常新進來的檔案都會放在SRC裏面,經由Turnkeyt處理以後會從SRC移除並分類放在BAK和ERR裏面 所以這支程式就是專門在偵測SRC的檔案出現,並收集檔案名稱並以郵件回報給相關使用者 程式名稱:TKReceiveDetect.exe ( 下載 ) 環境需求:dotNetFrameWork 4.5 它的偵測方式不是用定時檢查,而是使用Windows的是件觸發,因為定時檢查的間隔可能會造成檢查遺失,就是當檔案進入SRC資料夾後,直到Turnkey排程觸發取走檔案時,如果定時檢查錯過這段時間這時就會檢查不到,而若把定時檢查設定太短,則會削弱大量系統效能(檢查這些資料夾必須使用遞迴處理),而且檢查時,若檔案此時被Turnkey處理掉,也是會造成偵測漏洞。 使用事件觸發通知好處是非常即時,而且事件被觸發時就會告知目前檔案狀況。因此不會漏掉要接收的資訊。

電子發票期別顯示

電子發票期別顯示方式如下 yyy年m1-m2月 例如: 107年05-06月 一般資料來源會是當月的月份, 例如2018年6月15日開立發票會由系統產出 yyyymm 當作期別: 10706 產生顯示期別方式(標準): string period = "10706" ; string monthText; int month = int.Parse(period .Substring(3, 2)); if (mnth%2 == 0) {      //is even     monthText = (mnth - 1).ToString( "00" ) + "-" + mnth.ToString( "00" ); } else {      //is odd     monthText = mnth.ToString( "00" ) + "-" + (mnth + 1).ToString( "00" ); } //產生顯示表達 string InvoicePeriod = period.Substring(0, 3) + "年" + monthText + "月" ; 精簡化(不易閱讀): string period = "10706" ; int month = int.Parse(period .Substring(3, 2)); string InvoicePeriod = period.Substring(0, 3) + "年" + ((mnth % 2 == 0) ? (mnth - 1).ToString( "00" ) + "-" + mnth.ToString( "00" ) : mnth.ToString( "00" ) + "-" + (mnth + 1).ToString( "00" )) + "月&q

電子發票 QR碼產生用程式碼 C# .NET

來源:財政部 註解:me 使用時注意 namespace using System; using System.IO; using System.Text; using System.Security.Cryptography; namespace tw.gov.nat.einvoice.qrutil {     class QREncrypter     {         /// <summary>         /// 將發票資訊文字加密成驗證文字         /// </summary>         /// <param name="plainText">發票資訊</param>         /// <param name="AESKey">種子密碼(QRcode)</param>         /// <returns>加密後的HEX字串</returns>         public string AESEncrypt( string plainText, string AESKey)         {             byte [] bytes = Encoding .Default.GetBytes(plainText);             ICryptoTransform transform = new RijndaelManaged             {                 KeySize = 0x80,                 Key = this.convertHexToByte(AESKey),                 BlockSize = 0x80,                 IV = Convert.FromBase64String("Dt8lyToo17X/XkXaQvihuA==")             }.CreateEncryptor();             MemoryStream stream = new MemoryStr

C# AES encrypt/decrypt and Base64 encode/decode

圖片
範例檔案: 這裡下載 純執行檔: 這裡下載 有興趣研究 AES 加解密 與 Base64 編解碼 的可以研究一下 因為用到了AES 元件,所以只適用 .NET 3.5 以上 畫面如下: 為什麼 AES 和 BASE64 寫在一起? 因為 AES 加密後的內容是 ASCII 碼,很多是無法以明文顯示的,因此會再編碼成BASE64以便傳遞或攜帶。反過來說,接收到AES的密碼通常會以BASE64編成居多,所以必須解碼後再進行AES解密環原本文。 Base64編碼: 要引用  using System; //將文字內容(明文)轉成base64文字(編碼) tbB64_2.Text = Convert.ToBase64String(Encoding.Default.GetBytes(tbB64_1.Text)); Base64解碼: 要引用  using System; //將base64編碼文字轉回明文(解碼) tbB64_1.Text = Encoding.Default.GetString(Convert.FromBase64String(tbB64_2.Text)); AES加密: 要引用  using System.Security.Cryptography; static byte[] EncryptionByAES(string plainText, byte[] key, byte[] IV) {   byte[] encrypted;   //檢查參數   if (plainText == null || plainText.Length <= 0)      throw new ArgumentNullException("沒有要加密的文字");   if (key == null || key.Length <= 0)      throw new ArgumentNullException("沒有提供金鑰");   if (IV == null || IV.Length <= 0)       throw new ArgumentNullException("沒有提供IV");   //這裡使用Ae

統一發票列印小程式

圖片
1、請注意本版留言過多, 您的留言可能不在這一頁,請到以下留言樓層看看再回應喔~  2、如果您有填寫表單,卻沒有收到我的郵件,有可能您填寫的電子郵件有錯誤,麻煩您查看一下留言是否有我給您的信息喔。因為我沒辦法直接連繫到您。 1 ~200 則,請按這裡   200+ 以上請按這裡 因為公司會在一堆系統上都有可能要印發票(真不懂要怎麼搞?) 希望可以有個小工具可以列印電子發票, 原本發票列印程式要使用條碼機專用語言(ZPL、EPL),但容易被某種機型綁定。 當然可以考慮使用ESC/POS指令的方式,但也是要印表機支援這種指令列印模式(當然多數表機都有支援),不過要列印QR碼,就有點不是那麼容易了,除了要自己編碼外還要注意中文問題。 後來我想改用Windows Printer Driver來列印,雖然不如指令式快速,但可以方便各類型程式應用,因此考慮了以下的條件: 使用C#開發、.Net 2.0平台、Console呼叫 本來想用RDLC來做,但是很不幸的,失敗了,原因就在於條碼, 國稅局訂定的Code39條碼內要放入21個字元(19+2)長度, 如果使用RDLC的話,解析度只有100DPI,密度不夠,條碼線條沾黏嚴重。 一般的條碼機至少都有200DPI得等級,這RDLC也太彆腳了吧, 網路上找盡RDLC條整解析度的方式都沒有比較好的效果。 因此,改用直接C#繪製的方式來做, 當然中間為了條碼圖像清晰度的問題花了不少心力解決。 下載點: PrintInvoice