水晶報表A4紙打印兩張中一刀憑證

現在很多時候都會遇到 水晶報表A4紙打印兩張中一刀憑證
單頭如下:
  1. numbervar firstRecordOfGroup;
  2. //numbervar lastRecordOfGroup;
  3. //將每組的第一個recordnumber賦值給變量a
  4. if({aglr903.aba01}<>previous({aglr903.aba01}))
  5. then firstRecordOfGroup:=(recordnumber-1);
  6. //滿足此條件時抑制顯示該Section-Detail A
  7. not(({aglr903.aba01}<>previous({aglr903.aba01}))
  8. or
  9.  (count({aglr903.aba01},{aglr903.aba01})>4 and recordnumber>firstRecordOfGroup+1 and
  10.  (recordnumber-firstRecordOfGroup)mod 4=1     //recordnumber-firstRecordOfGroup代表每組的第幾條記錄
  11. ))
然後再在第三個節裏控制顯示。
  1. if (OnLastRecord AND count({aglr903.aba01},{aglr903.aba01})mod 4=0)OR
  2.    (NOT OnLastRecord AND
  3.     (
  4.      {aglr903.aba01}=next({aglr903.aba01}) or    
  5.      ({aglr903.aba01}<>next({aglr903.aba01}) and count({aglr903.aba01},{aglr903.aba01})mod 4=0)
  6.     )
  7.    )
  8. then true  //不顯示此Section
後面的,準備打印多少行就增加多個節,公式和上面查不多,如:

  1. if (OnLastRecord AND count({aglr903.aba01},{aglr903.aba01})mod 4=0 or count({aglr903.aba01},{aglr903.aba01})mod 4=3)OR
  2.    (NOT OnLastRecord AND
  3.     (
  4.      {aglr903.aba01}=next({aglr903.aba01}) or    
  5.      ({aglr903.aba01}<>next({aglr903.aba01}) and count({aglr903.aba01},{aglr903.aba01})mod 4=0 or count({aglr903.aba01},{aglr903.aba01})mod 4=3)
  6.     )
  7.    )
  8. then true  //不顯示此Section
當然,很容易就看出mod 4=0…… 就是爲了控制顯示
頭疼的是每張報表都要有彙總,如果一張A4上的兩張中一刀都是打印同一單的話沒有問題,可要是不一樣就有問題了,在水晶報表模板我沒有
只有在數據集上想辦法。我在生成臨時表時就按照我的要求出一個自動增長列。如下
IF sr.aba.aba01 == l_aba01 THEN
LET l_seriesNo = l_seriesNo + 1
 ELSE
LET l_aba01 = sr.aba.aba01
LET l_seriesNo = 1
 END IF

sr.aba.aba01是數據庫裏的單號, l_aba01是臨時表的單號,也就是如果有相同的單號,就把序號l_seriesNo加1,否則就表示又是一個單。
在水晶報表彙總字段,重置裏寫公式
if (PreviousValue({aglr903.seriesNo})>={aglr903.seriesNo} OR {aglr903.seriesNo} MOD 4 = 1) then
    formula = true
else
    formula = false
end if

seriesNo就是我在臨時表裏的自動列和報表數據沒關係。
OK了,

附件我上傳。大家可以下載下去把擴展名改下。
PS,發現csdn上傳附件的辦法就是改擴展名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章