所得税法がわからぬ。

所得税法がわからぬ。

いまさら職業会計人狙ってるわけじゃない(そこからは完全に落ちこぼれてまつ)のだが、システム屋として何の因果か所得税法の細部を見なくてはいけなくなってしもた。

でーいろいろ調べているうちに不思議な控除に遭遇した。

 

No.1175 勤労学生控除|所得税|国税庁

 

<引用>

勤労学生とは、その年の12月31日の現況で、次の三つの要件の全てに当てはまる人です。

(1)(略)

(2) 合計所得金額が65万円以下で(以下略)

(略)

3 勤労学生控除の金額

(略)
27万円

<引用おわり>

 

控除というのは所得を求めるのに必要なものなのだが、控除を適用する条件に所得があるというのがなんとも理解に苦しむ。

 

たとえば収入80万としてほかの控除がなければ

①勤労学生控除適用する 80万円-27万円=53万円

  所得53万円なので勤労学生控除は適用可で正解

②勤労学生控除適用せず 80万円-00万円=80万円

  所得80万円なので勤労学生控除は適用不可で正解

 

控除を適用したがために当該控除の所得要件をクリアできる場合、どっちが正解なんだろ??

 

 

 

 

 

 

迷路もどきパクってみました。

 むかしむかしのコモドールでの実行画面。シンプルな画面で迷路っぽい出力。

現代のC#でできないわけがなかろうとパクってみました。

 
using System;
namespace ConsoleApplication3 {
    class Program {
        static void Main(string[] args) {
            int c = 0;
            var v = new Random();
            while (true) {
                //(int)'/' = 65295
                //(int)'\' = 65340 = 65295 + 45
                var cc
                    = (char)(65295 +
                    Math.Round(v.NextDouble(), 0, MidpointRounding.ToEven) * 45);
                Console.Write(cc);
                c++;
                if (c == 40) {
                    c = 0;
                    Console.WriteLine("");
                }
            }
        }
    }
}
 
元のコードとはシンプルさにおいて大きな違いがありますが、/と\の文字コードが連続してないやらなんやらで。。。。すんまそ。
んでも実行結果
 f:id:turkey_pc:20170730162937p:plain
 
(追記)配列に逃げたほうがシンプルだったろうなぁ。

現場で見かけたコードのグチ。

 

仕様はざっくりこんな感じ。

テーブル書くのめんどくさいからExcelで書いたスクショ。

f:id:turkey_pc:20170728093852p:plain

 

で、現場にあったコードをざっくり解読すると

-----------------------------------------------------------------

①keycol=2のレコードを全カラム取得

②①をもとにkeycol=2の全カラムを更新(col_99だけは"北海道"に)

 

①SELECT col_1,col_2,col_99,col_100 FROM tbl WHERE keycol = 2;

②UPDATE tbl SET col_1 = "田中", col_2 = "花子" , col_99 = "北海道" , col_100 = "女" WHERE keycol = 2;

-----------------------------------------------------------------

ということであった。

 

なんか裏の意図があったりするのだろうか?(外注さんの仕事なのでいまさら問い合わせもできず)

 

とりあえずtblのカラムを増やす改修の担当が回ってこないことを願っている。

 

 

ListはAdd順らしい

前の続き。

DictionaryはAdd順で列挙してくれるとは限らないらしい(なんせググって見つかったことである)。そしてさらにもうちょいググり続けるとListはAdd順で列挙してくれるらしい???(だんだんあやふやになってきたorz)

 

じゃ、Dictionaryの代わりにListにするかってことで

            var dic = new List<KeyValuePair<int, string>>();
            dic.Add(new KeyValuePair<int, string>(8, "伊丹"));
            dic.Add(new KeyValuePair<int, string>(4, "新伊丹"));
            dic.Add(new KeyValuePair<int, string>(6, "稲野"));
            dic.Add(new KeyValuePair<int, string>(3, "塚口"));

・・・・

new KeyValuePair<int, string>がいっぱいあってうざったい!!!!!!

Dictionaryならすっきりだったのに!!!!

 

てなわけでKeyValuePairのListに特化したClassを作ってみた。

    class ListKeyValuePair<T1,T2> : List<KeyValuePair<T1, T2>> {
        public void Add(T1 key,T2 value) {
            base.Add(new KeyValuePair<T1, T2>(key, value));
        }
    }

うん、やってることは単純だなぁ。これつかうと

            var dic = new ListKeyValuePair<int, string>();
            dic.Add(8, "伊丹");
            dic.Add(4, "新伊丹");
            dic.Add(6, "稲野");
            dic.Add(3, "塚口");

よし、これですっきし。

 

これ実戦投入する気はない(お堅い現場でつので)が、やるだけやったのですっきし。

 

 

 

Dictionaryの列挙順はAdd順じゃないかもだって?

こんなコード書いた。
 
            var dic = new Dictionary<int, string>();
            dic.Add(8, "伊丹");
            dic.Add(4, "新伊丹");
            dic.Add(6, "稲野");
            dic.Add(3, "塚口");
            foreach (var item in dic)
                Console.WriteLine(item.Value);
 
結果はこんなん
-------------
伊丹
新伊丹
稲野
塚口
-------------
 
ああ、よかった。無事に伊丹線の路線図できたね!
 
 と・こ・ろ・が
ちょっと気になることがあってググったら気になる記述が。
 

bbs.wankuma.com

 

>列挙処理のために、ディクショナリ内の各アイテムは、値とそのキーを表す KeyValuePair<TKey, TValue> 構造体として処理されます。 アイテムが返される順序は未定義です。

 

「順序は未定義です」

 

つまり、Dictionaryの各要素を列挙する場合、Addした順に列挙してくれるとは限らないということ???ある日突然「新伊丹」と「稲野」がひっくり返った路線図を吐き出すかもってか???

 

うーん、これはこまった。というわけで、ちょっと考えよ。

VisualStudioのメソッド抽出

VisualStudio2010でメソッド抽出やってみた。
 
<抽出前>
    string a = "";
    bool b = false;
    a = "";
    if (b)
        a = "true";
    Console.WriteLine(a);

<抽出後>
    string a = "";
    bool b = false;
    a = Hoge(a, b);
    Console.WriteLine(a);
 
private static string Hoge(string a, bool b) {
    a = "";
    if (b)
        a = "true";
    return a;
}
 
Hogeにstringの引数がくっついてるのが納得いかん(コードの書き方に難があるというのはいいっこなし)。
 
VisualStudio2015では納得いく動きになってんだけどね。
 

バグを乗り越えて(?)

現在お仕事してる現場関係のグチでおます。特定されない程度にぼかす。

 

その現場、過去(私が逃亡wしてた時期)にひでーバグを出してた。

 

「int配列の各要素につき値が0以外なら文字列変換して出力。0ならば空文字を出力。」に対してこんなバグ入りソースを書いてやがった(C#だべ)

 
<ソース> 
string s = "";
foreach(var item in new[] { 1, 2, 3, 0, 5 }) {
    if (item != 0)
        s = item.ToString();
    Console.WriteLine(s);
}
</ソース>
<結果>
1
2
3
3
5
</結果>
 
こういうくそバグでもリリースされた後の発覚となると厳しい原因分析があって次期バージョンの確認作業に反映しなければいけないわけ(次期バージョンやらせてもらえるだけでも感謝しないといけない状況でつが)で。。。リリース直前の確認項目に
「変数が初期化されているか」
が追加されることに。
 
リリース直前に?
 
また逃げたくなってきた(をい