Subject Re: printer paper source
From Mustansir Ghor <mustan31@hotmail.com>
Date Wed, 12 Aug 2020 07:50:46 -0400
Newsgroups dbase.getting-started

Dear Akshat

The idea of using printersource = 1 (Windows default) may not work because the printer default is Tray 1 which has labels for another software, where my software has to use Tray 2 for letter size paper.

Regards
Mustansir

Akshat Kapoor Wrote:

> On 09.08.2020 22:29, Mustansir Ghor wrote:
> > Dear Akshat
> >
> > An application requires to "Print & Save" pushbutton to print on a default printer. There are 2 bins on the printer. The IDE where I am designing the report, I need to know number to set for papersource for a remote printer that is not connected to IDE computer.
> >
>
> Good Morning Mustansir,
> And then you will hard code that data into your report?
>
> If it is the default printer and tray then there is nothing for you to do.
>
> But if not then it is for situations like these that my code comes into
> play.
>
> You just have to set the settings once for any report.
>
> A code that I am using
>
> class ALL_LEDGERREPORT of A4BLANKCREPORT from "a4blank.crp"
>     set procedure to all_ledger.dmd additive
>     with (this)
>        output = 1        // Printer
>     endwith
>
>     this.ALL_LEDGERDATAMODULE1 = new ALL_LEDGERDATAMODULE()
>     this.ALL_LEDGERDATAMODULE1.parent = this
>     with (this.printer)
>        printerSource = 1        // Windows Default
>        duplex = 1        // None
>        orientation = 1        // Portrait
>        paperSource = 7
>        paperSize = 9
>        resolution = 0        // Default
>        color = 1        // Monochrome
>        trueTypeFonts = 0        // Default
>     endwith
>
> Even after this I display the choose printer popup. User just has to
> press enter.
>
> Where faster printouts are required or need other than default printer
> options I use the code I had provided earlier.
>
> Have a look at the attached form menu_main.wfm I am using. Have a look
> at the objects ini_file, ini_name and ini_file_onClick.
>
> Then have a look at the form e_sales.wfm. Just have a look at PRINT_onClick
>
> Both are currently in use not test programs.
> Change of ini files in menu_main.wfm is rarely used. No need to change
> Ini options frequently
>
> but e_sales.wfm is the most used form of my app.
> Depending upon the toggle position (toggle.cc designed by Mervyn) the
> report file and printer changes. The printout is sent to desired printer
> without any choooserprinter()
>
> Regards
> Akshat
>
> xmenu = 0
> local f
> f = new menu_mainForm()
> do while xmenu<>6
>         f.mdi = false // ensure not MDI
>    f.readModal()
>         do case
>                 case xmenu = 1
>                         //do blank.wfm with "do reindex"
>                         do reindex.wfm
>                 case xmenu = 2
>                         do repost.wfm
>                 case xmenu = 3
>                         do cre_user.wfm with .t.
>                 case xmenu = 4
>                         msgbox("alter user")                        
>                 case xmenu = 5
>                         do reset_pa.wfm
>                 case xmenu = 6
>                         //exit hence no action required
>                 case xmenu = 7
>                         do vatrate.wfm with .t.
>       case xmenu = 8
>          do renum.wfm with .t.
>         endcase
> enddo
> return
>
> ** END HEADER -- do not remove this line
> //
> // Generated on 03-06-2020
> //
> parameter bModal
> local f
> f = new menu_mainForm()
> if (bModal)
>    f.mdi = false // ensure not MDI
>    f.readModal()
> else
>    f.open()
> endif
>
> class menu_mainForm of MUN_FORM from "mun_controls.cc"
>    set procedure to mun_controls.cc additive
>    with (this)
>       onOpen = class::FORM_ONOPEN
>       height = 31.5
>       left = -12.2857
>       top = -0.4545
>       width = 214.5714
>    endwith
>
>    this.REINDEX = new MUN_PUSH(this)
>    with (this.REINDEX)
>       onClick = class::REINDEX_ONCLICK
>       height = 2.0
>       left = 62.0
>       top = 3.5
>       width = 30.0
>       text = "Rebuild &Index"
>       fontSize = 12.0
>    endwith
>
>    this.REPOST = new MUN_PUSH(this)
>    with (this.REPOST)
>       onClick = class::REPOST_ONCLICK
>       height = 2.0
>       left = 62.0
>       top = 7.0
>       width = 30.0
>       text = "&Repost Current Year Entries"
>       fontSize = 12.0
>    endwith
>
>    this.CREATE = new MUN_PUSH(this)
>    with (this.CREATE)
>       onClick = class::CREATE_ONCLICK
>       height = 2.0
>       left = 62.0
>       top = 10.5
>       width = 30.0
>       text = "Create  &Users"
>       fontSize = 12.0
>    endwith
>
>    this.DELETE_USER = new MUN_PUSH(this)
>    with (this.DELETE_USER)
>       onClick = class::DELETE_USER_ONCLICK
>       height = 2.0
>       left = 62.0
>       top = 14.0
>       width = 30.0
>       text = "&Alter User"
>       fontSize = 12.0
>    endwith
>
>    this.RESET = new MUN_PUSH(this)
>    with (this.RESET)
>       when = {||alltrim(mcompany.user) # "super"}
>       onClick = class::RESET_ONCLICK
>       height = 2.0
>       left = 62.0
>       top = 17.5
>       width = 30.0
>       text = "&Reset Password"
>    endwith
>
>    this.CLOSE_FORM = new MUN_PUSH(this)
>    with (this.CLOSE_FORM)
>       onClick = class::CLOSE_FORM_ONCLICK
>       height = 2.0
>       left = 62.0
>       top = 21.0
>       width = 30.0
>       text = "&Close"
>       fontSize = 12.0
>    endwith
>
>    this.MUN_TEXTLABEL1 = new MUN_TEXTLABEL(this)
>    with (this.MUN_TEXTLABEL1)
>       height = 1.0
>       left = 53.5714
>       top = 1.0
>       width = 40.0
>       text = "Settings Menu"
>       fontSize = 16.0
>       fontBold = true
>       alignHorizontal = 1        // Center
>    endwith
>
>    this.VATRATE = new MUN_PUSH(this)
>    with (this.VATRATE)
>       onClick = class::VATRATE_ONCLICK
>       height = 2.0
>       left = 103.0
>       top = 3.5
>       width = 30.0
>       text = "&Set/Alter Vat/Gst Rates"
>    endwith
>
>    this.EXP_INVEN = new MUN_PUSH(this)
>    with (this.EXP_INVEN)
>       when = {||mcompany.inven}
>       onClick = class::PUSHBUTTON1_ONCLICK
>       height = 2.0
>       left = 103.0
>       top = 7.0
>       width = 30.0
>       text = "Export Inventory"
>    endwith
>
>    this.IMPORT_SALES = new MUN_PUSH(this)
>    with (this.IMPORT_SALES)
>       when = {||mcompany.inven}
>       onClick = class::IMPORT_SALES_ONCLICK
>       height = 2.0
>       left = 103.0
>       top = 10.5
>       width = 30.0
>       text = "Import Sales"
>    endwith
>
>    this.PACK_TABLES = new MUN_PUSH(this)
>    with (this.PACK_TABLES)
>       when = {||mcompany.inven}
>       onClick = class::PACK_TABLES_ONCLICK
>       height = 2.0
>       left = 103.0
>       top = 14.0
>       width = 30.0
>       text = "&Pack Tables"
>    endwith
>
>    this.MUN_TEXT1 = new MUN_TEXT(this)
>    with (this.MUN_TEXT1)
>       height = 1.7273
>       left = 134.0
>       top = 11.0
>       width = 46.0
>       visible = false
>       text = " Sales Transactions are being imported please wait.............."
>    endwith
>
>    this.INI_FILE = new MUN_PUSH(this)
>    with (this.INI_FILE)
>       when = {||mcompany.inven}
>       onClick = class::INI_FILE_ONCLICK
>       height = 2.0
>       left = 103.0
>       top = 17.5
>       width = 30.0
>       text = "Set Default printer options of"
>    endwith
>
>    this.INI_NAME = new MUN_COMBO(this)
>    with (this.INI_NAME)
>       height = 1.1818
>       left = 139.0
>       top = 18.0
>       width = 20.0
>       dataSource = 'array {"cashmemo.ini","cashmemo_h.ini","label.ini","p_big.ini"}'
>    endwith
>
>
>    function CLOSE_FORM_onClick()
>       xmenu = 6
>       form.close()
>       return
>
>    function CREATE_onClick()
>       xmenu = 3
>       form.close()
>       return
>
>    function DELETE_USER_onClick()
>       xmenu = 4
>       form.close()
>       return
>
>    function IMPORT_SALES_onClick()
>       form.mun_text1.visible  = true
>       do import_sales
>       msgbox("Import of sales enteries complete")
>       form.mun_text1.visible = false
>       return
>
>    function INI_FILE_onClick()
>       msgbox("To insert code for this option first load the earlier option and then ask for new one and save only when confirmed")
>       if msgbox("Do you really want to change the printer settings for "+form.ini_name.value,"Confirm ",4 ) = 6
>          do get_printer with form.ini_name.value
>       endif
>       return
>
>    function PACK_TABLES_onClick()
>       xmenu = 8
>       form.close()
>       return
>
>    function PUSHBUTTON1_onClick()
>       do export_inve
>       msgbox("Inventory has been exported")
>       return
>
>    function REINDEX_onClick()
>       xmenu = 1
>       form.close()
>       return
>
>    function REPOST_onClick()
>       xmenu = 2
>       form.close()
>       return
>
>    function RESET_onClick()
>       xmenu = 5
>       form.close()
>       return
>
>    function VATRATE_onClick()
>       xmenu = 7
>       form.close()
>       return
>
>    function form_onOpen()
>       form.height = form_height
>                 form.width  = form_width
>                 form.text = [Settings Menu ]+ mcompany.company
>                 if alltrim(mcompany.user)= "super"
>                         form.reset.enabled = false
>                         form.reset.colornormal = push_dis
>                 endif
>       return
>
> endclass
>
> local f
> f = new e_salesform()
> f.mdi = false // ensure not MDI
> f.readModal()
> f.release()
> //on key
> return
>
> ** END HEADER -- do not remove this line
> //
> // Generated on 24.05.2020
> //
> parameter bModal
> local f
> f = new e_salesform()
> if (bModal)
>    f.mdi = false // ensure not MDI
>    f.readModal()
> else
>    f.open()
> endif
>
> class e_salesform of MUNEEM from "muneem.cfm"
>    set procedure to inve.dmd additive
>    set procedure to sales2.dmd additive
>    set procedure to toggle.cc additive
>    set procedure to mun_controls.cc additive
>    with (this)
>       canClose = class::FORM_CANCLOSE
>       onOpen = class::FORM_ONOPEN
>       onClose = class::NUM_CANCLOSE
>       height = 31.5
>       left = 0.4286
>       top = -0.5455
>       width = 214.5714
>       text = "Cash Memo Entry"
>       escExit = false
>    endwith
>
>    this.INVEDATAMODULE1 = new INVEDATAMODULE()
>    this.INVEDATAMODULE1.parent = this
>    with (this.INVEDATAMODULE1)
>       left = 37.0
>       top = 18.0
>       width = 12.0
>       height = 1.0
>    endwith
>
>    this.SALESDATAMODULE1 = new SALESDATAMODULE()
>    this.SALESDATAMODULE1.parent = this
>    with (this.SALESDATAMODULE1)
>       left = 9.0
>       top = 18.0
>       width = 13.0
>       height = 1.0
>    endwith
>
>    this.ADDITEM = new ADDITEM(this)
>    with (this.ADDITEM)
>       visible = false
>       left = 1.0
>       top = 18.5
>       width = 153.0
>       height = 4.5
>    endwith
>
>    with (this.ADDITEM.MDESCRIP)
>       onGotFocus = class::MDESCRIP_ONGOTFOCUS
>    endwith
>
>    with (this.ADDITEM.ITEMDISCARD)
>       onClick = class::ITEMDISCARD_ONCLICK
>    endwith
>
>    this.SALES = new MUN_GRID(this)
>    with (this.SALES)
>       onGotFocus = class::SALES_ONGOTFOCUS
>       onLostFocus = class::SALES_ONLOSTFOCUS
>       dataLink = form.salesdatamodule1.sales.rowset
>       columns["COLUMN1"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN1"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["company"]
>          editorType = 1        // EntryField
>          width = 14.2857
>       endwith
>       columns["COLUMN2"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN2"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["item"]
>          editorType = 1        // EntryField
>          width = 14.2857
>       endwith
>       columns["COLUMN3"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN3"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["descrip"]
>          editorType = 1        // EntryField
>          width = 35.0
>       endwith
>       columns["COLUMN4"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN4"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["mrp"]
>          editorType = 1        // EntryField
>          width = 14.0
>       endwith
>       columns["COLUMN5"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN5"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["disc"]
>          editorType = 1        // EntryField
>          width = 8.0
>       endwith
>       columns["COLUMN6"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN6"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["rate"]
>          editorType = 1        // EntryField
>          width = 14.0
>       endwith
>       columns["COLUMN7"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN7"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["misc"]
>          editorType = 1        // EntryField
>          width = 14.0
>       endwith
>       columns["COLUMN8"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN8"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["qty"]
>          editorType = 1        // EntryField
>          width = 12.0
>       endwith
>       columns["COLUMN9"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN9"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["amount"]
>          editorType = 1        // EntryField
>          width = 15.0
>       endwith
>       columns["COLUMN10"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN10"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["cgst"]
>          editorType = 1        // EntryField
>          width = 12.0
>       endwith
>       columns["COLUMN11"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN11"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["sgst"]
>          editorType = 1        // EntryField
>          width = 12.0
>       endwith
>       columns["COLUMN12"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN12"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["goods"]
>          editorType = 1        // EntryField
>          width = 15.0
>       endwith
>       columns["COLUMN13"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN13"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["hsn_code"]
>          editorType = 1        // EntryField
>          width = 11.0
>       endwith
>       columns["COLUMN14"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN14"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["comment"]
>          editorType = 1        // EntryField
>          width = 21.0
>       endwith
>       columns["COLUMN15"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN15"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["tax"]
>          editorType = 1        // EntryField
>          width = 8.0
>       endwith
>       columns["COLUMN16"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN16"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["adtax"]
>          editorType = 1        // EntryField
>          width = 8.0
>       endwith
>       columns["COLUMN17"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN17"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["unit"]
>          editorType = 1        // EntryField
>          width = 14.0
>       endwith
>       columns["COLUMN18"] = new GRIDCOLUMN(form.SALES)
>       with (columns["COLUMN18"])
>          dataLink = form.salesdatamodule1.sales.rowset.fields["full"]
>          editorType = 1        // EntryField
>          width = 28.0
>       endwith
>       with (columns["COLUMN1"].headingControl)
>          value = "company"
>       endwith
>
>       with (columns["COLUMN2"].headingControl)
>          value = "item"
>       endwith
>
>       with (columns["COLUMN3"].headingControl)
>          value = "descrip"
>       endwith
>
>       with (columns["COLUMN4"].editorControl)
>          picture = "99,99,999.99"
>          function = "ZJ"
>       endwith
>
>       with (columns["COLUMN4"].headingControl)
>          value = "mrp"
>       endwith
>
>       with (columns["COLUMN5"].editorControl)
>          picture = "99.99%"
>          function = "ZJ"
>       endwith
>
>       with (columns["COLUMN5"].headingControl)
>          value = "disc"
>       endwith
>
>       with (columns["COLUMN6"].editorControl)
>          picture = "99,99,999.99"
>          function = "ZJ"
>       endwith
>
>       with (columns["COLUMN6"].headingControl)
>          value = "rate"
>       endwith
>
>       with (columns["COLUMN7"].editorControl)
>          picture = "99,99,999.99"
>          function = "ZJ"
>       endwith
>
>       with (columns["COLUMN7"].headingControl)
>          value = "misc"
>       endwith
>
>       with (columns["COLUMN8"].editorControl)
>          picture = "9,999.99"
>          function = "ZJ"
>          fontSize = 12.0
>          fontBold = true
>       endwith
>
>       with (columns["COLUMN8"].headingControl)
>          value = "qty"
>       endwith
>
>       with (columns["COLUMN9"].editorControl)
>          picture = "99,99,99,999.99"
>          function = "ZJ"
>          fontSize = 12.0
>          fontBold = true
>       endwith
>
>       with (columns["COLUMN9"].headingControl)
>          value = "amount"
>       endwith
>
>       with (columns["COLUMN10"].editorControl)
>          picture = "99,99,999.99"
>          function = "ZJ"
>       endwith
>
>       with (columns["COLUMN10"].headingControl)
>          value = "cgst"
>       endwith
>
>       with (columns["COLUMN11"].editorControl)
>          picture = "99,99,999.99"
>          function = "ZJ"
>       endwith
>
>       with (columns["COLUMN11"].headingControl)
>          value = "sgst"
>       endwith
>
>       with (columns["COLUMN12"].editorControl)
>          picture = "99,99,999.99"
>          function = "ZJ"
>       endwith
>
>       with (columns["COLUMN12"].headingControl)
>          value = "goods"
>       endwith
>
>       with (columns["COLUMN13"].headingControl)
>          value = "hsn_code"
>       endwith
>
>       with (columns["COLUMN14"].headingControl)
>          value = "comment"
>       endwith
>
>       with (columns["COLUMN15"].editorControl)
>          picture = "99.99%"
>          function = "ZJ"
>       endwith
>
>       with (columns["COLUMN15"].headingControl)
>          value = "tax"
>       endwith
>
>       with (columns["COLUMN16"].editorControl)
>          picture = "99.99%"
>          function = "ZJ"
>       endwith
>
>       with (columns["COLUMN16"].headingControl)
>          value = "adtax"
>       endwith
>
>       with (columns["COLUMN17"].headingControl)
>          value = "unit"
>       endwith
>
>       with (columns["COLUMN18"].headingControl)
>          value = "unit"
>       endwith
>
>       borderStyle = 3        // None
>       height = 15.0
>       left = 0.0
>       top = 3.0
>       width = 182.0
>    endwith
>
>    this.HEADER = new MUN_CONTAINER(this)
>    with (this.HEADER)
>       left = 0.0
>       top = 0.0
>       width = 211.4286
>       height = 3.0
>       borderStyle = 3        // None
>       anchor = 2        // Top
>    endwith
>
>    this.HEADER.CASH_NO = new MUN_TEXT(this.HEADER)
>    with (this.HEADER.CASH_NO)
>       height = 1.0
>       left = 1.0
>       top = 0.0909
>       width = 49.5714
>       text = "Cash Memo No."
>       pageno = 0
>    endwith
>
>    this.HEADER.TDATE = new MUN_TEXTLABEL(this.HEADER)
>    with (this.HEADER.TDATE)
>       height = 1.0
>       left = 32.5714
>       top = 0.0
>       width = 6.0
>       text = "Date"
>       pageno = 0
>    endwith
>
>    this.HEADER.MDATE = new QUICK_DATE(this.HEADER)
>    with (this.HEADER.MDATE)
>       enabled = false
>       height = 1.0
>       left = 39.5714
>       top = 0.0
>       width = 13.0
>       value = {  .  .    }
>       pageno = 0
>    endwith
>
>    this.HEADER.ECNAME = new MUN_ENTRYFIELD(this.HEADER)
>    with (this.HEADER.ECNAME)
>       enabled = false
>       height = 1.0
>       left = 17.5714
>       top = 1.3636
>       width = 30.0
>       border = false
>       pageno = 0
>    endwith
>
>    this.HEADER.ECADDR = new MUN_ENTRYFIELD(this.HEADER)
>    with (this.HEADER.ECADDR)
>       enabled = false
>       height = 1.0
>       left = 65.5714
>       top = 1.3636
>       width = 30.0
>       border = false
>       pageno = 0
>    endwith
>
>    this.HEADER.MOD_CUST = new MUN_PUSH(this.HEADER)
>    with (this.HEADER.MOD_CUST)
>       when = {||type('form.minvoice') #'U' and form.minvoice>0}
>       onClick = class::MOD_CUST_ONCLICK
>       height = 1.5
>       left = 99.0
>       top = 1.5
>       width = 30.0
>       text = "M&odify"
>       pageno = 0
>    endwith
>
>    this.HEADER.DISCARD_CUST = new MUN_PUSH(this.HEADER)
>    with (this.HEADER.DISCARD_CUST)
>       onClick = class::DISCARD_CUST_ONCLICK
>       enabled = false
>       height = 1.5
>       left = 133.0
>       top = 1.5
>       width = 30.0
>       text = "Disca&rd"
>       pageno = 0
>    endwith
>
>    this.HEADER.MLOCATS = new MUN_COMBO(this.HEADER)
>    with (this.HEADER.MLOCATS)
>       when = class::MLOCATS_WHEN
>       onChangeCommitted = class::MLOCATS_ONCHANGE
>       height = 1.1818
>       left = 63.5714
>       top = -0.1364
>       width = 16.0
>       dataSource = 'array {"Head Office"}'
>       pageno = 0
>    endwith
>
>    this.HEADER.TCNAME = new MUN_TEXTLABEL(this.HEADER)
>    with (this.HEADER.TCNAME)
>       height = 1.0
>       left = -0.4286
>       top = 1.3636
>       width = 18.5714
>       text = "Customer Name :"
>       pageno = 0
>    endwith
>
>    this.HEADER.MUN_TEXTLABEL1 = new MUN_TEXTLABEL(this.HEADER)
>    with (this.HEADER.MUN_TEXTLABEL1)
>       height = 1.0
>       left = 54.5714
>       top = 0.0909
>       width = 9.0
>       text = "Sale At"
>       pageno = 0
>    endwith
>
>    this.HEADER.TEXTLABEL1 = new MUN_TEXTLABEL(this.HEADER)
>    with (this.HEADER.TEXTLABEL1)
>       height = 1.0
>       left = 49.5714
>       top = 1.3636
>       width = 18.5714
>       text = "Customer Addr"
>       pageno = 0
>    endwith
>
>    this.HEADER.NEW_CASHNO = new MUN_SPIN(this.HEADER)
>    with (this.HEADER.NEW_CASHNO)
>       onGotFocus = class::NEW_CASHNO_ONGOTFOCUS
>       onLostFocus = class::NEW_CASHNO_ONLOSTFOCUS
>       enabled = true
>       height = 1.0
>       left = 105.0
>       top = 0.0
>       width = 14.0
>       step = 1.0
>       rangeMax = 105
>       value = 1
>       validRequired = true
>       rangeRequired = true
>       pageno = 0
>    endwith
>
>    this.HEADER.GOTO = new MUN_PUSH(this.HEADER)
>    with (this.HEADER.GOTO)
>       onClick = class::GOTO_ONCLICK
>       enabled = true
>       height = 1.25
>       left = 121.0
>       top = -0.1818
>       width = 25.0
>       text = "Goto Cash memo no."
>       pageno = 0
>    endwith
>
>    this.SUBTOTAL = new MUN_TEXTLABEL(this)
>    with (this.SUBTOTAL)
>       height = 1.0
>       left = 156.0
>       top = 18.5
>       width = 27.0
>       text = "Sub Total"
>       fontBold = false
>    endwith
>
>    this.CON_DISC = new MUN_CONTAINER(this)
>    with (this.CON_DISC)
>       visible = false
>       enabled = false
>       left = 1.0
>       top = 18.5
>       width = 153.0
>       height = 2.0
>    endwith
>
>    this.CON_DISC.EF_DISC = new MUN_ENTRYFIELD(this.CON_DISC)
>    with (this.CON_DISC.EF_DISC)
>       height = 1.1818
>       left = 47.5714
>       top = 0.4091
>       width = 22.0
>       value = 0.0
>       pageno = 0
>    endwith
>
>    this.CON_DISC.DISC_VAT = new MUN_COMBO(this.CON_DISC)
>    with (this.CON_DISC.DISC_VAT)
>       height = 1.1818
>       left = 90.5714
>       top = 0.4091
>       width = 21.0
>       pageno = 0
>    endwith
>
>    this.CON_DISC.MUN_TEXT1 = new MUN_TEXT(this.CON_DISC)
>    with (this.CON_DISC.MUN_TEXT1)
>       height = 1.0
>       left = 18.5714
>       top = 0.5909
>       width = 28.0
>       text = "Please enter the Discount"
>       pageno = 0
>    endwith
>
>    this.CON_DISC.MUN_TEXTLABEL1 = new MUN_TEXTLABEL(this.CON_DISC)
>    with (this.CON_DISC.MUN_TEXTLABEL1)
>       height = 1.0
>       left = 72.5714
>       top = 0.5909
>       width = 17.0
>       text = "Vat Rate"
>       pageno = 0
>    endwith
>
>    this.CON_DISC.DISC_SAVE = new MUN_PUSH(this.CON_DISC)
>    with (this.CON_DISC.DISC_SAVE)
>       onClick = class::DISC_SAVE_ONCLICK
>       height = 1.25
>       left = 113.5714
>       top = 0.3636
>       width = 15.0
>       text = "&Save"
>       pageno = 0
>    endwith
>
>    this.CON_DISC.DISC_DISCARD = new MUN_PUSH(this.CON_DISC)
>    with (this.CON_DISC.DISC_DISCARD)
>       onClick = class::DISC_DISCARD_ONCLICK
>       height = 1.2273
>       left = 129.5714
>       top = 0.3636
>       width = 15.0
>       text = "D&iscard"
>       pageno = 0
>    endwith
>
>    this.DISCO = new MUN_TEXTLABEL(this)
>    with (this.DISCO)
>       height = 1.0
>       left = 156.0
>       top = 19.5
>       width = 27.0
>       text = "Discount"
>    endwith
>
>    this.GTOTAL = new MUN_TEXTLABEL(this)
>    with (this.GTOTAL)
>       height = 1.0
>       left = 156.0
>       top = 20.5
>       width = 27.0
>       text = "Grand Total"
>       fontBold = false
>    endwith
>
>    this.TOTAL_QTY = new MUN_TEXT(this)
>    with (this.TOTAL_QTY)
>       height = 2.0
>       left = 156.0
>       top = 22.0
>       width = 27.0
>       fontBold = false
>       text = "Total Qty"
>    endwith
>
>    this.FOOTER = new FOOTER(this)
>    with (this.FOOTER)
>       left = 0.0
>       top = 26.4545
>       width = 211.4286
>       height = 3.0
>    endwith
>
>    with (this.FOOTER.ADD)
>       when = class::MODIFY_WHEN
>       onClick = class::ADD_ONCLICK
>    endwith
>
>    with (this.FOOTER.MODIFY)
>       when = class::MODIFY_WHEN
>       onClick = class::MODIFY_ONCLICK
>       left = 21.8571
>    endwith
>
>    with (this.FOOTER.DELETE)
>       when = class::MODIFY_WHEN
>       onClick = class::DELETE_ONCLICK
>       left = 43.1429
>       top = 0.3636
>    endwith
>
>    with (this.FOOTER.PRINT)
>       when = class::PRINT_WHEN
>       onClick = class::PRINT_ONCLICK
>       left = 64.4286
>       top = 0.3636
>       text = "&* Print"
>    endwith
>
>    with (this.FOOTER.DISC)
>       when = class::DISC_WHEN
>       onClick = class::DISC_ONCLICK
>       left = 128.2857
>       top = 0.3636
>    endwith
>
>    with (this.FOOTER.CLOSE)
>       left = 85.7143
>       top = 0.3636
>    endwith
>
>    with (this.FOOTER.NEW)
>       left = 107.0
>       top = 0.3636
>    endwith
>
>    this.FOOTER.HALF_PAGE = new TOGGLE(this.FOOTER)
>    with (this.FOOTER.HALF_PAGE)
>       height = 1.0
>       left = 183.5714
>       top = 1.4091
>       width = 7.4286
>       pageno = 0
>       borderStyle = 4        // Single
>    endwith
>
>    this.FOOTER.MUN_TEXT1 = new MUN_TEXT(this.FOOTER)
>    with (this.FOOTER.MUN_TEXT1)
>       height = 1.0
>       left = 182.5714
>       top = -0.0909
>       width = 32.0
>       text = "Half Page Print"
>       pageno = 0
>    endwith
>
>    this.rowset = this.salesdatamodule1.sales.rowset
>
>    function ADD_onClick()
>                 parameters rapid
>       form.dis_able()
>       form.additem.itemsave.onclick = form.save_item
>       if not form.additem.visible
>          if rapid>0
>             if form.invedatamodule1.inve.rowset.applylocate("recno ="+rapid)
>             //form.invedatamodule1.inve.rowset.applylocate("full ='"+mlastitem+"'")
>                mlastitem = alltrim(form.INVEDATAMODULE1.INVE.rowset.fields["full"].value)
>                mo_item.recno   = form.INVEDATAMODULE1.INVE.rowset.fields["recno"].value
>                mo_item.company = form.INVEDATAMODULE1.INVE.rowset.fields["company"].value
>                mo_item.item    = form.INVEDATAMODULE1.INVE.rowset.fields["item"].value
>                mo_item.descrip = form.INVEDATAMODULE1.INVE.rowset.fields["descrip"].value
>                mo_item.unit    = form.INVEDATAMODULE1.INVE.rowset.fields["unit"].value
>                mo_item.mrp     = form.INVEDATAMODULE1.INVE.rowset.fields["mrp"].value
>                mo_item.cprice  = form.INVEDATAMODULE1.INVE.rowset.fields["cprice"].value
>                mo_item.disc    = form.INVEDATAMODULE1.INVE.rowset.fields["disc"].value
>                mo_item.offerp  = form.INVEDATAMODULE1.INVE.rowset.fields["offerp"].value
>                mo_item.tax     = val(left(form.INVEDATAMODULE1.INVE.rowset.fields["gst"].value,5))
>                mo_item.adtax   = val(right(form.INVEDATAMODULE1.INVE.rowset.fields["gst"].value,5))
>                mo_item.generic = to_logical(form.INVEDATAMODULE1.INVE.rowset.fields["generic"].value)
>                mo_item.hsn_code= form.invedatamodule1.inve.rowset.fields["hsn_code"].value
>             else
>                do select2.wfm
>             endif
>          else
>             do select2.wfm
>          endif
>          if mo_item.recno >0
>             form.header.mod_cust.enabled = false
>             class::add_item()
>          else
>             form.en_abled()
>             form.footer.add.setfocus()
>          endif
>       endif
>       return
>
>    function DELETE_onClick()
>       form.dis_able()
>       mitem = alltrim(form.rowset.fields["company"].value) + " " +alltrim(form.rowset.fields["item"].value)        + " " + alltrim(form.rowset.fields["descrip"].value)
>       mch = msgbox(mitem , "Delete the following item",16+3+256)
>       if mch = 6
>          if form.rowset.count()>1 or form.minvoice = form.last()
>             recno = form.rowset.fields["mast"].value
>             qty = form.rowset.fields["qty"].value
>             mrow = form.rowset.fields["recno"].value
>             cmd = 'delete from sales'+mcompany.fyear + ' where recno = '+ str(mrow,8,0)
>             mcompany.adodb.executesql(cmd)
>             if last_updated() >0
>                if mcompany.remote
>                   cmd = 'delete from sales'+mcompany.fyear + ' where rrecno = '+ str(mrow,8,0)
>                endif
>                mcompany.tr_log(cmd)
>                form.update_inv(recno,qty*-1,form.mlocat)
>             endif
>          else
>             msgbox("cannot delete the last item of the cash memo ")
>          endif
>          class::refresh_data()
>       endif
>       form.en_abled()
>       form.header.mod_cust.enabled = true
>       form.footer.add.setfocus()
>       return
>
>
>            function DISCARD_CUST_onClick()
>       mch = msgbox("Discard the changes","Alert",64+4)
>       if mch = 7
>          //do nothing
>       else
>          if mch = 6
>             form.header.mod_cust.text = "M&odify"
>             form.header.ecaddr.enabled = false
>             form.header.ecname.enabled = false
>             form.header.mdate.enabled =  false
>             form.header.discard_cust.enabled = false
>             form.mcust = form.rowset.fields["cname"].value
>             form.maddr = form.rowset.fields["caddr"].value
>             form.mdate = form.rowset.fields["ddate"].value
>             form.header.ecname.value = form.mcust
>             form.header.ecaddr.value = form.maddr
>             form.header.mdate.assign_val(form.mdate)
> //                                        form.header.mdate.value = dtoc(form.mdate)
> //                                        form.header.mdate.date = form.mdate
>             form.en_abled()
>             form.footer.add.setfocus()
>          endif
>       endif
>       return
>
>    function DISC_DISCARD_onClick()
>       form.con_disc.ef_disc.value = 0
>       form.en_abled()
>       form.footer.add.setfocus()
>       form.header.mod_cust.enabled = true
>       return
>
>    function DISC_SAVE_onClick()
>       disc_save = true
>       form.refresh_data()
>       if form.rowset.count() = 0 or form.minvoice <=0
>          disc_save = false // there are no items in the cash memo hence do not save
>       endif
>       if disc_save
>          if form.salesdatamodule1.disco.rowset.count() >0
>             //A discounted entry is there we are simply editing it
>             // A discounted entry is there delete / alter it
>             mrow = form.salesdatamodule1.disco.rowset.fields["recno"].value
>             if abs(form.con_DISC.ef_disc.value) < 0.02
>                cmd = 'delete from sales'+mcompany.fyear + ' where recno = '+ str(mrow,8,0)
>                mcompany.adodb.executesql(cmd)
>                if last_updated() >0
>                   if mcompany.remote
>                      cmd = 'delete from sales'+mcompany.fyear + ' where rrecno = '+ str(mrow,8,0)
>                   endif
>                   mcompany.tr_log(cmd)
>                endif
>             else
>                mamt = form.con_DISC.ef_disc.value*-1
>                mtax = val(left(form.con_disc.disc_vat.value,5))
>                madtax = val(substr(form.con_disc.disc_vat.value,7,5))
>                mcgst = round(split(mamt,mtax + madtax)/2 , 2)
>                mgoods = mamt - mcgst*2
>                cmd = [UPDATE sales]+mcompany.fyear + [ SET ]
>                cmd+= [ rate = ] + str(form.con_DISC.ef_disc.value,10,2)
>                cmd+= [ ,tax = ] +left(form.con_disc.disc_vat.value,5)
>                cmd+= [ ,adtax = ]+ substr(form.con_disc.disc_vat.value,7,5)
>                cmd+= [ ,hsn_code = ']+ escape_str(substr(form.con_disc.disc_vat.value,13,4))+[']
>                cmd+= [ ,cgst = ]+str(mcgst,10,2)
>                cmd+= [ ,sgst = ]+str(mcgst,10,2)
>                cmd+= [ ,goods = ]+ str(mgoods,10,2)
>                cmd+= [ ,username = '] +escape_str(mcompany.user)+ [']
>                cmd+= [ ,access = ] + str(mcompany.access , 2,0)
>                cmd+= [ ,t_time = '] + getseconds()+[']
>                cmd+= [ ,comp = ']+getenv('computername') + [']
>                cmd+=[ where recno = ]+ str(mrow,8,0)
>                mcompany.adodb.executesql(cmd)
>                if last_updated() >0
>                   if mcompany.remote
>                      cmd = [UPDATE sales]+mcompany.fyear + [ SET ]
>                      cmd+= [ rate = ] + str(form.con_DISC.ef_disc.value,10,2)
>                      cmd+= [ ,tax = ] +left(form.con_disc.disc_vat.value,5)
>                      cmd+= [ ,adtax = ]+ substr(form.con_disc.disc_vat.value,7,5)
>                      cmd+= [ ,hsn_code = ']+ substr(form.con_disc.disc_vat.value,13,4)+[']
>                      cmd+= [ ,cgst = ]+str(mcgst,10,2)
>                      cmd+= [ ,sgst = ]+str(mcgst,10,2)
>                      cmd+= [ ,goods = ]+ str(mgoods,10,2)
>                      cmd+= [ ,username = '] + escape_str(mcompany.user)+ [']
>                      cmd+= [ ,access = ] + str(mcompany.access , 2,0)
>                      cmd+= [ ,t_time = '] + getseconds()+[']
>                      cmd+= [ ,comp = ']+getenv('computername') + [']
>                      cmd+=[ where rrecno = ]+ str(mrow,8,0)
>                   endif
>                   mcompany.tr_log(cmd)
>                endif
>             endif
>          else
>             if ABS(form.con_DISC.ef_disc.value) > 0.02
>                mamt = form.con_DISC.ef_disc.value * -1
>                mtax = val(left(form.con_disc.disc_vat.value,5))
>                madtax = val(substr(form.con_disc.disc_vat.value,7,5))
>                mcgst = round(split(mamt,mtax + madtax)/2,2)
>                mgoods = mamt - mcgst*2
>                cmd = [INSERT INTO sales]+mcompany.fyear + [ (mast , company , item , descrip , comment , mrp , locat]
>                cmd+=[ , disc , rate , qty , invoice_no , cname , caddr]
>                cmd+=[ , ddate , unit , tax , adtax ]
>                cmd+=[ , hsn_code , misc , sname , cgst ]
>                cmd+=[ , sgst , goods , username ,access ]
>                cmd+=[ , t_time ,  comp) ]
>                cmd+= [ VALUES ( -1 , "Discount" , " " , " " , " " , 0 , "] +form.mlocat+ ["]
>                cmd+= [, 0,]+ str(abs(mamt),10,2)+[ , -1 ,]+ str(form.minvoice,8,0)+ [, "]+escape_str(form.mcust)+[" , "]+escape_str(form.maddr)+["]
               cmd+= [ ,"]+dtos(form.header.mdate.date) + [" , " " , ]+str(mtax,5,2) +[,]+ str(madtax,5,2)
>                cmd+= [ ,"] +substr(form.con_disc.disc_vat.value,13,4) + [",0 , " ",] + str(mcgst,9,2)
>                cmd+= [ ,] + str(mcgst,9,2) + [,]+ str(mgoods,11,2) + [,"]+escape_str(mcompany.user)+[" , ] + str(mcompany.access,2,0)
>                cmd+= [ ,"]+ getseconds()+ [","]+getenv('computername') +[")]
>                mcompany.adodb.executesql(cmd)
>                if mcompany.remote
>                   cmd = [INSERT INTO sales]+mcompany.fyear + [ (mast , company , item , descrip , comment , mrp , locat]
>                   cmd+=[ , disc , rate , qty , invoice_no , cname , caddr]
>                   cmd+=[ , ddate , unit , tax , adtax ]
>                   cmd+=[ , hsn_code , misc , sname , cgst ]
>                   cmd+=[ , sgst , goods , username ,access ]
>                   cmd+=[ , t_time ,  comp,rrecno) ]
>                   cmd+= [ VALUES ( -1 , "Discount" , " " , " " , " " , 0 , "] +form.mlocat+ ["]
>                   cmd+= [, 0,]+ str(abs(mamt),10,2)+[ , -1 ,]+ str(form.minvoice,8,0)+ [, "]+escape_str(form.mcust)+[" , "]+escape_str(form.maddr)+["]
>                   cmd+= [ ,"]+dtos(form.header.mdate.date) + [" , " " , ]+str(mtax,5,2) +[,]+ str(madtax,5,2)
>                   cmd+= [ ,"] +substr(form.con_disc.disc_vat.value,13,4) + [",0 , " ",] + str(mcgst,9,2)
>                   cmd+= [ ,] + str(mcgst,9,2) + [,]+ str(mgoods,11,2) + [,"]+mcompany.user +[" , ] + str(mcompany.access,2,0)
>                   cmd+= [ ,"]+ getseconds()+ [","]+getenv('computername') +[",]+last_insert_id()+[)]
>                endif
>                mcompany.tr_log(cmd)
>             endif
>          endif
>       endif
>       form.con_disc.ef_disc.value = 0
>       form.refresh_data()
>       form.en_abled()
>       form.footer.add.setfocus()
>       form.header.mod_cust.enabled = true
>       return
>
>         function DISC_onClick()
>       form.dis_able()
>       form.refresh_data()
>       mtax_slab = new array()
>       mbook = form.rowset.bookmark()
>       form.rowset.first()
>       if form.rowset.count()>0
>          do while not (form.rowset.endofset)
>             mtax = str(form.rowset.fields["tax"].value,5,2)+"+"+str(form.rowset.fields["adtax"].value,5,2)+" "+left(form.rowset.fields["hsn_code"].value,4)
>             if mtax_slab.scan(mtax) = 0
>                mtax_slab.add(mtax)
>             endif
>             form.rowset.next()
>          enddo
>       endif
>       form.rowset.goto(mbook)
>       form.header.mod_cust.enabled = false
>       form.con_disc.visible = true
>       form.con_disc.enabled = true
>       form.con_disc.disc_vat.datasource = 'array mtax_slab'
>       *form.salesdatamodule1.disco.requery()
>       if form.salesdatamodule1.disco.rowset.count() > 0
>          form.con_DISC.ef_disc.value = form.salesdatamodule1.disco.rowset.fields["rate"].value
>          mtax = str(form.salesdatamodule1.disco.rowset.fields["tax"].value,5,2)+"+"+str(form.salesdatamodule1.disco.rowset.fields["adtax"].value,5,2)+;
>             alltrim(form.salesdatamodule1.disco.rowset.fields["hsn_code"].value)
>          if mtax_slab.scan(mtax) = 0
>             //do nothing value of tax slab will be automatically set to any one of the values
>          else
>             form.con_disc.disc_vat.value = mtax
>          endif
>       endif
>       form.con_DISC.ef_disc.setfocus()
>       return
>
>
>         function DISC_when(bOpen)
>                 retval = false
>                 if form.rowset.count()>0
>                         retval = true
>                 endif
>                 
>       return retval
>
>    function GOTO_onClick()
>       form.minvoice = form.header.new_cashno.value                
>       form.refresh_data()
>       form.footer.add.setfocus()
>       return
>
>    function ITEMDISCARD_onClick()
>       additem::itemdiscard_onclick()
>       form.header.mod_cust.enabled = true
>       form.en_abled()
>       form.footer.add.setfocus()
>       return
>
>
> function MDESCRIP_onGotFocus()
>       this.keyboard( "{End}" )
>       on key label uparrow up_arrow()
>       return
>
>    
>
>    function MDISC_valid()
>       if this.value <0 or this.value >100
>                         retval = false
>                 else
>                         retval = true
>                 endif
>       return retval
>
>    function MLOCATS_onChange()
>                 do case
>                         case lower(this.value) = "head office"
>                                 form.mlocat = "0"
>                         case this.value = alltrim(mcompany.go1)
>                                 form.mlocat = "1"
>                         case this.value = alltrim(mcompany.go2)
>                                 form.mlocat = "2"                
>                 endcase
>                 form.refresh_data()
>                 form.footer.add.setfocus()
>       return
>
>    function MLOCATS_when(bOpen)
>                 retval = true
>                 if type('form.minvoice') <> "U"
>                         if form.minvoice>0
>                                 retval = false
>                         endif
>                 endif
>       if mcompany.remote
>          retval = false
>       endif
>       return retval
>
>         function MODIFY_onClick()
>       form.modi_item = new object()
>       form.modi_item.recno = 0
>       form.modi_item.allow = true
>
>       if (mcompany.access <3  AND form.rowset.fields["access"].value > mcompany.access) or (mcompany.access = 1 and mcompany.user <> alltrim(form.rowset.fields["username"].value))
>          msgbox("Sorry you cannot edit the item ")
>          form.modi_item.allow = false
>       endif
>       if form.modi_item.allow
>          form.dis_able()
>          form.header.mod_cust.enabled = false
>          form.modi_item.recno = form.rowset.fields["recno"].value
>          //store values already stored in record to memory variable for later comparision.
>          form.additem.enabled = true
>          form.additem.visible = true
>          form.additem.mcomp.value           = form.rowset.fields["company"].value
>          form.additem.mitem.value           = form.rowset.fields["item"].value
>          form.additem.mdescrip.value        = form.rowset.fields["descrip"].value
>          form.additem.mmrp.value                  = form.rowset.fields["mrp"].value
>          form.additem.mdisc.value                  = form.rowset.fields["disc"].value
>          form.additem.mrate.value                 = form.rowset.fields["rate"].value
>          form.additem.mqty.value                        = form.rowset.fields["qty"].value
>          form.additem.mmisc.value                = form.rowset.fields["misc"].value
>          form.additem.s_helper.value         = form.rowset.fields["sname"].value
>          form.additem.mrate.setfocus()
>          form.additem.mcomment.value        = form.rowset.fields["comment"].value
>          form.modi_item.mast                       = form.rowset.fields["mast"].value
>          form.modi_item.company                   = form.rowset.fields["company"].value
>          form.modi_item.item                       = form.rowset.fields["item"].value
>          form.modi_item.descrip                   = form.rowset.fields["descrip"].value
>          form.modi_item.comment                   = form.rowset.fields["comment"].value
>          form.modi_item.mrp                           = form.rowset.fields["mrp"].value
>          form.modi_item.locat                      = form.rowset.fields["locat"].value
>          form.modi_item.disc                           = form.rowset.fields["disc"].value
>          form.modi_item.rate                           = form.rowset.fields["rate"].value
>          form.modi_item.qty                           = form.rowset.fields["qty"].value
>          form.modi_item.misc                           = form.rowset.fields["misc"].value
>          form.modi_item.sname                      = form.rowset.fields["sname"].value
>          form.modi_item.descrip                   = form.rowset.fields["descrip"].value
>          form.modi_item.user                           = form.rowset.fields["username"].value
>          form.modi_item.time                           = form.rowset.fields["t_time"].value
>          form.modi_item.tax                           = form.rowset.fields["tax"].value
>          form.modi_item.adtax                      = form.rowset.fields["adtax"].value                        
>          form.additem.itemsave.onclick = form.fmodi_item
>       endif
>                 return
>
>  
>
>    function MODIFY_when(bOpen)
>       retval = false
>                 if mcompany.access >1 or mcompany.sdate = date()
>                         retval = true
>                 endif
>                 if type('form.minvoice')#'U' and form.minvoice < 1 and this.name # "ADD"
>                         retval = false
>                 endif
>       return retval
>
>    function MOD_CUST_onClick()
>       if this.text = "M&odify"
>          form.refresh_data()
>          this.text = "&Save the changes"
>          form.header.ecaddr.enabled = true
>          form.header.ecname.enabled = true
>          form.header.ecname.setfocus()
>          if mcompany.access >1
>             form.header.mdate.enabled = true
>          endif
>          form.header.discard_cust.enabled = true
>          form.dis_able()
>       else
>          mch = msgbox("Save the changes","Alert",64+3)
>          if mch = 2
>             //do nothing
>          else
>             if mch = 6
>                cmd = [UPDATE sales]+mcompany.fyear + [ SET ]
>                cmd+= [ cname = '] +escape_str(form.header.ecname.value) + [']
>                cmd+= [ ,caddr = '] +escape_str(form.header.ecaddr.value) + [']
>                cmd+= [ ,ddate = '] +dtos(form.header.mdate.date) + [']
>                cmd+=[ where invoice_no = ]+ str(form.minvoice,8,0) + [ AND locat = ']+form.mlocat + [']
>                mcompany.adodb.executesql(cmd)
>                mcompany.tr_log(cmd)
>             endif
>             this.text = "M&odify"
>             form.header.ecaddr.enabled = false
>             form.header.ecname.enabled = false
>             form.header.mdate.enabled =  false
>             form.header.discard_cust.enabled = false
>             form.en_abled()
>             form.footer.add.setfocus()
>          endif
>       endif
>       return
>
>         function refresh_data
>       local mcount,mtotal , mdisco,bookmark
>                 numlock()
>                 mtime1 = seconds()
>                 m_curr_rec = form.rowset.fields["recno"].value
>                 form.salesdatamodule1.sales.params["invoice"].value  = str(form.minvoice,10,0)
>                 form.salesdatamodule1.sales.params["location"].value = form.mlocat
>                 form.salesdatamodule1.sales.requery()
>                 mtime2 = seconds()
>                 form.salesdatamodule1.disco.params["invoice"].value  = str(form.minvoice,10,0)
>                 form.salesdatamodule1.disco.params["location"].value = form.mlocat
>                 form.salesdatamodule1.disco.requery()
>                 mtime3 = seconds()
>                 mtotal = 0
>                 mcount = 0
>                 if form.rowset.count()>0
>                         form.mcust = form.rowset.fields["cname"].value
>                         form.maddr = form.rowset.fields["caddr"].value
>                         form.mdate = form.rowset.fields["ddate"].value
>                         bookmark = null
>                         do while not (form.rowset.endofset)
>                                 if form.rowset.fields["recno"].value = m_curr_rec
>                                         bookmark =  form.rowset.bookmark()
>                                 endif
>                                 mtotal += form.rowset.fields["qty"].value * form.rowset.fields["rate"].value - form.rowset.fields["misc"].value
>                                 mcount+=form.rowset.fields["qty"].value
>                                 form.rowset.next()
>                         enddo
>                         
>                         if bookmark # null
>                                 form.rowset.goto(bookmark)
>                         else
>                                 form.rowset.last()
>                         endif
>                 else
>                         if form.salesdatamodule1.disco.rowset.count() >0
>                                 cmd = "DELETE from sales"+mcompany.fyear
>                                 cmd+=" where invoice_no = "+ str(form.minvoice,8,0) + " AND locat = '"+form.mlocat + "'" + " AND mast = -1"
>             form.salesdatamodule1.disco.rowset.first()
>                                 mcompany.adodb.executesql(cmd)
>             mcompany.tr_log(cmd)
>                                 form.salesdatamodule1.disco.requery()
>                         endif
>                         form.mdate  = min(date(),mcompany.lyear)
>          form.mdate  = max(form.mdate , mcompany.byear)
>                         store space(30) to form.mcust , form.maddr
>                         form.minvoice = -1
>                 endif
>                         
>                 form.header.ecname.value = form.mcust
>                 form.header.ecaddr.value = form.maddr
>                 form.header.cash_no.text = "Cash Memo No. <font color='red'><b>"+ iif(form.minvoice = -1 , "new" , form.minvoice);
>                         + "</b></font> "
>                 form.header.tdate.text = "Date"
>                 form.header.mdate.assign_val(form.mdate)
>                 form.subtotal.text = "Sub Total    "+ str(mtotal,10,2)
>                 if form.salesdatamodule1.disco.rowset.count() >0
>                         mdisco = form.salesdatamodule1.disco.rowset.fields["rate"].value
>                         form.disco.text = "Discount     "+ str(mdisco*-1,10,2)
>                 else
>                         form.disco.text = " "
>                         mdisco = 0
>                 endif
>                 form.gtotal.text = "Grand Total "+ str(mtotal-mdisco,10,2)
>                 form.total_qty.text = "Total Qty " + str(mcount,6,mcompany.dec)
>                 form.total_qty.text += chr(13) + "Total items " + str(form.rowset.count(),5,0)
>                 mtime4 = seconds()
>       form.date_range()
>                 form.footer.add.setfocus()
>         return
>                 
>
>    function form_canClose()
>       _app.e_sales = NULL
>       form.rapid_dis()
>       close procedure sales2.dmd
>       close procedure inve.dmd
>       close procedure mun_controls.cc
>       if mcompany.narrow
>          close procedure p_sales.rep
>       else
>          close procedure p2_sales.rep
>       endif
>
>       return true
>
>    
>
>    function form_onOpen()
>       form.minvoice = -1
>       _app.e_sales = form
> //                if mcompany.narrow
>       set procedure to p_sales.rep additive
> //                else
>       set procedure to p2_sales.rep additive
> //                endif
> //      form.r = new p_salesreport()
>                 class::num_onopen()
>       form.text = "Cash Memo Entry of "+ mcompany.company
>                 form.header.mlocats.dataSource = loc_combo()
>                 form.mlocat = "0"
>                 form.mdate  = min(date(),mcompany.lyear)
>       form.mdate  = max(form.mdate,mcompany.byear)
>                 form.header.new_cashno.rangemax = form.last()
>                 store space(30) to form.mcust , form.maddr
>                 form.rowset.first()
>                 class::refresh_data()
>                 form.footer.add.setfocus()
>                 class::rapid_en()
>                 form.header.mdate.validErrormsg = "Please enter a date between "+dtoc(mcompany.byear) + ;
>                         " & " + dtoc(mcompany.lyear)
>                 form.header.mdate.rangemax = mcompany.lyear
>                 form.header.mdate.rangemin = mcompany.byear
>       if mcompany.remote
>          form.header.mlocats.value = location(mcompany.remote_loc)
>          form.mlocat = mcompany.remote_loc
>       endif
>       return
>                 
>
>         function fmodi_item()
>       local bookmark
>       form.salesdatamodule1.sales.requery()
>       if form.rowset.count()>0 AND form.modi_item.recno >0
>          bookmark = null
>          do while not (form.rowset.endofset)
>             if form.rowset.fields["recno"].value = form.modi_item.recno
>                bookmark =  form.rowset.bookmark()
>             endif
>             form.rowset.next()
>          enddo
>          if bookmark # null
>               if (form.additem.mqty.value = 0 OR empty(form.additem.mcomp.value)) AND form.rowset.count() =1
>                  msgbox("Cannot delete last item of the cash memo ")
>               else
>                  form.rowset.goto(bookmark)
>                  if form.additem.mqty.value <> 0
>                      mamt = form.additem.mrate.value*form.additem.mqty.value - form.additem.mmisc.value
>                      mcgst = round(split(mamt,form.modi_item.tax +form.modi_item.adtax)/2 , 2)
>                      mgoods= mamt - mcgst*2
>                      cmd = [UPDATE sales]+mcompany.fyear + [ SET ]
>                      cmd+= [ company = '] + escape_str(form.additem.mcomp.value)+ [']
>                      cmd+= [ ,item = '] + escape_str(form.additem.mitem.value)+ [']
>                      cmd+= [ ,descrip = '] + escape_str(form.additem.mdescrip.value)+ [']
>                      cmd+= [ ,comment = '] + escape_str(iif( trim(form.additem.mcomment.value)="COMMENT",[ ],form.additem.mcomment.value))+ [']
>                      cmd+= [ ,mrp = ] +str(form.additem.mmrp.value,11,2)
>                      cmd+= [ ,disc = ] +str(form.additem.mdisc.value,6,2)
>                      cmd+= [ ,rate = ] +str(form.additem.mrate.value,11,2)
>                      cmd+= [ ,qty = ] +str(form.additem.mqty.value,11,2)
>                      cmd+= [ ,misc = ] +str(form.additem.mmisc.value,11,2)
>                      cmd+= [ ,sname = '] +escape_str(form.additem.s_helper.value)+ [']
>                      cmd+= [ ,cgst = ]+str(mcgst,10,2)
>                      cmd+= [ ,sgst = ]+str(mcgst,10,2)
>                      cmd+= [ ,goods = ]+ str(mgoods,10,2)
>                      cmd+= [ ,username = '] + escape_str(mcompany.user)+ [']
>                      cmd+= [ ,access = ] + str(mcompany.access , 2,0)
>                      cmd+= [ ,t_time = '] + getseconds()+[']
>                      cmd+= [ ,comp = ']+escape_str(getenv('computername'))+ [']
>                      cmd+=[ where recno = ]+ str(form.modi_item.recno,8,0)
>                      mcompany.adodb.executesql(cmd)
>                      if mcompany.remote
>                         cmd = [UPDATE sales]+mcompany.fyear + [ SET ]
>                         cmd+= [ company = '] + escape_str(form.additem.mcomp.value)+ [']
>                         cmd+= [ ,item = '] + escape_str(form.additem.mitem.value)+ [']
>                         cmd+= [ ,descrip = '] + escape_str(form.additem.mdescrip.value)+ [']
>                         cmd+= [ ,comment = '] + escape_str(iif( trim(form.additem.mcomment.value)="COMMENT",[ ],form.additem.mcomment.value))+ [']
>                         cmd+= [ ,mrp = ] +str(form.additem.mmrp.value,11,2)
>                         cmd+= [ ,disc = ] +str(form.additem.mdisc.value,6,2)
>                         cmd+= [ ,rate = ] +str(form.additem.mrate.value,11,2)
>                         cmd+= [ ,qty = ] +str(form.additem.mqty.value,11,2)
>                         cmd+= [ ,misc = ] +str(form.additem.mmisc.value,11,2)
>                         cmd+= [ ,sname = '] +escape_str(form.additem.s_helper.value)+ [']
>                         cmd+= [ ,cgst = ]+str(mcgst,10,2)
>                         cmd+= [ ,sgst = ]+str(mcgst,10,2)
>                         cmd+= [ ,goods = ]+ str(mgoods,10,2)
>                         cmd+= [ ,username = '] + escape_str(mcompany.user)+ [']
>                         cmd+= [ ,access = ] + str(mcompany.access , 2,0)
>                         cmd+= [ ,t_time = '] + getseconds()+[']
>                         cmd+= [ ,comp = ']+escape_str(getenv('computername'))+ [']
>                         cmd+=[ where rrecno = ]+ str(form.modi_item.recno,8,0)                        
>                      endif
>                      mcompany.tr_log(cmd)
>                   else
>                      cmd = "delete from sales"+mcompany.fyear + " where recno = "+ str(form.modi_item.recno,8,0)
>                      mcompany.adodb.executesql(cmd)
>                      if mcompany.remote
>                         cmd = "delete from sales"+mcompany.fyear + " where rrecno = "+ str(form.modi_item.recno,8,0)
>                      endif
>                      mcompany.tr_log(cmd)
>                   endif
>                   form.update_inv(form.modi_item.mast , form.additem.mqty.value+form.modi_item.qty*-1 , form.mlocat ,"lsprice" ,form.additem.mrate.value )
>               endif
>          else
>             msgbox("Sorry the edited record has been deleted by someone else")
>          endif
>          form.modi_item                 = new object()
>          form.additem.mcomp.value = " "
>          form.additem.mitem.value = " "
>          form.additem.mdescrip.value = " "
>          form.additem.mmrp.value = 0
>          form.additem.mdisc.value = 0
>          form.additem.mrate.value = 0
>          form.additem.mqty.value = 0
>          form.additem.mmisc.value = 0
>          form.additem.enabled = false
>          form.additem.visible = false
>          class::refresh_data()
>          form.en_abled()
>          form.footer.add.setfocus()
>          form.header.mod_cust.enabled = true
>          form.additem.itemsave.onclick = form.save_item
>       endif
>                 return
>                 
>
>         function save_item()
>       if not empty(form.additem.mcomp.value) and form.additem.mqty.value <>0
>          time1 = seconds()
>          form.minvoice = iif(form.minvoice>0 , form.minvoice ,form.last()+1 )
>          mamt = form.additem.mrate.value*form.additem.mqty.value - form.additem.mmisc.value
>          mcgst = round(split(mamt,mo_item.tax +mo_item.adtax)/2 , 2)
>          mgoods= mamt - mcgst*2
>          temp = form.header.mdate.date
>          cmd = [INSERT INTO sales]+mcompany.fyear + [ (mast , company , item , descrip , comment , mrp , locat]
>          cmd+=[ , disc , rate , qty , invoice_no , cname , caddr]
>          cmd+=[ , ddate , unit , tax , adtax ]
>          cmd+=[ , hsn_code , misc , sname , cgst ]
>          cmd+=[ , sgst , goods , username ,access ]
>          cmd+=[ , t_time , comp) ]
>          cmd+= [ VALUES ( ]+str(mo_item.recno,8,0)+[, "]+escape_str(form.additem.mcomp.value)+[" , "]+escape_str(form.additem.mitem.value)+[ " , "]+escape_str(form.additem.mdescrip.value)+[" , "]+escape_str(iif( trim(form.additem.mcomment.value)="COMMENT",[ ],form.additem.mcomment.value))+[" , ]+str(form.additem.mmrp.value,11,2)+[ , "] +form.mlocat+ ["]
>          cmd+= [,]+str(form.additem.mdisc.value,11,2)+[,]+ str(form.additem.mrate.value,10,2)+[ ,]+ str(form.additem.mqty.value,8,mcompany.dec)+[,]+ str(form.minvoice,8,0)+ [, "]+escape_str(form.mcust)+[" , "]+escape_str(form.maddr)+["]
>          cmd+= [ ,"]+dtos(form.header.mdate.date) + [" , "]+escape_str(mo_item.unit)+[" , ]+str(mo_item.tax,5,2) +[,]+ str(mo_item.adtax,5,2)
>          cmd+= [ ,"] +escape_str(left(mo_item.hsn_code,4))+ [",]+str(form.additem.mmisc.value,11,2)+[ ,"]+escape_str(form.additem.s_helper.value)+[",] + str(mcgst,9,2)
>          cmd+= [ ,] + str(mcgst,9,2) + [,]+ str(mgoods,11,2) + [,"]+escape_str(mcompany.user)+[" , ] + str(mcompany.access,2,0)
>          cmd+= [ ,"]+ getseconds()+ [","]+escape_str(getenv('computername'))+[")]
>          mcompany.adodb.executesql(cmd)
>          if mcompany.remote
>             cmd = [INSERT INTO sales]+mcompany.fyear + [ (mast , company , item , descrip , comment , mrp , locat]
>             cmd+=[ , disc , rate , qty , invoice_no , cname , caddr]
>             cmd+=[ , ddate , unit , tax , adtax ]
>             cmd+=[ , hsn_code , misc , sname , cgst ]
>             cmd+=[ , sgst , goods , username ,access ]
>             cmd+=[ , t_time , comp,rrecno) ]
>             cmd+= [ VALUES ( ]+str(mo_item.recno,8,0)+[, "]+escape_str(form.additem.mcomp.value)+[" , "]+escape_str(form.additem.mitem.value)+[ " , "]+escape_str(form.additem.mdescrip.value)+[" , "]+escape_str(iif( trim(form.additem.mcomment.value)="COMMENT",[ ],form.additem.mcomment.value))+[" , ]+str(form.additem.mmrp.value,11,2)+[ , "] +form.mlocat+ ["]
>             cmd+= [,]+str(form.additem.mdisc.value,11,2)+[,]+ str(form.additem.mrate.value,10,2)+[ ,]+ str(form.additem.mqty.value,8,mcompany.dec)+[,]+ str(form.minvoice,8,0)+ [, "]+escape_str(form.mcust)+[" , "]+escape_str(form.maddr)+["]
>             cmd+= [ ,"]+dtos(form.header.mdate.date) + [" , "]+escape_str(mo_item.unit)+[" , ]+str(mo_item.tax,5,2) +[,]+ str(mo_item.adtax,5,2)
>             cmd+= [ ,"] +escape_str(left(mo_item.hsn_code,4))+ [",]+str(form.additem.mmisc.value,11,2)+[ ,"]+escape_str(form.additem.s_helper.value)+[",] + str(mcgst,9,2)
>             cmd+= [ ,] + str(mcgst,9,2) + [,]+ str(mgoods,11,2) + [,"]+escape_str(mcompany.user)+[" , ] + str(mcompany.access,2,0)
>             cmd+= [ ,"]+ getseconds() + [","]+escape_str(getenv('computername'))+[",]+last_insert_id()+[)]
>          endif
>          mcompany.tr_log(cmd)
>          form.update_inv(mo_item.recno , form.additem.mqty.value , form.mlocat ,"lsprice" , form.additem.mrate.value)
>          mo_item                 = new object()
>          form.additem.mcomp.value         = " "
>          form.additem.mitem.value         = " "
>          form.additem.mdescrip.value= " "
>          form.additem.mmrp.value         = 0
>          form.additem.mdisc.value         = 0
>          form.additem.mrate.value         = 0
>          form.additem.mqty.value         = 0
>          form.additem.mmisc.value         = 0
>          form.additem.enabled = false
>          form.additem.visible = false
>          form.rowset.last()
>       else
>          *msgbox("Company name cannot remain blank, Unable to save")
>       endif
>       class::refresh_data()
>       form.salesdatamodule1.sales.rowset.last()
>       form.en_abled()
>       form.footer.add.setfocus()
>       form.header.mod_cust.enabled = true
>         return
>         
>
>         function dis_able()
>                 form.footer.add.enabled = false
>                 form.footer.delete.enabled = false
>                 form.footer.modify.enabled = false
>                 form.footer.print.enabled = false
>                 form.footer.new.enabled = false
>                 form.header.goto.enabled = false
>                 form.header.new_cashno.enabled = false
>                 form.footer.disc.enabled = false
>                 form.rapid_dis()
>         return true
>         
>
>         function en_abled()
>                 form.footer.add.enabled = true
>                 form.footer.delete.enabled = true
>                 form.footer.modify.enabled = true
>                 form.footer.print.enabled = true
>                 form.footer.new.enabled = true
>                 form.header.goto.enabled = true
>                 form.header.new_cashno.enabled = true
>                 form.footer.disc.enabled = true
>                 form.con_disc.enabled = false
>                 form.con_disc.visible = false
>                 form.additem.visible = false
>                 form.rapid_en()
>         return true
>
>    function NEW_CASHNO_onGotFocus()
>                 form.header.new_cashno.rangemax = form.last()
>                 form.rapid_dis()
>       return
>
>    function NEW_CASHNO_onLostFocus()
>       form.rapid_en()
>       return
>
>    function NEW_onClick()
>       form.minvoice = -1
>                 form.refresh_data()
>       return
>
>    function PRINT_onClick()
>       form.refresh_data()
>       if not form.footer.half_page.value
>          r = new p_salesreport()
>       else
>          r = new p2_salesreport()
>       endif
>       mrender = 0
>       r.salesdatamodule1.sales.params["invoice"].value = str(form.minvoice,10,0)
>       r.salesdatamodule1.sales.params["location"].value = form.mlocat
>       r.salesdatamodule1.sales.requery()
>       r.salesdatamodule1.psale.params["invoice"].value = str(form.minvoice,10,0)
>       r.salesdatamodule1.psale.params["location"].value = form.mlocat
>       r.salesdatamodule1.psale.requery()
>       r.salesdatamodule1.disco.params["invoice"].value = str(form.minvoice,10,0)
>       r.salesdatamodule1.disco.params["location"].value = form.mlocat
>       r.salesdatamodule1.disco.requery()
>       r.title = "Cash memo no. "+str(form.minvoice,10,0)
> //      if mcompany.narrow and not empty(mcompany.printer)
>       if not form.footer.half_page.value
>          load_ini("cashmemo.ini","r.printer")
> //         msgbox("loaded ini")
>       else
>          load_ini("cashmemo_h.ini","r.printer")
>       endif
>       r.title = "Cash Memo no. "+form.minvoice
>       r.render()
> //      msgbox("printed ")
> //      else
> //         if r.printer.chooseprinter()
> //            r.title = "Cash Memo no. "+form.minvoice
> //            r.render()
> //         endif
> //      endif
>         return
>
>    function PRINT_when(bOpen)
>       retval = false
>                 if form.rowset.count() >0
>                         retval = true
>                 endif
>       return retval
>
>    function SALES_onGotFocus()
>       form.rapid_dis()
>       return
>
>    function SALES_onLostFocus()
>                 if not form.additem.visible
>                         form.rapid_en()
>                 endif
>       return
>
>         function last()
>       local mcount
>                 form.salesdatamodule1.last.params["location"].value = form.mlocat
>                 form.salesdatamodule1.last.requery()
>                 mcount = form.salesdatamodule1.last.rowset.fields["numb"].value
>                 if mcount = null
>                         mcount = 0
>                 endif
>         return mcount
>                 
>
>         function rapid_en()
>       if form.additem.visible = false
>          on key label pgup _app.e_sales.plus1()
>          on key label pgdn _app.e_sales.minus1()
>          on key label home _app.e_sales.plus10()
>          on key label end _app.e_sales.minus10()
>          on key label esc _app.e_sales.refresh_data()
>          form.invedatamodule1.rapid.rowset.first()
>          r = form.invedatamodule1.rapid.rowset.fields
>          do while not form.invedatamodule1.rapid.rowset.endofset
>             if lower(r["key_st"].value) $ "0123456789./*-+qwertyuiop[]\asdfghjkl;'zxcvbnm,./`"
>                cmd = "on key label "+r["key_st"].value +" _app.e_sales.add_onclick("+alltrim(str(r["recno"].value,6,0))+")"
>                &cmd
>             endif
>             r.parent.next()
>          enddo
>       endif
>         return
>
>
>
>
>
>
>         function rapid_dis()
>                 on key
>         return
>         
>
>
>
>
>
>
>         function plus1()
>                 form.rapid_dis()
>                 if form.header.mod_cust.enabled and form.footer.add.enabled
>                         mlast = form.last()
>                         do case
>                                 case form.minvoice < mlast
>                                         if form.minvoice >0
>                                                 form.minvoice++
>                                         endif
>                                 case form.minvoice = mlast
>                                         form.minvoice = -1                                
>                         endcase
>                         form.refresh_data()
>                 endif
>                 form.rapid_en()
>         return
>
>
>
>
>
>
>
>         function minus1()
>                 form.rapid_dis()
>                 if form.header.mod_cust.enabled and form.footer.add.enabled
>                          do case
>                                 case form.minvoice >1
>                                         temp = form.minvoice - 1
>                                         form.minvoice = temp
>                                 case form.minvoice = -1
>                                         mlast = form.last()
>                                         form.minvoice := mlast
>                         endcase
>                         if form.minvoice = 0
>                                 form.minvoice := -1
>                         endif
>                         form.refresh_data()
>                 endif
>                 form.rapid_en()
>         return
>
>
>
>
>
>
>         function plus10()
>                 form.rapid_dis()
>                 if form.header.mod_cust.enabled and form.footer.add.enabled
>                         mlast = form.last()
>          if form.minvoice >0
>             form.minvoice = min(mlast , form.minvoice+10)
>          endif
>                         form.refresh_data()
>                 endif
>                 form.rapid_en()
>         return
>
>
>
>
>
>
>         function minus10()
>                 form.rapid_dis()
>                 if form.header.mod_cust.enabled and form.footer.add.enabled
>                         do case
>                                 case form.minvoice >1
>                                         form.minvoice = max(1, form.minvoice-10)
>                                 case form.minvoice = -1
>                                         mlast = form.last()
>                                         form.minvoice = mlast
>                         endcase
>                         if form.minvoice = 0
>                                 form.minvoice := -1
>                         endif                        
>                         form.refresh_data()
>                 endif
>                 form.rapid_en()
>         return
>    
>
>
>
>
>
>    function date_range()
>                 form.salesdatamodule1.date_r.params["inv_fr"].value  = str(form.minvoice-1,10,0)
>                 form.salesdatamodule1.date_r.params["inv_to"].value  = str(form.minvoice+1,10,0)
>                 form.salesdatamodule1.date_r.params["location"].value = form.mlocat
>                 form.salesdatamodule1.date_r.requery()
>       form.header.mdate.rangemax = mcompany.lyear
>       form.header.mdate.rangemin = mcompany.byear
>      
>       do while not form.salesdatamodule1.date_r.rowset.endofset
>          if form.salesdatamodule1.date_r.rowset.fields["invoice_no"].value < form.minvoice
>             form.header.mdate.rangemin = form.salesdatamodule1.date_r.rowset.fields["ddate"].value
>          endif
>          if form.salesdatamodule1.date_r.rowset.fields["invoice_no"].value > form.minvoice
>             form.header.mdate.rangemax = form.salesdatamodule1.date_r.rowset.fields["ddate"].value
>          endif
>          form.salesdatamodule1.date_r.rowset.next()
>       enddo
>       form.header.mdate.validErrormsg = "Please enter a date between "+dtoc(form.header.mdate.rangemin) + ;
>                         " & " + dtoc(form.header.mdate.rangemax)
>    return
>
>
>
> endclass
>
>
>