• 締切済み

ACCESS で サブフォーム参照してバカ除け

宜しくお願いします。 複式簿記の伝票入力でバカよけをしたいのですが 少し仕組みを説明します。 出張してこの費用を請求するとき次のように複数の費用を項目になります。 (1)伝票No.、日付、目的等 (2)--借方---- ----(3)貸方--- ・交通費 1,000 現金請求 10000 ・宿泊費 8,000 ・日当_ 1,000 借方合計 10000 貸方合計 10000 上記のように[借方合計]と[貸方合計]が一致します。 (1)のフォームのサブフォームが(2)、(3)です そこでサブフォームの合計が一致しなければフォーム(1)のレコードの移動、削除が出来ないようにしたいのですが どのようにしますか?

みんなの回答

noname#79209
noname#79209
回答No.2

#1です。 私なら、入力用のワークテーブルを用意して、 [貸方・借方]  [科目]    [金額] 貸方      交通費    1,000 貸方      宿泊費    8,000  貸方      日当_    1,000 借方      現金請求   10,000 で、計算させると思います。 また私は、フォームとテーブルと関連づけしないようにしています。

shinkami
質問者

お礼

フォームとテーブルと関連づけのままで、何とか解決しました。 データ入力後のレスポンスが少し遅いような気がしますが 問題になるようでしたら改めて検討します。

shinkami
質問者

補足

度々有難うございます。 明細行は借方、貸方とも複数行を考慮しています。 例えば、今回の例で8000円を仮払しての出張だった場合不足分の2000の請求が発生し貸方は 仮払金 8000 現金… 2000 (現金請求 例では現金と表現すべきでした)の2行になります。 ワークテーブルとデータテーブルのやりとりはSQLとなると思いますが [Insert]、[Delete] のセットで使用することになりますか?

全文を見る
すると、全ての回答が全文表示されます。
noname#79209
noname#79209
回答No.1

データベースの構造が不明なので的確な回答は出来ませんが... 借方と貸方のテーブルそれぞれで、伝票番号で抽出したレコードの金額フィールドの合計を算出して比較すれば良いのでは? 例: strCriteria = "伝票番号='" & Me.伝票番号 & "'" If DSum("金額","借方",strCriteria) <> DSum("金額,"貸方",strCriteria) Then など...

shinkami
質問者

補足

ご指導有難うございます。 「仕訳登録」フォームのサブフォームが「借方サブ」、「貸方サブ」とし それぞれの明細金額が[借方]、[貸方] 合計金額が [借方合計]、「貸方合計] 合計金額はそれぞれのデータソースに=Sum([借方]) =Sum([貸方])です。 貸方の明細行の[貸方] にカーソルが入る直前に [貸方]=[forms!借方サブ!借方合計]-[貸方合計] で「実行時エラー'2450' マクロ式またはVisual Basicコードで参照されている'借方サブフォーム'が見つかりません。」となります。 サブフォーム間のデータの参照は出来ないのでしょうか

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ACCESSのサブフォームからメインフォームへの移動

    お世話になります。 仕訳伝票の入力画面を作成しています。 仕訳登録フォームに サブフォームを2つあります。 うまく説明できないのでコーディングを記入しておきます。 これで仕訳登録フォームから仕訳登録サブ借方フォーム 仕訳登録サブ借方フォームから仕訳登録サブ貸方フォームへはカーソルが移動しますが 仕訳登録サブ貸方フォームから仕訳登録フォームへは移動してくれません マウスを使わずイベントで移動する方法はありますか メインフォーム 仕訳登録 Private Sub 目的_LostFocus() DoCmd.GoToControl "仕訳登録サブ借方" End Sub サブフォーム1 仕訳登録サブ借方 Private Sub 借方合計_Click() Forms!仕訳登録!借 = 合計 DoCmd.GoToControl "仕訳登録サブ貸方" End Sub サブフォーム2 仕訳登録サブ貸方 Private Sub 貸方合計_Click() Forms!仕訳登録!貸 = 合計 DoCmd.GoToControl "仕訳登録" End Sub 「カレントレコードに'仕訳登録'というフィールドはありません」とメッセージにになりますので Private Sub 貸方合計_Click() Forms!仕訳登録!貸 = 合計 DoCmd.GoToControl "Forms!仕訳登録!貸" End Sub 「カレントレコードに'Forms!仕訳登録!貸'というフィールドはありません」 とエラーメッセージになります。

  • ACCESSの規定値を動的に設定するには

    お世話になります。 仕訳伝票の登録フォームを作りました。 テキスト項目にコンボボックスを5個セットしました。 実際に操作するとマウス操作とキーボード操作の作業が面倒です。 フォームは伝票No.、日付、伝票の目的 のメインフォーム「仕訳伝票入力」 勘定科目、適用、金額のサブフォーム「仕訳伝票入力明細サブ」 メインフォーム上の伝票の目的が決まればサブフォームの勘定科目(借方科目、貸方科目)ほぼ決まります。 そこで伝票の目的テーブルに借方、貸方に勘定科目IDの項目に登録しておき、 これをサブフォームの借方科目、貸方科目の規定値として動的に設定出来ないものかと… この質問は前の http://kikitai.teacup.com/qa4980091.html の補足です。こちらも宜しくお願いします。

  • 【ACCESS2000】 サブフォーム同士の値のチェックを行いたい。

    ・メインフォーム 合計チェックボタン ・サブフォーム1 伝票番号,売上金額合計 ・サブフォーム2 伝票番号,明細行,売上金額 上記のような構成になっており、合計チェックボタンを 押したときに伝票ごとのサブフォーム1の売上金額合計がサブフォーム2の伝票番号でまとめた売上金額合計より、下回っているものがある場合はエラーメッセージを出したいと思っています。(できればその伝票番号もだしたい。) どのようにすればよいでしょうか。

  • ACCESS VBA 条件付き処理

    お世話になります。 仕訳伝票の入力フォームを 日付、伝票No.、目的のテキストボックスと目的テーブルにある、借方規定値、貸方規定値のテキストボックスをメインフォームとし 借方金額、貸方金額のテキストボックス、借方科目ID、貸方科目IDのコンボボックスをサブフォームに配置しました。 サブフォームで新規レコードの借方科目IDにメインフォームの借方規定値をコピーするために次のようにコーディングしました。 尚借方科目IDはテーブル定義でフィールドサイズ:長整数型 規定値:0にしています 命令文の右端の(1)(2)(3)で説明します。 (1)または(2)が有効であればよいのですが (1)(2)はきいていないようで、(3)は有効です Private Sub 借方金額_Exit(Cancel As Integer) If 借方科目ID = 0 Then 借方科目ID = Me.Parent!借方 '…(1) End If If IsNull(借方科目ID) Then 借方科目ID = Me.Parent!借方 '…(2) End If 借方科目ID = Me.Parent!借方 '…(3) End Sub

  • access サブフォーム作成について。

    いつもお世話になっております。access初心者です。 今請求伝票のような代物を作っています。 サブフォームを使用するフォームもいくつも作っているのですが、1つだけどうしてもサブフォームがフォームビューでみると表示されません。(デザインビューでは見えているのですが) いつも通り作成し、設定を変えた気もしないのですが、そのフォームだけの現象です。 大雑把な質問ですが、考えられる原因と解決策を教えていただけますか? よろしくお願いします。

  • Access2000 フォーム/サブフォームについて

    質問させていただきます。 フォーム/サブフォーム形式で画面を作っています。サブフォームは帳票形式で、複数のレコードを表示しており、各行の左にコマンドボタンを用意し、それをクリックすると、更新クエリー、削除クエリーが動くようにしています。 しかし、更新、削除クエリーとも ”0件のレコード”で処理が正しく動作しません。 ちなみに、両クエリの抽出条件は・・・ [Forms]![メインフォーム]![サブフォーム]![商品コード] しかし、フォームを使わずクエリーから実行する(パラメータに条件を手入力する)と正しく動作します。 記述ミスがないか何度も見返したのですが・・・。 「サブフォームの目的の行の商品コードと一致するデータを処理する」としたいのですが・・・。

  • 【ACCESS2000】 サブフォームのフィルタ方法

    親フォーム メインメニュー 子フォーム1 売上ヘッダ 子フォーム2 売上明細 上記のようなフォームがあります。 親フォームには、主キーで伝票番号が振られています。 売上ヘッダの各行を選択するごとにその明細が下に出てくるという仕組みのフォームを作ろうとしています。 そこで質問があります。 基本的なことですが、子フォーム1にある伝票番号をキーとして、サブフォームのフィルタリングするにはどうすればよいでしょうか。

  • ACCESSのテキストボックスの規定値を変更したい

    お世話になります。 伝票の登録フォームを作ったのですが コンボボックスを設定したためマウス操作とキーボード入力が入れ替わります。 少しは軽減しようと、規定値設定の活用を考えたのですが行き詰っています。 取引の目的によって借方勘定科目と貸方勘定科目の内容はある程度決まります。 目的テーブルに借方勘定科目、貸方勘定科目規定値のフィールドを設定してこれに備えましたがこの先がわかりません。 伝票の登録フォームを添付しますのでこれをもとに教えて頂けると助かります。 フォームは日付、目的を入力するメインフォーム「仕訳伝票入力」 と勘定科目金額を入力するサブフォーム「仕訳伝票入力サブ」の構成です。 添付は目的のコンボボックスをクリックしたところです。 借方の28 貸方の2をサブホームのそれぞれの項目の規定値に設定したいのですが

  • ACCESS サブフォームのフィールドにカーソルをあてる

    ACCESS2003で、VBAで簡単なプログラムを作っています。 <やっていること> ・フォームAからフォームBを開きます。 ・そのときにフォームAの番号と一致するデータをフォームBに表示します。 ・フォームBにはサブフォームCが埋め込んでいます。 このサブフォームCの中のフィールドDにカーソルが入っているようにしたいのですが、 Forms!サブフォームC!フィールドD.setfocus としたら、「カレントレコードには、フィールドDという名前のフィールドはありません」というエラーがでます。 フィールドDというフィールドは存在しています。 このような場合、どのように記述するのがよろしいのでしょうか。 よろしくお願いします。

  • Access サブフォームにフィルター後、計算

    Access2003です。 1.サブフォームにフィルターをかけてレコードを抽出  (フォームフッターで合計値を計算するフィールドを用意しておく) 2.その合計値を利用した計算結果をカレントレコードのフィールドに自動入力 これを1つのプロシージャで行いたいのですが、うまくいきません。 1と2を分けるとうまくいきます。何か方法はありますでしょうか。 具体的に… サブフォームのカレントレコードの[西暦]フィールドにある値と同じ値が入っているレコードを抽出。 抽出されたレコードの合計をフォームフッターで算出。([原価合計][受注高合計]) [カレントレコードの売上高]=[(カレントレコードの)原価]/[原価合計]*[受注高合計] ※全体の原価に占めるカレントレコード原価の割合で、売上高を算出します。 これを一括処理しようとすると、フィルター後の[原価合計][受注合計]の算出が間に合わないのか、「0で除算しました」とエラーが出ます。 フィルターをかけるのと、売上高を求めるのを別々のプロシージャに分けて順に実行するとちゃんと算出できます。 一括でやりたいのですが、良い方法はありますか? 宜しくお願いします。 ※前回もAccessの質問をさせていただきましたが、お礼を入力する前にベストアンサーを決定してしまったため、お礼ができませんでした。回答者の皆さんその節はありがとうございました!

専門家に質問してみよう