みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
ユニークコードとして顧客&締日フィールドがあります。
例:220160625(顧客コード2&顧客コード2の締日)
売上明細テーブルの請求書番号フィールドに、
該当するユニークコードに請求番号(連番)を振って印刷をしたいのですができるでしょうか。
例:顧客&締日 請求番号
220160625-----1
220160625-----1
220160625-----1
120160630-----2
120160630-----2
計算式でできますか。
caseやifの関数を使うのでしょうか。
宜しくお願いします。
Offline
請求書テーブルはないのですか?
有ればそちらでシリアル番号を振るだけですが。。
Offline
回答ありがとうございました。
請求書テーブルはあります。
売上明細テーブルで、できると良いなと思っていました。
今回は請求書テーブルのシリアル番号でやりたいと思います。
今後の知識として事例のように、ユニーク値の昇順ごとに番号を振り当てられることができるようであれば教えていただけませんでしょうか。
宜しくお願いします。
Offline
私が考え付いたのはこんな方法です。。
値一覧を顧客 & 締日フィールドで作ります。
各レコードにシリアル番号を振ります。
自己リレーションを
顧客 & 締日 = 顧客 & 締日
and
シリアル番号 > シリアル番号
として、請求番号の入力値の自動化・計算式で
Case ( IsEmpty ( 顧客 & 締日 ) ; "" ;
not IsValid ( 自己リレーション::顧客 & 締日 ) ; ValueCount ( ValueListItems ( Get (ファイル名 ) ; "値一覧名" ) ) ;
自己リレーション::請求番号 )
これでいいでしょう。
もっと簡単な方法が有るかも・・
もしこれを使われるなら充分な検証をしてください。
Offline
回答ありがとうございました。
早速試してみました。
売上明細テーブルに請求書番号、シリアル番号フィールドを追加しました。
顧客&締日で値一覧を作ってみると、索引設定のエラーがでたので、計算式だったからダメなのかなと思って、
数字に変えて、入力値の自動化・計算式にしたら、エラーを回避できました。
シリアル番号フィールドにレコード順に数値を入力しました。
請求番号フィールドは、すべて0になってしまい連番が振れてませんでした。
もしかしたら、明細テーブルに追加ではなく新規テーブルを作成してやるのでしょうか。
宜しくお願いします。
Offline
> 顧客&締日で値一覧を作ってみると、索引設定のエラーがでたので
このフィールドはリレーションキーになっているので索引は必須ですよ。
また、
入力値の自動化ですから、
既存のレコードには入力されません。
Offline
回答ありがとうございました。
明細テーブルに追加で良いのですね。
索引設定はすべてにしておいた方がいいのですね。
あっ、すみません。
入力の自動化では、既存のレコードに入力されず、すぐに反映して確認したかったので、ここも計算式にしてました。
Last edited by まみこ (2016-06-23 15:28:31)
Offline
> 索引設定はすべてにしておいた方がいいのですね
非保存でなければ大丈夫です。
計算フィールではダメです。
全てのレコードに同じ値が入っちゃうでしょう。
Offline
いつもお世話になっております。
シリアル番号は、新規レコード分1づつ増加する設定しました。
請求書番号フィールドは以下のように数値タイプにして計算値自動入力で表示するようにしました。
Case ( IsEmpty ( ${顧客&締日} ) ; "" ;
not IsValid ( ${売上明細 顧客&締日}::${顧客&締日} ) ; ValueCount ( ValueListItems ( Get (ファイル名 ) ; "顧客&締日" ) ) ;
${売上明細 顧客&締日}::請求書番号 )
しかし、結果が、顧客&締日の値と同じっぽいのですが、間違えていますでしょうか。
Offline
> ${顧客&締日}
まず、
このフィールド名をやめましょう。
フィールド名にFMで定義されている記号等を使うとこの様になります。
ヘルプ「フィールド名の指定」のリンクです
http://www.filemaker.com/help/14/fmp/ja … tml#410664
見た限りでは間違いなさそうですが、
リレーションの定義
値一覧の設定
等、チェックですね。
計算フィールドにできる設定を思いつきましたが、
切り替えてみますか?
Offline
こんにちは。
回答ありがとうございました。
> ${顧客&締日}
まず、
このフィールド名をやめましょう。
記号を外したら、「指定されたフィールドが見つかりません」とエラーになりました。
計算フィールドにできる設定を思いつきましたが、
切り替えてみますか?
はい、いろいろ試しながら勉強をしていきたいので、教えていただけませんでしょうか。
宜しくお願いします。
Last edited by まみこ (2016-06-30 10:56:06)
Offline
計算式のところで
${ }
を消してはダメですよ。
> ${顧客&締日}
顧客&締日がフィールド名ですよね。
このように、FMで定義された記号・演算子等を使うと
自動で
${フィールド名}
となります。
ですから、
フィールド定義でフィールド名を付けるのにこのような
記号・演算子を使うのはやめるべきですね。
ここでは仮に、
顧客_締日
とします。
では、
請求番号フィールドを計算フィールドとして、
その計算式
> 自己リレーションを
> 顧客 & 締日 = 顧客 & 締日
> and
> シリアル番号 > シリアル番号
これはそのまま使います。
この自己リレーション先のテーブル名を 自己リレーション1とします。
もう一つ自己リレーション
売上明細::シリアル番号 > 自己リレーション2::シリアル番号
を作ります。
計算フィールドの計算式
Case ( シリアル番号 = 1 ; 1 ;
not IsValid ( 自己リレーション1::顧客_締日 ) ; Max ( 自己リレーション2::請求番号 ) + 1 ;
自己リレーション1::請求番号 )
これでいいと思いますヨ
Offline
回答ありがとうございました。
請求番号フィールドを計算フィールドとして、
その計算式
> 自己リレーションを
> 顧客 & 締日 = 顧客 & 締日
> and
> シリアル番号 > シリアル番号
これはそのまま使います。
この自己リレーション先のテーブル名を 自己リレーション1とします。もう一つ自己リレーション
売上明細::シリアル番号 > 自己リレーション2::シリアル番号
を作ります。計算フィールドの計算式
Case ( シリアル番号 = 1 ; 1 ;
not IsValid ( 自己リレーション1::顧客_締日 ) ; Max ( 自己リレーション2::請求番号 ) + 1 ;
自己リレーション1::請求番号 )
これでいいと思いますヨ
これだと、値一覧は必要ないってことでしょうか。
またこの式を入れても、顧客_締日の値と同じ値が請求書番号フィールドに表示されてしまいます。
シリアル番号フィールドには、レコード番号順に連番をあらかじめ振っておくのでしょうか。
宜しくお願いします。
Offline
シリアル番号は、
レコードの順番が分ればどんな数値でも大丈夫ですが、
1,2,3,,,とシリアルに入力すればいいでしょう。
> Case ( シリアル番号 = 1 ; 1 ;
> not IsValid ( 自己リレーション1::顧客_締日 ) ; Max ( 自己リレーション2::請求番号 ) + 1 ;
> 自己リレーション1::請求番号 )
計算式を分解すると
> シリアル番号 = 1 ; 1
シリアル番号1番のレコードに1が入力されます。
> not IsValid ( 自己リレーション1::顧客_締日 )
以前のレコードで同じ 顧客_締日 のレコードの有無を判定しています。
それがなければ
> Max ( 自己リレーション2::請求番号 ) + 1
以前の請求番号の最大の次の値を入力
あれば
> 自己リレーション1::請求番号
同じ請求番号を入力
ですから、この式で
> 顧客_締日の値と同じ値が請求書番号フィールドに表示されてしまいます
これは考えられませんね。
Offline
回答ありがとうございました。
再確認してみました。
売上登録のレイアウトに売上明細のポータルがあり、2商品(行)ぐらい登録をしたあと、売上明細レイアウトをみると、請求番号は2,3となっていますが、
得意先コード、得意先名、締日、顧客_締日のフィールドが表示されていないので、ルックアップをしてみると、すべて「1」になってしまいます。
Offline
状況が分りません。
顧客と締日が同じならその全てが1になっても当然では。
Offline
私が考え付いたのはこんな方法です。。
値一覧を顧客 & 締日フィールドで作ります。
各レコードにシリアル番号を振ります。自己リレーションを
顧客 & 締日 = 顧客 & 締日
and
シリアル番号 > シリアル番号として、請求番号の入力値の自動化・計算式で
Case ( IsEmpty ( 顧客 & 締日 ) ; "" ;
not IsValid ( 自己リレーション::顧客 & 締日 ) ; ValueCount ( ValueListItems ( Get (ファイル名 ) ; "値一覧名" ) ) ;
自己リレーション::請求番号 )これでいいでしょう。
もっと簡単な方法が有るかも・・
もしこれを使われるなら充分な検証をしてください。
もう一度、上記のやり方で作成し直したら、0番から始まりましたが、顧客_締日毎に連番が付きました。
ありがとうございました。
また質問等がありましたら、宜しくお願い致します。
Offline
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 561.84 KiB (Peak: 582.74 KiB) ]