Visual FoxPro のレポート フィールドをプログラムで変更する

この記事では、プログラムによってレポート ファイルを変更してフィールドのフォントの色を変更する方法について説明します。

元の製品バージョン: Visual FoxPro
元の KB 番号: 188403

概要

値を区別したり、条件に応じて形式を変更したりするために、プログラムでレポート フィールドを変更することが望ましい場合があります。 この記事では、個々の営業担当者の売上合計に基づいてレポート フィールドのフォントの色を変更する方法について説明します。 この手法は Microsoft Visual FoxPro 9.0 Professional Edition で機能しますが、レポート リスナーとイベントドリブン印刷を使用して同じ結果を得ることができます。

詳細

次に、テーブルを作成し、テーブルを設定し、売上レポートを実行し、売上合計を反映するようにフォントの色を変更します。 レポート フィールドの色を変更するために、レポート フィールドのレコードの PenRed、PenGreen、PenBlue フィールドが変更されます。 このメソッドを使用して、フォント スタイル、フォント サイズを変更したり、フィールドの位置を変更したりすることもできます。 さらに、たとえば、REPLACE ALL <プロパティ フィールド> WITH <プロパティ値> FOR objtype = 8 を使用して、オブジェクトのクラス全体を変更できます。

  1. 次のコードを Maketabs.prg という名前のプログラム ファイルに保存し、プログラムを実行してテーブルを作成して設定します。

    サンプル コード

     *-- Code begins here.
     CREATE TABLE sales (ID c(10), invamt N(8,2))
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1000)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2000)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 500)
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1001)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2001)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 501)
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1002)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2002)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 502)
     *-- Code ends here
    
  2. レポートを作成します。 [ページ ヘッダー] バンドで、レポート フィールドを追加し、式を salestot.id します。[詳細] バンドで、レポート フィールドを追加し、式 salestot.invamt を作成します。 [ページ フッター] バンドで、レポート フィールドを追加し、式 salestot.invamt を作成します。 [レポート式] ダイアログ ボックスの [計算] ボタンをクリックします。 [合計] を選択し、[OK] をクリックし、もう一度 [OK] をクリックします。 レポートを Sales.frx として保存します。

  3. Sales.prg という名前のプログラム ファイルに次のコードを保存し、プログラムを実行します。

     *-- Code begins here.
     SET TALK OFF
     *-- Get a list of salespersons.
     SELECT DISTINCT id FROM sales INTO CURSOR list
    
     *-- Step through the list and print sales results for each
     *-- salesperson.
     SCAN
     SELECT * FROM sales WHERE id = list.id INTO CURSOR salestot
    
    *-- Get the total sales for this person.
     SUM invamt TO lnTotal
     SELECT 0
    
    *-- Open the report file as a table.
     USE sales.frx
    
     *-- We're looking for a field (objtype) that is
     *-- calculated (totaltype) and whose expression
     *-- (expr) is equal to table field we're calculating.
     LOCATE FOR objtype = 8 AND totaltype = 2 AND ;
     ATC("salestot.invamt", expr) > 0
    
    *-- Save the values for the pen and fill fields.
     lnPenRed = penred
     lnPenGreen = pengreen
     lnPenBlue = penblue
    
    *-- Modify the font color for the sales total.
     DO CASE
     CASE lnTotal > 3000 AND lnTotal < 6000 && Print green
     REPLACE penred WITH 0, pengreen WITH 255, penblue WITH 0
     CASE lnTotal > 6000 && Print blue
     REPLACE penred WITH 0, pengreen WITH 0, penblue WITH 255
     OTHERWISE && Print dark red on white
     REPLACE penred WITH 128, pengreen WITH 0, penblue WITH 0
     ENDCASE
     USE
     SELECT salestot
    
    *-- Change PREVIEW to TO PRINTER to print the report.
     REPORT FORM sales PREVIEW
     ENDSCAN()
    
    *-- Restore the original values.
     USE sales.frx
     LOCATE FOR objtype = 8 AND totaltype = 2 AND ;
     ATC("sales.invamt", expr) > 0
     REPLACE penred WITH lnPenRed, pengreen WITH lnPenGreen,;
     penblue WITH lnPenBlue
     USE
     CLOSE DATA
     *-- Code ends here.
    
  4. 各レポートがプレビューされたら、一番下までスクロールして概要を確認し、各営業担当者の色がどのように変化するかを確認します。