やり方は何通りもあると思いますが、定番なスクリプトと、ちょっとひねったスクリプトを紹介します。
テーブル構成は
親テーブル:SalesH
子テーブル:SalesD
リレーションキー:SalesH::snとSalesD::fksn
※フィールド「SalesH::sn」は自動番号入力の設定
まずは定番スクリプトです。
--------------------------------------------------
変数を設定 [ $sn; 値:SalesH::sn ] //複製する親レコードのシリアルNoを変数に取得
レコード/検索条件複製 //先に親レコードを複製する
変数を設定 [ $sn2; 値:SalesH::sn ] //複製した親レコードのシリアルNoを変数に取得
レイアウト切替え [「SalesD」 (SalesD) ] //子レコードのレイアウトに移動
エラー処理 [ オン ]
検索モードに切り替え[]
フィールド設定 [SalesD::fksn; $sn] //複製する親レコードのシリアルNoで子レコードを検索
検索実行[]
If[ Get ( 対象レコード数 ) ≥ 1 ] //検索して該当するレコードがあったら下記のスクリプトステップを実行
レコード/検索条件/ページへ移動[ 最初の ] //先頭のレコードに移動してからLopp開始する
Loop
Exit Loop If[ SalesD::fksn ≠ $sn ] //親レコードとのリレーションキーフィールドの値が変数$snと違っていたらLoop終了
レコード/検索条件複製 //子レコードを複製する
フィールド設定 [SalesD::fksn; $sn2] //複製した子レコードのリレーションキーフィールドに複製した親レコードのシリアルNo(変数$sn2)をセット
レコード/検索条件/ページへ移動[ 最初の ] //先頭のレコードに移動
レコードを対象外に //このレコードはすでに複製済みなので、対象外にする
End Loop
End If
レイアウト切替え[ 元のレイアウト ]
--------------------------------------------------
これでOKです。
続いて、ちょっとひねったスクリプトです。
--------------------------------------------------
変数を設定 [ $sn2; 値:GetNextSerialValue ( Get ( ファイル名 ) ; "sn" ) ] //複製する親レコードの次のシリアルNoを関数で取得し、変数にセット
変数を設定 [ $Lines; 値:Count ( SalesH_SalesD_Sn::sn ) ] //複製するポータルの行数を変数にセット
Loop
変数を設定 [ $count; 値:$count + 1 ] //ループカウンター用変数を設定
ポータル内の行へ移動[ 選択; ダイアログなし; $count ] //$countの値の行に移動
レコード/検索条件複製 //先に子レコードを複製していく
フィールド設定 [SalesD::fksn; $sn2] //複製した子レコードのリレーションキーフィールドに複製した親レコードのシリアルNo(変数$sn2)をセット
Exit Loop If[ $count ≥ $Lines ] //変数$countが変数$Lines(ポータル行数)に達したらLoop終了
End Lopp
レコード/検索条件複製 //ここで親レコードを複製する
フィールドへ移動[]
--------------------------------------------------
以上で完了です。
ちょっとひねったスクリプトでは、ポータル行を選択した状態で「レコード複製」を行うと、ポータル行が複製される機能を応用しています。