misc.log

日常茶飯事とお仕事と

Googleからシンガポールの税務情報提出を求められた

普段使っているGoogle AdSenseの、今月の支払を確認しようとおもったら……こんな表示が。

以前も、Youtube関連の支払のために、アメリカ向けの税務情報登録(まぁ要するに、アメリカの税金を払わなくていいことを証明する情報の登録?みたいなの?)を設定したのですが、それのシンガポール版が必要になったようです。多分Googleシンガポール拠点が支払いの業務をやっていて、シンガポールの税金と日本の税金を多重で徴収しないようにする手続きですね。

www.backyrd.net


早速登録ページを見てみたところ、アメリカ版とはちょっと具合が違う。

「税務情報の管理」にシンガポールが追加されている

とりあえずGoogleで検索したところ、日本に住んでいることの証明として、どうやら税務署で手に入れられる「居住者証明書」なるものが必要らしいのです。詳しくはGoogle Adsenseヘルプ掲示版の下記のやりとりと……

support.google.com

その流れで紹介されていたこちらのブログ。

ikinarilarc.com

そして、申請書の記入に際してはこちらも参考にさせていただきました。

fuk-office.com

居住者証明書を申請する

まだ郵送した段階なので、この書き方で合っているかどうかは分かりません。結果が出たら追記します。

税務署に行けばもらえるらしいのですが、面倒くさいので郵送を試してみることにしました。この、多重で課税されないための申請は、国同士が事前にそういう取り決めをやっているかどうかで提出書類が違ったりするようで。恐らくシンガポールは「租税条約等締結国」らしく。申請書フォーマットは下記国税庁サイトの「居住者証明書交付請求書・居住者証明書(租税条約等締結国用)入力用(PDF/211KB)」のフォーマットを使うようです。

www.nta.go.jp

申請書は2通必要らしいので、入力用PDFファイルで打ち込みにて記入。プリンターで2枚印刷しました。記入はこんな感じ。

居住者証明書申請フォーマット記入例

1ヶ所トラップがあって、下段の方の英文に相手国名を書くところ、申請書には「税務署で記入する欄」となっているのですが、どうやらここは自分で記入するようです。

で、郵送。普通の封筒にしようかとおもったのですが、折り曲げずに済む角2封筒の方が無難かとおもい、このサイズの封筒に宛名を記入。中には、返信用に同じサイズで、宛先、切手を貼った封筒を同封して封をしました(画像では120円を貼っていますが、クリアファイルと返信用の角2封筒を入れると50gをオーバー。郵便局で量ってもらったところ、140円が正解でした。危ない危ない……)。さて、これで証明資料が届いたら、Google AdSenseのページにスキャンした資料データをアップロードして……で終わるはずですが。すんなりいくでしょうか……??( https://www.backyrd.net/entry/20240109/1704801615 に記載しました)。

税務署宛の封筒

www.backyrd.net


SQL Serverのインデックスを再構成する

数年運用しているシステムの開発DB(SQL Server)の動作が怪しい部分があったため、DBを利用するミドルウェアの開発元に問合せたところインデックスの再構成を試してほしいとの依頼が。しかし、現時点でSQL Server Management Studioの「データベース」のツリーが表示されない状態(恐らくデータベースの1つが破損しているか管理情報が壊れている……)のため、SQL文で処理する必要があります。

ちょっと検索したところ、ASCIIのサイトで良さげなSQLが紹介されていたので利用させてもらいました。

ascii.jp

インデックスの断片化率などを一覧にし、さらに、パーセンテージに応じて「Reorganize」と「Rebuild」をまとめて実施するSQLが記載されていました。助かります。

1点注意点が。開発用サーバーのSQL ServerはStandard Editionであったため、Rebuildのオプション「WITH (ONLINE = ON)」が使えませんでした。そのため、下記の「-- インデックスと……」のコメントの次の行から、「WITH (ONLINE = ON)」を除外して実施しています。

DECLARE @Command VARCHAR(255)
DECLARE cur CURSOR LOCAL FOR
-- インデックスと断片化率の一覧を取得する
SELECT 'ALTER INDEX ' + '[' + IDX.name + ']' + ' ON [' + SCM.name + '].[' + OBJCT.name + '] REBUILD WITH (ONLINE = ON)' AS Command
FROM sys.dm_db_index_physical_stats (DB_ID(),null,null,null,null) AS IPS
LEFT OUTER JOIN  sys.objects AS OBJCT
	ON  IPS.object_id = OBJCT.object_id 
LEFT OUTER JOIN  sys.indexes AS IDX
	ON  IPS.object_id = IDX.object_id  AND IPS.index_id = IDX.index_id 
LEFT OUTER JOIN  sys.schemas AS SCM
	ON  OBJCT.schema_id = SCM.schema_id 
WHERE OBJCT.type = 'U'
AND   IDX.index_id > 0 

-- 断片化率が30%以上のものを抽出する
AND   IPS.avg_fragmentation_in_percent > 30
ORDER BY IPS.avg_fragmentation_in_percent DESC

OPEN cur

FETCH NEXT FROM cur INTO @Command
WHILE @@FETCH_STATUS = 0

BEGIN
  -- インデックスの再構築を実行する
  EXEC(@Command)
  FETCH NEXT FROM cur INTO @Command
END

CLOSE cur
DEALLOCATE cur

Accessからクエリー定義情報をテキストファイルに出力する

自分用メモです。

古いAccessファイルにある大量のクエリーを分析したり調査、修正したりする際に、いちいちAccess上で確認したり、列名などで検索したりするのが大変なので、テキストファルにしてGrepでまとめて洗い出せないか……という場面に遭遇しました。少し検索した結果、VBAでテキストファイルにエクスポートするスクリプトを紹介してくれている人がいたので、参考にさせてもらいました。

qiita.com

こちらです。私の環境では、さらに参照設定で「Microsoft Scripting Runtime」など、FileSystemObjectを含んでいるライブラリーを参照しないとエラーになりましたので、そのあたりは適宜調整してください。

'クエリの出力
''参照設定:Microsoft office 16.0 Object Library
Private Sub ExportQuery()

    Dim queryAt         As QueryDef
    Dim fs              As New Scripting.FileSystemObject
    Dim streamAt        As Scripting.TextStream
    Dim BaseDir         As String
    Dim FileFullPath    As String

    '出力先を指定。ここではプロジェクトフォルダ直下
    BaseDir = CurrentProject.Path & "\"

    For Each queryAt In CurrentDb.QueryDefs 'クエリ分だけ回す

        'ファイル名をフルパスで作成。 ここではクエリと同じ名称にする。
        FileFullPath = BaseDir & queryAt.Name & ".sql"

        'ファイル作成 (既に存在する場合上書き)
        Set streamAt = fs.CreateTextFile(FileFullPath, True, False)

        'SQLの出力
        Call streamAt.Write(queryAt.sql)

        Call streamAt.Close
        Set streamAt = Nothing
        Set queryAt = Nothing

    Next
    Set fs = Nothing

End Sub

これで出てくるクエリーは、改行などの無いベタなテキストファイルになっています。そのままでは読みづらいので、1ファイルずつ下記のサイトで整形して保存しなおしました(150個ぐらいなので、手作業で15分ほどで終わりました)。

atl2.net