0 返信 最新の回答 日時: Dec 6, 2015 10:11 PM ユーザー:matsubara@crest-inc.co.jp

    伝票№採番の重複について

    matsubara@crest-inc.co.jp

      お世話になります。

      標題の件ですが、売上入力で伝票NOを採番しているのですが

      2台同時に更新した時に伝票NOが重複する時があります。

      伝票№を採番する方法のご教授をお願い致します。

       

       

      【環境】

      --------------------------------------------------------

      サーバー:Windows2008R2

      PC:Windows7

      FMServer13

      FMPro13

       

      使用しているのはPCのみです。

      --------------------------------------------------------

       

       

      処理としては入力画面の最後に確定ボタンを押下すると下記のスクリプトが実行します。

      基本的には社内でテストをした時は問題ないように思えるのですが

      ユーザー様のところで先日重複した伝票NOが発生してしまいました。

       

       

      T売上伝票は入力開始時に内部的にシリアル№を自動採番しており

      シリアル№をプライマリキーにしております。

       

      T売上伝票の売上伝票NOは数字タイプです。

       

      S伝票NOというのは伝票NOを管理しているシステムマスタですが

      「伝票NOセット」スクリプト内でS伝票NOの同一レコードに2台で更新した時に

      「301 別のユーザがレコードを使用中です」というエラーコードが返ってくるので、

      そのエラーが返って来ないようになるまでループするようにしています。

       

       

       

      【メインスクリプト】

      --------------------------------------------------------------------------------------------------------------

      ユーザーによる強制終了を許可[オフ]

      エラー処理[オン]

      カスタムダイアログを表示["確定";"更新しますか?"]

      If[Get(最終メッセージ選択)=1]

       

        If[T売上伝票::伝票NO=""]

          変数を設定[$$管理番号;値:""]

          Loop

            スクリプト実行[「伝票NOセット」]

            Exit Loop If[$$管理番号<>""]

            スクリプト一時停止/続行 [間隔(秒):1]

          End Loop

       

          フィールド設定[T売上伝票::伝票NO;$$管理番号]

          レコード/検索条件確定[ダイアログなし]

          キャッシュをディスクに書き込む

        End If

       

      End If

      --------------------------------------------------------------------------------------------------------------

       

       

      【「伝票NOセット」スクリプト】

      --------------------------------------------------------------------------------------------------------------

      ユーザーによる強制終了を許可[オフ]

      エラー処理[オン]

       

      フィールド設定[T売上伝票_S伝票NO::最終NO;T売上伝票_S伝票NO::最終NO+1]

      If[Get(最終エラー)=0]

        変数設定[$$管理番号;T売上伝票_S伝票NO::最終NO]

        現在のスクリプト終了[]

      Else

        現在のスクリプト終了[]

      End If

      --------------------------------------------------------------------------------------------------------------