(現在 過去ログ36 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■5573 / inTopicNo.1)  データがない時の一括処理の書き方
  
□投稿者/ トンタ -(2010/01/29(Fri) 15:37:09)
    下記の通り、「1」以上の個数があった場合の印刷なのですが、「1」以上のデータが無い場合はエラーになるのですが、エラーが出ないようにするにはどの様にしたらいいのでしょうか。
    --------------------------------------

    表 "印刷.tbl",表番号=1
    絞り込み [個数]{>1}
    &総件数 = #総件数
    for &i = 1, &総件数
     ジャンプ 行番号 = &i
     絞り込み 行数 = 1
     for &頁=1,[個数]
    プリンタ "SATO SR412",終了状態 = &OK
      レポート印刷 "印刷"

引用返信 [メール受信/OFF] 削除キー/
■5576 / inTopicNo.2)  どちらかを使ってみて下さい
□投稿者/ 今村 誠 -(2010/01/29(Fri) 18:04:34)
    トンタさんこんにちはテストしていませんが
    下記のように記述したらいかがでしょうか
    字下げをしてどことどこが対応しているか簡単に
    見比べられるようにした方が良いです。
    表番号の指定はしない方が良いと思います
    動かなかったらエラーの内容をコメントして下さい。

    手続き実行 送り状個数印刷("印刷.tbl","SATO SR412","印刷.rpt")
    proc 送り状個数印刷(str &Stbl,str &Sprita,Str &Srpt)
     var Long {&L状態,&L頁,&OK} /* ここで宣言するとこの手続き実行後自動削除 */
     if (#FSIZE(#一括パス名+&Stbl)<1)
      確認 "表" + &Stbl + "はありません"
     else
      if (#FSIZE(#一括パス名+&Srpt)<1)
       確認 "レポートファイル" + &Srpt + "はありません"
      else
       プリンタ &Sprita,終了状態 = &OK
       if ( &L状態 <> 1 )
        call errmsg(&L状態)
       else
        表 &Stbl,終了状態 = &L状態 /* ←ここでは表番号の指定をしない */
        if ( &L状態 <> 1 )
         call errmsg(&L状態)
        else
         while (.not #eof)
          if ([個数]>1)
           for &L頁=1,[個数]
            レポート印刷 &Srpt,部数=1
           end
          end /* if ([個数])終わり */
          ジャンプ 行番号 = 次行
         end /* whileの終わり */
        end /* 表を開くの結果の終わり */
       end /* プリンタの設定の終わり */
      end /* レポートのファイル存在の終わり */
     end /* 表のファイル存在の終わり */
    end /* 手続き送り状印刷の終わり */

    手続き実行 送り状個数印刷("印刷.tbl","SATO SR412","印刷.rpt")
    proc 送り状個数印刷(str &Stbl,str &Sprita,Str &Srpt)
     var Long {&L状態,&i,&OK} /* ここで宣言するとこの手続き実行後自動削除 */
     プリンタ &Sprita,終了状態 = &OK
     if ( &OK = 0 )
      確認 "プリンタ名 " + &Sprita + " は存在しません"
      return
     end
     if (#FSIZE(#一括パス名+&Stbl)<1)
      確認 "表" + &Stbl + "はありません"
      return
     end
     if (#FSIZE(#一括パス名+&Srpt)<1)
      確認 "レポートファイル" + &Srpt + "はありません"
      return
     end
     表 &Stbl,終了状態 = &L状態 /* ←ここでは表番号の指定をしない */
     if ( &L状態 <> 1 )
      call errmsg(&L状態)
     else
      while (.not #eof)
       if ([個数]>1)
        レポート印刷 &Srpt,部数=[個数]
       end /* if ([個数])終わり */
       ジャンプ 行番号 = 次行
      end
     end
    end
    proc errmsg(Long &L表)
     var Str{&Smsg[3]}
     &Smsg[1] = "共有違反以外のエラーが発生したため、表を開くことができなかった"
     &Smsg[2] = "共有違反で表を開くことができない"
     &Smsg[3] = "他の利用者が置換や併合などの処理を実行中"
     &L表 = #abs(&L表)+1
     確認 &Smsg[&L表]
    end
引用返信 [メール受信/OFF] 削除キー/
■5577 / inTopicNo.3)  Re[1]: データがない時の一括処理の書き方
□投稿者/ 尾形 -(2010/01/29(Fri) 18:33:33)
    どうも、こんにちは

    > 表 "印刷.tbl",表番号=1
    > 絞り込み [個数]{>1}
    > &総件数 = #総件数
    > for &i = 1, &総件数
     条件 (&総件数<1) 繰り返し中止
    >  ジャンプ 行番号 = &i
    >  絞り込み 行数 = 1
    >  for &頁=1,[個数]
    > プリンタ "SATO SR412",終了状態 = &OK
    >   レポート印刷 "印刷"

    for の次に
    条件 (&総件数<1) 繰り返し中止
    でどうでしょうか





引用返信 [メール受信/OFF] 削除キー/
■5578 / inTopicNo.4)  Re[2]: どちらかを使ってみて下さい
□投稿者/ トンタ -(2010/01/29(Fri) 19:37:09)
    今村さん
    早々のご回答ありがとう御座います。
    一番最初に頂いたので試してみましたら、上手く行きました。
    ただ、この後の処理を書くとエラーになってしましました。

    現在は1個を先に出力して2個以上を最後に出力しております。
    個数口は1/2・2/2のように印字しております。
    ※「印刷.RPT」に#STR(&頁)+#COND([個数]>1,"/"+#STR([個数]))

    色々、試してみます。ありがとう御座います。

    ****************************************************************
    絞り込み [個数]{=1}
    レポート印刷 "印刷1.rpt",開始ページ=1,終了ページ=0,編集表=する,部数=1,罫線印字=する,カラー印刷=しない,ソート=しない
    **************************************************************
     解除 1
    ****************************
    手続き実行 印刷()
    proc 印刷()
     表 "印刷.tbl",表番号=1 /*
     絞り込み [個数]{>1}
     if (#総件数>0)
      var Long {&総件数,&i,&OK} /*
      &総件数 = #総件数 /*
      for &i = 1, &総件数
       ジャンプ 行番号 = &i
       絞り込み 行数 = 1
       if ([個数]) /*
        for &頁=1,[個数]
         プリンタ "SATO SR412",終了状態 = &OK
         レポート印刷 "印刷"
        end
       end /* if
      end
     end
    end
    ************************************************************
    ・・・・・・・・・・以下全て、エラーになる・・・・・・・・・
    行削除 *
    表整理 余白割合=0




    No5576に返信(今村 誠さんの記事)
    > トンタさんこんにちはテストしていませんが
    > 下記のように記述したらいかがでしょうか
    > 字下げをしてどことどこが対応しているか簡単に
    > 見比べられるようにした方が良いです。
    > 表番号の指定はしない方が良いと思います
    > 動かなかったらエラーの内容をコメントして下さい。
    >
    > 手続き実行 送り状個数印刷("印刷.tbl","SATO SR412","印刷.rpt")
    > proc 送り状個数印刷(str &Stbl,str &Sprita,Str &Srpt)
    >  var Long {&L状態,&L頁,&OK} /* ここで宣言するとこの手続き実行後自動削除 */
    >  if (#FSIZE(#一括パス名+&Stbl)<1)
    >   確認 "表" + &Stbl + "はありません"
    >  else
    >   if (#FSIZE(#一括パス名+&Srpt)<1)
    >    確認 "レポートファイル" + &Srpt + "はありません"
    >   else
    >    プリンタ &Sprita,終了状態 = &OK
    >    if ( &L状態 <> 1 )
    >     call errmsg(&L状態)
    >    else
    >     表 &Stbl,終了状態 = &L状態 /* ←ここでは表番号の指定をしない */
    >     if ( &L状態 <> 1 )
    >      call errmsg(&L状態)
    >     else
    >      while (.not #eof)
    >       if ([個数]>1)
    >        for &L頁=1,[個数]
    >         レポート印刷 &Srpt,部数=1
    >        end
    >       end /* if ([個数])終わり */
    >       ジャンプ 行番号 = 次行
    >      end /* whileの終わり */
    >     end /* 表を開くの結果の終わり */
    >    end /* プリンタの設定の終わり */
    >   end /* レポートのファイル存在の終わり */
    >  end /* 表のファイル存在の終わり */
    > end /* 手続き送り状印刷の終わり */
    >
    > 手続き実行 送り状個数印刷("印刷.tbl","SATO SR412","印刷.rpt")
    > proc 送り状個数印刷(str &Stbl,str &Sprita,Str &Srpt)
    >  var Long {&L状態,&i,&OK} /* ここで宣言するとこの手続き実行後自動削除 */
    >  プリンタ &Sprita,終了状態 = &OK
    >  if ( &OK = 0 )
    >   確認 "プリンタ名 " + &Sprita + " は存在しません"
    >   return
    >  end
    >  if (#FSIZE(#一括パス名+&Stbl)<1)
    >   確認 "表" + &Stbl + "はありません"
    >   return
    >  end
    >  if (#FSIZE(#一括パス名+&Srpt)<1)
    >   確認 "レポートファイル" + &Srpt + "はありません"
    >   return
    >  end
    >  表 &Stbl,終了状態 = &L状態 /* ←ここでは表番号の指定をしない */
    >  if ( &L状態 <> 1 )
    >   call errmsg(&L状態)
    >  else
    >   while (.not #eof)
    >    if ([個数]>1)
    >     レポート印刷 &Srpt,部数=[個数]
    >    end /* if ([個数])終わり */
    >    ジャンプ 行番号 = 次行
    >   end
    >  end
    > end
    > proc errmsg(Long &L表)
    >  var Str{&Smsg[3]}
    >  &Smsg[1] = "共有違反以外のエラーが発生したため、表を開くことができなかった"
    >  &Smsg[2] = "共有違反で表を開くことができない"
    >  &Smsg[3] = "他の利用者が置換や併合などの処理を実行中"
    >  &L表 = #abs(&L表)+1
    >  確認 &Smsg[&L表]
    > end
引用返信 [メール受信/OFF] 削除キー/
■5579 / inTopicNo.5)  Re[3]: どちらかを使ってみて下さい
□投稿者/ 今村 誠 -(2010/01/29(Fri) 20:14:24)
    2010/01/29(Fri) 20:17:05 編集(投稿者)

    同じ表なら再度開く必要はなく下記で良いと思います。
    手続きは最後にまとめて書かないといけません。

    絞り込み [個数]{=1}
    レポート印刷 "印刷1.rpt",開始ページ=1,終了ページ=0,編集表=する,部数=1,罫線印字=する,カラー印刷=しない,ソート=しない
    **************************************************************
     解除 1
    ****************************
    絞り込み [個数]{>1}
    手続き実行 印刷()
    行削除 *
    表整理 余白割合=0
    *******一括終わり****

    *****以下は一般手続きです*****

    proc 印刷()
     if (#総件数>0)
      var Long {&総件数,&i,&OK}
      プリンタ "SATO SR412",終了状態 = &OK
      &総件数 = #総件数
      for &i = 1, &総件数
       ジャンプ 行番号 = &i
       絞り込み 行数 = 1
       for &頁=1,[個数]
         レポート印刷 "印刷"
       end
       解除 1
      end
     end
    end

    *****手続き定義はこれ以上はありません。***

    ps 返信時は不要な引用は削除して下さい
引用返信 [メール受信/OFF] 削除キー/
■5580 / inTopicNo.6)  Re[4]: どちらかを使ってみて下さい
□投稿者/ トンタ -(2010/01/29(Fri) 22:41:32)
    今村様
    ご教授ありがとうございます。

    > *****手続き定義はこれ以上はありません。***

    「手続き定義」の意味がわからないのですが、他に行いたい処理は、ここの後で一括処理では行えないのでしょうか。
    それとも もう一度、一括処理を別ファイルで作成しなければ行けないのでしょうか。

    よろしくご回答お願いいたします。
引用返信 [メール受信/OFF] 削除キー/
■5582 / inTopicNo.7)  Re[5]: どちらかを使ってみて下さい
□投稿者/ 今村 誠 -(2010/01/29(Fri) 23:30:33)
    トンタさん大事なのは手続き終わりのほうでなく以下の部分です。

    > 手続き実行 印刷()
    > 行削除 *
    > 表整理 余白割合=0
    ここにやりたい一括処理をたくさん書くのです。

    > *******一括終わり****

    桐を起動してマニュアルをヘルプ→トピックの検索
    一括処理・履歴・イベント→リファレンス→一括処理コマンド
    で以下の日本語を調べてみて下さい。

    英文 日本語      引数
    call 手続き実行   手続き名
    goto 分岐      名札名

    proc 手続き定義開始 手続き定義名()
    end 手続き定義終了

    proc 名札      名札名
    return 手続き終了

    行って戻ってくる のが 手続き実行です。
    行ったまま戻ってこない のが 名札です。
    途中退場 が 手続き終了です
    同じようなことを何回も書くのは苦痛でしょう。
    手続き実行で仕事をさせて仕事が終わったら
    帰ってくるようになっています。
    下の方にNo.5521 がありリンク先に私の作ったソフトが
    置いてあります。
    イベントファイルを再定義で開くとたくさん
    procとIfとcallがあります。
    レポートと表のあるフォルダーでフォームを開くと
    いろいろ楽しめます。
    ヘルプをよく読んで分かりにくいところをお尋ねして下さい。

    他にも
    for while loop 繰り返し
    end 繰り返し終了 ケース終了
    break ケース中止、繰り返し中止
    switch ケース開始
    case ケース
引用返信 [メール受信/OFF] 削除キー/
■5595 / inTopicNo.8)  Re[6]: どちらかを使ってみて下さい
□投稿者/ トンタ -(2010/01/30(Sat) 14:03:49)
    今村 様

    ご教授のように行ったところ、全て思い通りになりました。
    本当にありがとうございました。
    今後も勉強して(楽しみながら)腕を上げていきたいと思っております。
    また機会がありましたらよろしくお願いいたします。


解決済み!
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -