54-FZ個人、あなた、ユーザー名、またはDIYの原価計算の自動化から何を得ることができますか

2017年7月1日から、すべての取引を直接連邦税務局に送信するレジ(KKM)の使用がロシア連邦の領土で義務付けられています。 いわゆるオンラインボックスオフィス。 このイノベーションの導入は、すでにすべての側面から、または少なくともすべての深刻な側面から議論されています。 連邦法があまりにも深刻な側面を持たないかどうか、そしてこれがどのような創造性の範囲をもたらすか-これはカットされています。









すべてのKKMは現在、当社の取引について連邦税務局に通知し、連邦税務局は各オンラインキャッシャーの誠実さを保証するため、特別なモバイルアプリケーション( Google PlayApp Store )をリリースしました。失敗しました。









誰かが大量の情報を収集し始めていると聞いたとき、これからの潜在的な利益や実装のコストについては考えていません。 そして、そのビッグブラザーさえも見ていません。 私の頭の中では、フィルタリングして結合できるタブレット、ツイストできるキューブ、構築可能な図などがすぐに描画されます。 どういうわけか、売り手から州への独自のデータの流れに固執することはできますか? できます。 (小さな弓の形で、FTSアプリケーションは、このチェック自体の電子版を受け取る機会も提供します。)



この機会を知ったとき、私は火をつけました。 アプリケーションの機能を詳しく見ても、私を失望させることはできませんでした。htmlまたはpngだけでなく、jsonでもチェックを取得できます。









実際、私はすべての費用を追跡しようとしています。 私はこれを定期的にやろうとしますが、もちろん、数週間はこれをするのを忘れていました。 そしてエリクソン催眠のセッションを開始し、過去に没頭し、白い斑点を埋めます。



連邦税務局がこの苦痛なプロセスから私たちを取り除く手助けをします。



理論的には、月末に複数の銀行の銀行取引明細書と領収書の山を分析する代わりに(すべてのお金が再び統合された場所を理解しようとすると、添付ファイルのjsonボックスにある山の文字を分析できます)。 見通しもまあまあですが、最初のものとは異なり、自動化にはるかに適しています。



したがって、購入すると、JSON形式で小切手を郵送で受け取ることができます。 さらに、理論的には、このために購入する際に、連邦税務局からの申請すら必要ありません:申請中の郵便のqrコードで名刺を事前生成し、購入時にレジに提示できます。 次に、紙の小切手の代わりに電子小切手をリクエストできます。これはすぐにメールに分類されます。 オンラインショッピングと同様。









しかし、連邦税務局でさえ、この機能について直接書いています-「自分をflatめないでください」。 すべてのKKMがサポートしているわけではありません。 また、KMMがサポートしている場合でも、キャッシャー自身がサポートしているという事実はまったくありません。 ですから、今のところこれは強い精神のためです。



メールで小切手を受け取った後は、その解析と自動化されたストレージへのアップロードのみを自動化できます。



これらをすべてアンロードする場所を選択する必要があります。これにより、さらに作業するのに便利です。



私はあなたがどうなのかわかりませんが、個人的には、これらの従業員またはこれらの州の従業員を使用して、結果として、分析のために常に古き良きExcelにデータをエクスポートします。 開発者がどのグラフィックスや図表を事前に製品に組み込んでいるかに関係なく、データから抽出したいものすべてを予測することはできません。 どのトランザクションを考慮し、どのトランザクションを無視するかは、月の相と比較し、グループ化し、今日の数値で除算します。Excelはこれをすべて実行できます。



さらに、ExcelをOneDriveに配置すると、モバイルOSからも含め、Webから完全にアクセスできるようになります。 また、GoogleDriveとは異なり、式はここで完全に機能します。これには、各購入のカテゴリとサブカテゴリのカスケードドロップダウンリストを整理できるものも含まれます。









ポイントは小さい-パーサーを扱う。 メールボックスから添付ファイル付きのレターを受信し、json添付ファイルを解析し、結果をOneDriveにあるExcelタブレットに書き込むメカニズムが必要です。



理想的な世界では、このパーサーはIFTTTのステップのようなものと考えています。 そうすれば、私たちのソリューションはネットワーク上に完全に存在し、ユーザーから何も必要としません(理想的な世界について話しているので、連邦税務局の「名刺」が理想的に機能します)。



ただし、通りから来た人がIFTTTへのステップをどのように書くかをすぐに理解し、これがまったく可能かどうかを理解します。 私は失敗しました。 誰かが説明ガイドや代替プラットフォームを提案できるなら、私はとても感謝しています。



完全なネットワークソリューションが解決されていないため、パーサーの1つのリンクをデスクトップに実装しています。 NORBITでは、 Dynamics CRMを実装しているため、Microsoftスタックは私にとって最も身近なものです。 はい。ExcelとOneDriveを選択して、既に使用を開始しています。 Outlookのプラグインを実装し、必要なすべてのロジックを配置します。



ここで、私は最も抵抗の少ない道を選びました。



始めるために、FTSから受け取ったJSONをjson2csharp.comにフィードしました 。 逆シリアル化のクラス構造を取得しました。



public class Item {    public string name { get; set; }    public int nds18 { get; set; }    public int price { get; set; }    public double quantity { get; set; }    public int sum { get; set; }    public int? nds10 { get; set; } } public class Receipt {    public List<Item> items { get; set; }    public string retailPlaceAddress { get; set; }    public string userInn { get; set; }    public int requestNumber { get; set; }    public int nds18 { get; set; }    public string fiscalDriveNumber { get; set; }    public string user { get; set; }    public string @operator { get; set; }    public int fiscalDocumentNumber { get; set; }    public int taxationType { get; set; }    public int ecashTotalSum { get; set; }    public string kktRegId { get; set; }    public DateTime dateTime { get; set; }    public int operationType { get; set; }    public int cashTotalSum { get; set; }    public int receiptCode { get; set; }    public int nds10 { get; set; }    public int totalSum { get; set; }    public int shiftNumber { get; set; }    public int fiscalSign { get; set; } }
      
      





ここで、手紙を受け取り、上記で取得したクラスへの添付ファイルをデシリアライズし、XLSXに変換する必要があります。



逆シリアル化にはNewtonsoft.Jsonを、優れた記述にはClosedXMLを使用しました。 その後、XLSXへの直接書き込みに煩わされることなく、CSVで静かに書き込むことが可能であることが判明しました-何らかの理由で、ピボットテーブルを持つファイルを操作するとClosedXMLがクラッシュします。 そのため、これまでの統計は別の元ファイルに移動し、データソースとしてプラグインからのアンロードをやめる必要がありました。



プラグイン自体は非常にシンプルです。 彼がすべての着信レターを処理しないように、私はチェック専用に別のメールボックスを開き、レターが入っていることを確認しました。 次に、もちろん、すべてのフォルダーアドレスのように、構成可能なパラメーターにこれを配置する必要があります。



         void Items_ItemAdd(object Item)       {           Outlook.MailItem mail = (Outlook.MailItem)Item;           if (Item != null)           {               if (mail.Attachments.Count == 1 & mail.To.Equals("my@mail.address"))               {                                     Outlook.Attachment attach = mail.Attachments[1];                   string path = "C:\\_Data\\_tmp\\" + attach.FileName;                   attach.SaveAsFile(path);                   string text = System.IO.File.ReadAllText(path);                   System.IO.File.Delete(path);                   List<TableRow> objectList = GetBillsData(text);                   WriteBillsToXLSX(objectList);               }           }       }       private static void WriteBillsToXLSX(List<TableRow> objectList)       {           var workbook = new XLWorkbook(tablePath);           var ws = workbook.Worksheet("Products");           int startrow = ws.LastRowUsed().RowNumber();           if (ws.CellsUsed().Count() != 0)               startrow = ws.CellsUsed().Last().Address.RowNumber;            foreach (var item in objectList)           {               startrow++;               ws.Cell(startrow, 1).Value = item.dateTime;               ws.Cell(startrow, 2).Value = item.sum;               ws.Cell(startrow, 3).Value = item.quantity;               ws.Cell(startrow, "J").Value = item.user;               ws.Cell(startrow, "S").Value = item.name;           }           workbook.SaveAs(tablePath);       }       private static List<TableRow> GetBillsData(string bill)       {           Receipt doc = JsonConvert.DeserializeObject<Receipt>(bill);           List<TableRow> objectList = new List<TableRow>();           foreach (var item in doc.items)           {               objectList.Add(new TableRow(item, doc));           }           return objectList;       }
      
      





JSONからテーブル行へのすべてのデータ変換は、TableRowコンストラクターから削除されました。



これで、購入が完了したので、小切手をスキャンするだけで十分です。すべての行はクラウドにあるファイルに分類されます。 このファイルは、キャッシュデスクを離れることなくすぐに見ることができます。 最新のブラウザをサポートするすべてのOSで表示できます。



読み込まれた行のカテゴリとサブカテゴリを配置するだけで、私たちの心に心地よい分析を構築できます。 あと2、3行のコードで、プラグインは、ファイルに同じ説明と以前に入力されたカテゴリの行が既にある場合、行のカテゴリ/サブカテゴリを配置する方法を学習します。









このようなデータのサイクルが自然界にあります。



All Articles