報告範本 學生歷年成績不同scale的crystal report設定

本文由 khchiu1426 在 2019-09-06 發表於 "WebSAMS 討論區" 討論區

  1. 56630230

    khchiu1426
    Expand Collapse

    文章:
    21
    讚:
    0
    想查詢有關使用Student Transcript A (R-ASR032-E) 內歷年學生成績.而隨年級使用不同scale應如何處理

    本校的scale為以下
    P1-P4
    A 90 - 100%
    B 75 - 89%
    C 60 - 74%
    D 30 - 59%
    E 0 - 29%

    P5-P6
    A 85 - 100%
    B 75 - 84%
    C 60 - 74%
    D 30 - 59%
    E 0 - 29%

    S1-S3
    A 85 - 100%
    B 70 - 84%
    C 50 - 69%
    D 30 - 49%
    E 0 - 29%
    S4-S6
    A 80 - 100%
    B 65 - 79%
    C 45 - 64%
    D 30 - 39%
    E 0 - 29%

    Crystal Report 內的query
    SHARED NUMBERVAR cntYear;

    if cntYear<DistinctCount({Command.schyear}) then(
    cntYear := cntYear + 1;
    )else(
    cntYear := 1;
    );


    if not isnull({Command.bygradeind}) and {Command.bygradeind} = 'Y' then
    (
    if isnull({Command.nameeng}) then
    '---------'
    else(
    stringvar bygrade;
    bygrade := Trim(left({Command.nameeng},3));
    if ToNumber(bygrade) >= 5 then 'A'
    else if ToNumber(bygrade) >= 4 then 'B'
    else if ToNumber(bygrade) >= 3 then 'C'
    else if ToNumber(bygrade) >= 2 then 'D'
    else if ToNumber(bygrade) >= 1 then 'E');
    )
    else if not isnull({Command.exdrptype}) then
    {Command.exdrptype}
    else
    (
    stringvar score;
    stringvar grade;
    if isnull({Command.percscore}) then
    score := ' '
    else
    score := totext({Command.percscore}, '###.##');

    if isnull({Command.nameeng}) then
    grade := ' '
    else(
    //grade := left({Command.nameeng},3)
    if ToNumber(score) >= 85 then
    grade := 'A'
    else if ToNumber(score) >= 70 then
    grade := 'B'
    else if ToNumber(score) >= 50 then
    grade := 'C'
    else if ToNumber(score) >= 30 then
    grade := 'D'
    else if ToNumber(score) >= 0 then
    grade := 'E'
    );

    // for grade alignment
    if len(grade) = 1 then
    grade := grade + ' ';

    select {?scoreorgrade}
    case 'GRADE':
    if isnull({Command.nameeng}) then
    '---------'
    else
    grade
    case 'SCORE':
    if isnull({Command.percscore}) then
    '---------'
    else
    score
    default:
    if isnull({Command.percscore}) and isnull({Command.nameeng}) then
    '---------'
    else
    score +' ' + grade
    )
     
    #1 khchiu1426, 2019-09-06
  2. 57873296

    edb-rn
    Expand Collapse

    文章:
    164
    讚:
    0
    老師,請參考以下:

    由於 學生歷年成績紀錄表A (R-ASR032-E) (英文版),
    在 score 子報表內,
    Command 本身沒有顯示 classlvl 欄位,
    需要修改 Command SQL,
    增加顯示 classlvl 欄位。

    然後,再修改 formula @scoregrade,
    用 classlvl 欄位,
    按照 不同年級,使用不同分數 scale。
     

    附件文件:

  3. 56630230

    khchiu1426
    Expand Collapse

    文章:
    21
    讚:
    0
    謝謝你的解答, 我想不顯示conduct,已抑制顯示但仍出現
    如若學生成績超過一頁scale會出1-5而不是A-E
     

    附件文件:

    #3 khchiu1426, 2019-09-09
  4. 57873296

    edb-rn
    Expand Collapse

    文章:
    164
    讚:
    0
    老師,請參考以下:

    由於 學生歷年成績紀錄表A (R-ASR032-E) (英文版)內,
    共有 3個 conduct 子報表,
    如果不想顯示 conduct,
    就要將 3個 conduct 子報表,都Suppress (抑制顯示),
    並且,將"x+2" Button 內的語句 (//註釋 Comment)。

    另外,報表同樣地,
    有 3個 score 子報表(score.rpt,score2.rpt,score3.rpt),
    如果要顯示 超過一頁,
    就要將 3個子報表,都用同樣的方法修改。
     

    附件文件: