So-net無料ブログ作成
その他 ブログトップ
前の5件 | -

消費税について考える [その他]

 2014年4月1日から、消費税が8%に引き上げられることが正式に決まったようです。
 売上や仕入れなどを扱うシステムでは、消費税を考慮しなければならないことが多いと思います。

 最初に、消費税率の変遷を。
1989/4/1 消費税3%施行
1997/4/1 消費税5%施行
2014/4/1 消費税8%施行

 現在の5%は、16年前に施行されたもので、長期にわたって固定されていたと思います。
 私が経験したシステムでは、消費税率がころころ変わることを前提としたシステム、と言うものは無かったと思います。
 どこかのマスタに、5%と言う数字を持たせておいて、消費税計算の時はその値を持ってきて計算すればOK程度でした。
 (そもそも、そんな重大なシステムは無かったので)

 今後のことを考えると、日付によって、その日での消費税率を持ってこれる仕組みをちゃんと持っておくことが必要になってくると思います。
 固定値で計算させるだけでは、役不足になりそうです。

 そんなわけで、消費税率をちゃんと判定する仕組みの例を考えてみました。

 最初に、消費税率を管理するためマスタです。

 税率と、それに対応する期間を登録したテーブルです。
 0%の期間も登録しているのは、SQLで処理を行う場合に、アンマッチになる期間があると、面倒くさいかと思って入れてみました。
 実際にそう言う処理を作ったことがないので、これについて実際役に立つかは未検証です。
 売上などを管理するシステムで保持するデータは、長くて10年程度なんじゃないかと思うので、さほど過去は心配しなくてもいいかもしれません。

 次に、消費税を参照する処理ですが、ここでは税率を返す関数を考えようと思います。
 日付をパラメタで渡すと、その日付に対応する税率を返す関数です。

Public Function fncSZei(datP As Date) As Currency
'消費税率取得関数

    Dim Cn     As New ADODB.Connection
    Dim recA   As New ADODB.Recordset
        
    fncSZei = 0
    
    Set Cn = CurrentProject.Connection

    recA.Open "SELECT * FROM TM消費税 WHERE 開始日 <= #" & Format(datP, "yyyy/mm/dd") & "#  AND 終了日 >= #" & Format(datP, "yyyy/mm/dd") & "#", Cn, adOpenForwardOnly, adLockReadOnly
    If recA.EOF = True Then
        MsgBox "消費税率の取得に失敗しました。", vbCritical
    Else
        fncSZei = recA!消費税率
    End If
    
    recA.Close

End Function

 こんな感じで、消費税率が必要なときは、この関数で取得することができます。

 以下蛇足ですが、こういう消費税率マスタのような、変更する事が極端に少ないマスタについて、メンテ画面を作成するかと言えば、しない事の方が多いかと思います。
 変更の必要がある場合は、担当SEがテーブルを直接書き換えれば済むことなので、使わないかも知れない画面は作成の優先順位がとても低いのです。時間もお金もかかりますので。

 また、消費税はすべての商品に適応されるわけではなく、たばこや有料ゴミ袋などは、非課税(消費税は0%)です。
 そう言った商品を扱う可能性がある場合は、一律に計算されてしまう設計では不都合が起こります。
  商品マスタなどの設計の話になりますが、商品毎に課税・非課税を設定できるように考えておいた方が良いかもしれません。

 さらに蛇足ですが、今現在の消費税は、一律5%(今後8%)となっていますが、ニュースでは今後商品の種類によって、税率が変わる制度なども検討されているとも報じられています。
 そうなると、消費税関連の処理は、さらにめんどくさくなりそうです。


雑記 Excelの1900/02/29問題 [その他]

 日付にまつわるコンピュータの話はいろいろとありますが、今回の話題はExcelの悩ましい仕様についてです。

 「1900/02/29」という日付は、存在しない日付です。
 1900年は4で割り切れるのですが、100で割り切れて、かつ400で割り切れないので、閏年ではありません。

 ExcelのVBAのIsDateを使って試してみると、以下のようになります。

 VBAでは、1900/02/29は正しい日付ではないと判断されます。

続きを読む


雑記 Excel2010でVBA開発用のタブを表示させる [その他]

 ExcelでVBAを使った開発を行う場合、使用するアイコンが「開発」タブに配置されています。
 しかし、初期設定では「開発」タブが表示されていない場合があります。

 その場合は、下記の手順で表示させることができます。

続きを読む


雑記 Excel2010のスクリーンショットをシートに貼り付ける新機能 [その他]

 以前のExcel(2003?)だと、スクリーンショットを貼り付ける場合は、貼り付けたいアプリケーションを表示させて、「Print Screen」+「Alt」キーを押して、Excelに移動して「貼り付け」と行った操作が必要でした。
 Excel2010には、スクリーンショットを貼り付ける専用の機能があります。

 「挿入」タブにある、「スクリーンショット」というアイコンです。

続きを読む


雑記 TwipをPixcelに変換する [その他]

 Twipに関する記事を書こうと思って調べていたら、VBの.net以降はTwipが扱えないらしいです。
 ACCESS2010はまだTwipでの指定です。

 TwipをPixcelに変換する方法が、マイクロソフトのサイトにありました。
http://support.microsoft.com/kb/210590/ja
 自動翻訳のようで、日本語が変ですが、プログラムはちゃんと動きました。

 ほぼ転載になりますが、説明等追加してますので、参考までに。

Option Compare Database
Option Explicit

'ディスプレイデバイスコンテキストのハンドルを取得する
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

'デバイスコンテキストを解放する
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

'デバイス固有の情報を取得する
Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

Const WU_LOGPIXELSX = 88 '論理インチ当たりの画面の水平方向のピクセル数
Const WU_LOGPIXELSY = 90 '論理インチ当たりの画面の垂直方向のピクセル数

Public Function ConvertTwipsToPixels(lngTwips As Long, lngDirection As Long) As Long
'TwipからPixcelへの変換
'引数
'lngTwips・変換するTwips値
'lngDirection・0:横方向、0以外:縦方向

    'Handle to device
    Dim lngDC As Long
    Dim lngPixelsPerInch As Long

    '1インチ=1440Twips
    Const nTwipsPerInch = 1440

    lngDC = GetDC(0)
    If (lngDirection = 0) Then
    '水平方向
        lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSX)
    Else
    '垂直方向
        lngPixelsPerInch = GetDeviceCaps(lngDC, WU_LOGPIXELSY)
    End If
    lngDC = ReleaseDC(0, lngDC)

    'ピクセル数を計算
    ConvertTwipsToPixels = (lngTwips / nTwipsPerInch) * lngPixelsPerInch

End Function


Public Sub subTEST()
    Dim lngOldTwips As Long

    lngOldTwips = 2377
    Debug.Print ConvertTwipsToPixels(lngOldTwips, 0)

End Sub

 と、試してはみたものの、これを活用する機会があるかどうかは分かりません。


前の5件 | - その他 ブログトップ