C# PDFiumでPDFを読み込む

業務で利用するPDFを取り込んだらどうだろうと思い実験。とりあえず、ページ移動とブックマークのようなものだけ。

NuGetから、
・PdfiumViewer
・PdfiumViewer.Native.x86.v8-xfa
の2つをインストール。

 

簿記 原価計算ざっくり復習

●原価計算の種類

個別原価計算と総合原価計算

実際原価計算と標準原価計算

全部原価計算と直接原価計算

8通りの組み合わせがある。

●勘定科目の振り替え①

・材料購入
材料 200 | 買掛金 200

・工程投入
仕掛品 100 | 材料 100

ここで残っている材料100が在庫となる。

・完成
製品 100 | 仕掛品 100

・販売
売上原価 100 | 製品 100
売掛金 120 | 売上 120

製品が完成したら製品という資産になり、
販売したら売上原価という費用になる。
120 – 100 = 20という計算。

このように振り替えられていくのが基本。

●勘定科目の振り替え②

間接費がある場合。

・材料購入
材料 100 | 買掛金 100

・工程投入
仕掛品 50 | 材料 100
製造間接費 50

・締め

製造間接費は最終的に仕掛品になるが、
この製造間接費→仕掛品のとき製品ごとに配賦する。

仕掛品 50 | 製造間接費 50

●材料費

・構成

月初材料在庫
購入分

仕掛品(直接商品分)
製造間接費(間接消費分)
月末材料在庫

●労務費

直接工でも間接的な作業をしている分は間接労務費となる。

・賃率

直接工の賃金は直接労務費と間接労務費に分ける必要があるため、賃率を算出する必要がある。

直接工の支払賃金(原価対象賃金) ÷ 作業時間

●総合原価計算

ある期間の製造原価を数量で割るという考え方。
直接材料とそれ以外に分ける。

●標準総合原価計算

標準原価=原価標準×生産量
(原価標準=目標とする1単位あたりの原価)

C# クラス生成+リスト追加の高速化

・class → structへ変換
・AsParallel() / Linqの利用
・Capacity / Listの利用
・foreach() → AsParallel().ForAll()へ変換
・foreach() → Parallel.ForEach()へ変換
・List<ClassItem> → ConcurrentBag<ClassItem>へ変換
で実験。

 

C# Task/CancellationTokenでキャンセル

 

Windows タスクスケジューラ

ファイル名を指定して実行
taskschd.msc
からも登録できる。

バッチから登録する場合。

作成
schtasks /create /tn “タイトル” /tr “実行ファイル” /sc hourly /mo 6 /st 06:00
今日の6時から開始し以後6時間ごとに実行

削除
schtasks /delete /tn “タイトル”

C# TabPageの複写

TabPageを動的に追加する場合、細かい設定は面倒なので、デザイナーで作っておいて複写したい。

TabPage、中に入れるControlどちらも、インスタンスに対して必要なプロパティを直接指定(nPage.Text = oPage.Textのように)した方が楽だけど、今回は自動で渡してみた。

 

 

C# ファイル検索(インクリメンタルサーチ)

以前からときどきfenrirというフリーソフトを利用していたが、更新が止まっているようなので、社内用に同じようなソフトを作成した。もともとファイル検索だけできればいいので、機能も見た目も限定的。

 

C# Timer遅延処理

インクリメンタルサーチ系を作るとき、だいたいTextChangedにそのまま処理をくっつけてしまうのだけど、量が多いとカクついてしまうので、TextChangedが連続していた場合Timerで遅延処理をつけたほうがいい。

 

Javascript 要素をドラッグで移動

td要素の中にあるdiv要素をドラッグで別のtd要素の中に移動。div要素にはinputタグでデータを持たせクリック時に取得。

 

Javascript DOM関連 メモ

・DOM、Node、Element

DOMは基本的なインターフェースの提供とツリー構造を作っている。

DOMを構成する単位がNodeで、Nodeは文字列やコメントなども含まれる。Nodeの中でタグの部分がElementと呼ばれる。

Elementは、階層でElement、HTMLElement、HTML*Element
のように継承しそれぞれインターフェースを持っている。

・型の調べ方

・タグ、要素

要素=<開始タグ 属性>内容<終了タグ>

・要素取得

HTML*Element = document.getElementById(id)
idで要素を取得

HTMLCollection = document.getElementsByTagName(name)
タグ名で要素を取得

HTMLCollection = document.getElementsByClassName(name)
classで要素を取得

NodeList = document.getElementsByName(name)
name属性で要素を取得

HTML*Element = document.querySelector(selectors)
CSSセレクターで要素(最初の1つ)を取得

NodeList = document.querySelectorAll(selectors)
CSSセレクターで要素(複数)を取得

・NodeListとHTMLCollection

NodeList: 取得後更新しない。
HTMLCollection: 取得後更新する。

for … of で回す

・要素取得(親子関係)

HTML*Element = el.parentNode
親要素

HTML*Element = el.firstElementChild
最初の子要素

HTML*Element = el.lastElementChild
最後の子要素

HTMLCollection = el.children
子要素リスト

HTML*Element = el.previousElementSibling
1つ前の要素

HTML*Element = el.nextElementSibling
1つ後の要素

・要素操作

HTML*Element = document.createElement(タグ)
指定タグで要素を作成

parentNode.insertBefore(newNode, referenceNode)
referenceNodeの前にnewNodeを追加

parentNode.appendChild(newNode)
最後にnewNodeを追加

parentNode.removeChild(childNode)
childNodeを削除

・内容操作

string = el.innerHTML
タグが解析される。

string = el.textContent / el.innerText
タグが解析されない。取得するとタグはなくなり、設定するとタグは文字列になる。

textContentと、innerTextの違い。
textContentは改行コードなどは維持され、innerText変換されるなどいくつかある。

・属性操作

string = el.getAttribute(name)
属性を取得

el.setAttribute(name, value)
属性を設定

el.removeAttribute(name)
属性を削除

bool = el.hasAttribute(name)
属性を持っているかどうか

・classList

string = el.className
classの確認

el.classList.add(name)
classの追加

el.classList.remove(name)
classの削除

el.classList.toggle(name)
classのOn/Off

bool = el.classList.contains(name)
class有無