Subject Re: how to calculate 2 records of the same column of a grid?
From Mervyn Bick <invalid@invalid.invalid>
Date Wed, 13 Jan 2021 08:25:17 +0200
Newsgroups dbase.getting-started
Attachment(s) dirkSample1.wfm

On 2021/01/13 01:06, Leslie Shewchuk wrote:
> Hello dirk.
>
> Please try the attached and see if this does what you are looking for.
>

I've slightly modified your example to show an alternative way to
display daily totals.

Mervyn.



** END HEADER -- do not remove this line
//
// Generated on 2021-01-13
//
parameter bModal
local f
f = new DirkSample1Form()
if (bModal)
   f.mdi = false // ensure not MDI
   f.readModal()
else
   f.open()
endif

class DirkSample1Form of FORM
   with (this)
      onOpen = class::FORM_ONOPEN
      height = 18.2273
      left = -0.7143
      top = 1.0
      width = 92.2857
      text = ""
   endwith

   this.SAMPLE3 = new QUERY(this)
   with (this.SAMPLE3)
      left = 44.0
      top = 2.0
      width = 5.0
      height = 1.0
      sql = "select trandate,sum(amount)  from Sample group by trandate"
      active = true
   endwith

   this.SAMPLE1 = new QUERY(this)
   with (this.SAMPLE1)
      left = 40.0
      width = 5.0
      height = 1.0
      sql = 'select * from "Sample.dbf"'
      active = true
   endwith

   with (this.SAMPLE1.rowset)
      onNavigate = class::ROWSET_ONNAVIGATE
      onSave = class::ROWSET_ONSAVE
   endwith

   this.SAMPLE2 = new QUERY(this)
   with (this.SAMPLE2)
      left = 47.0
      width = 5.0
      height = 1.0
      sql = 'select * from "Sample.dbf"'
      active = true
   endwith

   this.CONTAINER1 = new CONTAINER(this)
   with (this.CONTAINER1)
      left = 0.0
      top = 13.1364
      width = 92.0
      height = 5.0
      anchor = 1        // Bottom
   endwith

   this.CONTAINER1.TEXT1 = new TEXT(this.CONTAINER1)
   with (this.CONTAINER1.TEXT1)
      height = 1.0
      left = 2.5714
      top = 0.7273
      width = 15.0
      border = true
      alignVertical = 1        // Middle
      text = "Text1"
      borderStyle = 4        // Single
      pageno = 0
   endwith

   this.CONTAINER1.TEXT2 = new TEXT(this.CONTAINER1)
   with (this.CONTAINER1.TEXT2)
      height = 1.0
      left = 51.1429
      top = 0.5455
      width = 15.0
      border = true
      alignVertical = 1        // Middle
      text = "Total"
      borderStyle = 4        // Single
      pageno = 0
   endwith

   this.CONTAINER1.ENTRYFIELD1 = new ENTRYFIELD(this.CONTAINER1)
   with (this.CONTAINER1.ENTRYFIELD1)
      height = 1.0
      left = 18.5714
      top = 0.7273
      width = 15.0
      value = "Entryfield1"
      pageno = 0
   endwith

   this.CONTAINER1.ENTRYFIELD2 = new ENTRYFIELD(this.CONTAINER1)
   with (this.CONTAINER1.ENTRYFIELD2)
      enabled = false
      height = 1.0
      left = 69.4286
      top = 0.5
      width = 15.0
      value = "Entryfield2"
      pageno = 0
   endwith

   this.GRID1 = new GRID(this)
   with (this.GRID1)
      dataLink = form.sample1.rowset
      columns["COLUMN1"] = new GRIDCOLUMN(form.GRID1)
      with (columns["COLUMN1"])
         dataLink = form.sample1.rowset.fields["trandate"]
         editorType = 3        // SpinBox
         width = 17.1429
      endwith
      columns["COLUMN2"] = new GRIDCOLUMN(form.GRID1)
      with (columns["COLUMN2"])
         dataLink = form.sample1.rowset.fields["amount"]
         editorType = 3        // SpinBox
         width = 17.1429
      endwith
      with (columns["COLUMN1"].editorControl)
         rangeMax = {    -  -  }
         rangeMin = {    -  -  }
      endwith

      with (columns["COLUMN1"].headingControl)
         value = "TranDate"
      endwith

      with (columns["COLUMN2"].editorControl)
         rangeMax = 100
         rangeMin = 1
      endwith

      with (columns["COLUMN2"].headingControl)
         value = "Amount"
      endwith

      height = 12.5
      left = 0.0
      top = 0.0
      width = 42.0
   endwith

   this.GRID2 = new GRID(this)
   with (this.GRID2)
      dataLink = form.sample3.rowset
      columns["COLUMN1"] = new GRIDCOLUMN(form.GRID2)
      with (columns["COLUMN1"])
         dataLink = form.sample3.rowset.fields["trandate"]
         editorType = 3        // SpinBox
         width = 17.1429
      endwith
      columns["COLUMN2"] = new GRIDCOLUMN(form.GRID2)
      with (columns["COLUMN2"])
         dataLink = form.sample3.rowset.fields["sum of amount"]
         editorType = 3        // SpinBox
         width = 31.4286
      endwith
      with (columns["COLUMN1"].editorControl)
         rangeMax = {2021-04-11}
         rangeMin = {2021-01-01}
      endwith

      with (columns["COLUMN1"].headingControl)
         value = "trandate"
      endwith

      with (columns["COLUMN2"].editorControl)
         rangeMax = 100
         rangeMin = 1
      endwith

      with (columns["COLUMN2"].headingControl)
         value = "Daily total"
      endwith

      height = 12.5
      left = 46.2857
      top = 0.1364
      width = 41.4286
   endwith

   this.rowset = this.sample1.rowset

   function CalcTotal(frm)
      DayTotal = 0
                AllTotal = 0
                frm.sample2.rowset.refresh()
                if frm.sample2.rowset.first()
                        do
                                AllTotal += frm.sample2.rowset.fields["Amount"].value
                                if frm.sample2.rowset.fields["Trandate"].value = frm.sample1.rowset.fields["Trandate"].value
                                        Daytotal += frm.sample2.rowset.fields["Amount"].value
                                endif
                        Until .not.frm.sample2.rowset.next()
                endif
                
                frm.container1.text1.text = DtoC(form.sample1.rowset.fields["TranDate"].value)
                frm.container1.Entryfield1.value := daytotal
                Frm.container1.Entryfield2.value := alltotal
        return

   function form_onOpen()
                        form.calctotal(form)
   return

   function rowset_onNavigate(type, nRows)
                        this.parent.parent.calctotal(this.parent.parent)
   return

   function rowset_onSave()
                        this.parent.parent.calctotal(this.parent.parent)
   return

endclass