過去の桐井戸端BBS (桐ver.9)
30299 納品日を基に締日を作る方法について教えて下さい。 しぼうかん 2005/06/22-18:37
納品日を基に締日を作る方法について教えて下さい。
一応作りかけのファイルをUPして置きました。

得意先一覧.tbl

項目名|データ型|
得意先|文字列□|
締日□|文字列□|


|得意先|締日|
−−−−−−−−
|ソニー|末日|
−−−−−−−−
|NEC|20日|
−−−−−−−−
|富士通| 5日|


受注伝票.tbl

項目名|データ型|
得意先|文字列□|
納品年|長整数□|
納品月|長整数□|
納品日|長整数□|
締年□|長整数□|
締月□|長整数□|
締日□|長整数□|

受注伝票.wfm(編集表=受注伝票.tbl)

得意先|納品年□|納品月|納品日|締年□□|締月|締日|
NEC|2005|□□6|□21|□□□□|□□|□□|

 ↑    ↑  ↑  ↑  ↑
上記の"納品日"にソース値更新イベントを設定して
以下の様に締年と締月と締日を自動入力したいのですが
コマンドの書き方がわかりません。

 ↓    ↓  ↓  ↓  ↓

得意先|納品年□|納品月|納品日|締年□□|締月|締日|
NEC|2005|□□6|□21|2005|□7|20|


※□は文字ズレを起こす空白を埋める為に使った文字です。無視して下さい。
30300 Re:納品日を基に締日を作る方法について教えて下さい。 アックン 2005/06/22-20:07
記事番号30299へのコメント
しぼうかんさん、こんにちは。
すみませんが、せっかくアップされたファイルを見る時間がとれません。

納品日の入力後イベントで項目値代入コマンドを使うと、他の項目に値が入ります。
下記の見本では、締年と締月は計算が必要なので、締日しか処理していません。

proc t納品日::入力後(参照 文字列 &編集文字列,長整数 &モード,参照長整数 &入力継続) ←ここまでは1行です
 if( &モード=1 )
  var 文字列{ &得意先 }
  &得意先 = [得意先]
  編集表 "得意先一覧"
  検索 ↓ , [得意先] { =&得意先 } , 終了状態=&end
  if( &end=1 .and&得意先 )
    var 長整数{ &締[3] }
    &締[3] = #num( [締日] )
    編集表 "受注伝票"
    項目値代入 [締年] = &締[1]
    項目値代入 [締月] = &締[2]
    項目値代入 [締日] = &締[3]
  end
 end
end

ぼくが使っているものをコピペしてこの場で変更したので、実際に動くかどうか・・・・・。(^^;

アックン(=^・^=)
30302 Re:納品日を基に締日を作る方法について教えて下さい。 しぼうかん 2005/06/23-09:16
記事番号30300へのコメント
アックンさん、おはようございます。

返信ありがとうございました。
タイトルの付け方が悪くてただ得意先一覧.tblの[締日]を取り込むだけだと誤解させてしまったようです。

しかし、なんとか締日を入れる方法を見つけられました。

#日(#月末(#日時値生成(&締年,&締月)))という記述で受注伝票.tblに入れる[締日]を求める事が出来ました。


30303 Re:納品日を基に締日を作る方法について教えて下さい。 しぼうかん 2005/06/23-09:23
記事番号30302へのコメント
また説明不足をしてしまいました。
No.30302の式は得意先一覧.tblの[締日]が"末日"となっていた場合の締日を求める式です。
得意先一覧.tblの[締日]がその他の値の場合は文字置換等で"日"を取り除く方法を知っていたのでとりあえずうまく行きました。

30308 Re:納品日を基に締日を作る方法について教えて下さい。 悲しげ 2005/06/24-23:33
記事番号30303へのコメント
もう既に解決済のようですが、

>上記の"納品日"にソース値更新イベントを設定して
>以下の様に締年と締月と締日を自動入力したいのですが
>コマンドの書き方がわかりません。

と云うよりも、No.30302-30303によれば、何だか項目計算式だけで
済む話のような印象を受けました。(^^;)
ただ、計算の条件選択式も少々複雑になりそうです。
一番簡単なのは例示した月末締めでしょうけどね(でも年末とか年度末の月の場合には締め日を繰り上げる場合もあったりして)。
これが月中締めだと、例えばn日締めの場合で云えば、n日より前なら当年当月n日締めでよいものの、
n日過ぎなら翌月(当月が12月なら翌年の)n日締めにする必要があります。
ついでに云えば、文字列「20日」を#文字置換で日をヌルに置換する方法もありますが、
#数値関数を使うこともできます。
ただ、使い勝手からすると、"得意先一覧.tbl"の [締日] は、文字列型ではなく、
数値系に変更しておいた方がよいと思います。その場合、「末日」については「99」にしておくなんてやり方なんかをよく見ます。



以下余談です。
次回締め年月日を予め取得しておく必要が果たしてあるのだろうか?
と云うことで、私ならこうするかもの鴨話。
例えば20日締めの納品書なり請求書なりを作成するとした場合、
その作業は当月20日夜またはその翌日〜翌々日に行うことになる訳だが、
締め日は当然ながら当月20日以外にはあり得ない(月末締めなら前月末日)。
だから、締め年月日を予め算定しておく意味もない。
せいぜい「あ〜、今日はn日だから、明日はn日締め分の作業をしなきゃ〜」
となる訳で。
で、納品(請求)書データは、まず第1段として締め日が20日である
得意先のデータを絞り込み、次に第2弾としてそのデータ中の納品日
が前月21日〜当月20日の範囲のものを絞り込む。この絞り込みデータで
納品(請求)書データを構成する訳で、その際の締め日は上述のとおりのものを使う。「n日」一般についても然り。
・・・のような感想を持った、と云うのが余談です。


30309 Re:納品日を基に締日を作る方法について教えて下さい。 悲しげ 2005/06/24-23:52
記事番号30308へのコメント
>次回締め年月日を予め取得しておく必要が果たしてあるのだろうか?

それとも、次例のような考え方でしょうか?
「今月分は○月○日に引き落としました。次回は×月×日に引き落としますので、
それまでに指定の口座にご入金をお願いします」のお知らせの類。

ただ、この場合の×月×日は、土日祝日がらみでその翌日以降の営業日となることがありますから、
カレンダー判定を組み込む必要も出て来て、けっこう複雑そうです。

それと

>「末日」については「99」にしておくなんてやり方

ヌルなら自動的に末日と見なす方が楽そうですね、末日締め得意先が多かったりしたら特に。


30314 Re:納品日を基に締日を作る方法について教えて下さい。 しぼうかん 2005/06/27-21:08
記事番号30309へのコメント
返信有り難うございます。こちらの返信がおくれてすいません。
特に一般論風な事が書いてあった余談の部分を一般論好きな自分としては
興味深く読ませていただきました。

>何だか項目計算式だけで済む話のような印象を受けました。(^^;)

締日が末の会社に6月30日に納品したが今回は請求書を7月末締めに
しなければならない場合、とか例外もあるので項目計算式では出来ません。

>ただ、計算の条件選択式も〜〜n日締めにする必要があります。

この処理方法は解決済みでした。UPしたイベントファイルに書いてあります。

>文字列「20日」を#文字置換で日をヌルに置換する
方法もありますが、#数値関数を使うこともできます。

締日が"20日"など場合は#文字置換を使わないでいきなり#数値で置換しても問題ないということですね。

>使い勝手からすると、"得意先一覧.tbl"の [締日] は、文字列型ではなく、
>数値系に変更しておいた方がよいと思います。その場合、「末日」
>については「99」にしておくなんてやり方なんかをよく見ます。

「よく見ます」見たいな「普通」とか「標準的」とか「一般的」という類の言葉を
ありがたがる性格なので[締日]を数値型に変える事も検討してみます。

実は最初は締日を数値型にして末日の場合は31とする事も考えたのですが
[締日]を直接請求書の[締日]に持ってきた時、例えば2月31日〆の様に
表示される事を防ぐ為に文字列型にして2月末日〆としたほうが良いかな?
と考えた結果でした。

>まず第1段として締め日が20日である
>得意先のデータを絞り込み、次に第2弾としてそのデータ中の納品日
>が前月21日〜当月20日の範囲のものを絞り込む。

第一弾のやり方も自分の作ったやり方と違うのですが

>次回締め年月日を予め取得しておく必要が果たしてあるのだろうか?

この疑問に対する説明としてはこの第2弾の絞り込みを納品日で行う
代わりに納品日を入力した時にに取得した締日でやっていると思って
もらえばいいかと思います。

※但し悲しげさんの説明をじっくり見ていると自分のやり方よりこっちの方が
正統的な臭いがプンプンします。

多分システムの全面的な改良をしないと出来ないと思いますが直すにはどうすればいいか
検討してみたいと思います。
まだ問題が起きていないのに直す事を検討する理由は私が「標準」好きなので(^^;)

という訳なのでNo.30309の

>それとも、次例のような考え方でしょうか?・・・・

上記の推測ははずれです。(^^;、
但し締日を決める時に営業日を指定できないかという事は考えていました。

現状では締日が末の場合は7月の締日は31日と表示されますがこれを29日と
表示出来ればその方がいいのです。
しかしこれをするのはたしかに複雑な計算式が必要なのでその内に
何とかしようと思っていました。

>ヌルなら自動的に末日と見なす方が楽そうですね、末日締め得意先が多
>かったりしたら特に。

ヌルは締日=納品日(現金引き換えの場合など)の場合に使ってます。

30329 Re:納品日を基に締日を作る方法について教えて下さい。 悲しげ 2005/06/29-20:40
記事番号30314へのコメント
感想の追加を云わせてもらえば(^^;)
No.30314を読んだら「次回締め年月日を予め取得しておく必要」が無いの感が増しました。(^^;)
ちなみに

>まず第1段として締め日が20日である
>得意先のデータを絞り込み、次に第2弾としてそのデータ中の納品日
>が前月21日〜当月20日の範囲のものを絞り込む。

この第1段の過程は、得意先マスターで締日が20であるレコードを絞り込んだ状態から、
その得意先コードを照合項目として、明細データ表を併合絞り込みと云う形で実行します。
このようにすれば(予め算出しておくような)
次回締日は全く不要だと思われますし、休日がらみの問題も実態的には吸収できそうな気も。
あ、もちろん第1段と第2段が逆であっても全く構いません。もし納品日順の類の索引があるのならむしろ逆の方が速いかも?
でも、ふつうは期間指定でデータを絞り込むようなところを「納品日を入力した時に
取得した締日でやる」と云う発想はとてもユニークですね。(^^;)
速さの問題はさておき、二回絞り込むのはよほどお嫌いなのかな?
何だか、簡単にできることをわざわざ複雑にしているようにも思えるので、
すいません、少なくとも私は採用する気にはなりませんけど。(^^;)

                      流れ者(出稼ぎ暮らし中)

30345 桐の実用的なシステム紹介をする本がもっと有ればよかったのですが・・・ しぼうかん 2005/06/30-18:25
記事番号30329へのコメント
私もNo.30329を読んだら「次回締め年月日を予め取得しておく必要」が
無いの感が増しました。(^^;)

>でも、ふつうは期間指定でデータを絞り込むようなところを「納品日を入力
>した時に取得した締日でやる」と云う発想はとてもユニークですね。(^^;)

そんなに笑わないでください。(^_^;)
例えばA社への6月請求分が10万あるとしてこれを3万の請求書2枚と4万の
請求書1枚の3枚の請求書を発行するような場合(=分割請求)がある自社の
システムに対応出来(※1)、かつ自分が実現可能な方法は当時これ以外に
思いつかなかったのです。
決して2回絞り込むのが嫌いというわけではありません。(^_^;)

※1 得意先マスターに納品書の金額を併合する方法では
同一月に複数の請求書を発行する場合の処理方法は今でも思いつきません。

30347 Re:分割請求 悲しげ 2005/06/30-18:39
記事番号30345へのコメント
>例えばA社への6月請求分が10万あるとしてこれを3万の請求書2枚と4万の
>請求書1枚の3枚の請求書を発行するような場合(=分割請求)がある自社の
>システム

あぅ、「分割請求」の問題だったのですね。う〜ん、色々なやり方があり得るかもしれませんが、
少なくとも私はそれ考えたことありませんでした。
失礼いたしました。<(_ _)>

戻る