初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-01-17 21:35:32

6120
Member

スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

pro14 WIN7 を使用しています。初心者です。
毎月200レコードの処理をします。
現在、日付フィールドに「平成29年1月」と入力されているのですが(グローバルフィールドではありません。200レコード全部に入力しています)
この状態で、スクリプトを組んで、一気に200レコードを複製し、日付フィールドが自動的に「平成29年2月」というように+1月で表示させたいのです。(もちろん12月の次は1月となってほしいのですが)つまり毎月200レコードづつ増えていきます。
その他のフィールドについては同じ内容が複製されることになりますが毎月入力する内容が近似していますので問題はありません
どのようにすすめたらよろしいのでしょうか?
ご教授よろしくお願いします。

Offline

#2 2017-01-17 21:52:12

旅人
Member

Re: スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

>日付フィールドに「平成29年1月」と入力されているのですが
日付フィールドですよね。
省略形ではなく、実際にはyyyy.mm.ddはどのように入力しているのですか。

Offline

#3 2017-01-17 22:12:56

6120
Member

Re: スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

お返事ありがとうございます。
「平成29年1月」は日付フィールドです。インスペクタ-データの書式設定-書式その他で「年」と「月」のみを表示し、「日」は非表示させています。
日付フィールでいいものか、別に計算フィールドも作成して(計算結果を日付?)ふたつを絡めて動かしていくのかよくわかっていません。
よろしくお願いいします。

Offline

#4 2017-01-17 22:16:22

シャチ
Member

Re: スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

つい最近どこかでも書いたなぁ・・・

200レコードの複製は
1」エクスポートしてインポートする
2:スクリプトでLoopを使って複製する

1の方はインポートすると
複製したものだけになるので
日付のところを全置換で書き換えれば済みます。

日付のところがどういった形態のデータになっているかによりますが
1:YY年M年の形式のテキストデータなら
  Let( [
    $T=日付;
    $L=Length($T);
    $Pos=Position($t;"年";1;1);
    $Y=Left($T;$Pos-1);
    $M=Substitute($T;[Left($T;$Pos);""];["年";""])
    ] ;
    $Y & "年" & $M +1 & "月"
  )

2:YY/MM/DDの日付データなら
   Date(Month(日付)+1;Day(日付);Year(日付)) で計算できます

Last edited by シャチ (2017-01-19 21:35:54)

Offline

#5 2017-01-17 22:16:46

6120
Member

Re: スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

失礼しました。yyyy.mm.ddですね。
2017/1/1と入力しています。

Offline

#6 2017-01-17 22:54:21

6120
Member

Re: スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

シャチ様

「YY/MM/DDの日付データなら
   Date(Month(日付)+1;Day(日付);Year(日付)) で計算できます」
→なるほど、よくわかりました。ありがとうございます。
200レコード複製はインポートではなくスクリプトで考えています。
loop であれこれ試みてみます。

Offline

#7 2017-01-17 23:11:03

シャチ
Member

Re: スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

エクスポートとインポートをスクリプトでするのです

Offline

#8 2017-01-18 09:13:17

チポ
Member

Re: スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

> Date(Month(日付)+1;Day(日付);Year(日付))
日付の日が必ず1日ならこれでもいいですが、
日が不定だと月の大小によって、これではまずい場合が有りますよね。

Day(日付)
これを1とかの、月の大小に関わらない日に固定した方がいいでしょう。


また、
これを入力値の自動化・既存値置き換えとすれば
何もしないで翌月が求められます。

Offline

#9 2017-01-19 15:35:39

Shin
Member

Re: スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

給与明細かな。
それなら、元となる一覧表(従業員名簿みたいな)を作っておいて、そこから該当レコード(在職者)を抽出してインポート、日付を自動計算させるか全置換するのが良いのでは。その他のフィールドの値もコピーしたいのならば、前月にリレーション張っておいて、ルックアップすれば良いでしょう。(本来は、元データを管理するテーブルを作り、そこから同時にインポートするべきですが。)

または、年月のみのデータで良いのならば、年 * 12 + 月 -1 という数値フィールド「YM」を作っておくと、連続数値で管理できます。このフィールドから、Div ( YM  ; 12 ) + ( Mod ( YM ; 12 ) + 1 ) / 100 という計算フィールドを作っておくと、2017.01 というデータに戻ります。インスペクタで小数点2桁表示にして、小数点を / に変えておくと見やすいかも。

Offline

#10 2017-01-20 17:10:32

6120
Member

Re: スクリプトで複数のレコードを一括で複製し、翌月表示をしたい。

皆様ご教授いただきましてありがとうございました。
なんとかスクリプトを作成し思い通りにうごくようになりました。
まず
変数で現在の処理月を記憶させ
Date(Month($処理月記憶)+1;Day(1);Year($処理月記憶))
これで次月表記はできました。
複製はインポートは使わずスクリプト(ループ)で作れました。
悩みが消え道が開けました。
ほんとうにありがとうございました。
またよろしくお願いいたします。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 523.6 KiB (Peak: 528.14 KiB) ]