更新
新居雅行/msyk@msyk.net
本書の出版に先立ち、書籍名を公募しました。締め切りまで数日という短い期間にも関わらず10名の方からたくさんの書籍名のアイデアをいただきました。その中から、村岡才輔さんのアイデアを採用させていただきました。
ページ | 誤 | 正 | 備考 |
---|---|---|---|
p77、下から3行目 | レイアウトモード | ブラウズモード | 第2刷では修正済み |
p107、中央の図 | ポータルの2レコード目は、{ 8, 1, 7 }の組み合わせのレコードです | ||
p108、手順2の図 | ポータルの2レコード目は、{ 8, 1, 7 }の組み合わせのレコードです | ||
p255〜 | (一連の説明でステップが抜けている部分があります) | こちらを参照 | 第2刷では修正済み |
『4-4 マスタデータをコピーする』では、リレーションとルックアップを両方組み合わせて、伝票の明細の部分を構築する方法を解説しています。こちらでも解説していますが、常にマスターとおりに伝票入力するような業務ばかりとは限りませんので、実用上での柔軟性を持たせるために、明細の品名や単価はマスターの値をコピーして、明細の行ごとに修正が可能にしています。このとき、単価と個数をかけた金額の計算をp172の「金額計算はどうするか」で紹介しています。ここでは、数量と単価のかけ算にしていますが、単価は「明細」テーブルの「単価」フィールドと、「商品」テーブルの「単価」フィールドの両方があります。これまでは「商品」テーブルの方を使っていたのを、ここで「明細」テーブルの方に切り替えているわけです。
しかしながら、ここで考えてみると、「商品id」はポップアップで選択するので「商品::単価」は必ず参照可能、言い換えれば常に何か値はあると言えるでしょう。一方、「明細」テーブルの「単価」は、ルックアップしていれば必ず値はあるかもしれませんが、消してしまうかもしれませんし、場合によってはルックアップしない設定で使うこともあるでしょう。つまり、値はないかもしれないのです。であれば、「明細」テーブルの「単価」が設定されていればその値を使い、値がなければ「商品::単価」を使うという規則で、概ね、問題なく処理はできると考えられます。つまり、「金額」フィールドの計算式は、次のようにすればユニバーサルに使えるということになります。
[金額] = 個数 * If( 単価 = 0 ; 商品::単価 ; 単価 )
なお、「明細」テーブルの「単価」フィールドにデータがないということを、数値の0かどうかで判断していますが、これは状況によっては合理的とは言えない判断になる可能性もありますので注意してください。フィールドが空欄かどうかをIsEmpty関数で判断しないと行けない場合もあるでしょう。たとえば、単価が0という項目が伝票に存在することがあるのであれば、空欄かどうかの判断の方が適切です。
[金額] = 個数 * If( IsEmpty(単価) ; 商品::単価 ; 単価 )
この項目は、第2刷では書籍に反映されています。
p255からの「対応表を使った商品カテゴリをデータベースに組み込む」の一連の手順で、1つの作業の説明が完全に抜け落ちております。ご迷惑をおかけしました。お詫びします。
p257の下の図で、「カテゴリ」テーブルへのレコード作成が説明されています。さらにこの後に、ここで新たに作った「商品分類」テーブルに対しても、以下の図のように、レコードを入力してください。(なお、その後の伝票入力時のときのポップアップの出方がこのままだと書籍のようになりませんが、どうしてかを考えてみるのもいいでしょう)
「商品分類」テーブルにも、このように、レコードを追加します。この図のように入力した場合、1レコード目は、カテゴリid=2、商品id=1となっています。商品id=1は、「りんご」ですので、「りんご」はカテゴリid=2つまり「輸入品」に分類されるというわけです。
明細部分の「カテゴリ」で、たとえば「2」の「輸入品」を選ぶと、このテーブルから、商品idが「1」「3」「5」「7」「9」の5つのレコードが取り出されるとも言えるでしょう。このテーブルで、つまりは、「カテゴリ」と「商品」の各レコードの対応付けが決まっているのです。
ちなみに、p260の図では、カテゴリとしてカテゴリid=1の場合、商品idは「1」「3」「5」「7」「9」がリストアップされているので、この図の「カテゴリid」の「1」と「2」が入れ違った状態の「商品分類」テーブルで画面ショットを撮影したことになります。
なお、「商品分類」テーブルのidフィールドには連番をいちおう入れていますが、この段階では、特に意味のあるデータとしての取り扱いはしていません。