Погледнете ги упатствата за PANTHEON™

 Категории
 Главна страна - Добре дојдовте во помош за PANTHEON
[Collapse]PANTHEON
 [Collapse]PANTHEON упатства
  [Expand]Водич за PANTHEON Farming
  [Collapse]Водич за Datalab PANTHEON™
   [Expand]Помош
   [Expand]ПОС
   [Collapse]Подесувања
    [Expand]Партнери
    [Expand]Иденти
    [Expand]Производство
    [Expand]ПОС
    [Expand]Вработени
     Календар
    [Expand]Сметководство
    [Expand]Царина
    [Collapse]Програм
     [Expand]Програма за доверба
     [Expand]Видови документи
     [Collapse]Облици на испис
       Поставки во Администраторска конзола
       Изоз на испис
       Узоз на испис
       Кратенка за испис
      [Expand]Облици на испис
       Клонирање исписи и менување тип на исписи
       Преглед на испис
      [Expand]Користење SQLEXP израз во исписи
      [Expand]Дизајнер на извештаи
      [Expand]Пораки поврзани со исписи
      [Expand]Создавање Извештаи
      [Expand]Групи и Агрегати
      [Expand]Креирање исписи
      [Expand]Форматирање и Истакнување
       Вгнездени Извештаи (Подизвештаи)
      [Expand]Спецификации на печатите во ПАНТЕОН
      [Collapse]Скрипт
        "Здраво, Свету!" Скрипт
        Користење на променливи, полиња на база на податоци и агрегатни функции
        Користење на Извештај Објекти во Скриптата
        Настани
        Пример за користење на настанот "OnBeforePrint"
        Печатење на групна сума во групната глава
        Тековна сума
        "OnAfterData" настан
        Сервис Објекти
        Користење на објектот "Мотор"
       [Expand]PANTHEON Функции за FastReport
       [Expand]Примери со Табели и Запроси
       Разглед на дизајн на извештајот
      Текстови на документи
      Начин на достава
     [Expand]АРЕС
     [Expand]Администраторска конзола
     [Expand]Картички за доверба
      Ад-хок анализа
     [Expand]Тековен корисник
     [Expand]Елементи на контролна табла
      Извештаи на контролна табла
      SQL уредувач
    [Expand]Документација
   [Expand]Нарачки
   [Expand]Материјално
   [Expand]Производство
   [Expand]Сервис
   [Expand]ПОС
   [Expand]Финансии
   [Expand]Кадри
   [Expand]Работна површина
   [Expand]Анализи
    Додатно
   [Expand]Аналитика
   [Expand]Пораки и предупредувања
   [Expand]Системско окружување за Даталаб програми
   [Expand]Официјални објаснувања
    Речник на термини
   [Expand]Дополнителни програми
   [Expand]Застарени производи
  [Expand]Водич за PANTHEON Ретал
  [Expand]Водич за PANTHEON Вет
 [Expand]PANTHEON кориснички прирачници
[Expand]PANTHEON Web
[Expand]PANTHEON Гранула
[Expand]Кориснички сервер

Load Time: 765,5983 ms
print   |
Label

Печатење на групна сума во заглавието на групата

Печатење на групна сума во заглавието на групата

Оваа метода се користи доста често и бара користење на скрипта бидејќи вредноста на групната сума е позната само по обработката на сите записи во групата. За да се прикаже сумата во заглавието на групата (т.е. пред групата да биде излезена во извештајот) се користи следниот алгоритам:

- вклучете ја опцијата за извештај со два проаѓања (“Извештај > Опции...” мени ставка)

- во првото проаѓање, пресметајте ги сумите за секоја група и зачувајте ги во низата

- во второто проаѓање, извлечете ги вредностите од низата и прикажете ги во заглавијата на групите

 Да покажеме две методи за извршување на оваа задача. Прво создадете клон на извештајот '147 - Склад на датум по складишта и артикли'​ кој може да се најде во програмското мени 'Стоки | Извештаи за Склад | Тековен Склад'.

Овозможете двојно проаѓање во поставките на извештајот (“Извештај > Опции...” мени ставка). Во уредникот на бендот “GroupHeader”, внесете го tbIzpisTrenZaloga."acWarehouse" полето за податоци. Поврзете го бендот за податоци со изворот на податоци “Група” и потоа распоредете некои објекти на следниов начин:

За да ја прикажеме сумата, користиме обоени објекти во дизајнот. Ги именувавме "Sum1" и "Sum2".

Во објектот именуван "Sum1" резултатот од првата метода ќе биде прикажан и вообјектот именуван "Sum2" резултатот од втората метода ќе биде прикажан.

Првата метода.

Ќе ја користиме класата "TStringList" како низa за чување на сумите - ќе ги чуваме бројчаните вредности како низи. Првиот елемент во StringList ќе одговара на сумата на првата група, и така натаму. Целобројна променлива (која ќе ја зголемуваме по печатењето на секоја група) се користи за пресметување на индексниот број на групата.

Така нашата скрипта ќе изгледа вака:

var

   List: TStringList;

   i: Integer;

procedure OnStartReport(Sender: TfrxComponent);

begin

  List := TStringList.Create;

end;

procedure OnStopReport(Sender: TfrxComponent);

begin

  List.Free;

end;

procedure Page1OnBeforePrint(Sender: TfrxComponent);

begin

  i := 0;

end;

procedure  hSkladOnBeforePrint(Sender: TfrxComponent);

begin

  if Engine.FinalPass then

    Sum1.Text := 'Сума: ' + List[i];

end;

procedure fSkladOnBeforePrint(Sender: TfrxComponent);

begin

  if not Engine.FinalPass then

    List.Add(FormatFloat('#,##0.00',SUM(<tbIzpisTrenZaloga."ZALVREDNOST">, Detail)));

  Inc(i);

end;

begin

 

end.

Имената на процедурите во скриптата покажуваат кои настани сме ги користеле. Тие се: “Извештај.OnStartReport”, “Извештај.OnStopReport”, "Page1.OnBeforePrint", "hSkladHeader1.OnBeforePrint" и "fSklad.OnBeforePrint". Првите две настани се повикуваат на почетокот и на крајот на извештајот соодветно. За да создадете обработувачи за овие два настани, изберете го објектот “Извештај” во паѓачкиот список на инспекторот на објекти и неговите својства ќе се појават во инспекторот на објекти. Потоа префрлете се на табот “Настани” на инспекторот на објекти и создадете ги обработувачите.

Зошто не ја создадовме променливата “List” во главната процедура на скриптата? Ја создадовме во настанот "OnStartReport" бидејќи динамички создадените променливи треба да се уништат по завршувањето на извештајот. Логично е да се создадат динамички променливи во настанот “OnStartReport” и да се уништат во настанот “OnStopReport”. Во другите случаи (кога меморијата не треба да се ослободи по завршувањето на скриптата) може да се користи главната процедура на скриптата за инициализација на променливите.

Создавањето и уништувањето на променливата “List” е едноставно. Сега да видиме како работи скриптата. На почетокот на страницата, бројачот за тековната група (променливата “i”) се ресетира на нула и се зголемува по печатењето на секоја група (во настанот “GroupFooter1.OnBeforePrint”). Пресметаната сума се додава во “List” во овој настан пред бројачот да се зголеми. Настанот “GroupHeader1.OnBeforePrint” не прави ништо за време на првото проаѓање (Ако условот “Engine.FinalPass”) но за време на второто проаѓање (кога “List” е исполнета со вредности) сумата која одговара на тековната група се извлекува од “List” и се изнесува во објектот "Sum1" за да се прикаже сумата во заглавието на групата. Во завршениот извештај, изгледа вака:

Овој алгоритам е доста едноставен. Сепак, може да се поедностави.

Втората метода.

Ќе ја користиме колекцијата на променливи на извештајот како низa за чување на групните суми. Запомнете дека променливите на извештајот се достапни преку функциите “Get” и “Set”. Користењето на овие функции исто така не ни заштедува од потребата да создадеме и уништиме овие променливи експлицитно. Нашата скрипта ќе изгледа вака:

procedure  hSkladOnBeforePrint(Sender: TfrxComponent);

begin

  if Engine.FinalPass then

    Sum2.Text := 'Сума: ' + FormatFloat('#,##0.00', Get(<tbIzpisTrenZaloga."acWarehouse">));

end;

procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);

begin

  Set(<tbIzpisTrenZaloga."acWarehouse">, SUM(<tbIzpisTrenZaloga."ZALVREDNOST">, Detail));

end;

begin

 

end.

Како што можете да видите, оваа скрипта е малку поедноставна. Кодот во обработувачот “fSklad.OnBeforePrint” ја поставува вредноста на променливата со име добиено од бројот на клиентот (или било кој друг идентификатор кој недвосмислено го идентификува клиентот може да се користи, на пример <tbIzpisTrenZaloga."acWarehouse">). Ако не постои променлива со тоа име, скриптата автоматски ја создава; инаку, ако постои, нејзината вредност се ажурира. Во обработувачот “hSklad.OnBeforePrint” вредноста на соодветната променлива се извлекува.

Завршениот извештај изгледа вака:

Втората метода не функционира за повеќекратно групирање и за прикажување на повеќе суми на полиња во заглавието на групата.

Пример за неколку суми на полиња во заглавието на групата е во извештајот '32A - Доцнење на Плаќања - По Поврзани Документи' кој е во програмското мени 'Финансии | Извештаи | Доцнење на Плаќања'.



Rate this topic
Was this topic usefull?
Comments
Comment will also bo visible in forum!