みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
皆様よろしくお願いします。
①したい事
仮称フィールドA[数値]に入力した数値を、仮称フィールド単位[テキスト]で指定する単位に変更したい。
例として
仮称フィールド単位[テキスト] "円"
仮称フィールドA[数値] 10000
を
仮称フィールド単位[テキスト] "万円"にすると、
仮称フィールドA[数値] 1
になるといった感じです。
自分なりに入力用Aフィールドと仮称フィールド単位[テキスト]、計算用Aフィールドを作ってみたりして試してみましたが、
入力用Aフィールドの数値が置き換えをチェックしても桁が増えつずけたり、何だかおかしなことになってまして、
何というか…時間差的な感じで一旦、フィールドAの数値を記憶し、記憶したものを単位になおし、なおしたものをフィールドAに
貼り付けるみたいな動作はどうしたら出来るのでしょうか?
できれば、フィールドAの他にも単位を一括で操作したい数値フィールドが多くありますので、なるべく簡単にできればと思います。
一応、フィールドのオプションで計算値(置き換えないチェックはずす)の所かと思ってフィールドAに
Let ( [ 数値 = Self ; 単位 = 単位 ] ; If ( IsEmpty ( 数値 ) ; 0 ; If ( 単位 = "万円" ; 数値 * 10000 ; 数値 ) ) )
を書いてみたけど単位を円にして万円にするたび10000づつ増加してしまう。どうしたら良いでしょう…
万円を円に戻すことは無いのですか。
Offline
早速の返信ありがとうございます。
戻す事はあります。
なので、入力時10000円を万円にすると1万円、また円にすると10000円になったり、入力時1万円を円にして10000円、これをまた円にするといった事があります。
入力時の単位も円だったり、万円だったりはレコード内容によって入力の都度設定したいです。
したい事のイメージ補足
入力時
10000 円
16000 円
の単位を万円にすると
1 万円
1.6 万円
で入力追加
3 万円
2.5万円
また単位を円にすると
10000 円
16000 円
30000 円
25000 円
になるという感じです。
すみませんが、本日はPCから離れますので、お返事等は明日になります。
したい事がちゃんと伝わっているか不安です。
Let ( [ 数値 = Self ; 単位 = 単位 ] ; If ( IsEmpty ( 数値 ) ; 0 ; 数値 * If ( 単位 = "万円" ; 10000 ; 1 ) ) )とか
Let ( [ 数値 = Self ; 単位 = 単位 ] ; If ( IsEmpty ( 数値 ) ; 0 ; 数値 * Case ( 単位 = "万円" ; 10000 ; 単位 = "円" ; 1 / 10000 ; 1 ) ) )とかも試してみたけど当然かなりおかしな事になってしまった。
最初の説明で仮称フィールドA[数値]なのに、入力事例で[1.6 万円]って変でないですか?
※ 手書き伝票時代の風習をデータベース処理に持ち込むのは、この際改めませんか?
Offline
その処理は、入力時のみ、という運用はできないのでしょうか。内部処理は、全て円単位で行わないと、集計処理などがどうにもならないでしょう。
Offline
返信が遅れてすみません。
Hiro様へ
説明がわかりにくかった様ですが、仮称フィールドA[数値]が1.6でフィールド単位[テキスト]が万円で設定の場合です。
Shin様へ
入力時の打ち間違いや入力のしやすさを考えると単位を選択できる方が良いので、円と万円を切り替えられるとありがたいです。
なお、ご指摘の通り、税抜き、税額等の計算においては全て円に変換して行っています。また、表示用に入力とは別に単位を
変換する様なフィールドも用意していますが、やはり、最も重要なのは入力時かと思いますので方法があれば教えて頂けると
助かります。
別に計算フィールドを作って
Case ( 単位 = "万円" ; A / 10000 ; A )
でいいのでは。
Offline
切り替えるのは表示用の方だけにして(チポさんの式)、入力は万円ボタン(単位の切り替えとは無関係)でx10000にするだけじゃだめかな~
1.6と打つ。
万円をクリック=16000になる
もう一度クリックしたら160000000円になる。
ATMにあった気がするけど(小数点は無いですね)、2回押したことないのでどうなるのか知らない...
FMの数字フィールドは任意の文字を入れられるので、「1.6万円」と入力させるのも不可能じゃないけど
動いてはいるみたい?だけど面倒だし、あなたの用途にはお勧めではないサンプル
バージョン不明なので12の場合は変換して下さい。ファイル名 「万円.fp7」
Offline
返信遅れてすみません。
チポ様アドバイスありがとうございます。
Repeater様常に×10000にしたいのではないです。
旅人様サンプルファイルありがとうございます。
旅人様のサンプルファイルが最も動作が理想に近いので試してみます。内容の理解がまだなので色々と試してみて報告します。
チポ様の案も試してみます。
申し遅れましたが、使用環境はWIN7の64bitでFM11PROです。
では一旦試行錯誤してみますので報告にお時間下さい。
途中経過になりますが、旅人様のサンプルファイルを参考に何とか悪戦苦闘中です。
理由はスクリプトトリガなるもので、今までのFM5.5や6から去年11にしたため、避けて来たちゃったからです。
今回初めて使用してみて目から鱗の動作に感動です。
ちょっと色々と試してみたり、調べたりで一進一退しております。今試しているのはこんな感じです。
①
項目 数値 単位
A 500 万円(ココで円と万円を切り替える)
B 1200 万円(上記のコピーで入力不可)
C 600 万円(上記のコピーで入力不可)
D 1.5 万円(上記のコピーで入力不可)
を単位円に切り替えた場合、
②
A 5,000,000 円
B 12,000,000 円
C 6,000,000 円
D 15,000 円
となって、また単位を円に切り替えた場合、①になるのを試行錯誤しながら試してみてます。
何回か実験して多分こうかなっていう所に辿りつければ、ご確認頂きアドバイス頂ければ心強く思います。
今も本当に自分で書き換えたので良いのか不安ですが、ある程度努力してから、お訪ねしますのでお時間下さい。
皆様お時間頂きましてすみませんでした。
無理矢理なのか正解なのかわかりませんが動いています。
わからない点
①スクリプトトリガのスクリプトパラメータの意味がいまいち理解不足なので、パラメーターに指定した値がスクリプト内で変数として利用するためのものなのかわかりません。
②スクリプトとして変数を別に設定している意味がわからないです。
③金額フィールドを4つにして、4つの金額フィールドに対して単位フィールド1つというのを作ってみましたが、大丈夫なのか不安です。
作ってみたもののサンプルを見てもらった方が良いのでしょうが、やり方がわからないので以下地味に記入します。
私も動けばいいという感じで、真剣に取り組んでいなかったので
見直しても自分でもよく分からず、変数でいい部分にスクリプト
引数を使ったりしているかも知れません。すみません。
要は単位や金額を変更するときに、それまでに入っていた単位や
金額を変数等に格納しておけば良いというだけのことで・・・
Offline
すぐに記入できずすみません。仕事しながらなので思うようにできないもので...
やろうとしてる事の説明から
レイアウトの画面
金額
フィールド金額1[数字] フィールド単価[テキスト]←ココで"万円"と"円"を切り替える。
フィールド金額2[数字] フィールド単価[テキスト]←上のコピーでブラウズのチェックはずしたもの
フィールド金額3[数字] フィールド単価[テキスト]←上のコピーでブラウズのチェックはずしたもの
フィールド金額4[数字] フィールド単価[テキスト]←上のコピーでブラウズのチェックはずしたもの
ブラウズ画面(全部空白時又は最初は"万円"になってます)
金額(画面1とします)
1,200万円
1,500万円
600万円
1.5万円
単位を変える"万円"から"円"へ
金額(画面2とします)
12,000,000円
15,000,000円
6,000,000円
15,000円
になって、"円"から"万円"に変えた時は画面1になる。画面1でも画面2でも数字が入力できて入力時の単位は各画面での単位となる。
フィールド内容
フィールド名 タイプ オプション
単位 テキスト グローバル、計算値自動入力 既存値を置き換え 計算値は"万円"
金額1 数字
金額2 数字
金額3 数字
金額4 数字
単位をグローバルにしたのはレコード全ての単位を操作したいからです。計算値を"万円"としたのは僕が初めに入力する時、万円の方が楽だからです。
金額5以上にフィールドを増やす予定で、単位が円から入力したい事は必ず出てくるので今回の様になりました。
>上のコピーでブラウズのチェックはずしたもの
ここの意味が良く解らないのですがデータベース管理のフィールドで
複製して名前を変えただけで別フィールドという意味ですよね。
円表示と万円表示の別レイアウトがあって単位はレイアウトごとに固定
ということでしたら画面1の万円が円に変わったら困ると思いますが。
Offline
スクリプトです。
入力金額enter←スクリプト名称です。
If [IsEmpty(DB名::金額1)and IsEmpty(DB名::金額2)and IsEmpty(DB名::金額3)and IsEmpty(DB名::金額4)]
フィールド設定[DB名::単位;"万円"]
Else
変数を設定[$n;値:Get(スクリプト引数)]
End If
入力単位enter←スクリプト名称です。
変数を設定[$$単位入力;値:DB名::単位]
入力単位modify←スクリプト名称です。
If [DB名::単位="円" and DB名::単位≠$$単位入力]
フィールド設定[DB名::金額1;"DB名::金額1*10000]
フィールド設定[DB名::金額2;"DB名::金額2*10000]
フィールド設定[DB名::金額3;"DB名::金額3*10000]
フィールド設定[DB名::金額4;"DB名::金額4*10000]
Else
If [DB名::単位="万円" and DB名::単位≠$$単位入力]
↑入力単位enterのグローバル変数を使うのだと思いますが、[DB名::単位="万円" and DB名::単位≠DB名::単位]になるのでは?なんかこう格納?の
時間差攻撃的な何かがあるのかなぁ....よくわりません。
フィールド設定[DB名::金額1;"DB名::金額1/10000]
フィールド設定[DB名::金額2;"DB名::金額2/10000]
フィールド設定[DB名::金額3;"DB名::金額3/10000]
フィールド設定[DB名::金額4;"DB名::金額4/10000]
End If
End If
フィールドへ移動[]
必死こいて打ち込んでました。返信遅れてすみません。
旅人様へ
上のコピーでブラウズのチェックはずしたものの説明としてブラウズ画面で
1,200万円←ここの万円を円にしたり変えられる。単位切り替えはここで指定する。
1,500万円←ここの単位は表示されるだけ、指?のマークとかは出ない。レイアウトで1200万円の単位フィールドをコピーして貼り付けました。
600万円←ここの単位は表示されるだけ、指?のマークとかは出ない。レイアウトで1200万円の単位フィールドをコピーして貼り付けました。
1.5万円←ここの単位は表示されるだけ、指?のマークとかは出ない。レイアウトで1200万円の単位フィールドをコピーして貼り付けました。
レイアウト上では
金額1 の横に 単位 を配置
金額2 の横に 単位 を配置
金額3 の横に 単位 を配置
金額4 の横に 単位 を配置
レイアウトは1つです。円表示用と万円表示用のレイアウトと2つ作ってはいません。ちょっと説明がわかりにくかった様ですみません。
フィールドのスクリプトトリガ
金額1フィールドのスクリプトトリガ
イベント:OnObjectEnter
スクリプト:入力金額enter オプションのスクリプトパラメータ:DB名::金額1
以下で有効:ブラウズ
単位フィールドのスクリプトトリガ
イベント:OnObjectEnter
スクリプト:入力単位enter オプションのスクリプトパラメータ:空白
以下で有効:ブラウズ
と
イベント:OnObjectModify
スクリプト:入力単位modify オプションのスクリプトパラメータ:空白
以下で有効:ブラウズ
です。オプションのパラメータは金額1から金額4までを対象にしたいので空白にしましたが、支障が発生したりしないか心配です。どうでしょう?
旅人様へ
お答えがわかりにくいかもなので補足です。単位フィールドは全部1つのフィールドです。レイアウトは1つです。
う〜〜ん、ワカラナイ
元々、長文やスレッドが長くなると理解出来なくなるのですが。
1レコード内の4個の金額フィールドは一律円か万円表示みたいですから
単位フィールドを4個も配置しないで1個でいいのでは?
レイアウト1個で画面1画面2というのもよく分からない。画面というのは
単に表示が切り替わったものという意味ですか。
Offline
>単位フィールドを4個も配置しないで1個でいいのでは?
これダメですね。フィールドごとに単位表示が必要なのですね。
スクリプトの簡素化も考えてみます(_ _)
Offline
旅人様へ
単位フィールドを4個も配置しないで1個でいいのでは?について
動作上、金額1が空白又は0で金額2に数字入力する事があり、単位が横に表示される方が分かりやすいので、ブラウズ画面で各金額フィールドの横に単位を表示させたかったからです。気にしないで下さい。
レイアウト1個で画面1画面2というのもよく分からない。画面というのは単に表示が切り替わったものという意味ですか について
おっしゃる通りです。単位を切り替えた時のブラウズ画面上の変化を表現してみましたが、わかりにくくて申し訳ありませんでした。
スクリプトの簡素化をお考え頂くのも恐縮ですので、私なりに調べて書いてみたスクリプトで問題が生じそうな個所をご指摘頂けると幸いです。
なお、格納と変数にする意味がわかりません。値が変化した時に連動するのは理解できますが、入力金額enterのところの If [DB名::単位="万円" and DB名::単位≠$$単位入力]が分からなくて困ってます。おそらく入力済みの値とスクリプト内で計算した値を比較する目的という理解で良いのでしょうか?
[ Generated in 0.015 seconds, 13 queries executed - Memory usage: 587.8 KiB (Peak: 624.7 KiB) ]