---
title: O-Calc Pro Report – “My First Report” – O-Calc Pro Wiki
description: The default O-Calc Pro Report template will create a simple report with default header and a single table of pole capacity utilization values.  Below are s
---

[O-Calc ](https://www.osmose.com/o-calc/wiki)

# [O-Calc Pro Report – “My First Report” – O-Calc Pro Wiki](https://www.osmose.com/o-calc/wiki/2015/11/18/o-calc-pro-report-my-first-report)

 Written by [Admin](https://www.osmose.com/o-calc/wiki/author/admin) | Nov 18, 2015 4:41:00 PM

The default ***O-Calc Pro Report ***template will create a simple report with default header and a single table of pole capacity utilization values.  Below are some explanations of the various code components of this simple report example.

### Defining the Report Format, Fonts, and Colors:

[< View plain text >](https://www.osmose.com/o-calc/wiki/2015/11/18/o-calc-pro-report-my-first-report?hs_amp=true#)

 C#

1. public static class ReportFont
2. {
3. public static double cPageWidth = 6.25 ;
4. public static string cFontName = "Arial" ;
5. public static MD . Unit cFontSizeLarge = MD . Unit . FromPoint ( 9.75 ) ;
6. public static MD . Unit cFontSizeSmall = MD . Unit . FromPoint ( 7.85 ) ;
7. }
8.  
9. public partial class Report : PPL_Lib . ReportTemplate
10. {
11.  
12. //globally defined colors and fonts
13. MD . Color Yellow = MD . Colors . LightYellow ;
14. MD . Color White = MD . Colors . White ;
15. MD . ParagraphAlignment JustifyRight = MD . ParagraphAlignment . Right ;
16. MD . ParagraphAlignment JustifyLeft = MD . ParagraphAlignment . Left ;
17. MD . ParagraphAlignment JustifyCenter = MD . ParagraphAlignment . Center ;
18. MD . Font SmallFont = new MD . Font (ReportFont . cFontName, ReportFont . cFontSizeSmall ) ;
19. MD . Font StandardFont = new MD . Font (ReportFont . cFontName, ReportFont . cFontSizeLarge ) ;
20. FontModifier Bold = new FontModifier ( true, false, false ) ;

This font, color, and paragraph parameters will be used in the main body of the report. These parameters do not define the header section of the report.

### Define the Name (or Names) of the Report(s):

[< View plain text >](https://www.osmose.com/o-calc/wiki/2015/11/18/o-calc-pro-report-my-first-report?hs_amp=true#)

 C#

1. //implement more than one additional report subtype (total will be this number plus the master)
2. public override int SubtypesCount { get { return 0 ; } }
3.  
4. public override REPORT_TYPE Type { get { return REPORT_TYPE . INTEGRATED ; } }
5. public override String Name { get { return "My First Report" ; } }
6. public override String Description { get { return Name ; } }
7.  
8. //make sure to implement ToString to show report name
9. public override String ToString ( ) { return Name ; }

If you are defining more than one report time, change the SubtypesCount and create a separate name for each subtype.  In this example, a single report with the name “My First Report” is being created.

### Define the structure type that is applicable for the report:

[< View plain text >](https://www.osmose.com/o-calc/wiki/2015/11/18/o-calc-pro-report-my-first-report?hs_amp=true#)

 C#

1. //determine if this report is applicable for a structure
2. public override bool IsApplicable (PPLMain pPPLMain, PPLPole pPole )
3. {
4. if (Filtered ) return false ;
5. if (pPole is PPLWoodPole )
6. {
7. return true ;
8. }
9. return false ;
10. }
11. public override bool IsApplicableForType (PPLMain . POLE_TYPE pType )
12. {
13. if (Filtered ) return false ;
14. return (pType == PPLMain . POLE_TYPE . WOOD ) ;
15. }

This section of the report will enable the user to determine what structure type this report will run on.  Structure types include WOOD, STEEL, COMPOSITE, CONCRETE, SEGMENTED, MULTI-POLE, and/or LATTICE.  In the example code above, this report will show up in the O-Calc Pro interface as an applicable report only for pole type of WOOD.

### Add the Pole and format the Report as Desired

[< View plain text >](https://www.osmose.com/o-calc/wiki/2015/11/18/o-calc-pro-report-my-first-report?hs_amp=true#)

 C#

1. public override void AddPole (PPLPole pPole, String pPoleName )
2. {
3. String pplx = cPPLMain . ReportingLoadedPolePath ;
4. try
5. {
6. pplx = System.IO . Path . GetFileName (pplx ) ;
7. }
8. catch { }
9.  
10. PoleLoadInfo poleInfoMaster = cPPLMain . CurrentPoleLoadInfo ;
11. ReportItems reportItems = new ReportItems (poleInfoMaster, cPPLMain, pplx ) ;
12. ReportItems . ReportParameters RP = reportItems . cReportParameters ;
13.  
14. CreateTable (ReportFont . cPageWidth, 4 ) ;
15. cCurrentTable . Format . Font = SmallFont . Clone ( ) ;
16. cCurrentTable . Borders . Visible = false ;
17. //Header Row
18. AddRow (Cell ( "Pole Capacity Utilization (%)", 2, MD . Colors . White, JustifyLeft, StandardFont, Bold ),
19. Cell ( "Height" + "\n(" + RP . Units_Len_Large_Abrev + ")", MD . Colors . White, JustifyRight, StandardFont, Bold ),
20. Cell ( "Wind Angle" + "\n(deg)", MD . Colors . White, JustifyRight, StandardFont, Bold ) ) ;
21. cCurrentTable . RightPadding = MD . Unit . FromInch ( 0.125 ) ;
22.  
23. //First Row
24. AddRow (Cell ( "Maximum", JustifyLeft ),
25. Cell (Math . Round (RP . Sum_MCU, 1 ) . ToString ( "0.0" ), Yellow, JustifyRight, StandardFont, Bold,
26. GetColorFromValueAndTolerance (RP . Sum_MCU, 80, 90, 99.5 ) ),
27. Cell (Math . Round (RP . Sum_MCU_Height, 1 ) . ToString ( "0.0" ), JustifyRight ),
28. Cell (Math . Round (RP . Sum_MCU_Wind_Angle, 1 ) . ToString ( "0.0" ), JustifyRight ) ) ;
29.  
30. //Second Row
31. AddRow (Cell ( "Groundline", JustifyLeft ),
32. Cell (Math . Round (RP . Sum_GLCU, 1 ) . ToString ( "0.0" ), Yellow, JustifyRight, StandardFont, Bold,
33. GetColorFromValueAndTolerance (RP . Sum_GLCU, 80, 90, 99.5 ) ),
34. Cell (Math . Round (RP . Sum_GLCU_Height, 1 ) . ToString ( "0.0" ), JustifyRight ),
35. Cell (Math . Round (RP . Sum_GLCU_Wind_Angle, 1 ) . ToString ( "0.0" ), JustifyRight ) ) ;
36.  
37. //Third Row
38. AddRow (Cell ( "Vertical", JustifyLeft ),
39. Cell (Math . Round (RP . Sum_Vertical_Buckling_CU, 1 ) . ToString ( "0.0" ), Yellow, JustifyRight, StandardFont, Bold,
40. GetColorFromValueAndTolerance (RP . Sum_Vertical_Buckling_CU, 80, 90, 99.5 ) ),
41. Cell (Math . Round (RP . Sum_Vertical_Buckling_Column_Height, 1 ) . ToString ( "0.0" ), JustifyRight ),
42. Cell (Math . Round (RP . Sum_Vertical_Buckling_Wind_Angle, 1 ) . ToString ( "0.0" ), JustifyRight ) ) ;
43.  
44. cCurrentTable . BottomPadding = MD . Unit . FromInch ( 0.03 ) ;
45. cCurrentTable . TopPadding = MD . Unit . FromInch ( 0.03 ) ;
46.  
47. cCurrentTable . SetEdge ( 0, 0, cCurrentTable . Columns . Count, cCurrentTable . Rows . Count, MDT . Edge . Box, MD . BorderStyle . Single, 1, MD . Colors . Black ) ;
48. cCurrentTable . SetEdge ( 0, 0, cCurrentTable . Columns . Count, 1, MDT . Edge . Box, MD . BorderStyle . Single, 1, MD . Colors . Black ) ;
49.  
50. FinalizeTable ( ) ;
51. cDocument . LastSection . AddParagraph ( "\n" ) ;
52. }

 

[View full post](https://www.osmose.com/o-calc/wiki/2015/11/18/o-calc-pro-report-my-first-report)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Admin"
  },
  "dateModified" : "2023-10-04T14:54:22.872Z",
  "datePublished" : "2015-11-18T16:41:00Z",
  "headline" : "O-Calc Pro Report – “My First Report”",
  "image" : {
    "@type" : "ImageObject",
    "height" : 96,
    "url" : "https://20067784.fs1.hubspotusercontent-na1.net/hubfs/20067784/Imported_Blog_Media/facebook-Sep-28-2023-01-11-31-2368-PM.png",
    "width" : 96
  },
  "mainEntityOfPage" : "https://www.osmose.com/o-calc/wiki/2015/11/18/o-calc-pro-report-my-first-report",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "O-Calc"
  }
}
```