MEMBER('UPReport.clw') ! This is a MEMBER module INCLUDE('ABBREAK.INC'),ONCE INCLUDE('ABBROWSE.INC'),ONCE INCLUDE('ABPRHTML.INC'),ONCE INCLUDE('ABREPORT.INC'),ONCE INCLUDE('ABRPPSEL.INC'),ONCE INCLUDE('UPandUP.INC'),ONCE MAP INCLUDE('UPREP001.INC'),ONCE !Local module procedure declarations END Main PROCEDURE ! Generated from procedure template - Report !******************************************************************************** !* !* This procedure generated by UP & UP !* Version 1.0.00 !* !* Copyright© 2004-2005 !* Enabling Simplicity LLC !* All Rights Reserved Worldwide !* !* Licensed For One User On !* One Computer At a Time !* !* Compiled with Clarion for Windows version 6.100 !* !******************************************************************************** !* !* UP & UP is licensed for use by a single developer, specifically !* designated to Enabling Simplicity at time license is purchased. !* Transfer of license to a different developer requires notice !* to Enabling Simplicity and payment of a license transfer fee. !* UP & UP may not be redistributed as source code to anyone. !* Separate license is required for each individual who generates !* Clarion source code using this template. Clarion source code !* generated by UP & UP templates under valid license may be freely !* distributed. All distributed code must bear this notice. !* UP & UP Class source may not be redistributed to anyone. !* Any other use constitutes a crime under the copyright !* laws of the United States. Violators will be prosecuted. !* !******************************************************************************** Progress:Thermometer BYTE ! CustomerCount UNSIGNED ! OrderCount UNSIGNED ! OrderVolume DECIMAL(7,2) ! ReportLowValue STRING(30) !Customer Name ReportHighValue STRING(30) !Customer Name ItemCount USHORT ! ItemSum DECIMAL(7,2) !Extended Total Amount extendedprice DECIMAL(7,2) ! whatever STRING(20) ! StateCustomerCount STRING(20) ! LargestLineItem DECIMAL(7,2) !Price per Unit ItemsPerOrder REAL ! LargestCustomerLineItem DECIMAL(7,2) !Price per Unit LargestOverallItem DECIMAL(7,2) !Price per Unit OverallItemsPerOrder REAL ! OverallAvgOrderAmt DECIMAL(7,2) !Price per Unit OverallAvgItemAmount DECIMAL(7,2) !Price per Unit OverallOrderCount ULONG ! TotalCountOrderingCustomers ULONG ! AvgOrderAmt DECIMAL(7,2) !Price per Unit AvgItemAmt DECIMAL(7,2) !Price per Unit LargestItemInOrder DECIMAL(7,2) !Price per Unit AvgOrdersPerCustomer REAL ! OverallOrderTotal DECIMAL(7,2) ! AvgOrderItem DECIMAL(7,2) !Price per Unit TotalCustItems ULONG ! OverallItemCount ULONG ! Process::Customer::View VIEW(Customer) PROJECT(CUST:Address) PROJECT(CUST:City) PROJECT(CUST:CustNo) PROJECT(CUST:Name) PROJECT(CUST:Zip) JOIN(ST:ByCode,CUST:State) PROJECT(ST:StateCode) END END Process::Phones::View VIEW(Phones) PROJECT(PHONES:CustNo) PROJECT(PHONES:Phone) PROJECT(PHONES:PhoneType) END Process::Orders::View VIEW(Orders) PROJECT(ORD:CustNo) PROJECT(ORD:OrderDate) PROJECT(ORD:OrderNo) END Process::Items::View VIEW(Items) PROJECT(ITEM:CustNo) PROJECT(ITEM:LineNo) PROJECT(ITEM:OrderNo) PROJECT(ITEM:Price) PROJECT(ITEM:Quantity) PROJECT(ITEM:Total) JOIN(PROD:ByCode,ITEM:ProdCode) PROJECT(PROD:Description) PROJECT(PROD:Units) END END ! Process::Items::DDOQ QUEUE(SequencingQueue),BINDABLE PROD:Description LIKE(PROD:Description) PROD:Units LIKE(PROD:Units) END ! Process::Items::CacheQ QUEUE ITEM:CustNo LIKE(ITEM:CustNo) ITEM:LineNo LIKE(ITEM:LineNo) ITEM:OrderNo LIKE(ITEM:OrderNo) ITEM:Price LIKE(ITEM:Price) ITEM:Quantity LIKE(ITEM:Quantity) ITEM:Total LIKE(ITEM:Total) PROD:Description LIKE(PROD:Description) PROD:Units LIKE(PROD:Units) END ! ReportPageNumber LONG,AUTO ProgressWindow WINDOW('Progress...'),AT(,,142,54),CENTER,TIMER(1),GRAY,DOUBLE PROGRESS,USE(?ProgressThermometer),SMOOTH,AT(17,6,110,8),RANGE(0,100) STRING(''),AT(0,29,142,10),USE(?ProgressPctText),CENTER STRING(''),AT(1,40,141,10),USE(?ProgressUserString),CENTER BUTTON('&Cancel'),AT(47,16,50,10),USE(?ProgressCancel) END Report REPORT,AT(1000,2000,6500,7000),PAPER(PAPER:LETTER),PRE(RPT),FONT('Verdana',9,,FONT:regular,CHARSET:ANSI),THOUS HEADER,AT(1000,1000,6500,292),USE(?Header) STRING('Report of Orders by Customer'),AT(0,8,6500,267),USE(?String1),TRN,CENTER,FONT('Franklin Gothic Medium',14,,FONT:bold,CHARSET:ANSI) LINE,AT(1500,242,3500,0),USE(?Line7),COLOR(COLOR:Black) END CustI DETAIL,AT(,,,656),USE(?Detail),TOGETHER LINE,AT(0,36,6500,0),USE(?Line10),COLOR(COLOR:Black),LINEWIDTH(80) STRING('Customer'),AT(3118,109),USE(?String26),TRN STRING(@n05),AT(3800,109),USE(CUST:CustNo),TRN STRING(@s30),AT(55,109),USE(CUST:Name),TRN,FONT('Verdana',9,,FONT:bold,CHARSET:ANSI) STRING(@s30),AT(55,264),USE(CUST:Address),TRN,FONT('Verdana',9,,FONT:regular,CHARSET:ANSI) STRING(@s20),AT(55,436),USE(CUST:City),TRN,FONT('Verdana',8,,FONT:regular,CHARSET:ANSI) STRING(@s2),AT(1582,436),USE(ST:StateCode),TRN,FONT('Verdana',8,,FONT:regular,CHARSET:ANSI) STRING(@n05),AT(2582,409),USE(CUST:Zip),TRN,FONT('Courier New',9,,FONT:regular,CHARSET:ANSI) END CustH DETAIL,AT(,,,229),USE(?CustH) STRING('Customers'),AT(3033,42),USE(?String7),TRN END CustF2 DETAIL,WITHNEXT(1),AT(,,,760) LINE,AT(10,552,6500,0),USE(?Line17),COLOR(COLOR:Black) STRING('Grand Totals'),AT(2448,573,1600,177),USE(?String63:2),TRN,CENTER,FONT('Arial Black',10,,FONT:bold,CHARSET:ANSI) END FOOTER,AT(1000,9000,6500,323),USE(?Footer) LINE,AT(2500,67,1500,0),USE(?Line6),COLOR(COLOR:Black),LINEWIDTH(5) STRING('Page '),AT(2673,91,691,191),USE(?String25),TRN,CENTER STRING(@N3),AT(3391,100),USE(ReportPageNumber),FONT('Courier New',8,,,CHARSET:ANSI) END FORM,AT(1000,1000,6500,9000),USE(?Form) END CustF DETAIL,WITHPRIOR(1),AT(,,,1052),USE(?CustF) STRING(@n5),AT(1771,271,958,177),USE(TotalCountOrderingCustomers),TRN,RIGHT STRING(@N5),AT(1771,94,958,177),USE(CustomerCount),TRN,RIGHT,FONT(,9,,FONT:regular,CHARSET:ANSI) STRING('Total customers with orders'),AT(10,271),USE(?String45),TRN STRING('Total number of orders'),AT(10,448),USE(?String41),TRN STRING('Avg items per order'),AT(10,802),USE(?String42),TRN STRING(@n7.2),AT(5542,625,823,177),USE(OverallAvgItemAmount),TRN,RIGHT STRING('Total value of orders'),AT(10,625),USE(?String16:2),TRN STRING('Max item amount'),AT(3156,802),USE(?String46),TRN STRING(@n9.2),AT(5542,802,823,177),USE(LargestOverallItem),TRN,RIGHT STRING(@N12.2),AT(1771,625,958,177),USE(OverallOrderTotal),TRN,RIGHT STRING('Avg Order Amount'),AT(3156,448),USE(?String50),TRN STRING(@n7.2),AT(5542,448,823,177),USE(OverallAvgOrderAmt),TRN,RIGHT STRING('Avg orders per ordering customer'),AT(3156,271),USE(?String44),TRN STRING(@n5.2),AT(5542,271,823,177),USE(AvgOrdersPerCustomer),TRN,RIGHT STRING(@n5.2),AT(1771,802,958,177),USE(OverallItemsPerOrder),TRN,RIGHT STRING('Avg item amount'),AT(3156,625),USE(?String43:2),TRN STRING(@n5),AT(1771,448,958,177),USE(OverallOrderCount),TRN,RIGHT STRING('Total number of customers'),AT(9,94),USE(?String9),TRN,FONT('Verdana',9,,FONT:regular,CHARSET:ANSI) END PhonI DETAIL,WITHPRIOR(1),AT(,,,208),USE(?PhonI) STRING(@P(###) ###-####P),AT(1436,9),USE(PHONES:Phone),TRN,FONT('Courier New',9,,FONT:regular,CHARSET:ANSI) STRING(@s10),AT(2655,9),USE(PHONES:PhoneType),TRN,FONT('Verdana',9,,FONT:regular+FONT:italic,CHARSET:ANSI) END PhonH DETAIL,WITHNEXT(3),AT(,,,219),USE(?PhonH) LINE,AT(0,175,6500,0),USE(?Line1),COLOR(COLOR:Black) END PhonF DETAIL,AT(,,,323),USE(?PhonF) LINE,AT(0,55,6500,0),USE(?Line11),COLOR(COLOR:Black) END OrdrI DETAIL,WITHNEXT(1),AT(,,,344),USE(?OrdrI) BOX,AT(83,10,2000,208),USE(?Box1),COLOR(COLOR:Black),FILL(COLOR:White),LINEWIDTH(16) STRING(@d1),AT(1333,40),USE(ORD:OrderDate),TRN,FONT('Courier New',9,,FONT:regular,CHARSET:ANSI) STRING('Order'),AT(167,10),USE(?String40),TRN,FONT('Arial Black',9,,FONT:regular,CHARSET:ANSI) STRING(@n04),AT(615,40),USE(ORD:OrderNo),TRN,RIGHT,FONT('Courier New',10,,FONT:bold,CHARSET:ANSI) END OrdrH DETAIL,WITHPRIOR(1),WITHNEXT(2),AT(,,,104),USE(?OrdrH) LINE,AT(0,50,6500,0),USE(?Line16),COLOR(COLOR:Black) END OrderF2 DETAIL,WITHPRIOR(1),WITHNEXT(1),AT(,,,260) LINE,AT(0,50,6500,0),USE(?Line18),COLOR(COLOR:Black) STRING('Customer Totals'),AT(2448,73,1600,177),USE(?String63),TRN,CENTER,FONT('Arial Black',10,,FONT:bold,CHARSET:ANSI) END OrdrF DETAIL,WITHPRIOR(1),AT(,,,1198),USE(?OrdrF) STRING('Total number of orders'),AT(10,63),USE(?String15),TRN STRING('Avg Order Amount'),AT(3156,63),USE(?String50:2),TRN STRING(@n7.2),AT(5635,63,729,177),USE(AvgOrderAmt),TRN,RIGHT STRING(@n7.2),AT(5635,240,729,177),USE(AvgItemAmt),TRN,RIGHT STRING(@n6),AT(1958,52,771,177),USE(OrderCount),TRN,RIGHT STRING('Total value of orders'),AT(10,240),USE(?String16),TRN STRING(@N7.2),AT(1958,250,771,177),USE(OrderVolume),TRN,RIGHT STRING('Avg item amount'),AT(3156,240),USE(?String43),TRN STRING('Max item amount'),AT(3156,427),USE(?String46:2),TRN STRING(@n7.2),AT(5635,427,729,177),USE(LargestCustomerLineItem),TRN,RIGHT STRING('Avg items per order'),AT(10,427),USE(?String42:2),TRN STRING(@n5.2),AT(1958,427,771,177),USE(ItemsPerOrder),TRN,RIGHT END ItemI DETAIL,WITHPRIOR(1),AT(,,,156),USE(?ItemI) STRING(@s50),AT(9,18,2491,164),USE(PROD:Description),TRN,FONT('Verdana',8,,FONT:regular,CHARSET:ANSI) STRING('/ '),AT(2564,18),USE(?String34),TRN STRING(@s20),AT(2655,18),USE(PROD:Units),TRN,FONT('Verdana',8,,,CHARSET:ANSI) LINE,AT(4230,-18,0,192),USE(?Line8:2),COLOR(COLOR:Black) STRING(@n4),AT(4236,0,368,),USE(ITEM:Quantity),TRN,RIGHT(50),FONT('Courier New',8,,,CHARSET:ANSI) STRING(' @ '),AT(4655,0),USE(?String21),TRN,FONT('Verdana',8,,,CHARSET:ANSI) STRING(@n10.2),AT(4855,0,755,),USE(ITEM:Price),TRN,RIGHT(50),FONT('Courier New',8,,,CHARSET:ANSI) LINE,AT(5663,-18,0,192),USE(?Line8),COLOR(COLOR:Black) STRING(@n-10.2),AT(5664,0,750,),USE(extendedprice),TRN,RIGHT(50),FONT('Courier New',8,,,CHARSET:ANSI) END ItemH DETAIL,WITHPRIOR(1),AT(,,,250),USE(?ItemH) STRING('Item / Units'),AT(1345,0),USE(?String32),TRN,FONT('Verdana',8,,FONT:bold,CHARSET:ANSI) STRING(' Unit Price'),AT(4855,0,755,173),USE(?String36),TRN,RIGHT(50),FONT('Verdana',8,,FONT:bold,CHARSET:ANSI) STRING(' Extended'),AT(5664,0,750,173),USE(?String37),TRN,RIGHT(50),FONT('Verdana',8,,FONT:bold,CHARSET:ANSI) STRING(' @'),AT(4655,0),USE(?String38),TRN,FONT('Verdana',8,,,CHARSET:ANSI) STRING(' Qty'),AT(4236,0,368,173),USE(?String35),TRN,RIGHT(50),FONT('Verdana',8,,FONT:bold,CHARSET:ANSI) LINE,AT(9,173,6500,0),USE(?Line3),COLOR(COLOR:Black) LINE,AT(4230,173,0,87),USE(?Line12),COLOR(COLOR:Black) LINE,AT(5663,173,0,87),USE(?Line14),COLOR(COLOR:Black) END ItemF DETAIL,WITHPRIOR(2),AT(,,,531),USE(?ItemF) LINE,AT(4230,-10,0,77),USE(?Line13),COLOR(COLOR:Black) LINE,AT(5663,-10,0,77),USE(?Line15),COLOR(COLOR:Black) LINE,AT(0,67,6500,0),USE(?Line3:2),COLOR(COLOR:Black) STRING(' Total'),AT(4855,91,755,),USE(?String39),TRN,RIGHT(50),FONT(,,,FONT:bold,CHARSET:ANSI) STRING('Items'),AT(945,109),USE(?String24),TRN,FONT('Verdana',9,,,CHARSET:ANSI) STRING(@n10.2),AT(5664,91,755,173),USE(ItemSum),TRN,RIGHT(50),FONT('Courier New',8,,,CHARSET:ANSI) STRING(@n6),AT(255,109),USE(ItemCount),TRN END END ThisWindow CLASS(ESProcessManager) Init PROCEDURE(),BYTE,PROC,DERIVED ! Method added to host embed code Kill PROCEDURE(),BYTE,PROC,DERIVED ! Method added to host embed code Next PROCEDURE(),BYTE,PROC,DERIVED ! Method added to host embed code OpenReport PROCEDURE(),BYTE,PROC,DERIVED ! Method added to host embed code Reset PROCEDURE(BYTE Force=0),DERIVED ! Method added to host embed code Update PROCEDURE(),DERIVED ! Method added to host embed code END ! ! ---------- Customer Objects ---------- ! Process::Customer CLASS(ESProcess) ! Process Manager AskTotalCondition PROCEDURE(STRING ID),BYTE,DERIVED ! Method added to host embed code Configure PROCEDURE(),DERIVED ! Method added to host embed code TakeEnd PROCEDURE(),DERIVED ! Method added to host embed code TakeNoRecords PROCEDURE(),DERIVED ! Method added to host embed code TakeRecord PROCEDURE(),BYTE,PROC,DERIVED ! Method added to host embed code END Progress::Customer StepStringClass ! Progress Percentile Evaluator BreakMgr::Customer BreakManagerClass ! Break Manager ! ! ---------- Phones Objects ---------- ! Process::Phones CLASS(ESProcess) ! Process Manager Configure PROCEDURE(),DERIVED ! Method added to host embed code TakeRecord PROCEDURE(),BYTE,PROC,DERIVED ! Method added to host embed code END Progress::Phones StepStringClass ! Progress Percentile Evaluator ! ! ---------- Orders Objects ---------- ! Process::Orders CLASS(ESProcess) ! Process Manager AskTotalCondition PROCEDURE(STRING ID),BYTE,DERIVED ! Method added to host embed code Configure PROCEDURE(),DERIVED ! Method added to host embed code TakeEnd PROCEDURE(),DERIVED ! Method added to host embed code TakeNoRecords PROCEDURE(),DERIVED ! Method added to host embed code TakeRecord PROCEDURE(),BYTE,PROC,DERIVED ! Method added to host embed code TakeStart PROCEDURE(),DERIVED ! Method added to host embed code END Progress::Orders StepLongClass ! Progress Percentile Evaluator ! ! ---------- Items Objects ---------- ! Process::Items CLASS(ESProcess) ! Process Manager AskTotalCondition PROCEDURE(STRING ID),BYTE,DERIVED ! Method added to host embed code ComputeFields PROCEDURE(),DERIVED ! Method added to host embed code Configure PROCEDURE(),DERIVED ! Method added to host embed code TakeEnd PROCEDURE(),DERIVED ! Method added to host embed code TakeRecord PROCEDURE(),BYTE,PROC,DERIVED ! Method added to host embed code TakeStart PROCEDURE(),DERIVED ! Method added to host embed code END Progress::Items ESBlockSortStepClass ! Progress Percentile Evaluator Previewer PrintPreviewClass ! Print Previewer TargetSelector ReportTargetSelectorClass ! Report Target Selector HTMLReporter CLASS(HTMLReportGenerator) ! HTML SetUp PROCEDURE(),DERIVED ! Method added to host embed code END CODE GlobalResponse = ThisWindow.Run() ! Opens the window and starts an Accept Loop !--------------------------------------------------------------------------- DefineListboxStyle ROUTINE !| !| This routine create all the styles to be shared in this window !| It's called after the window open !| !--------------------------------------------------------------------------- ThisWindow.Init PROCEDURE ReturnValue BYTE,AUTO CODE GlobalErrors.SetProcedureName('Main') SELF.Request = GlobalRequest ! Store the incoming request ReturnValue = PARENT.Init() ReportLowValue = 'C' ReportHighValue = 'F' IF ReturnValue THEN RETURN ReturnValue. SELF.FirstField = ?ProgressThermometer SELF.VCRRequest &= VCRRequest SELF.Errors &= GlobalErrors ! Set this windows ErrorManager to the global ErrorManager CLEAR(GlobalRequest) ! Clear GlobalRequest after storing locally CLEAR(GlobalResponse) Relate:Customer.SetOpenRelated() Relate:Customer.Open ! File Customer used by this procedure, so make sure it's RelationManager is open SELF.FilesOpened = True ! --------------------------------------------------- ! Initialize objects for processing of Customer BreakMgr::Customer.Init() BreakMgr::Customer.AddBreak() BreakMgr::Customer.AddLevel() !States BreakMgr::Customer.AddResetField(ST:StateName) BreakMgr::Customer.AddTotal(StateCustomerCount,1) SELF.AddItem(BreakMgr::Customer) Progress::Customer.Init(ScrollSort:AllowAlpha+ScrollSort:AllowNumeric,ScrollBy:RunTime) Process::Customer.Init(Process::Customer::View, ?ProgressPctText, ?ProgressThermometer, Relate:Customer, Progress::Customer, CUST:Name) ! --------------------------------------------------- ! Initialize objects for processing of Phones Progress::Phones.Init(ScrollSort:AllowAlpha+ScrollSort:AllowNumeric,ScrollBy:RunTime) Process::Phones.Init(Process::Phones::View,,,Relate:Phones, Progress::Phones, PHONES:PhoneType) ! --------------------------------------------------- ! Initialize objects for processing of Orders Progress::Orders.Init(ScrollSort:AllowNumeric) Process::Orders.Init(Process::Orders::View,,,Relate:Orders, Progress::Orders, ORD:OrderNo) ! --------------------------------------------------- ! Initialize objects for processing of Items Progress::Items.Init(ScrollSort:AllowNumeric) Process::Items.Init(Process::Items::View,,,Relate:Items, Progress::Items, ITEM:LineNo) ! --------------------- SELF.Open(ProgressWindow) ! Open window Do DefineListboxStyle INIMgr.Fetch('Main',ProgressWindow) ! Restore window settings from non-volatile store TargetSelector.AddItem(HTMLReporter.IReportGenerator) IF NOT TargetSelector.ASK(1) THEN SELF.Kill() RETURN Level:Fatal END IF NOT TargetSelector.GetPrintSelected() THEN SELF.SetReportTarget(TargetSelector.GetSelected()) END SELF.AddItem(TargetSelector) SELF.AddItem(?ProgressCancel,RequestCancelled) SELF.Init(Process::Customer,Report,Previewer) ?ProgressUserString{Prop:Text}='The User Message' Relate:Customer.SetQuickScan(1,Propagate:OneMany) SELF.SkipPreview = False Previewer.SetINIManager(INIMgr) Previewer.AllowUserZoom=True Previewer.SetPosition(10,10,315,200) SELF.SetAlerts() RETURN ReturnValue ThisWindow.Kill PROCEDURE ReturnValue BYTE,AUTO CODE ReturnValue = PARENT.Kill() IF ReturnValue THEN RETURN ReturnValue. IF SELF.FilesOpened Relate:Customer.Close END IF SELF.Opened INIMgr.Update('Main',ProgressWindow) ! Save window data to non-volatile store END GlobalErrors.SetProcedureName RETURN ReturnValue ThisWindow.Next PROCEDURE ReturnValue BYTE,AUTO First BYTE CODE ReturnValue = PARENT.Next() RETURN ReturnValue ThisWindow.OpenReport PROCEDURE ReturnValue BYTE,AUTO CODE SYSTEM{PROP:PrintMode} = 3 ReturnValue = PARENT.OpenReport() IF ReturnValue = Level:Benign Report$?ReportPageNumber{PROP:PageNo}=True END IF ReturnValue = Level:Benign SELF.Report{PROPPRINT:Extend}=True END RETURN ReturnValue ThisWindow.Reset PROCEDURE(BYTE Force=0) CODE SELF.ForcedReset += Force IF ProgressWindow{Prop:AcceptAll} THEN RETURN. PARENT.Reset(Force) RETURN PROD:ProdCode = ITEM:ProdCode ! Assign linking field value Access:Product.Fetch(PROD:ByCode) ST:StateCode = CUST:State ! Assign linking field value Access:State.Fetch(ST:ByCode) PARENT.Reset(Force) ThisWindow.Update PROCEDURE CODE PARENT.Update PROD:ProdCode = ITEM:ProdCode ! Assign linking field value Access:Product.Fetch(PROD:ByCode) ST:StateCode = CUST:State ! Assign linking field value Access:State.Fetch(ST:ByCode) Process::Customer.AskTotalCondition PROCEDURE(STRING ID) ReturnValue BYTE,AUTO CODE ReturnValue = PARENT.AskTotalCondition(ID) CASE ID OF 'Ordering Customers' ReturnValue = CHOOSE(OrderCount > 0) OF 'Avg Orders Per Customer' ReturnValue = CHOOSE(OrderCount > 0) END RETURN ReturnValue Process::Customer.Configure PROCEDURE CODE PARENT.Configure SELF.AddSortOrder(CUST:ByName) SELF.AddRange(CUST:Name,ReportLowValue,ReportHighValue) SELF.CaseSensitiveValue = FALSE SELF.TotalMgr.AddItem('Customer Count',ESTotalType:Count,CustomerCount,CustomerCount) SELF.TotalMgr.AddItem('Ordering Customers',ESTotalType:Count,TotalCountOrderingCustomers,TotalCountOrderingCustomers) SELF.RollupMgr.AddItem('Overall Item Count',ESTotalType:Sum,OverallItemCount,TotalCustItems) SELF.RollupMgr.AddItem('Lagest Overall Line Item',ESTotalType:Max,LargestOverallItem,LargestCustomerLineItem) SELF.RollupMgr.AddItem('Overall Order Count',ESTotalType:Sum,OverallOrderCount,OrderCount) SELF.RollupMgr.AddItem('Overall Order Volume',ESTotalType:Sum,OverallOrderTotal,OrderVolume) SELF.RollupMgr.AddItem('Avg Orders Per Customer',ESTotalType:Average,AvgOrdersPerCustomer,OrderCount) SELF.AddItem(Process::Phones) ! Add child process SELF.AddItem(Process::Orders) ! Add child process Process::Customer.TakeEnd PROCEDURE CODE PARENT.TakeEnd OverallAvgItemAmount = OverallOrderTotal / OverallItemCount OverallAvgOrderAmt = OverallOrderTotal / OverallOrderCount OverallItemsPerOrder = OverallItemCount / OverallOrderCount PRINT(RPT:CustF2) PRINT(RPT:CustF) Process::Customer.TakeNoRecords PROCEDURE CODE PARENT.TakeNoRecords PRINT(RPT:CustF2) PRINT(RPT:CustF) Process::Customer.TakeRecord PROCEDURE ReturnValue BYTE,AUTO CODE ReturnValue = PARENT.TakeRecord() PRINT(RPT:CustI) RETURN ReturnValue Process::Phones.Configure PROCEDURE CODE PARENT.Configure SELF.AddSortOrder(PHONES:ByCustNo) SELF.AddRange(PHONES:CustNo,Relate:Phones,Relate:Customer) SELF.CaseSensitiveValue = FALSE Process::Phones.TakeRecord PROCEDURE ReturnValue BYTE,AUTO CODE ReturnValue = PARENT.TakeRecord() PRINT(RPT:PhonI) RETURN ReturnValue Process::Orders.AskTotalCondition PROCEDURE(STRING ID) ReturnValue BYTE,AUTO CODE ReturnValue = PARENT.AskTotalCondition(ID) CASE ID OF 'Average Order Amount' ReturnValue = CHOOSE(ItemSum > 0) END RETURN ReturnValue Process::Orders.Configure PROCEDURE CODE PARENT.Configure SELF.AddSortOrder(ORD:ByCustomer) SELF.AddRange(ORD:CustNo,Relate:Orders,Relate:Customer) SELF.TotalMgr.AddItem('Order Count',ESTotalType:Count,OrderCount,OrderCount) SELF.RollupMgr.AddItem('Order Volume',ESTotalType:Sum,OrderVolume,ItemSum) SELF.RollupMgr.AddItem('Items Per Order',ESTotalType:Average,ItemsPerOrder,ItemCount) SELF.RollupMgr.AddItem('Maximum Item',ESTotalType:Max,LargestCustomerLineItem,LargestItemInOrder) SELF.RollupMgr.AddItem('Average Order Amount',ESTotalType:Average,AvgOrderAmt,ItemSum) SELF.RollupMgr.AddItem('Total Customer Items',ESTotalType:Sum,TotalCustItems,ItemCount) SELF.AddItem(Process::Items) ! Add child process Process::Orders.TakeEnd PROCEDURE CODE PARENT.TakeEnd AvgItemAmt = OrderVolume/TotalCustItems PRINT(RPT:OrderF2) PRINT(RPT:OrdrF) Process::Orders.TakeNoRecords PROCEDURE CODE PARENT.TakeNoRecords CLEAR(AvgItemAmt) PRINT(RPT:OrderF2) PRINT(RPT:OrdrF) Process::Orders.TakeRecord PROCEDURE ReturnValue BYTE,AUTO CODE ReturnValue = PARENT.TakeRecord() PRINT(RPT:OrdrI) RETURN ReturnValue Process::Orders.TakeStart PROCEDURE CODE PARENT.TakeStart PRINT(RPT:OrdrH) Process::Items.AskTotalCondition PROCEDURE(STRING ID) ReturnValue BYTE,AUTO CODE ReturnValue = PARENT.AskTotalCondition(ID) CASE ID OF 'Average Item' ReturnValue = CHOOSE(extendedprice > 0) END RETURN ReturnValue Process::Items.ComputeFields PROCEDURE CODE PARENT.ComputeFields ! ------------------------------------------------------------------------ ! Setup for computed field extendedprice extendedprice = ITEM:Quantity * ITEM:Price Process::Items.Configure PROCEDURE CODE PARENT.Configure SELF.AddSortOrder(ITEM:AsEntered) SELF.AddRange(ITEM:CustNo,Relate:Items,Relate:Orders) BIND(Process::Items::DDOQ) SELF.AddSorting(Process::Items::CacheQ,'+PROD:Description,+PROD:Units',Process::Items::DDOQ) SELF.SortedSet.OrderPairs.AddPair(Process::Items::DDOQ.PROD:Description,PROD:Description,0) SELF.SortedSet.OrderPairs.AddPair(Process::Items::DDOQ.PROD:Units,PROD:Units,0) SELF.SortedSet.AddPair(Process::Items::CacheQ.ITEM:CustNo,ITEM:CustNo) SELF.SortedSet.AddPair(Process::Items::CacheQ.ITEM:LineNo,ITEM:LineNo) SELF.SortedSet.AddPair(Process::Items::CacheQ.ITEM:OrderNo,ITEM:OrderNo) SELF.SortedSet.AddPair(Process::Items::CacheQ.ITEM:Price,ITEM:Price) SELF.SortedSet.AddPair(Process::Items::CacheQ.ITEM:Quantity,ITEM:Quantity) SELF.SortedSet.AddPair(Process::Items::CacheQ.ITEM:Total,ITEM:Total) SELF.SortedSet.AddPair(Process::Items::CacheQ.PROD:Description,PROD:Description) SELF.SortedSet.AddPair(Process::Items::CacheQ.PROD:Units,PROD:Units) SELF.TotalMgr.AddItem('Item Count',ESTotalType:Count,ItemCount,ItemCount) SELF.TotalMgr.AddItem('Item Sum',ESTotalType:Sum,ItemSum,ITEM:Total) SELF.TotalMgr.AddItem('Largest line item',ESTotalType:Max,LargestItemInOrder,extendedprice) SELF.TotalMgr.AddItem('Average Item',ESTotalType:Average,AvgOrderItem,extendedprice) Process::Items.TakeEnd PROCEDURE CODE PARENT.TakeEnd PRINT(RPT:ItemF) Process::Items.TakeRecord PROCEDURE ReturnValue BYTE,AUTO CODE ReturnValue = PARENT.TakeRecord() PRINT(RPT:ItemI) RETURN ReturnValue Process::Items.TakeStart PROCEDURE CODE PARENT.TakeStart PRINT(RPT:ItemH) HTMLReporter.SetUp PROCEDURE CODE PARENT.SetUp SELF.SetFileName('') SELF.SetDocumentName('Clarion Report') SELF.SetNavigationText('First','Last','Next','Prior','Select Page','Page_','Load Page') SELF.SetSubDirectory(1,'_Files','_Images') SELF.SetDocumentName('Up & Up Demo Report')