Subject Re: dataq modules - calculated fields
From Akshat Kapoor <akshat.kapoor@kapoorsons.in>
Date Mon, 6 Jul 2020 14:59:19 +0530
Newsgroups dbase.getting-started
Attachment(s) inve.dmd

Good Afternoon Gaetano,
I have rarely used the datamodule designer so cannot assisst you on that
front. I am in a habit of editing the datamodule in editor. I never open
them in designer.
I have attached a datamodule that I was using some time ago.
How was it designed I do not remember.
> So i threw the table in a DMD designer, went to the source editor and added the following code (the part about F= New Field() is what I added manually). this is opened and copied from Notepad to make sure I was looking at the actual file contents:I would request you to go through Ken's books. There is a description
there of how to add fields using designer.
Designer will delete everything that it does not recognise as its output.

If you want the rowset to be editable then opt in for this route

If a readonly rowset will serve your purpose then you can add field in
the sql itself

'select *,12*energyProducedWh as power from
"D:\Documents\dbase\SolarOctopus2\energydata.dbf"'

This alteration will stick and designer will not delete it.

Regards
Akshat




** END HEADER -- do not remove this line
//
// Generated on 25.02.2017
//
class inveDATAMODULE of DATAMODULE
   this.VATRATE = new QUERY(this)
   with (this.VATRATE)
      left = 138.0
      top = 19.0
                database = mcompany.db
      sql = 'select recno,tax,vat,sat from "vatrate.dbf"'
                requestlive = true
      active = true
   endwith

   with (this.VATRATE.rowset)
      indexName = "TAX"
      autoNullFields = false
   endwith

   /*this.INV = new QUERY(this)
   with (this.INV)
      left = 446.0
      top = 23.0
      sql = 'Select * from "'+mcompany.direct+'\inv'+mcompany.fyear+'.dbf"'
                requestlive = true
      active = true
   endwith

   with (this.INV.rowset)
      indexName = "RECNO"
      autoNullFields = false
   endwith*/

   this.INVE = new QUERY(this)
   with (this.INVE)
      onOpen = class::INVE_ONOPEN
      left = 291.0
      top = 22.0
                database = mcompany.db
      sql = 'Select * from "inve'+mcompany.fyear+'.dbf"'
                //requestlive = false
      active = true
   endwith

   with (this.INVE.rowset)
      indexName = "RECNO"
      with (fields["tax"])
         lookupRowset = form.vatrate.rowset
      endwith
      with (fields["full"])
         beforeGetValue = {||iif(this.parent["company"].value#null ,ltrim(this.parent["company"].value),"1") ;
                        +iif(this.parent["item"].value#null , ltrim(this.parent["item"].value), "1" ) ;
                        +iif(this.parent["descrip"].value#null , ltrim(this.parent["descrip"].value), "1" );
                        +iif(this.parent["bcode"].value#null , ltrim(this.parent["bcode"].value), "1" )}
      endwith
                with (fields["nett"])
                        beforegetvalue = {||iif(this.parent["offerp"].value >0,this.parent["offerp"].value ,round(this.parent["mrp"].value*(1-this.parent["disc"].value/100),0))}
                endwith
      autoNullFields = false
   endwith

   this.rapid = new QUERY(this)
   with (this.rapid)
      left = 251.0
      top = 22.0
                database = mcompany.db
      sql = 'SELECT rapid.key_st, rapid.company, rapid.item , rapid.descrip , inve.recno FROM "rapid" INNER JOIN "inve'+mcompany.fyear+'" inve ON (rapid.company=inve.Company AND rapid.item=inve.item AND rapid.descrip=inve.descrip)'
                requestlive = false
                //?sql
      active = true
   endwith

   with (this.rapid.rowset)
      autoNullFields = false
   endwith

        function inve_onOpen()
                g = new field()
                g.fieldname = "full"
                this.rowset.fields.add(g)
                g.beforegetvalue = {||iif(this.parent["company"].value#null ,ltrim(this.parent["company"].value),"1") ;
                        +iif(this.parent["item"].value#null , ltrim(this.parent["item"].value), "1" ) ;
                        +iif(this.parent["descrip"].value#null , ltrim(this.parent["descrip"].value), "1" );
                        +iif(this.parent["bcode"].value#null , ltrim(this.parent["bcode"].value), "1" )}
                h = new field()
                h.fieldname = "nett"
                this.rowset.fields.add(h)
                h.beforegetvalue = {||iif(this.parent["offerp"].value >0,this.parent["offerp"].value ,round(this.parent["mrp"].value*(1-this.parent["disc"].value/100),0))}                        
      return

endclass