SDK Live: Difference between revisions

From eStream Software
 
(264 intermediate revisions by the same user not shown)
Line 16: Line 16:
# Must self do checking else error prompt will unable to “capture”.
# Must self do checking else error prompt will unable to “capture”.
# Only supported in IE for JScript
# Only supported in IE for JScript
<div style="float: right;">  [[#top|[top]]]</div>
==Requirement==
* Microsoft Windows 8.1 and above (recommended with 64 bits windows)
* Intel i5, i7 and above computer.
* 8 GB of RAM (recommended 12 GB and above).
* Firebird (For Automatic Login & Logout Only)
* SQL Accounting
* Windows Scheduler (For Automatic Login & Logout Only)


<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


==Documentation==
==Documentation==
* http://www.estream.com.my/document/SQLLink/SQLSDK.zip
* [https://www.sql.com.my/document/SQLLink/SQLSDK.zip SQLSDK.zip]
* http://www.estream.com.my/document/SQLLink/Video-SDK.exe
* [https://download.sql.com.my/customer/Fairy/Steps-SDK.gif Steps-SDK.gif]
* http://www.estream.com.my/document/SQLLink/TaxPostSeq.jpg


==Linking Flow==
==Linking Flow==
* Highlight in Yellow Color is the Application/Function you need to Develop/Create.  
* Highlight in Yellow Color is the <span style="color:#0000ff">Windows base Application/Function</span> you need to Develop/Create.  


===Example 1 - POS System===
===Example 1 - POS System===
[[File:LinkFlow-Example01.jpg|600px|center]]
[[File:LinkFlow-Example01.jpg|600px|center]]


===Example 2 - Cloud System===
===Example 2 - Cloud/Mobile System===
[[File:LinkFlow-Example02.jpg|600px|center]]
[[File:LinkFlow-Example02.jpg|600px|center]]


:* The SDK can be build in in your system or a Standalone windows Application(Middle Application).
:* The SDK can be build in in your system or a Standalone windows Application(Middle Application).
:* If you build in your system then it can be sync anytime either by a special interface with parameter (eg Date From, Date To & etc) or each transaction after post(not recommended)
:* If you build in your system then it can be sync anytime either by a special interface with parameter (eg Date From, Date To & etc) or each transaction after post(not recommended)
:* If you create a Standalone windows Application(Middle Application) you can make use the windows schedule to sync or call from you system to execute/run the Standalone windows Application(Middle Application).
:* If you create a Standalone windows Application(Middle Application) you can make use the <span style="color:#0000ff">Windows Schedule</span> to sync or call from you system to execute/run the Standalone windows Application(Middle Application).


<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>
Line 41: Line 50:
==Steps==
==Steps==
===CHM File===
===CHM File===
# Install sqlaccounting [https://wiki.sql.com.my/wiki/SQL_Accounting_Linking#SQL_Accounting_GST.2FSST_Program Click here]
# Install SQL Accounting [https://wiki.sql.com.my/wiki/SQL_Accounting_Linking#SQL_Accounting_GST.2FSST_.26_Firebird_Program Click here]
# Create Sample Data
# Create Sample Data
# Login (username & password is Admin)
# Login (username & password is Admin)
Line 69: Line 78:
|}
|}
:::----------------------------------------------------------------------------------------------------------------------------------------------------
:::----------------------------------------------------------------------------------------------------------------------------------------------------
<div style="float: right;">  [[#top|[top]]]</div>
==Available Programming Language==
* [[#VB._Net| VB. Net]]
* [[#C_Sharp| C Sharp]]
* [[#ASP.Net_C_Sharp| ASP.Net C Sharp]]
* [[#Python| Python]]
* [[#PHP|PHP]]
* [[#Node_JS| Node JS]]
* [[#VB_Script| VB Script]]
* [[#JScript/JavaScript| JavaScript]]
* [[#Delphi| Delphi]]


<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>
Line 74: Line 96:
==Example External Program==
==Example External Program==
===VB. Net===
===VB. Net===
* Example [https://www.estream.com.my/downloadfile/Fairy/VBDotNet.zip VBDotNet-20200328]
* Example [https://download.sql.com.my/customer/Fairy/VBDotNet.zip VBDotNet-20230819]


===C Sharp===
===C Sharp===
* Example [https://www.estream.com.my/downloadfile/Fairy/CSharp.zip CSharp-20200328]
* Example [https://download.sql.com.my/customer/Fairy/CSharp.zip CSharp-20230819]
 
===Steps (C Sharp & VB.Net Only)===
The [https://download.sql.com.my/customer/Fairy/Video-VBDotNetnCSharp.zip example video] is how to
:01. Open DCF in '''D:\Happy\DB\Default.DCF'''
:02. Datatabase is '''ACC-0008.FDB'''
:03. Click '''Complete Post''' button
:04. Where to check in SQL accounting after Post (Steps-2.gif)


Available Function
Available Function
Line 94: Line 123:
:- Customer Aging - Customer.Aging.RO
:- Customer Aging - Customer.Aging.RO
:- Get Sales Invoice Listing - Sales.IV.RO
:- Get Sales Invoice Listing - Sales.IV.RO
:- Stock Item List Filter by Supplier Item
:- Stock Item List
:- Add SKU with Edit SKU - ST_ITEM
:- Add SKU with Edit SKU - ST_ITEM
:- Del SKU - ST_ITEM
:- Del SKU - ST_ITEM
Line 121: Line 150:
:- Refund Deposit - Deposit Refund
:- Refund Deposit - Deposit Refund
:- Forfeit Deposit - Deposit Forfeit
:- Forfeit Deposit - Deposit Forfeit
:- Enable Support DocNo Format with Month & Year Format
:- Add AR IV
:- Add AR CN
:- Add AR PM Bounce Chq
:- Add GL Ledger RO
:- AR Statement
:- Add Add/Edit AR PM
:- Add LogInOut (For Testing purpose)


<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


===History - C Sharp & VB.Net===
===History - C Sharp & VB.Net===
:19 Aug 2023...
::- Add Add/Edit AR PM
::- Add LogInOut (For Testing purpose)
:14 Jun 2022
::- Add AR Statement
::- Fix Error when click 2nd time for Report.
:27 Apr 2022
::- Add/Edit Location
::- Rename Caption for Add Customer to Add/Edit Cust
::- Rename Caption for Add Agent to Add/Edit Agent
::- Add Reconnect
::- Add/Edit ST_Batch
::- Fix bug on KillApp should Sleep 2 seconds after run the KillApp
:18 Mar 2021
::- Enable Support DocNo Format with Month & Year Format
::- Add AR IV
::- Add AR CN
::- Add AR PM Bounce Chq
::- Add GL Ledger RO
:22 May 2020
::- Fix Complete Post Action cause SQLAcc still not exit after logout
::- Add/Edit Customer Contra
:28 Mar 2020
:28 Mar 2020
::- SL DO to SL IV button - Check Transfer Status should excluded Cancelled
::- SL DO to SL IV button - Check Transfer Status should excluded Cancelled
Line 187: Line 251:
::- Add SKU - ST_ITEM
::- Add SKU - ST_ITEM


: 19 Apr 2019
::- Update Complete Post - Add AR_CF (Refund)
::- Improve Speed on PrepareData for Grid output
:08 Apr 2019
::- Add Is Valid ST_Item
::- Add Is Valid GL_Acc
:28 Mar 2019
::- Remove Show message on Month End - FIFO
::- Change to use edCode instead of edDocNo for Month End Functions
::- Add Get Options...(Perform Tax / Local Amount Rounding, 5 Cents Rounding (Sales Invoice) & 5 Cents Rounding (Cash Sales)
::- Fixed Batch Post...2 DB with Tax option not working
::- Fixed Batch Post... Tax Amount Not Correct Formula
::- Add Batch Post...2 DCF
::- Update Get Stock Item List to support filter by Supplier Item
: 08 Mar 2019
::- Change Get Aging to Customer Aging
::- Change Get Agent to Get Agent Desc.
::- Add Month End - FIFO
::- Add Month End - WA (Weighted Average)
: 05 Mar 2019
::- Add Option With Tax for Batch Post...
::- Add Option allow Manually enter Biz Object Type for Batch Post...
: 01 Mar 2019
::- Add Complete Post - SL_CS, SL_CN, AR_PM & AR_CN
: 28 Feb 2019
::- Add Stock Item List - Stock.Item.RO
::- Add Get Agent Description
: 27 Feb 2019
::- Add Get DCF Database List
: 15 Feb 2019
::- Add Get Sales Invoice Listing
::- Add Master Detail Grid Relation for Report
::- Change Get Customer Aging output shown in Grid
: 02 Feb 2019
::- Add Stock Job Order to Stock Assembly with Override Raw Materials - PD_JO & ST_AS
: 31 Jan 2019
::- Add Stock Assembly with Override Raw Materials - ST_AS
::- Fix some function not close bizobject after post
: 29 Dec 2018
::- Add Batch Post Cash Sales
::- Add Batch Post Cash Sales for 2 Different Database
:28 Dec 2018
::- Add Get Next No for Invoice
:19 Dec 2018
::- Add Edit GL Journal Voucher - GL_JE
::- Add DocNo Field for Easy Trace
:18 Dec 2018
::- Add Edit Sales Cash Sales - SL_CS
:24 Oct 2018
::- Add Customer Aging - Customer.Aging.RO


<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>
<br>


===ASP.Net C Sharp===
===ASP.Net C Sharp===
: Make sure <span style="color:#0000ff">Enabled</span> the following function in ''IIS Manager - Sites - YourSiteName - Authentication''
01. Make sure <span style="color:#0000ff">Enabled</span> the following function in ''IIS Manager - Sites - YourSiteName - Authentication''
:- Anonymous Authentication
:- Anonymous Authentication
:- ASP.Net Impersonation (Make sure set Specific user)
:- ASP.Net Impersonation (Make sure set Specific user (Windows Login User & Password))
* Example [https://www.estream.com.my/downloadfile/Fairy/ASPDotNet.zip ASPDotNet-20191206]
02 Make sure the Windows user set in ASP.Net Impersonation is Login
 
* Example [https://download.sql.com.my/customer/Fairy/ASPDotNet.zip ASPDotNet-20210816]


Available Function
Available Function
:- Get Agent Description
:- Get Agent Description
:- Update Customer/Supplier Info.
:- New & Update Customer/Supplier Info.
:- Edit Cash Sales
:- Edit Cash Sales
:- Edit Purchase Invoice
:- Complete Post
:- GL PV
:- Add Add/Edit Agent
:- Add Add/Edit Terms
:- Add Add/Edit ST Item
:- Delete Cash Sales
:- Add SL SO


<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


History
History
:16 Aug 2021
::- Add SL SO
:19 Feb 2021
::- Delete Cash Sales
:16 Sep 2020
::- Add Add/Edit ST Item
::- Fix some comment note error
:23 Jun 2020
::- Add Add/Edit Agent
::- Add Add/Edit Terms
:22 May 2020
::- Add Edit Purchase Invoice
::- Add Complete Post
::- Add GL PV
:06 Dec 2019
:06 Dec 2019
::- Add Edit Cash Sales
::- Add Edit Cash Sales
Line 274: Line 303:


<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>
<br>


===Python===
===Python===
Line 279: Line 309:
:- pypiwin32 (Mandatory) -> pip install pypiwin32
:- pypiwin32 (Mandatory) -> pip install pypiwin32
:- Pillow (Optional for Picture) -> pip install Pillow
:- Pillow (Optional for Picture) -> pip install Pillow
:- striprtf (Optional for Rich Text to Text) -> pip install striprtf


====Example-Get Agent====
====Common====
* Common.py file for example code
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Get Agent Script 
! Common Function
|-
|-
|  
|  
<syntaxhighlight lang="Python">
<syntaxhighlight lang="Python">
#Updated 17 Oct 2019
#Updated 03 Oct 2023
import win32com.client
import win32com.client
import Common
import os
from time import sleep


ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
def KillApp():
    os.system('cmd /c "taskkill /IM "SQLACC.exe" /F"')
    sleep(2) #sleep 2 sec


def CheckLogin():
def CheckLogin():
    global ComServer
    ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
     B = ComServer.IsLogin
     B = ComServer.IsLogin
     if B == True:
     if B == True:
         ComServer.Logout()
         ComServer.Logout()
     ComServer.Login("ADMIN", "ADMIN", #UserName, Password
        KillApp()
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0081.FDB") #Database Name
     ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
    try:   
        ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                        "D:\\Happy\\DB\\Default.DCF",
                        #"C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                        "ACC-0015.FDB") #Database Name
    except Exception as e:
        print("Oops !", e)
 


def GetData():
def ShowResult(ADataset):
     lSQL = "SELECT * FROM AGENT  "
     if ADataset.RecordCount > 0:
    lSQL = lSQL + "WHERE CODE='FAIRY' "
        while not ADataset.eof:
   
            fc = ADataset.Fields.Count
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
            for x in range(fc):
   
                fn = ADataset.Fields.Items(x).FieldName
    if lDataSet.RecordCount > 0:
                fv = ADataset.FindField(fn).AsString
        print(lDataSet.FindField('Description').AsString)
                lresult = "Index : "+ str(x) + " FieldName : " + fn + " Value : " + fv
                print (lresult)
            print("====")
            ADataset.Next()
     else:
     else:
      print ("Record Not Found")
        print ("Record Not Found")
   
       
try:
       
    CheckLogin()    
def QuotedStr(ACode):
    GetData()
     return "'" + ACode.replace("'", "''") + "'"
finally:
 
     ComServer.Logout()
    ComServer = None   
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 322: Line 371:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Add & Edit Agent====
====Agent====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Add & Edit Agent Script   
! Agent Script   
|-
|-
|  
|  
<syntaxhighlight lang="Python">
<syntaxhighlight lang="Python">
#Updated 17 Oct 2019
#Updated 22 Jul 2023
import win32com.client
import Common
 
     
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
def GetListData():
 
     lSQL = "SELECT * FROM AGENT "
def CheckLogin():
     lSQL = lSQL + "WHERE ISACTIVE='T' "
     B = ComServer.IsLogin
    lSQL = lSQL + "ORDER BY CODE "
     if B == True:
   
        ComServer.Logout()
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
     ComServer.Login("ADMIN", "ADMIN", #UserName, Password
       
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
     Common.ShowResult(lDataSet)
                    "ACC-0104.FDB") #Database Name   


def PostData():
def PostData():
     BizObject = ComServer.BizObjects.Find("Agent")
     BizObject = ComServer.BizObjects.Find("Agent")
     lMain = BizObject.DataSets.Find("MainDataSet")
     lMain = BizObject.DataSets.Find("MainDataSet")  
      
      
     lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
     lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
Line 351: Line 399:
         lMain.FindField("CODE").value = "FAIRY"
         lMain.FindField("CODE").value = "FAIRY"
         lMain.FindField("DESCRIPTION").value = "FAIRY TAIL"
         lMain.FindField("DESCRIPTION").value = "FAIRY TAIL"
     else:
     else:
         BizObject.Params.Find("CODE").Value = lDocKey
         BizObject.Params.Find("Code").Value = lDocKey
         BizObject.Open()
         BizObject.Open()
         BizObject.Edit()
         BizObject.Edit()
         lMain.FindField("DESCRIPTION").value = "FAIRY TAIL WIZARD"
         lMain.FindField("DESCRIPTION").value = "FAIRY TAIL WIZARD"
       
           
     try:
     try:
         BizObject.Save()
         BizObject.Save()        
     except Exception as e:
     except Exception as e:
         print("Oops!", e)     
         print("Oops!", e)     
     print ("Done")
     BizObject.Close()
      
     print ("Posting/Update Done")
try:
    CheckLogin()
    PostData()
finally:
    ComServer.Logout()
    ComServer = None
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Delete Agent====
def DelData():
{| class="mw-collapsible mw-collapsed wikitable"
     #Deleting only work if the record never use in other document
! Delete Agent Script 
|-
|
<syntaxhighlight lang="Python">
#Updated 17 Oct 2019
import win32com.client
 
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
 
def CheckLogin():
     B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                    "C:\eStream\SQLAccounting\Share\Default.DCF", #DCF file
                    "ACC-0016.FDB") #Database Name
 
def PostData():
     BizObject = ComServer.BizObjects.Find("Agent")
     BizObject = ComServer.BizObjects.Find("Agent")
      
      
Line 404: Line 425:
         BizObject.Open()
         BizObject.Open()
         BizObject.Delete()         
         BizObject.Delete()         
         print ("Done")
         print ("Deleting Done")


try:  
try:
     CheckLogin()
     Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
     PostData()
     PostData()
   
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
      print ("Invalid Input")
    ComServer.Logout()
finally:
finally:
    ComServer.Logout()
     ComServer = None
     ComServer = None
    Common.KillApp()
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 417: Line 452:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Complete Post====
====Get Company Profile====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! SL_CS, AR_PM, SL_CN & AR_CN Script
! Get Company Profile
|-
|-
|  
|  
<syntaxhighlight lang="Python">
<syntaxhighlight lang="Python">
#Updated 17 Oct 2019
#Updated 22 Jul 2023
import Common
 
def GetData():
    lSQL = "SELECT COMPANYNAME, REMARK, BRN, BRN2, GSTNO, "
    lSQL = lSQL + "SALESTAXNO, SERVICETAXNO, "
    lSQL = lSQL + "ADDRESS1,ADDRESS2,ADDRESS3,ADDRESS4 FROM SY_PROFILE "
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
   
    Common.ShowResult(lDataSet)
   
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer     
    GetData()
    ComServer.Logout()
finally:
    ComServer = None
    Common.KillApp()
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====Complete Post====
{| class="mw-collapsible mw-collapsed wikitable"
! SL_CS, AR_PM, SL_CN & AR_CN Script
|-
|
<syntaxhighlight lang="Python">
#Updated 19 Jul 2023
#This will doing following posting
#This will doing following posting
#01. Cash Sales
#01. Cash Sales
Line 430: Line 497:
#04. Edit Credit Note Posted in Step 02 & Knock Off
#04. Edit Credit Note Posted in Step 02 & Knock Off
#05. Customer Refund to Knock off Credit Note
#05. Customer Refund to Knock off Credit Note
import win32com.client
import Common
import datetime
import datetime
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0016.FDB") #Database Name


def PostDataCS():     
def PostDataCS():     
Line 448: Line 505:
     lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
     lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
      
      
     lDate = datetime.datetime(2018, 2, 22, 13, 0)
     lDate = datetime.datetime(2023, 2, 22, 13, 0)
     lDate.strftime('%m/%d/%Y')
     lDate.strftime('%m/%d/%Y')
      
      
     BizObject.New();
     BizObject.New();
    lMain.FindField("DocKey").value = -1
     lMain.FindField("DocNo").AsString = "--IV Test--"
     lMain.FindField("DocNo").AsString = "--IV Test--"
     lMain.FindField("DocDate").value = lDate
     lMain.FindField("DocDate").value = lDate
Line 468: Line 524:
     #For Tax Inclusive = True with override Tax Amount
     #For Tax Inclusive = True with override Tax Amount
     lDetail.Append()
     lDetail.Append()
    lDetail.FindField("DtlKey").value = -1
    lDetail.FindField("DocKey").value = -1
     lDetail.FindField("Seq").value = 1
     lDetail.FindField("Seq").value = 1
     lDetail.FindField("Account").AsString = "500-000" #Sales Account
     lDetail.FindField("Account").AsString = "500-000" #Sales Account
Line 475: Line 529:
     lDetail.FindField("Description3").AsString = ("Item A Line 1" + ("\r" + "Item A Line 2"))
     lDetail.FindField("Description3").AsString = ("Item A Line 1" + ("\r" + "Item A Line 2"))
     lDetail.FindField("Qty").AsFloat = 1
     lDetail.FindField("Qty").AsFloat = 1
     lDetail.FindField("Tax").AsString = "SR"
     lDetail.FindField("Tax").AsString = "SV"
     lDetail.FindField("TaxRate").AsString = "6%"
     lDetail.FindField("TaxRate").AsString = "6%"
     lDetail.FindField("TaxInclusive").value = 0
     lDetail.FindField("TaxInclusive").value = 0
Line 490: Line 544:
     #For Tax Inclusive = False with override Tax Amount
     #For Tax Inclusive = False with override Tax Amount
     lDetail.Append()
     lDetail.Append()
    lDetail.FindField("DtlKey").value = -1
    lDetail.FindField("DocKey").value = -1
     lDetail.FindField("Seq").value = 2
     lDetail.FindField("Seq").value = 2
     lDetail.FindField("Account").AsString = "500-000"
     lDetail.FindField("Account").AsString = "500-000"
     lDetail.FindField("Description").AsString = "Sales Item B"
     lDetail.FindField("Description").AsString = "Sales Item B"
     lDetail.FindField("Qty").AsFloat = 1
     lDetail.FindField("Qty").AsFloat = 1
     lDetail.FindField("Tax").AsString = "SR"
     lDetail.FindField("Tax").AsString = "SV"
     lDetail.FindField("TaxRate").AsString = "6%"
     lDetail.FindField("TaxRate").AsString = "6%"
     lDetail.FindField("TaxInclusive").value = 0
     lDetail.FindField("TaxInclusive").value = 0
Line 506: Line 558:
     #For With Item Code
     #For With Item Code
     lDetail.Append()
     lDetail.Append()
    lDetail.FindField("DtlKey").value = -1
    lDetail.FindField("DocKey").value = -1
     lDetail.FindField("Seq").value = 3
     lDetail.FindField("Seq").value = 3
     lDetail.FindField("ItemCode").AsString = "ANT"
     lDetail.FindField("ItemCode").AsString = "ANT"
Line 515: Line 565:
     lDetail.FindField("UOM").AsString = "UNIT"
     lDetail.FindField("UOM").AsString = "UNIT"
     #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
     #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
     lDetail.FindField("Tax").AsString = "SR"
     lDetail.FindField("Tax").AsString = "SV"
     lDetail.FindField("TaxRate").AsString = "6%"
     lDetail.FindField("TaxRate").AsString = "6%"
     lDetail.FindField("TaxInclusive").value = 0
     lDetail.FindField("TaxInclusive").value = 0
Line 531: Line 581:
     lDetail = BizObject.DataSets.Find("cdsKnockOff") #lDetail contains detail data
     lDetail = BizObject.DataSets.Find("cdsKnockOff") #lDetail contains detail data
      
      
     lDate = datetime.datetime(2018, 2, 22, 13, 0)
     lDate = datetime.datetime(2023, 2, 22, 13, 0)
     lDate.strftime('%m/%d/%Y')
     lDate.strftime('%m/%d/%Y')
      
      
     BizObject.New()
     BizObject.New()
    lMain.FindField("DOCKEY").Value = -1
     lMain.FindField("DocNo").AsString = "--PM Test--"
     lMain.FindField("DocNo").AsString = "--PM Test--"
     lMain.FindField("CODE").AsString = "300-C0001" #Customer Account
     lMain.FindField("CODE").AsString = "300-C0001" #Customer Account
Line 564: Line 613:
     lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
     lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
      
      
     lDate = datetime.datetime(2018, 2, 22, 13, 0)
     lDate = datetime.datetime(2023, 2, 22, 13, 0)
     lDate.strftime('%m/%d/%Y')
     lDate.strftime('%m/%d/%Y')
      
      
     BizObject.New()
     BizObject.New()
    lMain.FindField("DocKey").value = -1
     lMain.FindField("DocNo").AsString = "--CN Test--"
     lMain.FindField("DocNo").AsString = "--CN Test--"
     lMain.FindField("DocDate").value = lDate
     lMain.FindField("DocDate").value = lDate
Line 583: Line 631:
     #For With Item Code
     #For With Item Code
     lDetail.Append()
     lDetail.Append()
    lDetail.FindField("DtlKey").value = -1
    lDetail.FindField("DocKey").value = -1
     lDetail.FindField("ItemCode").AsString = "ANT"
     lDetail.FindField("ItemCode").AsString = "ANT"
     lDetail.FindField("Description").AsString = "Sales Item B"
     lDetail.FindField("Description").AsString = "Sales Item B"
Line 591: Line 637:
     lDetail.FindField("Remark2").AsString = "01 Jan 2017"  #Invoice Date
     lDetail.FindField("Remark2").AsString = "01 Jan 2017"  #Invoice Date
     lDetail.FindField("Qty").AsFloat = 1
     lDetail.FindField("Qty").AsFloat = 1
     lDetail.FindField("Tax").AsString = "SR"
     lDetail.FindField("Tax").AsString = "SV"
     lDetail.FindField("TaxRate").AsString = "6%"
     lDetail.FindField("TaxRate").AsString = "6%"
     lDetail.FindField("TaxInclusive").value = 0
     lDetail.FindField("TaxInclusive").value = 0
Line 635: Line 681:
     lDetail = BizObject.DataSets.Find("cdsKnockOff") #lDetail contains detail data
     lDetail = BizObject.DataSets.Find("cdsKnockOff") #lDetail contains detail data
      
      
     lDate = datetime.datetime(2018, 2, 22, 13, 0)
     lDate = datetime.datetime(2023, 2, 22, 13, 0)
     lDate.strftime('%m/%d/%Y')
     lDate.strftime('%m/%d/%Y')
      
      
     BizObject.New()
     BizObject.New()
    lMain.FindField("DOCKEY").Value = -1
     lMain.FindField("DocNo").AsString = "--CF Test--"
     lMain.FindField("DocNo").AsString = "--CF Test--"
     lMain.FindField("CODE").AsString = "300-C0001" #Customer Account
     lMain.FindField("CODE").AsString = "300-C0001" #Customer Account
Line 664: Line 709:


try:
try:
     CheckLogin()
     Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
     print ("Posting Cash Sales")
     print ("Posting Cash Sales")
     PostDataCS()
     PostDataCS()
Line 676: Line 723:
     PostDataCF()
     PostDataCF()
     print ("Done")
     print ("Done")
    ComServer.Logout()
finally:
finally:
    ComServer.Logout()
     ComServer = None
     ComServer = None
    Common.KillApp()
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 684: Line 732:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Get Picture & Description3(Rich Text)====
====Get Picture & Description3(Rich Text)====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Get Picture & Description3(Rich Text) Script  
! Get Picture & Description3(Rich Text) Script  
Line 690: Line 738:
|  
|  
<syntaxhighlight lang="Python">
<syntaxhighlight lang="Python">
#Updated 17 Oct 2019
#Updated 02 Aug 2023
import win32com.client
import os, sys
import Common
from io import BytesIO
from io import BytesIO
from PIL import Image
from PIL import Image
from striprtf.striprtf import rtf_to_text
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0081.FDB") #Database Name


def GetData():
def GetData():
Line 714: Line 752:
     dt = Image.open(imgdata)
     dt = Image.open(imgdata)
     dt.save("test.jpg")
     dt.save("test.jpg")
     print ("Done Export out...")
     print ("Done Export Picture file...")
    #print (lDataSet.FindField('Picture').Value)
      
      
     rtf = lDataSet.FindField('Description3').AsString
     rtf = lDataSet.FindField('Description3').AsString
     txt = rtf_to_text(rtf)
    print (rtf)
   
    with open('out.rtf', 'w') as output:
        output.write(rtf)
        output.close()
    print ("Done Export RTF file...")
   
     txt = ComServer.Utility.RichTextToPlainText(rtf)
     print (txt)
     print (txt)
      
      
try:
try:
     CheckLogin()    
     Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer   
     GetData()
     GetData()
finally:
     ComServer.Logout()
     ComServer.Logout()
finally:   
     ComServer = None
     ComServer = None
 
    Common.KillApp()
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 732: Line 780:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Get Invoice Next Number====
====Get Invoice Next Number====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Get Invoice Next Number Script  
! Get Invoice Next Number Script  
Line 738: Line 786:
|  
|  
<syntaxhighlight lang="Python">
<syntaxhighlight lang="Python">
#Updated 17 Oct 2019
#Updated 19 Jul 2023
import win32com.client
import Common


ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
def GetData():
 
     lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A "
def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0081.FDB") #Database Name
 
def GetData():
     lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A "
     lSQL = lSQL + "INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY) "
     lSQL = lSQL + "INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY) "
     lSQL = lSQL + "WHERE A.DOCTYPE='IV' "
     lSQL = lSQL + "WHERE A.DOCTYPE='IV' "
Line 765: Line 803:
      
      
try:
try:
     CheckLogin()    
     Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer     
     GetData()
     GetData()
    ComServer.Logout()
finally:
finally:
    ComServer.Logout()
     ComServer = None
     ComServer = None
    Common.KillApp()
</syntaxhighlight>
</syntaxhighlight>
|}
|}


<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>
====Example-Add & Edit Stock Item====
 
====Stock Item====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Add & Edit Stock Item Script  
! Stock Item Script  
|-
|-
|  
|  
<syntaxhighlight lang="Python">
<syntaxhighlight lang="Python">
#Updated 19 Oct 2019
#Updated 21 Dec 2023
import win32com.client
import Common
 
     
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
def GetListData():
 
     lSQL = "SELECT A.*, B.UOM, B.RATE, B.REFCOST, B.REFPRICE, B.ISBASE FROM ST_ITEM A "
def CheckLogin():
     lSQL = lSQL + "INNER JOIN ST_ITEM_UOM B ON (A.CODE=B.CODE) "
     B = ComServer.IsLogin
     lSQL = lSQL + "WHERE A.ISACTIVE='T' "
     if B == True:
    lSQL = lSQL + "ORDER BY A.CODE, B.RATE"  
        ComServer.Logout()
   
     ComServer.Login("ADMIN", "ADMIN", #UserName, Password
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
       
                    "ACC-0104.FDB") #Database Name
    Common.ShowResult(lDataSet)


def PostData():
def PostData():
Line 797: Line 839:
     lMain = BizObject.DataSets.Find("MainDataSet")
     lMain = BizObject.DataSets.Find("MainDataSet")
     lDtl = BizObject.DataSets.Find("cdsUOM")
     lDtl = BizObject.DataSets.Find("cdsUOM")
    LBar = BizObject.DataSets.Find("cdsBarcode")
      
      
     lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
     lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
Line 821: Line 864:
         lDtl.FindField("RefPrice").AsFloat = 240
         lDtl.FindField("RefPrice").AsFloat = 240
         lDtl.Post()
         lDtl.Post()
       
        LBar.Append() #For 1St UOM Barcode
        LBar.FindField("Barcode").AsString = "123456"
        LBar.FindField("UOM").AsString = "PCS"
        LBar.Post()
        LBar.Append() #For 2nd UOM Barcode
        LBar.FindField("Barcode").AsString = "7890123"
        LBar.FindField("UOM").AsString = "CTN"
        LBar.Post()
     else:
     else:
         BizObject.Params.Find("Dockey").Value = lDocKey
         BizObject.Params.Find("Dockey").Value = lDocKey
Line 837: Line 890:
         lDtl.FindField("RefCost").AsFloat = 22.3
         lDtl.FindField("RefCost").AsFloat = 22.3
         lDtl.FindField("RefPrice").AsFloat = 52
         lDtl.FindField("RefPrice").AsFloat = 52
        lDtl.FindField("ISBASE").AsFloat = 1
         lDtl.Post();
         lDtl.Post();


Line 844: Line 898:
         lDtl.FindField("RefCost").AsFloat = 102.5
         lDtl.FindField("RefCost").AsFloat = 102.5
         lDtl.FindField("RefPrice").AsFloat = 260.45
         lDtl.FindField("RefPrice").AsFloat = 260.45
        lDtl.FindField("ISBASE").AsFloat = 0
         lDtl.Post()
         lDtl.Post()
      
      
        while LBar.RecordCount > 0:
            LBar.First()
            LBar.Delete()   
        LBar.Append() #For 1St UOM Barcode
        LBar.FindField("Barcode").AsString = "888888"
        LBar.FindField("UOM").AsString = "PCS"
        LBar.Post()
        LBar.Append() #For 2nd UOM Barcode
        LBar.FindField("Barcode").AsString = "999999"
        LBar.FindField("UOM").AsString = "CTN"
        LBar.Post()
     try:
     try:
         BizObject.Save()           
         BizObject.Save()           
Line 851: Line 919:
         print("Oops!", e)     
         print("Oops!", e)     
     BizObject.Close()
     BizObject.Close()
     print ("Done")
     print ("Posting/Update Done")
 
def DelData():
    #Deleting only work if the record never use in other document
    BizObject = ComServer.BizObjects.Find("ST_ITEM")
      
      
    lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
       
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()       
        print ("Deleting Done")
try:
try:
     CheckLogin()
     Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
     PostData()
     PostData()
   
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
      print ("Invalid Input")
    ComServer.Logout()
finally:
finally:
    ComServer.Logout()
     ComServer = None
     ComServer = None
 
    Common.KillApp()
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 865: Line 958:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Delete Stock Item====
====AR_Customer====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Delete Stock Item Script  
! AR_Customer Script  
|-
|-
|  
|  
<syntaxhighlight lang="Python">
<syntaxhighlight lang="Python">
#Updated 19 Oct 2019
#Updated 22 Jul 2023
import win32com.client
import Common
     
def GetListData():
    lSQL = "SELECT A.*, B.BRANCHTYPE, B.BRANCHNAME, B.ADDRESS1, B.ADDRESS2, B.ADDRESS3, B.ADDRESS4, "
    lSQL = lSQL + "B.GEOLAT, B.GEOLONG, B.ATTENTION, B.PHONE1, B.PHONE2, B.MOBILE, B.FAX1, B.FAX2, B.EMAIL "
    lSQL = lSQL + "FROM AR_CUSTOMER A "
    lSQL = lSQL + "INNER JOIN AR_CUSTOMERBRANCH B ON (A.CODE=B.CODE) "
    lSQL = lSQL + "WHERE A.STATUS='A' "
    lSQL = lSQL + "ORDER BY A.CODE, B.BRANCHTYPE "
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
       
    Common.ShowResult(lDataSet)


ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
def PostData():
 
     BizObject = ComServer.BizObjects.Find("AR_CUSTOMER")
def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0104.FDB") #Database Name
 
def PostData():
    BizObject = ComServer.BizObjects.Find("ST_ITEM")   
    lDocKey = BizObject.FindKeyByRef("CODE", "ANT")
       
    if lDocKey is None:
        print ("SKU Not Found...")
    else:
        try:
            BizObject.Params.Find("Dockey").Value = lDocKey           
            BizObject.Open()
            BizObject.Delete()
        except Exception as e:
            print("Oops!", e)
    BizObject.Close()   
    print ("Done")
   
try:
    CheckLogin()
    PostData()
finally:
    ComServer.Logout()
    ComServer = None
 
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====Example-Add & Update AR_Customer====
{| class="mw-collapsible mw-collapsed wikitable"
! Add & Update AR_Customer Script
|-
|
<syntaxhighlight lang="Python">
#Updated 17 Apr 2020
import win32com.client
 
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
 
def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0072.FDB") #Database Name
 
def PostData():
     BizObject = ComServer.BizObjects.Find("AR_CUSTOMER")
     lMain = BizObject.DataSets.Find("MainDataSet")
     lMain = BizObject.DataSets.Find("MainDataSet")
     lDtl = BizObject.DataSets.Find("cdsBranch")
     lDtl = BizObject.DataSets.Find("cdsBranch")
Line 977: Line 1,025:


         #Insert back with new Information
         #Insert back with new Information
         lDtl.Edit() #For 1St Branch
         lDtl.Append() #For 1St Branch
        lDtl.FindField("BranchType").AsString  = "B"
         lDtl.FindField("BranchName").AsString  = "BILLING" #Make sure this always same as b4 delete data
         lDtl.FindField("BranchName").AsString  = "BILLING" #Make sure this always same as b4 delete data
         lDtl.FindField("Address1").AsString    = "New Address1"
         lDtl.FindField("Address1").AsString    = "New Address1"
Line 990: Line 1,039:


         lDtl.Append() #For 2nd Branch
         lDtl.Append() #For 2nd Branch
        lDtl.FindField("BranchType").AsString  = "D"
         lDtl.FindField("BranchName").AsString  = "Branch1" #Make sure this always same as b4 delete data
         lDtl.FindField("BranchName").AsString  = "Branch1" #Make sure this always same as b4 delete data
         lDtl.FindField("Address1").AsString    = "New DAddress1"
         lDtl.FindField("Address1").AsString    = "New DAddress1"
Line 1,006: Line 1,056:
         print("Oops!", e)     
         print("Oops!", e)     
     BizObject.Close()
     BizObject.Close()
     print ("Done")
     print ("Posting/Update Done")
 
def DelData():
    #Deleting only work if the record never use in other document
    BizObject = ComServer.BizObjects.Find("AR_CUSTOMER")
      
      
    lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
       
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("CODE").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()       
        print ("Deleting Done")
try:
try:
     CheckLogin()
     Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
     PostData()
     PostData()
   
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
      print ("Invalid Input")
    ComServer.Logout() 
finally:
finally:
    ComServer.Logout()
     ComServer = None
     ComServer = None
 
    Common.KillApp()
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 1,020: Line 1,095:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


===PHP===
====Sales Invoice====
: Add this in ..\xampp\php\php.ini
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
 
====Example-Get Agent====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Get Agent Script 
! SL_IV
|-
|-
|  
|  
<syntaxhighlight lang="PHP">
<syntaxhighlight lang="Python">
<!DOCTYPE html>
#Updated 08 Jan 2024
<html>
import Common
<body>
import datetime
     
def GetListData():
    lSQL = "SELECT A.DOCNO, A.DOCDATE, A.CODE, A.COMPANYNAME, A.DESCRIPTION, A.DOCAMT, "
    lSQL = lSQL + "A.AGENT, A.AREA, "
    lSQL = lSQL + "B.ITEMCODE, B.DESCRIPTION ITEMDESC, B.QTY, B.UOM, B.UNITPRICE, B.DISC,  "
    lSQL = lSQL + "B.TAX, B.TAXRATE, B.TAXAMT, B.TAXINCLUSIVE, B.AMOUNT "
    lSQL = lSQL + "FROM SL_IV A "
    lSQL = lSQL + "INNER JOIN SL_IVDTL B ON (A.DOCKEY=B.DOCKEY) "
    lSQL = lSQL + "WHERE A.CODE='300-A0002' "
    lSQL = lSQL + "AND A.CANCELLED='F' "
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
       
    Common.ShowResult(lDataSet)


<h1>SQL Acc SDK in PHP page</h1>
def PostData():
 
    BizObject = ComServer.BizObjects.Find("SL_IV")
<?php
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
echo "Updated 01 May 2020<br>";
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
   
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
   
    lDocKey = BizObject.FindKeyByRef("DocNo", "--IV Test--")
       
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("DocNo").AsString = "--IV Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Code").AsString = "300-C0001" #Customer Account
        lMain.FindField("CompanyName").AsString = "Cash Sales"
        lMain.FindField("Address1").AsString = "" #Optional
        lMain.FindField("Address2").AsString = "" #Optional
        lMain.FindField("Address3").AsString = "" #Optional
        lMain.FindField("Address4").AsString = "" #Optional
        lMain.FindField("Phone1").AsString = ""  #Optional
        lMain.FindField("Description").AsString = "Sales"


$ComServer = null;
        #Insert Data - Detail
        #For Tax Inclusive = True with override Tax Amount
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("Account").AsString = "500-000" #Sales Account
        lDetail.FindField("Description").AsString = "Sales Item A"
        lDetail.FindField("Description3").AsString = ("Item A Line 1" + ("\r" + "Item A Line 2"))
        lDetail.FindField("Qty").AsFloat = 1
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 435
        lDetail.FindField("Amount").AsFloat = 410.37 #Exclding GST Amt
        lDetail.FindField("TaxAmt").AsFloat = 24.63


function CheckLogin()
        lDetail.DisableControls()
{
        lDetail.FindField("TaxInclusive").value = 1
    global $ComServer;
        lDetail.EnableControls()
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
      
     $status = $ComServer->IsLogin();
        lDetail.Post()


    if ($status == true)
        #For Tax Inclusive = False with override Tax Amount
     {
        lDetail.Append()
         $ComServer->Logout();
        lDetail.FindField("Seq").value = 2
    }
        lDetail.FindField("Account").AsString = "500-000"
     $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
        lDetail.FindField("Description").AsString = "Sales Item B"
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
        lDetail.FindField("Qty").AsFloat = 1
                      "ACC-0082.FDB"); #Database Name
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 94.43
        lDetail.FindField("Amount").AsFloat = 94.43
        lDetail.FindField("TaxAmt").AsFloat = 5.66
        lDetail.Post()
      
         #For With Item Code
        lDetail.Append()
        lDetail.FindField("Seq").value = 3
        lDetail.FindField("ItemCode").AsString = "ANT"
        lDetail.FindField("Description").AsString = "Sales Item B"
        #lDetail.FindField("Account").AsString     = "500-000" #If you wanted override the Sales Account Code
        lDetail.FindField("Qty").AsFloat = 2
        lDetail.FindField("UOM").AsString = "UNIT"
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 100
        lDetail.FindField("Amount").AsFloat = 200
        lDetail.FindField("TaxAmt").AsFloat = 12
        lDetail.Post()
      
      
}
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Description 123 的第一 🐱"


function GetData()
        #Delete all Detail
{
        while lDetail.RecordCount != 0:
     global $ComServer;
            lDetail.Last()
            lDetail.Delete()
           
        #Append Detail
        lDetail.Append()
        #lDetail.FindField("Account").value = "500-000"
        lDetail.FindField("Description").AsString = "Item A  的第一"
        lDetail.FindField("Description3").AsString = ComServer.Utility.PlainTextToRichText("More description  的第一 🐱")
        lDetail.FindField("Tax").value = ""
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("Amount").value = 410.37
        lDetail.FindField("TaxAmt").value = 0
        lDetail.Post()
       
     try:
        BizObject.Save()         
    except Exception as e:
        print("Oops!", e)   
    BizObject.Close()
    print ("Posting/Update Done")
 
def DelData():
    #Deleting only work if the record never not knock off by Payment or Credit Note
    BizObject = ComServer.BizObjects.Find("SL_IV")
   
    lDocKey = BizObject.FindKeyByRef("DocNo", "--IV Test--")
       
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()       
        print ("Deleting Done")


     $lSQL = "SELECT * FROM AGENT
try:
        WHERE CODE='HALIM'";
    Common.CheckLogin()
    global ComServer
     ComServer = Common.ComServer
    GetListData()
    PostData()
   
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
      print ("Invalid Input")
     
    ComServer.Logout() 
finally:
    ComServer = None
    Common.KillApp()
</syntaxhighlight>
|}


    $lDataSet = $ComServer->DBManager->NewDataSet($lSQL);
<div style="float: right;">   [[#top|[top]]]</div>


    if ($lDataSet->RecordCount > 0)
====Purchase Invoice====
     {
{| class="mw-collapsible mw-collapsed wikitable"
        echo "Result : ";
! PH_PI
        echo $lDataSet->FindField('Description')->AsString() . "<br>";
|-
     }
|
     else
<syntaxhighlight lang="Python">
     {
#Updated 08 Jan 2024
        echo "Record Not Found";
import Common
     }
import datetime
}
     
def GetListData():
     lSQL = "SELECT A.DOCNO, A.DOCDATE, A.CODE, A.COMPANYNAME, A.DESCRIPTION, A.DOCAMT, "
    lSQL = lSQL + "A.AGENT, A.AREA, "
    lSQL = lSQL + "B.ITEMCODE, B.DESCRIPTION ITEMDESC, B.QTY, B.UOM, B.UNITPRICE, B.DISC,  "
    lSQL = lSQL + "B.TAX, B.TAXRATE, B.TAXAMT, B.TAXINCLUSIVE, B.AMOUNT "
     lSQL = lSQL + "FROM PH_PI A "
     lSQL = lSQL + "INNER JOIN PH_PIDTL B ON (A.DOCKEY=B.DOCKEY) "
     lSQL = lSQL + "WHERE A.CODE='400-L0001' "
    lSQL = lSQL + "AND A.CANCELLED='F' "
      
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
       
    Common.ShowResult(lDataSet)


if (isset($_POST['BtnData']))
def PostData():
{
    BizObject = ComServer.BizObjects.Find("PH_PI")
     try
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
     {
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
         CheckLogin();
   
         GetData();
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
         echo date("d M Y h:i:s A") . " - Done";
    lDate.strftime('%m/%d/%Y')
     }
   
     finally
    V = ["--PI Test--", "400-W0001"] #DocNo, Code
     {
   
        $ComServer->Logout();
    lDocKey = BizObject.FindKeyByRef("DocNo;Code", V)
        #free the object
       
        $ComServer = null;
    if lDocKey is None:
     }
        BizObject.New()
}
        lMain.FindField("DocNo").AsString = "--PI Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Code").AsString = "400-W0001" #Supplier Account
        lMain.FindField("CompanyName").AsString = "WORLDLINE COMMUNICATION SDN BHD"
        #lMain.FindField("Address1").AsString = "" #Optional
        #lMain.FindField("Address2").AsString = "" #Optional
        #lMain.FindField("Address3").AsString = "" #Optional
        #lMain.FindField("Address4").AsString = "" #Optional
        #lMain.FindField("Phone1").AsString = ""  #Optional
        lMain.FindField("Description").AsString = "Purchase Invoice"
 
        #Insert Data - Detail   
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("ItemCode").AsString = "ANT"
        lDetail.FindField("Description").AsString = "Item B"
        #lDetail.FindField("Account").AsString     = "600-000" #If you wanted override the Purchase Account Code
        lDetail.FindField("Qty").AsFloat = 2
        lDetail.FindField("UOM").AsString = "UNIT"
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = ""
        lDetail.FindField("TaxRate").AsString = ""
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 80
        lDetail.FindField("Amount").AsFloat = 160
        lDetail.FindField("TaxAmt").AsFloat = 0
        lDetail.Post()
       
        lDetail.Append()
        lDetail.FindField("Seq").value = 2
        lDetail.FindField("ItemCode").AsString = "HFK"
        lDetail.FindField("Description").AsString = "HANDS FREE KITS"
        #lDetail.FindField("Account").AsString     = "600-000" #If you wanted override the Purchase Account Code
        lDetail.FindField("Qty").AsFloat = 3
        lDetail.FindField("UOM").AsString = "UNIT"
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = ""
        lDetail.FindField("TaxRate").AsString = ""
        lDetail.FindField("TaxInclusive").value = 0
         lDetail.FindField("UnitPrice").AsFloat = 50
         lDetail.FindField("Amount").AsFloat = 150
         lDetail.FindField("TaxAmt").AsFloat = 0
        lDetail.Post()       
   
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Description 123 的第一 🐱"
 
        #Delete all Detail
        while lDetail.RecordCount != 0:
            lDetail.Last()
            lDetail.Delete()
           
        #Append Detail
        lDetail.Append()
        #lDetail.FindField("Account").value = "600-000"
        lDetail.FindField("Description").AsString = "Item A 的第一"
        lDetail.FindField("Description3").AsString = ComServer.Utility.PlainTextToRichText("More description  的第一 🐱")
        lDetail.FindField("Tax").value = ""
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("Amount").value = 410.37
        lDetail.FindField("TaxAmt").value = 0
        lDetail.Post()
       
    try:
        BizObject.Save()         
     except Exception as e:
        print("Oops!", e)   
     BizObject.Close()
     print ("Posting/Update Done")
 
def DelData():
    #Deleting only work if the record never not knock off by Payment or Credit Note
    BizObject = ComServer.BizObjects.Find("PH_PI")
   
    V = ["--PI Test--", "400-W0001"]  #DocNo, Code
   
    lDocKey = BizObject.FindKeyByRef("DocNo;Code", V)   
       
    if lDocKey is None:
        print ("Record Not Found")
     else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()       
        print ("Deleting Done")


?>
try:
     <form method="post">         
    Common.CheckLogin()
         <input type="submit" name="BtnData"
    global ComServer
                value="Get Agent"/>
    ComServer = Common.ComServer
     </form>
    GetListData()
</body>
    PostData()
</html>
   
    answer = input("Continue To delete?")
     if answer.lower() in ["y","yes"]:
         DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
      print ("Invalid Input")
     
     ComServer.Logout() 
finally:
    ComServer = None
    Common.KillApp()
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 1,106: Line 1,416:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Add & Edit Agent====
====GL Ledger====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Add & Edit Agent Script
! GL Ledger Script  
|-
|-
|  
|  
<syntaxhighlight lang="PHP">
<syntaxhighlight lang="Python">
<!DOCTYPE html>
#Updated 24 Jul 2023
<html>
import Common
<body>


<h1>SQL Acc SDK in PHP page</h1>
def GetData():
    lSQL = "SELECT A.CODE, B.DESCRIPTION ACCDESC, A.DOCDATE, A.POSTDATE, A.DESCRIPTION, A.DESCRIPTION2,  "
    lSQL = lSQL + "A.LOCALDR, A.LOCALCR, A.REF1, A.REF2 FROM GL_TRANS A "
    lSQL = lSQL + "INNER JOIN GL_ACC B ON (A.CODE=B.CODE) "
    lSQL = lSQL + "WHERE A.CANCELLED='F' "
    lSQL = lSQL + "AND A.POSTDATE BETWEEN '01 JAN 2023'  "
    lSQL = lSQL + "AND '31 DEC 2023' "
    lSQL = lSQL + "AND A.CODE='310-000' "
    lSQL = lSQL + "ORDER BY A.CODE, A.POSTDATE "
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
   
    Common.ShowResult(lDataSet)
   
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer     
    GetData()
    ComServer.Logout()
finally:   
    ComServer = None
    Common.KillApp()
</syntaxhighlight>
|}
<div style="float: right;">   [[#top|[top]]]</div>


<?php
====GL Trial Balance====
echo "Updated 01 May 2020<br>";
{| class="mw-collapsible mw-collapsed wikitable"
! GL Trial Balance Script
|-
|
<syntaxhighlight lang="Python">
#Updated 25 Jul 2023
import Common
import datetime


$ComServer = null;
def GetData():
    RptObject = ComServer.RptObjects.Find('GL.TrialBalance.RO')
   
    RptObject.Params.Find("AllProject").Value      = True
    RptObject.Params.Find("AllAgent").Value        = True
    RptObject.Params.Find("AllArea").Value        = True
    RptObject.Params.Find("LedgerType").Value      = "G" #G = Legder, S = Debtor, P = Supplier
    #RptObject.Params.Find("ProjectData").Value    = #Not use if AllArea is true
    RptObject.Params.Find("ShowZeroBalance").Value = False
    RptObject.Params.Find("SortBy").Value          = "PostDate;DocNo"
    RptObject.Params.Find("UseDescription2").Value = False
   
    lDateFrom = datetime.datetime(2018, 1, 1, 13, 0)
    lDateFrom.strftime('%m/%d/%Y')
    lDateTo = datetime.datetime(2018, 12, 31, 13, 0)
    lDateTo.strftime('%m/%d/%Y')
   
    RptObject.Params.Find("DateFrom").Value      = lDateFrom
    RptObject.Params.Find("DateTo").Value        = lDateTo


function CheckLogin()
    #RptObject.Params.Find("AgentData").Value      = 'Not use if AllAgent is true
{
    #RptObject.Params.Find("AreaData").Value      = 'Not use if AllArea is true
    global $ComServer;
 
     $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
     RptObject.Params.Find("SortBy").Value          = "Code;Description"
     $status = $ComServer->IsLogin();
     RptObject.CalculateReport()


     if ($status == true)
     lDataSet = RptObject.DataSets.Find("cdsMain")
    {
     lDataSet2 = RptObject.DataSets.Find("cdsGLAccount") #For Account List
        $ComServer->Logout();
     }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
      
      
}
    if lDataSet2.RecordCount > 0:
 
        while not lDataSet2.eof:
function PostData(){
            print(lDataSet2.FindField('CODE').AsString)
global $ComServer;
            print(lDataSet2.FindField('DESCRIPTION').AsString)
            print("===")
     $BizObject = $ComServer->BizObjects->Find("Agent");
            lDataSet2.Next()
     $lMain = $BizObject->DataSets->Find("MainDataSet");
           
     if lDataSet.RecordCount > 0:
        while not lDataSet.eof:
            print("Month To Date")
            print(lDataSet.FindField('CODE').AsString)
            print(lDataSet.FindField('MTDDR').AsString)           
            print(lDataSet.FindField('MTDCR').AsString)
            print("Year To Date")
            print(lDataSet.FindField('CODE').AsString)
            print(lDataSet.FindField('YTDDR').AsString)
            print(lDataSet.FindField('YTDCR').AsString)
            print("===")
            lDataSet.Next()
     else:
        print ("Record Not Found")
      
      
    $lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY");
try:
    Common.CheckLogin()
if ($lDocKey == null){
     global ComServer
        $BizObject->New();
     ComServer = Common.ComServer     
        $lMain->FindField("CODE")->value = "FAIRY";
     GetData()
        $lMain->FindField("DESCRIPTION")->value = "FAIRY TAIL";
     ComServer.Logout()
} else{
finally:   
        $BizObject->Params->Find("CODE")->Value = $lDocKey;
    ComServer = None
        $BizObject->Open();
     Common.KillApp()
        $BizObject->Edit();
</syntaxhighlight>
        $lMain->FindField("DESCRIPTION")->value = "FAIRY TAIL WIZARD";
|}
}
try{
$BizObject->Save();
echo "Posting Done <br>";
}catch (Exception $e) {
     echo 'Caught exception: ',  $e->getMessage(), "\n";
}
}
 
if (isset($_POST['BtnData']))
{
     try
     {
        CheckLogin();
        PostData();
        echo date("d M Y h:i:s A") . " - Done";
    }
    finally
     {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
     }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Add/Edit Agent"/>
    </form>
</body>
</html>
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Delete Agent====
====Terms====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Delete Agent Script 
! Terms
|-
|-
|  
|  
<syntaxhighlight lang="PHP">
<syntaxhighlight lang="Python">
<!DOCTYPE html>
#Updated 25 Jul 2023
<html>
import Common
<body>
     
def GetListData():
    lSQL = "SELECT * FROM TERMS "
    lSQL = lSQL + "WHERE ISACTIVE='T' "
    lSQL = lSQL + "ORDER BY CODE "
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
       
    Common.ShowResult(lDataSet)


<h1>SQL Acc SDK in PHP page</h1>
def PostData():
    BizObject = ComServer.BizObjects.Find("Terms")
    lMain = BizObject.DataSets.Find("MainDataSet")
   
    lDocKey = BizObject.FindKeyByRef("CODE", "90 Days")
       
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("CODE").value = "90 Days"
        lMain.FindField("DESCRIPTION").value = "Net 90 Days"
        lMain.FindField("TermDay").value = 90
        lMain.FindField("ISACTIVE").value = "T"
    else:
        BizObject.Params.Find("CODE").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.FindField("DESCRIPTION").value = "Net 90 Days - Edited"
        lMain.FindField("ISACTIVE").value = "F"
       
    try:
        BizObject.Save()         
    except Exception as e:
        print("Oops!", e)   
    BizObject.Close()
    print ("Posting/Update Done")


<?php
def DelData():
echo "Updated 01 May 2020<br>";
    #Deleting only work if the record never use in other document
    BizObject = ComServer.BizObjects.Find("Terms")
   
    lDocKey = BizObject.FindKeyByRef("CODE", "90 Days")
       
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("CODE").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()       
        print ("Deleting Done")


$ComServer = null;
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
   
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
      print ("Invalid Input")
     
    ComServer.Logout() 
finally:
    ComServer = None
    Common.KillApp()
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>


function CheckLogin()
====Stock Adjustment====
{
{| class="mw-collapsible mw-collapsed wikitable"
    global $ComServer;
! ST_SJ
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
|-
     $status = $ComServer->IsLogin();
|
 
<syntaxhighlight lang="Python">
     if ($status == true)
#Updated 08 Jan 2024
     {
import Common
        $ComServer->Logout();
import datetime
     }
     
     $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
def GetListData():
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
    lSQL = "SELECT A.DOCNO, A.DOCDATE, A.DESCRIPTION, A.DOCAMT, "
                      "ACC-0082.FDB"); #Database Name
     lSQL = lSQL + "A.AUTHBY, A.REASON, A.REMARK, "
     lSQL = lSQL + "B.ITEMCODE, B.DESCRIPTION ITEMDESC, B.QTY, B.UOM, B.UNITCOST, "
     lSQL = lSQL + "B.AMOUNT, B.REMARK1, B.REMARK2 "
     lSQL = lSQL + "FROM ST_AJ A "
     lSQL = lSQL + "INNER JOIN ST_AJDTL B ON (A.DOCKEY=B.DOCKEY) "
    lSQL = lSQL + "WHERE A.DocDate='20 Apr 2013' "
    lSQL = lSQL + "AND A.CANCELLED='F' "
      
      
}
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
       
    Common.ShowResult(lDataSet)


function PostData(){
def PostData():
global $ComServer;
     BizObject = ComServer.BizObjects.Find("ST_AJ")
     lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
     $BizObject = $ComServer->BizObjects->Find("Agent");
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
     $lMain = $BizObject->DataSets->Find("MainDataSet");
      
      
     $lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY");
     lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
if ($lDocKey == null){
       
         echo "Record Not Found";
    lDocKey = BizObject.FindKeyByRef("DocNo", "--AJ Test--")
} else{
       
         $BizObject->Params->Find("CODE")->Value = $lDocKey;
    if lDocKey is None:
         $BizObject->Open();
        BizObject.New()
         $BizObject->Delete();
         lMain.FindField("DocNo").AsString = "--AJ Test--"
        echo "Delete Done<br>";
         lMain.FindField("DocDate").value = lDate
}
         lMain.FindField("PostDate").value = lDate
}
         lMain.FindField("Description").AsString = "Stock Adjustment"


if (isset($_POST['BtnData']))
        #Insert Data - Detail - Increase Stock Qty 
{
        lDetail.Append()
    try
        lDetail.FindField("Seq").value = 1
    {
        lDetail.FindField("ItemCode").AsString = "ANT"
         CheckLogin();
        lDetail.FindField("Description").AsString = "ANTENA"
         PostData();
        lDetail.FindField("Qty").AsFloat = 2
         echo date("d M Y h:i:s A") . " - Done";
        lDetail.FindField("UOM").AsString = "PCS"
    }
        lDetail.FindField("UnitCOST").AsFloat = 80
     finally
        lDetail.FindField("Amount").AsFloat = 160
     {
        lDetail.Post()
         $ComServer->Logout();
       
         #free the object
        #Insert Data - Detail - Reduce Stock Qty
         $ComServer = null;
        lDetail.Append()
    }
         lDetail.FindField("Seq").value = 2
}
         lDetail.FindField("ItemCode").AsString = "HFK"
         lDetail.FindField("Description").AsString = "HANDS FREE KITS"
        lDetail.FindField("Qty").AsFloat = -3
        lDetail.FindField("UOM").AsString = "UNIT"
        lDetail.Post()       
      
     else:
         BizObject.Params.Find("Dockey").Value = lDocKey
         BizObject.Open()
         BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Description 123 的第一 🐱"


?>
        #Delete all Detail
     <form method="post">         
        while lDetail.RecordCount != 0:
         <input type="submit" name="BtnData"
            lDetail.Last()
                value="Delete Agent"/>
            lDetail.Delete()
     </form>
           
</body>
        #Append Detail
</html>
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("ItemCode").AsString = "BOM"
        lDetail.FindField("Description").AsString = "Bill Of Material"       
        lDetail.FindField("Qty").AsFloat = -1
        lDetail.FindField("UOM").AsString = "UNIT"
        lDetail.Post()
       
    try:
        BizObject.Save()         
    except Exception as e:
        print("Oops!", e)   
    BizObject.Close()
    print ("Posting/Update Done")
 
def DelData():
     BizObject = ComServer.BizObjects.Find("ST_AJ")
          
    lDocKey = BizObject.FindKeyByRef("DocNo", "--AJ Test--")   
       
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()       
        print ("Deleting Done")
 
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
   
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
      print ("Invalid Input")
     
     ComServer.Logout() 
finally:
    ComServer = None
    Common.KillApp()
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Complete Post====
====Sales Order====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! SL_CS, AR_PM, SL_CN & AR_CN Script
! Sales Order
|-
|-
|  
|  
<syntaxhighlight lang="PHP">
<syntaxhighlight lang="Python">
<!DOCTYPE html>
#Updated 08 Jan 2024
<html>
import Common
<body>
import datetime
     
def GetListData():
    lSQL = "SELECT A.DOCNO, A.DOCDATE, A.CODE, A.COMPANYNAME, A.DESCRIPTION, A.DOCAMT, "
    lSQL = lSQL + "A.AGENT, A.AREA, "
    lSQL = lSQL + "B.ITEMCODE, B.DESCRIPTION ITEMDESC, B.QTY, B.UOM, B.UNITPRICE, B.DISC,  "
    lSQL = lSQL + "B.TAX, B.TAXRATE, B.TAXAMT, B.TAXINCLUSIVE, B.AMOUNT "
    lSQL = lSQL + "FROM SL_SO A "
    lSQL = lSQL + "INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY) "
    lSQL = lSQL + "WHERE A.CODE='300-A0002' "
    lSQL = lSQL + "AND A.CANCELLED='F' "
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
       
    Common.ShowResult(lDataSet)


<h1>SQL Acc SDK in PHP page</h1>
def PostData():
    BizObject = ComServer.BizObjects.Find("SL_SO")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
   
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
   
    lDocKey = BizObject.FindKeyByRef("DocNo", "--SO Test--")
       
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("DocNo").AsString = "--SO Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Code").AsString = "300-C0001" #Customer Account
        lMain.FindField("CompanyName").AsString = "Cash Sales"
        #lMain.FindField("Address1").AsString = "" #Optional
        #lMain.FindField("Address2").AsString = "" #Optional
        #lMain.FindField("Address3").AsString = "" #Optional
        #lMain.FindField("Address4").AsString = "" #Optional
        #lMain.FindField("Phone1").AsString = ""  #Optional
        lMain.FindField("Description").AsString = "Sales Order"


<?php
        #Insert Data - Detail   
echo "Updated 01 May 2020<br>";
        lDetail.Append()
#This will doing following posting
        lDetail.FindField("Seq").value = 1
#01. Cash Sales
        lDetail.FindField("ItemCode").AsString = "ANT"
#02. Sales Credit Note
        lDetail.FindField("Description").AsString = "Sales Item B"
#03. Customer Payment With Knock off
        lDetail.FindField("Qty").AsFloat = 2
#04. Edit Credit Note Posted in Step 02 & Knock Off
        lDetail.FindField("UOM").AsString = "UNIT"
#05. Customer Refund to Knock off Credit Note
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 100
        lDetail.FindField("Amount").AsFloat = 200
        lDetail.FindField("TaxAmt").AsFloat = 12
        lDetail.Post()
   
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Description 123 的第一 🐱"


$ComServer = null;
        #Delete all Detail
 
        while lDetail.RecordCount != 0:
function CheckLogin()
            lDetail.Last()
{
            lDetail.Delete()
    global $ComServer;
           
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
        #Append Detail
     $status = $ComServer->IsLogin();
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("ItemCode").AsString = "BOM"
        lDetail.FindField("Description").AsString = "Sales Item BOM"
        lDetail.FindField("Qty").AsFloat = 1
        lDetail.FindField("UOM").AsString = "UNIT"
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 100
        lDetail.FindField("Amount").AsFloat = 100
        lDetail.FindField("TaxAmt").AsFloat = 6
        lDetail.Post()
       
    try:
        BizObject.Save()         
    except Exception as e:
        print("Oops!", e)   
    BizObject.Close()
    print ("Posting/Update Done")
 
def DelData():
     BizObject = ComServer.BizObjects.Find("SL_SO")
   
    lDocKey = BizObject.FindKeyByRef("DocNo", "--SO Test--")
       
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()       
        print ("Deleting Done")


     if ($status == true)
try:
     {
     Common.CheckLogin()
        $ComServer->Logout();
     global ComServer
     }
    ComServer = Common.ComServer
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
    GetListData()
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
     PostData()
                      "ACC-0082.FDB"); #Database Name
      
      
}
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
      print ("Invalid Input")
     
    ComServer.Logout() 
finally:
    ComServer = None
    Common.KillApp()
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>


function PostDataCS(){
====Sales.PriceHistory.RO====
global $ComServer;
{| class="mw-collapsible mw-collapsed wikitable"
! Sales.PriceHistory.RO Script
$BizObject = $ComServer->BizObjects->Find("SL_CS");
|-
     $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
|
     $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
<syntaxhighlight lang="Python">
#Updated 01 Apr 2021
     $BizObject->New();
import win32com.client
     $lMain->FindField("DocKey")->value = -1;
import datetime
     $lMain->FindField("DocNo")->AsString = "--CS Test--";
 
     $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
     $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
 
     $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
def CheckLogin():
     $lMain->FindField("CompanyName")->AsString = "Cash Sales";
    B = ComServer.IsLogin
     $lMain->FindField("Address1")->AsString = ""; #Optional
     if B == True:
     $lMain->FindField("Address2")->AsString = ""; #Optional
        ComServer.Logout()
     $lMain->FindField("Address3")->AsString = ""; #Optional
    ComServer.Login("ADMIN", "ADMIN", #UserName, Password
     $lMain->FindField("Address4")->AsString = ""; #Optional
                    "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
     $lMain->FindField("Phone1")->AsString = "";  #Optional
                    "ACC-0081.FDB") #Database Name
     $lMain->FindField("Description")->AsString = "Sales";
 
def GetData():
     #Insert Data - Detail
     RptObject = ComServer.RptObjects.Find('Sales.PriceHistory.RO')
     #For Tax Inclusive = True with override Tax Amount
   
     $lDetail->Append();
    #RptObject.Params.Find("AgentData").Value            = #Not use if AllAgent is true
     $lDetail->FindField("DtlKey")->value = -1;
     #RptObject.Params.Find("TaxData").Value              = #Not use if AllTax is true
     $lDetail->FindField("DocKey")->value = -1;
     #RptObject.Params.Find("CompanyCategoryData").Value  = #Not use if AllCompanyCategory is true
     $lDetail->FindField("Seq")->value = 1;
     RptObject.Params.Find("AllAgent").Value              = True
     $lDetail->FindField("Account")->AsString = "500-000"; #Sales Account
    RptObject.Params.Find("AllTax").Value                = True
     $lDetail->FindField("Description")->AsString = "Sales Item A";
     RptObject.Params.Find("AllShipper").Value            = True
    RptObject.Params.Find("AllArea").Value              = True
$txt = <<<EOT
     RptObject.Params.Find("AllCompany").Value            = True
          Item A Line 1
    RptObject.Params.Find("AllDocProject").Value        = True
          Item A Line 2
     RptObject.Params.Find("AllItem").Value              = False
          EOT;
    RptObject.Params.Find("AllItemProject").Value        = True
     RptObject.Params.Find("AllLocation").Value          = True
     $lDetail->FindField("Description3")->AsString = $txt;
    RptObject.Params.Find("AllCompanyCategory").Value    = True
     $lDetail->FindField("Qty")->AsFloat = 1;
     RptObject.Params.Find("AllBatch").Value              = True
     $lDetail->FindField("Tax")->AsString = "SV";
    RptObject.Params.Find("AllTariff").Value            = True
     $lDetail->FindField("TaxRate")->AsString = "6%";
     RptObject.Params.Find("AllStockGroup").Value        = True
     $lDetail->FindField("TaxInclusive")->value = 0;
    #RptObject.Params.Find("AreaData").Value            = #Not use if AllArea is true
     $lDetail->FindField("UnitPrice")->AsFloat = 435;
     #RptObject.Params.Find("CategoryData").Value        = #Not use if AllTax is true
     $lDetail->FindField("Amount")->AsFloat = 410.37; #Exclding GST Amt
     #RptObject.Params.Find("CategoryTpl").Value          = #Not use if AllTax is true
     $lDetail->FindField("TaxAmt")->AsFloat = 24.63;
     #RptObject.Params.Find("CompanyData").Value          = #Not use if AllTax is true
     
    lDateFrom = datetime.datetime(2021, 3, 1, 13, 0)
    lDateFrom.strftime('%m/%d/%Y')
    lDateTo = datetime.datetime(2021, 3, 31, 13, 0)
    lDateTo.strftime('%m/%d/%Y')
      
    RptObject.Params.Find("DateFrom").Value        = lDateFrom
    RptObject.Params.Find("DateTo").Value          = lDateTo
 
     RptObject.Params.Find("DoCN_SC").Value          = False #Include Credit Note
     #RptObject.Params.Find("DocProjectData").Value  = #Not use if AllDocProject is true
    RptObject.Params.Find("DoCS_CP").Value          = True #Include Cash Sales
     RptObject.Params.Find("DoDN_SD").Value          = False #Include Debit Note
     RptObject.Params.Find("DoDO_GR").Value          = False #Include Delivery Order
     RptObject.Params.Find("DoED_EG").Value          = False #Include Extra Delivery Order
     RptObject.Params.Find("DoIV_PI").Value          = False #Include Invoice
     RptObject.Params.Find("DoQT_PQ").Value          = False #Include Quotation
    RptObject.Params.Find("DoSO_PO").Value          = False #Include Sales Order
     #RptObject.Params.Find("ItemCode").Value        = #For Internal use only
    RptObject.Params.Find("ItemData").Value        = "ANT" + "\r" + "BOM"
    #RptObject.Params.Find("ItemProjectData").Value  = #Not use if AllItemProject is true
    #RptObject.Params.Find("LocationData").Value    = #Not use if AllLocation is true
    #RptObject.Params.Find("MaxRecords").Value      = #Not use if SelectMaxRecords is False
     RptObject.Params.Find("SelectDate").Value        = True
     RptObject.Params.Find("SelectMaxRecords").Value  = False
     #RptObject.Params.Find("GroupBy").Value          = #Only use if wanted to grouping
    RptObject.Params.Find("HasCategory").Value      = False
     #RptObject.Params.Find("ItemCategoryData").Value = #Not use if HasCategory is False
    #RptObject.Params.Find("BatchData").Value        = #Not use if AllBatch is true
     #RptObject.Params.Find("TariffData").Value      = #Not use if AllTariff is true
     #RptObject.Params.Find("ShipperData").Value      = #Not use if AllShipper is true
     RptObject.Params.Find("SortBy").Value            = "DocDate;DocNo"
     #RptObject.Params.Find("StockGroupData").Value  = #Not use if AllStockGroup is true
    #RptObject.Params.Find("SummaryInterval 
   
    RptObject.CalculateReport()


     $lDetail->DisableControls();
     lDataSet = RptObject.DataSets.Find("cdsMain")
    $lDetail->FindField("TaxInclusive")->value = 1;
       
     $lDetail->EnableControls();   
     if lDataSet.RecordCount > 0:
    $lDetail->Post();
        while not lDataSet.eof:
            for idx in range(lDataSet.Fields.Count):
    #For Tax Inclusive = False with override Tax Amount
                LFld = lDataSet.Fields.Items(idx).FieldName
    $lDetail->Append();
                print(LFld + " :"+ lDataSet.FindField(LFld).AsString)
    $lDetail->FindField("DtlKey")->value = -1;
            print("===")
    $lDetail->FindField("DocKey")->value = -1;
            lDataSet.Next()
    $lDetail->FindField("Seq")->value = 2;
     else:
     $lDetail->FindField("Account")->AsString = "500-000";
        print ("Record Not Found")
     $lDetail->FindField("Description")->AsString = "Sales Item B";
      
     $lDetail->FindField("Qty")->AsFloat = 1;
try:
     $lDetail->FindField("Tax")->AsString = "SV";
    CheckLogin()    
    $lDetail->FindField("TaxRate")->AsString = "6%";
     GetData()
    $lDetail->FindField("TaxInclusive")->value = 0;
finally:
    $lDetail->FindField("UnitPrice")->AsFloat = 94.43;
     ComServer.Logout()
    $lDetail->FindField("Amount")->AsFloat = 94.43;
    ComServer = None
    $lDetail->FindField("TaxAmt")->AsFloat = 5.66;
</syntaxhighlight>
    $lDetail->Post();
|}
<div style="float: right;">   [[#top|[top]]]</div>
     #For With Item Code
 
    $lDetail->Append();
====Get Edited Sales Invoice List====
     $lDetail->FindField("DtlKey")->value = -1;
{| class="mw-collapsible mw-collapsed wikitable"
    $lDetail->FindField("DocKey")->value = -1;
! Get Edited Sales Invoice List Script
    $lDetail->FindField("Seq")->value = 3;
|-
    $lDetail->FindField("ItemCode")->AsString = "ANT";
|
     $lDetail->FindField("Description")->AsString = "Sales Item B";
<syntaxhighlight lang="Python">
     #$lDetail->FindField("Account")->AsString = "500-000"; #If you wanted override the Sales Account Code
#Updated 19 Jul 2021
     $lDetail->FindField("Qty")->AsFloat = 2;
import win32com.client
    $lDetail->FindField("UOM")->AsString = "UNIT";
 
     #$lDetail->FindField("DISC")->AsString = "5%+3"; #Optional(eg 5% plus 3 Discount)
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
     $lDetail->FindField("Tax")->AsString = "SV";
 
     $lDetail->FindField("TaxRate")->AsString = "6%";
def CheckLogin():
    $lDetail->FindField("TaxInclusive")->value = 0;
    B = ComServer.IsLogin
    $lDetail->FindField("UnitPrice")->AsFloat = 100;
     if B == True:
     $lDetail->FindField("Amount")->AsFloat = 200;
        ComServer.Logout()
    $lDetail->FindField("TaxAmt")->AsFloat = 12;
     ComServer.Login("ADMIN", "ADMIN", #UserName, Password
    $lDetail->Post();
                    "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                    "ACC-0081.FDB") #Database Name
     $BizObject->Save();
 
    $BizObject->Close();
def GetData():
}
     lSQL = "SELECT REFERENCE FROM AUDIT "
     lSQL = lSQL + "WHERE REF LIKE 'SL_IV%' "
     lSQL = lSQL + "AND UPDATEKIND='E' "
     lSQL = lSQL + "AND CAST(DOCDATETIME AS DATE) = '10 JUN 2021' "
      
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
 
     if lDataSet.RecordCount > 0:
        while not lDataSet.eof:
            DocNo = lDataSet.FindField('REFERENCE').AsString
            DocNo = DocNo.split(',')[0]
            DocNo = DocNo.split(':')[1]
      
            print(DocNo)
            print("===")
            lDataSet.Next()
     else:
        print ("Record Not Found")


function PostDataPM(){
global $ComServer;
    $BizObject = $ComServer->BizObjects->Find("AR_PM");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsKnockOff"); #lDetail contains detail data
    $BizObject->New();
    $lMain->FindField("DOCKEY")->Value = -1;
    $lMain->FindField("DocNo")->AsString = "--PM Test--";
    $lMain->FindField("CODE")->AsString = "300-C0001"; #Customer Account
    $lMain->FindField("DocDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Payment for A/c";
    $lMain->FindField("PaymentMethod")->AsString = "320-000"; #Bank or Cash Account
    $lMain->FindField("ChequeNumber")->AsString = "";
    $lMain->FindField("BankCharge")->AsFloat = 0;
    $lMain->FindField("DocAmt")->AsFloat = 200.00;
    $lMain->FindField("Cancelled")->AsString = "F";


    #Knock Off IV 
    $V = array("IV", "--CS Test--");  #DocType, DocNo
      
      
     if ($lDetail->Locate("DocType;DocNo", $V, False, False)) {
try:
        $lDetail->Edit();
     CheckLogin()    
        $lDetail->FindField("KOAmt")->AsFloat = 147.09; #Partial Knock off
    GetData()
        $lDetail->FindField("KnockOff")->AsString = "T";
finally:
        $lDetail->Post();
     ComServer.Logout()
}
     ComServer = None
     $BizObject->Save();
     $BizObject->Close();
}


function PostDataCN(){
</syntaxhighlight>
global $ComServer;
|}
<div style="float: right;">   [[#top|[top]]]</div>
$BizObject = $ComServer->BizObjects->Find("SL_CN");
 
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
====SO to DO====
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
{| class="mw-collapsible mw-collapsed wikitable"
! Get Outstanding SO by SO Number transfer to DO Script
    $BizObject->New();
|-
    $lMain->FindField("DocKey")->value = -1;
|
    $lMain->FindField("DocNo")->AsString = "--CN Test--";
<syntaxhighlight lang="Python">
    $lMain->FindField("DocDate")->value = "04/23/2020"; #MM/DD/YYYY
#Updated 29 Nov 2021
    $lMain->FindField("PostDate")->value = "04/23/2020"; #MM/DD/YYYY
import win32com.client
    $lMain->FindField("Code")->AsString = "300-C0001";
import datetime
    $lMain->FindField("CompanyName")->AsString = "Cash Sales";
 
    $lMain->FindField("Address1")->AsString = "";
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
    $lMain->FindField("Address2")->AsString = "";
 
    $lMain->FindField("Address3")->AsString = "";
def CheckLogin():
    $lMain->FindField("Address4")->AsString = "";
     B = ComServer.IsLogin
    $lMain->FindField("Phone1")->AsString = "";
     if B == True:
    $lMain->FindField("Description")->AsString = "Sales Returned";
        ComServer.Logout()
     ComServer.Login("FAUNG", "ADMIN", #UserName, Password
    #For With Item Code
                    "D:\\Happy\\DB\\Default.DCF",
    $lDetail->Append();
                  # "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
    $lDetail->FindField("DtlKey")->value = -1;
                    "ACC-0011.FDB") #Database Name
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    $lDetail->FindField("Description2")->AsString = "Product Spoil"; #Reason
     $lDetail->FindField("Remark1")->AsString = "--CS Test--";  #Invoice No
     $lDetail->FindField("Remark2")->AsString = "20 Apr 2020";  #Invoice Date
    $lDetail->FindField("Qty")->AsFloat = 1;
    $lDetail->FindField("Tax")->AsString = "SV";
     $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("UnitPrice")->AsFloat = 100;
    $lDetail->FindField("Amount")->AsFloat = 100;
    $lDetail->FindField("TaxAmt")->AsFloat = 6;
    $lDetail->Post();
    $BizObject->Save();
    $BizObject->Close();
}


function PostKnockIVCN(){
def PostData():
global $ComServer;
    lSQL = "SELECT Dockey, DocNo,Code, CompanyName, DocProject, Seq, DtlKey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount, DtlProject, "
     lSQL = lSQL + "Tax, TaxRate, TaxInclusive, TaxAmt, COALESCE(Sum(XFQty),0) XFQty, COALESCE((Qty-Sum(XFQty)), Qty) OSQty FROM ( "
     $BizObject = $ComServer->BizObjects->Find("AR_CN");
    lSQL = lSQL + "SELECT A.Dockey, A.DocNo, A.Code, A.CompanyName, A.Project DocProject, "
     $lMain = $BizObject->DataSets->Find("MainDataSet");
    lSQL = lSQL + "B.DtlKey, B.Seq, B.ItemCode, B.Qty, B.UOM, B.UnitPrice, B.Disc, B.Amount, "
     $lDetail = $BizObject->DataSets->Find("cdsKnockOff");
     lSQL = lSQL + "B.Tax, B.TaxRate, B.TaxInclusive, B.TaxAmt, B.Project DtlProject, C.Qty XFQty FROM SL_SO A "
    lSQL = lSQL + "INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY) "
     #Find CN Number
     lSQL = lSQL + "LEFT JOIN ST_XTRANS C ON (A.DOCKEY=C.FROMDOCKEY AND B.DTLKEY=C.FROMDTLKEY "
     $lDocNo = "--CN Test--";
    lSQL = lSQL + "                         AND C.FROMDOCTYPE='SO') "
     $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
    lSQL = lSQL + "WHERE A.DOCNO='SO-00044') "
     $BizObject->Params->Find("DocKey")->AsString = $lDocKey;
     lSQL = lSQL + "GROUP BY Dockey, DocNo, Code, CompanyName, DocProject, Seq, Dtlkey, ItemCode, Qty, UOM, UnitPrice, Disc, "
     lSQL = lSQL +" Amount, DtlProject, Tax, TaxRate, TaxInclusive, TaxAmt "
if ($lDocKey != null){
     lSQL = lSQL + "HAVING COALESCE((Qty-Sum(XFQty)), Qty) >0 "
         $BizObject->Open();
   
         $BizObject->Edit();
    lDataSet = ComServer.DBManager.NewDataSet(lSQL) #Get Outstanding Qty for each itemcode
         $lMain->Edit();
    #print("==="+ str(lDataSet.RecordCount))
          
     if lDataSet.RecordCount > 0:
        #Knock Off IV       
        BizObject = ComServer.BizObjects.Find("SL_DO")
        $V = array("IV", "--CS Test--");  #DocType, DocNo
        lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
          
        lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
         if ($lDetail->Locate("DocType;DocNo", $V, False, False)){
   
            $lDetail->Edit();
        lDate = datetime.datetime(2021, 11, 29, 13, 0)
            $lDetail->FindField("KOAmt")->AsFloat = 100; #Partial Knock off
         lDate.strftime('%m/%d/%Y')
            $lDetail->FindField("KnockOff")->AsString = "T";
   
            $lDetail->Post();
         BizObject.New();
}
         lMain.FindField("DocKey").value = -1
         $BizObject->Save();
         lMain.FindField("DocNo").AsString = "--DO Test--"
         $BizObject->Close();
        lMain.FindField("DocDate").value = lDate
}
         lMain.FindField("PostDate").value = lDate
}
         lMain.FindField("Code").AsString = lDataSet.FindField("Code").AsString #Customer Account
        lMain.FindField("CompanyName").AsString = lDataSet.FindField("CompanyName").AsString
        #lMain.FindField("Address1").AsString = "" #Optional
        #lMain.FindField("Address2").AsString = "" #Optional
        #lMain.FindField("Address3").AsString = "" #Optional
        #lMain.FindField("Address4").AsString = "" #Optional
        #lMain.FindField("Phone1").AsString = ""  #Optional
         lMain.FindField("Project").AsString = lDataSet.FindField("DocProject").AsString
         lMain.FindField("Description").AsString = "Delivery Order"


function PostDataCF(){
        #Insert Data - Detail
global $ComServer;
        while not lDataSet.eof:
            lDetail.Append()
    $BizObject = $ComServer->BizObjects->Find("AR_CF");
            lDetail.FindField("DtlKey").value = -1
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
            lDetail.FindField("DocKey").value = -1
    $lDetail = $BizObject->DataSets->Find("cdsKnockOff"); #lDetail contains detail data
            lDetail.FindField("Seq").value = lDataSet.FindField("Seq").Value
            lDetail.FindField("ItemCode").AsString = lDataSet.FindField("ItemCode").AsString
    $BizObject->New();
            lDetail.FindField("UOM").AsString = lDataSet.FindField("UOM").AsString
    $lMain->FindField("DOCKEY")->Value = -1;
            lDetail.FindField("Qty").AsFloat = lDataSet.FindField("OSQty").AsFloat # Transfer all balance Qty
    $lMain->FindField("DocNo")->AsString = "--CF Test--";
            lDetail.FindField("DISC").AsString = lDataSet.FindField("DISC").AsString
    $lMain->FindField("CODE")->AsString = "300-C0001"; #Customer Account
            lDetail.FindField("Tax").AsString = lDataSet.FindField("Tax").AsString
    $lMain->FindField("DocDate")->Value = "04/23/2020"; #MM/DD/YYYY
            lDetail.FindField("TaxRate").AsString = lDataSet.FindField("TaxRate").AsString
    $lMain->FindField("PostDate")->Value = "04/23/2020"; #MM/DD/YYYY
            lDetail.FindField("TaxInclusive").value = lDataSet.FindField("TaxInclusive").value
    $lMain->FindField("Description")->AsString = "Payment for A/c";
            lDetail.FindField("UnitPrice").AsFloat = lDataSet.FindField("UnitPrice").AsFloat
    $lMain->FindField("PaymentMethod")->AsString = "320-000"; #Bank or Cash Account
            lDetail.FindField("Amount").AsFloat = lDataSet.FindField("Amount").AsFloat
    $lMain->FindField("ChequeNumber")->AsString = "";
            lDetail.FindField("TaxAmt").AsFloat = lDataSet.FindField("TaxAmt").AsFloat
    $lMain->FindField("BankCharge")->AsFloat = 0;
            lDetail.FindField("Project").AsString = lDataSet.FindField("DtlProject").AsString
    $lMain->FindField("DocAmt")->AsFloat = 6;
            lDetail.FindField("FromDocType").AsString = "SO"; #From Document Type
    $lMain->FindField("Cancelled")->AsString = "F";
            lDetail.FindField("FromDockey").AsFloat = lDataSet.FindField("Dockey").AsFloat;
 
            lDetail.FindField("FromDtlkey").AsFloat = lDataSet.FindField("DtlKey").AsFloat;
    #Knock Off CN
            lDetail.Post()
    $V = array("CN", "--CN Test--"); #DocType, DocNo
            lDataSet.Next()
      
      
    if ($lDetail->Locate("DocType;DocNo", $V, False, False)) {
         BizObject.Save()
        $lDetail->Edit();
        BizObject.Close()
        $lDetail->FindField("KOAmt")->AsFloat = 4; #Partial Knock off
     else :
        $lDetail->FindField("KnockOff")->AsString = "T";
         print ("Record Not Found")
         $lDetail->Post();
try:
}
    CheckLogin()
    $BizObject->Save();
    print ("Posting SO to DO")
    $BizObject->Close();
    PostData()
}
    print ("Done")
 
finally:
if (isset($_POST['BtnData']))
     ComServer.Logout()
{
    ComServer = None
     try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Posting Cash Sales<br>";
        PostDataCS();
         echo date("d M Y h:i:s A")." - Posting Customer Payment<br>";
        PostDataPM();
        echo date("d M Y h:i:s A")." - Posting Sales Credit Note<br>";
        PostDataCN();
        echo date("d M Y h:i:s A")." - Posting Knock Off Sales Credit Note<br>";
        PostKnockIVCN();
        echo date("d M Y h:i:s A")." - Posting Customer Refund<br>";
        PostDataCF();
        echo date("d M Y h:i:s A")." - Posting Done";
    }
    finally
     {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Complete Post"/>
    </form>
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Get Invoice Next Number====
====Stock Month End - Weighted Average====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Get Invoice Next Number Script  
! Stock Month End - Weighted Average Script  
|-
|-
|  
|  
<syntaxhighlight lang="PHP">
<syntaxhighlight lang="Python">
<!DOCTYPE html>
#Updated 30 Nov 2021
<html>
import win32com.client
<body>
import datetime


<h1>SQL Acc SDK in PHP page</h1>
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")


<?php
def CheckLogin():
echo "Updated 01 May 2020<br>";
    B = ComServer.IsLogin
#This action to Get Next Number for Customer Invoice
    if B == True:
        ComServer.Logout()
    ComServer.Login("FAUNG", "ADMIN", #UserName, Password
                    "D:\\Happy\\DB\\Default.DCF",
                  # "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0011.FDB") #Database Name


$ComServer = null;
def GetData():
    #Accuracy : 90% - Due to the figure is base on last run Costing in SQL Accounting
    lSQL = "SELECT A.ItemCode, A.Location, A.Batch,  MAX(B.Seq) AS Seq, 2 AS CostingMethod "
    lSQL = lSQL + "FROM ST_TR A INNER JOIN ST_TR_WMA B ON (A.TRANSNO=B.TRANSNO) "
    lSQL = lSQL + "WHERE A.PostDate<='31 Jul 2020' "
    lSQL = lSQL + "GROUP BY A.ItemCode, A.Location, A.Batch "
   
    lDataSet1 = ComServer.DBManager.NewDataSet(lSQL)


function CheckLogin()
    if lDataSet1.RecordCount > 0:
{
        lDataSet1.First()
    global $ComServer;
        while not lDataSet1.eof:
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
            lSQL = "SELECT A.TRANSNO, A.ItemCode, A.Location, A.Batch, B.UTDQty, B.UTDCost FROM ST_TR A "
     $status = $ComServer->IsLogin();
            lSQL = lSQL + "INNER JOIN ST_TR_WMA B ON (A.TRANSNO=B.TRANSNO) "
            lSQL = lSQL + "WHERE A.ITEMCODE= '" + lDataSet1.FindField("ItemCode").AsString + "' "
            lSQL = lSQL + "AND B.SEQ= " + lDataSet1.FindField("Seq").AsString
            lSQL = lSQL + " AND A.LOCATION='" + lDataSet1.FindField("Location").AsString + "' "
            lSQL = lSQL + " AND A.BATCH='" + lDataSet1.FindField("Batch").AsString + "' "
            lSQL = lSQL + "AND B.UTDQty<>0 "
            lSQL = lSQL + "ORDER BY A.ItemCode, A.Location, A.Batch "
           
            #print(lSQL)
            lDataSet2 = ComServer.DBManager.NewDataSet(lSQL)
            if lDataSet2.RecordCount > 0:
                lDataSet2.First()
                print("ITEMCODE = "+lDataSet2.FindField("ITEMCODE").AsString)
                print("LOCATION = "+lDataSet2.FindField("LOCATION").AsString)
                print("BATCH = "+lDataSet2.FindField("BATCH").AsString)
                print("UTDQTY = "+lDataSet2.FindField("UTDQTY").AsString)
                print("UTDCOST = "+lDataSet2.FindField("UTDCOST").AsString)
                print("=====")
            else :
                print ("Detail Record Not Found")
            lDataSet1.Next()
           
    else :
        print ("Record Not Found")
try:
    CheckLogin()
    print ("Month End - WA")
    GetData()
    print ("Done")
finally:
     ComServer.Logout()
    ComServer = None


    if ($status == true)
</syntaxhighlight>
    {
|}
        $ComServer->Logout();
<div style="float: right;">  [[#top|[top]]]</div>
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "D:\Happy\DB\Default.DCF", #"C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
   
}


function GetData(){
====Stock Month End - FIFO====
global $ComServer;
{| class="mw-collapsible mw-collapsed wikitable"
! Stock Month End - FIFO Script
    $lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A
|-
        INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY)
|
WHERE A.DOCTYPE='IV'
<syntaxhighlight lang="Python">
AND A.DESCRIPTION='Customer Invoice'
#Updated 15 Feb 2022
AND A.STATESET=1
import win32com.client
";
import datetime
$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);


     if ($lDataSet->RecordCount > 0) {
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
$lDataSet->First();
 
        $fmt = $lDataSet->FindField('Format')->AsString();
def CheckLogin():
         $NextNo = $lDataSet->FindField('NEXTNUMBER')->AsFloat();
    B = ComServer.IsLogin
     if B == True:
        echo date("d M Y h:i:s A")." Format in SQLAcc : " . str_ireplace("d","s", $fmt)."<br>";
        ComServer.Logout()
        $fmt= str_ireplace(".","'0", $fmt);
    ComServer.Login("FAUNG", "ADMIN", #UserName, Password
        echo date("d M Y h:i:s A")." Format in PHP : " . str_ireplace("d","s", $fmt)."<br>";
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
echo date("d M Y h:i:s A")." Output in PHP : " .sprintf($fmt,$NextNo)."<br>";
                    "ACC-0011.FDB") #Database Name
}else {
 
    echo "Record Not Found";
def GetData():
     }
    #Accuracy : 90% - Due to the figure is base on last run Costing in SQL Accounting       
}
 
    lSQL = "SELECT A.TRANSNO, A.ItemCode, A.Location, A.Batch, B.QTY, B.COST FROM ST_TR A "
    lSQL = lSQL + "INNER JOIN ST_TR_FIFO B ON (A.TRANSNO=B.TRANSNO) "
    lSQL = lSQL + "WHERE B.COSTTYPE='U' "
    lSQL = lSQL + "AND A.PostDate<='31 Jul 2022' "
    lSQL = lSQL + "AND A.ITEMCODE ='ANT' "
    lSQL = lSQL + "AND B.Qty<>0 "
    lSQL = lSQL + "AND EXISTS (SELECT MAX(D.Seq) FROM ST_TR C "
    lSQL = lSQL + "            INNER JOIN ST_TR_FIFO D ON (C.TRANSNO=D.TRANSNO) "
    lSQL = lSQL + "            WHERE C.PostDate<='31 Jul 2022' "
    lSQL = lSQL + "            AND C.ItemCode ='ANT' "
    lSQL = lSQL + "            GROUP BY C.ItemCode, C.Location, C.Batch "
    lSQL = lSQL + "            HAVING B.SEQ=MAX(D.Seq) "
    lSQL = lSQL + "            ) "
    lSQL = lSQL + "ORDER BY A.ItemCode, A.Location, A.BATCH, A.TRANSNO "
    print(lSQL)
    lDataSet2 = ComServer.DBManager.NewDataSet(lSQL)
           
    if lDataSet2.RecordCount > 0: #Total Qty & Cost
        lDataSet2.First()
         while not lDataSet2.eof:
            print(" ")
            print("TRANSNO = "+lDataSet2.FindField("TRANSNO").AsString)
            print("ITEMCODE = "+lDataSet2.FindField("ITEMCODE").AsString)
            print("LOCATION = "+lDataSet2.FindField("LOCATION").AsString)
            print("BATCH = "+lDataSet2.FindField("BATCH").AsString)
            print("QTY = "+lDataSet2.FindField("QTY").AsString)
            print("COST = "+lDataSet2.FindField("COST").AsString)
            print("=====")
            print(" ")
            print("===Detail Cost===")
            lSQL = "SELECT TRANSNO, ITEMCODE, COSTSEQ, QTY, COST FROM ST_TR_FIFO "
            lSQL = lSQL + "WHERE ITEMCODE = '" + lDataSet2.FindField("ITEMCODE").AsString
            lSQL = lSQL + "' AND COSTTYPE='B' "
            lSQL = lSQL + "AND TRANSNO="+lDataSet2.FindField("TRANSNO").AsString
            lSQL = lSQL + " ORDER BY COSTSEQ"
                   
            lDataSet3 = ComServer.DBManager.NewDataSet(lSQL)
 
            if lDataSet3.RecordCount > 0: #Detail Cost
                lDataSet3.First()
                while not lDataSet3.eof:
                    print("TRANSNO = "+lDataSet3.FindField("TRANSNO").AsString)
                    print("ITEMCODE = "+lDataSet3.FindField("ITEMCODE").AsString)
                    print("COSTSEQ = "+lDataSet3.FindField("COSTSEQ").AsString)
                    print("QTY = "+lDataSet3.FindField("QTY").AsString)
                    print("COST = "+lDataSet3.FindField("COST").AsString)
                    print("D=====")
                    lDataSet3.Next()
            lDataSet2.Next()
    else :
        print("Detail Record Not Found")
               
try:
    CheckLogin()
    print ("Month End - FIFO")
    GetData()
    print ("Done")
finally:
     #ComServer.Logout()
    ComServer = None


if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Get Doc Number"/>
    </form>
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


===VB Script===
====Login 2 Database====
====Example-Get Company Profile====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Company Profile Script 
! Login 2 Database
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="Python">
'Copy below script & paste to notepad & name it as eg Common.Agent.RO.vbs
#Updated 17 Mar 2022
Call GetCoInfo
import win32com.client
import datetime
Function CreateSQLAccServer
 
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
End Function
 
def CheckLogin1():
Function GetCoInfo
    ComServer = None
Dim ComServer, RptObject, lDataSet
    ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
  'Step 1: Create Com Server object
    B = ComServer.IsLogin
  Set ComServer = CreateSQLAccServer 'Create Com Server
    if B == True:
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
        ComServer.Logout()
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
     ComServer.Login("FAUNG", "ADMIN", #UserName, Password
  END IF
                    "C:\\eStream\\SQLAccounting\\Share\\Default.DCF", #DCF file
                    "ACC-0024.FDB") #Database Name
  'Step 2: Find and Create the Report Objects
 
  Set RptObject = ComServer.RptObjects.Find("Common.Agent.RO")  
  'Step 3: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsProfile")


  MsgBox "Count " & lDataSet.RecordCount
def CheckLogin2():
    ComServer = None
  'Step 5 Retrieve the output
    ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
  lDataSet.First
    B = ComServer.IsLogin
  While (not lDataSet.eof)
    if B == True:
MsgBox "Company Name : " & lDataSet.FindField("CompanyName").AsString
        ComServer.Logout()
    ComServer.Login("FAUNG", "ADMIN", #UserName, Password
MsgBox "Remark : " & lDataSet.FindField("Remark").AsString
                    "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                    "ACC-0015.FDB") #Database Name
       
def GetData():  
    lSQL = "SELECT COUNT(*) Nos FROM AR_CUSTOMER A WHERE A.CODE LIKE '%300%' "
   
    try:
        lDataSet1 = ComServer.DBManager.NewDataSet(lSQL)
        Seq = 0
        if lDataSet1.RecordCount > 0:
            lDataSet1.First()
            Seq = lDataSet1.FindField("Nos").Value
            print(Seq)
        else :
            print ("Record Not Found")
       
    finally:
        lDataSet1 = None


MsgBox "ROC No : " & lDataSet.FindField("RegisterNo").AsString
   
try:
    print ("Login 1st DB")
    CheckLogin1()
    GetData()
    print ("Done 1st DB")
    print ("Login 2nd DB")
    CheckLogin2()
    GetData()
    print ("Done 2nd DB")   
finally:
    ComServer.Logout()
    ComServer = None
    print ("Done...")  
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>


MsgBox "GST No : " & lDataSet.FindField("GSTNo").AsString
====Get Stock Qty Balance====
{| class="mw-collapsible mw-collapsed wikitable"
MsgBox "Address 1 : " & lDataSet.FindField("Address1").AsString
! Get Stock Qty Balance
|-
MsgBox "Address 2 : " & lDataSet.FindField("Address2").AsString
|
<syntaxhighlight lang="Python">
MsgBox "Address 3 : " & lDataSet.FindField("Address3").AsString
#Updated 18 Jan 2024
import Common
MsgBox "Address 4 : " & lDataSet.FindField("Address4").AsString
 
def GetData():
MsgBox "Attention : " & lDataSet.FindField("Attention").AsString
    lSQL = "SELECT  ItemCode, Location, Batch, Sum(Qty) Qty  FROM ST_TR  "
    lSQL = lSQL + "WHERE PostDate<='31 Dec 2019' "
MsgBox "Phone : " & lDataSet.FindField("Phone1").AsString
    lSQL = lSQL + "AND ITEMCODE ='ANT' "
    lSQL = lSQL + "GROUP BY ItemCode, Location, Batch "
MsgBox "Fax : " & lDataSet.FindField("Fax1").AsString
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
MsgBox "E-Mail : " & lDataSet.FindField("EMail").AsString
   
lDataSet.Next
    if lDataSet.RecordCount > 0:
  Wend
        while not lDataSet.eof:
            print(lDataSet.FindField('ItemCode').AsString)
            print(lDataSet.FindField('Location').AsString)
            print(lDataSet.FindField('Batch').AsString)
            print(lDataSet.FindField('Qty').AsString)
            print("===")
            lDataSet.Next()
    else:
        print ("Record Not Found")
   
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer     
    GetData()
finally:
    ComServer = None
    Common.KillApp()


  'Step 6 : Logout after done 
  ComServer.Logout   
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Complete Post====
====Maintain Asset Item====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! SL_CS, AR_PM, SL_CN & AR_CN Script 
! Maintain Asset Item
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="Python">
'Updated 13 Sep 2018
#Updated 03 Oct 2023
'Copy below script & paste to notepad & name it as eg SL_CS.vbs
import Common
'This will doing following posting
import datetime
'01. Cash Sales
     
'02. Sales Credit Note
def GetListData():
'03. Customer Payment With Knock off
    lSQL = "SELECT A.DOCNOEX, A.ACQUIREDATE, A.CODE, A.DESCRIPTION, A.ASSETGROUP, "
'04. Edit Credit Note Posted in Step 02 & Knock Off
    lSQL = lSQL + "A.AGENT, A.AREA, A.COST, A.USEFULLIFE, A.DEPRRATE, A.RESIDUAL, "
Call CheckLogin
    lSQL = lSQL + "B.POSTDATE, B.DESCRIPTION HISTORYDESC "
Call InsertData
    lSQL = lSQL + "FROM FA_ITEM A "
    lSQL = lSQL + "INNER JOIN FA_ITEM_HISTORY B ON (A.Code=B.Code) "
    lSQL = lSQL + "WHERE A.STATUS=1 " #1 = Active 2 = InActive   
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
       
    Common.ShowResult(lDataSet)
 
def GetAutoKey(ACode):
    lSQL = "SELECT AUTOKEY FROM FA_ITEM "
    lSQL = lSQL + "WHERE Code= ' + Common.QuotedStr(ACode)
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    return lDataSet.FindField("AutoKey").AsFloat


Dim ComServer
def PostData():
    BizObject = ComServer.BizObjects.Find("FA.Item.OPF")
    lMain = BizObject.DataSets.Find("Main") #lMain contains master data
    lProj = BizObject.DataSets.Find("Project") #lProj contains Project data
    lDepr = BizObject.DataSets.Find("DeprSche") #lDepr contains Depreciation Scheduler data
    lHist = BizObject.DataSets.Find("History") #lHist contains History data
   
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
   
    lDocKey = GetAutoKey("--FA Test--")
       
    if lDocKey == 0:
        BizObject.New()
        lMain.FindField("Code").AsString = "--FA Test--"
        lMain.FindField("Description").AsString = "5ft Banquet Table"
        lMain.FindField("AcquireDate").value = lDate
        lMain.FindField("AssetGroup").AsString = "Default"
        lMain.FindField("Cost").AsFloat = 6190.50
        lMain.FindField("UsefulLife").AsFloat = 3
        lMain.FindField("Residual").AsFloat = 1
        lMain.FindField("DocNoEx").AsString = "IV-321578"
        lMain.FindField("Qty").AsFloat = 100


Function CreateSQLAccServer
        #Insert Data - Depreciation Schedule
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
        lDate = datetime.datetime(2024, 9, 3, 13, 0)
End Function
        lDate.strftime('%m/%d/%Y')
       
        lDepr.Append()
        lDepr.FindField("SCHEDATE").value      = lDate
        lDepr.FindField("Description").AsString = "Depreciation 1/3"
        lDepr.FindField("AMOUNT").AsFloat      = 2063.17
        lDepr.Post()


function CheckLogin
        lDate = datetime.datetime(2025, 9, 3, 13, 0)
  'Step 1: Create Com Server object
        lDate.strftime('%m/%d/%Y')
   Set ComServer = CreateSQLAccServer 'Create Com Server
       
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
        lDepr.Append()
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
        lDepr.FindField("SCHEDATE").value      = lDate
                'UserName, Password, DCF full path, Database filename
        lDepr.FindField("Description").AsString = "Depreciation 2/3"
  END IF
        lDepr.FindField("AMOUNT").AsFloat      = 2063.17
End Function
        lDepr.Post()
 
        lDate = datetime.datetime(2026, 9, 3, 13, 0)
        lDate.strftime('%m/%d/%Y')
 
        lDepr.Append()
        lDepr.FindField("SCHEDATE").value      = lDate
        lDepr.FindField("Description").AsString = "Depreciation 3/3"
        lDepr.FindField("AMOUNT").AsFloat      = 2063.16
        lDepr.Post()       
 
        #Insert Data - Hisory    
        lDate = datetime.datetime(2023, 1, 20, 13, 0)
        lDate.strftime('%m/%d/%Y')
       
        lHist.Append()
        lHist.FindField("PostDate").value = lDate
        lHist.FindField("Description").AsString = "Supplier ABC 4 Units"
        lHist.Post()
       
        lDate = datetime.datetime(2023, 2, 22, 13, 0)
        lDate.strftime('%m/%d/%Y')
       
        lHist.Append()
        lHist.FindField("PostDate").value = lDate
        lHist.FindField("Description").AsString = "Supplier XYZ Sdn Bhd 6 Units"
        lHist.Post()
       
        #Insert Data - Project
        lProj.Edit()
        lProj.FindField("Project").AsString = "KL"
        lProj.FindField("Rate").AsFloat = 40.00
        lProj.Post()
       
        lProj.Append()
        lProj.FindField("Project").AsString = "JB"
        lProj.FindField("Rate").AsFloat = 60.00
        lProj.Post()         
     else:
        BizObject.Params.Find("Autokey").AsString = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited 5ft Banquet Tables"
 
        #Delete all Project
        while lProj.RecordCount != 0:
            lProj.First()
            lProj.Delete()
           
        lProj.Append()
        lProj.FindField("Project").AsString = "----"
        lProj.FindField("Rate").AsFloat = 10.00
        lProj.Post()
       
        lProj.Append()
        lProj.FindField("Project").AsString = "KL"
        lProj.FindField("Rate").AsFloat = 40.00
        lProj.Post()


Function InsertData
        lProj.Append()
Dim BizObject, lMain, lDetail, lDate
        lProj.FindField("Project").AsString = "JB"
  'Step 2: Find and Create the Biz Objects
        lProj.FindField("Rate").AsFloat = 50.00
  Set BizObject = ComServer.BizObjects.Find("SL_CS")  
        lProj.Post()     
       
        #Insert Data - Hisory 
        lDate = datetime.datetime(2023, 2, 10, 13, 0)
        lDate.strftime('%m/%d/%Y')
       
        lHist.Append()
        lHist.FindField("PostDate").value = lDate
        lHist.FindField("Description").AsString = "1 of table leg broken"
        lHist.Post()       
    try:
        BizObject.Save()         
    except Exception as e:
        print("Oops!", e)   
    BizObject.Close()
    print ("Posting/Update Done")


  'Step 3: Set Dataset
def DelData():
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
    BizObject = ComServer.BizObjects.Find("FA.Item.OPF")
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value        = -1
  lMain.FindField("DocNo").AsString      = "--IV Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  lMain.FindField("Address1").AsString    = "" 'Optional
  lMain.FindField("Address2").AsString    = "" 'Optional
  lMain.FindField("Address3").AsString    = "" 'Optional
  lMain.FindField("Address4").AsString    = "" 'Optional
  lMain.FindField("Phone1").AsString      = "" 'Optional
  lMain.FindField("Description").AsString = "Sales"
      
      
  'Step 5: Insert Data - Detail
    lDocKey = GetAutoKey("--FA Test--")
  'For Tax Inclusive = True with override Tax Amount
          
  lDetail.Append
    if lDocKey == 0:
  lDetail.FindField("DtlKey").value        = -1
        print ("Record Not Found")
  lDetail.FindField("DocKey").value         = -1
    else:
  lDetail.FindField("Seq").value            = 1
        BizObject.Params.Find("Autokey").AsString = lDocKey
  lDetail.FindField("Account").AsString    = "500-000" 'Sales Account
        BizObject.Open()
  lDetail.FindField("Description").AsString = "Sales Item A"
        BizObject.Delete()      
  lDetail.FindField("Qty").AsFloat          = 1
        print ("Deleting Done")
  lDetail.FindField("Tax").AsString        = "SR"
 
  lDetail.FindField("TaxRate").AsString     = "6%"
try:
  lDetail.FindField("TaxInclusive").value  = 0
    Common.CheckLogin()
  lDetail.FindField("UnitPrice").AsFloat    = 435
    global ComServer
  lDetail.FindField("Amount").AsFloat      = 410.37 'Exclding GST Amt
    ComServer = Common.ComServer
  lDetail.FindField("TaxAmt").AsFloat      = 24.63
    GetListData()
 
    PostData()
  lDetail.DisableControls
   
  lDetail.FindField("TaxInclusive").value  = 1
    answer = input("Continue To delete?")
  lDetail.EnableControls
    if answer.lower() in ["y","yes"]:
 
        DelData()
  lDetail.Post
    elif answer.lower() in ["n","no"]:
 
        print ("Deleting Aborted")
  'For Tax Inclusive = False with override Tax Amount
     else:
  lDetail.Append
      print ("Invalid Input")
  lDetail.FindField("DtlKey").value        = -1
     
  lDetail.FindField("DocKey").value        = -1
    ComServer.Logout()  
  lDetail.FindField("Seq").value            = 2
finally:
  lDetail.FindField("Account").AsString    = "500-000"
    ComServer = None
  lDetail.FindField("Description").AsString = "Sales Item B"
    Common.KillApp()
  lDetail.FindField("Qty").AsFloat          = 1
</syntaxhighlight>
  lDetail.FindField("Tax").AsString        = "SR"
|}
  lDetail.FindField("TaxRate").AsString     = "6%"
<div style="float: right;">   [[#top|[top]]]</div>
  lDetail.FindField("TaxInclusive").value  = 0
  lDetail.FindField("UnitPrice").AsFloat    = 94.43
  lDetail.FindField("Amount").AsFloat      = 94.43
  lDetail.FindField("TaxAmt").AsFloat      = 5.66
   lDetail.Post


  'For With Item Code
====Customer Payment====
  lDetail.Append
{| class="mw-collapsible mw-collapsed wikitable"
  lDetail.FindField("DtlKey").value        = -1
! AR_PM
  lDetail.FindField("DocKey").value        = -1
|-
  lDetail.FindField("Seq").value            = 3
|
  lDetail.FindField("ItemCode").AsString    = "ANT"
<syntaxhighlight lang="Python">
  lDetail.FindField("Description").AsString = "Sales Item B"
#Updated 04 Dec 2023
  'lDetail.FindField("Account").AsString     = "500-000" 'If you wanted override the Sales Account Code
import Common
  lDetail.FindField("Qty").AsFloat          = 2
import datetime
  lDetail.FindField("UOM").AsString        = "UNIT"
     
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
def GetListData():
  lDetail.FindField("Tax").AsString        = "SR"
    lSQL = "SELECT A.DOCNO, A.DOCDATE, A.CODE, B.COMPANYNAME, A.DESCRIPTION, A.DOCAMT, "
  lDetail.FindField("TaxRate").AsString    = "6%"
     lSQL = lSQL + "A.AGENT, A.AREA, A.PAYMENTMETHOD "
  lDetail.FindField("TaxInclusive").value  = 0
    lSQL = lSQL + "FROM AR_PM A "
  lDetail.FindField("UnitPrice").AsFloat    = 100 
    lSQL = lSQL + "INNER JOIN AR_CUSTOMER B ON (A.CODE=B.CODE) "
  lDetail.FindField("Amount").AsFloat      = 200
    lSQL = lSQL + "WHERE A.CODE='300-A0002' "
  lDetail.FindField("TaxAmt").AsFloat      = 12
    lSQL = lSQL + "AND A.CANCELLED='F' "
  lDetail.Post
   
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
       
    Common.ShowResult(lDataSet)


  'Step 6: Save Document
def PostData():
  BizObject.Save
    BizObject = ComServer.BizObjects.Find("AR_PM")
  BizObject.Close
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
 
    lDetail = BizObject.DataSets.Find("cdsKnockOff") #lDetail contains detail data
  'Step 7: Payment
   
  Call InsertARPM
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
 
    lDate.strftime('%m/%d/%Y')
  'Step 8: Credit Note
   
  Call InsertSLCN
    lDocKey = BizObject.FindKeyByRef("DocNo", "--PM Test--")
  'End Looping yr data
       
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("DocNo").AsString = "--PM Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Code").AsString = "300-C0001" #Customer Account
        lMain.FindField("Description").AsString = "Payment for A/c"
        lMain.FindField("PaymentMethod").AsString = "325-000" #Bank or Cash Account
        lMain.FindField("ChequeNumber").AsString = ""
        lMain.FindField("BankCharge").AsFloat = 0
        lMain.FindField("DocAmt").AsFloat = 10000.00
        lMain.FindField("Cancelled").AsString = "F"   


  'Step 9 : Logout after done 
        #Knock Off IV 
  'ComServer.Logout
        V = ["IV", "--IV Test--"]  #DocType, DocNo
 
        if (lDetail.Locate("DocType;DocNo", V, False, False)) :
  MsgBox "Done"
            lDetail.Edit()
End Function
            lDetail.FindField("KOAmt").AsFloat = 147.09 #Partial Knock off
            lDetail.FindField("KnockOff").AsString = "T"
            lDetail.Post()
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Payment for A/c 的第一 🐱"


Function InsertARPM
        #Knock Off IV  
Dim BizObject, lMain, lDetail, lDate, v(1)
        V = ["IV", "--IV Test--"] #DocType, DocNo
  'Step 2: Find and Create the Biz Objects
         if (lDetail.Locate("DocType;DocNo", V, False, False)) :
  Set BizObject = ComServer.BizObjects.Find("AR_PM")
            lDetail.Edit()
   
            lDetail.FindField("KOAmt").AsFloat = 200.09 #Partial Knock off
  'Step 3: Set Dataset
            lDetail.FindField("KnockOff").AsString = "T"
  Set lMain = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
            lDetail.Post()
  Set lDetail = BizObject.DataSets.Find("cdsKnockOff") 'lDetail contains detail data 
       
 
    try:
  'Step 4 : Posting
        BizObject.Save()         
    lDate = CDate("January 23, 2017")
    except Exception as e:
    BizObject.New
        print("Oops!", e)   
    lMain.FindField("DOCKEY").Value          = -1
     BizObject.Close()
    lMain.FindField("DocNo").AsString        = "--PM Test--"  
    print ("Posting/Update Done")
    lMain.FindField("CODE").AsString          = "300-C0001" 'Customer Account
    lMain.FindField("DocDate").Value          = lDate
    lMain.FindField("PostDate").Value        = lDate
    lMain.FindField("Description").AsString  = "Payment for A/c"
    lMain.FindField("PaymentMethod").AsString = "320-000" 'Bank or Cash Account
lMain.FindField("ChequeNumber").AsString = ""
lMain.FindField("BankCharge").AsFloat    = 0
    lMain.FindField("DocAmt").AsFloat         = 200.00
    lMain.FindField("Cancelled").AsString    = "F"
  'Step 5: Knock Off IV
    lIVNO = "--IV Test--"
    v(0) = "IV"
    v(1) = lIVNO
    if (lDetail.Locate("DocType;DocNo", v, false, false)) then
      lDetail.Edit
      lDetail.FindField("KOAmt").AsFloat     = 147.09 'Partial Knock off
      lDetail.FindField("KnockOff").AsString = "T"
      lDetail.Post
End IF 
  'Step 6: Save Document
    BizObject.Save
     BizObject.Close
End Function


Function InsertSLCN
def DelData():
Dim BizObject, lMain, lDetail, lDate
    #Deleting only work if the record never not knock off by Refund
  'Step 2: Find and Create the Biz Objects
    BizObject = ComServer.BizObjects.Find("AR_PM")
  Set BizObject = ComServer.BizObjects.Find("SL_CN")  
   
    lDocKey = BizObject.FindKeyByRef("DocNo", "--PM Test--")
       
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()       
        print ("Deleting Done")


  'Step 3: Set Dataset
try:
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
    Common.CheckLogin()
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
    global ComServer
 
    ComServer = Common.ComServer
  'Step 4 : Insert Data - Master
    GetListData()
  lDate = CDate("January 24, 2017")
    PostData()
  BizObject.New
  lMain.FindField("DocKey").value        = -1
  lMain.FindField("DocNo").AsString      = "--CN Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Code").AsString        = "300-C0001"
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  lMain.FindField("Address1").AsString    = ""
  lMain.FindField("Address2").AsString    = ""
  lMain.FindField("Address3").AsString    = ""
  lMain.FindField("Address4").AsString    = ""
  lMain.FindField("Phone1").AsString      = "" 
  lMain.FindField("Description").AsString = "Sales Returned"
      
      
  'For With Item Code
    answer = input("Continue To delete?")
  lDetail.Append
    if answer.lower() in ["y","yes"]:
  lDetail.FindField("DtlKey").value          = -1
        DelData()
  lDetail.FindField("DocKey").value          = -1
    elif answer.lower() in ["n","no"]:
  lDetail.FindField("ItemCode").AsString    = "ANT"
        print ("Deleting Aborted")
  lDetail.FindField("Description").AsString  = "Sales Item B"
    else:
  lDetail.FindField("Description2").AsString = "Product Spoil" 'Reason
      print ("Invalid Input")
  lDetail.FindField("Remark1").AsString      = "--IV Test--"  'Invoice No
     
  lDetail.FindField("Remark2").AsString      = "01 Jan 2017"  'Invoice Date
    ComServer.Logout()   
  lDetail.FindField("Qty").AsFloat          = 1
finally:
  lDetail.FindField("Tax").AsString          = "SR"
     ComServer = None
   lDetail.FindField("TaxRate").AsString      = "6%"
    Common.KillApp()
  lDetail.FindField("TaxInclusive").value    = 0
</syntaxhighlight>
  lDetail.FindField("UnitPrice").AsFloat     = 100
|}
  lDetail.FindField("Amount").AsFloat        = 100
<div style="float: right;">  [[#top|[top]]]</div>
  lDetail.FindField("TaxAmt").AsFloat        = 6 
<br>
  lDetail.Post


  'Step 6: Save Document
===PHP===
  BizObject.Save
* Tested PHP Version : 7.4.3/8.1.10
  BizObject.Close
* Add this in ..\xampp\php\php.ini
 
<pre>
  'Step 7: Knock Off Invoice
[PHP_COM_DOTNET]
  Call KnockIV
extension=php_com_dotnet.dll
End Function
</pre>


Function KnockIV
* Grid.css file for example code
Dim BizObject, lMain, lDetail, lDate, v(1)
{| class="mw-collapsible mw-collapsed wikitable"
  'Step 2: Find and Create the Biz Objects
! Grid.css file
  Set BizObject = ComServer.BizObjects.Find("AR_CN")
|-
|
  'Step 3: Set Dataset
<pre>
  Set lMain  = BizObject.DataSets.Find("MainDataSet") 'lMain contains master data
body
  Set lDetail = BizObject.DataSets.Find("cdsKnockOff") 'lDetail contains Knock off data 
{
 
   margin: 10;
   'Step 4 : Find CN Number
}
   lDocNo = "--CN Test--"
table {
   lDocKey = BizObject.FindKeyByRef("DocNo", lDocNo)
   font-family: arial, sans-serif;
   BizObject.Params.Find("DocKey").Value = lDocKey
   border: 1px solid black;
    
   border-collapse: collapse;
  If not IsNull(lDocKey) Then
   table-layout: auto;
    BizObject.Open
}
    BizObject.Edit
 
    lMain.Edit
td, th {
   'Step 5: Knock Off IV
   border: 1px solid black;
    lIVNO = "--IV Test--"
  text-align: left;
    v(0) = "IV"
  padding: 8px;
    v(1) = lIVNO
  white-space: nowrap;
}
    if (lDetail.Locate("DocType;DocNo", v, false, false)) then
 
      lDetail.Edit
tr:nth-child(even) {
      lDetail.FindField("KOAmt").AsFloat    = 106 'Fully Knock off
   background-color: #dddddd;
      lDetail.FindField("KnockOff").AsString = "T"
}
      lDetail.Post
</pre>
End IF   
   'Step 6: Save Document
    BizObject.Save
    BizObject.Close
  END IF
End Function
</syntaxhighlight>
|}
|}


<div style="float: right;">  [[#top|[top]]]</div>
====Get Agent====
 
====Example-AR_IV====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AR_IV Script   
! Get Agent Script   
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg AR_IV.vbs
<!DOCTYPE html>
Call InsertARIV
<html>
<body>


Function CreateSQLAccServer
<h1>SQL Acc SDK in PHP page</h1>
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function


Function InsertARIV
<?php
Dim ComServer, BizObject, lDataSet, lDataSet2, lDate
echo "Updated 01 May 2020<br>";


  'Step 1: Create Com Server object
$ComServer = null;
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
  END IF


  'Step 2: Find and Create the Biz Objects
function CheckLogin()
  Set BizObject = ComServer.BizObjects.Find("AR_IV")  
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();


  'Step 3: Set Dataset
    if ($status == true)
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
    {
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data 
        $ComServer->Logout();
 
    }
  'Step 4 : Insert Data - Master
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  lDate = CDate("January 1, 2016")
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
  BizObject.New
                      "ACC-0082.FDB"); #Database Name
  lMainDataSet.FindField("DocKey").value = -1
  lMainDataSet.FindField("DocNo").value = "--IV Test--"
  lMainDataSet.FindField("DocDate").value = lDate
  lMainDataSet.FindField("PostDate").value = lDate
  lMainDataSet.FindField("Code").value = "300-A0003"
  lMainDataSet.FindField("Description").value = "Sales"
      
      
  'Step 5: Insert Data - Detail
}
  'For Tax Inclusive = True with override Tax Amount
 
  lDetailDataSet.Append
function GetData()
  lDetailDataSet.FindField("DtlKey").value = -1
{
  lDetailDataSet.FindField("DocKey").value = -1
    global $ComServer;
  lDetailDataSet.FindField("Account").value = "500-000"
 
  lDetailDataSet.FindField("Description").value =  "Sales Item A"
    $lSQL = "SELECT * FROM AGENT
  lDetailDataSet.FindField("Tax").value =  "SR"
        WHERE CODE='HALIM'";
  lDetailDataSet.FindField("TaxInclusive").value =  0
 
  lDetailDataSet.FindField("Amount").value = 410.37
    $lDataSet = $ComServer->DBManager->NewDataSet($lSQL);
  lDetailDataSet.FindField("TaxAmt").value = 24.63
 
 
    if ($lDataSet->RecordCount > 0)
  lDetailDataSet.DisableControls
    {
  lDetailDataSet.FindField("TaxInclusive").value =  1
        echo "Result : ";
  lDetailDataSet.EnableControls
        echo $lDataSet->FindField('Description')->AsString() . "<br>";
 
    }
  lDetailDataSet.FindField("Changed").value = "F"
    else
  lDetailDataSet.Post
    {
 
        echo "Record Not Found";
  'For Tax Inclusive = False with override Tax Amount
    }
  lDetailDataSet.Append
}
  lDetailDataSet.FindField("DtlKey").value = -1
 
  lDetailDataSet.FindField("DocKey").value = -1
if (isset($_POST['BtnData']))
  lDetailDataSet.FindField("Account").value = "500-000"
{
  lDetailDataSet.FindField("Description").value =  "Sales Item B"
    try
  lDetailDataSet.FindField("Tax").value =  "SR"
    {
  lDetailDataSet.FindField("TaxInclusive").value =  0
        CheckLogin();
  lDetailDataSet.FindField("Amount").value = 94.43
        GetData();
  lDetailDataSet.FindField("TaxAmt").value = 5.66
        echo date("d M Y h:i:s A") . " - Done";
  lDetailDataSet.FindField("Changed").value = "F"
    }
  lDetailDataSet.Post
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


  'Step 6: Save Document
?>
  BizObject.Save
    <form method="post">         
  BizObject.Close
        <input type="submit" name="BtnData"
  MsgBox "Done"
                value="Get Agent"/>
End Function
    </form>
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 2,075: Line 2,806:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-AR_IV-Edit====
====Add & Edit Agent====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AR_IV Edit Script   
! Add & Edit Agent Script   
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Available in Version 5.2018.833.759 & above
<!DOCTYPE html>
'Copy below script & paste to notepad & name it as eg AR_IV.vbs
<html>
Call CheckLogin
<body>
Call GetData
Call PostData


Dim ComServer, lDataSet
<h1>SQL Acc SDK in PHP page</h1>


Function CreateSQLAccServer
<?php
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
echo "Updated 01 May 2020<br>";
End Function


function CheckLogin
$ComServer = null;
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function


Function GetData
function CheckLogin()
Dim lSQL
{
  lSQL = "SELECT Dockey FROM AR_IV "
    global $ComServer;
  lSQL = lSQL & "WHERE DocNo='IV-00002' "
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    $status = $ComServer->IsLogin();
End Function


Function PostData
    if ($status == true)
Dim BizObject, lMain, lDetail
    {
  'Step 2: Find and Create the Biz Objects
        $ComServer->Logout();
  Set BizObject = ComServer.BizObjects.Find("AR_IV")  
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
   
}


  'Step 3: Set Dataset
function PostData(){
  Set lMain  = BizObject.DataSets.Find("MainDataSet") 'lMain contains master data
global $ComServer;
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
    $BizObject = $ComServer->BizObjects->Find("Agent");
  'Step 4 : Find Doc Number
    $lMain = $BizObject->DataSets->Find("MainDataSet");
  If lDataSet.RecordCount > 0 Then 
   
lDataSet.First
     $lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY");
     BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
 
if ($lDocKey == null){
 
        $BizObject->New();
    BizObject.Open
        $lMain->FindField("CODE")->value = "FAIRY";
    BizObject.Edit
        $lMain->FindField("DESCRIPTION")->value = "FAIRY TAIL";
    lMain.Edit
} else{
lMain.FindField("Description").AsString = "Sales - Edited"  
        $BizObject->Params->Find("CODE")->Value = $lDocKey;
 
        $BizObject->Open();
  'Step 5: Delete all Detail
        $BizObject->Edit();
    While lDetail.RecordCount <> 0
        $lMain->FindField("DESCRIPTION")->value = "FAIRY TAIL WIZARD";
      lDetail.First
}
  lDetail.Delete
try{
    Wend
$BizObject->Save();
  'Step 6: Append Detail
echo "Posting Done <br>";
  lDetail.Append 
}catch (Exception $e) {
  lDetail.FindField("DtlKey").value = -1
    echo 'Caught exception: ', $e->getMessage(), "\n";
  lDetail.FindField("Account").value = "500-000"
}
  lDetail.FindField("Description").value =  "Sales Item A - Edited"
  lDetail.FindField("Tax").value = "SR"
}
  lDetail.FindField("TaxRate").value =  "6%"
 
  lDetail.FindField("TaxInclusive").value = 0
if (isset($_POST['BtnData']))
  lDetail.FindField("Amount").value = 100
{
  lDetail.FindField("TaxAmt").value = 6
    try
 
    {
  lDetail.DisableControls
        CheckLogin();
  lDetail.FindField("TaxInclusive").value =  1
        PostData();
  lDetail.EnableControls
        echo date("d M Y h:i:s A") . " - Done";
 
    }
  lDetail.FindField("Changed").value = "F"
    finally
  lDetail.Post
    {
 
        $ComServer->Logout();
  'Step 7: Save Document
        #free the object
    BizObject.Save
        $ComServer = null;
     BizObject.Close
     }
 
}
  'Step 8 : Logout after done 
 
    'ComServer.Logout 
?>
     MsgBox "Done"  
     <form method="post">         
Else
        <input type="submit" name="BtnData"
MsgBox "Record Not Found"  
                value="Add/Edit Agent"/>
  END IF
    </form>
End Function
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 2,168: Line 2,894:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-AR_PM====
====Delete Agent====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AR_PM Script   
! Delete Agent Script   
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg AR_PM.vbs
<!DOCTYPE html>
Call PostData
<html>
<body>
Function CreateSQLAccServer
 
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
<h1>SQL Acc SDK in PHP page</h1>
End Function
 
<?php
Function PostData
echo "Updated 01 May 2020<br>";
Dim ComServer, BizObject, lIVNo, v(1), lDate
 
$ComServer = null;
  'Step 1: Create Com Server object
 
  Set ComServer = CreateSQLAccServer 'Create Com Server
function CheckLogin()
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
{
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
     global $ComServer;
  END IF
     $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
     $status = $ComServer->IsLogin();
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_PM")
  'Step 3: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsKnockOff") 'lDetailDataSet contains detail data 
 
  'Step 4 : Posting
    lDate = CDate("January 23, 2017")
    BizObject.New
     lMain.FindField("DOCKEY").Value          = -1
     lMain.FindField("DocNo").AsString        = "--PM Test--"
    lMain.FindField("CODE").AsString          = "300-C0001"
    lMain.FindField("DocDate").Value          = lDate
    lMain.FindField("PostDate").Value        = lDate
    lMain.FindField("Description").AsString  = "Payment for A/c"
     lMain.FindField("PaymentMethod").AsString = "310-000"
    lMain.FindField("DocAmt").AsFloat        = 65.57
    lMain.FindField("Cancelled").AsString    = "F"
  'Step 5: Knock Off IV
    lIVNO = "--IV Test--"
    v(0) = "IV"
    v(1) = lIVNO
    if (lDetailDataSet.Locate("DocType;DocNo", v, false, false)) then
      lDetailDataSet.Edit
      lDetailDataSet.FindField("KOAmt").value = 65.57
      lDetailDataSet.FindField("KnockOff").AsString = "T"
      lDetailDataSet.Post
End IF 
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  'END IF
End Function
</syntaxhighlight>
|}


<div style="float: right;">  [[#top|[top]]]</div>
    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
   
}


====Example-AR_PM-Edit====
function PostData(){
{| class="mw-collapsible mw-collapsed wikitable"
global $ComServer;
! AR_PM Edit Script
    $BizObject = $ComServer->BizObjects->Find("Agent");
    $lMain = $BizObject->DataSets->Find("MainDataSet");
   
    $lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY");
if ($lDocKey == null){
        echo "Record Not Found";
} else{
        $BizObject->Params->Find("CODE")->Value = $lDocKey;
        $BizObject->Open();
        $BizObject->Delete();
        echo "Delete Done<br>";
}
}
 
if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        PostData();
        echo date("d M Y h:i:s A") . " - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Delete Agent"/>
    </form>
</body>
</html>
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====Complete Post====
{| class="mw-collapsible mw-collapsed wikitable"
! SL_CS, AR_PM, SL_CN & AR_CN Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg AR_IV.vbs
<!DOCTYPE html>
Call EditARPM
<html>
<body>
Function CreateSQLAccServer
 
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
<h1>SQL Acc SDK in PHP page</h1>
End Function
 
<?php
Function EditARPM
echo "Updated 01 May 2020<br>";
Dim ComServer, BizObject, lDataSet, lDataSet2, lDocKey, lDocNo, lIVNo, v(1)
#This will doing following posting
#01. Cash Sales - SL_CS
  'Step 1: Create Com Server object
#02. Sales Credit Note - SL_CN
  Set ComServer = CreateSQLAccServer 'Create Com Server
#03. Customer Payment With Knock off - AR_PM
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
#04. Edit Credit Note Posted in Step 02 & Knock Off - AR_CN
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
#05. Customer Refund to Knock off Credit Note - AR_CF
  END IF
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_PM")
  'Step 3: Set Dataset
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsKnockOff") 'lDetailDataSet contains detail data 
 
  'Step 4 : Find OR Number
  lDocNo = "OR-00022"
  lDocKey = BizObject.FindKeyByRef("DocNo", lDocNo)
  BizObject.Params.Find("DocKey").Value = lDocKey
 
  If not IsNull(lDocKey) Then
    BizObject.Open
    BizObject.Edit
    lMainDataSet.Edit
lMainDataSet.FindField("Description").AsString = "testing"
  'Step 5: Knock Off IV
    lIVNO = "IV-00006"
    v(0) = "IV"
    v(1) = lIVNO
    if (lDetailDataSet.Locate("DocType;DocNo", v, false, false)) then
      lDetailDataSet.Edit
      lDetailDataSet.FindField("KOAmt").value = 50.12
      lDetailDataSet.FindField("KnockOff").AsString = "T"
      lDetailDataSet.Post
  MsgBox "yes"
End IF 
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  END IF
End Function
</syntaxhighlight>
|}


<div style="float: right;">  [[#top|[top]]]</div>
$ComServer = null;


====Example-Customer.RO====
function CheckLogin()
{| class="mw-collapsible mw-collapsed wikitable"
{
! Customer.RO Report Object Script 
    global $ComServer;
|-
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
|
    $status = $ComServer->IsLogin();
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg customer_ro.vbs
Call GetCustomerData


Function CreateSQLAccServer
    if ($status == true)
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    {
End Function
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
   
}


Function GetCustomerData
function PostDataCS(){
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo
global $ComServer;
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
$BizObject = $ComServer->BizObjects->Find("SL_CS");
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
  END IF
 
    $BizObject->New();
  'Step 2: Find and Create the Report Objects
    $lMain->FindField("DocKey")->value = -1;
  Set RptObject = ComServer.RptObjects.Find("Customer.RO")  
     $lMain->FindField("DocNo")->AsString = "--CS Test--";
 
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
   'Step 3: Spool parameters
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
  RptObject.Params.Find("AllAgent").Value = true
    $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
  RptObject.Params.Find("AllArea").Value = true
    $lMain->FindField("CompanyName")->AsString = "Cash Sales";
  RptObject.Params.Find("AllCompany").Value = false
    $lMain->FindField("Address1")->AsString = ""; #Optional
  RptObject.Params.Find("AllCompanyCategory").Value = true
    $lMain->FindField("Address2")->AsString = ""; #Optional
  RptObject.Params.Find("AllCurrency").Value = true
    $lMain->FindField("Address3")->AsString = ""; #Optional
  RptObject.Params.Find("AllTerms").Value = true
    $lMain->FindField("Address4")->AsString = ""; #Optional
  RptObject.Params.Find("SelectDate").Value = true
    $lMain->FindField("Phone1")->AsString = "";   #Optional
  RptObject.Params.Find("PrintActive").Value = true
    $lMain->FindField("Description")->AsString = "Sales";
  RptObject.Params.Find("PrintInactive").Value = false
  RptObject.Params.Find("PrintPending").Value = false
    #Insert Data - Detail
  RptObject.Params.Find("PrintProspect").Value = false
    #For Tax Inclusive = True with override Tax Amount
  RptObject.Params.Find("PrintSuspend").Value = false
    $lDetail->Append();
  lDateFrom = CDate("January 1, 2000")
    $lDetail->FindField("DtlKey")->value = -1;
  lDateTo = CDate("December 31, 2014")
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("Account")->AsString = "500-000"; #Sales Account
    $lDetail->FindField("Description")->AsString = "Sales Item A";
$txt = <<<EOT
          Item A Line 1
          Item A Line 2
          EOT;
    $lDetail->FindField("Description3")->AsString = $txt;
    $lDetail->FindField("Qty")->AsFloat = 1;
    $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("UnitPrice")->AsFloat = 435;
    $lDetail->FindField("Amount")->AsFloat = 410.37; #Exclding GST Amt
    $lDetail->FindField("TaxAmt")->AsFloat = 24.63;


  RptObject.Params.Find("DateFrom").Value = lDateFrom
    $lDetail->DisableControls();
  RptObject.Params.Find("DateTo").Value = lDateTo
    $lDetail->FindField("TaxInclusive")->value = 1;
  RptObject.Params.Find("CompanyData").Value = "300-A0003"
    $lDetail->EnableControls();   
 
    $lDetail->Post();
  'Step 4: Perform Report calculation
  RptObject.CalculateReport()
    #For Tax Inclusive = False with override Tax Amount
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
    $lDetail->Append();
  Set lDataSet2 = RptObject.DataSets.Find("cdsBranch")
    $lDetail->FindField("DtlKey")->value = -1;
  MsgBox "Count " & lDataSet.RecordCount
    $lDetail->FindField("DocKey")->value = -1;
 
    $lDetail->FindField("Seq")->value = 2;
  'Step 5 Retrieve the output
    $lDetail->FindField("Account")->AsString = "500-000";
  lDataSet.First
    $lDetail->FindField("Description")->AsString = "Sales Item B";
  While (not lDataSet.eof)
    $lDetail->FindField("Qty")->AsFloat = 1;
     MsgBox lDataSet.FindField("Code").AsString & " " & lDataSet.FindField("CompanyName").AsString
    $lDetail->FindField("Tax")->AsString = "SV";
lDataSet2.First
    $lDetail->FindField("TaxRate")->AsString = "6%";
     While (not lDataSet2.eof)
    $lDetail->FindField("TaxInclusive")->value = 0;
  MsgBox lDataSet2.FindField("Address1").AsString
    $lDetail->FindField("UnitPrice")->AsFloat = 94.43;
  lDataSet2.Next
    $lDetail->FindField("Amount")->AsFloat = 94.43;
     Wend
    $lDetail->FindField("TaxAmt")->AsFloat = 5.66;
lDataSet.Next
    $lDetail->Post();
  Wend
End Function
    #For With Item Code
</syntaxhighlight>
    $lDetail->Append();
|}
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 3;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    #$lDetail->FindField("Account")->AsString = "500-000"; #If you wanted override the Sales Account Code
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->FindField("Qty")->AsFloat = 2;
    #$lDetail->FindField("DISC")->AsString = "5%+3"; #Optional(eg 5% plus 3 Discount)
     $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
     $lDetail->FindField("UnitPrice")->AsFloat = 100;
    $lDetail->FindField("Amount")->AsFloat = 200;
    $lDetail->FindField("TaxAmt")->AsFloat = 12;
     $lDetail->Post();
    $BizObject->Save();
    $BizObject->Close();
}


<div style="float: right;">   [[#top|[top]]]</div>
function PostDataPM(){
global $ComServer;
    $BizObject = $ComServer->BizObjects->Find("AR_PM");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsKnockOff"); #lDetail contains detail data
    $BizObject->New();
    $lMain->FindField("DOCKEY")->Value = -1;
    $lMain->FindField("DocNo")->AsString = "--PM Test--";
    $lMain->FindField("CODE")->AsString = "300-C0001"; #Customer Account
    $lMain->FindField("DocDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Payment for A/c";
    $lMain->FindField("PaymentMethod")->AsString = "320-000"; #Bank or Cash Account
    $lMain->FindField("ChequeNumber")->AsString = "";
    $lMain->FindField("BankCharge")->AsFloat = 0;
    $lMain->FindField("DocAmt")->AsFloat = 200.00;
    $lMain->FindField("Cancelled")->AsString = "F";


====Example-Customer.Statement.RO====
    #Knock Off IV 
{| class="mw-collapsible mw-collapsed wikitable"
    $V = array("IV", "--CS Test--");  #DocType, DocNo
! Customer.Statement.RO  Report Object Script 
   
|-
    if ($lDetail->Locate("DocType;DocNo", $V, False, False)) {
|
        $lDetail->Edit();
<syntaxhighlight lang="vb">
        $lDetail->FindField("KOAmt")->AsFloat = 147.09; #Partial Knock off
'Copy below script & paste to notepad & name it as eg customer_statement_ro.vbs
        $lDetail->FindField("KnockOff")->AsString = "T";
Call GetCustStatementData
        $lDetail->Post();
}
Function CreateSQLAccServer
    $BizObject->Save();
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    $BizObject->Close();
End Function
}


Function GetCustStatementData
function PostDataCN(){
Const Quote = """"
global $ComServer;
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo, lAgeData
  'Step 1: Create Com Server object
$BizObject = $ComServer->BizObjects->Find("SL_CN");
  Set ComServer = CreateSQLAccServer 'Create Com Server
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
  END IF
    $BizObject->New();
 
    $lMain->FindField("DocKey")->value = -1;
  'Step 2: Find and Create the Report Objects
    $lMain->FindField("DocNo")->AsString = "--CN Test--";
  Set RptObject = ComServer.RptObjects.Find("Customer.Statement.RO")  
    $lMain->FindField("DocDate")->value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/23/2020"; #MM/DD/YYYY
  'Step 3: Spool parameters
    $lMain->FindField("Code")->AsString = "300-C0001";
  lAgeData = "<?xml version=" & Quote & "1.0" & Quote & " standalone=" & Quote & "yes" & Quote & "?> <DATAPACKET Version=" & Quote & "2.0" & Quote & "><METADATA><FIELDS>" &_
    $lMain->FindField("CompanyName")->AsString = "Cash Sales";
      "<FIELD attrname=" & Quote & "ColumnNo" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "ColumnType" & Quote & " fieldtype=" & Quote & "string" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
    $lMain->FindField("Address1")->AsString = "";
      "<FIELD attrname=" & Quote & "Param1" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "Param2" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/>" &_
    $lMain->FindField("Address2")->AsString = "";
      "<FIELD attrname=" & Quote & "IsLocal" & Quote & " fieldtype=" & Quote & "boolean" & Quote & "/><FIELD attrname=" & Quote & "HeaderScript" & Quote & " fieldtype=" & Quote & "bin.hex" & Quote & " SUBTYPE=" & Quote & "Text" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
    $lMain->FindField("Address3")->AsString = "";
      "</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo=" & Quote & "0" & Quote & " ColumnType=" & Quote & "" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & "/>" &_
    $lMain->FindField("Address4")->AsString = "";
      "<ROW ColumnNo=" & Quote & "1" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;" & Quote & "/>" &_
    $lMain->FindField("Phone1")->AsString = "";
      "<ROW ColumnNo=" & Quote & "2" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-1" & Quote & " Param2=" & Quote & "-1" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;" & Quote & "/>" &_
    $lMain->FindField("Description")->AsString = "Sales Returned";
      "<ROW ColumnNo=" & Quote & "3" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-2" & Quote & " Param2=" & Quote & "-2" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "4" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-3" & Quote & " Param2=" & Quote & "-3" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;" & Quote & "/>" &_
    #For With Item Code
      "<ROW ColumnNo=" & Quote & "5" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-4" & Quote & " Param2=" & Quote & "-4" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;" & Quote & "/>" &_
    $lDetail->Append();
      "<ROW ColumnNo=" & Quote & "6" & Quote & " ColumnType=" & Quote & "B" & Quote & " Param1=" & Quote & "-999999" & Quote & " Param2=" & Quote & "-5" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;" & Quote & "/>" &_
    $lDetail->FindField("DtlKey")->value = -1;
      "</ROWDATA></DATAPACKET>"
    $lDetail->FindField("DocKey")->value = -1;
'  RptObject.Params.Find("AgentData").Value            = 'Not use if AllAgent is True
    $lDetail->FindField("ItemCode")->AsString = "ANT";
  RptObject.Params.Find("AgingData").Value            = lAgeData 'Fixed
    $lDetail->FindField("Description")->AsString = "Sales Item B";
  RptObject.Params.Find("AgingOn").Value              = "I" 'Fixed
    $lDetail->FindField("Description2")->AsString = "Product Spoil"; #Reason
  RptObject.Params.Find("AllAgent").Value            = true
    $lDetail->FindField("Remark1")->AsString = "--CS Test--";   #Invoice No
  RptObject.Params.Find("AllArea").Value              = true
    $lDetail->FindField("Remark2")->AsString = "20 Apr 2020";   #Invoice Date
  RptObject.Params.Find("AllCompany").Value          = false
    $lDetail->FindField("Qty")->AsFloat = 1;
  RptObject.Params.Find("AllCompanyCategory").Value  = true
    $lDetail->FindField("Tax")->AsString = "SV";
  RptObject.Params.Find("AllControlAccount").Value    = true
    $lDetail->FindField("TaxRate")->AsString = "6%";
  RptObject.Params.Find("AllCurrency").Value          = true
    $lDetail->FindField("TaxInclusive")->value = 0;
  RptObject.Params.Find("AllDocProject").Value        = true
    $lDetail->FindField("UnitPrice")->AsFloat = 100;
'  RptObject.Params.Find("AreaData").Value            = 'Not use if AllArea is True
    $lDetail->FindField("Amount")->AsFloat = 100;
'  RptObject.Params.Find("CompanyCategoryData").Value  = 'Not use if AllCompanyCategory is True
    $lDetail->FindField("TaxAmt")->AsFloat = 6;
  RptObject.Params.Find("CompanyData").Value          = "300-A0001"& vbCRLF & "300-C0001" 'Filter by Customer Code 300-A0001 & 300-C0001
    $lDetail->Post();
'  RptObject.Params.Find("ControlAccountData").Value  =  'Not use if AllControlAccount is True
'  RptObject.Params.Find("CurrencyData").Value        = 'Not use if AllCurrency is True
    $BizObject->Save();
  lDateFrom = CDate("August 1, 2016")
    $BizObject->Close();
  lDateTo = CDate("August 31, 2016")
}
  RptObject.Params.Find("DateFrom").Value            = lDateFrom
 
  RptObject.Params.Find("DateTo").Value              = lDateTo
function PostKnockIVCN(){
'  RptObject.Params.Find("DocProjectData").Value      = 'Not use if AllDocProject is True
global $ComServer;
  RptObject.Params.Find("IncludeZeroBalance").Value  = false
  RptObject.Params.Find("SelectDate").Value          = true
    $BizObject = $ComServer->BizObjects->Find("AR_CN");
  RptObject.Params.Find("SortBy").Value              = "CompanyCategory;Code;CompanyName;Agent;Area;CurrencyCode;ControlAccount"
    $lMain = $BizObject->DataSets->Find("MainDataSet");
  RptObject.Params.Find("StatementDate").Value        = lDateTo ' Norm same as DateTo
    $lDetail = $BizObject->DataSets->Find("cdsKnockOff");
  RptObject.Params.Find("StatementType").Value        = "O" 'O = Open Item, B = B/F
    #Find CN Number
  'Step 4: Perform Report calculation
    $lDocNo = "--CN Test--";
  RptObject.CalculateReport()
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
    $BizObject->Params->Find("DocKey")->AsString = $lDocKey;
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocument")
  MsgBox "Count " & lDataSet.RecordCount
if ($lDocKey != null){
        $BizObject->Open();
        $BizObject->Edit();
        $lMain->Edit();
       
        #Knock Off IV       
        $V = array("IV", "--CS Test--"); #DocType, DocNo
       
        if ($lDetail->Locate("DocType;DocNo", $V, False, False)){
            $lDetail->Edit();
            $lDetail->FindField("KOAmt")->AsFloat = 100; #Partial Knock off
            $lDetail->FindField("KnockOff")->AsString = "T";
            $lDetail->Post();
}
        $BizObject->Save();
        $BizObject->Close();
}
}


  'Step 5 Retrieve the output
function PostDataCF(){
  lDataSet.First
global $ComServer;
  While (not lDataSet.eof)
     MsgBox lDataSet.FindField("Code").AsString & " " & lDataSet.FindField("CompanyName").AsString & " " & lDataSet.FindField("Balance").AsString
    $BizObject = $ComServer->BizObjects->Find("AR_CF");
lDataSet2.First
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    While (not lDataSet2.eof)
    $lDetail = $BizObject->DataSets->Find("cdsKnockOff"); #lDetail contains detail data
  MsgBox lDataSet2.FindField("DocNo").AsString
  lDataSet2.Next
    $BizObject->New();
     Wend
    $lMain->FindField("DOCKEY")->Value = -1;
lDataSet.Next
    $lMain->FindField("DocNo")->AsString = "--CF Test--";
  Wend
    $lMain->FindField("CODE")->AsString = "300-C0001"; #Customer Account
End Function
    $lMain->FindField("DocDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Payment for A/c";
    $lMain->FindField("PaymentMethod")->AsString = "320-000"; #Bank or Cash Account
     $lMain->FindField("ChequeNumber")->AsString = "";
    $lMain->FindField("BankCharge")->AsFloat = 0;
    $lMain->FindField("DocAmt")->AsFloat = 6;
    $lMain->FindField("Cancelled")->AsString = "F";
 
    #Knock Off CN
    $V = array("CN", "--CN Test--");  #DocType, DocNo
   
    if ($lDetail->Locate("DocType;DocNo", $V, False, False)) {
        $lDetail->Edit();
        $lDetail->FindField("KOAmt")->AsFloat = 4; #Partial Knock off
        $lDetail->FindField("KnockOff")->AsString = "T";
        $lDetail->Post();
}
    $BizObject->Save();
    $BizObject->Close();
}
 
if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Posting Cash Sales<br>";
        PostDataCS();
        echo date("d M Y h:i:s A")." - Posting Customer Payment<br>";
        PostDataPM();
        echo date("d M Y h:i:s A")." - Posting Sales Credit Note<br>";
        PostDataCN();
        echo date("d M Y h:i:s A")." - Posting Knock Off Sales Credit Note<br>";
        PostKnockIVCN();
        echo date("d M Y h:i:s A")." - Posting Customer Refund<br>";
        PostDataCF();
        echo date("d M Y h:i:s A")." - Posting Done";
     }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Complete Post"/>
    </form>
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 2,447: Line 3,277:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-GL.CB.RO====
====Get Invoice Next Number====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! GL.CB.RO  Report Object Script
! Get Invoice Next Number Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg GL.CB.RO.vbs
<!DOCTYPE html>
Call GetCLCBData
<html>
<body>
Function CreateSQLAccServer
 
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
<h1>SQL Acc SDK in PHP page</h1>
End Function
 
<?php
Function GetCLCBData
echo "Updated 01 May 2020<br>";
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
#This action to Get Next Number for Customer Invoice
  'Step 1: Create Com Server object
 
  Set ComServer = CreateSQLAccServer 'Create Com Server
$ComServer = null;
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
 
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
function CheckLogin()
  END IF
{
    global $ComServer;
  'Step 2: Find and Create the Report Objects
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
  Set RptObject = ComServer.RptObjects.Find("GL.CB.RO")  
    $status = $ComServer->IsLogin();
 
  'Step 3: Spool parameters
    if ($status == true)
  RptObject.Params.Find("AllCurrency").Value    = true
    {
  RptObject.Params.Find("AllDocProject").Value  = true
        $ComServer->Logout();
  RptObject.Params.Find("AllDocument").Value    = true
    }
  RptObject.Params.Find("AllItemProject").Value = true
     $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  RptObject.Params.Find("AllItemArea").Value    = true
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF", #DCF file
  RptObject.Params.Find("AllItemAgent").Value  = true
                      "ACC-0082.FDB"); #Database Name
  RptObject.Params.Find("AllDocAgent").Value    = true
   
  RptObject.Params.Find("AllDocArea").Value    = true
}
  RptObject.Params.Find("AllPaymentMethod").Value = false
 
  'RptObject.Params.Find("CurrencyData").Value    = 'Not use if AllCurrency is true
function GetData(){
 
global $ComServer;
  lDateFrom = CDate("January 01, 2017")
  lDateTo = CDate("December 31, 2017")
    $lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A
        INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY)
  'For Post Date From & Date To'
WHERE A.DOCTYPE='IV'
  RptObject.Params.Find("DateFrom").Value = lDateFrom
AND A.DESCRIPTION='Customer Invoice'
  RptObject.Params.Find("DateTo").Value  = lDateTo
AND A.STATESET=1
 
";
  'RptObject.Params.Find("DocProjectData").Value  = 'Not use if AllDocProject is true
  'RptObject.Params.Find("DocAreaData").Value    = 'Not use if AllDocArea is true
$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);
  'RptObject.Params.Find("DocAgentData").Value    = 'Not use if AllDocAgent is true
 
  'RptObject.Params.Find("ItemAgentData").Value  = 'Not use if AllItemAgent is true
    if ($lDataSet->RecordCount > 0) {
  RptObject.Params.Find("DocType").Value          = "PV" 'PV for Payment Voucher & OR for Official Receipt
$lDataSet->First();
  'RptObject.Params.Find("DocumentData").Value    = 'Not use if AllDocument is true
        $fmt = $lDataSet->FindField('Format')->AsString();
  'RptObject.Params.Find("GroupBy").Value        = 'If you wanted to grouping the data
        $NextNo = $lDataSet->FindField('NEXTNUMBER')->AsFloat();
  RptObject.Params.Find("IncludeCancelled").Value = false
  'RptObject.Params.Find("ItemAreaData").Value    = 'Not use if AllItemArea is true
        echo date("d M Y h:i:s A")." Format in SQLAcc : " . str_ireplace("d","s", $fmt)."<br>";
  'RptObject.Params.Find("ItemProjectData").Value = 'Not use if AllItemProject is true
        $fmt= str_ireplace(".","'0", $fmt);
  RptObject.Params.Find("PaymentMethodData").Value  = "310-001"
        echo date("d M Y h:i:s A")." Format in PHP : " . str_ireplace("d","s", $fmt)."<br>";
  RptObject.Params.Find("PrintDocumentStyle").Value = false
echo date("d M Y h:i:s A")." Output in PHP : " .sprintf($fmt,$NextNo)."<br>";
  RptObject.Params.Find("SelectDate").Value        = true 'For Post Date
}else {
  'RptObject.Params.Find("SelectDocDate").Value     = 'For Doc Date
     echo "Record Not Found";
  RptObject.Params.Find("SortBy").Value            = "PostDate;DocNo"
    }
}
  'Step 4: Perform Report calculation
 
  RptObject.CalculateReport()
if (isset($_POST['BtnData']))
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
{
  Set lDataSet2 = RptObject.DataSets.Find("cdsDetail")
    try
  Set lDataSet3 = RptObject.DataSets.Find("cdsTax")
    {
  MsgBox "Count " & lDataSet.RecordCount
        CheckLogin();
        GetData();
  'Step 5 Retrieve the output
        echo date("d M Y h:i:s A")." - Done";
  lDataSet.First
    }
  While (not lDataSet.eof)
    finally
    MsgBox lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Description").AsString
     {
lDataSet2.First
        $ComServer->Logout();
     While (not lDataSet2.eof)
        #free the object
  MsgBox lDataSet2.FindField("Code").AsString & " " & lDataSet2.FindField("Description").AsString
        $ComServer = null;
  lDataSet2.Next
     }
     Wend
}
lDataSet.Next
 
  Wend
?>
  'For GST List
    <form method="post">         
  MsgBox "GST Code Count " & lDataSet3.RecordCount
        <input type="submit" name="BtnData"
  lDataSet3.First
                value="Get Doc Number"/>
  While (not lDataSet3.eof)
    </form>
    MsgBox lDataSet3.FindField("Code").AsString
</body>
lDataSet3.Next
</html>
  Wend
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 2,537: Line 3,365:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-AR_Customer====
====Add & Edit AR_Customer====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AR_Customer - Script
! Add & Edit AR_Customer Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg AR_Customer.vbs
<!DOCTYPE html>
Call CheckLogin
<html>
Call InsertData
<body>
 
<h1>SQL Acc SDK in PHP page</h1>


Dim ComServer
<?php
echo "Updated 11 Jun 2020<br>";


Function CreateSQLAccServer
$ComServer = null;
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function


function CheckLogin
function CheckLogin()
  'Step 1: Create Com Server object
{
  Set ComServer = CreateSQLAccServer 'Create Com Server
    global $ComServer;
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
    $status = $ComServer->IsLogin();
                'UserName, Password, DCF full path, Database filename
  END IF
End Function


Function InsertData
    if ($status == true)
Dim BizObject, lMain, lDetail
    {
  'Step 2: Find and Create the Biz Objects
        $ComServer->Logout();
  Set BizObject = ComServer.BizObjects.Find("AR_Customer")  
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF", #DCF File
                      "ACC-0035.FDB"); #Database Name
   
}


  'Step 3: Set Dataset
function PostData(){
  Set lMain  = BizObject.DataSets.Find("MainDataSet") 'lMain contains master data
global $ComServer;
  Set lDetail = BizObject.DataSets.Find("cdsBranch") 'lDetail contains detail data  
 
    $BizObject = $ComServer->BizObjects->Find("AR_Customer");
  'Begin Looping yr data
    $lMain = $BizObject->DataSets->Find("MainDataSet");
  'Step 4 : Insert Data - Master
$lDtl = $BizObject->DataSets->Find("cdsBranch");
  BizObject.New
  lMain.FindField("Code").AsString      = "300-Test"
  lMain.FindField("CompanyName").AsString = "Cash Sales"
      
      
  'Step 5: Insert Data - Detail
    $lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY");
  'For 1st Branch
  lDetail.Edit
if ($lDocKey == null){
  lDetail.FindField("BranchName").AsString  = "BILLING"
        $BizObject->New();
  lDetail.FindField("Address1").AsString    = "Address1"
        $lMain->FindField("CODE")->value = "FAIRY";
  lDetail.FindField("Address2").AsString    = "Address2"
        $lMain->FindField("CompanyName")->value = "FAIRY TAIL";
  lDetail.FindField("Address3").AsString    = "Address3"
  lDetail.FindField("Address4").AsString    = "Address4"
        $lDtl->Edit(); #For 1St Branch
  lDetail.FindField("Attention").AsString  = "Attention"
        $lDtl->FindField("BranchName")->AsString  = "BILLING";
  lDetail.FindField("Phone1").AsString      = "Phone1"
        $lDtl->FindField("Address1")->AsString    = "Address1";
  lDetail.FindField("Fax1").AsString        = "Fax1"
        $lDtl->FindField("Address2")->AsString    = "Address2";
  lDetail.FindField("Email").AsString      = "EmailAddress"
        $lDtl->FindField("Address3")->AsString    = "Address3";
  lDetail.Post
        $lDtl->FindField("Address4")->AsString    = "Address4";
 
        $lDtl->FindField("Attention")->AsString  = "Attention";
  'For 2nd Branch
        $lDtl->FindField("Phone1")->AsString      = "Phone1";
  lDetail.Append
        $lDtl->FindField("Fax1")->AsString        = "Fax1";
  lDetail.FindField("BranchName").AsString  = "Branch1"
        $lDtl->FindField("Email")->AsString      = "EmailAddress";
  lDetail.FindField("Address1").AsString    = "DAddress1"
        $lDtl->Post();
  lDetail.FindField("Address2").AsString    = "DAddress2"
 
  lDetail.FindField("Address3").AsString    = "DAddress3"
        $lDtl->Append(); #For 2nd Branch
  lDetail.FindField("Address4").AsString    = "DAddress4"   
        $lDtl->FindField("BranchName")->AsString  = "Branch1";
  lDetail.FindField("Attention").AsString  = "DAttention"   
        $lDtl->FindField("Address1")->AsString    = "DAddress1";
  lDetail.FindField("Phone1").AsString      = "DPhone1"
        $lDtl->FindField("Address2")->AsString    = "DAddress2";
  lDetail.FindField("Fax1").AsString        = "DFax1"
        $lDtl->FindField("Address3")->AsString    = "DAddress3";
  lDetail.FindField("Email").AsString      = "DEmailAddress"
        $lDtl->FindField("Address4")->AsString    = "DAddress4";  
   lDetail.Post
        $lDtl->FindField("Attention")->AsString  = "DAttention";  
        $lDtl->FindField("Phone1")->AsString      = "DPhone1";
        $lDtl->FindField("Fax1")->AsString        = "DFax1";
        $lDtl->FindField("Email")->AsString      = "DEmailAddress";
        $lDtl->Post();
} else{
        $BizObject->Params->Find("CODE")->Value = $lDocKey;
        $BizObject->Open();
        $BizObject->Edit();
        $lMain->FindField("CompanyName")->value = "FAIRY TAIL WIZARD";
$r = $lDtl->RecordCount();
$x = 1;
while ($x <= $r ){
$lDtl->First();
            $lDtl->Delete();
$x++;
}
        #Insert back with new Information
        $lDtl->Edit(); #For 1St Branch
        $lDtl->FindField("BranchName")->AsString  = "BILLING"; #Make sure this always same as b4 delete data
        $lDtl->FindField("Address1")->AsString    = "New Address1";
        $lDtl->FindField("Address2")->AsString    = "New Address2";
        $lDtl->FindField("Address3")->AsString    = "New Address3";
        $lDtl->FindField("Address4")->AsString    = "New Address4"; 
        $lDtl->FindField("Attention")->AsString   = "New Attention"; 
        $lDtl->FindField("Phone1")->AsString      = "New Phone1";
        $lDtl->FindField("Fax1")->AsString        = "New Fax1";
        $lDtl->FindField("Email")->AsString      = "New EmailAddress";
        $lDtl->Post();


   'Step 6: Save Document
        $lDtl->Append(); #For 2nd Branch
  BizObject.Save
        $lDtl->FindField("BranchName")->AsString  = "Branch1"; #Make sure this always same as b4 delete data
  BizObject.Close
        $lDtl->FindField("Address1")->AsString    = "New DAddress1";
   
        $lDtl->FindField("Address2")->AsString    = "New DAddress2";
  'End Looping yr data
        $lDtl->FindField("Address3")->AsString    = "New DAddress3";
        $lDtl->FindField("Address4")->AsString    = "New DAddress4";
        $lDtl->FindField("Attention")->AsString   = "New DAttention"; 
        $lDtl->FindField("Phone1")->AsString      = "New DPhone1";
        $lDtl->FindField("Fax1")->AsString        = "New DFax1";
        $lDtl->FindField("Email")->AsString      = "New DEmailAddress";
        $lDtl->Post();
}
try{
$BizObject->Save();
echo "Posting Done <br>";
}catch (Exception $e) {
    echo 'Caught exception: ', $e->getMessage(), "\n";
}
}


  'Step 7 : Logout after done 
if (isset($_POST['BtnData']))
  'ComServer.Logout
{
 
    try
  MsgBox "Done"
    {
End Function
        CheckLogin();
</syntaxhighlight>
        PostData();
|}
        echo date("d M Y h:i:s A") . " - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


<div style="float: right;">   [[#top|[top]]]</div>
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Add/Edit AR Customer"/>
    </form>
</body>
</html>


====Example-AR_Customer-Edit====
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
====Get Stock List====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AR_Customer - Edit Script
! Get Stock List Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg AR_Customer.vbs
<!DOCTYPE html>
Call EditARCustomer
<html>
<head>
Function CreateSQLAccServer
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
</head>
End Function
<body>
 
Function EditARCustomer
<h1>SQL Acc SDK in PHP page</h1>
Dim ComServer, BizObject, lDataSet, lDataSet2
 
<?php
  'Step 1 Create Com Server object
echo "Updated 22 Jun 2020<br>";
  Set ComServer = CreateSQLAccServer 'Create Com Server
#This action to Get Stock Item List
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
 
    ComServer.Login "ADMIN", "ADMIN", "C\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"  
$ComServer = null;
  END IF
 
function CheckLogin()
  'Step 2 Find and Create the Biz Objects
{
  Set BizObject = ComServer.BizObjects.Find("AR_Customer")
     global $ComServer;
     $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
  'Step 3 Set Dataset
     $status = $ComServer->IsLogin();
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet") 'lMainDataSet contains master data
 
  Set lDetailDataSet = BizObject.DataSets.Find("cdsBranch") 'lDetailDataSet contains detail data 
     if ($status == true)
 
    {
  'Step 4 Find Customer Code
        $ComServer->Logout();
  BizObject.Params.Find("Code").Value = "300-Test"
    }
 
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  BizObject.Open
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  BizObject.Edit
                      "ACC-0024.FDB"); #Database Name
  lMainDataSet.Edit
   
  lMainDataSet.FindField("CompanyName").value = "Testing 123-Changed"
}
  'Step 5 For 1st Branch
     v = "BILLING"
     if (lDetailDataSet.Locate("BranchName", v, false, false)) then
  lDetailDataSet.Edit
      lDetailDataSet.FindField("Address1").AsString  = "Address1-Changed"
      lDetailDataSet.FindField("Address2").AsString  = "Address2-Changed"
      lDetailDataSet.FindField("Address3").AsString  = "Address3-Changed"
      lDetailDataSet.FindField("Address4").AsString  = "Address4-Changed"
      lDetailDataSet.FindField("Attention").AsString  = "Attention-Changed"
      lDetailDataSet.FindField("Phone1").AsString     = "Phone1-Changed"
      lDetailDataSet.FindField("Fax1").AsString      = "Fax1-Changed"
      lDetailDataSet.FindField("Email").AsString      = "EmailAddress-Changed"
      lDetailDataSet.Post
end if
'Step 5 For 2nd Branch
    v = "Branch1"
     if (lDetailDataSet.Locate("BranchName", v, false, false)) then
      lDetailDataSet.Edit
      lDetailDataSet.FindField("Address1").AsString  = "DAddress1-Changed"
      lDetailDataSet.FindField("Address2").AsString  = "DAddress2-Changed"
      lDetailDataSet.FindField("Address3").AsString  = "DAddress3-Changed"
      lDetailDataSet.FindField("Address4").AsString  = "DAddress4-Changed"
      lDetailDataSet.FindField("Attention").AsString  = "DAttention-Changed"
      lDetailDataSet.FindField("Phone1").AsString    = "DPhone1-Changed"
      lDetailDataSet.FindField("Fax1").AsString      = "DFax1-Changed"
      lDetailDataSet.FindField("Email").AsString      = "DEmailAddress-Changed"
      lDetailDataSet.Post 
  end IF
  'Step 6 Save Customer
  BizObject.Save
  BizObject.Close
  MsgBox "Done"
End Function
</syntaxhighlight>
|}


<div style="float: right;">   [[#top|[top]]]</div>
function GetData(){
global $ComServer;
    $lSQL = "SELECT A.*, B.UOM, B.RATE, B.REFCOST, B.REFPRICE, B.ISBASE FROM ST_ITEM A
        INNER JOIN ST_ITEM_UOM B ON (A.CODE=B.CODE)
WHERE A.ISACTIVE='T'
";
$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);


====Example-GL.TrialBalance.RO====
    if ($lDataSet->RecordCount > 0) {
{| class="mw-collapsible mw-collapsed wikitable"
$lDataSet->First();
! GL Trial Balance  Report Object Script
$fc = $lDataSet->Fields->Count-1;
echo "<table>";
echo "<tr>";
for ($x = 0; $x <= $fc; $x++) {
#Insert Header
echo "<td>".$lDataSet->Fields->Items($x)->FieldName()."</td>";
}
echo "</tr>";
#Looping Dataset
while (! $lDataSet->Eof()){
echo "<tr>";
    for ($x = 0; $x <= $fc; $x++) {
$lFN = $lDataSet->Fields->Items($x)->FieldName();
    echo "<td>".$lDataSet->FindField($lFN)->AsString()."</td>";
    }
    echo "</tr>";
$lDataSet->Next();
}
echo "</table>"."<br>";
}else {
    echo "Record Not Found";
    }
}
 
if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Get Stock list"/>
    </form>
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_IV====
{| class="mw-collapsible mw-collapsed wikitable"
! AR_IV Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg GL.TrialBalance.RO.vbs
<!DOCTYPE html>
Call GetGLTBData
<html>
<head>
Function CreateSQLAccServer
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
</head>
End Function
<body>
 
Function GetGLTBData
<h1>SQL Acc SDK in PHP page</h1>
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo
 
  'Step 1: Create Com Server object
<?php
  Set ComServer = CreateSQLAccServer 'Create Com Server
echo "Updated 24 Jun 2020<br>";
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
#This action to Post Customer Invoice
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
 
  END IF
$ComServer = null;
 
  'Step 2: Find and Create the Report Objects
function CheckLogin()
  Set RptObject = ComServer.RptObjects.Find("GL.TrialBalance.RO")
{
    global $ComServer;
  'Step 3: Spool parameters
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
  RptObject.Params.Find("AllProject").Value      = true
    $status = $ComServer->IsLogin();
  RptObject.Params.Find("AllAgent").Value        = true
  RptObject.Params.Find("AllArea").Value        = true
  RptObject.Params.Find("LedgerType").Value      = "G" 'G = Legder, S = Debtor, P = Supplier
  'RptObject.Params.Find("ProjectData").Value    = 'Not use if AllArea is true
  RptObject.Params.Find("ShowZeroBalance").Value = false
  RptObject.Params.Find("SortBy").Value          = "PostDate;DocNo"
  RptObject.Params.Find("UseDescription2").Value = false
 
  lDateFrom = CDate("October 27, 2016")
  lDateTo = CDate("December 31, 2016")
  'For Post Date From & Date To'
  RptObject.Params.Find("DateFrom").Value      = lDateFrom
  RptObject.Params.Find("DateTo").Value        = lDateTo


  'RptObject.Params.Find("AgentData").Value      = 'Not use if AllAgent is true
    if ($status == true)
  'RptObject.Params.Find("AreaData").Value      = 'Not use if AllArea is true
    {
 
        $ComServer->Logout();
  RptObject.Params.Find("SortBy").Value          = "Code;Description"  
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  'Step 4: Perform Report calculation
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  RptObject.CalculateReport()
                      "ACC-0070.FDB"); #Database Name
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
   
  Set lDataSet2 = RptObject.DataSets.Find("cdsGLAccount")
}


  MsgBox "Count " & lDataSet.RecordCount
function PostData(){
global $ComServer;
  'Step 5 Retrieve the output
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "Month To Date"
MsgBox lDataSet.FindField("Code").AsString & " DR=>" & lDataSet.FindField("MTDDR").AsString & " CR=>" & lDataSet.FindField("MTDCR").AsString
MsgBox "Year To Date"
$BizObject = $ComServer->BizObjects->Find("AR_IV");
MsgBox lDataSet.FindField("Code").AsString & " DR=>" & lDataSet.FindField("YTDDR").AsString & " CR=>" & lDataSet.FindField("YTDCR").AsString
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
lDataSet.Next
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
  Wend
 
    $BizObject->New();
  'For Account List
    $lMain->FindField("DocKey")->value = -1;
  lDataSet2.First
    $lMain->FindField("DocNo")->AsString = "--IV Test--";
  While (not lDataSet2.eof)
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
MsgBox lDataSet2.FindField("Code").AsString & " " & lDataSet2.FindField("Description").AsString
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
lDataSet2.Next
    $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
  Wend
    $lMain->FindField("Description")->AsString = "Sales";
 
End Function
    #Insert Data - Detail
</syntaxhighlight>
    #For Tax Inclusive = True with override Tax Amount
|}
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("Account")->AsString = "500-000"; #Sales Account
    $lDetail->FindField("Description")->AsString = "Sales Item A";
    $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("Amount")->AsFloat = 410.37; #Exclding GST Amt
    $lDetail->FindField("TaxAmt")->AsFloat = 24.63;


<div style="float: right;">   [[#top|[top]]]</div>
    $lDetail->DisableControls();
    $lDetail->FindField("TaxInclusive")->value = 1;
    $lDetail->EnableControls();   
    $lDetail->Post();
    #For Tax Inclusive = False with override Tax Amount
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 2;
    $lDetail->FindField("Account")->AsString = "500-000";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("Amount")->AsFloat = 94.43;
    $lDetail->FindField("TaxAmt")->AsFloat = 5.66;
    $lDetail->Post();
    $BizObject->Save();
    $BizObject->Close();
}


====Example-Customer.Aging.RO====
if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
PostData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Post Customer Invoice"/>
    </form>
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====Get Outstanding Invoice List====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Customer Aging  Report Object Script
! Get Outstanding Invoice List Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg customer_aging_ro.vbs
<!DOCTYPE html>
Call GetCustStatementData
<html>
<head>
Function CreateSQLAccServer
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
</head>
End Function
<body>
 
<h1>SQL Acc SDK in PHP page</h1>
 
<?php
echo "Updated 24 Jun 2020<br>";
#This action to Get Outstanding Invoice List


Function GetCustStatementData
$ComServer = null;
Const Quote = """"
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo, lAgeData
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF


  'Step 2: Find and Create the Report Objects
function CheckLogin()
  Set RptObject = ComServer.RptObjects.Find("Customer.Aging.RO")  
{
    global $ComServer;
  'Step 3: Spool parameters
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
  lAgeData = "<?xml version=" & Quote & "1.0" & Quote & " standalone=" & Quote & "yes" & Quote & "?>  <DATAPACKET Version=" & Quote & "2.0" & Quote & "><METADATA><FIELDS>" &_
    $status = $ComServer->IsLogin();
      "<FIELD attrname=" & Quote & "ColumnNo" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "ColumnType" & Quote & " fieldtype=" & Quote & "string" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
      "<FIELD attrname=" & Quote & "Param1" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "Param2" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/>" &_
      "<FIELD attrname=" & Quote & "IsLocal" & Quote & " fieldtype=" & Quote & "boolean" & Quote & "/><FIELD attrname=" & Quote & "HeaderScript" & Quote & " fieldtype=" & Quote & "bin.hex" & Quote & " SUBTYPE=" & Quote & "Text" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
      "</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo=" & Quote & "0" & Quote & " ColumnType=" & Quote & "" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "1" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "2" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-1" & Quote & " Param2=" & Quote & "-1" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "3" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-2" & Quote & " Param2=" & Quote & "-2" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "4" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-3" & Quote & " Param2=" & Quote & "-3" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "5" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-4" & Quote & " Param2=" & Quote & "-4" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "6" & Quote & " ColumnType=" & Quote & "B" & Quote & " Param1=" & Quote & "-999999" & Quote & " Param2=" & Quote & "-5" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;" & Quote & "/>" &_
      "</ROWDATA></DATAPACKET>"
  RptObject.Params.Find("ActualGroupBy").Value        = "Code;CompanyName" 'Fixed
'  RptObject.Params.Find("AgentData").Value            =  'Not use if AllAgent is True
  RptObject.Params.Find("AgingData").Value            = lAgeData 'Fixed


  lDateTo = CDate("August 31, 2016")
    if ($status == true)
  RptObject.Params.Find("AgingDate").Value            = lDateTo 
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
   
}


  RptObject.Params.Find("AgingOn").Value              = "I" 'Fixed
function GetData(){
  RptObject.Params.Find("AllAgent").Value            = true
global $ComServer;
  RptObject.Params.Find("AllArea").Value              = true
  RptObject.Params.Find("AllCompany").Value          = false
    $lSQL = "SELECT A.*, B.COMPANYNAME, (A.DOCAMT-A.PAYMENTAMT) OUTSTANDING  FROM AR_IV A
  RptObject.Params.Find("AllCompanyCategory").Value  = true
        INNER JOIN AR_CUSTOMER B ON (A.CODE=B.CODE)  
  RptObject.Params.Find("AllControlAccount").Value    = true
WHERE (A.DOCAMT-A.PAYMENTAMT)<>0
  RptObject.Params.Find("AllCurrency").Value          = true
AND CANCELLED='F'
  RptObject.Params.Find("AllDocProject").Value        = true
";
'  RptObject.Params.Find("AreaData").Value            =  'Not use if AllArea is True
'  RptObject.Params.Find("CompanyCategoryData").Value  =  'Not use if AllCompanyCategory is True
$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);
  RptObject.Params.Find("CompanyData").Value          = "300-A0001"& vbCRLF & "300-C0001" 'Filter by Customer Code 300-A0001 & 300-C0001
'  RptObject.Params.Find("ControlAccountData").Value  =  'Not use if AllControlAccount is True
'  RptObject.Params.Find("CurrencyData").Value        = 'Not use if AllCurrency is True
' RptObject.Params.Find("DocProjectData").Value      =  'Not use if AllDocProject is True
  RptObject.Params.Find("FilterPostDate").Value        = false
'  RptObject.Params.Find("GroupBy").Value              = 'Not use
  RptObject.Params.Find("IncludePDC").Value        = false
  RptObject.Params.Find("IncludeZeroBalance").Value  = false
  RptObject.Params.Find("SortBy").Value              = "Code;CompanyName"
  RptObject.Params.Find("DateTo").Value              = lDateTo


    if ($lDataSet->RecordCount > 0) {
  'Step 4: Perform Report calculation
$lDataSet->First();
  RptObject.CalculateReport()
$fc = $lDataSet->Fields->Count-1;
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
echo "<table>";
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocument")
echo "<tr>";
  MsgBox "Count " & lDataSet.RecordCount
for ($x = 0; $x <= $fc; $x++) {
#Insert Header
echo "<td>".$lDataSet->Fields->Items($x)->FieldName()."</td>";
}
echo "</tr>";
#Looping Dataset
while (! $lDataSet->Eof()){
echo "<tr>";
    for ($x = 0; $x <= $fc; $x++) {
$lFN = $lDataSet->Fields->Items($x)->FieldName();
    echo "<td>".$lDataSet->FindField($lFN)->AsString()."</td>";
    }
    echo "</tr>";
$lDataSet->Next();
}
echo "</table>"."<br>";
}else {
    echo "Record Not Found";
    }
}
 
if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


  'Step 5 Retrieve the output
?>
  lDataSet.First
     <form method="post">         
  While (not lDataSet.eof)
        <input type="submit" name="BtnData"
     MsgBox lDataSet.FindField("Code").AsString & " " & lDataSet.FindField("CompanyName").AsString & " " & lDataSet.FindField("C1").AsString
                value="Get Outstanding Invoice List"/>
lDataSet2.First
     </form>
    While (not lDataSet2.eof)
</body>
  MsgBox lDataSet2.FindField("DocNo").AsString & " " & lDataSet2.FindField("C1").AsString
</html>
  lDataSet2.Next
     Wend
lDataSet.Next
  Wend
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-GL.JE.RO====
====Stock Month End - Weighted Average====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! GL Journal Voucher Report Object Script
! Stock Month End - Weighted Average Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg GLJE_ro.vbs
<!DOCTYPE html>
Call GetCustomerData
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>
 
<h1>SQL Acc SDK in PHP page</h1>
 
<?php
echo "Updated 01 Dec 2021<br>";


Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function


Function GetCustomerData
$ComServer = null;
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF


  'Step 2: Find and Create the Report Objects
function CheckLogin()
  Set RptObject = ComServer.RptObjects.Find("GL.JE.RO")  
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();


  'Step 3: Spool parameters
    if ($status == true)
  RptObject.Params.Find("AllCurrency").Value = true
    {
  RptObject.Params.Find("AllDocProject").Value = true
        $ComServer->Logout();
  RptObject.Params.Find("AllDocument").Value = true
    }
  RptObject.Params.Find("AllItemProject").Value = true
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  RptObject.Params.Find("AllItemArea").Value = true
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  RptObject.Params.Find("AllItemAgent").Value = true
                      "ACC-0024.FDB"); #Database Name
  RptObject.Params.Find("AllDocAgent").Value = true
   
  RptObject.Params.Find("AllDocArea").Value = true
}
  RptObject.Params.Find("AllPaymentMethod").Value = true


  lDateFrom = CDate("December 1, 2017")
function GetData(){
  lDateTo = CDate("December 31, 2017")
#Accuracy : 90% - Due to the figure is base on last run Costing in SQL Accounting
global $ComServer;
    $lSQL = "SELECT A.ItemCode, A.Location, A.Batch,  MAX(B.Seq) AS Seq, 2 AS CostingMethod
        FROM ST_TR A INNER JOIN ST_TR_WMA B ON (A.TRANSNO=B.TRANSNO)
WHERE A.PostDate<='31 Jul 2020'
AND A.ITEMCODE='Adj_Voucher'
GROUP BY A.ItemCode, A.Location, A.Batch
";
$lDataSet1 = $ComServer->DBManager->NewDataSet($lSQL);
$Seq = "";
$lDataSet1->First();
while (! $lDataSet1->Eof()){
$Seq = $Seq.$lDataSet1->FindField("SEQ")->AsString .",";
$lDataSet1->Next();
}


  RptObject.Params.Find("DateFrom").Value = lDateFrom
    $lSQL = "SELECT A.TRANSNO, A.ItemCode, A.Location, A.Batch, B.UTDQty, B.UTDCost FROM ST_TR A
  RptObject.Params.Find("DocDateFrom").Value = lDateFrom
        INNER JOIN ST_TR_WMA B ON (A.TRANSNO=B.TRANSNO)  
  RptObject.Params.Find("DateTo").Value = lDateTo
WHERE A.PostDate<='31 Jul 2020'
  RptObject.Params.Find("DocDateTo").Value = lDateTo
AND A.ITEMCODE='Adj_Voucher'
  RptObject.Params.Find("IncludeCancelled").Value = false
AND B.SEQ IN (".substr_replace($Seq ,"",-1).")  
  RptObject.Params.Find("PrintDocumentStyle").Value = false
AND B.UTDQty<>0
  RptObject.Params.Find("SelectDate").Value = true 'Post Date
ORDER BY A.ItemCode, A.Location, A.Batch
  RptObject.Params.Find("SelectDocDate").Value = false 'Doc Date
";
 
  'Step 4: Perform Report calculation
$lDataSet2 = $ComServer->DBManager->NewDataSet($lSQL);
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
    if ($lDataSet2->RecordCount > 0) {
  Set lDataSet2 = RptObject.DataSets.Find("cdsDetail")
$lDataSet2->First();
  MsgBox "Count " & lDataSet.RecordCount
$fc = $lDataSet2->Fields->Count-1;
echo "<table>";
echo "<tr>";
for ($x = 0; $x <= $fc; $x++) {
#Insert Header
echo "<td>".$lDataSet2->Fields->Items($x)->FieldName()."</td>";
}
echo "</tr>";
#Looping Dataset
while (! $lDataSet2->Eof()){
echo "<tr>";
    for ($x = 0; $x <= $fc; $x++) {
$lFN = $lDataSet2->Fields->Items($x)->FieldName();
    echo "<td>".$lDataSet2->FindField($lFN)->AsString()."</td>";
    }
    echo "</tr>";
$lDataSet2->Next();
}
echo "</table>"."<br>";
}else {
    echo "Record Not Found";
    }
}
 
if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


  'Step 5 Retrieve the output
?>
  lDataSet.First
     <form method="post">         
  While (not lDataSet.eof)
        <input type="submit" name="BtnData"
     MsgBox lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Description").AsString
                value="Month End - WA"/>
lDataSet2.First
     </form>
    While (not lDataSet2.eof)
</body>
  MsgBox lDataSet2.FindField("Code").AsString & " " & lDataSet2.FindField("Description").AsString
</html>
  lDataSet2.Next
     Wend
lDataSet.Next
  Wend
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-SL_CS====
====Stock Month End - FIFO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! SL_CS Script
! Stock Month End - FIFO Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg SL_CS.vbs
<!DOCTYPE html>
Call InsertData
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>


Function CreateSQLAccServer
<h1>SQL Acc SDK in PHP page</h1>
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function


Function InsertData
<?php
Dim ComServer, BizObject, lDataSet, lDataSet2, lDate
echo "Updated 16 Jul 2020<br>";
#This action to Get Outstanding Invoice List


  'Step 1: Create Com Server object
$ComServer = null;
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
  END IF


  'Step 2: Find and Create the Biz Objects
function CheckLogin()
  Set BizObject = ComServer.BizObjects.Find("SL_CS")  
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();


  'Step 3: Set Dataset
    if ($status == true)
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
    {
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data 
        $ComServer->Logout();
 
    }
  'Step 4 : Insert Data - Master
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  lDate = CDate("January 1, 2016")
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  BizObject.New
                      "ACC-0024.FDB"); #Database Name
  lMainDataSet.FindField("DocKey").value = -1
  lMainDataSet.FindField("DocNo").value = "--IV Test--"
  lMainDataSet.FindField("DocDate").value = lDate
  lMainDataSet.FindField("PostDate").value = lDate
  lMainDataSet.FindField("Code").value = "300-C0001" 'Customer Code
  lMainDataSet.FindField("Description").value = "Sales"
      
      
  'Step 5: Insert Data - Detail
}
  'For Tax Inclusive = True with override Tax Amount
 
  lDetailDataSet.Append
function GetData(){
  lDetailDataSet.FindField("DtlKey").value = -1
#Accuracy : 90% - Due to the figure is base on last run Costing in SQL Accounting
  lDetailDataSet.FindField("DocKey").value = -1
global $ComServer;
  lDetailDataSet.FindField("Account").value = "500-000" 'Sales Account Code  & can ignore if had itemcode
  lDetailDataSet.FindField("Description").value =  "Sales Item A"
    $lSQL = "SELECT  A.ItemCode, A.Location, A.Batch, MAX(B.Seq) AS Seq, 1 AS CostingMethod
  lDetailDataSet.FindField("Qty").value = 1
        FROM ST_TR A INNER JOIN ST_TR_FIFO B ON (A.TRANSNO=B.TRANSNO)  
  lDetailDataSet.FindField("Tax").value =  "SR"
WHERE A.PostDate<='31 Jul 2020'
  lDetailDataSet.FindField("TaxInclusive").value = 0
AND A.ItemCode IN ('ANT', 'COVER', 'BOM')
  lDetailDataSet.FindField("UnitPrice").value = 410.37
GROUP BY A.ItemCode, A.Location, A.Batch
  lDetailDataSet.FindField("Amount").value = 410.37
";
  lDetailDataSet.FindField("TaxAmt").value = 24.63
 
$lDataSet1 = $ComServer->DBManager->NewDataSet($lSQL);
  lDetailDataSet.DisableControls
  lDetailDataSet.FindField("TaxInclusive").value = 1
$Seq = "";
  lDetailDataSet.EnableControls
$lDataSet1->First();
 
while (! $lDataSet1->Eof()){
  lDetailDataSet.FindField("Changed").value = "F"
$Seq = $Seq.$lDataSet1->FindField("SEQ")->AsString .",";
  lDetailDataSet.Post
$lDataSet1->Next();
 
}
  'For Tax Inclusive = False with override Tax Amount
 
  lDetailDataSet.Append
    $lSQL = "SELECT A.TRANSNO, A.ItemCode, A.Location, A.Batch, B.QTY, B.COST FROM ST_TR A
  lDetailDataSet.FindField("DtlKey").value = -1
        INNER JOIN ST_TR_FIFO B ON (A.TRANSNO=B.TRANSNO)  
  lDetailDataSet.FindField("DocKey").value = -1
WHERE B.COSTTYPE='U'
  lDetailDataSet.FindField("Account").value = "500-000"
AND A.PostDate<='31 Jul 2020'
  lDetailDataSet.FindField("Description").value =  "Sales Item B"
AND B.SEQ IN (".substr_replace($Seq ,"",-1).")
  lDetailDataSet.FindField("Qty").value =  1
AND A.ItemCode IN ('ANT1.0', 'COVER', 'BOM')
  lDetailDataSet.FindField("Tax").value =  "SR"
AND B.Qty<>0
  lDetailDataSet.FindField("TaxInclusive").value = 0
ORDER BY A.ItemCode, A.Location, A.Batch
  lDetailDataSet.FindField("UnitPrice").value = 94.43
";
  lDetailDataSet.FindField("Amount").value = 94.43
  lDetailDataSet.FindField("TaxAmt").value = 5.66
$lDataSet2 = $ComServer->DBManager->NewDataSet($lSQL);
  lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post
    if ($lDataSet2->RecordCount > 0) {
$lDataSet2->First();
$fc = $lDataSet2->Fields->Count-1;
echo "<table>";
echo "<tr>";
for ($x = 0; $x <= $fc; $x++) {
#Insert Header
echo "<td>".$lDataSet2->Fields->Items($x)->FieldName()."</td>";
}
echo "</tr>";
#Looping Dataset
while (! $lDataSet2->Eof()){
echo "<tr>";
    for ($x = 0; $x <= $fc; $x++) {
$lFN = $lDataSet2->Fields->Items($x)->FieldName();
    echo "<td>".$lDataSet2->FindField($lFN)->AsString()."</td>";
    }
    echo "</tr>";
$lDataSet2->Next();
}
echo "</table>"."<br>";
}else {
    echo "Record Not Found";
    }
#FIFO Detail Key to link with $lDataSet2 & $lDataSet3 is TRANSNO
$Seq = "";
$lDataSet2->First();
while (! $lDataSet2->Eof()){
$Seq = $Seq.$lDataSet2->FindField("TRANSNO")->AsString .",";
$lDataSet2->Next();
}


  'For With Item Code
    $lSQL = "SELECT  TransNo, Cost, SUM(Qty) AS Qty, MIN(CostSeq) AS Seq FROM ST_TR_FIFO
  lDetailDataSet.Append
        WHERE CostType='B'
  lDetailDataSet.FindField("DtlKey").value = -1
AND TRANSNO IN (".substr_replace($Seq ,"",-1).")
  lDetailDataSet.FindField("DocKey").value = -1
GROUP BY TransNo, Cost
  lDetailDataSet.FindField("ItemCode").value = "ANT"
";
  lDetailDataSet.FindField("Description").value = "Sales Item B"
  lDetailDataSet.FindField("Qty").value =  2
$lDataSet3 = $ComServer->DBManager->NewDataSet($lSQL);
  lDetailDataSet.FindField("Tax").value =  "SR"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("UnitPrice").value = 100
  lDetailDataSet.FindField("Amount").value = 200
  lDetailDataSet.FindField("TaxAmt").value = 12
  lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post


  'Step 6: Save Document
    if ($lDataSet3->RecordCount > 0) {
  BizObject.Save
$lDataSet3->First();
  BizObject.Close
$fc = $lDataSet3->Fields->Count-1;
  ComServer.Logout
echo "<table>";
  MsgBox "Done"
echo "<tr>";
End Function
for ($x = 0; $x <= $fc; $x++) {
</syntaxhighlight>
#Insert Header
|}
echo "<td>".$lDataSet3->Fields->Items($x)->FieldName()."</td>";
}
echo "</tr>";
#Looping Dataset
while (! $lDataSet3->Eof()){
echo "<tr>";
    for ($x = 0; $x <= $fc; $x++) {
$lFN = $lDataSet3->Fields->Items($x)->FieldName();
    echo "<td>".$lDataSet3->FindField($lFN)->AsString()."</td>";
    }
    echo "</tr>";
$lDataSet3->Next();
}
echo "</table>"."<br>";
}else {
    echo "Record Not Found";
    }
}


if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        #$ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Month End - FIFO"/>
    </form>
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Customer.PM.RO====
====Add & Edit Stock Item====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Customer.PM.RO Script
! Add & Edit Stock Item Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg Customer.PM.RO.vbs
<!DOCTYPE html>
Call GetARPMData
<html>
<body>
Function CreateSQLAccServer
 
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
<h1>SQL Acc SDK in PHP page</h1>
End Function
 
<?php
Function GetARPMData
echo "Updated 05 Aug 2020<br>";
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
$ComServer = null;
  'Step 1: Create Com Server object
 
  Set ComServer = CreateSQLAccServer 'Create Com Server
function CheckLogin()
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
{
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
    global $ComServer;
  END IF
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();
  'Step 2: Find and Create the Report Objects
 
  Set RptObject = ComServer.RptObjects.Find("Customer.PM.RO")  
    if ($status == true)
   
    {
  'Step 3: Spool parameters
        $ComServer->Logout();
  'RptObject.Params.Find("AgentData").Value              = 'Not use if AllAgent is true
    }
  'RptObject.Params.Find("CompanyCategoryData").Value    = 'Not use if AllCompanyCategory is true
     $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  RptObject.Params.Find("AllAgent").Value                = true
                      "C:\eStream\SQLAccounting\Share\Default.DCF", #DCF file
  RptObject.Params.Find("AllCompanyCategory").Value      = true
                      "ACC-0024.FDB"); #Database Name
  RptObject.Params.Find("AllArea").Value                = true
   
  RptObject.Params.Find("AllCompany").Value              = true
}
  RptObject.Params.Find("AllCurrency").Value            = true
 
  RptObject.Params.Find("AllDocument").Value            = false
function PostData(){
  RptObject.Params.Find("AllPaymentMethod").Value        = true
global $ComServer;
  'RptObject.Params.Find("AreaData").Value                = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyData").Value            = 'Not use if AllCompany is true
$BizObject = $ComServer->BizObjects->Find("ST_ITEM");
  'RptObject.Params.Find("CurrencyData").Value            = 'Not use if AllCurrency is true
    $lMain = $BizObject->DataSets->Find("MainDataSet");
    $lUOM = $BizObject->DataSets->Find("cdsUOM");
$lBarcode = $BizObject->DataSets->Find("cdsBarcode");
$lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY-PHP");
 
if ($lDocKey == null){
        $BizObject->New();
        $lMain->FindField("CODE")->AsString = "FAIRY-PHP";
        $lMain->FindField("DESCRIPTION")->AsString = "FAIRY TAIL";
        $lMain->FindField("STOCKGROUP")->AsString = "DEFAULT";
        $lMain->FindField("STOCKCONTROL")->AsString = "T";
        $lMain->FindField("ISACTIVE")->AsString = "T";
 
        $lUOM->Edit(); #For 1St UOM
        $lUOM->FindField("UOM")->AsString = "PCS";
        $lUOM->FindField("Rate")->AsFloat = 1;
        $lUOM->FindField("RefCost")->AsFloat = 10.2;
        $lUOM->FindField("RefPrice")->AsFloat = 25;
        $lUOM->Post();
 
        $lUOM->Append(); #For 2nd UOM
        $lUOM->FindField("UOM")->AsString = "CTN";
        $lUOM->FindField("Rate")->AsFloat = 12;
        $lUOM->FindField("RefCost")->AsFloat = 102;
        $lUOM->FindField("RefPrice")->AsFloat = 240;
        $lUOM->Post();


  lDateFrom = CDate("January 01, 2017")
        $lBarcode->Append(); #For 1st UOM Barcode
  lDateTo = CDate("December 31, 2017")
        $lBarcode->FindField("BARCODE")->AsString = "123456789";
 
$lBarcode->FindField("UOM")->AsString = "PCS";
  RptObject.Params.Find("DateFrom").Value                = lDateFrom
        $lBarcode->Post();
  RptObject.Params.Find("DateTo").Value                  = lDateTo
  RptObject.Params.Find("DocumentData").Value            = "VCOR-00049"
        $lBarcode->Append(); #For 2nd UOM Barcode
  'RptObject.Params.Find("GroupBy").Value                = 'If you wanted to grouping the data
        $lBarcode->FindField("BARCODE")->AsString = "987654321";
  RptObject.Params.Find("IncludeCancelled").Value        = false
$lBarcode->FindField("UOM")->AsString = "CTN";
  'RptObject.Params.Find("PaymentMethodData").Value      = 'Not use if AllPaymentMethod is true
        $lBarcode->Post();
  RptObject.Params.Find("PrintDocumentStyle").Value      = false
} else{
  RptObject.Params.Find("SelectDate").Value              = true
        $BizObject->Params->Find("Dockey")->AsString = $lDocKey;
  RptObject.Params.Find("ShowUnappliedAmountOnly").Value = false
        $BizObject->Open();
  RptObject.Params.Find("SortBy").Value                  = "PostDate;DocNo;Code"
        $BizObject->Edit();
  RptObject.Params.Find("AllDocProject").Value          = true
        $lMain->FindField("DESCRIPTION")->AsString = "FAIRY TAIL WIZARD";
  RptObject.Params.Find("AllItemProject").Value          = true
  'RptObject.Params.Find("DocProjectData").Value          = 'Not use if AllDocProject is true
$r = $lUOM->RecordCount();
  'RptObject.Params.Find("ItemProjectData").Value        = 'Not use if AllItemProject is true 
$x = 1;
 
while ($x <= $r ){
  'Step 4: Perform Report calculation
$lUOM->First();
  RptObject.CalculateReport()
            $lUOM->Delete();
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
$x++;
  Set lDataSet2 = RptObject.DataSets.Find("cdsKnockOff")
}
  Set lDataSet3 = RptObject.DataSets.Find("cdsKnockOffDetail")
  MsgBox "Count " & lDataSet.RecordCount
$r = $lBarcode->RecordCount();
$x = 1;
  'Step 5 Retrieve the output
while ($x <= $r ){
  lDataSet.First
$lBarcode->First();
  While (not lDataSet.eof)
            $lBarcode->Delete();
    MsgBox lDataSet.FindField("DocKey").AsString & " " &  lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Code").AsString
$x++;
MsgBox "cdsKnockOff Count " & lDataSet2.RecordCount
}
lDataSet2.First
    While (not lDataSet2.eof)
        $lUOM->Append(); #For 1St UOM
  MsgBox lDataSet2.FindField("FromDocKey").AsString & " " & lDataSet2.FindField("DocNo").AsString & " " & lDataSet2.FindField("KOAmt").AsString
        $lUOM->FindField("UOM")->AsString = "PCS"; #Make sure this always same as b4 delete data
  lDataSet2.Next
        $lUOM->FindField("Rate")->AsFloat = 1; #Make sure this always same as b4 delete data
    Wend
        $lUOM->FindField("RefCost")->AsFloat = 22.3;
    MsgBox "cdsKnockOffDetail Count " & lDataSet3.RecordCount
        $lUOM->FindField("RefPrice")->AsFloat = 52;
lDataSet3.First
        $lUOM->Post();
    While (not lDataSet3.eof)
 
      MsgBox lDataSet3.FindField("FromDocKey").AsString & " " & lDataSet3.FindField("DocNo").AsString & " " & lDataSet3.FindField("KOAmt").AsString
        $lUOM->Append(); #For 2nd UOM
    lDataSet3.Next
        $lUOM->FindField("UOM")->AsString = "CTN"; #Make sure this always same as b4 delete data
    Wend
        $lUOM->FindField("Rate")->AsFloat = 12; #Make sure this always same as b4 delete data
lDataSet.Next
        $lUOM->FindField("RefCost")->AsFloat = 102.5;
  Wend
        $lUOM->FindField("RefPrice")->AsFloat = 260.45;
End Function
        $lUOM->Post();
</syntaxhighlight>
|}
        $lBarcode->Append(); #For 1st UOM Barcode
        $lBarcode->FindField("BARCODE")->AsString = "456321789";
$lBarcode->FindField("UOM")->AsString = "PCS";
        $lBarcode->Post();
        $lBarcode->Append(); #For 2nd UOM Barcode
        $lBarcode->FindField("BARCODE")->AsString = "321456987";
$lBarcode->FindField("UOM")->AsString = "CTN";
        $lBarcode->Post();
}
try{
        $BizObject->Save();
        $BizObject->Close();
}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    }
}


<div style="float: right;">  [[#top|[top]]]</div>


====Example-Sales.IV.RO====
if (isset($_POST['BtnData']))
{| class="mw-collapsible mw-collapsed wikitable"
{
! Sales.IV.RO Script 
    try
|-
    {
|
        CheckLogin();
<syntaxhighlight lang="vb">
        echo date("d M Y h:i:s A")." - Begin Posting Stock Item<br>";
'Copy below script & paste to notepad & name it as eg Sales.IV.RO.vbs
        PostData();
Call GetSalesIVData
echo date("d M Y h:i:s A")." - Done<br>";
     }
Function CreateSQLAccServer
    finally
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    {
End Function
        $ComServer->Logout();
        #free the object
Function GetSalesIVData
        $ComServer = null;
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
    }
  'Step 1: Create Com Server object
}
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Sales.IV.RO")
  'Step 3: Spool parameters
  'RptObject.Params.Find("AgentData").Value              = 'Not use if AllAgent is true
  RptObject.Params.Find("AllAgent").Value              = true
  RptObject.Params.Find("AllArea").Value                = true
  RptObject.Params.Find("AllCompany").Value            = false
  RptObject.Params.Find("AllCurrency").Value            = true
  RptObject.Params.Find("AllDocProject").Value          = true
  RptObject.Params.Find("AllDocument").Value            = true
  RptObject.Params.Find("AllItem").Value                = true
  RptObject.Params.Find("AllItemProject").Value        = true
  RptObject.Params.Find("AllLocation").Value            = true
  RptObject.Params.Find("AllStockGroup").Value          = true
  RptObject.Params.Find("AllCompanyCategory").Value     = true
  RptObject.Params.Find("AllBatch").Value              = true
  RptObject.Params.Find("AllTariff").Value              = true 'For Version 776 & above
  'RptObject.Params.Find("TariffData").Value            = 'Not use if TariffData is true - For Version 776 & above
  'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyCategoryData").Value    = 'Not use if AllCompanyCategory is true
  RptObject.Params.Find("CompanyData").Value            = "300-C0001"
  'RptObject.Params.Find("CurrencyData").Value          = 'Not use if AllCurrency is true


  lDateFrom = CDate("January 01, 2017")
?>
  lDateTo = CDate("December 31, 2017")
    <form method="post">         
 
        <input type="submit" name="BtnData"
  RptObject.Params.Find("DateFrom").Value                = lDateFrom
                 value="Add & Edit Stock Item"/>
  RptObject.Params.Find("DateTo").Value                  = lDateTo
     </form>
  'RptObject.Params.Find("DocProjectData").Value          = 'Not use if AllDocProject is true
</body>
  'RptObject.Params.Find("DocumentData").Value            = 'Not use if AllDocument is true
</html>
  'RptObject.Params.Find("GroupBy").Value                 = 'If you wanted to grouping the data
</syntaxhighlight>
  'RptObject.Params.Find("CategoryData").Value            = 'Not use if HasCategory is false
|}
  'RptObject.Params.Find("CategoryTpl").Value            = 'For Internal use only
<div style="float: right;">  [[#top|[top]]]</div>
  RptObject.Params.Find("IncludeCancelled").Value        = false
  RptObject.Params.Find("HasCategory").Value            = false
  'RptObject.Params.Find("ItemData").Value                = 'Not use if AllItem is true
  'RptObject.Params.Find("ItemProjectData").Value        = 'Not use if AllItemProject is true
  'RptObject.Params.Find("LocationData").Value            = 'Not use if AllLocation is true
  'RptObject.Params.Find("ItemCategoryData").Value        = 'For Internal use only
  'RptObject.Params.Find("BatchData").Value              = 'Not use if AllBatch is true
  RptObject.Params.Find("PrintDocumentStyle").Value      = false
  RptObject.Params.Find("SelectDate").Value              = true
  RptObject.Params.Find("SortBy").Value                  = "PostDate;DocNo;Code"
  'RptObject.Params.Find("StockGroupData").Value          = 'Not use if AllStockGroup is true
 
 
  'Step 4: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocDetail")
  MsgBox "Count " & lDataSet.RecordCount
  'Step 5 Retrieve the output
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("DocKey").AsString & " " &  lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Code").AsString
MsgBox "cdsDocDetail Count " & lDataSet2.RecordCount
lDataSet2.First
     While (not lDataSet2.eof)
  MsgBox lDataSet2.FindField("DocKey").AsString & " " & lDataSet2.FindField("ItemCode").AsString & " " & lDataSet2.FindField("Amount").AsString
  lDataSet2.Next
    Wend
lDataSet.Next
  Wend
End Function
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Customer.DueDocument.RO====
====Add Stock Issue====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Customer.DueDocument.RO Script
! Add Stock Issue Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg Customer.DueDocument.RO.vbs
<!DOCTYPE html>
Call GetData
<html>
<body>
Function CreateSQLAccServer
 
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
<h1>SQL Acc SDK in PHP page</h1>
End Function
 
<?php
Function GetData
echo "Updated 21 Oct 2020<br>";
Dim ComServer, RptObject, lDataSet, lDateTo
$ComServer = null;
  'Step 1: Create Com Server object
 
  Set ComServer = CreateSQLAccServer 'Create Com Server
function CheckLogin()
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
{
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
     global $ComServer;
  END IF
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();
  'Step 2: Find and Create the Report Objects
 
  Set RptObject = ComServer.RptObjects.Find("Customer.DueDocument.RO")
    if ($status == true)
    {
  'Step 3: Spool parameters
         $ComServer->Logout();
  'RptObject.Params.Find("AgentData").Value              = 'Not use if AllAgent is true
    }
  RptObject.Params.Find("AllAgent").Value              = true
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  RptObject.Params.Find("AllArea").Value                = true
                      "D:\Happy\DB\Default.DCF", #"C:\eStream\SQLAccounting\Share\Default.DCF", #DCF file
  RptObject.Params.Find("AllCompany").Value            = false
                      "ACC-0024.FDB"); #Database Name
  RptObject.Params.Find("AllCompanyCategory").Value     = true
  RptObject.Params.Find("AllCurrency").Value            = true
  RptObject.Params.Find("AllDocProject").Value          = true
  RptObject.Params.Find("AllItemProject").Value        = true
  'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyCategoryData").Value  = 'Not use if AllCompanyCategory is true
  RptObject.Params.Find("CompanyData").Value            = "300-A0003"
  'RptObject.Params.Find("CurrencyData").Value          = 'Not use if AllCurrency is true
  'RptObject.Params.Find("DocProjectData").Value        = 'Not use if AllDocProject is true
  'RptObject.Params.Find("GroupBy").Value              = 'If you wanted to grouping the data
  'RptObject.Params.Find("ItemProjectData").Value      = 'Not use if AllItemProject is true
  RptObject.Params.Find("PrintContra").Value            = true
  RptObject.Params.Find("PrintCreditNote").Value        = true
  RptObject.Params.Find("PrintDebitNote").Value         = true
  RptObject.Params.Find("PrintInvoice").Value          = true
  RptObject.Params.Find("PrintOverDue").Value          = true
  RptObject.Params.Find("PrintUnDue").Value            = true
  RptObject.Params.Find("ShowForeignCurrency").Value    = true
  RptObject.Params.Find("ShowLocalCurrency").Value      = true
  RptObject.Params.Find("SortBy").Value                = "PostDate;DocNo;Code"
 
  lDateTo = CDate("April 12, 2018")
 
  RptObject.Params.Find("DateTo").Value                = lDateTo
  RptObject.Params.Find("IncludePDCheque").Value        = true 
      
      
  'Step 4: Perform Report calculation
}
  RptObject.CalculateReport()
 
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
function CheckLogin1()
  MsgBox "Count " & lDataSet.RecordCount
{
    global $ComServer;
  'Step 5 Retrieve the output
     $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
  lDataSet.First
   
  While (not lDataSet.eof)
}
     MsgBox "Dockey " & lDataSet.FindField("DocKey").AsString
MsgBox "DocNo " & lDataSet.FindField("DocNo").AsString
MsgBox "DocAmt " & lDataSet.FindField("DocAmt").AsString
MsgBox "Outstanding " & lDataSet.FindField("Outstanding").AsString
MsgBox "Code " & lDataSet.FindField("Code").AsString
lDataSet.Next
  Wend
End Function
</syntaxhighlight>
|}


<div style="float: right;">   [[#top|[top]]]</div>
function PostData(){
global $ComServer;
$BizObject = $ComServer->BizObjects->Find("ST_IS");
    $lMain = $BizObject->DataSets->Find("MainDataSet");
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail");
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "--IS Test--";
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Stock Issue";
    #Insert Data - Detail
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    $lDetail->FindField("Qty")->AsFloat = 2;
    $lDetail->FindField("UOM")->AsString = "BOX";
    $lDetail->Post();


====Example-Customer.IV.RO====
    $lDetail->Append();
{| class="mw-collapsible mw-collapsed wikitable"
     $lDetail->FindField("DtlKey")->value = -1;
! Customer.IV.RO Script 
    $lDetail->FindField("DocKey")->value = -1;
|-
    $lDetail->FindField("Seq")->value = 2;
|
     $lDetail->FindField("ItemCode")->AsString = "N-CHARGER";
<syntaxhighlight lang="vb">
    $lDetail->FindField("Description")->AsString = "NOKIA CHARGER";
'Copy below script & paste to notepad & name it as eg Customer.IV.RO.vbs
    $lDetail->FindField("Qty")->AsFloat = 5;
Call GetData
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->Post();
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    $BizObject->Save();
End Function
    $BizObject->Close();
Function GetData
try{
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
        $BizObject->Save();
  'Step 1: Create Com Server object
        $BizObject->Close();
  Set ComServer = CreateSQLAccServer 'Create Com Server
}catch (Exception $e) {
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    echo 'Caught exception: ',  $e->getMessage(), "\n";
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
    }
  END IF
}
 
  'Step 2: Find and Create the Report Objects
 
  Set RptObject = ComServer.RptObjects.Find("Customer.IV.RO")  
if (isset($_POST['BtnData']))
{
  'Step 3: Spool parameters
     try
  'RptObject.Params.Find("AgentData").Value            = 'Not use if AllAgent is true
    {
  'RptObject.Params.Find("CompanyCategoryData").Value  = 'Not use if AllCompanyCategory is true
        CheckLogin1();
  RptObject.Params.Find("AllAgent").Value              = true
        echo date("d M Y h:i:s A")." - Begin Posting<br>";
  RptObject.Params.Find("AllCompanyCategory").Value     = true
        PostData();
  RptObject.Params.Find("AllArea").Value                = true
echo date("d M Y h:i:s A")." - Done<br>";
  RptObject.Params.Find("AllCompany").Value            = true
    }
  RptObject.Params.Find("AllCurrency").Value            = true
    finally
  RptObject.Params.Find("AllDocument").Value            = false
    {
  RptObject.Params.Find("AllPaymentMethod").Value      = true
        $ComServer->Logout();
  'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
        #free the object
  'RptObject.Params.Find("CompanyData").Value          = 'Not use if AllCompany is true
        $ComServer = null;
  'RptObject.Params.Find("CurrencyData").Value          = 'Not use if AllCurrency is true
    }
 
}
  lDateFrom = CDate("January 01, 2017")
 
  lDateTo = CDate("December 31, 2017")
?>
 
     <form method="post">         
  RptObject.Params.Find("DateFrom").Value                = lDateFrom
        <input type="submit" name="BtnData"
  RptObject.Params.Find("DateTo").Value                  = lDateTo
                value="Add Stock Issue"/>
  RptObject.Params.Find("DocumentData").Value            =  "IV-00012"
     </form>
  'RptObject.Params.Find("GroupBy").Value                = 'If you wanted to grouping the data
</body>
  RptObject.Params.Find("IncludeCancelled").Value        = true
</html>
  'RptObject.Params.Find("PaymentMethodData").Value      = 'Not use if AllPaymentMethod is true
</syntaxhighlight>
  RptObject.Params.Find("PrintDocumentStyle").Value      = false
|}
  RptObject.Params.Find("SelectDate").Value              = true
<div style="float: right;">  [[#top|[top]]]</div>
  RptObject.Params.Find("ShowUnappliedAmountOnly").Value = true
  RptObject.Params.Find("SortBy").Value                  = "DocDate;DocNo;Code"
  RptObject.Params.Find("AllDocProject").Value          = true
  RptObject.Params.Find("AllItemProject").Value          = true
  'RptObject.Params.Find("DocProjectData").Value        = 'Not use if AllDocProject is true
  'RptObject.Params.Find("ItemProjectData  ").Value      = 'Not use if AllItemProject is true
      
  'Step 4: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocDetail")
  MsgBox "Count " & lDataSet.RecordCount
  'Step 5 Retrieve the output
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "DocNo " & lDataSet.FindField("DocNo").AsString
MsgBox "DocAmt " & lDataSet.FindField("DocAmt").AsString
MsgBox "PaymentAmt " & lDataSet.FindField("PaymentAmt").AsString
MsgBox "cdsDocDetail Count " & lDataSet2.RecordCount
lDataSet2.First
     While (not lDataSet2.eof)
  MsgBox "Account " & lDataSet2.FindField("Account").AsString
  MsgBox "Description " & lDataSet2.FindField("Description").AsString
  MsgBox "Amount " & lDataSet2.FindField("Amount").AsString
  lDataSet2.Next
     Wend
lDataSet.Next
  Wend
End Function
</syntaxhighlight>
|}


<div style="float: right;">  [[#top|[top]]]</div>
====Add Points====
 
====Example-Sales.OutstandingSO.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Sales.OutstandingSO.RO Script
! Add Points Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg Sales.OutstandingSO.RO.vbs
<!DOCTYPE html>
Call GetData
<html>
<body>
Function CreateSQLAccServer
 
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
<h1>SQL Acc SDK in PHP page</h1>
End Function
 
<?php
Function GetData
echo "Updated 30 Oct 2020<br>";
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
$ComServer = null;
  'Step 1: Create Com Server object
 
  Set ComServer = CreateSQLAccServer 'Create Com Server
function CheckLogin()
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
{
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
    global $ComServer;
  END IF
     $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();
  'Step 2: Find and Create the Report Objects
 
  Set RptObject = ComServer.RptObjects.Find("Sales.OutstandingSO.RO")  
    if ($status == true)
    {
  'Step 3: Spool parameters
        $ComServer->Logout();
  'RptObject.Params.Find("AgentData").Value            = 'Not use if AllAgent is true
    }
  'RptObject.Params.Find("CompanyCategoryData").Value  = 'Not use if AllCompanyCategory is true
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  'RptObject.Params.Find("LocationData").Value        = 'Not use if AllLocation is true
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  'RptObject.Params.Find("StockGroupData").Value      = 'Not use if AllStockGroup is true
                      "ACC-0024.FDB"); #Database Name
  RptObject.Params.Find("AllAgent").Value              = true
   
  RptObject.Params.Find("AllArea").Value              = true
}
  RptObject.Params.Find("AllCompany").Value            = true
  RptObject.Params.Find("AllDocument").Value          = false
  RptObject.Params.Find("AllItem").Value              = true
  RptObject.Params.Find("AllItemProject").Value        = true
  'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyData").Value          = 'Not use if AllCompany is true
  RptObject.Params.Find("AllTariff").Value              = true 'For Version 776 & above
  'RptObject.Params.Find("TariffData").Value            = 'Not use if TariffData is true - For Version 776 & above


 
function PostData(){
  lDateFrom = CDate("January 01, 2017")
global $ComServer;
  lDateTo = CDate("December 31, 2017")
 
$BizObject = $ComServer->BizObjects->Find("Sales.Points.OPF");
  'RptObject.Params.Find("DateFrom").Value              = lDateFrom
    $lMain = $BizObject->DataSets->Find("Main"); #lMain contains master data
  'RptObject.Params.Find("DateTo").Value                = lDateTo
  'RptObject.Params.Find("DeliveryDateFrom").Value      = lDateFrom
    $BizObject->New();
  'RptObject.Params.Find("DeliveryDateTo").Value        = lDateTo
     $lMain->FindField("DocKey")->value = -1;
  RptObject.Params.Find("DocumentData").Value          = "SO-00007"& vbCRLF & "SO-00009"
    $lMain->FindField("DocNo")->AsString = "--Point Test--";
  'RptObject.Params.Find("GroupBy").Value              = 'If you wanted to grouping the data
     $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
  RptObject.Params.Find("IncludeCancelled").Value      = false
     $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
  'RptObject.Params.Find("ItemData").Value              = 'Not use if AllItem is true
    $lMain->FindField("CompanyName")->AsString = "Cash Sales";
  RptObject.Params.Find("PrintFulfilledItem").Value     = true 'Print transfered info
$lMain->FindField("DESCRIPTION")->AsString = "Points Earn";
  RptObject.Params.Find("PrintOutstandingItem").Value  = true 'Print untransfer info
     $lMain->FindField("FromDocType")->AsString = "CS";
  'RptObject.Params.Find("ItemProjectData").Value      = 'Not use if AllItemProject is true
$lMain->FindField("FromDocNo")->AsString = "CS-01234";
  RptObject.Params.Find("SelectDate").Value            = false
$lMain->FindField("FROMDOCAMT")->AsFloat = 100.10;
  RptObject.Params.Find("SelectDeliveryDate").Value     = false
$lMain->FindField("Points")->AsFloat = 10;
  RptObject.Params.Find("SortBy").Value                = "DocDate;DocNo;Code"
  RptObject.Params.Find("AllDocProject").Value          = true
  RptObject.Params.Find("AllLocation").Value            = true
  RptObject.Params.Find("AllCompanyCategory").Value     = true
  RptObject.Params.Find("AllBatch").Value              = true
  RptObject.Params.Find("HasCategory").Value            = false
  RptObject.Params.Find("AllStockGroup").Value          = true
  'RptObject.Params.Find("CategoryData").Value          = 'For Internal use only
  'RptObject.Params.Find("CategoryTpl").Value          = 'For Internal use only
  'RptObject.Params.Find("ItemCategoryData").Value      = 'For Internal use only
  'RptObject.Params.Find("DocProjectData").Value        = 'Not use if AllDocProject is true
  'RptObject.Params.Find("BatchData").Value            = 'Not use if AllBatch is true
  RptObject.Params.Find("TranferDocFilterDate").Value  = false
 
      
  'Step 4: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsTransfer")
  MsgBox "Count " & lDataSet.RecordCount
  'Step 5 Retrieve the output
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "DocKey " & lDataSet.FindField("DocKey").AsString
MsgBox "DtlKey " & lDataSet.FindField("Dtlkey").AsString
MsgBox "DocNo " & lDataSet.FindField("DocNo").AsString
MsgBox "Item Code " & lDataSet.FindField("ItemCode").AsString
MsgBox "Org Qty " & lDataSet.FindField("SQty").AsString
MsgBox "Outstanding Qty " & lDataSet.FindField("OutstandingQty").AsString
MsgBox "cdsDocDetail Count " & lDataSet2.RecordCount
try{
lDataSet2.First
$BizObject->Save();
    While (not lDataSet2.eof)
}catch (Exception $e) {
      MsgBox "FromDocKey " & lDataSet2.FindField("FromDocKey").AsString
echo 'Caught exception: ',  $e->getMessage(), "\n";
  MsgBox "FromDtlKey " & lDataSet2.FindField("FromDtlkey").AsString
    }
  MsgBox "DocType " & lDataSet2.FindField("DocType").AsString
}
  MsgBox "DocNo " & lDataSet2.FindField("DocNo").AsString
 
  MsgBox "DocDate " & lDataSet2.FindField("DocDate").AsString
 
  MsgBox "Transfer Qty " & lDataSet2.FindField("TransferQty").AsString
if (isset($_POST['BtnData']))
  lDataSet2.Next
{
     Wend
    try
lDataSet.Next
    {
  Wend
        CheckLogin();
End Function
        echo date("d M Y h:i:s A")." - Posting Point<br>";
        PostData();
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Post Point"/>
     </form>
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Common.PaymentMethod.RO====
====AR_CN====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Common.PaymentMethod.RO Script
! AR_CN Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg Common.PaymentMethod.RO.vbs
<!DOCTYPE html>
Call GetInfo
<html>
<head>
Function CreateSQLAccServer
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
</head>
End Function
<body>
Function GetInfo
Dim ComServer, RptObject, lDataSet1, lDataSet2
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Common.PaymentMethod.RO")
  'Step 3: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet1 = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsPaymentAccount") 'You can link with lDataSet1 using Code to get the description


  MsgBox "Count " & lDataSet1.RecordCount
<h1>SQL Acc SDK in PHP page</h1>
 
  'Step 5 Retrieve the output
<?php
  lDataSet1.First
echo "Updated 12 Dec 2020<br>";
  While (not lDataSet1.eof)
#This action to Post Customer Credit Note
MsgBox "Code : " & lDataSet1.FindField("Code").AsString
 
lDataSet1.Next
$ComServer = null;
  Wend   
 
 
function CheckLogin()
  MsgBox "Count " & lDataSet2.RecordCount
{
 
    global $ComServer;
  lDataSet2.First
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
  While (not lDataSet2.eof)
    $status = $ComServer->IsLogin();
MsgBox "Code : " & lDataSet2.FindField("Code").AsString
MsgBox "Description : " & lDataSet2.FindField("Description").AsString
lDataSet2.Next
  Wend   
End Function
</syntaxhighlight>
|}


<div style="float: right;">  [[#top|[top]]]</div>
    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0040.FDB"); #Database Name
   
}


====Example-Common.Agent.RO====
function PostData(){
{| class="mw-collapsible mw-collapsed wikitable"
global $ComServer;
! Common.Agent.RO Script 
|-
$BizObject = $ComServer->BizObjects->Find("AR_CN");
|
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
<syntaxhighlight lang="vb">
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
'Copy below script & paste to notepad & name it as eg Common.Agent.RO.vbs
$lKO = $BizObject->DataSets->Find("cdsKnockOff");
Call GetInfo
    $BizObject->New();
Function CreateSQLAccServer
    $lMain->FindField("DocKey")->value = -1;
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    $lMain->FindField("DocNo")->AsString = "--CN Test1--";
End Function
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
     $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
Function GetInfo
    $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
Dim ComServer, RptObject, lDataSet1
    $lMain->FindField("Description")->AsString = "Sales";
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
    #Insert Data - Detail
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    #For Tax Inclusive = True with override Tax Amount
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
    $lDetail->Append();
  END IF
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
  'Step 2: Find and Create the Report Objects
    $lDetail->FindField("Seq")->value = 1;
  Set RptObject = ComServer.RptObjects.Find("Common.Agent.RO")  
    $lDetail->FindField("Account")->AsString = "510-000"; #Sales Return Account
    $lDetail->FindField("Description")->AsString = "Return Item A";
    $lDetail->FindField("Tax")->AsString = "";
  'Step 3: Perform Report calculation
    $lDetail->FindField("TaxRate")->AsString = "";
  RptObject.CalculateReport()
    $lDetail->FindField("TaxInclusive")->value = 0;
  Set lDataSet1 = RptObject.DataSets.Find("cdsMain")
    $lDetail->FindField("Amount")->AsFloat = 410.37; #Exclding GST Amt
 
    $lDetail->FindField("TaxAmt")->AsFloat = 0;
  MsgBox "Count " & lDataSet1.RecordCount
$lDetail->Post();
  'Step 5 Retrieve the output
  lDataSet1.First
  While (not lDataSet1.eof)
MsgBox "Code : " & lDataSet1.FindField("Code").AsString
MsgBox "Description : " & lDataSet1.FindField("Description").AsString
lDataSet1.Next
  Wend     
End Function
</syntaxhighlight>
|}


<div style="float: right;">   [[#top|[top]]]</div>
    $V = array("IV", "IV-00003");  #DocType, DocNo
       
    if ($lKO->Locate("DocType;DocNo", $V, False, False)){
        $lKO->Edit();
        $lKO->FindField("KOAmt")->AsFloat = 100; #Partial Knock off
        $lKO->FindField("KnockOff")->AsString = "T";
        $lKO->Post();
}
    $BizObject->Save();
    $BizObject->Close();
}


====Example-Stock.Item.RO====
if (isset($_POST['BtnData']))
{| class="mw-collapsible mw-collapsed wikitable"
{
! Stock.Item.RO Script 
     try
|-
    {
|
        CheckLogin();
<syntaxhighlight lang="vb">
PostData();
'Copy below script & paste to notepad & name it as eg Stock.Item.RO.vbs
        echo date("d M Y h:i:s A")." - Done";
Call GetInfo
     }
     finally
Function CreateSQLAccServer
     {
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
        $ComServer->Logout();
End Function
        #free the object
        $ComServer = null;
Function GetInfo
     }
Dim ComServer, RptObject, lDataSet1, lDataSet2, lDateFrom, lDateTo
}
  'Step 1 Create Com Server object
 
  Set ComServer = CreateSQLAccServer 'Create Com Server
?>
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     <form method="post">         
     ComServer.Login "ADMIN", "ADMIN", "C\DB\SQLAcc.DCF", "ACC-0002.FDB"
        <input type="submit" name="BtnData"
  END IF
                value="Post Customer Credit Note"/>
     </form>
  'Step 2 Find and Create the Report Objects
</body>
  Set RptObject = ComServer.RptObjects.Find("Stock.Item.RO")  
</html>
</syntaxhighlight>
  'Step 3 Spool parameters
|}
    RptObject.Params.Find("AllItem").AsBoolean              = true
<div style="float: right;">  [[#top|[top]]]</div>
    RptObject.Params.Find("AllStockGroup").AsBoolean        = true
 
    RptObject.Params.Find("AllCustomerPriceTag").AsBoolean  = true
====SO to DO====
     RptObject.Params.Find("AllSupplierPriceTag").AsBoolean  = true
{| class="mw-collapsible mw-collapsed wikitable"
     'RptObject.Params.Find("CategoryData").AsBlob            =  'Not use
! SO to DO Script
     'RptObject.Params.Find("CategoryTpl").AsBlob            = 'Not use
|-
     'RptObject.Params.Find("CustomerPriceTagData").AsBlob    =  'Not use if AllCustomerPriceTag is True
|
    'RptObject.Params.Find("SupplierPriceTagData").AsBlob    =  'Not use if AllSupplierPriceTag is True
<syntaxhighlight lang="PHP">
<!DOCTYPE html>
     lDateFrom = CDate("January 01, 2017")
<html>
    lDateTo = CDate("December 31, 2017")
<head>
 
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
    'RptObject.Params.Find("DateFrom").AsDate                = lDateFrom 'Not use if SelectDate is False
</head>
    'RptObject.Params.Find("DateTo").AsDate                  = lDateTo
<body>
    RptObject.Params.Find("HasAltStockItem").AsBoolean      = false
 
     RptObject.Params.Find("HasBarcode").AsBoolean          = false
<h1>SQL Acc SDK in PHP page</h1>
    RptObject.Params.Find("HasBOM").AsBoolean              = false
    RptObject.Params.Find("HasCategory").AsBoolean          = false
    RptObject.Params.Find("HasCustomerItem").AsBoolean      = false
    RptObject.Params.Find("HasOpeningBalance").AsBoolean    = false
    RptObject.Params.Find("HasPurchasePrice").AsBoolean    = false
    RptObject.Params.Find("HasSellingPrice").AsBoolean      = false
    RptObject.Params.Find("HasSupplierItem").AsBoolean      = false
    'RptObject.Params.Find("ItemData").AsBlob                = 'Not use if AllItem is True
    'RptObject.Params.Find("ItemCategoryData").AsBlob        = 'Not use if SelectCategory is False
    RptObject.Params.Find("PrintActive").AsBoolean          = true
    RptObject.Params.Find("PrintInActive").AsBoolean        = true
    RptObject.Params.Find("PrintNonStockControl").AsBoolean = true
    RptObject.Params.Find("PrintStockControl").AsBoolean    = true
    RptObject.Params.Find("SelectCategory").AsBoolean      = false
    RptObject.Params.Find("SelectDate").AsBoolean          = false
    RptObject.Params.Find("SortBy").AsString                  = "Code"
    'RptObject.Params.Find("StockGroupData").AsBlob        =  'Not use if AllStockGroup is True 
   
  'Step 4 Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet1 = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsUOM") ' To link Master Data use Code
  MsgBox "Count " & lDataSet1.RecordCount
  'Step 5 Retrieve the output
  lDataSet1.First
  While (not lDataSet1.eof)
    MsgBox "Code " & lDataSet1.FindField("Code").AsString
    MsgBox "Description " & lDataSet1.FindField("Description").AsString
    MsgBox "Balance Qty " & lDataSet1.FindField("BalSQty").AsString
    lDataSet1.Next
  Wend


  MsgBox "Count " & lDataSet2.RecordCount
<?php
  lDataSet2.First
echo "Updated 15 Jan 2021<br>";
  While (not lDataSet2.eof)
#This action to
    MsgBox "Code " & lDataSet2.FindField("Code").AsString
#01. Get Oustanding SO
MsgBox "UOM " & lDataSet2.FindField("UOM").AsString
#02. Post To DO
MsgBox "Rate " & lDataSet2.FindField("Rate").AsString
MsgBox "RefPrice " & lDataSet2.FindField("RefPrice").AsString
    lDataSet2.Next
  Wend
End Function
</syntaxhighlight>
|}


<div style="float: right;">  [[#top|[top]]]</div>
$ComServer = null;


====Example-Stock Item Balance====
function CheckLogin()
{| class="mw-collapsible mw-collapsed wikitable"
{
! Get Stock Item Balance Script  
    global $ComServer;
|-
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
|
    $status = $ComServer->IsLogin();
<syntaxhighlight lang="vb">
 
'Available in Version 5.2018.833.759 & above
    if ($status == true)
'Copy below script & paste to notepad & name it as eg ItemBalance.vbs
    {
Call CheckLogin
        $ComServer->Logout();
Call GetData
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF", #DCF file
                      "ACC-0024.FDB"); #Database Name
   
}
 
function PostData(){
global $ComServer;
    $lSQL = "SELECT Dockey, DocNo,Code, CompanyName, Seq, DtlKey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount,
            COALESCE(Sum(XFQty),0) XFQty, COALESCE((Qty-Sum(XFQty)), Qty) OSQty FROM (
            SELECT A.Dockey, A.DocNo, A.Code, A.CompanyName,
            B.DtlKey, B.Seq, B.ItemCode, B.Qty, B.UOM, B.UnitPrice, B.Disc, B.Amount,
            C.Qty XFQty FROM SL_SO A
            INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY)
            LEFT JOIN ST_XTRANS C ON (A.DOCKEY=C.FROMDOCKEY AND B.DTLKEY=C.FROMDTLKEY
                                      AND C.FROMDOCTYPE='SO')
            WHERE A.DOCNO='SO-00140')
            GROUP BY Dockey, DocNo, Code, CompanyName, Seq, Dtlkey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount
HAVING COALESCE((Qty-Sum(XFQty)), Qty) >0
";
$lDataSet = $ComServer->DBManager->NewDataSet($lSQL); #Get Oustanding SO Qty


Dim ComServer
    if ($lDataSet->RecordCount > 0) {
$BizObject = $ComServer->BizObjects->Find("SL_DO");
        $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
        $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
$lDataSet->First();
$BizObject->New();
$lMain->FindField("DocKey")->value = -1;
$lMain->FindField("DocNo")->AsString = "--DO Test--";
$lMain->FindField("DocDate")->value = "01/20/2021"; #MM/DD/YYYY
$lMain->FindField("PostDate")->value = "01/20/2021"; #MM/DD/YYYY
$lMain->FindField("Code")->AsString = $lDataSet->FindField("Code")->AsString;
$lMain->FindField("CompanyName")->AsString = $lDataSet->FindField("CompanyName")->AsString;
$lMain->FindField("Description")->AsString = "Delivery Order";


Function CreateSQLAccServer
while (! $lDataSet->Eof()){
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    $lDetail->Append();
End Function
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("ItemCode")->AsString = $lDataSet->FindField("ItemCode")->AsString;
    $lDetail->FindField("UOM")->AsString = $lDataSet->FindField("UOM")->AsString;
$lDetail->FindField("Qty")->AsFloat = $lDataSet->FindField("OSQty")->AsFloat;
    $lDetail->FindField("DISC")->value = $lDataSet->FindField("DISC")->value;
    $lDetail->FindField("Tax")->AsString = "";
    $lDetail->FindField("TaxRate")->AsString = "";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("UnitPrice")->AsFloat = $lDataSet->FindField("UnitPrice")->AsFloat;
    $lDetail->FindField("Amount")->AsFloat = $lDataSet->FindField("Amount")->AsFloat;
    $lDetail->FindField("TaxAmt")->AsFloat = 0;
$lDetail->FindField("FromDocType")->AsString = "SO";
$lDetail->FindField("FromDockey")->AsFloat = $lDataSet->FindField("Dockey")->AsFloat;
$lDetail->FindField("FromDtlkey")->AsFloat = $lDataSet->FindField("DtlKey")->AsFloat;
    $lDetail->Post();
$lDataSet->Next();


function CheckLogin
}
  'Step 1: Create Com Server object
        $BizObject->Save();
  Set ComServer = CreateSQLAccServer 'Create Com Server
        $BizObject->Close();
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
}else {
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
     echo "Record Not Found";
                'UserName, Password, DCF full path, Database filename
    }
  END IF
}
End Function


Function GetData
if (isset($_POST['BtnData']))
Dim lDataSet, lSQL
{
  lSQL = "SELECT A.Location, A.Batch, A.ItemCode, B.Description, Sum(A.Qty) Qty FROM ST_TR A "
    try
  lSQL = lSQL & "INNER JOIN ST_ITEM B ON (A.ITEMCODE=B.CODE) "
    {
  lSQL = lSQL & "WHERE B.IsActive='T' "
        CheckLogin();
  lSQL = lSQL & "AND A.PostDate <= '31 Dec 2017' "
PostData();
  lSQL = lSQL & "AND A.ItemCode= 'ANT' "
        echo date("d M Y h:i:s A")." - Done";
  lSQL = lSQL & "GROUP by A.Location, A.Batch, A.ItemCode, B.Description"
    }
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    finally
 
     {
  lDataSet.First
        $ComServer->Logout();
  While (not lDataSet.eof)
        #free the object
    MsgBox "Location : " & lDataSet.FindField("Location").AsString
        $ComServer = null;
     MsgBox "Batch : " & lDataSet.FindField("Batch").AsString
    }
     MsgBox "Item Code : " & lDataSet.FindField("ItemCode").AsString
}
MsgBox "Item Description : " & lDataSet.FindField("Description").AsString
 
MsgBox "Balance Qty : " & lDataSet.FindField("Qty").AsString
?>
lDataSet.Next
     <form method="post">         
  Wend
        <input type="submit" name="BtnData"
End Function
                value="Post SO to DO"/>
    </form>
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-ST_IS====
====ST_AJ====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! ST_IS Script
! ST_AJ Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg StockIssue.vbs
<!DOCTYPE html>
Call CheckLogin
<html>
Call InsertData
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>


Dim ComServer
<h1>SQL Acc SDK in PHP page</h1>


Function CreateSQLAccServer
<?php
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
echo "Updated 08 Feb 2021<br>";
End Function


function CheckLogin
$ComServer = null;
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function


Function InsertData
function CheckLogin()
Dim BizObject, lMain, lDetail, lDate
{
  'Step 2: Find and Create the Biz Objects
    global $ComServer;
  Set BizObject = ComServer.BizObjects.Find("ST_IS")  
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();


  'Step 3: Set Dataset
    if ($status == true)
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
    {
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
        $ComServer->Logout();
 
    }
  'Step 4 : Insert Data - Master
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  lDate = CDate("January 1, 2017")
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  BizObject.New
                      "ACC-0100.FDB"); #Database Name
  lMain.FindField("DocKey").value        = -1
  lMain.FindField("DocNo").AsString      = "--IS Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Description").AsString = "Stock Issue"
      
      
  'Step 5: Insert Data - Detail
}
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Issue out Item A"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.Post


  lDetail.Append
function PostData(){
  lDetail.FindField("DtlKey").value         = -1
global $ComServer;
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("ItemCode").AsString   = "E-BAT"
$BizObject = $ComServer->BizObjects->Find("ST_AJ");
  lDetail.FindField("Description").AsString = "Issue out Item A"
    $lMain = $BizObject->DataSets->Find("MainDataSet");
  lDetail.FindField("Qty").AsFloat         = 4
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail");
  lDetail.Post
  'Step 6: Save Document
    $BizObject->New();
  BizObject.Save
    $lMain->FindField("DocKey")->value = -1;
  BizObject.Close
    $lMain->FindField("DocNo")->AsString = "--AJ Test--";
      
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
  ComServer.Logout 'Logout after done
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
  MsgBox "Done"
    $lMain->FindField("Description")->AsString = "Stock Adjustment";
End Function
    #Insert Data - Detail - Increase Stock Qty
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "ANTENA";
    $lDetail->FindField("Qty")->AsFloat = 2;
    $lDetail->FindField("UOM")->AsString = "BOX";
    $lDetail->Post();
    #Insert Data - Detail - Reduce Stock Qty
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 2;
    $lDetail->FindField("ItemCode")->AsString = "N-CHARGER";
    $lDetail->FindField("Description")->AsString = "NOKIA CHARGER";
    $lDetail->FindField("Qty")->AsFloat = -5;
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->Post();
    $BizObject->Save();
    $BizObject->Close();
try{
        $BizObject->Save();
        $BizObject->Close();
}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    }
}
 
if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
PostData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
     {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Post ST_AJ"/>
    </form>
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-ST_RC====
====Get Stock Serial Number balance====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! ST_RC Script
! Get Stock Serial Number Balance List Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg StockReceived.vbs
<!DOCTYPE html>
Call CheckLogin
<html>
Call InsertData
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>


Dim ComServer
<h1>SQL Acc SDK in PHP page</h1>


Function CreateSQLAccServer
<?php
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
echo "Updated 21 May 2021<br>";
End Function


function CheckLogin
$ComServer = null;
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function


Function InsertData
function CheckLogin()
Dim BizObject, lMain, lDetail, lDate
{
  'Step 2: Find and Create the Biz Objects
    global $ComServer;
  Set BizObject = ComServer.BizObjects.Find("ST_RC")  
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();


  'Step 3: Set Dataset
    if ($status == true)
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
    {
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
        $ComServer->Logout();
 
    }
  'Step 4 : Insert Data - Master
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  lDate = CDate("January 1, 2017")
                      "D:\Happy\DB\Default.DCF",  #"C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  BizObject.New
                      "ACC-0024.FDB"); #Database Name
  lMain.FindField("DocKey").value        = -1
  lMain.FindField("DocNo").AsString      = "--RC Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Description").AsString = "Stock Received"
      
      
  'Step 5: Insert Data - Detail
}
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Received Item A"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UnitCost").AsFloat    = 25.15
  lDetail.Post


  lDetail.Append
function GetData(){
  lDetail.FindField("DtlKey").value        = -1
global $ComServer;
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("ItemCode").AsString    = "E-BAT"
    $lSQL = "SELECT ItemCode, Location, Batch, SerialNumber, SUM(Qty) Qty  FROM ST_TR_SN 
  lDetail.FindField("Description").AsString = "Received Item A"
        GROUP BY ItemCode, Location, Batch, SerialNumber
  lDetail.FindField("Qty").AsFloat          = 4
HAVING SUM(Qty) > 0
  lDetail.FindField("UnitCost").AsFloat     = 54
";
  lDetail.Post 
  'Step 6: Save Document
$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);
  BizObject.Save
 
  BizObject.Close
    if ($lDataSet->RecordCount > 0) {
      
$lDataSet->First();
  ComServer.Logout 'Logout after done
$fc = $lDataSet->Fields->Count-1;
  MsgBox "Done"
echo "<table>";
End Function
echo "<tr>";
for ($x = 0; $x <= $fc; $x++) {
#Insert Header
echo "<td>".$lDataSet->Fields->Items($x)->FieldName()."</td>";
}
echo "</tr>";
#Looping Dataset
while (! $lDataSet->Eof()){
echo "<tr>";
    for ($x = 0; $x <= $fc; $x++) {
$lFN = $lDataSet->Fields->Items($x)->FieldName();
    echo "<td>".$lDataSet->FindField($lFN)->AsString()."</td>";
    }
    echo "</tr>";
$lDataSet->Next();
}
echo "</table>"."<br>";
}else {
     echo "Record Not Found";
    }
}
 
if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
     {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Get SN Balance"/>
    </form>
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-ST_AJ====
====SL_IV-Add, Edit & Delete====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! ST_AJ Script
! Insert, Edit & Delete Invoice Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Copy below script & paste to notepad & name it as eg StockAdjustment.vbs
<!DOCTYPE html>
Call CheckLogin
<html>
Call InsertData
<body>


Dim ComServer
<h1>SQL Acc SDK in PHP page</h1>


Function CreateSQLAccServer
<?php
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
echo "Updated 14 Mar 2022<br>";
End Function
$ComServer = null;


function CheckLogin
function CheckLogin()
  'Step 1: Create Com Server object
{
  Set ComServer = CreateSQLAccServer 'Create Com Server
    global $ComServer;
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
    $status = $ComServer->IsLogin();
                'UserName, Password, DCF full path, Database filename
  END IF
End Function


Function InsertData
    if ($status == true)
Dim BizObject, lMain, lDetail, lDate
    {
  'Step 2: Find and Create the Biz Objects
        $ComServer->Logout();
  Set BizObject = ComServer.BizObjects.Find("ST_AJ")
    }
 
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  'Step 3: Set Dataset
                      "D:\Happy\DB\Default.DCF", #"C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
                      "ACC-0015.FDB"); #Database Name
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value        = -1
  lMain.FindField("DocNo").AsString      = "--AJ Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Description").AsString = "Stock Adjustment"
      
      
  'Step 5: Insert Data - Detail
}
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Adjust IN Item A"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UnitCost").AsFloat    = 25.15 'Only IN need UnitCost
  lDetail.Post


  lDetail.Append
function PostDataIV(){
  lDetail.FindField("DtlKey").value        = -1
global $ComServer;
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("ItemCode").AsString   = "E-BAT"
$BizObject = $ComServer->BizObjects->Find("SL_IV");
  lDetail.FindField("Description").AsString = "Adjust OUT Item A"
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
  lDetail.FindField("Qty").AsFloat          = -4
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
   lDetail.Post 
  'Step 6: Save Document
    #Find IV Number
  BizObject.Save
    $lDocNo = "--IV Test--";
  BizObject.Close
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
   
  ComServer.Logout 'Logout after done
if ($lDocKey != null){
  MsgBox "Done"
        echo "Dockey = ".$lDocKey."<br>";
End Function
$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
</syntaxhighlight>
$BizObject->Open();
|}
        $BizObject->Edit();
        $lMain->Edit();
    $lMain->FindField("DocDate")->value = "02/20/2022"; #MM/DD/YYYY
         $lMain->FindField("PostDate")->value = "02/20/2022"; #MM/DD/YYYY
         $lMain->FindField("CompanyName")->AsString = "Cash Sales-Edited";
        $lMain->FindField("Address1")->AsString = ""; #Optional
        $lMain->FindField("Address2")->AsString = ""; #Optional
        $lMain->FindField("Address3")->AsString = ""; #Optional
        $lMain->FindField("Address4")->AsString = ""; #Optional
        $lMain->FindField("Phone1")->AsString = "";   #Optional
        $lMain->FindField("Description")->AsString = "Sales - Edited";


<div style="float: right;">  [[#top|[top]]]</div>
$r = $lDetail->RecordCount();
$x = 1;
while ($x <= $r ){
$lDetail->First();
            $lDetail->Delete();
$x++;
}
        $lDetail->Append();
        $lDetail->FindField("ItemCode")->AsString = "COVER";
        $lDetail->FindField("Description")->AsString = "Sales Item Cover";
    $lDetail->FindField("UOM")->AsString = "UNIT";
        $lDetail->FindField("Qty")->AsFloat = 3;
        $lDetail->FindField("Tax")->AsString = "";
        $lDetail->FindField("TaxRate")->AsString = "";
        $lDetail->FindField("TaxInclusive")->value = 0;
        $lDetail->FindField("UnitPrice")->AsFloat = 5.60;
        $lDetail->FindField("Amount")->AsFloat = 16.80;
        $lDetail->FindField("TaxAmt")->AsFloat = 0;
        $lDetail->Post();
} else {
      echo "New Invoice<br>";
  $BizObject->New();
      $lMain->FindField("DocKey")->value = -1;
      $lMain->FindField("DocNo")->AsString = $lDocNo;
  $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
  $lMain->FindField("DocDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("PostDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("CompanyName")->AsString = "Cash Sales";
      $lMain->FindField("Address1")->AsString = ""; #Optional
      $lMain->FindField("Address2")->AsString = ""; #Optional
      $lMain->FindField("Address3")->AsString = ""; #Optional
      $lMain->FindField("Address4")->AsString = ""; #Optional
      $lMain->FindField("Phone1")->AsString = "";   #Optional
      $lMain->FindField("Description")->AsString = "Sales";
  #$lMain->FindField('DocAmt')->value = $Amt;
      $lDetail->Append();
      $lDetail->FindField("ItemCode")->AsString = "ANT";
      $lDetail->FindField("Description")->AsString = "Sales Item ANT";
  $lDetail->FindField("UOM")->AsString = "UNIT";
      $lDetail->FindField("Qty")->AsFloat = 1;
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("UnitPrice")->AsFloat = 100;
      $lDetail->FindField("Amount")->AsFloat = 100;
      $lDetail->FindField("TaxAmt")->AsFloat = 0;
      $lDetail->Post();


====Example-ST_XF====
{| class="mw-collapsible mw-collapsed wikitable"
! ST_XF Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg ST_XF.vbs
Call CheckLogin
Call InsertData


Dim ComServer
      $lDetail->Append();
      $lDetail->FindField("ItemCode")->AsString = "BOM";
      $lDetail->FindField("Description")->AsString = "Sales Item BOM";
  $lDetail->FindField("UOM")->AsString = "UNIT";
      $lDetail->FindField("Qty")->AsFloat = 2;
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("UnitPrice")->AsFloat = 150;
      $lDetail->FindField("Amount")->AsFloat = 300;
      $lDetail->FindField("TaxAmt")->AsFloat = 0;
      $lDetail->Post();
}
    $BizObject->Save();
echo date("d M Y h:i:s A")." - Posting Done<br>";
    $BizObject->Close();
}


Function CreateSQLAccServer
function PostDelIV(){
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
global $ComServer;
End Function
$BizObject = $ComServer->BizObjects->Find("SL_IV");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    #Find IV Number
    $lDocNo = "--IV Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
$BizObject->Open();
        $BizObject->Delete();
echo date("d M Y h:i:s A")." - Record deleted<br>";
} else {
echo date("d M Y h:i:s A")." - Document Not Found<br>";
}
}
if (isset($_POST['BtnPost']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Posting<br>";
        PostDataIV();
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


function CheckLogin
if (isset($_POST['BtnDel']))
  'Step 1: Create Com Server object
{
  Set ComServer = CreateSQLAccServer 'Create Com Server
    try
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    {
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
        CheckLogin();
                'UserName, Password, DCF full path, Database filename
        echo date("d M Y h:i:s A")." - Begin Delete<br>";
  END IF
        PostDelIV();
End Function
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
     <form method="post">         
        <input type="submit" name="BtnPost"
                value="Post Sales IV"/>
        <input type="submit" name="BtnDel"
                value="Post Delete IV"/>
    </form>
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL_PV-Add, Edit & Delete====
{| class="mw-collapsible mw-collapsed wikitable"
! Insert, Edit & Delete Invoice Script
|-
|
<syntaxhighlight lang="PHP">
<!DOCTYPE html>
<html>
<body>
 
<h1>SQL Acc SDK in PHP page</h1>


Function InsertData
<?php
Dim BizObject, lMain, lDetail, lDate
echo "Updated 15 Mar 2022<br>";
  'Step 2: Find and Create the Biz Objects
$ComServer = null;
  Set BizObject = ComServer.BizObjects.Find("ST_XF")


  'Step 3: Set Dataset
function CheckLogin()
  Set lMain  = BizObject.DataSets.Find("MainDataSet") 'lMain contains master data
{
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
    global $ComServer;
 
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
  'Begin Looping yr data
    $status = $ComServer->IsLogin();
  'Step 4 : Insert Data - Master
 
  lDate = CDate("January 1, 2017")
    if ($status == true)
  BizObject.New
    {
  lMain.FindField("DocKey").value        = -1
        $ComServer->Logout();
  lMain.FindField("DocNo").AsString      = "--XF Test--"
    }
  lMain.FindField("DocDate").value        = lDate
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  lMain.FindField("PostDate").value      = lDate
                      "D:\Happy\DB\Default.DCF", #"C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account - Optional
                      "ACC-0015.FDB"); #Database Name
  lMain.FindField("CompanyName").AsString = "Cash Sales" 'Optional
  lMain.FindField("Description").AsString = "Stock Transfer"
      
      
  'Step 5: Insert Data - Detail
}
  lDetail.Append
 
  lDetail.FindField("DtlKey").value          = -1
function PostData(){
  lDetail.FindField("DocKey").value          = -1
global $ComServer;
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString  = "Transfer Item A"
$BizObject = $ComServer->BizObjects->Find("GL_PV");
  lDetail.FindField("Qty").AsFloat          = 10
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
  lDetail.FindField("UOM").AsString         = "UNIT"
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
  lDetail.FindField("FromLocation").AsString = "----"
  lDetail.FindField("ToLocation").AsString   = "BALAKONG"
    #Find PV Number
  lDetail.Post
    $lDocNo = "--PV Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
$BizObject->Open();
        $BizObject->Edit();
        $lMain->Edit();
    $lMain->FindField("DocDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("PostDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("Description")->AsString = "Tenaga Malaysia - Edited";
$lMain->FindField("PaymentMethod")->AsString = "310-001"; #GL Bank/Cash account code
$lMain->FindField("CHEQUENUMBER")->AsString = "MBB 123456"; #Optional
$lMain->FindField("Cancelled")->AsString = "F";


  lDetail.Append
$r = $lDetail->RecordCount();
  lDetail.FindField("DtlKey").value          = -1
$x = 1;
  lDetail.FindField("DocKey").value          = -1
while ($x <= $r ){
  lDetail.FindField("ItemCode").AsString     = "HFK"
$lDetail->First();
  lDetail.FindField("Description").AsString = "Transfer Item B"
            $lDetail->Delete();
  lDetail.FindField("Qty").AsFloat           = 5
$x++;
  lDetail.FindField("UOM").AsString         = "UNIT"
}
  lDetail.FindField("FromLocation").AsString = "----"
        $lDetail->Append();
  lDetail.FindField("ToLocation").AsString   = "BALAKONG"
        $lDetail->FindField("Code")->AsString = "907-000";
  lDetail.Post
        $lDetail->FindField("Description")->AsString = "TNB Bill for Feb 2022 - Edited";
        $lDetail->FindField("Tax")->AsString = "";
        $lDetail->FindField("TaxRate")->AsString = "";
        $lDetail->FindField("TaxInclusive")->value = 0;
        $lDetail->FindField("Amount")->AsFloat = 168.80;
        $lDetail->FindField("TaxAmt")->AsFloat = 0;
        $lDetail->Post();
} else {
      echo "New PV<br>";
  $BizObject->New();
      $lMain->FindField("DocKey")->value = -1;
      $lMain->FindField("DocNo")->AsString = $lDocNo;
  $lMain->FindField("DocDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("PostDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("Description")->AsString = "Tenaga Malaysia";
  $lMain->FindField("PaymentMethod")->AsString = "310-001"; #GL Bank/Cash account code
  $lMain->FindField("CHEQUENUMBER")->AsString = "MBB 123456"; #Optional
  $lMain->FindField("Cancelled")->AsString = "F";
      $lDetail->Append();
      $lDetail->FindField("Code")->AsString = "907-000"; #GL Account
      $lDetail->FindField("Description")->AsString = "TNB Bill for Jan 2022";
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("Amount")->AsFloat = 100.80;
      $lDetail->FindField("TaxAmt")->AsFloat = 0;
      $lDetail->Post();


  'Step 6: Save Document
      $lDetail->Append();
  BizObject.Save
      $lDetail->FindField("Code")->AsString = "907-000";
  BizObject.Close
      $lDetail->FindField("Description")->AsString = "TNB Bill for Feb 2022";
 
      $lDetail->FindField("Tax")->AsString = "";
  'Step 7 : Logout after done 
      $lDetail->FindField("TaxRate")->AsString = "";
  'ComServer.Logout
      $lDetail->FindField("TaxInclusive")->value = 0;
 
      $lDetail->FindField("Amount")->AsFloat = 68.00;
  MsgBox "Done"
      $lDetail->FindField("TaxAmt")->AsFloat = 0;
End Function
      $lDetail->Post();
}
    $BizObject->Save();
echo date("d M Y h:i:s A")." - Posting Done<br>";
    $BizObject->Close();
}
 
function DelData(){
global $ComServer;
$BizObject = $ComServer->BizObjects->Find("GL_PV");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    #Find PV Number
    $lDocNo = "--PV Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
$BizObject->Open();
        $BizObject->Delete();
echo date("d M Y h:i:s A")." - Record deleted<br>";
} else {
echo date("d M Y h:i:s A")." - Document Not Found<br>";
}
}
if (isset($_POST['BtnPost']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Posting<br>";
        PostData();
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
if (isset($_POST['BtnDel']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Delete<br>";
        DelData();
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnPost"
                value="Post GL PV"/>
        <input type="submit" name="BtnDel"
                value="Delete PV"/>
    </form>
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-AP_PI-Edit====
====GL_JE-Add, Edit & Delete====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AP_PI Edit Script
! Insert, Edit & Delete Invoice Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Available in Version 5.2018.833.759 & above
<!DOCTYPE html>
'Copy below script & paste to notepad & name it as eg AP_PI.vbs
<html>
Call CheckLogin
<body>
Call GetData
Call PostData


Dim ComServer, lDataSet
<h1>SQL Acc SDK in PHP page</h1>


Function CreateSQLAccServer
<?php
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
echo "Updated 15 Mar 2022<br>";
End Function
$ComServer = null;


function CheckLogin
function CheckLogin()
  'Step 1: Create Com Server object
{
  Set ComServer = CreateSQLAccServer 'Create Com Server
    global $ComServer;
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
    $status = $ComServer->IsLogin();
                'UserName, Password, DCF full path, Database filename
  END IF
End Function


Function GetData
    if ($status == true)
Dim lSQL
    {
  lSQL = "SELECT Dockey FROM PH_PI "
        $ComServer->Logout();
  lSQL = lSQL & "WHERE DocNo='PI-00001' "
    }
  lSQL = lSQL & "AND Code='400-D0001' "
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
End Function
                      "ACC-0015.FDB"); #Database Name
   
}


Function PostData
function PostData(){
Dim BizObject, lMain, lDetail
global $ComServer;
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("PH_PI")  
$BizObject = $ComServer->BizObjects->Find("GL_JE");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
    #Find JE Number
    $lDocNo = "--JE Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
$BizObject->Open();
        $BizObject->Edit();
        $lMain->Edit();
    $lMain->FindField("DocDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("PostDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("Description")->AsString = "Credit Card Charges - Edited";
$lMain->FindField("Cancelled")->AsString = "F";


  'Step 3: Set Dataset
$r = $lDetail->RecordCount();
  Set lMain  = BizObject.DataSets.Find("MainDataSet") 'lMain contains master data
$x = 1;
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
while ($x <= $r ){
 
$lDetail->First();
  'Step 4 : Find Doc Number
            $lDetail->Delete();
  If lDataSet.RecordCount > 0 Then 
$x++;
lDataSet.First
}
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
        $lDetail->Append();
 
        $lDetail->FindField("Code")->AsString = "902-000";
 
        $lDetail->FindField("Description")->AsString = "MBB Credit Card Charges - Edited";
    BizObject.Open
        $lDetail->FindField("Tax")->AsString = "";
    BizObject.Edit
        $lDetail->FindField("TaxRate")->AsString = "";
    lMain.Edit
        $lDetail->FindField("TaxInclusive")->value = 0;
lMain.FindField("Description").AsString = "testing"  
        $lDetail->FindField("LocalDR")->AsFloat = 78.88;
 
$lDetail->FindField("DR")->AsFloat = 78.88; #If Wanted DR <> LocalDR
  'Step 5: Delete all Detail
        $lDetail->FindField("LocalTaxAmt")->AsFloat = 0;
    While lDetail.RecordCount <> 0
        $lDetail->Post();
       lDetail.First
  lDetail.Delete
        $lDetail->Append();
    Wend
        $lDetail->FindField("Code")->AsString = "310-001";
  'Step 6: Append Detail
        $lDetail->FindField("Description")->AsString = "MBB Credit Card Charges - Edited";
    lDetail.Append
        $lDetail->FindField("Tax")->AsString = "";
    lDetail.FindField("DtlKey").value = -1
        $lDetail->FindField("TaxRate")->AsString = "";
    lDetail.FindField("Account").value = "610-2000"
        $lDetail->FindField("TaxInclusive")->value = 0;
    lDetail.FindField("Description").value = "Purchase Item A"
        $lDetail->FindField("LocalCR")->AsFloat = 78.88;
    lDetail.FindField("Tax").value = ""
$lDetail->FindField("CR")->AsFloat = 78.88; #If Wanted CR <> LocalCR
    lDetail.FindField("TaxInclusive").value = 0
        $lDetail->FindField("LocalTaxAmt")->AsFloat = 0;
    lDetail.FindField("Amount").value = 410.37
        $lDetail->Post();
    lDetail.FindField("TaxAmt").value = 0
} else {
    lDetail.Post
      echo "New JE<br>";
 
  $BizObject->New();
  'Step 7: Save Document
      $lMain->FindField("DocKey")->value = -1;
     BizObject.Save
      $lMain->FindField("DocNo")->AsString = $lDocNo;
    BizObject.Close
  $lMain->FindField("DocDate")->value = "02/18/2022"; #MM/DD/YYYY
 
      $lMain->FindField("PostDate")->value = "02/18/2022"; #MM/DD/YYYY
  'Step 8 : Logout after done 
      $lMain->FindField("Description")->AsString = "Credit Card Charges";
    'ComServer.Logout 
  $lMain->FindField("Cancelled")->AsString = "F";
    MsgBox "Done"  
Else
      $lDetail->Append();
MsgBox "Record Not Found"
      $lDetail->FindField("Code")->AsString = "902-000";
  END IF
      $lDetail->FindField("Description")->AsString = "MBB Credit Card Charges";
 
      $lDetail->FindField("Tax")->AsString = "";
End Function
      $lDetail->FindField("TaxRate")->AsString = "";
</syntaxhighlight>
      $lDetail->FindField("TaxInclusive")->value = 0;
|}
       $lDetail->FindField("LocalDR")->AsFloat = 88.88;
  $lDetail->FindField("DR")->AsFloat = 88.88; #If Wanted DR <> LocalDR
      $lDetail->FindField("LocalTaxAmt")->AsFloat = 0;
      $lDetail->Post();
      $lDetail->Append();
      $lDetail->FindField("Code")->AsString = "310-001";
      $lDetail->FindField("Description")->AsString = "MBB Credit Card Charges";
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("LocalCR")->AsFloat = 88.88;
  $lDetail->FindField("CR")->AsFloat = 88.88; #If Wanted CR <> LocalCR
      $lDetail->FindField("LocalTaxAmt")->AsFloat = 0;
      $lDetail->Post();
}
     $BizObject->Save();
echo date("d M Y h:i:s A")." - Posting Done<br>";
    $BizObject->Close();
}


<div style="float: right;">  [[#top|[top]]]</div>
function DelData(){
 
global $ComServer;
====Example-SL_DO to SL_IV====
{| class="mw-collapsible mw-collapsed wikitable"
$BizObject = $ComServer->BizObjects->Find("GL_JE");
! SL_DO to SL_IV Script 
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
|-
|
    #Find JE Number
<syntaxhighlight lang="vb">
    $lDocNo = "--JE Test--";
'Updated 26 Oct 2018
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
'Copy below script & paste to notepad & name it as eg SL_IV.vbs
Call CheckLogin
if ($lDocKey != null){
Call InsertData1
        echo "Dockey = ".$lDocKey."<br>";
Call InsertData2
$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
$BizObject->Open();
        $BizObject->Delete();
echo date("d M Y h:i:s A")." - Record deleted<br>";
} else {
echo date("d M Y h:i:s A")." - Document Not Found<br>";
}
}
if (isset($_POST['BtnPost']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Posting<br>";
        PostData();
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


Dim ComServer
if (isset($_POST['BtnDel']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Delete<br>";
        DelData();
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


Function CreateSQLAccServer
?>
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    <form method="post">         
End Function
        <input type="submit" name="BtnPost"
                value="Post GL JE"/>
        <input type="submit" name="BtnDel"
                value="Delete JE"/>
    </form>
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>


function CheckLogin
====Get Outstanding SO List====
  'Step 1: Create Com Server object
{| class="mw-collapsible mw-collapsed wikitable"
  Set ComServer = CreateSQLAccServer 'Create Com Server
! Get Outstanding SO List Script
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
|-
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
|
                'UserName, Password, DCF full path, Database filename
<syntaxhighlight lang="PHP">
  END IF
<!DOCTYPE html>
End Function
<html>
<body>
 
<h1>SQL Acc SDK in PHP page</h1>
 
<?php
echo "Updated 09 Jun 2022<br>";
$ComServer = null;


Function InsertData1
function CheckLogin()
Dim BizObject, lMain, lDetail, lDate
{
  'Step 2: Find and Create the Biz Objects
    global $ComServer;
  Set BizObject = ComServer.BizObjects.Find("SL_DO")  
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();


  'Step 3: Set Dataset
    if ($status == true)
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
    {
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
         $ComServer->Logout();
 
    }
  'Begin Looping yr data
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
  'Step 4 : Insert Data - Master
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
  lDate = CDate("January 1, 2017")
                      "ACC-0015.FDB"); #Database Name
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString      = "--DO Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  'lMain.FindField("Address1").AsString    = "" 'Optional
  'lMain.FindField("Address2").AsString    = "" 'Optional
  'lMain.FindField("Address3").AsString    = "" 'Optional
  'lMain.FindField("Address4").AsString    = "" 'Optional
  'lMain.FindField("Phone1").AsString      = "" 'Optional
  lMain.FindField("Description").AsString = "Delivery Order"
      
      
  'Step 5: Insert Data - Detail
}
  lDetail.Append
 
  lDetail.FindField("DtlKey").value        = -1
function GetData(){
  lDetail.FindField("DocKey").value        = -1
global $ComServer;
  lDetail.FindField("Seq").value            = 1
  lDetail.FindField("ItemCode").AsString    = "ANT"
    $lSQL = "SELECT Dockey, DocNo,Code, CompanyName, Seq, DtlKey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount,
  lDetail.FindField("Description").AsString = "Sales Item A"
            COALESCE(Sum(XFQty),0) XFQty, COALESCE((Qty-Sum(XFQty)), Qty) OSQty FROM (
  lDetail.FindField("UOM").AsString        = "BOX"
            SELECT A.Dockey, A.DocNo, A.Code, A.CompanyName,
  lDetail.FindField("Qty").AsFloat          = 2
            B.DtlKey, B.Seq, B.ItemCode, B.Qty, B.UOM, B.UnitPrice, B.Disc, B.Amount,
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
            C.Qty XFQty FROM SL_SO A
  lDetail.FindField("Tax").AsString        = "SR"
            INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY)
  lDetail.FindField("TaxRate").AsString    = "6%"
            LEFT JOIN ST_XTRANS C ON (A.DOCKEY=C.FROMDOCKEY AND B.DTLKEY=C.FROMDTLKEY
  lDetail.FindField("TaxInclusive").value  = 0
                                      AND C.FROMDOCTYPE='SO')
  lDetail.FindField("UnitPrice").AsFloat    = 100 
            WHERE A.Cancelled='F')
  lDetail.FindField("Amount").AsFloat      = 200
            GROUP BY Dockey, DocNo, Code, CompanyName, Seq, Dtlkey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount
  lDetail.FindField("TaxAmt").AsFloat      = 12
            HAVING COALESCE((Qty-Sum(XFQty)), Qty) >0
  lDetail.Post
";
$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);


  lDetail.Append
    if ($lDataSet->RecordCount > 0) {
  lDetail.FindField("DtlKey").value        = -1
$lDataSet->First();
  lDetail.FindField("DocKey").value        = -1
$fc = $lDataSet->Fields->Count-1;
  lDetail.FindField("Seq").value            = 2
echo "<table>";
  lDetail.FindField("ItemCode").AsString    = "COVER"
echo "<tr>";
  lDetail.FindField("Description").AsString = "Sales Item B"
for ($x = 0; $x <= $fc; $x++) {
  lDetail.FindField("UOM").AsString        = "UNIT"
#Insert Header
  lDetail.FindField("Qty").AsFloat          = 3
echo "<td>".$lDataSet->Fields->Items($x)->FieldName()."</td>";
  lDetail.FindField("Tax").AsString         = "SR"
}
  lDetail.FindField("TaxRate").AsString    = "6%"
echo "</tr>";
  lDetail.FindField("TaxInclusive").value  = 0
  lDetail.FindField("UnitPrice").AsFloat    = 10 
#Looping Dataset
  lDetail.FindField("Amount").AsFloat      = 30
while (! $lDataSet->Eof()){
  lDetail.FindField("TaxAmt").AsFloat      = 1.80
echo "<tr>";
  lDetail.Post 
    for ($x = 0; $x <= $fc; $x++) {
  'Step 6: Save Document
$lFN = $lDataSet->Fields->Items($x)->FieldName();
  BizObject.Save
    echo "<td>".$lDataSet->FindField($lFN)->AsString()."</td>";
  BizObject.Close
    }
  MsgBox "DO Posting Done"
    echo "</tr>";
End Function
$lDataSet->Next();
}
echo "</table>"."<br>";
}else {
    echo "Record Not Found";
    }
}


Function InsertData2
if (isset($_POST['BtnData']))
Dim BizObject, lMain, lDetail, lDate, lDODtl, lxFer, lSQL, v(2)
{
  'Step 1: Check Is transtered or not
    try
  lSQL = "SELECT DocKey FROM SL_IVDTL "
    {
  lSQL = lSQL & "WHERE FromDockey=(SELECT DocKey FROM SL_DO "  
        CheckLogin();
  lSQL = lSQL & "WHERE DocNo='--DO Test--') "
        echo date("d M Y h:i:s A")." - Get Data<br>";
  Set lxFer = ComServer.DBManager.NewDataSet(lSQL)
        GetData();
echo date("d M Y h:i:s A")." - Done<br>";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}


  if lxFer.RecordCount = 0 then
?>
     'Step 2: Get DO Information
    <form method="post">         
     lSQL = "SELECT * FROM SL_DODTL "
        <input type="submit" name="BtnData"
     lSQL = lSQL & "WHERE Dockey=(SELECT DocKey FROM SL_DO "  
                value="Get Outstanding SO List"/>
     lSQL = lSQL & "WHERE DocNo='--DO Test--') "
     </form>
     Set lDODtl = ComServer.DBManager.NewDataSet(lSQL)  
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
====Get Stock Item Picture====
{| class="mw-collapsible mw-collapsed wikitable"
! Get Stock Item Picture Script
|-
|
<syntaxhighlight lang="PHP">
<!DOCTYPE html>
<html>
<body>
 
<h1>SQL Acc SDK in PHP page</h1>
 
<?php
echo "Updated 14 Sep 2022<br>";
 
$ComServer = null;
 
function CheckLogin()
{
    global $ComServer;
     $ComServer = new COM("SQLAcc.BizApp", null, CP_UTF8) or die("Could not initialise SQLAcc.BizApp object.");
     $status = $ComServer->IsLogin();
 
    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
      
}
 
function GetData(){
    global $ComServer;
    $lSQL = "SELECT Picture FROM ST_ITEM
            WHERE Code='ANT' ";
     $lDataSet = $ComServer->DBManager->NewDataSet($lSQL);
 
    if ($lDataSet->RecordCount > 0) {
$lDataSet->First();
$raw = $lDataSet->FindField('Picture')->Value();
'Step 3: Find and Create the Biz Objects
        $b = [];
    Set BizObject = ComServer.BizObjects.Find("SL_IV")  
        foreach($raw as $p) {
            array_push($b, chr($p));
        }


    'Step 4: Set Dataset
echo '<img src=data:image/*;base64,'.base64_encode(implode($b)).' alt="My Picture" style="width:128px;height:128px">';
    Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
 
    Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data
}else {
 
     echo "Record Not Found";
    'Step 5 : Insert Data - Master
     }
    lDate = CDate("January 1, 2017")
}
    BizObject.New
 
    lMain.FindField("DocKey").value        = -1
if (isset($_POST['BtnData']))
    lMain.FindField("DocNo").AsString      = "--IV Test--"
{
    lMain.FindField("DocDate").value        = lDate
    try
    lMain.FindField("PostDate").value      = lDate
     {
    lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
         CheckLogin();
    lMain.FindField("CompanyName").AsString = "Cash Sales"
        GetData();
    'lMain.FindField("Address1").AsString    = "" 'Optional
echo "<br>";
    'lMain.FindField("Address2").AsString    = "" 'Optional
         echo date("d M Y h:i:s A")." - Done";
    'lMain.FindField("Address3").AsString    = "" 'Optional
     }
     'lMain.FindField("Address4").AsString    = "" 'Optional
     finally
     'lMain.FindField("Phone1").AsString      = "" 'Optional
     {
    lMain.FindField("Description").AsString = "Sales"
         $ComServer->Logout();
   
         #free the object
    'Step 6: Insert Data - Detail
         $ComServer = null;
    v(0) = "COVER"
     }
    v(1) = "UNIT"
}
 
    if (lDODtl.Locate("ItemCode;UOM", v, false, false)) then
?>
      lDetail.Append
    <form method="post">         
      lDetail.FindField("DtlKey").value        = -1
        <input type="submit" name="BtnData"
      lDetail.FindField("DocKey").value        = -1
                value="Get Item Picture"/>
      lDetail.FindField("Seq").value            = 1
     </form>
      lDetail.FindField("ItemCode").AsString    = lDODtl.FindField("ItemCode").AsString
</body>
      lDetail.FindField("Description").AsString = lDODtl.FindField("Description").AsString
</html>
      'lDetail.FindField("Account").AsString     = "500-000" 'If you wanted override the Sales Account Code
</syntaxhighlight>
      lDetail.FindField("UOM").AsString         = lDODtl.FindField("UOM").AsString
|}
  lDetail.FindField("Qty").AsFloat          = lDODtl.FindField("Qty").AsFloat
      lDetail.FindField("DISC").AsString        = lDODtl.FindField("Disc").AsString
      lDetail.FindField("Tax").AsString         = lDODtl.FindField("Tax").AsString
      lDetail.FindField("TaxRate").AsString    = lDODtl.FindField("TaxRate").AsString
      lDetail.FindField("TaxInclusive").value  = lDODtl.FindField("TaxInclusive").Value
      lDetail.FindField("UnitPrice").AsFloat    = lDODtl.FindField("UnitPrice").AsFloat
      lDetail.FindField("Amount").AsFloat      = lDODtl.FindField("Amount").AsFloat
      lDetail.FindField("TaxAmt").AsFloat      = lDODtl.FindField("TaxAmt").AsFloat
  lDetail.FindField("FromDocType").AsString = "DO"
  lDetail.FindField("FromDockey").AsFloat  = lDODtl.FindField("DocKey").AsFloat
  lDetail.FindField("FromDtlkey").AsFloat  = lDODtl.FindField("DtlKey").AsFloat
      lDetail.Post
End IF 
     v(0) = "ANT"
     v(1) = "BOX"
     if (lDODtl.Locate("ItemCode;UOM", v, false, false)) then
      lDetail.Append
      lDetail.FindField("DtlKey").value         = -1
      lDetail.FindField("DocKey").value         = -1
      lDetail.FindField("Seq").value            = 2
      lDetail.FindField("ItemCode").AsString    = lDODtl.FindField("ItemCode").AsString
      lDetail.FindField("Description").AsString = lDODtl.FindField("Description").AsString
      'lDetail.FindField("Account").AsString    = "500-000" 'If you wanted override the Sales Account Code
      lDetail.FindField("UOM").AsString        = lDODtl.FindField("UOM").AsString
  lDetail.FindField("Qty").AsFloat          = lDODtl.FindField("Qty").AsFloat
      lDetail.FindField("DISC").AsString        = lDODtl.FindField("Disc").AsString
      lDetail.FindField("Tax").AsString         = lDODtl.FindField("Tax").AsString
      lDetail.FindField("TaxRate").AsString     = lDODtl.FindField("TaxRate").AsString
      lDetail.FindField("TaxInclusive").value  = lDODtl.FindField("TaxInclusive").Value
      lDetail.FindField("UnitPrice").AsFloat    = lDODtl.FindField("UnitPrice").AsFloat
      lDetail.FindField("Amount").AsFloat      = lDODtl.FindField("Amount").AsFloat
      lDetail.FindField("TaxAmt").AsFloat      = lDODtl.FindField("TaxAmt").AsFloat
  lDetail.FindField("FromDocType").AsString = "DO"
  lDetail.FindField("FromDockey").AsFloat  = lDODtl.FindField("DocKey").AsFloat
  lDetail.FindField("FromDtlkey").AsFloat  = lDODtl.FindField("DtlKey").AsFloat
      lDetail.Post
End IF 
  'Step 7: Save Document
     BizObject.Save
    BizObject.Close
 
  'Step 8 : Logout after done 
  'ComServer.Logout
 
  MsgBox "Posting IV Done"
  else MsgBox "--DO Test-- had been transfered. Posting IV aborted" 
  End IF
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-SL_IV-Edit====
====Customer.Aging.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! SL_IV-Edit Script
! Customer.Aging.RO Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="PHP">
'Available in Version 5.2018.833.759 & above
<!DOCTYPE html>
'Copy below script & paste to notepad & name it as eg SL_IV.vbs
<html>
Call CheckLogin
<head>
Call GetData
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
Call PostData
</head>
<body>
 
<h1>SQL Acc SDK in PHP page</h1>


Dim ComServer, lDataSet
<?php
echo "Updated 26 Sep 2022<br>";


Function CreateSQLAccServer
$ComServer = null;
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function


function CheckLogin
function CheckLogin()
  'Step 1: Create Com Server object
{
  Set ComServer = CreateSQLAccServer 'Create Com Server
    global $ComServer;
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     $ComServer = new COM("SQLAcc.BizApp", null, CP_UTF8) or die("Could not initialise SQLAcc.BizApp object.");
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
    $status = $ComServer->IsLogin();
                'UserName, Password, DCF full path, Database filename
  END IF
End Function


Function GetData
    if ($status == true)
Dim lSQL
    {
  lSQL = "SELECT Dockey FROM SL_IV "
        #$ComServer->Logout();
  lSQL = lSQL & "WHERE DocNo='IV-00010' "
    }
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
End Function
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
   
}


Function PostData
function SetGrid($DataSet){
Dim BizObject, lMain, lDetail
echo "<table>";
  'Step 2: Find and Create the Biz Objects
echo "<tr>";
  Set BizObject = ComServer.BizObjects.Find("SL_IV")  
    $DataSet->First();
$fc = $DataSet->Fields->Count-1;
for ($x = 0; $x <= $fc; $x++) {
#Insert Header
echo "<td>".$DataSet->Fields->Items($x)->FieldName()."</td>";
}
echo "</tr>";
#Looping Dataset
while (! $DataSet->Eof()){
echo "<tr>";
    for ($x = 0; $x <= $fc; $x++) {
$lFN = $DataSet->Fields->Items($x)->FieldName();
    echo "<td>".$DataSet->FindField($lFN)->AsString()."</td>";
    }
    echo "</tr>";
$DataSet->Next();
}
    echo "</table>"."<br>";
}


  'Step 3: Set Dataset
function GetData(){
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
global $ComServer;
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
    $lSQL = '<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS>
  'Step 4 : Find Doc Number
        <FIELD attrname="ColumnNo" fieldtype="i4" required="true"/><FIELD attrname="ColumnType" fieldtype="string" WIDTH="1"/>
  If lDataSet.RecordCount > 0 Then 
            <FIELD attrname="Param1" fieldtype="i4" required="true"/><FIELD attrname="Param2" fieldtype="i4" required="true"/>
lDataSet.First
            <FIELD attrname="IsLocal" fieldtype="boolean"/><FIELD attrname="HeaderScript" fieldtype="bin.hex" SUBTYPE="Text" WIDTH="1"/>
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
            </FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo="0" ColumnType="" Param1="0" Param2="0" IsLocal="FALSE"/>
 
            <ROW ColumnNo="1" ColumnType="A" Param1="0" Param2="0" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;"/>
 
            <ROW ColumnNo="2" ColumnType="A" Param1="-1" Param2="-1" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;"/>
    BizObject.Open
            <ROW ColumnNo="3" ColumnType="A" Param1="-2" Param2="-2" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;"/>
    BizObject.Edit
            <ROW ColumnNo="4" ColumnType="A" Param1="-3" Param2="-3" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;"/>
    lMain.Edit
            <ROW ColumnNo="5" ColumnType="A" Param1="-4" Param2="-4" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;"/>
lMain.FindField("Description").AsString = "Sales - Edited"
            <ROW ColumnNo="6" ColumnType="B" Param1="-999999" Param2="-5" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;"/>
 
            </ROWDATA></DATAPACKET>';
  'Step 5: Delete all Detail
     While lDetail.RecordCount <> 0
$lRptVar = $ComServer->RptObjects->Find('Customer.Aging.RO');
      lDetail.First
$lRptVar->Params->Find('ActualGroupBy')->AsString = 'Code;CompanyName'; #Fixed
  lDetail.Delete
# $lRptVar->Params->Find('AgentData')->AsBlob              = ; #Not use if AllAgent is True
     Wend
    $lRptVar->Params->Find('AgingData')->AsString          = $lSQL;
  'Step 6: Append Detail
    $lRptVar->Params->Find('AgingDate')->AsDate            = '23 Sep 2022';
     lDetail.Append
     $lRptVar->Params->Find('AgingOn')->AsString            = 'I'; #Fixed
     lDetail.FindField("DtlKey").value = -1
    $lRptVar->Params->Find('AllAgent')->AsBoolean          = True;
    lDetail.FindField("Account").value = "500-000"
    $lRptVar->Params->Find('AllArea')->AsBoolean            = True;
    lDetail.FindField("Description").value "Edited Item A"
     $lRptVar->Params->Find('AllCompany')->AsBoolean        = True;
     lDetail.FindField("Tax").value = ""
    $lRptVar->Params->Find('AllCompanyCategory')->AsBoolean = True;
     lDetail.FindField("TaxInclusive").value = 0
     $lRptVar->Params->Find('AllControlAccount')->AsBoolean  = True;
     lDetail.FindField("Amount").value = 410.37
     $lRptVar->Params->Find('AllCurrency')->AsBoolean        = True;
     lDetail.FindField("TaxAmt").value = 0
    $lRptVar->Params->Find('AllDocProject')->AsBoolean      = True;
     lDetail.Post
#    $lRptVar->Params->Find('AreaData')->AsBlob            = ; #Not use if AllArea is True
 
#    $lRptVar->Params->Find('CompanyCategoryData')->AsBlob = ; #Not use if AllCompanyCategory is True
  'Step 7: Save Document
#    $lRptVar->Params->Find('CompanyData')->AsBlob        = ; #Not use if AllCompany is True
    BizObject.Save
#    $lRptVar->Params->Find('ControlAccountData')->AsBlob = ; #Not use if AllControlAccount is True
    BizObject.Close
#    $lRptVar->Params->Find('CurrencyData')->AsBlob        = ; #Not use if AllCurrency is True
 
#    $lRptVar->Params->Find('DocProjectData')->AsBlob      = ; #Not use if AllDocProject is True
  'Step 8 : Logout after done 
     $lRptVar->Params->Find('FilterPostDate')->AsBoolean      = True;
    'ComServer.Logout 
#    $lRptVar->Params->Find('GroupBy
     MsgBox "Done"  
     $lRptVar->Params->Find('IncludePDC')->AsBoolean        = False;
Else
     $lRptVar->Params->Find('IncludeZeroBalance')->AsBoolean = False;
MsgBox "Record Not Found"  
     $lRptVar->Params->Find('SortBy')->AsString              = 'Code;CompanyName';
  END IF
     $lRptVar->Params->Find('DateTo')->AsDate                = '23 Sep 2022';
End Function
    $lRptVar->Params->Find('IncludeKnockedOffDetail')->AsBoolean = False;
</syntaxhighlight>
|}
$lRptVar->CalculateReport();
<div style="float: right;">  [[#top|[top]]]</div>
$lDataSetHdr = $lRptVar->DataSets->Find('cdsAgingHeader');
$lDataSet = $lRptVar->DataSets->Find('cdsMain');
$lDataSet2 = $lRptVar->DataSets->Find('cdsDocument');
$lDataSetCO = $lRptVar->DataSets->Find('cdsCompany');
 
     if ($lDataSet->RecordCount > 0) {
echo "Header"."<br>";
SetGrid($lDataSetHdr);
echo "Main Data"."<br>";
SetGrid($lDataSet);
echo "Detail Invoice"."<br>";
SetGrid($lDataSet2);
 
echo "Company Information"."<br>";
SetGrid($lDataSetCO);
 
}else {
    echo "Record Not Found";
    }
}


====Example-GL_JE====
if (isset($_POST['BtnData']))
{| class="mw-collapsible mw-collapsed wikitable"
{
! GL_JE Script 
    try
|-
    {
|  
        CheckLogin();
<syntaxhighlight lang="vb">
        GetData();
'Copy below script & paste to notepad & name it as eg GL_JE.vbs
echo "<br>";
Call InsertGLJE
        echo date("d M Y h:i:s A")." - Done";
    }
Function CreateSQLAccServer
    finally
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    {
End Function
        #$ComServer->Logout();
        #free the object
Function InsertGLJE
        $ComServer = null;
Dim ComServer, BizObject, lDataSet, lDataSet2, lDate
    }
   
}
   'Step 1: Create Com Server object
 
   Set ComServer = CreateSQLAccServer 'Create Com Server
?>
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    <form method="post">         
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
        <input type="submit" name="BtnData"
   END IF
                value="Get AR Aging"/>
    </form>
   'Step 2: Find and Create the Biz Objects
</body>
  Set BizObject = ComServer.BizObjects.Find("GL_JE")
</html>
</syntaxhighlight>
  'Step 3: Set Dataset
|}
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
<div style="float: right;">  [[#top|[top]]]</div>
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data 
<br>
    
 
  'Step 4 : Insert Data - Master
===Node JS===
  lDate = CDate("January 23, 2017")
: Module Require in Node JS
   BizObject.New
:- Winax (Mandatory) -> npm install winax
   lMainDataSet.FindField("DocKey").value = -1
 
  lMainDataSet.FindField("DocNo").value = "--JV Test--"
====Common====
  lMainDataSet.FindField("DocDate").value = lDate
* Common.js file for example code
  lMainDataSet.FindField("PostDate").value = lDate
 
  lMainDataSet.FindField("Description").value = "testing desc header"
{| class="mw-collapsible mw-collapsed wikitable"
  lMainDataSet.Post
! Common Function
 
|-
  'Step 5: Insert Data - Detail
|  
  'For Tax Inclusive
<syntaxhighlight lang="nodejsrepl">
  lDetailDataSet.Append
/* Updated 31 Jul 2023 */
  lDetailDataSet.FindField("DtlKey").value = -1
var winax = require('C:\\node_js\\node_modules\\winax'); /* Path where you install winax */
  lDetailDataSet.FindField("DocKey").value = -1
var cp = require('child_process');
  lDetailDataSet.FindField("SEQ").value = 1
 
  lDetailDataSet.FindField("Code").value = "610-1000"
exports.KillApp = function KillApp(){
  lDetailDataSet.FindField("Project").value = "----"
cp.exec('start cmd.exe /C "taskkill /IM "SQLACC.exe" /F"');
  lDetailDataSet.FindField("Description").value =  "testing desc1"
}
  lDetailDataSet.FindField("Tax").value =  "TX"
 
  'lDetailDataSet.FindField("LOCALTAXAMT").value = 17.32 //For JE you can't override (i.e. system auto calc)
exports.CreateSQLAccServer = function CreateSQLAccServer() {  
  lDetailDataSet.FindField("TaxInclusive").Value = 1
   var ComServer;
  lDetailDataSet.FindField("LocalDR").value = 306 '//Including GST if TAXINCLUSIVE = 1
   ComServer = new winax.Object('SQLAcc.BizApp');
  lDetailDataSet.FindField("DR").value = 306 '//If wanted DR <> LocalDR
   if (!ComServer.IsLogin) {          /* check whether user has logon */
  lDetailDataSet.FindField("Changed").value = "F"
     ComServer.Login('ADMIN', 'ADMIN', /* UserName, Password */
    
/* 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', */
  'For Tax Exclusive
'D:\\Happy\\DB\\DEFAULT.DCF', /* DCF File */
  lDetailDataSet.Append
'ACC-0024.FDB'); /* FDB Name */
  lDetailDataSet.FindField("DtlKey").value = -1
   }
  lDetailDataSet.FindField("DocKey").value = -1
   return ComServer;
  lDetailDataSet.FindField("SEQ").value = 2
}
  lDetailDataSet.FindField("Code").value = "605-200"
 
  lDetailDataSet.FindField("Project").value = "----"
exports.ShowResult = function ShowResult(ADataset){
  lDetailDataSet.FindField("Description").value = "testing desc2"
   var fc, fn, fv, lresult;
  lDetailDataSet.FindField("Tax").value =  "TX"
   ADataset.First;
  lDetailDataSet.FindField("TaxInclusive").value =  0
   while (!ADataset.Eof){
  lDetailDataSet.FindField("LocalCR").value = 100
  fc = ADataset.Fields.Count;
  lDetailDataSet.FindField("Changed").value = "F"
  for (let i = 0; i < fc; i++) {
  lDetailDataSet.Post
  fn = ADataset.Fields.Items(i).FieldName;
          fv = ADataset.FindField(fn).AsString;
  lresult = "Index : "+ i + " FieldName : " + fn + " Value : " + fv;
  console.log(lresult);
      }
  console.log("====");
      ADataset.Next();  
   }
}
 
exports.ShowMsg = function ShowMsgShowMsg(AMsg){
    try {
        var WSH = new winax.Object('WScript.Shell');
        WSH.popup(AMsg);
    } catch (e) {
        console.log(e);
    }
}


  'For No GST
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("SEQ").value = 3
  lDetailDataSet.FindField("Code").value = "610-002"
  lDetailDataSet.FindField("Project").value = "----"
  lDetailDataSet.FindField("Description").value =  "testing desc3"
  lDetailDataSet.FindField("Tax").value =  ""
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("LocalCR").value = 200
  lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "Done"
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-GL_JE-Edit====
====Get Company Profile====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! GL_JE-Edit Script 
! Get Company Profile
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="nodejsrepl">
'Available in Version 5.2018.833.759 & above
/* Updated 22 Jul 2023 */
'Copy below script & paste to notepad & name it as eg GL_JE.vbs
var Common = require('./Common');
Call CheckLogin
var ComServer, lDataSet;
Call GetData
Call PostData


Dim ComServer, lDataSet
function GetData() {
  var lSQL;
  lSQL = "SELECT COMPANYNAME, REMARK, BRN, BRN2, GSTNO, ";
  lSQL = lSQL + "SALESTAXNO, SERVICETAXNO, ";
  lSQL = lSQL + "ADDRESS1,ADDRESS2,ADDRESS3,ADDRESS4 FROM SY_PROFILE ";
  lDataSet = ComServer.DBManager.NewDataSet(lSQL); 
 
  Common.ShowResult(lDataSet);
}


Function CreateSQLAccServer
try{
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
ComServer = Common.CreateSQLAccServer();
End Function
GetData();
ComServer.Logout();
} catch(e){
console.error(e.message)
} finally {
Common.KillApp();
}
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>


function CheckLogin
====Complete Post====
  'Step 1: Create Com Server object
{| class="mw-collapsible mw-collapsed wikitable"
  Set ComServer = CreateSQLAccServer 'Create Com Server
! Complete Post
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
|-
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
|
                'UserName, Password, DCF full path, Database filename
<syntaxhighlight lang="nodejsrepl">
  END IF
/* Updated 22 Jul 2023
End Function
This will doing following posting
01. Cash Sales
02. Sales Credit Note
03. Customer Payment With Knock off
04. Edit Credit Note Posted in Step 02 & Knock Off
05. Customer Refund to Knock off Credit Note
*/
var Common = require('./Common');
var ComServer;


Function GetData
function PostDataCS() {
Dim lSQL
   var BizObject, lMain, lDetail;
   lSQL = "SELECT Dockey FROM GL_JE "
   BizObject = ComServer.BizObjects.Find('SL_CS') ;
   lSQL = lSQL & "WHERE DocNo='JV-00002' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function


Function PostData
  lMain  = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
Dim BizObject, lMain, lDetail
   lDetail = BizObject.DataSets.Find('cdsDocDetail'); /*lDetail contains detail data */
   'Step 2: Find and Create the Biz Objects
   Set BizObject = ComServer.BizObjects.Find("GL_JE")  


   'Step 3: Set Dataset
   /*Begin Looping yr data*/
   Set lMain   = BizObject.DataSets.Find("MainDataSet") 'lMain contains master data
   /*Insert Data - Master*/
   Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
   BizObject.New();
    
  lMain.FindField('DocNo').AsString      = "--CS Test--";
   'Step 4 : Find Doc Number
  lMain.FindField('DocDate').value        = "20/12/2022";
   If lDataSet.RecordCount > 0 Then 
  lMain.FindField('PostDate').value      = "20/12/2022";
lDataSet.First
   lMain.FindField('Code').AsString        = "300-C0001"; /*Customer Account*/
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
   lMain.FindField('CompanyName').AsString = "Cash Sales"
   lMain.FindField('Address1').AsString    = ""; /*Optional*/
   lMain.FindField('Address2').AsString    = ""; /*Optional*/
  lMain.FindField('Address3').AsString    = ""; /*Optional*/
  lMain.FindField('Address4').AsString    = ""; /*Optional*/
  lMain.FindField('Phone1').AsString      = ""; /*Optional*/
  lMain.FindField('Description').AsString = "Sales";
    
    
  /*Insert Data - Detail*/
  /*For Tax Inclusive = True with override Tax Amount*/
  lDetail.Append();
  lDetail.FindField('Seq').value            = 1;
  lDetail.FindField('Account').AsString    = "500-000"; /*Sales Account*/
  lDetail.FindField('Description').AsString = "Sales Item A";
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('Tax').AsString        = "SV";
  lDetail.FindField('TaxRate').AsString    = "6%";
  lDetail.FindField('TaxInclusive').value  = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 435;
  lDetail.FindField('Amount').AsFloat      = 410.37; /*Exclding Tax Amt*/
  lDetail.FindField('TaxAmt').AsFloat      = 24.63;
    
    
    BizObject.Open
  lDetail.DisableControls();
    BizObject.Edit
  lDetail.FindField('TaxInclusive').value  = 1;
    lMain.Edit
  lDetail.EnableControls();
lMain.FindField("Description").AsString = "Journal - Edited"
    
    
  'Step 5: Delete all Detail
   lDetail.Post();
    While lDetail.RecordCount <> 0
      lDetail.First
  lDetail.Delete
    Wend
  'Step 6: Append Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value = -1
  lDetail.FindField("Code").value = "610-000"
  lDetail.FindField("Description").value =  "testing desc1"
  lDetail.FindField("Project").value = "P12W1"
  lDetail.FindField("Tax").value =  ""
  lDetail.FindField("TaxInclusive").value =  0
  lDetail.FindField("LocalDR").value = 200
  lDetail.FindField("DR").value = 200
   lDetail.Post  
 
  lDetail.Append
  lDetail.FindField("DtlKey").value = -1
  lDetail.FindField("Code").value = "531-000"
  lDetail.FindField("Description").value =  "testing desc2"
  lDetail.FindField("Project").value = "P13W1"
  lDetail.FindField("Tax").value =  ""
  lDetail.FindField("TaxInclusive").value =  0
  lDetail.FindField("LocalCR").value = 200
  lDetail.FindField("CR").value = 200
  lDetail.Post
    
    
   'Step 7: Save Document
   /*For Tax Inclusive = False with override Tax Amount*/
     BizObject.Save
  lDetail.Append();
     BizObject.Close
  lDetail.FindField('Seq').value            = 2;
  lDetail.FindField('Account').AsString     = "500-000";
  lDetail.FindField('Description').AsString = "Sales Item B";
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('Tax').AsString        = "SV";
  lDetail.FindField('TaxRate').AsString     = "6%";
  lDetail.FindField('TaxInclusive').value  = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 94.43;
  lDetail.FindField('Amount').AsFloat      = 94.43;
  lDetail.FindField('TaxAmt').AsFloat      = 5.66;
  lDetail.Post(); 
    
    
   'Step 8 : Logout after done 
   /*For With Item Code*/
    'ComServer.Logout 
  lDetail.Append();
     MsgBox "Done"  
  lDetail.FindField('Seq').value            = 3;
Else
  lDetail.FindField('ItemCode').AsString    = "ANT";
MsgBox "Record Not Found"  
  lDetail.FindField('Description').AsString = "Sales Item B";
   END IF
  /*lDetail.FindField('Account').AsString     = "500-000"; If you wanted override the Sales Account Code*/
End Function
  lDetail.FindField('Qty').AsFloat          = 2;
</syntaxhighlight>
  lDetail.FindField('UOM').AsString        = "UNIT";
|}
   /*lDetail.FindField('DISC').AsString        = "5%+3"; Optional (eg 5% plus 3 Discount)*/
<div style="float: right;">   [[#top|[top]]]</div>
  lDetail.FindField('Tax').AsString        = "SV";
  lDetail.FindField('TaxRate').AsString    = "6%";
  lDetail.FindField('TaxInclusive').value  = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 100;
  lDetail.FindField('Amount').AsFloat      = 200;
  lDetail.FindField('TaxAmt').AsFloat      = 12;
  lDetail.Post();
 
   /*Save Document*/
  BizObject.Save();
  BizObject.Close(); 
}


====Example-GL_JE-Delete====
function PostDataPM() {
{| class="mw-collapsible mw-collapsed wikitable"
  var BizObject, lMain, lDetail, v;
! GL_JE-Delete Script 
   
|-
  BizObject = ComServer.BizObjects.Find('AR_PM') ;
|
<syntaxhighlight lang="vb">
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg GL_JE.vbs
Call CheckLogin
Call GetData
Call DelData


Dim ComServer, lDataSet
  lMain  = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsKnockOff'); /*lDetail contains detail data */
 
  BizObject.New();
 
  lMain.FindField('DocNo').AsString        = "--PM Test--";
  lMain.FindField('Code').AsString          = "300-C0001";
  lMain.FindField('DocDate').value          = "20/12/2022";
  lMain.FindField('PostDate').value        = "20/12/2022";
  lMain.FindField('Description').AsString  = "Payment for A/";
  lMain.FindField('PaymentMethod').AsString = "320-000"; /*Bank or Cash Account*/
  lMain.FindField('ChequeNumber').AsString  = "";
  lMain.FindField('BankCharge').AsFloat    = 0;
  lMain.FindField('DocAmt').AsFloat        = 200.00;
  lMain.FindField('Cancelled').AsString    = "F";
 
  v = ComServer.CreateOleVariantArray(2);
  v.SetItem(0, 'IV'); /*Knock Off DocType IV or DN*/
  v.SetItem(1, '--CS Test--'); /*Knock Off DocNo*/
 
  if (lDetail.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
      lDetail.Edit();
      lDetail.FindField('KOAmt').AsFloat    = "147.09"; /*Partial Knock Off*/  
      lDetail.FindField('KnockOff').AsString = 'T';
      lDetail.Post();
  }
    /* Save document */ 
  BizObject.Save();
  BizObject.Close();
}


Function CreateSQLAccServer
function PostDataCN() {
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
   var BizObject, lMain, lDetail;
End Function
  BizObject = ComServer.BizObjects.Find('SL_CN') ;
 
  lMain  = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsDocDetail'); /*lDetail contains detail data */


function CheckLogin
  /*Begin Looping yr data*/
   'Step 1: Create Com Server object
  /*Insert Data - Master*/
   Set ComServer = CreateSQLAccServer 'Create Com Server
  BizObject.New();
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
  lMain.FindField('DocNo').AsString      = "--CN Test--";
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
  lMain.FindField('DocDate').value        = "21/12/2022";
                'UserName, Password, DCF full path, Database filename
  lMain.FindField('PostDate').value      = "21/12/2022";
   END IF
  lMain.FindField('Code').AsString        = "300-C0001"; /*Customer Account*/
End Function
  lMain.FindField('CompanyName').AsString = "Cash Sales"
  lMain.FindField('Address1').AsString    = ""; /*Optional*/
  lMain.FindField('Address2').AsString    = ""; /*Optional*/
  lMain.FindField('Address3').AsString    = ""; /*Optional*/
  lMain.FindField('Address4').AsString    = ""; /*Optional*/
  lMain.FindField('Phone1').AsString      = ""; /*Optional*/
  lMain.FindField('Description').AsString = "Sales Returned";
 
  /*Insert Data - Detail*/ 
  /*For With Item Code*/
  lDetail.Append();
   lDetail.FindField('Seq').value            = 1;
   lDetail.FindField('ItemCode').AsString    = "ANT";
  lDetail.FindField('Description').AsString  = "Sales Item B";
   lDetail.FindField('Description2').AsString = "Product Spoil"; /*Reason*/
  lDetail.FindField('Remark1').AsString      = "--IV Test--"; /*Invoice No*/
  lDetail.FindField('Remark2').AsString      = "20 Dec 2022"; /*Invoide Date*/
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('UOM').AsString        = "UNIT";
  lDetail.FindField('Tax').AsString        = "SV";
  lDetail.FindField('TaxRate').AsString    = "6%";
  lDetail.FindField('TaxInclusive').value  = 0;
   lDetail.FindField('UnitPrice').AsFloat    = 100;
  lDetail.FindField('Amount').AsFloat      = 100;
  lDetail.FindField('TaxAmt').AsFloat      = 6;
  lDetail.Post();
 
  /*Save Document*/
  BizObject.Save();
  BizObject.Close(); 
}


Function GetData
function PostKnockIVCN() {
Dim lSQL
   var BizObject, lMain, lDetail, v, lDocNo, lDocKey;
   lSQL = "SELECT Dockey FROM GL_JE "
   
  lSQL = lSQL & "WHERE DocNo='JV-00002' "
   BizObject = ComServer.BizObjects.Find('AR_CN') ;
   Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function


Function DelData
  lMain  = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
Dim BizObject
   lDetail = BizObject.DataSets.Find('cdsKnockOff'); /*lDetail contains detail data */
  'Step 2: Find and Create the Biz Objects
    
   Set BizObject = ComServer.BizObjects.Find("GL_JE")  
  /* Find CN Number */
   'Step 3 : Find Doc Number
   lDocNo = "--CN Test--"
   If lDataSet.RecordCount > 0 Then
  lDocKey = BizObject.FindKeyByRef('DocNo', lDocNo);
lDataSet.First
  BizObject.Params.Find('DocKey').Value = lDocKey;
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
    BizObject.Open
    BizObject.Delete
    BizObject.Close
    
    
   'Step 4 : Logout after done  
   if (lDocKey != null) {
     'ComServer.Logout  
  BizObject.Open();
     MsgBox "Done"  
  BizObject.Edit();
Else
  lMain.Edit();
MsgBox "Record Not Found"
 
  END IF
  v = ComServer.CreateOleVariantArray(2);
End Function
  v.SetItem(0, 'IV'); /*Knock Off DocType IV or DN*/
  v.SetItem(1, '--CS Test--'); /*Knock Off DocNo*/
 
  if (lDetail.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
  lDetail.Edit();
      lDetail.FindField('KOAmt').AsFloat    = "100"; /*Partial Knock Off*/  
      lDetail.FindField('KnockOff').AsString = 'T';
      lDetail.Post();
  }
    /* Save document */ 
  BizObject.Save();
  BizObject.Close();
  }
}
 
function PostDataCF() {
  var BizObject, lMain, lDetail, v;
   
  BizObject = ComServer.BizObjects.Find('AR_CF') ;
 
  lMain  = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsKnockOff'); /*lDetail contains detail data */
 
  BizObject.New();
 
  lMain.FindField('DocNo').AsString        = "--CF Test--";
  lMain.FindField('Code').AsString          = "300-C0001";
  lMain.FindField('DocDate').value          = "24/12/2022";
  lMain.FindField('PostDate').value        = "24/12/2022";
  lMain.FindField('Description').AsString  = "Payment for A/";
  lMain.FindField('PaymentMethod').AsString = "320-000"; /*Bank or Cash Account*/
  lMain.FindField('ChequeNumber').AsString = "";
  lMain.FindField('BankCharge').AsFloat     = 0;
  lMain.FindField('DocAmt').AsFloat        = 6.00;
  lMain.FindField('Cancelled').AsString    = "F";
 
  v = ComServer.CreateOleVariantArray(2);
  v.SetItem(0, 'CN'); /*Knock Off DocType*/
  v.SetItem(1, '--CN Test--'); /*Knock Off DocNo*/
 
  if (lDetail.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
      lDetail.Edit();
      lDetail.FindField('KOAmt').AsFloat    = "4"; /*Partial Knock Off*/  
      lDetail.FindField('KnockOff').AsString = 'T';
      lDetail.Post();
  }
    /* Save document */  
  BizObject.Save();
  BizObject.Close();
}
 
try{
ComServer = Common.CreateSQLAccServer();
console.log("Posting Cash Sales");
     PostDataCS();
    console.log("Posting Payment");
    PostDataPM();
    console.log("Posting Sales CN");
    PostDataCN();
    console.log("Posting Knock Off CN");
    PostKnockIVCN();
    console.log("Posting Customer Refund");
    PostDataCF();
    console.log("Done");
ComServer.Logout();
} catch(e){
console.error(e.message)
} finally {
Common.KillApp();
}
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Get Invoice Next Number====
====Get Picture & Description3(Rich Text)====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Get Invoice Next Number Script
! Get Picture & Description3(Rich Text) Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="nodejsrepl">
'Available in Version 5.2018.833.759 & above
/* Updated 31 Jul 2023 */
'Copy below script & paste to notepad & name it as eg GetNextNo.vbs
var Common = require('./Common');
Call CheckLogin
var ComServer, lDataSet;
Call GetData
const fs = require('fs');
Call ShowNextNo


Dim ComServer, lDataSet
function saveImage(filename, data){
  var myBuffer = new Buffer.alloc(data.length);
  for (var i = 0; i < data.length; i++) {
      myBuffer[i] = data[i];
  }
  fs.writeFile(filename, myBuffer, function(err) {
      if(err) {
          console.log(err);
      } else {
          console.log("The Image file was saved!");
      }
  });
}


Function CreateSQLAccServer
function ExpFile(AFName, AData){
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
const FN = new console.Console(fs.createWriteStream(AFName));
End Function
    FN.log(AData);
}


function CheckLogin
function GetData() {
   'Step 1: Create Com Server object
   var lSQL, txt, rtf;
   Set ComServer = CreateSQLAccServer 'Create Com Server
  lSQL = "SELECT Description3, Picture FROM ST_ITEM ";
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
  lSQL = lSQL + "WHERE Code='ANT' ";
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
   lDataSet = ComServer.DBManager.NewDataSet(lSQL); 
                'UserName, Password, DCF full path, Database filename
 
  END IF
  lDataSet.First;
End Function
  rtf = lDataSet.FindField('Description3').AsString;
   console.log(rtf);
 
  ExpFile('./output.rtf', rtf);
 
  txt = ComServer.Utility.RichTextToPlainText(rtf);
  Common.ShowMsg(txt);
  /* console.log(txt); <= Not support Unicode */
 
  ExpFile('./output.txt', txt); 
  console.log('Done Export');
 
  saveImage("./Pic.jpg", lDataSet.FindField('Picture').Value);
}
 
try{
ComServer = Common.CreateSQLAccServer();
GetData();
ComServer.Logout();
} catch(e){
console.error(e.message)
} finally {
Common.KillApp();
}
</syntaxhighlight>
|}


Function GetData
<div style="float: right;">  [[#top|[top]]]</div>
Dim lSQL
====Get Stock Qty Balance====
  lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A "
{| class="mw-collapsible mw-collapsed wikitable"
   lSQL = lSQL & "INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY) "
! Get Picture & Description3(Rich Text) Script
   lSQL = lSQL & "WHERE A.DOCTYPE='IV' "
|-
   lSQL = lSQL & "AND A.DESCRIPTION='Customer Invoice' "
|
   lSQL = lSQL & "AND A.STATESET=1 "
<syntaxhighlight lang="nodejsrepl">
   Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
/* Updated 18 Jan 2024 */
End Function
var Common = require('./Common');
var ComServer;
 
function GetListData() {
  var lSQL, lDataSet;
   lSQL = "SELECT  ItemCode, Location, Batch, Sum(Qty) Qty  FROM ST_TR  ";
   lSQL = lSQL + "WHERE PostDate<='31 Dec 2019' ";
   lSQL = lSQL + "AND ITEMCODE ='ANT' ";
   lSQL = lSQL + "GROUP BY ItemCode, Location, Batch ";
 
   lDataSet = ComServer.DBManager.NewDataSet(lSQL);
 
  Common.ShowResult(lDataSet);
}


Function ShowNextNo
try{
Dim Desc, Fmt, NextNo, lResult, sb
ComServer = Common.CreateSQLAccServer();
  set sb = CreateObject("System.Text.StringBuilder")
GetListData();
  'Step 2 : Find Doc Number
ComServer.Logout();
  If lDataSet.RecordCount > 0 Then 
} catch(e){
lDataSet.First
console.error(e.message)
    Desc = lDataSet.FindField("Description").AsString
} finally {
Fmt  = lDataSet.FindField("Format").AsString
Common.KillApp();
NextNo = lDataSet.FindField("NEXTNUMBER").Value
}
'Convert from IV-%.5d to IV-{0:d5}
sb.Append_3 Fmt
sb.Replace "d", ""
sb.Replace "%.","{0:d"
Fmt = sb.ToString & "}"
sb.Length = 0 'clear sb list
sb.AppendFormat Fmt, NextNo
lResult = sb.ToString
    MsgBox Desc
MsgBox Fmt
MsgBox NextNo
MsgBox lResult
Else
MsgBox "Record Not Found"
  END IF   
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Auto Run Doc. Number====
====SO to DO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Sales Order Auto Run Doc Number Script
! SO to DO Script  
|-
|-
|  
|  
<syntaxhighlight lang="vb">
<syntaxhighlight lang="nodejsrepl">
'Copy below script & paste to notepad & name it as eg SL_SO.vbs
/*Updated 26 Apr 2024*/
'If had prompt Set Default - Just click Yes to avoid keep prompt
var Common = require('./Common');
Call CheckLogin
var ComServer;
Call GetData
 
Call InsertData
function PostData() {
  var BizObject, lMain, lDetail, lSQL, lDataSet;
 
  lSQL = "SELECT Dockey, DocNo,Code, CompanyName, DocProject, Seq, DtlKey, ItemCode, Description, Qty, UOM, UnitPrice, Disc, Amount, DtlProject, ";
  lSQL = lSQL + "Tax, TaxRate, TaxInclusive, TaxAmt, COALESCE(Sum(XFQty),0) XFQty, COALESCE((Qty-Sum(XFQty)), Qty) OSQty FROM ( ";
  lSQL = lSQL + "SELECT A.Dockey, A.DocNo, A.Code, A.CompanyName, A.Project DocProject, ";
  lSQL = lSQL + "B.DtlKey, B.Seq, B.ItemCode, B.Description, B.Qty, B.UOM, B.UnitPrice, B.Disc, B.Amount, ";
  lSQL = lSQL + "B.Tax, B.TaxRate, B.TaxInclusive, B.TaxAmt, B.Project DtlProject, C.Qty XFQty FROM SL_SO A ";
  lSQL = lSQL + "INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY) ";
  lSQL = lSQL + "LEFT JOIN ST_XTRANS C ON (A.DOCKEY=C.FROMDOCKEY AND B.DTLKEY=C.FROMDTLKEY ";
  lSQL = lSQL + "                          AND C.FROMDOCTYPE='SO') ";
  lSQL = lSQL + "WHERE A.DOCNO='SO-00041') ";
  lSQL = lSQL + "GROUP BY Dockey, DocNo, Code, CompanyName, DocProject, Seq, Dtlkey, ItemCode, Description, Qty, UOM, UnitPrice, Disc, ";
  lSQL = lSQL +" Amount, DtlProject, Tax, TaxRate, TaxInclusive, TaxAmt ";
  lSQL = lSQL + "HAVING COALESCE((Qty-Sum(XFQty)), Qty) >0 ";
 
  lDataSet = ComServer.DBManager.NewDataSet(lSQL);
 
  if (lDataSet.RecordCount > 0) {
  BizObject = ComServer.BizObjects.Find('SL_DO') ;  
  lMain  = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsDocDetail'); /*lDetail contains detail data */  
 
  BizObject.New();
  lMain.FindField('DocNo').AsString      = "<<New>>";
      lMain.FindField('DocDate').value        = "26/04/2024";
      lMain.FindField('PostDate').value      = "26/04/2024";
      lMain.FindField('Code').AsString        = lDataSet.FindField('Code').AsString; /*Customer Account*/
      lMain.FindField('Description').AsString = "Post from 3rd Party";
 
  lDataSet.First;
  while (!lDataSet.Eof){ 
  lDetail.Append();
          lDetail.FindField('Seq').value            = lDataSet.FindField('Seq').Value;
          lDetail.FindField('ItemCode').AsString    = lDataSet.FindField('ItemCode').AsString;
          lDetail.FindField('Description').AsString = lDataSet.FindField('Description').AsString;
          lDetail.FindField('Qty').AsFloat          = lDataSet.FindField('OSQty').AsFloat;/*Transfer all balance Qty*/
          lDetail.FindField('UOM').AsString        = lDataSet.FindField('UOM').AsString;
          lDetail.FindField('DISC').value          = lDataSet.FindField('DISC').AsString;
          lDetail.FindField('Tax').value            = lDataSet.FindField('Tax').AsString;
          lDetail.FindField('TaxRate').value        = lDataSet.FindField('TaxRate').AsString;
          lDetail.FindField('TaxInclusive').value  = lDataSet.FindField('TaxInclusive').value;
          lDetail.FindField('UnitPrice').AsFloat    = lDataSet.FindField('UnitPrice').AsFloat ;
          lDetail.FindField('Amount').AsFloat      = lDataSet.FindField('Amount').AsFloat;
          lDetail.FindField('TaxAmt').AsFloat      = lDataSet.FindField('TaxAmt').AsFloat;
  lDetail.FindField('FromDocType').AsString = "SO"; /*From Document Type*/
          lDetail.FindField('FromDockey').AsFloat  = lDataSet.FindField('Dockey').AsFloat;
          lDetail.FindField('FromDtlkey').AsFloat  = lDataSet.FindField('DtlKey').AsFloat;
          lDetail.Post();
          lDataSet.Next();
  }
      /*Save Document*/
      BizObject.Save();
  BizObject.Close();
  } else
  console.log("Record Not Found");
}
 
 


Dim ComServer, lDataSet
try{
ComServer = Common.CreateSQLAccServer();
console.log("Posting SO to DO");
    PostData();
    console.log("Done");
ComServer.Logout();
} catch(e){
console.error(e.message)
} finally {
Common.KillApp();
}
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
<br />


===VB Script===
====Get Company Profile====
{| class="mw-collapsible mw-collapsed wikitable"
! Company Profile Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg Common.Agent.RO.vbs
Call GetCoInfo
Function CreateSQLAccServer
Function CreateSQLAccServer
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
End Function
 
function CheckLogin
Function GetCoInfo
Dim ComServer, RptObject, lDataSet
   'Step 1: Create Com Server object
   'Step 1: Create Com Server object
   Set ComServer = CreateSQLAccServer 'Create Com Server
   Set ComServer = CreateSQLAccServer 'Create Com Server
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
                'UserName, Password, DCF full path, Database filename
   END IF
   END IF
End Function
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Common.Agent.RO")
  'Step 3: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsProfile")


Function GetData
   MsgBox "Count " & lDataSet.RecordCount
Dim lSQL
   lSQL = "SELECT * FROM SY_DOCNO "
   'Step 5 Retrieve the output
   lSQL = lSQL & "WHERE DESCRIPTION='Customer Sales Order 2' "
   lDataSet.First
   Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
  While (not lDataSet.eof)
End Function
MsgBox "Company Name : " & lDataSet.FindField("CompanyName").AsString
MsgBox "Remark : " & lDataSet.FindField("Remark").AsString


MsgBox "ROC No : " & lDataSet.FindField("RegisterNo").AsString


Function InsertData
MsgBox "GST No : " & lDataSet.FindField("GSTNo").AsString
Dim BizObject, lMain, lDetail, lDate
   'Step 2: Find and Create the Biz Objects
MsgBox "Address 1 : " & lDataSet.FindField("Address1").AsString
   Set BizObject = ComServer.BizObjects.Find("SL_SO")
MsgBox "Address 2 : " & lDataSet.FindField("Address2").AsString
MsgBox "Address 3 : " & lDataSet.FindField("Address3").AsString
MsgBox "Address 4 : " & lDataSet.FindField("Address4").AsString
MsgBox "Attention : " & lDataSet.FindField("Attention").AsString
MsgBox "Phone : " & lDataSet.FindField("Phone1").AsString
MsgBox "Fax : " & lDataSet.FindField("Fax1").AsString
MsgBox "E-Mail : " & lDataSet.FindField("EMail").AsString
lDataSet.Next
  Wend
 
   'Step 6 : Logout after done 
   ComServer.Logout   
End Function
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>


  'Step 3: Set Dataset
====Complete Post====
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
{| class="mw-collapsible mw-collapsed wikitable"
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
! SL_CS, AR_PM, SL_CN & AR_CN Script 
 
|-
  'Begin Looping yr data
|
  'Step 4 : Insert Data - Master
<syntaxhighlight lang="vb">
  lDate = CDate("January 1, 2019")
'Updated 13 Sep 2018
  BizObject.New
'Copy below script & paste to notepad & name it as eg SL_CS.vbs
  lMain.FindField("DocKey").value        = -1
'This will doing following posting
  lMain.FindField("DocNo").AsString      = "<<New>>"
'01. Cash Sales
  lMain.FindField("DocDate").value        = lDate
'02. Sales Credit Note
  lMain.FindField("PostDate").value      = lDate
'03. Customer Payment With Knock off
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
'04. Edit Credit Note Posted in Step 02 & Knock Off
  lMain.FindField("CompanyName").AsString = "Cash Sales"
Call CheckLogin
  lMain.FindField("Address1").AsString    = "" 'Optional
Call InsertData
  lMain.FindField("Address2").AsString    = "" 'Optional
  lMain.FindField("Address3").AsString    = "" 'Optional
  lMain.FindField("Address4").AsString    = "" 'Optional
  lMain.FindField("Phone1").AsString      = "" 'Optional
  lMain.FindField("Description").AsString = "Sales Order"
  lMain.FindField("DocNoSetKey").value    = lDataSet.FindField("DocKey").value
   
  'Step 5: Insert Data - Detail
  'For With Item Code
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("Seq").value            = 3
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Sales Item B"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UOM").AsString        = "UNIT"
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("Tax").AsString        = ""
  lDetail.FindField("TaxRate").AsString    = ""
  lDetail.FindField("TaxInclusive").value  = 0
  lDetail.FindField("UnitPrice").AsFloat    = 100 
  lDetail.FindField("Amount").AsFloat      = 200
  lDetail.FindField("TaxAmt").AsFloat      = 0
  lDetail.Post


  'Step 6: Save Document
Dim ComServer
  BizObject.Save
  BizObject.Close
 
  'Step 7 : Logout after done 
  'ComServer.Logout
 
  MsgBox "Done" 
End Function
</syntaxhighlight>
|}


====Example-GL_PV====
{| class="mw-collapsible mw-collapsed wikitable"
! Cash Book PV Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg AR_PM.vbs
Call PostData
Function CreateSQLAccServer
Function CreateSQLAccServer
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
End Function
 
Function PostData
function CheckLogin
Dim ComServer, BizObject, lIVNo, lDate
   'Step 1: Create Com Server object
   'Step 1: Create Com Server object
   Set ComServer = CreateSQLAccServer 'Create Com Server
   Set ComServer = CreateSQLAccServer 'Create Com Server
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"  
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
   END IF
   END IF
End Function
 
Function InsertData
Dim BizObject, lMain, lDetail, lDate
   'Step 2: Find and Create the Biz Objects
   'Step 2: Find and Create the Biz Objects
   Set BizObject = ComServer.BizObjects.Find("GL_PV")  
   Set BizObject = ComServer.BizObjects.Find("SL_CS")  
 
   'Step 3: Set Dataset
   'Step 3: Set Dataset
   Set lMain = BizObject.DataSets.Find("MainDataSet")   'lMainDataSet contains master data
   Set lMain   = BizObject.DataSets.Find("MainDataSet") 'lMain contains master data
   Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data   
   Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data   
    
    
   'Step 4 : Posting
  'Begin Looping yr data
    lDate = CDate("January 23, 2020")
   'Step 4 : Insert Data - Master
    BizObject.New
  lDate = CDate("January 1, 2017")
    lMain.FindField("DOCKEY").Value          = -1
  BizObject.New
    lMain.FindField("DocNo").AsString         = "--CB PV Test--"  
  lMain.FindField("DocKey").value        = -1
    lMain.FindField("DocDate").Value          = lDate
  lMain.FindField("DocNo").AsString       = "--IV Test--"
    lMain.FindField("PostDate").Value        = lDate
  lMain.FindField("DocDate").value        = lDate
    lMain.FindField("Description").AsString  = "Compacc System"
  lMain.FindField("PostDate").value      = lDate
    lMain.FindField("PaymentMethod").AsString = "310-001"
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
lMain.FindField("CHEQUENUMBER").AsString = "MBB 213245"
  lMain.FindField("CompanyName").AsString = "Cash Sales"
     lMain.FindField("DocAmt").AsFloat         = 2019.57
  lMain.FindField("Address1").AsString    = "" 'Optional
     lMain.FindField("Cancelled").AsString    = "F"
  lMain.FindField("Address2").AsString    = "" 'Optional
lMain.Post
  lMain.FindField("Address3").AsString   = "" 'Optional
   lMain.FindField("Address4").AsString    = "" 'Optional
  lMain.FindField("Phone1").AsString     = "" 'Optional
  lMain.FindField("Description").AsString = "Sales"
      
  'Step 5: Insert Data - Detail
  'For Tax Inclusive = True with override Tax Amount
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("Seq").value            = 1
  lDetail.FindField("Account").AsString     = "500-000" 'Sales Account
  lDetail.FindField("Description").AsString = "Sales Item A"
  lDetail.FindField("Qty").AsFloat          = 1
  lDetail.FindField("Tax").AsString        = "SR"
  lDetail.FindField("TaxRate").AsString    = "6%"
  lDetail.FindField("TaxInclusive").value  = 0
  lDetail.FindField("UnitPrice").AsFloat    = 435
  lDetail.FindField("Amount").AsFloat      = 410.37 'Exclding GST Amt
  lDetail.FindField("TaxAmt").AsFloat      = 24.63
    
    
    lDetailDataSet.Append
  lDetail.DisableControls
    lDetailDataSet.FindField("DTLKEY").value = -1
  lDetail.FindField("TaxInclusive").value  = 1
lDetailDataSet.FindField("DOCKEY").value = -1
  lDetail.EnableControls
lDetailDataSet.FindField("Code").AsString = "200-300"
 
    lDetailDataSet.FindField("DESCRIPTION").AsString = "Maybank - Asus A555LD-xx313H"
  lDetail.Post
lDetailDataSet.FindField("TAX").AsString = ""
 
lDetailDataSet.FindField("TAXAMT").AsFloat = 0
  'For Tax Inclusive = False with override Tax Amount
lDetailDataSet.FindField("TAXINCLUSIVE").AsFloat = 0
  lDetail.Append
lDetailDataSet.FindField("AMOUNT").AsFloat = 2019.57
  lDetail.FindField("DtlKey").value         = -1
    lDetailDataSet.Post
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("Seq").value            = 2
  lDetail.FindField("Account").AsString     = "500-000"
  lDetail.FindField("Description").AsString = "Sales Item B"
  lDetail.FindField("Qty").AsFloat          = 1
  lDetail.FindField("Tax").AsString         = "SR"
  lDetail.FindField("TaxRate").AsString     = "6%"
  lDetail.FindField("TaxInclusive").value  = 0
  lDetail.FindField("UnitPrice").AsFloat   = 94.43
  lDetail.FindField("Amount").AsFloat       = 94.43
  lDetail.FindField("TaxAmt").AsFloat       = 5.66
  lDetail.Post


   'Step 5: Save Document
   'For With Item Code
    BizObject.Save
  lDetail.Append
     BizObject.Close
  lDetail.FindField("DtlKey").value        = -1
    MsgBox "Done"
  lDetail.FindField("DocKey").value        = -1
End Function
  lDetail.FindField("Seq").value            = 3
</syntaxhighlight>
  lDetail.FindField("ItemCode").AsString    = "ANT"
|}
  lDetail.FindField("Description").AsString = "Sales Item B"
  'lDetail.FindField("Account").AsString    = "500-000" 'If you wanted override the Sales Account Code
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UOM").AsString        = "UNIT"
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("Tax").AsString        = "SR"
  lDetail.FindField("TaxRate").AsString     = "6%"
  lDetail.FindField("TaxInclusive").value  = 0
  lDetail.FindField("UnitPrice").AsFloat    = 100 
  lDetail.FindField("Amount").AsFloat      = 200
  lDetail.FindField("TaxAmt").AsFloat      = 12
  lDetail.Post


===JScript/JavaScript===
  'Step 6: Save Document
This Script only can run using Internet Explorer (till IE 11)
  BizObject.Save
  BizObject.Close
 
  'Step 7: Payment
  Call InsertARPM
 
  'Step 8: Credit Note
  Call InsertSLCN
  'End Looping yr data
 
  'Step 9 : Logout after done 
  'ComServer.Logout
 
  MsgBox "Done" 
End Function


====Example-AR_IV====
Function InsertARPM
{| class="mw-collapsible mw-collapsed wikitable"
Dim BizObject, lMain, lDetail, lDate, v(1)
! AR_IV Script 
  'Step 2: Find and Create the Biz Objects
|-
  Set BizObject = ComServer.BizObjects.Find("AR_PM")
|
<syntaxhighlight lang="javascript">
<html>
<head>
<title>Add Customer Invoice</title>
<script language="JScript">
var ComServer;
   
   
function CreateSQLAccServer() {
   'Step 3: Set Dataset
   ComServer = new ActiveXObject('SQLAcc.BizApp');
   Set lMain = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  if (!ComServer.IsLogin) {            /* check whether user has logon */
   Set lDetail = BizObject.DataSets.Find("cdsKnockOff") 'lDetail contains detail data 
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 
/* UserName, Password */
  'Step 4 : Posting
   }
    lDate = CDate("January 23, 2017")
}
    BizObject.New
    lMain.FindField("DOCKEY").Value          = -1
function AutoInvoice() {
    lMain.FindField("DocNo").AsString        = "--PM Test--"  
  var BizObject, lMainDataSet, lDetailDataSet;
    lMain.FindField("CODE").AsString          = "300-C0001" 'Customer Account
    lMain.FindField("DocDate").Value          = lDate
  CreateSQLAccServer();
    lMain.FindField("PostDate").Value        = lDate
    lMain.FindField("Description").AsString  = "Payment for A/c"
  BizObject = ComServer.BizObjects.Find('AR_IV');
    lMain.FindField("PaymentMethod").AsString = "320-000" 'Bank or Cash Account
   lMainDataSet = BizObject.DataSets.Find('MainDataSet');
lMain.FindField("ChequeNumber").AsString  = ""
  lDetailDataSet = BizObject.DataSets.Find('cdsDocDetail');
lMain.FindField("BankCharge").AsFloat    = 0
  BizObject.New();
    lMain.FindField("DocAmt").AsFloat        = 200.00
    lMain.FindField("Cancelled").AsString    = "F"
  lMainDataSet.FindField('DocKey').value = -1;
  'Step 5: Knock Off IV
  lMainDataSet.FindField('DocNo').value = "--IV Test--";
    lIVNO = "--IV Test--"
  lMainDataSet.FindField('DocDate').value = "01/10/2016";
    v(0) = "IV"
  lMainDataSet.FindField('PostDate').value = "01/10/2016";
    v(1) = lIVNO
  lMainDataSet.FindField('Code').value = "300-A0003";
  lMainDataSet.FindField('Description').value = "Sales";
    if (lDetail.Locate("DocType;DocNo", v, false, false)) then
      lDetail.Edit
      lDetail.FindField("KOAmt").AsFloat    = 147.09 'Partial Knock off
      lDetail.FindField("KnockOff").AsString = "T"
      lDetail.Post
End IF 
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
End Function


  /*For Tax Inclusive = True with override Tax Amount*/
Function InsertSLCN
  lDetailDataSet.Append();
Dim BizObject, lMain, lDetail, lDate
  lDetailDataSet.FindField('DtlKey').value = -1;
   'Step 2: Find and Create the Biz Objects
   lDetailDataSet.FindField('DocKey').value = -1;
   Set BizObject = ComServer.BizObjects.Find("SL_CN")  
   lDetailDataSet.FindField('Account').value = "500-000";
  lDetailDataSet.FindField('Description').value =  "Sales Item A";
  lDetailDataSet.FindField('Tax').value =  "SR";
  lDetailDataSet.FindField('TaxInclusive').value =  0;
  lDetailDataSet.FindField('Amount').value = 410.37;
  lDetailDataSet.FindField('TaxAmt').value = 24.63;
  lDetailDataSet.DisableControls();
  lDetailDataSet.FindField('TaxInclusive').value =  1;
  lDetailDataSet.EnableControls();
  lDetailDataSet.FindField('Changed').value = "F";
  lDetailDataSet.Post();


   /*For Tax Inclusive = False with override Tax Amount*/
   'Step 3: Set Dataset
   lDetailDataSet.Append();
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
   lDetailDataSet.FindField('DtlKey').value = -1;
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
   lDetailDataSet.FindField('DocKey').value = -1;
 
   lDetailDataSet.FindField('Account').value = "500-000";
  'Step 4 : Insert Data - Master
   lDetailDataSet.FindField('Description').value = "Sales Item B";
  lDate = CDate("January 24, 2017")
   lDetailDataSet.FindField('Tax').value = "SR";
  BizObject.New
   lDetailDataSet.FindField('TaxInclusive').value = 0;
  lMain.FindField("DocKey").value        = -1
   lDetailDataSet.FindField('Amount').value = 94.43;
  lMain.FindField("DocNo").AsString      = "--CN Test--"
   lDetailDataSet.FindField('TaxAmt').value = 5.66;
  lMain.FindField("DocDate").value        = lDate
   lDetailDataSet.FindField('Changed').value = "F";
  lMain.FindField("PostDate").value      = lDate
   lDetailDataSet.Post();
  lMain.FindField("Code").AsString        = "300-C0001"
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  lMain.FindField("Address1").AsString    = ""
  lMain.FindField("Address2").AsString    = ""
  lMain.FindField("Address3").AsString    = ""
  lMain.FindField("Address4").AsString    = ""
   lMain.FindField("Phone1").AsString      = "" 
   lMain.FindField("Description").AsString = "Sales Returned"
   
  'For With Item Code
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
   lDetail.FindField("DocKey").value         = -1
   lDetail.FindField("ItemCode").AsString    = "ANT"
   lDetail.FindField("Description").AsString  = "Sales Item B"
   lDetail.FindField("Description2").AsString = "Product Spoil" 'Reason
  lDetail.FindField("Remark1").AsString      = "--IV Test--"  'Invoice No
  lDetail.FindField("Remark2").AsString      = "01 Jan 2017"   'Invoice Date
   lDetail.FindField("Qty").AsFloat          = 1
   lDetail.FindField("Tax").AsString          = "SR"
  lDetail.FindField("TaxRate").AsString      = "6%"
   lDetail.FindField("TaxInclusive").value   = 0
  lDetail.FindField("UnitPrice").AsFloat    = 100
   lDetail.FindField("Amount").AsFloat        = 100
  lDetail.FindField("TaxAmt").AsFloat        = 6 
   lDetail.Post
 
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
 
  'Step 7: Knock Off Invoice
  Call KnockIV
End Function


   /* Save document */  
Function KnockIV
    BizObject.Save();
Dim BizObject, lMain, lDetail, lDate, v(1)
    BizObject.Close();
   'Step 2: Find and Create the Biz Objects
    alert('Customer Invoice - has been saved.');
  Set BizObject = ComServer.BizObjects.Find("AR_CN")
}
   
</script>
  'Step 3: Set Dataset
</head>
  Set lMain  = BizObject.DataSets.Find("MainDataSet") 'lMain contains master data
<body>
  Set lDetail = BizObject.DataSets.Find("cdsKnockOff") 'lDetail contains Knock off data 
<input type="submit" value="SYNC" name="btnSubmit" onclick="AutoInvoice()">
 
</body>
  'Step 4 : Find CN Number
</html>
  lDocNo = "--CN Test--"
  lDocKey = BizObject.FindKeyByRef("DocNo", lDocNo)
  BizObject.Params.Find("DocKey").Value = lDocKey
 
  If not IsNull(lDocKey) Then
    BizObject.Open
    BizObject.Edit
    lMain.Edit
  'Step 5: Knock Off IV
    lIVNO = "--IV Test--"
    v(0) = "IV"
    v(1) = lIVNO
    if (lDetail.Locate("DocType;DocNo", v, false, false)) then
      lDetail.Edit
      lDetail.FindField("KOAmt").AsFloat    = 106 'Fully Knock off
      lDetail.FindField("KnockOff").AsString = "T"
      lDetail.Post
End IF   
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
  END IF
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-SL_CS====
====AR_IV====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! SL_CS Script   
! AR_IV Script   
|-
|-
|  
|  
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="vb">
<html>
'Copy below script & paste to notepad & name it as eg AR_IV.vbs
<head>
Call InsertARIV
<title>Add Cash Sales</title>
<script language="JScript">
var ComServer;


function CreateSQLAccServer() {
Function CreateSQLAccServer
   ComServer = new ActiveXObject('SQLAcc.BizApp');
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
  if (!ComServer.IsLogin) {            /* check whether user has logon */
End Function
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}


function InsertData() {
Function InsertARIV
  var BizObject, lMain, lDetail;
Dim ComServer, BizObject, lDataSet, lDataSet2, lDate
    
 
   CreateSQLAccServer();
   'Step 1: Create Com Server object
   Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
  END IF


   /*Step 2: Find and Create the Biz Objects*/
   'Step 2: Find and Create the Biz Objects
   BizObject = ComServer.BizObjects.Find('SL_CS') ;
   Set BizObject = ComServer.BizObjects.Find("AR_IV")  


   /*Step 3: Set Dataset*/
   'Step 3: Set Dataset
   lMain  = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
   Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
   lDetail = BizObject.DataSets.Find('cdsDocDetail'); /*lDetail contains detail data */  
   Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data   
    
    
   /*Begin Looping yr data*/
   'Step 4 : Insert Data - Master
  /*Step 4 : Insert Data - Master*/
  lDate = CDate("January 1, 2016")
   BizObject.New();
   BizObject.New
   lMain.FindField('DocKey').value         = -1;
   lMainDataSet.FindField("DocKey").value = -1
   lMain.FindField('DocNo').AsString      = "--IV Test--";
   lMainDataSet.FindField("DocNo").value = "--IV Test--"
   lMain.FindField('DocDate').value       = "20/12/2017";
   lMainDataSet.FindField("DocDate").value = lDate
   lMain.FindField('PostDate').value       = "20/12/2017";
   lMainDataSet.FindField("PostDate").value = lDate
   lMain.FindField('Code').AsString        = "300-C0001"; /*Customer Account*/
   lMainDataSet.FindField("Code").value = "300-A0003"
   lMain.FindField('CompanyName').AsString = "Cash Sales"
   lMainDataSet.FindField("Description").value = "Sales"
  lMain.FindField('Address1').AsString    = ""; /*Optional*/
  lMain.FindField('Address2').AsString    = ""; /*Optional*/
  lMain.FindField('Address3').AsString    = ""; /*Optional*/
  lMain.FindField('Address4').AsString    = ""; /*Optional*/
  lMain.FindField('Phone1').AsString      = ""; /*Optional*/
  lMain.FindField('Description').AsString = "Sales";
      
      
   /*Step 5: Insert Data - Detail*/
   'Step 5: Insert Data - Detail
   /*For Tax Inclusive = True with override Tax Amount*/
   'For Tax Inclusive = True with override Tax Amount
   lDetail.Append();
   lDetailDataSet.Append
   lDetail.FindField('DtlKey').value         = -1;
   lDetailDataSet.FindField("DtlKey").value = -1
   lDetail.FindField('DocKey').value         = -1;
   lDetailDataSet.FindField("DocKey").value = -1
   lDetail.FindField('Seq').value           = 1;
   lDetailDataSet.FindField("Account").value = "500-000"
  lDetail.FindField('Account').AsString    = "500-000"; /*Sales Account*/
   lDetailDataSet.FindField("Description").value = "Sales Item A"
   lDetail.FindField('Description').AsString = "Sales Item A";
   lDetailDataSet.FindField("Tax").value = "SR"
   lDetail.FindField('Qty').AsFloat          = 1;
   lDetailDataSet.FindField("TaxInclusive").value = 0
  lDetail.FindField('Tax').AsString        = "SR";
   lDetailDataSet.FindField("Amount").value = 410.37
   lDetail.FindField('TaxRate').AsString    = "6%";
   lDetailDataSet.FindField("TaxAmt").value = 24.63
  lDetail.FindField('TaxInclusive').value   = 0;
   lDetail.FindField('UnitPrice').AsFloat    = 435;
  lDetail.FindField('Amount').AsFloat      = 410.37; /*Exclding GST Amt*/
   lDetail.FindField('TaxAmt').AsFloat      = 24.63;
    
    
   lDetail.DisableControls();
   lDetailDataSet.DisableControls
   lDetail.FindField('TaxInclusive').value   = 1;
   lDetailDataSet.FindField("TaxInclusive").value = 1
   lDetail.EnableControls();
   lDetailDataSet.EnableControls
    
    
   lDetail.Post();
   lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post
    
    
   /*For Tax Inclusive = False with override Tax Amount*/
   'For Tax Inclusive = False with override Tax Amount
   lDetail.Append();
   lDetailDataSet.Append
   lDetail.FindField('DtlKey').value         = -1;
   lDetailDataSet.FindField("DtlKey").value = -1
   lDetail.FindField('DocKey').value         = -1;
   lDetailDataSet.FindField("DocKey").value = -1
   lDetail.FindField('Seq').value           = 2;
   lDetailDataSet.FindField("Account").value = "500-000"
  lDetail.FindField('Account').AsString    = "500-000";
   lDetailDataSet.FindField("Description").value = "Sales Item B"
   lDetail.FindField('Description').AsString = "Sales Item B";
   lDetailDataSet.FindField("Tax").value = "SR"
   lDetail.FindField('Qty').AsFloat          = 1;
   lDetailDataSet.FindField("TaxInclusive").value = 0
  lDetail.FindField('Tax').AsString        = "SR";
   lDetailDataSet.FindField("Amount").value = 94.43
   lDetail.FindField('TaxRate').AsString    = "6%";
   lDetailDataSet.FindField("TaxAmt").value = 5.66
  lDetail.FindField('TaxInclusive').value   = 0;
   lDetailDataSet.FindField("Changed").value = "F"
   lDetail.FindField('UnitPrice').AsFloat    = 94.43;
   lDetailDataSet.Post
   lDetail.FindField('Amount').AsFloat      = 94.43;
   lDetail.FindField('TaxAmt').AsFloat      = 5.66;
   lDetail.Post();


   /*For With Item Code*/
   'Step 6: Save Document
  lDetail.Append();
   BizObject.Save
  lDetail.FindField('DtlKey').value        = -1;
   BizObject.Close
  lDetail.FindField('DocKey').value        = -1;
  MsgBox "Done"
  lDetail.FindField('Seq').value            = 3;
End Function
  lDetail.FindField('ItemCode').AsString    = "ANT";
  lDetail.FindField('Description').AsString = "Sales Item B";
  /*lDetail.FindField('Account').AsString    = "500-000"; If you wanted override the Sales Account Code*/
  lDetail.FindField('Qty').AsFloat          = 2;
  lDetail.FindField('UOM').AsString        = "UNIT";
  /*lDetail.FindField('DISC').AsString        = "5%+3"; Optional (eg 5% plus 3 Discount)*/
  lDetail.FindField('Tax').AsString        = "SR";
  lDetail.FindField('TaxRate').AsString    = "6%";
  lDetail.FindField('TaxInclusive').value  = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 100;
  lDetail.FindField('Amount').AsFloat      = 200;
  lDetail.FindField('TaxAmt').AsFloat      = 12;
  lDetail.Post();
 
  /*Step 6: Save Document*/
   BizObject.Save();
   BizObject.Close();
    alert('Document has been saved.');
}
</script>
</head>
<body>
<input type="submit" value="SYNC" name="btnSubmit" onclick="InsertData()">
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}


====Example-AR_PM====
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_IV-Edit====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AR_PM Script   
! AR_IV Edit Script   
|-
|-
|  
|  
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="vb">
<html>
'Available in Version 5.2018.833.759 & above
<head>
'Copy below script & paste to notepad & name it as eg AR_IV.vbs
<title>Add Customer Payment</title>
Call CheckLogin
<script language="JScript">
Call GetData
var ComServer;
Call PostData


function CreateSQLAccServer() {
Dim ComServer, lDataSet
  ComServer = new ActiveXObject("SQLAcc.BizApp");
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}


function AutoPayment() {
Function CreateSQLAccServer
  var BizObject, lMainDataSet, lKnockOffDataSet, V;
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
 
End Function
   CreateSQLAccServer();


   BizObject = ComServer.BizObjects.Find('AR_PM');
function CheckLogin
   lMainDataSet = BizObject.DataSets.Find('MainDataSet');
  'Step 1: Create Com Server object
   lKnockOffDataSet = BizObject.DataSets.Find('cdsKnockOff');
  Set ComServer = CreateSQLAccServer 'Create Com Server
   BizObject.New();
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function
 
Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM AR_IV "
  lSQL = lSQL & "WHERE DocNo='IV-00002' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function
 
Function PostData
Dim BizObject, lMain, lDetail
   'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_IV")
 
  'Step 3: Set Dataset
   Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
   Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Step 4 : Find Doc Number
   If lDataSet.RecordCount > 0 Then 
lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
    
    
  lMainDataSet.FindField('DocKey').value = -1;
  lMainDataSet.FindField('DocNo').value = "Test";
  lMainDataSet.FindField('Code').value = "888";
  lMainDataSet.FindField('DocDate').value = "01/09/2015";
  lMainDataSet.FindField('PostDate').value = "01/09/2015";
  lMainDataSet.FindField('Project').value = "----";
    
    
  lMainDataSet.FindField('Description').value = "";
    BizObject.Open
  lMainDataSet.FindField('PaymentMethod').value = "320-000";
    BizObject.Edit
  lMainDataSet.FindField('Journal').value = "CASH";
    lMain.Edit
  lMainDataSet.FindField('ChequeNumber').value = "";
lMain.FindField("Description").AsString = "Sales - Edited"  
  lMainDataSet.FindField('CurrencyCode').value = "----";
  lMainDataSet.FindField('CurrencyRate').value = "1.0000000000";
  lMainDataSet.FindField('DocAmt').value = "106.00";
  lMainDataSet.FindField('BankCharge').value = "0";
  lMainDataSet.FindField('UnappliedAmt').value = "0";
  lMainDataSet.FindField('Cancelled').value = 'F';
    
    
   v = ComServer.CreateOleVariantArray(2);
   'Step 5: Delete all Detail
   v.SetItem(0, 'IV'); /*Knock Off DocType*/
    While lDetail.RecordCount <> 0
   v.SetItem(1, 'IV-00111'); /*Knock Off DocNo*/
      lDetail.First
 
  lDetail.Delete
   if (lKnockOffDataSet.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
    Wend
          lKnockOffDataSet.Edit();
  'Step 6: Append Detail
          lKnockOffDataSet.FindField('DocAmt').value = "106";  
   lDetail.Append 
          lKnockOffDataSet.FindField('KnockOff').AsString = 'T';
   lDetail.FindField("DtlKey").value = -1
          lKnockOffDataSet.Post(); }
   lDetail.FindField("Account").value = "500-000"
    /* Save document */  
  lDetail.FindField("Description").value =  "Sales Item A - Edited"
    BizObject.Save();
  lDetail.FindField("Tax").value = "SR"
    BizObject.Close();
  lDetail.FindField("TaxRate").value = "6%"
    alert("Customer Payment - has been saved.");
  lDetail.FindField("TaxInclusive").value = 0
}
  lDetail.FindField("Amount").value = 100
</script>
  lDetail.FindField("TaxAmt").value = 6
</head>
 
<body>
  lDetail.DisableControls
<input type="submit" value="SYNC" name="btnSubmit" onclick="AutoPayment()">
  lDetail.FindField("TaxInclusive").value =  1
</body>
  lDetail.EnableControls
</html>
 
  lDetail.FindField("Changed").value = "F"
  lDetail.Post
 
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
 
  'Step 8 : Logout after done 
    'ComServer.Logout 
    MsgBox "Done"  
Else
MsgBox "Record Not Found"  
  END IF
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}


====Example-Customer.IV.RO====
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_PM====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Customer.IV.RO Report Object Script   
! AR_PM Script   
|-
|-
|  
|  
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="vb">
<html>
'Copy below script & paste to notepad & name it as eg AR_PM.vbs
  <head>
Call PostData
    <title>Customer.IV.RO</title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Function CreateSQLAccServer
    <script type="text/javascript">
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
var ComServer;
End Function
 
function CreateSQLAccServer() {
Function PostData
   ComServer = new ActiveXObject("SQLAcc.BizApp");
Dim ComServer, BizObject, lIVNo, v(1), lDate
   if (!ComServer.IsLogin) {            /* check whether user has logon */
     ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
  'Step 1: Create Com Server object
  /* UserName, Password */
   Set ComServer = CreateSQLAccServer 'Create Com Server
   }
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
}     
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
 
  END IF
function GetData() {  
  var lMain, lDetail, lRptVar, lDateFrom, lDateTo;
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_PM")  
   
   'Step 3: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsKnockOff") 'lDetailDataSet contains detail data  
    
    
   elem = document.getElementById('txt1');
   'Step 4 : Posting
 
    lDate = CDate("January 23, 2017")
  CreateSQLAccServer();
    BizObject.New
 
    lMain.FindField("DOCKEY").Value          = -1
  lDateFrom = new Date("January 1 2015");
    lMain.FindField("DocNo").AsString        = "--PM Test--"  
  lDateTo = new Date("December 31, 2015");
    lMain.FindField("CODE").AsString          = "300-C0001"
 
    lMain.FindField("DocDate").Value          = lDate
  lRptVar = ComServer.RptObjects.Find('Customer.IV.RO');
    lMain.FindField("PostDate").Value         = lDate
  lRptVar.Params.Find('SelectDate').Value          = true;
    lMain.FindField("Description").AsString   = "Payment for A/c"
  lRptVar.Params.Find('DateFrom').Value            = lDateFrom.valueOf();
    lMain.FindField("PaymentMethod").AsString = "310-000"
  lRptVar.Params.Find('DateTo').Value              = lDateTo.valueOf();
    lMain.FindField("DocAmt").AsFloat        = 65.57
  lRptVar.Params.Find('AllAgent').Value            = false;
    lMain.FindField("Cancelled").AsString     = "F"
  lRptVar.Params.Find('AgentData').Value            = "----\nLF"; /*Filter by Agent code ---- & HALIM */
   'Step 5: Knock Off IV
  lRptVar.Params.Find('AllArea').Value              = true;
    lIVNO = "--IV Test--"
  lRptVar.Params.Find('AllCompany').Value          = true;
    v(0) = "IV"
  lRptVar.Params.Find('AllCurrency').Value          = true;
     v(1) = lIVNO
  lRptVar.Params.Find('AllDocProject').Value       = true;
  lRptVar.Params.Find('AllCompanyCategory').Value   = true;
     if (lDetailDataSet.Locate("DocType;DocNo", v, false, false)) then
  lRptVar.Params.Find('AllDocument').Value          = true;
      lDetailDataSet.Edit
  lRptVar.Params.Find('IncludeCancelled').Value  = false;
      lDetailDataSet.FindField("KOAmt").value = 65.57
  lRptVar.Params.Find('PrintDocumentStyle').Value = false;
      lDetailDataSet.FindField("KnockOff").AsString = "T"
  lRptVar.Params.Find('AllItemProject').Value     = true;
      lDetailDataSet.Post
   lRptVar.Params.Find('AllPaymentMethod').Value  = true;
End IF  
  lRptVar.CalculateReport(); 
   'Step 6: Save Document
 
    BizObject.Save
  lMain  = lRptVar.DataSets.Find('cdsMain');
     BizObject.Close
  lDetail = lRptVar.DataSets.Find('cdsDocDetail');
     MsgBox "Done"
  /*alert("Count -" + lRptVar.DataSets.Find('cdsDocDetail').RecordCount);*/
   'END IF
  elem.innerHTML += 'From Main'+'\n';
End Function
      
  lMain.First();
  while (!lMain.eof) {
     elem.innerHTML += lMain.FindField('DocKey').AsString + ' ' +
                  lMain.FindField('DocNo').AsString + ' ' + lMain.FindField('DocDate').AsString + ' '+
                      lMain.FindField('CompanyName').AsString + ' ' + lMain.FindField('DocAmt').AsString + '\n';
lMain.Next(); 
  }
  elem.innerHTML += 'End Main'+'\n\n';
 
  elem.innerHTML += 'From Detail'+'\n';
  lDetail.First();
  while (!lDetail.eof) {
    elem.innerHTML += lDetail.FindField('Dockey').AsString + ' ' + lDetail.FindField('Account').AsString + ' ' +
                  lDetail.FindField('Description').AsString + ' ' + lDetail.FindField('Amount').AsString + '\n';
lDetail.Next();  
  
  elem.innerHTML += 'End Detail'+'\n\n';
}
 
     </script>
  </head>
  <body>
     <form>
      <textarea id="txt1" rows="30" cols="116"></textarea>
      <input type="button" value="Calculate" onclick="GetData()">
    </form>
   </body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}


====Example-Customer.RO====
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_PM-Edit====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Customer.RO Report Object Script   
! AR_PM Edit Script   
|-
|-
|  
|  
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="vb">
<html>
'Copy below script & paste to notepad & name it as eg AR_IV.vbs
<head>
Call EditARPM
<title>Add Customer Invoice</title>
<script language='JScript'>
Function CreateSQLAccServer
var ComServer;
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
Function EditARPM
Dim ComServer, BizObject, lDataSet, lDataSet2, lDocKey, lDocNo, lIVNo, v(1)
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
  END IF
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_PM")
   
   
function CreateSQLAccServer() {
   'Step 3: Set Dataset
   ComServer = new ActiveXObject('SQLAcc.BizApp');
   Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
   if (!ComServer.IsLogin) {            /* check whether user has logon */
   Set lDetailDataSet = BizObject.DataSets.Find("cdsKnockOff") 'lDetailDataSet contains detail data 
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
   }
}
 
function GetCustomerData() {
  var RptObject, lDataSet, lDataSet2;
  edOutput.value = '';
  edOutput2.value = '';
  //Step 1: Create Com Server object
  CreateSQLAccServer();
    
    
   //Step 2: Find and Create the Report Objects
   'Step 4 : Find OR Number
   RptObject = ComServer.RptObjects.Find('Customer.RO');
  lDocNo = "OR-00022"
   lDocKey = BizObject.FindKeyByRef("DocNo", lDocNo)
  BizObject.Params.Find("DocKey").Value = lDocKey
    
    
   //Step 3: Spool parameters
   If not IsNull(lDocKey) Then
  RptObject.Params.Find('AllAgent').Value = true;
    BizObject.Open
  RptObject.Params.Find('AllArea').Value = true;
    BizObject.Edit
  RptObject.Params.Find('AllCompany').Value = true;
    lMainDataSet.Edit
   RptObject.Params.Find('AllCompanyCategory').Value = true;
lMainDataSet.FindField("Description").AsString = "testing"
  RptObject.Params.Find('AllCurrency').Value = true;
   'Step 5: Knock Off IV
  RptObject.Params.Find('AllTerms').Value = true;
    lIVNO = "IV-00006"
  RptObject.Params.Find('SelectDate').Value = true;
    v(0) = "IV"
  RptObject.Params.Find('PrintActive').Value = true;
    v(1) = lIVNO
  RptObject.Params.Find('PrintInactive').Value = false;
  RptObject.Params.Find('PrintPending').Value = false;
    if (lDetailDataSet.Locate("DocType;DocNo", v, false, false)) then
  RptObject.Params.Find('PrintProspect').Value = false;
      lDetailDataSet.Edit
  RptObject.Params.Find('PrintSuspend').Value = false;
      lDetailDataSet.FindField("KOAmt").value = 50.12
  //RptObject.Params.Find('CompanyData').Value = '300-A0003';
      lDetailDataSet.FindField("KnockOff").AsString = "T"
 
      lDetailDataSet.Post
   //Step 4: Perform Report calculation
  MsgBox "yes"
  RptObject.CalculateReport();
End IF 
  lDataSet = RptObject.DataSets.Find('cdsMain');
   'Step 6: Save Document
   lDataSet2 = RptObject.DataSets.Find('cdsBranch');
    BizObject.Save
 
    BizObject.Close
  //alert('Count ' + lDataSet.RecordCount);
    MsgBox "Done"
   END IF
End Function
</syntaxhighlight>
|}


  //Step 5 Retrieve the output
<div style="float: right;">   [[#top|[top]]]</div>
  lDataSet.First;
  while  (!lDataSet.eof){
    edOutput.value = edOutput.value +
                'Code : ' + lDataSet.FindField('Code').AsString + '\n' +
                'Company Name : ' + lDataSet.FindField('CompanyName').AsString +'\n\n';
lDataSet.Next();
   }
  lDataSet2.First();
  while (!lDataSet2.eof){
  edOutput2.value = edOutput2.value +
                  'Code : '+ lDataSet2.FindField('Code').AsString + '\n' +
  'Branch Name : '+ lDataSet2.FindField('BranchName').AsString + '\n' +
                  'Address 1 : '+ lDataSet2.FindField('Address1').AsString + '\n' +
  'Address 2 : '+ lDataSet2.FindField('Address2').AsString + '\n' +
  'Address 3 : '+ lDataSet2.FindField('Address3').AsString + '\n' +
  'Address 4 : '+ lDataSet2.FindField('Address4').AsString + '\n' +
  'Phone 1 : '+ lDataSet2.FindField('Phone1').AsString  +'\n\n';
  lDataSet2.Next();
    }
}


</script>
====Customer.RO====
</head>
{| class="mw-collapsible mw-collapsed wikitable"
<body>
! Customer.RO Report Object Script   
  <table>
    <tr>
      <th>Main Table</th>
      <th>Branch Branch</th>
    </tr>
    <tr>
      <td>
        <TEXTAREA rows=15 cols=75 name="edOutput"></TEXTAREA>
  </td>
      <td>
        <TEXTAREA rows=15 cols=75 name="edOutput2"></TEXTAREA>
  </td>
    </tr>
  </table>
  <table width="83%">
<tr>
  <td align="center">
<input type='submit' value='Sync Data' name='btnSubmit' onclick='GetCustomerData()'>
  </td>
</tr>
  </table>
</body>
</html>
</syntaxhighlight>
|}
 
====Example-Get Next IV Number====
{| class="mw-collapsible mw-collapsed wikitable"
! Get Next IV Number Script   
|-
|-
|  
|  
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="vb">
<html>
'Copy below script & paste to notepad & name it as eg customer_ro.vbs
<head>
Call GetCustomerData
<title>Add Cash Sales</title>
<script language="JScript">
var ComServer, lDataSet;


function CreateSQLAccServer() {
Function CreateSQLAccServer
   ComServer = new ActiveXObject('SQLAcc.BizApp');
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
  if (!ComServer.IsLogin) {            /* check whether user has logon */
End Function
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}


function zeroPad(num, places) {
Function GetCustomerData
   var zero = places - num.toString().length + 1;
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo
  return Array(+(zero > 0 && zero)).join("0") + num;
  'Step 1: Create Com Server object
   /*zeroPad(5, 2); // "05"*/
   Set ComServer = CreateSQLAccServer 'Create Com Server
}
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF
 
  'Step 2: Find and Create the Report Objects
   Set RptObject = ComServer.RptObjects.Find("Customer.RO")


function GetData() {
  'Step 3: Spool parameters
   var lSQL;
  RptObject.Params.Find("AllAgent").Value = true
   lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A ";
   RptObject.Params.Find("AllArea").Value = true
   lSQL = lSQL + "INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY) ";
   RptObject.Params.Find("AllCompany").Value = false
   lSQL = lSQL + "WHERE A.DOCTYPE='IV' ";
  RptObject.Params.Find("AllCompanyCategory").Value = true
   lSQL = lSQL + "AND A.DESCRIPTION='Customer Invoice' ";
  RptObject.Params.Find("AllCurrency").Value = true
   lSQL = lSQL + "AND A.STATESET=1 ";
   RptObject.Params.Find("AllTerms").Value = true
   lDataSet = ComServer.DBManager.NewDataSet(lSQL)
  RptObject.Params.Find("SelectDate").Value = true
}
  RptObject.Params.Find("PrintActive").Value = true
  RptObject.Params.Find("PrintInactive").Value = false
  RptObject.Params.Find("PrintPending").Value = false
   RptObject.Params.Find("PrintProspect").Value = false
   RptObject.Params.Find("PrintSuspend").Value = false
   lDateFrom = CDate("January 1, 2000")
   lDateTo = CDate("December 31, 2014")


function ShowNextNo() {
  RptObject.Params.Find("DateFrom").Value = lDateFrom
   var Desc, Fmt, NextNo, lResult, lPad;
   RptObject.Params.Find("DateTo").Value = lDateTo
  RptObject.Params.Find("CompanyData").Value = "300-A0003"
    
    
   CreateSQLAccServer()
   'Step 4: Perform Report calculation
   GetData();
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
   Set lDataSet2 = RptObject.DataSets.Find("cdsBranch")
  MsgBox "Count " & lDataSet.RecordCount


   if (lDataSet.RecordCount > 0) {    
   'Step 5 Retrieve the output
    lDataSet.First;
  lDataSet.First
     Desc = lDataSet.FindField("Description").AsString;
   While (not lDataSet.eof)
Fmt  = lDataSet.FindField("Format").AsString;
     MsgBox lDataSet.FindField("Code").AsString & " " & lDataSet.FindField("CompanyName").AsString
NextNo = lDataSet.FindField("NEXTNUMBER").Value;
lDataSet2.First
     alert(Desc);
     While (not lDataSet2.eof)
alert(Fmt);
  MsgBox lDataSet2.FindField("Address1").AsString
alert(NextNo);
  lDataSet2.Next
    Wend
lPad = Fmt.substr(5, 1);
lDataSet.Next
lPad = zeroPad(NextNo, lPad)
   Wend
Desc = Fmt.substr(0, 3);
End Function
alert(Desc + lPad);
   }
}
</script>
</head>
<body>
<input type="submit" value="Show Next No" name="btnSubmit" onclick="ShowNextNo()">
</body>
</html>
</syntaxhighlight>
</syntaxhighlight>
|}
|}
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>
<br />


===Delphi===
====Customer.Statement.RO====
The below example is assuming after you had check the login status.
====Example-GL_JE====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! GL_JE Script   
! Customer.Statement.RO  Report Object Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_GL_JEClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg customer_statement_ro.vbs
var BizApp, lMain, lDtl, lBizObj, lDocKey : Variant;
Call GetCustStatementData
    i : integer;
begin
Function CreateSQLAccServer
   BizApp := CreateOleObject('SQLAcc.BizApp');
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
  try
End Function
    lBizObj := BizApp.BizObjects.Find('GL_JE');
    lMain  := lBizObj.DataSets.Find('MainDataSet');
    lDtl    := lBizObj.DataSets.Find('cdsDocDetail');
    lBizObj.New;
    lMain.FindField('DOCKEY').Value        := -1;
    lMain.FindField('DocNo').Value        := '--JE Test--';
    lMain.FindField('DocDate').Value      := '28 Aug 2017';
    lMain.FindField('PostDate').Value      := '28 Aug 2017';
    lMain.FindField('TAXDATE').Value      := '28 Aug 2017';
    lMain.FindField('Description').Value  := 'Postage';
    lMain.FindField('Cancelled').Value    := 'F';
    lMain.FindField('DOCNOSETKEY').Value  := 0;
    lMain.FindField('CHANGED').Value      := 'F';
    lMain.Post;


    //For Tax Inclusive
Function GetCustStatementData
    lDtl.Append;
Const Quote = """"
    lDtl.FindField('DTLKEY').Value      := -1;
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo, lAgeData
    lDtl.FindField('DOCKEY').Value      := -1;
  'Step 1: Create Com Server object
    lDtl.FindField('SEQ').Value          := 1;
  Set ComServer = CreateSQLAccServer 'Create Com Server
    lDtl.FindField('CODE').Value        := '610-1000';
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    lDtl.FindField('DESCRIPTION').Value  := 'Item Desc 1';
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
    lDtl.FindField('TAX').Value          := 'TX';
  END IF
//    lDtl.FindField('LOCALTAXAMT').AsFloat := 17.32;//For JE you can't override (i.e. system auto calc)
     lDtl.FindField('TAXINCLUSIVE').Value  := 1;
    lDtl.FindField('LocalDR').AsFloat    := 306;//Including GST if TAXINCLUSIVE = 1
    lDtl.FindField('DR').AsFloat          := 306;//if wanted DR <> LocalDR
    lDtl.FindField('CHANGED').Value      := 'F';
    lDtl.Post;


    //For Tax Exclusive
  'Step 2: Find and Create the Report Objects
    lDtl.Append;
  Set RptObject = ComServer.RptObjects.Find("Customer.Statement.RO")
    lDtl.FindField('DTLKEY').Value       := -1;
    lDtl.FindField('DOCKEY').Value       := -1;
  'Step 3: Spool parameters
    lDtl.FindField('SEQ').Value         := 2;
  lAgeData = "<?xml version=" & Quote & "1.0" & Quote & " standalone=" & Quote & "yes" & Quote & "?>  <DATAPACKET Version=" & Quote & "2.0" & Quote & "><METADATA><FIELDS>" &_
    lDtl.FindField('CODE').Value         := '605-200';
      "<FIELD attrname=" & Quote & "ColumnNo" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "ColumnType" & Quote & " fieldtype=" & Quote & "string" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
    lDtl.FindField('DESCRIPTION').Value := 'Item Desc 2';
      "<FIELD attrname=" & Quote & "Param1" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "Param2" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/>" &_
    lDtl.FindField('TAX').Value         := 'TX';
      "<FIELD attrname=" & Quote & "IsLocal" & Quote & " fieldtype=" & Quote & "boolean" & Quote & "/><FIELD attrname=" & Quote & "HeaderScript" & Quote & " fieldtype=" & Quote & "bin.hex" & Quote & " SUBTYPE=" & Quote & "Text" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
    lDtl.FindField('TAXINCLUSIVE').Value := 0;
      "</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo=" & Quote & "0" & Quote & " ColumnType=" & Quote & "" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & "/>" &_
    lDtl.FindField('LocalCR').AsFloat    := 100;
      "<ROW ColumnNo=" & Quote & "1" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;" & Quote & "/>" &_
    lDtl.FindField('CHANGED').Value     := 'F';
      "<ROW ColumnNo=" & Quote & "2" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-1" & Quote & " Param2=" & Quote & "-1" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;" & Quote & "/>" &_
    lDtl.Post;
      "<ROW ColumnNo=" & Quote & "3" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-2" & Quote & " Param2=" & Quote & "-2" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;" & Quote & "/>" &_
 
      "<ROW ColumnNo=" & Quote & "4" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-3" & Quote & " Param2=" & Quote & "-3" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;" & Quote & "/>" &_
    //For No GST
      "<ROW ColumnNo=" & Quote & "5" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-4" & Quote & " Param2=" & Quote & "-4" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;" & Quote & "/>" &_
    lDtl.Append;
      "<ROW ColumnNo=" & Quote & "6" & Quote & " ColumnType=" & Quote & "B" & Quote & " Param1=" & Quote & "-999999" & Quote & " Param2=" & Quote & "-5" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;" & Quote & "/>" &_
    lDtl.FindField('DTLKEY').Value       := -1;
      "</ROWDATA></DATAPACKET>"
    lDtl.FindField('DOCKEY').Value       := -1;
'  RptObject.Params.Find("AgentData").Value           = 'Not use if AllAgent is True
    lDtl.FindField('SEQ').Value          := 3;
  RptObject.Params.Find("AgingData").Value           = lAgeData 'Fixed
    lDtl.FindField('CODE').Value        := '610-002';
  RptObject.Params.Find("AgingOn").Value             = "I" 'Fixed
    lDtl.FindField('DESCRIPTION').Value  := 'Item Desc 3';
  RptObject.Params.Find("AllAgent").Value             = true
    lDtl.FindField('TAX').Value         := '';
  RptObject.Params.Find("AllArea").Value             = true
    lDtl.FindField('TAXINCLUSIVE').Value := 0;
  RptObject.Params.Find("AllCompany").Value          = false
    lDtl.FindField('LocalCR').AsFloat    := 200;
  RptObject.Params.Find("AllCompanyCategory").Value   = true
    lDtl.FindField('CHANGED').Value       := 'F';
  RptObject.Params.Find("AllControlAccount").Value    = true
    lDtl.Post;
  RptObject.Params.Find("AllCurrency").Value          = true
  RptObject.Params.Find("AllDocProject").Value       = true
'  RptObject.Params.Find("AreaData").Value            =  'Not use if AllArea is True
' RptObject.Params.Find("CompanyCategoryData").Value = 'Not use if AllCompanyCategory is True
  RptObject.Params.Find("CompanyData").Value          = "300-A0001"& vbCRLF & "300-C0001" 'Filter by Customer Code 300-A0001 & 300-C0001
'  RptObject.Params.Find("ControlAccountData").Value  =  'Not use if AllControlAccount is True
' RptObject.Params.Find("CurrencyData").Value        = 'Not use if AllCurrency is True
  lDateFrom = CDate("August 1, 2016")
  lDateTo = CDate("August 31, 2016")
  RptObject.Params.Find("DateFrom").Value            = lDateFrom
  RptObject.Params.Find("DateTo").Value              = lDateTo
' RptObject.Params.Find("DocProjectData").Value       = 'Not use if AllDocProject is True
  RptObject.Params.Find("IncludeZeroBalance").Value   = false
  RptObject.Params.Find("SelectDate").Value           = true
  RptObject.Params.Find("SortBy").Value              = "CompanyCategory;Code;CompanyName;Agent;Area;CurrencyCode;ControlAccount"
  RptObject.Params.Find("StatementDate").Value        = lDateTo ' Norm same as DateTo
  RptObject.Params.Find("StatementType").Value       = "O" 'O = Open Item, B = B/F
  'Step 4: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocument")
  MsgBox "Count " & lDataSet.RecordCount


     lBizObj.Save;
  'Step 5 Retrieve the output
     MessageDlg('GL_JE-DocNo : ''--JE Test--'' Posted...', mtInformation, [mbOK],0);
  lDataSet.First
  finally
  While (not lDataSet.eof)
     lBizObj.Close;
     MsgBox lDataSet.FindField("Code").AsString & " " & lDataSet.FindField("CompanyName").AsString & " " & lDataSet.FindField("Balance").AsString
   end;
lDataSet2.First
end;
     While (not lDataSet2.eof)
  MsgBox lDataSet2.FindField("DocNo").AsString
  lDataSet2.Next
     Wend
lDataSet.Next
   Wend
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 5,472: Line 7,147:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-GL_PV====
====GL.CB.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! GL_PV Script   
! GL.CB.RO  Report Object Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_GLPVClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg GL.CB.RO.vbs
var lMain, lDtl, lBizObj, BizApp : Variant;
Call GetCLCBData
     lTime : TDateTime;
begin
Function CreateSQLAccServer
   lTime := Now;
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
   BizApp := CreateOleObject('SQLAcc.BizApp');
End Function
   try
    lBizObj := BizApp.BizObjects.Find('GL_PV');
Function GetCLCBData
    lMain   := lBizObj.DataSets.Find('MainDataSet');
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
    lDtl   := lBizObj.DataSets.Find('cdsDocDetail');
  'Step 1: Create Com Server object
    lBizObj.New;
  Set ComServer = CreateSQLAccServer 'Create Com Server
     lMain.FindField('DOCKEY').Value           := -1;
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    lMain.FindField('DocNo').AsString        := '--CB PV Test1--';
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
    lMain.FindField('DocDate').Value         := '18 Aug 2015';
  END IF
    lMain.FindField('PostDate').Value         := '18 Aug 2015';
    lMain.FindField('TAXDATE').Value         := '18 Aug 2015';
   'Step 2: Find and Create the Report Objects
    lMain.FindField('Description').AsString   := 'Compacc System';
   Set RptObject = ComServer.RptObjects.Find("GL.CB.RO")  
    lMain.FindField('PAYMENTMETHOD').AsString := '310-001';
    lMain.FindField('CHEQUENUMBER').AsString  := 'MBB 213245';
   'Step 3: Spool parameters
    lMain.FindField('DocAmt').AsFloat        := 2019;
  RptObject.Params.Find("AllCurrency").Value    = true
    lMain.FindField('Cancelled').AsString    := 'F';
  RptObject.Params.Find("AllDocProject").Value  = true
    lMain.FindField('CHANGED').AsString      := 'F';
   RptObject.Params.Find("AllDocument").Value    = true
    lMain.Post;
  RptObject.Params.Find("AllItemProject").Value = true
 
  RptObject.Params.Find("AllItemArea").Value   = true
    lDtl.Append;
  RptObject.Params.Find("AllItemAgent").Value  = true
    lDtl.FindField('DTLKEY').Value         := -1;
  RptObject.Params.Find("AllDocAgent").Value    = true
    lDtl.FindField('DOCKEY').Value         := -1;
  RptObject.Params.Find("AllDocArea").Value     = true
    lDtl.FindField('Code').AsString        := '200-300';
  RptObject.Params.Find("AllPaymentMethod").Value = false
    lDtl.FindField('DESCRIPTION').AsString := 'Maybank - Asus A555LD-xx313H';
  'RptObject.Params.Find("CurrencyData").Value    = 'Not use if AllCurrency is true
    lDtl.FindField('TAX').AsString        := 'TX';
 
    lDtl.FindField('TAXAMT').AsFloat      := 114.28;
  lDateFrom = CDate("January 01, 2017")
    lDtl.FindField('TAXINCLUSIVE').Value   := 1;
  lDateTo = CDate("December 31, 2017")
     lDtl.FindField('AMOUNT').AsFloat      := 2019;
     lDtl.FindField('CHANGED').AsString     := 'F';
  'For Post Date From & Date To'
    lDtl.Post;
  RptObject.Params.Find("DateFrom").Value = lDateFrom
     lBizObj.Save;
  RptObject.Params.Find("DateTo").Value  = lDateTo
    lTime := Now - lTime;
 
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
  'RptObject.Params.Find("DocProjectData").Value = 'Not use if AllDocProject is true
              mtInformation, [mbOk], 0);
  'RptObject.Params.Find("DocAreaData").Value    = 'Not use if AllDocArea is true
  finally
  'RptObject.Params.Find("DocAgentData").Value   = 'Not use if AllDocAgent is true
    lBizObj.Close;
  'RptObject.Params.Find("ItemAgentData").Value   = 'Not use if AllItemAgent is true
   end;
  RptObject.Params.Find("DocType").Value          = "PV" 'PV for Payment Voucher & OR for Official Receipt
end;
  'RptObject.Params.Find("DocumentData").Value    = 'Not use if AllDocument is true
  'RptObject.Params.Find("GroupBy").Value        = 'If you wanted to grouping the data
  RptObject.Params.Find("IncludeCancelled").Value = false
  'RptObject.Params.Find("ItemAreaData").Value    = 'Not use if AllItemArea is true
  'RptObject.Params.Find("ItemProjectData").Value = 'Not use if AllItemProject is true
  RptObject.Params.Find("PaymentMethodData").Value = "310-001"
  RptObject.Params.Find("PrintDocumentStyle").Value = false
  RptObject.Params.Find("SelectDate").Value        = true 'For Post Date
  'RptObject.Params.Find("SelectDocDate").Value    = 'For Doc Date
  RptObject.Params.Find("SortBy").Value            = "PostDate;DocNo"
  'Step 4: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDetail")
  Set lDataSet3 = RptObject.DataSets.Find("cdsTax")
  MsgBox "Count " & lDataSet.RecordCount
  'Step 5 Retrieve the output
  lDataSet.First
   While (not lDataSet.eof)
     MsgBox lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Description").AsString
lDataSet2.First
     While (not lDataSet2.eof)
  MsgBox lDataSet2.FindField("Code").AsString & " " & lDataSet2.FindField("Description").AsString
  lDataSet2.Next
     Wend
lDataSet.Next
  Wend
  'For GST List
  MsgBox "GST Code Count " & lDataSet3.RecordCount
  lDataSet3.First
  While (not lDataSet3.eof)
    MsgBox lDataSet3.FindField("Code").AsString
lDataSet3.Next
   Wend
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 5,526: Line 7,237:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-AR_Customer====
====AR_Customer====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AR_Customer Script   
! AR_Customer - Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_CustomerClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg AR_Customer.vbs
var lMain, lDtl, lBizObj, lBizApp : Variant;
Call CheckLogin
    lTime : TDateTime;
Call InsertData
begin
  lTime := Now;
  lBizApp := CreateOleObject('SQLAcc.BizApp');


  lBizObj := lBizApp.BizObjects.Find('AR_Customer');
Dim ComServer
  lMain  := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsBranch');


   try
Function CreateSQLAccServer
    lBizObj.New;
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    lMain.FindField('Code').value        := '300-Test';
End Function
    lMain.FindField('CompanyName').value := 'Testing 123';


    lDtl.Edit; //For 1st Branch
function CheckLogin
    lDtl.FindField('BranchName').AsString := 'BILLING';
  'Step 1: Create Com Server object
    lDtl.FindField('Address1').AsString  := 'Address1';
   Set ComServer = CreateSQLAccServer 'Create Com Server
    lDtl.FindField('Address2').AsString   := 'Address2';
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    lDtl.FindField('Address3').AsString   := 'Address3';
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
    lDtl.FindField('Address4').AsString  := 'Address4';
                'UserName, Password, DCF full path, Database filename
     lDtl.FindField('Attention').AsString  := 'Attention';
  END IF
    lDtl.FindField('Phone1').AsString    := 'Phone1';
End Function
    lDtl.FindField('Fax1').AsString      := 'Fax1';
    lDtl.FindField('Email').AsString      := 'EmailAddress';
    lDtl.Post;


    lDtl.Append; //For 2nd Branch
Function InsertData
    lDtl.FindField('BranchName').AsString := 'Branch1';
Dim BizObject, lMain, lDetail
    lDtl.FindField('Address1').AsString  := 'DAddress1';
   'Step 2: Find and Create the Biz Objects
    lDtl.FindField('Address2').AsString   := 'DAddress2';
   Set BizObject = ComServer.BizObjects.Find("AR_Customer")  
    lDtl.FindField('Address3').AsString  := 'DAddress3';
    lDtl.FindField('Address4').AsString   := 'DAddress4';
    lDtl.FindField('Attention').AsString  := 'DAttention';
    lDtl.FindField('Phone1').AsString    := 'DPhone1';
    lDtl.FindField('Fax1').AsString      := 'DFax1';
    lDtl.FindField('Email').AsString      := 'DEmailAddress';
    lDtl.Post;
    lBizObj.Save;


    lTime := Now - lTime;
  'Step 3: Set Dataset
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
              mtInformation, [mbOk], 0);
  Set lDetail = BizObject.DataSets.Find("cdsBranch") 'lDetail contains detail data 
   finally
 
    lBizObj.Close;
  'Begin Looping yr data
   end;
  'Step 4 : Insert Data - Master
end;
  BizObject.New
  lMain.FindField("Code").AsString      = "300-Test"
  lMain.FindField("CompanyName").AsString = "Cash Sales"
   
  'Step 5: Insert Data - Detail
  'For 1st Branch
  lDetail.Edit
  lDetail.FindField("BranchName").AsString  = "BILLING"
  lDetail.FindField("Address1").AsString    = "Address1"
  lDetail.FindField("Address2").AsString    = "Address2"
  lDetail.FindField("Address3").AsString    = "Address3"
  lDetail.FindField("Address4").AsString    = "Address4" 
  lDetail.FindField("Attention").AsString  = "Attention" 
  lDetail.FindField("Phone1").AsString      = "Phone1"
  lDetail.FindField("Fax1").AsString        = "Fax1"
  lDetail.FindField("Email").AsString      = "EmailAddress"
  lDetail.Post
 
  'For 2nd Branch
  lDetail.Append
  lDetail.FindField("BranchName").AsString  = "Branch1"
  lDetail.FindField("Address1").AsString    = "DAddress1"
  lDetail.FindField("Address2").AsString    = "DAddress2"
  lDetail.FindField("Address3").AsString    = "DAddress3"
  lDetail.FindField("Address4").AsString    = "DAddress4" 
  lDetail.FindField("Attention").AsString  = "DAttention" 
  lDetail.FindField("Phone1").AsString      = "DPhone1"
  lDetail.FindField("Fax1").AsString        = "DFax1"
  lDetail.FindField("Email").AsString      = "DEmailAddress"
  lDetail.Post
 
  'Step 6: Save Document
   BizObject.Save
  BizObject.Close
  'End Looping yr data
 
  'Step 7 : Logout after done 
  'ComServer.Logout
 
   MsgBox "Done" 
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 5,585: Line 7,320:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-AR_PM====
====AR_Customer-Edit====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AR_PM Script   
! AR_Customer - Edit Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_ARPMClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg AR_Customer.vbs
var lMain, lKO, lBizApp, lBizObj, V : Variant;
Call EditARCustomer
begin
   lBizApp := CreateOleObject('SQLAcc.BizApp');
Function CreateSQLAccServer
   try
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    lBizObj := lBizApp.BizObjects.Find('AR_PM');
End Function
    lMain   := lBizObj.DataSets.Find('MainDataSet');
    lKO    := lBizObj.DataSets.Find('cdsKnockOff');
Function EditARCustomer
 
Dim ComServer, BizObject, lDataSet, lDataSet2
    lBizObj.New;
    lMain.FindField('DOCKEY').Value           := -1;
  'Step 1 Create Com Server object
    lMain.FindField('DocNo').AsString        := '--PM Test--'; //Payment Document Number
   Set ComServer = CreateSQLAccServer 'Create Com Server
     lMain.FindField('CODE').AsString          := '300-A0001';
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    lMain.FindField('DocDate').Value          := '28 Aug 2016';
    ComServer.Login "ADMIN", "ADMIN", "C\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
    lMain.FindField('PostDate').Value        := '28 Aug 2016';
  END IF
    lMain.FindField('Description').AsString  := 'Payment for A/c';
    lMain.FindField('PaymentMethod').AsString := '320-000';
   'Step 2 Find and Create the Biz Objects
    lMain.FindField('DocAmt').AsFloat        := 1060;
  Set BizObject = ComServer.BizObjects.Find("AR_Customer")
    lMain.FindField('Cancelled').AsString    := 'F';
    lMain.FindField('CHANGED').AsString      := 'F';
  'Step 3 Set Dataset
 
   Set lMainDataSet = BizObject.DataSets.Find("MainDataSet") 'lMainDataSet contains master data
    V := lBizApp.CreateOleVariantArray(2);
  Set lDetailDataSet = BizObject.DataSets.Find("cdsBranch") 'lDetailDataSet contains detail data 
    V.SetItem(0, 'IV'); //Document Type is either is IV or DN for Sales & PI or SD for Purchase
 
     V.SetItem(1, '--IV Test--'); //Invoice Document Number
  'Step 4 Find Customer Code
 
  BizObject.Params.Find("Code").Value = "300-Test"
     if lKO.Locate('DocType;DocNo', V.AsOleVariant, False, False) then
 
       begin
  BizObject.Open
        lKO.Edit;
  BizObject.Edit
        lKO.FindField('KOAmt').ASFloat    := 500;
  lMainDataSet.Edit
        lKO.FindField('KnockOff').AsString := 'T';
  lMainDataSet.FindField("CompanyName").value = "Testing 123-Changed"
        lKO.Post;
       end;
  'Step 5 For 1st Branch
 
    v = "BILLING"
     lBizObj.Save;
    MessageDlg('AR_PM-DocNo : ''--PM Test--'' Posted...', mtInformation, [mbOK],0);
     if (lDetailDataSet.Locate("BranchName", v, false, false)) then
   finally
  lDetailDataSet.Edit
    lBizObj.Close;
      lDetailDataSet.FindField("Address1").AsString  = "Address1-Changed"
   end;
      lDetailDataSet.FindField("Address2").AsString  = "Address2-Changed"
end;
      lDetailDataSet.FindField("Address3").AsString  = "Address3-Changed"
      lDetailDataSet.FindField("Address4").AsString   = "Address4-Changed"
      lDetailDataSet.FindField("Attention").AsString  = "Attention-Changed"
      lDetailDataSet.FindField("Phone1").AsString    = "Phone1-Changed"
      lDetailDataSet.FindField("Fax1").AsString      = "Fax1-Changed"
      lDetailDataSet.FindField("Email").AsString      = "EmailAddress-Changed"
      lDetailDataSet.Post
end if
'Step 5 For 2nd Branch
     v = "Branch1"
   
     if (lDetailDataSet.Locate("BranchName", v, false, false)) then  
       lDetailDataSet.Edit
      lDetailDataSet.FindField("Address1").AsString  = "DAddress1-Changed"
      lDetailDataSet.FindField("Address2").AsString   = "DAddress2-Changed"
      lDetailDataSet.FindField("Address3").AsString  = "DAddress3-Changed"
       lDetailDataSet.FindField("Address4").AsString  = "DAddress4-Changed"
      lDetailDataSet.FindField("Attention").AsString  = "DAttention-Changed"
      lDetailDataSet.FindField("Phone1").AsString     = "DPhone1-Changed"
      lDetailDataSet.FindField("Fax1").AsString      = "DFax1-Changed"
      lDetailDataSet.FindField("Email").AsString      = "DEmailAddress-Changed"
      lDetailDataSet.Post 
  end IF
  'Step 6 Save Customer
   BizObject.Save
  BizObject.Close
   MsgBox "Done"
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 5,635: Line 7,397:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-AR_PM-Edit====
====GL.TrialBalance.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! AR_PM Script   
! GL Trial Balance  Report Object Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_ARPMClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg GL.TrialBalance.RO.vbs
var lMain, lKO, lBizApp, lBizObj, V : Variant;
Call GetGLTBData
begin
   lBizApp := CreateOleObject('SQLAcc.BizApp');
Function CreateSQLAccServer
   try
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    lBizObj := lBizApp.BizObjects.Find('AR_PM');
End Function
    lMain   := lBizObj.DataSets.Find('MainDataSet');
    lKO    := lBizObj.DataSets.Find('cdsKnockOff');
Function GetGLTBData
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF
   'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("GL.TrialBalance.RO")
  'Step 3: Spool parameters
  RptObject.Params.Find("AllProject").Value      = true
   RptObject.Params.Find("AllAgent").Value        = true
  RptObject.Params.Find("AllArea").Value        = true
  RptObject.Params.Find("LedgerType").Value      = "G" 'G = Legder, S = Debtor, P = Supplier
  'RptObject.Params.Find("ProjectData").Value    = 'Not use if AllArea is true
   RptObject.Params.Find("ShowZeroBalance").Value = false
  RptObject.Params.Find("SortBy").Value          = "PostDate;DocNo"
  RptObject.Params.Find("UseDescription2").Value = false
 
  lDateFrom = CDate("October 27, 2016")
  lDateTo = CDate("December 31, 2016")
  'For Post Date From & Date To'
  RptObject.Params.Find("DateFrom").Value      = lDateFrom
  RptObject.Params.Find("DateTo").Value        = lDateTo


    lDocKey := lBizObj.FindKeyByRef('DocNo', '--PM Test--');
  'RptObject.Params.Find("AgentData").Value      = 'Not use if AllAgent is true
    lBizObj.Params.Find('DocKey').Value := VarToStr(lDocKey);
  'RptObject.Params.Find("AreaData").Value      = 'Not use if AllArea is true
 
  RptObject.Params.Find("SortBy").Value         = "Code;Description"
  'Step 4: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsGLAccount")


    If not VarIsNull(lDocKey) Then begin
  MsgBox "Count " & lDataSet.RecordCount
      lBizObj.Open;
      lBizObj.Edit;
  'Step 5 Retrieve the output
      lMain.FindField('DOCKEY').Value          := -1;
  lDataSet.First
      lMain.FindField('DocDate').Value          := '28 Aug 2016';
  While (not lDataSet.eof)
      lMain.FindField('PostDate').Value        := '28 Aug 2016';
    MsgBox "Month To Date"
      lMain.FindField('Description').AsString   := 'Payment for A/c';
MsgBox lDataSet.FindField("Code").AsString & " DR=>" & lDataSet.FindField("MTDDR").AsString & " CR=>" & lDataSet.FindField("MTDCR").AsString
      lMain.FindField('PaymentMethod').AsString := '310-000';
      lMain.FindField('DocAmt').AsFloat        := 800.28;
MsgBox "Year To Date"
      lMain.FindField('UnappliedAmt').AsFloat  := 100.28;
MsgBox lDataSet.FindField("Code").AsString & " DR=>" & lDataSet.FindField("YTDDR").AsString & " CR=>" & lDataSet.FindField("YTDCR").AsString
      lMain.FindField('Cancelled').AsString     := 'F';
lDataSet.Next
      lMain.FindField('CHANGED').AsString      := 'F';
  Wend
 
 
      V := lBizApp.CreateOleVariantArray(2);
  'For Account List
      V.SetItem(0, 'IV'); //Document Type is either is IV or DN for Sales & PI or SD for Purchase
  lDataSet2.First
      V.SetItem(1, '--IV Test--');  //Document Number
  While (not lDataSet2.eof)
 
MsgBox lDataSet2.FindField("Code").AsString & " " & lDataSet2.FindField("Description").AsString
      if lKO.Locate('DocType;DocNo', V.AsOleVariant, False, False) then
lDataSet2.Next
        begin
   Wend
          lKO.Edit;
    
          lKO.FindField('KOAmt').AsFloat    := 700.28; // IV Knock Off/Offset Amount
End Function
          lKO.FindField('KnockOff').AsString := 'T';
          lKO.Post;
        end;
 
      lBizObj.Save;
      MessageDlg('AR_PM-DocNo : ''--PM Test--'' Updated...', mtInformation, [mbOK],0);
    end;
   finally
    lBizObj.Close;
   end;
end;
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 5,690: Line 7,474:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-ST_Item====
====Customer.Aging.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! ST_Item Script   
! Customer Aging  Report Object Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_ST_ItemClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg customer_aging_ro.vbs
var lMain, lDtl, lBizObj, lBizApp : Variant;
Call GetCustStatementData
    lTime : TDateTime;
begin
Function CreateSQLAccServer
  lTime := Now;
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
   lBizApp := CreateOleObject('SQLAcc.BizApp');
End Function
  lBizObj := lBizApp.BizObjects.Find('ST_ITEM');
  lMain  := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsUOM');


  try
Function GetCustStatementData
    lBizObj.New;
Const Quote = """"
    lMain.FindField('Code').AsString        := 'Test-1';
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo, lAgeData
    lMain.FindField('Description').AsString := 'Testing - Description';
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF


    lDtl.Edit; //For 1st UOM
  'Step 2: Find and Create the Report Objects
    lDtl.FindField('UOM').AsString    := 'PCS';
  Set RptObject = ComServer.RptObjects.Find("Customer.Aging.RO")
    lDtl.FindField('Rate').AsFloat    := 1;
    lDtl.FindField('RefCost').AsFloat  := 10.20;
  'Step 3: Spool parameters
    lDtl.FindField('RefPrice').AsFloat := 25.00;
  lAgeData = "<?xml version=" & Quote & "1.0" & Quote & " standalone=" & Quote & "yes" & Quote & "?>  <DATAPACKET Version=" & Quote & "2.0" & Quote & "><METADATA><FIELDS>" &_
    lDtl.Post;
      "<FIELD attrname=" & Quote & "ColumnNo" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "ColumnType" & Quote & " fieldtype=" & Quote & "string" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
      "<FIELD attrname=" & Quote & "Param1" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "Param2" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/>" &_
      "<FIELD attrname=" & Quote & "IsLocal" & Quote & " fieldtype=" & Quote & "boolean" & Quote & "/><FIELD attrname=" & Quote & "HeaderScript" & Quote & " fieldtype=" & Quote & "bin.hex" & Quote & " SUBTYPE=" & Quote & "Text" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
      "</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo=" & Quote & "0" & Quote & " ColumnType=" & Quote & "" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "1" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "2" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-1" & Quote & " Param2=" & Quote & "-1" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "3" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-2" & Quote & " Param2=" & Quote & "-2" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "4" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-3" & Quote & " Param2=" & Quote & "-3" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "5" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-4" & Quote & " Param2=" & Quote & "-4" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;" & Quote & "/>" &_
      "<ROW ColumnNo=" & Quote & "6" & Quote & " ColumnType=" & Quote & "B" & Quote & " Param1=" & Quote & "-999999" & Quote & " Param2=" & Quote & "-5" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;" & Quote & "/>" &_
      "</ROWDATA></DATAPACKET>"
  RptObject.Params.Find("ActualGroupBy").Value        = "Code;CompanyName" 'Fixed
'  RptObject.Params.Find("AgentData").Value            = 'Not use if AllAgent is True
  RptObject.Params.Find("AgingData").Value            = lAgeData 'Fixed


    lDtl.Append; //For 2nd UOM
  lDateTo = CDate("August 31, 2016")
    lDtl.FindField('UOM').AsString    := 'CTN';
  RptObject.Params.Find("AgingDate").Value            = lDateTo 
    lDtl.FindField('Rate').AsFloat    := 12;
    lDtl.FindField('RefCost').AsFloat  := 102.00;
    lDtl.FindField('RefPrice').AsFloat := 240.00;
    lDtl.Post;
    lBizObj.Save;


    lTime := Now - lTime;
  RptObject.Params.Find("AgingOn").Value              = "I" 'Fixed
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
  RptObject.Params.Find("AllAgent").Value            = true
              mtInformation, [mbOk], 0);
  RptObject.Params.Find("AllArea").Value              = true
   finally
  RptObject.Params.Find("AllCompany").Value          = false
     lBizObj.Close;
  RptObject.Params.Find("AllCompanyCategory").Value  = true
   end;
  RptObject.Params.Find("AllControlAccount").Value    = true
end;
  RptObject.Params.Find("AllCurrency").Value          = true
  RptObject.Params.Find("AllDocProject").Value        = true
'  RptObject.Params.Find("AreaData").Value            =  'Not use if AllArea is True
'  RptObject.Params.Find("CompanyCategoryData").Value  =  'Not use if AllCompanyCategory is True
  RptObject.Params.Find("CompanyData").Value          = "300-A0001"& vbCRLF & "300-C0001" 'Filter by Customer Code 300-A0001 & 300-C0001
'  RptObject.Params.Find("ControlAccountData").Value  =  'Not use if AllControlAccount is True
'  RptObject.Params.Find("CurrencyData").Value        =  'Not use if AllCurrency is True
'  RptObject.Params.Find("DocProjectData").Value      =  'Not use if AllDocProject is True
  RptObject.Params.Find("FilterPostDate").Value        = false
' RptObject.Params.Find("GroupBy").Value              = 'Not use
  RptObject.Params.Find("IncludePDC").Value        = false
  RptObject.Params.Find("IncludeZeroBalance").Value  = false
  RptObject.Params.Find("SortBy").Value              = "Code;CompanyName"
  RptObject.Params.Find("DateTo").Value              = lDateTo
 
   'Step 4: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocument")
  MsgBox "Count " & lDataSet.RecordCount
 
  'Step 5 Retrieve the output
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("Code").AsString & " " & lDataSet.FindField("CompanyName").AsString & " " & lDataSet.FindField("C1").AsString
lDataSet2.First
    While (not lDataSet2.eof)
  MsgBox lDataSet2.FindField("DocNo").AsString & " " & lDataSet2.FindField("C1").AsString
  lDataSet2.Next
     Wend
lDataSet.Next
   Wend
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 5,738: Line 7,564:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-ST_Item-Edit====
====GL.JE.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! ST_Item Script   
! GL Journal Voucher Report Object Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_ST_ItemClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg GLJE_ro.vbs
var lMain, lDtl, lBizObj, lBizApp, lDocKey, V : Variant;
Call GetCustomerData
begin
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizObj := lBizApp.BizObjects.Find('ST_ITEM');
  lMain  := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsUOM');


   lDocKey := lBizObj.FindKeyByRef('Code', '--Stock Item Test--');
Function CreateSQLAccServer
  lBizObj.Params.Find('DocKey').Value := VarToStr(lDocKey);
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
  try
End Function


    If not VarIsNull(lDocKey) Then begin
Function GetCustomerData
      lBizObj.Open;
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo
      lBizObj.Edit;
  'Step 1: Create Com Server object
      lMain.FindField('Description').value := 'Testing - Description';
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF


      V := lBizApp.CreateOleVariantArray(2);
  'Step 2: Find and Create the Report Objects
      V.SetItem(0, 'CTN'); //UOM
  Set RptObject = ComServer.RptObjects.Find("GL.JE.RO")  
      V.SetItem(1, '12');  //Rate


      if lDtl.Locate('UOM;Rate', V.AsOleVariant, False, False) then
  'Step 3: Spool parameters
        begin
  RptObject.Params.Find("AllCurrency").Value = true
          lDtl.Edit;
  RptObject.Params.Find("AllDocProject").Value = true
          lDtl.FindField('RefCost').AsFloat  := 10.20;
  RptObject.Params.Find("AllDocument").Value = true
          lDtl.FindField('RefPrice').AsFloat := 25.00;
  RptObject.Params.Find("AllItemProject").Value = true
          lDtl.Post;
  RptObject.Params.Find("AllItemArea").Value = true
        end;
  RptObject.Params.Find("AllItemAgent").Value = true
      lBizObj.Save;
  RptObject.Params.Find("AllDocAgent").Value = true
  RptObject.Params.Find("AllDocArea").Value = true
  RptObject.Params.Find("AllPaymentMethod").Value = true


      MessageDlg('ST_Item-ItemCode : ''--Stock Item Test--'' Updated...', mtInformation, [mbOK],0);
  lDateFrom = CDate("December 1, 2017")
    end;
   lDateTo = CDate("December 31, 2017")
   finally
    lBizObj.Close;
  end;
end;
</syntaxhighlight>
|}


<div style="float: right;">   [[#top|[top]]]</div>
  RptObject.Params.Find("DateFrom").Value = lDateFrom
  RptObject.Params.Find("DocDateFrom").Value = lDateFrom
  RptObject.Params.Find("DateTo").Value = lDateTo
  RptObject.Params.Find("DocDateTo").Value = lDateTo
  RptObject.Params.Find("IncludeCancelled").Value = false
  RptObject.Params.Find("PrintDocumentStyle").Value = false
  RptObject.Params.Find("SelectDate").Value = true 'Post Date
  RptObject.Params.Find("SelectDocDate").Value = false 'Doc Date
 
  'Step 4: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDetail")
   MsgBox "Count " & lDataSet.RecordCount


====Example-SL_IV====
  'Step 5 Retrieve the output
{| class="mw-collapsible mw-collapsed wikitable"
  lDataSet.First
! SL_IV Script   
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Description").AsString
lDataSet2.First
    While (not lDataSet2.eof)
  MsgBox lDataSet2.FindField("Code").AsString & " " & lDataSet2.FindField("Description").AsString
  lDataSet2.Next
    Wend
lDataSet.Next
  Wend
End Function
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====SL_CS====
{| class="mw-collapsible mw-collapsed wikitable"
! SL_CS Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_SL_IVClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg SL_CS.vbs
var lMain, lDtl, lSN, lBizObj, lBizApp : Variant;
Call InsertData
    lTime : TDateTime;
begin
  lTime := Now;
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizObj := lBizApp.BizObjects.Find('SL_IV');
  lMain  := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsDocDetail');
  lSN    := lBizObj.DataSets.Find('cdsSerialNumber');


   try
Function CreateSQLAccServer
    lBizObj.New;
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    lMain.FindField('DOCKEY').Value        := -1;
End Function
    lMain.FindField('DocNo').AsString      := '--IV Test--';
    lMain.FindField('CODE').AsString        := '300-A0001';
    lMain.FindField('DocDate').Value        := '28 Aug 2016';
    lMain.FindField('PostDate').Value      := '28 Aug 2016';
    lMain.FindField('TAXDATE').Value        := '28 Aug 2016';
    lMain.FindField('Description').AsString := 'Sales';
    lMain.FindField('Cancelled').AsString  := 'F';
    lMain.FindField('CHANGED').AsString    := 'F';
    lMain.Post;


    lDtl.Append; // For Tax Inclusive = True with override Tax Amount
Function InsertData
    lDtl.FindField('DTLKEY').Value        := -1;
Dim ComServer, BizObject, lDate
    lDtl.FindField('DOCKEY').Value        := -1;
    lDtl.FindField('SEQ').Value            := 1;
    lDtl.FindField('ItemCode').AsString    := 'ITEM A';
    lDtl.FindField('ACCOUNT').AsString    := '500-000'; //GL Sales Account
    lDtl.FindField('DESCRIPTION').AsString := 'Sales Item A';
    lDtl.FindField('QTY').AsFloat          := 1;
    lDtl.FindField('TAX').AsString        := 'SR';
    lDtl.FindField('TAXINCLUSIVE').Value  := 0;
    lDtl.FindField('UNITPRICE').AsFloat    := 435;//Including GST UnitPrice
    lDtl.FindField('AMOUNT').AsFloat      := 410.37; //Must Excluding GST (Qty * UnitPrice) // Less 0.01
    lDtl.FindField('TAXAMT').AsFloat      := 24.63; //Extra 0.01


    lDtl.DisableControls; //For Tax Inclusive Only where TaxAmt is not as Calc
  'Step 1: Create Com Server object
    try
  Set ComServer = CreateSQLAccServer 'Create Com Server
      lDtl.FindField('TAXINCLUSIVE').Value := 1;
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     finally
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
      lDtl.EnableControls;
  END IF
    end;
    lDtl.FindField('CHANGED').AsString    := 'F';
    lDtl.Post;


    lDtl.Append; // For Tax Inclusive = False with override Tax Amount
  'Step 2: Find and Create the Biz Objects
    lDtl.FindField('DTLKEY').Value        := -1;
   Set BizObject = ComServer.BizObjects.Find("SL_CS")  
    lDtl.FindField('DOCKEY').Value        := -1;
    lDtl.FindField('SEQ').Value            := 2;
    lDtl.FindField('ItemCode').AsString    := 'ITEM B';
    lDtl.FindField('ACCOUNT').AsString    := '500-000';
    lDtl.FindField('DESCRIPTION').AsString := 'Sales Item B';
    lDtl.FindField('QTY').AsFloat          := 1;
    lDtl.FindField('TAX').AsString        := 'SR';
    lDtl.FindField('TAXINCLUSIVE').Value   := 0;
    lDtl.FindField('UNITPRICE').AsFloat    := 94.43;
    lDtl.FindField('AMOUNT').AsFloat      := 94.43;
    lDtl.FindField('TAXAMT').AsFloat      := 5.66; //Less 0.01
    lDtl.FindField('CHANGED').AsString    := 'F';
    lDtl.Post;


    lDtl.Append; // For Serial Number
  'Step 3: Set Dataset
    lDtl.FindField('DTLKEY').Value        := -1;
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
    lDtl.FindField('DOCKEY').Value        := -1;
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data 
    lDtl.FindField('SEQ').Value            := 3;
 
    lDtl.FindField('ItemCode').AsString    := 'SN1';
  'Step 4 : Insert Data - Master
    lDtl.FindField('ACCOUNT').AsString    := '500-000';
  lDate = CDate("January 1, 2016")
    lDtl.FindField('DESCRIPTION').AsString := 'Sales Serial Number Item';
  BizObject.New
 
  lMainDataSet.FindField("DocKey").value = -1
    lSN.Append;
  lMainDataSet.FindField("DocNo").value = "--IV Test--"
    lSN.FindField('SERIALNUMBER').AsString := 'SN-00001';
  lMainDataSet.FindField("DocDate").value = lDate
    lSN.Post;
  lMainDataSet.FindField("PostDate").value = lDate
 
  lMainDataSet.FindField("Code").value = "300-C0001" 'Customer Code
    lSN.Append;
  lMainDataSet.FindField("Description").value = "Sales"
    lSN.FindField('SERIALNUMBER').AsString := 'SN-00002';
   
    lSN.Post;
  'Step 5: Insert Data - Detail
  'For Tax Inclusive = True with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "500-000" 'Sales Account Code  & can ignore if had itemcode
  lDetailDataSet.FindField("Description").value = "Sales Item A"
  lDetailDataSet.FindField("Qty").value =  1
  lDetailDataSet.FindField("Tax").value =  "SR"
  lDetailDataSet.FindField("TaxInclusive").value = 0
  lDetailDataSet.FindField("UnitPrice").value = 410.37
  lDetailDataSet.FindField("Amount").value = 410.37
  lDetailDataSet.FindField("TaxAmt").value = 24.63
 
  lDetailDataSet.DisableControls
  lDetailDataSet.FindField("TaxInclusive").value = 1
  lDetailDataSet.EnableControls
 
  lDetailDataSet.Post
 
  'For Tax Inclusive = False with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "500-000"
  lDetailDataSet.FindField("Description").value =  "Sales Item B"
  lDetailDataSet.FindField("Qty").value =  1
  lDetailDataSet.FindField("Tax").value =  "SR"
  lDetailDataSet.FindField("TaxInclusive").value = 0
  lDetailDataSet.FindField("UnitPrice").value = 94.43
  lDetailDataSet.FindField("Amount").value = 94.43
  lDetailDataSet.FindField("TaxAmt").value = 5.66
  lDetailDataSet.Post


    lDtl.FindField('QTY').AsFloat        := 2;
  'For With Item Code
    lDtl.FindField('TAX').AsString      := 'SR';
  lDetailDataSet.Append
    lDtl.FindField('TAXINCLUSIVE').Value := 0;
  lDetailDataSet.FindField("DtlKey").value = -1
    lDtl.FindField('UNITPRICE').AsFloat := 94.43;
  lDetailDataSet.FindField("DocKey").value = -1
    lDtl.FindField('TAXAMT').AsFloat    := 11.33;
  lDetailDataSet.FindField("ItemCode").value = "ANT"
    lDtl.FindField('CHANGED').AsString   := 'F';
  lDetailDataSet.FindField("Description").value = "Sales Item B"
    lDtl.Post;
  lDetailDataSet.FindField("Qty").value = 2
  lDetailDataSet.FindField("Tax").value =  "SR"
  lDetailDataSet.FindField("TaxInclusive").value = 0
  lDetailDataSet.FindField("UnitPrice").value = 100
  lDetailDataSet.FindField("Amount").value = 200
   lDetailDataSet.FindField("TaxAmt").value = 12
  lDetailDataSet.Post


    lBizObj.Save;
  'Step 6: Save Document
 
  BizObject.Save
    lTime := Now - lTime;
   BizObject.Close
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
  ComServer.Logout
              mtInformation, [mbOk], 0);
   MsgBox "Done"
   finally
End Function
    lBizObj.Close;
   end;
end;
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 5,892: Line 7,732:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Customer.IV.RO====
====Customer.PM.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Customer.IV.RO Report Object Script   
! Customer.PM.RO Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_RptObjClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg Customer.PM.RO.vbs
var lBizApp, lRptVar : Variant;
Call GetARPMData
    lTime : TDateTime;
    cdsMain, cdsDtl : TClientDataset;
Function CreateSQLAccServer
begin
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
   lTime := Now;
End Function
   cdsMain := TClientDataset.Create(nil);
   cdsDtl  := TClientDataset.Create(nil);
Function GetARPMData
  lBizApp := CreateOleObject('SQLAcc.BizApp');
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
   try
   'Step 1: Create Com Server object
    lRptVar := null;
   Set ComServer = CreateSQLAccServer 'Create Com Server
    lRptVar := lBizApp.RptObjects.Find('Customer.IV.RO');
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    lRptVar.Params.Find('SelectDate').AsBoolean          := True;
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
    lRptVar.Params.Find('DateFrom').AsDate                := '01/01/2015';
   END IF
    lRptVar.Params.Find('DateTo').AsDate                  := '31/12/2015';
    lRptVar.Params.Find('AllAgent').AsBoolean            := False;
  'Step 2: Find and Create the Report Objects
    lRptVar.Params.Find('AgentData').AsBlob              := '----'#13#10'HALIM'; //Filter by Agent code ---- & HALIM
  Set RptObject = ComServer.RptObjects.Find("Customer.PM.RO")  
    lRptVar.Params.Find('AllArea').AsBoolean              := True;
//    lRptVar.Params.Find('AreaData').AsBlob                := ; //Not use if AllArea is True
  'Step 3: Spool parameters
    lRptVar.Params.Find('AllCompany').AsBoolean          := True;
  'RptObject.Params.Find("AgentData").Value              = 'Not use if AllAgent is true
//    lRptVar.Params.Find('CompanyData').AsBlob             := ; //Not use if AllCompany is True
  'RptObject.Params.Find("CompanyCategoryData").Value    = 'Not use if AllCompanyCategory is true
    lRptVar.Params.Find('AllCurrency').AsBoolean          := True;
  RptObject.Params.Find("AllAgent").Value                = true
//    lRptVar.Params.Find('CurrencyData').AsBlob            := ; //Not use if AllCurrenty is True
  RptObject.Params.Find("AllCompanyCategory").Value      = true
    lRptVar.Params.Find('AllDocProject').AsBoolean        := True;
  RptObject.Params.Find("AllArea").Value                = true
//    lRptVar.Params.Find('DocProjectData').AsBlob          := ; //Not use if AllDocProject is True
  RptObject.Params.Find("AllCompany").Value              = true
    lRptVar.Params.Find('AllCompanyCategory').AsBoolean  := True;
  RptObject.Params.Find("AllCurrency").Value            = true
//    lRptVar.Params.Find('CompanyCategoryData').AsBlob    := ; //Not use if AllCompanyCategory is True
  RptObject.Params.Find("AllDocument").Value             = false
    lRptVar.Params.Find('AllDocument').AsBoolean          := True;
  RptObject.Params.Find("AllPaymentMethod").Value        = true
//    lRptVar.Params.Find('DocumentData').AsBlob           := ; //Not use if AllDocument is True
  'RptObject.Params.Find("AreaData").Value                = 'Not use if AllArea is true
    lRptVar.Params.Find('IncludeCancelled').AsBoolean  := True;
  'RptObject.Params.Find("CompanyData").Value            = 'Not use if AllCompany is true
    lRptVar.Params.Find('PrintDocumentStyle').AsBoolean := False;
  'RptObject.Params.Find("CurrencyData").Value           = 'Not use if AllCurrency is true
    lRptVar.Params.Find('AllItemProject').AsBoolean    := True;
    lRptVar.Params.Find('AllPaymentMethod').AsBoolean  := True;
    lRptVar.CalculateReport;


    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
  lDateFrom = CDate("January 01, 2017")
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDocDetail').XMLData; //Detail Data - To link Master Data use Dockey field
  lDateTo = CDate("December 31, 2017")
 
 
    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
  RptObject.Params.Find("DateFrom").Value                = lDateFrom
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml'); //Export To XML file
  RptObject.Params.Find("DateTo").Value                  = lDateTo
 
  RptObject.Params.Find("DocumentData").Value            = "VCOR-00049"
    lTime := Now - lTime;
  'RptObject.Params.Find("GroupBy").Value                = 'If you wanted to grouping the data
     MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
  RptObject.Params.Find("IncludeCancelled").Value        = false
              mtInformation, [mbOk], 0);
  'RptObject.Params.Find("PaymentMethodData").Value      = 'Not use if AllPaymentMethod is true
  finally
  RptObject.Params.Find("PrintDocumentStyle").Value      = false
     lRptVar := null;
  RptObject.Params.Find("SelectDate").Value              = true
     cdsMain.Free;
  RptObject.Params.Find("ShowUnappliedAmountOnly").Value = false
     cdsDtl.Free;
  RptObject.Params.Find("SortBy").Value                  = "PostDate;DocNo;Code"
   end;
  RptObject.Params.Find("AllDocProject").Value          = true
end;
  RptObject.Params.Find("AllItemProject").Value          = true
</syntaxhighlight>
  'RptObject.Params.Find("DocProjectData").Value          = 'Not use if AllDocProject is true
|}
  'RptObject.Params.Find("ItemProjectData").Value        = 'Not use if AllItemProject is true  
 
 
<div style="float: right;">  [[#top|[top]]]</div>
  'Step 4: Perform Report calculation
 
  RptObject.CalculateReport()
====Example-Stock.Item.RO====
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsKnockOff")
  Set lDataSet3 = RptObject.DataSets.Find("cdsKnockOffDetail")
  MsgBox "Count " & lDataSet.RecordCount
  'Step 5 Retrieve the output
  lDataSet.First
  While (not lDataSet.eof)
     MsgBox lDataSet.FindField("DocKey").AsString & " " &  lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Code").AsString
MsgBox "cdsKnockOff Count " & lDataSet2.RecordCount
lDataSet2.First
    While (not lDataSet2.eof)
  MsgBox lDataSet2.FindField("FromDocKey").AsString & " " & lDataSet2.FindField("DocNo").AsString & " " & lDataSet2.FindField("KOAmt").AsString
  lDataSet2.Next
    Wend
     MsgBox "cdsKnockOffDetail Count " & lDataSet3.RecordCount
lDataSet3.First
     While (not lDataSet3.eof)
      MsgBox lDataSet3.FindField("FromDocKey").AsString & " " & lDataSet3.FindField("DocNo").AsString & " " & lDataSet3.FindField("KOAmt").AsString
    lDataSet3.Next
     Wend
lDataSet.Next
   Wend
End Function
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====Sales.IV.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Stock.Item.RO Report Object Script   
! Sales.IV.RO Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_ST_ITEM_ROClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg Sales.IV.RO.vbs
var lBizApp, lRptVar : Variant;
Call GetSalesIVData
    lTime : TDateTime;
     cdsMain, cdsDtl, cdsCat : TClientDataset;
Function CreateSQLAccServer
    lSQL : string;
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
begin
End Function
   lTime    := Now;
   cdsMain  := TClientDataset.Create(nil);
Function GetSalesIVData
   cdsDtl   := TClientDataset.Create(nil);
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
   cdsCat   := TClientDataset.Create(nil);
  'Step 1: Create Com Server object
 
  Set ComServer = CreateSQLAccServer 'Create Com Server
   lBizApp := CreateOleObject('SQLAcc.BizApp');
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Sales.IV.RO")
   'Step 3: Spool parameters
  'RptObject.Params.Find("AgentData").Value              = 'Not use if AllAgent is true
  RptObject.Params.Find("AllAgent").Value              = true
  RptObject.Params.Find("AllArea").Value                = true
  RptObject.Params.Find("AllCompany").Value            = false
  RptObject.Params.Find("AllCurrency").Value            = true
  RptObject.Params.Find("AllDocProject").Value          = true
   RptObject.Params.Find("AllDocument").Value            = true
  RptObject.Params.Find("AllItem").Value                = true
   RptObject.Params.Find("AllItemProject").Value        = true
   RptObject.Params.Find("AllLocation").Value            = true
  RptObject.Params.Find("AllStockGroup").Value          = true
   RptObject.Params.Find("AllCompanyCategory").Value    = true
   RptObject.Params.Find("AllBatch").Value              = true
  RptObject.Params.Find("AllTariff").Value              = true 'For Version 776 & above
  'RptObject.Params.Find("TariffData").Value            = 'Not use if TariffData is true - For Version 776 & above
   'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyCategoryData").Value    = 'Not use if AllCompanyCategory is true
  RptObject.Params.Find("CompanyData").Value            = "300-C0001"
  'RptObject.Params.Find("CurrencyData").Value          = 'Not use if AllCurrency is true


   lSQL := 'SELECT * FROM ST_ITEM_CATEGORY ' +
   lDateFrom = CDate("January 01, 2017")
          'WHERE Category IN (''B-MOTOLORA'',''B-MAXIS'')';
   lDateTo = CDate("December 31, 2017")
   cdsCat.Data := lBizApp.DBManager.Execute(lSQL); //For filtering Category only
 
 
   RptObject.Params.Find("DateFrom").Value                = lDateFrom
   try
  RptObject.Params.Find("DateTo").Value                  = lDateTo
    lRptVar := null;
  'RptObject.Params.Find("DocProjectData").Value          = 'Not use if AllDocProject is true
    lRptVar := lBizApp.RptObjects.Find('Stock.Item.RO');
  'RptObject.Params.Find("DocumentData").Value            = 'Not use if AllDocument is true
    lRptVar.Params.Find('AllItem').AsBoolean              := True;
  'RptObject.Params.Find("GroupBy").Value                = 'If you wanted to grouping the data
    lRptVar.Params.Find('AllStockGroup').AsBoolean        := True;
  'RptObject.Params.Find("CategoryData").Value           = 'Not use if HasCategory is false
    lRptVar.Params.Find('AllCustomerPriceTag').AsBoolean  := True;
  'RptObject.Params.Find("CategoryTpl").Value             = 'For Internal use only
    lRptVar.Params.Find('AllSupplierPriceTag').AsBoolean  := True;
  RptObject.Params.Find("IncludeCancelled").Value        = false
//    lRptVar.Params.Find('CategoryData').AsBlob           := ; //Not use
  RptObject.Params.Find("HasCategory").Value            = false
//    lRptVar.Params.Find('CategoryTpl').AsBlob             := ; //Not use
  'RptObject.Params.Find("ItemData").Value               = 'Not use if AllItem is true
//    lRptVar.Params.Find('CustomerPriceTagData').AsBlob    := ; //Not use if AllCustomerPriceTag is True
  'RptObject.Params.Find("ItemProjectData").Value        = 'Not use if AllItemProject is true
//    lRptVar.Params.Find('SupplierPriceTagData').AsBlob    := ; //Not use if AllSupplierPriceTag is True
  'RptObject.Params.Find("LocationData").Value            = 'Not use if AllLocation is true
//    lRptVar.Params.Find('DateFrom').AsDate               := '01/01/2015'; //Not use if SelectDate is False
  'RptObject.Params.Find("ItemCategoryData").Value        = 'For Internal use only
//    lRptVar.Params.Find('DateTo').AsDate                  := '31/12/2015';
  'RptObject.Params.Find("BatchData").Value               = 'Not use if AllBatch is true
    lRptVar.Params.Find('HasAltStockItem').AsBoolean      := False;
  RptObject.Params.Find("PrintDocumentStyle").Value      = false
    lRptVar.Params.Find('HasBarcode').AsBoolean          := False;
  RptObject.Params.Find("SelectDate").Value              = true
    lRptVar.Params.Find('HasBOM').AsBoolean               := False;
  RptObject.Params.Find("SortBy").Value                  = "PostDate;DocNo;Code"
    lRptVar.Params.Find('HasCategory').AsBoolean          := False;
  'RptObject.Params.Find("StockGroupData").Value          = 'Not use if AllStockGroup is true
    lRptVar.Params.Find('HasCustomerItem').AsBoolean      := False;
 
    lRptVar.Params.Find('HasOpeningBalance').AsBoolean    := False;
 
    lRptVar.Params.Find('HasPurchasePrice').AsBoolean    := False;
  'Step 4: Perform Report calculation
    lRptVar.Params.Find('HasSellingPrice').AsBoolean      := False;
  RptObject.CalculateReport()
    lRptVar.Params.Find('HasSupplierItem').AsBoolean      := False;
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
//    lRptVar.Params.Find('ItemData').AsBlob                := 'ANT 1.0'#13#10'COVER'; //Filter by Item code ANT 1.0 & COVER
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocDetail")
//    lRptVar.Params.Find('ItemCategoryData').AsBlob        := cdsCat.XMLData; //Not use if SelectCategory is False
  MsgBox "Count " & lDataSet.RecordCount
     lRptVar.Params.Find('PrintActive').AsBoolean          := True;
    lRptVar.Params.Find('PrintInActive').AsBoolean        := True;
  'Step 5 Retrieve the output
    lRptVar.Params.Find('PrintNonStockControl').AsBoolean := True;
  lDataSet.First
    lRptVar.Params.Find('PrintStockControl').AsBoolean    := True;
  While (not lDataSet.eof)
    lRptVar.Params.Find('SelectCategory').AsBoolean      := False;
     MsgBox lDataSet.FindField("DocKey").AsString & " " &  lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Code").AsString
    lRptVar.Params.Find('SelectDate').AsBoolean          := False;
MsgBox "cdsDocDetail Count " & lDataSet2.RecordCount
    lRptVar.Params.Find('SortBy').AsString                 := 'Code';
lDataSet2.First
//    lRptVar.Params.Find('StockGroupData').AsBlob        := ; //Not use if AllStockGroup is True
    While (not lDataSet2.eof)
    lRptVar.CalculateReport;
  MsgBox lDataSet2.FindField("DocKey").AsString & " " & lDataSet2.FindField("ItemCode").AsString & " " & lDataSet2.FindField("Amount").AsString
  lDataSet2.Next
    Wend
lDataSet.Next
  Wend
End Function
</syntaxhighlight>
|}


    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData; //Master Data
<div style="float: right;">  [[#top|[top]]]</div>
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsUOM').XMLData; //Detail Data - To link Master Data use Code field


    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
====Customer.DueDocument.RO====
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file
{| class="mw-collapsible mw-collapsed wikitable"
 
! Customer.DueDocument.RO Script   
    lTime := Now - lTime;
|-
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
|  
              mtInformation, [mbOk], 0);
<syntaxhighlight lang="vb">
  finally
'Copy below script & paste to notepad & name it as eg Customer.DueDocument.RO.vbs
    lRptVar := null;
Call GetData
    cdsMain.Free;
    cdsDtl.Free;
Function CreateSQLAccServer
    cdsCat.Free;
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
  end;
End Function
end;
   
</syntaxhighlight>
Function GetData
|}
Dim ComServer, RptObject, lDataSet, lDateTo
 
  'Step 1: Create Com Server object
<div style="float: right;">  [[#top|[top]]]</div>
  Set ComServer = CreateSQLAccServer 'Create Com Server
 
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
====Example-Customer.Statement.RO====
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"  
{| class="mw-collapsible mw-collapsed wikitable"
  END IF
! Customer.Statement.RO Report Object Script   
|-
  'Step 2: Find and Create the Report Objects
|  
   Set RptObject = ComServer.RptObjects.Find("Customer.DueDocument.RO")  
<syntaxhighlight lang="delphi">
   
procedure TfmMain.dxbb_StatementClick(Sender: TObject);
  'Step 3: Spool parameters
var lBizApp, lRptVar : Variant;
  'RptObject.Params.Find("AgentData").Value              = 'Not use if AllAgent is true
    lTime : TDateTime;
  RptObject.Params.Find("AllAgent").Value              = true
    cdsMain, cdsDtl : TClientDataset;
  RptObject.Params.Find("AllArea").Value                = true
    s : string;
  RptObject.Params.Find("AllCompany").Value            = false
begin
  RptObject.Params.Find("AllCompanyCategory").Value    = true
  lTime := Now;
  RptObject.Params.Find("AllCurrency").Value            = true
   cdsMain := TClientDataset.Create(nil);
  RptObject.Params.Find("AllDocProject").Value          = true
  cdsDtl  := TClientDataset.Create(nil);
  RptObject.Params.Find("AllItemProject").Value        = true
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  'RptObject.Params.Find("AreaData").Value             = 'Not use if AllArea is true
  s := '<?xml version="1.0" standalone="yes"?> <DATAPACKET Version="2.0"><METADATA><FIELDS>'+
  'RptObject.Params.Find("CompanyCategoryData").Value   = 'Not use if AllCompanyCategory is true
      '<FIELD attrname="ColumnNo" fieldtype="i4" required="true"/><FIELD attrname="ColumnType" fieldtype="string" WIDTH="1"/>'+
  RptObject.Params.Find("CompanyData").Value            = "300-A0003"
      '<FIELD attrname="Param1" fieldtype="i4" required="true"/><FIELD attrname="Param2" fieldtype="i4" required="true"/>'+
  'RptObject.Params.Find("CurrencyData").Value          = 'Not use if AllCurrency is true
      '<FIELD attrname="IsLocal" fieldtype="boolean"/><FIELD attrname="HeaderScript" fieldtype="bin.hex" SUBTYPE="Text" WIDTH="1"/>'+
  'RptObject.Params.Find("DocProjectData").Value        = 'Not use if AllDocProject is true
      '</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo="0" ColumnType="" Param1="0" Param2="0" IsLocal="FALSE"/>'+
  'RptObject.Params.Find("GroupBy").Value              = 'If you wanted to grouping the data
      '<ROW ColumnNo="1" ColumnType="A" Param1="0" Param2="0" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;"/>'+
  'RptObject.Params.Find("ItemProjectData").Value      = 'Not use if AllItemProject is true
      '<ROW ColumnNo="2" ColumnType="A" Param1="-1" Param2="-1" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;"/>'+
  RptObject.Params.Find("PrintContra").Value            = true
      '<ROW ColumnNo="3" ColumnType="A" Param1="-2" Param2="-2" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;"/>'+
  RptObject.Params.Find("PrintCreditNote").Value        = true
      '<ROW ColumnNo="4" ColumnType="A" Param1="-3" Param2="-3" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;"/>'+
  RptObject.Params.Find("PrintDebitNote").Value         = true
      '<ROW ColumnNo="5" ColumnType="A" Param1="-4" Param2="-4" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;"/>'+
  RptObject.Params.Find("PrintInvoice").Value          = true
      '<ROW ColumnNo="6" ColumnType="B" Param1="-999999" Param2="-5" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;"/>'+
  RptObject.Params.Find("PrintOverDue").Value          = true
      '</ROWDATA></DATAPACKET>';
  RptObject.Params.Find("PrintUnDue").Value            = true
   try
  RptObject.Params.Find("ShowForeignCurrency").Value    = true
    lRptVar := null;
  RptObject.Params.Find("ShowLocalCurrency").Value     = true
    lRptVar := lBizApp.RptObjects.Find('Customer.Statement.RO');
  RptObject.Params.Find("SortBy").Value                = "PostDate;DocNo;Code"
// lRptVar.Params.Find('AgentData').AsBlob              := ; //Not use if AllAgent is True
 
    lRptVar.Params.Find('AgingData').AsString          := s; //Fixed
  lDateTo = CDate("April 12, 2018")
    lRptVar.Params.Find('AgingOn').AsString            := 'I'; //Fixed
 
    lRptVar.Params.Find('AllAgent').AsBoolean          := True;
  RptObject.Params.Find("DateTo").Value                = lDateTo
    lRptVar.Params.Find('AllArea').AsBoolean            := True;
  RptObject.Params.Find("IncludePDCheque").Value        = true  
    lRptVar.Params.Find('AllCompany').AsBoolean        := False;
   
    lRptVar.Params.Find('AllCompanyCategory').AsBoolean := True;
  'Step 4: Perform Report calculation
    lRptVar.Params.Find('AllControlAccount').AsBoolean  := True;
  RptObject.CalculateReport()
    lRptVar.Params.Find('AllCurrency').AsBoolean        := True;
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
    lRptVar.Params.Find('AllDocProject').AsBoolean      := True;
  MsgBox "Count " & lDataSet.RecordCount
//    lRptVar.Params.Find('AreaData').AsBlob             := ; //Not use if AllArea is True
//    lRptVar.Params.Find('CompanyCategoryData').AsBlob   := ; //Not use if AllCompanyCategory is True
  'Step 5 Retrieve the output
    lRptVar.Params.Find('CompanyData').AsBlob          := '300-A0001'#13#10'300-C0001'; //Filter by Customer Code 300-A0001 & 300-C0001
  lDataSet.First
//    lRptVar.Params.Find('ControlAccountData').AsBlob    := ; //Not use if AllControlAccount is True
  While (not lDataSet.eof)
//    lRptVar.Params.Find('CurrencyData').AsBlob          := ; //Not use if AllCurrency is True
    MsgBox "Dockey " & lDataSet.FindField("DocKey").AsString
    lRptVar.Params.Find('DateFrom').AsDate              := '01 Aug 2016';
MsgBox "DocNo " & lDataSet.FindField("DocNo").AsString
    lRptVar.Params.Find('DateTo').AsDate                := '31 Aug 2016';
MsgBox "DocAmt " & lDataSet.FindField("DocAmt").AsString
//    lRptVar.Params.Find('DocProjectData').AsBlob        := ; //Not use if AllDocProject is True
MsgBox "Outstanding " & lDataSet.FindField("Outstanding").AsString
    lRptVar.Params.Find('IncludeZeroBalance').AsBoolean := False;
MsgBox "Code " & lDataSet.FindField("Code").AsString
    lRptVar.Params.Find('SelectDate').AsBoolean         := True;
lDataSet.Next
    lRptVar.Params.Find('SortBy').AsString              := 'CompanyCategory;Code;CompanyName;Agent;Area;CurrencyCode;ControlAccount';
   Wend
    lRptVar.Params.Find('StatementDate').AsDate        := '31 Aug 2016'; // Norm same as DateTo
End Function
    lRptVar.Params.Find('StatementType').AsString      := 'O'; //O := Open Item, B := B/F
 
    lRptVar.CalculateReport;
 
    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;     //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDocument').XMLData; //Detail Data - To link Master Data use Code field
 
    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml'); //Export To XML file
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
   end;
end;
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 6,108: Line 7,987:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-GL Account List For Sales & Purchase 1====
====Customer.IV.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! GL_Acc Object Script   
! Customer.IV.RO Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxbb_GLAccClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg Customer.IV.RO.vbs
var BizApp : Variant;
Call GetData
    lDataSet : TClientDataSet;
     ASQL : String;
Function CreateSQLAccServer
begin
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
   //For Debtor List => SpecialAccType = DR
End Function
   //For Creditor List => SpecialAccType = CR
   BizApp := CreateOleObject('SQLAcc.BizApp');
Function GetData
   lDataSet := TClientDataSet.Create(Self);
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
   try
  'Step 1: Create Com Server object
    ASQL := 'SELECT A.Code, A.Description FROM GL_ACC A '+
  Set ComServer = CreateSQLAccServer 'Create Com Server
            'LEFT OUTER JOIN GL_ACC B ON (A.Dockey=B.Parent) '+
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
            'WHERE A.Parent<>-1 ' +
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
            'AND B.Dockey IS NULL ' +
  END IF
            'AND A.SpecialAccType = '''' '+
            'ORDER BY A.CODE ';
  'Step 2: Find and Create the Report Objects
     lDataSet.Data := BizApp.DBManager.Execute(ASQL);
   Set RptObject = ComServer.RptObjects.Find("Customer.IV.RO")
    lDataset.SaveToFile('C:\Temp\_List.xml', dfXML); //Export To XML file
   finally
  'Step 3: Spool parameters
    lDataSet.Free;
  'RptObject.Params.Find("AgentData").Value            = 'Not use if AllAgent is true
   end;
   'RptObject.Params.Find("CompanyCategoryData").Value  = 'Not use if AllCompanyCategory is true
end;
  RptObject.Params.Find("AllAgent").Value              = true
</syntaxhighlight>
   RptObject.Params.Find("AllCompanyCategory").Value    = true
|}
  RptObject.Params.Find("AllArea").Value                = true
 
  RptObject.Params.Find("AllCompany").Value            = true
<div style="float: right;">  [[#top|[top]]]</div>
   RptObject.Params.Find("AllCurrency").Value            = true
 
  RptObject.Params.Find("AllDocument").Value            = false
====Example-GL Account List For Sales & Purchase 2====
   RptObject.Params.Find("AllPaymentMethod").Value      = true
{| class="mw-collapsible mw-collapsed wikitable"
  'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
! GL_Acc Object Script 
  'RptObject.Params.Find("CompanyData").Value          = 'Not use if AllCompany is true
|-
  'RptObject.Params.Find("CurrencyData").Value          = 'Not use if AllCurrency is true
|
 
<syntaxhighlight lang="delphi">
  lDateFrom = CDate("January 01, 2017")
procedure TfmMain.dxbb_GLAccClick(Sender: TObject);
  lDateTo = CDate("December 31, 2017")
var BizApp, BizObj : Variant;
 
    lDataSet1, lDataSet2 : TClientDataSet;
  RptObject.Params.Find("DateFrom").Value                = lDateFrom
     ASQL : String;
  RptObject.Params.Find("DateTo").Value                  = lDateTo
begin
  RptObject.Params.Find("DocumentData").Value            =  "IV-00012"
   //For Debtor List => SpecialAccType = DR
  'RptObject.Params.Find("GroupBy").Value                = 'If you wanted to grouping the data
  //For Creditor List => SpecialAccType = CR
  RptObject.Params.Find("IncludeCancelled").Value        = true
  BizApp := CreateOleObject('SQLAcc.BizApp');
  'RptObject.Params.Find("PaymentMethodData").Value      = 'Not use if AllPaymentMethod is true
  BizObj := BizApp.BizObjects.Find('GL_Acc');
  RptObject.Params.Find("PrintDocumentStyle").Value     = false
  RptObject.Params.Find("SelectDate").Value              = true
  RptObject.Params.Find("ShowUnappliedAmountOnly").Value = true
  RptObject.Params.Find("SortBy").Value                  = "DocDate;DocNo;Code"
  RptObject.Params.Find("AllDocProject").Value          = true
  RptObject.Params.Find("AllItemProject").Value          = true
  'RptObject.Params.Find("DocProjectData").Value        = 'Not use if AllDocProject is true
  'RptObject.Params.Find("ItemProjectData  ").Value      = 'Not use if AllItemProject is true
   
  'Step 4: Perform Report calculation
   RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
   Set lDataSet2 = RptObject.DataSets.Find("cdsDocDetail")
  MsgBox "Count " & lDataSet.RecordCount
  'Step 5 Retrieve the output
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "DocNo " & lDataSet.FindField("DocNo").AsString
MsgBox "DocAmt " & lDataSet.FindField("DocAmt").AsString
MsgBox "PaymentAmt " & lDataSet.FindField("PaymentAmt").AsString
MsgBox "cdsDocDetail Count " & lDataSet2.RecordCount
lDataSet2.First
    While (not lDataSet2.eof)
  MsgBox "Account " & lDataSet2.FindField("Account").AsString
  MsgBox "Description " & lDataSet2.FindField("Description").AsString
  MsgBox "Amount " & lDataSet2.FindField("Amount").AsString
  lDataSet2.Next
     Wend
lDataSet.Next
   Wend
End Function
</syntaxhighlight>
|}


  lDataSet1 := TClientDataSet.Create(Self);
<div style="float: right;">   [[#top|[top]]]</div>
  lDataSet2 := TClientDataSet.Create(Self);
   try
    ASQL :='Parent<>-1 ' +
          'AND (SpecialAccType IS NULL OR SpecialAccType = '''' ' +
          'OR SpecialAccType = '''') ';
    lDataSet1.XMLData:= BizObj.Select('Dockey,Code,Description', ASQL, 'Code', 'SX', '', '');


    lDataSet2.XMLData:= BizObj.Select('Parent', '', 'Code', 'SX', '', '');
====Sales.OutstandingSO.RO====
 
{| class="mw-collapsible mw-collapsed wikitable"
    lDataset2.First; // Remove Parent Account
! Sales.OutstandingSO.RO Script 
    while not lDataset2.Eof do begin
|-
      if lDataset1.Locate('Dockey', lDataSet2.FindField('Parent').AsString, []) then
|
        lDataset1.Delete;
<syntaxhighlight lang="vb">
      lDataset2.Next;
'Copy below script & paste to notepad & name it as eg Sales.OutstandingSO.RO.vbs
    end;
Call GetData
    lDataset1.MergeChangeLog;
    lDataset1.SaveToFile('C:\Temp\_List.xml', dfXML); //Export To XML file
Function CreateSQLAccServer
   finally
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
    lDataSet1.Free;
End Function
    lDataSet2.Free;
   end;
Function GetData
end;
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
</syntaxhighlight>
  'Step 1: Create Com Server object
|}
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Sales.OutstandingSO.RO")  
  'Step 3: Spool parameters
  'RptObject.Params.Find("AgentData").Value            = 'Not use if AllAgent is true
  'RptObject.Params.Find("CompanyCategoryData").Value  = 'Not use if AllCompanyCategory is true
  'RptObject.Params.Find("LocationData").Value        = 'Not use if AllLocation is true
  'RptObject.Params.Find("StockGroupData").Value      = 'Not use if AllStockGroup is true
  RptObject.Params.Find("AllAgent").Value              = true
  RptObject.Params.Find("AllArea").Value              = true
  RptObject.Params.Find("AllCompany").Value            = true
  RptObject.Params.Find("AllDocument").Value          = false
  RptObject.Params.Find("AllItem").Value              = true
  RptObject.Params.Find("AllItemProject").Value        = true
  'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyData").Value          = 'Not use if AllCompany is true
   RptObject.Params.Find("AllTariff").Value              = true 'For Version 776 & above
   'RptObject.Params.Find("TariffData").Value            = 'Not use if TariffData is true - For Version 776 & above


<div style="float: right;">   [[#top|[top]]]</div>
    
 
  lDateFrom = CDate("January 01, 2017")
====Example-Customer.Aging.RO====
  lDateTo = CDate("December 31, 2017")  
{| class="mw-collapsible mw-collapsed wikitable"
    
! Customer Aging Report Object Script 
   'RptObject.Params.Find("DateFrom").Value              = lDateFrom
|-
   'RptObject.Params.Find("DateTo").Value                = lDateTo
|
  'RptObject.Params.Find("DeliveryDateFrom").Value      = lDateFrom
<syntaxhighlight lang="delphi">
  'RptObject.Params.Find("DeliveryDateTo").Value       = lDateTo
procedure TfmMain.dxbb_AgingClick(Sender: TObject);
  RptObject.Params.Find("DocumentData").Value           = "SO-00007"& vbCRLF & "SO-00009"
var lBizApp, lRptVar : Variant;
  'RptObject.Params.Find("GroupBy").Value               = 'If you wanted to grouping the data
    lTime : TDateTime;
  RptObject.Params.Find("IncludeCancelled").Value       = false
    cdsMain, cdsDtl : TClientDataset;
  'RptObject.Params.Find("ItemData").Value               = 'Not use if AllItem is true
    s : string;
   RptObject.Params.Find("PrintFulfilledItem").Value    = true 'Print transfered info
begin
  RptObject.Params.Find("PrintOutstandingItem").Value  = true 'Print untransfer info
   lTime := Now;
  'RptObject.Params.Find("ItemProjectData").Value      = 'Not use if AllItemProject is true
   cdsMain := TClientDataset.Create(nil);
  RptObject.Params.Find("SelectDate").Value            = false
  cdsDtl  := TClientDataset.Create(nil);
  RptObject.Params.Find("SelectDeliveryDate").Value    = false
   lBizApp := CreateOleObject('SQLAcc.BizApp');
  RptObject.Params.Find("SortBy").Value                = "DocDate;DocNo;Code"
 
  RptObject.Params.Find("AllDocProject").Value          = true
  s := '<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS>'+
  RptObject.Params.Find("AllLocation").Value           = true
      '<FIELD attrname="ColumnNo" fieldtype="i4" required="true"/><FIELD attrname="ColumnType" fieldtype="string" WIDTH="1"/>'+
  RptObject.Params.Find("AllCompanyCategory").Value    = true
      '<FIELD attrname="Param1" fieldtype="i4" required="true"/><FIELD attrname="Param2" fieldtype="i4" required="true"/>'+
  RptObject.Params.Find("AllBatch").Value              = true
      '<FIELD attrname="IsLocal" fieldtype="boolean"/><FIELD attrname="HeaderScript" fieldtype="bin.hex" SUBTYPE="Text" WIDTH="1"/>'+
  RptObject.Params.Find("HasCategory").Value            = false
       '</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo="0" ColumnType="" Param1="0" Param2="0" IsLocal="FALSE"/>'+
  RptObject.Params.Find("AllStockGroup").Value          = true
      '<ROW ColumnNo="1" ColumnType="A" Param1="0" Param2="0" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;"/>'+
  'RptObject.Params.Find("CategoryData").Value          = 'For Internal use only
      '<ROW ColumnNo="2" ColumnType="A" Param1="-1" Param2="-1" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;"/>'+
  'RptObject.Params.Find("CategoryTpl").Value          = 'For Internal use only
      '<ROW ColumnNo="3" ColumnType="A" Param1="-2" Param2="-2" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;"/>'+
  'RptObject.Params.Find("ItemCategoryData").Value      = 'For Internal use only
      '<ROW ColumnNo="4" ColumnType="A" Param1="-3" Param2="-3" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;"/>'+
  'RptObject.Params.Find("DocProjectData").Value        = 'Not use if AllDocProject is true
      '<ROW ColumnNo="5" ColumnType="A" Param1="-4" Param2="-4" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;"/>'+
  'RptObject.Params.Find("BatchData").Value            = 'Not use if AllBatch is true
      '<ROW ColumnNo="6" ColumnType="B" Param1="-999999" Param2="-5" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;"/>'+
  RptObject.Params.Find("TranferDocFilterDate").Value  = false
      '</ROWDATA></DATAPACKET>';
 
   try
   
    lRptVar := null;
  'Step 4: Perform Report calculation
    lRptVar := lBizApp.RptObjects.Find('Customer.Aging.RO');
  RptObject.CalculateReport()
    lRptVar.Params.Find('ActualGroupBy').AsString      := 'Code;CompanyName'; //Fixed
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
//    lRptVar.Params.Find('AgentData').AsBlob              := ; //Not use if AllAgent is True
  Set lDataSet2 = RptObject.DataSets.Find("cdsTransfer")
    lRptVar.Params.Find('AgingData').AsString          := s;
  MsgBox "Count " & lDataSet.RecordCount
    lRptVar.Params.Find('AgingDate').AsDate            := '31 Aug 2016';
    lRptVar.Params.Find('AgingOn').AsString            := 'I'; //Fixed
  'Step 5 Retrieve the output
    lRptVar.Params.Find('AllAgent').AsBoolean          := True;
  lDataSet.First
    lRptVar.Params.Find('AllArea').AsBoolean           := True;
  While (not lDataSet.eof)
    lRptVar.Params.Find('AllCompany').AsBoolean        := True;
     MsgBox "DocKey " & lDataSet.FindField("DocKey").AsString
    lRptVar.Params.Find('AllCompanyCategory').AsBoolean := True;
MsgBox "DtlKey " & lDataSet.FindField("Dtlkey").AsString
    lRptVar.Params.Find('AllControlAccount').AsBoolean  := True;
MsgBox "DocNo " & lDataSet.FindField("DocNo").AsString
    lRptVar.Params.Find('AllCurrency').AsBoolean        := True;
MsgBox "Item Code " & lDataSet.FindField("ItemCode").AsString
    lRptVar.Params.Find('AllDocProject').AsBoolean      := True;
MsgBox "Org Qty " & lDataSet.FindField("SQty").AsString
//    lRptVar.Params.Find('AreaData').AsBlob            := ; //Not use if AllArea is True
MsgBox "Outstanding Qty " & lDataSet.FindField("OutstandingQty").AsString
//    lRptVar.Params.Find('CompanyCategoryData').AsBlob := ; //Not use if AllCompanyCategory is True
//    lRptVar.Params.Find('CompanyData').AsBlob        := ; //Not use if AllCompany is True
MsgBox "cdsDocDetail Count " & lDataSet2.RecordCount
//    lRptVar.Params.Find('ControlAccountData').AsBlob  := ; //Not use if AllControlAccount is True
lDataSet2.First
//    lRptVar.Params.Find('CurrencyData').AsBlob        := ; //Not use if AllCurrency is True
     While (not lDataSet2.eof)
//    lRptVar.Params.Find('DocProjectData').AsBlob      := ; //Not use if AllDocProject is True
      MsgBox "FromDocKey " & lDataSet2.FindField("FromDocKey").AsString
     lRptVar.Params.Find('FilterPostDate').AsBoolean      := True;
  MsgBox "FromDtlKey " & lDataSet2.FindField("FromDtlkey").AsString
//    lRptVar.Params.Find('GroupBy
  MsgBox "DocType " & lDataSet2.FindField("DocType").AsString
    lRptVar.Params.Find('IncludePDC').AsBoolean        := False;
  MsgBox "DocNo " & lDataSet2.FindField("DocNo").AsString
     lRptVar.Params.Find('IncludeZeroBalance').AsBoolean := False;
  MsgBox "DocDate " & lDataSet2.FindField("DocDate").AsString
    lRptVar.Params.Find('SortBy').AsString             := 'Code;CompanyName';
  MsgBox "Transfer Qty " & lDataSet2.FindField("TransferQty").AsString
    lRptVar.Params.Find('DateTo').AsDate                := '31 Aug 2016';
  lDataSet2.Next
    lRptVar.Params.Find('IncludeKnockedOffDetail').AsBoolean := False;
    Wend
lDataSet.Next
  Wend
End Function
</syntaxhighlight>
|}


    lRptVar.CalculateReport;
<div style="float: right;">  [[#top|[top]]]</div>


    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
====Common.PaymentMethod.RO====
     cdsDtl.XMLData := lRptVar.DataSets.Find('cdsDocument').XMLData; //Detail Data - To link Master Data use Code field
{| class="mw-collapsible mw-collapsed wikitable"
! Common.PaymentMethod.RO Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg Common.PaymentMethod.RO.vbs
Call GetInfo
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
Function GetInfo
Dim ComServer, RptObject, lDataSet1, lDataSet2
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
  END IF
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Common.PaymentMethod.RO")
   
  'Step 3: Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet1 = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsPaymentAccount") 'You can link with lDataSet1 using Code to get the description


    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
  MsgBox "Count " & lDataSet1.RecordCount
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file
 
  'Step 5 Retrieve the output
    lTime := Now - lTime;
  lDataSet1.First
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
  While (not lDataSet1.eof)
              mtInformation, [mbOk], 0);
MsgBox "Code : " & lDataSet1.FindField("Code").AsString
  finally
lDataSet1.Next
    lRptVar := null;
  Wend   
    cdsMain.Free;
 
    cdsDtl.Free;
  MsgBox "Count " & lDataSet2.RecordCount
   end;
 
end;
  lDataSet2.First
  While (not lDataSet2.eof)
MsgBox "Code : " & lDataSet2.FindField("Code").AsString
MsgBox "Description : " & lDataSet2.FindField("Description").AsString
lDataSet2.Next
   Wend   
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 6,265: Line 8,232:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-GL.CB.RO====
====Common.Agent.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! GL Cash Book Report Object Script   
! Common.Agent.RO Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TfmMain.dxBB_CBClick(Sender: TObject);
'Copy below script & paste to notepad & name it as eg Common.Agent.RO.vbs
var lBizApp, lRptVar : Variant;
Call GetInfo
    lTime : TDateTime;
   
    cdsMain, cdsDtl, cdsTax : TClientDataset;
Function CreateSQLAccServer
begin
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
  lTime := Now;
End Function
  cdsMain := TClientDataset.Create(nil);
  cdsDtl := TClientDataset.Create(nil);
Function GetInfo
  cdsTax  := TClientDataset.Create(nil);
Dim ComServer, RptObject, lDataSet1
   lBizApp := CreateOleObject('SQLAcc.BizApp');
  'Step 1: Create Com Server object
  try
  Set ComServer = CreateSQLAccServer 'Create Com Server
    lRptVar := null;
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    lRptVar := lBizApp.RptObjects.Find('GL.CB.RO');
     ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB"
    lRptVar.Params.Find('AllCurrency').AsBoolean          := True;
  END IF
    lRptVar.Params.Find('AllDocProject').AsBoolean        := True;
   
    lRptVar.Params.Find('AllDocument').AsBoolean          := True;
  'Step 2: Find and Create the Report Objects
    lRptVar.Params.Find('AllItemProject').AsBoolean      := True;
  Set RptObject = ComServer.RptObjects.Find("Common.Agent.RO")  
    lRptVar.Params.Find('AllItemArea').AsBoolean          := True;
     lRptVar.Params.Find('AllItemAgent').AsBoolean        := True;
    lRptVar.Params.Find('AllDocAgent').AsBoolean          := True;
  'Step 3: Perform Report calculation
    lRptVar.Params.Find('AllDocArea').AsBoolean          := True;
  RptObject.CalculateReport()
    lRptVar.Params.Find('AllPaymentMethod').AsBoolean    := False;
  Set lDataSet1 = RptObject.DataSets.Find("cdsMain")
//    lRptVar.Params.Find('CurrencyData').AsBlob            := 'Not use if AllCurrency is true
 
 
   MsgBox "Count " & lDataSet1.RecordCount
// For Post Date From & Date To'
   
    lRptVar.Params.Find('DateFrom').AsDate                := '01/01/2017';
   'Step 5 Retrieve the output
    lRptVar.Params.Find('DateTo').AsDate                  := '31/12/2017';
  lDataSet1.First
 
  While (not lDataSet1.eof)
//    lRptVar.Params.Find('DocProjectData').AsBlob          := //'Not use if AllDocProject is true
MsgBox "Code : " & lDataSet1.FindField("Code").AsString
//    lRptVar.Params.Find('DocAreaData').AsBlob            := //Not use if AllDocArea is true
MsgBox "Description : " & lDataSet1.FindField("Description").AsString
//    lRptVar.Params.Find('DocAgentData').AsBlob            := //Not use if AllDocAgent is true
lDataSet1.Next
//    lRptVar.Params.Find('ItemAgentData').AsBlob          := //Not use if AllItemAgent is true
   Wend     
    lRptVar.Params.Find('DocType').AsString              := 'PV'; //'PV for Payment Voucher & OR for Official Receipt
End Function
//    lRptVar.Params.Find('DocumentData').AsBlob            := //Not use if AllDocument is true
//    lRptVar.Params.Find('GroupBy').AsBlob                := //If you wanted to grouping the data
    lRptVar.Params.Find('IncludeCancelled').AsBoolean    := False;
//    lRptVar.Params.Find('ItemAreaData').AsBlob            := //Not use if AllItemArea is true
//    lRptVar.Params.Find('ItemProjectData').AsBlob        := //Not use if AllItemProject is true
    lRptVar.Params.Find('PaymentMethodData').AsBlob      := '310-001';
    lRptVar.Params.Find('PrintDocumentStyle').AsBoolean   := True;
    lRptVar.Params.Find('SelectDate').AsBoolean          := True; //For Post Date
// lRptVar.Params.Find('SelectDocDate').AsBoolean   := True; 'For Doc Date
    lRptVar.Params.Find('SortBy').AsString                := 'PostDate;DocNo';
 
    lRptVar.CalculateReport;
 
    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDetail').XMLData; //Detail Data - To link Master Data use Dockey field
    cdsTax.XMLData  := lRptVar.DataSets.Find('cdsTax').XMLData; //Tax List
 
    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file
    cdsTax.SaveToFile('C:\Temp\_ListT.xml');  //Export To XML file
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
   end;
end;
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 6,339: Line 8,276:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-AR_DP====
====Stock.Item.RO====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Customer Deposit Script   
! Stock.Item.RO Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TForm1.Button1Click(Sender: TObject);
'Copy below script & paste to notepad & name it as eg Stock.Item.RO.vbs
var lMain, lBizObj, lBizApp : Variant;
Call GetInfo
begin
   lBizApp := CreateOleObject('SQLAcc.BizApp');
Function CreateSQLAccServer
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
 
End Function
   lBizObj := lBizApp.BizObjects.Find('AR_DP');
   lMain  := lBizObj.DataSets.Find('MainDataSet');
Function GetInfo
 
Dim ComServer, RptObject, lDataSet1, lDataSet2, lDateFrom, lDateTo
  try
  'Step 1 Create Com Server object
     lBizObj.New;
   Set ComServer = CreateSQLAccServer 'Create Com Server
     lMain.FindField('DOCKEY').Value        := -1;
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     lMain.FindField('DocNo').AsString      := '--DP Test--';
    ComServer.Login "ADMIN", "ADMIN", "C\DB\SQLAcc.DCF", "ACC-0002.FDB"
     lMain.FindField('CODE').AsString        := '300-C0001';
  END IF
     lMain.FindField('DocDate').Value        := '28 Oct 2019';
     lMain.FindField('PostDate').Value      := '28 Oct 2019';
  'Step 2 Find and Create the Report Objects
     lMain.FindField('TAXDATE').Value        := '28 Oct 2019';
   Set RptObject = ComServer.RptObjects.Find("Stock.Item.RO")  
     lMain.FindField('DEPOSITACCOUNT').AsString := 'PREPAYMENT';
     lMain.FindField('PaymentMethod').AsString  := '320-000'; //Bank or Cash account
   'Step 3 Spool parameters
     lMain.FindField('Description').AsString   := 'Deposit For Account';
    RptObject.Params.Find("AllItem").AsBoolean              = true
     lMain.FindField('ChequeNumber').AsString  := '';
    RptObject.Params.Find("AllStockGroup").AsBoolean        = true
     lMain.FindField('BankCharge').AsFloat     := 0;
    RptObject.Params.Find("AllCustomerPriceTag").AsBoolean  = true
     lMain.FindField('DocAmt').AsFloat          := 1000.00;
     RptObject.Params.Find("AllSupplierPriceTag").AsBoolean  = true
     lMain.FindField('Cancelled').AsString      := 'F';
     'RptObject.Params.Find("CategoryData").AsBlob            =  'Not use
 
    'RptObject.Params.Find("CategoryTpl").AsBlob            = 'Not use
     try
     'RptObject.Params.Find("CustomerPriceTagData").AsBlob    =  'Not use if AllCustomerPriceTag is True
      lBizObj.Save;
    'RptObject.Params.Find("SupplierPriceTagData").AsBlob    = 'Not use if AllSupplierPriceTag is True
     except
       on E: Exception do
    lDateFrom = CDate("January 01, 2017")
        Memo1.Lines.Append(E.Message);
    lDateTo = CDate("December 31, 2017")
     end;
 
    lBizObj.Close;
     'RptObject.Params.Find("DateFrom").AsDate                = lDateFrom 'Not use if SelectDate is False
    Memo1.Lines.Append('Done');
    'RptObject.Params.Find("DateTo").AsDate                  = lDateTo
//     MessageDlg('Done', mtInformation, [mbOk], 0);
     RptObject.Params.Find("HasAltStockItem").AsBoolean      = false
  finally
     RptObject.Params.Find("HasBarcode").AsBoolean          = false
     lMain := Null;
     RptObject.Params.Find("HasBOM").AsBoolean              = false
     lBizObj := Null;
     RptObject.Params.Find("HasCategory").AsBoolean          = false
     lBizApp.Logout;
     RptObject.Params.Find("HasCustomerItem").AsBoolean      = false
     lBizApp := Null;
     RptObject.Params.Find("HasOpeningBalance").AsBoolean   = false
   end;
     RptObject.Params.Find("HasPurchasePrice").AsBoolean    = false
end;
     RptObject.Params.Find("HasSellingPrice").AsBoolean     = false
     RptObject.Params.Find("HasSupplierItem").AsBoolean      = false
     'RptObject.Params.Find("ItemData").AsBlob                = 'Not use if AllItem is True
    'RptObject.Params.Find("ItemCategoryData").AsBlob        = 'Not use if SelectCategory is False
    RptObject.Params.Find("PrintActive").AsBoolean          = true
     RptObject.Params.Find("PrintInActive").AsBoolean        = true
    RptObject.Params.Find("PrintNonStockControl").AsBoolean = true
     RptObject.Params.Find("PrintStockControl").AsBoolean    = true
    RptObject.Params.Find("SelectCategory").AsBoolean       = false
    RptObject.Params.Find("SelectDate").AsBoolean          = false
    RptObject.Params.Find("SortBy").AsString                  = "Code"
    'RptObject.Params.Find("StockGroupData").AsBlob        =  'Not use if AllStockGroup is True 
      
  'Step 4 Perform Report calculation
  RptObject.CalculateReport()
  Set lDataSet1 = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsUOM") ' To link Master Data use Code
  MsgBox "Count " & lDataSet1.RecordCount
  'Step 5 Retrieve the output
  lDataSet1.First
  While (not lDataSet1.eof)
     MsgBox "Code " & lDataSet1.FindField("Code").AsString
    MsgBox "Description " & lDataSet1.FindField("Description").AsString
     MsgBox "Balance Qty " & lDataSet1.FindField("BalSQty").AsString
     lDataSet1.Next
  Wend
 
  MsgBox "Count " & lDataSet2.RecordCount
  lDataSet2.First
  While (not lDataSet2.eof)
     MsgBox "Code " & lDataSet2.FindField("Code").AsString
MsgBox "UOM " & lDataSet2.FindField("UOM").AsString
MsgBox "Rate " & lDataSet2.FindField("Rate").AsString
MsgBox "RefPrice " & lDataSet2.FindField("RefPrice").AsString
     lDataSet2.Next
   Wend
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 6,391: Line 8,365:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-Customer Deposit to Customer Payment====
====Stock Item Balance====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Customer Deposit to Customer Payment Script   
! Get Stock Item Balance Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TForm1.Button2Click(Sender: TObject);
'Available in Version 5.2018.833.759 & above
var lMain, lKO, lBizApp, lBizObj, V : Variant;
'Copy below script & paste to notepad & name it as eg ItemBalance.vbs
    cdsTmp : TClientDataset;
Call CheckLogin
    lSQL : String;
Call GetData
begin
  cdsTmp  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');


  try
Dim ComServer
    lSQL := 'SELECT DOCKEY FROM AR_DP ' +
            'WHERE DOCNO=''--DP Test--'' ';
    cdsTmp.Data := lBizApp.DBManager.Execute(lSQL);


    if cdsTmp.RecordCount > 0 then begin
Function CreateSQLAccServer
      lBizObj := lBizApp.BizObjects.Find('AR_PM');
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
      lMain  := lBizObj.DataSets.Find('MainDataSet');
End Function
      lKO    := lBizObj.DataSets.Find('cdsKnockOff');


      lBizObj.New;
function CheckLogin
      lMain.FindField('DOCKEY').Value          := -1;
  'Step 1: Create Com Server object
      lMain.FindField('DocNo').AsString        := '--PM Test--'; //Payment Document Number
  Set ComServer = CreateSQLAccServer 'Create Com Server
      lMain.FindField('CODE').AsString          := '300-C0001';
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
      lMain.FindField('DocDate').Value          := '29 Oct 2019';
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
      lMain.FindField('PostDate').Value        := '29 Oct 2019';
                'UserName, Password, DCF full path, Database filename
      lMain.FindField('Description').AsString  := 'Payment for A/c';
   END IF
      lMain.FindField('PaymentMethod').AsString := 'PREPAYMENT';
End Function
      lMain.FindField('DocAmt').AsFloat        := 200;
      lMain.FindField('FROMDOCTYPE').AsString   := 'DP'; //Transfer from Deposit
      lMain.FindField('FROMDOCKEY').Value      := cdsTmp.FindField('Dockey').AsFloat; //Transfer from Deposit
      lMain.FindField('Cancelled').AsString    := 'F';
      lMain.FindField('CHANGED').AsString      := 'F';


      V := lBizApp.CreateOleVariantArray(2);
Function GetData
      V.SetItem(0, 'IV'); //Document Type is either is IV or DN for Sales & PI or SD for Purchase
Dim lDataSet, lSQL
      V.SetItem(1, 'IV-00003');  //Invoice Document Number
  lSQL = "SELECT A.Location, A.Batch, A.ItemCode, B.Description, Sum(A.Qty) Qty FROM ST_TR A "
 
  lSQL = lSQL & "INNER JOIN ST_ITEM B ON (A.ITEMCODE=B.CODE) "
      if lKO.Locate('DocType;DocNo', V.AsOleVariant, False, False) then
  lSQL = lSQL & "WHERE B.IsActive='T' "
        begin
  lSQL = lSQL & "AND A.PostDate <= '31 Dec 2017' "
          lKO.Edit;
  lSQL = lSQL & "AND A.ItemCode= 'ANT' "
          lKO.FindField('KOAmt').ASFloat    := 200;
  lSQL = lSQL & "GROUP by A.Location, A.Batch, A.ItemCode, B.Description"
          lKO.FindField('KnockOff').AsString := 'T';
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
          lKO.Post;
 
        end;
  lDataSet.First
 
  While (not lDataSet.eof)
      try
    MsgBox "Location : " & lDataSet.FindField("Location").AsString
        lBizObj.Save;
     MsgBox "Batch : " & lDataSet.FindField("Batch").AsString
      except
     MsgBox "Item Code : " & lDataSet.FindField("ItemCode").AsString
        on E: Exception do
MsgBox "Item Description : " & lDataSet.FindField("Description").AsString
          Memo1.Lines.Append(E.Message);
MsgBox "Balance Qty : " & lDataSet.FindField("Qty").AsString
      end;
lDataSet.Next
        lBizObj.Close;
   Wend
        Memo1.Lines.Append('Done');
End Function
      //MessageDlg('AR_PM-DocNo : ''--PM Test--'' Posted...', mtInformation, [mbOK],0);
     end else
      Memo1.Lines.Append('Deposit No. Not found');
  finally
     cdsTmp.Free;
    lBizApp.Logout;
    lMain := Null;
    lBizObj := Null;
    lBizApp := Null;
   end;
end;
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Line 6,466: Line 8,416:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


====Example-AR_DPDTL_REFUND====
====ST_IS====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Customer Deposit Refund Script   
! ST_IS Script   
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TForm1.Button3Click(Sender: TObject);
'Copy below script & paste to notepad & name it as eg StockIssue.vbs
var lMain, lBizApp, lBizObj : Variant;
Call CheckLogin
    cdsTmp : TClientDataset;
Call InsertData
    lSQL : String;
begin
  cdsTmp  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');


  try
Dim ComServer
    lSQL := 'SELECT DOCKEY FROM AR_DP ' +
            'WHERE DOCNO=''--DP Test--'' ';
    cdsTmp.Data := lBizApp.DBManager.Execute(lSQL);


    if cdsTmp.RecordCount > 0 then begin
Function CreateSQLAccServer
      lBizObj := lBizApp.BizObjects.Find('AR_DPDTL_REFUND');
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
      lMain  := lBizObj.DataSets.Find('MainDataSet');
End Function


      lBizObj.New;
function CheckLogin
      lMain.FindField('DOCKEY').Value          := cdsTmp.FindField('Dockey').AsFloat;
  'Step 1: Create Com Server object
      lMain.FindField('Account').AsString      := '320-000'; //Bank or Cash account
  Set ComServer = CreateSQLAccServer 'Create Com Server
      lMain.FindField('DocDate').Value        := '28 Oct 2019';
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
      lMain.FindField('PostDate').Value        := '28 Oct 2019';
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
      lMain.FindField('Description').AsString  := 'Deposit Refund';
                'UserName, Password, DCF full path, Database filename
      lMain.FindField('ChequeNumber').AsString := '';
  END IF
      lMain.FindField('BankCharge').AsFloat    := 0;
End Function
      lMain.FindField('PAYMENTAMOUNT').AsFloat := 500.00;


      try
Function InsertData
        lBizObj.Save;
Dim BizObject, lMain, lDetail, lDate
      except
  'Step 2: Find and Create the Biz Objects
        on E: Exception do
  Set BizObject = ComServer.BizObjects.Find("ST_IS")  
          Memo1.Lines.Append(E.Message);
      end;
      lBizObj.Close;
      Memo1.Lines.Append('Done');
  //    MessageDlg('Done', mtInformation, [mbOk], 0);
    end else
      Memo1.Lines.Append('Deposit No. Not Found');
  finally
    cdsTmp.Free;
    lMain := Null;
    lBizObj := Null;
    lBizApp.Logout;
    lBizApp := Null;
  end;
end;
</syntaxhighlight>
|}


<div style="float: right;">   [[#top|[top]]]</div>
  'Step 3: Set Dataset
 
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
====Example-AR_DPDTL_FORFEIT====
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
{| class="mw-collapsible mw-collapsed wikitable"
    
! Customer Deposit Forfeit Script 
  'Step 4 : Insert Data - Master
|-
  lDate = CDate("January 1, 2017")
|
  BizObject.New
<syntaxhighlight lang="delphi">
  lMain.FindField("DocKey").value        = -1
procedure TForm1.Button4Click(Sender: TObject);
  lMain.FindField("DocNo").AsString      = "--IS Test--"
var lMain, lBizApp, lBizObj : Variant;
  lMain.FindField("DocDate").value        = lDate
     cdsTmp : TClientDataset;
  lMain.FindField("PostDate").value      = lDate
    lSQL : String;
  lMain.FindField("Description").AsString = "Stock Issue"
begin
      
   cdsTmp  := TClientDataset.Create(nil);
  'Step 5: Insert Data - Detail
   lBizApp := CreateOleObject('SQLAcc.BizApp');
  lDetail.Append
   lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');
   lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value        = -1
   lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Issue out Item A"
   lDetail.FindField("Qty").AsFloat          = 2
  lDetail.Post


   try
   lDetail.Append
    lSQL := 'SELECT DOCKEY FROM AR_DP ' +
  lDetail.FindField("DtlKey").value        = -1
            'WHERE DOCNO=''--DP Test--'' ';
  lDetail.FindField("DocKey").value        = -1
    cdsTmp.Data := lBizApp.DBManager.Execute(lSQL);
  lDetail.FindField("ItemCode").AsString    = "E-BAT"
  lDetail.FindField("Description").AsString = "Issue out Item A"
  lDetail.FindField("Qty").AsFloat          = 4
  lDetail.Post 
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
   
  ComServer.Logout 'Logout after done
  MsgBox "Done" 
End Function
</syntaxhighlight>
|}


    if cdsTmp.RecordCount > 0 then begin
<div style="float: right;">   [[#top|[top]]]</div>
      lBizObj := lBizApp.BizObjects.Find('AR_DPDTL_FORFEIT');
      lMain   := lBizObj.DataSets.Find('MainDataSet');


      lBizObj.New;
====ST_RC====
      lMain.FindField('DOCKEY').Value          := cdsTmp.FindField('Dockey').AsFloat;
{| class="mw-collapsible mw-collapsed wikitable"
      lMain.FindField('Account').AsString      := '532-000'; //Forfeit account
! ST_RC Script 
      lMain.FindField('DocDate').Value        := '28 Oct 2019';
|-
      lMain.FindField('PostDate').Value        := '28 Oct 2019';
|
      lMain.FindField('Description').AsString  := 'Deposit Forfeit';
<syntaxhighlight lang="vb">
      lMain.FindField('ChequeNumber').AsString := '';
'Copy below script & paste to notepad & name it as eg StockReceived.vbs
      lMain.FindField('BankCharge').AsFloat    := 0;
Call CheckLogin
      lMain.FindField('Amount').AsFloat        := 150.00;
Call InsertData


      try
Dim ComServer
        lBizObj.Save;
      except
        on E: Exception do
          Memo1.Lines.Append(E.Message);
      end;
      lBizObj.Close;
      Memo1.Lines.Append('Done');
  //    MessageDlg('Done', mtInformation, [mbOk], 0);
    end else
      Memo1.Lines.Append('Deposit No. Not Found');
  finally
    cdsTmp.Free;
    lMain := Null;
    lBizObj := Null;
    lBizApp.Logout;
    lBizApp := Null;
  end;
end;
</syntaxhighlight>
|}


<div style="float: right;">  [[#top|[top]]]</div>
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function


==FAQ==
function CheckLogin
===Problem with opening CHM Help files?===
  'Step 1: Create Com Server object
# Right click the chm file & select Properties
  Set ComServer = CreateSQLAccServer 'Create Com Server
# At General tab Click Unblock button.
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
# Click Apply | Ok.
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function


<div style="float: right;">  [[#top|[top]]]</div>
Function InsertData
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("ST_RC")


===Still can't open CHM file?===
  'Step 3: Set Dataset
# Login SQL Accounting
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
# Click Tools | Options
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
# Click Register & follow wizard
 
# Exit SQL Accounting
  'Step 4 : Insert Data - Master
# Login SQL Accounting
  lDate = CDate("January 1, 2017")
# Run CHM File
  BizObject.New
  lMain.FindField("DocKey").value        = -1
  lMain.FindField("DocNo").AsString      = "--RC Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Description").AsString = "Stock Received"
   
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Received Item A"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UnitCost").AsFloat    = 25.15
  lDetail.Post


<div style="float: right;">   [[#top|[top]]]</div>
  lDetail.Append
 
  lDetail.FindField("DtlKey").value        = -1
===Why when I compile my program with stated unknown method or unknown identifier?===
  lDetail.FindField("DocKey").value        = -1
:If you compiler had error may try add the '''esfw10.dll''' file under the SQL Accounting\bin folder
   lDetail.FindField("ItemCode").AsString    = "E-BAT"
  lDetail.FindField("Description").AsString = "Received Item A"
  lDetail.FindField("Qty").AsFloat          = 4
  lDetail.FindField("UnitCost").AsFloat    = 54
  lDetail.Post 
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
   
  ComServer.Logout 'Logout after done
  MsgBox "Done" 
End Function
</syntaxhighlight>
|}


<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


===How to make sure I login to correct database?===
====ST_AJ====
* Can use the '''Common.Agent.RO''' Report Objects to get the Profile info.
* Then use the cdsProfile Dataset
: - CompanyName Field
: - Remark Field
* Refer to [https://www.estream.com.my/wiki/SDK_Live#Example-Get_Company_Profile Example - Get Company Profile]
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===Why after post to SQL Accounting the Description3 (More Description)/Notes field it show like this "M y  D e s c r i p t i o n" instead of "My Description"?===
:Make sure you use '''.AsString''' in your code (see example below)
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Description3 Field Script/Code  
! ST_AJ Script   
|-
|-
|  
|  
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg StockAdjustment.vbs
Call CheckLogin
Call InsertData


...
Dim ComServer
   lDtl.FindField('DESCRIPTION3').'''AsString'''  := 'Sales Item A More Description'+ #13 + 'I in 2nd line';
 
...
Function CreateSQLAccServer
|}
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function


<div style="float: right;">   [[#top|[top]]]</div>
function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
   END IF
End Function


===Can I Ignore Doc No Field & let SQL Accounting to Auto Assign?===
Function InsertData
:Yes but we not recommended as you will lost track when user wanted to know which Doc No in SQL Acc is posted.
Dim BizObject, lMain, lDetail, lDate
: To Set Auto Assign set it as below
  'Step 2: Find and Create the Biz Objects
{| class="mw-collapsible mw-collapsed wikitable"
  Set BizObject = ComServer.BizObjects.Find("ST_AJ")
! DocNo Field Script/Code 
|-
|


...
  'Step 3: Set Dataset
   lMain.FindField('DocNo').'''AsString'''  := '<<New>>';
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
...
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
|}
 
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value        = -1
   lMain.FindField("DocNo").AsString      = "--AJ Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Description").AsString = "Stock Adjustment"
   
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Adjust IN Item A"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UnitCost").AsFloat    = 25.15 'Only IN need UnitCost
  lDetail.Post


<div style="float: right;">  [[#top|[top]]]</div>
  lDetail.Append
 
  lDetail.FindField("DtlKey").value        = -1
===Can I Auto Login & Logout SQL Accounting when doing & after Posting?===
  lDetail.FindField("DocKey").value        = -1
: Yes can below is example script
  lDetail.FindField("ItemCode").AsString    = "E-BAT"
  lDetail.FindField("Description").AsString = "Adjust OUT Item A"
  lDetail.FindField("Qty").AsFloat          = -4
  lDetail.Post 
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
   
  ComServer.Logout 'Logout after done
  MsgBox "Done" 
End Function
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====ST_XF====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! C Sharp  
! ST_XF Script  
|-
|-
|  
|  
<syntaxhighlight lang="C#">
<syntaxhighlight lang="vb">
Int32 lBuildNo;
'Copy below script & paste to notepad & name it as eg ST_XF.vbs
dynamic ComServer;
Call CheckLogin
Call InsertData
public void CheckLogin()
{           
    lBizType = Type.GetTypeFromProgID("SQLAcc.BizApp");
    ComServer = Activator.CreateInstance(lBizType);
           
    if (!ComServer.IsLogin)
    {
        try
        {
            ComServer.Login(edUN.Text, edPW.Text, edDCF.Text, edDB.Text);
            ComServer.Minimize();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            FreeBiz(ComServer);
        }
    }
    if (ComServer.IsLogin)
    {
        lBuildNo = ComServer.BuildNo;
    }
}
public void FreeBiz(object AbizObj)
{
    System.Runtime.InteropServices.Marshal.ReleaseComObject(AbizObj);
}
private void btnExport_Click(object sender, EventArgs e)
{
    dynamic BizObject, lMain, lDocKey;


    CheckLogin();
Dim ComServer
    //'Step 2: Find and Create the Biz Objects
 
    BizObject = ComServer.BizObjects.Find("Agent");
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function


    //Step 3: Set Dataset
function CheckLogin
     lMain = BizObject.DataSets.Find("MainDataSet");    //lMain contains master data
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function


    //Step 4: Search
Function InsertData
    lDocKey = BizObject.FindKeyByRef("CODE", edCode.Text);
Dim BizObject, lMain, lDetail, lDate
    try
  'Step 2: Find and Create the Biz Objects
    {
  Set BizObject = ComServer.BizObjects.Find("ST_XF")  
        try
        {
            //Step 5 : Insert or Update
            if (Convert.IsDBNull(lDocKey))
            {
                BizObject.New();
                lMain.FindField("CODE").value = edCode.Text;
                lMain.FindField("DESCRIPTION").value = edDesc.Text;
            }
            else
            {//Edit Data if found
                BizObject.Params.Find("CODE").Value = lDocKey;
                BizObject.Open();
                BizObject.Edit();
                lMain.FindField("DESCRIPTION").value = edDesc.Text;
            }
            //Step 6: Save & Close
            BizObject.Save();
            MessageBox.Show("Done", "Status", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    }
    finally
    {
        BizObject.Close();


        //Step 7 : Logout after done           
  'Step 3: Set Dataset
        FreeBiz(BizObject);
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
         ComServer.Logout();
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
        FreeBiz(ComServer);
 
     }           
  'Begin Looping yr data
}
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString      = "--XF Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account - Optional
  lMain.FindField("CompanyName").AsString = "Cash Sales" 'Optional
  lMain.FindField("Description").AsString = "Stock Transfer"
   
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value          = -1
  lDetail.FindField("DocKey").value          = -1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString  = "Transfer Item A"
  lDetail.FindField("Qty").AsFloat          = 10
  lDetail.FindField("UOM").AsString          = "UNIT"
  lDetail.FindField("FromLocation").AsString = "----"
  lDetail.FindField("ToLocation").AsString  = "BALAKONG"
  lDetail.Post
 
  lDetail.Append
  lDetail.FindField("DtlKey").value          = -1
  lDetail.FindField("DocKey").value          = -1
  lDetail.FindField("ItemCode").AsString     = "HFK"
  lDetail.FindField("Description").AsString  = "Transfer Item B"
  lDetail.FindField("Qty").AsFloat          = 5
  lDetail.FindField("UOM").AsString          = "UNIT"
  lDetail.FindField("FromLocation").AsString = "----"
  lDetail.FindField("ToLocation").AsString  = "BALAKONG"
  lDetail.Post
 
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
 
  'Step 7 : Logout after done 
  'ComServer.Logout
 
  MsgBox "Done" 
End Function
</syntaxhighlight>
</syntaxhighlight>
|}
|}


<div style="float: right;">  [[#top|[top]]]</div>
====AP_PI-Edit====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Delphi  
! AP_PI Edit Script  
|-
|-
|  
|  
<syntaxhighlight lang="delphi">
<syntaxhighlight lang="vb">
procedure TForm1.Button2Click(Sender: TObject);
'Available in Version 5.2018.833.759 & above
var lMain, lBizObj, lBizApp : Variant;
'Copy below script & paste to notepad & name it as eg AP_PI.vbs
    lTime : TDateTime;
Call CheckLogin
    lFName, lFileName, lFilter  : string;
Call GetData
begin
Call PostData
  lFilter := 'DCF File (*.DCF)|*.DCF|All Files (*.*)|*.*';
  lFName := 'ACC-0003.FDB'; //Default Database file
  lFileName := 'C:\eStream\SQLAccounting\Share\Default.DCF'; //Default DCF File
  if PromptForFileName(lFileName, lFilter, 'DCF', 'Open DCF File...', '.', False) then begin
    if inputQuery('Enter DB file Name', 'FDB Name', lFName) then begin
      lTime := Now;
      lBizApp := CreateOleObject('SQLAcc.BizApp');
      sleep(1000); //Wait 1 second for system loading before proceed
      if lBizApp.IsLogin then lBizApp.Logout; //Force Logout to make sure login correct database


      lBizApp.Login('ADMIN', 'ADMIN', lFileName, lFName); //Login
Dim ComServer, lDataSet
      lBizObj := lBizApp.BizObjects.Find('Agent'); //Start Posting
      lMain  := lBizObj.DataSets.Find('MainDataSet');


      try
        lBizObj.New;
        lMain.FindField('CODE').AsString        := '_Test_';
lMain.FindField('Description').AsString  := 'Testing 123';
        lBizObj.Save; //Save Posting
      finally
        lBizObj.Close;
lTime := Now - lTime;
        MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
                  mtInformation, [mbOk], 0);
        lMain := Null;
        lBizObj := Null;
        lBizApp.Logout; //Logout
        lBizApp := Null;
      end;
    end;
  end;
end;
</syntaxhighlight>
|}
{| class="mw-collapsible mw-collapsed wikitable"
! VB Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg Agent.vbs
Call PostData
Function CreateSQLAccServer
Function CreateSQLAccServer
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
   Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
End Function
 
Function PostData
function CheckLogin
Dim ComServer, BizObject
   'Step 1: Create Com Server object
   'Step 1: Create Com Server object
   Set ComServer = CreateSQLAccServer 'Create Com Server
   Set ComServer = CreateSQLAccServer 'Create Com Server
 
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
  Set WScr = CreateObject("WScript.Shell")
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
  WScript.Sleep 1000 '//Wait 1 second for system loading before proceed
                'UserName, Password, DCF full path, Database filename
 
  'Step 2: Force Logout to make sure login correct database
   If ComServer.IsLogin Then 'if user hasn't logon to SQL application
     ComServer.Logout
   END IF
   END IF
  'Step 3: Login
End Function
  ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0015.FDB"


   'Step 4: Find and Create the Biz Objects
Function GetData
   Set BizObject = ComServer.BizObjects.Find("Agent")
Dim lSQL
   lSQL = "SELECT Dockey FROM AP_PI "
   'Step 5: Set Dataset
   lSQL = lSQL & "WHERE DocNo='PI-00001' "
   Set lMain = BizObject.DataSets.Find("MainDataSet")   'lMainDataSet contains master data
   lSQL = lSQL & "AND Code='400-D0001' "
   Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function


 
Function PostData
   'Step 6 : Posting
Dim BizObject, lMain, lDetail
    BizObject.New
   'Step 2: Find and Create the Biz Objects
    lMain.FindField("CODE").AsString          = "_Test_"
  Set BizObject = ComServer.BizObjects.Find("AP_PI")  
    lMain.FindField("Description").AsString  = "Testing 123"


  'Step 3: Set Dataset
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Step 4 : Find Doc Number
  If lDataSet.RecordCount > 0 Then 
lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
 
 
    BizObject.Open
    BizObject.Edit
    lMain.Edit
lMain.FindField("Description").AsString = "testing"
 
  'Step 5: Delete all Detail
    While lDetail.RecordCount <> 0
      lDetail.First
  lDetail.Delete
    Wend
  'Step 6: Append Detail
    lDetail.Append
    lDetail.FindField("DtlKey").value = -1
    lDetail.FindField("Account").value = "610-2000"
    lDetail.FindField("Description").value =  "Purchase Item A"
    lDetail.FindField("Tax").value =  ""
    lDetail.FindField("TaxInclusive").value =  0
    lDetail.FindField("Amount").value = 410.37
    lDetail.FindField("TaxAmt").value = 0
    lDetail.Post
 
   'Step 7: Save Document
   'Step 7: Save Document
     BizObject.Save
     BizObject.Save
     BizObject.Close
     BizObject.Close
 
   'Step 8: Logout
   'Step 8 : Logout after done 
     ComServer.Logout
     'ComServer.Logout
MsgBox "Done"
    MsgBox "Done"
Else
MsgBox "Record Not Found"  
  END IF
 
End Function
End Function
</syntaxhighlight>
</syntaxhighlight>
Line 6,833: Line 8,803:
<div style="float: right;">  [[#top|[top]]]</div>
<div style="float: right;">  [[#top|[top]]]</div>


===When Post System Prompt Operation aborted Error===
====SL_DO to SL_IV====
: This happen when the Login User ID don't had the to '''Override Sales Min/Max Price''' &
: Use '''Last Price XXX''' (In Tools | Options | Unit Price) &
: 1 of record is below Min Price.
'''Solution'''
: Can try change the Posting Seq like below (UOM then Qty)
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! Sequence Field Script/Code  
! SL_DO to SL_IV Script   
|-
|-
|  
|  
<syntaxhighlight lang="vb">
'Updated 26 Oct 2018
'Copy below script & paste to notepad & name it as eg SL_IV.vbs
Call CheckLogin
Call InsertData1
Call InsertData2


...
Dim ComServer
    lDetail.Append();
    lDetail.FindField("DtlKey").value = -1;
    lDetail.FindField("DocKey").value = -1;
    lDetail.FindField("Seq").value = 3;
    lDetail.FindField("ItemCode").AsString = "ANT";
    lDetail.FindField("Description").AsString = "Sales Item B";
    //lDetail.FindField("Account").AsString = "500-000"; To override the Sales Account Code
    '''lDetail.FindField("UOM").AsString = "UNIT";'''
    '''lDetail.FindField("Qty").AsFloat = 2;'''
    //lDetail.FindField("DISC").AsString = "5%+3"; //Optional(eg 5% plus 3 Discount)
    lDetail.FindField("Tax").AsString = "SR";
    lDetail.FindField("TaxRate").AsString = "6%";
    lDetail.FindField("TaxInclusive").value = 0;
    lDetail.FindField("UnitPrice").AsFloat = 100;
    lDetail.FindField("Amount").AsFloat = 200;
    lDetail.FindField("TaxAmt").AsFloat = 12;
    lDetail.Post();
...
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
===How do my system know there is a changes or update in SQLAccounting?===
'''Data Entry'''<br>
: In all Document it had a field call <span style="color:#0000ff">UPDATECOUNT</span>.
: Default is null & each changes will +1.
: So if you see 2 meaning it had being update 2 times


'''Master Data'''
Function CreateSQLAccServer
: Only available in
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
:* Version 842.765 & above
End Function
:* AP_SUPPLIER (Maintain Supplier)
:* AR_CUSTOMER (Maintain Customer)
:* ST_GROUP (Maintain Stock Group)
:* ST_ITEM (Maintain Stock Item)
:* ST_ITEM_TPL (Maintain Item Template)
:* ST_PRICETAG (Maintain Price Tag)
:* TAX (Maintain Tax)
: In Each table it had a field call <span style="color:#0000ff">LASTMODIFIED</span>.
: The value is '''Epoch Time''' or '''Unix Time'''


You can use below function to get the field
function CheckLogin
{| class="mw-collapsible mw-collapsed wikitable"
   'Step 1: Create Com Server object
! vbs 
   Set ComServer = CreateSQLAccServer 'Create Com Server
|-
   If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
|
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
<syntaxhighlight lang="vbs">
                'UserName, Password, DCF full path, Database filename
...
   END IF
Function GetData
Dim lDataSet, lSQL
   lSQL = "SELECT DOCNO, UPDATECOUNT FROM SL_CS "
  lSQL = lSQL & "WHERE UPDATECOUNT IS NOT NULL "
  lSQL = lSQL & "ORDER BY DOCNO "
   Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    
  lDataSet.First
  While (not lDataSet.eof)
     MsgBox "DocNo : " & lDataSet.FindField("DocNo").AsString
    MsgBox "UpdateCount : " & lDataSet.FindField("UPDATECOUNT").AsString
    lDataSet.Next
   Wend
End Function
End Function
...
</syntaxhighlight>
|}


{| class="mw-collapsible mw-collapsed wikitable"
Function InsertData1
! Delphi
Dim BizObject, lMain, lDetail, lDate
|-
   'Step 2: Find and Create the Biz Objects
|
   Set BizObject = ComServer.BizObjects.Find("SL_DO")
<syntaxhighlight lang="delphi">
... 
procedure TfmMain.dxbb_GetFieldClick(Sender: TObject);
var BizApp : Variant;
    lDataSet : TClientDataSet;
    ASQL : String;
begin
   BizApp := CreateOleObject('SQLAcc.BizApp');
  lDataSet := TClientDataSet.Create(Self);
   try
    ASQL := 'SELECT DOCNO, UPDATECOUNT FROM SL_CS ' +
            'WHERE UPDATECOUNT IS NOT NULL ' +
            'ORDER BY DOCNO ';
    lDataSet.Data := BizApp.DBManager.Execute(ASQL);
    lDataset.SaveToFile('C:\Temp\_List.xml', dfXML); //Export To XML file
  finally
    lDataSet.Free;
  end;
end;
...
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>


===Can I control my Stock when I link with other Application?===
  'Step 3: Set Dataset
: Yes. We suggest to use Stock Transfer to (eg Location call <span style="color:#0000ff">MOBILE</span>) transfer stock as Reserve to avoid stock over deduct in SQL Accounting
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
: When other Application post to SQL Accounting they just need set the Location to the Reserve Location (eg <span style="color:#0000ff">MOBILE</span>)
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
: Below is example posting with location
 
{| class="mw-collapsible mw-collapsed wikitable"
  'Begin Looping yr data
! Post Location Field Script/Code  
  'Step 4 : Insert Data - Master
|-
  lDate = CDate("January 1, 2017")
|
  BizObject.New
  lMain.FindField("DocKey").value        = -1
  lMain.FindField("DocNo").AsString      = "--DO Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  'lMain.FindField("Address1").AsString    = "" 'Optional
  'lMain.FindField("Address2").AsString    = "" 'Optional
  'lMain.FindField("Address3").AsString    = "" 'Optional
  'lMain.FindField("Address4").AsString    = "" 'Optional
  'lMain.FindField("Phone1").AsString      = "" 'Optional
  lMain.FindField("Description").AsString = "Delivery Order"
   
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("Seq").value            = 1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Sales Item A"
  lDetail.FindField("UOM").AsString        = "BOX"
  lDetail.FindField("Qty").AsFloat          = 2
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("Tax").AsString        = "SR"
  lDetail.FindField("TaxRate").AsString    = "6%"
  lDetail.FindField("TaxInclusive").value  = 0
  lDetail.FindField("UnitPrice").AsFloat    = 100  
  lDetail.FindField("Amount").AsFloat      = 200
  lDetail.FindField("TaxAmt").AsFloat      = 12
  lDetail.Post


...
  lDetail.Append
   lDtl.FindField('UOM').AsString      := 'CTN';
  lDetail.FindField("DtlKey").value        = -1
   lDtl.FindField('QTY').AsFloat        := 6;
   lDetail.FindField("DocKey").value        = -1
   lDtl.FindField('Location').AsString := 'MOBILE';
   lDetail.FindField("Seq").value            = 2
...
   lDetail.FindField("ItemCode").AsString   = "COVER"
|}
  lDetail.FindField("Description").AsString = "Sales Item B"
 
  lDetail.FindField("UOM").AsString        = "UNIT"
<div style="float: right;">   [[#top|[top]]]</div>
  lDetail.FindField("Qty").AsFloat          = 3
 
  lDetail.FindField("Tax").AsString        = "SR"
===Where to Check the SQL Accounting DCF Path, FileName & FDB FileName?===
  lDetail.FindField("TaxRate").AsString    = "6%"
: In Login Screen Click 3 Dot Button then you can see the information
   lDetail.FindField("TaxInclusive").value  = 0
[[File:SDK-FAQ-01.jpg|center]]
  lDetail.FindField("UnitPrice").AsFloat    = 10 
[[File:SDK-FAQ-02.jpg|554px|center]]
  lDetail.FindField("Amount").AsFloat      = 30
<div style="float: right;">  [[#top|[top]]]</div>
  lDetail.FindField("TaxAmt").AsFloat      = 1.80
  lDetail.Post 
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "DO Posting Done"
End Function


===How to check & What is the value for Advance Credit Control in Maintain Customer===
Function InsertData2
: You can use <span style="color:#0000ff">ComServer.DBManager.NewDataSet(lSQL)</span> function to Query the information
Dim BizObject, lMain, lDetail, lDate, lDODtl, lxFer, lSQL, v(2)
: lSQL = SELECT * FROM AR_CUSTOMERCRCTRL
  'Step 1: Check Is transtered or not
: You may refer to <span style="color:#0000ff">ControlType</span> column
  lSQL = "SELECT DocKey FROM SL_IVDTL "
  lSQL = lSQL & "WHERE FromDockey=(SELECT DocKey FROM SL_DO "
  lSQL = lSQL & "WHERE DocNo='--DO Test--') "
  Set lxFer = ComServer.DBManager.NewDataSet(lSQL)


{| class="wikitable" style="margin: 1em auto 1em auto;"
  if lxFer.RecordCount = 0 then
|-
    'Step 2: Get DO Information
! ControlType !! Exceed Credit Limit !! Exceed OverDue Limit
    lSQL = "SELECT * FROM SL_DODTL "
|-
    lSQL = lSQL & "WHERE Dockey=(SELECT DocKey FROM SL_DO "  
| align="center" | 0 || UnBlock || UnBlock
    lSQL = lSQL & "WHERE DocNo='--DO Test--') "
|-
    Set lDODtl = ComServer.DBManager.NewDataSet(lSQL)   
| align="center" | 1 || UnBlock || Block
|-
'Step 3: Find and Create the Biz Objects
| align="center" | 2|| UnBlock || Override
    Set BizObject = ComServer.BizObjects.Find("SL_IV")
|-
| align="center" |  3|| Block || UnBlock
|-
| align="center" | 4|| Block || Block
|-
| align="center" | 5|| Block || Override
|-
| align="center" | 6|| Override || UnBlock
|-
| align="center" | 7|| Override || Block
|-
| align="center" | 8|| Override || Override
|-
| align="center" | 9|| align="center" colspan="2"| Suspended
|}


<div style="float: right;">  [[#top|[top]]]</div>
    'Step 4: Set Dataset
 
    Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
===How to get Error/Exception Message Return from SQL Accounting?===
    Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
    'Step 5 : Insert Data - Master
    lDate = CDate("January 1, 2017")
    BizObject.New
    lMain.FindField("DocKey").value        = -1
    lMain.FindField("DocNo").AsString      = "--IV Test--"
    lMain.FindField("DocDate").value        = lDate
    lMain.FindField("PostDate").value      = lDate
    lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
    lMain.FindField("CompanyName").AsString = "Cash Sales"
    'lMain.FindField("Address1").AsString    = "" 'Optional
    'lMain.FindField("Address2").AsString    = "" 'Optional
    'lMain.FindField("Address3").AsString    = "" 'Optional
    'lMain.FindField("Address4").AsString    = "" 'Optional
    'lMain.FindField("Phone1").AsString      = "" 'Optional
    lMain.FindField("Description").AsString = "Sales"
   
    'Step 6: Insert Data - Detail
    v(0) = "COVER"
    v(1) = "UNIT"
    if (lDODtl.Locate("ItemCode;UOM", v, false, false)) then
      lDetail.Append
      lDetail.FindField("DtlKey").value        = -1
      lDetail.FindField("DocKey").value        = -1
      lDetail.FindField("Seq").value            = 1
      lDetail.FindField("ItemCode").AsString    = lDODtl.FindField("ItemCode").AsString
      lDetail.FindField("Description").AsString = lDODtl.FindField("Description").AsString
      'lDetail.FindField("Account").AsString    = "500-000" 'If you wanted override the Sales Account Code
      lDetail.FindField("UOM").AsString        = lDODtl.FindField("UOM").AsString
  lDetail.FindField("Qty").AsFloat          = lDODtl.FindField("Qty").AsFloat
      lDetail.FindField("DISC").AsString        = lDODtl.FindField("Disc").AsString
      lDetail.FindField("Tax").AsString        = lDODtl.FindField("Tax").AsString
      lDetail.FindField("TaxRate").AsString    = lDODtl.FindField("TaxRate").AsString
      lDetail.FindField("TaxInclusive").value  = lDODtl.FindField("TaxInclusive").Value
      lDetail.FindField("UnitPrice").AsFloat    = lDODtl.FindField("UnitPrice").AsFloat
      lDetail.FindField("Amount").AsFloat      = lDODtl.FindField("Amount").AsFloat
      lDetail.FindField("TaxAmt").AsFloat      = lDODtl.FindField("TaxAmt").AsFloat
  lDetail.FindField("FromDocType").AsString = "DO"
  lDetail.FindField("FromDockey").AsFloat  = lDODtl.FindField("DocKey").AsFloat
  lDetail.FindField("FromDtlkey").AsFloat  = lDODtl.FindField("DtlKey").AsFloat
      lDetail.Post
End IF 
    v(0) = "ANT"
    v(1) = "BOX"
    if (lDODtl.Locate("ItemCode;UOM", v, false, false)) then
      lDetail.Append
      lDetail.FindField("DtlKey").value        = -1
      lDetail.FindField("DocKey").value        = -1
      lDetail.FindField("Seq").value            = 2
      lDetail.FindField("ItemCode").AsString    = lDODtl.FindField("ItemCode").AsString
      lDetail.FindField("Description").AsString = lDODtl.FindField("Description").AsString
      'lDetail.FindField("Account").AsString    = "500-000" 'If you wanted override the Sales Account Code
      lDetail.FindField("UOM").AsString        = lDODtl.FindField("UOM").AsString
  lDetail.FindField("Qty").AsFloat          = lDODtl.FindField("Qty").AsFloat
      lDetail.FindField("DISC").AsString        = lDODtl.FindField("Disc").AsString
      lDetail.FindField("Tax").AsString        = lDODtl.FindField("Tax").AsString
      lDetail.FindField("TaxRate").AsString    = lDODtl.FindField("TaxRate").AsString
      lDetail.FindField("TaxInclusive").value  = lDODtl.FindField("TaxInclusive").Value
      lDetail.FindField("UnitPrice").AsFloat    = lDODtl.FindField("UnitPrice").AsFloat
      lDetail.FindField("Amount").AsFloat      = lDODtl.FindField("Amount").AsFloat
      lDetail.FindField("TaxAmt").AsFloat      = lDODtl.FindField("TaxAmt").AsFloat
  lDetail.FindField("FromDocType").AsString = "DO"
  lDetail.FindField("FromDockey").AsFloat  = lDODtl.FindField("DocKey").AsFloat
  lDetail.FindField("FromDtlkey").AsFloat  = lDODtl.FindField("DtlKey").AsFloat
      lDetail.Post
End IF 
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
 
  'Step 8 : Logout after done 
  'ComServer.Logout
 
  MsgBox "Posting IV Done"
  else MsgBox "--DO Test-- had been transfered. Posting IV aborted" 
  End IF
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====SL_IV-Edit====
{| class="mw-collapsible mw-collapsed wikitable"
{| class="mw-collapsible mw-collapsed wikitable"
! C Sharp  
! SL_IV-Edit Script  
|-
|-
|  
|  
<syntaxhighlight lang="C#">
<syntaxhighlight lang="vb">
try
'Available in Version 5.2018.833.759 & above
{
'Copy below script & paste to notepad & name it as eg SL_IV.vbs
  BizObject.New();
Call CheckLogin
....
Call GetData
  BizObject.Save();
Call PostData
}
 
catch (Exception ex)
Dim ComServer, lDataSet
{
 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Function CreateSQLAccServer
}
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
</syntaxhighlight>
End Function
|}
 
 
function CheckLogin
{| class="mw-collapsible mw-collapsed wikitable"
  'Step 1: Create Com Server object
! VB.Net 
  Set ComServer = CreateSQLAccServer 'Create Com Server
|-
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
|
     ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
<syntaxhighlight lang="vb">
                'UserName, Password, DCF full path, Database filename
Try
  END IF
   BizObject.[New]
End Function
...
 
   BizObject.Save
Function GetData
Catch ex As Exception
Dim lSQL
   MsgBox(ex.Message, MsgBoxStyle.Exclamation)
  lSQL = "SELECT Dockey FROM SL_IV "
End Try
  lSQL = lSQL & "WHERE DocNo='IV-00010' "
</syntaxhighlight>
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
|}
End Function
 
Function PostData
Dim BizObject, lMain, lDetail
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("SL_IV")
 
   'Step 3: Set Dataset
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
   Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Step 4 : Find Doc Number
   If lDataSet.RecordCount > 0 Then 
lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
 
 
    BizObject.Open
    BizObject.Edit
    lMain.Edit
lMain.FindField("Description").AsString = "Sales - Edited"
 
  'Step 5: Delete all Detail
    While lDetail.RecordCount <> 0
      lDetail.First
  lDetail.Delete
    Wend
  'Step 6: Append Detail
    lDetail.Append
    lDetail.FindField("DtlKey").value = -1
    lDetail.FindField("Account").value = "500-000"
    lDetail.FindField("Description").value =  "Edited Item A"
    lDetail.FindField("Tax").value =  ""
    lDetail.FindField("TaxInclusive").value =  0
    lDetail.FindField("Amount").value = 410.37
    lDetail.FindField("TaxAmt").value = 0
    lDetail.Post
 
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
 
  'Step 8 : Logout after done 
    'ComServer.Logout 
    MsgBox "Done"
Else
MsgBox "Record Not Found"
  END IF
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL_JE====
{| class="mw-collapsible mw-collapsed wikitable"
! GL_JE Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg GL_JE.vbs
Call InsertGLJE
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
Function InsertGLJE
Dim ComServer, BizObject, lDataSet, lDataSet2, lDate
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
  END IF
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_JE")
  'Step 3: Set Dataset
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data 
 
  'Step 4 : Insert Data - Master
  lDate = CDate("January 23, 2017")
  BizObject.New
  lMainDataSet.FindField("DocKey").value = -1
  lMainDataSet.FindField("DocNo").value = "--JV Test--"
  lMainDataSet.FindField("DocDate").value = lDate
  lMainDataSet.FindField("PostDate").value = lDate
  lMainDataSet.FindField("Description").value = "testing desc header"
  lMainDataSet.Post
 
  'Step 5: Insert Data - Detail
  'For Tax Inclusive
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("SEQ").value = 1
  lDetailDataSet.FindField("Code").value = "610-1000"
  lDetailDataSet.FindField("Project").value = "----"
  lDetailDataSet.FindField("Description").value =  "testing desc1"
  lDetailDataSet.FindField("Tax").value =  "TX"
  'lDetailDataSet.FindField("LOCALTAXAMT").value = 17.32 //For JE you can't override (i.e. system auto calc)
  lDetailDataSet.FindField("TaxInclusive").Value = 1
  lDetailDataSet.FindField("LocalDR").value = 306 '//Including GST if TAXINCLUSIVE = 1
  lDetailDataSet.FindField("DR").value = 306 '//If wanted DR <> LocalDR
 
  'For Tax Exclusive
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("SEQ").value = 2
  lDetailDataSet.FindField("Code").value = "605-200"
  lDetailDataSet.FindField("Project").value = "----"
  lDetailDataSet.FindField("Description").value = "testing desc2"
  lDetailDataSet.FindField("Tax").value =  "TX"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("LocalCR").value = 100
  lDetailDataSet.Post
 
  'For No GST
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("SEQ").value = 3
  lDetailDataSet.FindField("Code").value = "610-002"
  lDetailDataSet.FindField("Project").value = "----"
  lDetailDataSet.FindField("Description").value =  "testing desc3"
  lDetailDataSet.FindField("Tax").value =  ""
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("LocalCR").value = 200
  lDetailDataSet.Post
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "Done"
End Function
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL_JE-Edit====
{| class="mw-collapsible mw-collapsed wikitable"
! GL_JE-Edit Script 
|-
|
<syntaxhighlight lang="vb">
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg GL_JE.vbs
Call CheckLogin
Call GetData
Call PostData
 
Dim ComServer, lDataSet
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function
 
Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM GL_JE "
  lSQL = lSQL & "WHERE DocNo='JV-00002' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function
 
Function PostData
Dim BizObject, lMain, lDetail
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_JE")
 
  'Step 3: Set Dataset
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Step 4 : Find Doc Number
  If lDataSet.RecordCount > 0 Then 
lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
 
 
    BizObject.Open
    BizObject.Edit
    lMain.Edit
lMain.FindField("Description").AsString = "Journal - Edited"
 
  'Step 5: Delete all Detail
    While lDetail.RecordCount <> 0
      lDetail.First
  lDetail.Delete
    Wend
  'Step 6: Append Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value = -1
  lDetail.FindField("Code").value = "610-000"
  lDetail.FindField("Description").value =  "testing desc1"
  lDetail.FindField("Project").value = "P12W1"
  lDetail.FindField("Tax").value =  ""
  lDetail.FindField("TaxInclusive").value =  0
  lDetail.FindField("LocalDR").value = 200
  lDetail.FindField("DR").value = 200
  lDetail.Post
 
  lDetail.Append
  lDetail.FindField("DtlKey").value = -1
  lDetail.FindField("Code").value = "531-000"
  lDetail.FindField("Description").value =  "testing desc2"
  lDetail.FindField("Project").value = "P13W1"
  lDetail.FindField("Tax").value =  ""
  lDetail.FindField("TaxInclusive").value =  0
  lDetail.FindField("LocalCR").value = 200
  lDetail.FindField("CR").value = 200
  lDetail.Post
 
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
 
  'Step 8 : Logout after done 
    'ComServer.Logout 
    MsgBox "Done"
Else
MsgBox "Record Not Found"
  END IF
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL_JE-Delete====
{| class="mw-collapsible mw-collapsed wikitable"
! GL_JE-Delete Script 
|-
|
<syntaxhighlight lang="vb">
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg GL_JE.vbs
Call CheckLogin
Call GetData
Call DelData
 
Dim ComServer, lDataSet
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function
 
Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM GL_JE "
  lSQL = lSQL & "WHERE DocNo='JV-00002' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function
 
Function DelData
Dim BizObject
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_JE")
  'Step 3 : Find Doc Number
  If lDataSet.RecordCount > 0 Then
lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
    BizObject.Open
    BizObject.Delete
    BizObject.Close
 
  'Step 4 : Logout after done 
    'ComServer.Logout 
    MsgBox "Done"
Else
MsgBox "Record Not Found"
  END IF
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====Get Invoice Next Number====
{| class="mw-collapsible mw-collapsed wikitable"
! Get Invoice Next Number Script 
|-
|
<syntaxhighlight lang="vb">
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg GetNextNo.vbs
Call CheckLogin
Call GetData
Call ShowNextNo
 
Dim ComServer, lDataSet
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function
 
Function GetData
Dim lSQL
  lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A "
  lSQL = lSQL & "INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY) "
  lSQL = lSQL & "WHERE A.DOCTYPE='IV' "
  lSQL = lSQL & "AND A.DESCRIPTION='Customer Invoice' "
  lSQL = lSQL & "AND A.STATESET=1 "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function
 
Function ShowNextNo
Dim Desc, Fmt, NextNo, lResult, sb
  set sb = CreateObject("System.Text.StringBuilder")
  'Step 2 : Find Doc Number
  If lDataSet.RecordCount > 0 Then 
lDataSet.First
    Desc = lDataSet.FindField("Description").AsString
Fmt  = lDataSet.FindField("Format").AsString
NextNo = lDataSet.FindField("NEXTNUMBER").Value
'Convert from IV-%.5d to IV-{0:d5}
sb.Append_3 Fmt
sb.Replace "d", ""
sb.Replace "%.","{0:d"
Fmt = sb.ToString & "}"
sb.Length = 0 'clear sb list
sb.AppendFormat Fmt, NextNo
lResult = sb.ToString
    MsgBox Desc
MsgBox Fmt
MsgBox NextNo
MsgBox lResult
Else
MsgBox "Record Not Found"
  END IF   
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====Auto Run Doc. Number====
{| class="mw-collapsible mw-collapsed wikitable"
! Sales Order Auto Run Doc Number Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg SL_SO.vbs
'If had prompt Set Default - Just click Yes to avoid keep prompt
Call CheckLogin
Call GetData
Call InsertData
 
Dim ComServer, lDataSet
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function
 
Function GetData
Dim lSQL
  lSQL = "SELECT * FROM SY_DOCNO "
  lSQL = lSQL & "WHERE DESCRIPTION='Customer Sales Order 2' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function
 
 
Function InsertData
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("SL_SO")
 
  'Step 3: Set Dataset
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2019")
  BizObject.New
  lMain.FindField("DocKey").value        = -1
  lMain.FindField("DocNo").AsString      = "<<New>>"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value      = lDate
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  lMain.FindField("Address1").AsString    = "" 'Optional
  lMain.FindField("Address2").AsString    = "" 'Optional
  lMain.FindField("Address3").AsString    = "" 'Optional
  lMain.FindField("Address4").AsString    = "" 'Optional
  lMain.FindField("Phone1").AsString      = "" 'Optional
  lMain.FindField("Description").AsString = "Sales Order"
  lMain.FindField("DocNoSetKey").value    = lDataSet.FindField("DocKey").value
   
  'Step 5: Insert Data - Detail
  'For With Item Code
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("DocKey").value        = -1
  lDetail.FindField("Seq").value            = 3
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Sales Item B"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UOM").AsString        = "UNIT"
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("Tax").AsString        = ""
  lDetail.FindField("TaxRate").AsString    = ""
  lDetail.FindField("TaxInclusive").value  = 0
  lDetail.FindField("UnitPrice").AsFloat    = 100 
  lDetail.FindField("Amount").AsFloat      = 200
  lDetail.FindField("TaxAmt").AsFloat      = 0
  lDetail.Post
 
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
 
  'Step 7 : Logout after done 
  'ComServer.Logout
 
  MsgBox "Done" 
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL_PV====
{| class="mw-collapsible mw-collapsed wikitable"
! Cash Book PV Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg AR_PM.vbs
Call PostData
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
Function PostData
Dim ComServer, BizObject, lIVNo, lDate
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
  END IF
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_PV")
  'Step 3: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data 
 
  'Step 4 : Posting
    lDate = CDate("January 23, 2020")
    BizObject.New
    lMain.FindField("DOCKEY").Value          = -1
    lMain.FindField("DocNo").AsString        = "--CB PV Test--"
    lMain.FindField("DocDate").Value          = lDate
    lMain.FindField("PostDate").Value        = lDate
    lMain.FindField("Description").AsString  = "Compacc System"
    lMain.FindField("PaymentMethod").AsString = "310-001"
lMain.FindField("CHEQUENUMBER").AsString = "MBB 213245"
    lMain.FindField("DocAmt").AsFloat        = 2019.57
    lMain.FindField("Cancelled").AsString    = "F"
lMain.Post
 
    lDetailDataSet.Append
    lDetailDataSet.FindField("DTLKEY").value = -1
lDetailDataSet.FindField("DOCKEY").value = -1
lDetailDataSet.FindField("Code").AsString = "200-300"
    lDetailDataSet.FindField("DESCRIPTION").AsString = "Maybank - Asus A555LD-xx313H"
lDetailDataSet.FindField("TAX").AsString = ""
lDetailDataSet.FindField("TAXAMT").AsFloat = 0
lDetailDataSet.FindField("TAXINCLUSIVE").AsFloat = 0
lDetailDataSet.FindField("AMOUNT").AsFloat = 2019.57
    lDetailDataSet.Post
 
  'Step 5: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
====ST_Item with Opening====
{| class="mw-collapsible mw-collapsed wikitable"
! ST_Item with Opening Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg ST_XF.vbs
Call CheckLogin
Call InsertData
 
Dim ComServer
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function
 
Function InsertData
Dim BizObject, lMain, lDtl, lOpn
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("ST_ITEM")
 
  'Step 3: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDtl = BizObject.DataSets.Find("cdsUOM") 'lDetail contains detail data 
  Set lOpn = BizObject.DataSets.Find("cdsOpeningBalance") 'lDetail contains detail data 
 
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  BizObject.New
  lMain.FindField("CODE").value = "==Test New Item Code=="
  lMain.FindField("DESCRIPTION").value = "Item Description 123"
  lMain.FindField("STOCKGROUP").value = "DEFAULT"
  lMain.FindField("STOCKCONTROL").value = "T"
  lMain.FindField("ISACTIVE").value = "T"
   
  'Step 5: Insert Data - Detail
  lDtl.Edit 'For 1St UOM
  lDtl.FindField("UOM").AsString = "PCS"
  lDtl.FindField("Rate").AsFloat = 1
  lDtl.FindField("RefCost").AsFloat = 10.2
  lDtl.FindField("RefPrice").AsFloat = 25
  lDtl.Post
 
  lDtl.Append 'For 2nd UOM
  lDtl.FindField("UOM").AsString = "CTN"
  lDtl.FindField("Rate").AsFloat = 12
  lDtl.FindField("RefCost").AsFloat = 102
  lDtl.FindField("RefPrice").AsFloat = 240
  lDtl.Post
 
  'Step 6: Insert Data - Opening
  lOpn.Append
  lOpn.FindField("LOCATION").AsString = "----"
  lOpn.FindField("Qty").AsFloat = 10 'in smallest UOM'
  lOpn.FindField("COST").AsFloat = 10.2
  lOpn.Post
 
  'Step 7: Save Document
  BizObject.Save
  BizObject.Close
 
  'Step 8 : Logout after done 
  'ComServer.Logout
 
  MsgBox "Done" 
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL Stock Value-Insert,Edit & Delete====
{| class="mw-collapsible mw-collapsed wikitable"
! GL Stock Value Insert, Edit & Delete Script 
|-
|
<syntaxhighlight lang="vb">
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg GLStockValue.vbs
Call CheckLogin
Call GetData
'Call InsertValue
'Call UpdateValue
Call DeleteValue
 
Dim ComServer, lDataSet
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function
 
Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM GL_STOCK "
  lSQL = lSQL & "WHERE BalanceStock='330-000' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function
 
Function InsertValue
Dim BizObject, lMain, lDetail
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_STOCK")
 
  'Step 3: Set Dataset
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Step 4 : Find Dockey Record
  If lDataSet.RecordCount > 0 Then 
lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString 
    BizObject.Open
    BizObject.Edit
    lDetail.Append
    lDetail.FindField("Project").value = "----"
lDetail.FindField("SYear").value = 2021
lDetail.FindField("SMonth").value = 4
lDetail.FindField("Amount").value = 423.00
    lDetail.Post
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  END IF
End Function
 
Function UpdateValue
Dim BizObject, lMain, lDetail, v(2)
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_STOCK")
 
  'Step 3: Set Dataset
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Step 4 : Find Dockey Record
  If lDataSet.RecordCount > 0 Then 
lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString 
    BizObject.Open
    BizObject.Edit
 
    v(0) = "----" 'Project Code
    v(1) = "2021" 'Year
v(2) = "3" 'Month to update
if (lDetail.Locate("Project;SYear;SMonth", v, false, false)) then
      lDetail.Edit
      lDetail.FindField("Amount").value = 333.12     
      lDetail.Post
End IF
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  END IF
End Function
 
Function DeleteValue
Dim BizObject, lMain, lDetail, v(2)
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_STOCK")
 
  'Step 3: Set Dataset
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
  'Step 4 : Find Dockey Record
  If lDataSet.RecordCount > 0 Then 
lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString 
    BizObject.Open
    BizObject.Edit
 
    v(0) = "----" 'Project Code
    v(1) = "2021" 'Year
v(2) = "4" 'Month to update
if (lDetail.Locate("Project;SYear;SMonth", v, false, false)) then
      lDetail.Delete
End IF
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  END IF
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====Stock Item Template to SL_IV====
{| class="mw-collapsible mw-collapsed wikitable"
! Stock Item Template to SL_IV Script 
|-
|
<syntaxhighlight lang="vb">
'Updated 03 Sep 2021
'Copy below script & paste to notepad & name it as eg SL_IV.vbs
Call CheckLogin
Call InsertData1
Call InsertData2
 
Dim ComServer
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
                'UserName, Password, DCF full path, Database filename
  END IF
End Function
 
Function InsertData1
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("ST_ITEM_TPL")
 
  'Step 3: Set Dataset
  Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsItemTplDtl") 'lDetail contains detail data 
 
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  BizObject.New
  lMain.FindField("Code").AsString        = "--TPL Test--"
  lMain.FindField("Description").AsString = "Template formt 1"
  lMain.FindField("RefPrice").AsFloat    = 299.15
   
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("Code").AsString        = "--TPL Test--"
  lDetail.FindField("Seq").value            = 1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Sales Item A"
  lDetail.FindField("UOM").AsString        = "BOX"
  lDetail.FindField("Qty").AsFloat          = 2
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("UNITAMOUNT").AsFloat    = 100 
  lDetail.FindField("Amount").AsFloat      = 200
  lDetail.FindField("PRINTABLE").AsString  = "T"
  lDetail.Post
 
  lDetail.Append
  lDetail.FindField("DtlKey").value        = -1
  lDetail.FindField("Code").AsString        = "--TPL Test--"
  lDetail.FindField("Seq").value            = 2
  lDetail.FindField("ItemCode").AsString    = "COVER"
  lDetail.FindField("Description").AsString = "Sales Item B"
  lDetail.FindField("UOM").AsString        = "UNIT"
  lDetail.FindField("Qty").AsFloat          = 3
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("UNITAMOUNT").AsFloat    = 10 
  lDetail.FindField("Amount").AsFloat      = 30
  lDetail.FindField("PRINTABLE").AsString  = "T"
  lDetail.Post 
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "Template Posting Done" 
End Function
 
Function InsertData2
Dim BizObject, lMain, lDetail, lDate, lDODtl, lSQL, v(2)
  'Step 1: Get Template Information
  lSQL = "SELECT * FROM ST_ITEM_TPLDTL "
  lSQL = lSQL & "WHERE Code='--TPL Test--' "
  Set lDODtl = ComServer.DBManager.NewDataSet(lSQL)
 
  if lDODtl.RecordCount > 0 then
'Step 2: Find and Create the Biz Objects
    Set BizObject = ComServer.BizObjects.Find("SL_IV")
 
    'Step 3: Set Dataset
    Set lMain  = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
    Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data 
 
    'Step 4 : Insert Data - Master
    lDate = CDate("January 1, 2021")
    BizObject.New
    lMain.FindField("DocKey").value        = -1
    lMain.FindField("DocNo").AsString      = "--IV Test--"
    lMain.FindField("DocDate").value        = lDate
    lMain.FindField("PostDate").value      = lDate
    lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
    lMain.FindField("CompanyName").AsString = "Cash Sales"
    'lMain.FindField("Address1").AsString    = "" 'Optional
    'lMain.FindField("Address2").AsString    = "" 'Optional
    'lMain.FindField("Address3").AsString    = "" 'Optional
    'lMain.FindField("Address4").AsString    = "" 'Optional
    'lMain.FindField("Phone1").AsString      = "" 'Optional
    lMain.FindField("Description").AsString = "Sales"
   
    'Step 6: Insert Data - Detail
lDODtl.First
    While not lDODtl.Eof
      lDetail.Append
      lDetail.FindField("DtlKey").value        = -1
      lDetail.FindField("DocKey").value        = -1
      lDetail.FindField("Seq").value            = 1
      lDetail.FindField("ItemCode").AsString    = lDODtl.FindField("ItemCode").AsString
      lDetail.FindField("Description").AsString = lDODtl.FindField("Description").AsString
      lDetail.FindField("UOM").AsString        = lDODtl.FindField("UOM").AsString
      lDetail.FindField("Qty").AsFloat          = lDODtl.FindField("Qty").AsFloat
      lDetail.FindField("DISC").AsString        = lDODtl.FindField("Disc").AsString
      lDetail.FindField("UnitPrice").AsFloat    = lDODtl.FindField("UnitAmount").AsFloat
      lDetail.FindField("Amount").AsFloat      = lDODtl.FindField("Amount").AsFloat
      lDetail.FindField("PRINTABLE").AsString  = lDODtl.FindField("PRINTABLE").AsString
      lDetail.Post
  lDODtl.Next
Wend
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
 
  'Step 8 : Logout after done 
  'ComServer.Logout
 
  MsgBox "Posting IV Done"
  else MsgBox "--No Template found. Posting IV aborted" 
  End IF
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
====AR_CN====
{| class="mw-collapsible mw-collapsed wikitable"
! AR_CN Script 
|-
|
<syntaxhighlight lang="vb">
'Updated 24 Feb 2023
'Copy below script & paste to notepad & name it as eg AR_CN.vbs
Call InsertData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function InsertData
Dim ComServer, BizObject, lDate, lIVNO, v(1)
 
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
  END IF
 
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_CN")
 
  'Step 3: Set Dataset
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data 
  Set lKO = BizObject.DataSets.Find("cdsKnockOff") 'Contains IV/DN to knock off data 
 
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2023")
  BizObject.New
  lMainDataSet.FindField("DocKey").value = -1
  lMainDataSet.FindField("DocNo").value = "--CN Test--"
  lMainDataSet.FindField("DocDate").value = lDate
  lMainDataSet.FindField("PostDate").value = lDate
  lMainDataSet.FindField("Code").value = "300-A0001"
  lMainDataSet.FindField("Description").value = "Credit Note"
   
  'Step 5: Insert Data - Detail
  'For Tax Inclusive = True with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "510-2000"
  lDetailDataSet.FindField("Description").value =  "Sales Item A"
  lDetailDataSet.FindField("Tax").value =  "SV"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("Amount").value = 410.37
  lDetailDataSet.FindField("TaxAmt").value = 24.63
 
  lDetailDataSet.DisableControls
  lDetailDataSet.FindField("TaxInclusive").value =  1
  lDetailDataSet.EnableControls
 
  lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post
 
  'For Tax Inclusive = False with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "510-2000"
  lDetailDataSet.FindField("Description").value =  "Sales Item B"
  lDetailDataSet.FindField("Tax").value =  "SV"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("Amount").value = 94.43
  lDetailDataSet.FindField("TaxAmt").value = 5.66
  lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post
 
  'Step 7: Knock Off IV
    lIVNO = "--IV Test--"
    v(0) = "IV"
    v(1) = lIVNO
    if (lKO.Locate("DocType;DocNo", v, false, false)) then
      lKO.Edit
      lKO.FindField("KOAmt").value = 65.57
      lKO.FindField("KnockOff").AsString = "T"
      lKO.Post
End IF 
 
  'Step 7: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "Done"
End Function
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
<br />
 
===JScript/JavaScript===
This Script only can run using Internet Explorer (till IE 11)
 
====AR_IV====
{| class="mw-collapsible mw-collapsed wikitable"
! AR_IV Script 
|-
|
<syntaxhighlight lang="javascript">
<html>
<head>
<title>Add Customer Invoice</title>
<script language="JScript">
var ComServer;
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}
function AutoInvoice() {
  var BizObject, lMainDataSet, lDetailDataSet;
  CreateSQLAccServer();
  BizObject = ComServer.BizObjects.Find('AR_IV');
  lMainDataSet = BizObject.DataSets.Find('MainDataSet');
  lDetailDataSet = BizObject.DataSets.Find('cdsDocDetail');
  BizObject.New();
  lMainDataSet.FindField('DocKey').value = -1;
  lMainDataSet.FindField('DocNo').value = "--IV Test--";
  lMainDataSet.FindField('DocDate').value = "01/10/2016";
  lMainDataSet.FindField('PostDate').value = "01/10/2016";
  lMainDataSet.FindField('Code').value = "300-A0003";
  lMainDataSet.FindField('Description').value = "Sales";
 
  /*For Tax Inclusive = True with override Tax Amount*/
  lDetailDataSet.Append();
  lDetailDataSet.FindField('DtlKey').value = -1;
  lDetailDataSet.FindField('DocKey').value = -1;
  lDetailDataSet.FindField('Account').value = "500-000";
  lDetailDataSet.FindField('Description').value =  "Sales Item A";
  lDetailDataSet.FindField('Tax').value =  "SR";
  lDetailDataSet.FindField('TaxInclusive').value =  0;
  lDetailDataSet.FindField('Amount').value = 410.37;
  lDetailDataSet.FindField('TaxAmt').value = 24.63;
  lDetailDataSet.DisableControls();
  lDetailDataSet.FindField('TaxInclusive').value =  1;
  lDetailDataSet.EnableControls();
  lDetailDataSet.FindField('Changed').value = "F";
  lDetailDataSet.Post();
 
  /*For Tax Inclusive = False with override Tax Amount*/
  lDetailDataSet.Append();
  lDetailDataSet.FindField('DtlKey').value = -1;
  lDetailDataSet.FindField('DocKey').value = -1;
  lDetailDataSet.FindField('Account').value = "500-000";
  lDetailDataSet.FindField('Description').value =  "Sales Item B";
  lDetailDataSet.FindField('Tax').value =  "SR";
  lDetailDataSet.FindField('TaxInclusive').value =  0;
  lDetailDataSet.FindField('Amount').value = 94.43;
  lDetailDataSet.FindField('TaxAmt').value = 5.66;
  lDetailDataSet.FindField('Changed').value = "F";
  lDetailDataSet.Post();
 
  /* Save document */ 
    BizObject.Save();
    BizObject.Close();
    alert('Customer Invoice - has been saved.');
}
</script>
</head>
<body>
<input type="submit" value="SYNC" name="btnSubmit" onclick="AutoInvoice()">
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====SL_CS====
{| class="mw-collapsible mw-collapsed wikitable"
! SL_CS Script 
|-
|
<syntaxhighlight lang="javascript">
<html>
<head>
<title>Add Cash Sales</title>
<script language="JScript">
var ComServer;
 
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}
 
function InsertData() {
  var BizObject, lMain, lDetail;
 
  CreateSQLAccServer();
 
  /*Step 2: Find and Create the Biz Objects*/
  BizObject = ComServer.BizObjects.Find('SL_CS') ;
 
  /*Step 3: Set Dataset*/
  lMain  = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsDocDetail'); /*lDetail contains detail data */ 
 
  /*Begin Looping yr data*/
  /*Step 4 : Insert Data - Master*/
  BizObject.New();
  lMain.FindField('DocKey').value        = -1;
  lMain.FindField('DocNo').AsString      = "--IV Test--";
  lMain.FindField('DocDate').value        = "20/12/2017";
  lMain.FindField('PostDate').value      = "20/12/2017";
  lMain.FindField('Code').AsString        = "300-C0001"; /*Customer Account*/
  lMain.FindField('CompanyName').AsString = "Cash Sales"
  lMain.FindField('Address1').AsString    = ""; /*Optional*/
  lMain.FindField('Address2').AsString    = ""; /*Optional*/
  lMain.FindField('Address3').AsString    = ""; /*Optional*/
  lMain.FindField('Address4').AsString    = ""; /*Optional*/
  lMain.FindField('Phone1').AsString      = ""; /*Optional*/
  lMain.FindField('Description').AsString = "Sales";
   
  /*Step 5: Insert Data - Detail*/
  /*For Tax Inclusive = True with override Tax Amount*/
  lDetail.Append();
  lDetail.FindField('DtlKey').value        = -1;
  lDetail.FindField('DocKey').value        = -1;
  lDetail.FindField('Seq').value            = 1;
  lDetail.FindField('Account').AsString    = "500-000"; /*Sales Account*/
  lDetail.FindField('Description').AsString = "Sales Item A";
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('Tax').AsString        = "SR";
  lDetail.FindField('TaxRate').AsString    = "6%";
  lDetail.FindField('TaxInclusive').value  = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 435;
  lDetail.FindField('Amount').AsFloat      = 410.37; /*Exclding GST Amt*/
  lDetail.FindField('TaxAmt').AsFloat      = 24.63;
 
  lDetail.DisableControls();
  lDetail.FindField('TaxInclusive').value  = 1;
  lDetail.EnableControls();
 
  lDetail.Post();
 
  /*For Tax Inclusive = False with override Tax Amount*/
  lDetail.Append();
  lDetail.FindField('DtlKey').value        = -1;
  lDetail.FindField('DocKey').value        = -1;
  lDetail.FindField('Seq').value            = 2;
  lDetail.FindField('Account').AsString    = "500-000";
  lDetail.FindField('Description').AsString = "Sales Item B";
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('Tax').AsString        = "SR";
  lDetail.FindField('TaxRate').AsString    = "6%";
  lDetail.FindField('TaxInclusive').value  = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 94.43;
  lDetail.FindField('Amount').AsFloat      = 94.43;
  lDetail.FindField('TaxAmt').AsFloat      = 5.66;
  lDetail.Post();
 
  /*For With Item Code*/
  lDetail.Append();
  lDetail.FindField('DtlKey').value        = -1;
  lDetail.FindField('DocKey').value        = -1;
  lDetail.FindField('Seq').value            = 3;
  lDetail.FindField('ItemCode').AsString    = "ANT";
  lDetail.FindField('Description').AsString = "Sales Item B";
  /*lDetail.FindField('Account').AsString    = "500-000"; If you wanted override the Sales Account Code*/
  lDetail.FindField('Qty').AsFloat          = 2;
  lDetail.FindField('UOM').AsString        = "UNIT";
  /*lDetail.FindField('DISC').AsString        = "5%+3"; Optional (eg 5% plus 3 Discount)*/
  lDetail.FindField('Tax').AsString        = "SR";
  lDetail.FindField('TaxRate').AsString    = "6%";
  lDetail.FindField('TaxInclusive').value  = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 100;
  lDetail.FindField('Amount').AsFloat      = 200;
  lDetail.FindField('TaxAmt').AsFloat      = 12;
  lDetail.Post();
 
  /*Step 6: Save Document*/
  BizObject.Save();
  BizObject.Close();
    alert('Document has been saved.');
}
</script>
</head>
<body>
<input type="submit" value="SYNC" name="btnSubmit" onclick="InsertData()">
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_PM====
{| class="mw-collapsible mw-collapsed wikitable"
! AR_PM Script 
|-
|
<syntaxhighlight lang="javascript">
<html>
<head>
<title>Customer Payment</title>
<script language="JScript">
<html>
<head>
<title>Add Customer Payment</title>
<script language="JScript">
var ComServer;
 
function CreateSQLAccServer() {
  ComServer = new ActiveXObject("SQLAcc.BizApp");
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}
 
function AddPayment() {
  var BizObject, lMainDataSet, lKnockOffDataSet, V;
 
  CreateSQLAccServer();
 
  BizObject = ComServer.BizObjects.Find('AR_PM');
  lMainDataSet = BizObject.DataSets.Find('MainDataSet');
  lKnockOffDataSet = BizObject.DataSets.Find('cdsKnockOff');
  BizObject.New();
 
  lMainDataSet.FindField('DocKey').value = -1;
  lMainDataSet.FindField('DocNo').value = "--OR Test--";
  lMainDataSet.FindField('Code').value = "300-C0001";
  lMainDataSet.FindField('DocDate').value = "10/10/2023";
  lMainDataSet.FindField('PostDate').value = "10/10/2023"; 
  lMainDataSet.FindField('Description').value = "Payment for Account";
  lMainDataSet.FindField('PaymentMethod').value = "310-001";
  lMainDataSet.FindField('ChequeNumber').value = "";
  lMainDataSet.FindField('DocAmt').AsFloat = 106.10;
  lMainDataSet.FindField('BankCharge').AsFloat = 0;
  lMainDataSet.FindField('UnappliedAmt').AsFloat = 0;
  lMainDataSet.FindField('Cancelled').value = 'F';
 
  v = ComServer.CreateOleVariantArray(2);
  v.SetItem(0, 'IV'); /*Knock Off DocType*/
  v.SetItem(1, 'IV-00172'); /*Knock Off DocNo*/
 
  if (lKnockOffDataSet.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
          lKnockOffDataSet.Edit();
          lKnockOffDataSet.FindField('KOAmt').AsFloat = 106.10;  
          lKnockOffDataSet.FindField('KnockOff').AsString = 'T';
          lKnockOffDataSet.Post(); }
    /* Save document */ 
    BizObject.Save();
    BizObject.Close();
    alert("Customer Payment - has been saved.");
}
 
function EditPayment(){
  var BizObject, lMainDataSet, lKnockOffDataSet, V, lDocNo, lDocKey;
 
  CreateSQLAccServer();
 
  BizObject = ComServer.BizObjects.Find('AR_PM');
  lMainDataSet = BizObject.DataSets.Find('MainDataSet');
  lKnockOffDataSet = BizObject.DataSets.Find('cdsKnockOff');
 
  lDocNo = "--OR Test--"
  lDocKey = BizObject.FindKeyByRef('DocNo', lDocNo);
  BizObject.Params.Find('DocKey').Value = lDocKey;
 
  if (lDocKey != null) {
    BizObject.Open();
    BizObject.Edit();
    lMainDataSet.FindField('Description').value = "Payment for Account-Edited";
    lMainDataSet.FindField('PaymentMethod').value = "310-001";
    lMainDataSet.FindField('ChequeNumber').value = "";
    lMainDataSet.FindField('DocAmt').AsFloat = 200.00;
    lMainDataSet.FindField('BankCharge').AsFloat = 0;
    lMainDataSet.FindField('UnappliedAmt').AsFloat = 0;
    lMainDataSet.FindField('Cancelled').value = 'F';
 
    v = ComServer.CreateOleVariantArray(2);
    v.SetItem(0, 'IV'); /*Knock Off DocType*/
    v.SetItem(1, 'IV-00172'); /*Knock Off DocNo*/
 
    if (lKnockOffDataSet.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
          lKnockOffDataSet.Edit();
          lKnockOffDataSet.FindField('KOAmt').AsFloat = 200;  
          lKnockOffDataSet.FindField('KnockOff').AsString = 'T';
          lKnockOffDataSet.Post(); }
    /* Save document */ 
      BizObject.Save();
      BizObject.Close();
      alert("Customer Payment - has been Edited & saved.");
  }
}
 
function DelPayment(){
  var BizObject, lMainDataSet, lKnockOffDataSet, V, lDocNo, lDocKey;
 
  CreateSQLAccServer();
 
  BizObject = ComServer.BizObjects.Find('AR_PM');
  lMainDataSet = BizObject.DataSets.Find('MainDataSet');
  lKnockOffDataSet = BizObject.DataSets.Find('cdsKnockOff');
 
  lDocNo = "--OR Test--"
  lDocKey = BizObject.FindKeyByRef('DocNo', lDocNo);
  BizObject.Params.Find('DocKey').Value = lDocKey;
 
  if (lDocKey != null) {
    BizObject.Open();
    BizObject.Delete();
 
    BizObject.Close();
    alert("Customer Payment - has been Deleted.");
  }
}
</script>
</head>
<body>
<input type="submit" value="Add Payment" name="btnSubmit" onclick="AddPayment()">
<input type="submit" value="Edit Payment" name="btnSubmit" onclick="EditPayment()">
<input type="submit" value="Delete Payment" name="btnSubmit" onclick="DelPayment()">
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====Customer.IV.RO====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer.IV.RO Report Object Script 
|-
|
<syntaxhighlight lang="javascript">
<html>
  <head>
    <title>Customer.IV.RO</title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <script type="text/javascript">
var ComServer;
 
function CreateSQLAccServer() {
  ComServer = new ActiveXObject("SQLAcc.BizApp");
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}     
 
function GetData() { 
  var lMain, lDetail, lRptVar, lDateFrom, lDateTo;
 
  elem = document.getElementById('txt1');
 
  CreateSQLAccServer();
 
  lDateFrom = new Date("January 1 2015");
  lDateTo = new Date("December 31, 2015");
 
  lRptVar = ComServer.RptObjects.Find('Customer.IV.RO');
  lRptVar.Params.Find('SelectDate').Value          = true;
  lRptVar.Params.Find('DateFrom').Value            = lDateFrom.valueOf();
  lRptVar.Params.Find('DateTo').Value              = lDateTo.valueOf();
  lRptVar.Params.Find('AllAgent').Value            = false;
  lRptVar.Params.Find('AgentData').Value            = "----\nLF"; /*Filter by Agent code ---- & HALIM */
  lRptVar.Params.Find('AllArea').Value              = true;
  lRptVar.Params.Find('AllCompany').Value          = true;
  lRptVar.Params.Find('AllCurrency').Value          = true;
  lRptVar.Params.Find('AllDocProject').Value        = true;
  lRptVar.Params.Find('AllCompanyCategory').Value  = true;
  lRptVar.Params.Find('AllDocument').Value          = true;
  lRptVar.Params.Find('IncludeCancelled').Value  = false;
  lRptVar.Params.Find('PrintDocumentStyle').Value = false;
  lRptVar.Params.Find('AllItemProject').Value    = true;
  lRptVar.Params.Find('AllPaymentMethod').Value  = true;
  lRptVar.CalculateReport(); 
 
  lMain  = lRptVar.DataSets.Find('cdsMain');
  lDetail = lRptVar.DataSets.Find('cdsDocDetail');
  /*alert("Count -" + lRptVar.DataSets.Find('cdsDocDetail').RecordCount);*/
  elem.innerHTML += 'From Main'+'\n';
   
  lMain.First();
  while (!lMain.eof) {
    elem.innerHTML += lMain.FindField('DocKey').AsString + ' ' +
                  lMain.FindField('DocNo').AsString + ' ' + lMain.FindField('DocDate').AsString + ' '+
                      lMain.FindField('CompanyName').AsString + ' ' + lMain.FindField('DocAmt').AsString + '\n';
lMain.Next(); 
  }
  elem.innerHTML += 'End Main'+'\n\n';
 
  elem.innerHTML += 'From Detail'+'\n';
  lDetail.First();
  while (!lDetail.eof) {
    elem.innerHTML += lDetail.FindField('Dockey').AsString + ' ' + lDetail.FindField('Account').AsString + ' ' +
                  lDetail.FindField('Description').AsString + ' ' + lDetail.FindField('Amount').AsString + '\n';
lDetail.Next(); 
  } 
  elem.innerHTML += 'End Detail'+'\n\n';
}
 
    </script>
  </head>
  <body>
    <form>
      <textarea id="txt1" rows="30" cols="116"></textarea>
      <input type="button" value="Calculate" onclick="GetData()">
    </form>
  </body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====Customer.RO====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer.RO Report Object Script 
|-
|
<syntaxhighlight lang="javascript">
<html>
<head>
<title>Add Customer Invoice</title>
<script language='JScript'>
var ComServer;
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}
 
function GetCustomerData() {
  var RptObject, lDataSet, lDataSet2;
  edOutput.value = '';
  edOutput2.value = '';
  //Step 1: Create Com Server object
  CreateSQLAccServer();
 
  //Step 2: Find and Create the Report Objects
  RptObject = ComServer.RptObjects.Find('Customer.RO');
 
  //Step 3: Spool parameters
  RptObject.Params.Find('AllAgent').Value = true;
  RptObject.Params.Find('AllArea').Value = true;
  RptObject.Params.Find('AllCompany').Value = true;
  RptObject.Params.Find('AllCompanyCategory').Value = true;
  RptObject.Params.Find('AllCurrency').Value = true;
  RptObject.Params.Find('AllTerms').Value = true;
  RptObject.Params.Find('SelectDate').Value = true;
  RptObject.Params.Find('PrintActive').Value = true;
  RptObject.Params.Find('PrintInactive').Value = false;
  RptObject.Params.Find('PrintPending').Value = false;
  RptObject.Params.Find('PrintProspect').Value = false;
  RptObject.Params.Find('PrintSuspend').Value = false;
  //RptObject.Params.Find('CompanyData').Value = '300-A0003';
 
  //Step 4: Perform Report calculation
  RptObject.CalculateReport();
  lDataSet = RptObject.DataSets.Find('cdsMain');
  lDataSet2 = RptObject.DataSets.Find('cdsBranch');
 
  //alert('Count ' + lDataSet.RecordCount);
 
  //Step 5 Retrieve the output
  lDataSet.First;
  while  (!lDataSet.eof){
    edOutput.value = edOutput.value +
                'Code : ' + lDataSet.FindField('Code').AsString + '\n' +
                'Company Name : ' + lDataSet.FindField('CompanyName').AsString +'\n\n';
lDataSet.Next();
  }
  lDataSet2.First();
  while (!lDataSet2.eof){
  edOutput2.value = edOutput2.value +
                  'Code : '+ lDataSet2.FindField('Code').AsString + '\n' +
  'Branch Name : '+ lDataSet2.FindField('BranchName').AsString + '\n' +
                  'Address 1 : '+ lDataSet2.FindField('Address1').AsString + '\n' +
  'Address 2 : '+ lDataSet2.FindField('Address2').AsString + '\n' +
  'Address 3 : '+ lDataSet2.FindField('Address3').AsString + '\n' +
  'Address 4 : '+ lDataSet2.FindField('Address4').AsString + '\n' +
  'Phone 1 : '+ lDataSet2.FindField('Phone1').AsString  +'\n\n';
  lDataSet2.Next();
    }
}
 
</script>
</head>
<body>
  <table>
    <tr>
      <th>Main Table</th>
      <th>Branch Branch</th>
    </tr>
    <tr>
      <td>
        <TEXTAREA rows=15 cols=75 name="edOutput"></TEXTAREA>
  </td>
      <td>
        <TEXTAREA rows=15 cols=75 name="edOutput2"></TEXTAREA>
  </td>
    </tr>
  </table>
  <table width="83%">
<tr>
  <td align="center">
<input type='submit' value='Sync Data' name='btnSubmit' onclick='GetCustomerData()'>
  </td>
</tr>
  </table>
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====Get Next IV Number====
{| class="mw-collapsible mw-collapsed wikitable"
! Get Next IV Number Script 
|-
|
<syntaxhighlight lang="javascript">
<html>
<head>
<title>Add Cash Sales</title>
<script language="JScript">
var ComServer, lDataSet;
 
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}
 
function zeroPad(num, places) {
  var zero = places - num.toString().length + 1;
  return Array(+(zero > 0 && zero)).join("0") + num;
  /*zeroPad(5, 2); // "05"*/
}
 
function GetData() {
  var lSQL;
  lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A ";
  lSQL = lSQL + "INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY) ";
  lSQL = lSQL + "WHERE A.DOCTYPE='IV' ";
  lSQL = lSQL + "AND A.DESCRIPTION='Customer Invoice' ";
  lSQL = lSQL + "AND A.STATESET=1 ";
  lDataSet = ComServer.DBManager.NewDataSet(lSQL); 
}
 
function ShowNextNo() {
  var Desc, Fmt, NextNo, lResult, lPad;
 
  CreateSQLAccServer(); 
  GetData();
 
  if (lDataSet.RecordCount > 0) { 
    lDataSet.First;
    Desc = lDataSet.FindField("Description").AsString;
Fmt  = lDataSet.FindField("Format").AsString;
NextNo = lDataSet.FindField("NEXTNUMBER").Value;
    alert(Desc);
alert(Fmt);
alert(NextNo);
lPad = Fmt.substr(5, 1);
lPad = zeroPad(NextNo, lPad)
Desc = Fmt.substr(0, 3);
alert(Desc + lPad);
  }
}
</script>
</head>
<body>
<input type="submit" value="Show Next No" name="btnSubmit" onclick="ShowNextNo()">
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
====Customer & Supplier Contra====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer & Supplier Contra Script 
|-
|
<syntaxhighlight lang="javascript">
<html>
<head>
<title>Add Customer Invoice</title>
<script language="JScript">
var ComServer;
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}
function PostARCT() {
  var BizObject, lMain, lKO, V;
  CreateSQLAccServer();
  BizObject = ComServer.BizObjects.Find('AR_CT');
  lMain = BizObject.DataSets.Find('MainDataSet');
  lKO = BizObject.DataSets.Find('cdsKnockOff');
  BizObject.New();
  lMain.FindField('DocKey').value = -1;
  lMain.FindField('DocNo').value = "--CT Test--";
  lMain.FindField('DocDate').value = "01/10/2020";
  lMain.FindField('PostDate').value = "01/10/2020";
  lMain.FindField('Code').value = "300-A0002";
  lMain.FindField('Description').value = "Contra";
  lMain.FindField('DocAmt').value = "100.00";
  //lMain.FindField('UnappliedAmt').value = "0";
 
  v = ComServer.CreateOleVariantArray(2);
  v.SetItem(0, 'IV'); /*Knock Off DocType*/
  v.SetItem(1, 'IV-00021'); /*Knock Off DocNo*/
 
  if (lKO.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
          lKO.Edit();
          lKO.FindField('DocAmt').value = "100";  
          lKO.FindField('KnockOff').AsString = 'T';
          lKO.Post(); }
 
  /* Save document */ 
    BizObject.Save();
    BizObject.Close();
    alert('Customer Contra - has been saved.');
}
 
function PostAPST() {
  var BizObject, lMain, lKO, V, lDocNo, lDocKey;
  CreateSQLAccServer();
  BizObject = ComServer.BizObjects.Find('AP_ST');
  lMain = BizObject.DataSets.Find('MainDataSet');
  lKO = BizObject.DataSets.Find('cdsKnockOff');
 
  lDocNo = "--CT Test--"
  lDocKey = BizObject.FindKeyByRef("DocNo", lDocNo)
  BizObject.Params.Find("DocKey").Value = lDocKey 
 
  if (lDocKey != null) {
    BizObject.Open();
BizObject.Edit();
lMain.FindField('Code').value = "400-C0001";
lMain.FindField('DocAmt').value = "100.00";
  //lMain.FindField('UnappliedAmt').value = "0";
 
  v = ComServer.CreateOleVariantArray(2);
  v.SetItem(0, 'PI'); /*Knock Off DocType*/
  v.SetItem(1, 'PI-00001'); /*Knock Off DocNo*/
 
    if (lKO.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
          lKO.Edit();
          lKO.FindField('DocAmt').value = "100";  
          lKO.FindField('KnockOff').AsString = 'T';
          lKO.Post(); }
 
  /* Save document */ 
    BizObject.Save(); 
    BizObject.Close();
    alert('Supplier Contra - has been Updated.');
  }
}
</script>
</head>
<body>
<button onclick="javascript:PostARCT();">PostARCT</button>&nbsp;&nbsp;
<button onclick="javascript:PostAPST();">PostAPST</button>&nbsp;&nbsp;
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====Add Stock Item====
{| class="mw-collapsible mw-collapsed wikitable"
! Add ST_Item Script 
|-
|
<syntaxhighlight lang="javascript">
<html>
<head>
<title>Add Stock Item</title>
<script language="JScript">
var ComServer;
 
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}
 
function InsertData() {
  var BizObject, lMain, lDetail;
 
  CreateSQLAccServer();
 
  /*Step 2: Find and Create the Biz Objects*/
  BizObject = ComServer.BizObjects.Find('ST_ITEM') ;
 
  /*Step 3: Set Dataset*/
  lMain  = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lUOM = BizObject.DataSets.Find('cdsUOM'); /*lDetail contains detail data */ 
 
  /*Begin Looping yr data*/
  /*Step 4 : Insert Data - Master*/
  BizObject.New();
  lMain.FindField('Code').AsString        = "Code JScript";
  lMain.FindField('DESCRIPTION').AsString = "Post from JScript"
  lMain.FindField('STOCKGROUP').AsString    = "DEFAULT"; /*Optional*/
  lMain.FindField('STOCKCONTROL').AsString    = "T"; /*Optional*/
  lMain.FindField('ISACTIVE').AsString    = "T"; /*Optional*/
   
  /*Step 5: Insert Data - UOM*/
  lUOM.Edit(); /*For 1St UOM*/
  lUOM.FindField('UOM').AsString = "PCS";
  lUOM.FindField('Rate').AsFloat = 1;
  lUOM.FindField('RefCost').AsFloat = 10.2;
  lUOM.FindField('RefPrice').AsFloat = 25;
  lUOM.Post();
 
  lUOM.Append(); /*For 2nd UOM*/
  lUOM.FindField('UOM').AsString = "CTN";
  lUOM.FindField('Rate').AsFloat = 12;
  lUOM.FindField('RefCost').AsFloat = 102;
  lUOM.FindField('RefPrice').AsFloat = 240;
  lUOM.Post();
 
  /*Step 6: Save*/
  BizObject.Save();
  BizObject.Close();
    alert('Item has been saved.');
}
</script>
</head>
<body>
<input type="submit" value="SYNC" name="btnSubmit" onclick="InsertData()">
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
====Get Company Profile====
{| class="mw-collapsible mw-collapsed wikitable"
! Get Company Profile Script 
|-
|
<syntaxhighlight lang="javascript">
<html>
<head>
<title>Add Cash Sales</title>
<script language="JScript">
var ComServer, lDataSet;
 
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
/* UserName, Password */
  }
}
 
function zeroPad(num, places) {
  var zero = places - num.toString().length + 1;
  return Array(+(zero > 0 && zero)).join("0") + num;
  /*zeroPad(5, 2); // "05"*/
}
 
function GetData() {
  var lSQL;
  lSQL = "SELECT COMPANYNAME, REMARK, BRN, BRN2, GSTNO, ";
  lSQL = lSQL + "SALESTAXNO, SERVICETAXNO, ";
  lSQL = lSQL + "ADDRESS1,ADDRESS2,ADDRESS3,ADDRESS4 FROM SY_PROFILE ";
  lDataSet = ComServer.DBManager.NewDataSet(lSQL); 
}
 
function ShowCoProfile() {
  var CoName, Rmk, BRN;
 
  CreateSQLAccServer(); 
  GetData();
 
  if (lDataSet.RecordCount > 0) { 
    lDataSet.First;
    CoName = lDataSet.FindField("COMPANYNAME").AsString;
Rmk  = lDataSet.FindField("REMARK").AsString;
BRN = lDataSet.FindField("BRN").Value;
    alert(CoName);
alert(Rmk);
alert(BRN);
  }
}
</script>
</head>
<body>
<input type="submit" value="Show Co Profile" name="btnSubmit" onclick="ShowCoProfile()">
</body>
</html>
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
<br />
 
===Delphi===
The below example is assuming after you had check the login status.
====GL_JE====
{| class="mw-collapsible mw-collapsed wikitable"
! GL_JE Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_GL_JEClick(Sender: TObject);
var BizApp, lMain, lDtl, lBizObj, lDocKey : Variant;
    i : integer;
begin
  BizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lBizObj := BizApp.BizObjects.Find('GL_JE');
    lMain  := lBizObj.DataSets.Find('MainDataSet');
    lDtl    := lBizObj.DataSets.Find('cdsDocDetail');
    lBizObj.New;
    lMain.FindField('DOCKEY').Value        := -1;
    lMain.FindField('DocNo').Value        := '--JE Test--';
    lMain.FindField('DocDate').Value      := '28 Aug 2017';
    lMain.FindField('PostDate').Value      := '28 Aug 2017';
    lMain.FindField('TAXDATE').Value      := '28 Aug 2017';
    lMain.FindField('Description').Value  := 'Postage';
    lMain.FindField('Cancelled').Value    := 'F';
    lMain.FindField('DOCNOSETKEY').Value  := 0;
    lMain.Post;
 
    //For Tax Inclusive
    lDtl.Append;
    lDtl.FindField('DTLKEY').Value      := -1;
    lDtl.FindField('DOCKEY').Value      := -1;
    lDtl.FindField('SEQ').Value          := 1;
    lDtl.FindField('CODE').Value        := '610-1000';
    lDtl.FindField('DESCRIPTION').Value  := 'Item Desc 1';
    lDtl.FindField('TAX').Value          := 'TX';
//    lDtl.FindField('LOCALTAXAMT').AsFloat := 17.32;//For JE you can't override (i.e. system auto calc)
    lDtl.FindField('TAXINCLUSIVE').Value  := 1;
    lDtl.FindField('LocalDR').AsFloat    := 306;//Including GST if TAXINCLUSIVE = 1
    lDtl.FindField('DR').AsFloat          := 306;//if wanted DR <> LocalDR
    lDtl.FindField('CHANGED').Value      := 'F';
    lDtl.Post;
 
    //For Tax Exclusive
    lDtl.Append;
    lDtl.FindField('DTLKEY').Value      := -1;
    lDtl.FindField('DOCKEY').Value      := -1;
    lDtl.FindField('SEQ').Value          := 2;
    lDtl.FindField('CODE').Value        := '605-200';
    lDtl.FindField('DESCRIPTION').Value  := 'Item Desc 2';
    lDtl.FindField('TAX').Value          := 'TX';
    lDtl.FindField('TAXINCLUSIVE').Value := 0;
    lDtl.FindField('LocalCR').AsFloat    := 100;
    lDtl.FindField('CHANGED').Value      := 'F';
    lDtl.Post;
 
    //For No GST
    lDtl.Append;
    lDtl.FindField('DTLKEY').Value      := -1;
    lDtl.FindField('DOCKEY').Value      := -1;
    lDtl.FindField('SEQ').Value          := 3;
    lDtl.FindField('CODE').Value        := '610-002';
    lDtl.FindField('DESCRIPTION').Value  := 'Item Desc 3';
    lDtl.FindField('TAX').Value          := '';
    lDtl.FindField('TAXINCLUSIVE').Value  := 0;
    lDtl.FindField('LocalCR').AsFloat    := 200;
    lDtl.FindField('CHANGED').Value      := 'F';
    lDtl.Post;
 
    lBizObj.Save;
    MessageDlg('GL_JE-DocNo : ''--JE Test--'' Posted...', mtInformation, [mbOK],0);
  finally
    lBizObj.Close;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL_PV====
{| class="mw-collapsible mw-collapsed wikitable"
! GL_PV Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_GLPVClick(Sender: TObject);
var lMain, lDtl, lBizObj, BizApp : Variant;
    lTime : TDateTime;
begin
  lTime := Now;
  BizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lBizObj := BizApp.BizObjects.Find('GL_PV');
    lMain  := lBizObj.DataSets.Find('MainDataSet');
    lDtl    := lBizObj.DataSets.Find('cdsDocDetail');
    lBizObj.New;
    lMain.FindField('DOCKEY').Value          := -1;
    lMain.FindField('DocNo').AsString        := '--CB PV Test1--';
    lMain.FindField('DocDate').Value          := '18 Aug 2015';
    lMain.FindField('PostDate').Value        := '18 Aug 2015';
    lMain.FindField('TAXDATE').Value          := '18 Aug 2015';
    lMain.FindField('Description').AsString  := 'Compacc System';
    lMain.FindField('PAYMENTMETHOD').AsString := '310-001';
    lMain.FindField('CHEQUENUMBER').AsString  := 'MBB 213245';
    lMain.FindField('DocAmt').AsFloat        := 2019;
    lMain.FindField('Cancelled').AsString    := 'F';
    lMain.FindField('CHANGED').AsString      := 'F';
    lMain.Post;
 
    lDtl.Append;
    lDtl.FindField('DTLKEY').Value        := -1;
    lDtl.FindField('DOCKEY').Value        := -1;
    lDtl.FindField('Code').AsString        := '200-300';
    lDtl.FindField('DESCRIPTION').AsString := 'Maybank - Asus A555LD-xx313H';
    lDtl.FindField('TAX').AsString        := 'TX';
    lDtl.FindField('TAXAMT').AsFloat      := 114.28;
    lDtl.FindField('TAXINCLUSIVE').Value  := 1;
    lDtl.FindField('AMOUNT').AsFloat      := 2019;
    lDtl.FindField('CHANGED').AsString    := 'F';
    lDtl.Post;
    lBizObj.Save;
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lBizObj.Close;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_Customer====
{| class="mw-collapsible mw-collapsed wikitable"
! AR_Customer Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_CustomerClick(Sender: TObject);
var lMain, lDtl, lBizObj, lBizApp : Variant;
    lTime : TDateTime;
begin
  lTime := Now;
  lBizApp := CreateOleObject('SQLAcc.BizApp');
 
  lBizObj := lBizApp.BizObjects.Find('AR_Customer');
  lMain  := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsBranch');
 
  try
    lBizObj.New;
    lMain.FindField('Code').value        := '300-Test';
    lMain.FindField('CompanyName').value := 'Testing 123';
 
    lDtl.Edit; //For 1st Branch
    lDtl.FindField('BranchName').AsString := 'BILLING';
    lDtl.FindField('Address1').AsString  := 'Address1';
    lDtl.FindField('Address2').AsString  := 'Address2';
    lDtl.FindField('Address3').AsString  := 'Address3';
    lDtl.FindField('Address4').AsString  := 'Address4';
    lDtl.FindField('Attention').AsString  := 'Attention';
    lDtl.FindField('Phone1').AsString    := 'Phone1';
    lDtl.FindField('Fax1').AsString      := 'Fax1';
    lDtl.FindField('Email').AsString      := 'EmailAddress';
    lDtl.Post;
 
    lDtl.Append; //For 2nd Branch
    lDtl.FindField('BranchName').AsString := 'Branch1';
    lDtl.FindField('Address1').AsString  := 'DAddress1';
    lDtl.FindField('Address2').AsString  := 'DAddress2';
    lDtl.FindField('Address3').AsString  := 'DAddress3';
    lDtl.FindField('Address4').AsString  := 'DAddress4';
    lDtl.FindField('Attention').AsString  := 'DAttention';
    lDtl.FindField('Phone1').AsString    := 'DPhone1';
    lDtl.FindField('Fax1').AsString      := 'DFax1';
    lDtl.FindField('Email').AsString      := 'DEmailAddress';
    lDtl.Post;
    lBizObj.Save;
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lBizObj.Close;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_PM====
{| class="mw-collapsible mw-collapsed wikitable"
! AR_PM Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_ARPMClick(Sender: TObject);
var lMain, lKO, lBizApp, lBizObj, V : Variant;
begin
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lBizObj := lBizApp.BizObjects.Find('AR_PM');
    lMain  := lBizObj.DataSets.Find('MainDataSet');
    lKO    := lBizObj.DataSets.Find('cdsKnockOff');
 
    lBizObj.New;
    lMain.FindField('DOCKEY').Value          := -1;
    lMain.FindField('DocNo').AsString        := '--PM Test--'; //Payment Document Number
    lMain.FindField('CODE').AsString          := '300-A0001';
    lMain.FindField('DocDate').Value          := '28 Aug 2016';
    lMain.FindField('PostDate').Value        := '28 Aug 2016';
    lMain.FindField('Description').AsString  := 'Payment for A/c';
    lMain.FindField('PaymentMethod').AsString := '320-000';
    lMain.FindField('DocAmt').AsFloat        := 1060;
    lMain.FindField('Cancelled').AsString    := 'F';
 
    V := lBizApp.CreateOleVariantArray(2);
    V.SetItem(0, 'IV'); //Document Type is either is IV or DN for Sales & PI or SD for Purchase
    V.SetItem(1, '--IV Test--');  //Invoice Document Number
 
    if lKO.Locate('DocType;DocNo', V.AsOleVariant, False, False) then
      begin
        lKO.Edit;
        lKO.FindField('KOAmt').ASFloat    := 500;
        lKO.FindField('KnockOff').AsString := 'T';
        lKO.Post;
      end;
 
    lBizObj.Save;
    MessageDlg('AR_PM-DocNo : ''--PM Test--'' Posted...', mtInformation, [mbOK],0);
  finally
    lBizObj.Close;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_PM-Edit====
{| class="mw-collapsible mw-collapsed wikitable"
! AR_PM Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_ARPMClick(Sender: TObject);
var lMain, lKO, lBizApp, lBizObj, V : Variant;
begin
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lBizObj := lBizApp.BizObjects.Find('AR_PM');
    lMain  := lBizObj.DataSets.Find('MainDataSet');
    lKO    := lBizObj.DataSets.Find('cdsKnockOff');
 
    lDocKey := lBizObj.FindKeyByRef('DocNo', '--PM Test--');
    lBizObj.Params.Find('DocKey').Value := VarToStr(lDocKey);
 
    If not VarIsNull(lDocKey) Then begin
      lBizObj.Open;
      lBizObj.Edit;
      lMain.FindField('DOCKEY').Value          := -1;
      lMain.FindField('DocDate').Value          := '28 Aug 2016';
      lMain.FindField('PostDate').Value        := '28 Aug 2016';
      lMain.FindField('Description').AsString  := 'Payment for A/c';
      lMain.FindField('PaymentMethod').AsString := '310-000';
      lMain.FindField('DocAmt').AsFloat        := 800.28;
      lMain.FindField('UnappliedAmt').AsFloat  := 100.28;
      lMain.FindField('Cancelled').AsString    := 'F';
      lMain.FindField('CHANGED').AsString      := 'F';
 
      V := lBizApp.CreateOleVariantArray(2);
      V.SetItem(0, 'IV'); //Document Type is either is IV or DN for Sales & PI or SD for Purchase
      V.SetItem(1, '--IV Test--');  //Document Number
 
      if lKO.Locate('DocType;DocNo', V.AsOleVariant, False, False) then
        begin
          lKO.Edit;
          lKO.FindField('KOAmt').AsFloat    := 700.28; // IV Knock Off/Offset Amount
          lKO.FindField('KnockOff').AsString := 'T';
          lKO.Post;
        end;
 
      lBizObj.Save;
      MessageDlg('AR_PM-DocNo : ''--PM Test--'' Updated...', mtInformation, [mbOK],0);
    end;
  finally
    lBizObj.Close;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====ST_Item====
{| class="mw-collapsible mw-collapsed wikitable"
! ST_Item Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_ST_ItemClick(Sender: TObject);
var lMain, lDtl, lBizObj, lBizApp : Variant;
    lTime : TDateTime;
begin
  lTime := Now;
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizObj := lBizApp.BizObjects.Find('ST_ITEM');
  lMain  := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsUOM');
 
  try
    lBizObj.New;
    lMain.FindField('Code').AsString        := 'Test-1';
    lMain.FindField('Description').AsString := 'Testing - Description';
 
    lDtl.Edit; //For 1st UOM
    lDtl.FindField('UOM').AsString    := 'PCS';
    lDtl.FindField('Rate').AsFloat    := 1;
    lDtl.FindField('RefCost').AsFloat  := 10.20;
    lDtl.FindField('RefPrice').AsFloat := 25.00;
    lDtl.Post;
 
    lDtl.Append; //For 2nd UOM
    lDtl.FindField('UOM').AsString    := 'CTN';
    lDtl.FindField('Rate').AsFloat    := 12;
    lDtl.FindField('RefCost').AsFloat  := 102.00;
    lDtl.FindField('RefPrice').AsFloat := 240.00;
    lDtl.Post;
    lBizObj.Save;
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lBizObj.Close;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====ST_Item-Edit====
{| class="mw-collapsible mw-collapsed wikitable"
! ST_Item Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_ST_ItemClick(Sender: TObject);
var lMain, lDtl, lBizObj, lBizApp, lDocKey, V : Variant;
begin
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizObj := lBizApp.BizObjects.Find('ST_ITEM');
  lMain  := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsUOM');
 
  lDocKey := lBizObj.FindKeyByRef('Code', '--Stock Item Test--');
  lBizObj.Params.Find('DocKey').Value := VarToStr(lDocKey);
  try
 
    If not VarIsNull(lDocKey) Then begin
      lBizObj.Open;
      lBizObj.Edit;
      lMain.FindField('Description').value := 'Testing - Description';
 
      V := lBizApp.CreateOleVariantArray(2);
      V.SetItem(0, 'CTN'); //UOM
      V.SetItem(1, '12');  //Rate
 
      if lDtl.Locate('UOM;Rate', V.AsOleVariant, False, False) then
        begin
          lDtl.Edit;
          lDtl.FindField('RefCost').AsFloat  := 10.20;
          lDtl.FindField('RefPrice').AsFloat := 25.00;
          lDtl.Post;
        end;
      lBizObj.Save;
 
      MessageDlg('ST_Item-ItemCode : ''--Stock Item Test--'' Updated...', mtInformation, [mbOK],0);
    end;
  finally
    lBizObj.Close;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====SL_IV====
{| class="mw-collapsible mw-collapsed wikitable"
! SL_IV Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_SL_IVClick(Sender: TObject);
var lMain, lDtl, lSN, lBizObj, lBizApp : Variant;
    lTime : TDateTime;
begin
  lTime := Now;
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizObj := lBizApp.BizObjects.Find('SL_IV');
  lMain  := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsDocDetail');
  lSN    := lBizObj.DataSets.Find('cdsSerialNumber');
 
  try
    lBizObj.New;
    lMain.FindField('DOCKEY').Value        := -1;
    lMain.FindField('DocNo').AsString      := '--IV Test--';
    lMain.FindField('CODE').AsString        := '300-A0001';
    lMain.FindField('DocDate').Value        := '28 Aug 2020';
    lMain.FindField('PostDate').Value      := '28 Aug 2020';
    lMain.FindField('TAXDATE').Value        := '28 Aug 2020';
    lMain.FindField('Description').AsString := 'Sales';
    lMain.FindField('Cancelled').AsString  := 'F';
    lMain.Post;
 
    lDtl.Append; // For Tax Inclusive = True with override Tax Amount
    lDtl.FindField('DTLKEY').Value        := -1;
    lDtl.FindField('DOCKEY').Value        := -1;
    lDtl.FindField('SEQ').Value            := 1;
    lDtl.FindField('ItemCode').AsString    := 'ITEM A';
    lDtl.FindField('ACCOUNT').AsString    := '500-000'; //GL Sales Account
    lDtl.FindField('DESCRIPTION').AsString := 'Sales Item A';
    lDtl.FindField('QTY').AsFloat          := 1;
    lDtl.FindField('TAX').AsString        := 'SV';
    lDtl.FindField('TAXINCLUSIVE').Value  := 0;
    lDtl.FindField('UNITPRICE').AsFloat    := 435;//Including GST UnitPrice
    lDtl.FindField('AMOUNT').AsFloat      := 410.37; //Must Excluding GST (Qty * UnitPrice) // Less 0.01
    lDtl.FindField('TAXAMT').AsFloat      := 24.63; //Extra 0.01
 
    lDtl.DisableControls; //For Tax Inclusive Only where TaxAmt is not as Calc
    try
      lDtl.FindField('TAXINCLUSIVE').Value := 1;
    finally
      lDtl.EnableControls;
    end;
    lDtl.Post;
 
    lDtl.Append; // For Tax Inclusive = False with override Tax Amount
    lDtl.FindField('DTLKEY').Value        := -1;
    lDtl.FindField('DOCKEY').Value        := -1;
    lDtl.FindField('SEQ').Value            := 2;
    lDtl.FindField('ItemCode').AsString    := 'ITEM B';
    lDtl.FindField('ACCOUNT').AsString    := '500-000';
    lDtl.FindField('DESCRIPTION').AsString := 'Sales Item B';
    lDtl.FindField('QTY').AsFloat          := 1;
    lDtl.FindField('TAX').AsString        := 'SV';
    lDtl.FindField('TAXINCLUSIVE').Value  := 0;
    lDtl.FindField('UNITPRICE').AsFloat    := 94.43;
    lDtl.FindField('AMOUNT').AsFloat      := 94.43;
    lDtl.FindField('TAXAMT').AsFloat      := 5.66; //Less 0.01
    lDtl.Post;
 
    lDtl.Append; // For Serial Number
    lDtl.FindField('DTLKEY').Value        := -1;
    lDtl.FindField('DOCKEY').Value        := -1;
    lDtl.FindField('SEQ').Value            := 3;
    lDtl.FindField('ItemCode').AsString    := 'SN1';
    lDtl.FindField('ACCOUNT').AsString    := '500-000';
    lDtl.FindField('DESCRIPTION').AsString := 'Sales Serial Number Item';
 
    lSN.Append;
    lSN.FindField('SERIALNUMBER').AsString  := 'SN-00001';
    lSN.Post;
 
    lSN.Append;
    lSN.FindField('SERIALNUMBER').AsString  := 'SN-00002';
    lSN.Post;
 
    lDtl.FindField('QTY').AsFloat        := 2;
    lDtl.FindField('TAX').AsString      := 'SR';
    lDtl.FindField('TAXINCLUSIVE').Value := 0;
    lDtl.FindField('UNITPRICE').AsFloat  := 94.43;
    lDtl.FindField('TAXAMT').AsFloat    := 11.33;
    lDtl.Post;
 
    lBizObj.Save;
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lBizObj.Close;
    lMain := null;
    lDtl := null;
    lSN := null;
    lBizObj := null;
    lBizApp := null;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====Customer.IV.RO====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer.IV.RO Report Object Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_RptObjClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl : TClientDataset;
begin
  lTime := Now;
  cdsMain := TClientDataset.Create(nil);
  cdsDtl  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('Customer.IV.RO');
    lRptVar.Params.Find('SelectDate').AsBoolean          := True;
    lRptVar.Params.Find('DateFrom').AsDate                := '01/01/2015';
    lRptVar.Params.Find('DateTo').AsDate                  := '31/12/2015';
    lRptVar.Params.Find('AllAgent').AsBoolean            := False;
    lRptVar.Params.Find('AgentData').AsBlob              := '----'#13#10'HALIM'; //Filter by Agent code ---- & HALIM
    lRptVar.Params.Find('AllArea').AsBoolean              := True;
//    lRptVar.Params.Find('AreaData').AsBlob                := ; //Not use if AllArea is True
    lRptVar.Params.Find('AllCompany').AsBoolean          := True;
//    lRptVar.Params.Find('CompanyData').AsBlob            := ; //Not use if AllCompany is True
    lRptVar.Params.Find('AllCurrency').AsBoolean          := True;
//    lRptVar.Params.Find('CurrencyData').AsBlob            := ; //Not use if AllCurrenty is True
    lRptVar.Params.Find('AllDocProject').AsBoolean        := True;
//    lRptVar.Params.Find('DocProjectData').AsBlob          := ; //Not use if AllDocProject is True
    lRptVar.Params.Find('AllCompanyCategory').AsBoolean  := True;
//    lRptVar.Params.Find('CompanyCategoryData').AsBlob    := ; //Not use if AllCompanyCategory is True
    lRptVar.Params.Find('AllDocument').AsBoolean          := True;
//    lRptVar.Params.Find('DocumentData').AsBlob            := ; //Not use if AllDocument is True
    lRptVar.Params.Find('IncludeCancelled').AsBoolean  := True;
    lRptVar.Params.Find('PrintDocumentStyle').AsBoolean := False;
    lRptVar.Params.Find('AllItemProject').AsBoolean    := True;
    lRptVar.Params.Find('AllPaymentMethod').AsBoolean  := True;
    lRptVar.CalculateReport;
 
    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDocDetail').XMLData; //Detail Data - To link Master Data use Dockey field
 
    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====Stock.Item.RO====
{| class="mw-collapsible mw-collapsed wikitable"
! Stock.Item.RO Report Object Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_ST_ITEM_ROClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl, cdsCat : TClientDataset;
    lSQL : string;
begin
  lTime    := Now;
  cdsMain  := TClientDataset.Create(nil);
  cdsDtl  := TClientDataset.Create(nil);
  cdsCat  := TClientDataset.Create(nil);
 
  lBizApp := CreateOleObject('SQLAcc.BizApp');
 
  lSQL := 'SELECT * FROM ST_ITEM_CATEGORY ' +
          'WHERE Category IN (''B-MOTOLORA'',''B-MAXIS'')';
  cdsCat.Data := lBizApp.DBManager.Execute(lSQL); //For filtering Category only
 
  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('Stock.Item.RO');
    lRptVar.Params.Find('AllItem').AsBoolean              := True;
    lRptVar.Params.Find('AllStockGroup').AsBoolean        := True;
    lRptVar.Params.Find('AllCustomerPriceTag').AsBoolean  := True;
    lRptVar.Params.Find('AllSupplierPriceTag').AsBoolean  := True;
//    lRptVar.Params.Find('CategoryData').AsBlob            := ; //Not use
//    lRptVar.Params.Find('CategoryTpl').AsBlob            := ; //Not use
//    lRptVar.Params.Find('CustomerPriceTagData').AsBlob    := ; //Not use if AllCustomerPriceTag is True
//    lRptVar.Params.Find('SupplierPriceTagData').AsBlob    := ; //Not use if AllSupplierPriceTag is True
//    lRptVar.Params.Find('DateFrom').AsDate                := '01/01/2015'; //Not use if SelectDate is False
//    lRptVar.Params.Find('DateTo').AsDate                  := '31/12/2015';
    lRptVar.Params.Find('HasAltStockItem').AsBoolean      := False;
    lRptVar.Params.Find('HasBarcode').AsBoolean          := False;
    lRptVar.Params.Find('HasBOM').AsBoolean              := False;
    lRptVar.Params.Find('HasCategory').AsBoolean          := False;
    lRptVar.Params.Find('HasCustomerItem').AsBoolean      := False;
    lRptVar.Params.Find('HasOpeningBalance').AsBoolean    := False;
    lRptVar.Params.Find('HasPurchasePrice').AsBoolean    := False;
    lRptVar.Params.Find('HasSellingPrice').AsBoolean      := False;
    lRptVar.Params.Find('HasSupplierItem').AsBoolean      := False;
//    lRptVar.Params.Find('ItemData').AsBlob                := 'ANT 1.0'#13#10'COVER'; //Filter by Item code ANT 1.0 & COVER
//    lRptVar.Params.Find('ItemCategoryData').AsBlob        := cdsCat.XMLData; //Not use if SelectCategory is False
    lRptVar.Params.Find('PrintActive').AsBoolean          := True;
    lRptVar.Params.Find('PrintInActive').AsBoolean        := True;
    lRptVar.Params.Find('PrintNonStockControl').AsBoolean := True;
    lRptVar.Params.Find('PrintStockControl').AsBoolean    := True;
    lRptVar.Params.Find('SelectCategory').AsBoolean      := False;
    lRptVar.Params.Find('SelectDate').AsBoolean          := False;
    lRptVar.Params.Find('SortBy').AsString                  := 'Code';
//    lRptVar.Params.Find('StockGroupData').AsBlob        := ; //Not use if AllStockGroup is True
    lRptVar.CalculateReport;
 
    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData; //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsUOM').XMLData;  //Detail Data - To link Master Data use Code field
 
    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
    cdsCat.Free;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====Customer.Statement.RO====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer.Statement.RO Report Object Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_StatementClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl : TClientDataset;
    s : string;
begin
  lTime := Now;
  cdsMain := TClientDataset.Create(nil);
  cdsDtl  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  s := '<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS>'+
      '<FIELD attrname="ColumnNo" fieldtype="i4" required="true"/><FIELD attrname="ColumnType" fieldtype="string" WIDTH="1"/>'+
      '<FIELD attrname="Param1" fieldtype="i4" required="true"/><FIELD attrname="Param2" fieldtype="i4" required="true"/>'+
      '<FIELD attrname="IsLocal" fieldtype="boolean"/><FIELD attrname="HeaderScript" fieldtype="bin.hex" SUBTYPE="Text" WIDTH="1"/>'+
      '</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo="0" ColumnType="" Param1="0" Param2="0" IsLocal="FALSE"/>'+
      '<ROW ColumnNo="1" ColumnType="A" Param1="0" Param2="0" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;"/>'+
      '<ROW ColumnNo="2" ColumnType="A" Param1="-1" Param2="-1" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;"/>'+
      '<ROW ColumnNo="3" ColumnType="A" Param1="-2" Param2="-2" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;"/>'+
      '<ROW ColumnNo="4" ColumnType="A" Param1="-3" Param2="-3" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;"/>'+
      '<ROW ColumnNo="5" ColumnType="A" Param1="-4" Param2="-4" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;"/>'+
      '<ROW ColumnNo="6" ColumnType="B" Param1="-999999" Param2="-5" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;"/>'+
      '</ROWDATA></DATAPACKET>';
  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('Customer.Statement.RO');
//  lRptVar.Params.Find('AgentData').AsBlob              := ; //Not use if AllAgent is True
    lRptVar.Params.Find('AgingData').AsString          := s; //Fixed
    lRptVar.Params.Find('AgingOn').AsString            := 'I'; //Fixed
    lRptVar.Params.Find('AllAgent').AsBoolean          := True;
    lRptVar.Params.Find('AllArea').AsBoolean            := True;
    lRptVar.Params.Find('AllCompany').AsBoolean        := False;
    lRptVar.Params.Find('AllCompanyCategory').AsBoolean := True;
    lRptVar.Params.Find('AllControlAccount').AsBoolean  := True;
    lRptVar.Params.Find('AllCurrency').AsBoolean        := True;
    lRptVar.Params.Find('AllDocProject').AsBoolean      := True;
//    lRptVar.Params.Find('AreaData').AsBlob              := ; //Not use if AllArea is True
//    lRptVar.Params.Find('CompanyCategoryData').AsBlob  := ; //Not use if AllCompanyCategory is True
    lRptVar.Params.Find('CompanyData').AsBlob          := '300-A0001'#13#10'300-C0001'; //Filter by Customer Code 300-A0001 & 300-C0001
//    lRptVar.Params.Find('ControlAccountData').AsBlob    := ; //Not use if AllControlAccount is True
//    lRptVar.Params.Find('CurrencyData').AsBlob          := ; //Not use if AllCurrency is True
    lRptVar.Params.Find('DateFrom').AsDate              := '01 Aug 2016';
    lRptVar.Params.Find('DateTo').AsDate                := '31 Aug 2016';
//    lRptVar.Params.Find('DocProjectData').AsBlob        := ; //Not use if AllDocProject is True
    lRptVar.Params.Find('IncludeZeroBalance').AsBoolean := False;
    lRptVar.Params.Find('SelectDate').AsBoolean        := True;
    lRptVar.Params.Find('SortBy').AsString              := 'CompanyCategory;Code;CompanyName;Agent;Area;CurrencyCode;ControlAccount';
    lRptVar.Params.Find('StatementDate').AsDate        := '31 Aug 2016'; // Norm same as DateTo
    lRptVar.Params.Find('StatementType').AsString      := 'O'; //O := Open Item, B := B/F
 
    lRptVar.CalculateReport;
 
    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDocument').XMLData; //Detail Data - To link Master Data use Code field
 
    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL Account List For Sales & Purchase 1====
{| class="mw-collapsible mw-collapsed wikitable"
! GL_Acc Object Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_GLAccClick(Sender: TObject);
var BizApp : Variant;
    lDataSet : TClientDataSet;
    ASQL : String;
begin
  //For Debtor List => SpecialAccType = DR
  //For Creditor List => SpecialAccType = CR
  BizApp := CreateOleObject('SQLAcc.BizApp');
  lDataSet := TClientDataSet.Create(Self);
  try
    ASQL := 'SELECT A.Code, A.Description FROM GL_ACC A '+
            'LEFT OUTER JOIN GL_ACC B ON (A.Dockey=B.Parent) '+
            'WHERE A.Parent<>-1 ' +
            'AND B.Dockey IS NULL ' +
            'AND A.SpecialAccType = '''' '+
            'ORDER BY A.CODE ';
    lDataSet.Data := BizApp.DBManager.Execute(ASQL);
    lDataset.SaveToFile('C:\Temp\_List.xml', dfXML); //Export To XML file
  finally
    lDataSet.Free;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL Account List For Sales & Purchase 2====
{| class="mw-collapsible mw-collapsed wikitable"
! GL_Acc Object Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_GLAccClick(Sender: TObject);
var BizApp, BizObj : Variant;
    lDataSet1, lDataSet2 : TClientDataSet;
    ASQL : String;
begin
  //For Debtor List => SpecialAccType = DR
  //For Creditor List => SpecialAccType = CR
  BizApp := CreateOleObject('SQLAcc.BizApp');
  BizObj := BizApp.BizObjects.Find('GL_Acc');
 
  lDataSet1 := TClientDataSet.Create(Self);
  lDataSet2 := TClientDataSet.Create(Self);
  try
    ASQL :='Parent<>-1 ' +
          'AND (SpecialAccType IS NULL OR SpecialAccType = '''' ' +
          'OR SpecialAccType = '''') ';
    lDataSet1.XMLData:= BizObj.Select('Dockey,Code,Description', ASQL, 'Code', 'SX', '', '');
 
    lDataSet2.XMLData:= BizObj.Select('Parent', '', 'Code', 'SX', '', '');
 
    lDataset2.First; // Remove Parent Account
    while not lDataset2.Eof do begin
      if lDataset1.Locate('Dockey', lDataSet2.FindField('Parent').AsString, []) then
        lDataset1.Delete;
      lDataset2.Next;
    end;
    lDataset1.MergeChangeLog;
    lDataset1.SaveToFile('C:\Temp\_List.xml', dfXML); //Export To XML file
  finally
    lDataSet1.Free;
    lDataSet2.Free;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====Customer.Aging.RO====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer Aging Report Object Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxbb_AgingClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl : TClientDataset;
    s : string;
begin
  lTime := Now;
  cdsMain := TClientDataset.Create(nil);
  cdsDtl  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
 
  s := '<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS>'+
      '<FIELD attrname="ColumnNo" fieldtype="i4" required="true"/><FIELD attrname="ColumnType" fieldtype="string" WIDTH="1"/>'+
      '<FIELD attrname="Param1" fieldtype="i4" required="true"/><FIELD attrname="Param2" fieldtype="i4" required="true"/>'+
      '<FIELD attrname="IsLocal" fieldtype="boolean"/><FIELD attrname="HeaderScript" fieldtype="bin.hex" SUBTYPE="Text" WIDTH="1"/>'+
      '</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo="0" ColumnType="" Param1="0" Param2="0" IsLocal="FALSE"/>'+
      '<ROW ColumnNo="1" ColumnType="A" Param1="0" Param2="0" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;"/>'+
      '<ROW ColumnNo="2" ColumnType="A" Param1="-1" Param2="-1" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;"/>'+
      '<ROW ColumnNo="3" ColumnType="A" Param1="-2" Param2="-2" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;"/>'+
      '<ROW ColumnNo="4" ColumnType="A" Param1="-3" Param2="-3" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;"/>'+
      '<ROW ColumnNo="5" ColumnType="A" Param1="-4" Param2="-4" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;"/>'+
      '<ROW ColumnNo="6" ColumnType="B" Param1="-999999" Param2="-5" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;"/>'+
      '</ROWDATA></DATAPACKET>';
  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('Customer.Aging.RO');
    lRptVar.Params.Find('ActualGroupBy').AsString      := 'Code;CompanyName'; //Fixed
//    lRptVar.Params.Find('AgentData').AsBlob              := ; //Not use if AllAgent is True
    lRptVar.Params.Find('AgingData').AsString          := s;
    lRptVar.Params.Find('AgingDate').AsDate            := '31 Aug 2016';
    lRptVar.Params.Find('AgingOn').AsString            := 'I'; //Fixed
    lRptVar.Params.Find('AllAgent').AsBoolean          := True;
    lRptVar.Params.Find('AllArea').AsBoolean            := True;
    lRptVar.Params.Find('AllCompany').AsBoolean        := True;
    lRptVar.Params.Find('AllCompanyCategory').AsBoolean := True;
    lRptVar.Params.Find('AllControlAccount').AsBoolean  := True;
    lRptVar.Params.Find('AllCurrency').AsBoolean        := True;
    lRptVar.Params.Find('AllDocProject').AsBoolean      := True;
//    lRptVar.Params.Find('AreaData').AsBlob            := ; //Not use if AllArea is True
//    lRptVar.Params.Find('CompanyCategoryData').AsBlob := ; //Not use if AllCompanyCategory is True
//    lRptVar.Params.Find('CompanyData').AsBlob        := ; //Not use if AllCompany is True
//    lRptVar.Params.Find('ControlAccountData').AsBlob  := ; //Not use if AllControlAccount is True
//    lRptVar.Params.Find('CurrencyData').AsBlob        := ; //Not use if AllCurrency is True
//    lRptVar.Params.Find('DocProjectData').AsBlob      := ; //Not use if AllDocProject is True
    lRptVar.Params.Find('FilterPostDate').AsBoolean      := True;
//    lRptVar.Params.Find('GroupBy
    lRptVar.Params.Find('IncludePDC').AsBoolean        := False;
    lRptVar.Params.Find('IncludeZeroBalance').AsBoolean := False;
    lRptVar.Params.Find('SortBy').AsString              := 'Code;CompanyName';
    lRptVar.Params.Find('DateTo').AsDate                := '31 Aug 2016';
    lRptVar.Params.Find('IncludeKnockedOffDetail').AsBoolean := False;
 
    lRptVar.CalculateReport;
 
    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDocument').XMLData; //Detail Data - To link Master Data use Code field
 
    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====GL.CB.RO====
{| class="mw-collapsible mw-collapsed wikitable"
! GL Cash Book Report Object Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TfmMain.dxBB_CBClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl, cdsTax : TClientDataset;
begin
  lTime := Now;
  cdsMain := TClientDataset.Create(nil);
  cdsDtl  := TClientDataset.Create(nil);
  cdsTax  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('GL.CB.RO');
    lRptVar.Params.Find('AllCurrency').AsBoolean          := True;
    lRptVar.Params.Find('AllDocProject').AsBoolean        := True;
    lRptVar.Params.Find('AllDocument').AsBoolean          := True;
    lRptVar.Params.Find('AllItemProject').AsBoolean      := True;
    lRptVar.Params.Find('AllItemArea').AsBoolean          := True;
    lRptVar.Params.Find('AllItemAgent').AsBoolean        := True;
    lRptVar.Params.Find('AllDocAgent').AsBoolean          := True;
    lRptVar.Params.Find('AllDocArea').AsBoolean          := True;
    lRptVar.Params.Find('AllPaymentMethod').AsBoolean    := False;
//    lRptVar.Params.Find('CurrencyData').AsBlob            := 'Not use if AllCurrency is true
 
//  For Post Date From & Date To'
    lRptVar.Params.Find('DateFrom').AsDate                := '01/01/2017';
    lRptVar.Params.Find('DateTo').AsDate                  := '31/12/2017';
 
//    lRptVar.Params.Find('DocProjectData').AsBlob          := //'Not use if AllDocProject is true
//    lRptVar.Params.Find('DocAreaData').AsBlob            := //Not use if AllDocArea is true
//    lRptVar.Params.Find('DocAgentData').AsBlob            := //Not use if AllDocAgent is true
//    lRptVar.Params.Find('ItemAgentData').AsBlob          := //Not use if AllItemAgent is true
    lRptVar.Params.Find('DocType').AsString              := 'PV'; //'PV for Payment Voucher & OR for Official Receipt
//    lRptVar.Params.Find('DocumentData').AsBlob            := //Not use if AllDocument is true
//    lRptVar.Params.Find('GroupBy').AsBlob                := //If you wanted to grouping the data
    lRptVar.Params.Find('IncludeCancelled').AsBoolean    := False;
//    lRptVar.Params.Find('ItemAreaData').AsBlob            := //Not use if AllItemArea is true
//    lRptVar.Params.Find('ItemProjectData').AsBlob        := //Not use if AllItemProject is true
    lRptVar.Params.Find('PaymentMethodData').AsBlob      := '310-001';
    lRptVar.Params.Find('PrintDocumentStyle').AsBoolean  := True;
    lRptVar.Params.Find('SelectDate').AsBoolean          := True; //For Post Date
//  lRptVar.Params.Find('SelectDocDate').AsBoolean  := True; 'For Doc Date
    lRptVar.Params.Find('SortBy').AsString                := 'PostDate;DocNo';
 
    lRptVar.CalculateReport;
 
    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDetail').XMLData; //Detail Data - To link Master Data use Dockey field
    cdsTax.XMLData  := lRptVar.DataSets.Find('cdsTax').XMLData; //Tax List
 
    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file
    cdsTax.SaveToFile('C:\Temp\_ListT.xml');  //Export To XML file
 
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
              mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_DP====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer Deposit Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TForm1.Button1Click(Sender: TObject);
var lMain, lBizObj, lBizApp : Variant;
begin
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');
 
  lBizObj := lBizApp.BizObjects.Find('AR_DP');
  lMain  := lBizObj.DataSets.Find('MainDataSet');
 
  try
    lBizObj.New;
    lMain.FindField('DOCKEY').Value        := -1;
    lMain.FindField('DocNo').AsString      := '--DP Test--';
    lMain.FindField('CODE').AsString        := '300-C0001';
    lMain.FindField('DocDate').Value        := '28 Oct 2019';
    lMain.FindField('PostDate').Value      := '28 Oct 2019';
    lMain.FindField('TAXDATE').Value        := '28 Oct 2019';
    lMain.FindField('DEPOSITACCOUNT').AsString := 'PREPAYMENT';
    lMain.FindField('PaymentMethod').AsString  := '320-000'; //Bank or Cash account
    lMain.FindField('Description').AsString    := 'Deposit For Account';
    lMain.FindField('ChequeNumber').AsString  := '';
    lMain.FindField('BankCharge').AsFloat      := 0;
    lMain.FindField('DocAmt').AsFloat          := 1000.00;
    lMain.FindField('Cancelled').AsString      := 'F';
 
    try
      lBizObj.Save;
    except
      on E: Exception do
        Memo1.Lines.Append(E.Message);
    end;
    lBizObj.Close;
    Memo1.Lines.Append('Done');
//    MessageDlg('Done', mtInformation, [mbOk], 0);
  finally
    lMain := Null;
    lBizObj := Null;
    lBizApp.Logout;
    lBizApp := Null;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====Customer Deposit to Customer Payment====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer Deposit to Customer Payment Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TForm1.Button2Click(Sender: TObject);
var lMain, lKO, lBizApp, lBizObj, V : Variant;
    cdsTmp : TClientDataset;
    lSQL : String;
begin
  cdsTmp  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');
 
  try
    lSQL := 'SELECT DOCKEY FROM AR_DP ' +
            'WHERE DOCNO=''--DP Test--'' ';
    cdsTmp.Data := lBizApp.DBManager.Execute(lSQL);
 
    if cdsTmp.RecordCount > 0 then begin
      lBizObj := lBizApp.BizObjects.Find('AR_PM');
      lMain  := lBizObj.DataSets.Find('MainDataSet');
      lKO    := lBizObj.DataSets.Find('cdsKnockOff');
 
      lBizObj.New;
      lMain.FindField('DOCKEY').Value          := -1;
      lMain.FindField('DocNo').AsString        := '--PM Test--'; //Payment Document Number
      lMain.FindField('CODE').AsString          := '300-C0001';
      lMain.FindField('DocDate').Value          := '29 Oct 2019';
      lMain.FindField('PostDate').Value        := '29 Oct 2019';
      lMain.FindField('Description').AsString  := 'Payment for A/c';
      lMain.FindField('PaymentMethod').AsString := 'PREPAYMENT';
      lMain.FindField('DocAmt').AsFloat        := 200;
      lMain.FindField('FROMDOCTYPE').AsString  := 'DP'; //Transfer from Deposit
      lMain.FindField('FROMDOCKEY').Value      := cdsTmp.FindField('Dockey').AsFloat; //Transfer from Deposit
      lMain.FindField('Cancelled').AsString    := 'F';
      lMain.FindField('CHANGED').AsString      := 'F';
 
      V := lBizApp.CreateOleVariantArray(2);
      V.SetItem(0, 'IV'); //Document Type is either is IV or DN for Sales & PI or SD for Purchase
      V.SetItem(1, 'IV-00003');  //Invoice Document Number
 
      if lKO.Locate('DocType;DocNo', V.AsOleVariant, False, False) then
        begin
          lKO.Edit;
          lKO.FindField('KOAmt').ASFloat    := 200;
          lKO.FindField('KnockOff').AsString := 'T';
          lKO.Post;
        end;
 
      try
        lBizObj.Save;
      except
        on E: Exception do
          Memo1.Lines.Append(E.Message);
      end;
        lBizObj.Close;
        Memo1.Lines.Append('Done');
      //MessageDlg('AR_PM-DocNo : ''--PM Test--'' Posted...', mtInformation, [mbOK],0);
    end else
      Memo1.Lines.Append('Deposit No. Not found');
  finally
    cdsTmp.Free;
    lBizApp.Logout;
    lMain := Null;
    lBizObj := Null;
    lBizApp := Null;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_DPDTL_REFUND====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer Deposit Refund Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TForm1.Button3Click(Sender: TObject);
var lMain, lBizApp, lBizObj : Variant;
    cdsTmp : TClientDataset;
    lSQL : String;
begin
  cdsTmp  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');
 
  try
    lSQL := 'SELECT DOCKEY FROM AR_DP ' +
            'WHERE DOCNO=''--DP Test--'' ';
    cdsTmp.Data := lBizApp.DBManager.Execute(lSQL);
 
    if cdsTmp.RecordCount > 0 then begin
      lBizObj := lBizApp.BizObjects.Find('AR_DPDTL_REFUND');
      lMain  := lBizObj.DataSets.Find('MainDataSet');
 
      lBizObj.New;
      lMain.FindField('DOCKEY').Value          := cdsTmp.FindField('Dockey').AsFloat;
      lMain.FindField('Account').AsString      := '320-000'; //Bank or Cash account
      lMain.FindField('DocDate').Value        := '28 Oct 2019';
      lMain.FindField('PostDate').Value        := '28 Oct 2019';
      lMain.FindField('Description').AsString  := 'Deposit Refund';
      lMain.FindField('ChequeNumber').AsString := '';
      lMain.FindField('BankCharge').AsFloat    := 0;
      lMain.FindField('PAYMENTAMOUNT').AsFloat := 500.00;
 
      try
        lBizObj.Save;
      except
        on E: Exception do
          Memo1.Lines.Append(E.Message);
      end;
      lBizObj.Close;
      Memo1.Lines.Append('Done');
  //    MessageDlg('Done', mtInformation, [mbOk], 0);
    end else
      Memo1.Lines.Append('Deposit No. Not Found');
  finally
    cdsTmp.Free;
    lMain := Null;
    lBizObj := Null;
    lBizApp.Logout;
    lBizApp := Null;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
====AR_DPDTL_FORFEIT====
{| class="mw-collapsible mw-collapsed wikitable"
! Customer Deposit Forfeit Script 
|-
|
<syntaxhighlight lang="delphi">
procedure TForm1.Button4Click(Sender: TObject);
var lMain, lBizApp, lBizObj : Variant;
    cdsTmp : TClientDataset;
    lSQL : String;
begin
  cdsTmp  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');
 
  try
    lSQL := 'SELECT DOCKEY FROM AR_DP ' +
            'WHERE DOCNO=''--DP Test--'' ';
    cdsTmp.Data := lBizApp.DBManager.Execute(lSQL);
 
    if cdsTmp.RecordCount > 0 then begin
      lBizObj := lBizApp.BizObjects.Find('AR_DPDTL_FORFEIT');
      lMain  := lBizObj.DataSets.Find('MainDataSet');
 
      lBizObj.New;
      lMain.FindField('DOCKEY').Value          := cdsTmp.FindField('Dockey').AsFloat;
      lMain.FindField('Account').AsString      := '532-000'; //Forfeit account
      lMain.FindField('DocDate').Value        := '28 Oct 2019';
      lMain.FindField('PostDate').Value        := '28 Oct 2019';
      lMain.FindField('Description').AsString  := 'Deposit Forfeit';
      lMain.FindField('Amount').AsFloat        := 150.00;
 
      try
        lBizObj.Save;
      except
        on E: Exception do
          Memo1.Lines.Append(E.Message);
      end;
      lBizObj.Close;
      Memo1.Lines.Append('Done');
  //    MessageDlg('Done', mtInformation, [mbOk], 0);
    end else
      Memo1.Lines.Append('Deposit No. Not Found');
  finally
    cdsTmp.Free;
    lMain := Null;
    lBizObj := Null;
    lBizApp.Logout;
    lBizApp := Null;
  end;
end;
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
==FAQ==
===Problem with opening CHM Help files?===
# Right click the chm file & select Properties
# At General tab Click Unblock button.
# Click Apply | Ok.
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===Still can't open CHM file?===
# Login SQL Accounting
# Click Tools | Options
# Click Register & follow wizard
# Exit SQL Accounting
# Login SQL Accounting
# Run CHM File
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===Why when I compile my program with stated unknown method or unknown identifier?===
:If you compiler had error may try add the '''esfw10.dll''' file under the SQL Accounting\bin folder
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===How to make sure I login to correct database?===
* Can use the '''Common.Agent.RO''' Report Objects to get the Profile info.
* Then use the cdsProfile Dataset
: - CompanyName Field
: - Remark Field
* Refer to [https://wiki.sql.com.my/wiki/SDK_Live#Get_Company_Profile Get Company Profile]
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===Why after post to SQL Accounting the Description3 (More Description)/Notes field it show like this "M y  D e s c r i p t i o n" instead of "My Description"?===
:Make sure you use '''.AsString''' in your code (see example below)
{| class="mw-collapsible mw-collapsed wikitable"
! Description3 Field Script/Code 
|-
|
 
...
  lDtl.FindField('DESCRIPTION3').'''AsString'''  := 'Sales Item A More Description'+ #13 + 'I in 2nd line';
...
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===Can I Ignore Doc No Field & let SQL Accounting to Auto Assign?===
:Yes but we not recommended as you will lost track when user wanted to know which Doc No in SQL Acc is posted.
: To Set Auto Assign set it as below
{| class="mw-collapsible mw-collapsed wikitable"
! DocNo Field Script/Code 
|-
|
 
...
  lMain.FindField('DocNo').'''AsString'''  := '<<New>>';
...
lDocNo := lMain.FindField('DocNo').AsString; //To Get docno after post
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===Can I Auto Login & Logout SQL Accounting when doing & after Posting?===
: Yes can below is example script
: Only work if that PC is no once is using SQL Accounting
{| class="mw-collapsible mw-collapsed wikitable"
! C Sharp 
|-
|
<syntaxhighlight lang="C#">
Int32 lBuildNo;
dynamic ComServer;
public void CheckLogin()
{           
    lBizType = Type.GetTypeFromProgID("SQLAcc.BizApp");
    ComServer = Activator.CreateInstance(lBizType);
           
    if (!ComServer.IsLogin)
    {
        try
        {
            ComServer.Login(edUN.Text, edPW.Text, edDCF.Text, edDB.Text);
            ComServer.Minimize();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            FreeBiz(ComServer);
        }
    }
    if (ComServer.IsLogin)
    {
        lBuildNo = ComServer.BuildNo;
    }
}
public void FreeBiz(object AbizObj)
{
    System.Runtime.InteropServices.Marshal.ReleaseComObject(AbizObj);
}
private void btnExport_Click(object sender, EventArgs e)
{
    dynamic BizObject, lMain, lDocKey;
 
    CheckLogin();
    //'Step 2: Find and Create the Biz Objects
    BizObject = ComServer.BizObjects.Find("Agent");
 
    //Step 3: Set Dataset
    lMain = BizObject.DataSets.Find("MainDataSet");    //lMain contains master data
 
    //Step 4: Search
    lDocKey = BizObject.FindKeyByRef("CODE", edCode.Text);
    try
    {
        try
        {
            //Step 5 : Insert or Update
            if (Convert.IsDBNull(lDocKey))
            {
                BizObject.New();
                lMain.FindField("CODE").value = edCode.Text;
                lMain.FindField("DESCRIPTION").value = edDesc.Text;
            }
            else
            {//Edit Data if found
                BizObject.Params.Find("CODE").Value = lDocKey;
                BizObject.Open();
                BizObject.Edit();
                lMain.FindField("DESCRIPTION").value = edDesc.Text;
            }
            //Step 6: Save & Close
            BizObject.Save();
            MessageBox.Show("Done", "Status", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    }
    finally
    {
        BizObject.Close();
 
        //Step 7 : Logout after done           
        FreeBiz(BizObject);
        ComServer.Logout();
        FreeBiz(ComServer);
    }           
}
</syntaxhighlight>
|}
 
{| class="mw-collapsible mw-collapsed wikitable"
! Delphi 
|-
|
<syntaxhighlight lang="delphi">
....
  public
    { Public declarations }
    lBizApp : variant;
  end;
....
 
procedure TForm1.CheckLogin;
begin
  lBizApp := null;
  lBizApp := CreateOleObject('SQLAcc.BizApp');
 
  if not lBizApp.IsLogin then begin
    lBizApp.Login(edUN.Text, edPW.Text, edDCF.Text, edDB.Text); //Login with preset setting
    lBizApp.Minimize; //Mininise the SQLAccounting
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var BizObject, lMain : Variant;
begin
  try
    //Begin Loop your data
    try
      CheckLogin;
      BizObject := lBizApp.BizObjects.Find('Agent');
      lMain    := BizObject.DataSets.Find('MainDataSet');
      BizObject.New;
      lMain.FindField('CODE').AsString := 'HALIM';
      lMain.FindField('Description').AsString := 'HALIM 123';
      BizObject.save;
    except
      on E: Exception do
        MmLog.Lines.Append(E.Message);
    end;
    //
  finally
    BizObject.close;
    BizObject := null;
    lBizApp.Logout;
    lBizApp := null;
  end;
end;
</syntaxhighlight>
|}
 
{| class="mw-collapsible mw-collapsed wikitable"
! VB Script 
|-
|
<syntaxhighlight lang="vb">
'Copy below script & paste to notepad & name it as eg Agent.vbs
Call PostData
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
Function PostData
Dim ComServer, BizObject
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
 
  Set WScr = CreateObject("WScript.Shell")
  WScript.Sleep 1000 '//Wait 1 second for system loading before proceed
 
  'Step 2: Force Logout to make sure login correct database
  If ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Logout
  END IF
  'Step 3: Login
  ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0015.FDB"
 
  'Step 4: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("Agent")
  'Step 5: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
 
 
  'Step 6 : Posting
    BizObject.New
    lMain.FindField("CODE").AsString          = "_Test_"
    lMain.FindField("Description").AsString  = "Testing 123"
 
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
  'Step 8: Logout
    ComServer.Logout
MsgBox "Done"
End Function
</syntaxhighlight>
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===When Post System Prompt Operation aborted Error===
: This happen when the Login User ID don't had the to '''Override Sales Min/Max Price''' &
: Use '''Last Price XXX''' (In Tools | Options | Unit Price) &
: 1 of record is below Min Price.
'''Solution'''
: Can try change the Posting Seq like below (UOM then Qty)
{| class="mw-collapsible mw-collapsed wikitable"
! Sequence Field Script/Code 
|-
|
 
...
    lDetail.Append();
    lDetail.FindField("DtlKey").value = -1;
    lDetail.FindField("DocKey").value = -1;
    lDetail.FindField("Seq").value = 3;
    lDetail.FindField("ItemCode").AsString = "ANT";
    lDetail.FindField("Description").AsString = "Sales Item B";
    //lDetail.FindField("Account").AsString = "500-000"; To override the Sales Account Code
    '''lDetail.FindField("UOM").AsString = "UNIT";'''
    '''lDetail.FindField("Qty").AsFloat = 2;'''
    //lDetail.FindField("DISC").AsString = "5%+3"; //Optional(eg 5% plus 3 Discount)
    lDetail.FindField("Tax").AsString = "SR";
    lDetail.FindField("TaxRate").AsString = "6%";
    lDetail.FindField("TaxInclusive").value = 0;
    lDetail.FindField("UnitPrice").AsFloat = 100;
    lDetail.FindField("Amount").AsFloat = 200;
    lDetail.FindField("TaxAmt").AsFloat = 12;
    lDetail.Post();
...
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
===How do my system know there is a changes or update in SQLAccounting?===
'''Data Entry'''<br>
: In all Document it had a field call <span style="color:#0000ff">UPDATECOUNT</span>.
: Default is null & each changes will +1.
: So if you see 2 meaning it had being update 2 times
 
'''Master Data'''
: Only available in
:* Version 842.765 & above
:* AP_SUPPLIER (Maintain Supplier)
:* AR_CUSTOMER (Maintain Customer)
:* ST_GROUP (Maintain Stock Group)
:* ST_ITEM (Maintain Stock Item)
:* ST_ITEM_TPL (Maintain Item Template)
:* ST_PRICETAG (Maintain Price Tag)
:* TAX (Maintain Tax)
: In Each table it had a field call <span style="color:#0000ff">LASTMODIFIED</span>.
: The value is '''Epoch Time''' or '''Unix Time'''
 
You can use below function to get the field
{| class="mw-collapsible mw-collapsed wikitable"
! vbs 
|-
|
<syntaxhighlight lang="vbs">
...
Function GetData
Dim lDataSet, lSQL
  lSQL = "SELECT DOCNO, UPDATECOUNT FROM SL_CS "
  lSQL = lSQL & "WHERE UPDATECOUNT IS NOT NULL "
  lSQL = lSQL & "ORDER BY DOCNO "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "DocNo : " & lDataSet.FindField("DocNo").AsString
    MsgBox "UpdateCount : " & lDataSet.FindField("UPDATECOUNT").AsString
    lDataSet.Next
  Wend
End Function
...
</syntaxhighlight>
|}
 
{| class="mw-collapsible mw-collapsed wikitable"
! Delphi
|-
|
<syntaxhighlight lang="delphi">
... 
procedure TfmMain.dxbb_GetFieldClick(Sender: TObject);
var BizApp : Variant;
    lDataSet : TClientDataSet;
    ASQL : String;
begin
  BizApp := CreateOleObject('SQLAcc.BizApp');
  lDataSet := TClientDataSet.Create(Self);
  try
    ASQL := 'SELECT DOCNO, UPDATECOUNT FROM SL_CS ' +
            'WHERE UPDATECOUNT IS NOT NULL ' +
            'ORDER BY DOCNO ';
    lDataSet.Data := BizApp.DBManager.Execute(ASQL);
    lDataset.SaveToFile('C:\Temp\_List.xml', dfXML); //Export To XML file
  finally
    lDataSet.Free;
  end;
end;
...
</syntaxhighlight>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
===Can I control my Stock when I link with other Application?===
: Yes. We suggest to use Stock Transfer to (eg Location call <span style="color:#0000ff">MOBILE</span>) transfer stock as Reserve to avoid stock over deduct in SQL Accounting
: When other Application post to SQL Accounting they just need set the Location to the Reserve Location (eg <span style="color:#0000ff">MOBILE</span>)
: Below is example posting with location
{| class="mw-collapsible mw-collapsed wikitable"
! Post Location Field Script/Code 
|-
|
 
...
  lDtl.FindField('UOM').AsString      := 'CTN';
  lDtl.FindField('QTY').AsFloat        := 6;
  lDtl.FindField('Location').AsString  := 'MOBILE';
...
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===Where to Check the SQL Accounting DCF Path, FileName & FDB FileName?===
: In Login Screen Click 3 Dot Button then you can see the information
: For SQL Accounting Version 5.2023.957.831 and below
[[File:SDK-FAQ-01.jpg|center]]
: For SQL Accounting Version 5.2023.958.832 and above
[[File:SDK-FAQ-03.jpg|800px|center]]
[[File:SDK-FAQ-02.jpg|554px|center]]
<div style="float: right;">  [[#top|[top]]]</div>
 
===How to check & What is the value for Advance Credit Control in Maintain Customer===
: You can use <span style="color:#0000ff">ComServer.DBManager.NewDataSet(lSQL)</span> function to Query the information
: lSQL = SELECT * FROM AR_CUSTOMERCRCTRL
: You may refer to <span style="color:#0000ff">ControlType</span> column
 
{| class="wikitable" style="margin: 1em auto 1em auto;"
|-
! ControlType !! Exceed Credit Limit !! Exceed OverDue Limit
|-
| align="center" | 0 || UnBlock || UnBlock
|-
| align="center" | 1 || UnBlock || Block
|-
| align="center" | 2|| UnBlock || Override
|-
| align="center" |  3|| Block || UnBlock
|-
| align="center" | 4|| Block || Block
|-
| align="center" | 5|| Block || Override
|-
| align="center" | 6|| Override || UnBlock
|-
| align="center" | 7|| Override || Block
|-
| align="center" | 8|| Override || Override
|-
| align="center" | 9|| align="center" colspan="2"| Suspended
|}
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===How to get Error/Exception Message Return from SQL Accounting?===
{| class="mw-collapsible mw-collapsed wikitable"
! C Sharp 
|-
|
<syntaxhighlight lang="C#">
try
{
  BizObject.New();
....
  BizObject.Save();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
</syntaxhighlight>
|}
 
{| class="mw-collapsible mw-collapsed wikitable"
! Python 
|-
|
    try:
        BizObject.Save()         
    except Exception as e:
        print("Oops!", e) 
 
|}
 
{| class="mw-collapsible mw-collapsed wikitable"
! VB.Net 
|-
|
<syntaxhighlight lang="vb">
Try
  BizObject.[New]
...
  BizObject.Save
Catch ex As Exception
  MsgBox(ex.Message, MsgBoxStyle.Exclamation)
End Try
</syntaxhighlight>
|}
 
{| class="mw-collapsible mw-collapsed wikitable"
! Delphi
|-
|
<syntaxhighlight lang="delphi">
try
  lBizObj.New;
....
  lBizObj.Save;
except
  on E: Exception do
    Memo1.Lines.Text := E.Message;
end;
</syntaxhighlight>
|}
 
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===Why Post to SQL Accounting sometime prompt Catastrophic failure Error?===
'''Possible Problem 1'''
: Make sure you code don't cross over Call action during posting
: Eg Posing SL_SO Header partly then suddenly call other object example Check Customer Code Validity
: Summary action (Correct Steps)
::01. Do Verify 1st (eg Check Customer Code Validity & etc)
::02. Post Transactions
 
'''Possible Problem 2'''
:Keep Login & Logout till windows not enough time to response
: Summary action (Correct Steps)
::01. Pull Data from Your application/web
::02. Login SQL Accounting 1 time (Auto Login)
::03. Do all your requirement actions (eg. verify, query & posting)
<pre>
    eg Posting Cash Sales & Customer Payment
begin looping
  BizObject = ComServer.BizObjects.Find("SL_CS")
  ....
  BizObject.Save
  BizObject.Close
  FreeBiz(BizObject)
 
  BizObject = ComServer.BizObjects.Find("AR_PM")
  ....
  BizObject.Save
  BizObject.Close
  FreeBiz(BizObject)
 
  Next Record
End looping
</pre>
::04. Logout SQL Accounting 1 time (Auto Logout)
::05. Push Data to Your application/web (if any)
 
'''Possible Problem 3'''
: Company Profile Logo format had problem.
: Solution
::01. Click File | Company Profile
::02. Export out the Logo by right Click the Company Logo
::03. Open the Exported Logo with Photo Editor
::04. Just Click File | Save again as jpg.
::05. Load Back the Save Logo by right Click the Company Logo
::06. Click Save
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===How to Get the GL Account List for Sales & Purchase?===
: You can use the function <span style="color:#0000ff">ComServer.DBManager.NewDataSet(lSQL)</span> with the following SQL
<pre>
SELECT  Code, Description, Description2 FROM GL_ACC A
WHERE (A.Parent<>-1
AND NOT (EXISTS (SELECT Parent FROM GL_ACC B
                WHERE A.DocKey=B.Parent))
AND (A.SpecialAccType IS NULL OR A.SpecialAccType IN ('', 'AD')))
ORDER BY Code
</pre>
<div style="float: right;">  [[#top|[top]]]</div>
 
===Can I setup a testing/Staging environment for SQL Accounting?===
:Yes can, you can self setup or we can help you to setup.
:There are 4 types of Testing/Staging
:01. Install the Testing SQL Accounting version & Testing Database in the developer PC
:02. Install the Live SQL Accounting version & User Backup Database in the developer PC
::- Require User Permission for Backup
:03. Setup at User PC/Server & using User Backup Database
::- Require User Permission for Backup & PC/Server setup
:04. Setup at User PC/Server & using Testing Database
::- Require User Permission for PC/Server setup
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===How to Loop & post SQL Accounting?===
:Below summary how to loop
:01. Call ComServer
:02. Check Login
:03. Call BizObject (eg SL_CS)
:04. Begin Loop you data
:05. Call Close BizObject (eg BizObject.Close)
:06. Continue Call other BizObject (eg AR_PM)
:07. Repeat Steps 4 & 5
:08. Call Logout
:09. Free ComServer
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===How to post Description3 with Unicode?===
:You have to convert it to rtf format before set to Description3 field
 
{| class="mw-collapsible mw-collapsed wikitable"
! C Sharp 
|-
|
<pre>
private static string FormatAsRTF(string DirtyText)
{
    System.Windows.Forms.RichTextBox rtf = new System.Windows.Forms.RichTextBox();
    rtf.Text = DirtyText;
    return rtf.Rtf;
}
 
....
lDtl.FindField("DESCRIPTION3").AsString  = FormatAsRTF("ANTENNA ???");
...
</pre>
|}
 
{| class="mw-collapsible mw-collapsed wikitable"
! VB.Net 
|-
|
<pre>
Private Shared Function FormatAsRTF(ByVal DirtyText As String) As String
    Dim rtf As System.Windows.Forms.RichTextBox = New System.Windows.Forms.RichTextBox()
    rtf.Text = DirtyText
    Return rtf.Rtf
End Function
 
....
lDtl.FindField("DESCRIPTION3").AsString  = FormatAsRTF("ANTENNA ???")
...
</pre>
|}
 
{| class="mw-collapsible mw-collapsed wikitable"
! Delphi
|-
|
<pre>
function TfmMain.PlainTxtToRTF(const AValue:String):String;
var R:TRichEdit;
    M : TStringStream;
begin
  R := TRichEdit.CreateParented(HWND_MESSAGE);
  M := TStringStream.Create('');
  try
    R.WordWrap := False;
    R.Lines.Add(AValue);
    R.Lines.SaveToStream(M);
    Result := M.DataString;
  finally
    R.Free;
    M.Free;
  end;
end;
 
....
lDtl.FindField('DESCRIPTION3').AsString  := PlainTxtToRTF('ANTENNA ???');
...
</pre>
|}
 
:or Can use our build in Utility function (only available from 5.2022.941.822 & above)
<pre>
....
lDtl.FindField("Description3").AsString = ComServer.Utility.PlainTextToRichText("ANTENNA ??? ??")
...
</pre>
 
{| class="mw-collapsible mw-collapsed wikitable"
! PHP 
|-
|
<pre>
<!DOCTYPE html>
<html>
<body>
 
<h1>SQL Acc SDK in PHP page</h1>
 
<?php
echo "Updated 14 Sep 2022<br>";
#This action to show & post Description3 with unicode
 
$ComServer = null;
 
function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp", null, CP_UTF8) or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();
 
    if ($status == true)
    {
        #$ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
   
}
 
function GetData(){
    global $ComServer;
    $lSQL = "SELECT Description3 FROM ST_ITEM
    WHERE Code='ANT' ";
    $lDataSet = $ComServer->DBManager->NewDataSet($lSQL);
 
    if ($lDataSet->RecordCount > 0) {
$lDataSet->First();
$rtf = $lDataSet->FindField('Description3')->AsString();
        echo $rtf;
echo "<br>== <br>";
echo "<br>Result after RTF: <br>";
$txt = $ComServer->Utility->RichTextToPlainText($rtf);
echo "<TEXTAREA rows=10 cols=80 id='edResult1' >".$txt. "</TEXTAREA>";
echo "<br>== <br>";
echo "??? ??";
}else {
    echo "Record Not Found";
    }
}
 
function PostData(){
global $ComServer;
$BizObject = $ComServer->BizObjects->Find("ST_AJ");
    $lMain = $BizObject->DataSets->Find("MainDataSet");
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail");
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "<<New>>";
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Stock Adjustment";
    #Insert Data - Detail - Increase Stock Qty
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    $lDetail->FindField("Qty")->AsFloat = 2;
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->Post();
    #Insert Data - Detail - Reduce Stock Qty
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 2;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "NOKIA CHARGER  ???";
$lDetail->FindField("Description3")->AsString = $ComServer->Utility->PlainTextToRichText("NOKIA CHARGER ??? ??");
    $lDetail->FindField("Qty")->AsFloat = -5;
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->Post();
    $BizObject->Save();
    $BizObject->Close();
try{
        $BizObject->Save();
        $BizObject->Close();
}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    }
}
 
if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
echo "<br>";
        echo date("d M Y h:i:s A")." - Done";
PostData();
echo "<br>";
        echo date("d M Y h:i:s A")." - Done ST_AJ";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}
 
?>
    <form method="post">         
        <input type="submit" name="BtnData"
                value="Get RTF n Post RTF"/>
    </form>
</body>
</html>
</pre>
|}
<div style="float: right;">  [[#top|[top]]]</div>
 
==See also==
* [[SQL Accounting Linking]]
* [[SQL XML Import]]
* [[SQL Text Import]]
* [[SQL Acc XLS n MDB Import]]
* Others [[Customisation]]


{| class="mw-collapsible mw-collapsed wikitable"
* <big>Need assistance? May email to '''support@sql.com.my'''</big>
! Delphi
|-
|
<syntaxhighlight lang="delphi">
try
  lBizObj.New;
....
  lBizObj.Save;
except
  on E: Exception do
    Memo1.Lines.Text := E.Message;
end;
</syntaxhighlight>
|}
 
 
<div style="float: right;">  [[#top|[top]]]</div>
 
===Why Post to SQL Accounting sometime prompt Catastrophic failure Error?===
: Make sure you don't cross over Call action
 
<div style="float: right;">  [[#top|[top]]]</div>
 
==See also==
* [[SQL Accounting Linking]]
* [[SQL XML Import]]
* [[SQL Text Import]]
* [[SQL Acc XLS n MDB Import]]
* Others [[Customisation]]

Latest revision as of 09:54, 26 April 2024

Introduction

This is the "Bridge" direct live linking between External Program with SQL Accounting

Pros

  1. Can Live or Batch Update.
  2. Can do action such as New, Edit & Delete.
  3. About 95% of modules is covered.
  4. Can direct Retrieve/Get Information From Connected Database.
  5. Able to do Automation (i.e. auto login & update data).
  6. Support GST & SST.
  7. Free of Charge (Freeware) for End User on SDK Linking.

Cons

  1. Must had programming knowledge.
  2. Must had SQL Accounting installed & running.
  3. Must self do checking else error prompt will unable to “capture”.
  4. Only supported in IE for JScript

Requirement

  • Microsoft Windows 8.1 and above (recommended with 64 bits windows)
  • Intel i5, i7 and above computer.
  • 8 GB of RAM (recommended 12 GB and above).
  • Firebird (For Automatic Login & Logout Only)
  • SQL Accounting
  • Windows Scheduler (For Automatic Login & Logout Only)

Documentation

Linking Flow

  • Highlight in Yellow Color is the Windows base Application/Function you need to Develop/Create.

Example 1 - POS System

LinkFlow-Example01.jpg

Example 2 - Cloud/Mobile System

LinkFlow-Example02.jpg
  • The SDK can be build in in your system or a Standalone windows Application(Middle Application).
  • If you build in your system then it can be sync anytime either by a special interface with parameter (eg Date From, Date To & etc) or each transaction after post(not recommended)
  • If you create a Standalone windows Application(Middle Application) you can make use the Windows Schedule to sync or call from you system to execute/run the Standalone windows Application(Middle Application).

Steps

CHM File

  1. Install SQL Accounting Click here
  2. Create Sample Data
  3. Login (username & password is Admin)
  4. Double click the SQLSDK.chm file
  5. Click Application Object | Business Objects
  6. Click the word "here"
  7. Click Yes
  8. In the list Look for (example)
- AR_IV -> Customer Invoice
- AR_CN -> Customer Credit Note
- AP_PI -> Supplier Invoice
- SL_IV -> Sales Invoice
- PH_PI -> Purchase Invoice
- ST_AJ -> Stock Adjustment

External Application Linking

  1. Login SQL Accounting
  2. Login External Application
  3. Click Post to SQL Accounting button or Click Save button from External Application.
----------------------------------------------------------------------------------------------------------------------------------------------------
Template.Tips-01.jpg
Can try start with Add Agent under the SDK file to make sure you
Application can communicate with SQL Accounting
----------------------------------------------------------------------------------------------------------------------------------------------------

Available Programming Language

Example External Program

VB. Net

C Sharp

Steps (C Sharp & VB.Net Only)

The example video is how to

01. Open DCF in D:\Happy\DB\Default.DCF
02. Datatabase is ACC-0008.FDB
03. Click Complete Post button
04. Where to check in SQL accounting after Post (Steps-2.gif)

Available Function

- Complete Post - SL_CS, SL_CN, AR_PM, AR_CN & AR_CF
- Batch Post - Cash Sales - SL_CS
- Batch Post...2 DB
- Batch Post...2 DCF
- Add Stock Assembly with Override Raw Materials - ST_AS
- Add Stock Job Order to Stock Assembly with Override Raw Materials - PD_JO & ST_AS
- Add Agent - Agent
- Get Agent Description
- Add Journal Voucher - Add GL JE
- Edit GL Journal Voucher - Edit GL_JE
- Edit Sales Cash Sales - SL_CS
- Delete Cash Sales - Del SL CS - SL_CS
- Customer Aging - Customer.Aging.RO
- Get Sales Invoice Listing - Sales.IV.RO
- Stock Item List
- Add SKU with Edit SKU - ST_ITEM
- Del SKU - ST_ITEM
- Get DCF Database List
- Month End - FIFO
- Month End - WA (Weighted Average)
- Get Options...(Perform Tax / Local Amount Rounding, 5 Cents Rounding (Sales Invoice) & 5 Cents Rounding (Cash Sales)
- Get Next Invoice No.
- Is Valid ST_Item
- Is Valid GL_Acc
- Outstanding SO - Sales.OutstandingSO.RO
- Read RTF n Picture Data...
- Get Customer List - AR_Customer
- Add Customer with Edit Customer - AR_Customer
- Del Customer - AR_Customer
- Add GL Payment Voucher - Add GL_PV
- Transfer Document - DO to SL_IV
- Get Transfer Info. 1 - At Invoice Find DO Number & Date
- Get Transfer Info. 2 - At DO Find Invoice Number & Date
- GL Ledger
- Add Stock Transfer - Add ST XF
- Add Stock Adjustment - Add ST AJ
- Get Serial Number Balance - Serial No. Bal.
- Add Customer Deposit - Deposit
- Transfer Customer Deposit to Payment - Deposit to PM
- Refund Deposit - Deposit Refund
- Forfeit Deposit - Deposit Forfeit
- Enable Support DocNo Format with Month & Year Format
- Add AR IV
- Add AR CN
- Add AR PM Bounce Chq
- Add GL Ledger RO
- AR Statement
- Add Add/Edit AR PM
- Add LogInOut (For Testing purpose)

History - C Sharp & VB.Net

19 Aug 2023...
- Add Add/Edit AR PM
- Add LogInOut (For Testing purpose)
14 Jun 2022
- Add AR Statement
- Fix Error when click 2nd time for Report.
27 Apr 2022
- Add/Edit Location
- Rename Caption for Add Customer to Add/Edit Cust
- Rename Caption for Add Agent to Add/Edit Agent
- Add Reconnect
- Add/Edit ST_Batch
- Fix bug on KillApp should Sleep 2 seconds after run the KillApp
18 Mar 2021
- Enable Support DocNo Format with Month & Year Format
- Add AR IV
- Add AR CN
- Add AR PM Bounce Chq
- Add GL Ledger RO
22 May 2020
- Fix Complete Post Action cause SQLAcc still not exit after logout
- Add/Edit Customer Contra
28 Mar 2020
- SL DO to SL IV button - Check Transfer Status should excluded Cancelled
- Add Get Transfer Info. 1 - At Invoice Find DO Number & Date
- Add Get Transfer Info. 2 - At DO Find Invoice Number & Date
04 Mar 2020
- Add Post with Serial Number for Complete Post
- Fix Posting Seq Error on Complete Post
- Add GL JE
- Add GL_PV
- Add Additional Note for Outstanding SO button
05 Feb 2020
- Add Customer Deposit
- Add Customer Deposit to PM
- Add Customer Deposit Refund
- Add Customer Deposit Forfeit
- Add SL DO to SL IV
- Add 12 Months Aging Parameter for Customer.Aging.RO
- Add Add ST AJ - Stock Adjustment
- Add Add ST XF - Stock Transfer
22 Oct 2019
- Add GL Ledger function
- Add Cust. IV Listing function
- Add Serial No. Bal function
- Fixed Error on Auto Logout Error when using ComServer.DBManager.NewDataSet(lSQL)
23 Aug 2019
- Add Del SKU function
- Add Customer List... function
- Add Add Customer function
- Add Del Customer function
- Add Del SL CS function
31 Jul 2019
- Add Read RTF n Picture Data... function.
10 Jul 2019
- Fixed KillApp function not working in some situation.
11 Jun 2019
- Fixed Auto Logout Prompt Error.
- Fixed SQLAcc not Fully Exit when Call Auto Logout.
- Fixed Batch Post 2 DB error for CSharp
06 Jun 2019
- Fixed unable to Update Stock Item for Add SKU.
- Add Update UOM for Add SKU.
- Add C Sharp Coding
23 May 2019
- Update Complete Post - Add Description3 (More Description)
- Fixed Batch Post.. keep login when looping
- Add Get Outstanding SO - Sales.OutstandingSO.RO
05 May 2019
- Add Condition for Stock Item List only filter if edCode is not empty
- Add Prompt Message If Login Fail
- Add SQLAcc Build No Condition for Get Sales Invoice Listing to support version 776 & above
- Add SKU - ST_ITEM



ASP.Net C Sharp

01. Make sure Enabled the following function in IIS Manager - Sites - YourSiteName - Authentication

- Anonymous Authentication
- ASP.Net Impersonation (Make sure set Specific user (Windows Login User & Password))

02 Make sure the Windows user set in ASP.Net Impersonation is Login

Available Function

- Get Agent Description
- New & Update Customer/Supplier Info.
- Edit Cash Sales
- Edit Purchase Invoice
- Complete Post
- GL PV
- Add Add/Edit Agent
- Add Add/Edit Terms
- Add Add/Edit ST Item
- Delete Cash Sales
- Add SL SO

History

16 Aug 2021
- Add SL SO
19 Feb 2021
- Delete Cash Sales
16 Sep 2020
- Add Add/Edit ST Item
- Fix some comment note error
23 Jun 2020
- Add Add/Edit Agent
- Add Add/Edit Terms
22 May 2020
- Add Edit Purchase Invoice
- Add Complete Post
- Add GL PV
06 Dec 2019
- Add Edit Cash Sales
- Enable Run Time Set User Name, Password, DCF & FDB


Python

Module Require in Python
- pypiwin32 (Mandatory) -> pip install pypiwin32
- Pillow (Optional for Picture) -> pip install Pillow

Common

  • Common.py file for example code
Common Function
#Updated 03 Oct 2023
import win32com.client
import Common
import os
from time import sleep

ComServer = win32com.client.Dispatch("SQLAcc.BizApp")

def KillApp():
    os.system('cmd /c "taskkill /IM "SQLACC.exe" /F"')
    sleep(2) #sleep 2 sec


def CheckLogin():
    global ComServer
    ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
        KillApp()
 
    ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
    try:    
        ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                        "D:\\Happy\\DB\\Default.DCF",
                        #"C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                        "ACC-0015.FDB") #Database Name
    except Exception as e:
        print("Oops !", e)


def ShowResult(ADataset):
    if ADataset.RecordCount > 0:
        while not ADataset.eof:
            fc = ADataset.Fields.Count
            for x in range(fc):
                fn = ADataset.Fields.Items(x).FieldName
                fv = ADataset.FindField(fn).AsString
                lresult = "Index : "+ str(x) + " FieldName : " + fn + " Value : " + fv
                print (lresult)
            print("====")
            ADataset.Next()
    else:
        print ("Record Not Found")
        
        
def QuotedStr(ACode):
    return "'" + ACode.replace("'", "''") + "'"

Agent

Agent Script
#Updated 22 Jul 2023
import Common
       
def GetListData():
    lSQL = "SELECT * FROM AGENT "
    lSQL = lSQL + "WHERE ISACTIVE='T' "
    lSQL = lSQL + "ORDER BY CODE "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def PostData():
    BizObject = ComServer.BizObjects.Find("Agent")
    lMain = BizObject.DataSets.Find("MainDataSet")    
    
    lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
        
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("CODE").value = "FAIRY"
        lMain.FindField("DESCRIPTION").value = "FAIRY TAIL"

    else:
        BizObject.Params.Find("Code").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.FindField("DESCRIPTION").value = "FAIRY TAIL WIZARD"
            
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    #Deleting only work if the record never use in other document
    BizObject = ComServer.BizObjects.Find("Agent")
    
    lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
        
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("CODE").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input")

    ComServer.Logout()
finally:
    ComServer = None
    Common.KillApp()

Get Company Profile

Get Company Profile
#Updated 22 Jul 2023
import Common

def GetData():
    lSQL = "SELECT COMPANYNAME, REMARK, BRN, BRN2, GSTNO, "
    lSQL = lSQL + "SALESTAXNO, SERVICETAXNO, "
    lSQL = lSQL + "ADDRESS1,ADDRESS2,ADDRESS3,ADDRESS4 FROM SY_PROFILE "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    
    Common.ShowResult(lDataSet)
    
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer       
    GetData()
    ComServer.Logout()
finally:
    ComServer = None
    Common.KillApp()

Complete Post

SL_CS, AR_PM, SL_CN & AR_CN Script
#Updated 19 Jul 2023
#This will doing following posting
#01. Cash Sales
#02. Sales Credit Note
#03. Customer Payment With Knock off
#04. Edit Credit Note Posted in Step 02 & Knock Off
#05. Customer Refund to Knock off Credit Note
import Common
import datetime

def PostDataCS():    
    BizObject = ComServer.BizObjects.Find("SL_CS")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
    
    BizObject.New();
    lMain.FindField("DocNo").AsString = "--IV Test--"
    lMain.FindField("DocDate").value = lDate
    lMain.FindField("PostDate").value = lDate
    lMain.FindField("Code").AsString = "300-C0001" #Customer Account
    lMain.FindField("CompanyName").AsString = "Cash Sales"
    lMain.FindField("Address1").AsString = "" #Optional
    lMain.FindField("Address2").AsString = "" #Optional
    lMain.FindField("Address3").AsString = "" #Optional
    lMain.FindField("Address4").AsString = "" #Optional
    lMain.FindField("Phone1").AsString = ""   #Optional
    lMain.FindField("Description").AsString = "Sales"

    #Insert Data - Detail
    #For Tax Inclusive = True with override Tax Amount
    lDetail.Append()
    lDetail.FindField("Seq").value = 1
    lDetail.FindField("Account").AsString = "500-000" #Sales Account
    lDetail.FindField("Description").AsString = "Sales Item A"
    lDetail.FindField("Description3").AsString = ("Item A Line 1" + ("\r" + "Item A Line 2"))
    lDetail.FindField("Qty").AsFloat = 1
    lDetail.FindField("Tax").AsString = "SV"
    lDetail.FindField("TaxRate").AsString = "6%"
    lDetail.FindField("TaxInclusive").value = 0
    lDetail.FindField("UnitPrice").AsFloat = 435
    lDetail.FindField("Amount").AsFloat = 410.37 #Exclding GST Amt
    lDetail.FindField("TaxAmt").AsFloat = 24.63

    lDetail.DisableControls()
    lDetail.FindField("TaxInclusive").value = 1
    lDetail.EnableControls()
    
    lDetail.Post()

    #For Tax Inclusive = False with override Tax Amount
    lDetail.Append()
    lDetail.FindField("Seq").value = 2
    lDetail.FindField("Account").AsString = "500-000"
    lDetail.FindField("Description").AsString = "Sales Item B"
    lDetail.FindField("Qty").AsFloat = 1
    lDetail.FindField("Tax").AsString = "SV"
    lDetail.FindField("TaxRate").AsString = "6%"
    lDetail.FindField("TaxInclusive").value = 0
    lDetail.FindField("UnitPrice").AsFloat = 94.43
    lDetail.FindField("Amount").AsFloat = 94.43
    lDetail.FindField("TaxAmt").AsFloat = 5.66
    lDetail.Post()
    
    #For With Item Code
    lDetail.Append()
    lDetail.FindField("Seq").value = 3
    lDetail.FindField("ItemCode").AsString = "ANT"
    lDetail.FindField("Description").AsString = "Sales Item B"
    #lDetail.FindField("Account").AsString     = "500-000" #If you wanted override the Sales Account Code
    lDetail.FindField("Qty").AsFloat = 2
    lDetail.FindField("UOM").AsString = "UNIT"
    #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
    lDetail.FindField("Tax").AsString = "SV"
    lDetail.FindField("TaxRate").AsString = "6%"
    lDetail.FindField("TaxInclusive").value = 0
    lDetail.FindField("UnitPrice").AsFloat = 100
    lDetail.FindField("Amount").AsFloat = 200
    lDetail.FindField("TaxAmt").AsFloat = 12
    lDetail.Post()    
    
    BizObject.Save()
    BizObject.Close()

def PostDataPM():       
    BizObject = ComServer.BizObjects.Find("AR_PM")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsKnockOff") #lDetail contains detail data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
    
    BizObject.New()
    lMain.FindField("DocNo").AsString = "--PM Test--"
    lMain.FindField("CODE").AsString = "300-C0001" #Customer Account
    lMain.FindField("DocDate").Value = lDate
    lMain.FindField("PostDate").Value = lDate
    lMain.FindField("Description").AsString = "Payment for A/c"
    lMain.FindField("PaymentMethod").AsString = "320-000" #Bank or Cash Account
    lMain.FindField("ChequeNumber").AsString = ""
    lMain.FindField("BankCharge").AsFloat = 0
    lMain.FindField("DocAmt").AsFloat = 200.00
    lMain.FindField("Cancelled").AsString = "F"    
    
    #Knock Off IV  
    V = ["IV", "--IV Test--"]  #DocType, DocNo
    
    if (lDetail.Locate("DocType;DocNo", V, False, False)) :
        lDetail.Edit()
        lDetail.FindField("KOAmt").AsFloat = 147.09 #Partial Knock off
        lDetail.FindField("KnockOff").AsString = "T"
        lDetail.Post()
        
    BizObject.Save()
    BizObject.Close()
    
def PostDataCN():   
    BizObject = ComServer.BizObjects.Find("SL_CN")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
    
    BizObject.New()
    lMain.FindField("DocNo").AsString = "--CN Test--"
    lMain.FindField("DocDate").value = lDate
    lMain.FindField("PostDate").value = lDate
    lMain.FindField("Code").AsString = "300-C0001"
    lMain.FindField("CompanyName").AsString = "Cash Sales"
    lMain.FindField("Address1").AsString = ""
    lMain.FindField("Address2").AsString = ""
    lMain.FindField("Address3").AsString = ""
    lMain.FindField("Address4").AsString = ""
    lMain.FindField("Phone1").AsString = ""
    lMain.FindField("Description").AsString = "Sales Returned"

    #For With Item Code
    lDetail.Append()
    lDetail.FindField("ItemCode").AsString = "ANT"
    lDetail.FindField("Description").AsString = "Sales Item B"
    lDetail.FindField("Description2").AsString = "Product Spoil" #Reason
    lDetail.FindField("Remark1").AsString = "--IV Test--"   #Invoice No
    lDetail.FindField("Remark2").AsString = "01 Jan 2017"   #Invoice Date
    lDetail.FindField("Qty").AsFloat = 1
    lDetail.FindField("Tax").AsString = "SV"
    lDetail.FindField("TaxRate").AsString = "6%"
    lDetail.FindField("TaxInclusive").value = 0
    lDetail.FindField("UnitPrice").AsFloat = 100
    lDetail.FindField("Amount").AsFloat = 100
    lDetail.FindField("TaxAmt").AsFloat = 6
    lDetail.Post()

    #Save Document
    BizObject.Save()
    BizObject.Close()    
    
def PostKnockIVCN():
    BizObject = ComServer.BizObjects.Find("AR_CN")
    lMain = BizObject.DataSets.Find("MainDataSet")
    lDetail = BizObject.DataSets.Find("cdsKnockOff")
    
    #Find CN Number
    lDocNo = "--CN Test--"
    lDocKey = BizObject.FindKeyByRef("DocNo", lDocNo)
    BizObject.Params.Find("DocKey").Value = lDocKey
    
    if lDocKey is not None:
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        
        #Knock Off IV        
        V = ["IV", "--IV Test--"]  #DocType, DocNo
        
        if (lDetail.Locate("DocType;DocNo", V, False, False)) :
            lDetail.Edit()
            lDetail.FindField("KOAmt").AsFloat = 100 #Partial Knock off
            lDetail.FindField("KnockOff").AsString = "T"
            lDetail.Post()
        
    BizObject.Save()
    BizObject.Close()        

def PostDataCF():       
    BizObject = ComServer.BizObjects.Find("AR_CF")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsKnockOff") #lDetail contains detail data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
    
    BizObject.New()
    lMain.FindField("DocNo").AsString = "--CF Test--"
    lMain.FindField("CODE").AsString = "300-C0001" #Customer Account
    lMain.FindField("DocDate").Value = lDate
    lMain.FindField("PostDate").Value = lDate
    lMain.FindField("Description").AsString = "Payment for A/c"
    lMain.FindField("PaymentMethod").AsString = "320-000" #Bank or Cash Account
    lMain.FindField("ChequeNumber").AsString = ""
    lMain.FindField("BankCharge").AsFloat = 0
    lMain.FindField("DocAmt").AsFloat = 6
    lMain.FindField("Cancelled").AsString = "F"    
    
    #Knock Off Credit Note  
    V = ["CN", "--CN Test--"]  #DocType, DocNo
    
    if (lDetail.Locate("DocType;DocNo", V, False, False)) :
        lDetail.Edit()
        lDetail.FindField("KOAmt").AsFloat = 4 #Partial Knock off
        lDetail.FindField("KnockOff").AsString = "T"
        lDetail.Post()
        
    BizObject.Save()
    BizObject.Close()

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    print ("Posting Cash Sales")
    PostDataCS()
    print ("Posting Payment")
    PostDataPM()
    print ("Posting Sales CN")
    PostDataCN()
    print ("Posting Knock Off CN")
    PostKnockIVCN()
    print ("Posting Customer Refund")
    PostDataCF()
    print ("Done")
    ComServer.Logout()
finally:
    ComServer = None
    Common.KillApp()

Get Picture & Description3(Rich Text)

Get Picture & Description3(Rich Text) Script
#Updated 02 Aug 2023
import os, sys
import Common
from io import BytesIO
from PIL import Image

def GetData():
    lSQL = "SELECT Description3, Picture FROM ST_ITEM "
    lSQL = lSQL + "WHERE Code='ANT' "
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)

    imgdata = BytesIO(lDataSet.FindField('Picture').Value)
    dt = Image.open(imgdata)
    dt.save("test.jpg")
    print ("Done Export Picture file...")
    #print (lDataSet.FindField('Picture').Value)
    
    rtf = lDataSet.FindField('Description3').AsString
    print (rtf)
    
    with open('out.rtf', 'w') as output:
        output.write(rtf)
        output.close()
    print ("Done Export RTF file...")
    
    txt = ComServer.Utility.RichTextToPlainText(rtf)
    print (txt)
    
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer    
    GetData()
    ComServer.Logout()
finally:    
    ComServer = None
    Common.KillApp()

Get Invoice Next Number

Get Invoice Next Number Script
#Updated 19 Jul 2023
import Common

def GetData():
    lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A "
    lSQL = lSQL + "INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY) "
    lSQL = lSQL + "WHERE A.DOCTYPE='IV' "
    lSQL = lSQL + "AND A.DESCRIPTION='Customer Invoice' "
    lSQL = lSQL + "AND A.STATESET=1 "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    
    fmt = lDataSet.FindField('Format').AsString
    NextNo = lDataSet.FindField('NEXTNUMBER').AsFloat
    print (fmt % NextNo)
    
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer       
    GetData()
    ComServer.Logout()
finally:
    ComServer = None
    Common.KillApp()

Stock Item

Stock Item Script
#Updated 21 Dec 2023
import Common
       
def GetListData():
    lSQL = "SELECT A.*, B.UOM, B.RATE, B.REFCOST, B.REFPRICE, B.ISBASE FROM ST_ITEM A "
    lSQL = lSQL + "INNER JOIN ST_ITEM_UOM B ON (A.CODE=B.CODE) "
    lSQL = lSQL + "WHERE A.ISACTIVE='T' "
    lSQL = lSQL + "ORDER BY A.CODE, B.RATE" 
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def PostData():
    BizObject = ComServer.BizObjects.Find("ST_ITEM")
    lMain = BizObject.DataSets.Find("MainDataSet")
    lDtl = BizObject.DataSets.Find("cdsUOM")
    LBar = BizObject.DataSets.Find("cdsBarcode")
    
    lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
        
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("CODE").value = "FAIRY"
        lMain.FindField("DESCRIPTION").value = "FAIRY TAIL"
        lMain.FindField("STOCKGROUP").value = "DEFAULT";
        lMain.FindField("STOCKCONTROL").value = "T";
        lMain.FindField("ISACTIVE").value = "T";

        lDtl.Edit() #For 1St UOM
        lDtl.FindField("UOM").AsString = "PCS"
        lDtl.FindField("Rate").AsFloat = 1
        lDtl.FindField("RefCost").AsFloat = 10.2
        lDtl.FindField("RefPrice").AsFloat = 25
        lDtl.Post()

        lDtl.Append() #For 2nd UOM
        lDtl.FindField("UOM").AsString = "CTN"
        lDtl.FindField("Rate").AsFloat = 12
        lDtl.FindField("RefCost").AsFloat = 102
        lDtl.FindField("RefPrice").AsFloat = 240
        lDtl.Post()
        
        LBar.Append() #For 1St UOM Barcode
        LBar.FindField("Barcode").AsString = "123456"
        LBar.FindField("UOM").AsString = "PCS"
        LBar.Post()

        LBar.Append() #For 2nd UOM Barcode
        LBar.FindField("Barcode").AsString = "7890123"
        LBar.FindField("UOM").AsString = "CTN"
        LBar.Post()
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.FindField("DESCRIPTION").value = "FAIRY TAIL WIZARD"
        
        while lDtl.RecordCount > 0:
            lDtl.First()
            lDtl.Delete()

        #Insert back with new Price
        lDtl.Append() #For 1St UOM
        lDtl.FindField("UOM").AsString = "PCS" #Make sure this always same as b4 delete data
        lDtl.FindField("Rate").AsFloat = 1     #Make sure this always same as b4 delete data
        lDtl.FindField("RefCost").AsFloat = 22.3
        lDtl.FindField("RefPrice").AsFloat = 52
        lDtl.FindField("ISBASE").AsFloat = 1 
        lDtl.Post();

        lDtl.Append()  #For 2nd UOM
        lDtl.FindField("UOM").AsString = "CTN" #Make sure this always same as b4 delete data
        lDtl.FindField("Rate").AsFloat = 12    #Make sure this always same as b4 delete data
        lDtl.FindField("RefCost").AsFloat = 102.5
        lDtl.FindField("RefPrice").AsFloat = 260.45
        lDtl.FindField("ISBASE").AsFloat = 0 
        lDtl.Post()
    
        while LBar.RecordCount > 0:
            LBar.First()
            LBar.Delete()    

        LBar.Append() #For 1St UOM Barcode
        LBar.FindField("Barcode").AsString = "888888"
        LBar.FindField("UOM").AsString = "PCS"
        LBar.Post()

        LBar.Append() #For 2nd UOM Barcode
        LBar.FindField("Barcode").AsString = "999999"
        LBar.FindField("UOM").AsString = "CTN"
        LBar.Post()
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    #Deleting only work if the record never use in other document
    BizObject = ComServer.BizObjects.Find("ST_ITEM")
    
    lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
        
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input")
    ComServer.Logout()
finally:
    ComServer = None
    Common.KillApp()

AR_Customer

AR_Customer Script
#Updated 22 Jul 2023
import Common
       
def GetListData():
    lSQL = "SELECT A.*, B.BRANCHTYPE, B.BRANCHNAME, B.ADDRESS1, B.ADDRESS2, B.ADDRESS3, B.ADDRESS4, "
    lSQL = lSQL + "B.GEOLAT, B.GEOLONG, B.ATTENTION, B.PHONE1, B.PHONE2, B.MOBILE, B.FAX1, B.FAX2, B.EMAIL "
    lSQL = lSQL + "FROM AR_CUSTOMER A "
    lSQL = lSQL + "INNER JOIN AR_CUSTOMERBRANCH B ON (A.CODE=B.CODE) "
    lSQL = lSQL + "WHERE A.STATUS='A' "
    lSQL = lSQL + "ORDER BY A.CODE, B.BRANCHTYPE "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def PostData():
    BizObject = ComServer.BizObjects.Find("AR_CUSTOMER")
    lMain = BizObject.DataSets.Find("MainDataSet")
    lDtl = BizObject.DataSets.Find("cdsBranch")
    
    lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
        
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("CODE").value = "FAIRY"
        lMain.FindField("CompanyName").value = "FAIRY TAIL"

        lDtl.Edit() #For 1St Branch
        lDtl.FindField("BranchName").AsString  = "BILLING"
        lDtl.FindField("Address1").AsString    = "Address1"
        lDtl.FindField("Address2").AsString    = "Address2"
        lDtl.FindField("Address3").AsString    = "Address3"
        lDtl.FindField("Address4").AsString    = "Address4"  
        lDtl.FindField("Attention").AsString   = "Attention"  
        lDtl.FindField("Phone1").AsString      = "Phone1"
        lDtl.FindField("Fax1").AsString        = "Fax1"
        lDtl.FindField("Email").AsString       = "EmailAddress"
        lDtl.Post()

        lDtl.Append() #For 2nd Branch
        lDtl.FindField("BranchName").AsString  = "Branch1"
        lDtl.FindField("Address1").AsString    = "DAddress1"
        lDtl.FindField("Address2").AsString    = "DAddress2"
        lDtl.FindField("Address3").AsString    = "DAddress3"
        lDtl.FindField("Address4").AsString    = "DAddress4"  
        lDtl.FindField("Attention").AsString   = "DAttention"  
        lDtl.FindField("Phone1").AsString      = "DPhone1"
        lDtl.FindField("Fax1").AsString        = "DFax1"
        lDtl.FindField("Email").AsString       = "DEmailAddress"
        lDtl.Post()
    else:
        BizObject.Params.Find("Code").Value = "FAIRY"
        BizObject.Open()
        BizObject.Edit()
        lMain.FindField("CompanyName").value = "FAIRY TAIL WIZARD"
        
        while lDtl.RecordCount > 0:
            lDtl.First()
            lDtl.Delete()

        #Insert back with new Information
        lDtl.Append() #For 1St Branch
        lDtl.FindField("BranchType").AsString  = "B" 
        lDtl.FindField("BranchName").AsString  = "BILLING" #Make sure this always same as b4 delete data
        lDtl.FindField("Address1").AsString    = "New Address1"
        lDtl.FindField("Address2").AsString    = "New Address2"
        lDtl.FindField("Address3").AsString    = "New Address3"
        lDtl.FindField("Address4").AsString    = "New Address4"  
        lDtl.FindField("Attention").AsString   = "New Attention"  
        lDtl.FindField("Phone1").AsString      = "New Phone1"
        lDtl.FindField("Fax1").AsString        = "New Fax1"
        lDtl.FindField("Email").AsString       = "New EmailAddress"
        lDtl.Post()

        lDtl.Append() #For 2nd Branch
        lDtl.FindField("BranchType").AsString  = "D" 
        lDtl.FindField("BranchName").AsString  = "Branch1" #Make sure this always same as b4 delete data
        lDtl.FindField("Address1").AsString    = "New DAddress1"
        lDtl.FindField("Address2").AsString    = "New DAddress2"
        lDtl.FindField("Address3").AsString    = "New DAddress3"
        lDtl.FindField("Address4").AsString    = "New DAddress4"  
        lDtl.FindField("Attention").AsString   = "New DAttention"  
        lDtl.FindField("Phone1").AsString      = "New DPhone1"
        lDtl.FindField("Fax1").AsString        = "New DFax1"
        lDtl.FindField("Email").AsString       = "New DEmailAddress"
        lDtl.Post()
    
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    #Deleting only work if the record never use in other document
    BizObject = ComServer.BizObjects.Find("AR_CUSTOMER")
    
    lDocKey = BizObject.FindKeyByRef("CODE", "FAIRY")
        
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("CODE").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input") 
    ComServer.Logout()   
finally:
    ComServer = None
    Common.KillApp()

Sales Invoice

SL_IV
#Updated 08 Jan 2024
import Common
import datetime
       
def GetListData():
    lSQL = "SELECT A.DOCNO, A.DOCDATE, A.CODE, A.COMPANYNAME, A.DESCRIPTION, A.DOCAMT, "
    lSQL = lSQL + "A.AGENT, A.AREA, "
    lSQL = lSQL + "B.ITEMCODE, B.DESCRIPTION ITEMDESC, B.QTY, B.UOM, B.UNITPRICE, B.DISC,  "
    lSQL = lSQL + "B.TAX, B.TAXRATE, B.TAXAMT, B.TAXINCLUSIVE, B.AMOUNT "
    lSQL = lSQL + "FROM SL_IV A "
    lSQL = lSQL + "INNER JOIN SL_IVDTL B ON (A.DOCKEY=B.DOCKEY) "
    lSQL = lSQL + "WHERE A.CODE='300-A0002' "
    lSQL = lSQL + "AND A.CANCELLED='F' "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def PostData():
    BizObject = ComServer.BizObjects.Find("SL_IV")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
    
    lDocKey = BizObject.FindKeyByRef("DocNo", "--IV Test--")
        
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("DocNo").AsString = "--IV Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Code").AsString = "300-C0001" #Customer Account
        lMain.FindField("CompanyName").AsString = "Cash Sales"
        lMain.FindField("Address1").AsString = "" #Optional
        lMain.FindField("Address2").AsString = "" #Optional
        lMain.FindField("Address3").AsString = "" #Optional
        lMain.FindField("Address4").AsString = "" #Optional
        lMain.FindField("Phone1").AsString = ""   #Optional
        lMain.FindField("Description").AsString = "Sales"

        #Insert Data - Detail
        #For Tax Inclusive = True with override Tax Amount
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("Account").AsString = "500-000" #Sales Account
        lDetail.FindField("Description").AsString = "Sales Item A"
        lDetail.FindField("Description3").AsString = ("Item A Line 1" + ("\r" + "Item A Line 2"))
        lDetail.FindField("Qty").AsFloat = 1
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 435
        lDetail.FindField("Amount").AsFloat = 410.37 #Exclding GST Amt
        lDetail.FindField("TaxAmt").AsFloat = 24.63

        lDetail.DisableControls()
        lDetail.FindField("TaxInclusive").value = 1
        lDetail.EnableControls()
    
        lDetail.Post()

        #For Tax Inclusive = False with override Tax Amount
        lDetail.Append()
        lDetail.FindField("Seq").value = 2
        lDetail.FindField("Account").AsString = "500-000"
        lDetail.FindField("Description").AsString = "Sales Item B"
        lDetail.FindField("Qty").AsFloat = 1
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 94.43
        lDetail.FindField("Amount").AsFloat = 94.43
        lDetail.FindField("TaxAmt").AsFloat = 5.66
        lDetail.Post()
    
        #For With Item Code
        lDetail.Append()
        lDetail.FindField("Seq").value = 3
        lDetail.FindField("ItemCode").AsString = "ANT"
        lDetail.FindField("Description").AsString = "Sales Item B"
        #lDetail.FindField("Account").AsString     = "500-000" #If you wanted override the Sales Account Code
        lDetail.FindField("Qty").AsFloat = 2
        lDetail.FindField("UOM").AsString = "UNIT"
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 100
        lDetail.FindField("Amount").AsFloat = 200
        lDetail.FindField("TaxAmt").AsFloat = 12
        lDetail.Post()
    
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Description 123 的第一 🐱"

        #Delete all Detail
        while lDetail.RecordCount != 0:
            lDetail.Last()
            lDetail.Delete()
            
        #Append Detail
        lDetail.Append()
        #lDetail.FindField("Account").value = "500-000"
        lDetail.FindField("Description").AsString = "Item A  的第一"
        lDetail.FindField("Description3").AsString = ComServer.Utility.PlainTextToRichText("More description  的第一 🐱")
        lDetail.FindField("Tax").value = ""
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("Amount").value = 410.37
        lDetail.FindField("TaxAmt").value = 0
        lDetail.Post()
        
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    #Deleting only work if the record never not knock off by Payment or Credit Note
    BizObject = ComServer.BizObjects.Find("SL_IV")
    
    lDocKey = BizObject.FindKeyByRef("DocNo", "--IV Test--")
        
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input")
       
    ComServer.Logout()   
finally:
    ComServer = None
    Common.KillApp()

Purchase Invoice

PH_PI
#Updated 08 Jan 2024
import Common
import datetime
       
def GetListData():
    lSQL = "SELECT A.DOCNO, A.DOCDATE, A.CODE, A.COMPANYNAME, A.DESCRIPTION, A.DOCAMT, "
    lSQL = lSQL + "A.AGENT, A.AREA, "
    lSQL = lSQL + "B.ITEMCODE, B.DESCRIPTION ITEMDESC, B.QTY, B.UOM, B.UNITPRICE, B.DISC,  "
    lSQL = lSQL + "B.TAX, B.TAXRATE, B.TAXAMT, B.TAXINCLUSIVE, B.AMOUNT "
    lSQL = lSQL + "FROM PH_PI A "
    lSQL = lSQL + "INNER JOIN PH_PIDTL B ON (A.DOCKEY=B.DOCKEY) "
    lSQL = lSQL + "WHERE A.CODE='400-L0001' "
    lSQL = lSQL + "AND A.CANCELLED='F' "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def PostData():
    BizObject = ComServer.BizObjects.Find("PH_PI")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
    
    V = ["--PI Test--", "400-W0001"]  #DocNo, Code
    
    lDocKey = BizObject.FindKeyByRef("DocNo;Code", V)
        
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("DocNo").AsString = "--PI Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Code").AsString = "400-W0001" #Supplier Account
        lMain.FindField("CompanyName").AsString = "WORLDLINE COMMUNICATION SDN BHD"
        #lMain.FindField("Address1").AsString = "" #Optional
        #lMain.FindField("Address2").AsString = "" #Optional
        #lMain.FindField("Address3").AsString = "" #Optional
        #lMain.FindField("Address4").AsString = "" #Optional
        #lMain.FindField("Phone1").AsString = ""   #Optional
        lMain.FindField("Description").AsString = "Purchase Invoice"

        #Insert Data - Detail    
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("ItemCode").AsString = "ANT"
        lDetail.FindField("Description").AsString = "Item B"
        #lDetail.FindField("Account").AsString     = "600-000" #If you wanted override the Purchase Account Code
        lDetail.FindField("Qty").AsFloat = 2
        lDetail.FindField("UOM").AsString = "UNIT"
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = ""
        lDetail.FindField("TaxRate").AsString = ""
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 80
        lDetail.FindField("Amount").AsFloat = 160
        lDetail.FindField("TaxAmt").AsFloat = 0
        lDetail.Post()
        
        lDetail.Append()
        lDetail.FindField("Seq").value = 2
        lDetail.FindField("ItemCode").AsString = "HFK"
        lDetail.FindField("Description").AsString = "HANDS FREE KITS"
        #lDetail.FindField("Account").AsString     = "600-000" #If you wanted override the Purchase Account Code
        lDetail.FindField("Qty").AsFloat = 3
        lDetail.FindField("UOM").AsString = "UNIT"
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = ""
        lDetail.FindField("TaxRate").AsString = ""
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 50
        lDetail.FindField("Amount").AsFloat = 150
        lDetail.FindField("TaxAmt").AsFloat = 0
        lDetail.Post()        
    
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Description 123 的第一 🐱"

        #Delete all Detail
        while lDetail.RecordCount != 0:
            lDetail.Last()
            lDetail.Delete()
            
        #Append Detail
        lDetail.Append()
        #lDetail.FindField("Account").value = "600-000"
        lDetail.FindField("Description").AsString = "Item A  的第一"
        lDetail.FindField("Description3").AsString = ComServer.Utility.PlainTextToRichText("More description  的第一 🐱")
        lDetail.FindField("Tax").value = ""
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("Amount").value = 410.37
        lDetail.FindField("TaxAmt").value = 0
        lDetail.Post()
        
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    #Deleting only work if the record never not knock off by Payment or Credit Note
    BizObject = ComServer.BizObjects.Find("PH_PI")
    
    V = ["--PI Test--", "400-W0001"]  #DocNo, Code
    
    lDocKey = BizObject.FindKeyByRef("DocNo;Code", V)    
        
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input")
       
    ComServer.Logout()   
finally:
    ComServer = None
    Common.KillApp()

GL Ledger

GL Ledger Script
#Updated 24 Jul 2023
import Common

def GetData():
    lSQL = "SELECT A.CODE, B.DESCRIPTION ACCDESC, A.DOCDATE, A.POSTDATE, A.DESCRIPTION, A.DESCRIPTION2,  "
    lSQL = lSQL + "A.LOCALDR, A.LOCALCR, A.REF1, A.REF2 FROM GL_TRANS A "
    lSQL = lSQL + "INNER JOIN GL_ACC B ON (A.CODE=B.CODE) "
    lSQL = lSQL + "WHERE A.CANCELLED='F' "
    lSQL = lSQL + "AND A.POSTDATE BETWEEN '01 JAN 2023'  "
    lSQL = lSQL + "AND '31 DEC 2023' "
    lSQL = lSQL + "AND A.CODE='310-000' "
    lSQL = lSQL + "ORDER BY A.CODE, A.POSTDATE "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    
    Common.ShowResult(lDataSet)
    
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer       
    GetData()
    ComServer.Logout()
finally:    
    ComServer = None
    Common.KillApp()

GL Trial Balance

GL Trial Balance Script
#Updated 25 Jul 2023
import Common
import datetime

def GetData():
    RptObject = ComServer.RptObjects.Find('GL.TrialBalance.RO')
    
    RptObject.Params.Find("AllProject").Value      = True
    RptObject.Params.Find("AllAgent").Value        = True
    RptObject.Params.Find("AllArea").Value         = True
    RptObject.Params.Find("LedgerType").Value      = "G" #G = Legder, S = Debtor, P = Supplier
    #RptObject.Params.Find("ProjectData").Value    = #Not use if AllArea is true
    RptObject.Params.Find("ShowZeroBalance").Value = False
    RptObject.Params.Find("SortBy").Value          = "PostDate;DocNo" 
    RptObject.Params.Find("UseDescription2").Value = False
    
    lDateFrom = datetime.datetime(2018, 1, 1, 13, 0)
    lDateFrom.strftime('%m/%d/%Y')
    lDateTo = datetime.datetime(2018, 12, 31, 13, 0)
    lDateTo.strftime('%m/%d/%Y')
    
    RptObject.Params.Find("DateFrom").Value       = lDateFrom
    RptObject.Params.Find("DateTo").Value         = lDateTo

    #RptObject.Params.Find("AgentData").Value      = 'Not use if AllAgent is true
    #RptObject.Params.Find("AreaData").Value       = 'Not use if AllArea is true
  
    RptObject.Params.Find("SortBy").Value          = "Code;Description"
    RptObject.CalculateReport()

    lDataSet = RptObject.DataSets.Find("cdsMain")
    lDataSet2 = RptObject.DataSets.Find("cdsGLAccount") #For Account List
    
    if lDataSet2.RecordCount > 0:
        while not lDataSet2.eof:
            print(lDataSet2.FindField('CODE').AsString)
            print(lDataSet2.FindField('DESCRIPTION').AsString)
            print("===")
            lDataSet2.Next()
            
    if lDataSet.RecordCount > 0:
        while not lDataSet.eof:
            print("Month To Date")
            print(lDataSet.FindField('CODE').AsString)
            print(lDataSet.FindField('MTDDR').AsString)            
            print(lDataSet.FindField('MTDCR').AsString)
            print("Year To Date")
            print(lDataSet.FindField('CODE').AsString)
            print(lDataSet.FindField('YTDDR').AsString)
            print(lDataSet.FindField('YTDCR').AsString)
            print("===")
            lDataSet.Next()
    else:
        print ("Record Not Found")
    
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer       
    GetData()
    ComServer.Logout()
finally:    
    ComServer = None
    Common.KillApp()

Terms

Terms
#Updated 25 Jul 2023
import Common
       
def GetListData():
    lSQL = "SELECT * FROM TERMS "
    lSQL = lSQL + "WHERE ISACTIVE='T' "
    lSQL = lSQL + "ORDER BY CODE "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def PostData():
    BizObject = ComServer.BizObjects.Find("Terms")
    lMain = BizObject.DataSets.Find("MainDataSet")
    
    lDocKey = BizObject.FindKeyByRef("CODE", "90 Days")
        
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("CODE").value = "90 Days"
        lMain.FindField("DESCRIPTION").value = "Net 90 Days"
        lMain.FindField("TermDay").value = 90
        lMain.FindField("ISACTIVE").value = "T"
    else:
        BizObject.Params.Find("CODE").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.FindField("DESCRIPTION").value = "Net 90 Days - Edited"
        lMain.FindField("ISACTIVE").value = "F"
        
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    #Deleting only work if the record never use in other document
    BizObject = ComServer.BizObjects.Find("Terms")
    
    lDocKey = BizObject.FindKeyByRef("CODE", "90 Days")
        
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("CODE").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input")
       
    ComServer.Logout()   
finally:
    ComServer = None
    Common.KillApp()

Stock Adjustment

ST_SJ
#Updated 08 Jan 2024
import Common
import datetime
       
def GetListData():
    lSQL = "SELECT A.DOCNO, A.DOCDATE, A.DESCRIPTION, A.DOCAMT, "
    lSQL = lSQL + "A.AUTHBY, A.REASON, A.REMARK, "
    lSQL = lSQL + "B.ITEMCODE, B.DESCRIPTION ITEMDESC, B.QTY, B.UOM, B.UNITCOST, "
    lSQL = lSQL + "B.AMOUNT, B.REMARK1, B.REMARK2 "
    lSQL = lSQL + "FROM ST_AJ A "
    lSQL = lSQL + "INNER JOIN ST_AJDTL B ON (A.DOCKEY=B.DOCKEY) "
    lSQL = lSQL + "WHERE A.DocDate='20 Apr 2013' "
    lSQL = lSQL + "AND A.CANCELLED='F' "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def PostData():
    BizObject = ComServer.BizObjects.Find("ST_AJ")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
        
    lDocKey = BizObject.FindKeyByRef("DocNo", "--AJ Test--")
        
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("DocNo").AsString = "--AJ Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Description").AsString = "Stock Adjustment"

        #Insert Data - Detail - Increase Stock Qty   
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("ItemCode").AsString = "ANT"
        lDetail.FindField("Description").AsString = "ANTENA"
        lDetail.FindField("Qty").AsFloat = 2
        lDetail.FindField("UOM").AsString = "PCS"
        lDetail.FindField("UnitCOST").AsFloat = 80
        lDetail.FindField("Amount").AsFloat = 160
        lDetail.Post()
        
        #Insert Data - Detail - Reduce Stock Qty
        lDetail.Append()
        lDetail.FindField("Seq").value = 2
        lDetail.FindField("ItemCode").AsString = "HFK"
        lDetail.FindField("Description").AsString = "HANDS FREE KITS"
        lDetail.FindField("Qty").AsFloat = -3
        lDetail.FindField("UOM").AsString = "UNIT"
        lDetail.Post()        
    
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Description 123 的第一 🐱"

        #Delete all Detail
        while lDetail.RecordCount != 0:
            lDetail.Last()
            lDetail.Delete()
            
        #Append Detail
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("ItemCode").AsString = "BOM"
        lDetail.FindField("Description").AsString = "Bill Of Material"        
        lDetail.FindField("Qty").AsFloat = -1
        lDetail.FindField("UOM").AsString = "UNIT"
        lDetail.Post()
        
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    BizObject = ComServer.BizObjects.Find("ST_AJ")
        
    lDocKey = BizObject.FindKeyByRef("DocNo", "--AJ Test--")    
        
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input")
       
    ComServer.Logout()   
finally:
    ComServer = None
    Common.KillApp()

Sales Order

Sales Order
#Updated 08 Jan 2024
import Common
import datetime
       
def GetListData():
    lSQL = "SELECT A.DOCNO, A.DOCDATE, A.CODE, A.COMPANYNAME, A.DESCRIPTION, A.DOCAMT, "
    lSQL = lSQL + "A.AGENT, A.AREA, "
    lSQL = lSQL + "B.ITEMCODE, B.DESCRIPTION ITEMDESC, B.QTY, B.UOM, B.UNITPRICE, B.DISC,  "
    lSQL = lSQL + "B.TAX, B.TAXRATE, B.TAXAMT, B.TAXINCLUSIVE, B.AMOUNT "
    lSQL = lSQL + "FROM SL_SO A "
    lSQL = lSQL + "INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY) "
    lSQL = lSQL + "WHERE A.CODE='300-A0002' "
    lSQL = lSQL + "AND A.CANCELLED='F' "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def PostData():
    BizObject = ComServer.BizObjects.Find("SL_SO")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
    
    lDocKey = BizObject.FindKeyByRef("DocNo", "--SO Test--")
        
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("DocNo").AsString = "--SO Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Code").AsString = "300-C0001" #Customer Account
        lMain.FindField("CompanyName").AsString = "Cash Sales"
        #lMain.FindField("Address1").AsString = "" #Optional
        #lMain.FindField("Address2").AsString = "" #Optional
        #lMain.FindField("Address3").AsString = "" #Optional
        #lMain.FindField("Address4").AsString = "" #Optional
        #lMain.FindField("Phone1").AsString = ""   #Optional
        lMain.FindField("Description").AsString = "Sales Order"

        #Insert Data - Detail    
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("ItemCode").AsString = "ANT"
        lDetail.FindField("Description").AsString = "Sales Item B"
        lDetail.FindField("Qty").AsFloat = 2
        lDetail.FindField("UOM").AsString = "UNIT"
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 100
        lDetail.FindField("Amount").AsFloat = 200
        lDetail.FindField("TaxAmt").AsFloat = 12
        lDetail.Post()
    
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Description 123 的第一 🐱"

        #Delete all Detail
        while lDetail.RecordCount != 0:
            lDetail.Last()
            lDetail.Delete()
            
        #Append Detail
        lDetail.Append()
        lDetail.FindField("Seq").value = 1
        lDetail.FindField("ItemCode").AsString = "BOM"
        lDetail.FindField("Description").AsString = "Sales Item BOM"
        lDetail.FindField("Qty").AsFloat = 1
        lDetail.FindField("UOM").AsString = "UNIT"
        #lDetail.FindField("DISC").AsString        = "5%+3" #Optional(eg 5% plus 3 Discount)
        lDetail.FindField("Tax").AsString = "SV"
        lDetail.FindField("TaxRate").AsString = "6%"
        lDetail.FindField("TaxInclusive").value = 0
        lDetail.FindField("UnitPrice").AsFloat = 100
        lDetail.FindField("Amount").AsFloat = 100
        lDetail.FindField("TaxAmt").AsFloat = 6
        lDetail.Post()
        
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    BizObject = ComServer.BizObjects.Find("SL_SO")
    
    lDocKey = BizObject.FindKeyByRef("DocNo", "--SO Test--")
        
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input")
       
    ComServer.Logout()   
finally:
    ComServer = None
    Common.KillApp()

Sales.PriceHistory.RO

Sales.PriceHistory.RO Script
#Updated 01 Apr 2021
import win32com.client
import datetime

ComServer = win32com.client.Dispatch("SQLAcc.BizApp")

def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                    "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                    "ACC-0081.FDB") #Database Name

def GetData():
    RptObject = ComServer.RptObjects.Find('Sales.PriceHistory.RO')
    
    #RptObject.Params.Find("AgentData").Value            = #Not use if AllAgent is true
    #RptObject.Params.Find("TaxData").Value              = #Not use if AllTax is true
    #RptObject.Params.Find("CompanyCategoryData").Value  = #Not use if AllCompanyCategory is true
    RptObject.Params.Find("AllAgent").Value              = True
    RptObject.Params.Find("AllTax").Value                = True
    RptObject.Params.Find("AllShipper").Value            = True
    RptObject.Params.Find("AllArea").Value               = True
    RptObject.Params.Find("AllCompany").Value            = True
    RptObject.Params.Find("AllDocProject").Value         = True
    RptObject.Params.Find("AllItem").Value               = False
    RptObject.Params.Find("AllItemProject").Value        = True
    RptObject.Params.Find("AllLocation").Value           = True
    RptObject.Params.Find("AllCompanyCategory").Value    = True
    RptObject.Params.Find("AllBatch").Value              = True
    RptObject.Params.Find("AllTariff").Value             = True
    RptObject.Params.Find("AllStockGroup").Value         = True
    #RptObject.Params.Find("AreaData").Value             = #Not use if AllArea is true
    #RptObject.Params.Find("CategoryData").Value         = #Not use if AllTax is true
    #RptObject.Params.Find("CategoryTpl").Value          = #Not use if AllTax is true
    #RptObject.Params.Find("CompanyData").Value          = #Not use if AllTax is true
       
    lDateFrom = datetime.datetime(2021, 3, 1, 13, 0)
    lDateFrom.strftime('%m/%d/%Y')
    lDateTo = datetime.datetime(2021, 3, 31, 13, 0)
    lDateTo.strftime('%m/%d/%Y')
    
    RptObject.Params.Find("DateFrom").Value         = lDateFrom
    RptObject.Params.Find("DateTo").Value           = lDateTo

    RptObject.Params.Find("DoCN_SC").Value          = False #Include Credit Note
    #RptObject.Params.Find("DocProjectData").Value  = #Not use if AllDocProject is true
    RptObject.Params.Find("DoCS_CP").Value          = True #Include Cash Sales
    RptObject.Params.Find("DoDN_SD").Value          = False #Include Debit Note
    RptObject.Params.Find("DoDO_GR").Value          = False #Include Delivery Order
    RptObject.Params.Find("DoED_EG").Value          = False #Include Extra Delivery Order
    RptObject.Params.Find("DoIV_PI").Value          = False #Include Invoice
    RptObject.Params.Find("DoQT_PQ").Value          = False #Include Quotation
    RptObject.Params.Find("DoSO_PO").Value          = False #Include Sales Order
    #RptObject.Params.Find("ItemCode").Value        = #For Internal use only
    RptObject.Params.Find("ItemData").Value         = "ANT" + "\r" + "BOM"
    #RptObject.Params.Find("ItemProjectData").Value  = #Not use if AllItemProject is true
    #RptObject.Params.Find("LocationData").Value     = #Not use if AllLocation is true
    #RptObject.Params.Find("MaxRecords").Value       = #Not use if SelectMaxRecords is False
    RptObject.Params.Find("SelectDate").Value        = True
    RptObject.Params.Find("SelectMaxRecords").Value  = False
    #RptObject.Params.Find("GroupBy").Value          = #Only use if wanted to grouping
    RptObject.Params.Find("HasCategory").Value       = False
    #RptObject.Params.Find("ItemCategoryData").Value = #Not use if HasCategory is False
    #RptObject.Params.Find("BatchData").Value        = #Not use if AllBatch is true
    #RptObject.Params.Find("TariffData").Value       = #Not use if AllTariff is true
    #RptObject.Params.Find("ShipperData").Value      = #Not use if AllShipper is true
    RptObject.Params.Find("SortBy").Value            = "DocDate;DocNo"
    #RptObject.Params.Find("StockGroupData").Value   = #Not use if AllStockGroup is true
    #RptObject.Params.Find("SummaryInterval  
    
    RptObject.CalculateReport()

    lDataSet = RptObject.DataSets.Find("cdsMain")
        
    if lDataSet.RecordCount > 0:
        while not lDataSet.eof:
            for idx in range(lDataSet.Fields.Count):
                LFld = lDataSet.Fields.Items(idx).FieldName 
                print(LFld + " :"+ lDataSet.FindField(LFld).AsString)
            print("===")
            lDataSet.Next()
    else:
        print ("Record Not Found")
    
try:
    CheckLogin()      
    GetData()
finally:
    ComServer.Logout()
    ComServer = None

Get Edited Sales Invoice List

Get Edited Sales Invoice List Script
#Updated 19 Jul 2021
import win32com.client

ComServer = win32com.client.Dispatch("SQLAcc.BizApp")

def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("ADMIN", "ADMIN", #UserName, Password
                    "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                    "ACC-0081.FDB") #Database Name

def GetData():
    lSQL = "SELECT REFERENCE FROM AUDIT "
    lSQL = lSQL + "WHERE REF LIKE 'SL_IV%' "
    lSQL = lSQL + "AND UPDATEKIND='E' "
    lSQL = lSQL + "AND CAST(DOCDATETIME AS DATE) = '10 JUN 2021' "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)

    if lDataSet.RecordCount > 0:
        while not lDataSet.eof:
            DocNo = lDataSet.FindField('REFERENCE').AsString
            DocNo = DocNo.split(',')[0]
            DocNo = DocNo.split(':')[1]
    
            print(DocNo)
            print("===")
            lDataSet.Next()
    else:
        print ("Record Not Found")


    
try:
    CheckLogin()      
    GetData()
finally:
    ComServer.Logout()
    ComServer = None

SO to DO

Get Outstanding SO by SO Number transfer to DO Script
#Updated 29 Nov 2021
import win32com.client
import datetime

ComServer = win32com.client.Dispatch("SQLAcc.BizApp")

def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("FAUNG", "ADMIN", #UserName, Password
                    "D:\\Happy\\DB\\Default.DCF",
                   # "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0011.FDB") #Database Name

def PostData():
    lSQL = "SELECT Dockey, DocNo,Code, CompanyName, DocProject, Seq, DtlKey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount, DtlProject, "
    lSQL = lSQL + "Tax, TaxRate, TaxInclusive, TaxAmt, COALESCE(Sum(XFQty),0) XFQty, COALESCE((Qty-Sum(XFQty)), Qty) OSQty FROM ( "
    lSQL = lSQL + "SELECT A.Dockey, A.DocNo, A.Code, A.CompanyName, A.Project DocProject, "
    lSQL = lSQL + "B.DtlKey, B.Seq, B.ItemCode, B.Qty, B.UOM, B.UnitPrice, B.Disc, B.Amount, "
    lSQL = lSQL + "B.Tax, B.TaxRate, B.TaxInclusive, B.TaxAmt, B.Project DtlProject, C.Qty XFQty FROM SL_SO A "
    lSQL = lSQL + "INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY) "
    lSQL = lSQL + "LEFT JOIN ST_XTRANS C ON (A.DOCKEY=C.FROMDOCKEY AND B.DTLKEY=C.FROMDTLKEY "
    lSQL = lSQL + "                          AND C.FROMDOCTYPE='SO') "
    lSQL = lSQL + "WHERE A.DOCNO='SO-00044') "
    lSQL = lSQL + "GROUP BY Dockey, DocNo, Code, CompanyName, DocProject, Seq, Dtlkey, ItemCode, Qty, UOM, UnitPrice, Disc, "
    lSQL = lSQL +" Amount, DtlProject, Tax, TaxRate, TaxInclusive, TaxAmt "
    lSQL = lSQL + "HAVING COALESCE((Qty-Sum(XFQty)), Qty) >0 "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL) #Get Outstanding Qty for each itemcode
    #print("==="+ str(lDataSet.RecordCount))
    if lDataSet.RecordCount > 0:
        BizObject = ComServer.BizObjects.Find("SL_DO")
        lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
        lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data
    
        lDate = datetime.datetime(2021, 11, 29, 13, 0)
        lDate.strftime('%m/%d/%Y')
    
        BizObject.New();
        lMain.FindField("DocKey").value = -1
        lMain.FindField("DocNo").AsString = "--DO Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Code").AsString = lDataSet.FindField("Code").AsString #Customer Account
        lMain.FindField("CompanyName").AsString = lDataSet.FindField("CompanyName").AsString
        #lMain.FindField("Address1").AsString = "" #Optional
        #lMain.FindField("Address2").AsString = "" #Optional
        #lMain.FindField("Address3").AsString = "" #Optional
        #lMain.FindField("Address4").AsString = "" #Optional
        #lMain.FindField("Phone1").AsString = ""   #Optional
        lMain.FindField("Project").AsString = lDataSet.FindField("DocProject").AsString
        lMain.FindField("Description").AsString = "Delivery Order"

        #Insert Data - Detail
        while not lDataSet.eof:
            lDetail.Append()
            lDetail.FindField("DtlKey").value = -1
            lDetail.FindField("DocKey").value = -1
            lDetail.FindField("Seq").value = lDataSet.FindField("Seq").Value
            lDetail.FindField("ItemCode").AsString = lDataSet.FindField("ItemCode").AsString
            lDetail.FindField("UOM").AsString = lDataSet.FindField("UOM").AsString
            lDetail.FindField("Qty").AsFloat = lDataSet.FindField("OSQty").AsFloat # Transfer all balance Qty
            lDetail.FindField("DISC").AsString = lDataSet.FindField("DISC").AsString
            lDetail.FindField("Tax").AsString = lDataSet.FindField("Tax").AsString
            lDetail.FindField("TaxRate").AsString = lDataSet.FindField("TaxRate").AsString
            lDetail.FindField("TaxInclusive").value = lDataSet.FindField("TaxInclusive").value 
            lDetail.FindField("UnitPrice").AsFloat = lDataSet.FindField("UnitPrice").AsFloat 
            lDetail.FindField("Amount").AsFloat = lDataSet.FindField("Amount").AsFloat 
            lDetail.FindField("TaxAmt").AsFloat = lDataSet.FindField("TaxAmt").AsFloat
            lDetail.FindField("Project").AsString = lDataSet.FindField("DtlProject").AsString
            lDetail.FindField("FromDocType").AsString = "SO"; #From Document Type
            lDetail.FindField("FromDockey").AsFloat = lDataSet.FindField("Dockey").AsFloat;
            lDetail.FindField("FromDtlkey").AsFloat = lDataSet.FindField("DtlKey").AsFloat;
            lDetail.Post()
            lDataSet.Next()
    
        BizObject.Save()
        BizObject.Close()
    else :
        print ("Record Not Found")
try:
    CheckLogin()
    print ("Posting SO to DO")
    PostData()
    print ("Done")
finally:
    ComServer.Logout()
    ComServer = None

Stock Month End - Weighted Average

Stock Month End - Weighted Average Script
#Updated 30 Nov 2021
import win32com.client
import datetime

ComServer = win32com.client.Dispatch("SQLAcc.BizApp")

def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("FAUNG", "ADMIN", #UserName, Password
                    "D:\\Happy\\DB\\Default.DCF",
                   # "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0011.FDB") #Database Name

def GetData():
    #Accuracy : 90% - Due to the figure is base on last run Costing in SQL Accounting
    lSQL = "SELECT A.ItemCode, A.Location, A.Batch,  MAX(B.Seq) AS Seq, 2 AS CostingMethod "
    lSQL = lSQL + "FROM ST_TR A INNER JOIN ST_TR_WMA B ON (A.TRANSNO=B.TRANSNO) "
    lSQL = lSQL + "WHERE A.PostDate<='31 Jul 2020' "
    lSQL = lSQL + "GROUP BY A.ItemCode, A.Location, A.Batch "
    
    lDataSet1 = ComServer.DBManager.NewDataSet(lSQL) 

    if lDataSet1.RecordCount > 0:
        lDataSet1.First()
        while not lDataSet1.eof:
            lSQL = "SELECT A.TRANSNO, A.ItemCode, A.Location, A.Batch, B.UTDQty, B.UTDCost FROM ST_TR A "
            lSQL = lSQL + "INNER JOIN ST_TR_WMA B ON (A.TRANSNO=B.TRANSNO) "
            lSQL = lSQL + "WHERE A.ITEMCODE= '" + lDataSet1.FindField("ItemCode").AsString + "' "
            lSQL = lSQL + "AND B.SEQ= " + lDataSet1.FindField("Seq").AsString
            lSQL = lSQL + " AND A.LOCATION='" + lDataSet1.FindField("Location").AsString + "' "
            lSQL = lSQL + " AND A.BATCH='" + lDataSet1.FindField("Batch").AsString + "' "
            lSQL = lSQL + "AND B.UTDQty<>0 "
            lSQL = lSQL + "ORDER BY A.ItemCode, A.Location, A.Batch "
            
            #print(lSQL)
            lDataSet2 = ComServer.DBManager.NewDataSet(lSQL)
            if lDataSet2.RecordCount > 0:
                lDataSet2.First()
                print("ITEMCODE = "+lDataSet2.FindField("ITEMCODE").AsString)
                print("LOCATION = "+lDataSet2.FindField("LOCATION").AsString)
                print("BATCH = "+lDataSet2.FindField("BATCH").AsString)
                print("UTDQTY = "+lDataSet2.FindField("UTDQTY").AsString)
                print("UTDCOST = "+lDataSet2.FindField("UTDCOST").AsString)
                print("=====")
            else :
                print ("Detail Record Not Found")
            lDataSet1.Next()
            
    else :
        print ("Record Not Found")
try:
    CheckLogin()
    print ("Month End - WA")
    GetData()
    print ("Done")
finally:
    ComServer.Logout()
    ComServer = None

Stock Month End - FIFO

Stock Month End - FIFO Script
#Updated 15 Feb 2022
import win32com.client
import datetime

ComServer = win32com.client.Dispatch("SQLAcc.BizApp")

def CheckLogin():
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("FAUNG", "ADMIN", #UserName, Password
                    "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                    "ACC-0011.FDB") #Database Name

def GetData():
    #Accuracy : 90% - Due to the figure is base on last run Costing in SQL Accounting        

    lSQL = "SELECT A.TRANSNO, A.ItemCode, A.Location, A.Batch, B.QTY, B.COST FROM ST_TR A "
    lSQL = lSQL + "INNER JOIN ST_TR_FIFO B ON (A.TRANSNO=B.TRANSNO) "
    lSQL = lSQL + "WHERE B.COSTTYPE='U' "
    lSQL = lSQL + "AND A.PostDate<='31 Jul 2022' "
    lSQL = lSQL + "AND A.ITEMCODE ='ANT' "
    lSQL = lSQL + "AND B.Qty<>0 "
    lSQL = lSQL + "AND EXISTS (SELECT MAX(D.Seq) FROM ST_TR C "
    lSQL = lSQL + "            INNER JOIN ST_TR_FIFO D ON (C.TRANSNO=D.TRANSNO) "
    lSQL = lSQL + "            WHERE C.PostDate<='31 Jul 2022' "
    lSQL = lSQL + "            AND C.ItemCode ='ANT' "
    lSQL = lSQL + "            GROUP BY C.ItemCode, C.Location, C.Batch "
    lSQL = lSQL + "            HAVING B.SEQ=MAX(D.Seq) "
    lSQL = lSQL + "            ) "
    lSQL = lSQL + "ORDER BY A.ItemCode, A.Location, A.BATCH, A.TRANSNO "
    print(lSQL)
    lDataSet2 = ComServer.DBManager.NewDataSet(lSQL)
            
    if lDataSet2.RecordCount > 0: #Total Qty & Cost
        lDataSet2.First()
        while not lDataSet2.eof:
            print(" ")
            print("TRANSNO = "+lDataSet2.FindField("TRANSNO").AsString)
            print("ITEMCODE = "+lDataSet2.FindField("ITEMCODE").AsString)
            print("LOCATION = "+lDataSet2.FindField("LOCATION").AsString)
            print("BATCH = "+lDataSet2.FindField("BATCH").AsString)
            print("QTY = "+lDataSet2.FindField("QTY").AsString)
            print("COST = "+lDataSet2.FindField("COST").AsString)
            print("=====")
            print(" ")
            print("===Detail Cost===")
            lSQL = "SELECT TRANSNO, ITEMCODE, COSTSEQ, QTY, COST FROM ST_TR_FIFO "
            lSQL = lSQL + "WHERE ITEMCODE = '" + lDataSet2.FindField("ITEMCODE").AsString
            lSQL = lSQL + "' AND COSTTYPE='B' "
            lSQL = lSQL + "AND TRANSNO="+lDataSet2.FindField("TRANSNO").AsString
            lSQL = lSQL + " ORDER BY COSTSEQ"
                    
            lDataSet3 = ComServer.DBManager.NewDataSet(lSQL)

            if lDataSet3.RecordCount > 0: #Detail Cost
                lDataSet3.First()
                while not lDataSet3.eof:
                    print("TRANSNO = "+lDataSet3.FindField("TRANSNO").AsString)
                    print("ITEMCODE = "+lDataSet3.FindField("ITEMCODE").AsString)
                    print("COSTSEQ = "+lDataSet3.FindField("COSTSEQ").AsString)
                    print("QTY = "+lDataSet3.FindField("QTY").AsString)
                    print("COST = "+lDataSet3.FindField("COST").AsString)
                    print("D=====")
                    lDataSet3.Next()
            lDataSet2.Next()
    else :
        print("Detail Record Not Found")
                
try:
    CheckLogin()
    print ("Month End - FIFO")
    GetData()
    print ("Done")
finally:
    #ComServer.Logout()
    ComServer = None

Login 2 Database

Login 2 Database
#Updated 17 Mar 2022
import win32com.client
import datetime

ComServer = win32com.client.Dispatch("SQLAcc.BizApp")

def CheckLogin1():
    ComServer = None
    ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("FAUNG", "ADMIN", #UserName, Password
                    "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                    "ACC-0024.FDB") #Database Name


def CheckLogin2():
    ComServer = None
    ComServer = win32com.client.Dispatch("SQLAcc.BizApp")
    B = ComServer.IsLogin
    if B == True:
        ComServer.Logout()
    ComServer.Login("FAUNG", "ADMIN", #UserName, Password
                    "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                    "ACC-0015.FDB") #Database Name
        
def GetData():    
    lSQL = "SELECT COUNT(*) Nos FROM AR_CUSTOMER A WHERE A.CODE LIKE '%300%' "
    
    try:
        lDataSet1 = ComServer.DBManager.NewDataSet(lSQL) 
        Seq = 0
        if lDataSet1.RecordCount > 0:
            lDataSet1.First()
            Seq = lDataSet1.FindField("Nos").Value
            print(Seq)
        else :
            print ("Record Not Found")
        
    finally:
        lDataSet1 = None

    
try:
    print ("Login 1st DB")
    CheckLogin1()
    GetData()
    print ("Done 1st DB")
    print ("Login 2nd DB")
    CheckLogin2()
    GetData()
    print ("Done 2nd DB")    
finally:
    ComServer.Logout()
    ComServer = None
    print ("Done...")

Get Stock Qty Balance

Get Stock Qty Balance
#Updated 18 Jan 2024
import Common

def GetData():
    lSQL = "SELECT  ItemCode, Location, Batch, Sum(Qty) Qty  FROM ST_TR   "
    lSQL = lSQL + "WHERE PostDate<='31 Dec 2019' "
    lSQL = lSQL + "AND ITEMCODE ='ANT' "
    lSQL = lSQL + "GROUP BY ItemCode, Location, Batch "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    
    if lDataSet.RecordCount > 0:
        while not lDataSet.eof:
            print(lDataSet.FindField('ItemCode').AsString)
            print(lDataSet.FindField('Location').AsString)
            print(lDataSet.FindField('Batch').AsString)
            print(lDataSet.FindField('Qty').AsString)
            print("===")
            lDataSet.Next()
    else:
        print ("Record Not Found")
    
try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer      
    GetData()
finally:
    ComServer = None
    Common.KillApp()

Maintain Asset Item

Maintain Asset Item
#Updated 03 Oct 2023
import Common
import datetime
       
def GetListData():
    lSQL = "SELECT A.DOCNOEX, A.ACQUIREDATE, A.CODE, A.DESCRIPTION, A.ASSETGROUP, "
    lSQL = lSQL + "A.AGENT, A.AREA, A.COST, A.USEFULLIFE, A.DEPRRATE, A.RESIDUAL, "
    lSQL = lSQL + "B.POSTDATE, B.DESCRIPTION HISTORYDESC "
    lSQL = lSQL + "FROM FA_ITEM A "
    lSQL = lSQL + "INNER JOIN FA_ITEM_HISTORY B ON (A.Code=B.Code) "
    lSQL = lSQL + "WHERE A.STATUS=1 " #1 = Active 2 = InActive    
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def GetAutoKey(ACode):
    lSQL = "SELECT AUTOKEY FROM FA_ITEM "
    lSQL = lSQL + "WHERE Code= ' + Common.QuotedStr(ACode)
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
    return lDataSet.FindField("AutoKey").AsFloat

def PostData():
    BizObject = ComServer.BizObjects.Find("FA.Item.OPF")
    lMain = BizObject.DataSets.Find("Main") #lMain contains master data
    lProj = BizObject.DataSets.Find("Project") #lProj contains Project data
    lDepr = BizObject.DataSets.Find("DeprSche") #lDepr contains Depreciation Scheduler data
    lHist = BizObject.DataSets.Find("History") #lHist contains History data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
    
    lDocKey = GetAutoKey("--FA Test--")
        
    if lDocKey == 0:
        BizObject.New()
        lMain.FindField("Code").AsString = "--FA Test--"
        lMain.FindField("Description").AsString = "5ft Banquet Table"
        lMain.FindField("AcquireDate").value = lDate
        lMain.FindField("AssetGroup").AsString = "Default"
        lMain.FindField("Cost").AsFloat = 6190.50
        lMain.FindField("UsefulLife").AsFloat = 3
        lMain.FindField("Residual").AsFloat = 1
        lMain.FindField("DocNoEx").AsString = "IV-321578"
        lMain.FindField("Qty").AsFloat = 100

        #Insert Data - Depreciation Schedule
        lDate = datetime.datetime(2024, 9, 3, 13, 0)
        lDate.strftime('%m/%d/%Y')
        
        lDepr.Append()
        lDepr.FindField("SCHEDATE").value       = lDate
        lDepr.FindField("Description").AsString = "Depreciation 1/3"
        lDepr.FindField("AMOUNT").AsFloat       = 2063.17
        lDepr.Post()

        lDate = datetime.datetime(2025, 9, 3, 13, 0)
        lDate.strftime('%m/%d/%Y')
        
        lDepr.Append()
        lDepr.FindField("SCHEDATE").value       = lDate
        lDepr.FindField("Description").AsString = "Depreciation 2/3"
        lDepr.FindField("AMOUNT").AsFloat       = 2063.17
        lDepr.Post()

        lDate = datetime.datetime(2026, 9, 3, 13, 0)
        lDate.strftime('%m/%d/%Y')

        lDepr.Append()
        lDepr.FindField("SCHEDATE").value       = lDate
        lDepr.FindField("Description").AsString = "Depreciation 3/3"
        lDepr.FindField("AMOUNT").AsFloat       = 2063.16
        lDepr.Post()        

        #Insert Data - Hisory   
        lDate = datetime.datetime(2023, 1, 20, 13, 0)
        lDate.strftime('%m/%d/%Y')
        
        lHist.Append()
        lHist.FindField("PostDate").value = lDate
        lHist.FindField("Description").AsString = "Supplier ABC 4 Units"
        lHist.Post()
        
        lDate = datetime.datetime(2023, 2, 22, 13, 0)
        lDate.strftime('%m/%d/%Y')
        
        lHist.Append()
        lHist.FindField("PostDate").value = lDate
        lHist.FindField("Description").AsString = "Supplier XYZ Sdn Bhd 6 Units"
        lHist.Post()
        
        #Insert Data - Project
        lProj.Edit()
        lProj.FindField("Project").AsString = "KL"
        lProj.FindField("Rate").AsFloat = 40.00
        lProj.Post()
        
        lProj.Append()
        lProj.FindField("Project").AsString = "JB"
        lProj.FindField("Rate").AsFloat = 60.00
        lProj.Post()           
    else:
        BizObject.Params.Find("Autokey").AsString = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited 5ft Banquet Tables"

        #Delete all Project
        while lProj.RecordCount != 0:
            lProj.First()
            lProj.Delete()
            
        lProj.Append()
        lProj.FindField("Project").AsString = "----"
        lProj.FindField("Rate").AsFloat = 10.00
        lProj.Post()
        
        lProj.Append()
        lProj.FindField("Project").AsString = "KL"
        lProj.FindField("Rate").AsFloat = 40.00
        lProj.Post()

        lProj.Append()
        lProj.FindField("Project").AsString = "JB"
        lProj.FindField("Rate").AsFloat = 50.00
        lProj.Post()      
        
        #Insert Data - Hisory   
        lDate = datetime.datetime(2023, 2, 10, 13, 0)
        lDate.strftime('%m/%d/%Y')
        
        lHist.Append()
        lHist.FindField("PostDate").value = lDate
        lHist.FindField("Description").AsString = "1 of table leg broken"
        lHist.Post()        
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    BizObject = ComServer.BizObjects.Find("FA.Item.OPF")
    
    lDocKey = GetAutoKey("--FA Test--")
        
    if lDocKey == 0:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Autokey").AsString = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input")
       
    ComServer.Logout()   
finally:
    ComServer = None
    Common.KillApp()

Customer Payment

AR_PM
#Updated 04 Dec 2023
import Common
import datetime
       
def GetListData():
    lSQL = "SELECT A.DOCNO, A.DOCDATE, A.CODE, B.COMPANYNAME, A.DESCRIPTION, A.DOCAMT, "
    lSQL = lSQL + "A.AGENT, A.AREA, A.PAYMENTMETHOD "
    lSQL = lSQL + "FROM AR_PM A "
    lSQL = lSQL + "INNER JOIN AR_CUSTOMER B ON (A.CODE=B.CODE) "
    lSQL = lSQL + "WHERE A.CODE='300-A0002' "
    lSQL = lSQL + "AND A.CANCELLED='F' "
    
    lDataSet = ComServer.DBManager.NewDataSet(lSQL)
        
    Common.ShowResult(lDataSet)

def PostData():
    BizObject = ComServer.BizObjects.Find("AR_PM")
    lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data
    lDetail = BizObject.DataSets.Find("cdsKnockOff") #lDetail contains detail data
    
    lDate = datetime.datetime(2023, 2, 22, 13, 0)
    lDate.strftime('%m/%d/%Y')
    
    lDocKey = BizObject.FindKeyByRef("DocNo", "--PM Test--")
        
    if lDocKey is None:
        BizObject.New()
        lMain.FindField("DocNo").AsString = "--PM Test--"
        lMain.FindField("DocDate").value = lDate
        lMain.FindField("PostDate").value = lDate
        lMain.FindField("Code").AsString = "300-C0001" #Customer Account
        lMain.FindField("Description").AsString = "Payment for A/c"
        lMain.FindField("PaymentMethod").AsString = "325-000" #Bank or Cash Account
        lMain.FindField("ChequeNumber").AsString = ""
        lMain.FindField("BankCharge").AsFloat = 0
        lMain.FindField("DocAmt").AsFloat = 10000.00
        lMain.FindField("Cancelled").AsString = "F"    

        #Knock Off IV  
        V = ["IV", "--IV Test--"]  #DocType, DocNo
        if (lDetail.Locate("DocType;DocNo", V, False, False)) :
            lDetail.Edit()
            lDetail.FindField("KOAmt").AsFloat = 147.09 #Partial Knock off
            lDetail.FindField("KnockOff").AsString = "T"
            lDetail.Post()
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Edit()
        lMain.Edit()
        lMain.FindField("Description").AsString = "Edited Payment for A/c 的第一 🐱"

        #Knock Off IV  
        V = ["IV", "--IV Test--"]  #DocType, DocNo
        if (lDetail.Locate("DocType;DocNo", V, False, False)) :
            lDetail.Edit()
            lDetail.FindField("KOAmt").AsFloat = 200.09 #Partial Knock off
            lDetail.FindField("KnockOff").AsString = "T"
            lDetail.Post()
        
    try:
        BizObject.Save()          
    except Exception as e:
        print("Oops!", e)    
    BizObject.Close()
    print ("Posting/Update Done")

def DelData():
    #Deleting only work if the record never not knock off by Refund
    BizObject = ComServer.BizObjects.Find("AR_PM")
    
    lDocKey = BizObject.FindKeyByRef("DocNo", "--PM Test--")
        
    if lDocKey is None:
        print ("Record Not Found")
    else:
        BizObject.Params.Find("Dockey").Value = lDocKey
        BizObject.Open()
        BizObject.Delete()        
        print ("Deleting Done")

try:
    Common.CheckLogin()
    global ComServer
    ComServer = Common.ComServer
    GetListData()
    PostData()
    
    answer = input("Continue To delete?")
    if answer.lower() in ["y","yes"]:
        DelData()
    elif answer.lower() in ["n","no"]:
        print ("Deleting Aborted")
    else:
       print ("Invalid Input")
       
    ComServer.Logout()   
finally:
    ComServer = None
    Common.KillApp()


PHP

  • Tested PHP Version : 7.4.3/8.1.10
  • Add this in ..\xampp\php\php.ini
 [PHP_COM_DOTNET]
 extension=php_com_dotnet.dll
  • Grid.css file for example code
Grid.css file
body 
{
  margin: 10;
}
table {
  font-family: arial, sans-serif;
  border: 1px solid black;
  border-collapse: collapse;
  table-layout: auto;
}

td, th {
  border: 1px solid black;
  text-align: left;
  padding: 8px;
  white-space: nowrap;
}

tr:nth-child(even) {
  background-color: #dddddd;
}

Get Agent

Get Agent Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 01 May 2020<br>";

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
    
}

function GetData()
{
    global $ComServer;

    $lSQL = "SELECT * FROM AGENT 
	         WHERE CODE='HALIM'";

    $lDataSet = $ComServer->DBManager->NewDataSet($lSQL);

    if ($lDataSet->RecordCount > 0)
    {
        echo "Result : ";
        echo $lDataSet->FindField('Description')->AsString() . "<br>";
    }
    else
    {
        echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A") . " - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?>
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Get Agent"/> 
    </form> 
</body>
</html>

Add & Edit Agent

Add & Edit Agent Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 01 May 2020<br>";

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
    $BizObject = $ComServer->BizObjects->Find("Agent");
    $lMain = $BizObject->DataSets->Find("MainDataSet");
    
    $lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY");
	
	if ($lDocKey == null){
        $BizObject->New();
        $lMain->FindField("CODE")->value = "FAIRY";
        $lMain->FindField("DESCRIPTION")->value = "FAIRY TAIL";
	} else{
        $BizObject->Params->Find("CODE")->Value = $lDocKey;
        $BizObject->Open();
        $BizObject->Edit();
        $lMain->FindField("DESCRIPTION")->value = "FAIRY TAIL WIZARD";
	}
	try{
		$BizObject->Save();
		echo "Posting Done <br>";
	}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
	
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        PostData();
        echo date("d M Y h:i:s A") . " - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?>
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Add/Edit Agent"/> 
    </form> 
</body>
</html>

Delete Agent

Delete Agent Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 01 May 2020<br>";

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
    $BizObject = $ComServer->BizObjects->Find("Agent");
    $lMain = $BizObject->DataSets->Find("MainDataSet");
    
    $lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY");
	
	if ($lDocKey == null){
        echo "Record Not Found";
	} else{
        $BizObject->Params->Find("CODE")->Value = $lDocKey;
        $BizObject->Open();
        $BizObject->Delete();
        echo "Delete Done<br>";
	}	
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        PostData();
        echo date("d M Y h:i:s A") . " - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?>
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Delete Agent"/> 
    </form> 
</body>
</html>

Complete Post

SL_CS, AR_PM, SL_CN & AR_CN Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 01 May 2020<br>";
#This will doing following posting
#01. Cash Sales - SL_CS
#02. Sales Credit Note - SL_CN
#03. Customer Payment With Knock off - AR_PM
#04. Edit Credit Note Posted in Step 02 & Knock Off - AR_CN
#05. Customer Refund to Knock off Credit Note - AR_CF

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
    
}

function PostDataCS(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("SL_CS");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
	
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "--CS Test--";
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
    $lMain->FindField("CompanyName")->AsString = "Cash Sales";
    $lMain->FindField("Address1")->AsString = ""; #Optional
    $lMain->FindField("Address2")->AsString = ""; #Optional
    $lMain->FindField("Address3")->AsString = ""; #Optional
    $lMain->FindField("Address4")->AsString = ""; #Optional
    $lMain->FindField("Phone1")->AsString = "";   #Optional
    $lMain->FindField("Description")->AsString = "Sales";
	
    #Insert Data - Detail
    #For Tax Inclusive = True with override Tax Amount
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("Account")->AsString = "500-000"; #Sales Account
    $lDetail->FindField("Description")->AsString = "Sales Item A";
	
	$txt = <<<EOT
           Item A Line 1
           Item A Line 2
           EOT;
	
    $lDetail->FindField("Description3")->AsString = $txt;
    $lDetail->FindField("Qty")->AsFloat = 1;
    $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("UnitPrice")->AsFloat = 435;
    $lDetail->FindField("Amount")->AsFloat = 410.37; #Exclding GST Amt
    $lDetail->FindField("TaxAmt")->AsFloat = 24.63;

    $lDetail->DisableControls();
    $lDetail->FindField("TaxInclusive")->value = 1;
    $lDetail->EnableControls();    
    $lDetail->Post();
	
    #For Tax Inclusive = False with override Tax Amount
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 2;
    $lDetail->FindField("Account")->AsString = "500-000";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    $lDetail->FindField("Qty")->AsFloat = 1;
    $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("UnitPrice")->AsFloat = 94.43;
    $lDetail->FindField("Amount")->AsFloat = 94.43;
    $lDetail->FindField("TaxAmt")->AsFloat = 5.66;
    $lDetail->Post();
	
    #For With Item Code
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 3;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    #$lDetail->FindField("Account")->AsString = "500-000"; #If you wanted override the Sales Account Code
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->FindField("Qty")->AsFloat = 2;
    #$lDetail->FindField("DISC")->AsString = "5%+3"; #Optional(eg 5% plus 3 Discount)
    $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("UnitPrice")->AsFloat = 100;
    $lDetail->FindField("Amount")->AsFloat = 200;
    $lDetail->FindField("TaxAmt")->AsFloat = 12;
    $lDetail->Post();
	
    $BizObject->Save();
    $BizObject->Close();	
}

function PostDataPM(){
	global $ComServer;
	
    $BizObject = $ComServer->BizObjects->Find("AR_PM");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsKnockOff"); #lDetail contains detail data
	
    $BizObject->New();
    $lMain->FindField("DOCKEY")->Value = -1;
    $lMain->FindField("DocNo")->AsString = "--PM Test--";
    $lMain->FindField("CODE")->AsString = "300-C0001"; #Customer Account
    $lMain->FindField("DocDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Payment for A/c";
    $lMain->FindField("PaymentMethod")->AsString = "320-000"; #Bank or Cash Account
    $lMain->FindField("ChequeNumber")->AsString = "";
    $lMain->FindField("BankCharge")->AsFloat = 0;
    $lMain->FindField("DocAmt")->AsFloat = 200.00;
    $lMain->FindField("Cancelled")->AsString = "F";

    #Knock Off IV  
    $V = array("IV", "--CS Test--");  #DocType, DocNo
    
    if ($lDetail->Locate("DocType;DocNo", $V, False, False)) {
        $lDetail->Edit();
        $lDetail->FindField("KOAmt")->AsFloat = 147.09; #Partial Knock off
        $lDetail->FindField("KnockOff")->AsString = "T";
        $lDetail->Post();
	}	
    $BizObject->Save();
    $BizObject->Close();
}

function PostDataCN(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("SL_CN");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
	
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "--CN Test--";
    $lMain->FindField("DocDate")->value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("Code")->AsString = "300-C0001";
    $lMain->FindField("CompanyName")->AsString = "Cash Sales";
    $lMain->FindField("Address1")->AsString = "";
    $lMain->FindField("Address2")->AsString = "";
    $lMain->FindField("Address3")->AsString = "";
    $lMain->FindField("Address4")->AsString = "";
    $lMain->FindField("Phone1")->AsString = "";
    $lMain->FindField("Description")->AsString = "Sales Returned";
	
    #For With Item Code
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    $lDetail->FindField("Description2")->AsString = "Product Spoil"; #Reason
    $lDetail->FindField("Remark1")->AsString = "--CS Test--";   #Invoice No
    $lDetail->FindField("Remark2")->AsString = "20 Apr 2020";   #Invoice Date
    $lDetail->FindField("Qty")->AsFloat = 1;
    $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("UnitPrice")->AsFloat = 100;
    $lDetail->FindField("Amount")->AsFloat = 100;
    $lDetail->FindField("TaxAmt")->AsFloat = 6;
    $lDetail->Post();
	
    $BizObject->Save();
    $BizObject->Close();	
}

function PostKnockIVCN(){
	global $ComServer;
	
    $BizObject = $ComServer->BizObjects->Find("AR_CN");
    $lMain = $BizObject->DataSets->Find("MainDataSet");
    $lDetail = $BizObject->DataSets->Find("cdsKnockOff");
	
    #Find CN Number
    $lDocNo = "--CN Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
    $BizObject->Params->Find("DocKey")->AsString = $lDocKey;
	
	if ($lDocKey != null){
        $BizObject->Open();
        $BizObject->Edit();
        $lMain->Edit();
        
        #Knock Off IV        
        $V = array("IV", "--CS Test--");  #DocType, DocNo
        
        if ($lDetail->Locate("DocType;DocNo", $V, False, False)){
            $lDetail->Edit();
            $lDetail->FindField("KOAmt")->AsFloat = 100; #Partial Knock off
            $lDetail->FindField("KnockOff")->AsString = "T";
            $lDetail->Post();
		}
        $BizObject->Save();
        $BizObject->Close();		
	}
}

function PostDataCF(){
	global $ComServer;
	
    $BizObject = $ComServer->BizObjects->Find("AR_CF");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsKnockOff"); #lDetail contains detail data
	
    $BizObject->New();
    $lMain->FindField("DOCKEY")->Value = -1;
    $lMain->FindField("DocNo")->AsString = "--CF Test--";
    $lMain->FindField("CODE")->AsString = "300-C0001"; #Customer Account
    $lMain->FindField("DocDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->Value = "04/23/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Payment for A/c";
    $lMain->FindField("PaymentMethod")->AsString = "320-000"; #Bank or Cash Account
    $lMain->FindField("ChequeNumber")->AsString = "";
    $lMain->FindField("BankCharge")->AsFloat = 0;
    $lMain->FindField("DocAmt")->AsFloat = 6;
    $lMain->FindField("Cancelled")->AsString = "F";

    #Knock Off CN 
    $V = array("CN", "--CN Test--");  #DocType, DocNo
    
    if ($lDetail->Locate("DocType;DocNo", $V, False, False)) {
        $lDetail->Edit();
        $lDetail->FindField("KOAmt")->AsFloat = 4; #Partial Knock off
        $lDetail->FindField("KnockOff")->AsString = "T";
        $lDetail->Post();
	}	
    $BizObject->Save();
    $BizObject->Close();
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Posting Cash Sales<br>";
        PostDataCS();
        echo date("d M Y h:i:s A")." - Posting Customer Payment<br>";
        PostDataPM();
        echo date("d M Y h:i:s A")." - Posting Sales Credit Note<br>";
        PostDataCN();
        echo date("d M Y h:i:s A")." - Posting Knock Off Sales Credit Note<br>";
        PostKnockIVCN();
        echo date("d M Y h:i:s A")." - Posting Customer Refund<br>";
        PostDataCF();
        echo date("d M Y h:i:s A")." - Posting Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Complete Post"/> 
    </form> 
</body>
</html>

Get Invoice Next Number

Get Invoice Next Number Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 01 May 2020<br>";
#This action to Get Next Number for Customer Invoice

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
    
}

function GetData(){
	global $ComServer;
	
    $lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A 
	         INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY)
			 WHERE A.DOCTYPE='IV'
			 AND A.DESCRIPTION='Customer Invoice'
			 AND A.STATESET=1
			 ";
	
	$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);

    if ($lDataSet->RecordCount > 0) {
		$lDataSet->First();
        $fmt = $lDataSet->FindField('Format')->AsString();
        $NextNo = $lDataSet->FindField('NEXTNUMBER')->AsFloat();
		
        echo date("d M Y h:i:s A")." Format in SQLAcc : " . str_ireplace("d","s", $fmt)."<br>";
        $fmt= str_ireplace(".","'0", $fmt);
        echo date("d M Y h:i:s A")." Format in PHP : " . str_ireplace("d","s", $fmt)."<br>";
		echo date("d M Y h:i:s A")." Output in PHP : " .sprintf($fmt,$NextNo)."<br>";
	}else {
    echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Get Doc Number"/> 
    </form> 
</body>
</html>

Add & Edit AR_Customer

Add & Edit AR_Customer Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 11 Jun 2020<br>";

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\\eStream\\SQLAccounting\\Share\\Default.DCF", #DCF File 
                      "ACC-0035.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
    $BizObject = $ComServer->BizObjects->Find("AR_Customer");
    $lMain = $BizObject->DataSets->Find("MainDataSet");
	$lDtl  = $BizObject->DataSets->Find("cdsBranch");
    
    $lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY");
	
	if ($lDocKey == null){
        $BizObject->New();
        $lMain->FindField("CODE")->value = "FAIRY";
        $lMain->FindField("CompanyName")->value = "FAIRY TAIL";
		
        $lDtl->Edit(); #For 1St Branch
        $lDtl->FindField("BranchName")->AsString  = "BILLING";
        $lDtl->FindField("Address1")->AsString    = "Address1";
        $lDtl->FindField("Address2")->AsString    = "Address2";
        $lDtl->FindField("Address3")->AsString    = "Address3";
        $lDtl->FindField("Address4")->AsString    = "Address4"; 
        $lDtl->FindField("Attention")->AsString   = "Attention"; 
        $lDtl->FindField("Phone1")->AsString      = "Phone1";
        $lDtl->FindField("Fax1")->AsString        = "Fax1";
        $lDtl->FindField("Email")->AsString       = "EmailAddress";
        $lDtl->Post();

        $lDtl->Append(); #For 2nd Branch
        $lDtl->FindField("BranchName")->AsString  = "Branch1";
        $lDtl->FindField("Address1")->AsString    = "DAddress1";
        $lDtl->FindField("Address2")->AsString    = "DAddress2";
        $lDtl->FindField("Address3")->AsString    = "DAddress3";
        $lDtl->FindField("Address4")->AsString    = "DAddress4";  
        $lDtl->FindField("Attention")->AsString   = "DAttention";  
        $lDtl->FindField("Phone1")->AsString      = "DPhone1";
        $lDtl->FindField("Fax1")->AsString        = "DFax1";
        $lDtl->FindField("Email")->AsString       = "DEmailAddress";
        $lDtl->Post();	
	} else{
        $BizObject->Params->Find("CODE")->Value = $lDocKey;
        $BizObject->Open();
        $BizObject->Edit();
        $lMain->FindField("CompanyName")->value = "FAIRY TAIL WIZARD";
		
		$r = $lDtl->RecordCount();
		$x = 1;
		while ($x <= $r ){
			$lDtl->First();
            $lDtl->Delete();
			$x++;
		}
		
        #Insert back with new Information
        $lDtl->Edit(); #For 1St Branch
        $lDtl->FindField("BranchName")->AsString  = "BILLING"; #Make sure this always same as b4 delete data
        $lDtl->FindField("Address1")->AsString    = "New Address1";
        $lDtl->FindField("Address2")->AsString    = "New Address2";
        $lDtl->FindField("Address3")->AsString    = "New Address3";
        $lDtl->FindField("Address4")->AsString    = "New Address4";  
        $lDtl->FindField("Attention")->AsString   = "New Attention";  
        $lDtl->FindField("Phone1")->AsString      = "New Phone1";
        $lDtl->FindField("Fax1")->AsString        = "New Fax1";
        $lDtl->FindField("Email")->AsString       = "New EmailAddress";
        $lDtl->Post();

        $lDtl->Append(); #For 2nd Branch
        $lDtl->FindField("BranchName")->AsString  = "Branch1"; #Make sure this always same as b4 delete data
        $lDtl->FindField("Address1")->AsString    = "New DAddress1";
        $lDtl->FindField("Address2")->AsString    = "New DAddress2";
        $lDtl->FindField("Address3")->AsString    = "New DAddress3";
        $lDtl->FindField("Address4")->AsString    = "New DAddress4"; 
        $lDtl->FindField("Attention")->AsString   = "New DAttention";  
        $lDtl->FindField("Phone1")->AsString      = "New DPhone1";
        $lDtl->FindField("Fax1")->AsString        = "New DFax1";
        $lDtl->FindField("Email")->AsString       = "New DEmailAddress";
        $lDtl->Post();	
	
	}
	try{
		$BizObject->Save();
		echo "Posting Done <br>";
	}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
	
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        PostData();
        echo date("d M Y h:i:s A") . " - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?>
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Add/Edit AR Customer"/> 
    </form> 
</body>
</html>

Get Stock List

Get Stock List Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 22 Jun 2020<br>";
#This action to Get Stock Item List

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
    
}

function GetData(){
	global $ComServer;
	
    $lSQL = "SELECT A.*, B.UOM, B.RATE, B.REFCOST, B.REFPRICE, B.ISBASE FROM ST_ITEM A 
	         INNER JOIN ST_ITEM_UOM B ON (A.CODE=B.CODE) 
			 WHERE A.ISACTIVE='T'
			 ";
	
	$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);

    if ($lDataSet->RecordCount > 0) {
		$lDataSet->First();
		$fc = $lDataSet->Fields->Count-1;
		echo "<table>";
		echo "<tr>";
		for ($x = 0; $x <= $fc; $x++) {
			#Insert Header
			echo "<td>".$lDataSet->Fields->Items($x)->FieldName()."</td>"; 
		}
		echo "</tr>";
		
		#Looping Dataset
		while (! $lDataSet->Eof()){
			echo "<tr>";
		    for ($x = 0; $x <= $fc; $x++) {
				$lFN = $lDataSet->Fields->Items($x)->FieldName();
			    echo "<td>".$lDataSet->FindField($lFN)->AsString()."</td>"; 
		    }
		    echo "</tr>";
			$lDataSet->Next();
		}	
		echo "</table>"."<br>";		
	}else {
    echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Get Stock list"/> 
    </form> 
</body>
</html>

AR_IV

AR_IV Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 24 Jun 2020<br>";
#This action to Post Customer Invoice

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0070.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("AR_IV");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
	
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "--IV Test--";
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
    $lMain->FindField("Description")->AsString = "Sales";
	
    #Insert Data - Detail
    #For Tax Inclusive = True with override Tax Amount
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("Account")->AsString = "500-000"; #Sales Account
    $lDetail->FindField("Description")->AsString = "Sales Item A";
    $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("Amount")->AsFloat = 410.37; #Exclding GST Amt
    $lDetail->FindField("TaxAmt")->AsFloat = 24.63;

    $lDetail->DisableControls();
    $lDetail->FindField("TaxInclusive")->value = 1;
    $lDetail->EnableControls();    
    $lDetail->Post();
	
    #For Tax Inclusive = False with override Tax Amount
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 2;
    $lDetail->FindField("Account")->AsString = "500-000";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    $lDetail->FindField("Tax")->AsString = "SV";
    $lDetail->FindField("TaxRate")->AsString = "6%";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("Amount")->AsFloat = 94.43;
    $lDetail->FindField("TaxAmt")->AsFloat = 5.66;
    $lDetail->Post();
	
    $BizObject->Save();
    $BizObject->Close();	
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
		PostData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Post Customer Invoice"/> 
    </form> 
</body>
</html>

Get Outstanding Invoice List

Get Outstanding Invoice List Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 24 Jun 2020<br>";
#This action to Get Outstanding Invoice List

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
    
}

function GetData(){
	global $ComServer;
	
    $lSQL = "SELECT A.*, B.COMPANYNAME, (A.DOCAMT-A.PAYMENTAMT) OUTSTANDING  FROM AR_IV A
	         INNER JOIN AR_CUSTOMER B ON (A.CODE=B.CODE) 
			 WHERE (A.DOCAMT-A.PAYMENTAMT)<>0
			 AND CANCELLED='F'
			 ";
	
	$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);

    if ($lDataSet->RecordCount > 0) {
		$lDataSet->First();
		$fc = $lDataSet->Fields->Count-1;
		echo "<table>";
		echo "<tr>";
		for ($x = 0; $x <= $fc; $x++) {
			#Insert Header
			echo "<td>".$lDataSet->Fields->Items($x)->FieldName()."</td>"; 
		}
		echo "</tr>";
		
		#Looping Dataset
		while (! $lDataSet->Eof()){
			echo "<tr>";
		    for ($x = 0; $x <= $fc; $x++) {
				$lFN = $lDataSet->Fields->Items($x)->FieldName();
			    echo "<td>".$lDataSet->FindField($lFN)->AsString()."</td>"; 
		    }
		    echo "</tr>";
			$lDataSet->Next();
		}	
		echo "</table>"."<br>";		
	}else {
    echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Get Outstanding Invoice List"/> 
    </form> 
</body>
</html>

Stock Month End - Weighted Average

Stock Month End - Weighted Average Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 01 Dec 2021<br>";


$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
    
}

function GetData(){
	#Accuracy : 90% - Due to the figure is base on last run Costing in SQL Accounting
	global $ComServer;
	
    $lSQL = "SELECT A.ItemCode, A.Location, A.Batch,  MAX(B.Seq) AS Seq, 2 AS CostingMethod
	         FROM ST_TR A INNER JOIN ST_TR_WMA B ON (A.TRANSNO=B.TRANSNO) 
			 WHERE A.PostDate<='31 Jul 2020'
			 AND A.ITEMCODE='Adj_Voucher'
			 GROUP BY A.ItemCode, A.Location, A.Batch
			 ";
	
	$lDataSet1 = $ComServer->DBManager->NewDataSet($lSQL);
	
	$Seq = "";
	$lDataSet1->First();
	while (! $lDataSet1->Eof()){
		$Seq = $Seq.$lDataSet1->FindField("SEQ")->AsString .",";
		$lDataSet1->Next();
	}

    $lSQL = "SELECT A.TRANSNO, A.ItemCode, A.Location, A.Batch, B.UTDQty, B.UTDCost FROM ST_TR A
	         INNER JOIN ST_TR_WMA B ON (A.TRANSNO=B.TRANSNO) 
			 WHERE A.PostDate<='31 Jul 2020'
			 AND A.ITEMCODE='Adj_Voucher'
			 AND B.SEQ IN (".substr_replace($Seq ,"",-1).") 
			 AND B.UTDQty<>0 
			 ORDER BY A.ItemCode, A.Location, A.Batch
			 ";
		 
	$lDataSet2 = $ComServer->DBManager->NewDataSet($lSQL);		 
			 
    if ($lDataSet2->RecordCount > 0) {
		$lDataSet2->First();
		$fc = $lDataSet2->Fields->Count-1;
		echo "<table>";
		echo "<tr>";
		for ($x = 0; $x <= $fc; $x++) {
			#Insert Header
			echo "<td>".$lDataSet2->Fields->Items($x)->FieldName()."</td>"; 
		}
		echo "</tr>";
		
		#Looping Dataset
		while (! $lDataSet2->Eof()){
			echo "<tr>";
		    for ($x = 0; $x <= $fc; $x++) {
				$lFN = $lDataSet2->Fields->Items($x)->FieldName();
			    echo "<td>".$lDataSet2->FindField($lFN)->AsString()."</td>"; 
		    }
		    echo "</tr>";
			$lDataSet2->Next();
		}	
		echo "</table>"."<br>";		
	}else {
    echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Month End - WA"/> 
    </form> 
</body>
</html>

Stock Month End - FIFO

Stock Month End - FIFO Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 16 Jul 2020<br>";
#This action to Get Outstanding Invoice List

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
    
}

function GetData(){
	#Accuracy : 90% - Due to the figure is base on last run Costing in SQL Accounting
	global $ComServer;
	
    $lSQL = "SELECT  A.ItemCode, A.Location, A.Batch, MAX(B.Seq) AS Seq, 1 AS CostingMethod 
	         FROM ST_TR A INNER JOIN ST_TR_FIFO B ON (A.TRANSNO=B.TRANSNO) 
			 WHERE A.PostDate<='31 Jul 2020'
			 AND A.ItemCode IN ('ANT', 'COVER', 'BOM')
			 GROUP BY A.ItemCode, A.Location, A.Batch
			 ";
	
	$lDataSet1 = $ComServer->DBManager->NewDataSet($lSQL);
	
	$Seq = "";
	$lDataSet1->First();
	while (! $lDataSet1->Eof()){
		$Seq = $Seq.$lDataSet1->FindField("SEQ")->AsString .",";
		$lDataSet1->Next();
	}

    $lSQL = "SELECT A.TRANSNO, A.ItemCode, A.Location, A.Batch, B.QTY, B.COST FROM ST_TR A 
	         INNER JOIN ST_TR_FIFO B ON (A.TRANSNO=B.TRANSNO) 
			 WHERE B.COSTTYPE='U' 
			 AND A.PostDate<='31 Jul 2020'
			 AND B.SEQ IN (".substr_replace($Seq ,"",-1).") 
			 AND A.ItemCode IN ('ANT1.0', 'COVER', 'BOM')
			 AND B.Qty<>0 
			 ORDER BY A.ItemCode, A.Location, A.Batch
			 ";
	 
	$lDataSet2 = $ComServer->DBManager->NewDataSet($lSQL);		 
			 
    if ($lDataSet2->RecordCount > 0) {
		$lDataSet2->First();
		$fc = $lDataSet2->Fields->Count-1;
		echo "<table>";
		echo "<tr>";
		for ($x = 0; $x <= $fc; $x++) {
			#Insert Header
			echo "<td>".$lDataSet2->Fields->Items($x)->FieldName()."</td>"; 
		}
		echo "</tr>";
		
		#Looping Dataset
		while (! $lDataSet2->Eof()){
			echo "<tr>";
		    for ($x = 0; $x <= $fc; $x++) {
				$lFN = $lDataSet2->Fields->Items($x)->FieldName();
			    echo "<td>".$lDataSet2->FindField($lFN)->AsString()."</td>"; 
		    }
		    echo "</tr>";
			$lDataSet2->Next();
		}	
		echo "</table>"."<br>";		
	}else {
    echo "Record Not Found";
    }
	
	#FIFO Detail Key to link with $lDataSet2 & $lDataSet3 is TRANSNO
	$Seq = "";
	$lDataSet2->First();
	while (! $lDataSet2->Eof()){
		$Seq = $Seq.$lDataSet2->FindField("TRANSNO")->AsString .",";
		$lDataSet2->Next();
	}

    $lSQL = "SELECT  TransNo, Cost, SUM(Qty) AS Qty, MIN(CostSeq) AS Seq FROM ST_TR_FIFO 
	         WHERE CostType='B' 
			 AND TRANSNO IN (".substr_replace($Seq ,"",-1).") 
			 GROUP BY TransNo, Cost
			 ";
	 
	$lDataSet3 = $ComServer->DBManager->NewDataSet($lSQL);

    if ($lDataSet3->RecordCount > 0) {
		$lDataSet3->First();
		$fc = $lDataSet3->Fields->Count-1;
		echo "<table>";
		echo "<tr>";
		for ($x = 0; $x <= $fc; $x++) {
			#Insert Header
			echo "<td>".$lDataSet3->Fields->Items($x)->FieldName()."</td>"; 
		}
		echo "</tr>";
		
		#Looping Dataset
		while (! $lDataSet3->Eof()){
			echo "<tr>";
		    for ($x = 0; $x <= $fc; $x++) {
				$lFN = $lDataSet3->Fields->Items($x)->FieldName();
			    echo "<td>".$lDataSet3->FindField($lFN)->AsString()."</td>"; 
		    }
		    echo "</tr>";
			$lDataSet3->Next();
		}	
		echo "</table>"."<br>";		
	}else {
    echo "Record Not Found";
    }	
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        #$ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Month End - FIFO"/> 
    </form> 
</body>
</html>

Add & Edit Stock Item

Add & Edit Stock Item Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 05 Aug 2020<br>";
$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("ST_ITEM");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); 
    $lUOM  = $BizObject->DataSets->Find("cdsUOM"); 
	$lBarcode = $BizObject->DataSets->Find("cdsBarcode"); 
	
	$lDocKey = $BizObject->FindKeyByRef("CODE", "FAIRY-PHP");

	if ($lDocKey == null){
        $BizObject->New();
        $lMain->FindField("CODE")->AsString = "FAIRY-PHP";
        $lMain->FindField("DESCRIPTION")->AsString = "FAIRY TAIL";
        $lMain->FindField("STOCKGROUP")->AsString = "DEFAULT";
        $lMain->FindField("STOCKCONTROL")->AsString = "T";
        $lMain->FindField("ISACTIVE")->AsString = "T";

        $lUOM->Edit(); #For 1St UOM
        $lUOM->FindField("UOM")->AsString = "PCS";
        $lUOM->FindField("Rate")->AsFloat = 1;
        $lUOM->FindField("RefCost")->AsFloat = 10.2;
        $lUOM->FindField("RefPrice")->AsFloat = 25;
        $lUOM->Post();

        $lUOM->Append(); #For 2nd UOM
        $lUOM->FindField("UOM")->AsString = "CTN";
        $lUOM->FindField("Rate")->AsFloat = 12;
        $lUOM->FindField("RefCost")->AsFloat = 102;
        $lUOM->FindField("RefPrice")->AsFloat = 240;
        $lUOM->Post();

        $lBarcode->Append(); #For 1st UOM Barcode
        $lBarcode->FindField("BARCODE")->AsString = "123456789";
		$lBarcode->FindField("UOM")->AsString = "PCS";
        $lBarcode->Post();
		
        $lBarcode->Append(); #For 2nd UOM Barcode
        $lBarcode->FindField("BARCODE")->AsString = "987654321";
		$lBarcode->FindField("UOM")->AsString = "CTN";
        $lBarcode->Post();		
	} else{
        $BizObject->Params->Find("Dockey")->AsString = $lDocKey;
        $BizObject->Open();
        $BizObject->Edit();
        $lMain->FindField("DESCRIPTION")->AsString = "FAIRY TAIL WIZARD";
		
		$r = $lUOM->RecordCount();
		$x = 1;
		while ($x <= $r ){
			$lUOM->First();
            $lUOM->Delete();
			$x++;
		}
		
		$r = $lBarcode->RecordCount();
		$x = 1;
		while ($x <= $r ){
			$lBarcode->First();
            $lBarcode->Delete();
			$x++;
		}
		
        $lUOM->Append(); #For 1St UOM
        $lUOM->FindField("UOM")->AsString = "PCS"; #Make sure this always same as b4 delete data
        $lUOM->FindField("Rate")->AsFloat = 1; #Make sure this always same as b4 delete data
        $lUOM->FindField("RefCost")->AsFloat = 22.3;
        $lUOM->FindField("RefPrice")->AsFloat = 52;
        $lUOM->Post();

        $lUOM->Append(); #For 2nd UOM
        $lUOM->FindField("UOM")->AsString = "CTN"; #Make sure this always same as b4 delete data
        $lUOM->FindField("Rate")->AsFloat = 12; #Make sure this always same as b4 delete data
        $lUOM->FindField("RefCost")->AsFloat = 102.5;
        $lUOM->FindField("RefPrice")->AsFloat = 260.45;
        $lUOM->Post();	
		
        $lBarcode->Append(); #For 1st UOM Barcode
        $lBarcode->FindField("BARCODE")->AsString = "456321789";
		$lBarcode->FindField("UOM")->AsString = "PCS";
        $lBarcode->Post();
		
        $lBarcode->Append(); #For 2nd UOM Barcode
        $lBarcode->FindField("BARCODE")->AsString = "321456987";
		$lBarcode->FindField("UOM")->AsString = "CTN";
        $lBarcode->Post();			
	}
	
	try{
        $BizObject->Save();
        $BizObject->Close();
	}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    }	
}


if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Posting Stock Item<br>";
        PostData();
		echo date("d M Y h:i:s A")." - Done<br>";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Add & Edit Stock Item"/> 
    </form> 
</body>
</html>

Add Stock Issue

Add Stock Issue Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 21 Oct 2020<br>";
$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "D:\Happy\DB\Default.DCF", #"C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
    
}

function CheckLogin1()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    
}

function PostData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("ST_IS");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); 
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); 
	
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "--IS Test--";
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Stock Issue";
	
    #Insert Data - Detail	
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    $lDetail->FindField("Qty")->AsFloat = 2;
    $lDetail->FindField("UOM")->AsString = "BOX";
    $lDetail->Post();

    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 2;
    $lDetail->FindField("ItemCode")->AsString = "N-CHARGER";
    $lDetail->FindField("Description")->AsString = "NOKIA CHARGER";
    $lDetail->FindField("Qty")->AsFloat = 5;
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->Post();
	
    $BizObject->Save();
    $BizObject->Close();
	
	try{
        $BizObject->Save();
        $BizObject->Close();
	}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    }	
}


if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin1();
        echo date("d M Y h:i:s A")." - Begin Posting<br>";
        PostData();
		echo date("d M Y h:i:s A")." - Done<br>";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Add Stock Issue"/> 
    </form> 
</body>
</html>

Add Points

Add Points Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 30 Oct 2020<br>";
$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("Sales.Points.OPF");
    $lMain = $BizObject->DataSets->Find("Main"); #lMain contains master data
	
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "--Point Test--";
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
    $lMain->FindField("CompanyName")->AsString = "Cash Sales";
	$lMain->FindField("DESCRIPTION")->AsString = "Points Earn";
    $lMain->FindField("FromDocType")->AsString = "CS";
	$lMain->FindField("FromDocNo")->AsString = "CS-01234";
	$lMain->FindField("FROMDOCAMT")->AsFloat = 100.10;
	$lMain->FindField("Points")->AsFloat = 10;
	
	try{
		$BizObject->Save();
	}catch (Exception $e) {
		echo 'Caught exception: ',  $e->getMessage(), "\n";
    }
}


if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Posting Point<br>";
        PostData();
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Post Point"/> 
    </form> 
</body>
</html>

AR_CN

AR_CN Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 12 Dec 2020<br>";
#This action to Post Customer Credit Note

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0040.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("AR_CN");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
	$lKO = $BizObject->DataSets->Find("cdsKnockOff");
	
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "--CN Test1--";
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
    $lMain->FindField("Description")->AsString = "Sales";
	
    #Insert Data - Detail
    #For Tax Inclusive = True with override Tax Amount
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("Account")->AsString = "510-000"; #Sales Return Account
    $lDetail->FindField("Description")->AsString = "Return Item A";
    $lDetail->FindField("Tax")->AsString = "";
    $lDetail->FindField("TaxRate")->AsString = "";
    $lDetail->FindField("TaxInclusive")->value = 0;
    $lDetail->FindField("Amount")->AsFloat = 410.37; #Exclding GST Amt
    $lDetail->FindField("TaxAmt")->AsFloat = 0;
	$lDetail->Post();

    $V = array("IV", "IV-00003");  #DocType, DocNo
        
    if ($lKO->Locate("DocType;DocNo", $V, False, False)){
        $lKO->Edit();
        $lKO->FindField("KOAmt")->AsFloat = 100; #Partial Knock off
        $lKO->FindField("KnockOff")->AsString = "T";
        $lKO->Post();
	}	
    $BizObject->Save();
    $BizObject->Close();	
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
		PostData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Post Customer Credit Note"/> 
    </form> 
</body>
</html>

SO to DO

SO to DO Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 15 Jan 2021<br>";
#This action to 
#01. Get Oustanding SO
#02. Post To DO

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
    $lSQL = "SELECT Dockey, DocNo,Code, CompanyName, Seq, DtlKey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount, 
             COALESCE(Sum(XFQty),0) XFQty, COALESCE((Qty-Sum(XFQty)), Qty) OSQty FROM (
             SELECT A.Dockey, A.DocNo, A.Code, A.CompanyName,
             B.DtlKey, B.Seq, B.ItemCode, B.Qty, B.UOM, B.UnitPrice, B.Disc, B.Amount, 
             C.Qty XFQty FROM SL_SO A
             INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY)
             LEFT JOIN ST_XTRANS C ON (A.DOCKEY=C.FROMDOCKEY AND B.DTLKEY=C.FROMDTLKEY
                                       AND C.FROMDOCTYPE='SO')
             WHERE A.DOCNO='SO-00140')
             GROUP BY Dockey, DocNo, Code, CompanyName, Seq, Dtlkey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount
			 HAVING COALESCE((Qty-Sum(XFQty)), Qty) >0
			 ";	
	
	$lDataSet = $ComServer->DBManager->NewDataSet($lSQL); #Get Oustanding SO Qty

    if ($lDataSet->RecordCount > 0) {
		$BizObject = $ComServer->BizObjects->Find("SL_DO");
        $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
        $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data	
		
		$lDataSet->First();
		$BizObject->New();
		$lMain->FindField("DocKey")->value = -1;
		$lMain->FindField("DocNo")->AsString = "--DO Test--";
		$lMain->FindField("DocDate")->value = "01/20/2021"; #MM/DD/YYYY
		$lMain->FindField("PostDate")->value = "01/20/2021"; #MM/DD/YYYY
		$lMain->FindField("Code")->AsString = $lDataSet->FindField("Code")->AsString;
		$lMain->FindField("CompanyName")->AsString = $lDataSet->FindField("CompanyName")->AsString;
		$lMain->FindField("Description")->AsString = "Delivery Order";		

		while (! $lDataSet->Eof()){
    		$lDetail->Append();
    		$lDetail->FindField("DtlKey")->value = -1;
    		$lDetail->FindField("DocKey")->value = -1;
    		$lDetail->FindField("ItemCode")->AsString = $lDataSet->FindField("ItemCode")->AsString;
    		$lDetail->FindField("UOM")->AsString = $lDataSet->FindField("UOM")->AsString;
		$lDetail->FindField("Qty")->AsFloat = $lDataSet->FindField("OSQty")->AsFloat;
    		$lDetail->FindField("DISC")->value = $lDataSet->FindField("DISC")->value;
    		$lDetail->FindField("Tax")->AsString = "";
    		$lDetail->FindField("TaxRate")->AsString = "";
    		$lDetail->FindField("TaxInclusive")->value = 0;
    		$lDetail->FindField("UnitPrice")->AsFloat = $lDataSet->FindField("UnitPrice")->AsFloat;
    		$lDetail->FindField("Amount")->AsFloat = $lDataSet->FindField("Amount")->AsFloat;
    		$lDetail->FindField("TaxAmt")->AsFloat = 0;
		$lDetail->FindField("FromDocType")->AsString = "SO";
		$lDetail->FindField("FromDockey")->AsFloat = $lDataSet->FindField("Dockey")->AsFloat;
		$lDetail->FindField("FromDtlkey")->AsFloat = $lDataSet->FindField("DtlKey")->AsFloat;
    		$lDetail->Post();
		$lDataSet->Next();

		}
        $BizObject->Save();
        $BizObject->Close();			
	}else {
    echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
		PostData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Post SO to DO"/> 
    </form> 
</body>
</html>

ST_AJ

ST_AJ Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 08 Feb 2021<br>";

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0100.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("ST_AJ");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); 
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); 
	
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "--AJ Test--";
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Stock Adjustment";
	
    #Insert Data - Detail - Increase Stock Qty
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "ANTENA";
    $lDetail->FindField("Qty")->AsFloat = 2;
    $lDetail->FindField("UOM")->AsString = "BOX";
    $lDetail->Post();
    #Insert Data - Detail - Reduce Stock Qty
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 2;
    $lDetail->FindField("ItemCode")->AsString = "N-CHARGER";
    $lDetail->FindField("Description")->AsString = "NOKIA CHARGER";
    $lDetail->FindField("Qty")->AsFloat = -5;
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->Post();
	
    $BizObject->Save();
    $BizObject->Close();
	
	try{
        $BizObject->Save();
        $BizObject->Close();
	}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    }	
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
		PostData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Post ST_AJ"/> 
    </form> 
</body>
</html>

Get Stock Serial Number balance

Get Stock Serial Number Balance List Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 21 May 2021<br>";

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "D:\Happy\DB\Default.DCF",  #"C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0024.FDB"); #Database Name
    
}

function GetData(){
	global $ComServer;
	
    $lSQL = "SELECT ItemCode, Location, Batch, SerialNumber, SUM(Qty) Qty  FROM ST_TR_SN  
	         GROUP BY ItemCode, Location, Batch, SerialNumber 
			 HAVING SUM(Qty) > 0
			 ";
	
	$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);

    if ($lDataSet->RecordCount > 0) {
		$lDataSet->First();
		$fc = $lDataSet->Fields->Count-1;
		echo "<table>";
		echo "<tr>";
		for ($x = 0; $x <= $fc; $x++) {
			#Insert Header
			echo "<td>".$lDataSet->Fields->Items($x)->FieldName()."</td>"; 
		}
		echo "</tr>";
		
		#Looping Dataset
		while (! $lDataSet->Eof()){
			echo "<tr>";
		    for ($x = 0; $x <= $fc; $x++) {
				$lFN = $lDataSet->Fields->Items($x)->FieldName();
			    echo "<td>".$lDataSet->FindField($lFN)->AsString()."</td>"; 
		    }
		    echo "</tr>";
			$lDataSet->Next();
		}	
		echo "</table>"."<br>";		
	}else {
    echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
		GetData();
        echo date("d M Y h:i:s A")." - Done";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Get SN Balance"/> 
    </form> 
</body>
</html>

SL_IV-Add, Edit & Delete

Insert, Edit & Delete Invoice Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 14 Mar 2022<br>";
$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "D:\Happy\DB\Default.DCF", #"C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0015.FDB"); #Database Name
    
}

function PostDataIV(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("SL_IV");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
	
    #Find IV Number
    $lDocNo = "--IV Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
	
	if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
		$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
		$BizObject->Open();
        $BizObject->Edit();
        $lMain->Edit();
	    $lMain->FindField("DocDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("PostDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("CompanyName")->AsString = "Cash Sales-Edited";
        $lMain->FindField("Address1")->AsString = ""; #Optional
        $lMain->FindField("Address2")->AsString = ""; #Optional
        $lMain->FindField("Address3")->AsString = ""; #Optional
        $lMain->FindField("Address4")->AsString = ""; #Optional
        $lMain->FindField("Phone1")->AsString = "";   #Optional
        $lMain->FindField("Description")->AsString = "Sales - Edited";

		$r = $lDetail->RecordCount();
		$x = 1;
		while ($x <= $r ){
			$lDetail->First();
            $lDetail->Delete();
			$x++;
		}
        $lDetail->Append();
        $lDetail->FindField("ItemCode")->AsString = "COVER";
        $lDetail->FindField("Description")->AsString = "Sales Item Cover";
	    $lDetail->FindField("UOM")->AsString = "UNIT";
        $lDetail->FindField("Qty")->AsFloat = 3;
        $lDetail->FindField("Tax")->AsString = "";
        $lDetail->FindField("TaxRate")->AsString = "";
        $lDetail->FindField("TaxInclusive")->value = 0;
        $lDetail->FindField("UnitPrice")->AsFloat = 5.60;
        $lDetail->FindField("Amount")->AsFloat = 16.80;
        $lDetail->FindField("TaxAmt")->AsFloat = 0;
        $lDetail->Post();		
	} else {
      echo "New Invoice<br>";
	  $BizObject->New();
      $lMain->FindField("DocKey")->value = -1;
      $lMain->FindField("DocNo")->AsString = $lDocNo;
	  $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account
	  $lMain->FindField("DocDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("PostDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("CompanyName")->AsString = "Cash Sales";
      $lMain->FindField("Address1")->AsString = ""; #Optional
      $lMain->FindField("Address2")->AsString = ""; #Optional
      $lMain->FindField("Address3")->AsString = ""; #Optional
      $lMain->FindField("Address4")->AsString = ""; #Optional
      $lMain->FindField("Phone1")->AsString = "";   #Optional
      $lMain->FindField("Description")->AsString = "Sales";
	  #$lMain->FindField('DocAmt')->value = $Amt;
	
      $lDetail->Append();
      $lDetail->FindField("ItemCode")->AsString = "ANT";
      $lDetail->FindField("Description")->AsString = "Sales Item ANT";
	  $lDetail->FindField("UOM")->AsString = "UNIT";
      $lDetail->FindField("Qty")->AsFloat = 1;
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("UnitPrice")->AsFloat = 100;
      $lDetail->FindField("Amount")->AsFloat = 100;
      $lDetail->FindField("TaxAmt")->AsFloat = 0;
      $lDetail->Post();


      $lDetail->Append();
      $lDetail->FindField("ItemCode")->AsString = "BOM";
      $lDetail->FindField("Description")->AsString = "Sales Item BOM";
	  $lDetail->FindField("UOM")->AsString = "UNIT";
      $lDetail->FindField("Qty")->AsFloat = 2;
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("UnitPrice")->AsFloat = 150;
      $lDetail->FindField("Amount")->AsFloat = 300;
      $lDetail->FindField("TaxAmt")->AsFloat = 0;
      $lDetail->Post();
	}
    $BizObject->Save();
	
	echo date("d M Y h:i:s A")." - Posting Done<br>";
    $BizObject->Close();	
}

function PostDelIV(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("SL_IV");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
	
    #Find IV Number
    $lDocNo = "--IV Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
	
	if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
		$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
		$BizObject->Open();
        $BizObject->Delete();
		echo date("d M Y h:i:s A")." - Record deleted<br>";
	} else {
		echo date("d M Y h:i:s A")." - Document Not Found<br>";
	}		
}
if (isset($_POST['BtnPost']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Posting<br>";
        PostDataIV();	
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

if (isset($_POST['BtnDel']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Delete<br>";
        PostDelIV();	
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnPost"
                value="Post Sales IV"/> 
        <input type="submit" name="BtnDel"
                value="Post Delete IV"/>
    </form> 
</body>
</html>

GL_PV-Add, Edit & Delete

Insert, Edit & Delete Invoice Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 15 Mar 2022<br>";
$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "D:\Happy\DB\Default.DCF", #"C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0015.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("GL_PV");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
	
    #Find PV Number
    $lDocNo = "--PV Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
	
	if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
		$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
		$BizObject->Open();
        $BizObject->Edit();
        $lMain->Edit();
	    $lMain->FindField("DocDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("PostDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("Description")->AsString = "Tenaga Malaysia - Edited";
		$lMain->FindField("PaymentMethod")->AsString = "310-001"; #GL Bank/Cash account code
		$lMain->FindField("CHEQUENUMBER")->AsString = "MBB 123456"; #Optional
		$lMain->FindField("Cancelled")->AsString = "F";

		$r = $lDetail->RecordCount();
		$x = 1;
		while ($x <= $r ){
			$lDetail->First();
            $lDetail->Delete();
			$x++;
		}
        $lDetail->Append();
        $lDetail->FindField("Code")->AsString = "907-000";
        $lDetail->FindField("Description")->AsString = "TNB Bill for Feb 2022 - Edited";
        $lDetail->FindField("Tax")->AsString = "";
        $lDetail->FindField("TaxRate")->AsString = "";
        $lDetail->FindField("TaxInclusive")->value = 0;
        $lDetail->FindField("Amount")->AsFloat = 168.80;
        $lDetail->FindField("TaxAmt")->AsFloat = 0;
        $lDetail->Post();		
	} else {
      echo "New PV<br>";
	  $BizObject->New();
      $lMain->FindField("DocKey")->value = -1;
      $lMain->FindField("DocNo")->AsString = $lDocNo;
	  $lMain->FindField("DocDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("PostDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("Description")->AsString = "Tenaga Malaysia";
	  $lMain->FindField("PaymentMethod")->AsString = "310-001"; #GL Bank/Cash account code
	  $lMain->FindField("CHEQUENUMBER")->AsString = "MBB 123456"; #Optional
	  $lMain->FindField("Cancelled")->AsString = "F";
		
      $lDetail->Append();
      $lDetail->FindField("Code")->AsString = "907-000"; #GL Account
      $lDetail->FindField("Description")->AsString = "TNB Bill for Jan 2022";
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("Amount")->AsFloat = 100.80;
      $lDetail->FindField("TaxAmt")->AsFloat = 0;
      $lDetail->Post();

      $lDetail->Append();
      $lDetail->FindField("Code")->AsString = "907-000";
      $lDetail->FindField("Description")->AsString = "TNB Bill for Feb 2022";
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("Amount")->AsFloat = 68.00;
      $lDetail->FindField("TaxAmt")->AsFloat = 0;
      $lDetail->Post();
	}
    $BizObject->Save();
	
	echo date("d M Y h:i:s A")." - Posting Done<br>";
    $BizObject->Close();	
}

function DelData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("GL_PV");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
	
    #Find PV Number
    $lDocNo = "--PV Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
	
	if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
		$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
		$BizObject->Open();
        $BizObject->Delete();
		echo date("d M Y h:i:s A")." - Record deleted<br>";
	} else {
		echo date("d M Y h:i:s A")." - Document Not Found<br>";
	}		
}
if (isset($_POST['BtnPost']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Posting<br>";
        PostData();	
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

if (isset($_POST['BtnDel']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Delete<br>";
        DelData();	
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnPost"
                value="Post GL PV"/> 
        <input type="submit" name="BtnDel"
                value="Delete PV"/>
    </form> 
</body>
</html>

GL_JE-Add, Edit & Delete

Insert, Edit & Delete Invoice Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 15 Mar 2022<br>";
$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0015.FDB"); #Database Name
    
}

function PostData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("GL_JE");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); #lDetail contains detail data
	
    #Find JE Number
    $lDocNo = "--JE Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
	
	if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
		$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
		$BizObject->Open();
        $BizObject->Edit();
        $lMain->Edit();
	    $lMain->FindField("DocDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("PostDate")->value = "02/20/2022"; #MM/DD/YYYY
        $lMain->FindField("Description")->AsString = "Credit Card Charges - Edited";
		$lMain->FindField("Cancelled")->AsString = "F";

		$r = $lDetail->RecordCount();
		$x = 1;
		while ($x <= $r ){
			$lDetail->First();
            $lDetail->Delete();
			$x++;
		}
        $lDetail->Append();
        $lDetail->FindField("Code")->AsString = "902-000";
        $lDetail->FindField("Description")->AsString = "MBB Credit Card Charges - Edited";
        $lDetail->FindField("Tax")->AsString = "";
        $lDetail->FindField("TaxRate")->AsString = "";
        $lDetail->FindField("TaxInclusive")->value = 0;
        $lDetail->FindField("LocalDR")->AsFloat = 78.88;
		$lDetail->FindField("DR")->AsFloat = 78.88; #If Wanted DR <> LocalDR
        $lDetail->FindField("LocalTaxAmt")->AsFloat = 0;
        $lDetail->Post();
		
        $lDetail->Append();
        $lDetail->FindField("Code")->AsString = "310-001";
        $lDetail->FindField("Description")->AsString = "MBB Credit Card Charges - Edited";
        $lDetail->FindField("Tax")->AsString = "";
        $lDetail->FindField("TaxRate")->AsString = "";
        $lDetail->FindField("TaxInclusive")->value = 0;
        $lDetail->FindField("LocalCR")->AsFloat = 78.88;
		$lDetail->FindField("CR")->AsFloat = 78.88; #If Wanted CR <> LocalCR
        $lDetail->FindField("LocalTaxAmt")->AsFloat = 0;
        $lDetail->Post();			
	} else {
      echo "New JE<br>";
	  $BizObject->New();
      $lMain->FindField("DocKey")->value = -1;
      $lMain->FindField("DocNo")->AsString = $lDocNo;
	  $lMain->FindField("DocDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("PostDate")->value = "02/18/2022"; #MM/DD/YYYY
      $lMain->FindField("Description")->AsString = "Credit Card Charges";
	  $lMain->FindField("Cancelled")->AsString = "F";
		
      $lDetail->Append();
      $lDetail->FindField("Code")->AsString = "902-000";
      $lDetail->FindField("Description")->AsString = "MBB Credit Card Charges";
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("LocalDR")->AsFloat = 88.88;
	  $lDetail->FindField("DR")->AsFloat = 88.88; #If Wanted DR <> LocalDR
      $lDetail->FindField("LocalTaxAmt")->AsFloat = 0;
      $lDetail->Post();
		
      $lDetail->Append();
      $lDetail->FindField("Code")->AsString = "310-001";
      $lDetail->FindField("Description")->AsString = "MBB Credit Card Charges";
      $lDetail->FindField("Tax")->AsString = "";
      $lDetail->FindField("TaxRate")->AsString = "";
      $lDetail->FindField("TaxInclusive")->value = 0;
      $lDetail->FindField("LocalCR")->AsFloat = 88.88;
	  $lDetail->FindField("CR")->AsFloat = 88.88; #If Wanted CR <> LocalCR
      $lDetail->FindField("LocalTaxAmt")->AsFloat = 0;
      $lDetail->Post();
	}
    $BizObject->Save();
	
	echo date("d M Y h:i:s A")." - Posting Done<br>";
    $BizObject->Close();	
}

function DelData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("GL_JE");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data
	
    #Find JE Number
    $lDocNo = "--JE Test--";
    $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo);
	
	if ($lDocKey != null){
        echo "Dockey = ".$lDocKey."<br>";
		$BizObject->Params->Find("DocKey")->AsString = $lDocKey;
		$BizObject->Open();
        $BizObject->Delete();
		echo date("d M Y h:i:s A")." - Record deleted<br>";
	} else {
		echo date("d M Y h:i:s A")." - Document Not Found<br>";
	}		
}
if (isset($_POST['BtnPost']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Posting<br>";
        PostData();	
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

if (isset($_POST['BtnDel']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Begin Delete<br>";
        DelData();	
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnPost"
                value="Post GL JE"/> 
        <input type="submit" name="BtnDel"
                value="Delete JE"/>
    </form> 
</body>
</html>

Get Outstanding SO List

Get Outstanding SO List Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 09 Jun 2022<br>";
$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp") or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0015.FDB"); #Database Name
    
}

function GetData(){
	global $ComServer;
	
    $lSQL = "SELECT Dockey, DocNo,Code, CompanyName, Seq, DtlKey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount, 
             COALESCE(Sum(XFQty),0) XFQty, COALESCE((Qty-Sum(XFQty)), Qty) OSQty FROM (
             SELECT A.Dockey, A.DocNo, A.Code, A.CompanyName,
             B.DtlKey, B.Seq, B.ItemCode, B.Qty, B.UOM, B.UnitPrice, B.Disc, B.Amount, 
             C.Qty XFQty FROM SL_SO A
             INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY)
             LEFT JOIN ST_XTRANS C ON (A.DOCKEY=C.FROMDOCKEY AND B.DTLKEY=C.FROMDTLKEY
                                       AND C.FROMDOCTYPE='SO')
             WHERE A.Cancelled='F')
             GROUP BY Dockey, DocNo, Code, CompanyName, Seq, Dtlkey, ItemCode, Qty, UOM, UnitPrice, Disc, Amount
             HAVING COALESCE((Qty-Sum(XFQty)), Qty) >0
			 ";
	
	$lDataSet = $ComServer->DBManager->NewDataSet($lSQL);

    if ($lDataSet->RecordCount > 0) {
		$lDataSet->First();
		$fc = $lDataSet->Fields->Count-1;
		echo "<table>";
		echo "<tr>";
		for ($x = 0; $x <= $fc; $x++) {
			#Insert Header
			echo "<td>".$lDataSet->Fields->Items($x)->FieldName()."</td>"; 
		}
		echo "</tr>";
		
		#Looping Dataset
		while (! $lDataSet->Eof()){
			echo "<tr>";
		    for ($x = 0; $x <= $fc; $x++) {
				$lFN = $lDataSet->Fields->Items($x)->FieldName();
			    echo "<td>".$lDataSet->FindField($lFN)->AsString()."</td>"; 
		    }
		    echo "</tr>";
			$lDataSet->Next();
		}	
		echo "</table>"."<br>";		
	}else {
    echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        echo date("d M Y h:i:s A")." - Get Data<br>";
        GetData();
		echo date("d M Y h:i:s A")." - Done<br>";
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Get Outstanding SO List"/> 
    </form> 
</body>
</html>

Get Stock Item Picture

Get Stock Item Picture Script
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 14 Sep 2022<br>";

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp", null, CP_UTF8) or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        $ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
    
}

function GetData(){
    global $ComServer;
	
    $lSQL = "SELECT Picture FROM ST_ITEM 
             WHERE Code='ANT' ";
	
    $lDataSet = $ComServer->DBManager->NewDataSet($lSQL);

    if ($lDataSet->RecordCount > 0) {
	$lDataSet->First();
		
	$raw = $lDataSet->FindField('Picture')->Value();
	
        $b = [];
        foreach($raw as $p) {
            array_push($b, chr($p));
        }

	echo '<img src=data:image/*;base64,'.base64_encode(implode($b)).' alt="My Picture" style="width:128px;height:128px">';

	}else {
    echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
	echo "<br>";
        echo date("d M Y h:i:s A")." - Done";	
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Get Item Picture"/> 
    </form> 
</body>
</html>

Customer.Aging.RO

Customer.Aging.RO Script
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/Grid.css" />
</head>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 26 Sep 2022<br>";

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp", null, CP_UTF8) or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        #$ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
    
}

function SetGrid($DataSet){
	echo "<table>";
	echo "<tr>";	
    $DataSet->First();
	$fc = $DataSet->Fields->Count-1;
	for ($x = 0; $x <= $fc; $x++) {
		#Insert Header
		echo "<td>".$DataSet->Fields->Items($x)->FieldName()."</td>"; 
	}
	echo "</tr>";
		
	#Looping Dataset
	while (! $DataSet->Eof()){
		echo "<tr>";
	    for ($x = 0; $x <= $fc; $x++) {
			$lFN = $DataSet->Fields->Items($x)->FieldName();
		    echo "<td>".$DataSet->FindField($lFN)->AsString()."</td>"; 
	    }
	    echo "</tr>";
		$DataSet->Next();
	}
    echo "</table>"."<br>";		
}

function GetData(){
	global $ComServer;
	
    $lSQL = '<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS>
	         <FIELD attrname="ColumnNo" fieldtype="i4" required="true"/><FIELD attrname="ColumnType" fieldtype="string" WIDTH="1"/>
             <FIELD attrname="Param1" fieldtype="i4" required="true"/><FIELD attrname="Param2" fieldtype="i4" required="true"/>
             <FIELD attrname="IsLocal" fieldtype="boolean"/><FIELD attrname="HeaderScript" fieldtype="bin.hex" SUBTYPE="Text" WIDTH="1"/>
             </FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo="0" ColumnType="" Param1="0" Param2="0" IsLocal="FALSE"/>
             <ROW ColumnNo="1" ColumnType="A" Param1="0" Param2="0" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;"/>
             <ROW ColumnNo="2" ColumnType="A" Param1="-1" Param2="-1" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;"/>
             <ROW ColumnNo="3" ColumnType="A" Param1="-2" Param2="-2" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;"/>
             <ROW ColumnNo="4" ColumnType="A" Param1="-3" Param2="-3" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;"/>
             <ROW ColumnNo="5" ColumnType="A" Param1="-4" Param2="-4" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;"/>
             <ROW ColumnNo="6" ColumnType="B" Param1="-999999" Param2="-5" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;"/>
             </ROWDATA></DATAPACKET>';
	
	$lRptVar = $ComServer->RptObjects->Find('Customer.Aging.RO');
	$lRptVar->Params->Find('ActualGroupBy')->AsString = 'Code;CompanyName'; #Fixed
#	$lRptVar->Params->Find('AgentData')->AsBlob               = ; #Not use if AllAgent is True
    $lRptVar->Params->Find('AgingData')->AsString           = $lSQL;
    $lRptVar->Params->Find('AgingDate')->AsDate             = '23 Sep 2022';
    $lRptVar->Params->Find('AgingOn')->AsString             = 'I'; #Fixed
    $lRptVar->Params->Find('AllAgent')->AsBoolean           = True;
    $lRptVar->Params->Find('AllArea')->AsBoolean            = True;
    $lRptVar->Params->Find('AllCompany')->AsBoolean         = True;
    $lRptVar->Params->Find('AllCompanyCategory')->AsBoolean = True;
    $lRptVar->Params->Find('AllControlAccount')->AsBoolean  = True;
    $lRptVar->Params->Find('AllCurrency')->AsBoolean        = True;
    $lRptVar->Params->Find('AllDocProject')->AsBoolean      = True;
#    $lRptVar->Params->Find('AreaData')->AsBlob            = ; #Not use if AllArea is True
#    $lRptVar->Params->Find('CompanyCategoryData')->AsBlob = ; #Not use if AllCompanyCategory is True
#    $lRptVar->Params->Find('CompanyData')->AsBlob         = ; #Not use if AllCompany is True
#    $lRptVar->Params->Find('ControlAccountData')->AsBlob  = ; #Not use if AllControlAccount is True
#    $lRptVar->Params->Find('CurrencyData')->AsBlob        = ; #Not use if AllCurrency is True
#    $lRptVar->Params->Find('DocProjectData')->AsBlob      = ; #Not use if AllDocProject is True
    $lRptVar->Params->Find('FilterPostDate')->AsBoolean      = True;
#    $lRptVar->Params->Find('GroupBy
    $lRptVar->Params->Find('IncludePDC')->AsBoolean         = False;
    $lRptVar->Params->Find('IncludeZeroBalance')->AsBoolean = False;
    $lRptVar->Params->Find('SortBy')->AsString              = 'Code;CompanyName';
    $lRptVar->Params->Find('DateTo')->AsDate                = '23 Sep 2022';
    $lRptVar->Params->Find('IncludeKnockedOffDetail')->AsBoolean = False;
	
	$lRptVar->CalculateReport();
	$lDataSetHdr = $lRptVar->DataSets->Find('cdsAgingHeader');
	$lDataSet = $lRptVar->DataSets->Find('cdsMain');
	$lDataSet2 = $lRptVar->DataSets->Find('cdsDocument');
	$lDataSetCO = $lRptVar->DataSets->Find('cdsCompany');

    if ($lDataSet->RecordCount > 0) {
		echo "Header"."<br>";	
		SetGrid($lDataSetHdr);
						
		echo "Main Data"."<br>";
		SetGrid($lDataSet);
		
		echo "Detail Invoice"."<br>";
		SetGrid($lDataSet2);

		echo "Company Information"."<br>";
		SetGrid($lDataSetCO);

	}else {
    echo "Record Not Found";
    }
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
		echo "<br>";
        echo date("d M Y h:i:s A")." - Done";	
    }
    finally
    {
        #$ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Get AR Aging"/> 
    </form> 
</body>
</html>


Node JS

Module Require in Node JS
- Winax (Mandatory) -> npm install winax

Common

  • Common.js file for example code
Common Function
/* Updated 31 Jul 2023 */
var winax = require('C:\\node_js\\node_modules\\winax'); /* Path where you install winax */
var cp = require('child_process'); 

exports.KillApp = function KillApp(){
	cp.exec('start cmd.exe /C "taskkill /IM "SQLACC.exe" /F"');
}

exports.CreateSQLAccServer = function CreateSQLAccServer() {  
  var ComServer;
  ComServer = new winax.Object('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {           /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', /* UserName, Password */
	/* 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', */
	'D:\\Happy\\DB\\DEFAULT.DCF', /* DCF File */
	'ACC-0024.FDB'); /* FDB Name */
  }
  return ComServer;
}

exports.ShowResult = function ShowResult(ADataset){
  var fc, fn, fv, lresult;
  ADataset.First;
  while (!ADataset.Eof){
	  fc = ADataset.Fields.Count;
	  for (let i = 0; i < fc; i++) {
		  fn = ADataset.Fields.Items(i).FieldName;
          fv = ADataset.FindField(fn).AsString;
		  lresult =  "Index : "+ i + " FieldName : " + fn + " Value : " + fv;
		  console.log(lresult);
      }
	  console.log("====");
      ADataset.Next();	  
  }
}

exports.ShowMsg = function ShowMsgShowMsg(AMsg){
    try {
        var WSH = new winax.Object('WScript.Shell');
        WSH.popup(AMsg);
    } catch (e) {
        console.log(e);
    }	
}

Get Company Profile

Get Company Profile
/* Updated 22 Jul 2023 */
var Common = require('./Common'); 
var ComServer, lDataSet;

function GetData() {
  var lSQL;
  lSQL = "SELECT COMPANYNAME, REMARK, BRN, BRN2, GSTNO, ";
  lSQL = lSQL + "SALESTAXNO, SERVICETAXNO, ";
  lSQL = lSQL + "ADDRESS1,ADDRESS2,ADDRESS3,ADDRESS4 FROM SY_PROFILE ";
  lDataSet = ComServer.DBManager.NewDataSet(lSQL);  
  
  Common.ShowResult(lDataSet);
}

try{
	ComServer = Common.CreateSQLAccServer();
	GetData();
	ComServer.Logout();
} catch(e){
	console.error(e.message)
} finally {
	Common.KillApp();
}

Complete Post

Complete Post
/* Updated 22 Jul 2023 
This will doing following posting
01. Cash Sales
02. Sales Credit Note
03. Customer Payment With Knock off
04. Edit Credit Note Posted in Step 02 & Knock Off
05. Customer Refund to Knock off Credit Note
*/
var Common = require('./Common'); 
var ComServer;

function PostDataCS() {
  var BizObject, lMain, lDetail;
  BizObject = ComServer.BizObjects.Find('SL_CS') ;

  lMain   = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsDocDetail'); /*lDetail contains detail data */ 

  /*Begin Looping yr data*/
  /*Insert Data - Master*/ 
  BizObject.New();
  lMain.FindField('DocNo').AsString       = "--CS Test--";
  lMain.FindField('DocDate').value        = "20/12/2022";
  lMain.FindField('PostDate').value       = "20/12/2022";
  lMain.FindField('Code').AsString        = "300-C0001"; /*Customer Account*/
  lMain.FindField('CompanyName').AsString = "Cash Sales"
  lMain.FindField('Address1').AsString    = ""; /*Optional*/
  lMain.FindField('Address2').AsString    = ""; /*Optional*/
  lMain.FindField('Address3').AsString    = ""; /*Optional*/
  lMain.FindField('Address4').AsString    = ""; /*Optional*/
  lMain.FindField('Phone1').AsString      = ""; /*Optional*/
  lMain.FindField('Description').AsString = "Sales";
  
  /*Insert Data - Detail*/
  /*For Tax Inclusive = True with override Tax Amount*/
  lDetail.Append();
  lDetail.FindField('Seq').value            = 1;
  lDetail.FindField('Account').AsString     = "500-000"; /*Sales Account*/
  lDetail.FindField('Description').AsString = "Sales Item A";
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('Tax').AsString         = "SV";
  lDetail.FindField('TaxRate').AsString     = "6%";
  lDetail.FindField('TaxInclusive').value   = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 435;
  lDetail.FindField('Amount').AsFloat       = 410.37; /*Exclding Tax Amt*/
  lDetail.FindField('TaxAmt').AsFloat       = 24.63;
  
  lDetail.DisableControls();
  lDetail.FindField('TaxInclusive').value   = 1;
  lDetail.EnableControls();
  
  lDetail.Post();
  
  /*For Tax Inclusive = False with override Tax Amount*/
  lDetail.Append();
  lDetail.FindField('Seq').value            = 2;
  lDetail.FindField('Account').AsString     = "500-000";
  lDetail.FindField('Description').AsString = "Sales Item B";
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('Tax').AsString         = "SV";
  lDetail.FindField('TaxRate').AsString     = "6%";
  lDetail.FindField('TaxInclusive').value   = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 94.43;
  lDetail.FindField('Amount').AsFloat       = 94.43;
  lDetail.FindField('TaxAmt').AsFloat       = 5.66;
  lDetail.Post();  
  
  /*For With Item Code*/
  lDetail.Append();
  lDetail.FindField('Seq').value            = 3;
  lDetail.FindField('ItemCode').AsString    = "ANT";
  lDetail.FindField('Description').AsString = "Sales Item B";
  /*lDetail.FindField('Account').AsString     = "500-000"; If you wanted override the Sales Account Code*/
  lDetail.FindField('Qty').AsFloat          = 2;
  lDetail.FindField('UOM').AsString         = "UNIT";
  /*lDetail.FindField('DISC').AsString        = "5%+3"; Optional (eg 5% plus 3 Discount)*/
  lDetail.FindField('Tax').AsString         = "SV";
  lDetail.FindField('TaxRate').AsString     = "6%";
  lDetail.FindField('TaxInclusive').value   = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 100;
  lDetail.FindField('Amount').AsFloat       = 200;
  lDetail.FindField('TaxAmt').AsFloat       = 12;
  lDetail.Post();
  
  /*Save Document*/
  BizObject.Save();
  BizObject.Close();  
}

function PostDataPM() {
  var BizObject, lMain, lDetail, v;
    
  BizObject = ComServer.BizObjects.Find('AR_PM') ;

  lMain   = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsKnockOff'); /*lDetail contains detail data */
  
  BizObject.New();
  
  lMain.FindField('DocNo').AsString         = "--PM Test--";
  lMain.FindField('Code').AsString          = "300-C0001";
  lMain.FindField('DocDate').value          = "20/12/2022";
  lMain.FindField('PostDate').value         = "20/12/2022";
  lMain.FindField('Description').AsString   = "Payment for A/";
  lMain.FindField('PaymentMethod').AsString = "320-000"; /*Bank or Cash Account*/
  lMain.FindField('ChequeNumber').AsString  = "";
  lMain.FindField('BankCharge').AsFloat     = 0;
  lMain.FindField('DocAmt').AsFloat         = 200.00;
  lMain.FindField('Cancelled').AsString     = "F";
  
  v = ComServer.CreateOleVariantArray(2);
  v.SetItem(0, 'IV'); /*Knock Off DocType IV or DN*/
  v.SetItem(1, '--CS Test--'); /*Knock Off DocNo*/ 
  
  if (lDetail.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
      lDetail.Edit();
      lDetail.FindField('KOAmt').AsFloat     = "147.09";	/*Partial Knock Off*/	  
      lDetail.FindField('KnockOff').AsString = 'T';
      lDetail.Post();
	  }
    /* Save document */  
  BizObject.Save();
  BizObject.Close();
}

function PostDataCN() {
  var BizObject, lMain, lDetail;
  BizObject = ComServer.BizObjects.Find('SL_CN') ;

  lMain   = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsDocDetail'); /*lDetail contains detail data */ 

  /*Begin Looping yr data*/
  /*Insert Data - Master*/ 
  BizObject.New();
  lMain.FindField('DocNo').AsString       = "--CN Test--";
  lMain.FindField('DocDate').value        = "21/12/2022";
  lMain.FindField('PostDate').value       = "21/12/2022";
  lMain.FindField('Code').AsString        = "300-C0001"; /*Customer Account*/
  lMain.FindField('CompanyName').AsString = "Cash Sales"
  lMain.FindField('Address1').AsString    = ""; /*Optional*/
  lMain.FindField('Address2').AsString    = ""; /*Optional*/
  lMain.FindField('Address3').AsString    = ""; /*Optional*/
  lMain.FindField('Address4').AsString    = ""; /*Optional*/
  lMain.FindField('Phone1').AsString      = ""; /*Optional*/
  lMain.FindField('Description').AsString = "Sales Returned";
  
  /*Insert Data - Detail*/  
  /*For With Item Code*/
  lDetail.Append();
  lDetail.FindField('Seq').value             = 1;
  lDetail.FindField('ItemCode').AsString     = "ANT";
  lDetail.FindField('Description').AsString  = "Sales Item B";
  lDetail.FindField('Description2').AsString = "Product Spoil"; /*Reason*/
  lDetail.FindField('Remark1').AsString      = "--IV Test--"; /*Invoice No*/
  lDetail.FindField('Remark2').AsString      = "20 Dec 2022"; /*Invoide Date*/
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('UOM').AsString         = "UNIT";
  lDetail.FindField('Tax').AsString         = "SV";
  lDetail.FindField('TaxRate').AsString     = "6%";
  lDetail.FindField('TaxInclusive').value   = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 100;
  lDetail.FindField('Amount').AsFloat       = 100;
  lDetail.FindField('TaxAmt').AsFloat       = 6;
  lDetail.Post();
  
  /*Save Document*/
  BizObject.Save();
  BizObject.Close();  
}

function PostKnockIVCN() {
  var BizObject, lMain, lDetail, v, lDocNo, lDocKey;
    
  BizObject = ComServer.BizObjects.Find('AR_CN') ;

  lMain   = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsKnockOff'); /*lDetail contains detail data */
  
  /* Find CN Number */
  lDocNo = "--CN Test--"
  lDocKey = BizObject.FindKeyByRef('DocNo', lDocNo);
  BizObject.Params.Find('DocKey').Value = lDocKey;
  
  if (lDocKey != null) {
	  BizObject.Open();
	  BizObject.Edit();
	  lMain.Edit();
	  
	  v = ComServer.CreateOleVariantArray(2);
	  v.SetItem(0, 'IV'); /*Knock Off DocType IV or DN*/
	  v.SetItem(1, '--CS Test--'); /*Knock Off DocNo*/ 
  
	  if (lDetail.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
		  lDetail.Edit();
	      lDetail.FindField('KOAmt').AsFloat     = "100";	/*Partial Knock Off*/	  
	      lDetail.FindField('KnockOff').AsString = 'T';
	      lDetail.Post();
	  }
    /* Save document */  
	  BizObject.Save();
	  BizObject.Close();
  }
}

function PostDataCF() {
  var BizObject, lMain, lDetail, v;
    
  BizObject = ComServer.BizObjects.Find('AR_CF') ;

  lMain   = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsKnockOff'); /*lDetail contains detail data */
  
  BizObject.New();
  
  lMain.FindField('DocNo').AsString         = "--CF Test--";
  lMain.FindField('Code').AsString          = "300-C0001";
  lMain.FindField('DocDate').value          = "24/12/2022";
  lMain.FindField('PostDate').value         = "24/12/2022";
  lMain.FindField('Description').AsString   = "Payment for A/";
  lMain.FindField('PaymentMethod').AsString = "320-000"; /*Bank or Cash Account*/
  lMain.FindField('ChequeNumber').AsString  = "";
  lMain.FindField('BankCharge').AsFloat     = 0;
  lMain.FindField('DocAmt').AsFloat         = 6.00;
  lMain.FindField('Cancelled').AsString     = "F";
  
  v = ComServer.CreateOleVariantArray(2);
  v.SetItem(0, 'CN'); /*Knock Off DocType*/
  v.SetItem(1, '--CN Test--'); /*Knock Off DocNo*/ 
  
  if (lDetail.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){
      lDetail.Edit();
      lDetail.FindField('KOAmt').AsFloat     = "4";	/*Partial Knock Off*/	  
      lDetail.FindField('KnockOff').AsString = 'T';
      lDetail.Post();
	  }
    /* Save document */  
  BizObject.Save();
  BizObject.Close();
}

try{
	ComServer = Common.CreateSQLAccServer();
	console.log("Posting Cash Sales");
    PostDataCS();
    console.log("Posting Payment");
    PostDataPM();
    console.log("Posting Sales CN");
    PostDataCN();
    console.log("Posting Knock Off CN");
    PostKnockIVCN();
    console.log("Posting Customer Refund");
    PostDataCF();
    console.log("Done");
	ComServer.Logout();
} catch(e){
	console.error(e.message)
} finally {
	Common.KillApp();
}

Get Picture & Description3(Rich Text)

Get Picture & Description3(Rich Text) Script
/* Updated 31 Jul 2023 */
var Common = require('./Common'); 
var ComServer, lDataSet;
const fs = require('fs');

function saveImage(filename, data){
  var myBuffer = new Buffer.alloc(data.length);
  for (var i = 0; i < data.length; i++) {
      myBuffer[i] = data[i];
  }
  fs.writeFile(filename, myBuffer, function(err) {
      if(err) {
          console.log(err);
      } else {
          console.log("The Image file was saved!");
      }
  });
}

function ExpFile(AFName, AData){
	const FN = new console.Console(fs.createWriteStream(AFName));
    FN.log(AData);
}

function GetData() {
  var lSQL, txt, rtf;
  lSQL = "SELECT Description3, Picture FROM ST_ITEM ";
  lSQL = lSQL + "WHERE Code='ANT' ";
  lDataSet = ComServer.DBManager.NewDataSet(lSQL);  
  
  lDataSet.First;
  rtf = lDataSet.FindField('Description3').AsString;
  console.log(rtf);
  
  ExpFile('./output.rtf', rtf);
  
  txt = ComServer.Utility.RichTextToPlainText(rtf);
  Common.ShowMsg(txt);
  /* console.log(txt); <= Not support Unicode */
  
  ExpFile('./output.txt', txt);  
  console.log('Done Export');
  
  saveImage("./Pic.jpg", lDataSet.FindField('Picture').Value);
}

try{
	ComServer = Common.CreateSQLAccServer();
	GetData();
	ComServer.Logout();
} catch(e){
	console.error(e.message)
} finally {
	Common.KillApp();
}

Get Stock Qty Balance

Get Picture & Description3(Rich Text) Script
/* Updated 18 Jan 2024 */
var Common = require('./Common'); 
var ComServer;

function GetListData() {
  var lSQL, lDataSet;
  lSQL = "SELECT  ItemCode, Location, Batch, Sum(Qty) Qty  FROM ST_TR   ";
  lSQL = lSQL + "WHERE PostDate<='31 Dec 2019' ";
  lSQL = lSQL + "AND ITEMCODE ='ANT' ";
  lSQL = lSQL + "GROUP BY ItemCode, Location, Batch ";
  
  lDataSet = ComServer.DBManager.NewDataSet(lSQL);
  
  Common.ShowResult(lDataSet);
}

try{
	ComServer = Common.CreateSQLAccServer();
	GetListData();
	ComServer.Logout();
} catch(e){
	console.error(e.message)
} finally {
	Common.KillApp();
}

SO to DO

SO to DO Script
/*Updated 26 Apr 2024*/
var Common = require('./Common'); 
var ComServer;

function PostData() {
  var BizObject, lMain, lDetail, lSQL, lDataSet;
  
  lSQL = "SELECT Dockey, DocNo,Code, CompanyName, DocProject, Seq, DtlKey, ItemCode, Description, Qty, UOM, UnitPrice, Disc, Amount, DtlProject, ";
  lSQL = lSQL + "Tax, TaxRate, TaxInclusive, TaxAmt, COALESCE(Sum(XFQty),0) XFQty, COALESCE((Qty-Sum(XFQty)), Qty) OSQty FROM ( ";
  lSQL = lSQL + "SELECT A.Dockey, A.DocNo, A.Code, A.CompanyName, A.Project DocProject, ";
  lSQL = lSQL + "B.DtlKey, B.Seq, B.ItemCode, B.Description, B.Qty, B.UOM, B.UnitPrice, B.Disc, B.Amount, ";
  lSQL = lSQL + "B.Tax, B.TaxRate, B.TaxInclusive, B.TaxAmt, B.Project DtlProject, C.Qty XFQty FROM SL_SO A ";
  lSQL = lSQL + "INNER JOIN SL_SODTL B ON (A.DOCKEY=B.DOCKEY) ";
  lSQL = lSQL + "LEFT JOIN ST_XTRANS C ON (A.DOCKEY=C.FROMDOCKEY AND B.DTLKEY=C.FROMDTLKEY ";
  lSQL = lSQL + "                          AND C.FROMDOCTYPE='SO') ";
  lSQL = lSQL + "WHERE A.DOCNO='SO-00041') ";
  lSQL = lSQL + "GROUP BY Dockey, DocNo, Code, CompanyName, DocProject, Seq, Dtlkey, ItemCode, Description, Qty, UOM, UnitPrice, Disc, ";
  lSQL = lSQL +" Amount, DtlProject, Tax, TaxRate, TaxInclusive, TaxAmt ";
  lSQL = lSQL + "HAVING COALESCE((Qty-Sum(XFQty)), Qty) >0 ";
  
  lDataSet = ComServer.DBManager.NewDataSet(lSQL); 
  
  if (lDataSet.RecordCount > 0) {
	  BizObject = ComServer.BizObjects.Find('SL_DO') ;	  
	  lMain   = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
	  lDetail = BizObject.DataSets.Find('cdsDocDetail'); /*lDetail contains detail data */	  

	  BizObject.New();
	  lMain.FindField('DocNo').AsString       = "<<New>>";
      lMain.FindField('DocDate').value        = "26/04/2024";
      lMain.FindField('PostDate').value       = "26/04/2024";
      lMain.FindField('Code').AsString        = lDataSet.FindField('Code').AsString; /*Customer Account*/
      lMain.FindField('Description').AsString = "Post from 3rd Party";
	  
	  lDataSet.First;
	  while (!lDataSet.Eof){  
		  lDetail.Append();
          lDetail.FindField('Seq').value            = lDataSet.FindField('Seq').Value;
          lDetail.FindField('ItemCode').AsString    = lDataSet.FindField('ItemCode').AsString;
          lDetail.FindField('Description').AsString = lDataSet.FindField('Description').AsString;
          lDetail.FindField('Qty').AsFloat          = lDataSet.FindField('OSQty').AsFloat;/*Transfer all balance Qty*/
          lDetail.FindField('UOM').AsString         = lDataSet.FindField('UOM').AsString;
          lDetail.FindField('DISC').value           = lDataSet.FindField('DISC').AsString;
          lDetail.FindField('Tax').value            = lDataSet.FindField('Tax').AsString;
          lDetail.FindField('TaxRate').value        = lDataSet.FindField('TaxRate').AsString;
          lDetail.FindField('TaxInclusive').value   = lDataSet.FindField('TaxInclusive').value;
          lDetail.FindField('UnitPrice').AsFloat    = lDataSet.FindField('UnitPrice').AsFloat ;
          lDetail.FindField('Amount').AsFloat       = lDataSet.FindField('Amount').AsFloat;
          lDetail.FindField('TaxAmt').AsFloat       = lDataSet.FindField('TaxAmt').AsFloat;
		  lDetail.FindField('FromDocType').AsString = "SO"; /*From Document Type*/
          lDetail.FindField('FromDockey').AsFloat   = lDataSet.FindField('Dockey').AsFloat;
          lDetail.FindField('FromDtlkey').AsFloat   = lDataSet.FindField('DtlKey').AsFloat;
          lDetail.Post();
          lDataSet.Next();
	  }
      /*Save Document*/
      BizObject.Save();
	  BizObject.Close(); 
  } else
	  console.log("Record Not Found");
}



try{
	ComServer = Common.CreateSQLAccServer();
	console.log("Posting SO to DO");
    PostData();
    console.log("Done");
	ComServer.Logout();
} catch(e){
	console.error(e.message)
} finally {
	Common.KillApp();
}


VB Script

Get Company Profile

Company Profile Script
'Copy below script & paste to notepad & name it as eg Common.Agent.RO.vbs
Call GetCoInfo
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetCoInfo
Dim ComServer, RptObject, lDataSet
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Common.Agent.RO") 
 
 
  'Step 3: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsProfile")

  MsgBox "Count " & lDataSet.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
	MsgBox "Company Name : " & lDataSet.FindField("CompanyName").AsString 
	
	MsgBox "Remark : " & lDataSet.FindField("Remark").AsString

	MsgBox "ROC No : " & lDataSet.FindField("RegisterNo").AsString

	MsgBox "GST No : " & lDataSet.FindField("GSTNo").AsString
	
	MsgBox "Address 1 : " & lDataSet.FindField("Address1").AsString
	
	MsgBox "Address 2 : " & lDataSet.FindField("Address2").AsString
	
	MsgBox "Address 3 : " & lDataSet.FindField("Address3").AsString
	
	MsgBox "Address 4 : " & lDataSet.FindField("Address4").AsString
	
	MsgBox "Attention : " & lDataSet.FindField("Attention").AsString
	
	MsgBox "Phone : " & lDataSet.FindField("Phone1").AsString
	
	MsgBox "Fax : " & lDataSet.FindField("Fax1").AsString
	
	MsgBox "E-Mail : " & lDataSet.FindField("EMail").AsString
	lDataSet.Next
  Wend

  'Step 6 : Logout after done  
  ComServer.Logout    
End Function

Complete Post

SL_CS, AR_PM, SL_CN & AR_CN Script
'Updated 13 Sep 2018
'Copy below script & paste to notepad & name it as eg SL_CS.vbs
'This will doing following posting
'01. Cash Sales
'02. Sales Credit Note
'03. Customer Payment With Knock off
'04. Edit Credit Note Posted in Step 02 & Knock Off
Call CheckLogin
Call InsertData

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function InsertData
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("SL_CS") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString       = "--IV Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value       = lDate
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  lMain.FindField("Address1").AsString    = "" 'Optional
  lMain.FindField("Address2").AsString    = "" 'Optional
  lMain.FindField("Address3").AsString    = "" 'Optional
  lMain.FindField("Address4").AsString    = "" 'Optional
  lMain.FindField("Phone1").AsString      = "" 'Optional
  lMain.FindField("Description").AsString = "Sales"
    
  'Step 5: Insert Data - Detail
  'For Tax Inclusive = True with override Tax Amount
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("Seq").value            = 1
  lDetail.FindField("Account").AsString     = "500-000" 'Sales Account
  lDetail.FindField("Description").AsString = "Sales Item A"
  lDetail.FindField("Qty").AsFloat          = 1
  lDetail.FindField("Tax").AsString         = "SR"
  lDetail.FindField("TaxRate").AsString     = "6%"
  lDetail.FindField("TaxInclusive").value   = 0
  lDetail.FindField("UnitPrice").AsFloat    = 435
  lDetail.FindField("Amount").AsFloat       = 410.37 'Exclding GST Amt
  lDetail.FindField("TaxAmt").AsFloat       = 24.63
  
  lDetail.DisableControls
  lDetail.FindField("TaxInclusive").value   = 1
  lDetail.EnableControls
  
  lDetail.Post
  
  'For Tax Inclusive = False with override Tax Amount
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("Seq").value            = 2
  lDetail.FindField("Account").AsString     = "500-000"
  lDetail.FindField("Description").AsString = "Sales Item B"
  lDetail.FindField("Qty").AsFloat          = 1
  lDetail.FindField("Tax").AsString         = "SR"
  lDetail.FindField("TaxRate").AsString     = "6%"
  lDetail.FindField("TaxInclusive").value   = 0
  lDetail.FindField("UnitPrice").AsFloat    = 94.43
  lDetail.FindField("Amount").AsFloat       = 94.43
  lDetail.FindField("TaxAmt").AsFloat       = 5.66
  lDetail.Post

  'For With Item Code
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("Seq").value            = 3
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Sales Item B"
  'lDetail.FindField("Account").AsString     = "500-000" 'If you wanted override the Sales Account Code
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UOM").AsString         = "UNIT"
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("Tax").AsString         = "SR"
  lDetail.FindField("TaxRate").AsString     = "6%"
  lDetail.FindField("TaxInclusive").value   = 0
  lDetail.FindField("UnitPrice").AsFloat    = 100  
  lDetail.FindField("Amount").AsFloat       = 200
  lDetail.FindField("TaxAmt").AsFloat       = 12
  lDetail.Post

  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  
  'Step 7: Payment
  Call InsertARPM
  
  'Step 8: Credit Note
  Call InsertSLCN
  'End Looping yr data

  'Step 9 : Logout after done  
  'ComServer.Logout
  
  MsgBox "Done"  
End Function

Function InsertARPM
Dim BizObject, lMain, lDetail, lDate, v(1)
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_PM") 
 
  'Step 3: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")   'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsKnockOff") 'lDetail contains detail data  
  
  'Step 4 : Posting
    lDate = CDate("January 23, 2017")
    BizObject.New
    lMain.FindField("DOCKEY").Value           = -1
    lMain.FindField("DocNo").AsString         = "--PM Test--" 
    lMain.FindField("CODE").AsString          = "300-C0001" 'Customer Account
    lMain.FindField("DocDate").Value          = lDate
    lMain.FindField("PostDate").Value         = lDate
    lMain.FindField("Description").AsString   = "Payment for A/c"
    lMain.FindField("PaymentMethod").AsString = "320-000" 'Bank or Cash Account
	lMain.FindField("ChequeNumber").AsString  = ""
	lMain.FindField("BankCharge").AsFloat     = 0
    lMain.FindField("DocAmt").AsFloat         = 200.00
    lMain.FindField("Cancelled").AsString     = "F"
  'Step 5: Knock Off IV
    lIVNO = "--IV Test--"
    v(0) = "IV"
    v(1) = lIVNO
	
    if (lDetail.Locate("DocType;DocNo", v, false, false)) then
      lDetail.Edit
      lDetail.FindField("KOAmt").AsFloat     = 147.09 'Partial Knock off
      lDetail.FindField("KnockOff").AsString = "T"
      lDetail.Post
	End IF  
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
End Function

Function InsertSLCN
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("SL_CN") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Insert Data - Master
  lDate = CDate("January 24, 2017")
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString       = "--CN Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value       = lDate
  lMain.FindField("Code").AsString        = "300-C0001"
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  lMain.FindField("Address1").AsString    = ""
  lMain.FindField("Address2").AsString    = ""
  lMain.FindField("Address3").AsString    = ""
  lMain.FindField("Address4").AsString    = ""
  lMain.FindField("Phone1").AsString      = ""  
  lMain.FindField("Description").AsString = "Sales Returned"
    
  'For With Item Code
  lDetail.Append
  lDetail.FindField("DtlKey").value          = -1
  lDetail.FindField("DocKey").value          = -1
  lDetail.FindField("ItemCode").AsString     = "ANT"
  lDetail.FindField("Description").AsString  = "Sales Item B"
  lDetail.FindField("Description2").AsString = "Product Spoil" 'Reason
  lDetail.FindField("Remark1").AsString      = "--IV Test--"   'Invoice No
  lDetail.FindField("Remark2").AsString      = "01 Jan 2017"   'Invoice Date
  lDetail.FindField("Qty").AsFloat           = 1
  lDetail.FindField("Tax").AsString          = "SR"
  lDetail.FindField("TaxRate").AsString      = "6%"
  lDetail.FindField("TaxInclusive").value    = 0
  lDetail.FindField("UnitPrice").AsFloat     = 100
  lDetail.FindField("Amount").AsFloat        = 100
  lDetail.FindField("TaxAmt").AsFloat        = 6  
  lDetail.Post

  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  
  'Step 7: Knock Off Invoice
  Call KnockIV
End Function

Function KnockIV
Dim BizObject, lMain, lDetail, lDate, v(1)
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_CN") 
 
  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet") 'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsKnockOff") 'lDetail contains Knock off data  
  
  'Step 4 : Find CN Number
  lDocNo = "--CN Test--"
  lDocKey = BizObject.FindKeyByRef("DocNo", lDocNo)
  BizObject.Params.Find("DocKey").Value = lDocKey
  
  If not IsNull(lDocKey) Then 
    BizObject.Open
    BizObject.Edit
    lMain.Edit
  'Step 5: Knock Off IV
    lIVNO = "--IV Test--"
    v(0) = "IV"
    v(1) = lIVNO
	
    if (lDetail.Locate("DocType;DocNo", v, false, false)) then
      lDetail.Edit
      lDetail.FindField("KOAmt").AsFloat     = 106 'Fully Knock off
      lDetail.FindField("KnockOff").AsString = "T"
      lDetail.Post
	End IF    
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
  END IF	
End Function

AR_IV

AR_IV Script
'Copy below script & paste to notepad & name it as eg AR_IV.vbs
Call InsertARIV

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

Function InsertARIV
Dim ComServer, BizObject, lDataSet, lDataSet2, lDate

  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB" 
  END IF

  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_IV") 

  'Step 3: Set Dataset
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data  
  
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2016")
  BizObject.New
  lMainDataSet.FindField("DocKey").value = -1
  lMainDataSet.FindField("DocNo").value = "--IV Test--"
  lMainDataSet.FindField("DocDate").value = lDate
  lMainDataSet.FindField("PostDate").value = lDate
  lMainDataSet.FindField("Code").value = "300-A0003"
  lMainDataSet.FindField("Description").value = "Sales"
    
  'Step 5: Insert Data - Detail
  'For Tax Inclusive = True with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "500-000"
  lDetailDataSet.FindField("Description").value =  "Sales Item A"
  lDetailDataSet.FindField("Tax").value =  "SR"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("Amount").value = 410.37
  lDetailDataSet.FindField("TaxAmt").value = 24.63
  
  lDetailDataSet.DisableControls
  lDetailDataSet.FindField("TaxInclusive").value =  1
  lDetailDataSet.EnableControls
  
  lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post
  
  'For Tax Inclusive = False with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "500-000"
  lDetailDataSet.FindField("Description").value =  "Sales Item B"
  lDetailDataSet.FindField("Tax").value =  "SR"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("Amount").value = 94.43
  lDetailDataSet.FindField("TaxAmt").value = 5.66
  lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post

  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "Done"
End Function

AR_IV-Edit

AR_IV Edit Script
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg AR_IV.vbs
Call CheckLogin
Call GetData
Call PostData

Dim ComServer, lDataSet

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM AR_IV "
  lSQL = lSQL & "WHERE DocNo='IV-00002' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function

Function PostData
Dim BizObject, lMain, lDetail
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_IV") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Find Doc Number
  If lDataSet.RecordCount > 0 Then   
	lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
  
  
    BizObject.Open
    BizObject.Edit
    lMain.Edit
	lMain.FindField("Description").AsString = "Sales - Edited" 
  
  'Step 5: Delete all Detail
    While lDetail.RecordCount <> 0
      lDetail.First
	  lDetail.Delete
    Wend
  'Step 6: Append Detail
  lDetail.Append  
  lDetail.FindField("DtlKey").value = -1
  lDetail.FindField("Account").value = "500-000"
  lDetail.FindField("Description").value =  "Sales Item A - Edited"
  lDetail.FindField("Tax").value =  "SR"
  lDetail.FindField("TaxRate").value =  "6%"
  lDetail.FindField("TaxInclusive").value =  0
  lDetail.FindField("Amount").value = 100
  lDetail.FindField("TaxAmt").value = 6
  
  lDetail.DisableControls
  lDetail.FindField("TaxInclusive").value =  1
  lDetail.EnableControls
  
  lDetail.FindField("Changed").value = "F"
  lDetail.Post
  
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
  
  'Step 8 : Logout after done  
    'ComServer.Logout  
    MsgBox "Done" 
	Else
	MsgBox "Record Not Found" 
  END IF 
End Function

AR_PM

AR_PM Script
'Copy below script & paste to notepad & name it as eg AR_PM.vbs
Call PostData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function PostData
Dim ComServer, BizObject, lIVNo, v(1), lDate
 
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB" 
  END IF
 
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_PM") 
 
  'Step 3: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsKnockOff") 'lDetailDataSet contains detail data  
  
  'Step 4 : Posting
    lDate = CDate("January 23, 2017")
    BizObject.New
    lMain.FindField("DOCKEY").Value           = -1
    lMain.FindField("DocNo").AsString         = "--PM Test--" 
    lMain.FindField("CODE").AsString          = "300-C0001"
    lMain.FindField("DocDate").Value          = lDate
    lMain.FindField("PostDate").Value         = lDate
    lMain.FindField("Description").AsString   = "Payment for A/c"
    lMain.FindField("PaymentMethod").AsString = "310-000"
    lMain.FindField("DocAmt").AsFloat         = 65.57
    lMain.FindField("Cancelled").AsString     = "F"
  'Step 5: Knock Off IV
    lIVNO = "--IV Test--"
    v(0) = "IV"
    v(1) = lIVNO
	
    if (lDetailDataSet.Locate("DocType;DocNo", v, false, false)) then
      lDetailDataSet.Edit
      lDetailDataSet.FindField("KOAmt").value = 65.57
      lDetailDataSet.FindField("KnockOff").AsString = "T"
      lDetailDataSet.Post
	End IF  
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  'END IF
End Function

AR_PM-Edit

AR_PM Edit Script
'Copy below script & paste to notepad & name it as eg AR_IV.vbs
Call EditARPM
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function EditARPM
Dim ComServer, BizObject, lDataSet, lDataSet2, lDocKey, lDocNo, lIVNo, v(1)
 
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB" 
  END IF
 
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_PM") 
 
  'Step 3: Set Dataset
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsKnockOff") 'lDetailDataSet contains detail data  
  
  'Step 4 : Find OR Number
  lDocNo = "OR-00022"
  lDocKey = BizObject.FindKeyByRef("DocNo", lDocNo)
  BizObject.Params.Find("DocKey").Value = lDocKey
  
  If not IsNull(lDocKey) Then 
    BizObject.Open
    BizObject.Edit
    lMainDataSet.Edit
	lMainDataSet.FindField("Description").AsString = "testing"
  'Step 5: Knock Off IV
    lIVNO = "IV-00006"
    v(0) = "IV"
    v(1) = lIVNO
	
    if (lDetailDataSet.Locate("DocType;DocNo", v, false, false)) then
      lDetailDataSet.Edit
      lDetailDataSet.FindField("KOAmt").value = 50.12
      lDetailDataSet.FindField("KnockOff").AsString = "T"
      lDetailDataSet.Post
	  MsgBox "yes"
	End IF  
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  END IF
End Function

Customer.RO

Customer.RO Report Object Script
'Copy below script & paste to notepad & name it as eg customer_ro.vbs
Call GetCustomerData

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

Function GetCustomerData
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF

  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Customer.RO") 

  'Step 3: Spool parameters
  RptObject.Params.Find("AllAgent").Value = true
  RptObject.Params.Find("AllArea").Value = true
  RptObject.Params.Find("AllCompany").Value = false
  RptObject.Params.Find("AllCompanyCategory").Value = true
  RptObject.Params.Find("AllCurrency").Value = true
  RptObject.Params.Find("AllTerms").Value = true
  RptObject.Params.Find("SelectDate").Value = true
  RptObject.Params.Find("PrintActive").Value = true
  RptObject.Params.Find("PrintInactive").Value = false
  RptObject.Params.Find("PrintPending").Value = false
  RptObject.Params.Find("PrintProspect").Value = false
  RptObject.Params.Find("PrintSuspend").Value = false
  lDateFrom = CDate("January 1, 2000")
  lDateTo = CDate("December 31, 2014")

  RptObject.Params.Find("DateFrom").Value = lDateFrom
  RptObject.Params.Find("DateTo").Value = lDateTo
  RptObject.Params.Find("CompanyData").Value = "300-A0003"
  
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsBranch")
  MsgBox "Count " & lDataSet.RecordCount

  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("Code").AsString & " " & lDataSet.FindField("CompanyName").AsString
	lDataSet2.First
    While (not lDataSet2.eof)
	  MsgBox lDataSet2.FindField("Address1").AsString
	  lDataSet2.Next
    Wend
	lDataSet.Next
  Wend
End Function

Customer.Statement.RO

Customer.Statement.RO Report Object Script
'Copy below script & paste to notepad & name it as eg customer_statement_ro.vbs
Call GetCustStatementData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

Function GetCustStatementData
Const Quote = """"
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo, lAgeData
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF

  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Customer.Statement.RO") 
 
  'Step 3: Spool parameters
  lAgeData = "<?xml version=" & Quote & "1.0" & Quote & " standalone=" & Quote & "yes" & Quote & "?>  <DATAPACKET Version=" & Quote & "2.0" & Quote & "><METADATA><FIELDS>" &_
       "<FIELD attrname=" & Quote & "ColumnNo" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "ColumnType" & Quote & " fieldtype=" & Quote & "string" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
       "<FIELD attrname=" & Quote & "Param1" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "Param2" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/>" &_
       "<FIELD attrname=" & Quote & "IsLocal" & Quote & " fieldtype=" & Quote & "boolean" & Quote & "/><FIELD attrname=" & Quote & "HeaderScript" & Quote & " fieldtype=" & Quote & "bin.hex" & Quote & " SUBTYPE=" & Quote & "Text" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
       "</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo=" & Quote & "0" & Quote & " ColumnType=" & Quote & "" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "1" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "2" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-1" & Quote & " Param2=" & Quote & "-1" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "3" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-2" & Quote & " Param2=" & Quote & "-2" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "4" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-3" & Quote & " Param2=" & Quote & "-3" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "5" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-4" & Quote & " Param2=" & Quote & "-4" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "6" & Quote & " ColumnType=" & Quote & "B" & Quote & " Param1=" & Quote & "-999999" & Quote & " Param2=" & Quote & "-5" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;" & Quote & "/>" &_
       "</ROWDATA></DATAPACKET>"
'  RptObject.Params.Find("AgentData").Value            =  'Not use if AllAgent is True
  RptObject.Params.Find("AgingData").Value            = lAgeData 'Fixed
  RptObject.Params.Find("AgingOn").Value              = "I" 'Fixed
  RptObject.Params.Find("AllAgent").Value             = true
  RptObject.Params.Find("AllArea").Value              = true
  RptObject.Params.Find("AllCompany").Value           = false
  RptObject.Params.Find("AllCompanyCategory").Value   = true
  RptObject.Params.Find("AllControlAccount").Value    = true
  RptObject.Params.Find("AllCurrency").Value          = true
  RptObject.Params.Find("AllDocProject").Value        = true
'  RptObject.Params.Find("AreaData").Value             =  'Not use if AllArea is True
'  RptObject.Params.Find("CompanyCategoryData").Value  =  'Not use if AllCompanyCategory is True
  RptObject.Params.Find("CompanyData").Value          = "300-A0001"& vbCRLF & "300-C0001" 'Filter by Customer Code 300-A0001 & 300-C0001
'  RptObject.Params.Find("ControlAccountData").Value   =  'Not use if AllControlAccount is True
'  RptObject.Params.Find("CurrencyData").Value         =  'Not use if AllCurrency is True
  lDateFrom = CDate("August 1, 2016")
  lDateTo = CDate("August 31, 2016")
  RptObject.Params.Find("DateFrom").Value             = lDateFrom
  RptObject.Params.Find("DateTo").Value               = lDateTo
'  RptObject.Params.Find("DocProjectData").Value       =  'Not use if AllDocProject is True
  RptObject.Params.Find("IncludeZeroBalance").Value   = false
  RptObject.Params.Find("SelectDate").Value           = true
  RptObject.Params.Find("SortBy").Value               = "CompanyCategory;Code;CompanyName;Agent;Area;CurrencyCode;ControlAccount"
  RptObject.Params.Find("StatementDate").Value        = lDateTo ' Norm same as DateTo
  RptObject.Params.Find("StatementType").Value        = "O" 'O = Open Item, B = B/F
 
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocument")
  MsgBox "Count " & lDataSet.RecordCount

  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("Code").AsString & " " & lDataSet.FindField("CompanyName").AsString & " " & lDataSet.FindField("Balance").AsString
	lDataSet2.First
    While (not lDataSet2.eof)
	  MsgBox lDataSet2.FindField("DocNo").AsString
	  lDataSet2.Next
    Wend
	lDataSet.Next
  Wend
End Function

GL.CB.RO

GL.CB.RO Report Object Script
'Copy below script & paste to notepad & name it as eg GL.CB.RO.vbs
Call GetCLCBData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetCLCBData
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("GL.CB.RO") 
 
  'Step 3: Spool parameters
  RptObject.Params.Find("AllCurrency").Value    = true
  RptObject.Params.Find("AllDocProject").Value  = true
  RptObject.Params.Find("AllDocument").Value    = true
  RptObject.Params.Find("AllItemProject").Value = true
  RptObject.Params.Find("AllItemArea").Value    = true
  RptObject.Params.Find("AllItemAgent").Value   = true
  RptObject.Params.Find("AllDocAgent").Value    = true
  RptObject.Params.Find("AllDocArea").Value     = true
  RptObject.Params.Find("AllPaymentMethod").Value = false
  'RptObject.Params.Find("CurrencyData").Value    = 'Not use if AllCurrency is true
  
  lDateFrom = CDate("January 01, 2017")
  lDateTo = CDate("December 31, 2017")
 
  'For Post Date From & Date To'
  RptObject.Params.Find("DateFrom").Value = lDateFrom 
  RptObject.Params.Find("DateTo").Value   = lDateTo
  
  'RptObject.Params.Find("DocProjectData").Value  = 'Not use if AllDocProject is true
  'RptObject.Params.Find("DocAreaData").Value     = 'Not use if AllDocArea is true
  'RptObject.Params.Find("DocAgentData").Value    = 'Not use if AllDocAgent is true
  'RptObject.Params.Find("ItemAgentData").Value   = 'Not use if AllItemAgent is true
  RptObject.Params.Find("DocType").Value          = "PV" 'PV for Payment Voucher & OR for Official Receipt
  'RptObject.Params.Find("DocumentData").Value    = 'Not use if AllDocument is true
  'RptObject.Params.Find("GroupBy").Value         = 'If you wanted to grouping the data
  RptObject.Params.Find("IncludeCancelled").Value = false
  'RptObject.Params.Find("ItemAreaData").Value    = 'Not use if AllItemArea is true
  'RptObject.Params.Find("ItemProjectData").Value = 'Not use if AllItemProject is true
  RptObject.Params.Find("PaymentMethodData").Value  = "310-001"
  RptObject.Params.Find("PrintDocumentStyle").Value = false
  RptObject.Params.Find("SelectDate").Value         = true 'For Post Date
  'RptObject.Params.Find("SelectDocDate").Value     = 'For Doc Date
  RptObject.Params.Find("SortBy").Value             = "PostDate;DocNo" 
 
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDetail")
  Set lDataSet3 = RptObject.DataSets.Find("cdsTax")
  MsgBox "Count " & lDataSet.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Description").AsString
	lDataSet2.First
    While (not lDataSet2.eof)
	  MsgBox lDataSet2.FindField("Code").AsString & " " & lDataSet2.FindField("Description").AsString
	  lDataSet2.Next
    Wend
	lDataSet.Next
  Wend
  'For GST List
  MsgBox "GST Code Count " & lDataSet3.RecordCount
  lDataSet3.First
  While (not lDataSet3.eof)
    MsgBox lDataSet3.FindField("Code").AsString
	lDataSet3.Next
  Wend
End Function

AR_Customer

AR_Customer - Script
'Copy below script & paste to notepad & name it as eg AR_Customer.vbs
Call CheckLogin
Call InsertData

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function InsertData
Dim BizObject, lMain, lDetail
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_Customer") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsBranch") 'lDetail contains detail data  
  
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  BizObject.New
  lMain.FindField("Code").AsString       = "300-Test"
  lMain.FindField("CompanyName").AsString = "Cash Sales"
    
  'Step 5: Insert Data - Detail
  'For 1st Branch
  lDetail.Edit
  lDetail.FindField("BranchName").AsString  = "BILLING"
  lDetail.FindField("Address1").AsString    = "Address1"
  lDetail.FindField("Address2").AsString    = "Address2"
  lDetail.FindField("Address3").AsString    = "Address3"
  lDetail.FindField("Address4").AsString    = "Address4"  
  lDetail.FindField("Attention").AsString   = "Attention"  
  lDetail.FindField("Phone1").AsString      = "Phone1"
  lDetail.FindField("Fax1").AsString        = "Fax1"
  lDetail.FindField("Email").AsString       = "EmailAddress"
  lDetail.Post
  
  'For 2nd Branch
  lDetail.Append
  lDetail.FindField("BranchName").AsString  = "Branch1"
  lDetail.FindField("Address1").AsString    = "DAddress1"
  lDetail.FindField("Address2").AsString    = "DAddress2"
  lDetail.FindField("Address3").AsString    = "DAddress3"
  lDetail.FindField("Address4").AsString    = "DAddress4"  
  lDetail.FindField("Attention").AsString   = "DAttention"  
  lDetail.FindField("Phone1").AsString      = "DPhone1"
  lDetail.FindField("Fax1").AsString        = "DFax1"
  lDetail.FindField("Email").AsString       = "DEmailAddress"
  lDetail.Post

  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
 
  'End Looping yr data

  'Step 7 : Logout after done  
  'ComServer.Logout
  
  MsgBox "Done"  
End Function

AR_Customer-Edit

AR_Customer - Edit Script
'Copy below script & paste to notepad & name it as eg AR_Customer.vbs
Call EditARCustomer
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function EditARCustomer
Dim ComServer, BizObject, lDataSet, lDataSet2
 
  'Step 1 Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB" 
  END IF
 
  'Step 2 Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_Customer") 
 
  'Step 3 Set Dataset
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet") 'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsBranch") 'lDetailDataSet contains detail data  
  
  'Step 4 Find Customer Code
  BizObject.Params.Find("Code").Value = "300-Test"
  
  BizObject.Open
  BizObject.Edit
  lMainDataSet.Edit
  lMainDataSet.FindField("CompanyName").value = "Testing 123-Changed"
 
  'Step 5 For 1st Branch
    v = "BILLING"
 
    if (lDetailDataSet.Locate("BranchName", v, false, false)) then
	  lDetailDataSet.Edit 
      lDetailDataSet.FindField("Address1").AsString   = "Address1-Changed"
      lDetailDataSet.FindField("Address2").AsString   = "Address2-Changed"
      lDetailDataSet.FindField("Address3").AsString   = "Address3-Changed"
      lDetailDataSet.FindField("Address4").AsString   = "Address4-Changed"
      lDetailDataSet.FindField("Attention").AsString  = "Attention-Changed"
      lDetailDataSet.FindField("Phone1").AsString     = "Phone1-Changed"
      lDetailDataSet.FindField("Fax1").AsString       = "Fax1-Changed"
      lDetailDataSet.FindField("Email").AsString      = "EmailAddress-Changed"
      lDetailDataSet.Post
	end if
 'Step 5 For 2nd Branch
    v = "Branch1"
 
    if (lDetailDataSet.Locate("BranchName", v, false, false)) then 
      lDetailDataSet.Edit
      lDetailDataSet.FindField("Address1").AsString   = "DAddress1-Changed"
      lDetailDataSet.FindField("Address2").AsString   = "DAddress2-Changed"
      lDetailDataSet.FindField("Address3").AsString   = "DAddress3-Changed"
      lDetailDataSet.FindField("Address4").AsString   = "DAddress4-Changed"
      lDetailDataSet.FindField("Attention").AsString  = "DAttention-Changed"
      lDetailDataSet.FindField("Phone1").AsString     = "DPhone1-Changed"
      lDetailDataSet.FindField("Fax1").AsString       = "DFax1-Changed"
      lDetailDataSet.FindField("Email").AsString      = "DEmailAddress-Changed"
      lDetailDataSet.Post  
   end IF 
  'Step 6 Save Customer
  BizObject.Save
  BizObject.Close
  MsgBox "Done"
End Function

GL.TrialBalance.RO

GL Trial Balance Report Object Script
'Copy below script & paste to notepad & name it as eg GL.TrialBalance.RO.vbs
Call GetGLTBData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetGLTBData
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("GL.TrialBalance.RO") 
 
  'Step 3: Spool parameters
  RptObject.Params.Find("AllProject").Value      = true
  RptObject.Params.Find("AllAgent").Value        = true
  RptObject.Params.Find("AllArea").Value         = true
  RptObject.Params.Find("LedgerType").Value      = "G" 'G = Legder, S = Debtor, P = Supplier
  'RptObject.Params.Find("ProjectData").Value    = 'Not use if AllArea is true
  RptObject.Params.Find("ShowZeroBalance").Value = false
  RptObject.Params.Find("SortBy").Value          = "PostDate;DocNo" 
  RptObject.Params.Find("UseDescription2").Value = false
   
  lDateFrom = CDate("October 27, 2016")
  lDateTo = CDate("December 31, 2016")
 
  'For Post Date From & Date To'
  RptObject.Params.Find("DateFrom").Value       = lDateFrom 
  RptObject.Params.Find("DateTo").Value         = lDateTo

  'RptObject.Params.Find("AgentData").Value      = 'Not use if AllAgent is true
  'RptObject.Params.Find("AreaData").Value       = 'Not use if AllArea is true
  
  RptObject.Params.Find("SortBy").Value          = "Code;Description" 
 
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsGLAccount")

  MsgBox "Count " & lDataSet.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "Month To Date"
	MsgBox lDataSet.FindField("Code").AsString & " DR=>" & lDataSet.FindField("MTDDR").AsString & " CR=>" &	lDataSet.FindField("MTDCR").AsString
	
	MsgBox "Year To Date"
	MsgBox lDataSet.FindField("Code").AsString & " DR=>" & lDataSet.FindField("YTDDR").AsString & " CR=>" &	lDataSet.FindField("YTDCR").AsString
	lDataSet.Next
  Wend
  
  'For Account List
  lDataSet2.First
  While (not lDataSet2.eof)
	MsgBox lDataSet2.FindField("Code").AsString & " " & lDataSet2.FindField("Description").AsString
	lDataSet2.Next
  Wend
  
End Function

Customer.Aging.RO

Customer Aging Report Object Script
'Copy below script & paste to notepad & name it as eg customer_aging_ro.vbs
Call GetCustStatementData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

Function GetCustStatementData
Const Quote = """"
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo, lAgeData
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF

  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Customer.Aging.RO") 
 
  'Step 3: Spool parameters
  lAgeData = "<?xml version=" & Quote & "1.0" & Quote & " standalone=" & Quote & "yes" & Quote & "?>  <DATAPACKET Version=" & Quote & "2.0" & Quote & "><METADATA><FIELDS>" &_
       "<FIELD attrname=" & Quote & "ColumnNo" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "ColumnType" & Quote & " fieldtype=" & Quote & "string" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
       "<FIELD attrname=" & Quote & "Param1" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/><FIELD attrname=" & Quote & "Param2" & Quote & " fieldtype=" & Quote & "i4" & Quote & " required=" & Quote & "true" & Quote & "/>" &_
       "<FIELD attrname=" & Quote & "IsLocal" & Quote & " fieldtype=" & Quote & "boolean" & Quote & "/><FIELD attrname=" & Quote & "HeaderScript" & Quote & " fieldtype=" & Quote & "bin.hex" & Quote & " SUBTYPE=" & Quote & "Text" & Quote & " WIDTH=" & Quote & "1" & Quote & "/>" &_
       "</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo=" & Quote & "0" & Quote & " ColumnType=" & Quote & "" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "1" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "0" & Quote & " Param2=" & Quote & "0" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "2" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-1" & Quote & " Param2=" & Quote & "-1" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "3" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-2" & Quote & " Param2=" & Quote & "-2" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "4" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-3" & Quote & " Param2=" & Quote & "-3" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "5" & Quote & " ColumnType=" & Quote & "A" & Quote & " Param1=" & Quote & "-4" & Quote & " Param2=" & Quote & "-4" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;" & Quote & "/>" &_
       "<ROW ColumnNo=" & Quote & "6" & Quote & " ColumnType=" & Quote & "B" & Quote & " Param1=" & Quote & "-999999" & Quote & " Param2=" & Quote & "-5" & Quote & " IsLocal=" & Quote & "FALSE" & Quote & " HeaderScript=" & Quote & "ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;" & Quote & "/>" &_
       "</ROWDATA></DATAPACKET>"
  RptObject.Params.Find("ActualGroupBy").Value         = "Code;CompanyName" 'Fixed
'  RptObject.Params.Find("AgentData").Value            =  'Not use if AllAgent is True
  RptObject.Params.Find("AgingData").Value            = lAgeData 'Fixed

  lDateTo = CDate("August 31, 2016")
  RptObject.Params.Find("AgingDate").Value            = lDateTo  

  RptObject.Params.Find("AgingOn").Value              = "I" 'Fixed
  RptObject.Params.Find("AllAgent").Value             = true
  RptObject.Params.Find("AllArea").Value              = true
  RptObject.Params.Find("AllCompany").Value           = false
  RptObject.Params.Find("AllCompanyCategory").Value   = true
  RptObject.Params.Find("AllControlAccount").Value    = true
  RptObject.Params.Find("AllCurrency").Value          = true
  RptObject.Params.Find("AllDocProject").Value        = true
'  RptObject.Params.Find("AreaData").Value             =  'Not use if AllArea is True
'  RptObject.Params.Find("CompanyCategoryData").Value  =  'Not use if AllCompanyCategory is True
  RptObject.Params.Find("CompanyData").Value          = "300-A0001"& vbCRLF & "300-C0001" 'Filter by Customer Code 300-A0001 & 300-C0001
'  RptObject.Params.Find("ControlAccountData").Value   =  'Not use if AllControlAccount is True
'  RptObject.Params.Find("CurrencyData").Value         =  'Not use if AllCurrency is True
'  RptObject.Params.Find("DocProjectData").Value       =  'Not use if AllDocProject is True
  RptObject.Params.Find("FilterPostDate").Value        = false
'  RptObject.Params.Find("GroupBy").Value               = 'Not use 
  RptObject.Params.Find("IncludePDC").Value        = false
  RptObject.Params.Find("IncludeZeroBalance").Value   = false
  RptObject.Params.Find("SortBy").Value               = "Code;CompanyName"
  RptObject.Params.Find("DateTo").Value               = lDateTo

 
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocument")
  MsgBox "Count " & lDataSet.RecordCount

  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("Code").AsString & " " & lDataSet.FindField("CompanyName").AsString & " " & lDataSet.FindField("C1").AsString
	lDataSet2.First
    While (not lDataSet2.eof)
	  MsgBox lDataSet2.FindField("DocNo").AsString & " " & lDataSet2.FindField("C1").AsString
	  lDataSet2.Next
    Wend
	lDataSet.Next
  Wend
End Function

GL.JE.RO

GL Journal Voucher Report Object Script
'Copy below script & paste to notepad & name it as eg GLJE_ro.vbs
Call GetCustomerData

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

Function GetCustomerData
Dim ComServer, RptObject, lDataSet, lDataSet2, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF

  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("GL.JE.RO") 

  'Step 3: Spool parameters
  RptObject.Params.Find("AllCurrency").Value = true
  RptObject.Params.Find("AllDocProject").Value = true
  RptObject.Params.Find("AllDocument").Value = true
  RptObject.Params.Find("AllItemProject").Value = true
  RptObject.Params.Find("AllItemArea").Value = true
  RptObject.Params.Find("AllItemAgent").Value = true
  RptObject.Params.Find("AllDocAgent").Value = true
  RptObject.Params.Find("AllDocArea").Value = true
  RptObject.Params.Find("AllPaymentMethod").Value = true

  lDateFrom = CDate("December 1, 2017")
  lDateTo = CDate("December 31, 2017")

  RptObject.Params.Find("DateFrom").Value = lDateFrom
  RptObject.Params.Find("DocDateFrom").Value = lDateFrom
  RptObject.Params.Find("DateTo").Value = lDateTo
  RptObject.Params.Find("DocDateTo").Value = lDateTo
  RptObject.Params.Find("IncludeCancelled").Value = false
  RptObject.Params.Find("PrintDocumentStyle").Value = false
  RptObject.Params.Find("SelectDate").Value = true 'Post Date
  RptObject.Params.Find("SelectDocDate").Value = false 'Doc Date
  
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDetail")
  MsgBox "Count " & lDataSet.RecordCount

  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Description").AsString
	lDataSet2.First
    While (not lDataSet2.eof)
	  MsgBox lDataSet2.FindField("Code").AsString & " " & lDataSet2.FindField("Description").AsString
	  lDataSet2.Next
    Wend
	lDataSet.Next
  Wend
End Function

SL_CS

SL_CS Script
'Copy below script & paste to notepad & name it as eg SL_CS.vbs
Call InsertData

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

Function InsertData
Dim ComServer, BizObject, lDate

  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB" 
  END IF

  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("SL_CS") 

  'Step 3: Set Dataset
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data  
  
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2016")
  BizObject.New
  lMainDataSet.FindField("DocKey").value = -1
  lMainDataSet.FindField("DocNo").value = "--IV Test--"
  lMainDataSet.FindField("DocDate").value = lDate
  lMainDataSet.FindField("PostDate").value = lDate
  lMainDataSet.FindField("Code").value = "300-C0001" 'Customer Code
  lMainDataSet.FindField("Description").value = "Sales"
    
  'Step 5: Insert Data - Detail
  'For Tax Inclusive = True with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "500-000" 'Sales Account Code  & can ignore if had itemcode
  lDetailDataSet.FindField("Description").value =  "Sales Item A"
  lDetailDataSet.FindField("Qty").value =  1
  lDetailDataSet.FindField("Tax").value =  "SR"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("UnitPrice").value = 410.37
  lDetailDataSet.FindField("Amount").value = 410.37
  lDetailDataSet.FindField("TaxAmt").value = 24.63
  
  lDetailDataSet.DisableControls
  lDetailDataSet.FindField("TaxInclusive").value =  1
  lDetailDataSet.EnableControls
  
  lDetailDataSet.Post
  
  'For Tax Inclusive = False with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "500-000"
  lDetailDataSet.FindField("Description").value =  "Sales Item B"
  lDetailDataSet.FindField("Qty").value =  1
  lDetailDataSet.FindField("Tax").value =  "SR"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("UnitPrice").value = 94.43
  lDetailDataSet.FindField("Amount").value = 94.43
  lDetailDataSet.FindField("TaxAmt").value = 5.66
  lDetailDataSet.Post

  'For With Item Code
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("ItemCode").value = "ANT"
  lDetailDataSet.FindField("Description").value =  "Sales Item B"
  lDetailDataSet.FindField("Qty").value =  2
  lDetailDataSet.FindField("Tax").value =  "SR"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("UnitPrice").value = 100
  lDetailDataSet.FindField("Amount").value = 200
  lDetailDataSet.FindField("TaxAmt").value = 12
  lDetailDataSet.Post

  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  ComServer.Logout
  MsgBox "Done"
End Function

Customer.PM.RO

Customer.PM.RO Script
'Copy below script & paste to notepad & name it as eg Customer.PM.RO.vbs
Call GetARPMData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetARPMData
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Customer.PM.RO") 
 
  'Step 3: Spool parameters
  'RptObject.Params.Find("AgentData").Value               = 'Not use if AllAgent is true
  'RptObject.Params.Find("CompanyCategoryData").Value     = 'Not use if AllCompanyCategory is true
  RptObject.Params.Find("AllAgent").Value                = true
  RptObject.Params.Find("AllCompanyCategory").Value      = true
  RptObject.Params.Find("AllArea").Value                 = true
  RptObject.Params.Find("AllCompany").Value              = true
  RptObject.Params.Find("AllCurrency").Value             = true
  RptObject.Params.Find("AllDocument").Value             = false
  RptObject.Params.Find("AllPaymentMethod").Value        = true
  'RptObject.Params.Find("AreaData").Value                = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyData").Value             = 'Not use if AllCompany is true
  'RptObject.Params.Find("CurrencyData").Value            = 'Not use if AllCurrency is true

  lDateFrom = CDate("January 01, 2017")
  lDateTo = CDate("December 31, 2017")
  
  RptObject.Params.Find("DateFrom").Value                = lDateFrom
  RptObject.Params.Find("DateTo").Value                  = lDateTo
  RptObject.Params.Find("DocumentData").Value            = "VCOR-00049"
  'RptObject.Params.Find("GroupBy").Value                 = 'If you wanted to grouping the data
  RptObject.Params.Find("IncludeCancelled").Value        = false
  'RptObject.Params.Find("PaymentMethodData").Value       = 'Not use if AllPaymentMethod is true
  RptObject.Params.Find("PrintDocumentStyle").Value      = false
  RptObject.Params.Find("SelectDate").Value              = true
  RptObject.Params.Find("ShowUnappliedAmountOnly").Value = false
  RptObject.Params.Find("SortBy").Value                  = "PostDate;DocNo;Code"
  RptObject.Params.Find("AllDocProject").Value           = true
  RptObject.Params.Find("AllItemProject").Value          = true
  'RptObject.Params.Find("DocProjectData").Value          = 'Not use if AllDocProject is true
  'RptObject.Params.Find("ItemProjectData").Value         = 'Not use if AllItemProject is true  
  
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsKnockOff")
  Set lDataSet3 = RptObject.DataSets.Find("cdsKnockOffDetail")
  MsgBox "Count " & lDataSet.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("DocKey").AsString & " " &  lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Code").AsString
	MsgBox "cdsKnockOff Count " & lDataSet2.RecordCount
	lDataSet2.First
    While (not lDataSet2.eof)
	  MsgBox lDataSet2.FindField("FromDocKey").AsString & " " & lDataSet2.FindField("DocNo").AsString & " " & lDataSet2.FindField("KOAmt").AsString
	  lDataSet2.Next
    Wend
    MsgBox "cdsKnockOffDetail Count " & lDataSet3.RecordCount
	lDataSet3.First
    While (not lDataSet3.eof)
      MsgBox lDataSet3.FindField("FromDocKey").AsString & " " & lDataSet3.FindField("DocNo").AsString & " " & lDataSet3.FindField("KOAmt").AsString
  	  lDataSet3.Next
    Wend	
	lDataSet.Next
  Wend
End Function

Sales.IV.RO

Sales.IV.RO Script
'Copy below script & paste to notepad & name it as eg Sales.IV.RO.vbs
Call GetSalesIVData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetSalesIVData
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Sales.IV.RO") 
 
  'Step 3: Spool parameters
  'RptObject.Params.Find("AgentData").Value              = 'Not use if AllAgent is true
  RptObject.Params.Find("AllAgent").Value               = true
  RptObject.Params.Find("AllArea").Value                = true
  RptObject.Params.Find("AllCompany").Value             = false
  RptObject.Params.Find("AllCurrency").Value            = true
  RptObject.Params.Find("AllDocProject").Value          = true
  RptObject.Params.Find("AllDocument").Value            = true
  RptObject.Params.Find("AllItem").Value                = true
  RptObject.Params.Find("AllItemProject").Value         = true
  RptObject.Params.Find("AllLocation").Value            = true
  RptObject.Params.Find("AllStockGroup").Value          = true
  RptObject.Params.Find("AllCompanyCategory").Value     = true
  RptObject.Params.Find("AllBatch").Value               = true
  RptObject.Params.Find("AllTariff").Value              = true 'For Version 776 & above
  'RptObject.Params.Find("TariffData").Value             = 'Not use if TariffData is true - For Version 776 & above
  'RptObject.Params.Find("AreaData").Value               = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyCategoryData").Value    = 'Not use if AllCompanyCategory is true
  RptObject.Params.Find("CompanyData").Value            = "300-C0001"
  'RptObject.Params.Find("CurrencyData").Value           = 'Not use if AllCurrency is true

  lDateFrom = CDate("January 01, 2017")
  lDateTo = CDate("December 31, 2017")
  
  RptObject.Params.Find("DateFrom").Value                = lDateFrom
  RptObject.Params.Find("DateTo").Value                  = lDateTo
  'RptObject.Params.Find("DocProjectData").Value          = 'Not use if AllDocProject is true
  'RptObject.Params.Find("DocumentData").Value            = 'Not use if AllDocument is true
  'RptObject.Params.Find("GroupBy").Value                 = 'If you wanted to grouping the data
  'RptObject.Params.Find("CategoryData").Value            = 'Not use if HasCategory is false
  'RptObject.Params.Find("CategoryTpl").Value             = 'For Internal use only
  RptObject.Params.Find("IncludeCancelled").Value        = false
  RptObject.Params.Find("HasCategory").Value             = false
  'RptObject.Params.Find("ItemData").Value                = 'Not use if AllItem is true
  'RptObject.Params.Find("ItemProjectData").Value         = 'Not use if AllItemProject is true
  'RptObject.Params.Find("LocationData").Value            = 'Not use if AllLocation is true
  'RptObject.Params.Find("ItemCategoryData").Value        = 'For Internal use only
  'RptObject.Params.Find("BatchData").Value               = 'Not use if AllBatch is true
  RptObject.Params.Find("PrintDocumentStyle").Value      = false
  RptObject.Params.Find("SelectDate").Value              = true
  RptObject.Params.Find("SortBy").Value                  = "PostDate;DocNo;Code"
  'RptObject.Params.Find("StockGroupData").Value          = 'Not use if AllStockGroup is true
  
  
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocDetail")
  MsgBox "Count " & lDataSet.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox lDataSet.FindField("DocKey").AsString & " " &  lDataSet.FindField("DocNo").AsString & " " & lDataSet.FindField("Code").AsString
	MsgBox "cdsDocDetail Count " & lDataSet2.RecordCount
	lDataSet2.First
    While (not lDataSet2.eof)
	  MsgBox lDataSet2.FindField("DocKey").AsString & " " & lDataSet2.FindField("ItemCode").AsString & " " & lDataSet2.FindField("Amount").AsString
	  lDataSet2.Next
    Wend	
	lDataSet.Next
  Wend
End Function

Customer.DueDocument.RO

Customer.DueDocument.RO Script
'Copy below script & paste to notepad & name it as eg Customer.DueDocument.RO.vbs
Call GetData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetData
Dim ComServer, RptObject, lDataSet, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Customer.DueDocument.RO") 
 
  'Step 3: Spool parameters
  'RptObject.Params.Find("AgentData").Value              = 'Not use if AllAgent is true
  RptObject.Params.Find("AllAgent").Value               = true
  RptObject.Params.Find("AllArea").Value                = true
  RptObject.Params.Find("AllCompany").Value             = false
  RptObject.Params.Find("AllCompanyCategory").Value     = true
  RptObject.Params.Find("AllCurrency").Value            = true
  RptObject.Params.Find("AllDocProject").Value          = true
  RptObject.Params.Find("AllItemProject").Value         = true
  'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyCategoryData").Value   = 'Not use if AllCompanyCategory is true
  RptObject.Params.Find("CompanyData").Value            = "300-A0003"
  'RptObject.Params.Find("CurrencyData").Value          = 'Not use if AllCurrency is true
  'RptObject.Params.Find("DocProjectData").Value        = 'Not use if AllDocProject is true
  'RptObject.Params.Find("GroupBy").Value               = 'If you wanted to grouping the data
  'RptObject.Params.Find("ItemProjectData").Value       = 'Not use if AllItemProject is true
  RptObject.Params.Find("PrintContra").Value            = true
  RptObject.Params.Find("PrintCreditNote").Value        = true
  RptObject.Params.Find("PrintDebitNote").Value         = true
  RptObject.Params.Find("PrintInvoice").Value           = true
  RptObject.Params.Find("PrintOverDue").Value           = true
  RptObject.Params.Find("PrintUnDue").Value             = true
  RptObject.Params.Find("ShowForeignCurrency").Value    = true
  RptObject.Params.Find("ShowLocalCurrency").Value      = true
  RptObject.Params.Find("SortBy").Value                 = "PostDate;DocNo;Code"
  
  lDateTo = CDate("April 12, 2018")
  
  RptObject.Params.Find("DateTo").Value                 = lDateTo
  RptObject.Params.Find("IncludePDCheque").Value        = true  
    
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  MsgBox "Count " & lDataSet.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "Dockey " & lDataSet.FindField("DocKey").AsString 
	MsgBox "DocNo " & lDataSet.FindField("DocNo").AsString 
	MsgBox "DocAmt " & lDataSet.FindField("DocAmt").AsString
	MsgBox "Outstanding " & lDataSet.FindField("Outstanding").AsString
	MsgBox "Code " & lDataSet.FindField("Code").AsString
	lDataSet.Next
  Wend
End Function

Customer.IV.RO

Customer.IV.RO Script
'Copy below script & paste to notepad & name it as eg Customer.IV.RO.vbs
Call GetData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetData
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Customer.IV.RO") 
 
  'Step 3: Spool parameters
  'RptObject.Params.Find("AgentData").Value             = 'Not use if AllAgent is true
  'RptObject.Params.Find("CompanyCategoryData").Value   = 'Not use if AllCompanyCategory is true
  RptObject.Params.Find("AllAgent").Value               = true
  RptObject.Params.Find("AllCompanyCategory").Value     = true
  RptObject.Params.Find("AllArea").Value                = true
  RptObject.Params.Find("AllCompany").Value             = true
  RptObject.Params.Find("AllCurrency").Value            = true
  RptObject.Params.Find("AllDocument").Value            = false
  RptObject.Params.Find("AllPaymentMethod").Value       = true
  'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyData").Value           = 'Not use if AllCompany is true
  'RptObject.Params.Find("CurrencyData").Value          = 'Not use if AllCurrency is true
  
  lDateFrom = CDate("January 01, 2017")
  lDateTo = CDate("December 31, 2017")
  
  RptObject.Params.Find("DateFrom").Value                = lDateFrom
  RptObject.Params.Find("DateTo").Value                  = lDateTo
  RptObject.Params.Find("DocumentData").Value            =  "IV-00012"
  'RptObject.Params.Find("GroupBy").Value                = 'If you wanted to grouping the data
  RptObject.Params.Find("IncludeCancelled").Value        = true
  'RptObject.Params.Find("PaymentMethodData").Value      = 'Not use if AllPaymentMethod is true
  RptObject.Params.Find("PrintDocumentStyle").Value      = false
  RptObject.Params.Find("SelectDate").Value              = true
  RptObject.Params.Find("ShowUnappliedAmountOnly").Value = true
  RptObject.Params.Find("SortBy").Value                  = "DocDate;DocNo;Code"
  RptObject.Params.Find("AllDocProject").Value           = true
  RptObject.Params.Find("AllItemProject").Value          = true
  'RptObject.Params.Find("DocProjectData").Value         = 'Not use if AllDocProject is true
  'RptObject.Params.Find("ItemProjectData  ").Value      = 'Not use if AllItemProject is true
    
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsDocDetail")
  MsgBox "Count " & lDataSet.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "DocNo " & lDataSet.FindField("DocNo").AsString
	MsgBox "DocAmt " & lDataSet.FindField("DocAmt").AsString
	MsgBox "PaymentAmt " & lDataSet.FindField("PaymentAmt").AsString
	
	MsgBox "cdsDocDetail Count " & lDataSet2.RecordCount
	lDataSet2.First
    While (not lDataSet2.eof)
	  MsgBox "Account " & lDataSet2.FindField("Account").AsString
	  MsgBox "Description " & lDataSet2.FindField("Description").AsString
	  MsgBox "Amount " & lDataSet2.FindField("Amount").AsString
	  lDataSet2.Next
    Wend	
	lDataSet.Next
  Wend
End Function

Sales.OutstandingSO.RO

Sales.OutstandingSO.RO Script
'Copy below script & paste to notepad & name it as eg Sales.OutstandingSO.RO.vbs
Call GetData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetData
Dim ComServer, RptObject, lDataSet, lDataSet2, lDataSet3, lDateFrom, lDateTo
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Sales.OutstandingSO.RO") 
 
  'Step 3: Spool parameters
  'RptObject.Params.Find("AgentData").Value            = 'Not use if AllAgent is true
  'RptObject.Params.Find("CompanyCategoryData").Value  = 'Not use if AllCompanyCategory is true
  'RptObject.Params.Find("LocationData").Value         = 'Not use if AllLocation is true
  'RptObject.Params.Find("StockGroupData").Value       = 'Not use if AllStockGroup is true
  RptObject.Params.Find("AllAgent").Value              = true
  RptObject.Params.Find("AllArea").Value               = true
  RptObject.Params.Find("AllCompany").Value            = true
  RptObject.Params.Find("AllDocument").Value           = false
  RptObject.Params.Find("AllItem").Value               = true
  RptObject.Params.Find("AllItemProject").Value        = true
  'RptObject.Params.Find("AreaData").Value              = 'Not use if AllArea is true
  'RptObject.Params.Find("CompanyData").Value           = 'Not use if AllCompany is true
  RptObject.Params.Find("AllTariff").Value              = true 'For Version 776 & above
  'RptObject.Params.Find("TariffData").Value             = 'Not use if TariffData is true - For Version 776 & above

  
  lDateFrom = CDate("January 01, 2017")
  lDateTo = CDate("December 31, 2017") 
  
  'RptObject.Params.Find("DateFrom").Value              = lDateFrom
  'RptObject.Params.Find("DateTo").Value                = lDateTo
  'RptObject.Params.Find("DeliveryDateFrom").Value      = lDateFrom
  'RptObject.Params.Find("DeliveryDateTo").Value        = lDateTo
  RptObject.Params.Find("DocumentData").Value           = "SO-00007"& vbCRLF & "SO-00009"
  'RptObject.Params.Find("GroupBy").Value               = 'If you wanted to grouping the data
  RptObject.Params.Find("IncludeCancelled").Value       = false
  'RptObject.Params.Find("ItemData").Value               = 'Not use if AllItem is true
  RptObject.Params.Find("PrintFulfilledItem").Value     = true 'Print transfered info
  RptObject.Params.Find("PrintOutstandingItem").Value   = true 'Print untransfer info
  'RptObject.Params.Find("ItemProjectData").Value       = 'Not use if AllItemProject is true
  RptObject.Params.Find("SelectDate").Value             = false
  RptObject.Params.Find("SelectDeliveryDate").Value     = false
  RptObject.Params.Find("SortBy").Value                 = "DocDate;DocNo;Code"
  RptObject.Params.Find("AllDocProject").Value          = true
  RptObject.Params.Find("AllLocation").Value            = true
  RptObject.Params.Find("AllCompanyCategory").Value     = true
  RptObject.Params.Find("AllBatch").Value               = true
  RptObject.Params.Find("HasCategory").Value            = false
  RptObject.Params.Find("AllStockGroup").Value          = true
  'RptObject.Params.Find("CategoryData").Value          = 'For Internal use only
  'RptObject.Params.Find("CategoryTpl").Value           = 'For Internal use only
  'RptObject.Params.Find("ItemCategoryData").Value      = 'For Internal use only
  'RptObject.Params.Find("DocProjectData").Value        = 'Not use if AllDocProject is true
  'RptObject.Params.Find("BatchData").Value             = 'Not use if AllBatch is true
  RptObject.Params.Find("TranferDocFilterDate").Value   = false
   
    
  'Step 4: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsTransfer")
  MsgBox "Count " & lDataSet.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "DocKey " & lDataSet.FindField("DocKey").AsString
	MsgBox "DtlKey " & lDataSet.FindField("Dtlkey").AsString
	MsgBox "DocNo " & lDataSet.FindField("DocNo").AsString
	MsgBox "Item Code " & lDataSet.FindField("ItemCode").AsString
	MsgBox "Org Qty " & lDataSet.FindField("SQty").AsString
	MsgBox "Outstanding Qty " & lDataSet.FindField("OutstandingQty").AsString
	
	MsgBox "cdsDocDetail Count " & lDataSet2.RecordCount
	lDataSet2.First
    While (not lDataSet2.eof)
      MsgBox "FromDocKey " & lDataSet2.FindField("FromDocKey").AsString
	  MsgBox "FromDtlKey " & lDataSet2.FindField("FromDtlkey").AsString
	  MsgBox "DocType " & lDataSet2.FindField("DocType").AsString
	  MsgBox "DocNo " & lDataSet2.FindField("DocNo").AsString
	  MsgBox "DocDate " & lDataSet2.FindField("DocDate").AsString
	  MsgBox "Transfer Qty " & lDataSet2.FindField("TransferQty").AsString
	  lDataSet2.Next
    Wend	
	lDataSet.Next
  Wend
End Function

Common.PaymentMethod.RO

Common.PaymentMethod.RO Script
'Copy below script & paste to notepad & name it as eg Common.PaymentMethod.RO.vbs
Call GetInfo
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetInfo
Dim ComServer, RptObject, lDataSet1, lDataSet2
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Common.PaymentMethod.RO") 
 
 
  'Step 3: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet1 = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsPaymentAccount") 'You can link with lDataSet1 using Code to get the description

  MsgBox "Count " & lDataSet1.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet1.First
  While (not lDataSet1.eof)
	MsgBox "Code : " & lDataSet1.FindField("Code").AsString 
	lDataSet1.Next
  Wend    
  
  MsgBox "Count " & lDataSet2.RecordCount
  
  lDataSet2.First
  While (not lDataSet2.eof)
	MsgBox "Code : " & lDataSet2.FindField("Code").AsString 
	MsgBox "Description : " & lDataSet2.FindField("Description").AsString
	lDataSet2.Next
  Wend    
End Function

Common.Agent.RO

Common.Agent.RO Script
'Copy below script & paste to notepad & name it as eg Common.Agent.RO.vbs
Call GetInfo
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetInfo
Dim ComServer, RptObject, lDataSet1
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2: Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Common.Agent.RO") 
 
 
  'Step 3: Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet1 = RptObject.DataSets.Find("cdsMain")
  
  MsgBox "Count " & lDataSet1.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet1.First
  While (not lDataSet1.eof)
	MsgBox "Code : " & lDataSet1.FindField("Code").AsString 
	MsgBox "Description : " & lDataSet1.FindField("Description").AsString 
	lDataSet1.Next
  Wend      
End Function

Stock.Item.RO

Stock.Item.RO Script
'Copy below script & paste to notepad & name it as eg Stock.Item.RO.vbs
Call GetInfo
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function GetInfo
Dim ComServer, RptObject, lDataSet1, lDataSet2, lDateFrom, lDateTo
  'Step 1 Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C\DB\SQLAcc.DCF", "ACC-0002.FDB" 
  END IF
 
  'Step 2 Find and Create the Report Objects
  Set RptObject = ComServer.RptObjects.Find("Stock.Item.RO") 
 
  'Step 3 Spool parameters
    RptObject.Params.Find("AllItem").AsBoolean              = true
    RptObject.Params.Find("AllStockGroup").AsBoolean        = true
    RptObject.Params.Find("AllCustomerPriceTag").AsBoolean  = true
    RptObject.Params.Find("AllSupplierPriceTag").AsBoolean  = true
    'RptObject.Params.Find("CategoryData").AsBlob            =  'Not use
    'RptObject.Params.Find("CategoryTpl").AsBlob             =  'Not use
    'RptObject.Params.Find("CustomerPriceTagData").AsBlob    =  'Not use if AllCustomerPriceTag is True
    'RptObject.Params.Find("SupplierPriceTagData").AsBlob    =  'Not use if AllSupplierPriceTag is True
	
    lDateFrom = CDate("January 01, 2017")
    lDateTo = CDate("December 31, 2017")
  
    'RptObject.Params.Find("DateFrom").AsDate                = lDateFrom 'Not use if SelectDate is False
    'RptObject.Params.Find("DateTo").AsDate                  = lDateTo
    RptObject.Params.Find("HasAltStockItem").AsBoolean      = false
    RptObject.Params.Find("HasBarcode").AsBoolean           = false
    RptObject.Params.Find("HasBOM").AsBoolean               = false
    RptObject.Params.Find("HasCategory").AsBoolean          = false
    RptObject.Params.Find("HasCustomerItem").AsBoolean      = false
    RptObject.Params.Find("HasOpeningBalance").AsBoolean    = false
    RptObject.Params.Find("HasPurchasePrice").AsBoolean     = false
    RptObject.Params.Find("HasSellingPrice").AsBoolean      = false
    RptObject.Params.Find("HasSupplierItem").AsBoolean      = false
    'RptObject.Params.Find("ItemData").AsBlob                = 'Not use if AllItem is True
    'RptObject.Params.Find("ItemCategoryData").AsBlob        = 'Not use if SelectCategory is False
    RptObject.Params.Find("PrintActive").AsBoolean          = true
    RptObject.Params.Find("PrintInActive").AsBoolean        = true
    RptObject.Params.Find("PrintNonStockControl").AsBoolean = true
    RptObject.Params.Find("PrintStockControl").AsBoolean    = true
    RptObject.Params.Find("SelectCategory").AsBoolean       = false
    RptObject.Params.Find("SelectDate").AsBoolean           = false
    RptObject.Params.Find("SortBy").AsString                  = "Code"
    'RptObject.Params.Find("StockGroupData").AsBlob        =  'Not use if AllStockGroup is True  
    
  'Step 4 Perform Report calculation 
  RptObject.CalculateReport()
  Set lDataSet1 = RptObject.DataSets.Find("cdsMain")
  Set lDataSet2 = RptObject.DataSets.Find("cdsUOM") ' To link Master Data use Code
  MsgBox "Count " & lDataSet1.RecordCount
 
  'Step 5 Retrieve the output 
  lDataSet1.First
  While (not lDataSet1.eof)
    MsgBox "Code " & lDataSet1.FindField("Code").AsString 
    MsgBox "Description " & lDataSet1.FindField("Description").AsString 
    MsgBox "Balance Qty " & lDataSet1.FindField("BalSQty").AsString 
    lDataSet1.Next
  Wend

  MsgBox "Count " & lDataSet2.RecordCount
  lDataSet2.First
  While (not lDataSet2.eof)
    MsgBox "Code " & lDataSet2.FindField("Code").AsString 
	MsgBox "UOM " & lDataSet2.FindField("UOM").AsString 
	MsgBox "Rate " & lDataSet2.FindField("Rate").AsString 
	MsgBox "RefPrice " & lDataSet2.FindField("RefPrice").AsString
    lDataSet2.Next
  Wend	
End Function

Stock Item Balance

Get Stock Item Balance Script
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg ItemBalance.vbs
Call CheckLogin
Call GetData

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function GetData
Dim lDataSet, lSQL
  lSQL = "SELECT A.Location, A.Batch, A.ItemCode, B.Description, Sum(A.Qty) Qty FROM ST_TR A "
  lSQL = lSQL & "INNER JOIN ST_ITEM B ON (A.ITEMCODE=B.CODE) " 
  lSQL = lSQL & "WHERE B.IsActive='T' "
  lSQL = lSQL & "AND A.PostDate <= '31 Dec 2017' "
  lSQL = lSQL & "AND A.ItemCode= 'ANT' "
  lSQL = lSQL & "GROUP by A.Location, A.Batch, A.ItemCode, B.Description"
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
  
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "Location : " & lDataSet.FindField("Location").AsString
    MsgBox "Batch : " & lDataSet.FindField("Batch").AsString
    MsgBox "Item Code : " & lDataSet.FindField("ItemCode").AsString
	MsgBox "Item Description : " & lDataSet.FindField("Description").AsString
	MsgBox "Balance Qty : " & lDataSet.FindField("Qty").AsString
	lDataSet.Next
  Wend
End Function

ST_IS

ST_IS Script
'Copy below script & paste to notepad & name it as eg StockIssue.vbs
Call CheckLogin
Call InsertData

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function InsertData
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("ST_IS") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString       = "--IS Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value       = lDate
  lMain.FindField("Description").AsString = "Stock Issue"
    
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Issue out Item A"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.Post

  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("ItemCode").AsString    = "E-BAT"
  lDetail.FindField("Description").AsString = "Issue out Item A"
  lDetail.FindField("Qty").AsFloat          = 4
  lDetail.Post  
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
    
  ComServer.Logout 'Logout after done
  MsgBox "Done"  
End Function

ST_RC

ST_RC Script
'Copy below script & paste to notepad & name it as eg StockReceived.vbs
Call CheckLogin
Call InsertData

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function InsertData
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("ST_RC") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString       = "--RC Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value       = lDate
  lMain.FindField("Description").AsString = "Stock Received"
    
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Received Item A"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UnitCost").AsFloat     = 25.15
  lDetail.Post

  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("ItemCode").AsString    = "E-BAT"
  lDetail.FindField("Description").AsString = "Received Item A"
  lDetail.FindField("Qty").AsFloat          = 4
  lDetail.FindField("UnitCost").AsFloat     = 54
  lDetail.Post  
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
    
  ComServer.Logout 'Logout after done
  MsgBox "Done"  
End Function

ST_AJ

ST_AJ Script
'Copy below script & paste to notepad & name it as eg StockAdjustment.vbs
Call CheckLogin
Call InsertData

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function InsertData
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("ST_AJ") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString       = "--AJ Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value       = lDate
  lMain.FindField("Description").AsString = "Stock Adjustment"
    
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Adjust IN Item A"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UnitCost").AsFloat     = 25.15 'Only IN need UnitCost
  lDetail.Post

  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("ItemCode").AsString    = "E-BAT"
  lDetail.FindField("Description").AsString = "Adjust OUT Item A"
  lDetail.FindField("Qty").AsFloat          = -4
  lDetail.Post  
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
    
  ComServer.Logout 'Logout after done
  MsgBox "Done"  
End Function

ST_XF

ST_XF Script
'Copy below script & paste to notepad & name it as eg ST_XF.vbs
Call CheckLogin
Call InsertData

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function InsertData
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("ST_XF") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString       = "--XF Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value       = lDate
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account - Optional
  lMain.FindField("CompanyName").AsString = "Cash Sales" 'Optional
  lMain.FindField("Description").AsString = "Stock Transfer"
    
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value          = -1
  lDetail.FindField("DocKey").value          = -1
  lDetail.FindField("ItemCode").AsString     = "ANT"
  lDetail.FindField("Description").AsString  = "Transfer Item A"
  lDetail.FindField("Qty").AsFloat           = 10
  lDetail.FindField("UOM").AsString          = "UNIT"
  lDetail.FindField("FromLocation").AsString = "----"
  lDetail.FindField("ToLocation").AsString   = "BALAKONG"
  lDetail.Post

  lDetail.Append
  lDetail.FindField("DtlKey").value          = -1
  lDetail.FindField("DocKey").value          = -1
  lDetail.FindField("ItemCode").AsString     = "HFK"
  lDetail.FindField("Description").AsString  = "Transfer Item B"
  lDetail.FindField("Qty").AsFloat           = 5
  lDetail.FindField("UOM").AsString          = "UNIT"
  lDetail.FindField("FromLocation").AsString = "----"
  lDetail.FindField("ToLocation").AsString   = "BALAKONG"
  lDetail.Post

  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  
  'Step 7 : Logout after done  
  'ComServer.Logout
  
  MsgBox "Done"  
End Function

AP_PI-Edit

AP_PI Edit Script
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg AP_PI.vbs
Call CheckLogin
Call GetData
Call PostData

Dim ComServer, lDataSet

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM AP_PI "
  lSQL = lSQL & "WHERE DocNo='PI-00001' "
  lSQL = lSQL & "AND Code='400-D0001' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function

Function PostData
Dim BizObject, lMain, lDetail
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AP_PI") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Find Doc Number
  If lDataSet.RecordCount > 0 Then   
	lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
  
  
    BizObject.Open
    BizObject.Edit
    lMain.Edit
	lMain.FindField("Description").AsString = "testing" 
  
  'Step 5: Delete all Detail
    While lDetail.RecordCount <> 0
      lDetail.First
	  lDetail.Delete
    Wend
  'Step 6: Append Detail
    lDetail.Append
    lDetail.FindField("DtlKey").value = -1
    lDetail.FindField("Account").value = "610-2000"
    lDetail.FindField("Description").value =  "Purchase Item A"
    lDetail.FindField("Tax").value =  ""
    lDetail.FindField("TaxInclusive").value =  0
    lDetail.FindField("Amount").value = 410.37
    lDetail.FindField("TaxAmt").value = 0
    lDetail.Post
  
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
  
  'Step 8 : Logout after done  
    'ComServer.Logout  
    MsgBox "Done" 
	Else
	MsgBox "Record Not Found" 
  END IF 
   
End Function

SL_DO to SL_IV

SL_DO to SL_IV Script
'Updated 26 Oct 2018
'Copy below script & paste to notepad & name it as eg SL_IV.vbs
Call CheckLogin
Call InsertData1
Call InsertData2

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function InsertData1
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("SL_DO") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2017")
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString       = "--DO Test--"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value       = lDate
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  'lMain.FindField("Address1").AsString    = "" 'Optional
  'lMain.FindField("Address2").AsString    = "" 'Optional
  'lMain.FindField("Address3").AsString    = "" 'Optional
  'lMain.FindField("Address4").AsString    = "" 'Optional
  'lMain.FindField("Phone1").AsString      = "" 'Optional
  lMain.FindField("Description").AsString = "Delivery Order"
    
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("Seq").value            = 1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Sales Item A"
  lDetail.FindField("UOM").AsString         = "BOX"
  lDetail.FindField("Qty").AsFloat          = 2
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("Tax").AsString         = "SR"
  lDetail.FindField("TaxRate").AsString     = "6%"
  lDetail.FindField("TaxInclusive").value   = 0
  lDetail.FindField("UnitPrice").AsFloat    = 100  
  lDetail.FindField("Amount").AsFloat       = 200
  lDetail.FindField("TaxAmt").AsFloat       = 12
  lDetail.Post

  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("Seq").value            = 2
  lDetail.FindField("ItemCode").AsString    = "COVER"
  lDetail.FindField("Description").AsString = "Sales Item B"
  lDetail.FindField("UOM").AsString         = "UNIT"
  lDetail.FindField("Qty").AsFloat          = 3
  lDetail.FindField("Tax").AsString         = "SR"
  lDetail.FindField("TaxRate").AsString     = "6%"
  lDetail.FindField("TaxInclusive").value   = 0
  lDetail.FindField("UnitPrice").AsFloat    = 10  
  lDetail.FindField("Amount").AsFloat       = 30
  lDetail.FindField("TaxAmt").AsFloat       = 1.80
  lDetail.Post  
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "DO Posting Done"  
End Function

Function InsertData2
Dim BizObject, lMain, lDetail, lDate, lDODtl, lxFer, lSQL, v(2)
  'Step 1: Check Is transtered or not
  lSQL = "SELECT DocKey FROM SL_IVDTL "
  lSQL = lSQL & "WHERE FromDockey=(SELECT DocKey FROM SL_DO " 
  lSQL = lSQL & "WHERE DocNo='--DO Test--') "
  Set lxFer = ComServer.DBManager.NewDataSet(lSQL)

  if lxFer.RecordCount = 0 then
    'Step 2: Get DO Information
    lSQL = "SELECT * FROM SL_DODTL "
    lSQL = lSQL & "WHERE Dockey=(SELECT DocKey FROM SL_DO " 
    lSQL = lSQL & "WHERE DocNo='--DO Test--') "
    Set lDODtl = ComServer.DBManager.NewDataSet(lSQL)    
	
	'Step 3: Find and Create the Biz Objects
    Set BizObject = ComServer.BizObjects.Find("SL_IV") 

    'Step 4: Set Dataset
    Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
    Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
    'Step 5 : Insert Data - Master
    lDate = CDate("January 1, 2017")
    BizObject.New
    lMain.FindField("DocKey").value         = -1
    lMain.FindField("DocNo").AsString       = "--IV Test--"
    lMain.FindField("DocDate").value        = lDate
    lMain.FindField("PostDate").value       = lDate
    lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
    lMain.FindField("CompanyName").AsString = "Cash Sales"
    'lMain.FindField("Address1").AsString    = "" 'Optional
    'lMain.FindField("Address2").AsString    = "" 'Optional
    'lMain.FindField("Address3").AsString    = "" 'Optional
    'lMain.FindField("Address4").AsString    = "" 'Optional
    'lMain.FindField("Phone1").AsString      = "" 'Optional
    lMain.FindField("Description").AsString = "Sales"
    
    'Step 6: Insert Data - Detail	
    v(0) = "COVER"
    v(1) = "UNIT"
	
    if (lDODtl.Locate("ItemCode;UOM", v, false, false)) then
      lDetail.Append
      lDetail.FindField("DtlKey").value         = -1
      lDetail.FindField("DocKey").value         = -1
      lDetail.FindField("Seq").value            = 1
      lDetail.FindField("ItemCode").AsString    = lDODtl.FindField("ItemCode").AsString
      lDetail.FindField("Description").AsString = lDODtl.FindField("Description").AsString
      'lDetail.FindField("Account").AsString     = "500-000" 'If you wanted override the Sales Account Code
      lDetail.FindField("UOM").AsString         = lDODtl.FindField("UOM").AsString
	  lDetail.FindField("Qty").AsFloat          = lDODtl.FindField("Qty").AsFloat
      lDetail.FindField("DISC").AsString        = lDODtl.FindField("Disc").AsString
      lDetail.FindField("Tax").AsString         = lDODtl.FindField("Tax").AsString
      lDetail.FindField("TaxRate").AsString     = lDODtl.FindField("TaxRate").AsString
      lDetail.FindField("TaxInclusive").value   = lDODtl.FindField("TaxInclusive").Value
      lDetail.FindField("UnitPrice").AsFloat    = lDODtl.FindField("UnitPrice").AsFloat
      lDetail.FindField("Amount").AsFloat       = lDODtl.FindField("Amount").AsFloat
      lDetail.FindField("TaxAmt").AsFloat       = lDODtl.FindField("TaxAmt").AsFloat
	  lDetail.FindField("FromDocType").AsString = "DO"
	  lDetail.FindField("FromDockey").AsFloat   = lDODtl.FindField("DocKey").AsFloat
	  lDetail.FindField("FromDtlkey").AsFloat   = lDODtl.FindField("DtlKey").AsFloat
      lDetail.Post
	End IF  
    v(0) = "ANT"
    v(1) = "BOX"
	
    if (lDODtl.Locate("ItemCode;UOM", v, false, false)) then
      lDetail.Append
      lDetail.FindField("DtlKey").value         = -1
      lDetail.FindField("DocKey").value         = -1
      lDetail.FindField("Seq").value            = 2
      lDetail.FindField("ItemCode").AsString    = lDODtl.FindField("ItemCode").AsString
      lDetail.FindField("Description").AsString = lDODtl.FindField("Description").AsString
      'lDetail.FindField("Account").AsString     = "500-000" 'If you wanted override the Sales Account Code
      lDetail.FindField("UOM").AsString         = lDODtl.FindField("UOM").AsString
	  lDetail.FindField("Qty").AsFloat          = lDODtl.FindField("Qty").AsFloat
      lDetail.FindField("DISC").AsString        = lDODtl.FindField("Disc").AsString
      lDetail.FindField("Tax").AsString         = lDODtl.FindField("Tax").AsString
      lDetail.FindField("TaxRate").AsString     = lDODtl.FindField("TaxRate").AsString
      lDetail.FindField("TaxInclusive").value   = lDODtl.FindField("TaxInclusive").Value
      lDetail.FindField("UnitPrice").AsFloat    = lDODtl.FindField("UnitPrice").AsFloat
      lDetail.FindField("Amount").AsFloat       = lDODtl.FindField("Amount").AsFloat
      lDetail.FindField("TaxAmt").AsFloat       = lDODtl.FindField("TaxAmt").AsFloat
	  lDetail.FindField("FromDocType").AsString = "DO"
	  lDetail.FindField("FromDockey").AsFloat   = lDODtl.FindField("DocKey").AsFloat
	  lDetail.FindField("FromDtlkey").AsFloat   = lDODtl.FindField("DtlKey").AsFloat
      lDetail.Post
	End IF  
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
  
  'Step 8 : Logout after done  
  'ComServer.Logout
  
  MsgBox "Posting IV Done"
  else MsgBox "--DO Test-- had been transfered. Posting IV aborted"  
  End IF
End Function

SL_IV-Edit

SL_IV-Edit Script
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg SL_IV.vbs
Call CheckLogin
Call GetData
Call PostData

Dim ComServer, lDataSet

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM SL_IV "
  lSQL = lSQL & "WHERE DocNo='IV-00010' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function

Function PostData
Dim BizObject, lMain, lDetail
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("SL_IV") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Find Doc Number
  If lDataSet.RecordCount > 0 Then   
	lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
  
  
    BizObject.Open
    BizObject.Edit
    lMain.Edit
	lMain.FindField("Description").AsString = "Sales - Edited" 
  
  'Step 5: Delete all Detail
    While lDetail.RecordCount <> 0
      lDetail.First
	  lDetail.Delete
    Wend
  'Step 6: Append Detail
    lDetail.Append
    lDetail.FindField("DtlKey").value = -1
    lDetail.FindField("Account").value = "500-000"
    lDetail.FindField("Description").value =  "Edited Item A"
    lDetail.FindField("Tax").value =  ""
    lDetail.FindField("TaxInclusive").value =  0
    lDetail.FindField("Amount").value = 410.37
    lDetail.FindField("TaxAmt").value = 0
    lDetail.Post
  
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
  
  'Step 8 : Logout after done  
    'ComServer.Logout  
    MsgBox "Done" 
	Else
	MsgBox "Record Not Found" 
  END IF 
End Function

GL_JE

GL_JE Script
'Copy below script & paste to notepad & name it as eg GL_JE.vbs
Call InsertGLJE
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function InsertGLJE
Dim ComServer, BizObject, lDataSet, lDataSet2, lDate
 
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB" 
  END IF
 
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_JE") 
 
  'Step 3: Set Dataset
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data  
  
  'Step 4 : Insert Data - Master
  lDate = CDate("January 23, 2017")
  BizObject.New
  lMainDataSet.FindField("DocKey").value = -1
  lMainDataSet.FindField("DocNo").value = "--JV Test--"
  lMainDataSet.FindField("DocDate").value = lDate
  lMainDataSet.FindField("PostDate").value = lDate
  lMainDataSet.FindField("Description").value = "testing desc header"
  lMainDataSet.Post
  
  'Step 5: Insert Data - Detail
  'For Tax Inclusive
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("SEQ").value = 1
  lDetailDataSet.FindField("Code").value = "610-1000"
  lDetailDataSet.FindField("Project").value = "----"
  lDetailDataSet.FindField("Description").value =  "testing desc1"
  lDetailDataSet.FindField("Tax").value =  "TX"
  'lDetailDataSet.FindField("LOCALTAXAMT").value = 17.32 //For JE you can't override (i.e. system auto calc)
  lDetailDataSet.FindField("TaxInclusive").Value = 1
  lDetailDataSet.FindField("LocalDR").value = 306 '//Including GST if TAXINCLUSIVE = 1
  lDetailDataSet.FindField("DR").value = 306 '//If wanted DR <> LocalDR
  
  'For Tax Exclusive 
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("SEQ").value = 2
  lDetailDataSet.FindField("Code").value = "605-200"
  lDetailDataSet.FindField("Project").value = "----"
  lDetailDataSet.FindField("Description").value = "testing desc2"
  lDetailDataSet.FindField("Tax").value =  "TX"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("LocalCR").value = 100
  lDetailDataSet.Post 

  'For No GST
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("SEQ").value = 3
  lDetailDataSet.FindField("Code").value = "610-002"
  lDetailDataSet.FindField("Project").value = "----"
  lDetailDataSet.FindField("Description").value =  "testing desc3"
  lDetailDataSet.FindField("Tax").value =  ""
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("LocalCR").value = 200
  lDetailDataSet.Post 
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "Done"
End Function

GL_JE-Edit

GL_JE-Edit Script
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg GL_JE.vbs
Call CheckLogin
Call GetData
Call PostData

Dim ComServer, lDataSet

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM GL_JE "
  lSQL = lSQL & "WHERE DocNo='JV-00002' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function

Function PostData
Dim BizObject, lMain, lDetail
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_JE") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Find Doc Number
  If lDataSet.RecordCount > 0 Then   
	lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
  
  
    BizObject.Open
    BizObject.Edit
    lMain.Edit
	lMain.FindField("Description").AsString = "Journal - Edited" 
  
  'Step 5: Delete all Detail
    While lDetail.RecordCount <> 0
      lDetail.First
	  lDetail.Delete
    Wend
  'Step 6: Append Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value = -1
  lDetail.FindField("Code").value = "610-000"
  lDetail.FindField("Description").value =  "testing desc1"
  lDetail.FindField("Project").value = "P12W1"
  lDetail.FindField("Tax").value =  ""
  lDetail.FindField("TaxInclusive").value =  0
  lDetail.FindField("LocalDR").value = 200
  lDetail.FindField("DR").value = 200
  lDetail.Post 

  lDetail.Append
  lDetail.FindField("DtlKey").value = -1
  lDetail.FindField("Code").value = "531-000"
  lDetail.FindField("Description").value =  "testing desc2"
  lDetail.FindField("Project").value = "P13W1"
  lDetail.FindField("Tax").value =  ""
  lDetail.FindField("TaxInclusive").value =  0
  lDetail.FindField("LocalCR").value = 200
  lDetail.FindField("CR").value = 200
  lDetail.Post 
  
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
  
  'Step 8 : Logout after done  
    'ComServer.Logout  
    MsgBox "Done" 
	Else
	MsgBox "Record Not Found" 
  END IF 
End Function

GL_JE-Delete

GL_JE-Delete Script
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg GL_JE.vbs
Call CheckLogin
Call GetData
Call DelData

Dim ComServer, lDataSet

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM GL_JE "
  lSQL = lSQL & "WHERE DocNo='JV-00002' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function

Function DelData
Dim BizObject
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_JE") 
  'Step 3 : Find Doc Number
  If lDataSet.RecordCount > 0 Then 
	lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString
    BizObject.Open
    BizObject.Delete
    BizObject.Close
  
  'Step 4 : Logout after done  
    'ComServer.Logout  
    MsgBox "Done" 
	Else
	MsgBox "Record Not Found" 
  END IF 	
End Function

Get Invoice Next Number

Get Invoice Next Number Script
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg GetNextNo.vbs
Call CheckLogin
Call GetData
Call ShowNextNo

Dim ComServer, lDataSet

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function GetData
Dim lSQL
  lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A "
  lSQL = lSQL & "INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY) "
  lSQL = lSQL & "WHERE A.DOCTYPE='IV' "
  lSQL = lSQL & "AND A.DESCRIPTION='Customer Invoice' "
  lSQL = lSQL & "AND A.STATESET=1 "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function

Function ShowNextNo 
Dim Desc, Fmt, NextNo, lResult, sb
  set sb = CreateObject("System.Text.StringBuilder")
  'Step 2 : Find Doc Number
  If lDataSet.RecordCount > 0 Then   
	lDataSet.First
    Desc = lDataSet.FindField("Description").AsString
	Fmt  = lDataSet.FindField("Format").AsString
	NextNo = lDataSet.FindField("NEXTNUMBER").Value
	
	'Convert from IV-%.5d to IV-{0:d5}
	sb.Append_3 Fmt
	sb.Replace "d", ""
	sb.Replace "%.","{0:d"
	Fmt = sb.ToString & "}"
	
	sb.Length = 0 'clear sb list
	sb.AppendFormat Fmt, NextNo
	
	lResult = sb.ToString
    MsgBox Desc
	MsgBox Fmt
	MsgBox NextNo
	MsgBox lResult
	Else
	MsgBox "Record Not Found" 
  END IF    
End Function

Auto Run Doc. Number

Sales Order Auto Run Doc Number Script
'Copy below script & paste to notepad & name it as eg SL_SO.vbs
'If had prompt Set Default - Just click Yes to avoid keep prompt
Call CheckLogin
Call GetData
Call InsertData

Dim ComServer, lDataSet

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function GetData
Dim lSQL
  lSQL = "SELECT * FROM SY_DOCNO "
  lSQL = lSQL & "WHERE DESCRIPTION='Customer Sales Order 2' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function


Function InsertData
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("SL_SO") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2019")
  BizObject.New
  lMain.FindField("DocKey").value         = -1
  lMain.FindField("DocNo").AsString       = "<<New>>"
  lMain.FindField("DocDate").value        = lDate
  lMain.FindField("PostDate").value       = lDate
  lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
  lMain.FindField("CompanyName").AsString = "Cash Sales"
  lMain.FindField("Address1").AsString    = "" 'Optional
  lMain.FindField("Address2").AsString    = "" 'Optional
  lMain.FindField("Address3").AsString    = "" 'Optional
  lMain.FindField("Address4").AsString    = "" 'Optional
  lMain.FindField("Phone1").AsString      = "" 'Optional
  lMain.FindField("Description").AsString = "Sales Order"
  lMain.FindField("DocNoSetKey").value    = lDataSet.FindField("DocKey").value
    
  'Step 5: Insert Data - Detail
  'For With Item Code
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("DocKey").value         = -1
  lDetail.FindField("Seq").value            = 3
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Sales Item B"
  lDetail.FindField("Qty").AsFloat          = 2
  lDetail.FindField("UOM").AsString         = "UNIT"
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("Tax").AsString         = ""
  lDetail.FindField("TaxRate").AsString     = ""
  lDetail.FindField("TaxInclusive").value   = 0
  lDetail.FindField("UnitPrice").AsFloat    = 100  
  lDetail.FindField("Amount").AsFloat       = 200
  lDetail.FindField("TaxAmt").AsFloat       = 0
  lDetail.Post

  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  
  'Step 7 : Logout after done  
  'ComServer.Logout
  
  MsgBox "Done"  
End Function

GL_PV

Cash Book PV Script
'Copy below script & paste to notepad & name it as eg AR_PM.vbs
Call PostData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function PostData
Dim ComServer, BizObject, lIVNo, lDate
 
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB" 
  END IF
 
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_PV") 
 
  'Step 3: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data  
  
  'Step 4 : Posting
    lDate = CDate("January 23, 2020")
    BizObject.New
    lMain.FindField("DOCKEY").Value           = -1
    lMain.FindField("DocNo").AsString         = "--CB PV Test--" 
    lMain.FindField("DocDate").Value          = lDate
    lMain.FindField("PostDate").Value         = lDate
    lMain.FindField("Description").AsString   = "Compacc System"
    lMain.FindField("PaymentMethod").AsString = "310-001"
	lMain.FindField("CHEQUENUMBER").AsString = "MBB 213245"
    lMain.FindField("DocAmt").AsFloat         = 2019.57
    lMain.FindField("Cancelled").AsString     = "F"
	lMain.Post
  
    lDetailDataSet.Append
    lDetailDataSet.FindField("DTLKEY").value = -1
	lDetailDataSet.FindField("DOCKEY").value = -1
	lDetailDataSet.FindField("Code").AsString = "200-300"
    lDetailDataSet.FindField("DESCRIPTION").AsString = "Maybank - Asus A555LD-xx313H"
	lDetailDataSet.FindField("TAX").AsString = ""
	lDetailDataSet.FindField("TAXAMT").AsFloat = 0
	lDetailDataSet.FindField("TAXINCLUSIVE").AsFloat = 0
	lDetailDataSet.FindField("AMOUNT").AsFloat = 2019.57
    lDetailDataSet.Post

  'Step 5: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
End Function

ST_Item with Opening

ST_Item with Opening Script
'Copy below script & paste to notepad & name it as eg ST_XF.vbs
Call CheckLogin
Call InsertData

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function InsertData
Dim BizObject, lMain, lDtl, lOpn
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("ST_ITEM") 

  'Step 3: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDtl = BizObject.DataSets.Find("cdsUOM") 'lDetail contains detail data  
  Set lOpn = BizObject.DataSets.Find("cdsOpeningBalance") 'lDetail contains detail data  
  
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  BizObject.New
  lMain.FindField("CODE").value = "==Test New Item Code=="
  lMain.FindField("DESCRIPTION").value = "Item Description 123"
  lMain.FindField("STOCKGROUP").value = "DEFAULT"
  lMain.FindField("STOCKCONTROL").value = "T"
  lMain.FindField("ISACTIVE").value = "T"
			    
  'Step 5: Insert Data - Detail
  lDtl.Edit 'For 1St UOM
  lDtl.FindField("UOM").AsString = "PCS"
  lDtl.FindField("Rate").AsFloat = 1
  lDtl.FindField("RefCost").AsFloat = 10.2
  lDtl.FindField("RefPrice").AsFloat = 25
  lDtl.Post

  lDtl.Append 'For 2nd UOM
  lDtl.FindField("UOM").AsString = "CTN"
  lDtl.FindField("Rate").AsFloat = 12
  lDtl.FindField("RefCost").AsFloat = 102
  lDtl.FindField("RefPrice").AsFloat = 240
  lDtl.Post
  
  'Step 6: Insert Data - Opening
  lOpn.Append 
  lOpn.FindField("LOCATION").AsString = "----"
  lOpn.FindField("Qty").AsFloat = 10 'in smallest UOM'
  lOpn.FindField("COST").AsFloat = 10.2
  lOpn.Post

  'Step 7: Save Document
  BizObject.Save
  BizObject.Close
  
  'Step 8 : Logout after done  
  'ComServer.Logout
  
  MsgBox "Done"  
End Function

GL Stock Value-Insert,Edit & Delete

GL Stock Value Insert, Edit & Delete Script
'Available in Version 5.2018.833.759 & above
'Copy below script & paste to notepad & name it as eg GLStockValue.vbs
Call CheckLogin
Call GetData
'Call InsertValue
'Call UpdateValue
Call DeleteValue

Dim ComServer, lDataSet

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function GetData
Dim lSQL
  lSQL = "SELECT Dockey FROM GL_STOCK "
  lSQL = lSQL & "WHERE BalanceStock='330-000' "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
End Function

Function InsertValue
Dim BizObject, lMain, lDetail
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_STOCK") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Find Dockey Record
  If lDataSet.RecordCount > 0 Then   
	lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString  
	
    BizObject.Open
    BizObject.Edit
	
    lDetail.Append
    lDetail.FindField("Project").value = "----"
	lDetail.FindField("SYear").value = 2021
	lDetail.FindField("SMonth").value = 4
	lDetail.FindField("Amount").value = 423.00
    lDetail.Post
	
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  END IF	
End Function

Function UpdateValue
Dim BizObject, lMain, lDetail, v(2)
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_STOCK") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Find Dockey Record
  If lDataSet.RecordCount > 0 Then   
	lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString  
	
    BizObject.Open
    BizObject.Edit

    v(0) = "----" 'Project Code
    v(1) = "2021" 'Year
	v(2) = "3" 'Month to update
	
	if (lDetail.Locate("Project;SYear;SMonth", v, false, false)) then
      lDetail.Edit
      lDetail.FindField("Amount").value = 333.12      
      lDetail.Post
	End IF 
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  END IF	
End Function

Function DeleteValue
Dim BizObject, lMain, lDetail, v(2)
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("GL_STOCK") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
  'Step 4 : Find Dockey Record
  If lDataSet.RecordCount > 0 Then   
	lDataSet.First
    BizObject.Params.Find("DocKey").Value = lDataSet.FindField("DocKey").AsString  
	
    BizObject.Open
    BizObject.Edit

    v(0) = "----" 'Project Code
    v(1) = "2021" 'Year
	v(2) = "4" 'Month to update
	
	if (lDetail.Locate("Project;SYear;SMonth", v, false, false)) then
      lDetail.Delete
	End IF 
  'Step 6: Save Document
    BizObject.Save
    BizObject.Close
    MsgBox "Done"
  END IF	
End Function

Stock Item Template to SL_IV

Stock Item Template to SL_IV Script
'Updated 03 Sep 2021
'Copy below script & paste to notepad & name it as eg SL_IV.vbs
Call CheckLogin
Call InsertData1
Call InsertData2

Dim ComServer

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

function CheckLogin
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB"
	                'UserName, Password, DCF full path, Database filename
  END IF
End Function

Function InsertData1
Dim BizObject, lMain, lDetail, lDate
  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("ST_ITEM_TPL") 

  'Step 3: Set Dataset
  Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
  Set lDetail = BizObject.DataSets.Find("cdsItemTplDtl") 'lDetail contains detail data  
  
  'Begin Looping yr data
  'Step 4 : Insert Data - Master
  BizObject.New
  lMain.FindField("Code").AsString        = "--TPL Test--"
  lMain.FindField("Description").AsString = "Template formt 1"
  lMain.FindField("RefPrice").AsFloat     = 299.15
    
  'Step 5: Insert Data - Detail
  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("Code").AsString        = "--TPL Test--"
  lDetail.FindField("Seq").value            = 1
  lDetail.FindField("ItemCode").AsString    = "ANT"
  lDetail.FindField("Description").AsString = "Sales Item A"
  lDetail.FindField("UOM").AsString         = "BOX"
  lDetail.FindField("Qty").AsFloat          = 2
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("UNITAMOUNT").AsFloat    = 100  
  lDetail.FindField("Amount").AsFloat       = 200
  lDetail.FindField("PRINTABLE").AsString   = "T"
  lDetail.Post

  lDetail.Append
  lDetail.FindField("DtlKey").value         = -1
  lDetail.FindField("Code").AsString        = "--TPL Test--" 
  lDetail.FindField("Seq").value            = 2
  lDetail.FindField("ItemCode").AsString    = "COVER"
  lDetail.FindField("Description").AsString = "Sales Item B"
  lDetail.FindField("UOM").AsString         = "UNIT"
  lDetail.FindField("Qty").AsFloat          = 3
  'lDetail.FindField("DISC").AsString        = "5%+3" 'Optional (eg 5% plus 3 Discount)
  lDetail.FindField("UNITAMOUNT").AsFloat    = 10  
  lDetail.FindField("Amount").AsFloat       = 30
  lDetail.FindField("PRINTABLE").AsString   = "T"
  lDetail.Post  
  'Step 6: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "Template Posting Done"  
End Function

Function InsertData2
Dim BizObject, lMain, lDetail, lDate, lDODtl, lSQL, v(2)
  'Step 1: Get Template Information
  lSQL = "SELECT * FROM ST_ITEM_TPLDTL "
  lSQL = lSQL & "WHERE Code='--TPL Test--' "
  Set lDODtl = ComServer.DBManager.NewDataSet(lSQL)

  if lDODtl.RecordCount > 0 then	
	'Step 2: Find and Create the Biz Objects
    Set BizObject = ComServer.BizObjects.Find("SL_IV") 

    'Step 3: Set Dataset
    Set lMain   = BizObject.DataSets.Find("MainDataSet")  'lMain contains master data
    Set lDetail = BizObject.DataSets.Find("cdsDocDetail") 'lDetail contains detail data  
  
    'Step 4 : Insert Data - Master
    lDate = CDate("January 1, 2021")
    BizObject.New
    lMain.FindField("DocKey").value         = -1
    lMain.FindField("DocNo").AsString       = "--IV Test--"
    lMain.FindField("DocDate").value        = lDate
    lMain.FindField("PostDate").value       = lDate
    lMain.FindField("Code").AsString        = "300-C0001" 'Customer Account
    lMain.FindField("CompanyName").AsString = "Cash Sales"
    'lMain.FindField("Address1").AsString    = "" 'Optional
    'lMain.FindField("Address2").AsString    = "" 'Optional
    'lMain.FindField("Address3").AsString    = "" 'Optional
    'lMain.FindField("Address4").AsString    = "" 'Optional
    'lMain.FindField("Phone1").AsString      = "" 'Optional
    lMain.FindField("Description").AsString = "Sales"
    
    'Step 6: Insert Data - Detail	
	lDODtl.First
    While not lDODtl.Eof
      lDetail.Append
      lDetail.FindField("DtlKey").value         = -1
      lDetail.FindField("DocKey").value         = -1
      lDetail.FindField("Seq").value            = 1
      lDetail.FindField("ItemCode").AsString    = lDODtl.FindField("ItemCode").AsString
      lDetail.FindField("Description").AsString = lDODtl.FindField("Description").AsString
      lDetail.FindField("UOM").AsString         = lDODtl.FindField("UOM").AsString
      lDetail.FindField("Qty").AsFloat          = lDODtl.FindField("Qty").AsFloat
      lDetail.FindField("DISC").AsString        = lDODtl.FindField("Disc").AsString
      lDetail.FindField("UnitPrice").AsFloat    = lDODtl.FindField("UnitAmount").AsFloat
      lDetail.FindField("Amount").AsFloat       = lDODtl.FindField("Amount").AsFloat
      lDetail.FindField("PRINTABLE").AsString   = lDODtl.FindField("PRINTABLE").AsString
      lDetail.Post
	  lDODtl.Next
	Wend
  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
  
  'Step 8 : Logout after done  
  'ComServer.Logout
  
  MsgBox "Posting IV Done"
  else MsgBox "--No Template found. Posting IV aborted"  
  End IF
End Function

AR_CN

AR_CN Script
'Updated 24 Feb 2023
'Copy below script & paste to notepad & name it as eg AR_CN.vbs
Call InsertData

Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function

Function InsertData
Dim ComServer, BizObject, lDate, lIVNO, v(1)

  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  If not ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0020.FDB" 
  END IF

  'Step 2: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("AR_CN") 

  'Step 3: Set Dataset
  Set lMainDataSet = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data
  Set lDetailDataSet = BizObject.DataSets.Find("cdsDocDetail") 'lDetailDataSet contains detail data  
  Set lKO = BizObject.DataSets.Find("cdsKnockOff") 'Contains IV/DN to knock off data  
  
  'Step 4 : Insert Data - Master
  lDate = CDate("January 1, 2023")
  BizObject.New
  lMainDataSet.FindField("DocKey").value = -1
  lMainDataSet.FindField("DocNo").value = "--CN Test--"
  lMainDataSet.FindField("DocDate").value = lDate
  lMainDataSet.FindField("PostDate").value = lDate
  lMainDataSet.FindField("Code").value = "300-A0001"
  lMainDataSet.FindField("Description").value = "Credit Note"
    
  'Step 5: Insert Data - Detail
  'For Tax Inclusive = True with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "510-2000"
  lDetailDataSet.FindField("Description").value =  "Sales Item A"
  lDetailDataSet.FindField("Tax").value =  "SV"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("Amount").value = 410.37
  lDetailDataSet.FindField("TaxAmt").value = 24.63
  
  lDetailDataSet.DisableControls
  lDetailDataSet.FindField("TaxInclusive").value =  1
  lDetailDataSet.EnableControls
  
  lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post
  
  'For Tax Inclusive = False with override Tax Amount
  lDetailDataSet.Append
  lDetailDataSet.FindField("DtlKey").value = -1
  lDetailDataSet.FindField("DocKey").value = -1
  lDetailDataSet.FindField("Account").value = "510-2000"
  lDetailDataSet.FindField("Description").value =  "Sales Item B"
  lDetailDataSet.FindField("Tax").value =  "SV"
  lDetailDataSet.FindField("TaxInclusive").value =  0
  lDetailDataSet.FindField("Amount").value = 94.43
  lDetailDataSet.FindField("TaxAmt").value = 5.66
  lDetailDataSet.FindField("Changed").value = "F"
  lDetailDataSet.Post

  'Step 7: Knock Off IV
    lIVNO = "--IV Test--"
    v(0) = "IV"
    v(1) = lIVNO
	
    if (lKO.Locate("DocType;DocNo", v, false, false)) then
      lKO.Edit
      lKO.FindField("KOAmt").value = 65.57
      lKO.FindField("KnockOff").AsString = "T"
      lKO.Post
	End IF  

  'Step 7: Save Document
  BizObject.Save
  BizObject.Close
  MsgBox "Done"
End Function


JScript/JavaScript

This Script only can run using Internet Explorer (till IE 11)

AR_IV

AR_IV Script
<html>
<head>
<title>Add Customer Invoice</title>
<script language="JScript">
var ComServer;
 
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 /* UserName, Password */
  }
}
 
function AutoInvoice() {
  var BizObject, lMainDataSet, lDetailDataSet;
 
  CreateSQLAccServer();
 
  BizObject = ComServer.BizObjects.Find('AR_IV');
  lMainDataSet = BizObject.DataSets.Find('MainDataSet');
  lDetailDataSet = BizObject.DataSets.Find('cdsDocDetail');
  BizObject.New();
 
  lMainDataSet.FindField('DocKey').value = -1;
  lMainDataSet.FindField('DocNo').value = "--IV Test--";
  lMainDataSet.FindField('DocDate').value = "01/10/2016";
  lMainDataSet.FindField('PostDate').value = "01/10/2016";
  lMainDataSet.FindField('Code').value = "300-A0003";
  lMainDataSet.FindField('Description').value = "Sales";

  /*For Tax Inclusive = True with override Tax Amount*/
  lDetailDataSet.Append();
  lDetailDataSet.FindField('DtlKey').value = -1;
  lDetailDataSet.FindField('DocKey').value = -1;
  lDetailDataSet.FindField('Account').value = "500-000";
  lDetailDataSet.FindField('Description').value =  "Sales Item A";
  lDetailDataSet.FindField('Tax').value =  "SR";
  lDetailDataSet.FindField('TaxInclusive').value =  0;
  lDetailDataSet.FindField('Amount').value = 410.37;
  lDetailDataSet.FindField('TaxAmt').value = 24.63;
 
  lDetailDataSet.DisableControls();
  lDetailDataSet.FindField('TaxInclusive').value =  1;
  lDetailDataSet.EnableControls();
 
  lDetailDataSet.FindField('Changed').value = "F";
  lDetailDataSet.Post();

  /*For Tax Inclusive = False with override Tax Amount*/
  lDetailDataSet.Append();
  lDetailDataSet.FindField('DtlKey').value = -1;
  lDetailDataSet.FindField('DocKey').value = -1;
  lDetailDataSet.FindField('Account').value = "500-000";
  lDetailDataSet.FindField('Description').value =  "Sales Item B";
  lDetailDataSet.FindField('Tax').value =  "SR";
  lDetailDataSet.FindField('TaxInclusive').value =  0;
  lDetailDataSet.FindField('Amount').value = 94.43;
  lDetailDataSet.FindField('TaxAmt').value = 5.66;
  lDetailDataSet.FindField('Changed').value = "F";
  lDetailDataSet.Post();

  /* Save document */  
    BizObject.Save();
    BizObject.Close();
    alert('Customer Invoice - has been saved.');
}
</script>
</head>
<body>
<input type="submit" value="SYNC" name="btnSubmit" onclick="AutoInvoice()">
</body>
</html>

SL_CS

SL_CS Script
<html>
<head>
<title>Add Cash Sales</title>
<script language="JScript">
var ComServer;

function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 /* UserName, Password */
  }
}

function InsertData() {
  var BizObject, lMain, lDetail;
  
  CreateSQLAccServer();

  /*Step 2: Find and Create the Biz Objects*/
  BizObject = ComServer.BizObjects.Find('SL_CS') ;

  /*Step 3: Set Dataset*/
  lMain   = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lDetail = BizObject.DataSets.Find('cdsDocDetail'); /*lDetail contains detail data */  
  
  /*Begin Looping yr data*/
  /*Step 4 : Insert Data - Master*/
  BizObject.New();
  lMain.FindField('DocKey').value         = -1;
  lMain.FindField('DocNo').AsString       = "--IV Test--";
  lMain.FindField('DocDate').value        = "20/12/2017";
  lMain.FindField('PostDate').value       = "20/12/2017";
  lMain.FindField('Code').AsString        = "300-C0001"; /*Customer Account*/
  lMain.FindField('CompanyName').AsString = "Cash Sales"
  lMain.FindField('Address1').AsString    = ""; /*Optional*/
  lMain.FindField('Address2').AsString    = ""; /*Optional*/
  lMain.FindField('Address3').AsString    = ""; /*Optional*/
  lMain.FindField('Address4').AsString    = ""; /*Optional*/
  lMain.FindField('Phone1').AsString      = ""; /*Optional*/
  lMain.FindField('Description').AsString = "Sales";
    
  /*Step 5: Insert Data - Detail*/
  /*For Tax Inclusive = True with override Tax Amount*/
  lDetail.Append();
  lDetail.FindField('DtlKey').value         = -1;
  lDetail.FindField('DocKey').value         = -1;
  lDetail.FindField('Seq').value            = 1;
  lDetail.FindField('Account').AsString     = "500-000"; /*Sales Account*/
  lDetail.FindField('Description').AsString = "Sales Item A";
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('Tax').AsString         = "SR";
  lDetail.FindField('TaxRate').AsString     = "6%";
  lDetail.FindField('TaxInclusive').value   = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 435;
  lDetail.FindField('Amount').AsFloat       = 410.37; /*Exclding GST Amt*/
  lDetail.FindField('TaxAmt').AsFloat       = 24.63;
  
  lDetail.DisableControls();
  lDetail.FindField('TaxInclusive').value   = 1;
  lDetail.EnableControls();
  
  lDetail.Post();
  
  /*For Tax Inclusive = False with override Tax Amount*/
  lDetail.Append();
  lDetail.FindField('DtlKey').value         = -1;
  lDetail.FindField('DocKey').value         = -1;
  lDetail.FindField('Seq').value            = 2;
  lDetail.FindField('Account').AsString     = "500-000";
  lDetail.FindField('Description').AsString = "Sales Item B";
  lDetail.FindField('Qty').AsFloat          = 1;
  lDetail.FindField('Tax').AsString         = "SR";
  lDetail.FindField('TaxRate').AsString     = "6%";
  lDetail.FindField('TaxInclusive').value   = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 94.43;
  lDetail.FindField('Amount').AsFloat       = 94.43;
  lDetail.FindField('TaxAmt').AsFloat       = 5.66;
  lDetail.Post();

  /*For With Item Code*/
  lDetail.Append();
  lDetail.FindField('DtlKey').value         = -1;
  lDetail.FindField('DocKey').value         = -1;
  lDetail.FindField('Seq').value            = 3;
  lDetail.FindField('ItemCode').AsString    = "ANT";
  lDetail.FindField('Description').AsString = "Sales Item B";
  /*lDetail.FindField('Account').AsString     = "500-000"; If you wanted override the Sales Account Code*/
  lDetail.FindField('Qty').AsFloat          = 2;
  lDetail.FindField('UOM').AsString         = "UNIT";
  /*lDetail.FindField('DISC').AsString        = "5%+3"; Optional (eg 5% plus 3 Discount)*/
  lDetail.FindField('Tax').AsString         = "SR";
  lDetail.FindField('TaxRate').AsString     = "6%";
  lDetail.FindField('TaxInclusive').value   = 0;
  lDetail.FindField('UnitPrice').AsFloat    = 100;
  lDetail.FindField('Amount').AsFloat       = 200;
  lDetail.FindField('TaxAmt').AsFloat       = 12;
  lDetail.Post();

  /*Step 6: Save Document*/
  BizObject.Save();
  BizObject.Close();
    alert('Document has been saved.');
}
</script>
</head>
<body>
<input type="submit" value="SYNC" name="btnSubmit" onclick="InsertData()">
</body>
</html>

AR_PM

AR_PM Script
<html>
<head>
<title>Customer Payment</title>
<script language="JScript">
<html>
<head>
<title>Add Customer Payment</title>
<script language="JScript">
var ComServer;

function CreateSQLAccServer() {
  ComServer = new ActiveXObject("SQLAcc.BizApp");
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 /* UserName, Password */
  }
}

function AddPayment() {
  var BizObject, lMainDataSet, lKnockOffDataSet, V;
  
  CreateSQLAccServer();

  BizObject = ComServer.BizObjects.Find('AR_PM');
  lMainDataSet = BizObject.DataSets.Find('MainDataSet');
  lKnockOffDataSet = BizObject.DataSets.Find('cdsKnockOff');
  BizObject.New();
  
  lMainDataSet.FindField('DocKey').value = -1;
  lMainDataSet.FindField('DocNo').value = "--OR Test--";
  lMainDataSet.FindField('Code').value = "300-C0001";
  lMainDataSet.FindField('DocDate').value = "10/10/2023";
  lMainDataSet.FindField('PostDate').value = "10/10/2023";  
  lMainDataSet.FindField('Description').value = "Payment for Account";
  lMainDataSet.FindField('PaymentMethod').value = "310-001";
  lMainDataSet.FindField('ChequeNumber').value = "";
  lMainDataSet.FindField('DocAmt').AsFloat = 106.10;
  lMainDataSet.FindField('BankCharge').AsFloat = 0;
  lMainDataSet.FindField('UnappliedAmt').AsFloat = 0;
  lMainDataSet.FindField('Cancelled').value = 'F';
  
  v = ComServer.CreateOleVariantArray(2);
  v.SetItem(0, 'IV'); /*Knock Off DocType*/
  v.SetItem(1, 'IV-00172'); /*Knock Off DocNo*/

  if (lKnockOffDataSet.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){ 
          lKnockOffDataSet.Edit();
          lKnockOffDataSet.FindField('KOAmt').AsFloat = 106.10;		  
          lKnockOffDataSet.FindField('KnockOff').AsString = 'T';
          lKnockOffDataSet.Post(); }
    /* Save document */  
    BizObject.Save();
    BizObject.Close();
    alert("Customer Payment - has been saved.");
}

function EditPayment(){
  var BizObject, lMainDataSet, lKnockOffDataSet, V, lDocNo, lDocKey;
  
  CreateSQLAccServer();

  BizObject = ComServer.BizObjects.Find('AR_PM');
  lMainDataSet = BizObject.DataSets.Find('MainDataSet');
  lKnockOffDataSet = BizObject.DataSets.Find('cdsKnockOff');
  
  lDocNo = "--OR Test--"
  lDocKey = BizObject.FindKeyByRef('DocNo', lDocNo);
  BizObject.Params.Find('DocKey').Value = lDocKey;
  
  if (lDocKey != null) {
    BizObject.Open();
    BizObject.Edit();
    lMainDataSet.FindField('Description').value = "Payment for Account-Edited";
    lMainDataSet.FindField('PaymentMethod').value = "310-001";
    lMainDataSet.FindField('ChequeNumber').value = "";
    lMainDataSet.FindField('DocAmt').AsFloat = 200.00;
    lMainDataSet.FindField('BankCharge').AsFloat = 0;
    lMainDataSet.FindField('UnappliedAmt').AsFloat = 0;
    lMainDataSet.FindField('Cancelled').value = 'F';
  
    v = ComServer.CreateOleVariantArray(2);
    v.SetItem(0, 'IV'); /*Knock Off DocType*/
    v.SetItem(1, 'IV-00172'); /*Knock Off DocNo*/

    if (lKnockOffDataSet.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){ 
          lKnockOffDataSet.Edit();
          lKnockOffDataSet.FindField('KOAmt').AsFloat = 200;		  
          lKnockOffDataSet.FindField('KnockOff').AsString = 'T';
          lKnockOffDataSet.Post(); }
    /* Save document */  
      BizObject.Save();
      BizObject.Close();
      alert("Customer Payment - has been Edited & saved.");
   }
}

function DelPayment(){
  var BizObject, lMainDataSet, lKnockOffDataSet, V, lDocNo, lDocKey;
  
  CreateSQLAccServer();

  BizObject = ComServer.BizObjects.Find('AR_PM');
  lMainDataSet = BizObject.DataSets.Find('MainDataSet');
  lKnockOffDataSet = BizObject.DataSets.Find('cdsKnockOff');
  
  lDocNo = "--OR Test--"
  lDocKey = BizObject.FindKeyByRef('DocNo', lDocNo);
  BizObject.Params.Find('DocKey').Value = lDocKey;
  
  if (lDocKey != null) {
    BizObject.Open();
    BizObject.Delete();

    BizObject.Close();
    alert("Customer Payment - has been Deleted.");
   }
}
</script>
</head>
<body>
<input type="submit" value="Add Payment" name="btnSubmit" onclick="AddPayment()">
<input type="submit" value="Edit Payment" name="btnSubmit" onclick="EditPayment()">
<input type="submit" value="Delete Payment" name="btnSubmit" onclick="DelPayment()">
</body>
</html>

Customer.IV.RO

Customer.IV.RO Report Object Script
<html>
  <head>
    <title>Customer.IV.RO</title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <script type="text/javascript">
var ComServer;

function CreateSQLAccServer() {
  ComServer = new ActiveXObject("SQLAcc.BizApp");
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 /* UserName, Password */
  }
}      

function GetData() {  
  var lMain, lDetail, lRptVar, lDateFrom, lDateTo;
  
  elem = document.getElementById('txt1');
  
  CreateSQLAccServer();
   
  lDateFrom = new Date("January 1 2015");
  lDateTo = new Date("December 31, 2015"); 
  
  lRptVar = ComServer.RptObjects.Find('Customer.IV.RO');
  lRptVar.Params.Find('SelectDate').Value           = true;
  lRptVar.Params.Find('DateFrom').Value             = lDateFrom.valueOf();
  lRptVar.Params.Find('DateTo').Value               = lDateTo.valueOf();
  lRptVar.Params.Find('AllAgent').Value             = false;
  lRptVar.Params.Find('AgentData').Value            = "----\nLF"; /*Filter by Agent code ---- & HALIM */
  lRptVar.Params.Find('AllArea').Value              = true;
  lRptVar.Params.Find('AllCompany').Value           = true;
  lRptVar.Params.Find('AllCurrency').Value          = true;
  lRptVar.Params.Find('AllDocProject').Value        = true;
  lRptVar.Params.Find('AllCompanyCategory').Value   = true;
  lRptVar.Params.Find('AllDocument').Value          = true;
  lRptVar.Params.Find('IncludeCancelled').Value   = false;
  lRptVar.Params.Find('PrintDocumentStyle').Value = false;
  lRptVar.Params.Find('AllItemProject').Value     = true;
  lRptVar.Params.Find('AllPaymentMethod').Value   = true;
  lRptVar.CalculateReport();  
  
  lMain   = lRptVar.DataSets.Find('cdsMain');
  lDetail = lRptVar.DataSets.Find('cdsDocDetail');
  /*alert("Count -" + lRptVar.DataSets.Find('cdsDocDetail').RecordCount);*/
  elem.innerHTML += 'From Main'+'\n';
    
  lMain.First(); 
  while (!lMain.eof) {
    elem.innerHTML += lMain.FindField('DocKey').AsString + ' ' +
	                  lMain.FindField('DocNo').AsString + ' ' + lMain.FindField('DocDate').AsString + ' '+
                      lMain.FindField('CompanyName').AsString + ' ' + lMain.FindField('DocAmt').AsString + '\n';
	lMain.Next();  
  }
  elem.innerHTML += 'End Main'+'\n\n';
  
  elem.innerHTML += 'From Detail'+'\n';
  lDetail.First(); 
  while (!lDetail.eof) {
    elem.innerHTML += lDetail.FindField('Dockey').AsString + ' ' + lDetail.FindField('Account').AsString + ' ' + 
	                  lDetail.FindField('Description').AsString + ' ' + lDetail.FindField('Amount').AsString + '\n';
	lDetail.Next();  
  }  
  elem.innerHTML += 'End Detail'+'\n\n';
}
	  
    </script>
  </head>
  <body>
    <form>
      <textarea id="txt1" rows="30" cols="116"></textarea>
      <input type="button" value="Calculate" onclick="GetData()">
    </form>
  </body>
</html>

Customer.RO

Customer.RO Report Object Script
<html>
<head>
<title>Add Customer Invoice</title>
<script language='JScript'>
var ComServer;
 
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 /* UserName, Password */
  }
}

function GetCustomerData() {
  var RptObject, lDataSet, lDataSet2;
  edOutput.value = '';
  edOutput2.value = '';
  //Step 1: Create Com Server object
  CreateSQLAccServer();
  
  //Step 2: Find and Create the Report Objects
  RptObject = ComServer.RptObjects.Find('Customer.RO');
  
  //Step 3: Spool parameters
  RptObject.Params.Find('AllAgent').Value = true;
  RptObject.Params.Find('AllArea').Value = true;
  RptObject.Params.Find('AllCompany').Value = true;
  RptObject.Params.Find('AllCompanyCategory').Value = true;
  RptObject.Params.Find('AllCurrency').Value = true;
  RptObject.Params.Find('AllTerms').Value = true;
  RptObject.Params.Find('SelectDate').Value = true;
  RptObject.Params.Find('PrintActive').Value = true;
  RptObject.Params.Find('PrintInactive').Value = false;
  RptObject.Params.Find('PrintPending').Value = false;
  RptObject.Params.Find('PrintProspect').Value = false;
  RptObject.Params.Find('PrintSuspend').Value = false;
  //RptObject.Params.Find('CompanyData').Value = '300-A0003';
  
  //Step 4: Perform Report calculation 
  RptObject.CalculateReport();
  lDataSet = RptObject.DataSets.Find('cdsMain');
  lDataSet2 = RptObject.DataSets.Find('cdsBranch');
  
  //alert('Count ' + lDataSet.RecordCount);

  //Step 5 Retrieve the output 
  lDataSet.First;
  while  (!lDataSet.eof){
    edOutput.value = edOutput.value + 
	                'Code : ' + lDataSet.FindField('Code').AsString + '\n' + 
	                'Company Name : ' + lDataSet.FindField('CompanyName').AsString +'\n\n';
	lDataSet.Next();
  }
  lDataSet2.First();
  while (!lDataSet2.eof){
	  edOutput2.value = edOutput2.value + 
	                   'Code : '+ lDataSet2.FindField('Code').AsString + '\n' + 
					   'Branch Name : '+ lDataSet2.FindField('BranchName').AsString + '\n' + 
	                   'Address 1 : '+ lDataSet2.FindField('Address1').AsString + '\n' + 
					   'Address 2 : '+ lDataSet2.FindField('Address2').AsString + '\n' + 
					   'Address 3 : '+ lDataSet2.FindField('Address3').AsString + '\n' + 
					   'Address 4 : '+ lDataSet2.FindField('Address4').AsString + '\n' + 
					   'Phone 1 : '+ lDataSet2.FindField('Phone1').AsString  +'\n\n';
	  lDataSet2.Next();
    }
	
}

</script>
</head>
<body>
  <table>
    <tr>
      <th>Main Table</th>
      <th>Branch Branch</th>
    </tr>
    <tr>
      <td>
        <TEXTAREA rows=15 cols=75 name="edOutput"></TEXTAREA>
	  </td>
      <td>
        <TEXTAREA rows=15 cols=75 name="edOutput2"></TEXTAREA>
	  </td>
    </tr>		
  </table>
		
  <table width="83%">
	<tr>
	  <td align="center">
		<input type='submit' value='Sync Data' name='btnSubmit' onclick='GetCustomerData()'>
	  </td>
	</tr>
  </table>
</body>
</html>

Get Next IV Number

Get Next IV Number Script
<html>
<head>
<title>Add Cash Sales</title>
<script language="JScript">
var ComServer, lDataSet;

function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 /* UserName, Password */
  }
}

function zeroPad(num, places) {
  var zero = places - num.toString().length + 1;
  return Array(+(zero > 0 && zero)).join("0") + num;
  /*zeroPad(5, 2); // "05"*/
}

function GetData() {
  var lSQL;
  lSQL = "SELECT A.*, B.NEXTNUMBER FROM SY_DOCNO A ";
  lSQL = lSQL + "INNER JOIN SY_DOCNO_DTL B ON (A.DOCKEY=B.PARENTKEY) ";
  lSQL = lSQL + "WHERE A.DOCTYPE='IV' ";
  lSQL = lSQL + "AND A.DESCRIPTION='Customer Invoice' ";
  lSQL = lSQL + "AND A.STATESET=1 ";
  lDataSet = ComServer.DBManager.NewDataSet(lSQL);  
}

function ShowNextNo() {
  var Desc, Fmt, NextNo, lResult, lPad;
  
  CreateSQLAccServer();  
  GetData();

  if (lDataSet.RecordCount > 0) {   
    lDataSet.First;
    Desc = lDataSet.FindField("Description").AsString;
	Fmt  = lDataSet.FindField("Format").AsString;
	NextNo = lDataSet.FindField("NEXTNUMBER").Value;
    alert(Desc);
	alert(Fmt);
	alert(NextNo);
	
	lPad = Fmt.substr(5, 1);
	lPad = zeroPad(NextNo, lPad)
	Desc = Fmt.substr(0, 3);
	alert(Desc + lPad);
  }	
}
</script>
</head>
<body>
<input type="submit" value="Show Next No" name="btnSubmit" onclick="ShowNextNo()">
</body>
</html>

Customer & Supplier Contra

Customer & Supplier Contra Script
<html>
<head>
<title>Add Customer Invoice</title>
<script language="JScript">
var ComServer;
 
function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 /* UserName, Password */
  }
}
 
function PostARCT() {
  var BizObject, lMain, lKO, V;
 
  CreateSQLAccServer();
 
  BizObject = ComServer.BizObjects.Find('AR_CT');
  lMain = BizObject.DataSets.Find('MainDataSet');
  lKO = BizObject.DataSets.Find('cdsKnockOff');
  BizObject.New();
 
  lMain.FindField('DocKey').value = -1;
  lMain.FindField('DocNo').value = "--CT Test--";
  lMain.FindField('DocDate').value = "01/10/2020";
  lMain.FindField('PostDate').value = "01/10/2020";
  lMain.FindField('Code').value = "300-A0002";
  lMain.FindField('Description').value = "Contra";
  lMain.FindField('DocAmt').value = "100.00";
  //lMain.FindField('UnappliedAmt').value = "0";

  v = ComServer.CreateOleVariantArray(2);
  v.SetItem(0, 'IV'); /*Knock Off DocType*/
  v.SetItem(1, 'IV-00021'); /*Knock Off DocNo*/

  if (lKO.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){ 
          lKO.Edit();
          lKO.FindField('DocAmt').value = "100";		  
          lKO.FindField('KnockOff').AsString = 'T';
          lKO.Post(); }

  /* Save document */  
    BizObject.Save();
    BizObject.Close();
    alert('Customer Contra - has been saved.');
}

function PostAPST() {
  var BizObject, lMain, lKO, V, lDocNo, lDocKey;
 
  CreateSQLAccServer();
 
  BizObject = ComServer.BizObjects.Find('AP_ST');
  lMain = BizObject.DataSets.Find('MainDataSet');
  lKO = BizObject.DataSets.Find('cdsKnockOff');
  
  lDocNo = "--CT Test--"
  lDocKey = BizObject.FindKeyByRef("DocNo", lDocNo)
  BizObject.Params.Find("DocKey").Value = lDocKey  
  
  if (lDocKey != null) {
    BizObject.Open();
	BizObject.Edit();
	lMain.FindField('Code').value = "400-C0001";
	lMain.FindField('DocAmt').value = "100.00";
  //lMain.FindField('UnappliedAmt').value = "0";

   v = ComServer.CreateOleVariantArray(2);
   v.SetItem(0, 'PI'); /*Knock Off DocType*/
   v.SetItem(1, 'PI-00001'); /*Knock Off DocNo*/

    if (lKO.Locate('DocType;DocNo', v.AsOleVariant(), false, false)){ 
          lKO.Edit();
          lKO.FindField('DocAmt').value = "100";		  
          lKO.FindField('KnockOff').AsString = 'T';
          lKO.Post(); }

  /* Save document */  
    BizObject.Save();  
    BizObject.Close();
    alert('Supplier Contra - has been Updated.');	
  }
}
</script>
</head>
<body>
<button onclick="javascript:PostARCT();">PostARCT</button>&nbsp;&nbsp;
<button onclick="javascript:PostAPST();">PostAPST</button>&nbsp;&nbsp;
</body>
</html>

Add Stock Item

Add ST_Item Script
<html>
<head>
<title>Add Stock Item</title>
<script language="JScript">
var ComServer;

function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 /* UserName, Password */
  }
}

function InsertData() {
  var BizObject, lMain, lDetail;
  
  CreateSQLAccServer();

  /*Step 2: Find and Create the Biz Objects*/
  BizObject = ComServer.BizObjects.Find('ST_ITEM') ;

  /*Step 3: Set Dataset*/
  lMain   = BizObject.DataSets.Find('MainDataSet');  /*lMain contains master data*/
  lUOM = BizObject.DataSets.Find('cdsUOM'); /*lDetail contains detail data */  
  
  /*Begin Looping yr data*/
  /*Step 4 : Insert Data - Master*/
  BizObject.New();
  lMain.FindField('Code').AsString        = "Code JScript";
  lMain.FindField('DESCRIPTION').AsString = "Post from JScript"
  lMain.FindField('STOCKGROUP').AsString    = "DEFAULT"; /*Optional*/
  lMain.FindField('STOCKCONTROL').AsString    = "T"; /*Optional*/
  lMain.FindField('ISACTIVE').AsString    = "T"; /*Optional*/
    
  /*Step 5: Insert Data - UOM*/
  lUOM.Edit(); /*For 1St UOM*/
  lUOM.FindField('UOM').AsString = "PCS";
  lUOM.FindField('Rate').AsFloat = 1;
  lUOM.FindField('RefCost').AsFloat = 10.2;
  lUOM.FindField('RefPrice').AsFloat = 25;
  lUOM.Post();

  lUOM.Append(); /*For 2nd UOM*/
  lUOM.FindField('UOM').AsString = "CTN";
  lUOM.FindField('Rate').AsFloat = 12;
  lUOM.FindField('RefCost').AsFloat = 102;
  lUOM.FindField('RefPrice').AsFloat = 240;
  lUOM.Post();

  /*Step 6: Save*/
  BizObject.Save();
  BizObject.Close();
    alert('Item has been saved.');
}
</script>
</head>
<body>
<input type="submit" value="SYNC" name="btnSubmit" onclick="InsertData()">
</body>
</html>

Get Company Profile

Get Company Profile Script
<html>
<head>
<title>Add Cash Sales</title>
<script language="JScript">
var ComServer, lDataSet;

function CreateSQLAccServer() {
  ComServer = new ActiveXObject('SQLAcc.BizApp');
  if (!ComServer.IsLogin) {            /* check whether user has logon */
    ComServer.Login('ADMIN', 'ADMIN', 'C\:\\eStream\\SQLAccounting\\Share\\DEFAULT.DCF', 'SAMPLE.FDB');
 /* UserName, Password */
  }
}

function zeroPad(num, places) {
  var zero = places - num.toString().length + 1;
  return Array(+(zero > 0 && zero)).join("0") + num;
  /*zeroPad(5, 2); // "05"*/
}

function GetData() {
  var lSQL;
  lSQL = "SELECT COMPANYNAME, REMARK, BRN, BRN2, GSTNO, ";
  lSQL = lSQL + "SALESTAXNO, SERVICETAXNO, ";
  lSQL = lSQL + "ADDRESS1,ADDRESS2,ADDRESS3,ADDRESS4 FROM SY_PROFILE ";
  lDataSet = ComServer.DBManager.NewDataSet(lSQL);  
}

function ShowCoProfile() {
  var CoName, Rmk, BRN;
  
  CreateSQLAccServer();  
  GetData();

  if (lDataSet.RecordCount > 0) {   
    lDataSet.First;
    CoName = lDataSet.FindField("COMPANYNAME").AsString;
	Rmk  = lDataSet.FindField("REMARK").AsString;
	BRN = lDataSet.FindField("BRN").Value;
    alert(CoName);
	alert(Rmk);
	alert(BRN);
  }	
}
</script>
</head>
<body>
<input type="submit" value="Show Co Profile" name="btnSubmit" onclick="ShowCoProfile()">
</body>
</html>


Delphi

The below example is assuming after you had check the login status.

GL_JE

GL_JE Script
procedure TfmMain.dxbb_GL_JEClick(Sender: TObject);
var BizApp, lMain, lDtl, lBizObj, lDocKey : Variant;
    i : integer;
begin
  BizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lBizObj := BizApp.BizObjects.Find('GL_JE');
    lMain   := lBizObj.DataSets.Find('MainDataSet');
    lDtl    := lBizObj.DataSets.Find('cdsDocDetail');
    lBizObj.New;
    lMain.FindField('DOCKEY').Value        := -1;
    lMain.FindField('DocNo').Value         := '--JE Test--';
    lMain.FindField('DocDate').Value       := '28 Aug 2017';
    lMain.FindField('PostDate').Value      := '28 Aug 2017';
    lMain.FindField('TAXDATE').Value       := '28 Aug 2017';
    lMain.FindField('Description').Value   := 'Postage';
    lMain.FindField('Cancelled').Value     := 'F';
    lMain.FindField('DOCNOSETKEY').Value   := 0;
    lMain.Post;

    //For Tax Inclusive
    lDtl.Append;
    lDtl.FindField('DTLKEY').Value       := -1;
    lDtl.FindField('DOCKEY').Value       := -1;
    lDtl.FindField('SEQ').Value          := 1;
    lDtl.FindField('CODE').Value         := '610-1000';
    lDtl.FindField('DESCRIPTION').Value  := 'Item Desc 1';
    lDtl.FindField('TAX').Value          := 'TX';
//    lDtl.FindField('LOCALTAXAMT').AsFloat := 17.32;//For JE you can't override (i.e. system auto calc)
    lDtl.FindField('TAXINCLUSIVE').Value  := 1;
    lDtl.FindField('LocalDR').AsFloat     := 306;//Including GST if TAXINCLUSIVE = 1
    lDtl.FindField('DR').AsFloat          := 306;//if wanted DR <> LocalDR
    lDtl.FindField('CHANGED').Value       := 'F';
    lDtl.Post;

    //For Tax Exclusive
    lDtl.Append;
    lDtl.FindField('DTLKEY').Value       := -1;
    lDtl.FindField('DOCKEY').Value       := -1;
    lDtl.FindField('SEQ').Value          := 2;
    lDtl.FindField('CODE').Value         := '605-200';
    lDtl.FindField('DESCRIPTION').Value  := 'Item Desc 2';
    lDtl.FindField('TAX').Value          := 'TX';
    lDtl.FindField('TAXINCLUSIVE').Value := 0;
    lDtl.FindField('LocalCR').AsFloat    := 100;
    lDtl.FindField('CHANGED').Value      := 'F';
    lDtl.Post;

    //For No GST
    lDtl.Append;
    lDtl.FindField('DTLKEY').Value       := -1;
    lDtl.FindField('DOCKEY').Value       := -1;
    lDtl.FindField('SEQ').Value          := 3;
    lDtl.FindField('CODE').Value         := '610-002';
    lDtl.FindField('DESCRIPTION').Value  := 'Item Desc 3';
    lDtl.FindField('TAX').Value          := '';
    lDtl.FindField('TAXINCLUSIVE').Value  := 0;
    lDtl.FindField('LocalCR').AsFloat     := 200;
    lDtl.FindField('CHANGED').Value       := 'F';
    lDtl.Post;

    lBizObj.Save;
    MessageDlg('GL_JE-DocNo : ''--JE Test--'' Posted...', mtInformation, [mbOK],0);
  finally
    lBizObj.Close;
  end;
end;

GL_PV

GL_PV Script
procedure TfmMain.dxbb_GLPVClick(Sender: TObject);
var lMain, lDtl, lBizObj, BizApp : Variant;
    lTime : TDateTime;
begin
  lTime := Now;
  BizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lBizObj := BizApp.BizObjects.Find('GL_PV');
    lMain   := lBizObj.DataSets.Find('MainDataSet');
    lDtl    := lBizObj.DataSets.Find('cdsDocDetail');
    lBizObj.New;
    lMain.FindField('DOCKEY').Value           := -1;
    lMain.FindField('DocNo').AsString         := '--CB PV Test1--';
    lMain.FindField('DocDate').Value          := '18 Aug 2015';
    lMain.FindField('PostDate').Value         := '18 Aug 2015';
    lMain.FindField('TAXDATE').Value          := '18 Aug 2015';
    lMain.FindField('Description').AsString   := 'Compacc System';
    lMain.FindField('PAYMENTMETHOD').AsString := '310-001';
    lMain.FindField('CHEQUENUMBER').AsString  := 'MBB 213245';
    lMain.FindField('DocAmt').AsFloat         := 2019;
    lMain.FindField('Cancelled').AsString     := 'F';
    lMain.FindField('CHANGED').AsString       := 'F';
    lMain.Post;

    lDtl.Append;
    lDtl.FindField('DTLKEY').Value         := -1;
    lDtl.FindField('DOCKEY').Value         := -1;
    lDtl.FindField('Code').AsString        := '200-300';
    lDtl.FindField('DESCRIPTION').AsString := 'Maybank - Asus A555LD-xx313H';
    lDtl.FindField('TAX').AsString         := 'TX';
    lDtl.FindField('TAXAMT').AsFloat       := 114.28;
    lDtl.FindField('TAXINCLUSIVE').Value   := 1;
    lDtl.FindField('AMOUNT').AsFloat       := 2019;
    lDtl.FindField('CHANGED').AsString     := 'F';
    lDtl.Post;
    lBizObj.Save;
    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
               mtInformation, [mbOk], 0);
  finally
    lBizObj.Close;
  end;
end;

AR_Customer

AR_Customer Script
procedure TfmMain.dxbb_CustomerClick(Sender: TObject);
var lMain, lDtl, lBizObj, lBizApp : Variant;
    lTime : TDateTime;
begin
  lTime := Now;
  lBizApp := CreateOleObject('SQLAcc.BizApp');

  lBizObj := lBizApp.BizObjects.Find('AR_Customer');
  lMain   := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsBranch');

  try
    lBizObj.New;
    lMain.FindField('Code').value        := '300-Test';
    lMain.FindField('CompanyName').value := 'Testing 123';

    lDtl.Edit; //For 1st Branch
    lDtl.FindField('BranchName').AsString := 'BILLING';
    lDtl.FindField('Address1').AsString   := 'Address1';
    lDtl.FindField('Address2').AsString   := 'Address2';
    lDtl.FindField('Address3').AsString   := 'Address3';
    lDtl.FindField('Address4').AsString   := 'Address4';
    lDtl.FindField('Attention').AsString  := 'Attention';
    lDtl.FindField('Phone1').AsString     := 'Phone1';
    lDtl.FindField('Fax1').AsString       := 'Fax1';
    lDtl.FindField('Email').AsString      := 'EmailAddress';
    lDtl.Post;

    lDtl.Append; //For 2nd Branch
    lDtl.FindField('BranchName').AsString := 'Branch1';
    lDtl.FindField('Address1').AsString   := 'DAddress1';
    lDtl.FindField('Address2').AsString   := 'DAddress2';
    lDtl.FindField('Address3').AsString   := 'DAddress3';
    lDtl.FindField('Address4').AsString   := 'DAddress4';
    lDtl.FindField('Attention').AsString  := 'DAttention';
    lDtl.FindField('Phone1').AsString     := 'DPhone1';
    lDtl.FindField('Fax1').AsString       := 'DFax1';
    lDtl.FindField('Email').AsString      := 'DEmailAddress';
    lDtl.Post;
    lBizObj.Save;

    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
               mtInformation, [mbOk], 0);
  finally
    lBizObj.Close;
  end;
end;

AR_PM

AR_PM Script
procedure TfmMain.dxbb_ARPMClick(Sender: TObject);
var lMain, lKO, lBizApp, lBizObj, V : Variant;
begin
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lBizObj := lBizApp.BizObjects.Find('AR_PM');
    lMain   := lBizObj.DataSets.Find('MainDataSet');
    lKO     := lBizObj.DataSets.Find('cdsKnockOff');

    lBizObj.New;
    lMain.FindField('DOCKEY').Value           := -1;
    lMain.FindField('DocNo').AsString         := '--PM Test--'; //Payment Document Number
    lMain.FindField('CODE').AsString          := '300-A0001';
    lMain.FindField('DocDate').Value          := '28 Aug 2016';
    lMain.FindField('PostDate').Value         := '28 Aug 2016';
    lMain.FindField('Description').AsString   := 'Payment for A/c';
    lMain.FindField('PaymentMethod').AsString := '320-000';
    lMain.FindField('DocAmt').AsFloat         := 1060;
    lMain.FindField('Cancelled').AsString     := 'F';

    V := lBizApp.CreateOleVariantArray(2);
    V.SetItem(0, 'IV'); //Document Type is either is IV or DN for Sales & PI or SD for Purchase
    V.SetItem(1, '--IV Test--');  //Invoice Document Number

    if lKO.Locate('DocType;DocNo', V.AsOleVariant, False, False) then
      begin
        lKO.Edit;
        lKO.FindField('KOAmt').ASFloat     := 500;
        lKO.FindField('KnockOff').AsString := 'T';
        lKO.Post;
      end;

    lBizObj.Save;
    MessageDlg('AR_PM-DocNo : ''--PM Test--'' Posted...', mtInformation, [mbOK],0);
  finally
    lBizObj.Close;
  end;
end;

AR_PM-Edit

AR_PM Script
procedure TfmMain.dxbb_ARPMClick(Sender: TObject);
var lMain, lKO, lBizApp, lBizObj, V : Variant;
begin
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lBizObj := lBizApp.BizObjects.Find('AR_PM');
    lMain   := lBizObj.DataSets.Find('MainDataSet');
    lKO     := lBizObj.DataSets.Find('cdsKnockOff');

    lDocKey := lBizObj.FindKeyByRef('DocNo', '--PM Test--');
    lBizObj.Params.Find('DocKey').Value := VarToStr(lDocKey);

    If not VarIsNull(lDocKey) Then begin
      lBizObj.Open;
      lBizObj.Edit;
      lMain.FindField('DOCKEY').Value           := -1;
      lMain.FindField('DocDate').Value          := '28 Aug 2016';
      lMain.FindField('PostDate').Value         := '28 Aug 2016';
      lMain.FindField('Description').AsString   := 'Payment for A/c';
      lMain.FindField('PaymentMethod').AsString := '310-000';
      lMain.FindField('DocAmt').AsFloat         := 800.28;
      lMain.FindField('UnappliedAmt').AsFloat   := 100.28;
      lMain.FindField('Cancelled').AsString     := 'F';
      lMain.FindField('CHANGED').AsString       := 'F';

      V := lBizApp.CreateOleVariantArray(2);
      V.SetItem(0, 'IV'); //Document Type is either is IV or DN for Sales & PI or SD for Purchase
      V.SetItem(1, '--IV Test--');  //Document Number

      if lKO.Locate('DocType;DocNo', V.AsOleVariant, False, False) then
        begin
          lKO.Edit;
          lKO.FindField('KOAmt').AsFloat     := 700.28; // IV Knock Off/Offset Amount
          lKO.FindField('KnockOff').AsString := 'T';
          lKO.Post;
        end;

      lBizObj.Save;
      MessageDlg('AR_PM-DocNo : ''--PM Test--'' Updated...', mtInformation, [mbOK],0);
    end;
  finally
    lBizObj.Close;
  end;
end;

ST_Item

ST_Item Script
procedure TfmMain.dxbb_ST_ItemClick(Sender: TObject);
var lMain, lDtl, lBizObj, lBizApp : Variant;
    lTime : TDateTime;
begin
  lTime := Now;
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizObj := lBizApp.BizObjects.Find('ST_ITEM');
  lMain   := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsUOM');

  try
    lBizObj.New;
    lMain.FindField('Code').AsString        := 'Test-1';
    lMain.FindField('Description').AsString := 'Testing - Description';

    lDtl.Edit; //For 1st UOM
    lDtl.FindField('UOM').AsString     := 'PCS';
    lDtl.FindField('Rate').AsFloat     := 1;
    lDtl.FindField('RefCost').AsFloat  := 10.20;
    lDtl.FindField('RefPrice').AsFloat := 25.00;
    lDtl.Post;

    lDtl.Append; //For 2nd UOM
    lDtl.FindField('UOM').AsString     := 'CTN';
    lDtl.FindField('Rate').AsFloat     := 12;
    lDtl.FindField('RefCost').AsFloat  := 102.00;
    lDtl.FindField('RefPrice').AsFloat := 240.00;
    lDtl.Post;
    lBizObj.Save;

    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
               mtInformation, [mbOk], 0);
  finally
    lBizObj.Close;
  end;
end;

ST_Item-Edit

ST_Item Script
procedure TfmMain.dxbb_ST_ItemClick(Sender: TObject);
var lMain, lDtl, lBizObj, lBizApp, lDocKey, V : Variant;
begin
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizObj := lBizApp.BizObjects.Find('ST_ITEM');
  lMain   := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsUOM');

  lDocKey := lBizObj.FindKeyByRef('Code', '--Stock Item Test--');
  lBizObj.Params.Find('DocKey').Value := VarToStr(lDocKey);
  try

    If not VarIsNull(lDocKey) Then begin
      lBizObj.Open;
      lBizObj.Edit;
      lMain.FindField('Description').value := 'Testing - Description';

      V := lBizApp.CreateOleVariantArray(2);
      V.SetItem(0, 'CTN'); //UOM
      V.SetItem(1, '12');  //Rate

      if lDtl.Locate('UOM;Rate', V.AsOleVariant, False, False) then
        begin
          lDtl.Edit;
          lDtl.FindField('RefCost').AsFloat  := 10.20;
          lDtl.FindField('RefPrice').AsFloat := 25.00;
          lDtl.Post;
        end;
      lBizObj.Save;

      MessageDlg('ST_Item-ItemCode : ''--Stock Item Test--'' Updated...', mtInformation, [mbOK],0);
    end;
  finally
    lBizObj.Close;
  end;
end;

SL_IV

SL_IV Script
procedure TfmMain.dxbb_SL_IVClick(Sender: TObject);
var lMain, lDtl, lSN, lBizObj, lBizApp : Variant;
    lTime : TDateTime;
begin
  lTime := Now;
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizObj := lBizApp.BizObjects.Find('SL_IV');
  lMain   := lBizObj.DataSets.Find('MainDataSet');
  lDtl    := lBizObj.DataSets.Find('cdsDocDetail');
  lSN     := lBizObj.DataSets.Find('cdsSerialNumber');

  try
    lBizObj.New;
    lMain.FindField('DOCKEY').Value         := -1;
    lMain.FindField('DocNo').AsString       := '--IV Test--';
    lMain.FindField('CODE').AsString        := '300-A0001';
    lMain.FindField('DocDate').Value        := '28 Aug 2020';
    lMain.FindField('PostDate').Value       := '28 Aug 2020';
    lMain.FindField('TAXDATE').Value        := '28 Aug 2020';
    lMain.FindField('Description').AsString := 'Sales';
    lMain.FindField('Cancelled').AsString   := 'F';
    lMain.Post;

    lDtl.Append; // For Tax Inclusive = True with override Tax Amount
    lDtl.FindField('DTLKEY').Value         := -1;
    lDtl.FindField('DOCKEY').Value         := -1;
    lDtl.FindField('SEQ').Value            := 1;
    lDtl.FindField('ItemCode').AsString    := 'ITEM A';
    lDtl.FindField('ACCOUNT').AsString     := '500-000'; //GL Sales Account
    lDtl.FindField('DESCRIPTION').AsString := 'Sales Item A';
    lDtl.FindField('QTY').AsFloat          := 1;
    lDtl.FindField('TAX').AsString         := 'SV';
    lDtl.FindField('TAXINCLUSIVE').Value   := 0;
    lDtl.FindField('UNITPRICE').AsFloat    := 435;//Including GST UnitPrice
    lDtl.FindField('AMOUNT').AsFloat       := 410.37; //Must Excluding GST (Qty * UnitPrice) // Less 0.01
    lDtl.FindField('TAXAMT').AsFloat       := 24.63; //Extra 0.01

    lDtl.DisableControls; //For Tax Inclusive Only where TaxAmt is not as Calc
    try
      lDtl.FindField('TAXINCLUSIVE').Value := 1;
    finally
      lDtl.EnableControls;
    end;
    lDtl.Post;

    lDtl.Append; // For Tax Inclusive = False with override Tax Amount
    lDtl.FindField('DTLKEY').Value         := -1;
    lDtl.FindField('DOCKEY').Value         := -1;
    lDtl.FindField('SEQ').Value            := 2;
    lDtl.FindField('ItemCode').AsString    := 'ITEM B';
    lDtl.FindField('ACCOUNT').AsString     := '500-000';
    lDtl.FindField('DESCRIPTION').AsString := 'Sales Item B';
    lDtl.FindField('QTY').AsFloat          := 1;
    lDtl.FindField('TAX').AsString         := 'SV';
    lDtl.FindField('TAXINCLUSIVE').Value   := 0;
    lDtl.FindField('UNITPRICE').AsFloat    := 94.43;
    lDtl.FindField('AMOUNT').AsFloat       := 94.43;
    lDtl.FindField('TAXAMT').AsFloat       := 5.66; //Less 0.01
    lDtl.Post;

    lDtl.Append; // For Serial Number
    lDtl.FindField('DTLKEY').Value         := -1;
    lDtl.FindField('DOCKEY').Value         := -1;
    lDtl.FindField('SEQ').Value            := 3;
    lDtl.FindField('ItemCode').AsString    := 'SN1';
    lDtl.FindField('ACCOUNT').AsString     := '500-000';
    lDtl.FindField('DESCRIPTION').AsString := 'Sales Serial Number Item';

    lSN.Append;
    lSN.FindField('SERIALNUMBER').AsString  := 'SN-00001';
    lSN.Post;

    lSN.Append;
    lSN.FindField('SERIALNUMBER').AsString  := 'SN-00002';
    lSN.Post;

    lDtl.FindField('QTY').AsFloat        := 2;
    lDtl.FindField('TAX').AsString       := 'SR';
    lDtl.FindField('TAXINCLUSIVE').Value := 0;
    lDtl.FindField('UNITPRICE').AsFloat  := 94.43;
    lDtl.FindField('TAXAMT').AsFloat     := 11.33;
    lDtl.Post;

    lBizObj.Save;

    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
               mtInformation, [mbOk], 0);
  finally
    lBizObj.Close;
    lMain := null;
    lDtl := null;
    lSN := null;
    lBizObj := null;
    lBizApp := null;
  end;
end;

Customer.IV.RO

Customer.IV.RO Report Object Script
procedure TfmMain.dxbb_RptObjClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl : TClientDataset;
begin
  lTime := Now;
  cdsMain := TClientDataset.Create(nil);
  cdsDtl  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('Customer.IV.RO');
    lRptVar.Params.Find('SelectDate').AsBoolean           := True;
    lRptVar.Params.Find('DateFrom').AsDate                := '01/01/2015';
    lRptVar.Params.Find('DateTo').AsDate                  := '31/12/2015';
    lRptVar.Params.Find('AllAgent').AsBoolean             := False;
    lRptVar.Params.Find('AgentData').AsBlob               := '----'#13#10'HALIM'; //Filter by Agent code ---- & HALIM
    lRptVar.Params.Find('AllArea').AsBoolean              := True;
//    lRptVar.Params.Find('AreaData').AsBlob                := ; //Not use if AllArea is True
    lRptVar.Params.Find('AllCompany').AsBoolean           := True;
//    lRptVar.Params.Find('CompanyData').AsBlob             := ; //Not use if AllCompany is True
    lRptVar.Params.Find('AllCurrency').AsBoolean          := True;
//    lRptVar.Params.Find('CurrencyData').AsBlob            := ; //Not use if AllCurrenty is True
    lRptVar.Params.Find('AllDocProject').AsBoolean        := True;
//    lRptVar.Params.Find('DocProjectData').AsBlob          := ; //Not use if AllDocProject is True
    lRptVar.Params.Find('AllCompanyCategory').AsBoolean   := True;
//    lRptVar.Params.Find('CompanyCategoryData').AsBlob     := ; //Not use if AllCompanyCategory is True
    lRptVar.Params.Find('AllDocument').AsBoolean          := True;
//    lRptVar.Params.Find('DocumentData').AsBlob            := ; //Not use if AllDocument is True
    lRptVar.Params.Find('IncludeCancelled').AsBoolean   := True;
    lRptVar.Params.Find('PrintDocumentStyle').AsBoolean := False;
    lRptVar.Params.Find('AllItemProject').AsBoolean     := True;
    lRptVar.Params.Find('AllPaymentMethod').AsBoolean   := True;
    lRptVar.CalculateReport;

    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDocDetail').XMLData; //Detail Data - To link Master Data use Dockey field

    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file

    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
               mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
  end;
end;

Stock.Item.RO

Stock.Item.RO Report Object Script
procedure TfmMain.dxbb_ST_ITEM_ROClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl, cdsCat : TClientDataset;
    lSQL : string;
begin
  lTime    := Now;
  cdsMain  := TClientDataset.Create(nil);
  cdsDtl   := TClientDataset.Create(nil);
  cdsCat   := TClientDataset.Create(nil);

  lBizApp := CreateOleObject('SQLAcc.BizApp');

  lSQL := 'SELECT * FROM ST_ITEM_CATEGORY ' +
          'WHERE Category IN (''B-MOTOLORA'',''B-MAXIS'')';
  cdsCat.Data := lBizApp.DBManager.Execute(lSQL); //For filtering Category only

  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('Stock.Item.RO');
    lRptVar.Params.Find('AllItem').AsBoolean              := True;
    lRptVar.Params.Find('AllStockGroup').AsBoolean        := True;
    lRptVar.Params.Find('AllCustomerPriceTag').AsBoolean  := True;
    lRptVar.Params.Find('AllSupplierPriceTag').AsBoolean  := True;
//    lRptVar.Params.Find('CategoryData').AsBlob            := ; //Not use
//    lRptVar.Params.Find('CategoryTpl').AsBlob             := ; //Not use
//    lRptVar.Params.Find('CustomerPriceTagData').AsBlob    := ; //Not use if AllCustomerPriceTag is True
//    lRptVar.Params.Find('SupplierPriceTagData').AsBlob    := ; //Not use if AllSupplierPriceTag is True
//    lRptVar.Params.Find('DateFrom').AsDate                := '01/01/2015'; //Not use if SelectDate is False
//    lRptVar.Params.Find('DateTo').AsDate                  := '31/12/2015';
    lRptVar.Params.Find('HasAltStockItem').AsBoolean      := False;
    lRptVar.Params.Find('HasBarcode').AsBoolean           := False;
    lRptVar.Params.Find('HasBOM').AsBoolean               := False;
    lRptVar.Params.Find('HasCategory').AsBoolean          := False;
    lRptVar.Params.Find('HasCustomerItem').AsBoolean      := False;
    lRptVar.Params.Find('HasOpeningBalance').AsBoolean    := False;
    lRptVar.Params.Find('HasPurchasePrice').AsBoolean     := False;
    lRptVar.Params.Find('HasSellingPrice').AsBoolean      := False;
    lRptVar.Params.Find('HasSupplierItem').AsBoolean      := False;
//    lRptVar.Params.Find('ItemData').AsBlob                := 'ANT 1.0'#13#10'COVER'; //Filter by Item code ANT 1.0 & COVER
//    lRptVar.Params.Find('ItemCategoryData').AsBlob        := cdsCat.XMLData; //Not use if SelectCategory is False
    lRptVar.Params.Find('PrintActive').AsBoolean          := True;
    lRptVar.Params.Find('PrintInActive').AsBoolean        := True;
    lRptVar.Params.Find('PrintNonStockControl').AsBoolean := True;
    lRptVar.Params.Find('PrintStockControl').AsBoolean    := True;
    lRptVar.Params.Find('SelectCategory').AsBoolean       := False;
    lRptVar.Params.Find('SelectDate').AsBoolean           := False;
    lRptVar.Params.Find('SortBy').AsString                  := 'Code';
//    lRptVar.Params.Find('StockGroupData').AsBlob        := ; //Not use if AllStockGroup is True
    lRptVar.CalculateReport;

    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData; //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsUOM').XMLData;  //Detail Data - To link Master Data use Code field

    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file

    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
               mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
    cdsCat.Free;
  end;
end;

Customer.Statement.RO

Customer.Statement.RO Report Object Script
procedure TfmMain.dxbb_StatementClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl : TClientDataset;
    s : string;
begin
  lTime := Now;
  cdsMain := TClientDataset.Create(nil);
  cdsDtl  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  s := '<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS>'+
       '<FIELD attrname="ColumnNo" fieldtype="i4" required="true"/><FIELD attrname="ColumnType" fieldtype="string" WIDTH="1"/>'+
       '<FIELD attrname="Param1" fieldtype="i4" required="true"/><FIELD attrname="Param2" fieldtype="i4" required="true"/>'+
       '<FIELD attrname="IsLocal" fieldtype="boolean"/><FIELD attrname="HeaderScript" fieldtype="bin.hex" SUBTYPE="Text" WIDTH="1"/>'+
       '</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo="0" ColumnType="" Param1="0" Param2="0" IsLocal="FALSE"/>'+
       '<ROW ColumnNo="1" ColumnType="A" Param1="0" Param2="0" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;"/>'+
       '<ROW ColumnNo="2" ColumnType="A" Param1="-1" Param2="-1" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;"/>'+
       '<ROW ColumnNo="3" ColumnType="A" Param1="-2" Param2="-2" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;"/>'+
       '<ROW ColumnNo="4" ColumnType="A" Param1="-3" Param2="-3" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;"/>'+
       '<ROW ColumnNo="5" ColumnType="A" Param1="-4" Param2="-4" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;"/>'+
       '<ROW ColumnNo="6" ColumnType="B" Param1="-999999" Param2="-5" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;"/>'+
       '</ROWDATA></DATAPACKET>';
  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('Customer.Statement.RO');
//  lRptVar.Params.Find('AgentData').AsBlob               := ; //Not use if AllAgent is True
    lRptVar.Params.Find('AgingData').AsString           := s; //Fixed
    lRptVar.Params.Find('AgingOn').AsString             := 'I'; //Fixed
    lRptVar.Params.Find('AllAgent').AsBoolean           := True;
    lRptVar.Params.Find('AllArea').AsBoolean            := True;
    lRptVar.Params.Find('AllCompany').AsBoolean         := False;
    lRptVar.Params.Find('AllCompanyCategory').AsBoolean := True;
    lRptVar.Params.Find('AllControlAccount').AsBoolean  := True;
    lRptVar.Params.Find('AllCurrency').AsBoolean        := True;
    lRptVar.Params.Find('AllDocProject').AsBoolean      := True;
//    lRptVar.Params.Find('AreaData').AsBlob              := ; //Not use if AllArea is True
//    lRptVar.Params.Find('CompanyCategoryData').AsBlob   := ; //Not use if AllCompanyCategory is True
    lRptVar.Params.Find('CompanyData').AsBlob           := '300-A0001'#13#10'300-C0001'; //Filter by Customer Code 300-A0001 & 300-C0001
//    lRptVar.Params.Find('ControlAccountData').AsBlob    := ; //Not use if AllControlAccount is True
//    lRptVar.Params.Find('CurrencyData').AsBlob          := ; //Not use if AllCurrency is True
    lRptVar.Params.Find('DateFrom').AsDate              := '01 Aug 2016';
    lRptVar.Params.Find('DateTo').AsDate                := '31 Aug 2016';
//    lRptVar.Params.Find('DocProjectData').AsBlob        := ; //Not use if AllDocProject is True
    lRptVar.Params.Find('IncludeZeroBalance').AsBoolean := False;
    lRptVar.Params.Find('SelectDate').AsBoolean         := True;
    lRptVar.Params.Find('SortBy').AsString              := 'CompanyCategory;Code;CompanyName;Agent;Area;CurrencyCode;ControlAccount';
    lRptVar.Params.Find('StatementDate').AsDate         := '31 Aug 2016'; // Norm same as DateTo
    lRptVar.Params.Find('StatementType').AsString       := 'O'; //O := Open Item, B := B/F

    lRptVar.CalculateReport;

    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDocument').XMLData; //Detail Data - To link Master Data use Code field

    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file

    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
               mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
  end;
end;

GL Account List For Sales & Purchase 1

GL_Acc Object Script
procedure TfmMain.dxbb_GLAccClick(Sender: TObject);
var BizApp : Variant;
    lDataSet : TClientDataSet;
    ASQL : String;
begin
  //For Debtor List => SpecialAccType = DR 
  //For Creditor List => SpecialAccType = CR 
  BizApp := CreateOleObject('SQLAcc.BizApp');
  lDataSet := TClientDataSet.Create(Self);
  try
     ASQL := 'SELECT A.Code, A.Description FROM GL_ACC A '+
             'LEFT OUTER JOIN GL_ACC B ON (A.Dockey=B.Parent) '+
             'WHERE A.Parent<>-1 ' +
             'AND B.Dockey IS NULL ' +
             'AND A.SpecialAccType = '''' '+
             'ORDER BY A.CODE ';
     lDataSet.Data := BizApp.DBManager.Execute(ASQL);
     lDataset.SaveToFile('C:\Temp\_List.xml', dfXML); //Export To XML file
  finally
    lDataSet.Free;
  end;
end;

GL Account List For Sales & Purchase 2

GL_Acc Object Script
procedure TfmMain.dxbb_GLAccClick(Sender: TObject);
var BizApp, BizObj : Variant;
    lDataSet1, lDataSet2 : TClientDataSet;
    ASQL : String;
begin
  //For Debtor List => SpecialAccType = DR 
  //For Creditor List => SpecialAccType = CR 
  BizApp := CreateOleObject('SQLAcc.BizApp');
  BizObj := BizApp.BizObjects.Find('GL_Acc');

  lDataSet1 := TClientDataSet.Create(Self);
  lDataSet2 := TClientDataSet.Create(Self);
  try
    ASQL :='Parent<>-1 ' +
           'AND (SpecialAccType IS NULL OR SpecialAccType = '''' ' +
           'OR SpecialAccType = '''') ';
    lDataSet1.XMLData:= BizObj.Select('Dockey,Code,Description', ASQL, 'Code', 'SX', '', '');

    lDataSet2.XMLData:= BizObj.Select('Parent', '', 'Code', 'SX', '', '');

    lDataset2.First; // Remove Parent Account
    while not lDataset2.Eof do begin
      if lDataset1.Locate('Dockey', lDataSet2.FindField('Parent').AsString, []) then
        lDataset1.Delete;
      lDataset2.Next;
    end;
    lDataset1.MergeChangeLog;
    lDataset1.SaveToFile('C:\Temp\_List.xml', dfXML); //Export To XML file 
  finally
    lDataSet1.Free;
    lDataSet2.Free;
  end;
end;

Customer.Aging.RO

Customer Aging Report Object Script
procedure TfmMain.dxbb_AgingClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl : TClientDataset;
    s : string;
begin
  lTime := Now;
  cdsMain := TClientDataset.Create(nil);
  cdsDtl  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');

  s := '<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0"><METADATA><FIELDS>'+
       '<FIELD attrname="ColumnNo" fieldtype="i4" required="true"/><FIELD attrname="ColumnType" fieldtype="string" WIDTH="1"/>'+
       '<FIELD attrname="Param1" fieldtype="i4" required="true"/><FIELD attrname="Param2" fieldtype="i4" required="true"/>'+
       '<FIELD attrname="IsLocal" fieldtype="boolean"/><FIELD attrname="HeaderScript" fieldtype="bin.hex" SUBTYPE="Text" WIDTH="1"/>'+
       '</FIELDS><PARAMS/></METADATA><ROWDATA><ROW ColumnNo="0" ColumnType="" Param1="0" Param2="0" IsLocal="FALSE"/>'+
       '<ROW ColumnNo="1" ColumnType="A" Param1="0" Param2="0" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;Current Mth&apos;&#013;end;"/>'+
       '<ROW ColumnNo="2" ColumnType="A" Param1="-1" Param2="-1" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;1 Months&apos;&#013;end;"/>'+
       '<ROW ColumnNo="3" ColumnType="A" Param1="-2" Param2="-2" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;2 Months&apos;&#013;end;"/>'+
       '<ROW ColumnNo="4" ColumnType="A" Param1="-3" Param2="-3" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;3 Months&apos;&#013;end;"/>'+
       '<ROW ColumnNo="5" ColumnType="A" Param1="-4" Param2="-4" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;4 Months&apos;&#013;end;"/>'+
       '<ROW ColumnNo="6" ColumnType="B" Param1="-999999" Param2="-5" IsLocal="FALSE" HeaderScript="ObjectPascal&#013;begin&#013;Value:= &apos;5 Month &amp; above&apos;&#013;end;"/>'+
       '</ROWDATA></DATAPACKET>';
  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('Customer.Aging.RO');
    lRptVar.Params.Find('ActualGroupBy').AsString       := 'Code;CompanyName'; //Fixed
//    lRptVar.Params.Find('AgentData').AsBlob               := ; //Not use if AllAgent is True
    lRptVar.Params.Find('AgingData').AsString           := s;
    lRptVar.Params.Find('AgingDate').AsDate             := '31 Aug 2016';
    lRptVar.Params.Find('AgingOn').AsString             := 'I'; //Fixed
    lRptVar.Params.Find('AllAgent').AsBoolean           := True;
    lRptVar.Params.Find('AllArea').AsBoolean            := True;
    lRptVar.Params.Find('AllCompany').AsBoolean         := True;
    lRptVar.Params.Find('AllCompanyCategory').AsBoolean := True;
    lRptVar.Params.Find('AllControlAccount').AsBoolean  := True;
    lRptVar.Params.Find('AllCurrency').AsBoolean        := True;
    lRptVar.Params.Find('AllDocProject').AsBoolean      := True;
//    lRptVar.Params.Find('AreaData').AsBlob            := ; //Not use if AllArea is True
//    lRptVar.Params.Find('CompanyCategoryData').AsBlob := ; //Not use if AllCompanyCategory is True
//    lRptVar.Params.Find('CompanyData').AsBlob         := ; //Not use if AllCompany is True
//    lRptVar.Params.Find('ControlAccountData').AsBlob  := ; //Not use if AllControlAccount is True
//    lRptVar.Params.Find('CurrencyData').AsBlob        := ; //Not use if AllCurrency is True
//    lRptVar.Params.Find('DocProjectData').AsBlob      := ; //Not use if AllDocProject is True
    lRptVar.Params.Find('FilterPostDate').AsBoolean      := True;
//    lRptVar.Params.Find('GroupBy
    lRptVar.Params.Find('IncludePDC').AsBoolean         := False;
    lRptVar.Params.Find('IncludeZeroBalance').AsBoolean := False;
    lRptVar.Params.Find('SortBy').AsString              := 'Code;CompanyName';
    lRptVar.Params.Find('DateTo').AsDate                := '31 Aug 2016';
    lRptVar.Params.Find('IncludeKnockedOffDetail').AsBoolean := False;

    lRptVar.CalculateReport;

    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDocument').XMLData; //Detail Data - To link Master Data use Code field

    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file

    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
               mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
  end;
end;

GL.CB.RO

GL Cash Book Report Object Script
procedure TfmMain.dxBB_CBClick(Sender: TObject);
var lBizApp, lRptVar : Variant;
    lTime : TDateTime;
    cdsMain, cdsDtl, cdsTax : TClientDataset;
begin
  lTime := Now;
  cdsMain := TClientDataset.Create(nil);
  cdsDtl  := TClientDataset.Create(nil);
  cdsTax  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  try
    lRptVar := null;
    lRptVar := lBizApp.RptObjects.Find('GL.CB.RO');
    lRptVar.Params.Find('AllCurrency').AsBoolean          := True;
    lRptVar.Params.Find('AllDocProject').AsBoolean        := True;
    lRptVar.Params.Find('AllDocument').AsBoolean          := True;
    lRptVar.Params.Find('AllItemProject').AsBoolean       := True;
    lRptVar.Params.Find('AllItemArea').AsBoolean          := True;
    lRptVar.Params.Find('AllItemAgent').AsBoolean         := True;
    lRptVar.Params.Find('AllDocAgent').AsBoolean          := True;
    lRptVar.Params.Find('AllDocArea').AsBoolean           := True;
    lRptVar.Params.Find('AllPaymentMethod').AsBoolean     := False;
//    lRptVar.Params.Find('CurrencyData').AsBlob            := 'Not use if AllCurrency is true

//  For Post Date From & Date To'
    lRptVar.Params.Find('DateFrom').AsDate                := '01/01/2017';
    lRptVar.Params.Find('DateTo').AsDate                  := '31/12/2017';

//    lRptVar.Params.Find('DocProjectData').AsBlob          := //'Not use if AllDocProject is true
//    lRptVar.Params.Find('DocAreaData').AsBlob             := //Not use if AllDocArea is true
//    lRptVar.Params.Find('DocAgentData').AsBlob            := //Not use if AllDocAgent is true
//    lRptVar.Params.Find('ItemAgentData').AsBlob           := //Not use if AllItemAgent is true
    lRptVar.Params.Find('DocType').AsString               := 'PV'; //'PV for Payment Voucher & OR for Official Receipt
//    lRptVar.Params.Find('DocumentData').AsBlob            := //Not use if AllDocument is true
//    lRptVar.Params.Find('GroupBy').AsBlob                 := //If you wanted to grouping the data
    lRptVar.Params.Find('IncludeCancelled').AsBoolean     := False;
//    lRptVar.Params.Find('ItemAreaData').AsBlob            := //Not use if AllItemArea is true
//    lRptVar.Params.Find('ItemProjectData').AsBlob         := //Not use if AllItemProject is true
    lRptVar.Params.Find('PaymentMethodData').AsBlob       := '310-001';
    lRptVar.Params.Find('PrintDocumentStyle').AsBoolean   := True;
    lRptVar.Params.Find('SelectDate').AsBoolean           := True; //For Post Date
//  lRptVar.Params.Find('SelectDocDate').AsBoolean   := True; 'For Doc Date
    lRptVar.Params.Find('SortBy').AsString                := 'PostDate;DocNo';

    lRptVar.CalculateReport;

    cdsMain.XMLData := lRptVar.DataSets.Find('cdsMain').XMLData;      //Master Data
    cdsDtl.XMLData  := lRptVar.DataSets.Find('cdsDetail').XMLData; //Detail Data - To link Master Data use Dockey field
    cdsTax.XMLData  := lRptVar.DataSets.Find('cdsTax').XMLData; //Tax List

    cdsMain.SaveToFile('C:\Temp\_ListM.xml'); //Export To XML file
    cdsDtl.SaveToFile('C:\Temp\_ListD.xml');  //Export To XML file
    cdsTax.SaveToFile('C:\Temp\_ListT.xml');  //Export To XML file

    lTime := Now - lTime;
    MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]),
               mtInformation, [mbOk], 0);
  finally
    lRptVar := null;
    cdsMain.Free;
    cdsDtl.Free;
  end;
end;

AR_DP

Customer Deposit Script
procedure TForm1.Button1Click(Sender: TObject);
var lMain, lBizObj, lBizApp : Variant;
begin
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');

  lBizObj := lBizApp.BizObjects.Find('AR_DP');
  lMain   := lBizObj.DataSets.Find('MainDataSet');

  try
    lBizObj.New;
    lMain.FindField('DOCKEY').Value         := -1;
    lMain.FindField('DocNo').AsString       := '--DP Test--';
    lMain.FindField('CODE').AsString        := '300-C0001';
    lMain.FindField('DocDate').Value        := '28 Oct 2019';
    lMain.FindField('PostDate').Value       := '28 Oct 2019';
    lMain.FindField('TAXDATE').Value        := '28 Oct 2019';
    lMain.FindField('DEPOSITACCOUNT').AsString := 'PREPAYMENT';
    lMain.FindField('PaymentMethod').AsString  := '320-000'; //Bank or Cash account
    lMain.FindField('Description').AsString    := 'Deposit For Account';
    lMain.FindField('ChequeNumber').AsString   := '';
    lMain.FindField('BankCharge').AsFloat      := 0;
    lMain.FindField('DocAmt').AsFloat          := 1000.00;
    lMain.FindField('Cancelled').AsString      := 'F';

    try
      lBizObj.Save;
    except
      on E: Exception do
        Memo1.Lines.Append(E.Message);
    end;
     lBizObj.Close;
     Memo1.Lines.Append('Done');
//     MessageDlg('Done', mtInformation, [mbOk], 0);
  finally
    lMain := Null;
    lBizObj := Null;
    lBizApp.Logout;
    lBizApp := Null;
  end;
end;

Customer Deposit to Customer Payment

Customer Deposit to Customer Payment Script
procedure TForm1.Button2Click(Sender: TObject);
var lMain, lKO, lBizApp, lBizObj, V : Variant;
    cdsTmp : TClientDataset;
    lSQL : String;
begin
  cdsTmp  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');

  try
    lSQL := 'SELECT DOCKEY FROM AR_DP ' +
            'WHERE DOCNO=''--DP Test--'' ';
    cdsTmp.Data := lBizApp.DBManager.Execute(lSQL);

    if cdsTmp.RecordCount > 0 then begin
      lBizObj := lBizApp.BizObjects.Find('AR_PM');
      lMain   := lBizObj.DataSets.Find('MainDataSet');
      lKO     := lBizObj.DataSets.Find('cdsKnockOff');

      lBizObj.New;
      lMain.FindField('DOCKEY').Value           := -1;
      lMain.FindField('DocNo').AsString         := '--PM Test--'; //Payment Document Number
      lMain.FindField('CODE').AsString          := '300-C0001';
      lMain.FindField('DocDate').Value          := '29 Oct 2019';
      lMain.FindField('PostDate').Value         := '29 Oct 2019';
      lMain.FindField('Description').AsString   := 'Payment for A/c';
      lMain.FindField('PaymentMethod').AsString := 'PREPAYMENT';
      lMain.FindField('DocAmt').AsFloat         := 200;
      lMain.FindField('FROMDOCTYPE').AsString   := 'DP'; //Transfer from Deposit
      lMain.FindField('FROMDOCKEY').Value       := cdsTmp.FindField('Dockey').AsFloat; //Transfer from Deposit
      lMain.FindField('Cancelled').AsString     := 'F';
      lMain.FindField('CHANGED').AsString       := 'F';

      V := lBizApp.CreateOleVariantArray(2);
      V.SetItem(0, 'IV'); //Document Type is either is IV or DN for Sales & PI or SD for Purchase
      V.SetItem(1, 'IV-00003');  //Invoice Document Number

      if lKO.Locate('DocType;DocNo', V.AsOleVariant, False, False) then
        begin
          lKO.Edit;
          lKO.FindField('KOAmt').ASFloat     := 200;
          lKO.FindField('KnockOff').AsString := 'T';
          lKO.Post;
        end;

      try
        lBizObj.Save;
      except
        on E: Exception do
          Memo1.Lines.Append(E.Message);
      end;
        lBizObj.Close;
        Memo1.Lines.Append('Done');
      //MessageDlg('AR_PM-DocNo : ''--PM Test--'' Posted...', mtInformation, [mbOK],0);
    end else
       Memo1.Lines.Append('Deposit No. Not found');
  finally
    cdsTmp.Free;
    lBizApp.Logout;
    lMain := Null;
    lBizObj := Null;
    lBizApp := Null;
  end;
end;

AR_DPDTL_REFUND

Customer Deposit Refund Script
procedure TForm1.Button3Click(Sender: TObject);
var lMain, lBizApp, lBizObj : Variant;
    cdsTmp : TClientDataset;
    lSQL : String;
begin
  cdsTmp  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');

  try
    lSQL := 'SELECT DOCKEY FROM AR_DP ' +
            'WHERE DOCNO=''--DP Test--'' ';
    cdsTmp.Data := lBizApp.DBManager.Execute(lSQL);

    if cdsTmp.RecordCount > 0 then begin
      lBizObj := lBizApp.BizObjects.Find('AR_DPDTL_REFUND');
      lMain   := lBizObj.DataSets.Find('MainDataSet');

      lBizObj.New;
      lMain.FindField('DOCKEY').Value          := cdsTmp.FindField('Dockey').AsFloat;
      lMain.FindField('Account').AsString      := '320-000'; //Bank or Cash account
      lMain.FindField('DocDate').Value         := '28 Oct 2019';
      lMain.FindField('PostDate').Value        := '28 Oct 2019';
      lMain.FindField('Description').AsString  := 'Deposit Refund';
      lMain.FindField('ChequeNumber').AsString := '';
      lMain.FindField('BankCharge').AsFloat    := 0;
      lMain.FindField('PAYMENTAMOUNT').AsFloat := 500.00;

      try
        lBizObj.Save;
      except
        on E: Exception do
          Memo1.Lines.Append(E.Message);
      end;
       lBizObj.Close;
       Memo1.Lines.Append('Done');
  //     MessageDlg('Done', mtInformation, [mbOk], 0);
    end else
      Memo1.Lines.Append('Deposit No. Not Found');
  finally
    cdsTmp.Free;
    lMain := Null;
    lBizObj := Null;
    lBizApp.Logout;
    lBizApp := Null;
  end;
end;

AR_DPDTL_FORFEIT

Customer Deposit Forfeit Script
procedure TForm1.Button4Click(Sender: TObject);
var lMain, lBizApp, lBizObj : Variant;
    cdsTmp : TClientDataset;
    lSQL : String;
begin
  cdsTmp  := TClientDataset.Create(nil);
  lBizApp := CreateOleObject('SQLAcc.BizApp');
  lBizApp.Login('ADMIN', 'ADMIN', 'D:\Happy\DB\Default.DCF', 'ACC-0110.FDB');

  try
    lSQL := 'SELECT DOCKEY FROM AR_DP ' +
            'WHERE DOCNO=''--DP Test--'' ';
    cdsTmp.Data := lBizApp.DBManager.Execute(lSQL);

    if cdsTmp.RecordCount > 0 then begin
      lBizObj := lBizApp.BizObjects.Find('AR_DPDTL_FORFEIT');
      lMain   := lBizObj.DataSets.Find('MainDataSet');

      lBizObj.New;
      lMain.FindField('DOCKEY').Value          := cdsTmp.FindField('Dockey').AsFloat;
      lMain.FindField('Account').AsString      := '532-000'; //Forfeit account
      lMain.FindField('DocDate').Value         := '28 Oct 2019';
      lMain.FindField('PostDate').Value        := '28 Oct 2019';
      lMain.FindField('Description').AsString  := 'Deposit Forfeit';
      lMain.FindField('Amount').AsFloat        := 150.00;

      try
        lBizObj.Save;
      except
        on E: Exception do
          Memo1.Lines.Append(E.Message);
      end;
       lBizObj.Close;
       Memo1.Lines.Append('Done');
  //     MessageDlg('Done', mtInformation, [mbOk], 0);
    end else
      Memo1.Lines.Append('Deposit No. Not Found');
  finally
    cdsTmp.Free;
    lMain := Null;
    lBizObj := Null;
    lBizApp.Logout;
    lBizApp := Null;
  end;
end;

FAQ

Problem with opening CHM Help files?

  1. Right click the chm file & select Properties
  2. At General tab Click Unblock button.
  3. Click Apply | Ok.

Still can't open CHM file?

  1. Login SQL Accounting
  2. Click Tools | Options
  3. Click Register & follow wizard
  4. Exit SQL Accounting
  5. Login SQL Accounting
  6. Run CHM File

Why when I compile my program with stated unknown method or unknown identifier?

If you compiler had error may try add the esfw10.dll file under the SQL Accounting\bin folder

How to make sure I login to correct database?

  • Can use the Common.Agent.RO Report Objects to get the Profile info.
  • Then use the cdsProfile Dataset
- CompanyName Field
- Remark Field

Why after post to SQL Accounting the Description3 (More Description)/Notes field it show like this "M y D e s c r i p t i o n" instead of "My Description"?

Make sure you use .AsString in your code (see example below)
Description3 Field Script/Code

...

 lDtl.FindField('DESCRIPTION3').AsString  := 'Sales Item A More Description'+ #13 + 'I in 2nd line';

...

Can I Ignore Doc No Field & let SQL Accounting to Auto Assign?

Yes but we not recommended as you will lost track when user wanted to know which Doc No in SQL Acc is posted.
To Set Auto Assign set it as below
DocNo Field Script/Code

...

 lMain.FindField('DocNo').AsString  := '<<New>>';

...

lDocNo := lMain.FindField('DocNo').AsString; //To Get docno after post 

Can I Auto Login & Logout SQL Accounting when doing & after Posting?

Yes can below is example script
Only work if that PC is no once is using SQL Accounting
C Sharp
Int32 lBuildNo;
dynamic ComServer;
		
public void CheckLogin()
{            
    lBizType = Type.GetTypeFromProgID("SQLAcc.BizApp");
    ComServer = Activator.CreateInstance(lBizType);
            
    if (!ComServer.IsLogin)
    {
        try
        {
            ComServer.Login(edUN.Text, edPW.Text, edDCF.Text, edDB.Text);
            ComServer.Minimize();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            FreeBiz(ComServer);
        }
    }
    if (ComServer.IsLogin)
    {
        lBuildNo = ComServer.BuildNo;
    }
}
		
public void FreeBiz(object AbizObj)
{
    System.Runtime.InteropServices.Marshal.ReleaseComObject(AbizObj);
}
		
private void btnExport_Click(object sender, EventArgs e)
{
    dynamic BizObject, lMain, lDocKey;

    CheckLogin();
    //'Step 2: Find and Create the Biz Objects
    BizObject = ComServer.BizObjects.Find("Agent");

    //Step 3: Set Dataset
    lMain = BizObject.DataSets.Find("MainDataSet");    //lMain contains master data

    //Step 4: Search
    lDocKey = BizObject.FindKeyByRef("CODE", edCode.Text);
    try
    {
        try
        {
            //Step 5 : Insert or Update
            if (Convert.IsDBNull(lDocKey))
            {
                BizObject.New();
                lMain.FindField("CODE").value = edCode.Text;
                lMain.FindField("DESCRIPTION").value = edDesc.Text;
            }
            else
            {//Edit Data if found
                BizObject.Params.Find("CODE").Value = lDocKey;
                BizObject.Open();
                BizObject.Edit();
                lMain.FindField("DESCRIPTION").value = edDesc.Text;
            }
            //Step 6: Save & Close
            BizObject.Save();
            MessageBox.Show("Done", "Status", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    }
    finally
    {
        BizObject.Close();

        //Step 7 : Logout after done             
        FreeBiz(BizObject);
        ComServer.Logout();
        FreeBiz(ComServer);
    }            
}
Delphi
....
  public
    { Public declarations }
    lBizApp : variant;
  end;
....

procedure TForm1.CheckLogin;
begin
  lBizApp := null;
  lBizApp := CreateOleObject('SQLAcc.BizApp');

  if not lBizApp.IsLogin then begin
    lBizApp.Login(edUN.Text, edPW.Text, edDCF.Text, edDB.Text); //Login with preset setting
    lBizApp.Minimize; //Mininise the SQLAccounting
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var BizObject, lMain : Variant;
begin
  try
    //Begin Loop your data
    try
      CheckLogin;
      BizObject := lBizApp.BizObjects.Find('Agent');
      lMain     := BizObject.DataSets.Find('MainDataSet');
      BizObject.New;
      lMain.FindField('CODE').AsString := 'HALIM';
      lMain.FindField('Description').AsString := 'HALIM 123';	
      BizObject.save;
    except
      on E: Exception do
        MmLog.Lines.Append(E.Message);
    end;
    //
  finally
    BizObject.close;
    BizObject := null;
    lBizApp.Logout;
    lBizApp := null;
  end;
end;
VB Script
'Copy below script & paste to notepad & name it as eg Agent.vbs
Call PostData
 
Function CreateSQLAccServer
  Set CreateSQLAccServer = CreateObject("SQLAcc.BizApp")
End Function
 
Function PostData
Dim ComServer, BizObject
 
  'Step 1: Create Com Server object
  Set ComServer = CreateSQLAccServer 'Create Com Server
  
  Set WScr = CreateObject("WScript.Shell")
  WScript.Sleep 1000 '//Wait 1 second for system loading before proceed

  'Step 2: Force Logout to make sure login correct database
  If ComServer.IsLogin Then 'if user hasn't logon to SQL application
    ComServer.Logout
  END IF
  'Step 3: Login 
  ComServer.Login "ADMIN", "ADMIN", "C:\estream\SQLAccounting\Share\Default.DCF", "ACC-0015.FDB" 

  'Step 4: Find and Create the Biz Objects
  Set BizObject = ComServer.BizObjects.Find("Agent") 
 
  'Step 5: Set Dataset
  Set lMain = BizObject.DataSets.Find("MainDataSet")    'lMainDataSet contains master data

  
  'Step 6 : Posting
    BizObject.New
    lMain.FindField("CODE").AsString          = "_Test_"
    lMain.FindField("Description").AsString   = "Testing 123"

  'Step 7: Save Document
    BizObject.Save
    BizObject.Close
	
  'Step 8: Logout	
    ComServer.Logout
	MsgBox "Done"
End Function

When Post System Prompt Operation aborted Error

This happen when the Login User ID don't had the to Override Sales Min/Max Price &
Use Last Price XXX (In Tools | Options | Unit Price) &
1 of record is below Min Price.

Solution

Can try change the Posting Seq like below (UOM then Qty)
Sequence Field Script/Code

...

   lDetail.Append();
   lDetail.FindField("DtlKey").value = -1;
   lDetail.FindField("DocKey").value = -1;
   lDetail.FindField("Seq").value = 3;
   lDetail.FindField("ItemCode").AsString = "ANT";
   lDetail.FindField("Description").AsString = "Sales Item B";
   //lDetail.FindField("Account").AsString = "500-000"; To override the Sales Account Code
   lDetail.FindField("UOM").AsString = "UNIT";
   lDetail.FindField("Qty").AsFloat = 2;
   //lDetail.FindField("DISC").AsString = "5%+3"; //Optional(eg 5% plus 3 Discount)
   lDetail.FindField("Tax").AsString = "SR";
   lDetail.FindField("TaxRate").AsString = "6%";
   lDetail.FindField("TaxInclusive").value = 0;
   lDetail.FindField("UnitPrice").AsFloat = 100;
   lDetail.FindField("Amount").AsFloat = 200;
   lDetail.FindField("TaxAmt").AsFloat = 12;
   lDetail.Post();

...

How do my system know there is a changes or update in SQLAccounting?

Data Entry

In all Document it had a field call UPDATECOUNT.
Default is null & each changes will +1.
So if you see 2 meaning it had being update 2 times

Master Data

Only available in
  • Version 842.765 & above
  • AP_SUPPLIER (Maintain Supplier)
  • AR_CUSTOMER (Maintain Customer)
  • ST_GROUP (Maintain Stock Group)
  • ST_ITEM (Maintain Stock Item)
  • ST_ITEM_TPL (Maintain Item Template)
  • ST_PRICETAG (Maintain Price Tag)
  • TAX (Maintain Tax)
In Each table it had a field call LASTMODIFIED.
The value is Epoch Time or Unix Time

You can use below function to get the field

vbs
...
Function GetData
Dim lDataSet, lSQL
  lSQL = "SELECT DOCNO, UPDATECOUNT FROM SL_CS "
  lSQL = lSQL & "WHERE UPDATECOUNT IS NOT NULL " 
  lSQL = lSQL & "ORDER BY DOCNO "
  Set lDataSet = ComServer.DBManager.NewDataSet(lSQL)
  
  lDataSet.First
  While (not lDataSet.eof)
    MsgBox "DocNo : " & lDataSet.FindField("DocNo").AsString
    MsgBox "UpdateCount : " & lDataSet.FindField("UPDATECOUNT").AsString
    lDataSet.Next
  Wend
End Function
...
Delphi
...   
procedure TfmMain.dxbb_GetFieldClick(Sender: TObject);
var BizApp : Variant;
    lDataSet : TClientDataSet;
    ASQL : String;
begin
  BizApp := CreateOleObject('SQLAcc.BizApp');
  lDataSet := TClientDataSet.Create(Self);
  try
     ASQL := 'SELECT DOCNO, UPDATECOUNT FROM SL_CS ' +
             'WHERE UPDATECOUNT IS NOT NULL ' +
             'ORDER BY DOCNO ';
     lDataSet.Data := BizApp.DBManager.Execute(ASQL);
     lDataset.SaveToFile('C:\Temp\_List.xml', dfXML); //Export To XML file
  finally
    lDataSet.Free;
  end;
end;
...

Can I control my Stock when I link with other Application?

Yes. We suggest to use Stock Transfer to (eg Location call MOBILE) transfer stock as Reserve to avoid stock over deduct in SQL Accounting
When other Application post to SQL Accounting they just need set the Location to the Reserve Location (eg MOBILE)
Below is example posting with location
Post Location Field Script/Code

...

 lDtl.FindField('UOM').AsString       := 'CTN';
 lDtl.FindField('QTY').AsFloat        := 6;
 lDtl.FindField('Location').AsString  := 'MOBILE';

...

Where to Check the SQL Accounting DCF Path, FileName & FDB FileName?

In Login Screen Click 3 Dot Button then you can see the information
For SQL Accounting Version 5.2023.957.831 and below
SDK-FAQ-01.jpg
For SQL Accounting Version 5.2023.958.832 and above
SDK-FAQ-03.jpg
SDK-FAQ-02.jpg

How to check & What is the value for Advance Credit Control in Maintain Customer

You can use ComServer.DBManager.NewDataSet(lSQL) function to Query the information
lSQL = SELECT * FROM AR_CUSTOMERCRCTRL
You may refer to ControlType column
ControlType Exceed Credit Limit Exceed OverDue Limit
0 UnBlock UnBlock
1 UnBlock Block
2 UnBlock Override
3 Block UnBlock
4 Block Block
5 Block Override
6 Override UnBlock
7 Override Block
8 Override Override
9 Suspended

How to get Error/Exception Message Return from SQL Accounting?

C Sharp
try
{
   BizObject.New();
....
   BizObject.Save();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
Python
   try:
       BizObject.Save()          
   except Exception as e:
       print("Oops!", e)   
VB.Net
Try
  BizObject.[New]
...
  BizObject.Save
Catch ex As Exception
  MsgBox(ex.Message, MsgBoxStyle.Exclamation)
End Try
Delphi
try
  lBizObj.New;
....
  lBizObj.Save;
except
  on E: Exception do
    Memo1.Lines.Text := E.Message;
end;


Why Post to SQL Accounting sometime prompt Catastrophic failure Error?

Possible Problem 1

Make sure you code don't cross over Call action during posting
Eg Posing SL_SO Header partly then suddenly call other object example Check Customer Code Validity
Summary action (Correct Steps)
01. Do Verify 1st (eg Check Customer Code Validity & etc)
02. Post Transactions

Possible Problem 2

Keep Login & Logout till windows not enough time to response
Summary action (Correct Steps)
01. Pull Data from Your application/web
02. Login SQL Accounting 1 time (Auto Login)
03. Do all your requirement actions (eg. verify, query & posting)
    eg Posting Cash Sales & Customer Payment
begin looping
  BizObject = ComServer.BizObjects.Find("SL_CS")
  ....
  BizObject.Save
  BizObject.Close
  FreeBiz(BizObject)
  
  BizObject = ComServer.BizObjects.Find("AR_PM")
  ....
  BizObject.Save
  BizObject.Close
  FreeBiz(BizObject)
  
  Next Record
End looping
04. Logout SQL Accounting 1 time (Auto Logout)
05. Push Data to Your application/web (if any)

Possible Problem 3

Company Profile Logo format had problem.
Solution
01. Click File | Company Profile
02. Export out the Logo by right Click the Company Logo
03. Open the Exported Logo with Photo Editor
04. Just Click File | Save again as jpg.
05. Load Back the Save Logo by right Click the Company Logo
06. Click Save

How to Get the GL Account List for Sales & Purchase?

You can use the function ComServer.DBManager.NewDataSet(lSQL) with the following SQL
SELECT  Code, Description, Description2 FROM GL_ACC A
WHERE (A.Parent<>-1
AND NOT (EXISTS (SELECT Parent FROM GL_ACC B
                 WHERE A.DocKey=B.Parent))
AND (A.SpecialAccType IS NULL OR A.SpecialAccType IN ('', 'AD')))
ORDER BY Code

Can I setup a testing/Staging environment for SQL Accounting?

Yes can, you can self setup or we can help you to setup.
There are 4 types of Testing/Staging
01. Install the Testing SQL Accounting version & Testing Database in the developer PC
02. Install the Live SQL Accounting version & User Backup Database in the developer PC
- Require User Permission for Backup
03. Setup at User PC/Server & using User Backup Database
- Require User Permission for Backup & PC/Server setup
04. Setup at User PC/Server & using Testing Database
- Require User Permission for PC/Server setup

How to Loop & post SQL Accounting?

Below summary how to loop
01. Call ComServer
02. Check Login
03. Call BizObject (eg SL_CS)
04. Begin Loop you data
05. Call Close BizObject (eg BizObject.Close)
06. Continue Call other BizObject (eg AR_PM)
07. Repeat Steps 4 & 5
08. Call Logout
09. Free ComServer

How to post Description3 with Unicode?

You have to convert it to rtf format before set to Description3 field
C Sharp
private static string FormatAsRTF(string DirtyText)
{
    System.Windows.Forms.RichTextBox rtf = new System.Windows.Forms.RichTextBox();
    rtf.Text = DirtyText;
    return rtf.Rtf;
}

....
 lDtl.FindField("DESCRIPTION3").AsString  = FormatAsRTF("ANTENNA ???");
...
VB.Net
Private Shared Function FormatAsRTF(ByVal DirtyText As String) As String
    Dim rtf As System.Windows.Forms.RichTextBox = New System.Windows.Forms.RichTextBox()
    rtf.Text = DirtyText
    Return rtf.Rtf
End Function

....
 lDtl.FindField("DESCRIPTION3").AsString  = FormatAsRTF("ANTENNA ???")
...
Delphi
function TfmMain.PlainTxtToRTF(const AValue:String):String;
var R:TRichEdit;
    M : TStringStream;
begin
  R := TRichEdit.CreateParented(HWND_MESSAGE);
  M := TStringStream.Create('');
  try
    R.WordWrap := False;
    R.Lines.Add(AValue);
    R.Lines.SaveToStream(M);
    Result := M.DataString;
  finally
    R.Free;
    M.Free;
  end;
end;

....
 lDtl.FindField('DESCRIPTION3').AsString  := PlainTxtToRTF('ANTENNA ???');
...
or Can use our build in Utility function (only available from 5.2022.941.822 & above)
....
 lDtl.FindField("Description3").AsString = ComServer.Utility.PlainTextToRichText("ANTENNA ??? ??")
...
PHP
<!DOCTYPE html>
<html>
<body>

<h1>SQL Acc SDK in PHP page</h1>

<?php
echo "Updated 14 Sep 2022<br>";
#This action to show & post Description3 with unicode

$ComServer = null;

function CheckLogin()
{
    global $ComServer;
    $ComServer = new COM("SQLAcc.BizApp", null, CP_UTF8) or die("Could not initialise SQLAcc.BizApp object.");
    $status = $ComServer->IsLogin();

    if ($status == true)
    {
        #$ComServer->Logout();
    }
    $ComServer->Login("ADMIN", "ADMIN", #UserName, Password
                      "C:\eStream\SQLAccounting\Share\Default.DCF",  #DCF file
                      "ACC-0082.FDB"); #Database Name
    
}

function GetData(){
    global $ComServer;
	
    $lSQL = "SELECT Description3 FROM ST_ITEM 
	     WHERE Code='ANT' ";
	
    $lDataSet = $ComServer->DBManager->NewDataSet($lSQL);

    if ($lDataSet->RecordCount > 0) {
	$lDataSet->First();
		
	$rtf = $lDataSet->FindField('Description3')->AsString();
		
        echo $rtf;		
	echo "<br>== <br>";
	echo "<br>Result after RTF: <br>";
	$txt = $ComServer->Utility->RichTextToPlainText($rtf);
	echo "<TEXTAREA rows=10 cols=80 id='edResult1' >".$txt. "</TEXTAREA>";
	echo "<br>== <br>";
	echo "??? ??";
	}else {
    echo "Record Not Found";
    }
}

function PostData(){
	global $ComServer;
	
	$BizObject = $ComServer->BizObjects->Find("ST_AJ");
    $lMain = $BizObject->DataSets->Find("MainDataSet"); 
    $lDetail = $BizObject->DataSets->Find("cdsDocDetail"); 
	
    $BizObject->New();
    $lMain->FindField("DocKey")->value = -1;
    $lMain->FindField("DocNo")->AsString = "<<New>>";
    $lMain->FindField("DocDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("PostDate")->value = "04/20/2020"; #MM/DD/YYYY
    $lMain->FindField("Description")->AsString = "Stock Adjustment";
	
    #Insert Data - Detail - Increase Stock Qty
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 1;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "Sales Item B";
    $lDetail->FindField("Qty")->AsFloat = 2;
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->Post();
    #Insert Data - Detail - Reduce Stock Qty
    $lDetail->Append();
    $lDetail->FindField("DtlKey")->value = -1;
    $lDetail->FindField("DocKey")->value = -1;
    $lDetail->FindField("Seq")->value = 2;
    $lDetail->FindField("ItemCode")->AsString = "ANT";
    $lDetail->FindField("Description")->AsString = "NOKIA CHARGER  ???";
	$lDetail->FindField("Description3")->AsString = $ComServer->Utility->PlainTextToRichText("NOKIA CHARGER ??? ??");
    $lDetail->FindField("Qty")->AsFloat = -5;
    $lDetail->FindField("UOM")->AsString = "UNIT";
    $lDetail->Post();
	
    $BizObject->Save();
    $BizObject->Close();
	
	try{
        $BizObject->Save();
        $BizObject->Close();
	}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    }	
}

if (isset($_POST['BtnData']))
{
    try
    {
        CheckLogin();
        GetData();
	echo "<br>";
        echo date("d M Y h:i:s A")." - Done";
	PostData();
	echo "<br>";
        echo date("d M Y h:i:s A")." - Done ST_AJ";			
    }
    finally
    {
        $ComServer->Logout();
        #free the object
        $ComServer = null;
    }
}

?> 
    <form method="post">           
        <input type="submit" name="BtnData"
                value="Get RTF n Post RTF"/> 
    </form> 
</body>
</html>

See also

  • Need assistance? May email to support@sql.com.my