よく考えた後、私はやった......
第 1 に、Crystal Report 10 は次の関数「CurrentRowIndex」、「GridValueAt」を提供していないことを明確にしてください。そのため、「CoSpringsGuy」による上記のソリューションは適用されません.......
2 つのテーブルがあるためです。1 番目の顧客と 2 番目の製品の両方で、product_sold (数量) のサマライズ フィールドと 2 つのクロス集計列 "Product.name" およびサブ列 product を含むクロス集計を生成します。タイプ
ここで、各顧客に販売された製品の product.packing type ="Pilot" の下の値を合計し、すべての製品 (製品タイプ "Normal" および "Pilot") の総計から合計を差し引きます。
この問題では、最初に、Crystal の実行時に数式の書式設定に取り組み、集計フィールドの「表示文字列」を操作する必要があります。次に、合計、つまり最後の列を編集します。
最初の編集は、次のコードの助けを借りて、フィールドされた「表示文字列」を要約します
Global CCust As String to keeping last customer for teli new customer name
Global Ccol As String ' tht is for keeping last column/product.packing type and teli with new col
Global Rndx as number ' this is for generating index of the row
Global totperx(22) as number ' is to hold the currnt value of cell and adding with previous value
' and i imagen that number of customers will less then 22 otherwise you can take unlimited array
Whileprintingrecords
if (CCust="") then
CCust=gridrowcolumnvalue("Table_Cust.Name")
Ccol=gridrowcolumnvalue("Viw_Prod.Packing")
Rndx=1
formula="new"
end if
if CCust<>gridrowcolumnvalue("Viw_Prod.Packing") then
formula="same"
Rndx=Rndx+1
else
formula="Newag"
end if
if Ccol<>gridrowcolumnvalue("Viw_Prod.Packing") then
Rndx=1
end if
if gridrowcolumnvalue("Viw_Prod.Packing")="Pilot" then
totperx(Rndx)=totperx(Rndx)+currentfieldvalue
end if
formula=totext(currentfieldvalue,0,"") ' despite of cstr function totext will change 45 to 45 while cstr changes 45 to 45.00
CCust=gridrowcolumnvalue("Table_Cust.Name")
Ccol=gridrowcolumnvalue("Viw_Prod.Packing")
次に、総計列の「表示文字列」を編集します
Global my as number
Global totperx(22) as number
whileprintingrecords
if my<1 then
my=1
end if
formula=currentfieldvalue-totperx(my)
my=my+1