knmsc (勤務予定表作成手伝い) 取扱説明書

v.1.04 KinJ

【概要】

knmsc は20人以下程度の小規模事業所向けの勤務予定(スケジュール)表の作成を支援するソフトウェアです。
本プログラム(knmsc)専用のスクリプトに記述された設定条件や勤務予定データなどをもとに勤務予定表を作成するだけの比較的コンパクトなWindowsデスクトップアプリケーションソフトウェアです。
knmsc は Windows PC であれば単独で動作します。 このスクリプトは本プログラム(v.1.03以降)のスクリプトエディタで作成および編集できますが、世の中に豊富にある汎用テキストエディタを用いて作成・編集することも可能です。
テキストエディタの操作に不慣れのかたには「スクリプトウィザード」によりスクリプトの主要なデータ部分をGUIベースで比較的簡単に編集できます。(スクリプトウィザードに関しては説明書「スタートガイド」をお読みください。)
作成したスクリプトにもとづき勤務予定表を表示・印刷するほか、メール等に添付し易いように画像ファイルとして出力したり、テキストデータとして一部のメールクライアント(ソフト)にメール送信を依頼する機能などを備えています。
なお、始業・終業時刻がほぼ固定された数種のシフト勤務を比較的厳格に運用するような事業所には knmsc はあまり適さず、そのような事業所にはもっと適したソフトが多くあると思います。
起動時に読込まれ初期設定するスクリプトファイルにはサンプルデータも記述されておりますので、まずは knmsc.exe を起動してみてください。

【基本操作】


【上部のメニュー】

ファイルファイル関連
ユーザーフォルダを開くエクスプローラー(Windows Explorer)を起動してユーザーフォルダを開く
終了本プログラムを終了させる
スクリプトスクリプト関連
スクリプトファイルを指定して読込スクリプトファイルを選択してスクリプトエディタに読込んでから実行する
スクリプトウィザード
(スクリプト簡易編集)
スクリプトエディタに読込まれているスクリプトのおもなデータを
スクリプトウィザードウィンドウに表示する
スクリプトエディタ表示/非表示スクリプトエディタのウィンドウの表示/非表示を切替える
スクリプトファイルを
外部エディタで編集
直前に実行したスクリプトファイルを外部テキストエディタで編集する
スクリプト再読込直前に読込・実行したスクリプトを再読込・実行する
(外部エディタでの編集結果で表示を更新)
システムスクリプト再読込プログラムフォルダにある初期設定用スクリプト(knmsc_ini.kss)を再読込&実行する
システムスクリプトを
外部エディタで編集
プログラムフォルダにある初期設定用スクリプト(knmsc_ini.kss)を外部テキストエディタで編集する
スクリプトのファイル保存スクリプトエディタやウィザード等での編集結果をスクリプトファイルとして名前をつけて保存
ログファイルの閲覧・編集ログファイルを外部エディタで閲覧・編集する
デバッグモードスクリプトを一行ずつ実行して一時停止をする
印刷プリンタ(実(物理)プリンタもしくは仮想プリンタ)に印刷したり、プリンタの設定を行う
デフォルトプリンタに印刷knmsc でのデフォルトプリンタに登録されたプリンタに印刷する
プリンタを選択して印刷Windowsの印刷ダイアログボックスを開いてプリンターを選択して印刷する
デフォルトプリンタの選択knmsc でのデフォルトプリンタを選択する
図出力図Aや図Bなどの図表を出力する
Copy EMF拡張メタファイル(EMF)形式でクリップボードにコピーする
(Word/Excel等の文書にドロー系の図として拡縮して貼付けられる)
拡張メタファイル(EMF)拡張メタファイル(EMF)形式でファイルに保存する
(Word/Excel等の文書にドロー系の図として挿入できる)
ディスプレイモニタに収まらない部分も作図される
ビットマップ画像ファイル(PNG)PNG形式のビットマップ画像をファイルに保存する
(スマホ等で閲覧するメンバーへのメールに添付するのに便利)
ディスプレイモニタに表示された範囲の画像が保存されるので、
メンバー数や日付が多い場合には収まらない場合がある
PDF ファイル仮想プリンタに印刷データを送り、仮想プリンタからPDFを出力する
(PCで閲覧するメンバーへのメールに添付するのに便利)
PDFファイルのページ分割複数ページのPDFファイルを PDFtk™ を用いてページ分割する
スクリーンショット表示ウィンドウをPNG(8bit)ファイルとして出力する
データ
出力
勤務予定表をテキスト(文字列)データとして出力する
Copy txt (space区切り) to CB通常のテキストデータをクリップボード(CB)にコピー
(メール本文に挿入するときなどに用いる)
Copy tsv (tab区切り) to CBタブ区切りのデータをクリップボードにコピー
(Excel 等のスプレッドシートに貼付けるときに用いる)
Copy csv (comma区切り) to CBカンマ区切りのデータをクリップボードにコピー
Save .txt file (space区切り)通常のテキストデータをファイルに保存
Save .tsv file (tab区切り)タブ区切りのデータをファイルに保存
(タブ区切りのデータ(.tsv)は、おもにクリップボード経由で利用され、
ファイルとして利用されることはあまりは無い)
Save .csv file (comma区切り)カンマ区切りのデータをファイルに保存
(.csv ファイルとして Excel 等で読込可能)
メール送信枠Aもしくは枠Bの勤務予定表データにヘッダを付けてメール本文を作成し
件名とともにメールクライアント(メールソフト)に送信依頼する
HTML出力フォルダを作成しHTMLファイルや画像(PNG)ファイルを出力
関係者連絡用の(イントラネット)ウェブサーバーにフォルダごと転送し掲示するなどに利用
表示ディスプレイなどへの表示設定
表示時刻範囲の変更表示左端時刻(時), 右端時刻(時), 刻み(分) を入力
表示拡縮ディスプレイに表示する図の拡大・縮小率を変更する
始終独立⇒連動マウス左ドラッグで勤務時間バーを変更する際に、始業時間と終業時間を独立にするか、連動させるか。
・独立:その日の実働時間が変わる
・連動:その日の実働時間は変わらない
HPower表示形式図Cの表示形式 供給&需要(S,D) もしくは 差分(S-D) を切替える
ヘルプヘルプ情報
取扱説明書ブラウザを起動し、この取扱説明書を表示させる
スタートガイド(入門書)ブラウザを起動し、「スタートガイド」を表示させる
knmsc について本プログラムのバージョンや使用中のPCの環境情報等を表示する

【上部のボタン】

マウスカーソルをボタンの上に重ねると表示される「ツールチップ」の補足説明を参照のこと
表示するボタンの項目の並びと選択はスクリプトコマンド place_button でカスタマイズ可能

スクリプトコマンド place_button での略号↘と標準↓

前日枠Aに前の日の時間表を表示するDayP
翌日枠Aに次の日の時間表を表示するDayN
印刷(全日)期間の全ての日の図A(全メンバー時間表)をデフォルトプリンタに印刷する
プリンタを選択して印刷する場合は上段メニューの「印刷」から行う
仮想プリンタを指定した場合は、PDFファイルとして出力される
その場合の印刷条件は「プリンタ」になる
DAPr
印刷(月/日)表示中の一日分の図A(全メンバー時間表)をデフォルトプリンタに印刷するD1Pr
PNG(月/日)現在枠Aに表示されている図Aを PNG形式のビットマップ画像ファイルとしてユーザーフォルダに保存。
現在枠の範囲の画像が保存されるので、必要なら直前に Resize ボタン等で調整すること。
保存直後に Explorer で保存先フォルダが開かれるので、保存された PNG の確認・メール添付が容易。
D1Pn
PDF(月/日)現在枠Aに表示されている図Aの印刷データを仮想プリンタに送り、仮想プリンタからPDFファイルが保存される。
・PDFファイルの保存先フォルダは仮想プリンタ側で指定する
・PrimoPDF™ v4.1 ではPDFファイル名に全角文字を使えなかったため半角英数字だけで指定
D1Pd




Script読込スクリプトファイル(.kss)を指定してスクリプトエディタに読込んでから実行する
※スクリプトエディタのツールバーのアイコンボタン「開く」と同じ
ExUS
Script再読込直前に読込んで実行したスクリプトファイルを再読込して実行する
(「直前に読込んだスクリプトファイル」の名前は最下段のステータスバーに表示されている)
スクリプトファイルを外部のテキストエディタで編集し上書き保存してからScript再読込すれば、
編集で追加・削除・変更した内容が反映される
※本ボタンはスクリプトファイルを外部のテキストエディタで編集することを想定して残している
 スクリプトエディタを用いる場合にはメインウィンドウのこのボタンは使用せずに
 スクリプトエディタのツールバーのアイコンボタンを使用したほうがよい
ReUS
ScriptWizardスクリプトウィザードを表示するWzUS

%表示ディスプレイに表示する図の拡大・縮小率を変更するDsSc
Resize枠Aと枠Bが適切に表示できるようウィンドウの大きさを調整する
・横幅は枠Aと枠Bに合わされる
・縦は枠Aと枠Bの長いほうに合わされる
 但し、それより長い状態のときは変更しない
DsRs
始終独立/連動マウス左ドラッグで勤務時間バーを変更する際に、始業時間と終業時間を独立にするか、連動させるか。
・独立:その日の実働時間が変わる
・連動:その日の実働時間は変わらない
StEn

名前<枠Bにひとつ前のメンバーを表示MemP
>名前枠Bに次のメンバーを表示MemN
印刷(全員)全員分の図Bをプリンタに出力するMAPr
印刷(名前)枠Bに現在表示されているメンバーの図Bをプリンタに出力するM1Pr
TextCopy
(名前)
枠Bに現在表示されているメンバーのこの期間の勤務予定表をテキストデータでクリップボードにコピーする。
スクリプトで定義したヘッダ文も挿入され、メール本文などに「貼付け」可能。
M1Tx
メール(名前)スクリプトの member 行にメールアドレスが登録されていれば、
そのPCで使用しているメールクライアント(Thunderbirdなど)を起動して、上記のTextCopyの内容を貼付ける。
(送信前の確認の有無などは ShellExecute/MAPI およびメールクライアント側の仕様により異なる)
M1ML
PNG(名前)現在枠Bに表示されている図Bを PNG形式のビットマップ画像ファイルとしてユーザーフォルダに保存。
現在枠の範囲の画像が保存されるので、必要なら直前に Resize ボタン等で調整すること。
保存直後に Explorer で保存先フォルダが開かれるので、保存された PNG の確認・メール添付が容易。
M1Pn
PDF(名前)現在枠Bに表示されている図Bの印刷データを仮想プリンタに送り、仮想プリンタからPDFファイルが保存される。
・PDFファイルの保存先フォルダは仮想プリンタ側で指定する
・PrimoPDF™ v4.1 ではPDFファイル名に全角文字を使えなかったため半角英数字だけで指定
M1Pd

【スクリプトエディタ上部のツールバーのアイコンボタン】

マウスカーソルをボタンの上に重ねると表示される「ツールチップ」の補足説明を参照のこと

実行実行編集中のスクリプトを実行
保存上書き保存編集中のスクリプトを上書き保存
名前をつけて保存編集中のスクリプトを名前を付けて保存
読込再読込編集中のスクリプト破棄して
元のスクリプトファイルを再読込&実行
開く別のスクリプトファイルを読込&実行
新規作成新規スクリプト作成
編集元に戻すこれらは
スクリプトエディタのウィンドウ内での
マウス右クリックにより現れる
ポップアップメニューでの動作と同じ
切り取り
コピー
貼り付け
削除
検索
置換
[検索文字列]検索(順方向/逆方向)する文字列を入力
検索(順方向)下に向かって文字列を検索
検索(逆方向)上に向かって文字列を検索
検索検索ダイアログボックスを開く
置換置換ダイアログボックスを開く

【スクリプトウィザード】

スクリプトウィザードの操作に関しては説明書「スタートガイド」(knmsc_tutor.htm)を参照のこと。
スクリプトウィザードの位置づけとスクリプトエディタほかとの関係については下図。
knmsc プログラム スクリプト ファイル メイン ウィンドウ スクリプト エディタ スクリプト ウィザード 外部テキスト エディタ 図描画 マウス編集結果 open save show Ok open save
・スクリプトファイルのスクリプト(テキスト)がスクリプトエディタのメモリにロードされ、スクリプトエディタでスクリプトのCUI(CLI)編集が可能になる
・スクリプトウィザードは、スクリプトエディタ(で編集中)のスクリプトのうち勤務時間表データ生成に関するコマンド行を抽出し表形式に整理して表示しGUI編集を可能にする
・スクリプトウィザードで編集後の[Ok]ボタンにより、スクリプトウィザードでの編集結果がスクリプトエディタのスクリプトに反映され、スクリプトエディタ経由でそのスクリプトに従いメインウィンドウに描画される。
 [OkSave]ボタンの場合は、これに加え、スクリプトエディタのメモリ上のスクリプトがファイルに保存される。
・なお、次々項の【勤務時間の変更】で説明されるメインウィンドウでのGUI編集も上図の「マウス編集結果」としてスクリプトエディタのメモリ上のスクリプトに反映される。

【勤務時間の設定範囲】


【勤務時間の変更】


【ログファイル】


【印刷時の表(table)挿入機能】


【メール送信依頼機能】


【スクリプトの実行方法】

システムスクリプト:knmsc.exe があるプログラムフォルダにある "knmsc_ini.kss" という名前のスクリプトファイルで、おもに knmsc の初期設定を行う
ユーザースクリプト:上記のシステムスクリプト以外のスクリプトファイル。拡張子が ".kss" である任意のファイル名で、保存先フォルダも任意だがユーザーフォルダに保存されていると呼出し易い。

knmsc 起動時には上記のシステムスクリプトファイル(knmsc_ini.kss)が自動的に実行される
("knmsc_ini.kss" が見つからない場合はシステムスクリプトのサンプルファイル "_knmsc_ini.kss" が実行される)

knmsc が起動されたあとはユーザースクリプト(もしくはシステムスクリプト)を下記のいずれかで実行できる
 (a) スクリプトエディタのウィンドウ上部のツールバーの最左の「実行」ボタン
 (b) スクリプトエディタのウィンドウ上部のツールバーの「開く」ボタン
   もしくは、メインウィンドウ上部の
    メニュー⇒スクリプト⇒スクリプトファイルを指定して読込
   もしくは、メインウィンドウ上部の「Script実行」ボタン
 (c) スクリプトエディタのウィンドウ上部のツールバーの「再読込」ボタン
   もしくは、メインウィンドウ上部の
    メニュー⇒スクリプト⇒スクリプト再読込
   もしくは、メインウィンドウ上部の「Script再読込」ボタン
   ※(c)は直前に読込・実行したスクリプトファイルを再読込して実行するもので、おもに外部テキストエディタでスクリプトを編集し上書き保存した結果で図表の表示を更新するために用いる
 (d) エクスプローラー(Windows Explorer)からスクリプトファイル(.kss)をドラッグして本プログラムのウィンドウにドロップする
 (e) スクリプト中の exit コマンドのパラメタに記述されたスクリプトファイル(.kss)

スクリプトファイル(.kss)は、一旦スクリプトエディタに読込まれた後に実行される。
スクリプトエディタのスクリプトは編集等を施したあとに更新保存することなく上記の(a)により実行することができる。 一方、上記の (b)〜(e) は、スクリプトファイルを読込み、その直後一回のスクリプト実行を行う。

スクリプトファイル拡張子(.kss)が knmsc.exe に関連付けされている場合、ユーザースクリプトをダブルクリックするか、knmsc.exe のショートカットアイコンにドロップすることにより knmsc を起動できる。
この場合は、起動時にシステムスクリプト(knmsc_ini.kss)は実行されずに、当該のユーザースクリプトが最初に実行される。(そのため当該ユーザースクリプトには初期設定が記述されている必要がある。)


【スクリプトエディタ】

v.1.03 以降ではknmscスクリプト専用のスクリプトエディタを別ウィンドウで使用可能とした。
従来通りに外部の汎用テキストエディタでスクリプトファイルを編集して実行することも可能であるが、knmscスクリプトエディタを使うことで下記のメリットがある。
スクリプトエディタのメリット
・編集中のスクリプトをファイル保存しなくても実行できる
・エラー発生行やデバッグモード中の現在行を確認できる
・スクリプト実行後に行ったマウスなどGUIによる勤務時間変更等が直ちに編集中のスクリプトに反映される(ログファイルからコピーする必要が無い)
・knmsc のために新たにテキストエディタをインストールする必要が無い
スクリプトエディタのデメリット
・Win32 API のエディットコントロール機能だけを利用した簡易エディタのため、外部の汎用テキストエディタに比べると下記など編集機能が格段に劣る(「メモ帳」の編集機能と同程度)
  ・改行や全角空白・タブ等の表示機能が無い
  ・「元に戻す」が一段階しか記憶されていない
  ・折り返し表示ができない
  ・複数のスクリプトを同時に編集できない
  ・改行コードは CR+LF に限定される
注)スクリプトエディタはシフトJISで動作する。文字コードが UTF-8 のスクリプトファイルは読込時にシフトJISに変換されるが、編集後の保存時には UTF-8 に戻して保存される。

【スクリプトの構成】

knmsc のスクリプトは、下記のような機能をもつ「環境設定」と「データ作成」のコマンドで構成される
〔1〕本プログラムの環境設定(Configuration and Settings)
・フォルダの登録、画像ファイルの設定、フォントの指定
・ディスプレイへの表示、プリンタ、仮想プリンタ(PDF)、メール送信依頼などの設定
〔2〕グループやメンバー構成などの基本データ
・業務グループの定義
・各メンバーの基本情報(名前、基本勤務時間、メールアドレスなど)
〔3〕作成期間の事業所営業/休日等のデータ
・所定休日(週休、祝日、事業所休日など)
・記念日(行事)、備考(特記事項)
〔4〕作成期間の勤務時間データ
・メンバーごとの休日、勤務シフトの設定
・メンバーごとにシフトのローテーション(規則的なシフトの振分け)
・シフトごとにメンバーのローテーション(規則的なメンバーの振分け)
〔5〕個別日のデータの変更・修正
・休暇取得、代休付与・取消等
・個別日の勤務時間の変更

【スクリプトの規則】


【スクリプトコマンドに後続するパラメタの記述形式】


【スクリプト変数】


【スクリプト コマンド リファレンス】

《利用するPC環境での初期設定》

folder,user, user_folder
★利用者が knmsc に関するデータを格納・保存もしくは作業するためのユーザーフォルダの登録
user_folder : ユーザーフォルダ名をフルパスで記述
《例》folder,user,C:\user\data\勤務表
当該フォルダが無い場合、
 上位フォルダがある場合は、当該フォルダを生成する
 上位フォルダも無い場合には、上位フォルダも生成するかを確認する
 (上位フォルダを生成しない場合はプログラム実行を中止する)

folder,distribution, distr_folder
★勤務表配付用ファイルを格納するフォルダの登録
distr_folder : 勤務表などの配付用ファイルを格納するフォルダ名をフルパスで記述
《例》folder,user,C:\user\data\勤務表\dstr_files

folder,log, log_folder
★ログファイルを格納するフォルダの登録
log_folder : ログファイルを格納するフォルダ名をフルパスで記述
《例》folder,log,C:\user\data\勤務表\log_chg

image,png,bpp, bits
PNGファイル書出のときの減色を指定
bits : Indexed Color のときの bpp (bits per pixel)
《例》image,png,bpp,8

image,png,lib, library
PNGファイル書出(エンコード)のときに使用するライブラリ
library : libpng (libpng を使う場合) もしくはそれ以外の文字列(GDI+ を使う)
《例》image,png,lib,gdiplus # PNG の読み書きに GDI+ を使う
《例》image,png,lib,libpng # PNG の読みにGDI+,書込みに libpng を用いる
《注》libpng を指定した場合でもPNG読込(デコード)は GDI+ で行われる

image,png,cmp, cmplevel
PNGファイル書出のときにlibpngを用いるときのzlib圧縮レベル
cmplevel : zlib圧縮レベル(0〜9)、GDI+ でのPNG書込みでは無視される
《例》image,png,cmp,9

image,logo, filename [,left,top,width,height[,rcol,out_file]]
事業所のロゴ(ロゴマーク、ロゴタイプ)の画像ファイルの指定
filename : 画像ファイル名
left : 表示座標左(数値ではなくアスタリスク(*)は右寄せを示す)
top : 表示座標上
width : 表示幅
height : 表示高さ
rcol : 減色数
《例》image,logo,shidashiya.png,*,0,70,35
《例》image,logo,.\ourlogo.gif,625,0,125,30
《注》
・対応する画像ファイルの種類は .jpg, .gif, .png, .bmp など
filename が、パスが省略されファイル名だけの場合(\ が無い場合)は
  (1)カレントフォルダ(実行中のスクリプトのあるフォルダ)
  (2)システムフォルダ(knmsc.exe 格納フォルダ)
  (3)ユーザーフォルダ(folder,user で定義されたフォルダ)
 の順番に指定されたファイルを探す
・カレントフォルダのみ探索する場合には、カレントフォルダを示す相対パス ".\" を使い ".\logo1.jpg" などと指定する
(Windowsで「パス名」という場合は「ファイル名(ベース名+拡張子)」を含むが、上記の説明の「パス」は「パス名」のうち「ファイル名」を除く部分でフォルダを示す部分のこと)
・ロゴ画像を非表示とする場合はfilenameを含めそれ以降のパラメタを記載しない
・画像ファイルの読み込みはデフォルトでは Windows の GDI+ を用いている
rcol を指定しない場合は 256色減色
 GDI+ で rcol に256以下の数値を指定した場合は、その色数に減色する
・勤務時間バー等に使う色数は少ないので、「ロゴ」の画像の色数を減らすと出力する画像ファイルのファイルサイズを(少し)小さくできる場合があるが、ロゴを伸縮貼付けする際は HALFTONE 指定のために色数は増加してしまう

caption, x,y,height,string
キャプション(主にロゴ画像の代替)を定義する
x : X座標
y : Y座標
height : フォント高さ
string : 表示する文字列
《例》caption,610,0,18,仕出屋本舗||佃島店
・複数行を表示させる場合、改行を "||" で表す
・caption は実行コマンドではないので1箇所のみ指定可
・image,logo と併用もできるが、表示座標によっては重ね書きになる

font,general, font_name
時刻などの数字以外の文字の表示に使用する日本語フォントを指定する
font_name : フォント名
《例》font,general,Meiryo UI
font_name採用時期備考
UD デジタル 教科書体 N-RWindows10/1709
Yu Gothic UIWindows10User Interface用
Yu GothicWindows10
游ゴシックWindows10
Meiryo UIWindows8(Win7で限定採用)<デフォルト>
メイリオWindows Vista和文部は等幅,欧文部は可変幅
MS UI GothicWindows 98可変幅,画面表示用
MS PゴシックWindows 95可変幅
MS ゴシックWindows 3.1等幅

font,numbers, font_name
時刻の数字のフォント(日本語を含まず半角英数用フォントを指定可)
font_name : フォント名
《例》font,numbers,Arial

implicit,year, yyyy
日付で年を省略したとき設定される年
yyyy : 西暦年
《例》implicit,year,2019
《注》initialize_group_and_member でクリアされ未設定になる
   基本的には alloc_period より前で設定すること
   implicit,year を省略するなど、alloc_period の時点で未設定の場合は、alloc_period で指定した初日の年が設定される
   alloc_period より前に設定されているときは alloc_period 設定時に期間初日の年と一致するかのチェックが行われる
   alloc_period より後に指定したときは alloc_period で設定した期間初日とのチェックは行われない

date_style, format
年月日(曜) の表示形式を指定する
format : 書式化文字列(C言語の printf の書式に準ずる)
《例》date_style,%04d年%d月%d日(%s) # 2019年2月4日(月) <デフォルト>
《例》date_style,%04d/%d/%d(%s) # 2019/2/4(月)
《例》date_style,%04d/%02d/%02d(%s) # 2019/02/04(月)
《例》date_style,%04d-%02d-%02d(%s) # 2019-02-04(月)
《例》date_style,%04d.%02d.%02d(%s) # 2019.02.04(月)

day_of_week_style, style
曜日の表示形式
style : JapaneseEnglish
《例》day_of_week_style,Japanese # 日 月 火 水 木 金 土 <デフォルト>
《例》day_of_week_style,English # Sun Mon Tue Wed Thu Fri Sat

display,scale, scale_factor
ディスプレイモニタ(液晶モニタ(LCD)等)に表示する拡大・縮小率
scale_factor : 拡大・縮小率(%)
《例》display,scale,65
・デフォルトは 100(%)
knmsc での表示サイズは上記の scale_factor と「Windows のディスプレイ設定の拡縮率(論理dpi)」とを掛け合わせた拡縮率になる
knmsc は「高DPI」に対応しているため、縦と横のそれぞれの表示ピクセル数は、この掛け合わせた拡縮率に比例する
・WindowsノートPCの出荷時のディスプレイ設定の拡縮率(論理dpi)は、Full-WXGA(1366x768)では100%(96dpi)、Full-HD(1920x1080)では125%(120dpi)もしくは150%(144dpi)に設定されていることが多い

show_script_editor, on_off
スクリプトファイル読込後にスクリプトエディタを表示するかどうか
on_off : on 表示 もしくは off 非表示
・コマンド実行時にも表示/非表示の切り替えが行われる
・スクリプトエディタを使用せずに外部テキストエディタでスクリプト編集を行う場合には二重編集を避けるためにスクリプトエディタを非表示にしておいたほうが良い
・その時点での表示/非表示の状態はメインウィンドウのメニューで切り替えできる

place_button, 1or2, buttons
スクリプトファイル読込後にスクリプトエディタを表示するかどうか
1or2 : 1 左枠の上部 もしくは 2 右枠の上部
buttons : 表示するボタンの略号をセミコロンでつないだ文字列
    「ボタンの略号」は【上部のボタン】の表を参照
《例》place_button,1,DayP;DayN;DAPr;D1Pr;ExUS;WzUS;D1Pn;D1Pd;DsRs # 左枠 標準
《例》place_button,1,DayP;DayN;DAPr;D1Pr;ExUS;ReUS;DsSc;DsRs;StEn # 左枠 v1.03互換
《例》place_button,2,MemP;MemN;MAPr;M1Pr;M1Tx;M1ML;M1Pn;M1Pd # 右枠 標準
《例》place_button,2,MemP;MemN;MAPr;M1Pr;M1Tx;M1Pn;M1Pd # 右枠 メール無し

debug_mode, on_off
スクリプトを一行ずつ実行して一時停止をするモードを切り替える
on_off : on 開始 もしくは off 解除
・スクリプト内の一部分にデバッグモードを適用する際に用いる

《プリンタ設定》

printer,default, printer_name
knmsc でのデフォルトプリンタの指定
printer_name : プリンタ名
《例》printer,default,Brother MFC-L3770CDW Printer
printer_name で指定できる文字列は、
  default:OS(Windows)に設定されている「通常使うプリンター」
    ・Windows10 の初期設定では最後に使用したプリンターが通常使うプリンターとして設定されている
    ・Windows 8.1 までは「通常使うプリンター」は固定されている
  実(物理)プリンタ名(上記の《例》など)
  仮想プリンタ名(CubePDF, PrimoPDF など)
 のいずれか
《省略時》knmsc 起動時に「通常使うプリンター」とされているプリンタが設定される

printer,pdf, vprt_name
仮想プリンタ(紙に印刷するかわりにPDFを出力)の指定
vprt_name : 仮想プリンタ
《例》printer,pdf,CubePDF
《省略時》CubePDF, PrimoPDF, Microsoft Print to PDF のいずれかの仮想プリンタがインストールされている場合はこの優先順位で設定される
  優先順位を変更したり、上記以外の仮想プリンタを指定する場合は本コマンドで指定すること

printer,scale, scale_factor
印刷データの拡大率
scale_factor : 印刷データの拡大率(%)
《例》printer,scale,850
《注》knmsc は入力データの画素密度が 600dpi 相当のプリンタへの拡大率を想定している
  例えば入力データの画素密度の仕様が1200dpiのプリンタに対して knmsc はAPI(GDI)へのデータの値を2倍する
  ※プリンタの入力データの画素密度(dpi)は印刷時の(出力)解像度(dpi)とは異なる
   プリンタの入力データの画素密度は印刷設定⇒詳細設定⇒印刷品質にあたる

printer,margin, left_margin, top_margin
印刷時の左側と上側余白
left_margin : 印刷時の左側余白(600dpi相当のpixel単位)<デフォルト=283>
top_margin : 印刷時の上側余白(600dpi相当のpixel単位)<デフォルト=283>
《例》printer,margin,283,283
《注》600dpi で 283pixel の余白は 283/600*25.4=11.98mm に相当
  (printer,scale の影響は受けない)

printer,new_page, np
図Aもしくは図B の印刷時の改ページの有無
np : 数字
 0:改ページを行わない(1ページに収まらない部分は印刷されない)<デフォルト>
 1:図Aもしくは図Bがそのページに収まらない場合は改ページを行う
《注》図Cや表(Table)の部分では改ページは行われない(そのページに収まらない部分は印刷されない)

printer,orientation, pl
用紙の向き
pl : 用紙の向き 縦(PORTRAIT)=1 横(LANDSCAPE)=2
《例》printer,orientation,1
《注》プリンタによってはここでの設定は無視される
   その場合は、「プリンタを選択して印刷」の詳細で用紙の向きを指定する

emf,scale, scale_factor
拡張メタファイル(EMF)出力の拡大率
scale_factor :拡大率(%)
《例》emf,scale,100
《注》拡張メタファイル(EMF)はベクトル画像のため、拡縮による画質の劣化は小さいが、整数値の丸め誤差による分解能の影響が顕著な場合は拡大率を大きくすると改善される可能性がある

print_item, num, item1[, item2[, item3[, item4...]]]
印刷項目の指定(ここでの項目はプリンタ(PDFを含む)印刷用でディスプレイへの表示はできない)
num : 1 (左枠)もしくは 2 (右枠)
  ・メニュー⇒印刷 と「印刷」ボタンに対応
item1 : 1番目(最上段)に印刷する項目(A(図A)かB(図B))
item2 : 2番目(第2段)に印刷する項目(C(図C),表ID のいずれか)
item? : ?番目(第?段)に印刷する項目(表ID)
  ・item?A(図A),B(図B),C(図C),表ID のいずれかだが、現状では
   ・num=1 では item1A に固定
   ・num=2 では item1B に固定し、item2以降を指定しないこと
《例》print_item,1,A,C # 初期状態
《例》print_item,1,A,T1,T2 # 項目2と項目3には表(table)を印刷
《例》print_item,2,B # 初期状態(固定)

table, id, create, row, col
表(table) を新たに生成する
(表(table)は print_item から参照されディスプレイには表示できない)
id : 表ID (任意の英数文字列)
row : 行数
col : 列数
《例》table,T1,create,6,10 # 行(row)×列(column)の表T1を作成

table, id, pos, x, y
表(table) の左上の位置(座標)をmm単位で指定する
id : 表ID (任意の英数文字列)
x : 表の左側余裕距離(mm)
y : 表の上側余裕距離(mm)
《例》table,T1,pos,0,4

table, id, height, h1, h2, ....
表(table) の各行ごとの高さをmm単位で指定する
id : 表ID (任意の英数文字列)
h1 : 第1行の高さ(mm)
h2 : 第2行の高さ(mm)
《例》table,T1,height,8,18,8,18,8,18

table, id, width, w1, w2, ....
表(table) の各列の幅をmm単位で指定する
id : 表ID (任意の英数文字列)
w1 : 第1列の幅(mm)
w2 : 第2列の幅(mm)
《例》table,T1,width,18,18,18,18,18,18,18,18,18,18

table, id, text, n, string, string,....
表(table) 第n行の各列に表示する文字列を指定する
id : 表ID (任意の英数文字列)
n : 行番号
string : 文字列
 ・文字列中に%で挟まれた定義済み変数を用いることができる
  %m5n% は5番目のmemberコマンドで定義された[メンバー名]の文字列(n)に展開
  %m5d_a% は5番目のmemberコマンドで定義されたメンバー(m)の当該日(d_)の勤務状態の文字列(a)に展開
《例》table,T1,text,1,%m1d_n%,%m+d_n%,%m+d_n%,%m+d_n%,%m+d_n%,%m+d_n%,%m+d_n%,%m+d_n%,%m+d_n%,%m+d_n% #第1行の各列の文字列
《例》table,T1,text,2,%m1d_a%,%m2d_a%,%m3d_a%,%m4d_a%,%m5d_a%,%m6d_a%,%m7d_a%,%m8d_a%,%m9d_a%,%m10d_a% #第2行の各列の文字列
《例》table,T2,text,2,20:00〜21:00,時間外予約 %d_r1% 様

《本プログラムから起動させるアプリのパス名の指定》

apps,text_editor, path
スクリプトを編集するテキストエディタの指定
path : テキストエディタの実行ファイル(.exe)のパス
《例》apps,text_editor,C:\Program Files (x86)\Yokka\NoEditor\NoEditor.exe # 64bit版Windows
《例》apps,text_editor,C:\Program Files\Yokka\NoEditor\NoEditor.exe # 32bit版Windows
《例》apps,text_editor,notepad.exe # Windows付属の「メモ帳」を使う場合
《注》デフォルト(起動時の初期値)では拡張子.txt に関連付けされている実行ファイル(.exe)のパスが設定されているので、適切に関連付けされていればとくに設定する必要はなく省略できる

apps,pdftk, path
PDFファイルのページ分割ツール(PDFtk™) の指定
path : pdftk.exe のパス
《例》apps,pdftk,pdftk
《注》PDFtk™を既定の手順でインストールした場合は PATH が通されているのでフルパスで記述する必要はない
  パス(PATH)が通っていない場合は、下記のように pdftk.exe をインストールしたフォルダをフルパスで指定
《例》apps,pdftk,C:\Program Files (x86)\PDFtk\bin\pdftk.exe # 64bit版 Windows
《例》apps,pdftk,C:\Program Files\PDFtk\bin\pdftk.exe # 32bit版 Windows

《勤務時間バーの表示形式》

disp,display, disp_type
ディスプレイモニタへの勤務時間バーの表示形式
disp_type : 表示形式
 ・塗りつぶし方法
  +1 (grayscale)グレイスケール(256階調)で塗りつぶし
  +2 (color)カラーで塗りつぶし
  +4 (hatch)ハッチングで塗りつぶし ←未実装
 ・輪郭線(border)
  +8 輪郭線を描画
  +0 輪郭線を描画しない
 ・文字の背景
  +16 文字の背景を白で塗りつぶし(OPAQUE)
  +0 文字の背景を塗りつぶさない(透過 TRANSPARENT)
《例》disp,display,26 # 2+8+16 # カラー(デフォルト)
《例》disp,display,25 # 1+8+16 # グレイスケール
《例》disp,display,2 # 2+0+0 # カラー、 輪郭線を描画しない、背景透過

disp,pdf, disp_type
PDF出力するときの勤務時間バーの表示形式
disp_type : 表示形式
《例》disp,pdf,26 # 2+8+16 # カラー(デフォルト)

disp,printer, disp_type
プリンタへ出力するときの勤務時間バーの表示形式
disp_type : 表示形式
《例》disp,printer,26 # 2+8+16 # カラープリンタ(デフォルト)
《例》disp,printer,25 # 1+8+16 # モノクロプリンタ

《メール送信関連》

mail,dll, method
knmsc からメールクライアント(メールソフト)にメール送信を依頼する方法の選択
method=none : ShellExecute を用いる(添付ファイル不可)
method=mapi : 簡易MAPI(Simple Messaging API)を用いる
《例》mail,dll,mapi

mail,attach, item
メールクライアントに送信を依頼するメールに添付する項目を指定する
item=png : PNG画像ファイルを添付する
《例》mail,attach,png
《注》MAPIを指定した場合に添付するが、MAPIを指定しない場合でもPNGファイルを生成する

text_data_header, a_b, subject, body
テキスト出力の文頭に挿入される文字列を定義
a_b : A もしくは B
  A は枠Aの一日分、B は枠Bの一人分の「テキスト出力」や「メール送信」に適用
subject : 件名の文字列
body : 本文の文頭に挿入される文字列
  「メール送信」もしくは「テキスト出力(スペース区切り)」で文頭に挿入される文字列を定義する。
A の場合、subjectbody の中で、%d_n% は「この日」の日付に置換される
B の場合、subjectbody の中で、%m_n% は「このひと」のメンバー名に置換される
body での改行は "||" で表す
《例》text_data_header,A,明日の勤務予定表,各位|||| 明日 %d_n% の勤務予定表を送付致します。||ご確認願います。||||勤務担当||||
《例》text_data_header,B,来月度の勤務予定表(%m_n%様),%m_n%様|||| %m_n%様の来月度の勤務予定表を送付致します。||ご確認願います。||||勤務担当||||

《その他の設定》

color_sample_url, title, url
色見本のWebページの題名とURL
title : サイトの名称
url : URL
《例》color_sample_url,原色大辞典,https://www.colordic.org/
《例》color_sample_url,色見本と配色サイト,https://www.color-sample.com/
《例》color_sample_url,色見本(UIC),https://uic.jp/color/

draw_param,hours, h1, h2, mm
時刻の表示範囲と刻みの指定
h1 : 左端時刻(時)
h2 : 右端時刻(時)
mm : 刻み(分)
・刻み(分)は60の約数(割り切る整数)にすること(5,6,10,12,15,20,30 など)
・刻み(分)は勤務時間バーの分解能や図Cの分解能になる
《注》initialize_group_and_member 以降に変更しないこと
《例》draw_param,hours,6,21,15

draw_param,hpsvd, svd
HPower(マンパワー、図C)の表示形式
svd : インデックス番号
  0:供給&需要 (Supply and Demand)
  1:差分 (Supply - Demand)
・合計マンパワーの割当量(供給)と要求量(需要)の関係
《例》draw_param,hpsvd,0

《基本情報入力》

exit [, filename]
スクリプト実行を終了する(終了後に作図・表示更新する)
filename : 後続するユーザースクリプトのファイル名
《例》exit
《例》exit,C:\user\data\勤務表\my_script02.kss
《注》filename を指定したときは、この時点で作図更新しない
《注》filename は自身のファイル名を指定しないこと(無限ループになる可能性を回避するため)

initialize_group_and_member [,max_grp[,max_sft[,max_mem[,max_gcmb[,max_hpd[,max_actv]]]]]]
★グループやメンバーなどの情報格納領域を確保し初期化する
max_grp : グループ数の上限
max_sft : シフト数の上限
max_mem : メンバー数の上限
max_gcmb : グループコンボ数の上限
max_hpd : マンパワー要求区間数の上限
max_actv : 活動項目数の上限
《例》initialize_group_and_member # デフォルト設定値を使う
《例》initialize_group_and_member,100,100,100,20,50,100
《注》上限値を設定する場合は、余裕をもって多めに確保する

group, name[;alias], color, t-v
★グループ(担当業務)情報
name : [グループ名]
alias : [グループ別名](半角英数字)
color : [色コード]
t-v : [時刻vs値]
namealias の間は半角セミコロン(;)
 alias は半角セミコロン(;)ごと省略してもよいが、省略すると group_combo で使えない
 半角セミコロン(;)の前後には空白を入れないこと
t-v は区切り時刻と合計マンパワー要求値を記述
 合計マンパワー指数:グループがある時間帯に必要とする[マンパワー指数]の合計(合計2.5人分が必要な場合は "2.5" )
《例》group,厨房;KTN,87cefa,<7:00>0.5<10:00>2<12:00>0.5<13:00>2<15:00>1<17:00>0.5<19:15>0

group_combo, expression
グループコンボ (Group Combination) の定義
expression : [グループ別名]、+、−、係数で表記
《注》グループコンボ:複数のグループを重み係数をかけて合算(一次結合・線型和)したもの
《例》group_combo,KTN+WNK
《例》group_combo,0.5KTN+0.5WNK
《例》group_combo,ALL
《例》group_combo,ALL-MG

shift_type, name, tset
勤務形態を [勤務時間セット] で定義する
name : [勤務形態名](識別記号で、ユニークな(唯一の)文字列であること)
tset : [勤務時間セット]
・「勤務形態の定義」は必須ではないが、メンバー基本情報の定義を簡略化するために用いる
day_rotationmember_rotation ではおもに [勤務形態名] で設定するため shift_type での定義が必要になる
《例》shift_type,1A, 7:00/8.0H/12:15/60

member, name[;alias], tset, grp=hp[, address]
★メンバー基本情報
name : [メンバー名]
alias : [メンバー別名]
tset : [勤務時間セット] もしくは [勤務形態名]
grp : 所属するグループの[グループ別名]
hp : [マンパワー指数]
address : [メールアドレス]
・[メンバー名]の先頭に * を付けるとテンポラリーメンバー(一時的なメンバー)
《例》member,戸塚;ttk,7:00/8.0H/12:15/60,KTN=1.0,戸塚さん <totuk869@example.com>
《例》member,*品川;sng,5B,NKT=1.2, shinariver105@example.org
《注》member コマンドでは複数のセグメント(時区間)の複数のグループ設定はできない

activity, id, title, title
活動タイムラインの表題
id:ID(任意の整数の識別子)
title : 活動タイムラインの表題
《注》ID(識別子)は任意の整数で、連番である必要はない
《例》activity,1,title,仕出業務

activity, id, item, name, t1-t2, color
活動タイムラインに表示する活動項目
id:ID(任意の整数の識別子)
name : 活動名
t1 : 開始[時刻](hh:mm)
t2 : 終了[時刻](hh:mm)
color : [色コード](6桁の16進数(rrggbb))
《例》activity,1,item,仕込,9:00-12:00,9acd32

activity, id, member, name [, name [, name],....]
指定メンバーの枠Bに表示する活動タイムラインをIDで指定する
idactivity, id, item で定義した ID(識別子)
name : [メンバー名] もしくは [メンバー別名]
《注》本コマンドで定義されないメンバーは ID = 1 の活動タイムラインが表示される
《例》activity,3,member,大久保,prs

activity, id, date, date [, date [, date],....]
指定日の枠Aに表示する活動タイムラインをIDで指定する
idactivity, id, item で定義した ID(識別子)
date : [日付] もしくは [期間] もしくは [曜日]
《注》本コマンドで定義されない日は ID = 1 の活動タイムラインが表示される
《注》activity コマンドのうち第2パラメタが date に限り、作成期間が定義される alloc_period 以降に記述すること
《例》activity,2,date,2/26-2/27,Fri,3/13

《期間(毎月)ごとに記述する条件》

alloc_period, day1, day2
★勤務表を作成する期間(年月日)のメモリ領域を確保する
day1 : 期間の最初の日の[日付](年月日)
day2 : 期間の最後の日の[日付](年月日)
《例》alloc_period,2019/2/21,2019/3/20

holiday,weekly, dow
広義の所定休日とする曜日(週休)を定める
dow : [曜日]
《例》holiday,weekly,Sun
《例》holiday,weekly,土曜日
《注》広義の所定休日=法定休日+狭義の所定休日

holiday, date, name [,flag]
広義の所定休日とする祝日や事業所の休日を定める
date : 休日とする[日付](年月日)
name : 休日の名称
flag : 祝日だが事業所の所定出勤日とする場合に 1
《例》holiday,2019/3/21,春分の日(出勤日),1
《例》holiday,2019/7/15,海の日
《例》holiday,2019/6/20,創立記念日
《注》作成期間外の日は無視するので、とりあえず一年分程度は記述しておく

topic, date, name
勤務表に表示する記念日等を指定(勤務時間には影響しない)
date : [日付](年月日)
name : その日の名称
《例》topic,2019/4/10,駅弁の日

remark, num, date, remark
各日に対する備考(特記事項)を定義
num : 備考番号(デフォルトは 1,2,3,4 のいずれか)
date : [日付] もしくは [期間] もしくは [曜日]
remark:備考に格納する文字列
《例》remark,1,all,通常営業
《例》remark,1,3/13-3/14,(予約)営業
《例》remark,2,水,定時退社
《例》remark,3,金,18:00〜反省会
《注》備考は table,,text での %d_r1% などで呼出しできる

remarks_of_day, date, remark1, remark2, remark3, remark4
各日に対する全ての備考(特記事項)を定義
date : [日付] もしくは [期間] もしくは [曜日]
remark1:備考1の文字列
remark2:備考2の文字列
remark3:備考3の文字列
remark4:備考4の文字列
《例》remarks_of_day,all,通常営業,,,
《例》remarks_of_day,3/13,予約営業,13:00-,石塚様,Aコース

apply_regular_hours,all
★期間の各日に member で定めた基本出勤退勤時刻を適用する

change_hrs, member, day_or_period, time_or_attr [, day_or_period, time_or_attr [,.....]]
個別のメンバーごとに出退勤時刻もしくは勤務日属性(休日、労働日など)を設定・変更する
member : [メンバー名] もしくは "all"
day_or_period : [日付] もしくは [期間] もしくは [曜日] もしくは []
time_or_attr : [勤務形態名] もしくは [勤務時間セット] もしくは 始業[時刻]-終業[時刻] もしくは [勤務日属性]
《例》change_hrs,浜松,2019/2/27,10:00-19:00 # 単独日の始業&終業時刻変更
《例》change_hrs,浜松,2019/3/13-3/14,off # 期間で年次休暇
《例》change_hrs,品川,w1,doff # 第1週を全て休日
《例》change_hrs,品川,水,doff # 毎週水曜日を休日
《例》change_hrs,all,水,doff # 全員毎週水曜日を休日
《例》change_hrs,田町,Mon,7:30- # 毎週月曜日の変更(終業時刻は変更しない)
《例》change_hrs,田町,Tue,8:00 # 毎週火曜日の変更(終業時刻も変更)
《例》change_hrs,田町,水,4B # 毎週水曜日のシフトを変更
《例》change_hrs,田町,木曜,9:00/8H # 毎週木曜日の勤務時間を変更
《例》change_hrs,田町,Friday,off # 毎週金曜日は休暇
《例》change_hrs,戸塚,w0,10:00-19:00 # 第0週の変更
《例》change_hrs,戸塚,w1,9:00-18:00 # 第1週の変更
《例》change_hrs,戸塚,w2,1A,w3,2A,w4,3A # 第2、第3、第4週のシフトを変更
《例》change_hrs,鶴見,土,on # 休日出勤(基本勤務時間セット)
《例》change_hrs,鶴見,土,3A # 休日出勤(勤務時間セット=3A)
《例》change_hrs,鶴見,土,don # 土は通常出勤(基本勤務時間セット)
《例》change_hrs,鶴見,土,don,土,3A # 土は通常出勤(勤務時間セット=3A)

change_hrs_ed, member, period, time_or_attr [, time_or_attr [, time_or_attr, [,.....]]]
change_hrs と同様だが、期間中の全ての日の time_or_attr を個別(each day)に設定する
member : [メンバー名] もしくは "all"
period : [日付] もしくは [期間] もしくは [曜日] もしくは []
time_or_attr : [勤務形態名] もしくは [勤務時間セット] もしくは 始業[時刻]-終業[時刻] もしくは [勤務日属性]
《注》本コマンドはおもにシフトデータ(.csv)のインポートに利用されることを想定している
《注》期間が単独日の場合は change_hrs と同じになる
《注》期間中は休日も含めて全ての日の勤務時間や属性等を指定する必要がある
   そのままの状態を維持する日は * を指定する
《例》change_hrs_ed,田端,3/8-3/15,1A,*,*,2A,3A,4A,5A,off
《例》change_hrs_ed,田端,2/21-2/25,1B,2B,*,*,3B
《注》上記の2行は下記のように1行で記述可能(但し期間日数分のパラメタ記載が必要)
《例》change_hrs_ed,田端,3/8-3/15,1A,*,*,2A,3A,4A,5A,off,2/21-2/25,1B,2B,*,*,3B

day_rotation, member, period, origin, apply, interval, duration, s-pattern
メンバーごとにシフトのローテーション
member : [メンバー名]
period : ローテーションを適用する[期間]
origin : ローテーションの起点
  ev : 期間の初日(平日、休日を問わず)
  wp : 期間の最初の週日(月〜土)
  wk : 期間の最初の週日(月〜金)
  bz : 期間の最初の事業所営業日
  xh : 期間の最初の平日
  od : 期間の最初の出勤日(休暇を除く)
apply : ロ−テーションの適用日
  ev : every days 毎日(休日を含み全ての日、但し休日の出勤にはしない)
  wp : weekdays 週日(月〜土)
  wk : weekdays 週日(月〜金)
  bz : business days 事業所営業日(一般の休日と事業所休日を除く日)
  xh : except holidays(メンバーごとの休日を除く日)
  od : on duty 勤務日(メンバーごとの休日と休暇日を除く)
  ・originapply は通常は同じ
  ・bzod は既に年休を取得した日のローテーション適用が異なる
interval : ローテーション繰返しの間隔(シフト数)
duration : 1シフトの継続日数
s-pattern : [勤務形態名](シフト名)もしくは [勤務日属性]をハイフン(-)でつなぐ
《例》day_rotation,鶴見,2019/2/25-3/15,ev,ev,4,1,1A-2A-3A-4B
《例》day_rotation,川崎,2019/2/25-3/15,wk,wk,3,1,2B-3B-4B
《例》day_rotation,大井,2019/2/25-3/15,wk,wk,5,1,4B-5B-off-6A-3A
《注》'ev,ev,7,1' や 'wk,wk,5,1' だと1週間周期になるが曜日は期間初日に依存する
《注》'ev,ev,7,2' や 'wk,wk,5,2' だと2日連続同一シフトで2週間周期になるが、週は7日で奇数のため一週目と二週目では曜日パターンがずれることになる

member_rotation, period, origin, apply, interval, duration, shift, m-pattern
シフトごとにメンバーのローテーション
period : ローテーションを適用する[期間]
origin : ローテーションの起点
  ev : 期間の初日(平日、休日を問わず)
  wp : 期間の最初の週日(月〜土)
  wk : 期間の最初の週日(月〜金)
  bz : 期間の最初の営業日
  [曜日]:日〜土 もしくは Sun〜Sat
apply : ロ−テーションの適用日
  ev : every days 毎日(休日を含み全ての日、但し休日の出勤にはしない)
  wp : weekdays 週日(月〜土)
  wk : weekdays 週日(月〜金)
  bz : business days 事業所営業日(一般の休日と事業所休日を除く日)
  [曜日]:日〜土 もしくは Sun〜Sat
interval : ローテーション繰返しの間隔(シフト数)
duration : 1メンバーの継続日数(数字もしくは "w"(週末まで))
shift : [勤務形態名](シフト名)もしくは[勤務日属性]
m-pattern : [メンバー名]をカンマ(,)でつなぐ
《例》member_rotation,all,wk,wk,6,w,1A,品川,田町,浜松,品川,田町
《例》member_rotation,all,Fri,Fri,5,1,doff,浜松,大森,品川,田町,大森

day_off_relief, condition, memberA, memberB[;mask] [, memberC[;mask][, ......]]
休みのときの代替者の指定
condition : 適用条件
  any : いかなる場合でも
  earlier: memberA の始業時刻がmemberBより早い場合
  later : memberA の終業時刻がmemberBより遅い場合
memberA : 休み(休暇取得、個人休日、代休)を取得するひと
memberB : 代替候補者
mask : 引き継ぐ項目
   0 : 何も引き継がない
  +1 : 始業時刻を引き継ぐ
  +2 : 終業時刻を引き継ぐ
  +4 : 休憩開始時刻を引き継ぐ
  +8 : 休憩時間を引き継ぐ
  15 : 全て引き継ぐ(maskを省略)
  17(1+16) : 始業時刻を引き継ぐが実働時間は保持(+16)
memberC : memberB が休みの場合の予備候補者
・memberA が休み(休暇取得、個人休日、代休)の場合は、memberB の勤務時間を memberA の勤務時間に変更する
・memberB がもともと休みのときは次候補 memberC に割当てる
《例》day_off_relief,earlier,秋葉,上野;7
《例》day_off_relief,earlier,秋葉,上野,赤羽

change_group, member, period, group
指定期間だけ所属グループを変更
member : [メンバー名]
period : [期間]
group : [グループ名] もしくは [グループ別名] もしくは [時刻vsグループ]
group が [時刻vsグループ] の場合は、1日の勤務時間を複数のセグメント(時区間)に分けて、それぞれのセグメントで異なるグループを定義する
《例》change_group,浜松,2019/3/1-3/5,盛付
《例》change_group,戸塚,2019/2/21,SRV
《例》change_group,浜松,all,AGB<12:30>焼方<15:00>煮方
《例》change_group,浜松,2/22,盛付<11:00>煮方<12:30>揚場<15:00>雑用
《注》[グループ名]と<[時刻]>の間にはスペースを入れないこと

change_color, member, period, color
指定期間だけ勤務時間バーの表示色を変更
member : [メンバー名]
period : [期間]
color : [色コード] もしくは [グループ名]
《注》複数セグメントでも全て同じ色に変更
《例》change_color,浜松,2019/3/7-3/11,f4a460 # sandybrown
《例》change_color,浜松,2019/3/7-3/11,営業 # 他グループの色コードを適用


【機能の活用例】

change_hrs による休暇等のメール申請
翌月の勤務予定を作成時期にメンバー(従業員)から休暇取得や勤務時間変更等の予定をメールにより申告してもらい、その際に change_hrs の書式に従って発信メール本文に記載してもらえば、勤務担当者は change_hrs の部分をスクリプトファイルにコピー&貼付けて手間を省く
メールによる勤務予定の相互確認
作成した翌月の勤務予定表を【メール送信依頼機能】でメンバー(従業員)に送信し、確認してもらい、変更・修正が必要な場合は返信メール本文に前項の change_hrs の書式で回答してもらう
(ワークフローシステムを導入していない小規模事業所での古くからのeメール活用例)
day_rotationmember_rotation
シフト勤務での予定が規則的に振り分けられる場合に利用する。
個別メンバーごとにシフトを規則的に振分ける場合には day_rotation を用い、
シフトごとにメンバーを規則的に振分ける場合には member_rotation を用いる。
(個別メンバーごとにシフトを規則的でなく振分ける場合は change_hrs_ed を用いる)
シフト表から member_rotation データ作成
各シフトへの配置人員数が決まっており、週ごとに各シフトへメンバーを配置するようなシフト表を表計算シートで
シフト0週1週2週3週4週
1A品川田町浜松品川田町
2A田町品川田町浜松品川
3A浜松浜松品川田町浜松
大宮浦和川口浦和大宮
(※シフト1A,2Aには1名ずつ、3Aには2名を配置する例)
のように作成されている場合、シートの左側にセルを挿入する
#w0w1w2w3w4
member_rotationallwkwk6w1A品川田町浜松品川田町
member_rotationallwkwk6w2A田町品川田町浜松品川
member_rotationallwkwk6w3A浜松浜松品川田町浜松
member_rotationallwkwk6w3A大宮浦和川口浦和大宮
これを表計算ソフトから .csv 形式でファイル出力すれば、下記のスクリプトコマンドが得られる
# , , , , , , ,w0 ,w1 ,w2 ,w3 ,w4
member_rotation,all,wk,wk,6,w,1A,品川,田町,浜松,品川,田町
member_rotation,all,wk,wk,6,w,2A,田町,品川,田町,浜松,品川
member_rotation,all,wk,wk,6,w,3A,浜松,浜松,品川,田町,浜松
member_rotation,all,wk,wk,6,w,3A,大宮,浦和,川口,浦和,大宮
(表計算ソフトからクリップボードへは一般にタブ区切りでコピーされるので、テキストエディタで編集中のスクリプトに貼付けてからテキストエディタの置換機能でタブをカンマに一括置換する方法もある)
シフト表から change_hrs_ed データ作成
個別メンバーの日毎のシフトが一行に記載されている表計算シートを .csv 形式でファイル出力すれば、change_hrs_ed のデータへの変換は容易

【本プログラムのインストール】


【本プログラムのアップデート(更新)】


【本プログラムのアンインストール】


【本プログラムの起動方法】

下記のいずれか

【本プログラムとともに使用すると便利な外部ソフト】

本プログラムと一緒に使用すると便利なソフト(主にフリーソフト)の例を下表に記す。
とくにテキストエディタはこれらのほかにも良質なフリーソフト(無料ソフト=フリーウェア)が多くあると思われる。
これらのソフトを使用しなくても本プログラム(knmsc)を使うことはできるが、下表のソフトなどで knmsc の機能を拡張できる。また、これらのソフトのインストールパスをスクリプトに記載することにより、knmsc から起動できるものもある。
下表は本プログラムの作者が使用した経験のあるソフトだけを記載している。
あくまで使用経験が多少あるだけで、安全性や信頼性を担保しているわけではなく、下表のソフトをインストールや使用したことによるいかなる損害も本プログラムの作者は一切の責任を負わない。

テキスト
エディタ
テキストファイル(文字情報のみのファイル)を作成、編集、保存するためのソフトウェア  窓の杜  Vector  freesoft
Mery高DPIに対応している(Ver 2.6.7以降)
Unicode対応(デフォルト設定での文字コードは UTF-8)なのでEmojiなども出力できてしまう
knmscスクリプト(.kss)は Shift_JIS(CP932)非対応文字(Emojiなど)には対応できない)
knmsc のスクリプト編集に使うためには、
ツール(T)>オプション(O)>基本>既定のエンコード(L): で「UTF-8(BOM無し)⇒日本語(シフトJIS)」にしておいたほうがよい
ツール(T)>オプション(O)>記号 で「□タブ表示(T)」と「□全角空白表示(D)」にもチェックして有効にしておいたほうがよい
NoEditor読込や書込ではUnicode(UTF-8など)等にも対応しているが、編集時に Shift_JIS(CP932) に変換される
サクラエディタUnicode版とANSI版があるが、Shift_JIS使用に限定するならANSI版のほうがよい
メモ帳
(Notepad)
Windows 1.0 から標準で付属しているテキストエディタ
機能が少なく使い易くもないがインストール不要で使える
半角スペース、全角スペース、タブを表示では判別できないため注意
仮想
プリンタ
紙に印刷するかわりにPDFファイルを出力
CubePDFPDFのファイルサイズもコンパクト
Microsoft .NET Framework 3.5 以降を必要とする
(Win7では3.5, Win8では4.5, Win10では4.6以降が標準搭載されている)
PrimoPDF™
4.1
2009年にリリースされ実績がある
出力PDFのバージョンは古い(v1.3-1.5)が、PDFのファイルサイズが比較的小さい
Microsoft .NET Framework 2.0 を必要とする
(Windows10/8.1 ではデフォルトで 2.0 は有効になっていないので有効化が必要)
Microsoft
Print to PDF
Windows10に標準搭載
ページ数が少ないと、出力するPDFファイルサイズが他に比べ各段に大きい
PDF
ツール
複数のページのPDFファイルを1ページごとに分割するために使用
PDFtk™
(the pdf toolkit™)
コマンドラインに対応している
knmsc から分割するファイルや生成するファイルを指定して起動できる


【本プログラムで利用しているオープンソースソフトウェア】

knmsc.exe のビルドでは、下記のオープンソースソフトウェアの一部をソースコードに埋め込む、もしくはスタティックライブラリを(静的)リンクしている。

名称ライセンス形式開発者knmscでの用途利用形態
libguess
(Gauche)
BSD-3-ClausepermissiveShiro KawaiSJIS/UTF-8判定ソースコード部分埋込み
libpnglibpng LicensepermissiveGuy Eric Schalnat,
Andreas Dilger,
Glenn Randers-Pehrson, et al.
PNG出力スタティックライブラリ
zlibzlib LicensepermissiveJean-loup Gailly
Mark Adler
libpng で使用スタティックライブラリ

・個々のライセンス条項は LICENSE_oss.txt を参照のこと
libpng/zlib の使用についてknmsc は画像ファイルの読み書き(ロゴ画像の読込や図A、BなどのPNG画像出力)にデフォルトで GDI+(WindowsXP以降に標準搭載DLL)を使っているが、PNG画像出力に関し GDI+ は圧縮レベルを指定できないなどで出力するPNGのファイルサイズが大きくなるため、PNG画像出力(エンコード)に libpng の使用を選択できるようにしている(コマンド "image,png,lib,libpng")。なお libpng を指定してもPNG画像の読込(デコード)は GDI+ を使う。


【本プログラムについて】

本プログラムは Win32 API を用いた 32bitアプリケーションです。
Microsoft Visual Studio Express 2017 for Windows Desktop に添付されている
 ・rc.exe (Microsoft ® Windows ® Resource Compiler)
 ・cl.exe (Microsoft ® C/C++ Optimizing Compiler & Incremental Linker)
 ・mt.exe (Microsoft ® Manifest Tool)
 ・Windows SDK のヘッダファイル(.h)とインポートライブラリ(.lib)
を使ってビルドしております。MFC や .NET Framework などのクラスライブラリ/フレームワークは使っておりません。
Win32 API のほかには画像ファイルの読み書きに GDI+ を使っているだけなので Windows XP 以降のデスクトップ環境で動作するはずです。
(当然ですが、64bit Windows でも WOW64 で問題なく動作します。)
なお、実際の動作確認は Windows 10 (64bit) だけで、それ以外の環境では行っておりません。
※注:上記での「Windows デスクトップアプリケーション」とは UWP (Universal Windows Platform) に対比させた呼称で「Windows PC 向けの従来型アプリケーション」のことを指します。Notebook PC に対する Desktop PC用という意味ではありません。もちろん Notebook PC でも動作します。
※注:本プログラムは文字列に関してANSI版の関数を用いております(_UNICODE ではなく _MBCS(Multibyte Character Set)でコンパイル)。よって、パス名(フォルダ名+ファイル名)やスクリプト中でいわゆるShift_JIS非対応文字(Unicode にはあるが JIS X 0208 などには無い文字で、具体的には「鷗」「𠮟」「蔣」「圳」「你」「䅣」など)は使えません。(似た文字の「鴎」「叱」「蒋」などは文字集合 JIS X 0208 にあるので ANSI(日本では Shift_JIS, CP932) で使えます。)

【著作権および免責事項】


【更新履歴】

1.04 (2020/05/16)
・スクリプトウィザード機能を追加した
  ・スクリプトウィザードに関する説明書「スタートガイド」のファイル "knmsc_tutor.htm" をインストールアーカイブに追加
・メインウィンドウ上部のボタンの項目の並びと選択をカスタマイズ可能とした
  ・それに伴いデフォルトの表示ボタンを変更した
  ・カスタマイズのスクリプトコマンド place_button の追加
・メインウィンドウ上部のメニューを変更
  ・「スクリプト」のサブメニュー並びを変更し、「ウィザード」「ファイル保存」追加
  ・「図出力」にサブメニュー「スクリーンショット」追加
  ・「表示」にサブメニュー「表示拡縮」「始終独立⇒連動」追加
  ・「ヘルプ」にサブメニュー「スタートガイド(入門書)」追加
1.03 (2020/01/20)
・スクリプトエディタ機能を追加した
・スクリプトエディタ機能の追加に伴い、メインウィンドウ上部のボタンの表示を変更した
  「Script実行」⇒「Script読込」
  「Script再実行」⇒「Script再読込」
 同様に、上記のボタンのツールチップ表記やメニューの表示も変更した
・スクリプトコマンドに show_script_editor と debug_mode を追加した
1.02 (2019/12/22)
・PNG画像出力(エンコード)に従来のGDI+のほかに libpng/zlib を使用できるようにした
 これに伴い、コマンド "image,png,lib" と "image,png,cmp" を追加
・"implicit,year" コマンド省略時に、起動当日の西暦年ではなく、alloc_period で指定した作成期間の西暦年を適用するようにした
・group コマンドで第3パラメタ [時刻vs値] が指定されていないときに発生していた異常終了を回避するようにした
・勤務時間バーのマウスドラッグによる始業・終業時刻変更で前日もしくは翌日の勤務分が当日に反映された部分の変更も可能にした
1.01 (2019/11/01)
・複数の活動タイムラインを定義できるようにした
 (activity コマンドに ID パラメタを設定し、member と date パラメタを追加)
・閉店時間が無いなど24時間操業に対応できるように、前日の 24:00〜47:59 の勤務分が当日の 0:00〜23:59、翌日の 0:00〜23:59 の勤務分が当日の 24:00〜47:59 にも勤務時間バー表示されるようにした
・メニューに「表示時刻範囲の変更」を追加
・勤務時間バーが表示時刻範囲を超えて表示されるバグを修正
・スクリプトファイルの文字コード(Shift_JIS or UTF-8)判別に libguess (3-Clause BSD License) のソースコードの一部を改変して利用した
1.00 (2019/10/02)
・初版公開

【メールアドレス】 knmsc.kinj@gmail.com

Copyright © 2019-2020 Kinjo-no-Jijii (KinJ).