diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/README.md b/README.md index b373a756..b2273ac5 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ ![markdown-badge][markdown-badge] ![docusaurus-badge][docusaurus-badge] [markdown-badge]: https://img.shields.io/badge/Markdown-blue -[docusaurus-badge]: https://img.shields.io/badge/Docusaurus-3.1.0-green +[docusaurus-badge]: https://img.shields.io/badge/Docusaurus-3.7.0-green
-

+

SQL Account Documentation

diff --git a/docs/additional-module/jo-po.md b/docs/additional-module/jo-po.md deleted file mode 100644 index 65a198dd..00000000 --- a/docs/additional-module/jo-po.md +++ /dev/null @@ -1,410 +0,0 @@ ---- -title: Job Order & Purchase Order -description: A guide about job order and purchase order for SQL Account -slug: /additional-module/job-order-purchase-order -tags: ["SQL Account", "Additional Module"] ---- - -## 1 INTRODUCTION - -Sales coordinator usually will input the Sales Order (SO) based on the customer PO received. The stock products will be updated into the system as ordered qty. - -If the stock are purchased from supplier, then the purchaser has to transfer from SO to PO. Unless the stock are manufactured, then you have to proceed to Job Order process. - -How much of the materials/components required to meet the products ordered by customer? This question raised by the Material Planning department. Therefore, the Job Order takes place as the order to be input after Sales Order. It will planned the materials/components required based on the qty ordered from Sales Order. - -When products produce out, you have to transfer the Job Order to Stock Assembly to commit on the stock on hand. - -:::info[IMPORTANT] - -It is required the SO → PO and Job Order module. For more information about price, please refer to our sales personal. - -::: - -## 2 SALES ORDER - -1. Create Sales Order (SO) - - Go to **Sales** | **Sales Order…** - - Create and save the customer PO into Sales Order. - - ![1](../../static/img/additional-module/jo-po/1.png) - -2. SO Check the Available Stock Balance - - You can press F11 (Available Stock Balance) on the item code highlighted. - - Below is **CAR** stock available balance, - - ![2](../../static/img/additional-module/jo-po/2.png) - - :::note - - **Results for CAR item:** - - SO Qty = -100.00 - - PO Qty = 0.00 - - JO Qty = 0.00 - - Qty (On Hand) = 0.00 - - Available Qty = -100.00 - - ::: - - Below is **WHEEL** stock available balance, - - ![2b](../../static/img/additional-module/jo-po/2b.png) - -## 3 PURCHASE ORDER (TRANSFER FROM SO) - -1. Create New Purchase Order (PO) - - Go to **Purchase | Purchase Order…** - - 1. Click on NEW button to start with new PO. - - 2. Select the Supplier. - - ![3](../../static/img/additional-module/jo-po/3.png) - -2. PO Transfer From SO - - 1. Right click on P/Order (Title). - - 2. Click on Transfer From Sales Order in the menu. - - ![4](../../static/img/additional-module/jo-po/4.png) - -3. Document Transfer (SO → PO) - - 1. Pick the Item from the SO list. - - 2. Input X/F Qty to transfer over PO. - - 3. Click OK to proceed. - - ![5](../../static/img/additional-module/jo-po/5.png) - - 4. Save the PO Document - - Click on SAVE button. - - ![6](../../static/img/additional-module/jo-po/6.png) - - 5. PO Check the Available Stock Balance - - You can press F11 (Available Stock Balance) on the item code highlighted. - - Below is **WHEEL** stock available balance, - - ![7](../../static/img/additional-module/jo-po/7.png) - - :::note - - **Result for WHEEL item:** - - SO Qty = -100.00 - - PO Qty = +35.00 - - JO Qty = 0.00 - - Qty (On Hand) = 0.00 - - Available Qty = -65.00 - - ::: - -## 4 JOB ORDER (TRANSFER FROM SO) - -1. Create New Job Order (JO) - - Go to **Production | Job Order…** - - 1. Click on NEW button to start with new JO. - - 2. Select the Customer. - - ![8](../../static/img/additional-module/jo-po/8.png) - - :::info - - > **Customer Info from SO** - - Basically, the customer and others information copy from SO. - - > **Assembly Item Info (Header & Footer)** - - Assembly item transferred from SO. It will determine the BOM Components required and the assembly unit cost. - - > **BOM Components Details** - - Total components quantity requirement to meet the total output. - - ::: - -2. JO Transfer From SO - - 1. Right click on Job Order (Title). - - 2. Click on Transfer From Sales Order in the menu. - - ![9](../../static/img/additional-module/jo-po/9.png) - -3. Document Transfer (SO → JO) - - 1. Pick the Item from the SO list. - - 2. Input X/F Qty to transfer over JO. - - 3. Click OK to proceed. - - ![10](../../static/img/additional-module/jo-po/10.png) - -4. Show Multilevel BOM in Flat Mode - - This function enable to drill down to the flatten level of the multilevel BOM structure. For example, the CAR multilevel BOM structure. - - | Level 0 | Level 1 | Level 2 | Level 3 | - |---------|---------|---------------|-----------| - | Car | Frame | Front Frame | Orange | - | Car | Frame | Front Frame | Screw | - | Car | Frame | Back Frame | Red Light | - | Car | Frame | Back Frame | Screw | - | Car | Wheel | Rim | | - | Car | Wheel | Tyres | | - | Car | Engine | Engine Block | Filter | - | Car | Engine | Engine Block | Screw | - | Car | Engine | Piston | Tube | - | Car | Engine | Piston | Cover | - | Car | Labour | | | - - Before FLAT MODE, BOM components show at **LEVEL 1**. - - ![11](../../static/img/additional-module/jo-po/11.png) - - Click on Show Multilevel BOM in Flat Mode button. - - It will prompted the below message. - - ![12](../../static/img/additional-module/jo-po/12.png) - - Press NO to keep the BOM components at **LEVEL 1**. - - Press YES to continue flatten the multilevel BOM to **LEVEL 3**. - - After FLAT MODE, BOM components show at **LEVEL 3**. - - ![13](../../static/img/additional-module/jo-po/13.png) - -5. Save the JO Document - - Click on SAVE button. - - ![14](../../static/img/additional-module/jo-po/14.png) - -6. JO Check the Available Stock Balance - - You can press F11 (Available Stock Balance) on the item code highlighted. - - Below is **component “FRAME”** stock available balance, - - ![15](../../static/img/additional-module/jo-po/15.png) - - :::note - - **Result for component “FRAME” item:** - - SO Qty = 0.00 - - PO Qty = 0.00 - - JO Qty = -6.00 - - Qty (On Hand) = 0.00 - - Available Qty = -6.00 - - ::: - - Below is **component “WHEEL”** stock available balance, - - ![16](../../static/img/additional-module/jo-po/16.png) - - :::note - - **Result for component “WHEEL” item:** - - SO Qty = -100.00 - - PO Qty = +35.00 - - JO Qty = -24.00 - - Qty (On Hand) = 0.00 - - Available Qty = -89.00 - - ::: - - Below is **component “ENGINE”** stock available balance, - - ![17](../../static/img/additional-module/jo-po/17.png) - - :::note - - **Result for component “ENGINE” item:** - - SO Qty = 0.00 - - PO Qty = 0.00 - - JO Qty = -6.00 - - Qty (On Hand) = 0.00 - - Available Qty = -6.00 - - ::: - -## 5 STOCK ITEM ASSEMBLY (TRANSFER FROM JO) - -1. Create New Stock Item Assembly (AS) - - Go to **Production | Stock Item Assembly…** - - Click on NEW button to start with new AS. - - ![18](../../static/img/additional-module/jo-po/18.png) - -2. AS Transfer From JO - - 1. Right click on Item Assembly (Title). - - 2. Click on Transfer From Job Order in the menu. - - ![19](../../static/img/additional-module/jo-po/19.png) - -3. Document Transfer (JO → AS) - - 1. Pick the Item from the JO list. - - 2. Input X/F Qty to transfer over AS. - - 3. Click OK to proceed. - - ![20](../../static/img/additional-module/jo-po/20.png) - -4. Save the AS Document - - Click on SAVE button. - - ![21](../../static/img/additional-module/jo-po/21.png) - -5. AS Check the Available Stock Balance - - You can press F11 (Available Stock Balance) on the item code highlighted. - - Below is **component “FRAME”** stock available balance, - - ![22](../../static/img/additional-module/jo-po/22.png) - - :::note - - **Result for component “FRAME” item:** - - SO Qty = 0.00 - - PO Qty = 0.00 - - JO Qty = -2.00 - - Qty (On Hand) = -4.00 - - Available Qty = -6.00 - - ::: - - Below is **component “WHEEL”** stock available balance, - - ![23](../../static/img/additional-module/jo-po/23.png) - - :::note - - **Result for component “WHEEL” item:** - - SO Qty = -100.00 - - PO Qty = +35.00 - - JO Qty = -8.00 - - Qty (On Hand) = -16.00 - - Available Qty = -89.00 - - ::: - - Below is **component “ENGINE”** stock available balance, - - ![24](../../static/img/additional-module/jo-po/24.png) - - :::note - - **Result for component “ENGINE” item:** - - SO Qty = 0.00 - - PO Qty = 0.00 - - JO Qty = -2.00 - - Qty (On Hand) = -4.00 - - Available Qty = -6.00 - - ::: - -## 6 OFFSET QTY - -### Offset Qty In Sales Order - -What is purpose of the OFFSET Qty in Sales Order? You will see a new column name “OffSet Qty”. It allowed you to input a value to increase/reduce the original QTY be transfer to Purchase Order and Job Order. - - ![25](../../static/img/additional-module/jo-po/25.png) - - 1. Positive Offset Qty - - REDUCE the Transferable QTY to PO and JO. - - For example, - - | SO Original Qty | OffSet Qty | Transferable to PO/ JO | - |-----------------|----------------|------------------------| - | 100.00 | 0.00 (default) | 100.00 | - | 100.00 | +15.00 | 85.00 | - - 2. Negative Offset Qty - - INCREASE the Transferable QTY to PO and JO. - - For example, - - | SO Original Qty | OffSet Qty | Transferable to PO/ JO | - |-----------------|----------------|------------------------| - | 100.00 | 0.00 (default) | 100.00 | - | 100.00 | -15.00 | 115.00 | - -## 7 REPORTS - -1. Print Job Order Listing - - Go to **Production** | **Print Job Order Listing…** - -2. Print Outstanding Production Document Listing - - Go to **Production** | **Print Outstanding Production Document Listing…** diff --git a/docs/additional-module/landing-cost.md b/docs/additional-module/landing-cost.md deleted file mode 100644 index 1801d3a3..00000000 --- a/docs/additional-module/landing-cost.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Landing Cost -description: A guide about landing cost for SQL Account -slug: /additional-module/landing-cost -tags: ["SQL Account", "Additional Module"] ---- - -## Introduction - -Landing Cost handles the cost to the warehouse that is not billed by the same supplier. In other words, it is the additional cost to increase your stock cost. This cost depends on the company's decision whether to add it or not. For instance, I buy the product from Supplier A but ship it through Transport company B. The transport charges may be entered as landing cost to increase the product cost. - -![1](../../static/img/additional-module/landing-cost/1.png) - -1. Landing Cost 1 = Key your Landing Cost to this column. (This cost will not be taken into account.) - -2. Landing Cost 2 = If you have a different calculation than Landing Cost 1, you may enter your value in this column. - -3. Click on the + Button to select the cost allocated. - - ![2](../../static/img/additional-module/landing-cost/2.png) - -## Cost Allocated By : SubTotal - -Formula : **Item Subtotal / Document Subtotal * Landing Cost1** - -![3](../../static/img/additional-module/landing-cost/3.png) - -:::info - -Item 1 = A/B * C - -Landing Cost1 (D) = 50.00 / 1949.00 * 200 = **5.13** - -::: - -:::info - -Item 2 - -Landing Cost1 (D) = 1899.00/1949.00 * 200 = **194.87** - -::: - -Let me show you the Stock Card result: - -![4](../../static/img/additional-module/landing-cost/4.png) - -:::info - -How to get unit cost = 5.51? - -Formula : Product Unit Cost + Item Landing Cost1/Item Qty - -5 + (5.13/10) = **5.51** - -::: - -## Cost Allocated by : Qty - -![5](../../static/img/additional-module/landing-cost/5.png) - -Formula : **Item Qty / Document Qty * Landing Cost1** - -![6](../../static/img/additional-module/landing-cost/6.png) - -:::info - -Item 1 : 10/11 * 200 = **181.81** - -Item 2 : 1/11 * 200 = **18.18** - -::: - -:::info - -Stock Card Report for - -Item 1 : Ant unit cost will be 23.18, how to get 23.18? - -Unit Cost + (Landing Cost1/ Qty) = 5 + (181.82/10) = **23.18** - -Item 2 : IP6 Unit Cost will be 1917.18 - -Unit Cost + (Landing Cost1/ Qty) = 1899 + (18.18/1) = **1917.18** - -::: - -## Cost Allocated by : Smallest Qty - -![7](../../static/img/additional-module/landing-cost/7.png) - -Formula : **Item Qty * Rate/ Sum(Qty * Rate) * Landing Cost1** - -![8](../../static/img/additional-module/landing-cost/8.png) - -Item 1 : 10 * 12 = 120/121 = **198.35** - -Item 2 : 1*1 = 1/121 = **1.65** - -Stock Card Report for - -Item 1 : Unit cost for **Ant** = [Unit Price + (Item Landing Cost1/Item Qty)] / ItemRate - - = [30 + (198.35/10)]/12 = **4.15** - -Item 2 : Unit Cost for **IP6** = [Unit Price + (Item Landing Cost1/Item Qty)] / ItemRate - - = 1899 + 1.65 = **1900.65** diff --git a/docs/faq/_category_.json b/docs/faq/_category_.json deleted file mode 100644 index 9211347b..00000000 --- a/docs/faq/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "FAQ", - "position": 6, - "link": { - "type": "generated-index", - "description": "SQL Account Frequently-Asked Questions (FAQ)" - } -} \ No newline at end of file diff --git a/docs/faq/customer/_category_.json b/docs/faq/customer/_category_.json deleted file mode 100644 index 40db0aca..00000000 --- a/docs/faq/customer/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Customer", - "position": 2, - "link": { - "type": "generated-index", - "description": "A quick guide on Customer for SQL Account" - } -} \ No newline at end of file diff --git a/docs/faq/customer/bounce-payment.md b/docs/faq/customer/bounce-payment.md deleted file mode 100644 index ada5ef65..00000000 --- a/docs/faq/customer/bounce-payment.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Bounce Payment for different currency -description: A guide on Bounce Payment for different currency for SQL Account -slug: /faq/customer/bounce-payment -tags: ["SQL Account", "FAQ", "Customer", "Payment"] ---- - -## Customer Invoice - -Invoice with amount USD100 | Rate 3.00 | Local net total = RM300 - -![1](../../../static/img/customer/bounce-payment/1.png) - -### Situation 1: Received payment RM330, so Gain RM30 - -![2](../../../static/img/customer/bounce-payment/2.png) - -Please follow the steps below to do the bounce payment: - -1. **Issue a Customer Debit Note as the previous invoice that had issue.** - - ![3](../../../static/img/customer/bounce-payment/3.png) - -2. **Issue a payment voucher to credit out the amount that already knock off.** - - ![4](../../../static/img/customer/bounce-payment/4.png) - -### Situation 2: Received payment RM270, so Loss RM30 - -![5](../../../static/img/customer/bounce-payment/5.png) - -Please follow the steps below to do the bounce payment: - - 1. **Issue a Customer Debit Note as the previous invoice that had issue.** - - ![6](../../../static/img/customer/bounce-payment/6.png) - - 2. **Issue a payment voucher to credit out the amount that already knock off.** - - ![7](../../../static/img/customer/bounce-payment/7.png) - -## Supplier Invoice - -Supplier Invoice with amount USD100 | Rate 3.00 | Local net total = RM300 - -![8](../../../static/img/customer/bounce-payment/8.png) - -### Situation 1: Make payment RM330, so Loss RM30 - -![9](../../../static/img/customer/bounce-payment/9.png) - -Please follow the steps below to do the bounce payment: - - 1. **Issue a Supplier Debit Note as the previous invoice that had issue.** - - ![10](../../../static/img/customer/bounce-payment/10.png) - - 2. **Issue an Official receipt to debit the amount that already knock off.** - - ***Put USD30 into loss GL account because we need to paid more USD30 to supplier,but we loss USD**. - - ![11](../../../static/img/customer/bounce-payment/11.png) - -### Situation 2: Make payment RM270, so Gain RM30 - -![12](../../../static/img/customer/bounce-payment/12.png) - -Please follow the steps below to do the bounce payment: - - 1. **Issue a Supplier Debit Note as the previous invoice that had issue.** - - ![13](../../../static/img/customer/bounce-payment/13.png) - - 2. **Issue an Official receipt to debit the amount that already knock off.** - - **\*Put USD -30 into gain GL account because we pay less USD30 to supplier,but we gain USD30.** - - ![14](../../../static/img/customer/bounce-payment/14.png) diff --git a/docs/faq/customer/foreign-cust-unrealise-gain.md b/docs/faq/customer/foreign-cust-unrealise-gain.md deleted file mode 100644 index db0c6a0e..00000000 --- a/docs/faq/customer/foreign-cust-unrealise-gain.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Foreign Customer Unrealised Gain Loss -description: Foreign customer unrealised gain loss -slug: /faq/customer/foreign-cust-unrealised-gain-loss -tags: ["SQL Account", "FAQ", "Customer", "Payment"] ---- - - -### Customer | Print Customer Aging Report - -![1](../../../static/img/customer/foreign/1.png) - -1. Select Date - -2. Select Foreign Customer - -3. Select UnRealised Gain Loss report - -4. Click Apply - - ![2](../../../static/img/customer/foreign/2.png) - -5. Click Preview, system will prompt a dialog to let you enter currency rate - -6. Enter **closing currency rate** | Click OK - - ![3](../../../static/img/customer/foreign/3.png) - -7. System will show the report with the auto calculated UnRealised Gain/Loss Amount - - ![4](../../../static/img/customer/foreign/4.png) - -8. Click Post_DNCN_Adjustment - - ![5](../../../static/img/customer/foreign/5.png) - -9. Show Posting Done... - - ![6](../../../static/img/customer/foreign/6.png) - -10. Go to Customer Credit Note / Customer Debit Note to check the document posted. - -:::note - -1. Same step for supplier. - -2. For more info, may go to the [Youtube](https://www.youtube.com/watch?v=PnLYx8ophIQ) link - -::: diff --git a/docs/faq/customer/open-bank-deposit.md b/docs/faq/customer/open-bank-deposit.md deleted file mode 100644 index ea19b4a6..00000000 --- a/docs/faq/customer/open-bank-deposit.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Bank Deposit -description: Managing post-dated cheque and bounced cheque -slug: /faq/customer/bank-deposit -tags: ["SQL Account", "Customer", "FAQ", "Bank"] ---- - -Opening Bank Deposit can be done when you are banking in 2 or more cheques at a time in a same transaction slip. After it is done, the transaction will be displayed in grouped form at bank reconciliation for you to reconcile. - -### Steps to open bank deposit - -1. Firstly, point to ***“Customer”*** tab and select ***“Customer Payment”***. - - ![1](../../../static/img/customer/open-bank-deposit/1.png) - -2. Click on ***“New”*** - - ![2](../../../static/img/customer/open-bank-deposit/2.png) - -3. Right click at the blank space, and you will see a panel displayed with *“Open Bank Deposit”* for you to select. Click on **“Open Bank Deposit”** - - ![3](../../../static/img/customer/open-bank-deposit/3.png) - -4. Click on **“New”** - - ![4](../../../static/img/customer/open-bank-deposit/4.png) - -5. You will come to this interface. Key in the transaction slip number, select the correct date and account. - ![5](../../../static/img/customer/open-bank-deposit/5.png) - ![6](../../../static/img/customer/open-bank-deposit/6.png) - -6. Click **“Search”**. System will search for customer payment within the selected date. - - ![7](../../../static/img/customer/open-bank-deposit/7.png) - - ![8](../../../static/img/customer/open-bank-deposit/8.png) - -7. Tick on the payments which are made under the same transaction. Then, click **“OK”**. - - ![9](../../../static/img/customer/open-bank-deposit/9.png) - -8. You will see the selected payments displayed in the panel. If you have wrongly selected the payment, you can always remove it by clicking on the “-“button. Click **“Save”**. - - ![10](../../../static/img/customer/open-bank-deposit/10.png) - -9. Point to **“GL”** and click into **“Bank Reconciliation”**. - - ![11](../../../static/img/customer/open-bank-deposit/11.png) - -10. Click on **“New”**. - - ![12](../../../static/img/customer/open-bank-deposit/12.png) - -11. Then, you will come to this panel. Select the bank statement date (When the bank statement is received). Make sure that you have selected the correct account. - - ![13](../../../static/img/customer/open-bank-deposit/13.png) - -12. Select the correct display period (including the date of the bank deposit opening made). Key in Bank Statement Bank Closing according to the bank statement you received. Click **“Apply”**. - - ![14](../../../static/img/customer/open-bank-deposit/14.png) - -13. You will see the cheques from **“Opening Bank Deposit”** will be displayed together in a row with the total amount added up together. Then, click **“Save”**. - - ![15](../../../static/img/customer/open-bank-deposit/15.png) - -### Opening Bank Deposit at cash book entry - -“Opening Bank Deposit” an also be done at cash book entry. Firstly, point to **“GL”** and select **“Cash Book Entry”**. - - ![16](../../../static/img/customer/open-bank-deposit/16.png) - -Click on **“New”** - - ![17](../../../static/img/customer/open-bank-deposit/17.png) - -Then, right click at the blank space beside Payment Voucher, you will see **“Open Bank Deposit”** for you to select. - - ![18](../../../static/img/customer/open-bank-deposit/18.png) diff --git a/docs/faq/customer/payment-guide.md b/docs/faq/customer/payment-guide.md deleted file mode 100644 index 5a288547..00000000 --- a/docs/faq/customer/payment-guide.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Payment Guide -description: Customer payment guide -slug: /faq/customer/payment-guide -tags: ["SQL Account", "FAQ", "Customer", "Payment"] ---- - -## Customer Payment Scenario - -|#|Customer Pay| You Receive| -|---|---|---| -|1|RM|RM| -|2|USD|RM| -|3|USD|USD| -|4|USD|SGD| - -### 1. Customer Paid in RM & Payment Received in RM - -1. First step to know the customer for currency RM by default is with “----“ sign. - - **Tools > Maintain Customer** - - ![1](../../../static/img/customer/payment-guide/1.png) - -2. Customer order and proceed to Invoice - - **Sales > Invoice** - - ![2](../../../static/img/customer/payment-guide/2.png) - -3. Proceed to Payment - - **Customer > Payment** - - ![3](../../../static/img/customer/payment-guide/3.png) - -Make sure the above step for Customer in RM currency, payment in default is RM currency also. - -### 2. Customer Paid in USD & Payment Received in RM - -:::note -Refer to Step 1 in [Scenario 1](#1-customer-paid-in-rm--payment-received-in-rm) to know if the customer using USD currency. -::: - -1. Check the local amount and net total. Is it different with the previous one? If yes, proved that the document amount is in USD currency. - - **Sales > Invoice** - - ![4](../../../static/img/customer/payment-guide/4.png) - -2. Proceed to Payment - - **Customer > Payment** - - ![5](../../../static/img/customer/payment-guide/5.png) - - - 2A. Currency rate for knocking off the payment (System auto calculate) - - - 2B. Payment Amount made in RM (Note: This payment amount is based on Bank payment method currency) **[check on Tools > Maintain payment method to know more!]** - - - 2C. Bank payment method, make sure you choose the correct bank. - - - 2D. This pay amount you can either put it on your desire amount and check on the 2A, you’ll notice that currency rate will change once you try to knock off the amount. - -### 3. Customer Paid in USD & Payment Received in USD - -1. For this case where customer currency is USD and payment also in USD, there’ll be a few more step to do. - - 1. you have to maintain a USD Bank in GL Account (**GL > Maintain Account**) where this will be the bank you’ll be getting your - payment in. - - 2. after maintain the GL Account, go to **Tools > Maintain Payment Method** to assign the currency of the - payment method in the particular bank. - - ![6](../../../static/img/customer/payment-guide/6.png) - -2. After maintained payment method, we can proceed to do transaction for cases similar (USD Currency on Invoice). - - **Sales > Invoice** - - ![7](../../../static/img/customer/payment-guide/7.png) - -3. Proceed to Payment - - **Customer > Payment** - - :::info - Only Customer currency that is same with payment currency will enable the editing of Rate for currency on top right corner - ::: - - ![8](../../../static/img/customer/payment-guide/8.png) - - 1. Now, this rate can be changed as the currency rate change according to the currency rate - - 2. Select the correct payment method in order to allow USD payment knocking off USD Invoice - - 3. Paid amount will be the amount of USD you receive - - 4. Local amount is the amount of conversion of (paid amount x currency rate at the moment) - - 5. This IV amount will always be following the currency amount not local amount. - - After confirming all the related info is correct may save it. If your currency rate is different from the one stated in the Invoice, a message should prompt out defining your gain/loss on foreign exchange. - - ![9](../../../static/img/customer/payment-guide/9.png) - - :::note - If your Invoice currency is stated 3.5 at the moment, and when your customer pay to you on 3.6 rate, the system will auto calculate the amount of gain/loss you actually got from this transaction and show to you the amount when you click save. Above prompt dialog will appear. - ::: - -### 4. Customer Paid in USD & Payment Received in SGD - -For customer on USD and receiving payment on different currency you just need to main the payment method. - -:::note -How to maintain payment method? – Refer to [Scenario 3](#3-customer-paid-in-usd--payment-received-in-usd) -::: - -1. Select for the payment method ( Bank account in SGD ). - -2. Put in the payment amount and change the currency rate of SGD, check the amount for confirmation. - - :::note - Only Customer currency that is same with payment currency will enable the editing of Rate for currency on top right corner - ::: - -3. Put in the payment amount on `Pay` column, tick on the payment knocking invoices check for the USD rate as it change. - - ![10](../../../static/img/customer/payment-guide/10.png) - -The knock-off amount will calculate automatically. If there’s any currency exchange gain/loss, simply click on the save button and you'll be notify about the amount of gain/loss on foreign currency exchange. diff --git a/docs/faq/customer/payment-listing-comm.md b/docs/faq/customer/payment-listing-comm.md deleted file mode 100644 index 67d49647..00000000 --- a/docs/faq/customer/payment-listing-comm.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Payment Listing Commission -description: Customer payment listing commission -slug: /faq/customer/payment-listing-comm -tags: ["SQL Account", "Customer", "Payment", "Commission"] ---- - -### Guideline: Commission Report - -1. Go to **Tools > Maintain Commission Script > New** to add in the commission - script. Fill in the Code and Description. - - :::note - Maintain Commission Script requires additional module - ::: - - ![1](../../../static/img/customer/comm/1.png) - - ![2](../../../static/img/customer/comm/2.png) - - ![3](../../../static/img/customer/comm/3.png) - - Default commission script: - - ```pascal - procedure CalculateCommission(AKODocAmt, AAge: variant; var Value: variant); - begin - if AAge < 10 then - Value := AKODocAmt * 0.05 - else if AAge < 20 then - Value := AKODocAmt * 0.03 - else if AAge < 30 then - Value := AKODocAmt * 0.02 - else - Value := AKODocAmt * 0.05005; - end; - ``` - -2. Change the value highlighted as below according to commission rate for agent and Save. - - ![4](../../../static/img/customer/comm/4.png) - - 1. Value 10, 20, 30 = Age - - 2. Value 0.05, 0.03, 0.02, 0.005 = Commission Rate - -3. Go to **Tools > Maintain Agent** and select the agent that need to load the commission script. - - ![5](../../../static/img/customer/comm/5.png) - -4. At the attachment tab, add in the commission script by selecting it as shown below and click Save after adding the script. - - ![6](../../../static/img/customer/comm/6.png) - -5. Go to **Customer > Print Customer Document Listing**, select **Document Type** as **Customer Payment Listing**, group by Agent and apply. Preview the result with **Cust Local - Payment Listing - Collection Report**. - - ![7](../../../static/img/customer/comm/7.png) - - ![8](../../../static/img/customer/comm/8.png) - - ![9](../../../static/img/customer/comm/9.png) diff --git a/docs/faq/customer/post-dated-bounced-cheque.md b/docs/faq/customer/post-dated-bounced-cheque.md deleted file mode 100644 index cd967f44..00000000 --- a/docs/faq/customer/post-dated-bounced-cheque.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Post-dated & Bounced Cheque -description: Managing post-dated cheque and bounced cheque -slug: /faq/customer/post-dated-bounced-cheque -tags: ["SQL Account", "FAQ", "Customer", "Cheque"] ---- - -## Post-dated Cheque - -Post-dated cheque is a cheque written by the drawer (payer) for a date in the future. - -1. Firstly, go to **Customer > Customer Payment**. - - ![1](../../../static/img/customer/post-dated-bounced-cheque/1.png) - -2. Click on **New** to create a new customer payment. - - ![2](../../../static/img/customer/post-dated-bounced-cheque/2.png) - -3. As usual, create a customer payment and tick to knock off the corresponding invoice. Make sure the bank account and amount is correct. - - ![3](../../../static/img/customer/post-dated-bounced-cheque/3.png) - -4. To set the payment as a post-dated cheque, simply point the cursor to the blank space beside **Customer Payment** and right click. Click into **Set Posting Date**. - - ![4](../../../static/img/customer/post-dated-bounced-cheque/4.png) - -5. Select the actual posting date of the cheque. eg: 16th of July 2015. Then, click **OK**. - - ![5](../../../static/img/customer/post-dated-bounced-cheque/5.png) - - ![6](../../../static/img/customer/post-dated-bounced-cheque/6.png) - -6. Now, you will see the posting date is clearly stated in the system. Click **Save**. - - ![7](../../../static/img/customer/post-dated-bounced-cheque/7.png) - -7. From ledger report, by selecting the posting date and corresponding account, you will see that the document date and transaction is clearly stated. - - ![8](../../../static/img/customer/post-dated-bounced-cheque/8.png) - -8. To view the listing of post-dated cheques. Go to **Customer Reports** and select **Post Dated Cheque Listing**. - - ![9](../../../static/img/customer/post-dated-bounced-cheque/9.png) - -9. Select the date of the payment made (NOT the cheque posting date), and click **Apply**. (You can filter the search by payment method, customer, agent and etc. before clicking **Apply**) - - ![10](../../../static/img/customer/post-dated-bounced-cheque/10.png) - -10. Upon clicking the **Apply** button, a list of post-dated cheque will be displayed - - ![11](../../../static/img/customer/post-dated-bounced-cheque/11.png) - -## Bounced Cheque - -A bounced cheque is a cheque that cannot be processed because the payer has insufficient funds or written wrong / incomplete information on the cheque. - -1. Firstly, go to **Customer** and click into **Customer Payment**. - - ![12](../../../static/img/customer/post-dated-bounced-cheque/12.png) - -2. Select the bounced cheque customer payment. Double click into the document. - - ![13](../../../static/img/customer/post-dated-bounced-cheque/13.png) - -3. Click **Edit**. - - ![14](../../../static/img/customer/post-dated-bounced-cheque/14.png) - -4. To set the payment as a bounced cheque, simply point the cursor to the blank space beside **Customer Payment** and right click. Click into **Bounced Status**. - - ![15](../../../static/img/customer/post-dated-bounced-cheque/15.png) - -5. Tick in box to bounce the payment. And set the bounce date. (For this case, the cheque is posted on 16th of July 2015, thus the bounce date should be later that 16th of July 2015). Click **OK**. - - ![16](../../../static/img/customer/post-dated-bounced-cheque/16.png) - -6. The cheque will then be labelled as bounced, and the bounce date will be clearly stated. Then click **Save**. - - ![17](../../../static/img/customer/post-dated-bounced-cheque/17.png) - -7. From ledger report, by selecting the bounce date and the corresponding account, you can clearly see the transaction is bounced. - - ![18](../../../static/img/customer/post-dated-bounced-cheque/18.png) diff --git a/docs/faq/customer/read-mykad.md b/docs/faq/customer/read-mykad.md deleted file mode 100644 index aec66980..00000000 --- a/docs/faq/customer/read-mykad.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: MyKad Reader -description: Maintain customer using MyKard Reader -slug: /faq/customer/read-mykad -tags: ["SQL Account", "FAQ", "Customer", "MyKad"] ---- - -## Read Customer Info using MyKad Reader - -1. Link your Smart Card Reader to your computer - -2. Reader will turn red light when you success link to your computer - - ![1](../../../static/img/customer/read-mykad/1.png) - -3. Put MyKad into reader - -4. Reader will show blue light when success read your MyKad - - ![2](../../../static/img/customer/read-mykad/2.png) - -5. Open your SQL Accounting New Customer Profile > ***Read MyKad*** - - ![3](../../../static/img/customer/read-mykad/3.png) - -6. Select ***Reader Devices*** > ***Click Read Card*** - - ![4](../../../static/img/customer/read-mykad/4.png) - -7. Click ***Read MyKad*** - - ![5](../../../static/img/customer/read-mykad/5.png) - -8. Inside System will auto fill up MyKad Detail ***(NAME , ADDRESS , ID Number)*** - - ![6](../../../static/img/customer/read-mykad/6.png) diff --git a/docs/faq/general-ledger/_category_.json b/docs/faq/general-ledger/_category_.json deleted file mode 100644 index c4ae030b..00000000 --- a/docs/faq/general-ledger/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "General Ledger", - "position": 1, - "link": { - "type": "generated-index", - "description": "A quick guide on General Ledger for SQL Account" - } -} \ No newline at end of file diff --git a/docs/faq/general-ledger/accumulated-deprec-fixed-asset.md b/docs/faq/general-ledger/accumulated-deprec-fixed-asset.md deleted file mode 100644 index fefaddf2..00000000 --- a/docs/faq/general-ledger/accumulated-deprec-fixed-asset.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Accumulated Depreciation for Fixed Asset -description: Record accumulated depreciation for fixed asset -slug: /faq/general-ledger/accumulated-deprec-fixed-asset -tags: ["SQL Account", "FAQ", "General Ledger"] ---- - -## Record accumulated depreciation for fixed asset - -1. **GL > Journal Entry > New** - -2. Key in the double entry for recording accumulated depreciation - - :::info - Eg: Record the depreciation of motor vehicle in year 2015 - Debit Depreciation Expenses RM1000 - Credit Accumulated Depreciation of Motor Vehicle RM1000 - ::: - -3. Save - - ![1](../../../static/img/general-ledger/accumulated-deprec-fixed-asset/1.png) - -## The Next Year - -1. **GL > Journal Entry**. Open the journal entry of depreciation in year 2015 - -2. Right click on empty space, refer picture , **Copy Journal Entry** - - ![2](../../../static/img/general-ledger/accumulated-deprec-fixed-asset/2.png) - -3. **New** - -4. Right click on empty space, refer picture, **Paste Journal Entry** - ![3](../../../static/img/general-ledger/accumulated-deprec-fixed-asset/3.png) - -5. Edit the journal entry by changing the date, description and amount - - ![4](../../../static/img/general-ledger/accumulated-deprec-fixed-asset/4.png) - -6. Save! diff --git a/docs/faq/general-ledger/auto-post-gl-stock-value.md b/docs/faq/general-ledger/auto-post-gl-stock-value.md deleted file mode 100644 index 6b76756f..00000000 --- a/docs/faq/general-ledger/auto-post-gl-stock-value.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Auto Post GL Stock Value by Project -description: A guide to Auto Post GL Stock Value With Project for SQL Account -slug: /faq/general-ledger/auto-post-gl-stock-value -tags: ["SQL Account", "FAQ", "General Ledger"] ---- - -:::caution -**Auto Maintain Stock Value with Project** required SQL Account version 839 and above. -::: - -## Setup - -### 1. Turn on Auto Post GL Stock Value Option - -1. Click on **Tools** - -2. Click on **Option** - - ![1](../../../static/img/general-ledger/auto-post-gl-stock-value/1.png) - -3. Click on **Miscellaneous** - -4. Tick on **Auto Post GL Stock Value** - - ![2](../../../static/img/general-ledger/auto-post-gl-stock-value/2.png) - -### 2. Map Balance Sheet Stock Account in Maintain Stock Group - -1. Click on **Stock** - -2. Click on **Maintain Stock Group** - - ![3](../../../static/img/general-ledger/auto-post-gl-stock-value/3.png) - -3. Click on **Edit** - -4. **Choose** the Account Code for your Stock Value Posting - -5. Click on **Save** - - ![4](../../../static/img/general-ledger/auto-post-gl-stock-value/4.png) - - :::note - Ensure that all Stock Groups are mapped to the **Balance Sheet Account Code (A)** - ::: - - ![5](../../../static/img/general-ledger/auto-post-gl-stock-value/5.png) - -### 3. Map Project Code in Maintain Location - -1. Click on **Stock** - -2. Click on **Maintain Location** - - ![6](../../../static/img/general-ledger/auto-post-gl-stock-value/6.png) - -3. Click on **Edit** - -4. You can set your stock project for each location - -5. **Save** - - ![7](../../../static/img/general-ledger/auto-post-gl-stock-value/7.png) - - :::info - Ensure that all Location are mapped to the **Project Code (A)** - ::: - - ![8](../../../static/img/general-ledger/auto-post-gl-stock-value/8.png) - - :::info - Note : May ignore this step if you have **only 1** Project. - ::: - -### 4. Maintain Stock Month End, to show the total Stock Value for default project and P1 - -:::info Example A -Project Code : ---- - -Closing Stock : 308534.22 -::: - -![9](../../../static/img/general-ledger/auto-post-gl-stock-value/9.png) - -:::info Example B -Project Code : P1 - -Closing Stock : 3560.00 -::: - -![10](../../../static/img/general-ledger/auto-post-gl-stock-value/10.png) - -### 5. Apply Financial Report will auto update Stock value - -:::note -When you apply **Profit & Loss Statement, Balance Sheet or Trial Balance Report**, -system will automatically retrieve the Stock value from Stock Month End -Balance and present it in financial report. Additionally, the system will update -closing Stock value to **Maintain Stock Value**. -::: - -1. This is a sample of a Balance Sheet Statement report to show a **Closing Stock Value**. - - ![11](../../../static/img/general-ledger/auto-post-gl-stock-value/11.png) - -:::info -Note : When Fall Outside Maintain Acceptable Trans Date range, the system will no longer retrieve the Stock -Value from the Stock Month End Balance and will silently bypass the update. -::: diff --git a/docs/faq/general-ledger/auto-post-stock-month-end-value.md b/docs/faq/general-ledger/auto-post-stock-month-end-value.md deleted file mode 100644 index b3b326fc..00000000 --- a/docs/faq/general-ledger/auto-post-stock-month-end-value.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Auto Post Stock Month End Value -description: Auto posting stock month end value to maintain stock value according to stock group's balance stock account -slug: /faq/general-ledger/auto-post-stock-month-end-value -tags: ["SQL Account", "FAQ", "General Ledger"] ---- - -:::warning -Require SQL Account version 748 & above. -::: - -This feature allow system auto post the stock value from Maintain Month End value to GL Maintain Stock Value. - -## Setup - -### 1. Stock > Maintain Stock Group - -![1](../../../static/img/general-ledger/auto-post-stock-month-end-value/1.png) - -### 2. Stock > Stock Month End Balance Report - -![2](../../../static/img/general-ledger/auto-post-stock-month-end-value/2.png) - -:::info Note : -Required to fill in Balance Sheet Account in Stock Group in order able to show the update GL Stock Value. -::: - -### 3. GL > Maintain Stock Value - -![3](../../../static/img/general-ledger/auto-post-stock-month-end-value/3.png) diff --git a/docs/faq/general-ledger/auto-recon.md b/docs/faq/general-ledger/auto-recon.md deleted file mode 100644 index 17f47003..00000000 --- a/docs/faq/general-ledger/auto-recon.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Auto Bank Reconciliation -description: Import bank statement and reconciliate without manual entry. -slug: /faq/general-ledger/auto-recon -tags: ["SQL Account", "FAQ", "Bank Reconciliation", "General Ledger"] ---- - -## Setup - -### 1. In SQL General Ledger, go to **Bank Reconciliation** -> **Create New** - -1. Select the **Bank Statement Date** - -2. Select the **Account** - -3. Tick **“Show Current Recon Transactions”** - -4. Click **Apply** - - ![1](../../../static/img/general-ledger/auto-recon/1.png) - -5. Click Load Statement - - ![2](../../../static/img/general-ledger/auto-recon/2.png) - -6. Select your Bank Statement (pdf / csv) - - ![3](../../../static/img/general-ledger/auto-recon/3.png) - -7. System loading - - ![4](../../../static/img/general-ledger/auto-recon/4.png) - -8. System will detect the Name of your Bank and prompt message below, Click **Yes** if it is **correct**. - - ![5](../../../static/img/general-ledger/auto-recon/5.png) - -9. Once you have loaded in your bank statement, bank closing amount will be automatically filled. - - ![6](../../../static/img/general-ledger/auto-recon/6.png) - - :::info - Criteria to Match: - - 1. Cheque number + Amount - - 2. Description + Amount - ::: - -10. System will auto match the transactions with the bank statement and auto ticked. **(yellow highlighted)** - - But some transactions may not be able to auto match **[red box]** - - ![7](../../../static/img/general-ledger/auto-recon/7.png) - -### 2. Step to match on unmatched transactions with bank statement - -1. Click on the untick transaction. - - At the bottom, search for **SAME DR/CR AMOUNT**, you will find that is a **“Match”** button or few “Match” button…(if there are few same amount, eg. 50.00) - - ![8](../../../static/img/general-ledger/auto-recon/8.png) - -2. Click on “Match” when this is the correct bank transactions for **[Salary for Ali]** - - ![9](../../../static/img/general-ledger/auto-recon/9.png) - - After click “Match”, system will auto tick the transactions and show the date and bank description at Bank Statement (Match) Column diff --git a/docs/faq/general-ledger/bank-recon.md b/docs/faq/general-ledger/bank-recon.md deleted file mode 100644 index aac19f54..00000000 --- a/docs/faq/general-ledger/bank-recon.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Bank Reconciliation -description: Bank reconciliation -slug: /faq/general-ledger/bank-recon -tags: ["SQL Account", "FAQ", "Bank Reconciliation", "General Ledger"] ---- - -:::note -For Opening Bank Reconciliation, you may refer this [Guide](../../usage/general-ledger.md#bank-reconciliation). -::: - -A bank reconciliation is a process performed by a company to ensure that the company's records -(check register, **general ledger account**, **balance sheet**, etc.) are tally with bank's records. - -## Setup - -### 1. Reconciliation Bank Transaction - - GL | Bank Reconciliation - ![1](../../../static/img/general-ledger/bank-recon/1.png) - - ![2](../../../static/img/general-ledger/bank-recon/2.png) - -### 2. Bank Reconciliation - -- Select the Bank Statement Date -- Select the Bank Account, eg. Hong Leong Bank -- Display Period (normally the date from period will be BLANK, and date to will be same as per Bank Statement Date) -- Check(√) Show Unticked Transaction -- Check(√) Show Current Recon Transaction -- Check (√) Merge Bank Charges -- Click Apply -- You may tick the bank transaction reconcile with the transaction show in Bank Statement and save - - ![3](../../../static/img/general-ledger/bank-recon/3.png) - - ![4](../../../static/img/general-ledger/bank-recon/4.png) - - As attached bank statement is the sample, compare with the transaction, if exist then you may check as sample picture above. - -### 3. Print Bank Reconciliation Report - -After reconciliation done, you can save and preview reconciliation report - -![5](../../../static/img/general-ledger/bank-recon/5.png) - -:::note -You can press F6 button for preview report. -::: diff --git a/docs/faq/general-ledger/cal-p&l-percent.md b/docs/faq/general-ledger/cal-p&l-percent.md deleted file mode 100644 index beeca9a1..00000000 --- a/docs/faq/general-ledger/cal-p&l-percent.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Calculate P&L Percentage -description: Calculate P&L Percentage (%) -slug: /faq/general-ledger/cal-p&l-percent -tags: ["SQL Account","FAQ", "General Ledger", "Profit & Loss", "P&L"] ---- - -![1](../../../static/img/general-ledger/cal-p&l-percent/1.png) - -:::note -Formula : -Account Amount / Total Sales * 100 -::: - -## Example - -### 1. How to get A % = 62.1 ? - - Using Sales / Total Sales \* 100 = 184,119.49/ 296,502.11 \* 100 = 62.1% - -### 2. How to get C % = 2.5 ? - - Using Purchase / Total Sales \* 100 = 7,406.8 / 296,502.11 \* 100 = 2.5 % - -### 3. How to get D % = 95 ? - - Using Gross Profit / Total Sales \* 100 = 281,662.21 / 296,502.11 \* 100 = 95% - -### 4. How to get E % = 3.4? - - Using Expenses value / Total Sales / 6 \* 100= 10,000/296,502.11 \* 100 = 3.4% - -### 5. How to get F % = 91.7 ? - - Using Net Profit / Total Sales \* 100 = 271,805.66 /296,502.11 \* 100 = 91.7% - -:::info - -1. % will round to nearest 1 Decimal Point. - -::: diff --git a/docs/faq/general-ledger/foreign-bank-adjustment.md b/docs/faq/general-ledger/foreign-bank-adjustment.md deleted file mode 100644 index 4a5fa6ce..00000000 --- a/docs/faq/general-ledger/foreign-bank-adjustment.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Foreign Bank Adjustment -description: Foreign bank adjustment -slug: /faq/general-ledger/foreign-bank-adjustment -tags: ["SQL Account", "FAQ", "General Ledger", "Bank"] ---- - -## Setup - -1. Go to GL > Foreign Bank Adjustment > Create New > Click Bank Revalue - - ![1](../../../static/img/general-ledger/foreign-bank-adjustment/1.png) - -2. In Revalue windows > Select Bank Account Code & Date - - ![2](../../../static/img/general-ledger/foreign-bank-adjustment/2.png) - -3. balance USD & local amount are shown as per ledger report - - ![3](../../../static/img/general-ledger/foreign-bank-adjustment/3.png) - -4. Enter the Revalue to currency rate, system will auto recalculate the - - - new local balance amount - - Gain/Loss Amount - - ![4](../../../static/img/general-ledger/foreign-bank-adjustment/4.png) - -5. Click OK - - ![5](../../../static/img/general-ledger/foreign-bank-adjustment/5.png) - -6. System will auto post the double entries - - ![6](../../../static/img/general-ledger/foreign-bank-adjustment/6.png) - -7. Click Save - -8. Please check the ledger for the adjustment post diff --git a/docs/faq/general-ledger/maintain-budget.md b/docs/faq/general-ledger/maintain-budget.md deleted file mode 100644 index 57a09a89..00000000 --- a/docs/faq/general-ledger/maintain-budget.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Maintain Budget -description: Maintain account budget -slug: /faq/general-ledger/maintain-budget -tags: ["SQL Account", "FAQ", "Budget", "General Ledger"] ---- - -## Budget Setting - -1. Click on General Ledger - -2. Click on Maintain Budget - - ![1](../../../static/img/general-ledger/maintain-budget/1.png) - -3. Select the year you want to set the budget - -4. Choose your project code for budgeting, or select 'Non Project' if applicable - -5. Click Edit - -6. Enter monthly budget amounts to update quarterly, half-yearly, and yearly budgets automatically - -7. Key your budget by account code - -8. Click Save - - ![2](../../../static/img/general-ledger/maintain-budget/2.png) - -## Profit And Loss Statement with Budget Report - -1. This Month vs Month Budget - This Year vs Year Budget - -2. This Month vs Month Budget - -3. This Year vs Last Year Budget - - This is a sample of a Profit and Loss Statement report comparing **This Month vs. Monthly Budget** and **This Year vs. Yearly Budget** - - A : Month to date Vs Monthly Budget - - B : Year to date Vs Yearly Budget - - ![3](../../../static/img/general-ledger/maintain-budget/3.png) - -## Balance Sheet Statement with Budget Report - -1. This Month vs Month Budget - This Year vs Year Budget - -2. This Month vs Month Budget - -3. This Year vs Last Year Budget - - This is a sample of a Balance Sheet Statement report comparing **This Month vs. Monthly Budget** and **This Year vs. Yearly Budget** - - C : Month to date Vs Monthly Budget - - D : Year to date Vs Yearly Budget - - ![4](../../../static/img/general-ledger/maintain-budget/4.png) diff --git a/docs/faq/general-ledger/p&l-more-than-12.md b/docs/faq/general-ledger/p&l-more-than-12.md deleted file mode 100644 index b441d6c5..00000000 --- a/docs/faq/general-ledger/p&l-more-than-12.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: P&L Statement more than 12 months -description: Create profit and loss statement and balance sheet for more than 12 months -slug: /faq/general-ledger/p&l-more-than-12 -tags: ["SQL Account", "FAQ", "P&L", "General Ledger"] ---- - -## Setup - -1. GL > Profit and Loss Statement - - ![1](../../../static/img/general-ledger/p&l-more-than-12/1.png) - -2. Right Click on SQL Icon > go 800 x 600 to smaller SQL Screen - - ![2](../../../static/img/general-ledger/p&l-more-than-12/2.png) - -3. Click on the report name “This year-2 Column” > click and drag it to desktop - - ![3](../../../static/img/general-ledger/p&l-more-than-12/3.png) - -4. Click on the report from desktop and drag it back into SQL - - ![4](../../../static/img/general-ledger/p&l-more-than-12/4.png) - -5. After drag in will prompt dialog above > click on OK - - ![5](../../../static/img/general-ledger/p&l-more-than-12/5.png) - -6. Double click on the report name “ this year-2Column” **(in blue colour font)** - - ![6](../../../static/img/general-ledger/p&l-more-than-12/6.png) - - 1. You can enter a report name - - 2. Change the period class to **Fixed Date** - - 3. **Param 1** : Date **From** - - **Param 2** : Date **to** - - 4. Click on OK - - ![7](../../../static/img/general-ledger/p&l-more-than-12/7.png) - -:::info -Apply the report as usual, the result will captured based on Param 1 & 2 set. - -Repeat the same step on GL > Print Balance Sheet Statement -::: diff --git a/docs/faq/general-ledger/p&l-statement-appropriation-acc.md b/docs/faq/general-ledger/p&l-statement-appropriation-acc.md deleted file mode 100644 index 43d94fe7..00000000 --- a/docs/faq/general-ledger/p&l-statement-appropriation-acc.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: P&L Statement with Appropriation -description: P&L Statement with Appropriation Account (Dividend) -slug: /faq/general-ledger/p&l-statement-appropriation-acc -tags: ["SQL Account", "FAQ", "P&L", "General Ledger"] ---- - -## Setup - -1. GL > Maintain Account - - ![1](../../../static/img/general-ledger/p&l-statement-appropriation-acc/1.png) - - 1. Click on Appropriation Account - - 2. Click on New - - ![2](../../../static/img/general-ledger/p&l-statement-appropriation-acc/2.png) - - 3. Insert **GL Code** and **GL Description** > After Done Press **OK** - -2. GL > Print Journal Entry > Create New - - ![3](../../../static/img/general-ledger/p&l-statement-appropriation-acc/3.png) - - EG : Dr Dividend 2,000 Cr Bank 2,000 - -3. GL > Print P&L Statement - - 1. Select the Date - - 2. Select P&L Report format : This Year – 2 Column - - 3. Apply - - ![4](../../../static/img/general-ledger/p&l-statement-appropriation-acc/4.png) - - 4. Click on Preview. - - ![5](../../../static/img/general-ledger/p&l-statement-appropriation-acc/5.png) - - ![6](../../../static/img/general-ledger/p&l-statement-appropriation-acc/6.png) diff --git a/docs/faq/general-ledger/solution-gl-report-ref1-as-new.md b/docs/faq/general-ledger/solution-gl-report-ref1-as-new.md deleted file mode 100644 index 09b06b1d..00000000 --- a/docs/faq/general-ledger/solution-gl-report-ref1-as-new.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: General Ledger Report Ref1(DocNo) appear as <> -description: A Solution for General Ledger Report Ref1(DocNo) appear as <> for SQL Account -slug: /faq/general-ledger/solution-gl-report-ref1-as-new -tags: ["SQL Account", "Report", "General Ledger", "Doc No", "Solution"] ---- - -## Example - -When you see General Ledger Report `Ref1(DocNo)` appeared as `<>`, use the method below to fix it. - -![1](../../../static/img/general-ledger/solution-gl-report-ref1-as-new/1.png) - -## Fix - -1. Find out the document to check the source for this document. - - ![2](../../../static/img/general-ledger/solution-gl-report-ref1-as-new/2.png) - -2. Go to **Journal Entry**, look for the Date 31/03/2015 (Because Ledger Date is 31/03/15) - - ![3](../../../static/img/general-ledger/solution-gl-report-ref1-as-new/3.png) - -3. Press Edit and Save Button for all the Date is 31/03/2015. - -4. After Edit and Save, apply the Ledger to see the result. - - ![4](../../../static/img/general-ledger/solution-gl-report-ref1-as-new/4.png) - -5. Done diff --git a/docs/faq/general-ledger/trial-balance-not-tally.md b/docs/faq/general-ledger/trial-balance-not-tally.md deleted file mode 100644 index e871670e..00000000 --- a/docs/faq/general-ledger/trial-balance-not-tally.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Trial Balance not tally -description: A guide to Trial Balance not tally for SQL Account -slug: /faq/general-ledger/trial-balance-not-tally -tags: ["SQL Account", "FAQ", "General Ledger"] ---- - -If you trial balance is not tally, may try running the following check. - -## Make sure Retained Earning must have 1 Account code - -1. GL > Maintain Chart of Account - - ![1](../../../static/img/general-ledger/trial-balance-not-tally/1.png) - -:::note -If your Retained Earning is empty, you may create under Reserve, then only drag into Retained Earning. -::: - -## Make Sure Maintain Opening Is Tally - -1. GL > Maintain Opening Balance - -2. Untick Project at left top - -3. Make sure Local DR and Local CR is tally. (Refer Pic2) - - ![2](../../../static/img/general-ledger/trial-balance-not-tally/2.png) - -## Not tally due to current transaction - -:::tip -If above 2 step is tally, which mean is current transaction cause not tally, kindly follow below step -::: - -1. GL > Print Journal of Transaction Listing > Choose the date period which is not tally - -2. Click on Preview - -3. Select report name : GL Journal-of-Transaction-Imbalance-Document - -4. The list show which mean is the document cause not tally. - -5. May upload the backup file to us and mention the problem. diff --git a/docs/faq/general-ledger/witholding-tax.md b/docs/faq/general-ledger/witholding-tax.md deleted file mode 100644 index 708e19db..00000000 --- a/docs/faq/general-ledger/witholding-tax.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Witholding Tax -description: A guide to witholding tax for SQL Account -slug: /faq/general-ledger/witholding-tax -tags: ["SQL Account", "FAQ", "General Ledger"] ---- - - -## Withholding Tax Account - -Go to **GL > Maintain Account** - -| GL Account | Description | Remark | -|------------|----------------------|-------------------------| -|460-XXX |Witholding Tax Payable|Under Current Liabilities| - -:::note -GL Account not compulsory to be the same. -::: - -## Maintain Withholding Tax - -Go to **Tools > Maintain Withholding Tax** - -1. Click New. - -2. Input the following data: - - | Field Name | Explanation | Remark | - |----------------|------------------------------------------|--------------------------------------------------------------------------------------------| - |Code |Set a code |WTH-TAX15 | - |Description |Describe the meaning/usage of this code |Withholding Tax 15% | - |Tax Rate |Witholding Tax Rate |15% | - |Tax Account(DR) |Expenses Account |**<<Follow document accounts>>** if leave blank here | - |Tax Account(CR) |Set to **Withholding Tax Payable** account|At GL\Maintain Account, create the Withholding Tax Payable account under Current Liabilities| - - ![1](../../../static/img/general-ledger/witholding-tax/1.png) - - :::note - Tax Account (DR) leave blank - ::: - -3. Click on Save. - -## Withholding Tax Purchase Entry - -Available in multiple menus: - -|Purchase|Supplier| -|---|---| -|Purchase Invoice|Supplier Invoice| -|Cash Purchase|Supplier Invoice| -|Purchase Debit Note|Supplier Debit Note| -|Purchase Returned| Supplier Credit Note| - -1. In **Purchase Invoice**, insert the following columns: - - - WH Local Tax Amt - - WH Tax - - WH Tax Rate - - ![2](../../../static/img/general-ledger/witholding-tax/2.png) - -2. Select the Withholding Tax Code in **WH Tax** column. - - ![3](../../../static/img/general-ledger/witholding-tax/3.png) - -3. System will auto post the withholding tax double entry. Press **CTRL + O** to check the double entry. - - | GL Description | Local DR | Local CR | - |--------------------------------------------------------|-----------|------------| - |Expenses Account (follow the document detail GL Account)|XXX | | - |Withholding Tax Payable | | XXX | - - ![4](../../../static/img/general-ledger/witholding-tax/4.png) - -:::note -Withholding tax amount will not add into the purchase invoice amount. -::: - -## Payment of Withholding Tax - -1. Go to **GL > Cash Book Entry..** - -2. Create new PV. - -3. Enter Payee name. - -4. Select bank account to pay. - -5. In detail grid, select the GL Account **(Withholding Tax Payable)**. - -6. Enter the withholding tax amount to be paid. Save it. - - ![5](../../../static/img/general-ledger/witholding-tax/5.png) - -7. You can check the ledger report for Withholding Tax Payable outstanding balance diff --git a/docs/faq/grid-layout/_category_.json b/docs/faq/grid-layout/_category_.json deleted file mode 100644 index 1ade4393..00000000 --- a/docs/faq/grid-layout/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Grid Layout", - "position": 20, - "link": { - "type": "generated-index", - "description": "Grid Layout for SQL Account" - } -} \ No newline at end of file diff --git a/docs/faq/grid-layout/clear-sorting.md b/docs/faq/grid-layout/clear-sorting.md deleted file mode 100644 index 042718fe..00000000 --- a/docs/faq/grid-layout/clear-sorting.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Clear Sorting -description: Clear sorting on grid view -slug: /faq/grid-layout/clear-sorting -tags: ["SQL Account", "FAQ", "Grid Layout"] ---- - -## Scenario - -I have selected "Group by Document No" in Sales Profit and Loss by Document. However, when previewing the report, the same document number is split. How can I resolve this issue, as shown in the screenshots below? - -![1](../../../static/img/grid-layout/clear-sorting/1.png) - -![2](../../../static/img/grid-layout/clear-sorting/2.png) - -## Steps & Instruction - -1. Right click on any grid column. - -2. From the pop-up menu, click on Clear Sorting. - - ![3](../../../static/img/grid-layout/clear-sorting/3.png) - -3. All the grid columns will be **clear the sorting** and follow the Group By command. - - ![4](../../../static/img/grid-layout/clear-sorting/4.png) - -4. Preview the report. The same document numbers will now be grouped together. - - ![5](../../../static/img/grid-layout/clear-sorting/5.png) diff --git a/docs/faq/grid-layout/rename-header.md b/docs/faq/grid-layout/rename-header.md deleted file mode 100644 index f4e70cde..00000000 --- a/docs/faq/grid-layout/rename-header.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Rename Grid Header -description: Rename grid header caption -slug: /faq/grid-layout/rename-header -tags: ["SQL Account", "FAQ", "Grid Layout"] ---- - -## Steps & Instruction - - 1. Right click on any grid header. From the small menu, select **Properties**. - - ![1](../../../static/img/grid-layout/rename-header/1.png) - - 2. Look for the column and change the caption. Click Ok to confirm. - - ![2](../../../static/img/grid-layout/rename-header/2.png) - - 3. Original column name “Ref 1” has been changed to “Cust PO”. - - ![3](../../../static/img/grid-layout/rename-header/3.png) diff --git a/docs/faq/grid-layout/reset-layout.md b/docs/faq/grid-layout/reset-layout.md deleted file mode 100644 index 1a9caa95..00000000 --- a/docs/faq/grid-layout/reset-layout.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Reset/Delete Layout -description: Reset/delete layout for grid view -slug: /faq/grid-layout/reset-layout -tags: ["SQL Account", "FAQ", "Grid Layout"] ---- - -## Step to reset layout - -![1](../../../static/img/grid-layout/reset-layout/1.png) - -1. Hover over **Item code** and **right click** - -2. Select **Grid Layout** - -3. Click on **Load Layout** - - ![2](../../../static/img/grid-layout/reset-layout/2.png) - -4. Press **Reset Layout** - -## Step to delete Existing Layout - -![3](../../../static/img/grid-layout/reset-layout/3.png) - -1. Hover over **item code** and right click - -2. Select **Grid Layout** - -3. Click on **Manage Layout** - -![4](../../../static/img/grid-layout/reset-layout/4.png) - -If your screen looks like the one above , **select the layout** | press **DELETE** | **SAVE** diff --git a/docs/faq/grid-layout/save-manage.md b/docs/faq/grid-layout/save-manage.md deleted file mode 100644 index 5b09df59..00000000 --- a/docs/faq/grid-layout/save-manage.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Save and Manage Layout -description: Save and manage grid view layout -slug: /faq/grid-layout/save-manage -tags: ["SQL Account", "FAQ", "Grid Layout"] ---- - -## How to call out hidden field? - -1. Click on the button from left side of Item Code , checked all field you wish to show out - - ![1](../../../static/img/grid-layout/save-manage-layout/1.png) - -2. **Right click on the Grid** , Eg: point on wording “Description” and right click | **Grid Layout** | **Save Layout** - - ![2](../../../static/img/grid-layout/save-manage-layout/2.png) - -3. Enter a Layout Name , and checked on “**Save as Default Layout**” if you wish to set this as your Default Layout | **Save** - - ![3](../../../static/img/grid-layout/save-manage-layout/3.png) - -## How to assign this layout to others users? - -1. After you had save your layout, **Right click on the Grid** , Eg : point on wording “Description” and right click | **Grid Layout** | **Manage Layout** - - ![4](../../../static/img/grid-layout/save-manage-layout/4.png) - -2. You can assign your layout either by users or by groups , Let’s said by Users - - ![5](../../../static/img/grid-layout/save-manage-layout/5.png) - -3. Click on the arrow down key from the users name and select & SAVE. - - ![6](../../../static/img/grid-layout/save-manage-layout/6.png) - - :::note - - **Default** : Make this layout default - - **−** : Empty it without setting any layout for this user - - **Deny** : To hide this layout , so when this user try to Load Layout unable to see this layout . - - ::: - -## How to Reset Layout? - -1. Right click on the Grid , Eg : point on wording “Description” and right click | **Grid Layout** | **Load Layout** - - ![7](../../../static/img/grid-layout/save-manage-layout/7.png) - -2. Click on **Reset Layout** - - ![8](../../../static/img/grid-layout/save-manage-layout/8.png) - -## How to Delete Layout? - -1. **Right click on the Grid** , Eg : point on wording “Description” and right click | **Grid Layout** | **Manage Layout** - - ![9](../../../static/img/grid-layout/save-manage-layout/9.png) - -2. **Highlighted** on the Layout Name you wish to delete | press on the **Minus Icon** | **SAVE** - - ![10](../../../static/img/grid-layout/save-manage-layout/10.png) - -## How to disable users access right to go field chooser and customize layout ? - -1. Go **Tools** | **Maintain User** - - ![11](../../../static/img/grid-layout/save-manage-layout/11.png) - -2. **Highlighted** on the user name and press on **EDIT** - - ![12](../../../static/img/grid-layout/save-manage-layout/12.png) - -3. Click on **More** | **Access Control** - - ![13](../../../static/img/grid-layout/save-manage-layout/13.png) - -4. Go to Group : Misc | unchecked on Customize grid (field chooser) & Manage Grid Layout | SAVE - - ![14](../../../static/img/grid-layout/save-manage-layout/14.png) diff --git a/docs/faq/pos.md b/docs/faq/pos.md deleted file mode 100644 index 86147a27..00000000 --- a/docs/faq/pos.md +++ /dev/null @@ -1,317 +0,0 @@ ---- -title: SQL POS -description: SQL POS frequently-asked questions -slug: /faq/sql-pos -tags: ["SQL Account", "FAQ", "POS"] ---- - -List of frequently-asked questions. - -### Error When install SQL POS : Must specify additional Parameter - -![1](../../static/img/pos/qna/1.png) - -**Solution:** - - - **If New Installation:** - -![2](../../static/img/pos/qna/2.png) - - ``` - 1. Delete all the Item from C:\itUnicode - 2. Control Panel | Uninstall SQL-POS - ``` - -- **If already have transactions:** - - ![3](../../static/img/pos/qna/3.png) - - 1. Backup SQL POS first - - 2. Delete all the Item from C:\itUnicode - - 3. Control Panel | Uninstall SQL-POS - -### Use Offline Mode - -- Unable to capture live Master Transaction from SQL Acc Master - -### SQL POS is only Standalone PC - -- The reason due to when Database corrupt, it won’t corrupt all, so preferable - Standalone - -### Even though I set to Each Bill(Real Time) still unable to get the UTD QTY in SQL POS? - -- In Setting - > SQL Account -> Need to ticked Run This POS When call from - SQLAcc - - ![4](../../static/img/pos/qna/4.png) - -### Why keep prompt me Network failed? - -1. Make sure have install Firebird - -2. SQL Account have to Set to **Firebird Server** if setting ticked **Run this POS when call from SQLAcc** - -### Added Stock Item Code with Chinese word, prompt me unable to find this Product Code ??? - -- SQL POS unable to support Unicode on Code, may key in the Chinese Word in Item Description -- Code Only Alphanumeric - -### Previously using IT Uni POS, how should I integrate in SQL? - -#### .1 SQL POS 316 -> FoxPro - -1. In SQL Account -> Click on SQL POS(to generate New POS Database) - -2. In SQLPOS-> Setting -> System Tab -> Tools -> Select UniPos Migration -> - - ![5](../../static/img/pos/qna/5.png) - - 1. Import From : C:\user\public\itposdata or C:\user\public\unipos - - 2. Ticked all the Setting - - 3. Click on Migrate - -#### .2 SQL POS 333 - > Firebird Database - -In SQL POS System -> Double click SQL POS -> Logon Screen -> Right Click -Restore Database - -### Print Receipt Chinese word show in ??? - -- Reason due to Non-Unicode program set to Chinese - -Solution : - -- Control Panel -> Regional -> Language for Non Unicode -> Set to English (United States) - - ![6](../../static/img/pos/qna/6.png) - -- Font change to Arial - -1. Click on Design report - - ![7](../../static/img/pos/qna/7.png) - -2. Click on Modify - - ![8](../../static/img/pos/qna/8.png) - -3. Click on Description Text Object -> Menu select Format -> Font - - ![9](../../static/img/pos/qna/9.png) - -4. Change to Arial - - ![10](../../static/img/pos/qna/10.png) - -5. Save the report - -### Error Message : Warning : Assigned Printer does not exist : Print to PDF (Mac Desktop) - - ![11](../../static/img/pos/qna/11.png) - -Solution: - -1. **Testing Database only** - Delete whole ITUnicode database -2. **Real Database** – May request backup from user upload to us to check (suspect file corrupted) - -### Unable to capture correct price Tag Price - -Assigned price tag for item A and Item B, how come only first Item A will capture price tag -price, but second item B ref price? - -Solution : - -Setting -> SQL Account -> Ticked Unlink SQL Accounting when available - -![12](../../static/img/pos/qna/12.png) - -### Error Message : Failed to Set - -![13](../../static/img/pos/qna/13.png) - -**Solution :** - -- Make sure install SQL With 759 & above - -### What is Price Set in Stock Item? - -- Multiple price set in Maintain Stock Item, user allow to set multiple price with comma. - -- Example : - - Price 1 : RM 10. - - Price 2 : RM 15. - - Price 3 : RM 20. - - ![14](../../static/img/pos/qna/14.png) - -- When select itemcode RED BEAN 500G, auto prompt the price for user to select - - ![15](../../static/img/pos/qna/15.png) - -### What to do if I want to print Barcode Label with Chinese Company Name? - -- Save as JPEG, then load the picture into Foxit Design ~ - -### Error Message : File in use when design barcode report - -![16](../../static/img/pos/qna/16.png) - -- Try Exit the program and logon -- Delete this report and design again - -### Backup Error : C:\itUnicode\SQL-POS\SQL-POS-0001.fdb could not be read - -- Is due to IT Sync is running behind, may shut down IT Sync before Backup - -### Close Counter Collect Payment Type is not match with Payment Method select in Bills - -![17](../../static/img/pos/qna/17.png) - -- Collect Payment Summary Payment Type is group by Account Code, may check - whether the payment method is using same account code ~ - -:::info -Step to check Payment Method post to what Account - -- Setting -> POS Screen -> Payment Method - > Double click on the Payment Name - -::: - -### Why in Setting Receipt & License Retrieve From SQL button is missing - -![18](../../static/img/pos/qna/18.png) - -- Once License Registered, the button will disable ~ - -### Same receipt will auto cut to few pages - -![19](../../static/img/pos/qna/19.png) - -**Solution :** - -- Upgrade to latest version of 334, some of the printer after design, paper size changed incorrectly, need to Tweak it again - -**Step to Tweak :** - -- In Print Receipt -> Follow below step - -![20](../../static/img/pos/qna/20.png) - -### Unable to key In Daily Cash Sales No with message : The Control is Read Only - -![21](../../static/img/pos/qna/21.png) - -**Answer :** - -- Control by license, need email to request new license key, mean Counter ID and CashSales number prefix based on license. - -### Receipt format unable to show Chinese word - -1. Menu Screen -> Select **Print Receipt** - -2. Click on **Modify** - > - -3. Select the **Report Name** - > Click on **Modify** - -4. Double click on the object to show in Chinese - - ![22](../../static/img/pos/qna/22.png) - -:::caution -After Fill in \ , remember save the report. -::: - -### Proper Step to set Branch SQL POS (Error Failed to Set ) - -1. Configure and make sure SQL able to test successful - -2. Add Port 3050 - -3. In SQL POS : - -![23](../../static/img/pos/qna/23.png) - -- Put in DNS Number -- Ping result lost 0 = 0% -- Unticked **DisableChkPing** - -### Fail to assign Printer - -![24](../../static/img/pos/qna/24.png) - -**Solution :** - -1. Check in **Setting** - > **Device** - > Receipt Printer -> assigned valid Receipt Printer - **A4 Printer** Normally use EPSON LQ-310 or other laser printer - > Assigned - valid Laser Printer - -2. Check Report Format may assigned to valid printer - -3. Window XP -> Upgrade to Window 7 & Above - -### How to disable preview receipt when payment done - -![25](../../static/img/pos/qna/25.png) - -Solution : - -- SQL POS **Setting** - > **Receipt & License** Tab -> **No Copy of Receipt** set to **0** - -### What to do if disallow User to return stock? - -Maintain User -> Refund Item -> - -![26](../../static/img/pos/qna/26.png) - -:::note -Set to Yes, user allow to return stock with enter - 1 - -Set to No, user disallow to save negative stock -::: - -### How to un-closed counter? - -➔ Close Counter -> Right click un-closed counter - -### Unable to Sent Email from Gmail : Fail to sent email - -:::info -*(Menu -> Export Cash Sales -> Email Button -> Setting Email Server Button)* -::: - -![27](../../static/img/pos/qna/27.png) - -**Solution :** - -1. Follow this [link](https://myaccount.google.com/security) - -2. Click on **Less Secure App Access** - - ![28](../../static/img/pos/qna/28.png) - -3. Press the scrolling bar to Turn on - - ![29](../../static/img/pos/qna/29.png) - -### Post to SQL Account raise Error: Failed to Psot Payment of 02/6/2020 OLED IDispatch exception code 0 from : knockoff amount (0.00) must not exceed outstanding amount (321.6) - -![30](../../static/img/pos/qna/30.png) - -**Solution :** - -1. Make sure SQL Pos version 340 & Above - -2. SQL POS Setting -> SQL Account -> Ticked **Direct write to SQLAcc** & try to post again - -## SQL POS F&B - -### Error Message : Counter is closed, wait for Main Counter to open - -![31](../../static/img/pos/qna/31.png) - -- This error message mean when there have multiple POS link together, make sure Main Counter have to Open Counter first. diff --git a/docs/faq/report/_category_.json b/docs/faq/report/_category_.json deleted file mode 100644 index 4fdda790..00000000 --- a/docs/faq/report/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Report", - "position": 12, - "link": { - "type": "generated-index", - "description": "Report operations" - } -} \ No newline at end of file diff --git a/docs/faq/report/fastreport/_category_.json b/docs/faq/report/fastreport/_category_.json deleted file mode 100644 index 45fa6bee..00000000 --- a/docs/faq/report/fastreport/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Fast Report", - "link": { - "type": "generated-index", - "description": "Report operations" - } -} \ No newline at end of file diff --git a/docs/faq/report/fastreport/basicGuide.md b/docs/faq/report/fastreport/basicGuide.md deleted file mode 100644 index ef8711ac..00000000 --- a/docs/faq/report/fastreport/basicGuide.md +++ /dev/null @@ -1,498 +0,0 @@ ---- -sidebar_position: 1 -id: report-fastreport-basicGuide -title: Basic Guide -description: Basic Guide to get start with Fast Report -slug: /faq/report/fastreport/basicGuide -tags: ["Fast Report", "Basic Guide"] ---- - -## Understand on Toolbar - -1. **Report Object** - - ![1](../../../../static/img/report/fastReport-basicGuide/1.png) - -2. **Align Toolbar** - - ![2](../../../../static/img/report/fastReport-basicGuide/2.png) - -## Sales Inovice Bands - -1. Understand on Bands - - 1. Group Header - - Grouping Header - - To Print on every page, right click on ***Group Header Band***, select ***reprint on new page*** - - 2. Master Data - - The ***Main*** Dataset of the report - - Normally Bind to Main Dataset - - Each Page allows to have 1 ***Main Dataset Only*** - - 3. Detail Data - - To display ***all Item Details*** - - 4. Group Footer - - Grouping Footer - - Display on ***Last Page*** only - - 5. Page Footer - - Display on ***Every Pages*** - -2. Sample Layout in Design Mode - - ![3](../../../../static/img/report/fastReport-basicGuide/3.png) - -3. Sample Layout on Preview Mode - - ![4](../../../../static/img/report/fastReport-basicGuide/4.png) - -4. Print Position - - - Group Footer content will be printed at the pixel value input. - - Higher Value = Higher Footer - - without setting with print position, the group footer will be printed after the document - detail records. - - Example Source Code: - - ```pascal - if Engine.FreeSpace < (GroupFooter1.Height + PageFooter1.Height + 30) then Engine.NewPage; - - Engine.CurY := Engine.PageHeight - GroupFooter1.Height - PageFooter1.Height - **60** ; - ``` - - :::info[note] - **60** -> Higher Value = Higher Footer - ::: - - 1. How to do the Print Position setting in Report? - - 1. Click on ***Group Footer*** -> Click on ***Properties*** -> ***Events*** Tab -> Double Click on ***OnbeforePrint*** event name - - ![5](../../../../static/img/report/fastReport-basicGuide/5.png) - - 2. Adjust the value - - ![6](../../../../static/img/report/fastReport-basicGuide/6.png) - -5. Stop Position vs Print Count - - | Stop Position | Print Count | - | :---: | :----: | - | Details will stop at the input value| Details will stop by number of records inputs| - | Recommend | Not recommend if using More Description | - | Value in Pixel | Number of Records | - - 1. How to do the Stop Position in Report? - - 1. Right click ***DetailData1*** -> Click on ***Events*** Tab -> Double click ***onAfterCalcHeight*** name - - ![7](../../../../static/img/report/fastReport-basicGuide/7.png) - - 2. Setting the stop position - - ![8](../../../../static/img/report/fastReport-basicGuide/8.png) - - :::tip[SMALL TIPS] - 1. Set Either Print Count or Stop Position - 2. use // to disable the command - 3. When you set both Print Count and Stop Position, system will capture Print Count. - ::: - - 3. Sample on Print Position / Stop Position - - ![9](../../../../static/img/report/fastReport-basicGuide/9.png) - -## How to design Simple Sales Invoice? - -- Preview Invoice -- Click on Report Name to enter to Design Mode - -1. **Add PICTURE** - - 1. Click on Picture Object - - ![10](../../../../static/img/report/fastReport-basicGuide/10.png) - - 2. Place on Report Page - - ![11](../../../../static/img/report/fastReport-basicGuide/11.png) - - - **Fix Picture** - - 1. Click on Load - - ![12](../../../../static/img/report/fastReport-basicGuide/12.png) - - 2. Select the Picture on your local drive - - 3. Click on ![tick](../../../../static/img/report/fastReport-basicGuide/tick.png) - - ![13](../../../../static/img/report/fastReport-basicGuide/13.png) - - 4. Adjust to the desire size - - ![14](../../../../static/img/report/fastReport-basicGuide/14.png) - - - **Capture Picture from Report Dataset** - - ![15](../../../../static/img/report/fastReport-basicGuide/15.png) - -2. **Text Memo** - - **Add Customer Email Address** - - 1. Click on Text Memo - - ![16](../../../../static/img/report/fastReport-basicGuide/16.png) - - 2. Place on Report Page - - 3. Enter Text : Email - - ![17](../../../../static/img/report/fastReport-basicGuide/17.png) - - 4. Repeat Step i & ii - - 5. Select Document_CompanyBranch -> Email Expression - - ![18](../../../../static/img/report/fastReport-basicGuide/18.png) - -3. **Rich Text Object** - - **Add Note** - - 1. Click on RichText Object - - ![19](../../../../static/img/report/fastReport-basicGuide/19.png) - - 2. Place on Report Page - - 3. Select Main -> Note - - ![20](../../../../static/img/report/fastReport-basicGuide/20.png) - -4. **System Text** - - - **Add Sum Qty** - - 1. Click on System Text Object - - ![21](../../../../static/img/report/fastReport-basicGuide/21.png) - - 2. Place on the Report Page - - 3. Select Aggregate value - - ![22](../../../../static/img/report/fastReport-basicGuide/22.png) - -5. **Draw Line** - - 1. Click on Line - - ![23](../../../../static/img/report/fastReport-basicGuide/23.png) - - 2. Place on the Report Page - - 3. Draw a line - - ![24](../../../../static/img/report/fastReport-basicGuide/24.png) - -6. **Center Horizontally in Band** - - - Display the object in center horizontal - - 1. Click on Object you want to show in center horizontal - - 2. Click on Center Horizontally In Band - - ![25](../../../../static/img/report/fastReport-basicGuide/25.png) - -7. **Align Left / Middle / Right** - - 1. Click on the multiple Object to Align as same alignment. System will follow the first object as alignment - - ![26](../../../../static/img/report/fastReport-basicGuide/26.png) - -8. **Save the File** - - 1. File -> Save As -> Enter Report Name -> Save - - 2. Preview and see the result - - Result: - - ![27](../../../../static/img/report/fastReport-basicGuide/27.png) - -## How to create the Subreport in Report? - -- Preview Invoice -- Click on ***Report Name*** to enter to Design Mode - - ![28](../../../../static/img/report/fastReport-basicGuide/28.png) - - 1. Click on **Subreport Object** - - ![29](../../../../static/img/report/fastReport-basicGuide/29.png) - - 1. Place on Report Page you want to show. - - ![30](../../../../static/img/report/fastReport-basicGuide/30.png) - - 2. System will prompt a new blank page for Subreport - - ![31](../../../../static/img/report/fastReport-basicGuide/31.png) - - 3. Click on **Insert Band** to design the layout or insert the data - - ![32](../../../../static/img/report/fastReport-basicGuide/32.png) - - *\*\*May refer 2.1 Understand Bands at Page 4 on what band to use* - -## Check Box - -1. **Simple CheckBox** - - 1. Click on CheckBox object - - ![33](../../../../static/img/report/fastReport-basicGuide/33.png) - - 2. Place on the place you want to show. - - ![34](../../../../static/img/report/fastReport-basicGuide/34.png) - - 3. Press on the button - - ![35](../../../../static/img/report/fastReport-basicGuide/35.png) - - 4. Select the frame design - - ![36](../../../../static/img/report/fastReport-basicGuide/36.png) - - 5. Change to False - - ![37](../../../../static/img/report/fastReport-basicGuide/37.png) - - 6. Save the File - 1. File -> Save As -> Enter Report Name -> Save - 2. Preview and see the result - - Result : - - ![38](../../../../static/img/report/fastReport-basicGuide/38.png) - -2. **Query to show Check Box either True to False** - - 1. Click on CheckBox | Double Click OnBeforePrint - - ![39](../../../../static/img/report/fastReport-basicGuide/39.png) - - 2. Place a Query below - - ![40](../../../../static/img/report/fastReport-basicGuide/40.png) - - Query: - - ```pascal - procedure Check/box1OnBeforePRint(Sender: TfrxComponent); - begin - if (Main."UDF_updated") = 'T' then - checkbox1.checked := true - else - checkbox1.checked := false; - end; - ``` - -## How to do Report Watermark? - -1. Insert Band | Select Overlay - - ![41](../../../../static/img/report/fastReport-basicGuide/41.png) - -2. Insert Picture / Text to load in the water mark - - ![42](../../../../static/img/report/fastReport-basicGuide/42.png) - -3. Overlay size can drag the same size as A4/Letter, and place the watermark on the position you want to show. - - ![43](../../../../static/img/report/fastReport-basicGuide/43.png) - -4. File | Save As: Enter report name - -5. Preview and see the Result : - - ![44](../../../../static/img/report/fastReport-basicGuide/44.png) - -## Frequently Ask Question (FAQ) - -### 1. Unit price is 0, display as FOC - -In Memo, enter following syntax : - -```pascal -[FormatFloat(',0.00;-,0.00;FOC ',)] -``` - -![45](../../../../static/img/report/fastReport-basicGuide/45.png) - -### 2. Document Currency Description change Cents to Sens - -Syntax: - -```pascal -[Document_Currency."Description"] : [StringReplace(CurrencyToLangWord(,), 'CENTS', 'SENS', TRUE)] -``` - -![46](../../../../static/img/report/fastReport-basicGuide/46.png) - -### 3. More Description convert RichTextToPlainText - -Syntax : - -```pascal -[RichTextToPlaintext()] -``` - -![47](../../../../static/img/report/fastReport-basicGuide/47.png) - -![48](../../../../static/img/report/fastReport-basicGuide/48.png) - -### 4. How to change report paper size? - -File -> Page Setting -> - -![49](../../../../static/img/report/fastReport-basicGuide/49.png) - -### 5. if Qty > 10, text color in red and in bold? - -1. Double Click on Memo - -2. Click on **Highlight Tab** - -3. Click on **Add Button** - -4. Expression value > 10 - - ![50](../../../../static/img/report/fastReport-basicGuide/50.png) - -5. Click on Font - - Can set for Font Type, Font Style, Size, Color or Effects - - ![51](../../../../static/img/report/fastReport-basicGuide/51.png) - -6. Press **OK** - -7. Right Click on Memo, **Ticked Allow Expression** - -**Result** : - -![52](../../../../static/img/report/fastReport-basicGuide/52.png) - -### 6. Why in Report I have placed at the position I want, but when preview it will show at bottom? - -Right click on Memo, **unticked Shift** and **Unticked Shift when Overlapped** - -### 7. Export to PDF Logo is blur - -![53](../../../../static/img/report/fastReport-basicGuide/53.png) - -### 8. How to capture remark1 as url path? - -In Memo properties : - -Hyperlink Expression added in the Data Field Name - -![54](../../../../static/img/report/fastReport-basicGuide/54.png) - -Result : - -![55](../../../../static/img/report/fastReport-basicGuide/55.png) - -### 9. Payslip to show AL or MC Only - -1. Click on **SubReport3** - -2. Right click on **Leave MasterData Band** - ![56](../../../../static/img/report/fastReport-basicGuide/56.png) - -3. Click on Filter button - -4. Enter the expression : - - ```pascal - ( ='AL') OR ( ='MC') - ``` - -5. Press OK - -6. Press OK - - ![57](../../../../static/img/report/fastReport-basicGuide/57.png) - -### 10. How to get Net Unit Price - - 1. Click on **Memo Text** - - 2. Place on **Document Detail Band** - - 3. Drag data field from right to left box : - - ```pascal - [ / ] - ``` - - 4. Press OK - - 5. Adjust the position - - 6. Preview and see the result - - ![58](../../../../static/img/report/fastReport-basicGuide/58.png) - -### 11. UOM = UNIT, Qty display without Decimal Point, else with 2 Decimal Point - - 1. Click On Memo Text - - 2. Copy the below syntax and Paste into Memo: - - ```pascal - [IIF( = 'UNIT'>, - FormatFloat('#,0;-#,0 ', ) , - FormatFloat('#,0.00;-#,0.00 ', ))] - ``` - - ![59](../../../../static/img/report/fastReport-basicGuide/59.png) - - 3. Press **OK** - - 4. Result After Preview : - - ![60](../../../../static/img/report/fastReport-basicGuide/60.png) - -### 12. How to Get Supplier Bank in Payment Voucher? - - 1. Click on Memo ![A](../../../../static/img/report/fastReport-basicGuide/A.png) - - 2. Paste this syntax inside Memo - - ```pascal - [)] - ``` - - ![61](../../../../static/img/report/fastReport-basicGuide/61.png) - -### 13. How to change the Amount in Word to First Character to Upper Case only? - -Can use function NameCase - -![62](../../../../static/img/report/fastReport-basicGuide/62.png) - -Before : - -![63](../../../../static/img/report/fastReport-basicGuide/63.png) - -After : - -![64](../../../../static/img/report/fastReport-basicGuide/64.png) diff --git a/docs/faq/report/fastreport/customization.md b/docs/faq/report/fastreport/customization.md deleted file mode 100644 index 22d27a6e..00000000 --- a/docs/faq/report/fastreport/customization.md +++ /dev/null @@ -1,372 +0,0 @@ ---- -id: report-fastreport-customization -title: Customization -description: Fast Report Customization -slug: /faq/report/fastreport/customization -tags: ["Fast Report", "Customization"] ---- - -## Batch Email with PDF Filename & Current Date - -- This guide will teach you on how to capture current date on your export PDF File Name. - -1. In QT Template DocNo = EMAIL, PDF File Name may set in **Remark 2** - - ![1](../../../../static/img/report/fastReport-batchEmailCurDate/1.png) - - :::info[note] - Remark 2 must fill in - ::: - -2. Preview your report | Click on **Report Name** - - ![2](../../../../static/img/report/fastReport-batchEmailCurDate/2.png) - -3. Click on **Code Tab** | - - ![3](../../../../static/img/report/fastReport-batchEmailCurDate/3.png) - -```pascal -procedure OnGetEmailSettings(EmailSettings: TStrings); -var - vEmail, vName: Variant; - lDate : String; -begin - lDate := (formatDateTime('dd.mm.yyyy',Date)); - - GetEMailTpl; - vEmail := Trim(); - vName := Trim(); - - if (vName <> '' ) and (vEmail <> '') then begin - EmailSettings.Values['Recipients'] := vEmail; - EmailSettings.Values['CC'] := ; - EmailSettings.Values['BCC'] := ; - EmailSettings.Values['Subject'] := GetFldInfo(); - EmailSettings.Values['Body'] := GetFldInfo(RichTextToPlainText()); - - if Trim() <> '' then - EmailSettings.Values['FileName'] := lDate + ' ' + GetFldInfo(); - if Trim(GetPassword) <> '' then - EmailSettings.Values['PDFPassword'] := GetPassword; - end; - - EmailSettings.Values['ID'] := vName; -end; -``` - -## Display More Description in Multiple Page - -- If More Description more than 1 page, first page will show blank. - -- Example Problematic Report : - - ![1](../../../../static/img/report/fastReport-MoreDescMultipage/1.png) - -**Solution:** - -1. Click on ***Blue Color Report Name*** in bottom. - - 1. Click on **DetailData1** - - 2. Click on **Events** - - 3. Double Click on **OnAfterCalc Script** - - ![2](../../../../static/img/report/fastReport-MoreDescMultipage/2.png) - - 4. The system will redirect to Code Page, then disable the script by adding the symbol '**//**' infront of the script. - - ![3](../../../../static/img/report/fastReport-MoreDescMultipage/3.png) - - 5. Go back to **Page1 Tab** - - ![4](../../../../static/img/report/fastReport-MoreDescMultipage/4.png) - - 6. Right Click on **DetailData1** | Tick **Allow Split**. - - ![5](../../../../static/img/report/fastReport-MoreDescMultipage/5.png) - - 7. Right Click on **Qty DBText** | Untick **Auto Width**. - - ![6](../../../../static/img/report/fastReport-MoreDescMultipage/6.png) - - 8. Do the same Step 7 for **UnitPrice**, **SubTotal**, **Total Exc GST**, **GST Amt**, **Total Inc GST** and **Tax** - - ![7](../../../../static/img/report/fastReport-MoreDescMultipage/7.png) - - 9. Click on **Group Footer1** - - 10. Click on **Events** - - 11. Double Click on **OnBeforePrint**. - - ![8](../../../../static/img/report/fastReport-MoreDescMultipage/8.png) - - 12. In Code Page, Remove the "**– 60**" from the code - - **Before:** - - ![9](../../../../static/img/report/fastReport-MoreDescMultipage/9.png) - - **After Amend:** - - ![10](../../../../static/img/report/fastReport-MoreDescMultipage/10.png) - - 13. Go Back to **Page1 Tab** | make **Page footer1** closer. - - ![11](../../../../static/img/report/fastReport-MoreDescMultipage/11.png) - - 14. Go to File | Page Setting | Bottom set to 2.5 - - ![12](../../../../static/img/report/fastReport-MoreDescMultipage/12.png) - - 15. File | Save As | Input New Report Name - - 16. Preview again - - 17. Problem Solved - - ![13](../../../../static/img/report/fastReport-MoreDescMultipage/13.png) - -## Display Text Object in Last Page's Footer only - -1. Click on the object you want to show only in Last Page - - ![1](../../../../static/img/report/fastReport-footerTxtLstPg/1.png) - - 1. Click on your Object - 2. Click on Events Tab - 3. Click on OnbeforePrint | Double Click it - 4. Place this query inside the Code page. - - ![2](../../../../static/img/report/fastReport-footerTxtLstPg/2.png) - - Code: - - ```pascal - if = then - shape3.visible := true - else - shape3.Visible := false; - ``` - -## Fix Report Tax Rate show A instead of 6% - -1. Preview the Report format, Click on blue color link and enter into Report Design. (Refer **Pic1**) - - **Pic1:** - - ![14](../../../../static/img/report/fastReport-taxShwA/14.png) - -2. Click on Code Tab(Refer **Pic2**) - - **Pic2:** - - ![15](../../../../static/img/report/fastReport-taxShwA/15.png) - -3. In Code page insert TaxRate (Refer **Pic3**) - - **Pic3:** - - ![16](../../../../static/img/report/fastReport-taxShwA/16.png) - - **Full Query :** - - ```pascal - SQL := 'SELECT Code, TaxRate FROM Tax ' + - 'WHERE ISACTIVE=1 ' + - 'AND (TAXTYPE=0X00010000+0X00020000 OR ' + - '((TAXTYPE / 0X00020000 / 2) - (TAXTYPE / >0X00020000 / 2.0)) <> 0) ' + - ' ORDER BY CODE'; - AddDataSet('GSTTax', ['Code', 'TaxRate']) - .GetDBData(SQL) - .LinkTo('GSTAmt', 'Tax', 'Code'); - ``` - -4. Click on SubReport1 Tab | Click on the Text Field (Refer **Pic4**) - - **Pic4:** - - ![17](../../../../static/img/report/fastReport-taxShwA/17.png) - -5. Change the Query as below | Press OK (**Pic5**) - - **Pic5:** - - ![18](../../../../static/img/report/fastReport-taxShwA/18.png) - -6. File | Save - -7. Close the Fast Report - -8. Preview the same format again. - -## Hide Zero Value - -1. Method 1 - - 1. Right Click on the Text | Select Hide Zeros - - 2. Tick Allow Expressions - - ![1](../../../../static/img/report/fastReport-hideZero/1.png) - - 3. Try save the report and preview the result. - -2. Method 2 (**Only use this if method 1 doesn't work**) - - 1. Double click on Text - - 2. Click on Highlight Tab - - 3. Press Add - - ![2](../../../../static/img/report/fastReport-hideZero/2.png) - - 4. Press ok - - 5. Untick Visible - - ![3](../../../../static/img/report/fastReport-hideZero/3.png) - - 6. File | Save as | Enter Report name - 7. Preview and see the result - -## Ledger Report Start New Page for New Group - -**Before Amend :** - -![1](../../../../static/img/report/fastReport-LRptNewGrpPg/1.png) - -1. **Right Click** on **Group Header 1**, Select **Start New Page** - - ![2](../../../../static/img/report/fastReport-LRptNewGrpPg/2.png) - -2. File | Save as | Enter New Report Name - -3. Preview - - ![3](../../../../static/img/report/fastReport-LRptNewGrpPg/3.png) - -## Print Date Time - -1. Click on Text Object - - ![A](../../../../static/img/report/fastReport-prtDTime/A.png) - -2. Enter **[Date] [Time]** - -3. File | Save as Enter New Report Name - - ![1](../../../../static/img/report/fastReport-prtDTime/1.png) - -4. Preview - - ![2](../../../../static/img/report/fastReport-prtDTime/2.png) - -## Report Print Count - -**Report Before Set Report Count :** - -![1](../../../../static/img/report/fastReport-rptPrtCount/1.png) - -**Step to do :** - -1. Go into Report Design - -2. Click on DetailData1 - -3. Click On Events Tab - -4. Double Click on OnBeforePrint. - - ![2](../../../../static/img/report/fastReport-rptPrtCount/2.png) - -5. System will auto bring you to the code page. Insert the Query as Below : - - ```pascal - if TfrxDetailData(Sender).Visible and ( mod 20 = 1) and ( > 1) then Engine.NewPage; - ``` - - If you want to change the Record Count to 15, just change the count: - - ```pascal - if TfrxDetailData(Sender).Visible and ( mod 15 = 1) and ( > 1) then Engine.NewPage; - ``` - -6. Go to File | Save As | Insert New Report Name - -7. Preview with New Report Name. - - ![3](../../../../static/img/report/fastReport-rptPrtCount/3.png) - -## Set Stop Position - -**Example of setting the Stop Position with 912 Pixel :** - -![1](../../../../static/img/report/fastReport-stpPos/1.png) - -1. Go into Report Design - -2. Click on **DetailData1** - -3. Click on **Events** - -4. Double Click **onAfterCalcHeight**. - - ![2](../../../../static/img/report/fastReport-stpPos/2.png) - -5. The system will redirect to Code Page - - :::tip[TIPS] - If you want to stop on 9 Inch, then you have to convert to Pixel. - - 1 Inch = 96 Pixel, So if you want stop on 9 Inch, then use 9 *96 = 864 Pixel. - ::: - - ![3](../../../../static/img/report/fastReport-stpPos/3.png) - - **Code**: - - ```pascal - if TfrxDetailData(Sender).Visible and (Engine.CurY + DetailData1.Height >= 864) then Engine.NewPage; - ``` - -6. File | save as | Enter New Report Name - -7. Preview with new report name to see the result. - -**Example Result after set to 864 Pixel :** - -![4](../../../../static/img/report/fastReport-stpPos/4.png) - -## Update GST from 6% to 0% (show zero instead of blank) - -SQL Account system build in report format will automatic detect your Tax Rate based on your invoice issued. - -- If invoice issued on May, it will show GST @ 6%, while invoice issued on June, it will display GST @ 0%. -- If your Delivery Order (D/O) is issued on May, transferred to Invoice and invoice date on June, the system will automatic detect and set your GST rate correctly. -- However, if your format customized previously, you can refer this guideline on how to change the script from GST @ 6% to GST 0%. - -1. Click on your report name to enter into report designer page. - - ![1](../../../../static/img/report/fastReport-6to0TaxRate/1.png) - -2. Refer to the image below for the follow instructions, - - 1. Click on this field, you can double check on left panel, the field name is **MmGST2** - - 2. go **Event** - - 3. double click the empty area beside **OnBeforePrint**, system will bring you to step iv as below - - ![2](../../../../static/img/report/fastReport-6to0TaxRate/2.png) - - 4. **replace to this script** - - ![3](../../../../static/img/report/fastReport-6to0TaxRate/3.png) - - ![4](../../../../static/img/report/fastReport-6to0TaxRate/4.png) - -3. Once you complete the steps above, Click file > **save as**, enter a new report name and exit, then you may preview again your format outcome. diff --git a/docs/faq/report/rtm/_category_.json b/docs/faq/report/rtm/_category_.json deleted file mode 100644 index 6ca56bc2..00000000 --- a/docs/faq/report/rtm/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "RTM Report", - "link": { - "type": "generated-index", - "description": "Report operations" - } -} \ No newline at end of file diff --git a/docs/faq/report/rtm/basicGuide.md b/docs/faq/report/rtm/basicGuide.md deleted file mode 100644 index 2b0b95af..00000000 --- a/docs/faq/report/rtm/basicGuide.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -sidebar_position: 1 -id: report-rtm-basicGuide -title: Basic Guide -description: Basic guide to RTM report builder. -slug: /faq/report/rtm/basic-guide -tags: ["Report", "RTM Report"] ---- - -## Load Report Template - -1. **Tools** > **Report Designer** - - ![1](../../../../static/img/report/loadRptTemplate/1.png) - -2. Press on **IMPORT** - - ![2](../../../../static/img/report/loadRptTemplate/2.png) - -3. Follow the steps below : - - 1. Change the report type to **SQL Report(*rtm)** - - 2. Select your **Report** - - 3. Press **OPEN** - - ![3](../../../../static/img/report/loadRptTemplate/3.png) diff --git a/docs/faq/report/rtm/customization.md b/docs/faq/report/rtm/customization.md deleted file mode 100644 index 39fa8ab9..00000000 --- a/docs/faq/report/rtm/customization.md +++ /dev/null @@ -1,534 +0,0 @@ ---- -id: report-rtm-customization -title: Customization -description: RTM Report Customization -slug: /faq/report/rtm/customization -tags: ["RTM Report", "Customization"] ---- - -## Add FromDocNo and FromDocDate Variable in Report Design - -1. Go in Report Design | Click on ![1](../../../../static/img/report/add-fromDocNo-fromDocDate/1.png) then place at the grid – refer below Pic - - ![2](../../../../static/img/report/add-fromDocNo-fromDocDate/2.png) - - 1. Right Click on Variable2 | Select Calculation | - - ![3](../../../../static/img/report/add-fromDocNo-fromDocDate/3.png) - - After Done press OK - -2. If the date is not appearing in report preview - - ![4](../../../../static/img/report/add-fromDocNo-fromDocDate/4.png) - - 1. Click on **Calc Tab** - - 2. **Menu bar** | click **View** | Select **Events** - - 3. Look for ***Variable*** - - 4. Click on **OnPrint** - - 5. Click on **Document_Detail** - - 6. Click on **FromDocNo** - - 7. Drag from **FromDocNo** to the query box. - -## Create SUM Variable for TAX Column - -![1](../../../../static/img/report/crtSUMforTaxCol/1.png) - -1. Click on the variable icon - -2. Click on where you want to create a new variable, right click on the variable created > go calculations , Insert the query in the next section accordingly - -3. Click on the variable created, and make sure choose it to `DOUBLE`. - -**Query:** - -1. **Formula for Sub Total** - - ```pascal - Variable1.DisplayFormat := Option.GetFieldValue('AccountingValueDisplayFormat'); - - Value := GetAggregateValue(agSUM, Document_Detail, 'DocKey', 'Amount'); - ``` - -2. **Formula for Total Exclude GST (RM)** - - ```pascal - Variable2.DisplayFormat := Option.GetFieldValue('AccountingValueDisplayFormat'); - - Value := GetAggregateValue(agSUM, Document_Detail, 'DocKey', 'LocalAmount'); - ``` - -3. **Formula for Total of Tax Amt (RM)** - - ```pascal - Variable5.DisplayFormat := Option.GetFieldValue('AccountingValueDisplayFormat'); - - Value := GetAggregateValue(agSUM, Document_Detail, 'DocKey', 'LocalTaxAmt'); - ``` - -4. **Formula for Total Include GST (RM)** - - ```pascal - Variable6.DisplayFormat := Option.GetFieldValue('AccountingValueDisplayFormat'); - - Value := GetAggregateValue(agSUM, Document_Detail, 'DocKey', 'LocalAmountWithTax'); - ``` - -## Disable Query for Deleted Field - -1. If you had deleted any field in report designer with Query, then u will get the below message, click **OK** - - ![1](../../../../static/img/report/disbQryinRpt/1.png) - -2. Click on the blue colour report name to enter in report designer page - - ![2](../../../../static/img/report/disbQryinRpt/2.png) - -3. Click on the field, the field name will be shown at the left bottom of the application as shown below. If you had deleted the field, refer to step 4. - - ![3](../../../../static/img/report/disbQryinRpt/3.png) - -4. Click on **CALC**, go View > Modules - - ![4](../../../../static/img/report/disbQryinRpt/4.png) - -5. Follow the steps below: - - 1. Click on **Event Handlers** - - 2. Go to **procedure DetailBeforePrint** - - 3. An error will be shown at the bottom, double click on it, and the system will redirect to the row with the error - - ![5](../../../../static/img/report/disbQryinRpt/5.png) - -6. Enter '//' as in the image below : - - ![6](../../../../static/img/report/disbQryinRpt/6.png) - -7. Right click and compile , make sure no error > save > close the preview screen and try preview again. - -:::info[Note] -You can also refer to the guidance video at [HERE](https://www.sql.com.my/) regarding the above issue. -::: - -## Display Exemption Number & Expiry Date in Invoice Template - -### Part A : Custom | Maintain Customer - -![1](../../../../static/img/report/displayExmpNoExpDateInv/1.png) - -### Part B : Report Format add customer exemption Number - -1. Go to Sales | Sales Invoice | Select any of your invoice | Preview | choose your invoice format template | click on the bottom blue color report name to go into report designer page - - ![2](../../../../static/img/report/displayExmpNoExpDateInv/2.png) - -2. Insert **Exemption Number** label - - 1. click on the A label icon - 2. click on the area that you want to locate the field - 3. rename the label - - ![3](../../../../static/img/report/displayExmpNoExpDateInv/3.png) - -3. Insert **Tax Exemption Number** DBText - - 1. click on the DBText field - 2. click on the are that you want to located the field - 3. select Document Company & TaxExemptNo - - ![4](../../../../static/img/report/displayExmpNoExpDateInv/4.png) - -4. Insert **Expiry Date** label - - 1. click on the A label icon - 2. click on the area that you want to locate the field - 3. rename the label - - ![5](../../../../static/img/report/displayExmpNoExpDateInv/5.png) - -5. Insert **Tax Expiry Date** DBText - - 1. click on the DBText field - 2. click on the are that you want to located the field - 3. select Document Company & TaxExpDate - - ![6](../../../../static/img/report/displayExmpNoExpDateInv/6.png) - -### Part C: Save as a new report name & preview the new format - -1. Once you complete, go file | save as | enter a new report name | Save - - ![7](../../../../static/img/report/displayExmpNoExpDateInv/7.png) - -2. Preview your new report - - ![8](../../../../static/img/report/displayExmpNoExpDateInv/8.png) - -3. The exemption number & expiry date added - - ![9](../../../../static/img/report/displayExmpNoExpDateInv/9.png) - -## Drag XML Report into SQL - -:::info[note] -If this XML Report is Customer Aging, go Customer Aging to drag the XML Report - -If this XML report is Supplier Aging Report, go to Supplier Aging to drag the XML Report -::: - -1. Open the XML Report & also Customer Aging, drag the XML Report into the Report Name field - - ![1](../../../../static/img/report/dragXMLRpt/1.png) - -2. Double Click on the new report template in blue color. - - ![2](../../../../static/img/report/dragXMLRpt/2.png) - -3. Click on the arrow down key to choose the right template - - - Eg : If the report Name is Cust-Local-**L0**-06 Month - - - L0 = no special grouping, the template you have to choose eg Cust 06 Month Aging - - L1 = Grouping by 1 level, the template you have to choose eg Cust 06 Month Aging – Level 1 - - L2 =Grouping by 2 level, the template you have to choose eg Cust 06 Month Aging – Level 2 - - - Eg : If the report Name is Cust-Local-L0-**06** Month - - - 04 = 04 Month - - 06 = 06 Month - - 12 = 12 Month - -## Fix Report Tax Rate show A instead of 6% - -![1](../../../../static/img/report/fastReport-taxShwA/1.png) - -1. Preview the Report format, Click on blue color link and enter into Report Design. - - ![2](../../../../static/img/report/fastReport-taxShwA/2.png) - -2. Check GST Summary using which Pipeline | This Report using plSQL_7. - - ![3](../../../../static/img/report/fastReport-taxShwA/3.png) - -3. Click on Calc Tab. - - ![4](../../../../static/img/report/fastReport-taxShwA/4.png) - -4. Click on Menu View | Select Module - - ![5](../../../../static/img/report/fastReport-taxShwA/5.png) - -5. Click on Events | Click on Main:plSQL_0 | Look for SQL_7(Refer Step 2 to see which pipeline) | Insert TaxRate - - ![6](../../../../static/img/report/fastReport-taxShwA/6.png) - - Query: - - ```sql - SQL_7 := 'SELECT DocKey, Tax, TaxRate, Sum(LocalAmount) LocalAmount, Sum(Qty) Qty, Sum(LocalTaxAmt) localTaxAmt, Description '+ - 'FROM Document_Detail ' + - 'Where Tax <> ''''' + - 'GROUP BY Dockey, Tax, TaxRate'; - ``` - -6. Click on Event Handler | Select Procedure ReportBeforePrint | Look for Pipeline SQL_7 | Insert TaxRate - - ![7](../../../../static/img/report/fastReport-taxShwA/7.png) - - Query: - - ```pascal - LocalSQL_SELECT(plSQL_7, SQL_7, 'Dockey;Tax;TaxRate'); - ``` - -7. Click on SubReport1:plSQL_7 Tab - - ![8](../../../../static/img/report/fastReport-taxShwA/8.png) - -8. Click on VarTax | Right Click | Select Calculation - - ![9](../../../../static/img/report/fastReport-taxShwA/9.png) - -9. Amend the Query | Press OK - - - Before Amend: - - ![10](../../../../static/img/report/fastReport-taxShwA/10.png) - - - After Amend: - - ![11](../../../../static/img/report/fastReport-taxShwA/11.png) - - Query: - - ```pascal - Value := plsql_7.getfieldvalue('Tax') + ' @ ' + plsql_7.getfieldvalue('TaxRate'); - ``` - -10. File | Save - - ![12](../../../../static/img/report/fastReport-taxShwA/12.png) - -11. Close the report builder - -12. Preview again the same report format. - - ![13](../../../../static/img/report/fastReport-taxShwA/13.png) - -## Official Receipt Format Set Knock Off Grid to Show Full Width - -1. Go to **subreport1 : Document_KnockOff** - - ![1](../../../../static/img/report/ORSetKnockOffGridToShwFullWidth/1.png) - -2. Go to **Report**, click on **Title** - - ![2](../../../../static/img/report/ORSetKnockOffGridToShwFullWidth/2.png) - -3. Move all field in Column Header to **Title** - - ![3](../../../../static/img/report/ORSetKnockOffGridToShwFullWidth/3.png) - -4. Go to **File** > **Page Setup...** - - ![4](../../../../static/img/report/ORSetKnockOffGridToShwFullWidth/4.png) - -5. Go to **Layout**, change the **column** to ***1*** - - ![5](../../../../static/img/report/ORSetKnockOffGridToShwFullWidth/5.png) - -6. Now, it expands to full page, you can adjust all your column as your wish. - - ![6](../../../../static/img/report/ORSetKnockOffGridToShwFullWidth/6.png) - -7. Once you done adjust, go file > save as, key a new report name. - -8. Close the preview, and preview your new report name. - -## Rounding of Figure in Report - -**Sample Invoice with Rounding RM0.02 :** - -![1](../../../../static/img/report/roundingRpt/1.png) - -1. Using Tax Invoice format 06-Tax-Invoice - ![2](../../../../static/img/report/roundingRpt/2.png) - - :::info[note] - Click on blue color link - **06-Tax-Invoice** - ::: - -2. Click on **Calc** Tab - - ![3](../../../../static/img/report/roundingRpt/3.png) - -3. Right Click select **Module** - - ![4](../../../../static/img/report/roundingRpt/4.png) - -4. Click on **Declarations** - - ![5](../../../../static/img/report/roundingRpt/5.png) - -5. Declare **SQL_Rounding** under **Variable** - - ![6](../../../../static/img/report/roundingRpt/6.png) - -6. Click on Events | On Create | Procedure GlobalOnCreate insert syntax as below : - - ```pascal - SQL_Rounding := 'SELECT DocKey, Sum(Amount) Amount, Description '+ - 'FROM Document_Detail ' + - 'WHERE ItemCode=''RTN5Cents'' '+ - 'GROUP BY DocKey'; - ``` - - **Refer Picture below :** - - ![7](../../../../static/img/report/roundingRpt/7.png) - - :::info[Optional] - Add additional syntax in plSQL_4 – Refer below, only if Total Amount beforeGST you want to exclude rounding amount. - - ![8](../../../../static/img/report/roundingRpt/8.png) - - ```pascal - SQL_4 := 'SELECT DocKey, Sum(Amount) Amount, Description '+ - 'FROM Document_Detail ' + - 'WHERE ItemCode <> ''DISC'' '+ - 'or Itemcode is null ' + - 'and ItemCode <> ''RTN5Cents'' ' + - 'GROUP BY DocKey'; - ``` - - ::: - -7. Click on Event Handlers | Click on procedure Report BeforePrint, insert syntax as below : - - ```pascal - LocalSQL_SELECT(plSQL_Rounding, SQL_Rounding, 'DocKey'); - SetDataPipelineFieldLink(Main, plSQL_Rounding, 'DocKey', 'DocKey'); - ``` - - ![9](../../../../static/img/report/roundingRpt/9.png) - -8. File | Save | Exit from report design and go in to Report Design again. - -9. Insert DBText | and place at the place you want. - - ![10](../../../../static/img/report/roundingRpt/10.png) - - 1. Click on DBText - - 2. Place at the Group Footer area - - 3. Select plSQL_Rounding - - 4. Manually type in Amount - - Here is the output : - - ![11](../../../../static/img/report/roundingRpt/11.png) - - After adjust the position : - - ![12](../../../../static/img/report/roundingRpt/12.png) - - **Item Detail hide Item Code RTN5Cents to be appearing, refer step as below :** - -10. Click on Document_Detail Tab as below | Click on Calc | Event Handlers | Procedure RdiscOnPrint - - ![13](../../../../static/img/report/roundingRpt/13.png) - - - Syntax: - - ```pascal - RDisc.Visible := (Document_Detail.getfieldvalue('Itemcode') <> 'DISC') - and (Document_Detail.getfieldvalue('Itemcode') <> 'RTN5Cents'); - ``` - - - Output : - - ![14](../../../../static/img/report/roundingRpt/14.png) - - **How to do if the report never create the region before?** - -11. Right click tick all the Toolbars - - ![15](../../../../static/img/report/roundingRpt/15.png) - -12. Click on Region component - - ![16](../../../../static/img/report/roundingRpt/16.png) - -13. Place at the design grid | Click at the region | Select no Fill - - ![17](../../../../static/img/report/roundingRpt/17.png) - -14. Select No Line - - ![18](../../../../static/img/report/roundingRpt/18.png) - -15. Place all the DBtext/DBRichText inside the Region. - - ![19](../../../../static/img/report/roundingRpt/19.png) - -16. Click on Region to check the object name : - - ![20](../../../../static/img/report/roundingRpt/20.png) - -17. Click on Calc tab | Right Click select Events - - ![21](../../../../static/img/report/roundingRpt/21.png) - -18. Look for RDisc | Select OnOnPrint | Place the syntax inside bottom box - - ![22](../../../../static/img/report/roundingRpt/22.png) - - Syntax : - - ```pascal - RDisc.Visible := (Document_Detail.getfieldvalue('Itemcode') <> 'DISC') - and (Document_Detail.getfieldvalue('Itemcode') <> 'RTN5Cents'); - ``` - - :::info[note] - **RDisc** is your object name, if you object name is **Region1**, then have to change as below : - - ```pascal - Region1.Visible := (Document_Detail.getfieldvalue('Itemcode') <> 'DISC') - and (Document_Detail.getfieldvalue('Itemcode') <> 'RTN5Cents'); - ``` - - ::: - -## Update GST from 6% to 0% (show zero instead of blank) - -SQL Account system build in report format will automatic detect your Tax Rate based on your invoice issued. - -- if invoice issued on May it will show GST @ 6%, while invoice issued on June will display GST @ 0%. -- D/O issued on May, transferred to Invoice and invoice date is in June, then system will automatic detect it and set the GST rate correctly. -- However, if your format is customized previously, you can refer this guideline on how to change the script from GST @ 6% to GST 0% . - -1. Click on your report name to enter into report designer page. - - ![1](../../../../static/img/report/RTM-6to0/1.png) - -2. Follow the steps below: - - 1. Go to **Calc**, click on **View** > select **Module** - - ![2](../../../../static/img/report/RTM-6to0/2.png) - - 2. Go **Event Handlers** - - 3. Go **Procedure lbTaxAmtOnGetText(var Text:String);** - - 4. Replace to this script: - - ```pascal - var s : string; - begin - if (plSQL_0.GetFieldValue('TaxDate') < '01 Jun >2018') or - VarToCurr(plSQL_1.GetFieldValue('TaxAmt')) <> 0) then - - s := 'GST Amt @ 6% ' else - s := 'GST Amt @ 0% '; - if plSQL_2.GetFieldValue('Code') <> '----' >then - Text := s + '(RM) :' else - Text := s + ':'; - end; - ``` - - ![3](../../../../static/img/report/RTM-6to0/3.png) - -To Display Tax as 0.00 Instead of Blank: - - 1. Click on your report name to enter into report designer page. - - ![4](../../../../static/img/report/RTM-6to0/4.png) - - 2. Go to **Calc**, click on **View** and select **Events** - - ![5](../../../../static/img/report/RTM-6to0/5.png) - - 3. Find **DBTxtTax**and select **OnGetText**, then paste the script as below: - - ```pascal - begin - if Trim(plSQL_1.GetFieldValue('TaxAmt')) = '' then - Text := '0.00' ; - end; - ``` - - ![6](../../../../static/img/report/RTM-6to0/6.png) - - Once you completed, save the report and exit, then you may preview again your format outcome. diff --git a/docs/faq/sales/_category_.json b/docs/faq/sales/_category_.json deleted file mode 100644 index 608da4ae..00000000 --- a/docs/faq/sales/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Sales", - "position": 4, - "link": { - "type": "generated-index", - "description": "A quick guide on Sales for SQL Account" - } -} \ No newline at end of file diff --git a/docs/faq/sales/cash-drawer-kick-out.md b/docs/faq/sales/cash-drawer-kick-out.md deleted file mode 100644 index 08ba28f7..00000000 --- a/docs/faq/sales/cash-drawer-kick-out.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Cash Drawer Kick Out -description: Guiding on setting cash drawer -slug: /faq/sales/cash-drawer-kick-out -tags: ["SQL Account", "Sales", "FAQ", "Cash Drawer", "Kick Out"] ---- - -## Setup - -1. Tools > Option > Click on Barcode - - - **Option 1 : Direct Kick Out** -> Cash Drawer direct connects to your PC. - - ![1](../../../static/img/sales/cash-drawer-kick-out/1.png) - - :::tip[tip] - Select the correct *Port No* and then click on **Kick Out** button to test whether the *Cash Drawer* success kicks out, if the port no did not showing in list, may manually type in your *Port No*. - ::: - - - **Option 2**: Printer Kick Out -> Cash Drawer direct connect to Printer - - ![2](../../../static/img/sales/cash-drawer-kick-out/2.png) - - :::tip[tip] - Select your Printer Name and then click on **Kick Out** button to test whether the *Cash Drawer* success kicks out - ::: - - :::info[note] - There are the problem if you are using cash drawer RJ 11, RJ 14, may change to Com Port (**Need USB Cash Drawer**) - ::: - -**If you met the problem on direct kick out, may reply the question below before call in :** - -1. Check Window OS -2. Check SQL Account version -3. Try preview and print see able to print out nicely? -4. Try window Test Print receipt printer -5. Try Tools > Option Kick out whether can response -6. Check receipt printer Model -7. Check what receipt printer driver install -8. Check Cash Drawer model (you are not allowed to use RJ11, use USB Com direct connect to PC instead) diff --git a/docs/faq/stock/_category_.json b/docs/faq/stock/_category_.json deleted file mode 100644 index 81ccc2d0..00000000 --- a/docs/faq/stock/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Stock", - "position": 6, - "link": { - "type": "generated-index", - "description": "Guideline on stock maintainance in SQL" - } -} \ No newline at end of file diff --git a/docs/faq/stock/barcode.md b/docs/faq/stock/barcode.md deleted file mode 100644 index 0dc10a7b..00000000 --- a/docs/faq/stock/barcode.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Barcode -description: A guide to setup Stock Barcode for SQL Account -slug: /faq/stock/barcode -tags: ["SQL Account", "FAQ", "Stock", "Barcode","Setup"] ---- - -## Setup - -1. Download GRN Barcode Report Template from below link - - 1. Barcode Capture from Maintain Stock Item Barcode as Barcode - - Template: [GRN BarCode (20×40) Capture Item BarCode](https://www.sql.com.my/webstore/templates/template-detail/?id=4047) - - 2. Barcode Capture from Maintain Stock Item as Barcode - - Template: [GRN BarCode (35×25) Capture Item Code](https://www.sql.com.my/webstore/templates/template-detail/?id=4058) - -2. Step to Import the report to SQL - - :::info - Refer to this [guide](http://localhost:3000/faq/report/rtm/basic-guide#load-report-template) for details - ::: - - 1. Logon to SQL Account - 2. Go to **Tools > Report Designer > Import** - 3. Change the file type from *Fast Report(\*.fr3)* to *SQL Reports(\*.rtm)* - 4. Select the report downloaded from Step1.1 or 1.2 - -3. Purchase > Goods Received Note > Preview > - - ![1](../../../static/img/stock/barcode/1.png) - - - Click on blue color link to enter into Report Design. - -4. Change the Report type to MM due to Barcode size is small - - ![2](../../../static/img/stock/barcode/2.png) - -5. Change barcode size - > File > Page Setup > Paper Size > - - ![3](../../../static/img/stock/barcode/3.png) - - - Currently this sample is Width = 35mm > Height = 25mm - -6. Click on SubRptNorm : Document_Detail - - ![4](../../../static/img/stock/barcode/4.png) - - - **From here you may change the Barcode layout.** - -7. Click on DBBarcode > Right click > Configure - - ![5](../../../static/img/stock/barcode/5.png) - - 1. Type : Select 128 - - 2. Bar Width : This is barcode width - -8. GRN Barcode Event - - - View > Module > Click on Event Handlers > Procedure DetailBeforeDetail - - ![6](../../../static/img/stock/barcode/6.png) - - This step is to capture Item Qty, if Qty 10, will repeat 10 Barcode label. diff --git a/docs/faq/stock/batch-edit-value-stock-item.md b/docs/faq/stock/batch-edit-value-stock-item.md deleted file mode 100644 index c8e97c82..00000000 --- a/docs/faq/stock/batch-edit-value-stock-item.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Batch Edit Value in Maintain Stock Item -description: A guide to batch edit value in maintain stock item for SQL Account -slug: /faq/stock/batch-edit-value-stock-item -tags: ["SQL Account", "FAQ", "Stock", "Stock Item","Batch Edit"] ---- - -:::tip -Allow to update/edit the field value by batch. -::: - -## Maintain Stock Item - -1. Go to **Stock > Maintain Stock Items** - -2. For example, **change the output tax code from ZRL to SR** for ZRL items only. - -3. Click on the first column (beside the item column). - -4. Tick out the Output Tax column. - - ![1](../../../static/img/stock/batch-edit-value-stock-item/1.png) - -5. You will see the Output Tax column as per the screenshot below. - - ![2](../../../static/img/stock/batch-edit-value-stock-item/2.png) - -6. Click on Output Tax filter. - -7. Tick ZRL. All ZRL items will be filtered. - - ![3](../../../static/img/stock/batch-edit-value-stock-item/3.png) - -8. **Press Ctrl + A** to select all ZRL items. - -9. Right click on the highlighted items. Click on **Batch Edit Value**. - - ![4](../../../static/img/stock/batch-edit-value-stock-item/4.png) - -10. Tick Output Tax and select the tax code (SR). - -11. Click Ok to proceed the changes. - - ![5](../../../static/img/stock/batch-edit-value-stock-item/5.png) - -12. Click **Yes** to confirm update. - - ![6](../../../static/img/stock/batch-edit-value-stock-item/6.png) - -13. Click **Ok**. - - ![7](../../../static/img/stock/batch-edit-value-stock-item/7.png) - -## Result - -Items default output tax previously ZRL are **successfully changed to SR**. - -![8](../../../static/img/stock/batch-edit-value-stock-item/8.png) diff --git a/docs/faq/stock/change-barcode-label-size.md b/docs/faq/stock/change-barcode-label-size.md deleted file mode 100644 index df36ca33..00000000 --- a/docs/faq/stock/change-barcode-label-size.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Changing the Label Size (mm) Measurement for the Bar Code Label -description: A guide to change the label size (mm) measurement for the bar code label for SQL Account -slug: /faq/stock/change-barcode-label-size -tags: ["SQL Account", "FAQ", "Stock", "Stock Item","Barcode","Size","Label"] ---- - -This guide illustrate how to print **bar code label** using Windows Printer for the items created in Maintain Stock Item. - -![1](../../../static/img/stock/change-barcode-label-size/1.png) - -## Update Item Bar Code Listing - -1. Go to **Tools > Print Bar Code (Windows Printer)** - -2. At first, you can update the item bar code in the Maintain Stock Item. - - ![2](../../../static/img/stock/change-barcode-label-size/2.png) - -3. Click on + button to insert the items. See the screenshot below. - - ![3](../../../static/img/stock/change-barcode-label-size/3.png) - -4. Click the **SAVE** button to save the item bar code listing. Type a file name (eg. **BarCode_Items_31122015**) to save. See the screenshot below. - - ![4](../../../static/img/stock/change-barcode-label-size/4.png) - -5. Message prompted. Click OK. - - ![5](../../../static/img/stock/change-barcode-label-size/5.png) - -## Load the Previous Item Bar Code Listing - -1. Go to **Tools > Print Bar Code (Windows Printer)** - -2. Click on a **Cabinet (5th)** button to load from the previous file for item bar code listing (eg.**BarCode_Items_31122015**). Click on **Open**. - - ![6](../../../static/img/stock/change-barcode-label-size/6.png) - -3. Confirmation message prompted. Click on **Yes to load it. Click on No'** to cancel it. - - ![7](../../../static/img/stock/change-barcode-label-size/7.png) - -4. Message **Load success** prompted. Click on **OK** to proceed. - - ![8](../../../static/img/stock/change-barcode-label-size/8.png) - -5. You can continue update the new items and save as new file name. - -### Preview/Print the Bar Code Label - -1. Click on **Preview** button or **Printer** button (to skip the preview). - - ![9](../../../static/img/stock/change-barcode-label-size/9.png) - -2. After the preview, click on **Printer** button to print. - -### Change the Label Size (mm) for the Bar Code Label - -1. Click on the **Report Name**. See the screenshot below. - - ![10](../../../static/img/stock/change-barcode-label-size/10.png) - -2. To change the paper unit measurement. Click on **Report > Units**, choose to **Millimeters**. - - ![11](../../../static/img/stock/change-barcode-label-size/11.png) - -3. To change the paper size. Click on **File > Page Setup...** - - ![12](../../../static/img/stock/change-barcode-label-size/12.png) - -4. Click on **Paper Size** tab, change the **Width** and **Height** to **35** and **25** respectively (mm), eg. the label paper size is 35mm x 25mm. - - ![13](../../../static/img/stock/change-barcode-label-size/13.png) - -5. Check the **Layout** tab to make sure the **Columns** set to value = **1**. - - ![14](../../../static/img/stock/change-barcode-label-size/14.png) - -6. Check the **Margin** tab as well to make sure all **(Top, Bottom, Left, Right)** are set to value = **0** . Click **OK** to exit Page Setup. - - ![15](../../../static/img/stock/change-barcode-label-size/15.png) - -7. To fix label each page contains 1 barcode of an item. Right click on **Detail** band, select **Position**. - - ![16](../../../static/img/stock/change-barcode-label-size/16.png) - -8. Set **Print Count** to value = **1**. Click **OK** to confirm. - - ![17](../../../static/img/stock/change-barcode-label-size/17.png) - -9. Save the report with another name. diff --git a/docs/faq/stock/costing-method.md b/docs/faq/stock/costing-method.md deleted file mode 100644 index 28a59f3a..00000000 --- a/docs/faq/stock/costing-method.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Costing Method -description: A guide to assign or change costing method for SQL Account -slug: /faq/stock/costing-method -tags: ["SQL Account", "FAQ", "Stock", "Costing Method"] ---- - -## Setup - -1. Go to Stock > Maintain Stock Group - - ![1](../../../static/img/stock/costing-method/1.png) - -2. There have 3 method let you to assign - - 1. FIFO - cost flow assumption that the first goods purchased are also the first goods sold. - 2. Fixed Costing –fixed cost where had maintain under maintain stock item - 3. Weighted Average -average cost of production to a product - -3. If you **change** your costing method (previously with transaction existing) - - 1. Please remember must run **analyse data integrity** (tools | analyse data integrity) before you check the costing report again. - - ![2](../../../static/img/stock/costing-method/2.png) - - :::tip - System will auto update from first date until current date transaction with new costing - method cost…. - ::: diff --git a/docs/faq/stock/multi-location.md b/docs/faq/stock/multi-location.md deleted file mode 100644 index ce0d4b50..00000000 --- a/docs/faq/stock/multi-location.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Multi Location Module -description: A guide to multi location module for SQL Account -slug: /faq/stock/multi-location -tags: ["SQL Account", "FAQ", "Stock", "Multi Location","Warehouse"] ---- - -This module is to manage mulitple warehouse, inter-branch transfer, consignment, van-sales, etc. - -## Multiple Warehouse - -:::note Case studies -HQ is helping the KL branch to order goods and goods shall be sending to KL branch warehouse. -::: - -1. When purchase the item from supplier, you may choose your branch warehouse (KL) as your location in purchase invoice. - - ![1](../../../static/img/stock/multi-location/1.png) - -2. When you sell out the item, you may choose the location to be sell out from branch warehouse (KL). - - ![2](../../../static/img/stock/multi-location/2.png) - -3. You will see stock in to branch warehouse (KL) and stock out from branch warehouse (KL) as well when you check your stock card report - - ![3](../../../static/img/stock/multi-location/3.png) - -From the stock card report, you can see the item is store in two locations, one is default, one is KL, the stock in and out that previously u did will be in location KL. - -## Consignment - -:::note Case studies -A batch of goods is consigned to your customer side for selling without billing first, will only bill after they sell out the goods. -::: - -1. Open a stock transfer documents to transfer the goods from your warehouse (Default) to customer warehouse (Batu Caves). - - ![4](../../../static/img/stock/multi-location/4.png) - -2. Customer received 1 box of goods (20 units) and sold out 15 units. Then you can bill customer 15 units in where the goods out from customer location (Batu Caves). - - ![5](../../../static/img/stock/multi-location/5.png) - -3. You will see stock transfer out from your warehouse (Default), and stock will transfer into customer warehouse (Batu Caves). - - ![6](../../../static/img/stock/multi-location/6.png) - -From the stock card report, you can see the item is sold out from your customer location (Batu Caves) after you make the billing. diff --git a/docs/faq/stock/stock-adjustment-take.md b/docs/faq/stock/stock-adjustment-take.md deleted file mode 100644 index ddf0efd1..00000000 --- a/docs/faq/stock/stock-adjustment-take.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Stock Adjustment & Stock Take -description: A guide to stock adjustment and stock take for SQL Account -slug: /faq/stock/stock-adjustment-take -tags: ["SQL Account", "FAQ", "Stock", "Stock Adjustment","Stock Take"] ---- - -Allow user to key-in quantity in and out from the system, just like combination of stock received and stock issue, -normally use it for stock take purpose. (**Stock > Stock Adjustment > New**) - -## How SQL System can help during Stock Take ? - -1. Go to **Stock > Print Stock Physical Worksheet** - - ![1](../../../static/img/stock/stock-adjustment-take/1.png) - -2. **Filter** the date, stock group or others **information** that you want to do for the stock take, please **make sure that you have choose the correct location and batch if you have this 2 modules**. - - ![2](../../../static/img/stock/stock-adjustment-take/2.png) - -3. Click on **Apply and Preview** - - ![3](../../../static/img/stock/stock-adjustment-take/3.png) - -4. **Print out this stock physical worksheet -stock take sheet** for stock keeper to manually fill in the actual stock physical quantity at warehouse, so stock keeper just have to **fill in the actual quantity into the physical qty column.** - -5. After complete update the stock take report, click on **Stock > Stock Adjustment > Drag Out Book Qty and Physical Qty.** - - ![4](../../../static/img/stock/stock-adjustment-take/4.png) - - ![5](../../../static/img/stock/stock-adjustment-take/5.png) - -6. **Repeat the Step 1 & 2** to call out the Stock Physical Worksheet again, at the same time open 2 screen, one is stock adjustment another is stock physical worksheet, then click on **Window | Tile Vertical.** - -7. Click on the first item in **Stock Physical Worksheet**, press on **Ctrl + A** on keyboard to select all items. **Then Drag & Drop into Stock Adjustment.** - - ![6](../../../static/img/stock/stock-adjustment-take/6.png) - -8. Based on the stock keeper’s Stock Take Report then **fill in the actual physical quantity** on your warehouse into the Stock Adjustment **Physical Qty column**, then system will base on Book Qty and calculate the variant then apply at Qty column. - -:::info -**Book Qty** = Quantity that record in system. - -**Physical Qty** = Actual Quantity at your warehouse. - -**Qty** = Variant between Physical and Book Quantity, system will auto adjust then update accordingly.( Physical Qty – Book Qty ) -::: diff --git a/docs/faq/stock/stock-price-tag.md b/docs/faq/stock/stock-price-tag.md deleted file mode 100644 index bb1be0a5..00000000 --- a/docs/faq/stock/stock-price-tag.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Stock Price Tag Module -description: Set different pricing groups. -slug: /faq/stock/stock-price-tag -tags: ["SQL Account", "FAQ", "Stock", "Price Tag Module"] ---- - -This module mainly to set different pricing groups from different customer and supplier, normally is use to setcdifferent customer category with different pricing. In order to do individual customer then you can group your customer into different price groups. - -## Steps and Instructions - -1. Go to **Stock > Maintain Stock Price Tag.** - - ![1](../../../static/img/stock/stock-price-tag/1.png) - -2. **Create category** of the customer that you want - - ![2](../../../static/img/stock/stock-price-tag/2.png) - -3. Edit Customer Price Tag - - - After create the category of the customer at maintain stock price tag then click on **Customer > Maintain Customer > Edit the Price Tag and assign accordingly.** - - ![3](../../../static/img/stock/stock-price-tag/3.png) - -4. Assign Customer Price Tag - - - Click into **Stock > Maintain Stock Item > Edit and click in the Cust Price Tag then assign accordingly.** - - ![4](../../../static/img/stock/stock-price-tag/4.png) - - :::info - - 1. **Price Tag** : Select the price tag which you have assign the group under Maintain Customer. - 2. **Company** : Beside of price tag, you can set a particular pricing to an individual customer. - 3. **Qty & UOM** : You can define the quantity that you want to apply the price. - 4. **Unit Price** : The unit price that you want to offer for those customer. - 5. **Discount** : You can set follow original unit price but you give discount more like 5% or RM 5. - 6. **Note** : Additional remark that you can record, like Year End sales promotion. - 7. **Date From & Date To** : The price validity date. - - ::: - -5. **Repeat** the same step on Supplier if you want apply on the **Supplier Price**. diff --git a/docs/faq/stock/stock-reorder.md b/docs/faq/stock/stock-reorder.md deleted file mode 100644 index 5e68cb73..00000000 --- a/docs/faq/stock/stock-reorder.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Maintain Stock Item - Reorder Lvl & Qty -description: A guide to stock reorder for SQL Account -slug: /faq/stock/stock-reorder -tags: ["SQL Account", "FAQ", "Stock", "Reorder"] ---- - -## Maintain Stock Item - -![1](../../../static/img/stock/stock-reorder/1.png) - -### Reorder Level - -:::info Definition -Reorder level (or reorder point) is the inventory level at which a company would place a new order or start a new manufacturing run. -::: - -**Example:** - -![2](../../../static/img/stock/stock-reorder/2.png) - -- For this item, Reorder Qty = 5, when Bal Qty less than 5 unit(Which is 9-5 = 4), saving document will prompt(Dialog : Stock Quatity Control) to remind you should place an order. - -:::tip -Stock Quality Control dialog can choose to Turn On (Tools > Option > Miscellaneous > Prompt Negative Stock Quantity Dialog Box > Checked it) -::: - -### Reorder Qty - -:::info Definition -Reorder quantity is the point at which a business must buy more inventory as to not run out of inventory. -::: - -**How to check the stock is running out of reorder level ?** - -1. Stock > Print Stock Reorder Advise > Select any criteria if have > Apply - -![3](../../../static/img/stock/stock-reorder/3.png) - -:::note -Criteria A : There have option : - -1. On Hand Qty -2. On Hand Qty + PO -3. On Hand Qty – SO -4. On Hand Qty + PO – SO - -VS - - 1. Reorder Level - 2. Min Level - 3. Max Level - -::: - -There is a faster way to create PO with Reoder QTY. Please see below Screen : - -![4](../../../static/img/stock/stock-reorder/4.png) - -Step : - -1. After get the appropriate result of Reoder Advise > Click on First Item > Press Shift Key(Keyboard) > Click on Last Item -2. New PO > Select Supplier > Drag from Reorder Advise to PO Itemize (As per picture). PO Qty = Reorder Qty diff --git a/docs/faq/stock/stock-serial-no.md b/docs/faq/stock/stock-serial-no.md deleted file mode 100644 index da05b948..00000000 --- a/docs/faq/stock/stock-serial-no.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: Serial No Module -description: A guide to stock stock serial number module for SQL Account -slug: /faq/stock/stock-serial-no -tags: ["SQL Account", "FAQ", "Stock", "Serial Number"] ---- - -## Control Serial Number - -- Please go to Stock > Maintain Stock Item > Edit > Checked Serial No if this item you would like to control serial number - - ![1](../../../static/img/stock/stock-serial-no/1.png) - -## Purchase > Goods Received Note > New - -There are 3 methods to apply serial no : - -### Method 1 : Manually Enter - -1. Click on + (Green Icon) > Manually Enter at Empty Box - - ![2](../../../static/img/stock/stock-serial-no/2.png) - -### Method 2 : Import from Notepad / Word - -1. Enter the Serial No at the notepad. - - ![3](../../../static/img/stock/stock-serial-no/3.png) - -2. Click Import - - ![4](../../../static/img/stock/stock-serial-no/4.png) - -3. Select Notepad where you have saved to - - ![5](../../../static/img/stock/stock-serial-no/5.png) - -4. Click Ok - - ![6](../../../static/img/stock/stock-serial-no/6.png) - -### Method 3 : Generator - -1. Click on Generator - - ![7](../../../static/img/stock/stock-serial-no/7.png) - -2. Format = Serial No Format - - Start From = What number you wish to start from - - Count = How many units to generate - - ![8](../../../static/img/stock/stock-serial-no/8.png) - -3. Here the output - - ![9](../../../static/img/stock/stock-serial-no/9.png) - -4. **Sales** > Delivery Order > Click Add - - ![10](../../../static/img/stock/stock-serial-no/10.png) - - **+ (Green Color) Same method as Method 1** - **Import same method as Method 2** - -5. Tick Serial No > Press Ok - - ![10](../../../static/img/stock/stock-serial-no/10.png) - -:::note -Stock Adjustment does not support serial no. May using Stock Received and Stock Issue to replace . -::: - -## Serial No Report - -1. **Stock > Print Stock Physical Worksheet** – Will show all balance serial number haven’t use - -2. **Stock > Print Stock Card** - Tick Calculate Serial Number before apply - - :::info Note - *Checked Calculate Serial No > Only Report : Stock Card – Location* - ::: - -3. **Stock > Print Stock Month End Balance** – Tick Calculate Serial Number before apply - -4. **Stock > Print Stock Serial No Conflict** - - 1. To check non Existent Serial No. Example : Purchase for this Item the serial number is 555666, but when stock out stock the serial number is 222333. - 2. To check duplicate Serial Number received at the same location / batch for the same item. If return in the stock with same serial number and out again will not consider conflict. - -5. **Stock** > Print Stock Outstanding Serial No** - - 1. For those documents Issued or Received do no applying serial no. - -6. **Inquiry > Print Serial No Inquiry** - - 1. Check serial no movement. - -7. **Sales > S/N Profit & Loss by Document** - - - This Report Cost is capture exactly from Stock In Serial Number Cost. - If DO transfer to IV, due to DO have deducted Serial number, so will not have any result for this report. - -## Access Right for Serial No - -1. **Group Stock >Always match Qty with Serial No** - - - which mean this access right the serial no must match with Qty key in. Eg : 2 Qty must have 2 Serial No. - - If checked this right, Print Outstanding Serial No will no result. - -2. **Allow Non-Existent Serial No** - - - Which mean this access right control if tick which will allow out stock the serial number without match the serial number when purchase. - Example : Purchase for this Item the serial number is 555666, but when stock out stock the serial number is 222333. If you do not allow this, may uncheck this access right. - - If unchecked this right, Print Stock Serial No Conflict will no result. diff --git a/docs/faq/tools/_category_.json b/docs/faq/tools/_category_.json deleted file mode 100644 index 2800d4d9..00000000 --- a/docs/faq/tools/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Tools", - "position": 11, - "link": { - "type": "generated-index", - "description": "Tools and maintenance" - } -} \ No newline at end of file diff --git a/docs/faq/tools/advance-currency.md b/docs/faq/tools/advance-currency.md deleted file mode 100644 index d9550b73..00000000 --- a/docs/faq/tools/advance-currency.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Advance Currency Module -description: A guide to Advance Currency Module for SQL Account -slug: /faq/tools/advance-currency -tags: ["SQL Account", "Tools", "Advance","Currency","Module"] ---- - -:::info -This module is required if you are using foreign banks. - -Related: [Payment from Foreign Customer](../../usage/tools.md#maintain-currency) -::: - -## Setup Foreign Currency Payment Method - -### 1. GL > Maintain Account - -![1](../../../static/img/tools/advance-currency/1.png) - -### 2. Create your bank respectively - -![2](../../../static/img/tools/advance-currency/2.png) - -### 3. Tools > Maintain Payment Method - -![3](../../../static/img/tools/advance-currency/3.png) diff --git a/docs/faq/tools/data-integrity.md b/docs/faq/tools/data-integrity.md deleted file mode 100644 index 10a3767d..00000000 --- a/docs/faq/tools/data-integrity.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Analyse Data Integrity -description: A guide to Analyse Data Integrity for SQL Account -slug: /faq/tools/data-integrity -tags: ["SQL Account", "FAQ", "Tools", "Analyse Data Integrity"] ---- - -:::caution Reminder -Recommended to run every day or at least once per week. -::: - -## Setup - -1. Go to Tools > Analyse data integrity - - ![1](../../../static/img/tools/data-integrity/1.png) - -2. Click Start Analyse - - - Proceed if user wanted to run for all option for Analyze Item checkbox - - ![2](../../../static/img/tools/data-integrity/2.png) - -3. Click on Ok and Close - - ![3](../../../static/img/tools/data-integrity/3.png) - - Check on the item you want to analyse. **(Recommend all)** - -:::danger -If there is any error message when running analysis, save the error message and consult your SQL Service Consultant. -::: - -:::info - -1. If your SQL is not responding during analysis, do not worry because it is in the midst of analysing your data unless it took too long then feel free to contact your SQL Service Consultant. -2. It is important for you to backup your data everyday. - -::: diff --git a/docs/faq/tools/first-year-acc-more-than-12.md b/docs/faq/tools/first-year-acc-more-than-12.md deleted file mode 100644 index 225dd9b4..00000000 --- a/docs/faq/tools/first-year-acc-more-than-12.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Set First Year Account more than 12 Months -description: How to setup your first year account if your first financial year is more than 12 months -slug: /faq/tools/first-year-acc-more-than-12 -tags: ["SQL Account", "FAQ", "Tools"] ---- - -This guideline is to guide how to setup your first year account if it is more than 12 month , below example given is first year account in 18 months. - -First financial period will in 18 month which is from 1st July 2014 to 31st December 2015. - -:::caution -You are advise to set your financial start period and system conversion date as below. -::: - -## Setup - -1. Go Tools > Option > General Ledger - - - Setting your financial start period and system conversion date as 1/1/2014, so in the following year, you do not need to run year end to set again your financial start period & System conversion date. - - ![1](../../../static/img/tools/first-year-acc-more-than-12/1.png) - -2. Setting profit & loss statement print in 18 months - - ![2](../../../static/img/tools/first-year-acc-more-than-12/2.png) - - 1. Right click as pointed - - 2. Select 640 x 480 to smaller your SQL Screen - - 3. Highlight report name “this year-2column” click and drag it to desktop - ![3](../../../static/img/tools/first-year-acc-more-than-12/3.png) - - 4. From desktop click the report “This Year-2Column” drag it back to SQL report section. - - 5. Click ok - ![4](../../../static/img/tools/first-year-acc-more-than-12/4.png) - - 6. Double click on the new report name “ This year 2 column” in blue color. - - 7. Change Period Class to Fixed Date - - - Param 1 = Date from eg 1/7/2014 - - Param 2 = Date to eg 31/12/2015 - - 8. You can insert a report name for you easy to differentiate. diff --git a/docs/faq/tools/global-price-change.md b/docs/faq/tools/global-price-change.md deleted file mode 100644 index 865a3d1c..00000000 --- a/docs/faq/tools/global-price-change.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: SQL Global Price Change -description: SQL Global Price Change Setup GUide -slug: /faq/tools/global-price-change -tags: ["SQL Account", "Tools", "Global Price Change"] ---- - -SQL Global Price change will help you mark down price for all items with few clicks - -:::info -Contact your SQL Service to get this standalone application. -::: - -![3](../../../static/img/tools/global-price-change/3.png) - -## Setup - -1. Select your group of item - - 1. You can select on certain stock group/ category, if you want all items, then left stock group and category blank - 2. You can also choose only active item - 3. Once your group of item selected, click on Get Stock Items List - - ![4](../../../static/img/tools/global-price-change/4.png) - -2. Setting on value to be adjust - - :::note - Scenario: You are trying to reduce price due to removal of GST (6% > 0%) - ::: - - ![5](../../../static/img/tools/global-price-change/5.png) - - - Rounding Method (Assuming Round Decimal is 2) - 1. Normal : Example : 0.1234 => 0.12 - 2. Round Up : Example : 0.1234 => 0.13 - 3. Round Down : Example : 0.1274 => 0.12 - - - Input Value = Sample Value - - Output Result = Sample Result - - Round decimal = No. of Decimal Point - - It may looks like a **6%** reduction but it is actually **5.66%** - - Example: - - ```text - Item price = RM 100 - - With 6% GST = RM 100 * 1.06 = RM 100 + 6% = RM 106 - Removal of 6% GST = RM 106 / 1.06 = RM 106 - 5.66% = RM 106 - ``` - - - Mark down = 5.66 % - - Why 5.66% instead of 6% ? - - 30 May 2018 selling price = RM 106 GST Inclusive - - 01 June 2018 selling Price RM 106 – 5.66% = RM 100 - - **NOT RM 106 – 6% = RM 99.64** - -3. Select fields to be update - - ![6](../../../static/img/tools/global-price-change/6.png) - - - Tick on which option you want to adjust / update eg : Reference Price - - You can also tick Record change history then system will update this changes history in your note - - Once you complete setting, click on Change - -### 4. Check & Post - -![7](../../../static/img/tools/global-price-change/7.png) - -![8](../../../static/img/tools/global-price-change/8.png) diff --git a/docs/faq/tools/maintain-user.md b/docs/faq/tools/maintain-user.md deleted file mode 100644 index ea3055ce..00000000 --- a/docs/faq/tools/maintain-user.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Maintain User -description: A guide to maintain user for SQL Account -slug: /faq/tools/maintain-user -tags: ["SQL Account", "FAQ", "Tools", "Maintain User"] ---- - -## User - -### Create a new user and assign password - -1. Tools > Maintain User - - ![1](../../../static/img/tools/maintain-user/1.png) - -2. Click New - - ![2](../../../static/img/tools/maintain-user/2.png) - -3. Assign the Code and Name and click SAVE - - ![3](../../../static/img/tools/maintain-user/3.png) - -4. Assign password (Edit > More > Change Password) - - ![4](../../../static/img/tools/maintain-user/4.png) - - ![5](../../../static/img/tools/maintain-user/5.png) - -### Reset Password - -1. After save, click on MORE button, and select reset password - - ![6](../../../static/img/tools/new-user-access-control-reset-password/6.png) - -2. Click yes, to copy the temperorily password - - ![7](../../../static/img/tools/new-user-access-control-reset-password/7.png) - -3. Click on File > Logon to Logout your current user - - ![8](../../../static/img/tools/new-user-access-control-reset-password/8.png) - -4. Insert the Login Code & paste the temporarily password, then click on the Log On button - - ![9](../../../static/img/tools/new-user-access-control-reset-password/9.png) - -5. Paste again the temporarily password & click on OK - - ![10](../../../static/img/tools/new-user-access-control-reset-password/10.png) - -6. Insert your new password - - ![11](../../../static/img/tools/new-user-access-control-reset-password/11.png) - -7. Click OK once your new password set - - ![12](../../../static/img/tools/new-user-access-control-reset-password/12.png) - -## Access Right - -### Assign the access rights for user - -1. Tools > Maintain User - -2. Double click the user, and Edit > More > Access Control - - ![6](../../../static/img/tools/maintain-user/6.png) - -3. You will found the full list of access control and please find below explanation for the setting of access control - - | No | Label Name | Explaination | - |----|---------------|-----------------------------------------------| - |1 |Execute |To use the functions from the menu list. | - |2 |New |To create new documents. | - |3 |Edit |To modify the documents. | - |4 |Delete |To delete the documents. | - |5 |Process |N/A to SQL Accounting. It apply to SQL Payroll.| - |6 |Print |To print. | - |7 |Preview |To preview. | - |8 |Export |To export. | - - | No | Label Name | Explaination | - |----|---------------|-----------------------------------------------| - |1 |Grant |Action button to grant the access rights | - |2 |Revoke |Action button to disallow the access rights | - |3 |Grant All |Action button to grant all the access rights | - |4 |Revoke All |Action button to disallow all the access rights| - - :::caution - Read the description check and uncheck accordingly what user can do or cannot do - ::: - - ![7](../../../static/img/tools/maintain-user/7.png) - -4. For reports, you can assign the access rights user to view certain report / hide reports. - - ![8](../../../static/img/tools/maintain-user/8.png) - -### Copy paste full access rights for others user - -:::note -You are able to export the access rights set of one user and apply to another user. -::: - -1. Create a new user [Guide](#create-a-new-user-and-assign-password) - -2. Open the user you wish to export access rights, and go to More > Export Access Rights. - - ![9](../../../static/img/tools/maintain-user/9.png) - -3. Save it to a file. - - ![10](../../../static/img/tools/maintain-user/10.png) - -4. Back to the newly created user, go to More > Import Access Rights. - - ![11](../../../static/img/tools/maintain-user/11.png) - -5. Select the file you saved to in Step 3. - - ![12](../../../static/img/tools/maintain-user/12.png) - -6. Click Yes - - ![13](../../../static/img/tools/maintain-user/13.png) diff --git a/docs/faq/tools/one-cent-rounding.md b/docs/faq/tools/one-cent-rounding.md deleted file mode 100644 index 11790fa4..00000000 --- a/docs/faq/tools/one-cent-rounding.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Customer One Cent Rounding -description: A guide to one cent rounding for SQL Account -slug: /faq/tools/one-cent-rounding -tags: ["SQL Account", "FAQ", "Tools", "Rounding"] ---- - -One Cent (0.01$) difference Rounding(Local Currency Fields) for all AR/SL Documents **(Recommended)** - -## Setup - -1. Go to Tools > Option > Customer - - ![1](../../../static/img/tools/one-cent-rounding/1.png) - - 1. Tick One Cent Different Rounding (Local Currency Fields) for all /AR/SL Documents **(Recommend)** - - 2. Press OK - -2. Sales Invoice > New > Refer below screen - - ![2](../../../static/img/tools/one-cent-rounding/2.png) - - :::caution - But once you save you will notice the first line of the Tax Amount will be different, this is because system - using Total Amount of IV to calculate 6%. Refer below Screen: - ::: - - ![3](../../../static/img/tools/one-cent-rounding/3.png) - - Formula: Sum up SubTotal with Tax, Multiple with 6% **(Note : system will exclude the Subtotal if the Tax Rate is 0%)** - - Tax Amount Calc = RM 15.54 * 6% = 0.93, mostly system will reverse on first line of the Item. - - :::note - If you don’t want system to help you to do the One Cent Rounding, please refer Step 1 to un-tick the option will do. - ::: diff --git a/docs/faq/tools/project-module.md b/docs/faq/tools/project-module.md deleted file mode 100644 index 42a17e4d..00000000 --- a/docs/faq/tools/project-module.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Project Module -description: This module allow user to maintain the project accounting as the branch or departmental basis, normally user will use for simple construction base so that they get to view Profit and Loss / Balance Sheet compare by Project. -slug: /faq/tools/project-module -tags: ["SQL Account", "FAQ", "Tools", "Project Module"] ---- - -This module allow user to maintain the project accounting as the branch or departmental basis, normally user will use for simple construction base so that they get to view Profit and Loss / Balance Sheet compare by Project. - -## Setup - -### 1. Click on **Tools > Maintain Project.** - -![1](../../../static/img/tools/project-module/1.png) - -### 2. Insert **Project Code & Description** - -- For project value and project cost is not compulsory field to fill in, if you have fill in then it’s just remark purpose. - -![2](../../../static/img/tools/project-module/2.png) - -### 3. Click on **Tools > Options** - -![3](../../../static/img/tools/project-module/3.png) - -### 4. Then look for **Miscellaneous** - -- Make sure “ **Show Document Project** “ have tick this option. - -![4](../../../static/img/tools/project-module/4.png) - -### 5. During **sales and purchase** transaction - -- Make sure you can **call out the project option**, then **update** accordingly. - -![5](../../../static/img/tools/project-module/5.png) - -When key-in transaction, some user will ask why there have a project at item detail and beside customer > More tab also have project? - -:::info Question -What is the different and what is the purpose between More > Project >( Document Project) and Item Detail > Project (Item Project )? -::: - -![6](../../../static/img/tools/project-module/6.png) - -:::info -Project has 2 purposes: - -1. Balance Sheet Report - - - In order for balance sheet to capture the project figures, at the top left more button ( Document Project), you need to select the project. - -2. Profit and Loss - - - To show your detailed profit and loss by project, you'll need to select the project on each item under the item detail ( Item Project). - -It is not compulsory to select either of them, it depends on what kind of report you wish to view. -::: - -![7](../../../static/img/tools/project-module/7.png) - -**Same Things Apply on GL > Cash Book Entry.** - -:::caution -After complete update the document with project, then how to view report with project and compare by project? For example : **GL > Print Profit & Loss Statement**. -::: - -### 6. Filter the date that you want to view for P&L report - -- Then if you want to view project comparison then choose “Comparison – Project ( 6 column )” - -![8](../../../static/img/tools/project-module/8.png) - -:::info - -- 6 columns = up to 6 projects -- 10 Columns = up to 10 projects -- 19 Columns = up to 19 projects. - -::: - -### 7. Select the desired report - -1. Make sure to tick on the “ Show Column Options”, then the top of the report will appear column option. - -2. You may change the period that you want to view, eg : by default it will be “ Current Month”. If you want to view whole year figure then you have to change to “ Current Year “. - -![9](../../../static/img/tools/project-module/9.png) - -### 8. Tick on the “ Print Project Comparison” - -- Then at right hand site will come out the project tab, you can select which project that you want to view then click on Add. - -![10](../../../static/img/tools/project-module/10.png) - -### 9. Click on Apply - -- You will see the result. The P&L report will compare each project that you select - -![11](../../../static/img/tools/project-module/11.png) diff --git a/docs/faq/tools/pw-policy-2step-verify.md b/docs/faq/tools/pw-policy-2step-verify.md deleted file mode 100644 index 0c94e72b..00000000 --- a/docs/faq/tools/pw-policy-2step-verify.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Password Policy (with 2 Steps Verification) -description: A guide to password policy and 2 steps verifications for SQL Account -slug: /faq/tools/pw-policy-2step-verify -tags: ["SQL Account", "FAQ", "Tools", "Password Policy","2 Steps Verifications"] ---- - -## Password Policy Setup - -1. Go to menu : **Tools > Options…** click on **Password Policy**. - - ![1](../../../static/img/tools/pw-policy-2step-verify/1.png) - -2. You can choose the following password requirement: - - - Maximum Password Age (days): number of days to expire and change password. - - Minimum Password Length: password length cannot less than the minimum,eg. 8. - -Save Password History (0-5): number of password history not allow to re-use - - Password combination of - - At least one Upper Case letter (A-Z) - - At least one Lower Case letter (a-z) - - At least one number (0-9) - - At least one non-alphanumeric character \!\$\%\^\&\*\(\)_\-\+\=\@\~\#\<\,\>\.\? - -## New User - Reset Password - -1. Go to menu : **Tools > Maintain User**. - -2. Click on More (arrow key down), click **Reset Password**. - - ![2](../../../static/img/tools/pw-policy-2step-verify/2.png) - -3. New password auto generated. - - ![3](../../../static/img/tools/pw-policy-2step-verify/3.png) - -4. Press **Yes** (Copy password to clipboard = Tick). - -5. You can press **Ctrl + V** to paste the New Password into email and send to the new user. - -## 2-Steps Verifications Login - -1. Go to menu : **File > 2-Steps Verification**. - - ![4](../../../static/img/tools/pw-policy-2step-verify/4.png) - -2. Enter your current password, press **Ok** to proceed. - -3. Choose an Authenticator device. - - ![5](../../../static/img/tools/pw-policy-2step-verify/5.png) - -4. Follow the instructions to install and setup the Authenticator in your hand-phone. - -5. Each time login, you will require to enter the verification code generated from the Authenticator in your mobile phone. - - ![6](../../../static/img/tools/pw-policy-2step-verify/6.png) diff --git a/docs/faq/tools/running-no-date-year-format.md b/docs/faq/tools/running-no-date-year-format.md deleted file mode 100644 index f5440888..00000000 --- a/docs/faq/tools/running-no-date-year-format.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Set Running No by Date/Year Format -description: A guide to set date format for Payment Voucher/ Official Receipt running no for SQL Account -slug: /faq/tools/running-no-date-year-format -tags: ["SQL Account", "FAQ", "Format", "Tools","Running No", "Date"] ---- - -:::tip Sample: -PV0615/001 (PVmmyy/001) -::: - -## Steps and Instructions - -### Step 1 - -Tools > Maintain Document No - -### Step 2 - -Create New or amend from the existing - -![1](../../../static/img/tools/running-no-date-year-format/1.png) - - :::caution -make sure the format is follow the sample attached - ::: - -### Step 3 - -![2](../../../static/img/tools/running-no-date-year-format/2.png) - -![3](../../../static/img/tools/running-no-date-year-format/3.png) - -:::info -We can also set default running no at for default payment method -::: - -### Step 4 - -Go to tools > Maintain Payment Method - -![4](../../../static/img/tools/running-no-date-year-format/4.png) - -![5](../../../static/img/tools/running-no-date-year-format/5.png) - -:::note -vice versa for Official Receipt -::: diff --git a/docs/getting-started/database/backup-restore.md b/docs/getting-started/database/backup-restore.md index 35627a12..bd30bba8 100644 --- a/docs/getting-started/database/backup-restore.md +++ b/docs/getting-started/database/backup-restore.md @@ -26,15 +26,15 @@ In any situation, it is always useful to have a backup copy of your work. Regula 1. Go to **File** > **Backup Database** - ![1](../../../static/img/getting-started/backup-restore/1.png) + ![1](../../../static/img/getting-started/database/backup-restore/1.png) 2. Click on the "**+**" icon | select "**Add Local Storage**" (You may select multiple storage locations.) - ![2](../../../static/img/getting-started/backup-restore/2.png) + ![2](../../../static/img/getting-started/database/backup-restore/2.png) 3. Choose where you want to save your backup file - ![3](../../../static/img/getting-started/backup-restore/3.png) + ![3](../../../static/img/getting-started/database/backup-restore/3.png) 4. Click **Backup** @@ -42,49 +42,49 @@ In any situation, it is always useful to have a backup copy of your work. Regula **Best Compression Mode** : Takes longer time than normal backup, but the file size will be smaller. - ![4](../../../static/img/getting-started/backup-restore/4.png) + ![4](../../../static/img/getting-started/database/backup-restore/4.png) 5. Once the backup is completed, "Done" will be displayed. Press **OK**. - ![5](../../../static/img/getting-started/backup-restore/5.png) + ![5](../../../static/img/getting-started/database/backup-restore/5.png) 6. You will see a zip file in the location you have selected. - ![6](../../../static/img/getting-started/backup-restore/6.png) + ![6](../../../static/img/getting-started/database/backup-restore/6.png) ### Restore 1. Press the ⚙️ button at the bottom right. - ![7](../../../static/img/getting-started/backup-restore/7.png) + ![7](../../../static/img/getting-started/database/backup-restore/7.png) 2. Click **Restore…** - ![8](../../../static/img/getting-started/backup-restore/8.png) + ![8](../../../static/img/getting-started/database/backup-restore/8.png) 3. Click **…** button. - ![9](../../../static/img/getting-started/backup-restore/9.png) + ![9](../../../static/img/getting-started/database/backup-restore/9.png) 4. Look for your Backup File and click **Open**. - ![10](../../../static/img/getting-started/backup-restore/10.png) + ![10](../../../static/img/getting-started/database/backup-restore/10.png) 5. Click **OK** once backup file is selected. - ![11](../../../static/img/getting-started/backup-restore/11.png) + ![11](../../../static/img/getting-started/database/backup-restore/11.png) 6. Click **OK** - ![12](../../../static/img/getting-started/backup-restore/12.png) + ![12](../../../static/img/getting-started/database/backup-restore/12.png) 7. Once the restore is completed, **Completed** will be displayed. Press **OK**. - ![13](../../../static/img/getting-started/backup-restore/13.png) + ![13](../../../static/img/getting-started/database/backup-restore/13.png) 8. Your file is now restored. Double-click and login as usual. - ![14](../../../static/img/getting-started/backup-restore/14.png) + ![14](../../../static/img/getting-started/database/backup-restore/14.png) ## SQL AI Cloud Backup @@ -108,19 +108,19 @@ Please contact your SQL Agent to register a SQL Drive account beforehand. 1. Go to **File** > **Backup Database** - ![15](../../../static/img/getting-started/backup-restore/1.png) + ![15](../../../static/img/getting-started/database/backup-restore/1.png) 2. Click on "**+**" and **Add Cloud Storage** - ![16](../../../static/img/getting-started/backup-restore/15.png) + ![16](../../../static/img/getting-started/database/backup-restore/15.png) 3. Click on **Login** > **Login with Google** > Type in your email address and password > **Grant access** - ![17](../../../static/img/getting-started/backup-restore/16.png) + ![17](../../../static/img/getting-started/database/backup-restore/16.png) - ![18](../../../static/img/getting-started/backup-restore/17.png) + ![18](../../../static/img/getting-started/database/backup-restore/17.png) - ![19](../../../static/img/getting-started/backup-restore/18.png) + ![19](../../../static/img/getting-started/database/backup-restore/18.png) 4. Click **Backup** @@ -128,34 +128,34 @@ Please contact your SQL Agent to register a SQL Drive account beforehand. **Best Compression Mode** : Takes longer time than normal backup, but the file size will be smaller. - ![20](../../../static/img/getting-started/backup-restore/19.png) + ![20](../../../static/img/getting-started/database/backup-restore/19.png) 5. Once the backup is completed, **Done** will be displayed. Press **OK**. - ![21](../../../static/img/getting-started/backup-restore/20.png) + ![21](../../../static/img/getting-started/database/backup-restore/20.png) ### Cloud Restore 1. Press the ⚙️ button at bottom right - ![22](../../../static/img/getting-started/backup-restore/7.png) + ![22](../../../static/img/getting-started/database/backup-restore/7.png) 2. Click **Restore…** (with Cloud icon) - ![23](../../../static/img/getting-started/backup-restore/21.png) + ![23](../../../static/img/getting-started/database/backup-restore/21.png) 3. Select your Backup File and click **OK** - ![24](../../../static/img/getting-started/backup-restore/22.png) + ![24](../../../static/img/getting-started/database/backup-restore/22.png) 4. Click **OK** - ![25](../../../static/img/getting-started/backup-restore/23.png) + ![25](../../../static/img/getting-started/database/backup-restore/23.png) 5. Once the restore is completed, **Completed** will be displayed. Press **OK**. - ![26](../../../static/img/getting-started/backup-restore/24.png) + ![26](../../../static/img/getting-started/database/backup-restore/24.png) 6. Your file is now restored. Double-click and login as usual. - ![27](../../../static/img/getting-started/backup-restore/25.png) + ![27](../../../static/img/getting-started/database/backup-restore/25.png) diff --git a/docs/getting-started/database/clone.md b/docs/getting-started/database/clone.md index 87c12822..0be5eae6 100644 --- a/docs/getting-started/database/clone.md +++ b/docs/getting-started/database/clone.md @@ -11,56 +11,56 @@ Database clone will copy all maintenance files, such as the chart of accounts, c 1. Double click SQL Icon > Press ⚙️ Button - ![1](../../../static/img/getting-started/clone-master/1.png) + ![1](../../../static/img/getting-started/database/clone-master/1.png) 2. Hover over the company name you wish to copy master data and **right click** on it - ![2](../../../static/img/getting-started/clone-master/2.png) + ![2](../../../static/img/getting-started/database/clone-master/2.png) 3. Select **Clone Database** - ![3](../../../static/img/getting-started/clone-master/3.png) + ![3](../../../static/img/getting-started/database/clone-master/3.png) 4. Enter the ADMIN password > **OK** - ![4](../../../static/img/getting-started/clone-master/4.png) + ![4](../../../static/img/getting-started/database/clone-master/4.png) 5. Select **Clone Master Data only(Beta)** - ![5](../../../static/img/getting-started/clone-master/5.png) + ![5](../../../static/img/getting-started/database/clone-master/5.png) 6. Press **OK** - ![6](../../../static/img/getting-started/clone-master/6.png) + ![6](../../../static/img/getting-started/database/clone-master/6.png) 7. After the clone is done, you will found message **Elapsed time : x.xxxx seconds** > **Close** - ![7](../../../static/img/getting-started/clone-master/7.png) + ![7](../../../static/img/getting-started/database/clone-master/7.png) 8. Once cloning is completed, you will found 1 **new company** on **last icon** (with the same name as the company you selected to clone) > **Double Click It .** - ![8](../../../static/img/getting-started/clone-master/8.png) + ![8](../../../static/img/getting-started/database/clone-master/8.png) 9. Enter Password ( Follow your old Company password) > Click **Log on** - ![9](../../../static/img/getting-started/clone-master/9.png) + ![9](../../../static/img/getting-started/database/clone-master/9.png) 10. After Log on > go **File** > **Company Profile** to rename Company name . - ![10](../../../static/img/getting-started/clone-master/10.png) + ![10](../../../static/img/getting-started/database/clone-master/10.png) 11. After renaming > press on **Save** - ![11](../../../static/img/getting-started/clone-master/11.png) + ![11](../../../static/img/getting-started/database/clone-master/11.png) 12. Go to **Tools** > **Analyse Data integrity** - ![12](../../../static/img/getting-started/clone-master/12.png) + ![12](../../../static/img/getting-started/database/clone-master/12.png) 13. Press **Start Analyse** - ![14](../../../static/img/getting-started/clone-master/14.png) + ![14](../../../static/img/getting-started/database/clone-master/14.png) 14. Press **OK** - ![13](../../../static/img/getting-started/clone-master/13.png) + ![13](../../../static/img/getting-started/database/clone-master/13.png) diff --git a/docs/getting-started/migration/myob.md b/docs/getting-started/migration/myob.md index a34f557b..eb0e0953 100644 --- a/docs/getting-started/migration/myob.md +++ b/docs/getting-started/migration/myob.md @@ -14,27 +14,27 @@ tags: ["SQL Account", "Migration"] 3. Refer Image below on How to Extract MYOB Backup file. - ![1](../../../static/img/getting-started/myob-migrate/1.png) + ![1](../../../static/img/getting-started/migration/myob-migrate/1.png) 4. **Create New Database** then **Log On** New Company with ADMIN User - ![2](../../../static/img/getting-started/myob-migrate/2.png) + ![2](../../../static/img/getting-started/migration/myob-migrate/2.png) 5. Once Log On, Go to **File** | **Data Import** | Select **MYOB**. - ![3](../../../static/img/getting-started/myob-migrate/3.png) + ![3](../../../static/img/getting-started/migration/myob-migrate/3.png) 6. Follow Step 1 in image below : Click the ‘Download’ button to download the needed tool for MYOB migrate. Then place the ‘myData CLI’ to C:\Users\SQL\Desktop\MYOB. - ![4](../../../static/img/getting-started/myob-migrate/4.png) + ![4](../../../static/img/getting-started/migration/myob-migrate/4.png) 7. Follow Step 2 of the Image below, Click ‘Select File’ button then look into C:\Users\SQL\Desktop\MYOB to select ‘mydatacli.zip’. - ![5](../../../static/img/getting-started/myob-migrate/5.png) + ![5](../../../static/img/getting-started/migration/myob-migrate/5.png) 8. Follow Step 3 of the Image below, Click ‘Select File’ button then look into @@ -46,11 +46,11 @@ tags: ["SQL Account", "Migration"] ::: - ![6](../../../static/img/getting-started/myob-migrate/6.png) + ![6](../../../static/img/getting-started/migration/myob-migrate/6.png) 9. Follow step below to start Import. - ![7](../../../static/img/getting-started/myob-migrate/7.png) + ![7](../../../static/img/getting-started/migration/myob-migrate/7.png) 10. Few Important settings MUST do before continue Import. @@ -60,13 +60,13 @@ tags: ["SQL Account", "Migration"] 2. Close the Data Import. - ![8](../../../static/img/getting-started/myob-migrate/8.png) + ![8](../../../static/img/getting-started/migration/myob-migrate/8.png) 2. Go to GL /Maintain Account, verify the Imported Chart of Account & set the necessary Special Type. Especially for Trade Debtor, Trade Creditor, Bank/Cash Account, Stock & etc. - ![9](../../../static/img/getting-started/myob-migrate/9.png) + ![9](../../../static/img/getting-started/migration/myob-migrate/9.png) 3. Go to Tools /Options /General Ledger, to setup for : @@ -76,7 +76,7 @@ tags: ["SQL Account", "Migration"] -Default Account - ![10](../../../static/img/getting-started/myob-migrate/10.png) + ![10](../../../static/img/getting-started/migration/myob-migrate/10.png) 4. Next @@ -84,11 +84,11 @@ tags: ["SQL Account", "Migration"] 2. Vice Versa for Supplier Control Account setting. - ![11](../../../static/img/getting-started/myob-migrate/11.png) + ![11](../../../static/img/getting-started/migration/myob-migrate/11.png) 11. Once DONE settings, Repeat Step 5, 7 & 8 to continue import. - ![12](../../../static/img/getting-started/myob-migrate/12.png) + ![12](../../../static/img/getting-started/migration/myob-migrate/12.png) :::info diff --git a/docs/getting-started/migration/ubs.md b/docs/getting-started/migration/ubs.md index 16922d53..d3f77020 100644 --- a/docs/getting-started/migration/ubs.md +++ b/docs/getting-started/migration/ubs.md @@ -7,98 +7,321 @@ slug: /getting-started/migration/ubs tags: ["SQL Account", "Migration"] --- -## Setup +## Module that can be import from UBS + +| Data Migration from Sage UBS | Module | Data Migration from Sage UBS | Module | Data Migration from Sage UBS | Module | +| --- | --- | --- | --- | --- | --- | +| Chart of Account | Yes | Journal Entry | Yes | Sales Debit Note | Yes | +| Customer Master | Yes | Bank Reconciliation | Coming Soon | Sales Credit Note | Yes | +| Supplier Master | Yes | AR/ Customer Invoice | Yes | Price History - Sales Invoice | Yes | +| Stock Master | Yes | AR/ Customer Debit Note | Yes | Price History - Sales Delivery Order | Yes | +| Agent Master | Yes | AR/ Customer Credit Note | Yes | AP/Supplier Invoice | Yes | +| Project Master | Yes | AR/ Customer Payment | Yes | AP/Supplier Debit Note | Yes | +| Area Master | Yes | Sales Quotation | No | AP/Supplier Credit Note | Yes | +| Currency Master | Yes | Sales Order | No | Purchase Order | No | +| Terms Master | Yes | Sales Delivery Order | No | Purchase Invoice | Yes | +| GL Opening Balance | Coming Soon | Sales Invoice | Yes | Purchase Debit & Credit Note | Yes | +| Cash Book Entry | Yes | Sales Cash Sales | Yes | Price History - Purchase Invoice | Yes | + +## Time Estimate + +Different pc might have different timing + +| Duration of migration from Sage UBS | 1000 Records | 10,000 Records | +| --- | --- | --- | +| Masterfile | 2-5 Mins | 8-10 Mins | +| AR/AP Opening Balance | 5-10 Mins | 15-30 Mins | +| Sales/ Purchase Price History | 5-10 Mins | 15-30 Mins | +| Sales/ Purchase Current Transactions | 30-50 Mins | 1.5-2 Hours | +| AR/AP Current Transactions | 30-40 Mins | 1.5-2 Hours | +| GL Current Transactions | 10-15 Mins | 25-40 Mins | + +Import Flow + +1. Account Master File ( GL, Customer, Supplier.. ) +2. Stock Master File ( Stock Group, Stock Item..) +3. Stock ( Sales Price History..) +4. Stock ( Current Transaction) +5. Account ( Opening Balance.. ) +6. Account (Current Transaction..) + +## Limitation & Precaution + +1. No support for opening balance with foreign currency. + +- This is because UBS have two posting (1 local, 1 foreign) for foreign currency transaction and sometimes one of the posting might be missing. +- Always import Price History first before AR/AP Opening Balance. +- This is to avoid system from auto-delete AR/AP opening balance when importing Price History with same document number. +- This is not applicable for UBS Sage 50. + +## Preparing SQL Account Before Import Master Data + +:::caution +Please make sure that SQL Account version is version 728 and above. +::: + +Here are the things to do before data import:- + +1. Open SQL Account and create a new empty database. + +## Restore database from UBS + +Here are the step-by-step guide how to restore database from UBS:- + +1. Get the UBS Backup file `( BACKUP.ACC & BACKUP.STK )` and place the UBS backup file to the correct version database folder, example as below : + + - Directory to place UBS Backup File as below : + - USB Account Old Version = `C:\UBSACC90\DB` or `C:\UBSACC2015\DB` + - UBS Stock Old Version = `C:\UBSSTK90\DB` or `C:\UBSSTK2015\DB` + - Sage UBS Account = `C:\UBSACC2015\`create new folder for your backup file. + - Sage UBS Stock = `C:\UBSSTK2015\`create new folder for your backup file. + +2. Download 7 Zip to extract UBS Backup file,( if you want to Import Master File Only) or else you may restore to UBS program ( For price history and current transaction ). +Download Path for [7 Zip](https://www.7-zip.org/download.html) + + :::caution + *Make sure install the right one or else you cannot find 7 zip to Extract. + ::: + + ![1](../../../static/img/getting-started/ubs/restore-step3.png) + +3. After extract the backup file or restore the backup file then in SQL Account Software you have to Create New Database and logon into the new company. + +[Click Me to the video](https://www.youtube.com/watch?v=H7C14DzLyPE) + +## Import Master Data + +### Import Account Master Data + +Here are the step-by-step guide to importing master data:- + +1. Go to `File | Data Import | UBS Account` and select the UBS Account database folder. + +![2](../../../static/img/getting-started/ubs/importmd-step1-1.png) + +- Account which mean import COA, Maintain Customer, Maintain Supplier, Agent, Area, Term, Project, Currency and Customer & Supplier Outstanding +- Stock which mean import Stock Group, Stock Category, Stock Location, Stock Price Tag, Stock Item, Sales Invoice History, Sales Delivery Order History, Purchase Invoice History. +- Assign the UBS Account & UBS Stock backup folder accordingly with click on “Select Folder” then click Connect, first of all you must import Chart of Account.Tick Chart of Account and Execute. + +![3](../../../static/img/getting-started/ubs/importmd-step1-2.png) + +- Once you have done import Chart of Account, it’s prompt an message that successful and you have to do few setting according to the message. + +![4](../../../static/img/getting-started/ubs/importmd-step1-3.png) + +- Go to `GL | Maintain Account` and check the trade debtor/creditor control account, bank account & etc. if they exist and their respective Special Account Type is correct. +- Go to `Tools | Options | Customer` and change the Default Control Account. Repeat the same for Supplier. + +![5](../../../static/img/getting-started/ubs/importmd-step1-4.png) + +- Go to `Tools | Options | General Ledger` and set the Default Account accordingly + +![6](../../../static/img/getting-started/ubs/importmd-step1-5.png) + +- Now, go back to `File | Data Import | UBS Account` and import the remaining master data - Agent, Area, Project, Terms, Currency, Customer and Supplier Master Account +- Click Execute and wait for the import to complete. + +:::info + +[Click ME to the video](https://youtu.be/H7C14DzLyPE?t=1m26s) -:::warning[IMPORTANT] -only valid for SQL Account version **693** and above. ::: -1. Place the UBS backup file to `C:\UBSACC90\DB\20140704`, every time create new folder under `DB` folder. +### Import Stock Master Data -2. Unzip the UBS Backup file (only for Import Master File). Alternatively, you may restore it to the UBS program. +1. Go to `File | Data Import | UBS Stock`. - ![1](../../../static/img/getting-started/import-ubs/1.png) + ![7](../../../static/img/getting-started/ubs/importsmd-step1.png) -3. Create New Database | Logon to New Company +2. Select the UBS Stock database folder. -4. Go to **File** | **Import** | Select **UBS Account** | +- Tick Stock Group, Category, Location, Price Tag. - ![2](../../../static/img/getting-started/import-ubs/2.png) +:::caution +Please make sure user have purchase those module before import! +::: - :::info +![8](../../../static/img/getting-started/ubs/importsmd-step2-1.png) - 1. Account which mean import COA, Maintain Customer, Maintain Supplier, Agent, Area, Term, Project, Currency and Customer & Supplier Outstanding +- When import stock item code, make sure you have choose others option as below : - 2. Stock which mean import Stock Group, Stock Category, Stock Location, Stock Price Tag, Stock Item, Sales Invoice History, Sales Delivery Order History, Purchase Invoice History. +![9](../../../static/img/getting-started/ubs/importsmd-step2-2.png) - ::: +:::caution +*Also pay attention to the options below where you can choose to import extra Stock Item data such as UOM with Rate < 1, Stock Opening Balance & etc. +::: - ![3](../../../static/img/getting-started/import-ubs/3.png) +**If you want to import Stock Customer & Supplier price:** - ![4](../../../static/img/getting-started/import-ubs/4.png) +![10](../../../static/img/getting-started/ubs/importsmd-step2-3.png) -5. Close the Data Import | Go to **Tools** | **Options** | **Customer** | Fill in the Customer Control Account code(Same to Supplier Control Account Code). +- Click Execute and wait for the import to complete. - ![5](../../../static/img/getting-started/import-ubs/5.png) +:::caution -6. Repeat step 4, continue import to system. +this feature only available in version 737 and above. - ![6](../../../static/img/getting-started/import-ubs/6.png) +::: -7. Import Customer +:::info - ![7](../../../static/img/getting-started/import-ubs/7.png) +[Click ME to the video](https://www.youtube.com/watch?v=doPrsNK7N6M) - :::note +::: - When importing halfway and encountering errors, you can continue by entering the record number, then press the Save button. The system will then continue the import process. +### Import Sales & Purchase Price History and Opening Balance - ::: +**Preparation Before Import Transactions** +The following steps are required if you are importing opening balance or current transactions:- - :::note +1. Go to `File | Product Activation` and insert your Activation Code or Season Code and click Register. +2. If current transactions involve GST tax code, go to `GST | Start GST Now` to activate GST module. +3. To minimize any pop-up dialog during import:- - Tick Reformat Cust & Supplier follow SQL Customer Code. (Eg : Ubs Cust Code is 3000/A01 will become 300-A0001) +- **Go to `Tools | Options | Unit Price`. For all tabs (Sales, Purchase, Stock, Cash Sales & Cash Purchase), under the Option column, change all to blank** as shown below:- - ::: +![11](../../../static/img/getting-started/ubs/prepare-step3.png) -8. Import Customer Opening Balance +- Go to **`Tools | Options | Miscellaneous` and untick Prompt Negative Stock Quantity Dialog Box and Prompt Duplicate Cheque Number** +- **Logout and login as the new user you created.** +- **You may revert the changes back to original after data import.** - 1. The step you have to do before run UBS Year End : +- **Go to `Tools | Options | General Ledger` and change the Financial Start Period and System Conversion Date if needed.** - 1. Transaction(4) | Open Item Menu Debtor (6)| Maintain B/F Bills(1) | Press List Button | Exit | Press Generate | Press Yes | Exit +### Import Sales & Purchase Price History Data - 2. Transaction(4) | Open Item Menu Debtor (6)| Edit B/F or O/I(5) | Click on Mark all for O/I button | Exit +1. Before importing Sales & Purchase Price History, login into UBS and perform the following steps:- + 1. Transaction | Open Item Debtor | Edit B/F or O/I | Must tick mark all to O/I | Exit + 2. Transaction | Open Item Debtor | Maintain B/F Bills | Click "List" + (Exit "List" and click "Generate" if there are transactions) + 3. Transaction | Open Item Debtor | Bill Payment Ledger | List Missing Records in Arpost.DBF | + 4. Press OK if there are items in the list or press Exit if non +2. Repeat above step for Creditor. +3. Please check with clients if they want to do UBS Account Year End Processing before importing Debtor or Creditor Opening Balance. +4. Login SQL Account, make sure you have insert season code for this database, and Start GST feature in SQL Account Software +5. Now, go to `File | Data Import | UBS Stock`. Under Stock Item, tick the Price History - XXX options you wish to import. - 3. Transaction(4) | Open Item Menu Debtor (6)| Bill Payment Ledger(6) | List Missing Record in ARPost.dcf(3) | Press ok +![12](../../../static/img/getting-started/ubs/sales-step5.png) - 2. Do the same step for Supplier Side +:::info - 3. Import Opening Balance(Outstanding Invoice by Invoice) +[Click ME to the video](https://www.youtube.com/watch?v=s0GR8MDF5J4) - ![8](../../../static/img/getting-started/import-ubs/8.png) +::: - **You may tick all the opening at the same time. (Customer Payment takes longer time to import in).** +### Import Opening Balance -9. Import UBS Stock +#### Year End Closing at UBS - 1. Go to **File** | **Data Import** | Select **UBS Stock** | +1. Before importing Opening Balance, login into UBS and perform the following steps:- - ![9](../../../static/img/getting-started/import-ubs/9.png) +- Old Version = Go to `Housekeeping | Run Setup | General Setting` (check when is the accounting period) then insert " Closing Period". +- Sage UBS = Go to `Housekeeping | Setup | General Setup` (check when is the accounting period) then insert " Closing Period". - 2. Maintain Stock +**Scenario 1** : In UBS this accounting year = 01/01/2015 to 31/12/2015 if you want to cut off until 31/12/2015, so closing period you have to insert 12. **Scenario 2** : In UBS this accounting year = 01/01/2015 to 31/12/2015 if you want to cut off until 30/06/2015, so closing period you have to insert 6. +Then, go to `Periodic | Year End Closing`. - ![10](../../../static/img/getting-started/import-ubs/10.png) +:::info + +We strongly recommend that direct use the year end database to import instead of re-do the year end cut off at UBS. + +[Click ME to the video](https://youtu.be/s0GR8MDF5J4?t=1m57s) + +::: - 3. Maintain Stock Item +#### After Year End at UBS - ![11](../../../static/img/getting-started/import-ubs/11.png) +- After done the above steps, go to `Tools | Options | General Ledger` to setup your Financial Start Period and System Conversion Date. +- Next, `File | Data Import | UBS Account`, then select the UBS database folder. Beware of the following when selecting UBS database folder:- - 4. Sales DO / IV and Purchase Price History +:::caution - ![12](../../../static/img/getting-started/import-ubs/12.png) +DO NOT select the folder under the UBS database folder. E.g. "DATA2013" +This is because after year end cut off UBS will auto generate a new folder for old financial cut off period. + +::: + +- After select folder, under Customer/Supplier Master Account, tick the Opening Customer/Supplier - XXX options you wish to import. + +![13](../../../static/img/getting-started/ubs/after-year-end.png) + +- You may tick all the opening at the same time. (Customer Payment takes longer time to import in). +- Note : After done. May compare Customer Aging with UBS : +- In UBS Step : `2. Debtors | A. Open Item Menu Debtors | 5. Print Detail Aging` (SQL follow UBS Detail Aging) +- In Sage UBS : `2. Debtors | 7. Print Debtors Aging` (SQL follow UBS Detail Aging) + +:::info + +[Click ME to the video](https://youtu.be/s0GR8MDF5J4?t=2m54s) + +::: + +### Current Transaction Data Import + +#### Import Sales & Purchase Current Transaction + +1. Go to `File | Data Import | UBS Stock` and select the UBS Stock database folder. +2. Under Stock Item, tick the Current Transaction - XXX options that you wish to import. +3. Click Execute and wait for the import to complete. + +![14](../../../static/img/getting-started/ubs/current-trans.png) + +#### Import AP,AR,GL Current Transaction + +1. Go to `File | Data Import | UBS Stock` and select the UBS Stock database folder. +2. Under Stock Item, tick the Current Transaction - XXX options that you wish to import. +3. Click Execute and wait for the import to complete. +4. Repeat the same steps for options under Supplier Current Transaction and GL Current Transaction. + +![15](../../../static/img/getting-started/ubs/ap-ar-gl-trans.png) + +#### Troubleshooting + +1. First, it is best to tick and import one item at a time and perform backup before importing the next item. +2. This is what you can do if the import process stopped halfway because of some error:- +3. First, you can click "Copy log to clipboard" button and paste it into a notepad or just copy the last line of the log manually + +![16](../../../static/img/getting-started/ubs/troubleshoot.png) + +- Then, you can skip the record with error as shown below:- + +1. Highlight the item you're importing +2. Change the record no to the next number +3. Click Save and then click Execute again to resume + +##### Sales & Purchase + +![17](../../../static/img/getting-started/ubs/snp.png) + +##### GL, AR & AP + +![18](../../../static/img/getting-started/ubs/gl-ar-ap.png) + +:::caution + +- Please double check all data imported into SQL Account from UBS. +- We will appreciate if you would help report any issue encountered with detailed information + so we can improve the data import tool. +- Please be aware that Import Current Transaction is under BETA. + +::: + +## Housekeeping + +1. After UBS database is restored, run the following Housekeeping operation:- + +- Index All Files +- Recover Data After Power Failure +- Delete Unwanted Transactions + +:::info + +[Click ME to Get the Steps](http://www.sql.com.my/document/Import%20UBS%20Guides.pdf) + +::: - :::note +## FAQ - Optional – Tick if you need the info. +### Prompt message "Provider cannot be found. It may not be properly install" when try import - ::: +Please install [VFPOLEDBSetup.msi1](https://download.sql.com.my/customer/Fairy/vfpoledbsetup.msi) diff --git a/docs/getting-started/multi-user-setup.md b/docs/getting-started/multi-user-setup.md index 25183c63..ca65eaf9 100644 --- a/docs/getting-started/multi-user-setup.md +++ b/docs/getting-started/multi-user-setup.md @@ -8,7 +8,7 @@ tags: ["SQL Account", "Getting Started", "Network Setting"] For a multi-user scenario, a separated database server is recommended. It will serve as the main database for multiple users to access concurrently. -![7](../../static/img/getting-started/network-setting/7.png) +![7](../../static/img/getting-started/multiuser-setup/7.png) ## Database Server Setup @@ -18,15 +18,15 @@ For a multi-user scenario, a separated database server is recommended. It will s 2. If Window System Type is 64 Bits, please download `Firebird 3.0.x` **64 bit (x64)** - ![1](../../static/img/getting-started/network-setting/1.png) + ![1](../../static/img/getting-started/multiuser-setup/1.png) 3. Run Firebird setup | Press **Ok** | Select **I accept the agreement** | Click 5 times **Next** | Make sure it is "**Run Firebird in SuperServer Mode**" - ![2](../../static/img/getting-started/network-setting/2.png) + ![2](../../static/img/getting-started/multiuser-setup/2.png) 4. Leave it blank to use default password of master key. - ![3](../../static/img/getting-started/network-setting/3.png) + ![3](../../static/img/getting-started/multiuser-setup/3.png) 5. Click on **Next** | **Install** | **Next** | Click on **Finish** to complete @@ -82,7 +82,11 @@ For a multi-user scenario, a separated database server is recommended. It will s 5. Double check your settings as below and click **OK** - ![4](../../static/img/getting-started/network-setting/4.png) + :::info + Default Database Username is **SYSDBA**, Database Password is **MASTERKEY** + ::: + + ![4](../../static/img/getting-started/multiuser-setup/4.png) ## Client PC Setup @@ -92,8 +96,8 @@ For a multi-user scenario, a separated database server is recommended. It will s 3. Select Share folder (At Step 4)| Select Default DCF - ![5](../../static/img/getting-started/network-setting/5.png) + ![5](../../static/img/getting-started/multiuser-setup/5.png) - ![6](../../static/img/getting-started/network-setting/6.png) + ![6](../../static/img/getting-started/multiuser-setup/6.png) 4. Click on Firebird icon and Logon as usual. diff --git a/docs/getting-started/setup.md b/docs/getting-started/setup.md index 2a84c753..34bf507d 100644 --- a/docs/getting-started/setup.md +++ b/docs/getting-started/setup.md @@ -10,7 +10,7 @@ tags: ["SQL Account", "Getting Started", "Setup"] 1. Double click setup file to install - ![1](../../static/img/getting-started/install-sql/1.png) + ![1](../../static/img/getting-started/setup/1.png) 2. Click on @@ -18,13 +18,13 @@ tags: ["SQL Account", "Getting Started", "Setup"] 2. **Next** - ![2](../../static/img/getting-started/install-sql/2.png) + ![2](../../static/img/getting-started/setup/2.png) 3. Make sure your path is C:\eStream\SQLAccounting 4. Click **Next** - ![3](../../static/img/getting-started/install-sql/3.png) + ![3](../../static/img/getting-started/setup/3.png) 5. Make sure the folder at C:\eStream\SQLAccounting\bin @@ -38,19 +38,19 @@ tags: ["SQL Account", "Getting Started", "Setup"] If the path showing in programData is incorrect (wrong), you will need to change it to be the same as e, f, g ::: - ![4](../../static/img/getting-started/install-sql/4.png) + ![4](../../static/img/getting-started/setup/4.png) 9. Don’t change any setting , Click **Next** - ![5](../../static/img/getting-started/install-sql/5.png) + ![5](../../static/img/getting-started/setup/5.png) 10. Click **Install** - ![6](../../static/img/getting-started/install-sql/6.png) + ![6](../../static/img/getting-started/setup/6.png) 11. Click **evaluation** (system will auto create a testing company) - ![7](../../static/img/getting-started/install-sql/7.png) + ![7](../../static/img/getting-started/setup/7.png) ## New Database @@ -58,43 +58,43 @@ tags: ["SQL Account", "Getting Started", "Setup"] 2. **Logon** - ![8](../../static/img/getting-started/install-sql/8.png) + ![8](../../static/img/getting-started/setup/8.png) 3. Click on **Setting** - ![9](../../static/img/getting-started/install-sql/9.png) + ![9](../../static/img/getting-started/setup/9.png) 4. Click on **Create New Database** - ![10](../../static/img/getting-started/install-sql/10.png) + ![10](../../static/img/getting-started/setup/10.png) 5. Insert Company Name 6. Click **OK** - ![11](../../static/img/getting-started/install-sql/11.png) + ![11](../../static/img/getting-started/setup/11.png) 7. New Company Created, Double Click on it to login - ![12](../../static/img/getting-started/install-sql/12.png) + ![12](../../static/img/getting-started/setup/12.png) 8. User and Password is ADMIN - ![13](../../static/img/getting-started/install-sql/13.png) + ![13](../../static/img/getting-started/setup/13.png) ## License Activation 1. In SQL Account, go to **File** -> **Company Profile...** - ![1](../../static/img/activate-license/1.png) + ![1](../../static/img/getting-started/setup/activate-license/1.png) 2. Key in your company details (company name, address, etc), and click on the **Diskette icon** to save - ![2](../../static/img/activate-license/2.png) + ![2](../../static/img/getting-started/setup/activate-license/2.png) 3. Close the previous window, go to **File** -> **Product Activation...** - ![1](../../static/img/activate-license/1b.png) + ![1](../../static/img/getting-started/setup/activate-license/1b.png) 4. For inactivated product, **Product ID** and **Activation Code** will be *blank* here. Check if your **Company Name** and **Address** are input correctly @@ -106,11 +106,11 @@ tags: ["SQL Account", "Getting Started", "Setup"] 5. Click on **Print Activation Request** to generate a request file - ![3](../../static/img/activate-license/3.png) + ![3](../../static/img/getting-started/setup/activate-license/3.png) 6. Next, export it to a PDF file. To export, click on the *pointing down arrow* available at the right side of second icon from the left, select **Export to PDF File** - ![4](../../static/img/activate-license/4.png) + ![4](../../static/img/getting-started/setup/activate-license/4.png) 7. Save it to your local PC. You can then write an email with this PDF file attached and send it to local sales agent :::info[note] @@ -119,11 +119,11 @@ tags: ["SQL Account", "Getting Started", "Setup"] 8. When you have receive your **Product ID** and **Activation Code**, go to **File** > **Product Activation** - ![1](../../static/img/activate-license/1b.png) + ![1](../../static/img/getting-started/setup/activate-license/1b.png) 9. Key in your **Product ID** & **Activation Code**, make sure **Digit A** and **Digit B** are the same as received - ![3](../../static/img/activate-license/3.png) + ![3](../../static/img/getting-started/setup/activate-license/3.png) 10. Click **Register** and you are now officially registered 🥳 @@ -138,3 +138,35 @@ tags: ["SQL Account", "Getting Started", "Setup"] 2. Email your `Activation Request` form to us along with **bank statement / any government statement like bill electricity or water / telephone bill** as the proof for company address update. 3. Once you have **received the activation code** , kindly **repeat Step 8-10** in [License Activation](#license-activation) then update the activation code accordingly. + +## Create New Group + +1. Click on "**Back to Database Group**" + + ![create-new-group-1](../../static/img/getting-started/setup/create-new-group-1.png) + +2. Click **Create Group** + + ![create-new-group-2](../../static/img/getting-started/setup/create-new-group-2.png) + +3. Select the **Location** where you wanted to save for the DCF File. + +4. Select **Firebird Standalone Database** at Database Engine. + +5. Select the **Database Folder** & click Ok. + + :::info + **Group**: Default location is at `C:\estream\SQLAccounting\Share` + + **Database**: Default location is at `C:\estream\SQLAccounting\DB` + ::: + + ![create-new-group-3](../../static/img/getting-started/setup/create-new-group-3.png) + +6. Click Test Connection to make sure is **Blue** Status. + +7. Click OK. + +8. Double Click the **Firebird Icon**. + +9. Then can create a new database in the group. diff --git a/docs/integration/banks/maybank.md b/docs/integration/banks/maybank.md index 6c313433..d2cf4f43 100644 --- a/docs/integration/banks/maybank.md +++ b/docs/integration/banks/maybank.md @@ -9,35 +9,32 @@ tags: ["SQL Account", "Linking", "Bank", "Maybank", "Bank Reconciliation"] Navigate to `File` > `Company Profile` -![1](../../../static/img/banking/maybank/company-profile.png) - +![1](../../../static/img/integration/banks/maybank/company-profile.png) On **Company Profile**, update `Reg. No (New)` or `(Old)` same with maybank account to be linking. -![2](../../../static/img/banking/maybank/brn.png) +![2](../../../static/img/integration/banks/maybank/brn.png) ## Maybank Linking -Select ![39](../../../static/img/banking/cloud-icon.png) > `Maintain Cloud Banking` > `Maybank` +Select ![39](../../../static/img/integration/banks/cloud-icon.png) > `Maintain Cloud Banking` > `Maybank` -![3](../../../static/img/banking/maybank/linking-1.png) +![3](../../../static/img/integration/banks/maybank/linking-1.png) On **Maybank linking dialog**, click on `Connect` to link with Maybank account -![4](../../../static/img/banking/maybank/linking-2.png) - +![4](../../../static/img/integration/banks/maybank/linking-2.png) Maybank login screen will show up, **login** to your `Maybank account`, **select** `account` to link and **authorize**. -![5](../../../static/img/banking/maybank/maybank-ui.png) - +![5](../../../static/img/integration/banks/maybank/maybank-ui.png) After linking successful, account linking with payment method dialog will show up, then select the payment method to map. 1. **Click** on `Payment Method` dropdown 2. **Select** `MAYBANK` payment method to map - ![6](../../../static/img/banking/maybank/linking-3.png) + ![6](../../../static/img/integration/banks/maybank/linking-3.png) :::tip[Hints] Maybank allow **up to 3 bank account** to linking at the same time. @@ -45,46 +42,44 @@ After linking successful, account linking with payment method dialog will show u 3. **Click** `Link` - ![7](../../../static/img/banking/maybank/linking-4.png) + ![7](../../../static/img/integration/banks/maybank/linking-4.png) 4. **Account linking successful** message will show up - ![8](../../../static/img/banking/maybank/linking-5.png) + ![8](../../../static/img/integration/banks/maybank/linking-5.png) 5. **Connected** status will display - ![9](../../../static/img/banking/maybank/linking-6.png) - + ![9](../../../static/img/integration/banks/maybank/linking-6.png) ### Disconnect Maybank Linking 1. On Maybank linking dialog, **Click** on `Disconnect` - ![10](../../../static/img/banking/maybank/disconnect-1.png) + ![10](../../../static/img/integration/banks/maybank/disconnect-1.png) 2. A confirm dialog will prompt, **Click** `Yes` to disconnect - ![11](../../../static/img/banking/maybank/disconnect-2.png) + ![11](../../../static/img/integration/banks/maybank/disconnect-2.png) 3. **Disconnected** message will shhow up - ![12](../../../static/img/banking/maybank/disconnect-3.png) - + ![12](../../../static/img/integration/banks/maybank/disconnect-3.png) ## Bank Reconciliation 1. `General Ledger` > `Bank Reconciliation` - ![13](../../../static/img/banking/maybank/bank-recon-1.png) + ![13](../../../static/img/integration/banks/maybank/bank-recon-1.png) 2. Select `Bank Statement Date` and select `Maybank` payment method that linked to Mayabank account - ![14](../../../static/img/banking/maybank/bank-recon-2.png) + ![14](../../../static/img/integration/banks/maybank/bank-recon-2.png) 3. Select `Date Between` of transactions to load **(up to 60 days of transaction history)** and click `Load Statement` - ![15](../../../static/img/banking/maybank/bank-recon-3.png) + ![15](../../../static/img/integration/banks/maybank/bank-recon-3.png) 4. All transaction loaded from Maybank API and mapped transactions will auto match with SQL Account transaction - ![16](../../../static/img/banking/maybank/bank-recon-4.png) \ No newline at end of file + ![16](../../../static/img/integration/banks/maybank/bank-recon-4.png) diff --git a/docs/integration/banks/rhb.md b/docs/integration/banks/rhb.md index a6624d63..acd766c6 100644 --- a/docs/integration/banks/rhb.md +++ b/docs/integration/banks/rhb.md @@ -13,44 +13,43 @@ tags: ["SQL Account", "Integration", "Bank", "RHB", "Bank Reconciliation"] Existing SQL user - Log on as usual - New SQL user - Click ![0](../../../static/img/banking/rhb/0.png) to create database. + New SQL user - Click ![0](../../../static/img/integration/banks/rhb/0.png) to create database. - ![1](../../../static/img/banking/rhb/1.png) + ![1](../../../static/img/integration/banks/rhb/1.png) 2. Click `Create Sample Database` -> `OK`. - ![2](../../../static/img/banking/rhb/2.png) - + ![2](../../../static/img/integration/banks/rhb/2.png) ### Maintain Bank Account in SQL 1. Select `GL menu` - > `Maintain Account` - ![4](../../../static/img/banking/rhb/4.png) + ![4](../../../static/img/integration/banks/rhb/4.png) 2. Select `CASH AT BANK` -> `New` - ![5](../../../static/img/banking/rhb/5.png) + ![5](../../../static/img/integration/banks/rhb/5.png) 3. Fill in the information and click `OK`. - Blue box is the mandatory field. - ![6](../../../static/img/banking/rhb/6.png) + ![6](../../../static/img/integration/banks/rhb/6.png) ### Link RHB Reflex Account 1. Select `Banking menu` - > `RHB Reflex` - ![7](../../../static/img/banking/rhb/7.png) + ![7](../../../static/img/integration/banks/rhb/7.png) 2. Click `here` for RHB Reflex user linking guide - ![8](../../../static/img/banking/rhb/8.png) + ![8](../../../static/img/integration/banks/rhb/8.png) 3. Tick acknowledgement box - > click `Next` - ![9](../../../static/img/banking/rhb/9.png) + ![9](../../../static/img/integration/banks/rhb/9.png) 4. Fill in the information @@ -60,29 +59,29 @@ tags: ["SQL Account", "Integration", "Bank", "RHB", "Bank Reconciliation"] 5. Click `Link` - ![10](../../../static/img/banking/rhb/10.png) + ![10](../../../static/img/integration/banks/rhb/10.png) - ![11](../../../static/img/banking/rhb/11.png) + ![11](../../../static/img/integration/banks/rhb/11.png) 6. Login the registered email to verify the user linking within 10 minutes. - ![12](../../../static/img/banking/rhb/12.png) + ![12](../../../static/img/integration/banks/rhb/12.png) 7. Click the hyperlink (company subsidiary name) in the email from SQL Account. - ![13](../../../static/img/banking/rhb/13.png) + ![13](../../../static/img/integration/banks/rhb/13.png) 8. Assign RHB bank account to the desired payment method. - ![14](../../../static/img/banking/rhb/14.png) + ![14](../../../static/img/integration/banks/rhb/14.png) 9. Click `Finish` - ![15](../../../static/img/banking/rhb/15.png) + ![15](../../../static/img/integration/banks/rhb/15.png) 10. Click `OK`, your RHB Reflex bank account have now linked. - ![16](../../../static/img/banking/rhb/16.png) + ![16](../../../static/img/integration/banks/rhb/16.png) ## Unlink RHB Reflex Account @@ -93,25 +92,25 @@ User is required to unlink RHB Reflex account if: Steps to unlink: - 1. Select ![39](../../../static/img/banking/cloud-icon.png) -> `RHB Reflex` + 1. Select ![39](../../../static/img/integration/banks/cloud-icon.png) -> `RHB Reflex` - ![36](../../../static/img/banking/rhb/36.png) + ![36](../../../static/img/integration/banks/rhb/36.png) 2. Click "Unlink" - ![37](../../../static/img/banking/rhb/37.png) + ![37](../../../static/img/integration/banks/rhb/37.png) - ![38](../../../static/img/banking/rhb/38.png) + ![38](../../../static/img/integration/banks/rhb/38.png) ## Bank Balance Inquiry 1. Select `Banking menu` -> `Bank Balance Inquiry` - ![17](../../../static/img/banking/rhb/17.png) + ![17](../../../static/img/integration/banks/rhb/17.png) 2. Bank balance inquiry details for RHB Reflex bank accounts will be populated. - ![18](../../../static/img/banking/rhb/18.png) + ![18](../../../static/img/integration/banks/rhb/18.png) 3. Close the window and reopen for real-time updated balance. @@ -119,17 +118,17 @@ Steps to unlink: 1. Select `GL menu` - > `Bank Reconciliation` -> click `New` - ![33](../../../static/img/banking/rhb/33.png) + ![33](../../../static/img/integration/banks/rhb/33.png) 2. Select Bank Statement Date and Display Period 3. Click `Apply` - ![34](../../../static/img/banking/rhb/34.png) + ![34](../../../static/img/integration/banks/rhb/34.png) 4. Click `Load Statement`, transaction history (T- 1 ) will be populated. - ![35](../../../static/img/banking/rhb/35.png) + ![35](../../../static/img/integration/banks/rhb/35.png) 5. Click Match to perform reconciliation between SQL and RHB bank statement transaction. @@ -150,19 +149,19 @@ Steps to unlink: 1. Select `Supplier menu` - > `Maintain Supplier` - ![19](../../../static/img/banking/rhb/19.png) + ![19](../../../static/img/integration/banks/rhb/19.png) 2. Click `New` - ![20](../../../static/img/banking/rhb/20.png) + ![20](../../../static/img/integration/banks/rhb/20.png) 3. Fill in supplier details and click `Save` - ![21](../../../static/img/banking/rhb/21.png) + ![21](../../../static/img/integration/banks/rhb/21.png) 4. Select `Bank Account` - > click `+` - ![22](../../../static/img/banking/rhb/22.png) + ![22](../../../static/img/integration/banks/rhb/22.png) 1. Select Bank for RHB 3rd Party Transfer, IBG and Instant Transfer. @@ -176,7 +175,7 @@ Steps to unlink: 4. ID number - ![23](../../../static/img/banking/rhb/23.png) + ![23](../../../static/img/integration/banks/rhb/23.png) 2. Select JomPAY for Bill Payment @@ -186,7 +185,7 @@ Steps to unlink: 2. JomPAY reference 1 - ![24](../../../static/img/banking/rhb/24.png) + ![24](../../../static/img/integration/banks/rhb/24.png) 3. Select DuitNow for DuitNow proxy transfer @@ -196,7 +195,7 @@ Steps to unlink: 3. ID number2 - ![25](../../../static/img/banking/rhb/25.png) + ![25](../../../static/img/integration/banks/rhb/25.png) ### Payment mode @@ -204,7 +203,7 @@ Steps to unlink: 1. Select `Supplier` -> `Supplier Payment` -> click `New` - ![26](../../../static/img/banking/rhb/26.png) + ![26](../../../static/img/integration/banks/rhb/26.png) 2. Select Supplier Code : created in Maintain Supplier @@ -220,26 +219,26 @@ Steps to unlink: 7. Reflex Online Banking will be pop-out, click `Submit` to proceed. - ![27](../../../static/img/banking/rhb/27.png) + ![27](../../../static/img/integration/banks/rhb/27.png) 8. Enter SQL password and click `Submit`. - ![28](../../../static/img/banking/rhb/28.png) + ![28](../../../static/img/integration/banks/rhb/28.png) 9. Payment status will be populated after submission. Successful payment initiation status is `Pending`, otherwise please refer to the error message is shown or refer RHB Reflex for further details. - ![29](../../../static/img/banking/rhb/29.png) + ![29](../../../static/img/integration/banks/rhb/29.png) 10. Login to RHB Reflex for payment authorization. - ![30](../../../static/img/banking/rhb/30.png) + ![30](../../../static/img/integration/banks/rhb/30.png) ### Payment - IBG 1. Select `Supplier` -> `Supplier Payment` -> click `New` - ![26](../../../static/img/banking/rhb/26.png) + ![26](../../../static/img/integration/banks/rhb/26.png) 2. Select Supplier Code : created in Maintain Supplier @@ -257,25 +256,25 @@ Steps to unlink: 8. Reflex Online Banking will be pop-out, click `Submit` to proceed. - ![27](../../../static/img/banking/rhb/27.png) + ![27](../../../static/img/integration/banks/rhb/27.png) 9. Enter SQL password and click `Submit`. - ![28](../../../static/img/banking/rhb/28.png) + ![28](../../../static/img/integration/banks/rhb/28.png) 10. Payment status will be populated. Successful payment initiation status is `Pending`, otherwise please refer to the error message. - ![29](../../../static/img/banking/rhb/29.png) + ![29](../../../static/img/integration/banks/rhb/29.png) 11. Login to RHB Reflex for payment authorization. - ![30](../../../static/img/banking/rhb/30.png) + ![30](../../../static/img/integration/banks/rhb/30.png) ### Payment – Instant Transfer 1. Select `Supplier` -> `Supplier Payment` -> click `New` - ![26](../../../static/img/banking/rhb/26.png) + ![26](../../../static/img/integration/banks/rhb/26.png) 2. Select Supplier Code : created in Maintain Supplier @@ -293,21 +292,21 @@ Steps to unlink: 8. Reflex Online Banking will be pop-out, click `Submit` to proceed. - ![27](../../../static/img/banking/rhb/27.png) + ![27](../../../static/img/integration/banks/rhb/27.png) 9. Enter SQL password and click `Submit`. - ![28](../../../static/img/banking/rhb/28.png) + ![28](../../../static/img/integration/banks/rhb/28.png) 10. Payment status will be populated. Successful payment initiation status is `Pending`, otherwise please refer to the error message. - ![29](../../../static/img/banking/rhb/29.png) + ![29](../../../static/img/integration/banks/rhb/29.png) 11. Login to RHB Reflex for payment authorization. - ![30](../../../static/img/banking/rhb/30.png) + ![30](../../../static/img/integration/banks/rhb/30.png) ### Payment – DuitNow @@ -315,7 +314,7 @@ DuitNow transfer via proxy is supported includes IC Number, Business Registratio 1. Select `Supplier` -> `Supplier Payment` -> click `New` - ![26](../../../static/img/banking/rhb/26.png) + ![26](../../../static/img/integration/banks/rhb/26.png) 2. Select Supplier Code : created in Maintain Supplier @@ -331,27 +330,27 @@ DuitNow transfer via proxy is supported includes IC Number, Business Registratio 7. Reflex Online Banking will be pop-out, click `Submit` to proceed. - ![27](../../../static/img/banking/rhb/27.png) + ![27](../../../static/img/integration/banks/rhb/27.png) 8. Enter SQL password and click `Submit`. - ![28](../../../static/img/banking/rhb/28.png) + ![28](../../../static/img/integration/banks/rhb/28.png) 9. Payment status will be populated. Successful payment initiation status is `Pending`, otherwise please refer to the error message. - ![29](../../../static/img/banking/rhb/29.png) + ![29](../../../static/img/integration/banks/rhb/29.png) 10. Login to RHB Reflex for payment authorization. - ![30](../../../static/img/banking/rhb/30.png) + ![30](../../../static/img/integration/banks/rhb/30.png) ### Payment – JomPay 1. Select `Supplier` -> `Supplier Payment` -> click `New` - ![26](../../../static/img/banking/rhb/26.png) + ![26](../../../static/img/integration/banks/rhb/26.png) 2. Select Supplier Code : created in Maintain Supplier @@ -367,20 +366,20 @@ DuitNow transfer via proxy is supported includes IC Number, Business Registratio 7. Reflex Online Banking will be pop-out, click `Submit` to proceed. - ![27](../../../static/img/banking/rhb/27.png) + ![27](../../../static/img/integration/banks/rhb/27.png) 8. Enter SQL password and click `Submit`. - ![28](../../../static/img/banking/rhb/28.png) + ![28](../../../static/img/integration/banks/rhb/28.png) 9. Payment status will be populated. Successful payment initiation status is `Pending`, otherwise please refer to the error message. - ![29](../../../static/img/banking/rhb/29.png) + ![29](../../../static/img/integration/banks/rhb/29.png) 10. Login to RHB Reflex for payment authorization. - ![30](../../../static/img/banking/rhb/30.png) + ![30](../../../static/img/integration/banks/rhb/30.png) ### Payment Status Update @@ -388,11 +387,11 @@ To perform payment status update, click on the green icon. 1. Success – Payment has successfully processed by the bank - ![31](../../../static/img/banking/rhb/31.png) + ![31](../../../static/img/integration/banks/rhb/31.png) 2. Unsuccess – Payment has rejected by the bank, please login to RHB Reflex for further details or contact RHB Reflex customer service @ **+603-9206 8118** to speak to Reflex agent. - ![32](../../../static/img/banking/rhb/32.png) + ![32](../../../static/img/integration/banks/rhb/32.png) ## Support Channel diff --git a/docs/integration/bi-dashboard.md b/docs/integration/bi-dashboard.md index 52c201f6..29f2e30b 100644 --- a/docs/integration/bi-dashboard.md +++ b/docs/integration/bi-dashboard.md @@ -13,36 +13,36 @@ Contact your SQL Service Consultant to register your email with SQL for BI Dashb 1. Go to [SQL Business Intelligence Dashboard](https://bi.sql.com.my/), click on **Need an account?** - ![1](../../static/img/dashboard/first-time-login/1.png) + ![1](../../static/img/integration/bi-dashboard/1.png) 2. Enter your registered email with SQL, click on send verification email - ![2](../../static/img/dashboard/first-time-login/2.png) + ![2](../../static/img/integration/bi-dashboard/2.png) 3. Check your mailbox, and click on Sign in to SQL B.I Dashboard - ![3](../../static/img/dashboard/first-time-login/3.png) + ![3](../../static/img/integration/bi-dashboard/3.png) 4. Enter your registered email & click sign in - ![4](../../static/img/dashboard/first-time-login/4.png) + ![4](../../static/img/integration/bi-dashboard/4.png) 5. Enter your name & click save - ![5](../../static/img/dashboard/first-time-login/5.png) + ![5](../../static/img/integration/bi-dashboard/5.png) 6. Enter your password, repeat password & click save - ![6](../../static/img/dashboard/first-time-login/6.png) + ![6](../../static/img/integration/bi-dashboard/6.png) 7. Read and click agree the term of use - ![7](../../static/img/dashboard/first-time-login/7.png) + ![7](../../static/img/integration/bi-dashboard/7.png) 8. Read and click agree the privacy policy - ![8](../../static/img/dashboard/first-time-login/8.png) + ![8](../../static/img/integration/bi-dashboard/8.png) 9. Dashboard login successfully - ![9](../../static/img/dashboard/first-time-login/9.png) + ![9](../../static/img/integration/bi-dashboard/9.png) diff --git a/docs/integration/cloud-attachment.md b/docs/integration/cloud-attachment.md index 7c9b5f5a..08b83826 100644 --- a/docs/integration/cloud-attachment.md +++ b/docs/integration/cloud-attachment.md @@ -13,15 +13,15 @@ tags: ["SQL Account", "Integration", "Attachment"] 3. **Turn-ON** the Attachment - ![1](../../static/img/miscellaneous/cloud-attachment/1.png) + ![1](../../static/img/integration/cloud-attachment/1.png) 4. Click on **Log In —> Login with Google** - ![2](../../static/img/miscellaneous/cloud-attachment/2.png) + ![2](../../static/img/integration/cloud-attachment/2.png) 5. After login with gmail, click on **Grand Access** - ![3](../../static/img/miscellaneous/cloud-attachment/3.png) + ![3](../../static/img/integration/cloud-attachment/3.png) 6. Account connected (Granted success) @@ -29,16 +29,16 @@ tags: ["SQL Account", "Integration", "Attachment"] 1. Click on **Attachments**. - ![4](../../static/img/miscellaneous/cloud-attachment/4.png) + ![4](../../static/img/integration/cloud-attachment/4.png) 2. Click the **arrow-keydown**.Choose **Cloud**. - ![5](../../static/img/miscellaneous/cloud-attachment/5.png) + ![5](../../static/img/integration/cloud-attachment/5.png) 3. You can attach multiple different document type (like excel,doc,picture,pdf,etc) - ![7](../../static/img/miscellaneous/cloud-attachment/7.png) + ![7](../../static/img/integration/cloud-attachment/7.png) 4. To delete the attachment files permanently. See the screenshot below. - ![8](../../static/img/miscellaneous/cloud-attachment/8.png) + ![8](../../static/img/integration/cloud-attachment/8.png) diff --git a/docs/integration/e-commerce/FAQ.md b/docs/integration/e-commerce/FAQ.md new file mode 100644 index 00000000..b24a763b --- /dev/null +++ b/docs/integration/e-commerce/FAQ.md @@ -0,0 +1,200 @@ +--- +title: E Commerce FAQ +description: FAQ in E Commerce for SQL Account +slug: /integration/ecommerce/FAQ +tags: ["SQL Account", "Integration", "e-Commerce",] +--- + +## Where and How do System Keep the Product Information? + +As default , all the eCommerce Product Information will be kept in *Maintain Item | Alt Tab* + +| **Platform** | **Platform Field** | +|----------------|---------------------------| +| **Shopee** | Item ID, Item SKU | +| **Lazada** | Seller SKU, Shop SKU | +| **WooCommerce**| SKU | +| **AddToCart** | SKU, Item ID | + +## What is the Max Character that the System is allowed to Keep in Stock Alternative ? + +Max Character allow is + +- 30 (5.2021.913.805 & below) +- 35 (5.2021.914.806 & above) + +## Why is that after POst and Refetch the Products and Item Codes are duplicated ? + +Its due to user set same **SKU** at the eCommerce Platform for different products. + +## How does the System Post Shipping Fee Amount ? + +For **Shopee** it uses the following formula : + +```math +shipping fee = (escrow + refund) - product price - commission - service - transaction +``` + +- For **Lazada** & **WooCommerce** it calculates directly from the platform field. +- It will **not post** if the Shipping fee is **pay by the buyer** + +## How to handle Serial Number ? + +If using Packing List : + * You can use **To Ship** Status Post to Sales Order first, then manually transfer to Invoice. +Make sure enter the **Invoice Doc No = Order No** and Serial Number as well. + +If Not using Packing List : + * Just normal post to Invoice then enter the Serial Number after post + +## How to split different Platforms Sales ? + +You can use **Project Code** for each Platform + +## How does the system handles Opening Invoice ? + +- Users will need to fetch & post the last **1-2 months** orders (into sales invoice) + +- During load payment, if system detect have earlier system conversion date , it will prompt red alert please sync all, all you need to do is **right click**, **check** past invoice & **post** past invoice. + +- if future payment cycle have any adjustment related to past invoice, system will automatically update both SL_IV(itemise detail) & AR_IV (DocAmt). + +## Where to download the Statement for each Pplatform ? + +May refer link below : + +- [Lazada](https://sellercenter.lazada.com.my/seller/helpcenter/guide-to-view-the-fees-your-account-statement-8809.html?spm=a2a16.helpcenter-psc-article.articles-list.1.1af31e466syh4Y) + +- [Shopee](https://seller.shopee.com.my/edu/article/1651) + +## What or Which Transaction will be used for Setting ? + + ![e-commerce-settings](../../../static/img/integration/e-commerce/different/e-commerce-settings.png) + + | **Field** | **Description** | +|--------------|---------------------------------------------------------------------------------| +| **Shipping** | - Shipping Fee (Shopee, Lazada & WooCommerce) - Auto. Shipping Fee Subsidy (by Lazada) - Shipping Fee (Paid By Customer) (Lazada) - Shipping Fee Voucher (by Lazada) | +| **Transaction** | - Commission Fee (Shopee) - Service Fee (Shopee) - Transaction Fee (Shopee) - Payment Fee (Lazada & TikTok) - Affiliate Commission (TikTok) - Platform Commission (TikTok) - Commission (Lazada) - Lazcoin Discount (Lazada) - Free Shipping Max Fee (Lazada) - Promotional Charges Vouchers (Lazada) - Sponsored Affiliates (Lazada) - Lazada Bonus (Lazada) - Lazada Bonus - LZD co-fund (Lazada) | +| **Voucher** | - Seller Voucher (Shopee) - Lazcoin Discount (Lazada) - Free Shipping Max Fee (Lazada) - Voucher (WooCommerce) | +| **Discount** | For bundle deal. Example: 1 item = RM 5, if you buy 3 = RM 12. System will post discount as RM 3. | +| **Claim** | - Any Lazada statement with type "Claim". - Examples: damage claim, lost claim, shipping claim, etc. | + +## Where is the Help File for each PLatforms + +May refer to links below : + +- [Lazada](https://sellercenter.lazada.com.my/seller/helpcenter/) +- [Shopee](https://seller.shopee.com.my/edu/home) +- [WooCommerce](https://docs.woocommerce.com/) + +## Why non stock control item code transferable is set to False(untick) ? + +This is because removing the non stock control item code so that it is shown in **Outstanding Report**. + +## Why is it when loading Payment Status it showing "Missing Item Code" ? + +This happens when user : + +- Forget to **Map** the Itemcode in SQL Accounting +- The **SKU** in platform are **Deleted** + +- Solution: **Sync** the Product again & **Map** again for all missing itemcode + +## How does the system handle Combo Peoduct in PLatforms ? + +- In SQL Accounting it use **BOM(Bill of Materials) Template** as Detail Itemcode to deduct. + +- Below is Example Selling Mobile Phone with Power Bank : + +![combo-product](../../../static/img/integration/e-commerce/different/combo-product.png) + +## Why Expired Date COlumn keep showing Wrong Date even after relogin to the platform ? + +Its due to your pc **system date time** is not correctly set... + +- Solution : + 1. Click Windows , search Date & Time Settings + 2. Make sure You select correct **Time zone** + ![system-date-time](../../../static/img/integration/e-commerce/different/system-date-time.png) + 3. Click Sync + 4. Try Relogin the platform again in SQL Accounting + +## Shopee + +
+ Shopee - click to expand + +### How does the system post when Shipping Fees Charges is higher than Seller Paid Amount that causes the Escrow Amount becomes negative ? + +![e-commerce-order-detail](../../../static/img/integration/e-commerce/different/e-commerce-order-detail.png) + +System will Post to **Sales CN** and set Qty in Negative (In the **Order Tab**). +When Load in Income statement(.xls) files into **Payment Tab**, system will auto post to **Customer Refund**. + +### How system post for Order Cancelled with Posted Invoice ? + +This usually happens when Buyer is not at Home after a few attempts sent and seller decided to cancel the Order. + +![cancelled-order](../../../static/img/integration/e-commerce/different/cancelled-order.png) + +### How System handle Payment Withdraw ? + +[How do i get my payment back?](https://help.shopee.com.my/portal/4/article/173133-%5BShopeePay%5D-ShopeePay-App-Withdrawals?previousPage=search%20recommendation%20bar) + +[How to Post In SQL Accounting? Video](https://www.youtube.com/watch?v=PloG3CeHA1w) + +### Why when i load the payments , the date looks incorrect ? + +Try redownload again from shopee as shopee had updated the format. + +![payments-date-incorrect](../../../static/img/integration/e-commerce/different/payments-date-incorrect.png) + +
+ +## Lazada + +
+ Lazada - click to expand + +### How system Post Marketing Fees? + +When load in Finance statement(.csv) file in **Payment Tab** (marketing fees without Order No). +System will post to Sales CN (Transaction Fee) and Customer Refund. + +### How system handle Reversal Item Price and Adjustment Item Charge? + +System will Delete the CN once load payment file(if the lazada payment release more than Outstanding Invoice amount) + +### How system handle for first release payment in negative due to shipping fees under charge customer? + +When load payment, once release amount is in **negative**, system will **delete earlier Invoice**, and raise CN(amount will be exactly same as Payment file) and Refund. + +When **2nd payment(Adjustment)**, if the amount is in negative, append to CN and Refund, if in positive, will raise Invoice(Adjustment value) and Payment. + +### Why the Invoice Amount is changes once Payment is loaded? + +It is due to Shipping Fee updated. +Lazada actual Shipping Fee only known **after Payment** is Loaded. + +### What is the Claim Field for & What GL Account to Set? + +This only use when there is Damage Claim from Lazada. +You can create New Account under Sales as it part of Sales too. + +### Load Payment shown Status As Payment ref id not found + +It means Lazada not yet release the payment to Seller & SQL **will not** post without **payment ref ID**. + +### Where to download the Logistic Billing detail? + +You may refer [Logistics Billing System - updates to shipping fee charges and Account Statement](https://bixi.alicdn.com/punish/punish:resource:template:lazadaSpace:exefqahalk_33139279.html?qrcode=zNg-VXbPThepB3VqrYSNnA|aNNfRA|MWrYXQ_0|BgLVzQ&uuid=ccd83e5576cf4e17a907756aad848d9c&action=deny&origin=https%3A%2F%2Fuac-pre.lazada.com%3A443%2Ftbpass%2Fjump) + +### How do system handle for Same Oder Number from different Store? + +System will add Last 4 character Store Id for the duplicate(for 2nd & above Invoice) + +### When Fetch Prompt Api access frequency exceed the limit + +This happen when click too many times fetch. Just close whole window & try again + +
diff --git a/docs/integration/e-commerce/easystore.md b/docs/integration/e-commerce/easystore.md index 279bdf8e..947aef3e 100644 --- a/docs/integration/e-commerce/easystore.md +++ b/docs/integration/e-commerce/easystore.md @@ -8,13 +8,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] ## Maintain Cloud Account -1. Select **![39](../../../static/img/banking/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) +1. Select **![39](../../../static/img/integration/banks/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) - ![1](../../../static/img/e-commerce/easyStore/1.png) + ![1](../../../static/img/integration/e-commerce/easyStore/1.png) 2. Click on NEW - ![2](../../../static/img/e-commerce/easyStore/2.png) + ![2](../../../static/img/integration/e-commerce/easyStore/2.png) 1. Enter Description "**EasyStore**" @@ -24,17 +24,17 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 3. Paste your Easy Store URL and press **GO** - ![3](../../../static/img/e-commerce/easyStore/3.png) + ![3](../../../static/img/integration/e-commerce/easyStore/3.png) 4. **Login** with your credentials and then press **Install** - ![4](../../../static/img/e-commerce/easyStore/4.png) + ![4](../../../static/img/integration/e-commerce/easyStore/4.png) - ![5](../../../static/img/e-commerce/easyStore/5.png) + ![5](../../../static/img/integration/e-commerce/easyStore/5.png) 5. Press SAVE - ![6](../../../static/img/e-commerce/easyStore/6.png) + ![6](../../../static/img/integration/e-commerce/easyStore/6.png) - Once linking Successful, system will be returned status Linking Success Message. @@ -44,11 +44,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 1. Create EasyStore Voucher / Discount Account Under Sales Adjustment - ![7](../../../static/img/e-commerce/easyStore/7.png) + ![7](../../../static/img/integration/e-commerce/easyStore/7.png) 2. Create Shipping and Transaction Fee under Expenses - ![8](../../../static/img/e-commerce/easyStore/8.png) + ![8](../../../static/img/integration/e-commerce/easyStore/8.png) :::info It is up to company want to create under which category. Some of the Company will create under Cost of Goods Sold. @@ -56,7 +56,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 2. Customer > Maintain Customer - ![9](../../../static/img/e-commerce/easyStore/9.png) + ![9](../../../static/img/integration/e-commerce/easyStore/9.png) 3. Stock > Maintain Stock Group @@ -64,11 +64,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 1. Create Discount Stock Group - ![10](../../../static/img/e-commerce/easyStore/10.png) + ![10](../../../static/img/integration/e-commerce/easyStore/10.png) 2. Create Voucher Stock Group - ![11](../../../static/img/e-commerce/easyStore/11.png) + ![11](../../../static/img/integration/e-commerce/easyStore/11.png) - Repeat same step to create for Shipping and Transaction Fees Stock Group @@ -76,11 +76,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 1. Create Discount Stock Item - ![12](../../../static/img/e-commerce/easyStore/12.png) + ![12](../../../static/img/integration/e-commerce/easyStore/12.png) 2. Create Voucher Item Code - ![13](../../../static/img/e-commerce/easyStore/13.png) + ![13](../../../static/img/integration/e-commerce/easyStore/13.png) - Repeat same step to create for Shipping and Transaction Fees Item Code @@ -88,15 +88,15 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 1. Click on - >Easy Store - ![14](../../../static/img/e-commerce/easyStore/14.png) + ![14](../../../static/img/integration/e-commerce/easyStore/14.png) - ![15](../../../static/img/e-commerce/easyStore/15.png) + ![15](../../../static/img/integration/e-commerce/easyStore/15.png) 2. Click on Account Tab > Double click on your account 1. Mapping Code - ![16](../../../static/img/e-commerce/easyStore/16.png) + ![16](../../../static/img/integration/e-commerce/easyStore/16.png) ## Product Tab @@ -104,39 +104,39 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 1. Click on Product Tab > Click on Fetch Button > System will return the message when fetching done. - ![17](../../../static/img/e-commerce/easyStore/17.png) + ![17](../../../static/img/integration/e-commerce/easyStore/17.png) 2. Verify Status: Exist in Stock Item are meaning SQL and EasyStore Shop SKU are having the same Item Code. - ![18](../../../static/img/e-commerce/easyStore/18.png) + ![18](../../../static/img/integration/e-commerce/easyStore/18.png) If you decide to use the same item code as EasyStore Shop SKU, click on select All records > press on Post button for the first time so system will remember the settings. - ![19](../../../static/img/e-commerce/easyStore/19.png) + ![19](../../../static/img/integration/e-commerce/easyStore/19.png) 3. Verify Status: Success when posting done - ![20](../../../static/img/e-commerce/easyStore/20.png) + ![20](../../../static/img/integration/e-commerce/easyStore/20.png) :::note Once you post successful, system will keep the ID in Stock Item as Alternative Item ::: - ![21](../../../static/img/e-commerce/easyStore/21.png) + ![21](../../../static/img/integration/e-commerce/easyStore/21.png) 4. You can still decide to map to different item code (system will auto ticked the record you change the item code), once done all, click on POST button. - ![22](../../../static/img/e-commerce/easyStore/22.png) + ![22](../../../static/img/integration/e-commerce/easyStore/22.png) ## Orders Tab 1. Click on Orders Tab - ![23](../../../static/img/e-commerce/easyStore/23.png) + ![23](../../../static/img/integration/e-commerce/easyStore/23.png) 2. Status – Default Post Action - ![24](../../../static/img/e-commerce/easyStore/24.png) + ![24](../../../static/img/integration/e-commerce/easyStore/24.png) |Status|Posting To Sales Quotation|Posting to Sales Invoice| |---|---|---| @@ -152,11 +152,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 1. Select Date Range > Click on Refresh Order - ![26](../../../static/img/e-commerce/easyStore/26.png) + ![26](../../../static/img/integration/e-commerce/easyStore/26.png) Please be patient, system is on the way to fetch the order from EasyStore - ![27](../../../static/img/e-commerce/easyStore/27.png) + ![27](../../../static/img/integration/e-commerce/easyStore/27.png) System will return the message when Fetching Done, Press OK. @@ -164,23 +164,23 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 1. Click on the status you want to post the order, let us take an example on Paid Status > Ticked all > Click on Post - ![28](../../../static/img/e-commerce/easyStore/28.png) + ![28](../../../static/img/integration/e-commerce/easyStore/28.png) 2. If you did not tick on any order when do the posting, system will raise a message: You have not selected any order. Would you like to select all? If you would like to post all > Press Yes - ![29](../../../static/img/e-commerce/easyStore/29.png) + ![29](../../../static/img/integration/e-commerce/easyStore/29.png) Please be patient to wait for the order posting. - ![30](../../../static/img/e-commerce/easyStore/30.png) + ![30](../../../static/img/integration/e-commerce/easyStore/30.png) 3. Click on OK when done posting - ![31](../../../static/img/e-commerce/easyStore/31.png) + ![31](../../../static/img/integration/e-commerce/easyStore/31.png) 5. Verify Status - ![32](../../../static/img/e-commerce/easyStore/32.png) + ![32](../../../static/img/integration/e-commerce/easyStore/32.png) 1. Posted - Earlier Order posted before, system will ignore. @@ -198,23 +198,23 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 3. Click on Post - ![33](../../../static/img/e-commerce/easyStore/33.png) + ![33](../../../static/img/integration/e-commerce/easyStore/33.png) 6. Sales Invoice - Example of Sales Invoice posted from EasyStore | Orders. - ![34](../../../static/img/e-commerce/easyStore/34.png) + ![34](../../../static/img/integration/e-commerce/easyStore/34.png) - ![35](../../../static/img/e-commerce/easyStore/35.png) + ![35](../../../static/img/integration/e-commerce/easyStore/35.png) 7. Status – Others than Default POST Action - Beside the post button, press the black triangle, and select “Post” to post it to sales invoice. - ![36](../../../static/img/e-commerce/easyStore/36.png) + ![36](../../../static/img/integration/e-commerce/easyStore/36.png) - ![37](../../../static/img/e-commerce/easyStore/37.png) + ![37](../../../static/img/integration/e-commerce/easyStore/37.png) ## FAQ @@ -222,13 +222,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 1. Login to your EasyStore account and go to Channls > and click Online Store - ![38](../../../static/img/e-commerce/easyStore/38.png) + ![38](../../../static/img/integration/e-commerce/easyStore/38.png) 2. Then click Domains and copy the “easy.co” domain. - ![39](../../../static/img/e-commerce/easyStore/39.png) + ![39](../../../static/img/integration/e-commerce/easyStore/39.png) - ![40](../../../static/img/e-commerce/easyStore/40.png) + ![40](../../../static/img/integration/e-commerce/easyStore/40.png) 2. How to do if have multiple location for each store? @@ -242,18 +242,18 @@ tags: ["SQL Account", "Integration", "e-Commerce", "EasyStore"] 4. Fetch Order raise error : E097 : Offset and limit sum 5100 must less than 5000, request id : 2101235d16xxxx - ![41](../../../static/img/e-commerce/easyStore/41.png) + ![41](../../../static/img/integration/e-commerce/easyStore/41.png) - EasyStore API Returned error as too huge transaction being fetched, the only way is to shorten the date period. 5. The specified access token is invalid or expired. - ![42](../../../static/img/e-commerce/easyStore/42.png) + ![42](../../../static/img/integration/e-commerce/easyStore/42.png) - EasyStore API link expired, you are required to go back maintain cloud and link again with EasyStore platform (Refer Step 1.1.3 – 1.1.5) 6. API access frequently exceeds the limit. This ban will last 1 seconds. - ![43](../../../static/img/e-commerce/easyStore/43.png) + ![43](../../../static/img/integration/e-commerce/easyStore/43.png) - Error appears after click Fetch. Solution, close your EasyStore tab in SQL Account > re-open it > click “Fetch” button again diff --git a/docs/integration/e-commerce/lazada-vs-shopee.md b/docs/integration/e-commerce/lazada-vs-shopee.md index fcafeacd..41521e72 100644 --- a/docs/integration/e-commerce/lazada-vs-shopee.md +++ b/docs/integration/e-commerce/lazada-vs-shopee.md @@ -12,20 +12,20 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Posting order", "Shopee", "L 1. When you post order in Shopee, all transaction fee / shipping fees are finalised when post order to invoice. SQL captures the **escrow amount** as the **Net Total** - ![1](../../../static/img/e-commerce/different/1.png) + ![1](../../../static/img/integration/e-commerce/different/1.png) 2. When post payment, the payment amount will tally with the invoice amount. No adjustment is made. - ![2](../../../static/img/e-commerce/different/2.png) + ![2](../../../static/img/integration/e-commerce/different/2.png) ### Shopee Order Returned 1. When a returned order is posted into SQL, it will be posted into SQL Invoice and will be transferred to Credit Note. - ![3](../../../static/img/e-commerce/different/3.png) + ![3](../../../static/img/integration/e-commerce/different/3.png) - ![4](../../../static/img/e-commerce/different/4.png) + ![4](../../../static/img/integration/e-commerce/different/4.png) :::note There are small no of cases where the escrow amount and the posted order amount is different. For such cases, SQL system will make the adjustment either editing on invoice or CN when payment is posted to make it tally. @@ -35,23 +35,23 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Posting order", "Shopee", "L 1. When you post your order, the system has not finalized the transaction, shipping, marketing fees. You will only see the stock item in the invoice. - ![5](../../../static/img/e-commerce/different/5.png) + ![5](../../../static/img/integration/e-commerce/different/5.png) - ![6](../../../static/img/e-commerce/different/6.png) + ![6](../../../static/img/integration/e-commerce/different/6.png) 2. The shipping fees and transaction fees will be added after posting payment. 3. Load the payment file, and post - ![7](../../../static/img/e-commerce/different/7.png) + ![7](../../../static/img/integration/e-commerce/different/7.png) Payment has been created - ![8](../../../static/img/e-commerce/different/8.png) + ![8](../../../static/img/integration/e-commerce/different/8.png) 4. After posting, you will notice that the invoice has been edited and the additional fees has been added. The Delivery Date is the posting date of the transaction entries. - ![9](../../../static/img/e-commerce/different/9.png) + ![9](../../../static/img/integration/e-commerce/different/9.png) ### Lazada Multiple Payment files @@ -62,7 +62,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Posting order", "Shopee", "L 2. If order is a returned, and the first payment file has a **positive payment amount** , the returned order will be posted into Invoice first. The invoice **Net Total will be 0** value. 3. Order and Payment Posting for Lazada: - ![19](../../../static/img/e-commerce/different/19.png) + ![19](../../../static/img/integration/e-commerce/different/19.png) - Positive Amount / Negative Amount = SUM Total Amount for same Order as per Payment File @@ -70,9 +70,9 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Posting order", "Shopee", "L Order 338719603950977 is posted as invoice : - ![10](../../../static/img/e-commerce/different/10.png) + ![10](../../../static/img/integration/e-commerce/different/10.png) - ![11](../../../static/img/e-commerce/different/11.png) + ![11](../../../static/img/integration/e-commerce/different/11.png) Payment file 1 (positive amount) : @@ -82,28 +82,28 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Posting order", "Shopee", "L ::: - ![12](../../../static/img/e-commerce/different/12.png) + ![12](../../../static/img/integration/e-commerce/different/12.png) Payment File 2 (negative amount): - ![13](../../../static/img/e-commerce/different/13.png) + ![13](../../../static/img/integration/e-commerce/different/13.png) Payment File 3 (negative amount): - ![14](../../../static/img/e-commerce/different/14.png) + ![14](../../../static/img/integration/e-commerce/different/14.png) Invoice : - ![15](../../../static/img/e-commerce/different/15.png) + ![15](../../../static/img/integration/e-commerce/different/15.png) Payment: - ![16](../../../static/img/e-commerce/different/16.png) + ![16](../../../static/img/integration/e-commerce/different/16.png) Credit Note : - ![17](../../../static/img/e-commerce/different/17.png) + ![17](../../../static/img/integration/e-commerce/different/17.png) Customer Refund: - ![18](../../../static/img/e-commerce/different/18.png) + ![18](../../../static/img/integration/e-commerce/different/18.png) diff --git a/docs/integration/e-commerce/lazada.md b/docs/integration/e-commerce/lazada.md index 1feb6b6d..2e65ca02 100644 --- a/docs/integration/e-commerce/lazada.md +++ b/docs/integration/e-commerce/lazada.md @@ -7,13 +7,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] ## Maintain Cloud Account -1. Select **![39](../../../static/img/banking/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) +1. Select **![39](../../../static/img/integration/banks/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) - ![1](../../../static/img/e-commerce/easyStore/1.png) + ![1](../../../static/img/integration/e-commerce/easyStore/1.png) 2. Click on NEW - ![1](../../../static/img/e-commerce/lazada/1.png) + ![1](../../../static/img/integration/e-commerce/lazada/1.png) 1. Enter **Description** @@ -23,15 +23,15 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 3. Select Platform - ![2](../../../static/img/e-commerce/lazada/2.png) + ![2](../../../static/img/integration/e-commerce/lazada/2.png) 4. Login with your credentials - ![3](../../../static/img/e-commerce/lazada/3.png) + ![3](../../../static/img/integration/e-commerce/lazada/3.png) 5. Press on SAVE - ![4](../../../static/img/e-commerce/lazada/4.png) + ![4](../../../static/img/integration/e-commerce/lazada/4.png) - Once linking Successful, system will be returned status Linking Success Message. @@ -41,11 +41,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 1. Create Lazada Voucher / Discount Account Under Sales Adjustment - ![5](../../../static/img/e-commerce/lazada/5.png) + ![5](../../../static/img/integration/e-commerce/lazada/5.png) 2. Create Shipping and Transaction Fee under Expenses - ![6](../../../static/img/e-commerce/easyStore/8.png) + ![6](../../../static/img/integration/e-commerce/easyStore/8.png) :::info @@ -55,7 +55,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 2. Customer > Maintain Customer - ![7](../../../static/img/e-commerce/lazada/7.png) + ![7](../../../static/img/integration/e-commerce/lazada/7.png) 3. Stock > Maintain Stock Group @@ -63,11 +63,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 1. Create Discount Stock Group - ![8](../../../static/img/e-commerce/lazada/8.png) + ![8](../../../static/img/integration/e-commerce/lazada/8.png) 2. Create Voucher Stock Group - ![9](../../../static/img/e-commerce/lazada/9.png) + ![9](../../../static/img/integration/e-commerce/lazada/9.png) - Repeat same step to create for Shipping and Transaction Fees Stock Group @@ -75,11 +75,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 1. Create Discount Stock Item - ![10](../../../static/img/e-commerce/lazada/10.png) + ![10](../../../static/img/integration/e-commerce/lazada/10.png) 2. Create Voucher Item Code - ![11](../../../static/img/e-commerce/lazada/11.png) + ![11](../../../static/img/integration/e-commerce/lazada/11.png) - Repeat same step to create for Shipping and Transaction Fees Item Code @@ -89,11 +89,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 2. Click on Account Tab > Double click on your account - ![12](../../../static/img/e-commerce/lazada/12.png) + ![12](../../../static/img/integration/e-commerce/lazada/12.png) 1. Mapping Code - ![13](../../../static/img/e-commerce/lazada/13.png) + ![13](../../../static/img/integration/e-commerce/lazada/13.png) 2. Expiry Date @@ -107,15 +107,15 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 2. Click on “**Products**” Tab, then click on “**Manage Products**” and then click “**Bulk Manage**” - ![14](../../../static/img/e-commerce/lazada/14.png) + ![14](../../../static/img/integration/e-commerce/lazada/14.png) 3. Select “Bulk Edit” option - ![15](../../../static/img/e-commerce/lazada/15.png) + ![15](../../../static/img/integration/e-commerce/lazada/15.png) 4. Press “**Export Excel Template**” and save it to your computer location. - ![16](../../../static/img/e-commerce/lazada/16.png) + ![16](../../../static/img/integration/e-commerce/lazada/16.png) You can choose to have Lazada SKU as SQL Item Code by import to SQL. May contact your service agent to assist on this product import. @@ -123,31 +123,31 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 6. Click on Product Tab > Click on Fetch Button > System will return the message when fetching done. - ![17](../../../static/img/e-commerce/lazada/17.png) + ![17](../../../static/img/integration/e-commerce/lazada/17.png) 7. Verify Status: Exist in Stock Item are meaning SQL and Seller SKU are having the same Item Code. - ![18](../../../static/img/e-commerce/lazada/18.png) + ![18](../../../static/img/integration/e-commerce/lazada/18.png) :::info If you decide to use the same item code as Seller Sku, click on select All records > press on Post button for the first time so system will remember the settings. ::: - ![19](../../../static/img/e-commerce/lazada/19.png) + ![19](../../../static/img/integration/e-commerce/lazada/19.png) 8. Verified Status: Success when posting done - ![20](../../../static/img/e-commerce/lazada/20.png) + ![20](../../../static/img/integration/e-commerce/lazada/20.png) :::note Once you post successful, system will keep the Shop SKU in Stock Item as Alternative Item ::: - ![21](../../../static/img/e-commerce/lazada/21.png) + ![21](../../../static/img/integration/e-commerce/lazada/21.png) 9. You can still decide to map to different item code (system will auto ticked the record you change the item code), once done all, click on POST button. - ![22](../../../static/img/e-commerce/lazada/22.png) + ![22](../../../static/img/integration/e-commerce/lazada/22.png) [Youtube](https://www.youtube.com/watch?v=B9UmhTYjFHM) @@ -155,13 +155,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 1. Click on Orders Tab - ![23](../../../static/img/e-commerce/lazada/23.png) + ![23](../../../static/img/integration/e-commerce/lazada/23.png) 2. Status – Default Post Action - ![24](../../../static/img/e-commerce/lazada/24.png) + ![24](../../../static/img/integration/e-commerce/lazada/24.png) - ![25](../../../static/img/e-commerce/lazada/25.png) + ![25](../../../static/img/integration/e-commerce/lazada/25.png) Remark: Each order number will be posted once. You can delete the Invoice if you want to repost. @@ -169,13 +169,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 1. Select Date Range > Click on Refresh Order - ![26](../../../static/img/e-commerce/lazada/26.png) + ![26](../../../static/img/integration/e-commerce/lazada/26.png) Please be patient, system is on the way to fetch the order from Lazada - ![27](../../../static/img/e-commerce/lazada/27.png) + ![27](../../../static/img/integration/e-commerce/lazada/27.png) - ![28](../../../static/img/e-commerce/lazada/28.png) + ![28](../../../static/img/integration/e-commerce/lazada/28.png) System will return the message when Fetching Done, Press OK. @@ -183,23 +183,23 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 1. Click on the status you want to post the order, let us take an example on Delivered Status > Ticked all > Click on Post - ![29](../../../static/img/e-commerce/lazada/29.png) + ![29](../../../static/img/integration/e-commerce/lazada/29.png) 2. If you did not tick on any order when do the posting, system will raise a message: You have not selected any order. Would you like to select all? If you would like to post all > Press Yes - ![30](../../../static/img/e-commerce/lazada/30.png) + ![30](../../../static/img/integration/e-commerce/lazada/30.png) Please be patient to wait for the order posting. - ![31](../../../static/img/e-commerce/lazada/31.png) + ![31](../../../static/img/integration/e-commerce/lazada/31.png) 3. Click on OK when done posting - ![32](../../../static/img/e-commerce/lazada/32.png) + ![32](../../../static/img/integration/e-commerce/lazada/32.png) 5. Verify Status - ![33](../../../static/img/e-commerce/lazada/33.png) + ![33](../../../static/img/integration/e-commerce/lazada/33.png) 1. Posted @@ -213,7 +213,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] - Normally repost will be fine. - ![34](../../../static/img/e-commerce/lazada/34.png) + ![34](../../../static/img/integration/e-commerce/lazada/34.png) 4. Failed – Missing Item Code @@ -225,21 +225,21 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 3. Click on Post - ![35](../../../static/img/e-commerce/lazada/35.png) + ![35](../../../static/img/integration/e-commerce/lazada/35.png) 6. Sales Invoice - Example of Sales Invoice posted from Lazada | Orders. - ![36](../../../static/img/e-commerce/lazada/36.png) + ![36](../../../static/img/integration/e-commerce/lazada/36.png) - ![37](../../../static/img/e-commerce/lazada/37.png) + ![37](../../../static/img/integration/e-commerce/lazada/37.png) 7. Sales Credit Note - Example of Sales Credit Note posted from Lazada | Orders. - ![38](../../../static/img/e-commerce/lazada/38.png) + ![38](../../../static/img/integration/e-commerce/lazada/38.png) Returned Sales will be posted to 1 document only. @@ -247,9 +247,9 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] Select **“Post”** to post it to sales invoice. - ![39](../../../static/img/e-commerce/lazada/39.png) + ![39](../../../static/img/integration/e-commerce/lazada/39.png) - ![40](../../../static/img/e-commerce/lazada/40.png) + ![40](../../../static/img/integration/e-commerce/lazada/40.png) [Youtube](https://www.youtube.com/watch?v=jrts5wSRecA) @@ -257,9 +257,9 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] - Beside the post button, press the black triangle, and select ”Post” to post it to sales invoice. - ![41](../../../static/img/e-commerce/lazada/41.png) + ![41](../../../static/img/integration/e-commerce/lazada/41.png) - ![42](../../../static/img/e-commerce/lazada/42.png) + ![42](../../../static/img/integration/e-commerce/lazada/42.png) ## Payment Tab @@ -271,15 +271,15 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] The new version of Lazada Seller Center, has changed the settlement period from weekly to daily. ::: - ![43](../../../static/img/e-commerce/lazada/43.png) + ![43](../../../static/img/integration/e-commerce/lazada/43.png) 2. At your Statement Overview, go to Settlement Report to see the weekly statement. - ![44](../../../static/img/e-commerce/lazada/44.png) + ![44](../../../static/img/integration/e-commerce/lazada/44.png) 3. Click “Download” and download the file of the weekly statement that contains the payments that you want to export. - ![45](../../../static/img/e-commerce/lazada/45.png) + ![45](../../../static/img/integration/e-commerce/lazada/45.png) 2. Posting Payment @@ -287,21 +287,21 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 2. Click Load CSV (Statement downloaded from Step 1.6) - ![46](../../../static/img/e-commerce/lazada/46.png) + ![46](../../../static/img/integration/e-commerce/lazada/46.png) 3. Select the statement download from Lazada - ![47](../../../static/img/e-commerce/lazada/47.png) + ![47](../../../static/img/integration/e-commerce/lazada/47.png) 4. Click on Post - ![48](../../../static/img/e-commerce/lazada/48.png) + ![48](../../../static/img/integration/e-commerce/lazada/48.png) 5. Error in Red: Please sync all orders before posting payment. - Due to some order yet posting to Invoice. Before you do the posting, you can check on Invoice No column, post the orders with empty Invoice No. - ![49](../../../static/img/e-commerce/lazada/49.png) + ![49](../../../static/img/integration/e-commerce/lazada/49.png) :::info Lazada required you to sync all order before can posting payment due to have to tally with bank recon. @@ -309,33 +309,33 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 6. Once you check all the order have been posting (without empty Invoice No), click on Post - ![50](../../../static/img/e-commerce/lazada/50.png) + ![50](../../../static/img/integration/e-commerce/lazada/50.png) 7. Posting Payment / Editing Invoice for Lazada Fees, please be patient - ![51](../../../static/img/e-commerce/lazada/51.png) + ![51](../../../static/img/integration/e-commerce/lazada/51.png) 8. Cheque number already exists - Press **Yes**, system capture Lazada Payment ref ID as Cheque number. - ![52](../../../static/img/e-commerce/lazada/52.png) + ![52](../../../static/img/integration/e-commerce/lazada/52.png) User can choose to turn off prompt duplicate cheque number at Tools > Option > Miscellaneous > Unticked Prompt Duplicate Cheque Number. - ![53](../../../static/img/e-commerce/lazada/53.png) + ![53](../../../static/img/integration/e-commerce/lazada/53.png) 9. Posting done - ![54](../../../static/img/e-commerce/lazada/54.png) + ![54](../../../static/img/integration/e-commerce/lazada/54.png) 10. System will skip posting when Item Price is 0 - ![55](../../../static/img/e-commerce/lazada/55.png) + ![55](../../../static/img/integration/e-commerce/lazada/55.png) 11. Example of Sales Invoice with added in Transaction Fees Posted from Lazada | Payment - ![56](../../../static/img/e-commerce/lazada/56.png) + ![56](../../../static/img/integration/e-commerce/lazada/56.png) :::note Version 794 – 801 will post to Sales CN @@ -346,7 +346,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 12. Example of Customer Payment posted from Lazada | Payment - System will auto do the knockoff - ![57](../../../static/img/e-commerce/lazada/57.png) + ![57](../../../static/img/integration/e-commerce/lazada/57.png) :::note Same Transaction Date will be posting as 1 Customer Payment. @@ -356,7 +356,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] - 7 Days of payment will group as 1 row in bank recon for easier bank recon. - ![58](../../../static/img/e-commerce/lazada/58.png) + ![58](../../../static/img/integration/e-commerce/lazada/58.png) :::note Bank Slip No is Lazada Payment Ref ID @@ -364,7 +364,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] Example of Bank Recon - ![59](../../../static/img/e-commerce/lazada/59.png) + ![59](../../../static/img/integration/e-commerce/lazada/59.png) [Youtube](https://www.youtube.com/watch?v=PloG3CeHA1w) @@ -376,12 +376,12 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] - Not paid status will not posting to Customer payment. - ![60](../../../static/img/e-commerce/lazada/60.png) + ![60](../../../static/img/integration/e-commerce/lazada/60.png) 2. Payment ref id not found - Lazada allows seller to forward date download finance statement, without Payment ref ID which mean Lazada yet release payment to Seller, SQL will not posting without payment ref ID. - ![61](../../../static/img/e-commerce/lazada/61.png) + ![61](../../../static/img/integration/e-commerce/lazada/61.png) ## FAQ @@ -415,7 +415,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] - Load in payment, when order date before system conversion date, right click Select Check Past Invoice, Click on Post Past Invoice - ![62](../../../static/img/e-commerce/lazada/62.png) + ![62](../../../static/img/integration/e-commerce/lazada/62.png) - User required to post the past invoice in Order @@ -425,7 +425,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] - Look for Order Date, system will show the Order Date on Verify Status with Order Not Posted - ![63](../../../static/img/e-commerce/lazada/63.png) + ![63](../../../static/img/integration/e-commerce/lazada/63.png) 8. How system handle for the scenario when first release payment in negative due to overcharge on shipping fees @@ -435,32 +435,32 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Lazada"] 9. Fetch Order raise error : E097 : Offset and limit sum 5100 must less than 5000, request id : 2101235d16xxxx - ![64](../../../static/img/e-commerce/lazada/64.png) + ![64](../../../static/img/integration/e-commerce/lazada/64.png) - Lazada API Returned error as too huge transaction being fetched, the only way is to shorten the date period. 10. The specified access token is invalid or expired - ![65](../../../static/img/e-commerce/lazada/65.png) + ![65](../../../static/img/integration/e-commerce/lazada/65.png) - Lazada API link expired, you are required to go back maintain cloud and link again with Lazada platform (Refer Step 1.1.3 – 1.1.5) 11. API access frequently exceeds the limit. This ban will last 1 seconds - ![66](../../../static/img/e-commerce/lazada/66.png) + ![66](../../../static/img/integration/e-commerce/lazada/66.png) - Error appears after click Fetch. Solution, close your Lazada tab in SQL Account > re-open it > click “Fetch” button again 12. How system handle “Failed Delivery" in SQL? - ![67](../../../static/img/e-commerce/lazada/67.png) + ![67](../../../static/img/integration/e-commerce/lazada/67.png) Orders with “Failed Delivery” in Lazada will be fetch into SQL with the status as **canceled**. If the order has transaction fees to offset, the canceled order can be posted as Cancelled Sales Invoice. - ![68](../../../static/img/e-commerce/lazada/68.png) + ![68](../../../static/img/integration/e-commerce/lazada/68.png) To post as invoice, click the black arrow beside the “Post” button and select “Post as Cancelled Sales Invoice”. diff --git a/docs/integration/e-commerce/shopee.md b/docs/integration/e-commerce/shopee.md index f95e3388..36e526f4 100644 --- a/docs/integration/e-commerce/shopee.md +++ b/docs/integration/e-commerce/shopee.md @@ -7,13 +7,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] ## Maintain Cloud Account -1. Select **![39](../../../static/img/banking/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) +1. Select **![39](../../../static/img/integration/banks/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) - ![1](../../../static/img/e-commerce/easyStore/1.png) + ![1](../../../static/img/integration/e-commerce/easyStore/1.png) 2. Click on NEW - ![1](../../../static/img/e-commerce/shopee/1.png) + ![1](../../../static/img/integration/e-commerce/shopee/1.png) 1. Enter **Description** @@ -23,15 +23,15 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 3. Login Shopee Credential - ![2](../../../static/img/e-commerce/shopee/2.png) + ![2](../../../static/img/integration/e-commerce/shopee/2.png) 4. Click on Confirm Authorization - ![3](../../../static/img/e-commerce/shopee/3.png) + ![3](../../../static/img/integration/e-commerce/shopee/3.png) 5. Press SAVE - ![4](../../../static/img/e-commerce/shopee/4.png) + ![4](../../../static/img/integration/e-commerce/shopee/4.png) - Once linking Successful, system will be returned status Linking Success Message. @@ -41,21 +41,21 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Create Shopee Payment Method - ![5](../../../static/img/e-commerce/shopee/5.png) + ![5](../../../static/img/integration/e-commerce/shopee/5.png) 2. Create Shopee Voucher / Discount Account Under Sales Adjustment - ![6](../../../static/img/e-commerce/lazada/5.png) + ![6](../../../static/img/integration/e-commerce/lazada/5.png) 3. Create Shipping and Transaction Fee under Expenses - ![7](../../../static/img/e-commerce/easyStore/8.png) + ![7](../../../static/img/integration/e-commerce/easyStore/8.png) - It is up to company want to create under which category. Some of the Company will create under Cost of Goods Sold. 2. Customer -> Maintain Customer - ![8](../../../static/img/e-commerce/shopee/8.png) + ![8](../../../static/img/integration/e-commerce/shopee/8.png) 3. Stock -> Maintain Stock Group @@ -63,11 +63,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Create Discount Stock Group - ![9](../../../static/img/e-commerce/shopee/9.png) + ![9](../../../static/img/integration/e-commerce/shopee/9.png) 2. Create Voucher Stock Group - ![10](../../../static/img/e-commerce/shopee/10.png) + ![10](../../../static/img/integration/e-commerce/shopee/10.png) - Repeat same step to create for Shipping and Transaction Fees Stock Group @@ -75,7 +75,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Create Discount Stock Item - ![11](../../../static/img/e-commerce/shopee/11.png) + ![11](../../../static/img/integration/e-commerce/shopee/11.png) :::note Unticked Stock Control @@ -83,21 +83,21 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 2. Create Voucher Item Code - ![12](../../../static/img/e-commerce/shopee/12.png) + ![12](../../../static/img/integration/e-commerce/shopee/12.png) - Repeat same step to create for Shipping and Transaction Fees Item Code ## Account Tab -1. Click on '![39](../../../static/img/banking/cloud-icon.png)'- > Shopee +1. Click on '![39](../../../static/img/integration/banks/cloud-icon.png)'- > Shopee 2. Click on Account Tab -> Double click on your account - ![13](../../../static/img/e-commerce/shopee/13.png) + ![13](../../../static/img/integration/e-commerce/shopee/13.png) 1. Mapping Code - ![14](../../../static/img/e-commerce/shopee/14.png) + ![14](../../../static/img/integration/e-commerce/shopee/14.png) 2. Expiry Date @@ -114,13 +114,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 2. Click on “Batch Tools” and select “Mass Update” - ![15](../../../static/img/e-commerce/shopee/15.png) + ![15](../../../static/img/integration/e-commerce/shopee/15.png) 3. Click on “Generate” to generate the product list. 4. Click on “Download” to get the generated product list. - ![16](../../../static/img/e-commerce/shopee/16.png) + ![16](../../../static/img/integration/e-commerce/shopee/16.png) You can choose to have Shopee SKU as SQL Item Code by import to SQL, may contact your service agent to assist on this product import. @@ -128,29 +128,29 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Click on Product Tab -> Click on Fetch Button -> System will return the message when fetching done. - ![17](../../../static/img/e-commerce/shopee/17.png) + ![17](../../../static/img/integration/e-commerce/shopee/17.png) 2. Verify Status: Exist in Stock Item are meaning SQL and Seller SKU are having the same Item Code. - ![18](../../../static/img/e-commerce/shopee/18.png) + ![18](../../../static/img/integration/e-commerce/shopee/18.png) If you decide to use the same item code as Seller Sku, ticked on select All records -> press on Post button for the first time so system will remember the settings. - ![19](../../../static/img/e-commerce/shopee/19.png) + ![19](../../../static/img/integration/e-commerce/shopee/19.png) 3. Verified Status: Success when posting done - ![20](../../../static/img/e-commerce/shopee/20.png) + ![20](../../../static/img/integration/e-commerce/shopee/20.png) :::note Once you post successful, system will keep the Shop SKU in Stock Item as Alternative Item ::: - ![21](../../../static/img/e-commerce/shopee/21.png) + ![21](../../../static/img/integration/e-commerce/shopee/21.png) 4. You can still manually do the mapping on the item code (system will auto ticked the record you have change the item code), once done all, click on POST button. - ![22](../../../static/img/e-commerce/shopee/22.png) + ![22](../../../static/img/integration/e-commerce/shopee/22.png) [Youtube](https://www.youtube.com/watch?v=B9UmhTYjFHM) @@ -158,13 +158,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Click on Orders Tab - ![23](../../../static/img/e-commerce/shopee/23.png) + ![23](../../../static/img/integration/e-commerce/shopee/23.png) 2. Status - ![24](../../../static/img/e-commerce/shopee/24.png) + ![24](../../../static/img/integration/e-commerce/shopee/24.png) - ![25](../../../static/img/e-commerce/shopee/25.png) + ![25](../../../static/img/integration/e-commerce/shopee/25.png) :::tip Each order number will be posted once. You can delete the Invoice if you want to repost. @@ -174,37 +174,37 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Select Date Range -> Click on Refresh Order - ![26](../../../static/img/e-commerce/shopee/26.png) + ![26](../../../static/img/integration/e-commerce/shopee/26.png) Please be patient, system is on the way to fetch the order from Shopee - ![27](../../../static/img/e-commerce/shopee/27.png) + ![27](../../../static/img/integration/e-commerce/shopee/27.png) System will return the message when Fetching Done, Press OK. - ![28](../../../static/img/e-commerce/shopee/28.png) + ![28](../../../static/img/integration/e-commerce/shopee/28.png) 4. Post Order 1. Click on the status you want to post the order, let us take an example on Completed Status -> Ticked all -> Click on Post - ![29](../../../static/img/e-commerce/shopee/29.png) + ![29](../../../static/img/integration/e-commerce/shopee/29.png) 2. If you did not tick on any order when do the posting, system will raise a message: You have not selected any order. Would you like to select all? If you would like to post all -> Press Yes - ![30](../../../static/img/e-commerce/shopee/30.png) + ![30](../../../static/img/integration/e-commerce/shopee/30.png) Please be patient to wait for the order posting. - ![30](../../../static/img/e-commerce/shopee/30.png) + ![30](../../../static/img/integration/e-commerce/shopee/30.png) 3. Click on OK when done posting - ![31](../../../static/img/e-commerce/shopee/31.png) + ![31](../../../static/img/integration/e-commerce/shopee/31.png) 5. Verify Status - ![32](../../../static/img/e-commerce/shopee/32.png) + ![32](../../../static/img/integration/e-commerce/shopee/32.png) 1. Posted @@ -226,7 +226,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Ticked on the order - ![33](../../../static/img/e-commerce/shopee/33.png) + ![33](../../../static/img/integration/e-commerce/shopee/33.png) 2. Click on Item Code Drop Down, user can manually map the item code @@ -236,17 +236,17 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Double click on the order which you want to view the detail. - ![34](../../../static/img/e-commerce/shopee/34.png) + ![34](../../../static/img/integration/e-commerce/shopee/34.png) 2. Order details will be displayed. - ![35](../../../static/img/e-commerce/shopee/35.png) + ![35](../../../static/img/integration/e-commerce/shopee/35.png) 7. Sales Invoice - Example of Sales Invoice posted from Shopee | Orders. - ![36](../../../static/img/e-commerce/shopee/36.png) + ![36](../../../static/img/integration/e-commerce/shopee/36.png) 1. Formula to calc Shipping Fees: @@ -260,7 +260,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] Escrow Amount will be Shopee release amount. ::: - ![37](../../../static/img/e-commerce/shopee/37.png) + ![37](../../../static/img/integration/e-commerce/shopee/37.png) :::note Missing no 10 Discount Item Code? @@ -276,11 +276,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Example of Sales Credit Note posted from Shopee | Orders. - ![38](../../../static/img/e-commerce/shopee/38.png) + ![38](../../../static/img/integration/e-commerce/shopee/38.png) 2. Sales -> Invoice - ![39](../../../static/img/e-commerce/shopee/39.png) + ![39](../../../static/img/integration/e-commerce/shopee/39.png) 3. Escrow = RM 10.25(Escrow Amt) + 23.50(Product) = RM 33.75 @@ -298,11 +298,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] CN will be posting return product without Shipping and Transaction fees. - ![40](../../../static/img/e-commerce/shopee/40.png) + ![40](../../../static/img/integration/e-commerce/shopee/40.png) **Customer -> Customer Credit Note** - ![41](../../../static/img/e-commerce/shopee/41.png) + ![41](../../../static/img/integration/e-commerce/shopee/41.png) :::note System will auto knockoff the Invoice. @@ -310,7 +310,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] **Customer -> Customer Invoice** - ![42](../../../static/img/e-commerce/shopee/42.png) + ![42](../../../static/img/integration/e-commerce/shopee/42.png) - Outstanding Amount will be Shopee Release Amount @@ -318,27 +318,27 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 1. Select the order that need to be replaced and click on Replace. - ![43](../../../static/img/e-commerce/shopee/43.png) + ![43](../../../static/img/integration/e-commerce/shopee/43.png) - ![44](../../../static/img/e-commerce/shopee/44.png) + ![44](../../../static/img/integration/e-commerce/shopee/44.png) 2. The order selected will be replaced. - ![45](../../../static/img/e-commerce/shopee/45.png) + ![45](../../../static/img/integration/e-commerce/shopee/45.png) 10. Print 1. Click on Order No -> Print - ![46](../../../static/img/e-commerce/shopee/46.png) + ![46](../../../static/img/integration/e-commerce/shopee/46.png) 2. Select Report -> Press OK - ![47](../../../static/img/e-commerce/shopee/47.png) + ![47](../../../static/img/integration/e-commerce/shopee/47.png) 3. Sample Report - ![48](../../../static/img/e-commerce/shopee/48.png) + ![48](../../../static/img/integration/e-commerce/shopee/48.png) [Youtube](https://www.youtube.com/watch?v=jrts5wSRecA) @@ -352,7 +352,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 3. Click on “Export” button and finally “Download” the file. - ![49](../../../static/img/e-commerce/shopee/49.png) + ![49](../../../static/img/integration/e-commerce/shopee/49.png) 2. Posting Payment @@ -360,25 +360,25 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 2. Click Load Excel - ![50](../../../static/img/e-commerce/shopee/50.png) + ![50](../../../static/img/integration/e-commerce/shopee/50.png) 3. Select the statement download from Shopee - ![51](../../../static/img/e-commerce/shopee/51.png) + ![51](../../../static/img/integration/e-commerce/shopee/51.png) 4. Check on Invoice No Column, make sure no blank Invoice No. It is advisable to post all the order first before do payment. Once done, click on Post - ![52](../../../static/img/e-commerce/shopee/52.png) + ![52](../../../static/img/integration/e-commerce/shopee/52.png) Blank Invoice No mean order yet do the posting. 5. Posting Payment, please be patient - ![53](../../../static/img/e-commerce/shopee/53.png) + ![53](../../../static/img/integration/e-commerce/shopee/53.png) 6. Payment Posting done - ![54](../../../static/img/e-commerce/shopee/54.png) + ![54](../../../static/img/integration/e-commerce/shopee/54.png) 7. Example of Customer Payment posted from Shopee | Payment @@ -388,15 +388,15 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] Example: On 7/12/2020, total payment received RM 1424.71 - ![55](../../../static/img/e-commerce/shopee/55.png) + ![55](../../../static/img/integration/e-commerce/shopee/55.png) **Customer -> Customer Payment** - ![56](../../../static/img/e-commerce/shopee/56.png) + ![56](../../../static/img/integration/e-commerce/shopee/56.png) System will auto do the knockoff. - ![57](../../../static/img/e-commerce/shopee/57.png) + ![57](../../../static/img/integration/e-commerce/shopee/57.png) 3. Withdrawal @@ -410,7 +410,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 3. GL -> Cash Book Entry -> New OR - ![58](../../../static/img/e-commerce/shopee/58.png) + ![58](../../../static/img/integration/e-commerce/shopee/58.png) [Youtube](https://www.youtube.com/watch?v=PloG3CeHA1w) @@ -432,7 +432,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Shopee"] 4. How system handle the situation when Shipping Fees charges Seller Paid Amount cause escrow amount in negative? - ![59](../../../static/img/e-commerce/shopee/59.png) + ![59](../../../static/img/integration/e-commerce/shopee/59.png) 1. This scenario system will post to **Sales CN** and **Customer Refund**. diff --git a/docs/integration/e-commerce/tiktok.md b/docs/integration/e-commerce/tiktok.md index a2dcb319..acc055a9 100644 --- a/docs/integration/e-commerce/tiktok.md +++ b/docs/integration/e-commerce/tiktok.md @@ -8,13 +8,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] ## Maintain Cloud Account -1. Select **![39](../../../static/img/banking/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) +1. Select **![39](../../../static/img/integration/banks/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) - ![1](../../../static/img/e-commerce/easyStore/1.png) + ![1](../../../static/img/integration/e-commerce/easyStore/1.png) 2. Click on NEW - ![1](../../../static/img/e-commerce/tiktok/1.png) + ![1](../../../static/img/integration/e-commerce/tiktok/1.png) 1. Enter **Description “Tik Tok”** @@ -24,19 +24,19 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 3. Select Platform - ![2](../../../static/img/e-commerce/tiktok/2.png) + ![2](../../../static/img/integration/e-commerce/tiktok/2.png) Select your account type to start the authorization process - ![3](../../../static/img/e-commerce/tiktok/3.png) + ![3](../../../static/img/integration/e-commerce/tiktok/3.png) 4. Login with your credentials - ![4](../../../static/img/e-commerce/tiktok/4.png) + ![4](../../../static/img/integration/e-commerce/tiktok/4.png) 5. Press SAVE - ![5](../../../static/img/e-commerce/tiktok/5.png) + ![5](../../../static/img/integration/e-commerce/tiktok/5.png) - Once linking Successful, system will be returned status Linking Success Message. @@ -46,17 +46,17 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 1. Create TikTok Voucher / Discount Account Under Sales Adjustment - ![6](../../../static/img/e-commerce/tiktok/6.png) + ![6](../../../static/img/integration/e-commerce/tiktok/6.png) 2. Create Shipping and Transaction Fee under Expenses - ![7](../../../static/img/e-commerce/easyStore/8.png) + ![7](../../../static/img/integration/e-commerce/easyStore/8.png) - It is up to company want to create under which category. Some of the Company will create under Cost of Goods Sold. 2. Customer -> Maintain Customer - ![8](../../../static/img/e-commerce/tiktok/8.png) + ![8](../../../static/img/integration/e-commerce/tiktok/8.png) 3. Stock -> Maintain Stock Group @@ -64,10 +64,10 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 1. Create Discount Stock Group - ![9](../../../static/img/e-commerce/tiktok/9.png) + ![9](../../../static/img/integration/e-commerce/tiktok/9.png) 2. Create Voucher Stock Group - ![10](../../../static/img/e-commerce/tiktok/10.png) + ![10](../../../static/img/integration/e-commerce/tiktok/10.png) - Repeat same step to create for Shipping and Transaction Fees Stock Group @@ -75,11 +75,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 1. Create Discount Stock Item - ![11](../../../static/img/e-commerce/tiktok/11.png) + ![11](../../../static/img/integration/e-commerce/tiktok/11.png) 2. Create Voucher Item Code - ![12](../../../static/img/e-commerce/tiktok/12.png) + ![12](../../../static/img/integration/e-commerce/tiktok/12.png) - Repeat same step to create for Shipping and Transaction Fees Item Code @@ -87,51 +87,51 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 1. Click on - > TikTok - ![13](../../../static/img/e-commerce/tiktok/13.png) + ![13](../../../static/img/integration/e-commerce/tiktok/13.png) 2. Click on Account Tab -> Double click on your account 1. Mapping Code - ![14](../../../static/img/e-commerce/tiktok/14.png) + ![14](../../../static/img/integration/e-commerce/tiktok/14.png) ## Product Tab : Fetch Product 1. Click on Product Tab -> Click on Fetch Button -> System will return the message when fetching done. - ![15](../../../static/img/e-commerce/tiktok/15.png) + ![15](../../../static/img/integration/e-commerce/tiktok/15.png) 2. Verify Status: Exist in Stock Item are meaning SQL and TikTok Shop SKU are having the same Item Code. - ![16](../../../static/img/e-commerce/tiktok/16.png) + ![16](../../../static/img/integration/e-commerce/tiktok/16.png) If you decide to use the same item code as Tiktok Shop Sku, click on select All records -> press on Post button for the first time so system will remember the settings. - ![17](../../../static/img/e-commerce/tiktok/17.png) + ![17](../../../static/img/integration/e-commerce/tiktok/17.png) 3. Verified Status: Success when posting done - ![18](../../../static/img/e-commerce/tiktok/18.png) + ![18](../../../static/img/integration/e-commerce/tiktok/18.png) :::note Once you post successful, system will keep the ID in Stock Item as Alternative Item ::: - ![19](../../../static/img/e-commerce/tiktok/19.png) + ![19](../../../static/img/integration/e-commerce/tiktok/19.png) 4. You can still decide to map to different item code (system will auto ticked the record you change the item code), once done all, click on POST button. - ![20](../../../static/img/e-commerce/tiktok/20.png) + ![20](../../../static/img/integration/e-commerce/tiktok/20.png) ## Orders Tab 1. Click on Orders Tab - ![21](../../../static/img/e-commerce/tiktok/21.png) + ![21](../../../static/img/integration/e-commerce/tiktok/21.png) 2. Status – Default Post Action - ![22](../../../static/img/e-commerce/tiktok/22.png) + ![22](../../../static/img/integration/e-commerce/tiktok/22.png) :::info Each order number will be posted once. You can delete the Invoice if you want to repost. @@ -141,11 +141,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 1. Select Date Range -> Click on Refresh Order - ![23](../../../static/img/e-commerce/tiktok/23.png) + ![23](../../../static/img/integration/e-commerce/tiktok/23.png) Please be patient, system is on the way to fetch the order from TikTok - ![24](../../../static/img/e-commerce/tiktok/24.png) + ![24](../../../static/img/integration/e-commerce/tiktok/24.png) System will return the message when Fetching Done, Press OK. @@ -153,23 +153,23 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 1. Click on the status you want to post the order, let us take an example on Delivered Status -> Ticked all -> Click on Post - ![25](../../../static/img/e-commerce/tiktok/25.png) + ![25](../../../static/img/integration/e-commerce/tiktok/25.png) 2. If you did not tick on any order when do the posting, system will raise a message: You have not selected any order. Would you like to select all? If you would like to post all -> Press Yes - ![26](../../../static/img/e-commerce/tiktok/26.png) + ![26](../../../static/img/integration/e-commerce/tiktok/26.png) Please be patient to wait for the order posting. - ![27](../../../static/img/e-commerce/tiktok/27.png) + ![27](../../../static/img/integration/e-commerce/tiktok/27.png) 3. Click on OK when done posting - ![28](../../../static/img/e-commerce/tiktok/28.png) + ![28](../../../static/img/integration/e-commerce/tiktok/28.png) 5. Verify Status - ![29](../../../static/img/e-commerce/tiktok/29.png) + ![29](../../../static/img/integration/e-commerce/tiktok/29.png) 1. Posted @@ -189,7 +189,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 1. Click on Item Code Drop Down, user can manually map the item code - ![30](../../../static/img/e-commerce/tiktok/30.png) + ![30](../../../static/img/integration/e-commerce/tiktok/30.png) 2. Ticked on the record you want to post @@ -199,17 +199,17 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] - Example of Sales Invoice posted from TikTok | Orders. - ![31](../../../static/img/e-commerce/tiktok/31.png) + ![31](../../../static/img/integration/e-commerce/tiktok/31.png) - ![32](../../../static/img/e-commerce/tiktok/32.png) + ![32](../../../static/img/integration/e-commerce/tiktok/32.png) 7. Status – Others than Default POST Action - Beside the post button, press the black triangle, and select “Post” to post it to sales invoice. - ![33](../../../static/img/e-commerce/tiktok/33.png) + ![33](../../../static/img/integration/e-commerce/tiktok/33.png) - ![34](../../../static/img/e-commerce/tiktok/34.png) + ![34](../../../static/img/integration/e-commerce/tiktok/34.png) ## Payment Tab @@ -217,7 +217,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 1. Click on Seller Center -> Finance Tab on left menu -> Settled Records -> Export - ![35](../../../static/img/e-commerce/tiktok/35.png) + ![35](../../../static/img/integration/e-commerce/tiktok/35.png) 2. Posting Payment @@ -225,21 +225,21 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 2. Click Load CSV (Statement downloaded from Step 1.6) - ![36](../../../static/img/e-commerce/tiktok/36.png) + ![36](../../../static/img/integration/e-commerce/tiktok/36.png) 3. Select the statement download from TikTok - ![37](../../../static/img/e-commerce/tiktok/37.png) + ![37](../../../static/img/integration/e-commerce/tiktok/37.png) 4. Click on Post - ![38](../../../static/img/e-commerce/tiktok/38.png) + ![38](../../../static/img/integration/e-commerce/tiktok/38.png) 5. Error in Red: Please sync all orders before posting payment. - Due to some order yet posting to Invoice. Before you do the posting, you can check on Invoice No column, post the orders with empty Invoice No. - ![39](../../../static/img/e-commerce/tiktok/39.png) + ![39](../../../static/img/integration/e-commerce/tiktok/39.png) :::note @@ -249,15 +249,15 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 6. Once you check all the order have been posting (without empty Invoice No), click on Post - ![40](../../../static/img/e-commerce/tiktok/40.png) + ![40](../../../static/img/integration/e-commerce/tiktok/40.png) 7. Posting Payment / Editing Invoice for TikTok Fees, please be patient - ![41](../../../static/img/e-commerce/tiktok/41.png) + ![41](../../../static/img/integration/e-commerce/tiktok/41.png) 8. Posting done - ![42](../../../static/img/e-commerce/tiktok/42.png) + ![42](../../../static/img/integration/e-commerce/tiktok/42.png) 9. Example of Customer Payment posted from TikTok | Payment @@ -267,17 +267,17 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] Same Payment Transaction Date will be posting as 1 Customer Payment. ::: - ![43](../../../static/img/e-commerce/tiktok/43.png) + ![43](../../../static/img/integration/e-commerce/tiktok/43.png) - ![44](../../../static/img/e-commerce/tiktok/44.png) + ![44](../../../static/img/integration/e-commerce/tiktok/44.png) 10. If the Order No starts with “ 7 ”, it is an adjustment, SQL System will combine the transactions that start with number “ 7 ” of the same date and post into 1 invoice (description : Tiktok Adjustment) using the SQL Systems current running number. - ![45](../../../static/img/e-commerce/tiktok/45.png) + ![45](../../../static/img/integration/e-commerce/tiktok/45.png) - ![46](../../../static/img/e-commerce/tiktok/46.png) + ![46](../../../static/img/integration/e-commerce/tiktok/46.png) - ![47](../../../static/img/e-commerce/tiktok/47.png) + ![47](../../../static/img/integration/e-commerce/tiktok/47.png) ## FAQ @@ -293,18 +293,18 @@ tags: ["SQL Account", "Integration", "e-Commerce", "Tiktok"] 3. Fetch Order raise error : E097 : Offset and limit sum 5100 must less than 5000, request id : 2101235d16xxxx - ![48](../../../static/img/e-commerce/tiktok/48.png) + ![48](../../../static/img/integration/e-commerce/tiktok/48.png) - TikTok API Returned error as too huge transaction being fetched, the only way is to shorten the date period. 4. The specified access token is invalid or expired. - ![49](../../../static/img/e-commerce/tiktok/49.png) + ![49](../../../static/img/integration/e-commerce/tiktok/49.png) - TikTok API link expired, you are required to go back maintain cloud and link again with TikTok platform (Refer Step 1.1.3 – 1.1.5) 5. API access frequently exceeds the limit. This ban will last 1 seconds. - ![50](../../../static/img/e-commerce/tiktok/50.png) + ![50](../../../static/img/integration/e-commerce/tiktok/50.png) - Error appears after click Fetch. Solution, close your TikTok tab in SQL Account -> re-open it -> click “Fetch” button again diff --git a/docs/integration/e-commerce/woocommerce.md b/docs/integration/e-commerce/woocommerce.md index 4ef79b78..5efe2aae 100644 --- a/docs/integration/e-commerce/woocommerce.md +++ b/docs/integration/e-commerce/woocommerce.md @@ -7,13 +7,13 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] ## Maintain Cloud Account -1. Select **![39](../../../static/img/banking/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) +1. Select **![39](../../../static/img/integration/banks/cloud-icon.png) > Maintain Cloud Account** (One Time Setting) - ![1](../../../static/img/e-commerce/easyStore/1.png) + ![1](../../../static/img/integration/e-commerce/easyStore/1.png) 2. Click on NEW - ![1](../../../static/img/e-commerce/woo/1.png) + ![1](../../../static/img/integration/e-commerce/woo/1.png) 1. Enter **Description** @@ -21,25 +21,25 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] 3. Click on **Link** Button - ![2](../../../static/img/e-commerce/woo/2.png) + ![2](../../../static/img/integration/e-commerce/woo/2.png) 4. Enter store URL - ![3](../../../static/img/e-commerce/woo/3.png) + ![3](../../../static/img/integration/e-commerce/woo/3.png) 5. Go to your shop website and copy this first part of the URL: - ![4](../../../static/img/e-commerce/woo/4.png) + ![4](../../../static/img/integration/e-commerce/woo/4.png) 6. Paste in you SQL Account and press GO - ![5](../../../static/img/e-commerce/woo/5.png) + ![5](../../../static/img/integration/e-commerce/woo/5.png) 7. Login to your Woocommerce account. 3. Press on SAVE - ![6](../../../static/img/e-commerce/woo/6.png) + ![6](../../../static/img/integration/e-commerce/woo/6.png) - Once linking Successful, system will be returned status Linking Success Message. @@ -49,17 +49,17 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] 1. Create Voucher / Discount Account Under Sales Adjustment - ![7](../../../static/img/e-commerce/tiktok/6.png) + ![7](../../../static/img/integration/e-commerce/tiktok/6.png) 2. Create Shipping and Transaction Fee under Expenses - ![8](../../../static/img/e-commerce/easyStore/8.png) + ![8](../../../static/img/integration/e-commerce/easyStore/8.png) - It is up to company want to create under which category. Some of the Company will create under Cost of Goods Sold. 2. Customer > Maintain Customer - ![9](../../../static/img/e-commerce/woo/9.png) + ![9](../../../static/img/integration/e-commerce/woo/9.png) 3. Stock > Maintain Stock Group @@ -67,11 +67,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] 1. Create Discount Stock Group - ![10](../../../static/img/e-commerce/woo/10.png) + ![10](../../../static/img/integration/e-commerce/woo/10.png) 2. Create Voucher Stock Group - ![11](../../../static/img/e-commerce/woo/11.png) + ![11](../../../static/img/integration/e-commerce/woo/11.png) - Repeat same step to create for Shipping, Transaction Fees and Claim Stock Group @@ -79,25 +79,25 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] 1. Create Discount Stock Item - ![12](../../../static/img/e-commerce/woo/12.png) + ![12](../../../static/img/integration/e-commerce/woo/12.png) 2. Create Voucher Item Code - ![13](../../../static/img/e-commerce/woo/13.png) + ![13](../../../static/img/integration/e-commerce/woo/13.png) - Repeat same step to create for Shipping, Transaction Fees and Claim Item Code ## Account Tab - 1. Click on ![39](../../../static/img/banking/cloud-icon.png) - > Woocommerce + 1. Click on ![39](../../../static/img/integration/banks/cloud-icon.png) - > Woocommerce 2. Click on Account Tab > Double click on your account - ![14](../../../static/img/e-commerce/woo/14.png) + ![14](../../../static/img/integration/e-commerce/woo/14.png) 1. Mapping Code - ![15](../../../static/img/e-commerce/woo/15.png) + ![15](../../../static/img/integration/e-commerce/woo/15.png) 2. Expiry Date @@ -111,15 +111,15 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] 1. Click on “Products” Tab, then click on “All Products” - ![16](../../../static/img/e-commerce/woo/16.png) + ![16](../../../static/img/integration/e-commerce/woo/16.png) 2. Click on the “Export” button - ![17](../../../static/img/e-commerce/woo/17.png) + ![17](../../../static/img/integration/e-commerce/woo/17.png) 3. Click “Generate CSV” once the export file has been generated. You will receive a file in .csv format. - ![18](../../../static/img/e-commerce/woo/18.png) + ![18](../../../static/img/integration/e-commerce/woo/18.png) 4. Load the file into Microsoft Office. Then you can edit the details you need. @@ -129,43 +129,43 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] 1. Click on Product Tab > Click on Fetch Button > System will return the message when fetching done. - ![19](../../../static/img/e-commerce/woo/19.png) + ![19](../../../static/img/integration/e-commerce/woo/19.png) - ![20](../../../static/img/e-commerce/woo/20.png) + ![20](../../../static/img/integration/e-commerce/woo/20.png) 2. Verify Status: Exist in Stock Item are meaning SQL and Seller SKU are having the same Item Code. - ![21](../../../static/img/e-commerce/woo/21.png) + ![21](../../../static/img/integration/e-commerce/woo/21.png) If you decide to use the same item code as Seller SKU, click on select All records > press on Post button for the first time so system will remember the settings. - ![22](../../../static/img/e-commerce/woo/22.png) + ![22](../../../static/img/integration/e-commerce/woo/22.png) 3. Verified Status: Success when posting done - ![23](../../../static/img/e-commerce/woo/23.png) + ![23](../../../static/img/integration/e-commerce/woo/23.png) :::note Once you post successful, system will keep the Shop SKU in Stock Item as Alternative Item ::: - ![24](../../../static/img/e-commerce/woo/24.png) + ![24](../../../static/img/integration/e-commerce/woo/24.png) 4. You can still decide to map to different item code (system will auto ticked the record you change the item code), once done all, click on POST button. - ![25](../../../static/img/e-commerce/woo/25.png) + ![25](../../../static/img/integration/e-commerce/woo/25.png) ## Orders Tab 1. Click on Orders Tab - ![26](../../../static/img/e-commerce/woo/26.png) + ![26](../../../static/img/integration/e-commerce/woo/26.png) 2. Status - ![27](../../../static/img/e-commerce/woo/27.png) + ![27](../../../static/img/integration/e-commerce/woo/27.png) - ![28](../../../static/img/e-commerce/woo/28.png) + ![28](../../../static/img/integration/e-commerce/woo/28.png) :::tip Each order number will be posted once. You can delete the Invoice if you want to repost. @@ -175,37 +175,37 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] 1. Select Date Range > Click on Refresh Order - ![29](../../../static/img/e-commerce/woo/29.png) + ![29](../../../static/img/integration/e-commerce/woo/29.png) Please be patient, system is on the way to fetch the order from WooCommerce - ![30](../../../static/img/e-commerce/woo/30.png) + ![30](../../../static/img/integration/e-commerce/woo/30.png) System will return the message when Fetching Done, Press OK. - ![31](../../../static/img/e-commerce/woo/31.png) + ![31](../../../static/img/integration/e-commerce/woo/31.png) 4. Post Order 1. Click on the status you want to post the order, let us take an example on Completed - > Ticked all > Click on Post - ![32](../../../static/img/e-commerce/woo/32.png) + ![32](../../../static/img/integration/e-commerce/woo/32.png) 2. If you did not tick on any order when do the posting, system will raise a message: You have not selected any order. Would you like to select all? If you would like to post all > Press Yes - ![33](../../../static/img/e-commerce/woo/33.png) + ![33](../../../static/img/integration/e-commerce/woo/33.png) Please be patient to wait for the order posting. - ![34](../../../static/img/e-commerce/woo/34.png) + ![34](../../../static/img/integration/e-commerce/woo/34.png) 3. Click on OK when done posting - ![35](../../../static/img/e-commerce/woo/35.png) + ![35](../../../static/img/integration/e-commerce/woo/35.png) 5. Verify Status - ![36](../../../static/img/e-commerce/woo/36.png) + ![36](../../../static/img/integration/e-commerce/woo/36.png) 1. Posted @@ -225,7 +225,7 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] 1. Click on Item Code Drop Down, user can manually map the item code - ![37](../../../static/img/e-commerce/woo/37.png) + ![37](../../../static/img/integration/e-commerce/woo/37.png) 2. Ticked on the record you want to post @@ -235,11 +235,11 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] - Example of Sales Invoice posted from WooCommerce | Orders. - ![38](../../../static/img/e-commerce/woo/38.png) + ![38](../../../static/img/integration/e-commerce/woo/38.png) - ![39](../../../static/img/e-commerce/woo/39.png) + ![39](../../../static/img/integration/e-commerce/woo/39.png) - ![40](../../../static/img/e-commerce/woo/40.png) + ![40](../../../static/img/integration/e-commerce/woo/40.png) 7. Sales Credit Note (Refund) @@ -247,17 +247,17 @@ tags: ["SQL Account", "Integration", "e-Commerce", "WooCommerce"] 1. Example of Sales Credit Note posted from WooCommerce | Orders. - ![41](../../../static/img/e-commerce/woo/41.png) + ![41](../../../static/img/integration/e-commerce/woo/41.png) 2. Tick which orders key you want to post to sales credit note. If post is successful, the verify status should show “Success”. You can see a Sales credit Note has been created in Sales | Credit Note - ![42](../../../static/img/e-commerce/woo/42.png) + ![42](../../../static/img/integration/e-commerce/woo/42.png) 3. For a refund voucher, a sales credit note will be created as well as a sales invoice. - ![43](../../../static/img/e-commerce/woo/43.png) + ![43](../../../static/img/integration/e-commerce/woo/43.png) - ![44](../../../static/img/e-commerce/woo/44.png) + ![44](../../../static/img/integration/e-commerce/woo/44.png) 4. In the customer credit note, The CN knocks off the outstanding amount of the Invoice. diff --git a/docs/integration/pos/batch-module.md b/docs/integration/pos/batch-module.md index 7d4ad91e..c02a4047 100644 --- a/docs/integration/pos/batch-module.md +++ b/docs/integration/pos/batch-module.md @@ -1,5 +1,6 @@ --- title: Batch Number Module +sidebar_position: 2 description: A guide to Batch Number Module for SQL POS System slug: /integration/pos/batch-module tags: ["SQL Account", "POS"] @@ -26,25 +27,25 @@ This feature is very useful and widely explore for alternative usage like: 2. Fill in the batch details: - ![1](../../../static/img/pos/batch-module/1.png) + ![1](../../../static/img/integration/pos/batch-module/batch-module.png) - ![2](../../../static/img/pos/batch-module/2.png) + ![2](../../../static/img/integration/pos/batch-module/batch-module1.png) 3. Assign the stock item to the batch number. - ![3](../../../static/img/pos/batch-module/3.png) + ![3](../../../static/img/integration/pos/batch-module/batch-module2.png) 4. In SQL Pos -> Setting -> System -> Batch No. Module -> Tick **YES** - ![4](../../../static/img/pos/batch-module/4.png) + ![4](../../../static/img/integration/pos/batch-module/batch-module3.png) 5. In SQL Pos, when you select the item, it will prompt out to ask you to choose on the batch for this item. - ![5](../../../static/img/pos/batch-module/5.png) + ![5](../../../static/img/integration/pos/batch-module/batch-module4.png) 6. When you print out the receipt, the receipt will show out your batch number. The description for batch that prints out in receipt will follow the setting that you had done. - ![6](../../../static/img/pos/batch-module/6.png) + ![6](../../../static/img/integration/pos/batch-module/batch-module5.png) - ![7](../../../static/img/pos/batch-module/7.png) + ![7](../../../static/img/integration/pos/batch-module/batch-module6.png) diff --git a/docs/integration/pos/category.md b/docs/integration/pos/category.md index fa273b3a..f1a3e9e3 100644 --- a/docs/integration/pos/category.md +++ b/docs/integration/pos/category.md @@ -1,5 +1,6 @@ --- title: Category +sidebar_position: 3 description: A guide to setup category for SQL POS System slug: /integration/pos/category tags: ["SQL Account", "POS"] @@ -7,22 +8,22 @@ tags: ["SQL Account", "POS"] ## Steps and Instructions -### 1. Go to setting | POS Screen | Touch Mode | press OK +### Go to setting | POS Screen | Touch Mode | press OK -![1](../../../static/img/pos/category/1.png) +![1](../../../static/img/integration/pos/category/category-steps.png) -### 2. Select Category | New | Example : Vegetable +### Select Category | New | Example : Vegetable -![2](../../../static/img/pos/category/2.png) +![2](../../../static/img/integration/pos/category/category-steps1.png) -### 3. Select Item, eg. Lady Finger +### Select Item, eg. Lady Finger -![3](../../../static/img/pos/category/3.png) +![3](../../../static/img/integration/pos/category/category-steps2.png) -### 4. You can also load the photo as display photo in POS, continue to update all item +### You can also load the photo as display photo in POS, continue to update all item -![4](../../../static/img/pos/category/4.png) +![4](../../../static/img/integration/pos/category/category-steps3.png) -### 5. SQL POS will show it as picture below +### SQL POS will show it as picture below -![5](../../../static/img/pos/category/5.png) +![5](../../../static/img/integration/pos/category/category-steps4.png) diff --git a/docs/integration/pos/faq.md b/docs/integration/pos/faq.md new file mode 100644 index 00000000..ffd7fef0 --- /dev/null +++ b/docs/integration/pos/faq.md @@ -0,0 +1,317 @@ +--- +sidebar_position: 11 +title: FAQ +description: SQL POS frequently-asked questions +slug: /faq/sql-pos +tags: ["SQL Account", "FAQ", "POS"] +--- +## Normal POS FAQ + +### Error When install SQL POS : Must specify additional Parameter + +![1](../../../static/img/integration/pos/qna/installation-error.png) + +**Solution:** + + - **If New Installation:** + +![2](../../../static/img/integration/pos/qna/new-installation.png) + + ``` + 1. Delete all the Item from C:\itUnicode + 2. Control Panel | Uninstall SQL-POS + ``` + +- **If already have transactions:** + + ![3](../../../static/img/integration/pos/qna/new-installation1.png) + + 1. Backup SQL POS first + + 2. Delete all the Item from `C:\itUnicode` + + 3. Control Panel | Uninstall SQL-POS + +### Use Offline Mode + +- Unable to capture live Master Transaction from SQL Acc Master + +### SQL POS is only Standalone PC + +- The reason due to when Database corrupt, it won’t corrupt all, so preferable + Standalone + +### Even though I set to Each Bill(Real Time) still unable to get the UTD QTY in SQL POS? + +- In Setting - > SQL Account -> Need to ticked Run This POS When call from + SQLAcc + + ![4](../../../static/img/integration/pos/qna/unable-get-utd-qty.png) + +### Why keep prompt me Network failed? + +1. Make sure have install Firebird + +2. SQL Account have to Set to **Firebird Server** if setting ticked **Run this POS when call from SQLAcc** + +### Added Stock Item Code with Chinese word, prompt me unable to find this Product Code ??? + +- SQL POS unable to support Unicode on Code, may key in the Chinese Word in Item Description +- Code Only Alphanumeric + +### Previously using IT Uni POS, how should I integrate in SQL? + +#### 1. SQL POS 316 -> FoxPro + +1. In SQL Account -> Click on SQL POS(to generate New POS Database) + +2. In SQLPOS-> Setting -> System Tab -> Tools -> Select UniPos Migration -> + + ![5](../../../static/img/integration/pos/qna/integrate-it-uni-pos.png) + + 1. Import From : C:\user\public\itposdata or C:\user\public\unipos + + 2. Ticked all the Setting + + 3. Click on Migrate + +#### 2. SQL POS 333 - > Firebird Database + +In SQL POS System -> Double click SQL POS -> Logon Screen -> Right Click +Restore Database + +### Print Receipt Chinese word show in ??? + +- Reason due to Non-Unicode program set to Chinese + +Solution : + +- Control Panel -> Regional -> Language for Non Unicode -> Set to English (United States) + + ![6](../../../static/img/integration/pos/qna/print-receipt-chinese-word.png) + +- Font change to Arial + +1. Click on Design report + + ![7](../../../static/img/integration/pos/qna/print-receipt-chinese-word1.png) + +2. Click on Modify + + ![8](../../../static/img/integration/pos/qna/print-receipt-chinese-word2.png) + +3. Click on Description Text Object -> Menu select Format -> Font + + ![9](../../../static/img/integration/pos/qna/print-receipt-chinese-word3.png) + +4. Change to Arial + + ![10](../../../static/img/integration/pos/qna/print-receipt-chinese-word4.png) + +5. Save the report + +### Error Message : Warning : Assigned Printer does not exist : Print to PDF (Mac Desktop) + + ![11](../../../static/img/integration/pos/qna/printer-not-exist.png) + +Solution: + +1. **Testing Database only** - Delete whole ITUnicode database +2. **Real Database** – May request backup from user upload to us to check (suspect file corrupted) + +### Unable to capture correct price Tag Price + +Assigned price tag for item A and Item B, how come only first Item A will capture price tag +price, but second item B ref price? + +Solution : + +Setting -> SQL Account -> Ticked Unlink SQL Accounting when available + +![12](../../../static/img/integration/pos/qna/printer-not-exist-solution.png) + +### Error Message : Failed to Set + +![13](../../../static/img/integration/pos/qna/failed-to-set-error.png) + +**Solution :** + +- Make sure install SQL With 759 & above + +### What is Price Set in Stock Item? + +- Multiple price set in Maintain Stock Item, user allow to set multiple price with comma. + +- Example : + - Price 1 : RM 10. + - Price 2 : RM 15. + - Price 3 : RM 20. + + ![14](../../../static/img/integration/pos/qna/price-set.png) + +- When select itemcode RED BEAN 500G, auto prompt the price for user to select + + ![15](../../../static/img/integration/pos/qna/price-set1.png) + +### What to do if I want to print Barcode Label with Chinese Company Name? + +- Save as JPEG, then load the picture into Foxit Design ~ + +### Error Message : File in use when design barcode report + +![16](../../../static/img/integration/pos/qna/file-in-use-error.png) + +- Try Exit the program and logon +- Delete this report and design again + +### Backup Error : C:\itUnicode\SQL-POS\SQL-POS-0001.fdb could not be read + +- Is due to IT Sync is running behind, may shut down IT Sync before Backup + +### Close Counter Collect Payment Type is not match with Payment Method select in Bills + +![17](../../../static/img/integration/pos/qna/payment-type-not-match.png) + +- Collect Payment Summary Payment Type is group by Account Code, may check + whether the payment method is using same account code ~ + +:::info +Step to check Payment Method post to what Account + +- Setting -> POS Screen -> Payment Method - > Double click on the Payment Name + +::: + +### Why in Setting Receipt & License Retrieve From SQL button is missing + +![18](../../../static/img/integration/pos/qna/receipt-license-retrieve-button-missing.png) + +- Once License Registered, the button will disable ~ + +### Same receipt will auto cut to few pages + +![19](../../../static/img/integration/pos/qna/receipt-auto-cut.png) + +**Solution :** + +- Upgrade to latest version of 334, some of the printer after design, paper size changed incorrectly, need to Tweak it again + +**Step to Tweak :** + +- In Print Receipt -> Follow below step + +![20](../../../static/img/integration/pos/qna/receipt-auto-cut-solution.png) + +### Unable to key In Daily Cash Sales No with message : The Control is Read Only + +![21](../../../static/img/integration/pos/qna/unable-key-in-daily-cash-sales.png) + +**Answer :** + +- Control by license, need email to request new license key, mean Counter ID and CashSales number prefix based on license. + +### Receipt format unable to show Chinese word + +1. Menu Screen -> Select **Print Receipt** + +2. Click on **Modify** - > + +3. Select the **Report Name** - > Click on **Modify** + +4. Double click on the object to show in Chinese + + ![22](../../../static/img/integration/pos/qna/unable-show-chinese-word.png) + +:::caution +After Fill in \ , remember save the report. +::: + +### Proper Step to set Branch SQL POS (Error Failed to Set ) + +1. Configure and make sure SQL able to test successful + +2. Add Port 3050 + +3. In SQL POS : + +![23](../../../static/img/integration/pos/qna/set-branch-pos.png) + +- Put in DNS Number +- Ping result lost 0 = 0% +- Unticked **DisableChkPing** + +### Fail to assign Printer + +![24](../../../static/img/integration/pos/qna/fail-assign-printer.png) + +**Solution :** + +1. Check in **Setting** - > **Device** - > Receipt Printer -> assigned valid Receipt Printer + **A4 Printer** Normally use EPSON LQ-310 or other laser printer - > Assigned + valid Laser Printer + +2. Check Report Format may assigned to valid printer + +3. Window XP -> Upgrade to Window 7 & Above + +### How to disable preview receipt when payment done + +![25](../../../static/img/integration/pos/qna/disable-preview-receipt.png) + +Solution : + +- SQL POS **Setting** - > **Receipt & License** Tab -> **No Copy of Receipt** set to **0** + +### What to do if disallow User to return stock? + +Maintain User -> Refund Item -> + +![26](../../../static/img/integration/pos/qna/disallow-user-return-stock.png) + +:::note +Set to Yes, user allow to return stock with enter - 1 + +Set to No, user disallow to save negative stock +::: + +### How to un-closed counter? + +➔ Close Counter -> Right click un-closed counter + +### Unable to Sent Email from Gmail : Fail to sent email + +:::info +*(Menu -> Export Cash Sales -> Email Button -> Setting Email Server Button)* +::: + +![27](../../../static/img/integration/pos/qna/unable-sent-email.png) + +**Solution :** + +1. Follow this [Google Account Security page](https://myaccount.google.com/security) + +2. Click on **Less Secure App Access** + + ![28](../../../static/img/integration/pos/qna/unable-sent-email-solution.png) + +3. Press the scrolling bar to Turn on + + ![29](../../../static/img/integration/pos/qna/unable-sent-email-solution1.png) + +### Post to SQL Account raise Error: Failed to Post Payment of 02/6/2020 OLED IDispatch exception code 0 from : knockoff amount (0.00) must not exceed outstanding amount (321.6) + +![30](../../../static/img/integration/pos/qna/fail-post-payment.png) + +**Solution :** + +1. Make sure SQL Pos version 340 & Above + +2. SQL POS Setting -> SQL Account -> Ticked **Direct write to SQLAcc** & try to post again + +## SQL POS F&B + +### Error Message : Counter is closed, wait for Main Counter to open + + ![31](../../../static/img/integration/pos/qna/counter-closed.png) + +- This error message mean when there have multiple POS link together, make sure Main Counter have to Open Counter first. diff --git a/docs/integration/pos/intro.md b/docs/integration/pos/intro.md new file mode 100644 index 00000000..a59a7937 --- /dev/null +++ b/docs/integration/pos/intro.md @@ -0,0 +1,151 @@ +--- +sidebar_position: 1 +title: Introduction +description: A guide to system requirements for SQL POS System +slug: /integration/pos/introduction +tags: ["SQL Account", "POS"] +--- + +![1](../../../static/img/integration/pos/intro/pos.png) + +Cash collection, Inventory Management and Business Intelligence - all in one place. Seamless integration make it easy to sell you products and accept multiple payments. Inventory, orders and customer data are automatically updated. SQL Pos covers a wide range of industries - Mini Markets, Book Stores, Hardware Stores, Pharmacies Medical Sore and many more. + +## System Requirements + +The following requirements are needed in order to run SQL POS + +- for **Standalone or Client (Workstation) PC** + +:::info + +- [`SQL Accounting`](../../intro.md) +- Microsoft Windows 10 and above (recommended with 64 bits windows). +- XGA - minimum of 16 bis colors recommended. +- Intel i5 and above computer. +- 4 GB of RAM (recommended 8 GB and above). +- 10 GB of available hard disk space (recommended use the Solid-State Drive (SSD) Disk). +- Microsoft Windows Compatible Printer. + +::: + +- for **Server PC** + +:::info + +- [`Firebird`](../../getting-started/multi-user-setup.md#firebird-installation) +- [`SQL Accounting`](../../intro.md) +- Microsoft Windows 10 and above (recommended with 64 bits windows). +- XGA - minimum of 16 bis colors recommended. +- Intel i5, i7 and above computer. +- 8 GB of RAM (recommended 12 GB and above). +- 10 GB of available hard disk space (recommended use the Solid-State Drive (SSD) Disk). +- Microsoft Windows Compatible Printer. +- 100 Base-T NIC. + +::: + +## System + +### System - System + +![system-system](../../../static/img/integration/pos/intro/system-system.png) + +### GST + +| **Field** | **Description** | +|------------|----------------| +| **GST Implementation** | - **Start GST from** – When GST starts charging
- **None** – No Tax
- **Start SST from** – When SST starts charging | +| **Date** | - Enter the Start Date for GST/SST | +| **Price set in SQL are** | - **Tax Inclusive** – System will reverse the price to exclude tax amount
- **Tax Exclusive** – System will directly get the price | +| **When Ask Price** | - **Tax Inclusive** – System will reverse the entered price to exclude tax amount
- **Tax Exclusive** – System will directly use the price entered
- **Follow Record** – System will follow the last selected setting | +| **Tax Rate** | - The tax rate | + +### Decimal Points + +| **Field** | **Description** | +|------------|----------------| +| **Qty** | Quantity Field Display format | +| **Cost** | Stock Unit Cost Display format | +| **Price** | Sales Unit Price Display format | + +### Off Line Mode + +| **Field** | **Description** | +|------------|----------------| +| **Auto Prepare Off Line Data on every** | Set Number of Days to Update | +| **Use Of Line Mode** | **Yes** – To Enable Off Line Mode Function
**No** – To Disable Off Line Mode Function | +| **Prepare Now** | Adhoc update Data | + +### Stock Item + +| **Field** | **Description** | +|------------|----------------| +| **Fixed Value On** | **Cost** – ???
**Price** – ???
**None** – ??? | +| **Mark Up** | ??? | +| **Round Decimal** | ??? | +| **Category as** | **Stock Category** – ???
**Stock Group** – ??? | + +### Add On Module + +| **Field** | **Description** | +|------------|----------------| +| **Advance Commission Module base on** | **Bill** – ???
**Item** – ???
**None** – ??? | +| **Serial Number** | **Yes** – ???
**No** – ???
**None** – ??? | +| **Price Checker Module** | **Yes** – ???
**No** – ???
**None** – ??? | +| **Sales Order Module** | **Yes** – ???
**No** – ???
**None** – ??? | +| **iT-Sync Module** | **Yes** – ???
**No** – ???
**None** – ??? | +| **Multiple Currency Module** | **Yes** – ???
**No** – ???
**None** – ??? | +| **Batch No. Module** | **Yes** – ???
**No** – ???
**None** – ??? | + +### Import Export + +| **Field** | **Description** | +|------------|----------------| +| **Export Cash Sales** | **Yes** – Allow Export Cash Sales Data (Default)
**No** – Not Allow Export Cash Sales Data | +| **Import Cash Sales** | **Yes** – Allow Import Cash Sales Data (Default)
**No** – Not Allow Import Cash Sales Data | +| **Email while Close counter** | **Yes** – ???
**No** – (Default) | + +### Group Type Date + +This Option is to determine what date to post to SQL Accounting + +| **Field** | **Description** | +|------------|----------------| +| **Transc. Date** | Post Base On Transactions Date (Default) | +| **Open Counter Date** | Post Base on Open Counter Date.
This is useful if Counter is closed on next Date but account needs to be posted on Today. | +| **Close Counter Date** | Post Base on Open Counter Date.
This is useful if Counter is closed on next Date and account needs to be posted on next Date. | + +### Free Tools + +| **Field** | **Description** | +|------------|----------------| +| **Import Product list from Excel File** | ??? | +| **Import Customer list from Excel File** | ??? | +| **Import Supplier list from Excel File** | ??? | +| **Global Price Adjustment** | ??? | +| **Delete Zero Quantity Items** | ??? | +| **Fix Firebird Shutdown Database** | ??? | + +### Tools + +| **Field** | **Description** | +|------------|----------------| +| **Backup Database** | Backup the current SQL Pos DB | +| **Restore Database** | ??? | +| **Delete Data / Clean Test Data** | ??? | +| **Unipos Migration** | ??? | + +### Theme + +This function is allow user to change the Application Skin/Theme to suit the user. From form till grid & label + + ![3](../../../static/img/integration/pos/intro/pos2.png) + +## System - Receipt & License + +This Page is to: + +- Register the SQL Pos +- Design the Receipt + + ![4](../../../static/img/integration/pos/intro/pos3.png) diff --git a/docs/integration/pos/item-template.md b/docs/integration/pos/item-template.md index f9170713..fa87993a 100644 --- a/docs/integration/pos/item-template.md +++ b/docs/integration/pos/item-template.md @@ -1,5 +1,6 @@ --- title: Item Template +sidebar_position: 4 description: A guide to item template for SQL POS System slug: /integration/pos/item-template tags: ["SQL Account", "POS"] @@ -13,34 +14,34 @@ tags: ["SQL Account", "POS"] 1. Setup your item template from Stock | Maintain Item Template | New -![1](../../../static/img/pos/item-template/1.png) +![1](../../../static/img/integration/pos/item-template/pos-item-template.png) ## SQL POS 1. Go to Setting - ![2](../../../static/img/pos/item-template/2.png) + ![2](../../../static/img/integration/pos/item-template/pos-item-template1.png) 2. Go to **POS Screen** | click on **Setting Action Button** - ![3](../../../static/img/pos/item-template/3.png) + ![3](../../../static/img/integration/pos/item-template/pos-item-template2.png) 3. Click on + to insert a new line, enter a **display name** by double click, on Action column select stock template and make sure the show checkbox is ticked | click on OK | OK - ![4](../../../static/img/pos/item-template/4.png) + ![4](../../../static/img/integration/pos/item-template/pos-item-template3.png) 4. Go to POS - ![5](../../../static/img/pos/item-template/5.png) + ![5](../../../static/img/integration/pos/item-template/pos-item-template4.png) 5. On right bottom column you will able to see 1 new option Item Template , click on it - ![6](../../../static/img/pos/item-template/6.png) + ![6](../../../static/img/integration/pos/item-template/pos-item-template5.png) 6. All the item template set in your SQL Account able to select here, you can double click to choose your package / template. - ![7](../../../static/img/pos/item-template/7.png) + ![7](../../../static/img/integration/pos/item-template/pos-item-template6.png) 7. The items will be display out , and you can proceed with payment or if there is any discount, just set the discount as usual by enter in discount column, or choose the discount option on right panel. - ![8](../../../static/img/pos/item-template/8.png) + ![8](../../../static/img/integration/pos/item-template/pos-item-template7.png) diff --git a/docs/integration/pos/membership.md b/docs/integration/pos/membership.md index ccdee83a..3ee56030 100644 --- a/docs/integration/pos/membership.md +++ b/docs/integration/pos/membership.md @@ -1,5 +1,6 @@ --- title: Membership +sidebar_position: 5 description: A guide to setup membership for SQL POS System slug: /integration/pos/memebrship tags: ["SQL Account", "POS"] @@ -9,53 +10,53 @@ tags: ["SQL Account", "POS"] 1. Go to setting > system > enable member module - ![1](../../../static/img/pos/membership/1.png) + ![1](../../../static/img/integration/pos/membership/membership-setting.png) 2. Go to SQL Account, need set the posting type by each bill, or each bill (real time) - the pos cash sales need posted into SQL Account only the point will be captured - ![2](../../../static/img/pos/membership/2.png) + ![2](../../../static/img/integration/pos/membership/membership-setting1.png) 3. In setting > others, you can setup the membership detail - ![3](../../../static/img/pos/membership/3.png) + ![3](../../../static/img/integration/pos/membership/membership-setting2.png) 4. In setting \> pos screen \> pos title command, add \ \& \ - ![4](../../../static/img/pos/membership/4.png) + ![4](../../../static/img/integration/pos/membership/membership-setting3.png) - ![5](../../../static/img/pos/membership/5.png) + ![5](../../../static/img/integration/pos/membership/membership-setting4.png) ## Transactions ### Select members during issue bill -![6](../../../static/img/pos/membership/6.png) +![6](../../../static/img/integration/pos/membership/select-members.png) 1. When payment, point entitled for this bill will show at bottom, if you want to redeem voucher / point, then can also click on the voucher button - ![7](../../../static/img/pos/membership/7.png) + ![7](../../../static/img/integration/pos/membership/select-members1.png) 2. Click on deduct point, system will show you balance point, and how much value can redeem, insert your desired redeem value, and confirm voucher. - ![8](../../../static/img/pos/membership/8.png) + ![8](../../../static/img/integration/pos/membership/select-members2.png) 3. Once confirmed, you can see the subtotal RM 50 – voucher RM 35 = Total Amount to pay is RM 15 - ![9](../../../static/img/pos/membership/9.png) + ![9](../../../static/img/integration/pos/membership/select-members3.png) ### Add new member 1. Click on the member icon at bottom > Add - ![10](../../../static/img/pos/membership/10.png) + ![10](../../../static/img/integration/pos/membership/add-members.png) - ![11](../../../static/img/pos/membership/11.png) + ![11](../../../static/img/integration/pos/membership/add-members1.png) 2. Insert the name, click on member, to add to phone number, IC No, etc, then click on Add /OK - ![12](../../../static/img/pos/membership/12.png) + ![12](../../../static/img/integration/pos/membership/add-members2.png) ### Search member by phone number or IC No @@ -67,27 +68,27 @@ tags: ["SQL Account", "POS"] if you ic number just now create member time with -, then you need search with -, xxxxxx-xx-xxxx ::: - ![13](../../../static/img/pos/membership/13.png) + ![13](../../../static/img/integration/pos/membership/search-members.png) ### Check member history 1. After selected the customer > click on member history on top icon - ![14](../../../static/img/pos/membership/14.png) + ![14](../../../static/img/integration/pos/membership/check-member-history.png) 2. All point gained / redeemed will be display, you can preview / print - ![15](../../../static/img/pos/membership/15.png) + ![15](../../../static/img/integration/pos/membership/check-member-history1.png) ### Set birthday discount 1. Go to setting > others, set the birthday discount (on birthday actual date) , or birthday month discount, then set the % of discount entitled. - ![16](../../../static/img/pos/membership/16.png) + ![16](../../../static/img/integration/pos/membership/set-birthday-discount.png) 2. Example today is ALI Bday, when Ali purchase thing from you, during payment, system will auto prompt its Ali birthday, and a 20% discount will be entitled - ![17](../../../static/img/pos/membership/17.png) + ![17](../../../static/img/integration/pos/membership/set-birthday-discount1.png) ## Voucher @@ -95,9 +96,9 @@ tags: ["SQL Account", "POS"] 1. Go to stock item, click on more > generate voucher > new - ![18](../../../static/img/pos/membership/18.png) + ![18](../../../static/img/integration/pos/membership/generate-voucher.png) - ![19](../../../static/img/pos/membership/19.png) + ![19](../../../static/img/integration/pos/membership/generate-voucher1.png) :::tip Example This example will show generate voucher by redeem point, example this customer available point @@ -108,21 +109,21 @@ tags: ["SQL Account", "POS"] to print the voucher. ::: - ![20](../../../static/img/pos/membership/20.png) + ![20](../../../static/img/integration/pos/membership/generate-voucher2.png) So next time when this customer come purchase, during payment, if they provide you the voucher, you can scan / key in the voucher code 2. Click on **voucher** , during payment - ![21](../../../static/img/pos/membership/21.png) + ![21](../../../static/img/integration/pos/membership/generate-voucher3.png) 3. Scan the voucher code / manual search the voucher number, example customer given 3 vouchers, scan / search all the vouchers, click confirm voucher - ![22](../../../static/img/pos/membership/22.png) + ![22](../../../static/img/integration/pos/membership/generate-voucher4.png) So the bill RM 99 – Voucher RM 30 = customer to pay is RM 69. - ![23](../../../static/img/pos/membership/23.png) + ![23](../../../static/img/integration/pos/membership/generate-voucher5.png) ### Generate Free Voucher? @@ -130,40 +131,40 @@ tags: ["SQL Account", "POS"] 2. Example your company given Free voucher for any event, then you can set generate for certain member or all member, then set the voucher amount, the expiry date, and number of vouchers. - ![24](../../../static/img/pos/membership/24.png) + ![24](../../../static/img/integration/pos/membership/generate-free-voucher.png) ### Access right to generate voucher 1. Click on user list > edit the user > others > generate free voucher, generate point voucher - ![25](../../../static/img/pos/membership/25.png) + ![25](../../../static/img/integration/pos/membership/access-right-generate-voucher.png) - ![26](../../../static/img/pos/membership/26.png) + ![26](../../../static/img/integration/pos/membership/access-right-generate-voucher1.png) ### Set default all members / selected member has a percentage discount on bill? 1. In SQL Account, go to stock > maintain stock price tag > create the price tag - ![27](../../../static/img/pos/membership/27.png) + ![27](../../../static/img/integration/pos/membership/set-member-discount.png) 2. In SQL POS, stock item > more > price tag, to set the discount rate > NEW - ![28](../../../static/img/pos/membership/28.png) + ![28](../../../static/img/integration/pos/membership/set-member-discount1.png) 3. Set the discount period, and the discount rate > save - ![29](../../../static/img/pos/membership/29.png) + ![29](../../../static/img/integration/pos/membership/set-member-discount2.png) ### Assign member with price tag? 1. In SQL POS, during create new member, you can add tag the customer below which group. - ![30](../../../static/img/pos/membership/29.png) + ![30](../../../static/img/integration/pos/membership/assign-member-price-tag.png) 2. Choose this member below to which group - ![31](../../../static/img/pos/membership/29.png) + ![31](../../../static/img/integration/pos/membership/assign-member-price-tag1.png) 3. When issue bill, once u selected the member, the discount will inserted automatically. - ![32](../../../static/img/pos/membership/29.png) + ![32](../../../static/img/integration/pos/membership/assign-member-price-tag2.png) diff --git a/docs/integration/pos/new-payment-method.md b/docs/integration/pos/new-payment-method.md index 7d605540..5da425da 100644 --- a/docs/integration/pos/new-payment-method.md +++ b/docs/integration/pos/new-payment-method.md @@ -1,5 +1,6 @@ --- title: New Payment Method +sidebar_position: 6 description: A guide to setup new payment method for SQL POS System slug: /integration/pos/new-payment-method tags: ["SQL Account", "POS"] @@ -9,32 +10,32 @@ tags: ["SQL Account", "POS"] ### Step 1: Click on setting -![1](../../../static/img/pos/new-payment-method/1.png) +![1](../../../static/img/integration/pos/new-payment-method/new-payment-method-setting.png) ### Step 2 : go to POS Screen, and click on Payment Type -![2](../../../static/img/pos/new-payment-method/2.png) +![2](../../../static/img/integration/pos/new-payment-method/new-payment-method-setting1.png) ### Step 3 : Modify Payment Type - Click New to insert new payment type or click Edit to modify -![3](../../../static/img/pos/new-payment-method/3.png) +![3](../../../static/img/integration/pos/new-payment-method/new-payment-method-setting2.png) ### Step 4 : Choose Payment Method - Choose your payment method map to SQL Account bank account -![4](../../../static/img/pos/new-payment-method/4.png) +![4](../../../static/img/integration/pos/new-payment-method/new-payment-method-setting3.png) #### Step 4a : Set default debtor code - You can set a default debtor code for this payment method if the transaction not choosing any debtor code -![5](../../../static/img/pos/new-payment-method/5.png) +![5](../../../static/img/integration/pos/new-payment-method/new-payment-method-setting4.png) #### Step 4b: Set the default charges - You can also set default have 2% or a fixed amount of rm 2 extra charges for this payment method -![6](../../../static/img/pos/new-payment-method/6.png) +![6](../../../static/img/integration/pos/new-payment-method/new-payment-method-setting5.png) diff --git a/docs/integration/pos/serial-num.md b/docs/integration/pos/serial-num.md index d70a99f2..32f6f22c 100644 --- a/docs/integration/pos/serial-num.md +++ b/docs/integration/pos/serial-num.md @@ -1,5 +1,6 @@ --- title: Serial Number +sidebar_position: 7 description: A guide to setup SQL POS Serial Number Module for SQL POS System slug: /integration/pos/serial-num tags: ["SQL Account", "POS"] @@ -11,11 +12,11 @@ Serial Number module is an additional module. Make sure you had turned on the mo Please check under Setting -> System -> Serial Number Module ::: -![1](../../../static/img/pos/serial-num/1.png) +![1](../../../static/img/integration/pos/serial-num/serial-number-module.png) In SQL Account, make sure you had turn on the serial no for your item as well. -![2](../../../static/img/pos/serial-num/2.png) +![2](../../../static/img/integration/pos/serial-num/serial-number-module1.png) ## How to insert the serial number? @@ -23,13 +24,13 @@ In SQL Account, make sure you had turn on the serial no for your item as well. 1. Scan / Key in the serial number when you issue Purchase Goods Received / Purchase Invoice - ![3](../../../static/img/pos/serial-num/3.png) + ![3](../../../static/img/integration/pos/serial-num/insert-serial-number.png) 2. In SQL Pos, you can scan / type the serial number, the item will be automatically selected. - ![4](../../../static/img/pos/serial-num/4.png) + ![4](../../../static/img/integration/pos/serial-num/insert-serial-number1.png) - ![5](../../../static/img/pos/serial-num/5.png) + ![5](../../../static/img/integration/pos/serial-num/insert-serial-number2.png) ### Method 2 @@ -39,8 +40,8 @@ to insert Serial Number by Scan / Type, Or click on the Pick Serial No. button t number. ::: -![6](../../../static/img/pos/serial-num/6.png) +![6](../../../static/img/integration/pos/serial-num/insert-serial-number3.png) -![7](../../../static/img/pos/serial-num/7.png) +![7](../../../static/img/integration/pos/serial-num/insert-serial-number4.png) -![8](../../../static/img/pos/serial-num/8.png) +![8](../../../static/img/integration/pos/serial-num/insert-serial-number5.png) diff --git a/docs/integration/pos/sub-item.md b/docs/integration/pos/sub-item.md index 43709ee5..d78bf1e5 100644 --- a/docs/integration/pos/sub-item.md +++ b/docs/integration/pos/sub-item.md @@ -1,5 +1,6 @@ --- title: Sub Item +sidebar_position: 8 description: A guide to setup sub-item for SQL POS System slug: /integration/pos/sub-item tags: ["SQL Account", "POS"] @@ -7,24 +8,24 @@ tags: ["SQL Account", "POS"] ### Steps and Instructions -### 1. You must make sure setting had turn on the subitem setting +### You must make sure setting had turn on the subitem setting -![1](../../../static/img/pos/sub-item/1.png) +![1](../../../static/img/integration/pos/sub-item/sub-item-setting.png) -### 2. Press OK and found Sub Item on home screen +### Press OK and found Sub Item on home screen -![2](../../../static/img/pos/sub-item/2.png) +![2](../../../static/img/integration/pos/sub-item/sub-item-setting1.png) -### 3. Press New and create the sub item accordingly +### Press New and create the sub item accordingly -![3](../../../static/img/pos/sub-item/3.png) +![3](../../../static/img/integration/pos/sub-item/sub-item-setting2.png) -### 4. After creating the subitem, click on category and generate new code to add in sub item template under category +### After creating the subitem, click on category and generate new code to add in sub item template under category -![4](../../../static/img/pos/sub-item/4.png) +![4](../../../static/img/integration/pos/sub-item/sub-item-setting3.png) -![5](../../../static/img/pos/sub-item/5.png) +![5](../../../static/img/integration/pos/sub-item/sub-item-setting4.png) **Let’s see the results.** -![6](../../../static/img/pos/sub-item/6.png) +![6](../../../static/img/integration/pos/sub-item/sub-item-setting5.png) diff --git a/docs/integration/pos/user-setting.md b/docs/integration/pos/user-setting.md index 072f1704..13cf0ea6 100644 --- a/docs/integration/pos/user-setting.md +++ b/docs/integration/pos/user-setting.md @@ -1,5 +1,6 @@ --- title: User Setting, Password & Access Right +sidebar_position: 9 description: A guide to setup category for SQL POS System slug: /integration/pos/user-setting tags: ["SQL Account", "POS"] @@ -9,24 +10,24 @@ tags: ["SQL Account", "POS"] 1. Click the login button - ![1](../../../static/img/pos/user-setting/1.png) + ![1](../../../static/img/integration/pos/user-setting/create-new-user.png) 2. Go to User List - ![2](../../../static/img/pos/user-setting/2.png) + ![2](../../../static/img/integration/pos/user-setting/create-new-user1.png) 3. Press and New Button to create new user. - ![3](../../../static/img/pos/user-setting/3.png) + ![3](../../../static/img/integration/pos/user-setting/create-new-user2.png) ## Set user login password and access right setting 1. To reset admin password , highlight on the users name and click on EDIT button - ![4](../../../static/img/pos/user-setting/4.png) + ![4](../../../static/img/integration/pos/user-setting/set-user-login-password.png) 2. Click on reset password button to reset your ADMIN password 3. Set your access right Yes / No accordingly. - ![5](../../../static/img/pos/user-setting/5.png) + ![5](../../../static/img/integration/pos/user-setting/set-user-access-right.png) diff --git a/docs/integration/pos/weighing-scale.md b/docs/integration/pos/weighing-scale.md index 45c6c4cf..4ea40631 100644 --- a/docs/integration/pos/weighing-scale.md +++ b/docs/integration/pos/weighing-scale.md @@ -1,11 +1,12 @@ --- title: POS - Weighing Scale +sidebar_position: 10 description: A guide to setup Weighing Scale for SQL POS System slug: /integration/pos/weighing-scale tags: ["SQL Account", "POS"] --- -## 1. Maintain Stock Item +## Maintain Stock Item - Item Code must be 7 Character(Cannot more and less) - First 2 Characters of Item Code must Fix, mostly use 88 or 99 @@ -21,23 +22,23 @@ tags: ["SQL Account", "POS"] 4. Save -![1](../../../static/img/pos/weighing-scale/1.png) +![1](../../../static/img/integration/pos/weighing-scale/maintain-stock-item.png) :::note You are recommend to create all the item code first ::: -## 2. IN SQL POS Setting +## IN SQL POS Setting 1. Others Tab 2. Scale Barcode Set to Price - ![2](../../../static/img/pos/weighing-scale/2.png) + ![2](../../../static/img/integration/pos/weighing-scale/sql-pos-setting.png) 3. Click on Fill - ![3](../../../static/img/pos/weighing-scale/3.png) + ![3](../../../static/img/integration/pos/weighing-scale/sql-pos-setting1.png) 4. Fill Scale Items @@ -47,15 +48,15 @@ You are recommend to create all the item code first - Ticked Price Revert Quantity - Click on button Fill items which are Match - ![4](../../../static/img/pos/weighing-scale/4.png) + ![4](../../../static/img/integration/pos/weighing-scale/sql-pos-setting2.png) 5. Click on Yes - ![5](../../../static/img/pos/weighing-scale/5.png) + ![5](../../../static/img/integration/pos/weighing-scale/sql-pos-setting3.png) 6. Click on OK - ![6](../../../static/img/pos/weighing-scale/6.png) + ![6](../../../static/img/integration/pos/weighing-scale/sql-pos-setting4.png) 7. Close & Save the Setting @@ -65,23 +66,23 @@ You are recommend to create all the item code first In Stock Item, for the items have fulfil the criteria will auto ticked with Price Revert Quantity and Barcode with Price. - ![7](../../../static/img/pos/weighing-scale/7.png) + ![7](../../../static/img/integration/pos/weighing-scale/sql-pos-setting5.png) -## 3. Step to update Price to weighing scale +## Step to update Price to weighing scale 1. Stock Item | Right click on More | Select Export to Scale Machine - ![8](../../../static/img/pos/weighing-scale/8.png) + ![8](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale.png) 2. Here is the model able to support by SQL POS - ![9](../../../static/img/pos/weighing-scale/9.png) + ![9](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale1.png) 3. Select Model | Tick Assign Export FileName - Assign Export FileName = C:\ITUnicode\PLU.TXP - ![10](../../../static/img/pos/weighing-scale/10.png) + ![10](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale2.png) 4. Click Button Pooling. @@ -89,16 +90,16 @@ You are recommend to create all the item code first 5. System will auto open RLS1000 Program - ![11](../../../static/img/pos/weighing-scale/11.png) + ![11](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale3.png) 6. File | FSetting - ![12](../../../static/img/pos/weighing-scale/12.png) + ![12](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale4.png) - Set Exported folder C:\ITUnicode\ - Directory of Work : C:\ITUnicode\ - ![17](../../../static/img/pos/weighing-scale/17.png) + ![17](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale5.png) 7. Click on Confirm @@ -115,7 +116,7 @@ You are recommend to create all the item code first - Plu_file = PLU.TXP - ![13](../../../static/img/pos/weighing-scale/13.png) + ![13](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale6.png) :::note Above example is 2 weighing scale @@ -123,15 +124,15 @@ You are recommend to create all the item code first 9. Click Green arrow button to Pooling latest selling price into scale Machine. - ![14](../../../static/img/pos/weighing-scale/14.png) + ![14](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale7.png) 10. Click confirm. - ![15](../../../static/img/pos/weighing-scale/15.png) + ![15](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale8.png) 11. Status mention OK mean is connected - ![16](../../../static/img/pos/weighing-scale/16.png) + ![16](../../../static/img/integration/pos/weighing-scale/update-price-weighing-scale9.png) :::note **After setting for first time, when there is the price to update to weighing scale, you just have to refer to Step 3.1 & 3.4 & 3.9 & 3.10** diff --git a/docs/integration/sdk-live/_category_.json b/docs/integration/sdk-live/_category_.json new file mode 100644 index 00000000..f9aead2d --- /dev/null +++ b/docs/integration/sdk-live/_category_.json @@ -0,0 +1,9 @@ +{ + "label": "SQL SDK Live", + "position": 4, + "link": { + "type": "generated-index", + "description": "A quick guide on SQL External Program Linking" + } +} + diff --git a/docs/integration/sdk-live/basic-guide.md b/docs/integration/sdk-live/basic-guide.md new file mode 100644 index 00000000..32b6c6bf --- /dev/null +++ b/docs/integration/sdk-live/basic-guide.md @@ -0,0 +1,13023 @@ +--- +title: SDK Guide +description: A guide on External Program Linking for SQL Account +slug: /integration/sdk-live/basic-guide +tags: ["SQL Account", "Integration"] +--- + +This is the "Bridge" direct live linking between External Program with SQL Accounting + +## Pros and Cons + +**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 + +## Requirements + +* 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 + +[SQLSDK.zip-download to use](https://www.sql.com.my/document/SQLLink/SQLSDK.zip) + +[Steps-SDK.gif-a short video for steps-watch to know the steps after downloading SQLSDK.zip](https://download.sql.com.my/customer/Fairy/Steps-SDK.gif) + +## Linking Flow + +Highlight in Yellow Color is the Windows base Application/Function you need to Develop/Create. + +### Example 1 - POS System + +![pos-system-external-program-linking](../../../static/img/integration/sdk-live/basic-guide/pos-system-external-program-linking.jpg) + +### Example 2 - Cloud/Mobile System + +![cloud-mobile-external-program-linking](../../../static/img/integration/sdk-live/basic-guide/cloud-mobile-external-program-linking.jpg) + +### Example 3 - Cloud/Mobile System with SQL Connect Public + +![cloud-mobile-sys-sql-connect-public](../../../static/img/integration/sdk-live/basic-guide/cloud-mobile-sys-sql-connect-public.jpg) + +:::warning + +Using this method the **respond** might be very **slow**. +It depending on user **internet speed** & stabilities. + +::: + +* 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. Setup SQL Accounting Linking [Click Here for SQL Accounting setup steps](/sql-account-api/on-premise-setup) +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. + +## Available Programming Language + +* VB. Net +* C Sharp +* ASP.Net C Sharp +* Python +* PHP +* Node JS +* Java +* VB Script +* JavaScript +* Delphi + +[Summary Document Flow by Programming Language - Excel](https://docs.google.com/spreadsheets/d/1dGUXIM0aWAG7xIyE1D1IsPmdq7paF9gpq3h0NqzFQDc/edit?usp=sharing) + +## Example External Program + +### VB. Net + - Example [VBDotNet-20230819](https://download.sql.com.my/customer/Fairy/VBDotNet.zip) + +### C Sharp + + - Example [CSharp-20230819](https://download.sql.com.my/customer/Fairy/CSharp.zip) + +### Steps (C Sharp & VB.Net Only) + +The [example video](https://download.sql.com.my/customer/Fairy/Video-VBDotNetnCSharp.zip) is how to + +1. Open DCF in **D:\Happy\DB\Default.DCF** +2. Datatabase is **ACC-0008.FDB** +3. Click **Complete Post** button +4. 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) + +### ASP.Net C Sharp + +1. 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)) + +2. Make sure the Windows user set in ASP.Net Impersonation is Login + +* Example [ASPDotNet-20210816](https://download.sql.com.my/customer/Fairy/ASPDotNet.zip) + +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 + +### 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 Functions + +
+ Common Functions - click to expand + +```python + +#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 - click to expand + +```python +#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 - click to expand + + ```python + #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 + +
+ Complete Post - click to expand + + ```python + #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) - click to expand + + ```python + #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 - click to expand + + ```python + #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 - click to expand + + ```python +#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 - click to expand + + ```python +#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 + +
+ Sales Invoice Script - click to expand + +```python +#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 + +
+ Purchase Invoice Script - click to expand + +```python +#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 - click to expand + +```python +#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 - click to expand + +```python +#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 Script - click to expand + +```python +#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 + +
+ Stock Adjustment Script - click to expand + +```python +#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 Script - click to expand + +```python +#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 - click to expand + +```python +#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 - click to expand + +```python +#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 Script - click to expand + +```python +#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 - click to expand + +```python +#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 - click to expand + +```python +#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 Script - click to expand + +```python +#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 Script - click to expand + +```python +#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 Script - click to expand + +```python +#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 + +
+ Customer Payment Script - click to expand + +```python +#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() +``` + +
+ +#### Customer Due Listing + +
+ Customer Due Listing Script - click to expand + +```python +#Updated 08 Oct 2024 +import Common +import datetime + +def GetData(): + RptObject = ComServer.RptObjects.Find('Customer.DueDocument.RO') + + #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-C0001" + #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 = # + #RptObject.Params.Find("ItemProjectData").Value = # + 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 = False + RptObject.Params.Find("ShowForeignCurrency").Value = True + RptObject.Params.Find("ShowLocalCurrency").Value = True + RptObject.Params.Find("SortBy").Value = "DocDate;DueDate;DocNo" + + lDateTo = datetime.datetime(2024, 9, 30, 13, 0) + lDateTo.strftime('%m/%d/%Y') + + RptObject.Params.Find("DateTo").Value = lDateTo + RptObject.Params.Find("IncludePDCheque").Value = True + + RptObject.CalculateReport() + + lDataSet = RptObject.DataSets.Find("cdsMain") + print("Record count : ", lDataSet.RecordCount) + if lDataSet.RecordCount > 0: + while not lDataSet.eof: + print(lDataSet.FindField('CODE').AsString) + print(lDataSet.FindField('DOCTYPE').AsString) + print(lDataSet.FindField('DOCDATE').AsString) + print(lDataSet.FindField('DOCNO').AsString) + print(lDataSet.FindField('DUEDATE').AsString) + print(lDataSet.FindField('DOCAMT').AsString) + print(lDataSet.FindField('OUTSTANDING').AsString) + print(lDataSet.FindField('AGE').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() +``` + +
+ +#### Stock Assembly + +
+ Stock Assembly Script - click to expand + +```python +#Updated 07 Aug 2025 +import Common +import datetime + +def GetListData(): + lSQL = "SELECT A.DOCNO, A.DOCDATE, A.ITEMCODE BOM, A.DESCRIPTION, A.LOCATION LOCATION_HDR, " + lSQL = lSQL + "A.BATCH BATCH_HDR, A.PROJECT PROJECT_HDR, A.QTY BOMQTY, A.UOM BOMUOM, A.ASMCOST, A.DOCAMT, " + lSQL = lSQL + "B.ITEMCODE, B.DESCRIPTION ITEMDESC, B.QTY, B.UOM, B.UNITCOST, B.OVERHEADCOST, B.AMOUNT " + lSQL = lSQL + "FROM ST_AS A " + lSQL = lSQL + "INNER JOIN ST_ASDTL B ON (A.DOCKEY=B.DOCKEY) " + lSQL = lSQL + "WHERE A.DOCNO='AS-00001' " + lSQL = lSQL + "AND A.CANCELLED IS FALSE " + + lDataSet = ComServer.DBManager.NewDataSet(lSQL) + + Common.ShowResult(lDataSet) + +def PostData(): + BizObject = ComServer.BizObjects.Find("ST_AS") + lMain = BizObject.DataSets.Find("MainDataSet") #lMain contains master data + lDetail = BizObject.DataSets.Find("cdsDocDetail") #lDetail contains detail data + + lDate = datetime.datetime(2025, 8, 22, 13, 0) + lDate.strftime('%m/%d/%Y') + + lDocKey = BizObject.FindKeyByRef("DocNo", "--AS Test--") + + if lDocKey is None: + BizObject.New() + lMain.FindField("DocNo").AsString = "--AS Test--" + lMain.FindField("DocDate").value = lDate + lMain.FindField("PostDate").value = lDate + lMain.FindField("ItemCode").AsString = "BOM" #BOM Item Code + lMain.FindField("Description").AsString = "BOM Description 123" + lMain.FindField("Location").AsString = "KL" + lMain.FindField("Qty").AsFloat = 2 + lMain.FindField("UOM").AsString = "UNIT" + + #Delete all Detail + while lDetail.RecordCount != 0: + lDetail.Last() + lDetail.Delete() + + #Insert Data - Detail + lDetail.Append() + lDetail.FindField("Seq").value = 1 + lDetail.FindField("ItemCode").AsString = "ANT" + lDetail.FindField("Description").AsString = "Item B" + lDetail.FindField("Qty").AsFloat = 2 + lDetail.FindField("UOM").AsString = "UNIT" + lDetail.Post() + + lDetail.Append() + lDetail.FindField("Seq").value = 2 + lDetail.FindField("ItemCode").AsString = "COVER" + 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 的第一 🐱" + + V = ["ANT", "UNIT"] #ItemCode, UOM + if (lDetail.Locate("ItemCode;UOM", V, False, False)) : + lDetail.Edit() + lDetail.FindField("Description").AsString = "Item A 的第一" + lDetail.FindField("Description3").AsString = ComServer.Utility.PlainTextToRichText("More description 的第一 🐱") + lDetail.FindField("Qty").AsFloat = 5 + 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_AS") + + lDocKey = BizObject.FindKeyByRef("DocNo", "--AS 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() +``` + +
+ +#### Stock Batch + +
+ Stock Batch Script - click to expand + +```python +#Updated 08 Aug 2025 +import Common +import datetime + +def GetListData(): + lSQL = "SELECT A.CODE, A.DESCRIPTION, A.EXPDATE, A.MFGDATE, B.ITEMCODE FROM ST_BATCH A " + lSQL = lSQL + "LEFT JOIN ST_ITEM_BATCH B ON (A.AUTOKEY=B.PARENTKEY) " + lSQL = lSQL + "WHERE A.ISACTIVE IS TRUE " + lSQL = lSQL + "ORDER BY A.CODE " + + lDataSet = ComServer.DBManager.NewDataSet(lSQL) + + Common.ShowResult(lDataSet) + +def PostData(): + BizObject = ComServer.BizObjects.Find("ST.BATCH.OPF") + lMain = BizObject.DataSets.Find("Main") #lMain contains master data + lDetail = BizObject.DataSets.Find("BatchItem") #lDetail contains detail data + + lDate = datetime.datetime(2030, 8, 22, 13, 0) + lDate.strftime('%m/%d/%Y') + + BizObject.Params.Find("Code").Value = "--BT Test--" + BizObject.Open() + lCode = lMain.FindField("Code").value + print(f"Code = {lCode}") + + if lCode is None: + BizObject.New() + lMain.FindField("Code").AsString = "--BT Test--" + lMain.FindField("EXPDate").value = lDate + lMain.FindField("Description").AsString = "Batch Description 123" + + #Insert Data - Detail + lDetail.Append() + lDetail.FindField("ItemCode").AsString = "ANT" + lDetail.Post() + + lDetail.Append() + lDetail.FindField("ItemCode").AsString = "COVER" + lDetail.Post() + + else: + print(f"Code edit = {lCode}") + BizObject.Edit() + lMain.FindField("Description").AsString = "Edited Description 123 的第一 🐱" + lMain.Post() + + if (lDetail.Locate("ItemCode", "COVER", False, False)) : + lDetail.Delete() + + try: + BizObject.Save() + except Exception as e: + print("Oops!", e) + BizObject.Close() + print ("Posting/Update Done") + +def DelData(): + BizObject = ComServer.BizObjects.Find("ST.BATCH.OPF") + lMain = BizObject.DataSets.Find("Main") + + BizObject.Params.Find("Code").Value = "--BT Test--" + BizObject.Open() + lCode = lMain.FindField("Code").value + print(f"Code = {lCode}") + + BizObject.Delete() + print ("Deleting Done") + +try: + Common.CheckLogin() + global ComServer + ComServer = Common.ComServer + answer = input("Get the list?") + if answer.lower() in ["y","yes"]: + GetListData() + + answer = input("Continue To post data?") + if answer.lower() in ["y","yes"]: + 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 + ```pascal + [PHP_COM_DOTNET] + extension=php_com_dotnet.dll + ``` + +#### Grid.css file for example code + +
+ Grid.css file - click to expand + +```python +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 - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; + +$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() . "
"; + } + else + { + echo "Record Not Found"; + } + $lDataSet = null; +} + +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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Add & Edit Agent + +
+ Add & Edit Agent Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; + +$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
"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Delete Agent + +
+ Delete Agent Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; + +$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
"; + } +} + +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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Complete Post + +
+ Complete Post Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +#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 + +$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(); + } else + $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 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 + $lSN = $BizObject->DataSets->Find("cdsSerialNumber"); #lSN contains Serial Number data + + $BizObject->New(); + $lMain->FindField("DocNo")->AsString = "--CS Test--"; + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $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"; + + $txt = <<FindField("Description3")->AsString = $txt; + $lDetail->FindField("Qty")->AsFloat = 1; + $lDetail->FindField("Tax")->AsString = "SV"; + $lDetail->FindField("TaxRate")->AsString = "6%"; + $lDetail->FindField("TaxInclusive")->AsBoolean = False; + $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")->AsBoolean = True; + $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")->AsBoolean = False; + $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")->AsBoolean = False; + $lDetail->FindField("UnitPrice")->AsFloat = 100; + $lDetail->FindField("Amount")->AsFloat = 200; + $lDetail->FindField("TaxAmt")->AsFloat = 12; + $lDetail->Post(); + + #For Item Code with Serial Number + $lDetail->Append; + $lDetail->FindField("SEQ")->Value = 4; + $lDetail->FindField("ItemCode")->AsString = "SN1"; + $lDetail->FindField("DESCRIPTION")->AsString = "Sales Serial Number Item"; + + $lSN->Append(); + $lSN->FindField("SERIALNUMBER")->AsString = "SN520606|23.74"; + $lSN->Post(); + + $lSN->Append(); + $lSN->FindField("SERIALNUMBER")->AsString = "SN520607|22.84"; + $lSN->Post(); + + $lDetail->FindField("UOM")->AsString = "UNIT"; + $lDetail->FindField("QTY")->AsFloat = 2; + $lDetail->FindField("TAX")->AsString = "SV"; + $lDetail->FindField("TaxRate")->AsString = "6%"; + $lDetail->FindField("TAXINCLUSIVE")->AsBoolean = False; + $lDetail->FindField("UNITPRICE")->AsFloat = 94.43; + $lDetail->FindField("TAXAMT")->AsFloat = 11.33; + $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("DocNo")->AsString = "--PM Test--"; + $lMain->FindField("CODE")->AsString = "300-C0001"; #Customer Account + $lMain->FindField("DocDate")->Value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $lMain->FindField("PostDate")->Value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $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")->AsBoolean = False; + + #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")->AsBoolean = True; + $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("DocNo")->AsString = "--CN Test--"; + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $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 = "--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")->AsBoolean = False; + $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")->AsBoolean = True; + $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("DocNo")->AsString = "--CF Test--"; + $lMain->FindField("CODE")->AsString = "300-C0001"; #Customer Account + $lMain->FindField("DocDate")->Value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $lMain->FindField("PostDate")->Value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $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; + + #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")->AsBoolean = True; + $lDetail->Post(); + } + $BizObject->Save(); + $BizObject->Close(); +} + +if (isset($_POST['BtnData'])) +{ + try + { + CheckLogin(); + echo date("d M Y h:i:s A")." - Posting Cash Sales
"; + PostDataCS(); + echo date("d M Y h:i:s A")." - Posting Customer Payment
"; + PostDataPM(); + echo date("d M Y h:i:s A")." - Posting Sales Credit Note
"; + PostDataCN(); + echo date("d M Y h:i:s A")." - Posting Knock Off Sales Credit Note
"; + PostKnockIVCN(); + echo date("d M Y h:i:s A")." - Posting Customer Refund
"; + PostDataCF(); + echo date("d M Y h:i:s A")." - Posting Done"; + } + finally + { +# $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Get Invoice Next Number + +
+ Get Invoice Next Number Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +#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)."
"; + $fmt= str_ireplace(".","'0", $fmt); + echo date("d M Y h:i:s A")." Format in PHP : " . str_ireplace("d","s", $fmt)."
"; + echo date("d M Y h:i:s A")." Output in PHP : " .sprintf($fmt,$NextNo)."
"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Add & Edit AR_Customer + +
+ Add & Edit AR_Customer Script - click to expand + +```python + + + + +

SQL Acc SDK in PHP page

+ +"; + +$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-0001.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"; #Can use '<>'; for auto assign code + $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 = "Branch 1"; + $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"; + + if ($lDtl->Locate("BranchName", "BILLING", False, False)) { + $lDtl->Edit(); #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 = "Edited New Address1"; + $lDtl->FindField("Address2")->AsString = "Edited New Address2"; + $lDtl->FindField("Address3")->AsString = "Edited New Address3"; + $lDtl->FindField("Address4")->AsString = "Edited New Address4"; + $lDtl->FindField("Attention")->AsString = "Edited New Attention"; + $lDtl->FindField("Phone1")->AsString = "Edited New Phone1"; + $lDtl->FindField("Fax1")->AsString = "Edited New Fax1"; + $lDtl->Post(); + } + if ($lDtl->Locate("BranchName", "Branch1", False, False)) { + $lDtl->Edit(); #For 2nd Branch + $lDtl->FindField("BRANCHTYPE")->AsString = "D"; + $lDtl->FindField("BranchName")->AsString = "Branch 1"; #Make sure this always same as b4 delete data + $lDtl->FindField("Address1")->AsString = "Edited New DAddress1"; + $lDtl->FindField("Address2")->AsString = "Edited New DAddress2"; + $lDtl->FindField("Address3")->AsString = "Edited New DAddress3"; + $lDtl->FindField("Address4")->AsString = "Edited New DAddress4"; + $lDtl->FindField("Attention")->AsString = "Edited New DAttention"; + $lDtl->FindField("Phone1")->AsString = "Edited New DPhone1"; + $lDtl->FindField("Fax1")->AsString = "Edited New DFax1"; + $lDtl->FindField("Email")->AsString = "Edited New DEmailAddress"; + $lDtl->Post(); + } + $lDtl->Append(); #For 3rd Branch + $lDtl->FindField("BRANCHTYPE")->AsString = "D"; + $lDtl->FindField("BranchName")->AsString = "Branch 2"; + $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 $lMain->FindField("CODE")->AsString. "
"; + echo "Posting Done
"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Get Stock List + +
+ Get Stock List Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; +#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 ""; + echo ""; + for ($x = 0; $x <= $fc; $x++) { + #Insert Header + echo ""; + } + echo ""; + +#Looping Dataset +while (! $lDataSet->Eof()){ +echo ""; + for ($x = 0; $x <= $fc; $x++) { + $lFN = $lDataSet->Fields->Items($x)->FieldName(); + echo ""; + } + echo ""; + $lDataSet->Next(); + } + echo "
".$lDataSet->Fields->Items($x)->FieldName()."
".$lDataSet->FindField($lFN)->AsString()."
"."
"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### AR_IV (Customer invoice) + +
+ AR_IV Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; +#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("DocNo")->AsString = "--IV Test--"; + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2020-04-20")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2020-04-20")); #YYYY-MM-DD + $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("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("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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Get Outstanding Invoice List + +
+ Get Outstanding Invoice List Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; +#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 ""; + echo ""; + for ($x = 0; $x <= $fc; $x++) { + #Insert Header + echo ""; + } + echo ""; + + #Looping Dataset + while (! $lDataSet->Eof()){ + echo ""; + for ($x = 0; $x <= $fc; $x++) { + $lFN = $lDataSet->Fields->Items($x)->FieldName(); + echo ""; + } + echo ""; + $lDataSet->Next(); + } + echo "
".$lDataSet->Fields->Items($x)->FieldName()."
".$lDataSet->FindField($lFN)->AsString()."
"."
"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Stock Month End - Weighted Average + +
+ Stock Month End - Weighted Average Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; + + +$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 ""; + echo ""; + for ($x = 0; $x <= $fc; $x++) { + #Insert Header + echo ""; + } + echo ""; + + #Looping Dataset + while (! $lDataSet2->Eof()){ + echo ""; + for ($x = 0; $x <= $fc; $x++) { + $lFN = $lDataSet2->Fields->Items($x)->FieldName(); + echo ""; + } + echo ""; + $lDataSet2->Next(); + } + echo "
".$lDataSet2->Fields->Items($x)->FieldName()."
".$lDataSet2->FindField($lFN)->AsString()."
"."
"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Stock Month End - FIFO + +
+ Stock Month End - FIFO Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; +#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 ""; + echo ""; + for ($x = 0; $x <= $fc; $x++) { + #Insert Header + echo ""; + } + echo ""; + + #Looping Dataset + while (! $lDataSet2->Eof()){ + echo ""; + for ($x = 0; $x <= $fc; $x++) { + $lFN = $lDataSet2->Fields->Items($x)->FieldName(); + echo ""; + } + echo ""; + $lDataSet2->Next(); + } + echo "
".$lDataSet2->Fields->Items($x)->FieldName()."
".$lDataSet2->FindField($lFN)->AsString()."
"."
"; + }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 ""; + echo ""; + for ($x = 0; $x <= $fc; $x++) { + #Insert Header + echo ""; + } + echo ""; + + #Looping Dataset + while (! $lDataSet3->Eof()){ + echo ""; + for ($x = 0; $x <= $fc; $x++) { + $lFN = $lDataSet3->Fields->Items($x)->FieldName(); + echo ""; + } + echo ""; + $lDataSet3->Next(); + } + echo "
".$lDataSet3->Fields->Items($x)->FieldName()."
".$lDataSet3->FindField($lFN)->AsString()."
"."
"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Add & Edit Stock Item + +
+ Add & Edit Stock Item Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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
"; + PostData(); + echo date("d M Y h:i:s A")." - Done
"; + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Add Stock Issue + +
+ Add Stock Issue Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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 = date("d-m-Y", strtotime("2020-04-20")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2020-04-20")); #YYYY-MM-DD + $lMain->FindField("Description")->AsString = "Stock Issue"; + + #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 = "BOX"; + $lDetail->Post(); + + $lDetail->Append(); + $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
"; + PostData(); + echo date("d M Y h:i:s A")." - Done
"; + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Add Points + +
+ Add Points Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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("DocNo")->AsString = "--Point Test--"; + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2020-04-20")); #YYYY-MM-DD + $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
"; + PostData(); + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ +
+ + +``` + +
+ +#### AR_CN (customer credit note) + +
+ AR_CN Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; +#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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### SO to DO (sales order to delivery order) + +
+ SO to DO Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; +#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("DocNo")->AsString = "--DO Test--"; + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2021-01-20")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2021-01-20")); #YYYY-MM-DD + $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("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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### ST_AJ (stock adjustment) + +
+ ST_AJ Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; + +$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("DocNo")->AsString = "--AJ Test--"; + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2020-04-20")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2020-04-20")); #YYYY-MM-DD + $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 = "BOX"; + $lDetail->Post(); + + #Insert Data - Detail - Reduce Stock Qty + $lDetail->Append(); + $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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Get Stock Serial Number balance + +
+ Get Stock Serial Number balance Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; + +$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 ""; + echo ""; + for ($x = 0; $x <= $fc; $x++) { + #Insert Header + echo ""; + } + echo ""; + + #Looping Dataset + while (! $lDataSet->Eof()){ + echo ""; + for ($x = 0; $x <= $fc; $x++) { + $lFN = $lDataSet->Fields->Items($x)->FieldName(); + echo ""; + } + echo ""; + $lDataSet->Next(); + } + echo "
".$lDataSet->Fields->Items($x)->FieldName()."
".$lDataSet->FindField($lFN)->AsString()."
"."
"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### SL_IV-Add, Edit & Delete (sales invoice) + +
+ SL_IV-Add, Edit & Delete Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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 + $lSN = $BizObject->DataSets->Find("cdsSerialNumber"); #lDetail contains detail data + + #Find IV Number + $lDocNo = "--IV Test--"; + $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo); + + if ($lDocKey != null){ + echo "Dockey = ".$lDocKey."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Edit(); + $lMain->Edit(); + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2024-04-24")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2024-04-24")); #YYYY-MM-DD + $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"; + + $V = array("ANT", "UNIT"); #ItemCode, UOM + + if ($lDetail->Locate("ItemCode;UOM", $V, False, False)){ + $lDetail->Edit(); + $lDetail->FindField("Qty")->AsFloat = 2; + $lDetail->FindField("Tax")->AsString = ""; + $lDetail->FindField("TaxRate")->AsString = ""; + $lDetail->FindField("TaxInclusive")->value = 0; + $lDetail->FindField("UnitPrice")->AsFloat = 6.00; + $lDetail->FindField("Amount")->AsFloat = 12.00; + $lDetail->FindField("TaxAmt")->AsFloat = 0; + $lDetail->Post(); + } + } else { + echo "New Invoice
"; + $BizObject->New(); + $lMain->FindField("DocKey")->value = -1; + $lMain->FindField("DocNo")->AsString = #$lDocNo; + $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2024-04-03")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2024-04-03")); #YYYY-MM-DD + $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 = "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(); + + $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(); + + #For Serial Number + $lDetail->Append(); + $lDetail->FindField("ItemCode")->AsString = "SN"; + $lDetail->FindField("Description")->AsString = "Sales Serial Number Item"; + $lDetail->FindField("UOM")->AsString = "UNIT"; + + $lSN->Append; + $lSN->FindField("SERIALNUMBER")->AsString = 'SN-136476'; + $lSN->Post; + + $lSN->Append; + $lSN->FindField("SERIALNUMBER")->AsString = 'SN-136477'; + $lSN->Post; + + $lDetail->FindField("Qty")->AsFloat = 2; + $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(); + } + $BizObject->Save(); + echo "Save with DocNo ".$lMain->FindField("DocNo")->AsString."
"; + echo date("d M Y h:i:s A")." - Posting Done
"; + $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."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Delete(); + echo date("d M Y h:i:s A")." - Record deleted
"; + } else { + echo date("d M Y h:i:s A")." - Document Not Found
"; + } +} +if (isset($_POST['BtnPost'])) +{ + try + { + CheckLogin(); + echo date("d M Y h:i:s A")." - Begin Posting
"; + 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
"; + PostDelIV(); + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ + +
+ + +``` + +
+ +#### GL_PV-Add, Edit & Delete (payment voucher) + +
+ Insert, Edit & Delete Invoice Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Edit(); + $lMain->Edit(); + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2022-02-20")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2022-02-20")); #YYYY-MM-DD + $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
"; + $BizObject->New(); + $lMain->FindField("DocNo")->AsString = $lDocNo; + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2022-02-18")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2022-02-18")); #YYYY-MM-DD + $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
"; + $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."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Delete(); + echo date("d M Y h:i:s A")." - Record deleted
"; + } else { + echo date("d M Y h:i:s A")." - Document Not Found
"; + } +} +if (isset($_POST['BtnPost'])) +{ + try + { + CheckLogin(); + echo date("d M Y h:i:s A")." - Begin Posting
"; + 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
"; + DelData(); + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ + +
+ + +``` + +
+ +#### GL_JE-Add, Edit & Delete (journal entry) + +
+ Insert, Edit & Delete Journal Script Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Edit(); + $lMain->Edit(); + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2022-02-20")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2022-02-20")); #YYYY-MM-DD + $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
"; + $BizObject->New(); + $lMain->FindField("DocNo")->AsString = $lDocNo; + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2022-02-18")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2022-02-18")); #YYYY-MM-DD + $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
"; + $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."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Delete(); + echo date("d M Y h:i:s A")." - Record deleted
"; + } else { + echo date("d M Y h:i:s A")." - Document Not Found
"; + } +} +if (isset($_POST['BtnPost'])) +{ + try + { + CheckLogin(); + echo date("d M Y h:i:s A")." - Begin Posting
"; + 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
"; + DelData(); + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ + +
+ + +``` + +
+ +#### Get Outstanding SO List + +
+ Get Outstanding SO List Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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 ""; + echo ""; + for ($x = 0; $x <= $fc; $x++) { + #Insert Header + echo ""; + } + echo ""; + + #Looping Dataset + while (! $lDataSet->Eof()){ + echo ""; + for ($x = 0; $x <= $fc; $x++) { + $lFN = $lDataSet->Fields->Items($x)->FieldName(); + echo ""; + } + echo ""; + $lDataSet->Next(); + } + echo "
".$lDataSet->Fields->Items($x)->FieldName()."
".$lDataSet->FindField($lFN)->AsString()."
"."
"; + }else { + echo "Record Not Found"; + } +} + +if (isset($_POST['BtnData'])) +{ + try + { + CheckLogin(); + echo date("d M Y h:i:s A")." - Get Data
"; + GetData(); + echo date("d M Y h:i:s A")." - Done
"; + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Get Stock Item Picture + +
+ Get Stock Item Picture Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; + +$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 'My Picture'; + + }else { + echo "Record Not Found"; + } +} + +if (isset($_POST['BtnData'])) +{ + try + { + CheckLogin(); + GetData(); + echo "
"; + echo date("d M Y h:i:s A")." - Done"; + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ +
+ + +``` + +
+ +#### + +
+ Script - click to expand + +```php + +``` + +
+ +#### Customer.Aging.RO + +
+ Customer.Aging.RO Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; + +$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 ""; + echo ""; + $DataSet->First(); + $fc = $DataSet->Fields->Count-1; + for ($x = 0; $x <= $fc; $x++) { + #Insert Header + echo ""; + } + echo ""; + + #Looping Dataset + while (! $DataSet->Eof()){ + echo ""; + for ($x = 0; $x <= $fc; $x++) { + $lFN = $DataSet->Fields->Items($x)->FieldName(); + echo ""; + } + echo ""; + $DataSet->Next(); + } + echo "
".$DataSet->Fields->Items($x)->FieldName()."
".$DataSet->FindField($lFN)->AsString()."
"."
"; +} + +function GetData(){ + global $ComServer; + + $lSQL = ' + + + + + + + + + + + '; + + $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"."
"; + SetGrid($lDataSetHdr); + + echo "Main Data"."
"; + SetGrid($lDataSet); + + echo "Detail Invoice"."
"; + SetGrid($lDataSet2); + + echo "Company Information"."
"; + SetGrid($lDataSetCO); + + }else { + echo "Record Not Found"; + } +} + +if (isset($_POST['BtnData'])) +{ + try + { + CheckLogin(); + GetData(); + echo "
"; + echo date("d M Y h:i:s A")." - Done"; + } + finally + { + #$ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ +
+ + +``` + +
+ +#### Get Description3 + +
+ Get Description3 Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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-0024.FDB"); #Database Name + +} + +function GetData(){ + global $ComServer; + + $lSQL = "SELECT Description3, Picture 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 "
==
"; + echo "
Result after RTF:
"; + $txt = $ComServer->Utility->RichTextToPlainText($rtf); + echo ""; + echo "
==
"; + echo "的第一 🐱"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +#### AR_PM-Add, Edit & Delete (customer payment) + +
+ AR_PM-Add, Edit & Delete Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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-0024.FDB"); #Database Name + +} + +function PostData(){ + 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 + + #Find OR Number + $lDocNo = "--OR Test--"; + $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo); + + if ($lDocKey != null){ + echo "Dockey = ".$lDocKey."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Edit(); + $lMain->Edit(); + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2024-09-23")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2024-09-23")); #YYYY-MM-DD + $lMain->FindField("Description")->AsString = "Payment for A/c - Edited"; + $lMain->FindField("DocAmt")->AsFloat = 550.00; + + #Knock Off IV + $V = array("IV", "--CS Test--"); #DocType, DocNo + + if ($lDetail->Locate("DocType;DocNo", $V, False, False)) { + $lDetail->Edit(); + $lDetail->FindField("KOAmt")->AsFloat = 550; + $lDetail->FindField("KnockOff")->AsString = "T"; + $lDetail->Post(); + } + } else { + echo "New Payment
"; + $BizObject->New(); + $lMain->FindField("DocKey")->value = -1; + $lMain->FindField("DocNo")->AsString = $lDocNo; + $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2024-09-23")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2024-09-23")); #YYYY-MM-DD + $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 = 200.0; + $lDetail->FindField("KnockOff")->AsString = "T"; + $lDetail->Post(); + } + + } + $BizObject->Save(); + echo "Save with DocNo ".$lMain->FindField("DocNo")->AsString."
"; + echo date("d M Y h:i:s A")." - Posting Done
"; + $BizObject->Close(); +} + +function DelData(){ + global $ComServer; + + $BizObject = $ComServer->BizObjects->Find("AR_PM"); + $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data + + #Find PV Number + $lDocNo = "--OR Test--"; + $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo); + + if ($lDocKey != null){ + echo "Dockey = ".$lDocKey."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Delete(); + echo date("d M Y h:i:s A")." - Record deleted
"; + } else { + echo date("d M Y h:i:s A")." - Document Not Found
"; + } +} + +if (isset($_POST['BtnData'])) +{ + try + { + CheckLogin(); + echo date("d M Y h:i:s A")." - Begin Posting
"; + PostData(); + echo date("d M Y h:i:s A")." - Done
"; + } + 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
"; + DelData(); + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ + +
+ + +``` + +
+ +#### Customer.Statement.RO + +
+ Customer.Statement.RO Script - click to expand + +```php + + + + + + + +

SQL Acc SDK in PHP page

+ +"; + + +$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 ""; + echo ""; + $DataSet->First(); + $fc = $DataSet->Fields->Count-1; + for ($x = 0; $x <= $fc; $x++) { + #Insert Header + echo ""; + } + echo ""; + + #Looping Dataset + while (! $DataSet->Eof()){ + echo ""; + for ($x = 0; $x <= $fc; $x++) { + $lFN = $DataSet->Fields->Items($x)->FieldName(); + echo ""; + } + echo ""; + $DataSet->Next(); + } + echo "
".$DataSet->Fields->Items($x)->FieldName()."
".$DataSet->FindField($lFN)->AsString()."
"."
"; +} + +function GetData(){ + global $ComServer; + + $lSQL = ' + + + + + + + + + + + '; + + $lRptVar = $ComServer->RptObjects->Find('Customer.Statement.RO'); +# $lRptVar->Params->Find('AgentData')->AsBlob = ; #Not use if AllAgent is True + $lRptVar->Params->Find('AgingData')->AsString = $lSQL; + $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('DateFrom')->AsDate = '01 Sep 2024'; + $lRptVar->Params->Find('DateTo')->AsDate = '30 Sep 2024'; + $lRptVar->Params->Find('StatementDate')->AsDate = '30 Sep 2024'; # Norm same as DateTo + $lRptVar->Params->Find('SelectDate')->AsBoolean = True; + $lRptVar->Params->Find('IncludeZeroBalance')->AsBoolean = False; + $lRptVar->Params->Find('SortBy')->AsString = 'CompanyCategory;Code;CompanyName;Agent;Area;CurrencyCode;ControlAccount'; + $lRptVar->Params->Find('StatementType')->AsString = 'O'; #O := Open Item, B := B/F + + + $lRptVar->CalculateReport(); + $lDataSet = $lRptVar->DataSets->Find('cdsMain'); + $lDataSet2 = $lRptVar->DataSets->Find('cdsDocument'); + $lDataSetCO = $lRptVar->DataSets->Find('cdsCompany'); + + if ($lDataSet->RecordCount > 0) { + echo "Main Data"."
"; + SetGrid($lDataSet); + + echo "Detail Invoice"."
"; + SetGrid($lDataSet2); + + echo "Company Information"."
"; + SetGrid($lDataSetCO); + + }else { + echo "Record Not Found"; + } +} + +if (isset($_POST['BtnData'])) +{ + try + { + CheckLogin(); + GetData(); + echo "
"; + echo date("d M Y h:i:s A")." - Done"; + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ +
+ + +``` + +
+ +#### AP_SP-Add, Edit & Delete (sales payment) + +
+ AP_SP-Add, Edit & Delete Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +$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-0024.FDB"); #Database Name + +} + +function PostData(){ + global $ComServer; + + $BizObject = $ComServer->BizObjects->Find("AP_SP"); + $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data + $lDetail = $BizObject->DataSets->Find("cdsKnockOff"); #lDetail contains detail data + + #Find PV Number + $lDocNo = "--PV Test--"; + $lCode = "400-C0001"; + $V = array($lDocNo, $lCode); #DocNo, Supplier Code + $lDocKey = $BizObject->FindKeyByRef("DocNo;Code", $V); + + if ($lDocKey != null){ + echo "Dockey = ".$lDocKey."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Edit(); + $lMain->Edit(); + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2024-09-23")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2024-09-23")); #YYYY-MM-DD + $lMain->FindField("Description")->AsString = "Payment for A/c - Edited"; + $lMain->FindField("DocAmt")->AsFloat = 550.00; + + #Knock Off IV + $V = array("PI", "--PI Test--"); #DocType, DocNo + + if ($lDetail->Locate("DocType;DocNo", $V, False, False)) { + $lDetail->Edit(); + $lDetail->FindField("KOAmt")->AsFloat = 550; + $lDetail->FindField("KnockOff")->AsString = "T"; + $lDetail->Post(); + } + } else { + echo "New Payment
"; + $BizObject->New(); + $lMain->FindField("DocKey")->value = -1; + $lMain->FindField("DocNo")->AsString = $lDocNo; + $lMain->FindField("Code")->AsString = $lCode; #Supplier Account + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2024-09-23")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2024-09-23")); #YYYY-MM-DD + $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("PI", "--PI Test--"); #DocType, DocNo + + if ($lDetail->Locate("DocType;DocNo", $V, False, False)) { + $lDetail->Edit(); + $lDetail->FindField("KOAmt")->AsFloat = 200.0; + $lDetail->FindField("KnockOff")->AsString = "T"; + $lDetail->Post(); + } + + } + $BizObject->Save(); + echo "Save with DocNo ".$lMain->FindField("DocNo")->AsString."
"; + echo date("d M Y h:i:s A")." - Posting Done
"; + $BizObject->Close(); +} + +function DelData(){ + global $ComServer; + + $BizObject = $ComServer->BizObjects->Find("AP_SP"); + $lMain = $BizObject->DataSets->Find("MainDataSet"); #lMain contains master data + + #Find PV Number + $lDocNo = "--PV Test--"; + $lCode = "400-C0001"; + $V = array($lDocNo, $lCode); #DocNo, Supplier Code + $lDocKey = $BizObject->FindKeyByRef("DocNo;Code", $V); + + if ($lDocKey != null){ + echo "Dockey = ".$lDocKey."
"; + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Delete(); + echo date("d M Y h:i:s A")." - Record deleted
"; + } else { + echo date("d M Y h:i:s A")." - Document Not Found
"; + } +} + +if (isset($_POST['BtnData'])) +{ + try + { + CheckLogin(); + echo date("d M Y h:i:s A")." - Begin Posting
"; + PostData(); + echo date("d M Y h:i:s A")." - Done
"; + } + 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
"; + DelData(); + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ + +
+ + +``` + +
+ +#### ST_XF-Add, Edit & Delete (stock transfer) + +
+ ST_XF-Add, Edit & Delete Script - click to expand + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; + +$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-0035.FDB"); #Database Name + +} + +function PostData(){ + global $ComServer; + + $BizObject = $ComServer->BizObjects->Find("ST_XF"); + $lMain = $BizObject->DataSets->Find("MainDataSet"); + $lDtl = $BizObject->DataSets->Find("cdsDocDetail"); + + #Find ST Transfer Number + $lDocNo = "--XF Test--"; + $lDocKey = $BizObject->FindKeyByRef("DocNo", $lDocNo); + + if ($lDocKey == null){ + $BizObject->New(); + $lMain->FindField("DocNo")->AsString = $lDocNo; + $lMain->FindField("DocDate")->value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $lMain->FindField("PostDate")->value = date("d-m-Y", strtotime("2025-03-24")); #YYYY-MM-DD + $lMain->FindField("Code")->AsString = "300-C0001"; #Customer Account - Optional + $lMain->FindField("CompanyName")->AsString = "Cash Sales"; #Customer Name - Optional + $lMain->FindField("Description")->AsString = "Stock Transfer"; + + #For With Item Code + $lDtl->Append(); + $lDtl->FindField("Seq")->value = 1; + $lDtl->FindField("ItemCode")->AsString = "ANT"; + $lDtl->FindField("Description")->AsString = "Transfer Item A"; + $lDtl->FindField("Qty")->AsFloat = 2; + $lDtl->FindField("UOM")->AsString = "CTN"; + $lDtl->FindField("FromLocation")->AsString = "----"; + $lDtl->FindField("ToLocation")->AsString = "BALAKONG"; + $lDtl->Post(); + + $lDtl->Append(); + $lDtl->FindField("Seq")->value = 2; + $lDtl->FindField("ItemCode")->AsString = "HFK"; + $lDtl->FindField("Description")->AsString = "Transfer Item B"; + $lDtl->FindField("Qty")->AsFloat = 3; + $lDtl->FindField("UOM")->AsString = "UNIT"; + $lDtl->FindField("FromLocation")->AsString = "KL"; + $lDtl->FindField("ToLocation")->AsString = "BC"; + $lDtl->Post(); + + $lDtl->Append(); + $lDtl->FindField("Seq")->value = 3; + $lDtl->FindField("ItemCode")->AsString = "HFK"; + $lDtl->FindField("Description")->AsString = "Transfer Item C"; + $lDtl->FindField("Qty")->AsFloat = 4; + $lDtl->FindField("UOM")->AsString = "UNIT"; + $lDtl->FindField("FromLocation")->AsString = "----"; + $lDtl->FindField("ToLocation")->AsString = "BC"; + $lDtl->Post(); + } else{ + $BizObject->Params->Find("DocKey")->AsString = $lDocKey; + $BizObject->Open(); + $BizObject->Edit(); + $lMain->FindField("CompanyName")->value = "FAIRY TAIL WIZARD"; + $lMain->FindField("Description")->AsString = "Stock Transfer - Edited"; + + $V = array("HFK", "UNIT", "KL"); #ItemCode, UOM, FromLocation + if ($lDtl->Locate("ItemCode;UOM;FromLocation", $V, False, False)){ + $lDtl->Edit(); + $lDtl->FindField("Seq")->value = 2; + $lDtl->FindField("ItemCode")->AsString = "HFK"; + $lDtl->FindField("Description")->AsString = "Transfer Item B"; + $lDtl->FindField("Qty")->AsFloat = 5; + $lDtl->FindField("UOM")->AsString = "UNIT"; + $lDtl->FindField("FromLocation")->AsString = "KL"; + $lDtl->FindField("ToLocation")->AsString = "BALAKONG"; + $lDtl->Post(); + } + } + try{ + $BizObject->Save(); + echo $lMain->FindField("DocNo")->AsString. "
"; + echo "Posting Done
"; + }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; + } +} + +?> +
+ +
+ + +``` + +
+ +### Node JS + Module Require in Node JS + - Winax (Mandatory) -> npm install winax + +#### Common + - Common.js file for example code + +
+ Common Function Script - click to expand + +```python +/* 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', /* 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 Script - click to expand + +```php +/* 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 Script - click to expand + +```php +/* 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 - click to expand + +```php +/* 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 Stock Qty Balance Script - click to expand + +```php +/* 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 - click to expand + +```php +/*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 = "<>"; + 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(); +} +``` + +
+ +#### Get Build No + +
+ Get Build No Script - click to expand + +```php +/* Updated 22 Jan 2025 */ +var Common = require('./Common'); +var ComServer, lBuildNo; + +function GetData() { + lBuildNo = ComServer.BuildNo; + console.error(lBuildNo); +} + +try{ + ComServer = Common.CreateSQLAccServer(); + GetData(); + ComServer.Logout(); +} catch(e){ + console.error(e.message) +} finally { + Common.KillApp(); +} +``` + +
+ +#### Delete SL_IV (sales invoice) + +
+ Delete SL_IV Script - click to expand + +```php +/* Updated 26 Jun 2025 */ +var Common = require('./Common'); +var ComServer; + +function PostData() { + var BizObject, lMain, lDockey; + BizObject = ComServer.BizObjects.Find('SL_IV') ; + + lMain = BizObject.DataSets.Find('MainDataSet'); /*lMain contains master data*/ + + lDocKey = BizObject.FindKeyByRef('DocNo', "--IV Test--"); + BizObject.Params.Find("Dockey").Value = lDocKey; + + if (lDocKey != null) { + BizObject.Open(); + BizObject.Delete(); + } else + console.log("Record Not Found"); + BizObject.Close(); +} + + + +try{ + ComServer = Common.CreateSQLAccServer(); + console.log("Delete Sales Invoice"); + PostData(); + console.log("Done"); + ComServer.Logout(); +} catch(e){ + console.error(e.message) +} finally { + Common.KillApp(); +} +``` + +
+ +### Java + + Module/Library Require in Java + - Jacob (Mandatory) +Example [Java-20250331](https://download.sql.com.my/customer/Fairy/Java.zip) + +### VB Script + +#### Get Company Profile + +
+ Get Company Profile Script - click to expand + +```vb +'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 - click to expand + +```vb +'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 (customer invoice) + +
+ AR_IV Script - click to expand + +```vb +'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 - click to expand + +```vb +'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 (customer payment) + +
+ AR_PM Script - click to expand + +```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, 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 - click to expand + +```vb +'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 - click to expand + +```vb +'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 - click to expand + +```vb +'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 = " " &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" +' 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 Object Script - click to expand + +```vb +'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 - click to expand + +```vb +'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 - click to expand + +```vb +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.TrialBalance.RO Script - click to expand + +```vb +'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.RO Script - click to expand + +```vb +'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 = " " &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" &_ + "" + 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 - click to expand + +```vb +'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 (sales credit note / credit sales) + +
+ SL_CS Script - click to expand + +```vb +'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 Payment Report Object Script - click to expand + +```vb +'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 Invoice Report Object Script - click to expand + +```vb +'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 - click to expand + +```vb +'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 - click to expand + +```vb +'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 - click to expand + +```vb +'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 - click to expand + +```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 + + 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 - click to expand + +```vb +'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 - click to expand + +```vb +'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 - click to expand + +```vb +'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 (stock issue) + +
+ ST_IS Script - click to expand + +```vb +'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 (stock received) + +
+ ST_RC Script - click to expand + +```vb +'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 (stock adjustment) + +
+ ST_AJ Script - click to expand + +```vb +'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 (stock transfer) + +
+ ST_XF Script - click to expand + +```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, 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 (purchase invoice) + +
+ AP_PI-Edit Script - click to expand + +```vb +'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 - click to expand + +```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 + +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 - click to expand + +```vb +'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 - click to expand + +```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 +``` + +
+ +#### GL_JE-Edit + +
+ GL_JE-Edit Script - click to expand + +```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 +``` + +
+ +#### GL_JE-Delete + +
+ GL_JE-Delete Script - click to expand + +```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 +``` + +
+ +#### Get Invoice Next Number + +
+ Get Invoice Next Number Script - click to expand + +```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 +``` + +
+ +#### Auto Run Doc. Number + +
+ Sales Order Auto Run Doc Number Script - click to expand + +```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 = "<>" + 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 - click to expand + +```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 +``` + +
+ +#### ST_Item with Opening + +
+ ST_Item with Opening Script - click to expand + +```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 +``` + +
+ +#### GL Stock Value-Insert,Edit & Delete + +
+ GL Stock Value-Insert,Edit & Delete Script - click to expand + +```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 +``` + +
+ +#### Stock Item Template to SL_IV + +
+ Stock Item Template to SL_IV Script - click to expand + +```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 +``` + +
+ +#### AR_CN + +
+ AR_CN Script - click to expand + +```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 +``` + +
+ +### JScript/JavaScript + - This Script only can run using Internet Explorer (till IE 11) + +#### AR_IV + +
+ AR_IV Script - click to expand + +```javascript + + +Add Customer Invoice + + + + + + +``` + +
+ +#### SL_CS + +
+ SL_CS Script - click to expand + +```javascript + + +Add Cash Sales + + + + + + +``` + +
+ +#### AR_PM + +
+ AR_PM Script - click to expand + +```javascript + + +Customer Payment + + + + + + + + +``` + +
+ +#### Customer.IV.RO + +
+ Customer.IV.RO Script - click to expand + +```javascript + + + Customer.IV.RO + + + + +
+ + +
+ + +``` + +
+ +#### Customer.RO + +
+ Customer.RO Script - click to expand + +```javascript + + +Add Customer Invoice + + + + + + + + + + + + +
Main TableBranch Branch
+ + + +
+ + + + + +
+ +
+ + +``` + +
+ +#### Get Next IV Number + +
+ Get Next IV Number Script - click to expand + +```javascript + + +Add Cash Sales + + + + + + +``` + +
+ +#### Customer & Supplier Contra + +
+ Customer & Supplier Contra Script - click to expand + +```javascript + + +Add Customer Invoice + + + +   +   + + +``` + +
+ +#### Add Stock Item + +
+ Add Stock Item Script - click to expand + +```javascript + + +Add Stock Item + + + + + + +``` + +
+ +#### Get Company Profile + +
+ Get Company Profile Script - click to expand + +```javascript + + +Add Cash Sales + + + + + + +``` + +
+ +### Delphi + - The below example is assuming after you had check the login status. + +#### GL_JE + +
+ GL_JE Script - click to expand + +```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; +``` + +
+ +#### GL_PV + +
+ GL_PV Script - click to expand + +```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; +``` + +
+ +#### AR_Customer + +
+ AR_Customer Script - click to expand + +```delphi +procedure TfmMain.dxbb_CustomerClick(Sender: TObject); +var lMain, lDtl, lBizObj, lBizApp, lDockey : 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'); + + lDocKey := lBizObj.FindKeyByRef('CODE', 'FAIRY'); + try + if VarIsNull(lDocKey) then begin + lBizObj.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; + end else begin + lBizObj.Params.Find('Code').AsString := 'FAIRY'; + lBizObj.Open; + lBizObj.Edit; + lMain.FindField('CompanyName').AsString := 'FAIRY TAIL WIZARD'; + + while lDtl.RecordCount > 0 do begin + lDtl.First; + lDtl.Delete; + end; + + lDtl.Append; //For 1st Branch + lDtl.FindField('BranchType').AsString := 'B'; + lDtl.FindField('BranchName').AsString := 'BILLING'; + 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 := 'New Branch1'; + 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; + + end; + lBizObj.Save; + + lTime := Now - lTime; + MessageDlg(Format('[Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]), + mtInformation, [mbOk], 0); + finally + lBizObj.Close; + lBizApp := null; + end; +end; +``` + +
+ +#### AR_PM + +
+ AR_PM Script - click to expand + +```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; +``` + +
+ +#### AR_PM-Edit + +
+ AR_PM-Edit Script - click to expand + +```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; +``` + +
+ +#### ST_Item + +
+ ST_Item Script - click to expand + +```delphi +procedure TfmMain.dxbb_ST_ItemClick(Sender: TObject); +var lMain, lDtl, lBar, lBizObj, lDockey: 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'); + lBar := lBizObj.DataSets.Find('cdsBarcode'); + + lDocKey := lBizObj.FindKeyByRef('Code', 'FAIRY'); + try + if VarIsNull(lDocKey) then begin + lBizObj.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; + end else begin + lBizObj.Params.Find('Dockey').Value := lDocKey; + lBizObj.Open; + lBizObj.Edit; + lMain.FindField('DESCRIPTION').value := 'FAIRY TAIL WIZARD'; + + while lDtl.RecordCount > 0 do begin + lDtl.First; + lDtl.Delete; + end; + //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 do begin + lBar.First; + lBar.Delete; + end; + + 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; + end; + 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; + lBar := null; + lBizObj := null; + lBizApp := null; + end; +end; +``` + +
+ +#### ST_Item-Edit + +
+ ST_Item-Edit Script - click to expand + +```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; +``` + +
+ +#### SL_IV + +
+ SL_IV Script - click to expand + +```delphi +procedure TfmMain.dxbb_SL_IVClick(Sender: TObject); +var lMain, lDtl, lSN, lBizObj, lBizApp, lDockey, V: 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'); + + V := lBizApp.CreateOleVariantArray(1); + V.SetItem(0, '--IV Test--'); //DocNo + V.SetItem(1, '300-A0001'); //CompanyCode + lDocKey := lBizObj.FindKeyByRef('DocNo;Code', V.AsOleVariant); + + try + if VarIsNull(lDocKey) then begin + lBizObj.New; + lMain.FindField('DocNo').AsString := '--IV Test--'; + lMain.FindField('CODE').AsString := '300-A0001'; + lMain.FindField('DocDate').Value := '28 Aug 2024'; + lMain.FindField('PostDate').Value := '28 Aug 2024'; + lMain.FindField('TAXDATE').Value := '28 Aug 2024'; + lMain.FindField('Description').AsString := 'Sales'; //Information to shown in Statement + lMain.FindField('Cancelled').AsString := 'F'; + lMain.Post; + + lDtl.Append; // For Tax Inclusive = True with override Tax Amount + lDtl.FindField('SEQ').Value := 1; + lDtl.FindField('ItemCode').AsString := 'ANT'; + //lDtl.FindField('ACCOUNT').AsString := '500-000'; //GL Sales Account if wanted override + lDtl.FindField('DESCRIPTION').AsString := 'ANTENA'; + lDtl.FindField('QTY').AsFloat := 1; + lDtl.FindField('UOM').AsString := 'UNIT'; + lDtl.FindField('Disc').AsString := ''; //'5%+3; //Optional(eg 5% plus 3 Discount) + lDtl.FindField('TAX').AsString := 'SV6'; + lDtl.FindField('TAXINCLUSIVE').Value := 1; + 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('SEQ').Value := 2; + lDtl.FindField('ItemCode').AsString := 'ANT'; + //lDtl.FindField('ACCOUNT').AsString := '500-000'; //GL Sales Account if wanted override + lDtl.FindField('DESCRIPTION').AsString := 'ANTENA B'; + lDtl.FindField('QTY').AsFloat := 1; + lDtl.FindField('TAX').AsString := 'SV6'; + lDtl.FindField('UOM').AsString := 'UNIT'; + 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('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('UOM').AsString := 'UNIT'; + lDtl.FindField('TAX').AsString := 'SV6'; + lDtl.FindField('TAXINCLUSIVE').Value := 0; + lDtl.FindField('UNITPRICE').AsFloat := 94.43; + lDtl.FindField('TAXAMT').AsFloat := 11.33; + lDtl.Post; + end else begin + lBizObj.Params.Find('Dockey').Value := lDockey; + lBizObj.Open; + lBizObj.Edit; + lMain.FindField('Description').AsString := 'Edited Sales'; + + while lDtl.RecordCount > 0 do begin + lDtl.First; + lDtl.Delete; + end; + + lDtl.Append; + lDtl.FindField('SEQ').Value := 1; + lDtl.FindField('ItemCode').AsString := 'ANT'; + //lDtl.FindField('ACCOUNT').AsString := '500-000'; //GL Sales Account if wanted override + lDtl.FindField('DESCRIPTION').AsString := 'ANTENA'; + lDtl.FindField('QTY').AsFloat := 1; + lDtl.FindField('UOM').AsString := 'CTN'; + lDtl.FindField('TAX').AsString := 'SV6'; + lDtl.FindField('TAXINCLUSIVE').Value := 0; + lDtl.FindField('UNITPRICE').AsFloat := 200; + lDtl.FindField('AMOUNT').AsFloat := 200; + lDtl.FindField('TAXAMT').AsFloat := 12; //Less 0.01 + lDtl.Post; + end; + 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 Script - click to expand + +```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; +``` + +
+ +#### Stock.Item.RO + +
+ Stock.Item.RO Script - click to expand + +```delphi + +``` + +
+ +
+ Script - click to expand + +```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; +``` + +
+ + +#### Customer.Statement.RO + +
+ Customer.Statement.RO Script - click to expand + +```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 := ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''; + 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 1 - click to expand + +```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; +``` + +
+ +#### GL Account List For Sales & Purchase 2 + +
+ GL_Acc Object Script 2 - click to expand + +```delphi + +``` + +
+ +#### Customer.Aging.RO + +
+ Customer Aging Report Object Script - click to expand + +```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 := ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''; + 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 - click to expand + +```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; +``` + +
+ + +#### AR_DP + +
+ Customer Deposit Script - click to expand + +```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; +``` + +
+ +#### Customer Deposit to Customer Payment + +
+ Customer Deposit to Customer Payment Script - click to expand + +```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; +``` + +
+ +#### AR_DPDTL_REFUND + +
+ Customer Deposit Forfeit Script - click to expand + +```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; +``` + +
\ No newline at end of file diff --git a/docs/integration/sdk-live/faq.md b/docs/integration/sdk-live/faq.md new file mode 100644 index 00000000..22839168 --- /dev/null +++ b/docs/integration/sdk-live/faq.md @@ -0,0 +1,787 @@ +--- +title: SDK FAQ +description: Frequently Ask Questions on External Program Linking for SQL Account +slug: /integration/sdk-live/faq +tags: ["SQL Account", "Integration"] +--- + +## Having 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 | General +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 +- Refer to [Get Company Profile](/integration/sdk-live/basic-guide#get-company-profile) + +## 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 : + +```sql + +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 wants to know which Doc No in SQL Acc is posted. +To Set Auto Assign set it as below : + +DocNo Field Script/Code : + +```sql +lMain.FindField('DocNo').AsString := '<>'; +``` + +```sql +lDocNo := lMain.FindField('DocNo').AsString; //To Get docno after post +``` + +## Can I Auto Login & Logout SQL Accounting when doing & after Posting? + +- Yes , below is example script +- Only works if no user in that PC is using SQL Accounting (sql accounting should not be running at the time) + +### C Sharp + +
+ C Sharp - click to expand + +```csharp +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 + +
+ Delphi - click to expand + +```vb +.... + 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 + +
+ VB Script - click to expand + +```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 +``` + +
+ +## Why 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 : + +```vb +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"; 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 = "SV"; + lDetail.FindField("TaxRate").AsString = "6%"; + lDetail.FindField("TaxInclusive").value = False; + 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 + +Only available in + + - Version 1001.858 & above + +In Each table it had a field call LASTMODIFIED. +The value is **Epoch Time** or **Unix Time** + +### 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 + + - VB Script : + +```vb +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 : + +```csharp +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 + +```c + 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 + +![sql-login-3dot](../../../static/img/integration/sdk-live/faq/sql-login-3dot.jpg) + +For SQL Accounting Version 5.2023.958.832 and above + +![sql-new-ver-login-setting-button](../../../static/img/integration/sdk-live/faq/sql-new-ver-login-setting-button.jpg) + +![for-fb-30](../../../static/img/integration/sdk-live/faq/for-fb-30.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? + +### In C Sharp + +```csharp + +try +{ + BizObject.New(); +.... + BizObject.Save(); +} +catch (Exception ex) +{ + MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); +} +``` + +### In Python + +```python +try: + BizObject.Save() + except Exception as e: + print("Oops!", e) +``` + +### In VB.Net + +```vb +Try + BizObject.[New] +... + BizObject.Save +Catch ex As Exception + MsgBox(ex.Message, MsgBoxStyle.Exclamation) +End Try +``` + +### In Delphi + +```sql +try + lBizObj.New; +.... + lBizObj.Save; +except + on E: Exception do + Memo1.Lines.Text := E.Message; +end; +``` + +## Why sometimes when Post to SQL Accounting will 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) + + 1. Do Verify 1st (eg Check Customer Code Validity & etc) + 2. Post Transactions + +### Possible Problem 2 + +- Keep Login & Logout till windows not enough time to response +- Summary action (Correct Steps) + + 1. Pull Data from Your application/web + 2. Login SQL Accounting 1 time (Auto Login) + 3. Do all your requirement actions (eg. verify, query & posting) + + ```sql + 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 + ``` + + 4. Logout SQL Accounting 1 time (Auto Logout) + 5. Push Data to Your application/web (if any) + +### Possible Problem 3 + +Company Profile Logo format had problem. +Solution + +1. Click File | Company Profile +2. Export out the Logo by right Click the Company Logo +3. Open the Exported Logo with Photo Editor +4. Just Click File | Save again as jpg. +5. Load Back the Save Logo by right Click the Company Logo +6. 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 + +```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 + +1. Install the Testing SQL Accounting version & Testing Database in the developer PC + +2. Install the Live SQL Accounting version & User Backup Database in the developer PC + + - Require User Permission for Backup + +3. Setup at User PC/Server & using User Backup Database + + - Require User Permission for Backup & PC/Server setup + +4. 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 + +1. Call ComServer +2. Check Login +3. Call BizObject (eg SL_CS) +4. Begin Loop you data +5. Call Close BizObject (eg BizObject.Close) +6. Continue Call other BizObject (eg AR_PM) +7. Repeat Steps 4 & 5 +8. Call Logout +9. Free ComServer + +## How to post Description3 with Unicode? + +### C Sharp + +```csharp +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 + +```vb +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 + +```sql +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 built in Utility function (only available from **5.2022.941.822** & above) + +### PHP + +```php + + + + +

SQL Acc SDK in PHP page

+ +"; +#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 "
==
"; +echo "
Result after RTF:
"; +$txt = $ComServer->Utility->RichTextToPlainText($rtf); +echo ""; +echo "
==
"; +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 = "<>"; + $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 "
"; + echo date("d M Y h:i:s A")." - Done"; +PostData(); +echo "
"; + echo date("d M Y h:i:s A")." - Done ST_AJ"; + } + finally + { + $ComServer->Logout(); + #free the object + $ComServer = null; + } +} + +?> +
+ +
+ + +``` + +## Why the TAXEXEMPTIONREASON field become empty even I have pass the value in? + + Make sure the TAXRATE field is set to empty + +```sql +.... + lDtl.FindField('Tax').AsString := 'SVE'; + lDtl.FindField('TaxRate').AsString := ''; + lDtl.FindField('TaxExemptionReason').AsString := 'my tax exemption reason'; +... +``` + +Why is Posting Amount not correct when SQL Acc Default Tax for Tax Inclusive is True ? + + - This Only happen if 3rd party also is Tax Inclusive is True + - Can try below posting seq + +```sql +.... + lDetail.FindField("Qty").AsFloat = 1 + lDetail.FindField("UOM").AsString = "UNIT" + lDetail.FindField("Tax").AsString = "ST" + lDetail.FindField("TaxRate").AsString = "10%" + lDetail.FindField("TaxInclusive").value = False + lDetail.FindField("UnitPrice").AsFloat = 264 + lDetail.FindField("Amount").AsFloat = 240 + lDetail.FindField("TaxAmt").AsFloat = 24 + + lDetail.DisableControls() + lDetail.FindField("TaxInclusive").value = True + lDetail.EnableControls() +... +``` diff --git a/docs/integration/sql-account-api/api-on-premise-setup.md b/docs/integration/sql-account-api/api-on-premise-setup.md index 25b0f393..d992dde4 100644 --- a/docs/integration/sql-account-api/api-on-premise-setup.md +++ b/docs/integration/sql-account-api/api-on-premise-setup.md @@ -9,11 +9,29 @@ tags: ["SQL Account", "SQL Account API", "On-Premise Setup"] ## Prerequisites +- Microsoft Windows 11 and above (recommended with 64 bits windows) +- Intel i5, i7 and above computer. +- 8 GB of RAM (Recommended 12 GB and above). - `SQL Account` **version 5.2025.1038.875** or above +- Firebird (Recommended Version 3.0.9 & above) - Fix server IP address (either DHCP Reservation or Static) - [Public IP Address](#public-ip-address) - [Port Forwarding](#step-3---port-forwarding) +## Postman Collection + +- Updated 04 Aug 2025 +- [Postman Collection](https://download.sql.com.my/customer/Fairy/APICollection.zip) +- [Authenticating Requests: Using Query Parameters (AWS Signature Version 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html) + +## Steps Import Collection + +- Click [here](https://download.sql.com.my/customer/Fairy/SQLAcc-API-001.gif) to see the guide + +### Update Access & Secret Key + +![steps-import-collection](../../../static/img/integration/sql-account-api/on-premise-setup/steps-import-collection.jpg) + ## Public IP Address Make sure to have a **dedicated public IP Address**. @@ -36,21 +54,21 @@ If the provider requests a reason, you can explain that you intend to host a ser 1. On `Logon Screen` > **Click** `⚙️` - ![logon screen setting](../../../static/img/sql-account-api/on-premise-setup/1.png) + ![logon screen setting](../../../static/img/integration/sql-account-api/on-premise-setup/1.png) 2. **Right-Click** on company database > **Select** `Configure API Service...` - ![configure mobile connect](../../../static/img/sql-account-api/on-premise-setup/2.png) + ![configure mobile connect](../../../static/img/integration/sql-account-api/on-premise-setup/2.png) 3. **Click** on `Install` to install API service - ![install mobile connect](../../../static/img/sql-account-api/on-premise-setup/3.png) + ![install mobile connect](../../../static/img/integration/sql-account-api/on-premise-setup/3.png) ### Step 2 - Start Service After the installation, start the service. Once successful, `Service is running` status will show on screen. -![service running](../../../static/img/sql-account-api/on-premise-setup/4.png) +![service running](../../../static/img/integration/sql-account-api/on-premise-setup/4.png) ### Step 3 - Port Forwarding @@ -59,7 +77,7 @@ Next, we will need to do `Port Forwarding`. :::info[Port Forwarding Information] You can **Click** on `Show Tips` to find all the information for port forwarding configuration. -![show tips](../../../static/img/sql-account-api/on-premise-setup/5.png) +![show tips](../../../static/img/integration/sql-account-api/on-premise-setup/5.png) ::: 1. **Access Router Setting**: Login to the router's administration interface on web browser. @@ -70,7 +88,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding If you are using a firewall or serving the router's web administration interface via a different IP address, this might not work. ::: - ![router gateway](../../../static/img/sql-account-api/on-premise-setup/6.png) + ![router gateway](../../../static/img/integration/sql-account-api/on-premise-setup/6.png) 2. **Navigate to Port Forwarding Section**: Find `Port Forwarding`, `Virtual Service` or similar section in the router's setting. @@ -85,8 +103,8 @@ You can **Click** on `Show Tips` to find all the information for port forwarding 5. **Verify**: **Click** on `Test Connection` to test `SQL Account API Service` status. When `✅ OK` status is shown, it means the service is setup successfully. - ![alt text](../../../static/img/sql-account-api/on-premise-setup/7.png) + ![alt text](../../../static/img/integration/sql-account-api/on-premise-setup/7.png) ### Examples of Port Forward -Can refer to [Sample of port forward setup](../sql-mobile-connect/on-premise-setup#examples-of-port-forward) on different router \ No newline at end of file +Can refer to [Sample of port forward setup](../sql-mobile-connect/on-premise-setup#examples-of-port-forward) on different router diff --git a/docs/integration/sql-account-api/faq.md b/docs/integration/sql-account-api/faq.md new file mode 100644 index 00000000..d4f6d145 --- /dev/null +++ b/docs/integration/sql-account-api/faq.md @@ -0,0 +1,74 @@ +--- +sidebar_position: 4 +id: sql-account-api-faq +title: Generate API Secret Key +description: Frequently Asked Questions (FAQ) in SQL Accounting API +slug: /sql-account-api/faq +tags: ["SQL Account", "SQL Account API", "Generate API Secret Key"] +--- + +## Why when I try to update (PUT) for Data Entry (eg Sales Invoice) it prompt error "Record has been changed by other users." + +- Make sure at you update the field **updatecount** by +1 after you get the original **updatecount** from sqlacc +- Below example original is 2 + +```vb +"updatecount": 3, + "sdsdocdetail": [ + { + "dtlkey": 99, +``` + +## How to update(PUT) detail information for Data Entry (eg Sales Invoice)? + +- Make sure at sdsdocdetail + +- For Update => Insert field dtlkey with the original dtlkey from sqlacc +- For Insert New record => Remove the dtlkey field or Set it as -1 + +```vb + "sdsdocdetail": [ + { + "dtlkey": 99, + "seq": 1, + "itemcode": "ISCT", + "description": "Industrial Style Round Coffee Table - Edited", + + }, + { + "seq": 2, + "itemcode": "MISC", + "description": "MISC - New Insert", + + }, + { + "dtlkey": -1, + "seq": 3, + "itemcode": "RM-04", + "description": "Arm Rest - New Insert", + +``` + +:::warning +If provided dtlkey is invalid system will treat is as Insert New Record +::: + +## What is the max limit for GET? + +- Currently max is 50 records per request + +## How many ways for GET Method available? + +- Now it supported 3 ways on GET method. + +| **Example GET Method** | **Description** | +|--------------------------|----------------| +| `/purchaseinvoice/?docno=PI-00001` | Return list (master data only). Can filter by all master table fields. | +| `/purchaseinvoice/*?docno=PI-00001&code=400-A0001` | Return single record (master + detail data). Can filter by indexed table fields. Field available: `code`, `docdate`, `docno`, `postdate`, `eiv_utc`. | +| `/purchaseinvoice/{dockey}` | Return single record (master + detail data), by path parameter `dockey` only. | + +## How to get full JSON structure for the specific document? + +- Below is example to get Purchase Order JSON file + +![steps-import-collection](../../../static/img/integration/sql-account-api/faq/purcahse-order-json-file.jpg) diff --git a/docs/integration/sql-account-api/generate-api-secret-key.md b/docs/integration/sql-account-api/generate-api-secret-key.md index 84ec7c57..3832bfdf 100644 --- a/docs/integration/sql-account-api/generate-api-secret-key.md +++ b/docs/integration/sql-account-api/generate-api-secret-key.md @@ -13,29 +13,29 @@ This guide will walk through generating `API Secret Key`, which allow the user t 1. **Navigate to User Detail:** - Go to `Tools` > `Maintain User...` > `Detail` + Go to `Tools` > `Maintain User...` > `Detail` 2. **Select API Secret Key Option:** **Click** on `More` > `API Secret Key` - ![1](../../../static/img/sql-account-api/generate-api-secret-key/1.png) + ![1](../../../static/img/integration/sql-account-api/generate-api-secret-key/1.png) 3. **Generate Secret Key:** - + **Click** on `Generate API Secret Key` - ![2](../../../static/img/sql-account-api/generate-api-secret-key/2.png) + ![2](../../../static/img/integration/sql-account-api/generate-api-secret-key/2.png) :::warning[Important Note] Once an `API Secret Key` is generated for a user, that user will no longer be able to login on SQL Account directly. The user only be able to access `SQL Account API Service` with the secret key generated. ::: 4. **Copy and Save Secret Key** - + The API `Access Key` and `Secret Key` will displayed. Make sure to copy and save it immediately in a secure location. - ![3](../../../static/img/sql-account-api/generate-api-secret-key/3.png) + ![3](../../../static/img/integration/sql-account-api/generate-api-secret-key/3.png) :::info[Tip] **API Secret Key** can only be retrieved at the time of generated. If you lose it, you can `revoke` and `generate` a new API Secret Key. @@ -45,7 +45,7 @@ This guide will walk through generating `API Secret Key`, which allow the user t `SQL Account API Service` uses [AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html) for authenticating requests. You can **click** on `Test Connection` to test on the request with AWSv4 authorization header. -![4](../../../static/img/sql-account-api/generate-api-secret-key/4.png) +![4](../../../static/img/integration/sql-account-api/generate-api-secret-key/4.png) :::info[Hints] For a sample cURL request with AWSv4 authorization header, **click** on `Copy`. @@ -57,22 +57,87 @@ For a sample cURL request with AWSv4 authorization header, **click** on `Copy`. **Click** on `Download Postman Collection` to save `postman_collection.json` file. - ![5](../../../static/img/sql-account-api/generate-api-secret-key/5.png) + ![5](../../../static/img/integration/sql-account-api/generate-api-secret-key/5.png) 2. **Import the API specification into your Postman application:** **Click** on `Import`, then select `postman_collection.json` file you downloaded to import. - ![postman-1](../../../static/img/sql-account-api/generate-api-secret-key/postman-1.png) + ![postman-1](../../../static/img/integration/sql-account-api/generate-api-secret-key/postman-1.png) 3. **Update Access Key and Secret Key:** After postman collection imported, **navigate** to `Variables` tab. Then, **replace** the `your_access_key` and `your_secret Key` with the Access Key and Secret Key generated earlier. - ![postman-2](../../../static/img/sql-account-api/generate-api-secret-key/postman-2.png) + ![postman-2](../../../static/img/integration/sql-account-api/generate-api-secret-key/postman-2.png) 4. **Test on API Endpoint** **Select** on `Agent` endpoint. Then, **click** on `Send` to try retrieve agent data from `SQL Account API Service` and the `Agent` json data list will show on response body. - ![postman-3](../../../static/img/sql-account-api/generate-api-secret-key/postman-3.png) + ![postman-3](../../../static/img/integration/sql-account-api/generate-api-secret-key/postman-3.png) + +## FAQ + +### When I try to update(PUT) for Data Entry (eg Sales Invoice) it prompt error "Record has been changed by other users." + +- Make sure at you update the field updatecount by +1 after you get the original updatecount from sqlacc +- Below example original is 2 + +```pascal +..... + "updatecount": 3, + "sdsdocdetail": [ + { + "dtlkey": 99, +..... +``` + +### How to update(PUT) detail information for Data Entry (eg Sales Invoice)? + +- Make sure at sdsdocdetail + For Update => Insert field dtlkey with the original dtlkey from sqlacc + For Insert New record => Remove the dtlkey field or Set it as -1 +- Below example is to Update Detail Row 1 & Insert 2 new row + +```pascal +..... + "sdsdocdetail": [ + { + "dtlkey": 99, + "seq": 1, + "itemcode": "ISCT", + "description": "Industrial Style Round Coffee Table - Edited", +..... + }, + { + "seq": 2, + "itemcode": "MISC", + "description": "MISC - New Insert", +..... + }, + { + "dtlkey": -1, + "seq": 3, + "itemcode": "RM-04", + "description": "Arm Rest - New Insert", +.... +``` + +:::caution +If provided dtlkey is invalid system will treat is as Insert New Record +::: + +### What is the max limit for GET? + +- Currently max is 50 records per request + +### How many ways for GET Method available? + +- Now it supported 3 ways on GET method. + +| **Example Get Method** | **Description** | +|--------------------------|-----------------| +| `/purchaseinvoice/?docno=PI-00001` | Return list (master data only), can filter by all master table fields. | +| `/purchaseinvoice/*?docno=PI-00001&code=400-A0001` | Return single record (master + detail data), can filter by indexed table fields.
**Fields available:** `code`, `docdate`, `docno`, `postdate`, `eiv_utc` | +| `/purchaseinvoice/{dockey}` | Return single record (master + detail data), by path parameter `dockey` only. | diff --git a/docs/integration/sql-account-api/integration-methods.md b/docs/integration/sql-account-api/integration-methods.md new file mode 100644 index 00000000..dd50ee6f --- /dev/null +++ b/docs/integration/sql-account-api/integration-methods.md @@ -0,0 +1,6424 @@ +--- +sidebar_position: 3 +id: integration-methods +title: Alternative Integration Methods +description: A guide to integrate SQL API with different languages +slug: /sql-account-api/integration-methods +tags: ["SQL Account", "SQL Account API", "Generate API Secret Key"] +--- + +## Demo Account + +- Updated 18 July 2025 +- URL: [https://api.sql.my](https://api.sql.my/) +- AWSv4 AccessKey: may email to support@sql.com.my to get the info +- AWSv4 SecretKey: may email to support@sql.com.my to get the info +- [Sample Json File for Below sample coding](https://download.sql.com.my/customer/Fairy/APISampleJson.zip) - Updated 18 Oct 2025 + +## Available Programming Languages + +- Python +- Node JS + +### Python + +Module Require in Python + +- boto3 -> pip install boto3 +- requests -> pip install requests + +### Python Common + +
+ APICommon.py file for example code - click to expand + +```python +#Updated 07 Aug 2025 +import os +import boto3 +from botocore.auth import SigV4Auth +from botocore.awsrequest import AWSRequest +import requests +import json + +access_key = 'The Access Key' +secret_key = 'The Secret Key' +service = 'execute-api' +host = 'api.sql.my' +region = 'ap-southeast-1' + +def QuotedStr(ACode): + return "'" + ACode.replace("'", "''") + "'" + +def update_updatecount(file_path, updatecount): + """ + Loads a JSON file, increments the 'updatecount' field by 1, + and saves the changes back to the file. + + Args: + file_path (str): The path to the JSON file. + """ + try: + with open(file_path, 'r') as file: + data = json.load(file) + + # Check if 'updatecount' key exists and is an integer + if 'updatecount' in data and isinstance(data['updatecount'], int): + if updatecount is None: + updatecount = 0 + data['updatecount'] = updatecount + 1 + print(f"Updated 'updatecount' to: {data['updatecount']}") + else: + print("The key 'updatecount' does not exist or is not an integer.") + return + + # Save the updated data back to the same file + with open(file_path, 'w') as file: + json.dump(data, file, indent=3) + print("File updated successfully.") + + except FileNotFoundError: + print(f"Error: The file at {file_path} was not found.") + except json.JSONDecodeError: + print(f"Error: Failed to decode JSON from the file at {file_path}.") + except Exception as e: + print(f"An unexpected error occurred: {e}") + +def ShowAuth(request): + authorization_header = request.headers.get('Authorization') + if authorization_header: + print(f"GET Request Authorization Header (Signature): {authorization_header}") + else: + print("Authorization header not found for GET request.") + +def get_payload_data(file_path: str): + try: + with open(file_path, 'r') as f: + payload_data = json.load(f) # Load JSON data directly into a dictionary + print(json.dumps(payload_data)) + return json.dumps(payload_data) # Convert dict back to JSON string for sending + + except FileNotFoundError: + print(f"Error: The file '{file_path}' was not found.") + except json.JSONDecodeError: + print(f"Error: Could not decode JSON from file '{file_path}'. Please ensure it's valid JSON.") + except Exception as e: + print(f'An unexpected error occurred: {e}') + +def get_field_value(response_data, fieldname : str): + def find_field_value(data, target_fieldname): + if isinstance(data, dict): + for key, value in data.items(): + if key == target_fieldname: + return value + # If the value is a dictionary or list, recurse + result = find_field_value(value, target_fieldname) + if result is not None: + return result + elif isinstance(data, list): + for item in data: + result = find_field_value(item, target_fieldname) + if result is not None: + return result + return None # Field not found in this branch + + value = find_field_value(response_data, fieldname) + + if value is not None: + #print(f"Successfully retrieved value for field '{fieldname}': {value}") + return value + else: + #print(f"Field '{fieldname}' not found in the API response.") + return None + +def auto_parse_json(response_data, limit=100, indent_level=0): + """ + Automatically parses JSON data, displaying all fields and values. + + Args: + response_data: The JSON data (usually from response.json()). + limit (int): The maximum number of records to display if 'data' is a list. + indent_level (int): Used for pretty printing nested structures. + """ + indent = " " * indent_level + + if isinstance(response_data, dict): + if indent_level == 0: # Only print for the top-level object + print(f"\n{indent}--- Parsed Record Data ---") + + for key, value in response_data.items(): + if isinstance(value, dict): + print(f"{indent}{key}:") + auto_parse_json(value, limit, indent_level + 1) + elif isinstance(value, list): + print(f"{indent}{key}: [") + if key == 'data' and indent_level == 0: # Special handling for a top-level 'data' list + print(f"\nTotal Record found: {len(value)}") + print(f"--- Displaying first {min(len(value), limit)} records ---") + for i, item in enumerate(value[:limit]): + print(f"\n {indent} Record {i+1} of {len(value)}:") + print(f"{indent} "+ "-"*50) + auto_parse_json(item, limit, indent_level + 2) + if len(value) > limit: + print(f"{indent} ...and {len(value) - limit} more records.") + else: + for i, item in enumerate(value): + print(f"{indent} [{i+1} of {len(value)}]:") + auto_parse_json(item, limit, indent_level + 2) + print(f"{indent}]") + else: + print(f"{indent}{key}: {value}") + elif isinstance(response_data, list): + if indent_level == 0: # This case is if the top-level JSON is a list + print(f"\nTotal Record found: {len(response_data)}") + print(f"--- Displaying first {min(len(response_data), limit)} records ---") + for i, item in enumerate(response_data[:limit]): + print(f"{indent} Item {i+1}:") + auto_parse_json(item, limit, indent_level + 2) + if len(response_data) > limit: + print(f"{indent} ...and {len(response_data) - limit} more items.") + else: + # For simple values like strings, numbers, booleans at the top level + if indent_level == 0: + print(f"\n--- Parsed Value ---") + print(f"{indent}{response_data}") + +class BaseApiClient: + """ + A base client for interacting with AWS API Gateway endpoints using SigV4 authentication. + Encapsulates common setup like session, headers, and request signing. + """ + def __init__(self, service: str, host: str, region: str, access_key: str, secret_key: str, session_token: str = None): + self.service = service + self.host = host + self.region = region + self.session_token = session_token + + self.session = boto3.Session( + aws_access_key_id=access_key, + aws_secret_access_key=secret_key, + aws_session_token=session_token, + region_name=region + ) + self.headers = { + 'Host': host, + 'Content-Type': 'application/json' + } + + def _send_request(self, method: str, full_url: str, payload: str = None, custom_headers: dict = None) -> requests.Response | None: + """ + Sends an authenticated request to the specified URL. + + Args: + method (str): HTTP method (e.g., "GET", "POST", "PUT", "DELETE"). + full_url (str): The complete URL for the API endpoint. + payload (str, optional): JSON payload as a string for POST/PUT requests. Defaults to None. + custom_headers (dict, optional): Dictionary of additional or overriding headers. Defaults to None. + + Returns: + requests.Response or None: The response object if successful, None otherwise. + """ + request_data = payload.encode('utf-8') if payload else b'' + + # Merge custom headers with default headers + request_headers = self.headers.copy() + if custom_headers: + request_headers.update(custom_headers) + + request = AWSRequest( + method, + full_url, + headers=request_headers, + data=request_data + ) + + SigV4Auth(self.session.get_credentials(), self.service, self.region).add_auth(request) + #ShowAuth(request) # For debugging, shows the Authorization header + + try: + response = requests.request(method, request.url, headers=dict(request.headers), data=request_data, timeout=30) + print(f'Response Status: {response.status_code}') + + # Print body only if it's not a PDF or other binary content + if 'application/json' in response.headers.get('Content-Type', ''): + print(f'Response Body: {response.content.decode("utf-8")}') + else: + print(f'Response Body: (Binary Content - Type: {response.headers.get("Content-Type")})') + + response.raise_for_status() # Raise an exception for HTTP errors (4xx or 5xx) + return response + except requests.exceptions.RequestException as e: + print(f'Error making request: {e}') + return None + except Exception as e: + print(f'An unexpected error occurred: {e}') + return None + +``` + +
+ +### Agent + +
+ Agent - Get List, Add, Update & Delete Function - click to expand + +```python +#Updated 20 Aug 2025 +import os +import requests +import json +import APICommon + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the Agent API +url = f'https://{host}/agent' + +class AgentApiClient(APICommon.BaseApiClient): + """ + Client for the Agent API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_agent_data(self, offset: int = 0, limit: int = 10): + """ + Retrieves agent data with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) # Automatically parse and display JSON + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def create_agent_data(self, code: str, description: str, is_active: bool): + """ + Creates a new agent record. + + Args: + code (str): The unique code for the agent. + description (str): The description of the agent. + is_active (bool): Whether the agent is active. + """ + payload_data = { + "code": code, + "description": description, + "isactive": is_active + } + payload_str = json.dumps(payload_data) # Convert dict to JSON string + + self._send_request("POST", self.base_url, payload=payload_str) + + def update_agent_data(self, code: str, description: str, is_active: bool): + """ + Updates an existing agent record. + + Args: + code (str): The code of the agent to update. + description (str): The new description of the agent. + is_active (bool): The new active status of the agent. + """ + payload_data = { + "code": code, + "description": description, + "isactive": is_active + } + payload_str = json.dumps(payload_data) # Convert dict to JSON string + full_url = f'{self.base_url}/{code}' + + self._send_request("PUT", full_url, payload=payload_str) + + def delete_agent_data(self, code: str): + """ + Deletes an agent record by code. + + Args: + code (str): The code of the agent to delete. + """ + full_url = f'{self.base_url}/{code}' + + self._send_request("DELETE", full_url) + +if __name__ == "__main__": + agent_api = AgentApiClient(base_url=url) # Initialize with the base URL defined earlier + + # Example: Fetch existing agents + print("--- Fetching Agents (Offset 0, Limit 10) ---") + agent_api.get_agent_data(offset=0) + + print("\n" + "="*50 + "\n") + + print("--- Fetching Agents (Offset 10, Limit 10) ---") + agent_api.get_agent_data(offset=10) # Start from Record 11 (i.e. skip 1st 10 records) + + print("\n" + "="*50 + "\n") + + # Example: Create a new agent + answer = input("Continue New Record? (y/n): ") + if answer.lower() in ["y","yes"]: + print("\n--- Creating Agent 'Fairy5' ---") + agent_api.create_agent_data(code="Fairy5", description="Fairy Desc 4", is_active=True) + + print("\n" + "="*50 + "\n") + + print("--- Re-fetching Agents after Creation ---") + agent_api.get_agent_data(offset=0) + + print("\n" + "="*50 + "\n") + + # Example: Update an agent + answer = input("Continue Update Record? (y/n): ") + if answer.lower() in ["y","yes"]: + print("\n--- Updating Agent 'Fairy5' ---") + agent_api.update_agent_data(code="Fairy5", description="Fairy Desc 5 edited", is_active=True) + + print("\n" + "="*50 + "\n") + print("--- Re-fetching Agents after Update ---") + agent_api.get_agent_data(offset=0) + + print("\n" + "="*50 + "\n") + + # Example: Delete agent + answer = input("Continue Delete Record? (y/n): ") + if answer.lower() in ["y","yes"]: + print("\n--- Deleting Agent 'Fairy5' ---") + agent_api.delete_agent_data(code="Fairy5") + + print("\n" + "="*50 + "\n") + print("--- Re-fetching Agents after Deletion ---") + agent_api.get_agent_data(offset=0) + + print("\n" + "="*50 + "\n") + +``` + +
+ +### Sales Invoice + +
+ Sales Invoice - Get List, PDF, Add, Update & Delete Function - click to expand + +```python +#Updated 18 Oct 2025 +import os +import requests +import json +import APICommon + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the Sales Invoice API +url = f'https://{host}/salesinvoice' +json_path_new = '..\\API\\SL_IV-New' +json_path_edit = '..\\API\\SL_IV-Edit' +sDocNo = '--IV-Test--' +sRptName = 'Sales Invoice 8 (SST 1)' + +class SLIVApiClient(APICommon.BaseApiClient): + """ + Client for the Sales Invoice (SLIV) API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_SLIV_data(self, offset: int = 0, limit: int = 10): + """ + Retrieves sales invoice data with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) # Automatically parse and display JSON + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_SLIV_Single(self, ADocNo: str, ShowResult: bool = True, AFld: str =''): + """ + Retrieves a single sales invoice record by document number. + + Args: + ADocNo (str): The document number of the sales invoice. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + AFld (str): Search field + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + + """ + There got 3 type of GET: + 01. Get Detail => /salesinvoice/*? + - Return Result with Detail Records + - only got this fields => code=&docdate=&docno=&postdate=&eiv_utc= + 02. Normal Get => /salesinvoice? + - Return Result only Header Records + - eg lastmodified=1757557610 + 03. Get by Dockey /{Dockey} + + https://wiki.sql.com.my/wiki/Restful_API#How_many_ways_for_GET_Method_available%3F + """ + + vFld = AFld + if vFld == '': + vFld = 'DocNo' + vData = ADocNo + + aKey = '?' + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + aKey = '*?' + else: + if vFld.lower() == "dockey": + aKey = '' + + if vFld.lower() == "dockey": + full_url = f'{self.base_url}/{vData}' + else: + full_url = f'{self.base_url}/{aKey}{vFld}={vData}' + print(f"URL = {full_url}") + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + + # Base case for recursion: if we are already searching by dockey, we should not recurse again. + if vFld.lower() == "dockey": + if ShowResult: + APICommon.auto_parse_json(data) + return data + + # Recursive step: if not a dockey search, find the dockey and recurse. + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + else: + # This is the "normal get" which returns a header. We get the dockey from it. + vdockey = APICommon.get_field_value(data, "dockey") + if vdockey: + # Corrected recursive call: + return self.get_SLIV_Single(vdockey, AFld="Dockey") + else: + print("Error: 'dockey' not found in response.") + + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + return None + + def get_SLIV_PDF(self, ADocNo: str, report_name: str, save_path: str): + """ + Downloads a sales invoice as a PDF. + + Args: + ADocNo (str): The document number of the sales invoice. + report_name (str): The template name for the PDF report (e.g., 'Sales Invoice 8 (SST 1)'). + save_path (str): The directory where the PDF should be saved. + """ + data = self.get_SLIV_Single(ADocNo, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + full_url = f'{self.base_url}/{dockey}' + print(f"URL = {full_url}") + + custom_headers = { + 'Content-Type': f'application/pdf;template={report_name}' + } + + print(f"Attempting to download PDF document for DocNo: {ADocNo} using template: {report_name}") + print(f"\nRemember to check the '{save_path}' folder for the downloaded PDF.") + response = self._send_request("GET", full_url, custom_headers=custom_headers) + if response: + try: + output_filename = f"{report_name}_{ADocNo}.pdf" + full_save_path = os.path.join(save_path, output_filename) + + # Ensure the directory exists + os.makedirs(os.path.dirname(full_save_path), exist_ok=True) + + # Write the content to a file in binary mode + with open(full_save_path, 'wb') as pdf_file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: # Filter out keep-alive chunks + pdf_file.write(chunk) + + print(f"PDF for DocNo '{ADocNo}' with template '{report_name}' successfully downloaded to: {save_path}") + except IOError as e: + print(f"Error saving PDF to file: {e}") + except Exception as e: + print(f"An unexpected error occurred during PDF saving: {e}") + + def create_SLIV(self, file_path: str): + """ + Creates a new sales invoice from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the invoice data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_SLIV(self, docno: str, code: str, file_path: str): + """ + Updates an existing sales document record. + + Args: + docno (str): The document number to update. + code (str): The code associated with the document (used for verification). + file_path (str): The path to the JSON file containing the updated document data. + """ + # Retrieve necessary fields from the existing record + data = self.get_SLIV_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + cocode = APICommon.get_field_value(data, "code") + updatecount = APICommon.get_field_value(data, "updatecount") + print(f"Retrieved updatecount: {updatecount}") + + if dockey is not None and str(cocode) == code: # Ensure code matches for the right document + APICommon.update_updatecount(file_path, updatecount) + + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to update document at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: No record found for DocNo '{docno}' with code '{code}' or dockey is missing.") + else: + print(f"Error: Could not retrieve existing document data for DocNo '{docno}'. Cannot update.") + + def delete_SLIV1(self, dockey: str): + """ + Deletes a sales invoice by its dockey (document key). + + Args: + dockey (str): The document key of the invoice to delete. + """ + full_url = f'{self.base_url}/{dockey}' + self._send_request("DELETE", full_url) + + def delete_SLIV(self, docno: str, code: str): + """ + Deletes a sales invoice by its document number and code. + First retrieves the dockey using docno and code for verification. + + Args: + docno (str): The document number of the invoice to delete. + code (str): The code associated with the invoice. + """ + data = self.get_SLIV_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + cocode = APICommon.get_field_value(data, "code") + + if dockey is not None and str(cocode) == code: # Ensure code matches for the right document + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to delete document at: {full_url}") + self._send_request("DELETE", full_url) + else: + print(f"Error: No record found for DocNo '{docno}' with code '{code}' or dockey is missing. Cannot delete.") + else: + print(f"Error: Could not retrieve existing document data for DocNo '{docno}'. Cannot delete.") + +if __name__ == "__main__": + sliv_api = SLIVApiClient(base_url=url) # Initialize with the base URL defined earlier + + # Example: Fetch List data + answer = input("Continue Get document List? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Sales documents (Offset 0, Limit 10) ---") + sliv_api.get_SLIV_data(offset=0) + + print("\n" + "="*50 + "\n") + + answer = input("Continue Get document next list? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Sales Invoices (Offset 10, Limit 10) ---") + sliv_api.get_SLIV_data(offset=10) # Start from Record 11 (i.e. skip 1st 10 records) + + print("\n" + "="*50 + "\n") + + # Example: Get Single DocNo + answer = input("Continue Get Single DocNo? (y/n): ") + if answer.lower() in ["y","yes"]: + vdata = input("Enter Search Value : ") + afld = 'DocNo' + afld = input(f"Enter Search Field : {afld} ") + print(f"--- Getting Single Doc : {vdata} & Search field {afld}---") + sliv_api.get_SLIV_Single(vdata, AFld=afld) + + print("\n" + "="*50 + "\n") + + # Example: Get PDF + answer = input("Continue Downloading PDF? (y/n): ") + if answer.lower() in ["y","yes"]: + desktop_path = os.path.expanduser("~\Desktop") # Cross-platform way to get Desktop path + vDocNo = input("Enter Search Value : ") + print(f"\n--- Downloading PDF for '{vDocNo}' to {desktop_path} ---") + sliv_api.get_SLIV_PDF(vDocNo, sRptName, desktop_path) + + print("\n" + "="*50 + "\n") + + # Example: Create document + answer = input("Continue Creating New document? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Creating document from '{json_path_new}.json' ---") + sliv_api.create_SLIV(f'{json_path_new}.json') # Ensure this path is correct for your setup + + print("\n" + "="*50 + "\n") + print(f"--- Getting Newly Created document '{sDocNo}' ---") + sliv_api.get_SLIV_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Edit document + answer = input("Continue Updating document? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Updating document '{sDocNo}' with '{json_path_edit}.json' ---") + sliv_api.update_SLIV(sDocNo,'300-G0002', f'{json_path_edit}.json') # Ensure paths are correct + + print("\n" + "="*50 + "\n") + print(f"--- Getting Updated document '{sDocNo}' ---") + sliv_api.get_SLIV_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Delete document + answer = input("Continue Deleting document? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Deleting document '{sDocNo}' (code '300-G0002') ---") + sliv_api.delete_SLIV(sDocNo,'300-G0002') + + print("\n--- End of Script ---") + +``` + +
+ +### Purchase Invoice + +
+ Purchase Invoice - Get List, PDF, Add, Update & Delete Function - click to expand + +```python +#Updated 20 Aug 2025 +import os +import requests +import json +import APICommon + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the Purchase Invoice API +url = f'https://{host}/purchaseinvoice' +json_path = '..\\API\\' + +class PHPIApiClient(APICommon.BaseApiClient): + """ + Client for the Purchase Invoice (PHPI) API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_PHPI_data(self, offset: int = 0, limit: int = 10): + """ + Retrieves Purchase invoice data with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) # Automatically parse and display JSON + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_PHPI_Single(self, ADocNo, ACode: str, ShowResult: bool = True): + """ + Retrieves a single Purchase invoice record by document number. + + Args: + ADocNo (str): The document number of the Purchase invoice. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + full_url = f'{self.base_url}/*?docno={ADocNo}&code={ACode}' #*?docno=PI-00001&code=400-A0001 + #full_url = f'{self.base_url}/35' #Find by Dockey + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + return None + + def get_PHPI_PDF(self, ADocNo, ACode: str, report_name: str, save_path: str): + """ + Downloads a Purchase invoice as a PDF. + + Args: + ADocNo (str): The document number of the Purchase invoice. + report_name (str): The template name for the PDF report (e.g., 'Purchase Invoice 8 (SST 1)'). + save_path (str): The directory where the PDF should be saved. + """ + data = self.get_PHPI_Single(ADocNo, ACode, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + full_url = f'{self.base_url}/{dockey}' + print(f"URL : {full_url}") + + custom_headers = { + 'Content-Type': f'application/pdf;template={report_name}' + } + + print(f"Attempting to download PDF invoice for DocNo: {ADocNo} using template: {report_name}") + print(f"\nRemember to check the '{save_path}' folder for the downloaded PDF.") + + response = self._send_request("GET", full_url, custom_headers=custom_headers) + if response: + try: + output_filename = f"Purchase_invoice_{ADocNo}.pdf" + full_save_path = os.path.join(save_path, output_filename) + + # Ensure the directory exists + os.makedirs(os.path.dirname(full_save_path), exist_ok=True) + + # Write the content to a file in binary mode + with open(full_save_path, 'wb') as pdf_file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: # Filter out keep-alive chunks + pdf_file.write(chunk) + + print(f"PDF for DocNo '{ADocNo}' with template '{report_name}' successfully downloaded to: {save_path}") + except IOError as e: + print(f"Error saving PDF to file: {e}") + except Exception as e: + print(f"An unexpected error occurred during PDF saving: {e}") + + def create_PHPI(self, file_path: str): + """ + Creates a new Purchase invoice from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the invoice data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_PHPI(self, docno: str, code: str, file_path: str): + """ + Updates an existing Purchase invoice record. + + Args: + docno (str): The document number of the invoice to update. + code (str): The code associated with the invoice (used for verification). + file_path (str): The path to the JSON file containing the updated invoice data. + """ + # Retrieve necessary fields from the existing record + data = self.get_PHPI_Single(docno, code, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + cocode = APICommon.get_field_value(data, "code") + updatecount = APICommon.get_field_value(data, "updatecount") + print(f"Retrieved updatecount: {updatecount}") + + if dockey is not None and str(cocode) == code: # Ensure code matches for the right document + APICommon.update_updatecount(file_path, updatecount) + + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to update invoice at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: No record found for DocNo '{docno}' with code '{code}' or dockey is missing.") + else: + print(f"Error: Could not retrieve existing invoice data for DocNo '{docno}'. Cannot update.") + + def delete_PHPI1(self, dockey: str): + """ + Deletes a Purchase invoice by its dockey (document key). + + Args: + dockey (str): The document key of the invoice to delete. + """ + full_url = f'{self.base_url}/{dockey}' + self._send_request("DELETE", full_url) + + def delete_PHPI(self, docno: str, code: str): + """ + Deletes a Purchase invoice by its document number and code. + First retrieves the dockey using docno and code for verification. + + Args: + docno (str): The document number of the invoice to delete. + code (str): The code associated with the invoice. + """ + data = self.get_PHPI_Single(docno, code, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + cocode = APICommon.get_field_value(data, "code") + + if dockey is not None and str(cocode) == code: # Ensure code matches for the right document + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to delete invoice at: {full_url}") + self._send_request("DELETE", full_url) + else: + print(f"Error: No record found for DocNo '{docno}' with code '{code}' or dockey is missing. Cannot delete.") + else: + print(f"Error: Could not retrieve existing invoice data for DocNo '{docno}'. Cannot delete.") + +if __name__ == "__main__": + PHPI_api = PHPIApiClient(base_url=url) # Initialize with the base URL defined earlier + + # Example: Fetch List data + answer = input("Continue Get Invoice List? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Purchase Invoices (Offset 0, Limit 10) ---") + PHPI_api.get_PHPI_data(offset=0) + + print("\n" + "="*50 + "\n") + + answer = input("Continue Get Invoice next list? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Purchase Invoices (Offset 10, Limit 10) ---") + PHPI_api.get_PHPI_data(offset=10) # Start from Record 11 (i.e. skip 1st 10 records) + + print("\n" + "="*50 + "\n") + + # Example: Get Single DocNo + answer = input("Continue Get Single DocNo? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Getting Single Purchase Invoice 'PI-00002' ---") + PHPI_api.get_PHPI_Single('PI-00002','400-E0001') + + print("\n" + "="*50 + "\n") + + # Example: Get PDF + answer = input("Continue Downloading PDF? (y/n): ") + if answer.lower() in ["y","yes"]: + desktop_path = os.path.expanduser("~\Desktop") # Cross-platform way to get Desktop path + print(f"\n--- Downloading PDF for 'PI-00002' to {desktop_path} ---") + PHPI_api.get_PHPI_PDF('PI-00002', '400-N0001', 'Purchase Invoice 8 (SST 1)', desktop_path) + + print("\n" + "="*50 + "\n") + + # Example: Create Invoice + answer = input("Continue Creating New Invoice? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Creating Invoice from '{json_path}PH_PI-New.json' ---") + PHPI_api.create_PHPI(f'{json_path}PH_PI-New.json') # Ensure this path is correct for your setup + + print("\n" + "="*50 + "\n") + print("--- Getting Newly Created Invoice '--PI-Test1--' ---") + PHPI_api.get_PHPI_Single('--PI-Test1--','400-E0001') + + print("\n" + "="*50 + "\n") + + # Example: Edit Invoice + answer = input("Continue Updating Invoice? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Updating Invoice 'IV-Test1' with '{json_path}PH_PI-Edit.json' ---") + PHPI_api.update_PHPI('--PI-Test1--','400-E0001', f'{json_path}PH_PI-Edit.json') # Ensure paths are correct + + print("\n" + "="*50 + "\n") + print("--- Getting Updated Invoice '--PI-Test1--' ---") + PHPI_api.get_PHPI_Single('--PI-Test1--','400-E0001') + + print("\n" + "="*50 + "\n") + + # Example: Delete Invoice + answer = input("Continue Deleting Invoice? (y/n): ") + if answer.lower() in ["y","yes"]: + print("\n--- Deleting Invoice '--PI-Test1--' (code '400-E0001') ---") + PHPI_api.delete_PHPI('--PI-Test1--','400-E0001') + + print("\n--- End of Script ---") + +``` + +
+ +### Sales Order to Sales Invoice + +
+ Transfer from Sales Order to Sales Invoice - click to expand + +```python +#Updated 20 Aug 2025 +import os +import requests +import json +import APICommon + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the Sales Invoice API +url = f'https://{host}/salesinvoice' +json_path = '..\\API\\' + +class SLIVApiClient(APICommon.BaseApiClient): + """ + Client for the Sales Invoice (SLIV) API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_SLIV_data(self, offset: int = 0, limit: int = 10): + """ + Retrieves sales invoice data with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) # Automatically parse and display JSON + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_SLIV_Single(self, ADocNo: str, ShowResult: bool = True): + """ + Retrieves a single sales invoice record by document number. + + Args: + ADocNo (str): The document number of the sales invoice. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + full_url = f'{self.base_url}/*?docno={ADocNo}' + #full_url = f'{self.base_url}/35' #Find by Dockey + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + return None + + def get_SLIV_PDF(self, ADocNo: str, report_name: str, save_path: str): + """ + Downloads a sales invoice as a PDF. + + Args: + ADocNo (str): The document number of the sales invoice. + report_name (str): The template name for the PDF report (e.g., 'Sales Invoice 8 (SST 1)'). + save_path (str): The directory where the PDF should be saved. + """ + data = self.get_SLIV_Single(ADocNo, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + full_url = f'{self.base_url}/{dockey}' + + custom_headers = { + 'Content-Type': f'application/pdf;template={report_name}' + } + + print(f"Attempting to download PDF invoice for DocNo: {ADocNo} using template: {report_name}") + print(f"\nRemember to check the '{save_path}' folder for the downloaded PDF.") + + response = self._send_request("GET", full_url, custom_headers=custom_headers) + if response: + try: + output_filename = f"sales_invoice_{ADocNo}.pdf" + full_save_path = os.path.join(save_path, output_filename) + + # Ensure the directory exists + os.makedirs(os.path.dirname(full_save_path), exist_ok=True) + + # Write the content to a file in binary mode + with open(full_save_path, 'wb') as pdf_file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: # Filter out keep-alive chunks + pdf_file.write(chunk) + + print(f"PDF for DocNo '{ADocNo}' with template '{report_name}' successfully downloaded to: {save_path}") + except IOError as e: + print(f"Error saving PDF to file: {e}") + except Exception as e: + print(f"An unexpected error occurred during PDF saving: {e}") + + def create_SLIV(self, file_path: str): + """ + Creates a new sales invoice from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the invoice data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_SLIV(self, docno: str, code: str, file_path: str): + """ + Updates an existing sales invoice record. + + Args: + docno (str): The document number of the invoice to update. + code (str): The code associated with the invoice (used for verification). + file_path (str): The path to the JSON file containing the updated invoice data. + """ + # Retrieve necessary fields from the existing record + data = self.get_SLIV_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + cocode = APICommon.get_field_value(data, "code") + updatecount = APICommon.get_field_value(data, "updatecount") + print(f"Retrieved updatecount: {updatecount}") + + if dockey is not None and str(cocode) == code: # Ensure code matches for the right document + APICommon.update_updatecount(file_path, updatecount) + + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to update invoice at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: No record found for DocNo '{docno}' with code '{code}' or dockey is missing.") + else: + print(f"Error: Could not retrieve existing invoice data for DocNo '{docno}'. Cannot update.") + + def delete_SLIV1(self, dockey: str): + """ + Deletes a sales invoice by its dockey (document key). + + Args: + dockey (str): The document key of the invoice to delete. + """ + full_url = f'{self.base_url}/{dockey}' + self._send_request("DELETE", full_url) + + def delete_SLIV(self, docno: str, code: str): + """ + Deletes a sales invoice by its document number and code. + First retrieves the dockey using docno and code for verification. + + Args: + docno (str): The document number of the invoice to delete. + code (str): The code associated with the invoice. + """ + data = self.get_SLIV_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + cocode = APICommon.get_field_value(data, "code") + + if dockey is not None and str(cocode) == code: # Ensure code matches for the right document + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to delete invoice at: {full_url}") + self._send_request("DELETE", full_url) + else: + print(f"Error: No record found for DocNo '{docno}' with code '{code}' or dockey is missing. Cannot delete.") + else: + print(f"Error: Could not retrieve existing invoice data for DocNo '{docno}'. Cannot delete.") + +if __name__ == "__main__": + sliv_api = SLIVApiClient(base_url=url) # Initialize with the base URL defined earlier + + # Example: Create Invoice + answer = input("Continue Creating New Invoice? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Creating Invoice from '{json_path}SL_SO2SL_IV.json' ---") + sliv_api.create_SLIV(f'{json_path}SL_SO2SL_IV.json') # Ensure this path is correct for your setup + + print("\n" + "="*50 + "\n") + print("--- Getting Newly Created Invoice '--IV-Test1--' ---") + sliv_api.get_SLIV_Single('--IV-Test1--') + + print("\n" + "="*50 + "\n") + + # Example: Get PDF + answer = input("Continue Downloading PDF? (y/n): ") + if answer.lower() in ["y","yes"]: + desktop_path = os.path.expanduser("~\Desktop") # Cross-platform way to get Desktop path + print(f"\n--- Downloading PDF for '--IV-Test1--' to {desktop_path} ---") + sliv_api.get_SLIV_PDF('--IV-Test1--', 'Sales Invoice 8 (SST 1)', desktop_path) + + print("\n" + "="*50 + "\n") + + # Example: Delete Invoice + answer = input("Continue Deleting Invoice? (y/n): ") + if answer.lower() in ["y","yes"]: + print("\n--- Deleting Invoice '--IV-Test1--' (code '300-W0002') ---") + sliv_api.delete_SLIV('--IV-Test1--','300-W0002') + + print("\n--- End of Script ---") + +``` + +
+ +### Customer Payment + +
+ Customer Payment - Get List, PDF, Add, Update & Delete Function - click to expand + +```python +#Updated 18 Oct 2025 +import os +import requests +import json +import APICommon +import urllib.parse + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the Customer Payment API +url = f'https://{host}/customerpayment' +json_path_new = '..\\API\\AR_PM-New' +json_path_edit = '..\\API\\AR_PM-Edit' +sDocNo = '--PM-Test--' +sRptName = 'GL Official Receipt - Detail - Full (with other CNnOR info)' + +class ARPMApiClient(APICommon.BaseApiClient): + """ + Client for the Customer Payment (ARPM) API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_ARPM_data(self, offset: int = 0, limit: int = 10): + """ + Retrieves Customer Payment data with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) # Automatically parse and display JSON + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_ARPM_Single(self, ADocNo: str, ShowResult: bool = True): + """ + Retrieves a single Customer Payment record by document number. + + Args: + ADocNo (str): The document number of the Customer Payment. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + lDocNo = urllib.parse.quote(ADocNo) # To avoid problem when string have space + full_url = f'{self.base_url}/*?docno={lDocNo}' + #full_url = f'{self.base_url}/35' #Find by Dockey + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + return None + + def get_ARPM_PDF(self, ADocNo: str, report_name: str, save_path: str): + """ + Downloads a Customer Payment as a PDF. + + Args: + ADocNo (str): The document number of the Customer Payment. + report_name (str): The template name for the PDF report (e.g., 'Customer Payment 8 (SST 1)'). + save_path (str): The directory where the PDF should be saved. + """ + data = self.get_ARPM_Single(ADocNo, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + full_url = f'{self.base_url}/{dockey}' + + custom_headers = { + 'Content-Type': f'application/pdf;template={report_name}' + } + + print(f"Attempting to download PDF Payment for DocNo: {ADocNo} using template: {report_name}") + print(f"\nRemember to check the '{save_path}' folder for the downloaded PDF.") + + response = self._send_request("GET", full_url, custom_headers=custom_headers) + if response: + try: + output_filename = f"{sRptName}_{ADocNo}.pdf" + full_save_path = os.path.join(save_path, output_filename) + + # Ensure the directory exists + os.makedirs(os.path.dirname(full_save_path), exist_ok=True) + + # Write the content to a file in binary mode + with open(full_save_path, 'wb') as pdf_file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: # Filter out keep-alive chunks + pdf_file.write(chunk) + + print(f"PDF for DocNo '{ADocNo}' with template '{report_name}' successfully downloaded to: {save_path}") + except IOError as e: + print(f"Error saving PDF to file: {e}") + except Exception as e: + print(f"An unexpected error occurred during PDF saving: {e}") + + def create_ARPM(self, file_path: str): + """ + Creates a new Customer Payment from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the Payment data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_ARPM(self, docno: str, file_path: str): + """ + Updates an existing Customer Payment record. + + Args: + docno (str): The document number of the Payment to update. + file_path (str): The path to the JSON file containing the updated Payment data. + """ + # Retrieve necessary fields from the existing record + data = self.get_ARPM_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + updatecount = APICommon.get_field_value(data, "updatecount") + print(f"Retrieved updatecount: {updatecount}") + + if dockey is not None: + APICommon.update_updatecount(file_path, updatecount) + + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to update Payment at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: No record found for DocNo '{docno}' or dockey is missing.") + else: + print(f"Error: Could not retrieve existing Payment data for DocNo '{docno}'. Cannot update.") + + def delete_ARPM1(self, dockey: str): + """ + Deletes a Customer Payment by its dockey (document key). + + Args: + dockey (str): The document key of the Payment to delete. + """ + full_url = f'{self.base_url}/{dockey}' + self._send_request("DELETE", full_url) + + def delete_ARPM(self, docno: str, code: str): + """ + Deletes a Customer Payment by its document number and code. + First retrieves the dockey using docno and code for verification. + + Args: + docno (str): The document number of the Payment to delete. + code (str): The code associated with the Payment. + """ + data = self.get_ARPM_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + cocode = APICommon.get_field_value(data, "code") + + if dockey is not None and str(cocode) == code: # Ensure code matches for the right document + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to delete Payment at: {full_url}") + self._send_request("DELETE", full_url) + else: + print(f"Error: No record found for DocNo '{docno}' with code '{code}' or dockey is missing. Cannot delete.") + else: + print(f"Error: Could not retrieve existing Payment data for DocNo '{docno}'. Cannot delete.") + +if __name__ == "__main__": + ARPM_api = ARPMApiClient(base_url=url) # Initialize with the base URL defined earlier + + # Example: Fetch List data + answer = input("Continue Get Payment List? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Customer Payments (Offset 0, Limit 10) ---") + ARPM_api.get_ARPM_data(offset=0) + + print("\n" + "="*50 + "\n") + + answer = input("Continue Get Payment next list? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Customer Payments (Offset 10, Limit 10) ---") + ARPM_api.get_ARPM_data(offset=10) # Start from Record 11 (i.e. skip 1st 10 records) + + print("\n" + "="*50 + "\n") + + # Example: Get Single DocNo + answer = input("Continue Get Single DocNo? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Getting Single Customer Payment 'OR-00008' ---") + ARPM_api.get_ARPM_Single('OR-00008') + + print("\n" + "="*50 + "\n") + + # Example: Get PDF + answer = input("Continue Downloading PDF? (y/n): ") + if answer.lower() in ["y","yes"]: + desktop_path = os.path.expanduser("~\Desktop") # Cross-platform way to get Desktop path + print(f"\n--- Downloading PDF for 'OR-00008' to {desktop_path} ---") + ARPM_api.get_ARPM_PDF('OR-00008', sRptName, desktop_path) + + print("\n" + "="*50 + "\n") + + # Example: Create Payment + answer = input("Continue Creating New Payment? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Creating Payment from '{json_path_new}.json' ---") + ARPM_api.create_ARPM(f'{json_path_new}.json') # Ensure this path is correct for your setup + + print("\n" + "="*50 + "\n") + print(f"--- Getting Newly Created Payment '{sDocNo}' ---") + ARPM_api.get_ARPM_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Edit Payment + answer = input("Continue Updating Payment? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Updating Payment '{sDocNo}' with '{json_path_edit}.json' ---") + ARPM_api.update_ARPM(sDocNo, f'{json_path_edit}.json') # Ensure paths are correct + + print("\n" + "="*50 + "\n") + print(f"--- Getting Updated Payment '{sDocNo}' ---") + ARPM_api.get_ARPM_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Delete Payment + answer = input("Continue Deleting Payment? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Deleting Payment '{sDocNo}' (code '300-G0002') ---") + ARPM_api.delete_ARPM(sDocNo,'300-G0002') + + print("\n--- End of Script ---") + +``` + +
+ +### Stock Item + +
+ Stock Item - Get List, Add, Update & Delete Function - click to expand + +```python +#Updated 18 Oct 2025 +import os +import requests +import json +import APICommon +from urllib.parse import quote + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the Stock Item API +url = f'https://{host}/stockitem' +json_path_new = '..\\API\\ST_Item-New' # Path to your payload files +json_path_edit = '..\\API\\ST_Item-Edit' +sCode = 'OISHI250' + +class StockItemApiClient(APICommon.BaseApiClient): + """ + Client for the Stock Item API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_stock_items(self, offset: int = 0, limit: int = 10): + """ + Retrieves stock items with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + print(full_url) + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_stock_item_single(self, code: str, ShowResult: bool = True): + """ + Retrieves a single stock item by code. + + Args: + code (str): The code of the stock group item. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + aCode = quote(code, safe='') #Avoid invalid char for URL + full_url = f'{self.base_url}/*?code={aCode}' + print(full_url) + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + + dockey = data["data"][0]["dockey"] + + # Fetch the item by dockey + full_url = f"{self.base_url}/{dockey}" + response = self._send_request("GET", full_url) + if response: + data = response.json() + if ShowResult: + APICommon.auto_parse_json(data) + else: + return data + + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + return None + + def create_stock_item(self, file_path: str): + """ + Creates a new stock item from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the stock item data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_stock_item(self, code: str, file_path: str): + """ + Updates an existing stock item record. + + Args: + code (str): The code of the stock item to update. + file_path (str): The path to the JSON file containing the updated stock item data. + """ + # Retrieve necessary fields from the existing record + data = self.get_stock_item_single(code, ShowResult=False) + if data: + dockey = APICommon.get_field_value(data, "dockey") + cocode = APICommon.get_field_value(data, "code") + + if dockey is not None and str(cocode) == code: # Ensure code matches + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to update stock item at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: Could not find updatecount for stock item '{code}'") + else: + print(f"Error: Could not retrieve stock item data for code '{code}'.") + + def delete_stock_item(self, code: str): + """ + Deletes a stock item by code. + + Args: + code (str): The code associated with the stock item. + """ + data = self.get_stock_item_single(code, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + cocode = APICommon.get_field_value(data, "code") + + if dockey is not None and str(cocode) == code: # Ensure code matches for the right document + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to delete stock item at: {full_url}") + self._send_request("DELETE", full_url) + + else: + print(f"Error: No record found for Code '{code}' or Dockey is missing. Cannot delete.") + else: + print(f"Error: Could not retrieve existing Stock Item data for Code '{code}'. Cannot delete.") + + +if __name__ == "__main__": + stock_api = StockItemApiClient(base_url=url) + + # Example: Fetch stock item list + answer = input("Get Stock Item List? (y/n): ") + if answer.lower() in ["y", "yes"]: + print("--- Fetching Stock Items (Offset 0, Limit 10) ---") + stock_api.get_stock_items(offset=0) + + print("\n" + "=" * 50 + "\n") + + # Example: Fetch next stock item list + answer = input("Continue Get Stock Item next list? (y/n): ") + if answer.lower() in ["y", "yes"]: + print("--- Fetching Stock Items (Offset 50, Limit 10) ---") + stock_api.get_stock_items(offset=50) + + print("\n" + "=" * 50 + "\n") + + # Example: Fetch Single Stock Item + answer = input("Continue Get Single Stock Item? (y/n): ") + if answer.lower() in ["y", "yes"]: + code = input("Enter Stock Item Code: ") + stock_api.get_stock_item_single(code) + + print("\n" + "=" * 50 + "\n") + + # Example: Create Stock Item + answer = input("Continue Creating New Stock Item? (y/n): ") + if answer.lower() in ["y", "yes"]: + print(f"\n--- Creating Stock Item from '{json_path_new}.json' ---") + stock_api.create_stock_item(f'{json_path_new}.json') # Ensure this path is correct for your setup + + print("\n" + "=" * 50 + "\n") + print(f"--- Getting Newly Created Stock Item '{sCode}' ---") + stock_api.get_stock_item_single(sCode) + + print("\n" + "="*50 + "\n") + + # Example: Update Stock Item + answer = input("Continue Updating Stock Item? (y/n): ") + if answer.lower() in ["y", "yes"]: + print(f"\n--- Updating Stock Item '{sCode}' with '{json_path_edit}.json' ---") + stock_api.update_stock_item(sCode, f'{json_path_edit}.json') # Ensure paths is correct + + print("\n" + "=" * 50 + "\n") + print(f"--- Getting Updated Stock Item '{sCode}' ---") + stock_api.get_stock_item_single(sCode) + + print("\n" + "=" * 50 + "\n") + + # Example: Delete Stock Item + answer = input("Continue Deleting Stock Item? (y/n): ") + if answer.lower() in ["y", "yes"]: + code = input("Enter Stock Item Code to delete: ") + print(f"--- Deleting Stock Item '{code}' ---") + stock_api.delete_stock_item(code) + + print("\n--- End of Script ---") + +``` + +
+ +### Maintain Customer + +
+ Maintain Customer - Get List, Add, Update & Delete Function - click to expand + +```python +#Updated 25 Aug 2025 +import os +import requests +import json +import APICommon +import urllib.parse + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the AR Customer API +url = f'https://{host}/customer' +json_path = '..\\API\\' # Path to your payload files + +class ARCustApiClient(APICommon.BaseApiClient): + """ + Client for the AR Customer API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_ar_cust(self, offset: int = 0, limit: int = 10): + """ + Retrieves AR Customers with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_ar_cust_single(self, code: str, ShowResult: bool = True): + """ + Retrieves a single AR Customer by code. + + Args: + code (str): The code of the stock group item. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + + try: + ACode = urllib.parse.quote(code) # To avoid problem when string have space + full_url = f'{self.base_url}/*?code={ACode}' + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + + except Exception as e: + print(f"Error processing response JSON: {e}") + + def create_ar_cust(self, file_path: str): + """ + Creates a new AR Customer from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the AR Customer data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_ar_cust(self, code: str, file_path: str): + """ + Updates an existing AR Customer record. + + Args: + code (str): The code of the AR Customer to update. + file_path (str): The path to the JSON file containing the updated AR Customer data. + """ + # Retrieve necessary fields from the existing record + data = self.get_ar_cust_single(code, False) + if data: + cocode = APICommon.get_field_value(data, "code") + + if str(cocode) == code: # Ensure code matches + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{cocode}' + print(f"Attempting to update AR Customer at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: Could not find updatecount for AR Customer '{code}'") + else: + print(f"Error: Could not retrieve AR Customer data for code '{code}'.") + + def delete_ar_cust(self, code: str): + """ + Deletes a AR Customer by code. + + Args: + code (str): The code associated with the AR Customer. + """ + data = self.get_ar_cust_single(code, ShowResult=False) + + if data: + cocode = APICommon.get_field_value(data, "code") + + if str(cocode) == code: # Ensure code matches + full_url = f'{self.base_url}/{code}' + print(f"Attempting to delete AR Customer at: {full_url}") + self._send_request("DELETE", full_url) + + else: + print(f"Error: No record found for Code '{code}'") + else: + print(f"Error: Could not retrieve existing AR Customer data for Code '{code}'. Cannot delete.") + + +if __name__ == "__main__": + stock_api = ARCustApiClient(base_url=url) + + # Example: Fetch AR Customer list + answer = input("Get AR Customer List? (y/n): ") + if answer.lower() in ["y", "yes"]: + print("--- Fetching AR Customers (Offset 0, Limit 10) ---") + stock_api.get_ar_cust(offset=0) + + print("\n" + "=" * 50 + "\n") + + # Example: Fetch next AR Customer list + answer = input("Continue Get AR Customer next list? (y/n): ") + if answer.lower() in ["y", "yes"]: + print("--- Fetching AR Customers (Offset 50, Limit 10) ---") + stock_api.get_ar_cust(offset=50) + + print("\n" + "=" * 50 + "\n") + + # Example: Fetch Single AR Customer + answer = input("Continue Get Single AR Customer? (y/n): ") + if answer.lower() in ["y", "yes"]: + code = input("Enter AR Customer Code: ") + stock_api.get_ar_cust_single(code) + + print("\n" + "=" * 50 + "\n") + + # Example: Create AR Customer + answer = input("Continue Creating New AR Customer? (y/n): ") + if answer.lower() in ["y", "yes"]: + print(f"\n--- Creating AR Customer from '{json_path}AR_Customer-New.json' ---") + stock_api.create_ar_cust(f'{json_path}AR_Customer-New.json') # Ensure this path is correct for your setup + + print("\n" + "=" * 50 + "\n") + print("--- Getting Newly Created AR Customer '0Test-Cust' ---") + stock_api.get_ar_cust_single('0Test-Cust') + + print("\n" + "="*50 + "\n") + + # Example: Update AR Customer + answer = input("Continue Updating AR Customer? (y/n): ") + if answer.lower() in ["y", "yes"]: + print(f"\n--- Updating AR Customer '0Test-Cust' with '{json_path}AR_Customer-Edit.json' ---") + stock_api.update_ar_cust('0Test-Cust', f'{json_path}AR_Customer-Edit.json') # Ensure paths is correct + + print("\n" + "=" * 50 + "\n") + print("--- Getting Updated AR Customer '0Test-Cust' ---") + stock_api.get_ar_cust_single('0Test-Cust') + + print("\n" + "=" * 50 + "\n") + + # Example: Delete AR Customer + answer = input("Continue Deleting AR Customer? (y/n): ") + if answer.lower() in ["y", "yes"]: + code = input("Enter AR Customer Code to delete: ") + print(f"--- Deleting AR Customer '{code}' ---") + stock_api.delete_ar_cust(code) + + print("\n--- End of Script ---") + +``` + +### Journal Entry + +
+ +
+ Journal Entry - Get List, Add, Update & Delete Function - click to expand + +```python +#Updated 25 Sep 2025 - PDF not ready yet... +import os +import requests +import json +import APICommon + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the Journal Entry API +url = f'https://{host}/journalentry' +json_path = '..\\API\\GL_JE-' +sDocNo = '--JE-Test--' +sRptName = 'GL Journal Voucher - Half (SST)' + +class GLJEApiClient(APICommon.BaseApiClient): + """ + Client for the Journal Entry (GLJE) API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_GLJE_data(self, offset: int = 0, limit: int = 10): + """ + Retrieves Journal Entry data with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) # Automatically parse and display JSON + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_GLJE_Single(self, ADocNo: str, ShowResult: bool = True, AFld: str =''): + """ + Retrieves a single Journal Entry record by document number. + + Args: + ADocNo (str): The document number of the Journal Entry. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + AFld (str): Search field + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + + """ + There got 3 type of GET: + 01. Get Detail => /salesJournal/*? + - Return Result with Detail Records + - only got this fields => code=&docdate=&docno=&postdate=&eiv_utc= + 02. Normal Get => /salesJournal? + - Return Result only Header Records + - eg lastmodified=1757557610 + 03. Get by Dockey /{Dockey} + + https://wiki.sql.com.my/wiki/Restful_API#How_many_ways_for_GET_Method_available%3F + """ + + vFld = AFld + if vFld == '': + vFld = 'DocNo' + vData = ADocNo + + aKey = '?' + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + aKey = '*?' + else: + if vFld.lower() == "dockey": + aKey = '' + + if vFld.lower() == "dockey": + full_url = f'{self.base_url}/{vData}' + else: + full_url = f'{self.base_url}/{aKey}{vFld}={vData}' + print(f"URL = {full_url}") + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + + # Base case for recursion: if we are already searching by dockey, we should not recurse again. + if vFld.lower() == "dockey": + if ShowResult: + APICommon.auto_parse_json(data) + return data + + # Recursive step: if not a dockey search, find the dockey and recurse. + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + else: + # This is the "normal get" which returns a header. We get the dockey from it. + vdockey = APICommon.get_field_value(data, "dockey") + if vdockey: + # Corrected recursive call: + return self.get_GLJE_Single(vdockey, AFld="Dockey") + else: + print("Error: 'dockey' not found in response.") + + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + return None + + def get_GLJE_PDF(self, ADocNo: str, report_name: str, save_path: str): + """ + Downloads a Journal Entry as a PDF. + + Args: + ADocNo (str): The document number of the Journal Entry. + report_name (str): The template name for the PDF report (e.g., 'GL Journal Voucher - Half (SST)'). + save_path (str): The directory where the PDF should be saved. + """ + data = self.get_GLJE_Single(ADocNo, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + full_url = f'{self.base_url}/{dockey}' + + custom_headers = { + 'Content-Type': f'application/pdf;template={report_name}' + } + + print(f"Attempting to download PDF Journal for DocNo: {ADocNo} using template: {report_name}") + print(f"\nRemember to check the '{save_path}' folder for the downloaded PDF.") + + response = self._send_request("GET", full_url, custom_headers=custom_headers) + if response: + try: + output_filename = f"GL_Journal_{ADocNo}.pdf" + full_save_path = os.path.join(save_path, output_filename) + + # Ensure the directory exists + os.makedirs(os.path.dirname(full_save_path), exist_ok=True) + + # Write the content to a file in binary mode + with open(full_save_path, 'wb') as pdf_file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: # Filter out keep-alive chunks + pdf_file.write(chunk) + + print(f"PDF for DocNo '{ADocNo}' with template '{report_name}' successfully downloaded to: {save_path}") + except IOError as e: + print(f"Error saving PDF to file: {e}") + except Exception as e: + print(f"An unexpected error occurred during PDF saving: {e}") + + def create_GLJE(self, file_path: str): + """ + Creates a new Journal Entry from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the Journal data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_GLJE(self, docno: str, file_path: str): + """ + Updates an existing Journal Entry record. + + Args: + docno (str): The document number of the Journal to update. + file_path (str): The path to the JSON file containing the updated Journal data. + """ + # Retrieve necessary fields from the existing record + data = self.get_GLJE_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + updatecount = APICommon.get_field_value(data, "updatecount") + print(f"Retrieved updatecount: {updatecount}") + + if dockey is not None: + APICommon.update_updatecount(file_path, updatecount) + + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to update Journal at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: No record found for DocNo '{docno}' or dockey is missing.") + else: + print(f"Error: Could not retrieve existing Journal data for DocNo '{docno}'. Cannot update.") + + def delete_GLJE1(self, dockey: str): + """ + Deletes a Journal Entry by its dockey (document key). + + Args: + dockey (str): The document key of the Journal to delete. + """ + full_url = f'{self.base_url}/{dockey}' + self._send_request("DELETE", full_url) + + def delete_GLJE(self, docno: str): + """ + Deletes a Journal Entry by its document number and code. + First retrieves the dockey using docno and code for verification. + + Args: + docno (str): The document number of the Journal to delete. + """ + data = self.get_GLJE_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + + if dockey is not None: # Ensure code matches for the right document + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to delete Journal at: {full_url}") + self._send_request("DELETE", full_url) + else: + print(f"Error: No record found for DocNo '{docno}' or dockey is missing. Cannot delete.") + else: + print(f"Error: Could not retrieve existing Journal data for DocNo '{docno}'. Cannot delete.") + +if __name__ == "__main__": + GLJE_api = GLJEApiClient(base_url=url) # Initialize with the base URL defined earlier + + # Example: Fetch List data + answer = input("Continue Get Journal List? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Journal Entrys (Offset 0, Limit 10) ---") + GLJE_api.get_GLJE_data(offset=0) + + print("\n" + "="*50 + "\n") + + answer = input("Continue Get Journal next list? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Journal Entrys (Offset 10, Limit 10) ---") + GLJE_api.get_GLJE_data(offset=10) # Start from Record 11 (i.e. skip 1st 10 records) + + print("\n" + "="*50 + "\n") + + # Example: Get Single DocNo + answer = input("Continue Get Single DocNo? (y/n): ") + if answer.lower() in ["y","yes"]: + vdata = input("Enter Search Value : ") + afld = 'DocNo' + afld = input(f"Enter Search Field : {afld} ") + print(f"--- Getting Single Doc : {vdata} & Search field {afld}---") + GLJE_api.get_GLJE_Single(vdata, AFld=afld) + + print("\n" + "="*50 + "\n") + + # Example: Get PDF +# answer = input("Continue Downloading PDF? (y/n): ") +# if answer.lower() in ["y","yes"]: +# desktop_path = os.path.expanduser("~\Desktop") # Cross-platform way to get Desktop path +# vDocNo = input("Enter Search Value : ") +# print(f"\n--- Downloading PDF for '{vDocNo}' to {desktop_path} ---") +# GLJE_api.get_GLJE_PDF(vDocNo, sRptName, desktop_path) +# +# print("\n" + "="*50 + "\n") + + # Example: Create New Record + answer = input("Continue Creating New Record? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Creating New Record from '{json_path}New.json' ---") + GLJE_api.create_GLJE(f'{json_path}New.json') # Ensure this path is correct for your setup + + print("\n" + "="*50 + "\n") + print(f"--- Getting Newly Created '{sDocNo}' ---") + GLJE_api.get_GLJE_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Edit Record + answer = input("Continue Updating Record? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Updating Record with '{json_path}Edit.json' ---") + GLJE_api.update_GLJE(sDocNo, f'{json_path}Edit.json') # Ensure paths are correct + + print("\n" + "="*50 + "\n") + print(f"--- Getting Updated Journal '{sDocNo}' ---") + GLJE_api.get_GLJE_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Delete Record + answer = input("Continue Deleting? (y/n): ") + if answer.lower() in ["y","yes"]: + vdata = input("Enter Search Value : ") + print(f"--- Delete Record : {vdata}---") + GLJE_api.delete_GLJE(vdata) + + print("\n--- End of Script ---") + +``` + +
+ +### Stock Received + +
+ Stock Received - Get List, Add, Update & Delete Function - click to expand + +```python +#Updated 18 Oct 2025 - PDF not ready yet... +import os +import requests +import json +import APICommon + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the Stock Receive API +url = f'https://{host}/stockadjustment' +json_path_new = '..\\API\\ST_RC-New' +json_path_edit = '..\\API\\ST_RC-Edit' +sDocNo = '--RC-Test--' +sRptName = 'Stock Received - Location' + +class STRCApiClient(APICommon.BaseApiClient): + """ + Client for the Stock Receive (STRC) API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_STRC_data(self, offset: int = 0, limit: int = 10): + """ + Retrieves Stock Receive data with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) # Automatically parse and display JSON + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_STRC_Single(self, ADocNo: str, ShowResult: bool = True, AFld: str =''): + """ + Retrieves a single Stock Receive record by document number. + + Args: + ADocNo (str): The document number of the Stock Receive. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + AFld (str): Search field + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + + """ + There got 3 type of GET: + 01. Get Detail => /salesJournal/*? + - Return Result with Detail Records + - only got this fields => code=&docdate=&docno=&postdate=&eiv_utc= + 02. Normal Get => /salesJournal? + - Return Result only Header Records + - eg lastmodified=1757557610 + 03. Get by Dockey /{Dockey} + + https://wiki.sql.com.my/wiki/Restful_API#How_many_ways_for_GET_Method_available%3F + """ + + vFld = AFld + if vFld == '': + vFld = 'DocNo' + vData = ADocNo + + aKey = '?' + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + aKey = '*?' + else: + if vFld.lower() == "dockey": + aKey = '' + + if vFld.lower() == "dockey": + full_url = f'{self.base_url}/{vData}' + else: + full_url = f'{self.base_url}/{aKey}{vFld}={vData}' + print(f"URL = {full_url}") + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + + # Base case for recursion: if we are already searching by dockey, we should not recurse again. + if vFld.lower() == "dockey": + if ShowResult: + APICommon.auto_parse_json(data) + return data + + # Recursive step: if not a dockey search, find the dockey and recurse. + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + else: + # This is the "normal get" which returns a header. We get the dockey from it. + vdockey = APICommon.get_field_value(data, "dockey") + if vdockey: + # Corrected recursive call: + return self.get_STRC_Single(vdockey, AFld="Dockey") + else: + print("Error: 'dockey' not found in response.") + + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + return None + + def get_STRC_PDF(self, ADocNo: str, report_name: str, save_path: str): + """ + Downloads a Stock Receive as a PDF. + + Args: + ADocNo (str): The document number of the Stock Receive. + report_name (str): The template name for the PDF report (e.g., 'GL Journal Voucher - Half (SST)'). + save_path (str): The directory where the PDF should be saved. + """ + data = self.get_STRC_Single(ADocNo, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + full_url = f'{self.base_url}/{dockey}' + + custom_headers = { + 'Content-Type': f'application/pdf;template={report_name}' + } + + print(f"Attempting to download PDF Journal for DocNo: {ADocNo} using template: {report_name}") + print(f"\nRemember to check the '{save_path}' folder for the downloaded PDF.") + + response = self._send_request("GET", full_url, custom_headers=custom_headers) + if response: + try: + output_filename = f"GL_Journal_{ADocNo}.pdf" + full_save_path = os.path.join(save_path, output_filename) + + # Ensure the directory exists + os.makedirs(os.path.dirname(full_save_path), exist_ok=True) + + # Write the content to a file in binary mode + with open(full_save_path, 'wb') as pdf_file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: # Filter out keep-alive chunks + pdf_file.write(chunk) + + print(f"PDF for DocNo '{ADocNo}' with template '{report_name}' successfully downloaded to: {save_path}") + except IOError as e: + print(f"Error saving PDF to file: {e}") + except Exception as e: + print(f"An unexpected error occurred during PDF saving: {e}") + + def create_STRC(self, file_path: str): + """ + Creates a new Stock Receive from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the Journal data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_STRC(self, docno: str, file_path: str): + """ + Updates an existing Stock Receive record. + + Args: + docno (str): The document number of the Journal to update. + file_path (str): The path to the JSON file containing the updated Journal data. + """ + # Retrieve necessary fields from the existing record + data = self.get_STRC_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + updatecount = APICommon.get_field_value(data, "updatecount") + print(f"Retrieved updatecount: {updatecount}") + + if dockey is not None: + APICommon.update_updatecount(file_path, updatecount) + + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to update Journal at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: No record found for DocNo '{docno}' or dockey is missing.") + else: + print(f"Error: Could not retrieve existing Journal data for DocNo '{docno}'. Cannot update.") + + def delete_STRC1(self, dockey: str): + """ + Deletes a Stock Receive by its dockey (document key). + + Args: + dockey (str): The document key of the Journal to delete. + """ + full_url = f'{self.base_url}/{dockey}' + self._send_request("DELETE", full_url) + + def delete_STRC(self, docno: str): + """ + Deletes a Stock Receive by its document number and code. + First retrieves the dockey using docno and code for verification. + + Args: + docno (str): The document number of the Journal to delete. + """ + data = self.get_STRC_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + + if dockey is not None: # Ensure code matches for the right document + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to delete Journal at: {full_url}") + self._send_request("DELETE", full_url) + else: + print(f"Error: No record found for DocNo '{docno}' or dockey is missing. Cannot delete.") + else: + print(f"Error: Could not retrieve existing Journal data for DocNo '{docno}'. Cannot delete.") + +if __name__ == "__main__": + STRC_api = STRCApiClient(base_url=url) # Initialize with the base URL defined earlier + + # Example: Fetch List data + answer = input("Continue Get List? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Stock Received (Offset 0, Limit 10) ---") + STRC_api.get_STRC_data(offset=0) + + print("\n" + "="*50 + "\n") + + answer = input("Continue Get next list? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Stock Received (Offset 10, Limit 10) ---") + STRC_api.get_STRC_data(offset=10) # Start from Record 11 (i.e. skip 1st 10 records) + + print("\n" + "="*50 + "\n") + + # Example: Get Single DocNo + answer = input("Continue Get Single DocNo? (y/n): ") + if answer.lower() in ["y","yes"]: + vdata = input("Enter Search Value : ") + afld = 'DocNo' + afld = input(f"Enter Search Field : {afld} ") + print(f"--- Getting Single Doc : {vdata} & Search field {afld}---") + STRC_api.get_STRC_Single(vdata, AFld=afld) + + print("\n" + "="*50 + "\n") + + # Example: Get PDF +# answer = input("Continue Downloading PDF? (y/n): ") +# if answer.lower() in ["y","yes"]: +# desktop_path = os.path.expanduser("~\Desktop") # Cross-platform way to get Desktop path +# vDocNo = input("Enter Search Value : ") +# print(f"\n--- Downloading PDF for '{vDocNo}' to {desktop_path} ---") +# STRC_api.get_STRC_PDF(vDocNo, sRptName, desktop_path) +# +# print("\n" + "="*50 + "\n") + + # Example: Create New Record + answer = input("Continue Creating New Record? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Creating Journal from '{json_path_new}.json' ---") + STRC_api.create_STRC(f'{json_path_new}.json') # Ensure this path is correct for your setup + + print("\n" + "="*50 + "\n") + print(f"--- Getting Newly Created Record '{sDocNo}' ---") + STRC_api.get_STRC_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Edit Record + answer = input("Continue Updating Record? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Updating Record with '{json_path_edit}.json' ---") + STRC_api.update_STRC(sDocNo, f'{json_path_edit}.json') # Ensure paths are correct + + print("\n" + "="*50 + "\n") + print(f"--- Getting Updated Record '{sDocNo}' ---") + STRC_api.get_STRC_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Delete Record + answer = input("Continue Deleting? (y/n): ") + if answer.lower() in ["y","yes"]: + vdata = input("Enter Search Value : ") + print(f"--- Delete Record : {vdata}---") + STRC_api.delete_STRC(vdata) + + print("\n--- End of Script ---") + +``` + +
+ +### GL Payment Voucher + +
+ GL Payment Voucher - Get List, Add, Update & Delete Function - click to expand + +```python +#Updated 25 Sep 2025 - PDF not ready yet... +import os +import requests +import json +import APICommon + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the GL Payment Voucher API +url = f'https://{host}/paymentvoucher' +json_path = '..\\API\\GL_PV-' +sDocNo = '--PV-Test--' +sRptName = 'GL Payment Voucher - Detail - Half (SST)' + +class GLPVApiClient(APICommon.BaseApiClient): + """ + Client for the GL Payment Voucher (GLPV) API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_GLPV_data(self, offset: int = 0, limit: int = 10): + """ + Retrieves GL Payment Voucher data with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) # Automatically parse and display JSON + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_GLPV_Single(self, ADocNo: str, ShowResult: bool = True, AFld: str =''): + """ + Retrieves a single GL Payment Voucher record by document number. + + Args: + ADocNo (str): The document number of the GL Payment Voucher. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + AFld (str): Search field + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + + """ + There got 3 type of GET: + 01. Get Detail => /salesJournal/*? + - Return Result with Detail Records + - only got this fields => code=&docdate=&docno=&postdate=&eiv_utc= + 02. Normal Get => /salesJournal? + - Return Result only Header Records + - eg lastmodified=1757557610 + 03. Get by Dockey /{Dockey} + + https://wiki.sql.com.my/wiki/Restful_API#How_many_ways_for_GET_Method_available%3F + """ + + vFld = AFld + if vFld == '': + vFld = 'DocNo' + vData = ADocNo + + aKey = '?' + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + aKey = '*?' + else: + if vFld.lower() == "dockey": + aKey = '' + + if vFld.lower() == "dockey": + full_url = f'{self.base_url}/{vData}' + else: + full_url = f'{self.base_url}/{aKey}{vFld}={vData}' + print(f"URL = {full_url}") + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + + # Base case for recursion: if we are already searching by dockey, we should not recurse again. + if vFld.lower() == "dockey": + if ShowResult: + APICommon.auto_parse_json(data) + return data + + # Recursive step: if not a dockey search, find the dockey and recurse. + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + else: + # This is the "normal get" which returns a header. We get the dockey from it. + vdockey = APICommon.get_field_value(data, "dockey") + if vdockey: + # Corrected recursive call: + return self.get_GLPV_Single(vdockey, AFld="Dockey") + else: + print("Error: 'dockey' not found in response.") + + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + return None + + def get_GLPV_PDF(self, ADocNo: str, report_name: str, save_path: str): + """ + Downloads a GL Payment Voucher as a PDF. + + Args: + ADocNo (str): The document number of the GL Payment Voucher. + report_name (str): The template name for the PDF report (e.g., 'GL Journal Voucher - Half (SST)'). + save_path (str): The directory where the PDF should be saved. + """ + data = self.get_GLPV_Single(ADocNo, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + full_url = f'{self.base_url}/{dockey}' + + custom_headers = { + 'Content-Type': f'application/pdf;template={report_name}' + } + + print(f"Attempting to download PDF Journal for DocNo: {ADocNo} using template: {report_name}") + print(f"\nRemember to check the '{save_path}' folder for the downloaded PDF.") + + response = self._send_request("GET", full_url, custom_headers=custom_headers) + if response: + try: + output_filename = f"GL_Journal_{ADocNo}.pdf" + full_save_path = os.path.join(save_path, output_filename) + + # Ensure the directory exists + os.makedirs(os.path.dirname(full_save_path), exist_ok=True) + + # Write the content to a file in binary mode + with open(full_save_path, 'wb') as pdf_file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: # Filter out keep-alive chunks + pdf_file.write(chunk) + + print(f"PDF for DocNo '{ADocNo}' with template '{report_name}' successfully downloaded to: {save_path}") + except IOError as e: + print(f"Error saving PDF to file: {e}") + except Exception as e: + print(f"An unexpected error occurred during PDF saving: {e}") + + def create_GLPV(self, file_path: str): + """ + Creates a new GL Payment Voucher from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the Journal data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_GLPV(self, docno: str, file_path: str): + """ + Updates an existing GL Payment Voucher record. + + Args: + docno (str): The document number of the Journal to update. + file_path (str): The path to the JSON file containing the updated Journal data. + """ + # Retrieve necessary fields from the existing record + data = self.get_GLPV_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + updatecount = APICommon.get_field_value(data, "updatecount") + print(f"Retrieved updatecount: {updatecount}") + + if dockey is not None: + APICommon.update_updatecount(file_path, updatecount) + + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to update Journal at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: No record found for DocNo '{docno}' or dockey is missing.") + else: + print(f"Error: Could not retrieve existing Journal data for DocNo '{docno}'. Cannot update.") + + def delete_GLPV1(self, dockey: str): + """ + Deletes a GL Payment Voucher by its dockey (document key). + + Args: + dockey (str): The document key of the Journal to delete. + """ + full_url = f'{self.base_url}/{dockey}' + self._send_request("DELETE", full_url) + + def delete_GLPV(self, docno: str): + """ + Deletes a GL Payment Voucher by its document number and code. + First retrieves the dockey using docno and code for verification. + + Args: + docno (str): The document number of the Journal to delete. + """ + data = self.get_GLPV_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + + if dockey is not None: # Ensure code matches for the right document + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to delete Journal at: {full_url}") + self._send_request("DELETE", full_url) + else: + print(f"Error: No record found for DocNo '{docno}' or dockey is missing. Cannot delete.") + else: + print(f"Error: Could not retrieve existing Journal data for DocNo '{docno}'. Cannot delete.") + +if __name__ == "__main__": + GLPV_api = GLPVApiClient(base_url=url) # Initialize with the base URL defined earlier + + # Example: Fetch List data + answer = input("Continue Get List? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching GL Payment Voucher (Offset 0, Limit 10) ---") + GLPV_api.get_GLPV_data(offset=0) + + print("\n" + "="*50 + "\n") + + answer = input("Continue Get next list? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching GL Payment Voucher (Offset 10, Limit 10) ---") + GLPV_api.get_GLPV_data(offset=10) # Start from Record 11 (i.e. skip 1st 10 records) + + print("\n" + "="*50 + "\n") + + # Example: Get Single DocNo + answer = input("Continue Get Single DocNo? (y/n): ") + if answer.lower() in ["y","yes"]: + vdata = input("Enter Search Value : ") + afld = 'DocNo' + afld = input(f"Enter Search Field : {afld} ") + print(f"--- Getting Single Doc : {vdata} & Search field {afld}---") + GLPV_api.get_GLPV_Single(vdata, AFld=afld) + + print("\n" + "="*50 + "\n") + + # Example: Get PDF +# answer = input("Continue Downloading PDF? (y/n): ") +# if answer.lower() in ["y","yes"]: +# desktop_path = os.path.expanduser("~\Desktop") # Cross-platform way to get Desktop path +# vDocNo = input("Enter Search Value : ") +# print(f"\n--- Downloading PDF for '{vDocNo}' to {desktop_path} ---") +# GLPV_api.get_GLPV_PDF(vDocNo, sRptName, desktop_path) +# +# print("\n" + "="*50 + "\n") + + # Example: Create New Record + answer = input("Continue Creating New Record? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Creating New Record from '{json_path}New.json' ---") + GLPV_api.create_GLPV(f'{json_path}New.json') # Ensure this path is correct for your setup + + print("\n" + "="*50 + "\n") + print(f"--- Getting Newly Created Record '{sDocNo}' ---") + GLPV_api.get_GLPV_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Edit Record + answer = input("Continue Updating Record? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Updating Record with '{json_path}Edit.json' ---") + GLPV_api.update_GLPV(sDocNo, f'{json_path}Edit.json') # Ensure paths are correct + + print("\n" + "="*50 + "\n") + print(f"--- Getting Updated Record '{sDocNo}' ---") + GLPV_api.get_GLPV_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Delete Record + answer = input("Continue Deleting? (y/n): ") + if answer.lower() in ["y","yes"]: + vdata = input("Enter Search Value : ") + print(f"--- Delete Record : {vdata}---") + GLPV_api.delete_GLPV(vdata) + + print("\n--- End of Script ---") + +``` + +
+ +### Stock Transfer + +
+ Stock Transfer - Get List, Add, Update & Delete Function - click to expand + +```python +#Updated 16 Oct 2025 - PDF not ready yet... +import os +import requests +import json +import APICommon + +# Centralized API configuration from APICommon.py +session_token = os.environ.get('AWS_SESSION_TOKEN') +access_key = APICommon.access_key +secret_key = APICommon.secret_key +service = APICommon.service +host = APICommon.host +region = APICommon.region + +# Base URL for the Stock Transfer API +url = f'https://{host}/stocktransfer' +sDocNo = '--XF-Test--' +json_path = '..\\API\\ST_XF-' +sRptName = 'Stock Transfer' + +class STXFApiClient(APICommon.BaseApiClient): + """ + Client for the Stock Transfer (STXF) API, inheriting common functionality from BaseApiClient. + """ + def __init__(self, base_url: str): + super().__init__( + service=service, + host=host, + region=region, + access_key=access_key, + secret_key=secret_key, + session_token=session_token + ) + self.base_url = base_url + + def get_STXF_data(self, offset: int = 0, limit: int = 10): + """ + Retrieves Stock Transfer data with pagination. + + Args: + offset (int): The number of records to skip. Defaults to 0. + limit (int): The maximum number of records to shown. Defaults to 10. + """ + query_params = f'offset={offset}' + full_url = f'{self.base_url}?{query_params}' + + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + APICommon.auto_parse_json(data, limit=limit) # Automatically parse and display JSON + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + + def get_STXF_Single(self, ADocNo: str, ShowResult: bool = True, AFld: str =''): + """ + Retrieves a single Stock Transfer record by document number. + + Args: + ADocNo (str): The document number of the Stock Transfer. + ShowResult (bool): If True, automatically parses and prints the result. + If False, returns the JSON response. Defaults to True. + AFld (str): Search field + + Returns: + dict or None: The parsed JSON data if ShowResult is False and successful, None otherwise. + """ + + """ + There got 3 type of GET: + 01. Get Detail => /salesinvoice/*? + - Return Result with Detail Records + - only got this fields => code=&docdate=&docno=&postdate=&eiv_utc= + 02. Normal Get => /salesinvoice? + - Return Result only Header Records + - eg lastmodified=1757557610 + 03. Get by Dockey /{Dockey} + + https://wiki.sql.com.my/wiki/Restful_API#How_many_ways_for_GET_Method_available%3F + """ + + vFld = AFld + if vFld == '': + vFld = 'DocNo' + vData = ADocNo + + aKey = '?' + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + aKey = '*?' + else: + if vFld.lower() == "dockey": + aKey = '' + + if vFld.lower() == "dockey": + full_url = f'{self.base_url}/{vData}' + else: + full_url = f'{self.base_url}/{aKey}{vFld}={vData}' + print(f"URL = {full_url}") + response = self._send_request("GET", full_url) + if response: + try: + data = response.json() + + # Base case for recursion: if we are already searching by dockey, we should not recurse again. + if vFld.lower() == "dockey": + if ShowResult: + APICommon.auto_parse_json(data) + return data + + # Recursive step: if not a dockey search, find the dockey and recurse. + if vFld.lower() in ["code", "docdate", "docno", "postdate", "eiv_utc"]: + if ShowResult: + APICommon.auto_parse_json(data) # Automatically parse and display JSON + else: + return data + else: + # This is the "normal get" which returns a header. We get the dockey from it. + vdockey = APICommon.get_field_value(data, "dockey") + if vdockey: + # Corrected recursive call: + return self.get_STXF_Single(vdockey, AFld="Dockey") + else: + print("Error: 'dockey' not found in response.") + + except json.JSONDecodeError: + print("Error: Could not decode JSON from response.") + except Exception as e: + print(f"Error processing response JSON: {e}") + return None + + def get_STXF_PDF(self, ADocNo: str, report_name: str, save_path: str): + """ + Downloads a Stock Transfer as a PDF. + + Args: + ADocNo (str): The document number of the Stock Transfer. + report_name (str): The template name for the PDF report (e.g., 'Stock Transfer 8 (SST 1)'). + save_path (str): The directory where the PDF should be saved. + """ + data = self.get_STXF_Single(ADocNo, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + full_url = f'{self.base_url}/{dockey}' + print(f"URL = {full_url}") + + custom_headers = { + 'Content-Type': f'application/pdf;template={report_name}' + } + + print(f"Attempting to download PDF Document for DocNo: {ADocNo} using template: {report_name}") + print(f"\nRemember to check the '{save_path}' folder for the downloaded PDF.") + + response = self._send_request("GET", full_url, custom_headers=custom_headers) + if response: + try: + output_filename = f"{report_name}_{ADocNo}.pdf" + full_save_path = os.path.join(save_path, output_filename) + + # Ensure the directory exists + os.makedirs(os.path.dirname(full_save_path), exist_ok=True) + + # Write the content to a file in binary mode + with open(full_save_path, 'wb') as pdf_file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: # Filter out keep-alive chunks + pdf_file.write(chunk) + + print(f"PDF for DocNo '{ADocNo}' with template '{report_name}' successfully downloaded to: {save_path}") + except IOError as e: + print(f"Error saving PDF to file: {e}") + except Exception as e: + print(f"An unexpected error occurred during PDF saving: {e}") + + def create_STXF(self, file_path: str): + """ + Creates a new Stock Transfer from a JSON payload file. + + Args: + file_path (str): The path to the JSON file containing the Document data. + """ + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + self._send_request("POST", self.base_url, payload=payload_str) + + def update_STXF(self, docno: str, code: str, file_path: str): + """ + Updates an existing Stock Transfer record. + + Args: + docno (str): The document number to update. + code (str): The code associated with the document. + file_path (str): The path to the JSON file containing the updated data. + """ + # Retrieve necessary fields from the existing record + data = self.get_STXF_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + updatecount = APICommon.get_field_value(data, "updatecount") + print(f"Retrieved updatecount: {updatecount}") + + if dockey is not None: + APICommon.update_updatecount(file_path, updatecount) + + payload_str = APICommon.get_payload_data(file_path) + if payload_str: + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to update data at: {full_url}") + self._send_request("PUT", full_url, payload=payload_str) + else: + print(f"Error: No record found for DocNo '{docno}' or dockey is missing.") + else: + print(f"Error: Could not retrieve existing data for DocNo '{docno}'. Cannot update.") + + def delete_STXF1(self, dockey: str): + """ + Deletes a Stock Transfer by its dockey (document key). + + Args: + dockey (str): The document key of the document to delete. + """ + full_url = f'{self.base_url}/{dockey}' + self._send_request("DELETE", full_url) + + def delete_STXF(self, docno: str): + """ + Deletes a Stock Transfer by its document number and code. + First retrieves the dockey using docno and code for verification. + + Args: + docno (str): The document number to delete. + code (str): The code associated with the document. + """ + data = self.get_STXF_Single(docno, ShowResult=False) + + if data: + dockey = APICommon.get_field_value(data, "dockey") + + if dockey is not None: # Ensure code matches for the right document + full_url = f'{self.base_url}/{dockey}' + print(f"Attempting to delete document at: {full_url}") + self._send_request("DELETE", full_url) + else: + print(f"Error: No record found for DocNo '{docno}' or dockey is missing. Cannot delete.") + else: + print(f"Error: Could not retrieve existing document data for DocNo '{docno}'. Cannot delete.") + +if __name__ == "__main__": + STXF_api = STXFApiClient(base_url=url) # Initialize with the base URL defined earlier + + # Example: Fetch List data + answer = input("Continue Get Document List? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Stock Transfers (Offset 0, Limit 10) ---") + STXF_api.get_STXF_data(offset=0) + + print("\n" + "="*50 + "\n") + + answer = input("Continue Get Document next list? (y/n): ") + if answer.lower() in ["y","yes"]: + print("--- Fetching Stock Transfers (Offset 10, Limit 10) ---") + STXF_api.get_STXF_data(offset=10) # Start from Record 11 (i.e. skip 1st 10 records) + + print("\n" + "="*50 + "\n") + + # Example: Get Single DocNo + answer = input("Continue Get Single DocNo? (y/n): ") + if answer.lower() in ["y","yes"]: + vdata = input("Enter Search Value : ") + afld = 'DocNo' + afld = input(f"Enter Search Field : {afld} ") + print(f"--- Getting Single Doc : {vdata} & Search field {afld}---") + STXF_api.get_STXF_Single(vdata, AFld=afld) + + print("\n" + "="*50 + "\n") + + # Example: Get PDF +# answer = input("Continue Downloading PDF? (y/n): ") +# if answer.lower() in ["y","yes"]: +# desktop_path = os.path.expanduser("~\Desktop") # Cross-platform way to get Desktop path +# vDocNo = input("Enter Search Value : ") +# print(f"\n--- Downloading PDF for '{vDocNo}' to {desktop_path} ---") +# STXF_api.get_STXF_PDF(vDocNo, 'Stock Transfer 8 (SST 1)', desktop_path) +# +# print("\n" + "="*50 + "\n") + + # Example: Create Document + answer = input("Continue Creating New Dcoument? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Creating Document from '{json_path}New.json' ---") + STXF_api.create_STXF(f'{json_path}New.json') # Ensure this path is correct for your setup + + print("\n" + "="*50 + "\n") + print(f"--- Getting Newly Created Document '{sDocNo}' ---") + STXF_api.get_STXF_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Edit Document + answer = input("Continue Updating Document? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Updating Document '{sDocNo}' with '{json_path}Edit.json' ---") + STXF_api.update_STXF(sDocNo,'300-G0002', f'{json_path}Edit.json') # Ensure paths are correct + + print("\n" + "="*50 + "\n") + print(f"--- Getting Updated Document '{sDocNo}' ---") + STXF_api.get_STXF_Single(sDocNo) + + print("\n" + "="*50 + "\n") + + # Example: Delete Document + answer = input("Continue Deleting Document? (y/n): ") + if answer.lower() in ["y","yes"]: + print(f"\n--- Deleting Document '{sDocNo}' (code '') ---") + STXF_api.delete_STXF(sDocNo) + + print("\n--- End of Script ---") + +``` + +
+ +### Node JS + +Module Require in Node JS + +- express -> npm install express +- axios -> npm install axios +- dotenv -> npm install dotenv +- aws -> npm install aws4 + +### Node JS Common + +
+ APICommon.js file for example code - click to expand + +```js +//Updated on 22 Aug 2025 +import axios from "axios"; +import crypto from "crypto"; + +const accessKey = "The Access Key"; +const secretKey = "The Secret Key"; +const service = "execute-api"; +const host = "api.sql.my"; +const region = "ap-southeast-1"; + +/** + * HMAC helper + */ +function sign(key, msg) { + return crypto.createHmac("sha256", key).update(msg).digest(); +} + +/** + * Create AWS SigV4 signed headers + */ +function signRequest(method, urlObj, body = "") { + const now = new Date(); + const amzDate = now.toISOString().replace(/[:-]|\.\d{3}/g, ""); // e.g. 20250818T030159Z + const dateStamp = amzDate.substring(0, 8); + + // Canonical URI adjustment + let canonicalUri = urlObj.pathname; + if (canonicalUri.endsWith("/*")) { + canonicalUri = canonicalUri.replace("/*", "/"); // Sign as /salesinvoice/ + } + + // Canonical query string (AWS requires sorted by key) + let canonicalQuerystring = ""; + if (urlObj.search) { + const params = urlObj.search.substring(1).split("&"); + const kvPairs = params.map(p => p.split("=")); + const sorted = kvPairs.sort(([a], [b]) => a.localeCompare(b)); + canonicalQuerystring = sorted + .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v || "")}`) + .join("&"); + } + + const canonicalHeaders = `host:${host}\n` + `x-amz-date:${amzDate}\n`; + const signedHeaders = "host;x-amz-date"; + const payloadHash = crypto.createHash("sha256").update(body).digest("hex"); + + const canonicalRequest = [ + method, + canonicalUri, + canonicalQuerystring, + canonicalHeaders, + signedHeaders, + payloadHash, + ].join("\n"); + + const algorithm = "AWS4-HMAC-SHA256"; + const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`; + const stringToSign = [ + algorithm, + amzDate, + credentialScope, + crypto.createHash("sha256").update(canonicalRequest).digest("hex"), + ].join("\n"); + + // Derive signing key + const kDate = sign("AWS4" + secretKey, dateStamp); + const kRegion = sign(kDate, region); + const kService = sign(kRegion, service); + const kSigning = sign(kService, "aws4_request"); + const signature = crypto + .createHmac("sha256", kSigning) + .update(stringToSign) + .digest("hex"); + + const authorizationHeader = `${algorithm} Credential=${accessKey}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`; + + // Debug output for checking purpose + //console.log("\n=== DEBUG SigV4 ==="); + //console.log("CanonicalRequest:\n", canonicalRequest); + //console.log("StringToSign:\n", stringToSign); + + + // Create line + let symbolString = ''; + for (let i = 0; i < 50; i++) { + symbolString += '='; + } + + console.log(symbolString, '\n'); + + return { + "x-amz-date": amzDate, + "x-amz-content-sha256": payloadHash, + Authorization: authorizationHeader, + "Content-Type": "application/json", + }; +} + +/** + * Base client to send signed requests + */ +export async function sendRequest(method, path, body = null, query = "", opts = {}) { + try { + // Build request URL + const requestUrl = `https://${host}${path}${query ? "?" + query : ""}`; + const urlObj = new URL(requestUrl); + + // For signing, strip the trailing "/*" + let canonicalPath = urlObj.pathname; + if (canonicalPath.endsWith("/*")) { + canonicalPath = canonicalPath.slice(0, -2) + "/"; // sign as /salesinvoice/ + } + urlObj.pathname = canonicalPath; + + // Prepare request body + const bodyString = body ? JSON.stringify(body) : ""; + const headers = signRequest(method, urlObj, bodyString); + + if (opts.headers) { + Object.assign(headers, opts.headers); + } + + // Perform request + const response = await axios({ + method, + url: requestUrl, // still send request to original URL + headers, + data: body || undefined, + responseType: opts.responseType || "json", // "json" or "arraybuffer" + }); + + return opts.raw ? response.data : response.data; + } catch (err) { + if (err.response) { + console.error("Error Response:", err.response.status, err.response.data); + } else { + console.error("Error:", err.message); + } + throw err; + } +} + +``` + +
+ +### Node JS Agent + +
+ Agent - Get List, Add, Update & Delete Function - click to expand + +```js +//Updated on 01 Oct 2025 +import { sendRequest } from "./api/APICommon.js"; // base client +import readline from "readline"; +import fs from "fs"; + +/** + * Pretty-print JSON responses for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} agents:`); + data.items.forEach((item, idx) => { + console.log(`[${idx + 1}] code= ${item.code}, name= ${item.description}`); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log(`[${idx + 1}] code= ${item.code}, name= ${item.description}`); + }); + } else if (typeof data === "object") { + console.log("Single agent record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class AgentApi { + constructor() { + this.basePath = "/agent"; // base path + } + + /** + * Get agent list with pagination (default: offset=0, limit=5) + */ + async get_list(offset = 0, limit = 5) { + const path = this.basePath; + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching agent list ---"); + try { + const data = await sendRequest("GET", path, null, query); + + // Force limit client-side if API ignore + if(data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } catch (err){ + console.error("Failed to fetch agent list:", err.response?.data || err.message); + throw err; + } + } + + /** + * Get a single agent by code + */ + async get_single(code) { + const path = this.basePath; + const query = `code=${encodeURIComponent(code)}`; + console.log(`\n--- Fetching single agent '${code}' ---`); + try { + const data = await sendRequest("GET", path, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to fetch agent '${code}':`, err.response?.data || err.message); + throw err; + } + } + + /** + * Create a new agent + */ + async create(payload) { + console.log("\n--- Creating new agent ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + return data; + } catch (err) { + console.error("Failed to create agent:", err.response?.data || err.message); + throw err; + } + } + + /** + * Edit an existing agent + */ + async update(code, payload) { + const path = `${this.basePath}/${encodeURIComponent(code)}`; + console.log(`\n--- Updating agent '${code}' ---`); + try { + const data = await sendRequest("PUT", path, payload); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to update agent '${code}':`, err.response?.data || err.message); + throw err; + } + } + + /** + * Delete an existing agent by code + */ + async delete(code) { + const path = `${this.basePath}/${encodeURIComponent(code)}`; + console.log(`\n--- Deleting agent '${code}' ---`); + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to delete agent '${code}':`, err.response?.data || err.message); + throw err; + } + } +} + +const agentApi = new AgentApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, if same path as node.js, leave it blank + +// Readline interface +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * Helper to ask question and return Promise + */ +function ask(q) { + return new Promise(resolve => rl.question(q, resolve)); +} +async function confirm(msg) { + const ans = (await ask(`${msg} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + return JSON.parse(fs.readFileSync(filename, "utf8")); + } catch { + return null; + } +} + +async function Agent() { + try { + // Example: Get agent list + console.log("\n================= Agent List ================="); + if (await confirm("Fetch agent list?")) { + const list = await agentApi.get_list(0, 5); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Get single agent + console.log("\n================= Single Agent ================="); + if (await confirm("Fetch a single agent?")) { + const code = await ask("Enter agent code: "); + const list = await agentApi.get_single(code.trim()); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Create new agent + console.log("\n================= Create Agent ================="); + if (await confirm("Create new agent?")) { + const payload = loadJson(JSON_FOLDER + "Agent-New.json"); // Make sure file name is correct + if (payload) { + await agentApi.create(payload); + } else { + console.log("Skipped create agent (no valid JSON)") + } + } + + // Example: Edit existing agent + console.log("\n================= Edit Agent ================="); + if (await confirm("Update an agent?")) { + const payload = loadJson(JSON_FOLDER + "Agent-Edit.json"); // Make sure file name is correct + if (payload && payload.code) { + await agentApi.update(payload.code, payload); + } + } + + // Example: Delete existing agent + console.log("\n================= Delete Agent ================="); + if (await confirm("Do you want to Delete an agent?")) { + const code = await ask("Enter agent code to delete: "); + await agentApi.delete(code.trim()); + } + } catch (err) { + console.error("Error:", err.message); + } finally { + console.log("--- End of the Script ---"); + rl.close(); + } +} + +Agent(); + +``` +
+ +### Node JS Sales Invoice + +
+ Sales Invoice - Get List, PDF, Add, Update & Delete Function - click to expand + +```js +//Updated on 01 Oct 2025 +import { sendRequest } from "./api/APICommon.js"; // base client +import fs from "fs"; +import readline from "readline"; + +/** + * Pretty-print JSON responses for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} records:`); + data.items.forEach((item, idx) => { + console.log( + `[${idx + 1}] docno= ${item.docno}, dockey= ${item.dockey}, amount= ${item.docamt}` + ); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log( + `[${idx + 1}] docno= ${item.docno}, dockey= ${item.dockey}, amount= ${item.docamt}` + ); + }); + } else if (typeof data === "object") { + console.log("Single record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class SalesInvoiceApi { + constructor() { + this.basePath = "/salesinvoice"; // base path + } + + /** + * Get sales invoice list with pagination (default: offset=0, limit=5) + */ + async get_list(offset = 0, limit = 5) { + const path = this.basePath; + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching sales invoice list (offset = 0, limit = 5) ---"); + const data = await sendRequest("GET", path, null, query); + + // Force limit client-side if API ignore + if(data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } + + /** + * Get a single sales invoice by docno + */ + async get_single(docno) { + const path = this.basePath; + const query = `docno=${encodeURIComponent(docno)}`; + console.log(`\n--- Fetching single sales invoice '${docno}' ---`); + + try { + const data = await sendRequest("GET", path, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to fetch invoice '${docno}':`, err.message); + throw err; + } + } + + /** + * Print a sales invoice as PDF + * + * Args: + * docno: document number of the sales invoice + * reportName: name of the report want to be print (E.g. Sales Invoice 8 (SST 1)) + * savePath: output folder (E.g. ./PDF) + */ + async print(docno, reportName = "Sales Invoice 8 (SST 1)", savePath = "./PDF") { + console.log(`\n--- Printing sales invoice '${docno}' to PDF ---`); + + // Step 1: Find dockey for the given docno + const existing = await this.get_single(docno); + if(!existing || !Array.isArray(existing.data) || existing.data.length === 0) { + throw new Error(`Invoice '${docno}' not found`); + } + + const record = existing.data[0]; + const dockey = record.dockey; + const path = `${this.basePath}/${dockey}`; + + const pdfData = await sendRequest("GET", path, null, "", { + headers: { "Content-Type": `application/pdf;template=${reportName}`}, + responseType: "arraybuffer", + raw: true, + }); + + const fs = await import("fs"); + const fullSavePath = `${savePath}/Sales_Invoice_${docno}.pdf`; + fs.mkdirSync(savePath, { recursive: true }); + fs.writeFileSync(fullSavePath, pdfData); + console.log(`PDF saved: ${fullSavePath}`); + } + + /** + * Create a new sales invoice + */ + async create(payload) { + console.log("\n--- Creating sales invoice ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + return data; + } catch (err) { + console.error("Failed to create invoice:", err.message); + throw err; + } + } + + /** + * Edit an existing sales invoice + */ + async update(dockey, payload) { + console.log(`\n--- Editing sales invoice dockey: ${dockey} ---`); + + try { + // Step 1: Fetch existing record to get updatecount + const query = `dockey=${encodeURIComponent(dockey)}`; + const existing = await sendRequest("GET", this.basePath, null, query); + + console.log("Existing record:", JSON.stringify(existing, null, 2)); + + const record = + (existing.data && existing.data[0]) || + (existing.items && existing.items[0]) || + existing; + + if (!record || typeof record.updatecount === "undefined") { + throw new Error("Updatecount missing. Try fetching via list API with dockey filter."); + } + + // Step 2: Merge updatecount into payload + const finalPayload = { + ...payload, + updatecount: record.updatecount, + }; + + // Step 3: Send PUT request with updatecount + const path = `${this.basePath}/${dockey}`; + const data = await sendRequest("PUT", path, finalPayload); + debugPrintJson(data); + console.log("Invoice updated successfully."); + return data; + } catch (err) { + console.error(`Failed to edit invoice ${dockey}:`, err.message); + throw err; + } + } + + /** + * Delete a sales invoice by docno + */ + async delete(dockey) { + const path = `${this.basePath}/${dockey}`; + console.log(`\n--- Deleting sales invoice dockey: ${dockey} ---`); + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to delete invoice ${dockey}:`, err.message); + throw err; + } + } +} + +const ivApi = new SalesInvoiceApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, if same path as node.js, leave it blank + +// Readline interface +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * Helper to ask question and return Promise + */ +function ask(question) { + return new Promise(resolve => rl.question(question, resolve)); +} + +async function confirm(message) { + const ans = (await ask(`${message} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + const file = fs.readFileSync(filename, "utf8"); + return JSON.parse(file); + } catch (err) { + console.error(`Failed to read ${filename}:`, err.message); + return null; + } +} + +async function SL_IV() { + try { + // Example: Get invoice list + console.log("\n================= Invoice List ================="); + if (await confirm("Proceed to fetch sales invoice list?")) { + const list = await ivApi.get_list(); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Get single invoice + console.log("\n================= Single Invoice ================="); + if (await confirm("Do you want to fetch a single invoice?")) { + const docno = await ask("Enter docno: "); + const list = await ivApi.get_single(docno.trim()); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Print invoice PDF + console.log("\n================= Print Invoice ================="); + if(await confirm("Do you want to print an invoice to PDF?")) { + const docno = await ask("Enter docno to print: "); + await ivApi.print(docno.trim()); + } + + // Example: Create new sales invoice + console.log("\n================= Create New Invoice ================="); + if (await confirm("Do you want to create new invoice?")) { + const payload = loadJson(JSON_FOLDER + "SL_IV-New.json"); // Make sure file name is correct + if (payload) { + await ivApi.create(payload); + } else { + console.log("Skipped create invoice (no valid JSON)"); + } + } + + // Example: Edit existing sales invoice + console.log("\n================= Edit Invoice ================="); + if (await confirm("Do you want to edit an invoice?")) { + const payload = loadJson(JSON_FOLDER + "SL_IV-Edit.json"); // Make sure the file name is correct + if (!payload || !payload.docno) { + console.log("The file must contain Docno."); + } else { + const docno = payload.docno.trim(); + console.log(`\n--- Looking for invoice docno '${docno}' ---`); + + // Fetching record by docno + const existing = await ivApi.get_single(docno); + if ( + !existing || + !Array.isArray(existing.data) || + existing.data.length === 0 + ) { + console.log(`Invoice docno '${docno}' not found.`); + } else { + const record = existing.data[0]; + const dockey = record.dockey; + const updatecount = record.updatecount; + + console.log(`Found dockey '${dockey}', updatecount '${updatecount}'`); + + //Merge fields into payload + const finalPayload = { + ...payload, + dockey, + updatecount, + }; + + // Write back updated JSON (so user can see updatecount added) + fs.writeFileSync( + JSON_FOLDER + "SL_IV-Edit.json", // Make sure file name is correct + JSON.stringify(finalPayload, null, 2) + ); + + await ivApi.update(dockey, finalPayload); + } + } + } + + // Example: Delete existing sales invoice + console.log("\n================= Delete Invoice ================="); + if (await confirm("Do you want to delete an invoice?")) { + const docno = await ask("Enter docno to delete: "); + if (!docno) { + console.log(`Invalid docno, please provide a valid docno.`); + } else { + const existing = await ivApi.get_single(docno); + if ( + !existing || + !Array.isArray(existing.data) || + existing.data.length === 0 + ) { + console.log(`Invoice with docno '${docno}' not found.`); + } else { + const record = existing.data[0]; + const dockey = record.dockey; + + console.log(`--- Deleting invoice '${docno}' ---`); + await ivApi.delete(dockey); + } + } + } + } catch (err) { + console.error("\nError:", err.message); + } finally { + console.log(`--- End of the Script ---`); + rl.close(); + } +} + +import { fileURLToPath } from "url"; +import path from "path"; + +const currentFile = fileURLToPath(import.meta.url); +const entryFile = path.resolve(process.argv[1]); + +if (currentFile === entryFile) { + SL_IV(); +} + +``` +
+ +### Node JS Purchase Invoice + +
+ Purchase Invoice - Get List, PDF, Add, Update & Delete Function - click to expand + +```js +//Updated on 01 Oct 2025 +import { sendRequest } from "./api/APICommon.js"; // base client +import fs from "fs"; +import readline from "readline"; + +/** + * Pretty-print JSON responses for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} records:`); + data.items.forEach((item, idx) => { + console.log( + `[${idx + 1}] docno= ${item.docno}, dockey= ${item.dockey}, amount= ${item.docamt}` + ); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log( + `[${idx + 1}] docno= ${item.docno}, dockey= ${item.dockey}, amount= ${item.docamt}` + ); + }); + }else if (typeof data === "object") { + console.log("Single record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class PurchaseInvoiceApi { + constructor() { + this.basePath = "/purchaseinvoice"; // base path + } + + /** + * Get purchase invoice list with pagination (default: offset=0, limit=5) + */ + async get_list(offset = 0, limit = 5) { + const path = this.basePath; + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching purchase invoice list ---"); + const data = await sendRequest("GET", path, null, query); + + // Force limit client-side if API ignore + if (data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } + + /** + * Get a single purchase invoice by docno + */ + async get_single(docno) { + const path = this.basePath; + const query = `docno=${encodeURIComponent(docno)}`; + console.log(`\n--- Fetching single purchase invoice '${docno}' ---`); + try { + const data = await sendRequest("GET", path, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error( + `Failed to fetch purchase invoice '${docno}':`, + err.response?.data || err.message + ); + throw err; + } + } + + /** + * Print a purchase invoice as PDF + * + * Args: + * docno: document number of the purchase invoice + * reportName: name of the report want to be print (E.g. Sales Invoice 8 (SST 1)) + * savePath: output folder (E.g. ./PDF) + */ + async print(docno, reportName = "Purchase Invoice 8 (SST 1)", savePath = "./PDF") { + console.log(`\n--- Printing purchase invoice '${docno}' to PDF ---`); + + // Step 1: Find dockey for the given docno + const existing = await this.get_single(docno); + if(!existing || !Array.isArray(existing.data) || existing.data.length === 0) { + throw new Error(`Purchase invoice '${docno}' not found`); + } + + const record = existing.data[0]; + const dockey = record.dockey; + const path = `${this.basePath}/${dockey}`; + + const pdfData = await sendRequest("GET", path, null, "", { + headers: { "Content-Type": `application/pdf;template=${reportName}`}, + responseType: "arraybuffer", + raw: true, + }); + + const fs = await import("fs"); + const fullSavePath = `${savePath}/Purchase_Invoice_${docno}.pdf`; + fs.mkdirSync(savePath, { recursive: true }); + fs.writeFileSync(fullSavePath, pdfData); + console.log(`PDF saved: ${fullSavePath}`); + } + + /** + * Create a new purchase invoice + */ + async create(payload) { + console.log("\n--- Creating purchase invoice ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + return data; + } catch (err) { + console.error( + "Failed to create purchase invoice:", + err.response?.data || err.message + ); + throw err; + } + } + + /** + * Update an existing purchase invoice + */ + async update(dockey, payload) { + const path = `${this.basePath}/${dockey}`; + console.log(`\n--- Updating purchase invoice dockey=${dockey} ---`); + + try { + // Step 1: Fetch existing record to get updatecount + const query = `dockey=${encodeURIComponent(dockey)}`; + const existing = await sendRequest("GET", this.basePath, null, query); + + console.log("Existing record:", JSON.stringify(existing, null, 2)); + + const record = + (existing.data && existing.data[0]) || + (existing.items && existing.items[0]) || + existing; + + if (!record || typeof record.updatecount === "undefined") { + throw new Error( + "Updatecount missing. Try fetching via list API with dockey filter." + ); + } + + //Step 2: Merge updatecount into payload + const finalPayload = { + ...payload, + updatecount: record.updatecount, + }; + + // Step 3: send PUT request with updatecount + const path = `${this.basePath}/${dockey}`; + const data = await sendRequest("PUT", path, finalPayload); + debugPrintJson(data); + console.log("Purchase invoice updated successfully."); + return data; + } catch (err) { + console.error(`Failed to edit purchase invoice ${dockey}:`, err.message); + throw err; + } + } + + /** + * Delete a purchase invoice by docno + */ + async delete(dockey) { + const path = `${this.basePath}/${dockey}`; + console.log(`\n--- Deleting purchase invoice dockey=${dockey} ---`); + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to delete purchase invoice '${dockey}':`,err.response?.data || err.message); + throw err; + } + } +} + +const piApi = new PurchaseInvoiceApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, if same path as node.js, leave it blank + +// Readline interface +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * Helper to ask question and return Promise + */ +function ask(question) { + return new Promise(resolve => rl.question(question, resolve)); +} + +async function confirm(message) { + const ans = (await ask(`${message} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + const file = fs.readFileSync(filename, "utf8"); + return JSON.parse(file); + } catch (err) { + console.error(`Failed to read ${filename}:`, err.message); + return null; + } +} + +async function PH_PI() { + try { + // Example: Get purchase invoice list + console.log("\n================= Purchase Invoice List ================="); + if (await confirm("Proceed to fetch purchase invoice list?")) { + const list = await piApi.get_list(); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Get single purchase invoice + console.log("\n================= Single Purchase Invoice ================="); + if (await confirm("Do you want to fetch a single purchase invoice?")) { + const docno = await ask("Enter docno: "); + const list = await piApi.get_single(docno.trim()); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Print invoice PDF + console.log("\n================= Print Purchase Invoice ================="); + if(await confirm("Do you want to print an invoice to PDF?")) { + const docno = await ask("Enter docno to print: "); + await piApi.print(docno.trim()); + } + + // Example: Create new purchase invoice + console.log("\n================= Create New Purchase Invoice ================="); + if (await confirm("Do you want to create a new purchase invoice?")) { + const payload = loadJson(JSON_FOLDER + "PH_PI-New.json"); // Make sure file name is correct + if (payload) { + await piApi.create(payload); + } else { + console.log("Skipped create purchase invoice (no valid JSON)."); + } + } + + // Example: Edit existing purchase invoice + console.log("\n================= Edit Purchase Invoice ================="); + if (await confirm("Do you want to edit a purchase invoice?")) { + const payload = loadJson(JSON_FOLDER + "PH_PI-Edit.json"); // Make sure file path is correct + if (!payload || !payload.docno) { + console.log("The file must contain Docno."); + } else { + const docno = payload.docno.trim(); + console.log(`\n--- Looking for purchase invoice docno '${docno}' ---`); + + // Fetch existing by docno + const existing = await piApi.get_single(docno); + if ( + !existing || + !Array.isArray(existing.data) || + existing.data.length === 0 + ) { + console.log(`Purchase invoice docno '${docno}' not found.`); + } else { + const record = existing.data[0]; + const dockey = record.dockey; + const updatecount = record.updatecount; + + console.log(`Found dockey '${dockey}', updatecount '${updatecount}'`); + + // Merge with payload + const finalPayload = { + ...payload, + dockey, + updatecount + }; + + // Save updated JSON (so user can see updatecount added) + fs.writeFileSync( + JSON_FOLDER + "PH_PI-Edit.json", // Make sure file path is correct + JSON.stringify(finalPayload, null, 2)); + + await piApi.update(dockey, finalPayload); + } + } + } + + // Example: Delete existing purchase invoice + console.log("\n================= Delete Purchase Invoice ================="); + if (await confirm("Do you want to delete a purchase invoice?")) { + const docno = await ask("Enter docno to delete: "); + if (!docno) { + console.log("Invalid docno, please provide a valid docno."); + } else { + const existing = await piApi.get_single(docno.trim()); + if ( + !existing || + !Array.isArray(existing.data) || + existing.data.length === 0 + ) { + console.log(`Purchase invoice with docno '${docno}' not found.`); + } else { + const record = existing.data[0]; + const dockey = record.dockey; + + console.log(`--- Deleting purchase invoice '${docno}' ---`); + await piApi.delete(dockey); + } + } + } + } catch (err) { + console.error("\nError in tests:", err.message); + } finally { + console.log(`--- End of the Script ---`); + rl.close(); + } +} + +import { fileURLToPath } from "url"; +import path from "path"; + +const currentFile = fileURLToPath(import.meta.url); +const entryFile = path.resolve(process.argv[1]); + +if (currentFile === entryFile) { + PH_PI(); +} + +``` +
+ +### NOde JS Sales Order to Sales Invoice + +
+ Transfer from Sales Order to Sales Invoice - click to expand + +```js +// Updated on 01 Oct 2025 +import { sendRequest } from "./api/APICommon.js"; // base client +import fs from "fs"; +import readline from "readline"; + +/** + * Pretty-print JSON responses for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} records:`); + data.items.forEach((item, idx) => { + console.log( + `[${idx + 1}] docno=${item.docno}, dockey=${item.dockey}, amount=${item.docamt}` + ); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log(`[${idx + 1}] docno= ${item.docno}, dockey= ${item.dockey}, amount= ${item.docamt}`); + }); + } else if (typeof data === "object") { + console.log("Single record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class SalesInvoiceApi { + constructor() { + this.basePath = "/salesinvoice"; // base path + } + + /** + * Get sales invoice list with pagination + */ + async get_list(offset = 0, limit = 5) { + const path = this.basePath; + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching sales invoice list (offset = 0, limit = 5) ---"); + const data = await sendRequest("GET", path, null, query); + + // Force limit cliend-side if API ignore + if(data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } + + /** + * Get a single sales invoice by docno + */ + async get_single(docno) { + const path = this.basePath; + const query = `docno=${encodeURIComponent(docno)}`; + console.log(`\n--- Fetching single sales invoice '${docno}' ---`); + + try { + const data = await sendRequest("GET", path, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to fetch invoice '${docno}':`, err.message); + throw err; + } + } + + /** + * Create a new sales invoice + */ + async create(payload) { + console.log("\n--- Creating sales invoice ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + return data; + } catch (err) { + console.error("Failed to create invoice:", err.message); + throw err; + } + } + + /** + * Edit an existing sales invoice + */ + async update(dockey, payload) { + console.log(`\n--- Editing sales invoice dockey: ${dockey} ---`); + + try { + // Step 1: Fetch existing record to get updatecount + const query = `dockey=${encodeURIComponent(dockey)}`; + const existing = await sendRequest("GET", this.basePath, null, query); + + console.log("Existing record:", JSON.stringify(existing, null, 2)); + + const record = + (existing.data && existing.data[0]) || + (existing.items && existing.items[0]) || + existing; + + if (!record || typeof record.updatecount === "undefined") { + throw new Error("Updatecount missing. Try fetching via list API with dockey filter."); + } + + // Step 2: Merge updatecount into payload + const finalPayload = { + ...payload, + updatecount: record.updatecount, + }; + + // Step 3: Send PUT request with updatecount + const path = `${this.basePath}/${dockey}`; + const data = await sendRequest("PUT", path, finalPayload); + debugPrintJson(data); + console.log("Invoice updated successfully."); + return data; + } catch (err) { + console.error(`Failed to edit invoice ${dockey}:`, err.message); + throw err; + } + } + + /** + * Delete a sales invoice by dockey + */ + async delete(dockey) { + const path = `${this.basePath}/${dockey}`; + console.log(`\n--- Deleting sales invoice dockey: ${dockey} ---`); + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to delete invoice ${dockey}:`, err.message); + throw err; + } + } +} + +const ivApi = new SalesInvoiceApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, if same path as node.js, leave it blank + +// Readline interface +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * Helper to ask question and return Promise + */ +function ask(question) { + return new Promise(resolve => rl.question(question, resolve)); +} + +async function confirm(message) { + const ans = (await ask(`${message} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + const file = fs.readFileSync(filename, "utf8"); + return JSON.parse(file); + } catch (err) { + console.error(`Failed to read ${filename}:`, err.message); + return null; + } +} + +async function SL_IV() { + try { + + // Example: Create new sales invoice + console.log("\n================= Create New Invoice ================="); + if (await confirm("Do you want to create new invoice?")) { + const payload = loadJson(JSON_FOLDER + "SO2IV-New.json"); //make sure file name is correct + if (payload) { + await ivApi.create(payload); + } else { + console.log("Skipped create invoice (no valid JSON)"); + } + } + + // Example: Delete existing sales invoice + console.log("\n================= Delete Invoice ================="); + if (await confirm("Do you want to delete an invoice?")) { + const docno = await ask("Enter docno to delete: "); + if (!docno) { + console.log(`Invalid docno, please provide a valid docno.`); + } else { + const existing = await ivApi.get_single(docno); + if ( + !existing || + !Array.isArray(existing.data) || + existing.data.length === 0 + ) { + console.log(`Invoice with docno '${docno}' not found.`); + } else { + const record = existing.data[0]; + const dockey = record.dockey; + + console.log(`--- Deleting invoice '${docno}' ---`); + await ivApi.delete(dockey); + } + } + } + } catch (err) { + console.error("\nError in tests:", err.message); + } finally { + console.log(`--- End of the Script ---`); + rl.close(); + } +} + +SL_IV(); + +``` +
+ +### Maintain Customer + +
+ Maintain Customer - Get List, Add, Update & Delete Function - click to expand + +```js +// Updated on 01 Oct 2025 +import { sendRequest } from "./api/APICommon.js"; // base client +import fs from "fs"; +import readline from "readline"; + +/** + * Pretty-print JSON responses for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} records:`); + data.items.forEach((item, idx) => { + console.log(`[${idx + 1}] code= ${item.code}, name= ${item.companyname}`); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log(`[${idx + 1}] code= ${item.code}, name= ${item.companyname}`); + }); + } else if (typeof data === "object") { + console.log("Single record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class CustomerApi { + constructor() { + this.basePath = "/customer"; // base path + } + + /** + * Get customer list with pagination (default: offset=0, limit=5) + */ + async get_list(offset = 0, limit = 5) { + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching customer list (offset = 0, limit = 5)---"); + const data = await sendRequest("GET", this.basePath, null, query); + + // Force limit client-side if API ignore + if (data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } + + /** + * Get a single customer by code + */ + async get_single(code) { + const query = `code=${encodeURIComponent(code)}`; + try { + const data = await sendRequest("GET", this.basePath, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to fetch customer '${code}':`, err.message); + throw err; + } + } + + /** + * Create new customer + */ + async create(payload) { + console.log("\n--- Creating new customer ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + console.log("Customer created successfully."); + return data; + } catch (err) { + console.error( + "Failed to create customer:", + err.response?.data || err.message + ); + throw err; + } + } + + /** + * Update existing customer + */ + async update(code, payload) { + if (!code) throw new Error("Code required for update"); + console.log(`\n--- Updating customer code: ${code} ---`); + + // Ensure code is included in payload + const finalPayload = { ...payload, code }; + + const path = `${this.basePath}/${encodeURIComponent(code)}`; + const data = await sendRequest("PUT", path, finalPayload); + debugPrintJson(data); + console.log("Customer updated successfully."); + return data; + } + + /** + * Delete customer by code + */ + async delete(dockey) { + const path = `${this.basePath}/${dockey}`; + console.log(`\n--- Deleting customer dockey: ${dockey} ---`); + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + console.log("Customer deleted successfully."); + return data; + } catch (err) { + console.error( + `Failed to delete customer '${dockey}':`, + err.response?.data || err.message + ); + throw err; + } + } +} + +// ========== Runner ========== + +const custApi = new CustomerApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, is same path as node.js, leave it blank + +// Readline interface +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * + * Helper to ask question and return Promise + */ +function ask(question) { + return new Promise((resolve) => rl.question(question, resolve)); +} + +async function confirm(message) { + const ans = (await ask(`${message} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + const file = fs.readFileSync(filename, "utf8"); + return JSON.parse(file); + } catch (err) { + console.error(`Failed to read ${filename}:`, err.message); + return null; + } +} + +async function AR_Customer() { + try { + // Customer list + console.log("\n================= Customer List ================="); + if (await confirm("Proceed to fetch customer list?")) { + const list = await custApi.get_list(); + console.table(JSON.stringify(list, null, 2)); + } + + // Single customer + console.log("\n================= Fetch Single Customer ================="); + if (await confirm("Do you want to fetch a single customer?")) { + const code = await ask("Enter customer code: "); + const cust = await custApi.get_single(code.trim()); + console.log(`\n--- Fetching customer code'${code}' ---`); + console.table(JSON.stringify(cust, null, 2)); + } + + // Create new customer + console.log("\n================= Create New Customer ================="); + if (await confirm("Do you want to create a new customer?")) { + const payload = loadJson(JSON_FOLDER + "AR_Customer-New.json"); // Make sure file name is correct + if (payload) { + await custApi.create(payload); + } else { + console.log("Skipped create customer (no valid JSON)."); + } + } + + // Edit existing customer + console.log("\n================= Edit Customer ================="); + if (await confirm("Do you want to edit a customer?")) { + const payload = loadJson(JSON_FOLDER + "AR_Customer-Edit.json"); // Make sure the file name is correct + if (!payload?.code) { + console.log("The file must contain customer code."); + } else { + const code = payload.code.trim(); + console.log(`\n--- Looking for customer code '${code}' ---`); + + // Fetch existing record by code + const existing = await custApi.get_single(code); + + // normalize record extraction + const record = + (existing && existing.data && existing.data[0]) || + (existing && existing.items && existing.items[0]) || + existing; + + if (!record) { + console.log(`Customer Code '${code}' not found.`); + } else { + const finalPayload = { ...record, ...payload, code }; + + fs.writeFileSync( + JSON_FOLDER + "AR_Customer-Edit.json", + JSON.stringify(finalPayload, null, 2) + ); + + await custApi.update(code, finalPayload); + } + } + } + + // Delete existing customer + console.log("\n================= Delete Customer ================="); + if (await confirm("Do you want to delete a customer?")) { + const code = await ask("Enter customer code to delete: "); + if (code) { + console.log(`--- Deleting customer '${code}' ---`); + await custApi.delete(code.trim()); + } + } + } catch (err) { + console.error("Error:", err.message); + } finally { + console.log(`--- End of the Script ---`); + rl.close(); + } +} + +import { fileURLToPath } from "url"; +import path from "path"; + +const currentFile = fileURLToPath(import.meta.url); +const entryFile = path.resolve(process.argv[1]); + +if (currentFile === entryFile) { + AR_Customer(); +} + +``` +
+ +### Stock Transfer + +
+ Stock Transfer - Get List, Add, Update & Delete Function - click to expand + +```js +// Updated on 11 Oct 2025 Print PDF not ready yet +import { sendRequest } from "./api/APICommon.js"; // base client +import fs from "fs"; +import readline from "readline"; + +/** + * Pretty-print JSON responses for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} record(s):`); + data.items.forEach((item, idx) => { + console.log(`[${idx + 1}] docno= ${item.docno}, desc= ${item.description}, date= ${item.docdate}`); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log(`[${idx + 1}] docno= ${item.docno}, descr= ${item.description}, date= ${item.docdate}`); + }); + } else if (typeof data === "object") { + console.log("Single record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class StockTransferApi { + constructor() { + this.basePath = "/stocktransfer"; // base path + } + + /** + * Get stock transfer list with pagination (default offset=0, limit=5) + */ + async get_list(offset = 0, limit = 5) { + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching stock transfer list (offset = 0, limit = 5)---"); + const data = await sendRequest("GET", this.basePath, null, query); + + // Force limit client-side if API ignore + if (data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } + + /** + * Get a single stock transfer by docno + */ + async get_single(docno) { + const query = `docno=${encodeURIComponent(docno)}`; + console.log(`\n--- Fetching stock transfer '${docno}' ---`); + + try { + const data = await sendRequest("GET", this.basePath, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to fetch stock transfer '${docno}':`, err.response?.data || err.message); + throw err; + } + } + + /** + * Print a stock transfer as PDF + * + * Args: + * docno: document number of the stock transfer + * reportName: name of the report want to be print (E.g. Stock Transfer (With Cost)) + * savePath: output folder (E.g. ./PDF) + */ + async print(docno, reportName = "Stock Transfer (With Cost)", savePath = "./PDF") { + console.log(`\n--- Printing stock transfer '${docno}' to PDF ---`); + + // Step 1: Find dockey for the given docno + const existing = await this.get_single(docno); + if(!existing || !Array.isArray(existing.data) || existing.data.length === 0) { + throw new Error(`Stock Transfer '${docno}' not found`); + } + + const record = existing.data[0]; + const dockey = record.dockey; + const path = `${this.basePath}/${dockey}`; + + const pdfData = await sendRequest("GET", path, null, "", { + headers: { "Content-Type": `application/pdf;template=${reportName}`}, + responseType: "arraybuffer", + raw: true, + }); + + const fs = await import("fs"); + const fullSavePath = `${savePath}/Stock_Transfer_${docno}.pdf`; + fs.mkdirSync(savePath, { recursive: true }); + fs.writeFileSync(fullSavePath, pdfData); + console.log(`PDF saved: ${fullSavePath}`); + } + + /** + * Create new stock transfer + */ + async create(payload) { + console.log("\n--- Creating new stock transfer ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + console.log("Stock transfer created successfully."); + return data; + } catch (err) { + console.error("Failed to create stock transfer:", err.response?.data || err.message); + throw err; + } + } + + /** + * Update existing stock transfer by dockey + */ + async update(dockey, payload) { + console.log(`\n--- Updating stock transfer dockey=${dockey} ---`); + + try { + // Step 1: fetch existing to get updatecount + const query = `dockey=${encodeURIComponent(dockey)}`; + const existing = await sendRequest("GET", this.basePath, null, query); + + const record = + (existing.data && existing.data[0]) || + (existing.items && existing.items[0]) || + existing; + + if (!record || typeof record.updatecount === "undefined") { + throw new Error("Updatecount missing. Try fetching via list API with dockey filter."); + } + + // Step 2: merge updatecount + const finalPayload = { ...payload, updatecount: record.updatecount }; + + // Step 3: PUT to update + const path = `${this.basePath}/${dockey}`; + const data = await sendRequest("PUT", path, finalPayload); + debugPrintJson(data); + console.log("Stock transfer updated successfully."); + return data; + } catch (err) { + console.error(`Failed to update stock transfer ${dockey}:`, err.response?.data || err.message); + throw err; + } + } + + /** + * Delete stock transfer by docno + */ + async delete(docno) { + const path = `${this.basePath}/${docno}`; + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + console.log("Stock transfer deleted successfully."); + return data; + } catch (err) { + console.error(`Failed to delete stock transfer '${docno}':`, err.response?.data || err.message); + throw err; + } + } +} + +// ======== Runner ======== + +const xfApi = new StockTransferApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, if same path as node.js, leave it blank + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * + * Helper to ask question and return Promise + */ +function ask(question) { + return new Promise(resolve => rl.question(question, resolve)); +} + +async function confirm(msg) { + const ans = (await ask(`${msg} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + const file = fs.readFileSync(filename, "utf8"); + return JSON.parse(file); + } catch (err) { + console.error(`Failed to read ${filename}:`, err.message); + return null; + } +} + +async function ST_XF() { + try { + // Example: Get stock transfer list + console.log("\n================= Stock Transfer List ================="); + if (await confirm("Proceed to fetch stock transfer list?")) { + const list = await xfApi.get_list(); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Get single stock transfer + console.log("\n================= Single Stock Transfer ================="); + if (await confirm("Do you want to fetch a single stock transfer?")) { + const docno = await ask("Enter docno: "); + const data = await xfApi.get_single(docno.trim()); + console.table(JSON.stringify(data, null, 2)); + } + + /** + // Example: Print stock transfer PDF + console.log("\n================= Print Stock Transfer ================="); + if(await confirm("Do you want to printa stock transfer to PDF?")) { + const docno = await ask("Enter docno to print:"); + await xfApi.print(docno.trim()); + } + */ + + // Example: Create new stock transfer + console.log("\n================= Create Stock Transfer ================="); + if (await confirm("Do you want to create new stock transfer?")) { + const payload = loadJson(JSON_FOLDER + "ST_XF-New.json"); // make sure your file name is correct + if (payload) await xfApi.create(payload); + else console.log("Skipped create stock transfer (no valid JSON)."); + } + + // Example: Edit existing stock transfer + console.log("\n================= Edit Stock Transfer ================="); + if (await confirm("Do you want to edit a stock transfer?")) { + const payload = loadJson(JSON_FOLDER + "ST_XF-Edit.json"); // make sure your file name is correct + if (payload?.docno) { + const existing = await xfApi.get_single(payload.docno.trim()); + if (existing?.data?.length > 0) { + const record = existing.data[0]; + const dockey = record.dockey; + + console.log(`Found dockey '${dockey}', updatecount '${record.updatecount}'`); + + const finalPayload = { ...payload, dockey, updatecount: record.updatecount }; + fs.writeFileSync(JSON_FOLDER + "ST_XF-Edit.json", JSON.stringify(finalPayload, null, 2)); // make sure your file name is correct + + await xfApi.update(dockey, finalPayload); + } else { + console.log(`Stock transfer docno '${payload.docno}' not found.`); + } + } else { + console.log("The file must contain docno."); + } + } + + // Example: Delete existing stock transfer + console.log("\n================= Delete Stock Transfer ================="); + if (await confirm("Do you want to delete a stock transfer?")) { + const docno = await ask("Enter docno to delete: "); + const existing = await xfApi.get_single(docno.trim()); + if (existing?.data?.length > 0) { + const dockey = existing.data[0].dockey; + console.log(`--- Deleting stock transfer '${docno}' (dockey=${dockey}) ---`); + await xfApi.delete(dockey); + } else { + console.log(`Stock transfer '${docno}' not found.`); + } + } + } catch (err) { + console.error("Error:", err.message); + } finally { + console.log("--- End of the Script ---"); + rl.close(); + } +} + +import { fileURLToPath } from "url"; +import path from "path"; +const currentFile = fileURLToPath(import.meta.url); +const entryFile = path.resolve(process.argv[1]); + +if (currentFile === entryFile) { + ST_XF(); +} + +``` +
+ +### GL Payment Voucher + +
+ GL Payment Voucher - Get List, Add, Update & Delete Function - click to expand + +```js +// Updated on 15 Oct 2025 Print PDF not ready yet +import { sendRequest } from "./api/APICommon.js"; // base client +import fs from "fs"; +import readline from "readline"; + +/** + * Pretty-print JSON for debugging for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} record(s):`); + data.items.forEach((item, idx) => { + console.log(`[${idx + 1}] docno= ${item.docno}, desc= ${item.description}`); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log(`[${idx + 1}] docno= ${item.docno}, desc= ${item.description}`); + }); + } else if (typeof data === "object") { + console.log("Single record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class PaymentVoucherApi { + constructor() { + this.basePath = "/paymentvoucher"; // base path + } + + /** + * Get list of payment vouchers with pagination (default: offset=0, limit=5) + */ + async get_list(offset = 0, limit = 5) { + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching payment voucher list (offset = 0, limit = 5)---"); + const data = await sendRequest("GET", this.basePath, null, query); + + // Force limit client-side if API ignore + if (data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } + + /** + * Get single payment voucher by docno + */ + async get_single(docno) { + const query = `docno=${encodeURIComponent(docno)}`; + console.log(`\n--- Fetching single payment voucher '${docno}' ---`); + try { + const data = await sendRequest("GET", this.basePath, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error( + `Failed to fetch payment voucher '${docno}':`, + err.response?.data || err.message + ); + throw err; + } + } + + /** + * Print a payment voucher as PDF + * + * Args: + * docno: document number of the payment voucher + * reportName: name of the report want to be print (E.g. GL Payment Voucher - Detail - Full) + * savePath: output folder (E.g. ./PDF) + */ + async print(docno, reportName = "GL Payment Voucher - Detail - Full", savePath = "./PDF") { + console.log(`\n--- Printing Payment Voucher '${docno}' to PDF ---`); + + // Step 1: Find dockey for the given docno + const existing = await this.get_single(docno); + if(!existing || !Array.isArray(existing.data) || existing.data.length === 0) { + throw new Error(`Payment Voucher '${docno}' not found`); + } + + const record = existing.data[0]; + const dockey = record.dockey; + const path = `${this.basePath}/${dockey}`; + + const pdfData = await sendRequest("GET", path, null, "", { + headers: { "Content-Type": `application/pdf;template=${reportName}`}, + responseType: "arraybuffer", + raw: true, + }); + + const fs = await import("fs"); + const fullSavePath = `${savePath}/Payment_Voucher_${docno}.pdf`; + fs.mkdirSync(savePath, { recursive: true }); + fs.writeFileSync(fullSavePath, pdfData); + console.log(`PDF saved: ${fullSavePath}`); + } + + /** + * Create new payment voucher + */ + async create(payload) { + console.log("\n--- Creating new payment voucher ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + console.log("Payment voucher created successfully."); + return data; + } catch (err) { + console.error( + "Failed to create payment voucher:", + err.response?.data || err.message + ); + throw err; + } + } + + /** + * Update existing payment voucher + */ + async update(dockey, payload) { + console.log(`\n--- Updating payment voucher dockey=${dockey} ---`); + try { + // Step 1: Fetch existing record for updatecount + const query = `dockey=${encodeURIComponent(dockey)}`; + const existing = await sendRequest("GET", this.basePath, null, query); + + const record = + (existing.data && existing.data[0]) || + (existing.items && existing.items[0]) || + existing; + + if (!record || typeof record.updatecount === "undefined") { + throw new Error( + "Updatecount missing. Try fetching via list API with dockey filter." + ); + } + + // Step 2: Merge updatecount into payload + const finalPayload = { ...payload, updatecount: record.updatecount }; + const path = `${this.basePath}/${dockey}`; + + // Step 3: Send PUT request with updatecount + const data = await sendRequest("PUT", path, finalPayload); + debugPrintJson(data); + console.log("Payment voucher updated successfully."); + return data; + } catch (err) { + console.error( + `Failed to update payment voucher ${dockey}:`, + err.response?.data || err.message + ); + throw err; + } + } + + /** + * Delete payment voucher by dockey + */ + async delete(dockey) { + const path = `${this.basePath}/${dockey}`; + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + console.log("Payment voucher deleted successfully."); + return data; + } catch (err) { + console.error( + `Failed to delete payment voucher '${dockey}':`, + err.response?.data || err.message + ); + throw err; + } + } +} + +// ===== Runner ===== + +const pvApi = new PaymentVoucherApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, if same path as node.js, leave it blank + +// Readline interface +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * + * Helper to ask question and return Promise + */ +function ask(question) { + return new Promise((resolve) => rl.question(question, resolve)); +} + +async function confirm(message) { + const ans = (await ask(`${message} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + const file = fs.readFileSync(filename, "utf8"); + return JSON.parse(file); + } catch (err) { + console.error(`Failed to read ${filename}:`, err.message); + return null; + } +} + +async function GL_PV() { + try { + // Example: Get payment voucher list + console.log("\n================= Payment Voucher List ================="); + if (await confirm("Proceed to fetch payment voucher list?")) { + const list = await pvApi.get_list(); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Get single payment voucher + console.log("\n================= Single Payment Voucher ================="); + if (await confirm("Do you want to fetch a single payment voucher?")) { + const docno = await ask("Enter docno: "); + const data = await pvApi.get_single(docno.trim()); + console.table(JSON.stringify(data, null, 2)); + } + + /** + // Example: Print payment voucher PDF + console.log("\n================= Print Payment Voucher ================="); + if(await confirm("Do you want to print an payment voucher to PDF?")) { + const docno = await ask("Enter docno to print: "); + await pvApi.print(docno.trim()); + } + */ + + // Example: Create new payment voucher + console.log("\n================= Create Payment Voucher ================="); + if (await confirm("Do you want to create a new payment voucher?")) { + const payload = loadJson(JSON_FOLDER + "GL_PV-New.json"); // make sure your file name is correct + if (payload) await pvApi.create(payload); + else console.log("Skipped create payment voucher (no valid JSON)."); + } + + // Example: Edit existing payment voucher + console.log("\n================= Edit Payment Voucher ================="); + if (await confirm("Do you want to edit a payment voucher?")) { + const payload = loadJson(JSON_FOLDER + "GL_PV-Edit.json"); // make sure your file name is correct + if (payload?.docno) { + const existing = await pvApi.get_single(payload.docno.trim()); + if (existing?.data?.length > 0) { + const record = existing.data[0]; + const dockey = record.dockey; + console.log( + `Found dockey '${dockey}', updatecount '${record.updatecount}'` + ); + + const finalPayload = { ...payload, dockey, updatecount: record.updatecount }; + fs.writeFileSync( + JSON_FOLDER + "GL_PV-Edit.json", // make sure your file name is correct + JSON.stringify(finalPayload, null, 2) + ); + + await pvApi.update(dockey, finalPayload); + } else { + console.log(`Payment voucher docno '${payload.docno}' not found.`); + } + } else { + console.log("The file must contain docno."); + } + } + + // Example: Delete existing payment voucher + console.log("\n================= Delete Payment Voucher ================="); + if (await confirm("Do you want to delete a payment voucher?")) { + const docno = await ask("Enter docno to delete: "); + const existing = await pvApi.get_single(docno.trim()); + if (existing?.data?.length > 0) { + const dockey = existing.data[0].dockey; + console.log(`--- Deleting payment voucher '${docno}' ---`); + await pvApi.delete(dockey); + } else { + console.log(`Payment voucher '${docno}' not found.`); + } + } + } catch (err) { + console.error("Error:", err.message); + } finally { + console.log("--- End of the Script ---"); + rl.close(); + } +} + +// Run directly +import { fileURLToPath } from "url"; +import path from "path"; +const currentFile = fileURLToPath(import.meta.url); +const entryFile = path.resolve(process.argv[1]); + +if (currentFile === entryFile) { + GL_PV(); +} + +``` +
+ +### Journal Entry + +
+ Journal Entry - Get List, Add, Update & Delete Function - click to expand + +```js +// Updated on 15 Oct 2025 print PDF not ready yet +import { sendRequest } from "./api/APICommon.js"; // base client +import fs from "fs"; +import readline from "readline"; + +/** + * Pretty-print JSON responses for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} record(s):`); + data.items.forEach((item, idx) => { + console.log(`[${idx + 1}] docno= ${item.docno}, desc= ${item.description}`); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log(`[${idx + 1}] docno= ${item.docno}, desc= ${item.description}`); + }); + } else if (typeof data === "object") { + console.log("Single record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class JournalEntryApi { + constructor() { + this.basePath = "/journalentry"; // base bath + } + + /** + * Get journal entry list with pagination (default: offset=0, limit=5) + */ + async get_list(offset = 0, limit = 5) { + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching journal entry list (offset = 0, limit = 5)---"); + const data = await sendRequest("GET", this.basePath, null, query); + + // Force limit client-side if API ignore + if (data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } + + /** + * Get a single journal entry by docno + */ + async get_single(docno) { + const query = `docno=${encodeURIComponent(docno)}`; + console.log(`\n--- Fetching single journal entry '${docno}' ---`); + try { + const data = await sendRequest("GET", this.basePath, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error( + `Failed to fetch journal entry '${docno}':`, + err.response?.data || err.message + ); + throw err; + } + } + + /** + * Print a journal entry as PDF + * + * Args: + * docno: document number of the journal entry + * reportName: name of the report want to be print (E.g. GL Journal Voucher - Full) + * savePath: output folder (E.g. ./PDF) + */ + async print(docno, reportName = "GL Journal Voucher - Full", savePath = "./PDF") { + console.log(`\n--- Printing journal entry '${docno}' to PDF ---`); + + // Step 1: Find dockey for the given docno + const existing = await this.get_single(docno); + if(!existing || !Array.isArray(existing.data) || existing.data.length === 0) { + throw new Error(`Journal Entry '${docno}' not found`); + } + + const record = existing.data[0]; + const dockey = record.dockey; + const path = `${this.basePath}/${dockey}`; + + const pdfData = await sendRequest("GET", path, null, "", { + headers: { "Content-Type": `application/pdf;template=${reportName}`}, + responseType: "arraybuffer", + raw: true, + }); + + const fs = await import("fs"); + const fullSavePath = `${savePath}/Journal_Entry_${docno}.pdf`; + fs.mkdirSync(savePath, { recursive: true }); + fs.writeFileSync(fullSavePath, pdfData); + console.log(`PDF saved: ${fullSavePath}`); + } + + /** + * Create new journal entry + */ + async create(payload) { + console.log("\n--- Creating new journal entry ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + console.log("Journal entry created successfully."); + return data; + } catch (err) { + console.error( + "Failed to create journal entry:", + err.response?.data || err.message + ); + throw err; + } + } + + /** + * Update existing journal entry + */ + async update(dockey, payload) { + console.log(`\n--- Updating journal entry dockey=${dockey} ---`); + try { + // Step 1: Fetch record for updatecount + const query = `dockey=${encodeURIComponent(dockey)}`; + const existing = await sendRequest("GET", this.basePath, null, query); + + const record = + (existing.data && existing.data[0]) || + (existing.items && existing.items[0]) || + existing; + + if (!record || typeof record.updatecount === "undefined") { + throw new Error("Updatecount missing. Try fetching via list API with dockey filter."); + } + + // Step 2: Merge updatecount into payload + const finalPayload = { ...payload, updatecount: record.updatecount }; + + // Step 3: Send PUT request with updatecount + const path = `${this.basePath}/${dockey}`; + const data = await sendRequest("PUT", path, finalPayload); + debugPrintJson(data); + console.log("Journal entry updated successfully."); + return data; + } catch (err) { + console.error( + `Failed to update journal entry ${dockey}:`, + err.response?.data || err.message + ); + throw err; + } + } + + /** + * Delete journal entry by dockey + */ + async delete(dockey) { + const path = `${this.basePath}/${dockey}`; + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + console.log("Journal entry deleted successfully."); + return data; + } catch (err) { + console.error( + `Failed to delete journal entry '${dockey}':`, + err.response?.data || err.message + ); + throw err; + } + } +} + +// ===== Runner ===== + +const jeApi = new JournalEntryApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, if same path as node.js, leave it blank + +// Readline interface +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * + * Helper to ask question and return Promise + */ +function ask(question) { + return new Promise((resolve) => rl.question(question, resolve)); +} + +async function confirm(message) { + const ans = (await ask(`${message} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + const file = fs.readFileSync(filename, "utf8"); + return JSON.parse(file); + } catch (err) { + console.error(`Failed to read ${filename}:`, err.message); + return null; + } +} + +async function GL_Journal() { + try { + // Example: Get journal entry list + console.log("\n================= Journal Entry List ================="); + if (await confirm("Proceed to fetch journal entry list?")) { + const list = await jeApi.get_list(); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Get single journal entry + console.log("\n================= Single Journal Entry ================="); + if (await confirm("Do you want to fetch a single journal entry?")) { + const docno = await ask("Enter docno: "); + const data = await jeApi.get_single(docno.trim()); + console.table(JSON.stringify(data, null, 2)); + } + + /** + // Example: Print journal entry PDF + console.log("\n================= Print Journal Entry ================="); + if(await confirm("Do you want to print a journal entry to PDF?")) { + const docno = await ask("Enter docno to print: "); + await jeApi.print(docno.trim()); + } + */ + + // Example: Create new journal entry + console.log("\n================= Create Journal Entry ================="); + if (await confirm("Do you want to create a new journal entry?")) { + const payload = loadJson(JSON_FOLDER + "GL_JE-New.json"); // make sure your file name is correct + if (payload) await jeApi.create(payload); + else console.log("Skipped create journal entry (no valid JSON)."); + } + + // Example: Edit existing journal entry + console.log("\n================= Edit Journal Entry ================="); + if (await confirm("Do you want to edit a journal entry?")) { + const payload = loadJson(JSON_FOLDER + "GL_JE-Edit.json"); // make sure your file name is correct + if (payload?.docno) { + const existing = await jeApi.get_single(payload.docno.trim()); + if (existing?.data?.length > 0) { + const record = existing.data[0]; + const dockey = record.dockey; + console.log(`Found dockey '${dockey}', updatecount '${record.updatecount}'`); + + const finalPayload = { ...payload, dockey, updatecount: record.updatecount }; + fs.writeFileSync(JSON_FOLDER + "GL_JE-Edit.json", JSON.stringify(finalPayload, null, 2)); // make sure your file name is correct + + await jeApi.update(dockey, finalPayload); + } else { + console.log(`Journal entry docno '${payload.docno}' not found.`); + } + } else { + console.log("The file must contain docno."); + } + } + + // Example: Delete existing journal entry + console.log("\n================= Delete Journal Entry ================="); + if (await confirm("Do you want to delete a journal entry?")) { + const docno = await ask("Enter docno to delete: "); + const existing = await jeApi.get_single(docno.trim()); + if (existing?.data?.length > 0) { + const dockey = existing.data[0].dockey; + console.log(`--- Deleting journal entry '${docno}' ---`); + await jeApi.delete(dockey); + } else { + console.log(`Journal entry '${docno}' not found.`); + } + } + } catch (err) { + console.error("Error:", err.message); + } finally { + console.log("--- End of the Script ---"); + rl.close(); + } +} + +// Run script only if executed directly +import { fileURLToPath } from "url"; +import path from "path"; +const currentFile = fileURLToPath(import.meta.url); +const entryFile = path.resolve(process.argv[1]); + +if (currentFile === entryFile) { + GL_Journal(); +} + +``` +
+ +### Stock Item + +
+ Stock Item - Get List, Add, Update & Delete Function - click to expand + +```js +// Updated on 04 Oct 2025 +import { sendRequest } from "./api/APICommon.js"; // base client +import fs from "fs"; +import readline from "readline"; + +/** + * Pretty-print JSON responses for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} records:`); + data.items.forEach((item, idx) => { + console.log(`[${idx + 1}] code= ${item.code}, dockey= ${item.dockey}, desc= ${item.description}, stockgroup= ${item.stockgroup}`); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log(`[${idx + 1}] code= ${item.code}, dockey= ${item.dockey}, desc= ${item.description}, stockgroup= ${item.stockgroup}`); + }); + } else if (typeof data === "object") { + console.log("Single record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class StockItemApi { + constructor() { + this.basePath = "/stockitem"; // base path + } + + /** + * Get stock item list + */ + async get_list(offset = 0, limit = 10) { + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching stock item list ---"); + const data = await sendRequest("GET", this.basePath, null, query); + + if (data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } + + /** + * Get a single stock item by code + */ + async get_single(code) { + const query = `code=${encodeURIComponent(code)}`; + console.log(`\n--- Fetching single stock item '${code}' ---`); + try { + const data = await sendRequest("GET", this.basePath, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to fetch stock item '${code}':`, err.message); + throw err; + } + } + + /** + * Create new stock item + */ + async create(payload) { + console.log("\n--- Creating new stock item ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + console.log("Stock item created successfully."); + return data; + } catch (err) { + console.error("Failed to create stock item:", err.response?.data || err.message); + throw err; + } + } + + /** + * Update existing stock item + */ + async update(dockey, payload) { + if (!dockey) throw new Error("Dockey required for update"); + console.log(`\n--- Updating stock item dockey: ${dockey} ---`); + + const finalPayload = { ...payload, dockey }; + const path = `${this.basePath}/${encodeURIComponent(dockey)}`; + + try { + const data = await sendRequest("PUT", path, finalPayload); + debugPrintJson(data); + console.log("Stock item updated successfully."); + return data; + } catch (err) { + console.error(`Failed to update stock item '${dockey}':`, err.response?.data || err.message); + throw err; + } + } + + /** + * Delete stock item by code + */ + async delete(dockey) { + const path = `${this.basePath}/${encodeURIComponent(dockey)}`; + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + console.log("Stock item deleted successfully."); + return data; + } catch (err) { + console.error(`Failed to delete stock item '${dockey}':`, err.response?.data || err.message); + throw err; + } + } +} + +// ========== Runner ========== + +const itemApi = new StockItemApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, if same path as node.js, leave it blank + +// Readline interface +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * + * Helper to ask question and return Promise + */ +function ask(question) { + return new Promise(resolve => rl.question(question, resolve)); +} + +async function confirm(message) { + const ans = (await ask(`${message} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + const file = fs.readFileSync(filename, "utf8"); + return JSON.parse(file); + } catch (err) { + console.error(`Failed to read ${filename}:`, err.message); + return null; + } +} + +async function ST_Item() { + try { + // List stock items + console.log("\n================= Stock Item List ================="); + if (await confirm("Proceed to fetch stock item list?")) { + const list = await itemApi.get_list(); + console.table(JSON.stringify(list, null, 2)); + } + + // Single stock item + console.log("\n================= Single Stock Item ================="); + if (await confirm("Do you want to fetch a single stock item?")) { + const code = await ask("Enter stock item code: "); + const item = await itemApi.get_single(code.trim()); + console.log(`\n--- Fetching stock item code '${code}' ---`); + console.table(JSON.stringify(item, null, 2)); + } + + // Create stock item + console.log("\n================= Create New Stock Item ================="); + if (await confirm("Do you want to create a new stock item?")) { + const payload = loadJson(JSON_FOLDER + "ST_Item-New.json"); // Make sure your file name is correct + if (payload) { + await itemApi.create(payload); + } else { + console.log("Skipped create stock item (no valid JSON)."); + } + } + + // Edit stock item + console.log("\n================= Edit Stock Item ================="); + if (await confirm("Do you want to edit a stock item?")) { + const payload = loadJson(JSON_FOLDER + "ST_Item-Edit.json"); + if (!payload?.code) { + console.log("The file must contain stock item code."); + } else { + const code = payload.code.trim(); + console.log(`\n--- Looking for stock item code '${code}' ---`); + + // Fetch existing record by code + const existing = await itemApi.get_single(code); + + // Normalize record extraction + const record = + (existing && existing.data && existing.data[0]) || + (existing && existing.items && existing.items[0]) || + existing; + + if (!record) { + console.log(`Stock Item Code '${code}' not found.`); + } else { + const dockey = record.dockey; + + const finalPayload = { ...record, ...payload, dockey}; + + fs.writeFileSync( + JSON_FOLDER + "ST_Item-Edit.json", + JSON.stringify(finalPayload, null, 2) + ); + + await itemApi.update(dockey, finalPayload); + } + } + } + + // Delete stock item + console.log("\n================= Delete Stock Item ================="); + if (await confirm("Do you want to delete a stock item?")) { + const code = await ask("Enter stock item code to delete: "); + if (code) { + console.log(`--- Deleting stock item '${code}' ---`); + const existing = await itemApi.get_single(code.trim()); + + const record = + (existing && existing.data && existing.data[0]) || + (existing && existing.items && existing.items[0]) || + existing; + + if (!record) { + console.log(`Stock Item Code '${code}' not found.`); + } else { + const dockey = record.dockey; + await itemApi.delete(dockey); + } + } + } + } catch (err) { + console.error("Error:", err.message); + } finally { + console.log("--- End of the Script ---"); + rl.close(); + } +} + +import { fileURLToPath } from "url"; +import path from "path"; + +const currentFile = fileURLToPath(import.meta.url); +const entryFile = path.resolve(process.argv[1]); + +if (currentFile === entryFile) { + ST_Item(); +} + +``` +
+ +### Stock Received + +
+ Stock Received - Get List, Add, Update & Delete Function - click to expand + +```js +// Updated on 04 Oct 2025 Print PDF not ready yet +import { sendRequest } from "./api/APICommon.js"; // base client +import fs from "fs"; +import readline from "readline"; + +/** + * Pretty-print JSON responses for debugging + */ +function debugPrintJson(data) { + if (!data) { + console.log("No data returned."); + return; + } + + if (Array.isArray(data.items)) { + console.log(`Found ${data.items.length} records:`); + data.items.forEach((item, idx) => { + console.log( + `[${idx + 1}] docno= ${item.docno}, dockey= ${item.dockey}, amount= ${item.docamt}` + ); + }); + } else if (Array.isArray(data.data)) { + console.log(`Found ${data.data.length} record(s):`); + data.data.forEach((item, idx) => { + console.log( + `[${idx + 1}] docno= ${item.docno}, dockey= ${item.dockey}, amount= ${item.docamt}` + ); + }); + } else if (typeof data === "object") { + console.log("Single record:"); + Object.entries(data).forEach(([k, v]) => { + console.log(` ${k}: ${JSON.stringify(v)}`); + }); + } else { + console.log("Raw:", data); + } +} + +export class StockReceivedApi { + constructor() { + this.basePath = "/stockreceived"; // base path + } + + /** + * Get stock received list with pagination (default: offset=0, limit=5) + */ + async get_list(offset = 0, limit = 5) { + const query = `offset=${offset}&limit=${limit}`; + console.log("\n--- Fetching stock received list (offset = 0, limit = 5)---"); + const data = await sendRequest("GET", this.basePath, null, query); + + // Force limit client-side if API ignore + if (data && Array.isArray(data.data)) { + data.data = data.data.slice(offset, offset + limit); + } + + debugPrintJson(data); + return data; + } + + /** + * Get a single stock received by docno + */ + async get_single(docno) { + const query = `docno=${encodeURIComponent(docno)}`; + console.log(`\n--- Fetching stock received '${docno}' ---`); + try { + const data = await sendRequest("GET", this.basePath, null, query); + debugPrintJson(data); + return data; + } catch (err) { + console.error(`Failed to fetch stock received '${docno}':`, err.response?.data || err.message); + throw err; + } + } + + /** + * Print a stock received as PDF + * + * Args: + * docno: document number of the stock received + * reportName: name of the report want to be print (E.g. Stock Received - Actual cost) + * savePath: output folder (E.g. ./PDF) + */ + async print(docno, reportName = "Stock Received - Actual cost", savePath = "./PDF") { + console.log(`\n--- Printing stock received '${docno}' to PDF ---`); + + // Step 1: Find dockey for the given docno + const existing = await this.get_single(docno); + if(!existing || !Array.isArray(existing.data) || existing.data.length === 0) { + throw new Error(`Stock Received '${docno}' not found`); + } + + const record = existing.data[0]; + const dockey = record.dockey; + const path = `${this.basePath}/${dockey}`; + + const pdfData = await sendRequest("GET", path, null, "", { + headers: { "Content-Type": `application/pdf;template=${reportName}`}, + responseType: "arraybuffer", + raw: true, + }); + + const fs = await import("fs"); + const fullSavePath = `${savePath}/Stock_Received_${docno}.pdf`; + fs.mkdirSync(savePath, { recursive: true }); + fs.writeFileSync(fullSavePath, pdfData); + console.log(`PDF saved: ${fullSavePath}`); + } + + /** + * Create stock received + */ + async create(payload) { + console.log("\n--- Creating stock received ---"); + try { + const data = await sendRequest("POST", this.basePath, payload); + debugPrintJson(data); + console.log("Stock received created successfully."); + return data; + } catch (err) { + console.error("Failed to create stock received:", err.response?.data || err.message); + throw err; + } + } + + /** + * Edit existing stock received by dockey + */ + async update(dockey, payload) { + console.log(`\n--- Updating stock received dockey=${dockey} ---`); + try { + // Fetch record to get updatecount + const query = `dockey=${encodeURIComponent(dockey)}`; + const existing = await sendRequest("GET", this.basePath, null, query); + + const record = + (existing.data && existing.data[0]) || + (existing.items && existing.items[0]) || + existing; + + if (!record || typeof record.updatecount === "undefined") { + throw new Error("Updatecount missing. Try fetching via list API with dockey filter."); + } + + const finalPayload = { + ...payload, + updatecount: record.updatecount, + }; + + const path = `${this.basePath}/${dockey}`; + const data = await sendRequest("PUT", path, finalPayload); + debugPrintJson(data); + console.log("Stock received updated successfully."); + return data; + } catch (err) { + console.error(`Failed to update stock received ${dockey}:`, err.response?.data || err.message); + throw err; + } + } + + /** + * Delete stock received + */ + async delete(dockey) { + const path = `${this.basePath}/${dockey}`; + try { + const data = await sendRequest("DELETE", path); + debugPrintJson(data); + console.log("Stock received deleted successfully."); + return data; + } catch (err) { + console.error(`Failed to delete stock received '${dockey}':`, err.response?.data || err.message); + throw err; + } + } +} + +// ========== Runner ========== + +const srApi = new StockReceivedApi(); +const JSON_FOLDER = "./JSON/"; // your json folder file path, if same as node.js, leave it blank + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +/** + * + * Helper to ask question and return Promise + */ +function ask(question) { + return new Promise(resolve => rl.question(question, resolve)); +} + +async function confirm(message) { + const ans = (await ask(`${message} (y/n): `)).toLowerCase(); + return ans === "y" || ans === "yes"; +} + +// Helper to load JSON file +function loadJson(filename) { + try { + const file = fs.readFileSync(filename, "utf8"); + return JSON.parse(file); + } catch (err) { + console.error(`Failed to read ${filename}:`, err.message); + return null; + } +} + +async function ST_Received() { + try { + // Example: Get stock recieved list + console.log("\n================= Stock Received List ================="); + if (await confirm("Proceed to fetch stock received list?")) { + const list = await srApi.get_list(); + console.table(JSON.stringify(list, null, 2)); + } + + // Example: Get single stock received + console.log("\n================= Single Stock Received ================="); + if (await confirm("Do you want to fetch a single stock received?")) { + const docno = await ask("Enter docno: "); + const list = await srApi.get_single(docno.trim()); + console.table(JSON.stringify(list, null, 2)); + } + + /** + * Example: Print stock received PDF + console.log("\n================= Print Stock Received ================="); + if(await confirm("Do you want to print a stock received to PDF?")) { + const docno = await ask("Enter docno to print: "); + await srApi.print(docno.trim()); + } + */ + + // Example: Create new stock received + console.log("\n================= Create Stock Received ================="); + if (await confirm("Do you want to create new stock received?")) { + const payload = loadJson(JSON_FOLDER + "ST_RC-New.json"); // make sure your file name is correct + if (payload) await srApi.create(payload); + } + + // Example: Edit existing stock received + console.log("\n================= Edit Stock Received ================="); + if (await confirm("Do you want to edit a stock received?")) { + const payload = loadJson(JSON_FOLDER + "ST_RC-Edit.json"); // make sure your file name is correct + if (payload?.docno) { + const existing = await srApi.get_single(payload.docno.trim()); + if (existing?.data?.length > 0) { + const record = existing.data[0]; + const dockey = record.dockey; + + console.log(`Found dockey '${dockey}', updatecount '${record.updatecount}'`); + + const finalPayload = { ...payload, dockey, updatecount: record.updatecount }; + fs.writeFileSync(JSON_FOLDER + "ST_RC-Edit.json", JSON.stringify(finalPayload, null, 2)); // make sure your file name is correct + + await srApi.update(dockey, finalPayload); + } else { + console.log(`Stock received docno '${payload.docno}' not found.`); + } + } + } + + // Example: Delete existing stock received + console.log("\n================= Delete Stock Received ================="); + if (await confirm("Do you want to delete a stock received?")) { + const docno = await ask("Enter docno to delete: "); + if (docno) { + const existing = await srApi.get_single(docno.trim()); + if (existing?.data?.length > 0) { + const dockey = existing.data[0].dockey; + console.log(`Deleting stock received with dockey=${dockey}`); + await srApi.delete(dockey); + } else { + console.log(`Stock received docno '${docno}' not found.`); + } + } + } + } catch (err) { + console.error("Error:", err.message); + } finally { + console.log("--- End of the Script ---"); + rl.close(); + } +} + +import { fileURLToPath } from "url"; +import path from "path"; + +const currentFile = fileURLToPath(import.meta.url); +const entryFile = path.resolve(process.argv[1]); + +if (currentFile === entryFile) { + ST_Received(); +} + +``` + +
diff --git a/docs/integration/sql-mobile-connect/on-premise-setup.md b/docs/integration/sql-mobile-connect/on-premise-setup.md index 10150766..6e14e8fd 100644 --- a/docs/integration/sql-mobile-connect/on-premise-setup.md +++ b/docs/integration/sql-mobile-connect/on-premise-setup.md @@ -36,11 +36,11 @@ If the provider requests a reason, you can explain that you intend to host a ser 1. On `Logon Screen` > **Click** `⚙️` - ![logon screen setting](../../../static/img/sql-mobile-connect/on-premise-setup/1.png) + ![logon screen setting](../../../static/img/integration/sql-mobile-connect/on-premise-setup/1.png) 2. **Right-Click** on company database > **Select** `Configure Mobile Connect...` - ![configure mobile connect](../../../static/img/sql-mobile-connect/on-premise-setup/2.png) + ![configure mobile connect](../../../static/img/integration/sql-mobile-connect/on-premise-setup/2.png) 3. **Click** on `Install` to install mobile connect service @@ -48,13 +48,13 @@ If the provider requests a reason, you can explain that you intend to host a ser A default host name will be filled in. However, if you would like to use a custom host name, you may edit the default. Note that changing hostname is only available during the initial setup. (Host name should have **at least 8 characters**) ::: - ![install mobile connect](../../../static/img/sql-mobile-connect/on-premise-setup/3.png) + ![install mobile connect](../../../static/img/integration/sql-mobile-connect/on-premise-setup/3.png) ### Step 2 - Start Service After the installation, start the service. Once successful, `Service is running` status will show on screen. -![service running](../../../static/img/sql-mobile-connect/on-premise-setup/4.png) +![service running](../../../static/img/integration/sql-mobile-connect/on-premise-setup/4.png) ### Step 3 - Port Forwarding @@ -63,7 +63,7 @@ Next, we will need to do `Port Forwarding`. :::info[Port Forwarding Information] You can **Click** on `Show Tips` to find all the information for port forwarding configuration. -![show tips](../../../static/img/sql-mobile-connect/on-premise-setup/5.png) +![show tips](../../../static/img/integration/sql-mobile-connect/on-premise-setup/5.png) ::: 1. **Access Router Setting**: Login to the router's administration interface on web browser. @@ -74,7 +74,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding If you are using a firewall or serving the router's web administration interface via a different IP address, this might not work. ::: - ![router gateway](../../../static/img/sql-mobile-connect/on-premise-setup/6.png) + ![router gateway](../../../static/img/integration/sql-mobile-connect/on-premise-setup/6.png) 2. **Navigate to Port Forwarding Section**: Find `Port Forwarding`, `Virtual Service` or similar section in the router's setting. @@ -89,7 +89,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding 5. **Verify**: **Click** on `Test Connection` to test `SQL Mobile Connect` access status. When `✅ OK` status is shown, it means the service is setup successfully. - ![alt text](../../../static/img/sql-mobile-connect/on-premise-setup/7.png) + ![alt text](../../../static/img/integration/sql-mobile-connect/on-premise-setup/7.png) #### Examples of Port Forward @@ -97,7 +97,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding 1. Navigate to `Advanced` > `NAT Forwarding` > `Virtual Servers`, click `Add` to create a new entry. - ![c1200-1](../../../static/img/sql-mobile-connect/on-premise-setup/C1200-1.png) + ![c1200-1](../../../static/img/integration/sql-mobile-connect/on-premise-setup/C1200-1.png) 2. Fill in the details following the [Port Forwarding Information](#step-3---port-forwarding): @@ -109,7 +109,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding |Internal Port|Internal Port| |Protocol|Protocol| - ![c1200-2](../../../static/img/sql-mobile-connect/on-premise-setup/C1200-2.png) + ![c1200-2](../../../static/img/integration/sql-mobile-connect/on-premise-setup/C1200-2.png) 3. Click `OK`. @@ -117,7 +117,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding 1. Navigate to `Advanced` > `NAT Forwarding` > `Port Forwarding`, click `Add` to create a new entry. - ![ax3000-1](../../../static/img/sql-mobile-connect/on-premise-setup/AX3000-1.png) + ![ax3000-1](../../../static/img/integration/sql-mobile-connect/on-premise-setup/AX3000-1.png) 2. Fill in the details following the [Port Forwarding Information](#step-3---port-forwarding): @@ -129,7 +129,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding |Internal Port|Internal Port| |Protocol|Protocol| - ![ax3000-2](../../../static/img/sql-mobile-connect/on-premise-setup/AX3000-2.png) + ![ax3000-2](../../../static/img/integration/sql-mobile-connect/on-premise-setup/AX3000-2.png) 3. Click `Save`. @@ -137,7 +137,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding 1. Navigate to `⚙️` > `Forward Rules` > `IPv4 Port Mapping`, click `New` to create a new entry. - ![HG8145X6-1](../../../static/img/sql-mobile-connect/on-premise-setup/HG8145X6-1.png) + ![HG8145X6-1](../../../static/img/integration/sql-mobile-connect/on-premise-setup/HG8145X6-1.png) 2. Fill in the details following the [Port Forwarding Information](#step-3---port-forwarding): @@ -149,7 +149,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding |Internal port number|Internal Port| |Protocol|Protocol| - ![HG8145X6-2](../../../static/img/sql-mobile-connect/on-premise-setup/HG8145X6-2.png) + ![HG8145X6-2](../../../static/img/integration/sql-mobile-connect/on-premise-setup/HG8145X6-2.png) 3. Click `Apply`. @@ -157,7 +157,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding 1. Navigate to `Basic Setup` > `NAT` > `Port Forwarding`, click `Add Port Forwarding` to create a new entry. - ![SR1041F-1](../../../static/img/sql-mobile-connect/on-premise-setup/SR1041F-1.png) + ![SR1041F-1](../../../static/img/integration/sql-mobile-connect/on-premise-setup/SR1041F-1.png) 2. Fill in the details following the [Port Forwarding Information](#step-3---port-forwarding): @@ -168,7 +168,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding |Local Port Range|Internal Port| |Remote Port Range|External Port| - ![SR1041F-2](../../../static/img/sql-mobile-connect/on-premise-setup/SR1041F-2.png) + ![SR1041F-2](../../../static/img/integration/sql-mobile-connect/on-premise-setup/SR1041F-2.png) 3. Click `Confirm`. @@ -176,7 +176,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding 1. Navigate to `Basic Setup` > `NAT` > `Port Forwarding`, click `Add` to create a new entry. - ![SR120-A-1](../../../static/img/sql-mobile-connect/on-premise-setup/SR120-A-1.png) + ![SR120-A-1](../../../static/img/integration/sql-mobile-connect/on-premise-setup/SR120-A-1.png) 2. Fill in the details following the [Port Forwarding Information](#step-3---port-forwarding): @@ -188,7 +188,7 @@ You can **Click** on `Show Tips` to find all the information for port forwarding |Remote Port Range|External Port| |Comment|Name| - ![SR120-A-2](../../../static/img/sql-mobile-connect/on-premise-setup/SR120-A-2.png) + ![SR120-A-2](../../../static/img/integration/sql-mobile-connect/on-premise-setup/SR120-A-2.png) 3. Click `Confirm`. @@ -200,25 +200,25 @@ Before access to the service, do remember to setup your users. To learn more, fo 1. You can now access `SQL Mobile Connect` by **Clicking** on the globe `🌐` - ![alt text](../../../static/img/sql-mobile-connect/on-premise-setup/8.png) + ![alt text](../../../static/img/integration/sql-mobile-connect/on-premise-setup/8.png) 2. We offer two options for users to access the service: - **Click** on `Copy` (top left) to retrieve the link - **Scan** the `QR Code` with your phone - ![alt text](../../../static/img/sql-mobile-connect/on-premise-setup/9.png) + ![alt text](../../../static/img/integration/sql-mobile-connect/on-premise-setup/9.png) 3. You should see the login page. - ![alt text](../../../static/img/sql-mobile-connect/on-premise-setup/10.png) + ![alt text](../../../static/img/integration/sql-mobile-connect/on-premise-setup/10.png) ## Alternative External Port (2764) If your router does not allow traffic on `port 443`, you can **tick** on `Use Alternative External Port (2764)` to configure mobile connect service to use `port 2764` -![alternative external port 2764](../../../static/img/sql-mobile-connect/on-premise-setup/11.png) +![alternative external port 2764](../../../static/img/integration/sql-mobile-connect/on-premise-setup/11.png) After `Install` and `✅ Service is running` on port 2764. Now you can configure port forwarding on your router with `external port 2764` -![alternative external port 2764](../../../static/img/sql-mobile-connect/on-premise-setup/12.png) +![alternative external port 2764](../../../static/img/integration/sql-mobile-connect/on-premise-setup/12.png) diff --git a/docs/integration/sql-mobile-connect/set-user-view.md b/docs/integration/sql-mobile-connect/set-user-view.md index 4e1718c8..9415a1f5 100644 --- a/docs/integration/sql-mobile-connect/set-user-view.md +++ b/docs/integration/sql-mobile-connect/set-user-view.md @@ -11,7 +11,7 @@ tags: ["SQL Account", "SQL Mobile Connect", "Setup", "User View", "View Template **Step 1**: Go to **Tools** | **DIY** | **Maintain DIY** -![1](../../../static/img/sql-mobile-connect/set-user-view/1.png) +![1](../../../static/img/integration/sql-mobile-connect/set-user-view/1.png) **Step 2**: Switch to **View Template** tab, then click on **Load From File** to select `View Template` to load @@ -21,40 +21,40 @@ You can download this **[View Template - View by Agent (Current User)](https://c This `View Template` will filter document by `Agent`, where `Agent` is match to current login user `Code`. ::: -![2](../../../static/img/sql-mobile-connect/set-user-view/2.png) +![2](../../../static/img/integration/sql-mobile-connect/set-user-view/2.png) **Step 3**: After select a `View Template` file to load, you can select **Load All** or **Custom** -![3](../../../static/img/sql-mobile-connect/set-user-view/3.png) +![3](../../../static/img/integration/sql-mobile-connect/set-user-view/3.png) - **Load All**: All the template will load. - **Custom**: Can select all or some template to load. - ![4](../../../static/img/sql-mobile-connect/set-user-view/4.png) + ![4](../../../static/img/integration/sql-mobile-connect/set-user-view/4.png) Once completed, `Loaded` message will prompt and all `View Template` loaded will show. -![5](../../../static/img/sql-mobile-connect/set-user-view/5.png) +![5](../../../static/img/integration/sql-mobile-connect/set-user-view/5.png) -![6](../../../static/img/sql-mobile-connect/set-user-view/6.png) +![6](../../../static/img/integration/sql-mobile-connect/set-user-view/6.png) **Step 4**: **Right-click** on View Template and click on **User View**. -![7](../../../static/img/sql-mobile-connect/set-user-view/7.png) +![7](../../../static/img/integration/sql-mobile-connect/set-user-view/7.png) **Step 5**: A list of `User` will shown, then **tick** on `User View` column for the `User` that want to apply this View Template and click **Save**. -![8](../../../static/img/sql-mobile-connect/set-user-view/8.png) +![8](../../../static/img/integration/sql-mobile-connect/set-user-view/8.png) Based on the scenario above, `Invoice view by Agent - Current User` View Template is applied to `SALES` user. When `SALES` user login to SQL Account, the user only can view those `Invoice` with `Agent` code equal to `SALES` - Login by **SALES** - ![9](../../../static/img/sql-mobile-connect/set-user-view/9.png) + ![9](../../../static/img/integration/sql-mobile-connect/set-user-view/9.png) - Login by **ADMIN** - ![10](../../../static/img/sql-mobile-connect/set-user-view/10.png) + ![10](../../../static/img/integration/sql-mobile-connect/set-user-view/10.png) ## 2.0 How to Set Customer View by Agent @@ -64,18 +64,18 @@ Go to **Tools** | **DIY** | **Maintain DIY…** | **View Template** Under **Customer** | Open, select **AGENT** Equals **'LIM'** | Save -![1](../../../static/img/sql-mobile-connect/set-customer-view/1.png) +![1](../../../static/img/integration/sql-mobile-connect/set-customer-view/1.png) **Step 2**: Right-click and Select **User View** -![2](../../../static/img/sql-mobile-connect/set-customer-view/2.png) +![2](../../../static/img/integration/sql-mobile-connect/set-customer-view/2.png) **Step 3**: Choose **'LIM'** Under User View -![3](../../../static/img/sql-mobile-connect/set-customer-view/3.png) +![3](../../../static/img/integration/sql-mobile-connect/set-customer-view/3.png) Under Sales Document Listing, only the sales results for Agent **LIM** are visible. -![4](../../../static/img/sql-mobile-connect/set-customer-view/4.png) +![4](../../../static/img/integration/sql-mobile-connect/set-customer-view/4.png) -![5](../../../static/img/sql-mobile-connect/set-customer-view/5.png) \ No newline at end of file +![5](../../../static/img/integration/sql-mobile-connect/set-customer-view/5.png) diff --git a/docs/integration/sql-mobile-connect/use-in-web-view.md b/docs/integration/sql-mobile-connect/use-in-web-view.md index c700b37d..90faa8db 100644 --- a/docs/integration/sql-mobile-connect/use-in-web-view.md +++ b/docs/integration/sql-mobile-connect/use-in-web-view.md @@ -9,27 +9,27 @@ tags: ["SQL Account", "SQL Mobile Connect", "Open in Desktop Browser"] 1. Go to **Tools | Maintain User…** - ![1](../../../static/img/sql-mobile-connect/use-in-web-view/1.png) + ![1](../../../static/img/integration/sql-mobile-connect/use-in-web-view/1.png) 2. Select the desired **User** under **Maintain User**. :::info REQUIRED Make sure the user has registered the **passkey** before proceeding to the next step - ::: + ::: - ![2](../../../static/img/sql-mobile-connect/use-in-web-view/2a.png) + ![2](../../../static/img/integration/sql-mobile-connect/use-in-web-view/2a.png) Then, select the `Passkey` and click on the global icon - ![3](../../../static/img/sql-mobile-connect/use-in-web-view/2b.png) + ![3](../../../static/img/integration/sql-mobile-connect/use-in-web-view/2b.png) 3. Click this icon to copy the link and paste it into your browser. - ![4](../../../static/img/sql-mobile-connect/use-in-web-view/3.png) + ![4](../../../static/img/integration/sql-mobile-connect/use-in-web-view/3.png) 4. Click `Log on with QR Code`, then scan the QR code. - ![5](../../../static/img/sql-mobile-connect/use-in-web-view/4.png) + ![5](../../../static/img/integration/sql-mobile-connect/use-in-web-view/4.png) :::info REQUIRED Make sure to use the device that registered the passkey for this user to scan the QR code. @@ -37,8 +37,8 @@ tags: ["SQL Account", "SQL Mobile Connect", "Open in Desktop Browser"] 5. Proceed by opening it in the browser on your device. Next, select `Authenticate` and approve the access. - ![6](../../../static/img/sql-mobile-connect/use-in-web-view/5.png) + ![6](../../../static/img/integration/sql-mobile-connect/use-in-web-view/5.png) -6. You can now use Mobile Connect in Web View. +6. You can now use Mobile Connect in Web View. - ![7](../../../static/img/sql-mobile-connect/use-in-web-view/6.png) \ No newline at end of file + ![7](../../../static/img/integration/sql-mobile-connect/use-in-web-view/6.png) diff --git a/docs/integration/sql-mobile-connect/user-setup.md b/docs/integration/sql-mobile-connect/user-setup.md index 5f7792ed..8baea1d7 100644 --- a/docs/integration/sql-mobile-connect/user-setup.md +++ b/docs/integration/sql-mobile-connect/user-setup.md @@ -26,7 +26,7 @@ The setup process consists of two main parts: 2. Click **Create New Agent** 3. Fill in the agent details and click **Save** - ![Create New Agent](../../../static/img/sql-mobile-connect/user-setup/1.png) + ![Create New Agent](../../../static/img/integration/sql-mobile-connect/user-setup/1.png) ### Step 2: Create WebApp User @@ -34,19 +34,19 @@ The setup process consists of two main parts: 2. A dialog box will appear showing **"User is created"** 3. Click **OK** to confirm - ![Create WebApp User](../../../static/img/sql-mobile-connect/user-setup/2.png) + ![Create WebApp User](../../../static/img/integration/sql-mobile-connect/user-setup/2.png) ### Step 3: Generate Passkey Registration 1. Click the **+ Button** under the Passkey window - ![Add Passkey](../../../static/img/sql-mobile-connect/user-setup/3.png) + ![Add Passkey](../../../static/img/integration/sql-mobile-connect/user-setup/3.png) 2. A registration screen will appear with: - **Copy Link** button (highlighted in red box) - **QR Code** for mobile scanning - ![Passkey Registration Options](../../../static/img/sql-mobile-connect/user-setup/4.png) + ![Passkey Registration Options](../../../static/img/integration/sql-mobile-connect/user-setup/4.png) 3. Share either the link or QR code with the user for device registration @@ -55,13 +55,13 @@ The setup process consists of two main parts: 1. Enter a descriptive **Nickname** for this passkey 2. Click **OK** to save - ![Rename Passkey](../../../static/img/sql-mobile-connect/user-setup/5.png) + ![Rename Passkey](../../../static/img/integration/sql-mobile-connect/user-setup/5.png) ### Step 5: Verify Setup Completion The new passkey will now appear under your agent, confirming successful setup. -![Passkey Added Successfully](../../../static/img/sql-mobile-connect/user-setup/6.png) +![Passkey Added Successfully](../../../static/img/integration/sql-mobile-connect/user-setup/6.png) --- @@ -74,7 +74,7 @@ Users can access the registration in two ways: - Click the provided link - Scan the QR code with their mobile device -![Access Registration](../../../static/img/sql-mobile-connect/user-setup/7.png) +![Access Registration](../../../static/img/integration/sql-mobile-connect/user-setup/7.png) ### Step 2: Register Passkey @@ -86,7 +86,7 @@ Users can access the registration in two ways: After successful passkey registration, users will see the installation screen: -![Installation Screen](../../../static/img/sql-mobile-connect/user-setup/8.png) +![Installation Screen](../../../static/img/integration/sql-mobile-connect/user-setup/8.png) #### Installation Instructions by Platform @@ -94,7 +94,7 @@ After successful passkey registration, users will see the installation screen: - **Windows**: Click **Install App** - **iOS**: Click **Share** → **Add to Home Screen** -![App Installation](../../../static/img/sql-mobile-connect/user-setup/9.png) +![App Installation](../../../static/img/integration/sql-mobile-connect/user-setup/9.png) ### Step 4: Access the Application @@ -107,12 +107,12 @@ Users can also access the application by: - Copying the provided link (red box) - Scanning the QR code for quick access -![Alternative Access](../../../static/img/sql-mobile-connect/user-setup/10.png) +![Alternative Access](../../../static/img/integration/sql-mobile-connect/user-setup/10.png) ### Step 5: Start Using SQL Mobile Connect -![App Ready](../../../static/img/sql-mobile-connect/user-setup/11.png) -![App Interface](../../../static/img/sql-mobile-connect/user-setup/12.png) +![App Ready](../../../static/img/integration/sql-mobile-connect/user-setup/11.png) +![App Interface](../../../static/img/integration/sql-mobile-connect/user-setup/12.png) The setup is now complete! Users can begin exploring and using the SQL Mobile Connect application. diff --git a/docs/integration/stock-take.md b/docs/integration/stock-take.md deleted file mode 100644 index 35e25358..00000000 --- a/docs/integration/stock-take.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Stock Take App -description: Stock Take application guide -slug: /stock-take-app -tags: ["SQL Account", "Stock"] ---- - -## Prerequisite - -Please make sure the user has a SQL Drive account. For new users, please contact your SQL Service Consultant to register for an account. - -Provide the following user details for registration purposes: - - Customer's Google E-mail - - Customer's Full Name - - Company Name - -:::warning[INFO] -Only one(1) SQL Drive account is needed for each company. - -Users who already have an SQL Drive account that was previously used for SQL Payroll E-Claim may use that account to log in for SQL Account Stock Take. -::: - -## 1. Stock Take Items List Import - -Before following the steps in the subsections below - -### 1. SQL Account Configuration - -1. Go to "**Tools**" > "**Options...**". - -2. On the Options window, click on "**Barcode**" > "**Stock Take**" tab and click on the switch beside "**Stock Take**" label. - -3. On the SQL Drive window prompt, click "**Log in**" button. - -4. Click on "**Log in with Google**" button. - -5. Click on "**Grant access**" button. - -6. On "**Account connected**" display, close SQL Drive window. - -7. A Stock Take Share will be set, and the switch will change from Off to On - -### 2. Stock Take Module Initial Configuration - -1. Go to "**Stock**" -> "**Stock Take...**". - -2. On the Stock Take window, click "**New Job**" button. - -3. On first dialog prompt(Do you want to cancel?), choose "**No**". - -4. On second dialog prompt(Do you want to continue?), choose "**Yes**". - -### 3. Stock Take App Import - -1. On the Stock Take app home page, tap on "Update Items List" button(located to the left of "Update Items List" label). - -2. On "Import Options" page, users can change the device name by tapping on the edit box next to the label "Name:", which is optional. The device name will be displayed on SQL Account to help the user identify which device uploaded stock take result and its content - -3. Tap on "**Network File Transfer**" button. - - * For devices without a Stock Take share profile set, a QR code scanner will be shown. Proceed to scan the QR shown in SQL Account Stock Take window. - - * For devices with stock take share profile set, the import process will begin immediately. - -## 2. Sync Stock Take Result To SQL Account - -Sync stock take result from Stock Take app to SQL Account to perform stock adjustment on SQL Account - -1. Stock Take App Upload - - 1. On the Stock Take mode page, tap on "**More Options**" button. - - 2. Tap on "**Export/Upload**" button. - - 3. Choose option "**SQL Stock Take Import File**". - - 4. Tap on the "**Upload**" button. - -2. SQL Account Sync - - 1. Go to "**Stock**" -> "**Stock Take...**". - - 2. On Stock Take window, click on "**Refresh**" button. - -## 3. Reset Connection Profile - -User may want to reset Stock Take share profile on Stock Take app as user would want to switch to different Stock Take share profile. - -:::note -Stock Take share profile refers to one(1) company only -::: - -Resetting company profile will require user to scan QR code on SQL Acoount Stock Take window and update items list. To reset Stock Take share profile: - -1. On Stock Take app home page, tap on the "**Update Items List**" button (which is located to the left of "Update items List" label). - -2. On "**Import Options**" page, tap on the "**Reset Connection Profile**" button (which is located to the left of "Reset Connection Profile" label). - -3. When prompted to proceed with resetting the connection profile, tap on the button "**Yes**" to continue. - -4. Once done, tap on the "**Network File Transfer**" to add a new Stock Take share profile and update items list (Follow steps in [Stock Take App Import](#3-stock-take-app-import), specifically steps 2 and 3). diff --git a/docs/integration/stoke-take-mobile-app/_category_.json b/docs/integration/stoke-take-mobile-app/_category_.json new file mode 100644 index 00000000..7576e588 --- /dev/null +++ b/docs/integration/stoke-take-mobile-app/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Stoke Take Mobile App", + "position": 9, + "link": { + "type": "generated-index", + "description": "A quick guide on Stoke Take App for SQL Account" + } +} \ No newline at end of file diff --git a/docs/integration/stoke-take-mobile-app/faq.md b/docs/integration/stoke-take-mobile-app/faq.md new file mode 100644 index 00000000..8db6975e --- /dev/null +++ b/docs/integration/stoke-take-mobile-app/faq.md @@ -0,0 +1,19 @@ +--- +sidebar_position: 3 +title: FAQ +description: Stock Take FAQ +slug: /stock-take-mobile-app/faq +tags: ["SQL Account", "Stock","FAQ"] +--- + +## Stock Take + +### How to Reset/Start New Batch/Job of Stock Take? + +In SQL Accounting + + ![1](../../../static/img/integration/stoke-take-mobile-app/faq/stoke-take-faq.png) + +In Stock Take App + + ![2](../../../static/img/integration/stoke-take-mobile-app/faq/stoke-take-faq1.png) diff --git a/docs/integration/stoke-take-mobile-app/stock-take.md b/docs/integration/stoke-take-mobile-app/stock-take.md new file mode 100644 index 00000000..4bee1c6d --- /dev/null +++ b/docs/integration/stoke-take-mobile-app/stock-take.md @@ -0,0 +1,196 @@ +--- +sidebar_position: 1 +id: stock-take +title: Stock Take App +description: Stock Take application guide +slug: /stock-take-mobile-app/stock-take +tags: ["SQL Account", "Stock"] +--- + +## Introduction + +This Function & Mobile App which is use for Stock Take + +### Pros + +01. Able to Stock Take/Count using Smartphone +02. Sync to SQL Accounting Stock Adjustment wireless +03. Able to Check Price + +### Cons + +01. Unable to Sync if no WiFi or WiFi signal is very Weak +02. Drain Mobile Phone battery if keep On the + +## Requirement + + - Internet Access + - SQL Accounting Version 781 & above + - Smart Phone requirement + :::info + - 4 GB RAM & above + - 32 GB Storage (more Item more storage required) + - Android 6 (Marshmallow) and above + - Permission - Camera & Storage + - IOS 11 and above + ::: + - Barcode for Each Item Code + +## Installation + +- [stock take app - website](https://www.sql.com.my/sqlstocktake/) +- [stock take - huawei app gallery](https://appgallery.huawei.com/#/app/C102639285) + +## Prerequisite + +Please make sure the user has a SQL Drive account. For new users, please contact your SQL Service Consultant to register for an account. + +Provide the following user details for registration purposes: + - Customer's Google E-mail + - Customer's Full Name + - Company Name + +:::warning[INFO] +Only one(1) SQL Drive account is needed for each company. + +Users who already have an SQL Drive account that was previously used for SQL Payroll E-Claim may use that account to log in for SQL Account Stock Take. +::: + +## Setup + +### SQL Accounting + +1. Stock | **Stock Take** + + ![1](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take.png) + +2. Click **Allow Access** if Windows Prompt the above warning + + ![2](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take1.png) + +Leave this Screen Open as It will auto sync & update + +#### After Done Scanning + +1. Click Calculate Stock Take (System will compare with Month End As At Posted) + + ![3](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take2.png) + +2. Click **Post Stock Adjustments** + +| Button | Description | +|--------------------------|-------------| +| **New Job** | • To Start New Stock Take | +| **Load From File** | • To Load file exported from Stock Take (in Zip)
• For Offline/No WiFi User use only
• Normally is in Zip Format | +| **Export Stock List** | • To Export the Stock List for Stock Take
• For Offline/No WiFi User use only
• Normally is in Zip Format | +| **Calculate Stock Take** | • To Calculate Stock Take | +| **Export To CSV** | • To Export Grid Result to CSV | +| **Post Stock Adjustments** | • To Post Grid Result to Stock Adjustment | + +### Stoke Take(Mobile App) + + ![4](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take3.png) + ![12](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take4.png) + +1. When to Sync Data + + ![5](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take5.png) + +2. After Done Sycn, Click Stock Take + + ![13](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take6.png) + ![6](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take7.png) + +3. Click Scan to begin Scan + + ![7](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take8.png) + +4. If the Item Code Had More then 1 UOM it will prompt as Above. +5. Select the UOM & Click Select to Confirm + + ![8](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take9.png) + +6. Here User can Adjust the Quantity Field (Optional) +7. Click Stop to End Scanning + + ![9](../../../static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take10.png) + +## Stock Take Items List Import + +Before following the steps in the subsections below + +### SQL Account Configuration + +1. Go to "**Tools**" > "**Options...**". + +2. On the Options window, click on "**Barcode**" > "**Stock Take**" tab and click on the switch beside "**Stock Take**" label. + +3. On the SQL Drive window prompt, click "**Log in**" button. + +4. Click on "**Log in with Google**" button. + +5. Click on "**Grant access**" button. + +6. On "**Account connected**" display, close SQL Drive window. + +7. A Stock Take Share will be set, and the switch will change from Off to On + +### Stock Take Module Initial Configuration + +1. Go to "**Stock**" -> "**Stock Take...**". + +2. On the Stock Take window, click "**New Job**" button. + +3. On first dialog prompt(Do you want to cancel?), choose "**No**". + +4. On second dialog prompt(Do you want to continue?), choose "**Yes**". + +### Stock Take App Import + +1. On the Stock Take app home page, tap on "Update Items List" button(located to the left of "Update Items List" label). + +2. On "Import Options" page, users can change the device name by tapping on the edit box next to the label "Name:", which is optional. The device name will be displayed on SQL Account to help the user identify which device uploaded stock take result and its content + +3. Tap on "**Network File Transfer**" button. + + - For devices without a Stock Take share profile set, a QR code scanner will be shown. Proceed to scan the QR shown in SQL Account Stock Take window. + + - For devices with stock take share profile set, the import process will begin immediately. + +## Sync Stock Take Result To SQL Account + +Sync stock take result from Stock Take app to SQL Account to perform stock adjustment on SQL Account + +1. Stock Take App Upload + + 1. On the Stock Take mode page, tap on "**More Options**" button. + + 2. Tap on "**Export/Upload**" button. + + 3. Choose option "**SQL Stock Take Import File**". + + 4. Tap on the "**Upload**" button. + +2. SQL Account Sync + + 1. Go to "**Stock**" -> "**Stock Take...**". + + 2. On Stock Take window, click on "**Refresh**" button. + +## Reset Connection Profile + +User may want to reset Stock Take share profile on Stock Take app as user would want to switch to different Stock Take share profile. + +:::note +Stock Take share profile refers to one(1) company only +::: + +Resetting company profile will require user to scan QR code on SQL Acoount Stock Take window and update items list. To reset Stock Take share profile: + +1. On Stock Take app home page, tap on the "**Update Items List**" button (which is located to the left of "Update items List" label). + +2. On "**Import Options**" page, tap on the "**Reset Connection Profile**" button (which is located to the left of "Reset Connection Profile" label). + +3. When prompted to proceed with resetting the connection profile, tap on the button "**Yes**" to continue. + +4. Once done, tap on the "**Network File Transfer**" to add a new Stock Take share profile and update items list (Follow steps in [stock take app import](#stock-take-app-import), specifically steps 2 and 3). diff --git a/docs/intro.md b/docs/intro.md index dc1b527e..5af310b1 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -11,7 +11,7 @@ slug: / SQL Account is a centralize system to assist the business (or departments) to record and process daily documents from sales, purchase, stock, and bank. It is also a tool for SST reporting. -![1](../static/img/getting-started/user-guide/1.png) +![1](/img/introduction/1.png) 1. **General Ledger**, a general ledger accounting where records all transactions posted from various journal (eg. general, sales, purchase, bank), an entry for general journal and expenses payment (eg. sales person claims, water and electricity expenses). Bank reconciliation, cash flow statement and financial reports are available in this module. diff --git a/docs/miscellaneous/acc-XLS-MDB-import.md b/docs/miscellaneous/acc-XLS-MDB-import.md new file mode 100644 index 00000000..6fae5d51 --- /dev/null +++ b/docs/miscellaneous/acc-XLS-MDB-import.md @@ -0,0 +1,1603 @@ +--- +sidebar_position: 16 +id: acc-xls-mdb-import +title: Excel Import Guide +description: A quick guide on Excel Import Program for SQL Account +slug: /miscellaneous/acc-xls-mdb-import +tags: ["SQL Account", "Excel", "Import"] +--- + +:::info[Download] +Click [here](https://download.sql.com.my/customer/Fairy/SQLAccXLSnMDBImp-setup.exe) to download the XLS n MDB import utility program. +::: + +Whether you are setting up **SQL Account** for the first time or need to migrate financial data from other systems using **Microsoft Excel (XLS)** or **CSV** files, this page provides a straightforward solution. + +Here, you'll find a detailed guide on how to effectively and effortlessly import your data into your **SQL Accounting** system. + +**You can import:** + +- Master file (e.g. Debtors, Creditors & Item List) +- Transactions +- Nestle Transactions +- Yeos Transactions +- Coca-Cola Transactions +- GSK Transactions + +**Pros** + +- Easy to generate +- About 80% of modules is covered. +- Support GST/SST/E-Invoicing +- FREE import for Master file. +- Support Schedule Auto Download from Simple FTP - Only available in Version 5.10.6.32 & above +- Support Schedule Auto Import for Excel/CSV/TXT - Only available in Version 5.10.6.32 & above +- Support import CSV/TXT(`Bar(|)`,`Comma(,)`,`Semi Comma(;)`,`Tilde(~)`) Format - Only available in Version 5.10.9 & above +- Support import Json Format - Only available in Version 5.11.10.43 & above +- No rows limit (but recommended max 500 rows per file as more records, more hard & time consumption to check if have error) + +**Cons** + +- Is Batch update. +- There is a cost for End User and Dealer for Transaction import. Only Free if each file record less then 100 rows. +- Unable to import Serial Number + +**Pros (UE Only) - (Deprecated)** + +- Easy to generate +- Able update Stock Information. +- Can do New/Insert/Edit/Update action + +**Cons (UE Only) - (Deprecated)** + +- There is a cost for End User and Dealer. Only Free if each file record less then 100. +- Only Cover Maintain Stock Item. + +## Requirement + +- Firebird Server +- SQL Accounting +- Microsoft Excel or Access + +## Example Template + +- Updated 16 Jun 2025 +- [Example Template-SQLAcc-ImportExcel](https://docs.google.com/spreadsheets/d/1TcFVqH1VCJ5SjHAt2VCHIeTTcQVUjtIBxLaZGGM0E5k/edit#gid=1780239004) +- [Sample output](https://download.sql.com.my/customer/Fairy/Example-CSV.zip) + +:::info + +**Tips for Programmer to Export Transaction** +01. Use INNER JOIN SQL to join the Master & Detail table +02. Export to Excel, txt or CSV file + +::: + +:::info + +**Tips for Yeos Transaction Import** +User might had to adjust some data in the excel file +01. Remove the 1st row(i.e 1st row must be a title of the column) +02. PRD Qty & Gross AMT column need * -1 (only for Credit Note) or can use + [My Excel for Credit Note/Payment is in Negative Value, can it be import?](Http://google.com) + +**Tips for Coca-Cola Transaction Import** +User might had to at Coca-Cola system before export +01. Group the ARTNUM +02. Net the AMTSUBJECTTOGST & GSTAMT column +It might had rounding issue after import +(i.e. excel not match with Tax Invoice Issue from coca-cola) + +**Tips for GSK Transaction Import** +01. User might had to convert the file to excel file +02. Export File by Document Type (i.e. Invoice 1 file & Credit Note 1 file) +::: + +## Things to Consider + +- Float, Currency & Integer type Must not had , (comma) or Currency Symbol & Default Value is 0 not empty +- No Formula in the cell +- No Merge cell is use +- No Hidden column +- Avoid use Unicode Character for Row 1 (Header) +- Date Format should be in dd/mm/yyyy (entry time in Excel as dd/mm/yyyy) - Updated 14 Nov 2013 + + ![1](../../static/img/miscellaneous/XLS-MDB/toc1.png) + +- Below is the column type can/can't import + +![2](../../static/img/miscellaneous/XLS-MDB/toc2.png) + +- Try just use Alphanumeric of the **Worksheet Name** + +![3](../../static/img/miscellaneous/XLS-MDB/toc3.png) + +- Make sure the **Key of Records** is properly Sorted + +![4](../../static/img/miscellaneous/XLS-MDB/toc4.png) + +- Special Character (for csv or txt output only) + +| User Input | Text Output | +|-----------------------|----------------------------------| +| SalesOrder | `SalesOrder` | +| Sales Order 5' 12" | `"Sales Order 5' 12""` | +| SalesOrder6'13" | `"SalesOrder6'13""` | +| SalesOrder6" x 13" | `"SalesOrder6"" x 13""` | +| Sales Order | `"Sales Order"` | +| Sales Order 5' 12 | `"Sales Order 5' 12"` | +| Sales Order 12" | `"Sales Order 12""` | +| Sales;Order 12 | `"Sales;Order 12"` | + +:::info +For Easy Export you can use " for all output value +Eg `AL`,`161924123243970563` +::: + +## Import Program + +- Version (5.19.19.104) - 02 Aug 2025 +- Version (4.5.4.37) - 01 Jun 2022 (UE Only) - (Deprecated) +- Evaluation Limit : 100 rows Records per file (Except Master File with not limit) +- [SQLAccXLSnMDBImp-setup.exe](https://download.sql.com.my/customer/Fairy/SQLAccXLSnMDBImp-setup.exe) +- MD5 : `A03B8F018B92822D4D3CC59680D9B812` + +## Steps + +### Master Data + +Below is example for import Stock Item... + +01. Click 1. Get File button +02. Select the File type (eg Microsoft Excel) +![5](../../static/img/miscellaneous/XLS-MDB/import-master-step2.png) + +03. Select the File file wanted to import +04. Click **Open** +![6](../../static/img/miscellaneous/XLS-MDB/import-master-step3.png) + +05. Click the combo box (Circle in Red) to select the Worksheet/Table in the file +06. Click **2. Get Data** button to load the file. +07. Drag the available column at the **SourceField** & drop to the **TargetField**. +08. For Detail Part (Circle in Green) (Eg Click on the UOM tab). +09. Click **New** button. +10. Drag the available column at the **SourceField** & drop to the **TargetField** at detail part. +11. Click **Save** after Done (only for Detail Part). +12. Click **Post To A/c** button if all done mapping. + +:::info +Blue Circle - Is use to let system know Start from which row till End which row to import. +Orange Circle - The Worksheet/Table records. +::: + +## Transaction Data + +Below is example for import Customer Invoice... + +01. Click 1. Get File button +02. Select the File type (eg Microsoft Excel) + + ![7](../../static/img/miscellaneous/XLS-MDB/import-trans-data-step2.png) + +03. Select the File file wanted to import +04. Click Open + + ![8](../../static/img/miscellaneous/XLS-MDB/import-trans-data-step4.png) + +05. Click the combo box (Icon 5) to select the Worksheet/Table in the file +06. Click 2. Get Data button to load the file. +07. Tick the Is Opening Transactions to import opening balance (Available for AR & AP Module Only). +08. Drag the available column at the SourceField & drop to the TargetField. +09. Click 3. Verify button. +10. Click 4. Post To A/c button if confirm all data is Ok. + +:::info +Do you realise there is an arrow near the **Verify** button? +In the arrow there is an Option **A.Load Setting...,** this to load previously mapped fields +::: + +## Transactions Data - Get File 3 + +- This Option only for Excel +- Only available in Version 4.6.3.19 & above + +01. Click arrow at the 1. Get File button + ![9](../../static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step1.png) + +02. Select Get File 3... & system will prompt 2 dialog like below + ![10](../../static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step2.png) + +03. Select the Excel Header File. + ![11](../../static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step3.png) + +04. Select the Excel Detail File. + ![12](../../static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step4.png) + +05. Click the combo box to select the Worksheet/Table for each Header & Detail file +06. Click the combo box to select the Key Field to link both Header & Detail file +07. Click **4. Get Data** button + ![13](../../static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step7.png) + +08. Enter the Merge File name. +09. Click Save button. + +## Options + +- Only available in Version 4.3.2.14 & above + +### Check Duplicate Records + +Menu: Tools | Check Duplicate Records... + +This Function is to check the duplicate records for the selected file +01. Follow from Step [1 to 6](#transaction-data) as above. + ![14](../../static/img/miscellaneous/XLS-MDB/check-dup-rec.png) +02. Tick the Column(s) to Group +03. Click 3. Verify... button + ![15](../../static/img/miscellaneous/XLS-MDB/check-dup-rec-step8.png) + +### Split Memo to Columns + +Menu: Tools | Split Memo to Columns... + +This option is to Split the memo (Data more then 1 row in the cell) into individual Columns. +01. Follow from Step [1 to 6](#transaction-data) as above. + ![16](../../static/img/miscellaneous/XLS-MDB/split-memo.png) +02. Set Number of Column(s) to split (Default is 4). +03. Select the Column to be Split +04. Click **5. Split** button. + ![17](../../static/img/miscellaneous/XLS-MDB/split-memo-step9.png) +05. Scroll to the right. Highlight in Yellow is the newly Columns Created. +06. Click 6. Export Excel(*.xls) to export out the Result. + +### Split String to Columns + +Menu: Tools | Split String to Columns... + +This option is to Split the Long String into individual Columns (Max. 60 Character each Column). + +- Only available in Version 5.10.10.42 & above + +01. Follow from Step [1 to 6](#transaction-data) as above. + ![18](../../static/img/miscellaneous/XLS-MDB/split-string.png) +02. Set Number of Column(s) to split (Default is 4). +03. Select the Column to be Split +04. Click 5. Split button. + ![19](../../static/img/miscellaneous/XLS-MDB/split-string-step9.png) +05. Scroll to the right. Highlight in Yellow is the newly Columns Created. +06. Click 6. Export Excel(*.xls) to export out the Result. + +### Convert Rows to Columns + +Menu: Tools | Convert Rows to Columns... + +Only available in Version 4.3.2.15 & above +01. Follow from Step [1 to 6](#transaction-data) as above. + ![20](../../static/img/miscellaneous/XLS-MDB/split-rows.png) +02. Set Number of Column(s) to split (Default is 4). +03. Select the Column to be Convert +04. Click 5. Convert button. + ![21](../../static/img/miscellaneous/XLS-MDB/split-rows-step9.png) +05. Scroll to the right. Highlight in Yellow is the newly Columns Created. +06. Click 6. Export Excel(*.xls) to export out the Result. + +:::info +System will use +The 1st column in excel as a Key of Grouping. +The empty row as "Reset/End of" Record. +::: + +## Auto Import + +- Only available + - in Version 4.9.6.31 & above. + - for Registered import Database. + - in **Firebird Server Setting** (Standalone can't Auto Import) + +- Excel Filename must be **BIZOBJECT.YYYYMMDDHHMMSS.xlsx** eg SL_IV.20190214101508.xlsx +- Must only 1 Sheet in Excel File. +- Must **Manually Import for 1st time** use to make sure is success mapping. - Auto Import base on last mapping import + +### Import Setting + +Menu: File | Auto Import Settings... +![22](../../static/img/miscellaneous/XLS-MDB/import-setting.png) + +01. Select SQL Accounting DCF file +02. Select SQL Accounting Database to import & export +03. Enter the SQL Accounting User Name & Password +04. Select/Tick to Enable Download From FTP (available in Version Build 32 & above) +05. Select/Tick to Enable With Export CSV File (available in Version Build 85 & above) +06. Click Next + + ![23](../../static/img/miscellaneous/XLS-MDB/import-setting-step6.png) + + The following Steps if Download From FTP is Enable/Tick/Selected + +07. Enter the Host/IP Address for FTP +08. Enter the FTP Port No +09. Enter the FTP User Name & Password +10. Enter the FTP Folder to download From +11. Select the Action to Do After Download +12. Click Test Connection... +13. Click Next + + | Action | Description | + |----------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------| + | Delete the file(s) in FTP Folder | Will delete the file(s) after download | + | Move to Archive/YYYYMMDD Folder | Will Auto Create YYYYMMDD & move to this folder after done download
Make sure in the FTP folder had the folder Archive (eg download/Archive) | + | Leave it As It (I will self Manually Delete or Move it) | Do nothing after Download | + +:::info + +The file will download to the Pending Folder which is set at the Last Steps + +::: + + ![24](../../static/img/miscellaneous/XLS-MDB/import-setting-step13.png) + +14. Select the Biz Object Type/Document Type to Import +15. Click Next + + ![25](../../static/img/miscellaneous/XLS-MDB/import-setting-step15.png) + +16. Select the Pending folder where Excel files keep to import to SQL Accounting +17. Select the Done folder to move after done import the Excel file + + | Field | Description | + |------------------------|----------------------------------------------------------------------| + | Include SubFolder File(s) | This option is for User who have More than 1 system | + | Export Log File | To Auto Export out for Log file to the selected folder | + | Last Import Date | Last Import Date and Time. System will auto update | + | Keep Last Log Line | To show last how many line for Log | + +17. Click Next + + ![26](../../static/img/miscellaneous/XLS-MDB/import-setting-step17.png) + +18. Select Export folder +19. Select Last Date To +20. Click + to add +21. Enter Description, SQL Query & Export File Name +22. Click Check for Save + +| Parameter | Description | +|-------------------|-----------------------------------------------------------------------------------------------------------------------| +| Last Date To | Data End Date to Export From SQL Accounting.
System will use this Date + 1
Eg To Export 12 Nov 2018 just set the date as 11 Nov 2018 | +| Text Export... | To manually export selected Record Query | +| Description | Description for the Query | +| SQL Query | A Query to Export Data | +| Export File name | A CSV file name | + +:::info + +- Make sure the SQL Query Statement not so complicated as it might cause slow export. +- The Filename will auto add .YYYYMMDDHHMMSS + +::: + +**Windows Schedule** + +01. Open Windows *Control Panel | Administrative Tools | Task Scheduler* + + ![27](../../static/img/miscellaneous/XLS-MDB/window-sche-step1.png) + +02. Click *Action | Create Basic Task...* + + ![28](../../static/img/miscellaneous/XLS-MDB/window-sche-step2.png) + +03. Enter Task *Name* (eg SQL Excel Export) & Click Next + + ![29](../../static/img/miscellaneous/XLS-MDB/window-sche-step3.png) + +04. Select Daily & Click Next + + ![30](../../static/img/miscellaneous/XLS-MDB/window-sche-step4.png) + +05. Set the *Start Date & Time* to Start + +06. Set 1 for *Recur every* field & Click Next + + ![31](../../static/img/miscellaneous/XLS-MDB/window-sche-step6.png) + +07. Select *Start a program* & Click Next + + ![32](../../static/img/miscellaneous/XLS-MDB/window-sche-step7.png) + +08. Click Browse button & find the SQLAccXLSnMDBImp.exe (Default at *C:\\eStream\\Utilities\\SQLAccXLSnMDBImp*) + +09. Set the Add arguments(optional) as -Auto + +10. Set the Start in(optional) path to the Exe folder (eg. *C:\\eStream\\Utilities\\SQLAccXLSnMDBImp*) & Click Next + + ![33](../../static/img/miscellaneous/XLS-MDB/window-sche-step10.png) + +11. Tick the option *Open the Properties dialog for this task when I click Finish* + +12. Click Finish + + ![34](../../static/img/miscellaneous/XLS-MDB/window-sche-step12.png) + +13. Select the option *Run whether user is logged on or not* + +14. Click *Triggers* tab at top + + ![35](../../static/img/miscellaneous/XLS-MDB/window-sche-step14.png) + +15. Click Edit... button + + ![36](../../static/img/miscellaneous/XLS-MDB/window-sche-step15.png) + +16. Change the time to run + +17. Click OK 2 times + + ![37](../../static/img/miscellaneous/XLS-MDB/window-sche-step17.png) + +18. Enter the window User Name & Password + +19. Click Ok + +## Mini Data Modification Utilities + +This utilities is to help user runtime to modify the data before begin import + +Steps + +01. Follow from **Step 1 to 4** as above + + ![38](../../static/img/miscellaneous/XLS-MDB/data-modify-step1-1.png) + + ![39](../../static/img/miscellaneous/XLS-MDB/data-modify-step1-2.gif) + +02. Select the column to be Modify & Right Click + +03. Select the Option you wanted to modify + +| Option/Function | Description | +| --- | --- | +| \*-1 All Data... | Change the Value from Negative to Positive Value & vise versa | +| Convert YYYYMMDD to DD/MM/YYYY... | Change the Value Date format from YYYYMMDD to DD/MM/YYYY | +| Truncate String... | Reduce the Value field size to specific field size | +| Copy Cell Value... | Copy the Selected row Cell Value | +| Remove Comma... | Remove the , | +| Remove All Positive Value Data... | Delete all Value which is More then 0 | +| Remove All Negative Value Data... | Delete all Value which is Less then 0 | +| Remove Others Characters... | Delete any characters given in the selected Column | + +## Video + +- [Import Excel - Stock](https://www.youtube.com/watch?v=i-tBbE2Kh4o) +- [Import Excel - Maintain Customer](https://www.youtube.com/watch?v=r2AXy9VJiUQ) +- [Import Excel - GL Account](https://www.youtube.com/watch?v=-kfqNlVP0o4) +- [Import Excel - Transactions](https://www.youtube.com/watch?v=UOo_ztOvavk) + +## faq + +1. [Why the system take so long to Get Data from excel where in excel just few records?](#why-the-system-take-so-long-to-get-data-from-excel-where-in-excel-just-few-records) +2. [Prompt Error external table is not in the expected format when try Get Data from Excel.](#prompt-error-external-table-is-not-in-the-expected-format-when-try-get-data-from-excel) +3. [My excel date format is in YYYYMMDD format, how I convert it to dd/MM/yyyy?](#my-excel-date-format-is-in-yyyymmdd-format-how-i-convert-it-to-ddmmyyyy) +4. [My excel date format is in dd-mmm-yyyy with time format, how I convert it to dd/MM/yyyy?](#my-excel-date-format-is-in-dd-mmm-yyyy-with-time-format-how-i-convert-it-to-ddmmyyyy) +5. [Can I import without Tax Amount (i.e. SQL Account auto Calculate the Tax Amount)?](#can-i-import-without-tax-amount-ie-sql-account-auto-calculate-the-tax-amount) +6. [Why My Excel data shown as eg 5% but once I Get File become 0.05?](#why-my-excel-data-shown-as-eg-5-but-once-i-get-file-become-005) +7. [How to add file link in the Attachments Fields?](#how-to-add-file-link-in-the-attachments-fields) +8. [My Excel for Credit Note/Payment is in Negative Value, can it be import?](#my-excel-for-credit-notepayment-is-in-negative-value-can-it-be-import) +9. [In My Excel Only had SSM or GST No. for Customer/Supplier can it be import?](#in-my-excel-only-had-ssm-or-gst-no-for-customersupplier-can-it-be-import) +10. [What is the Company Code Search Sequence?](#what-is-the-company-code-search-sequence) +11. [Can system Auto Set Tax code if my Excel don't had tax code column?](#can-system-auto-set-tax-code-if-my-excel-dont-had-tax-code-column) +12. [Prompt "Error Unexpected error from external database driver (1)" when Get file from excel](#prompt-error-unexpected-error-from-external-database-driver-1-when-get-file-from-excel) +13. [Prompt "Provider cannot be found. It may not be properly installed" when Get file from excel](#prompt-provider-cannot-be-found-it-may-not-be-properly-installed-when-get-file-from-excel) +14. [My excel String size is longer then SQL, how I can reduce it?](#my-excel-string-size-is-longer-then-sql-how-i-can-reduce-it) +15. [My excel Don't had account code if got ItemCode can it be import?](#my-excel-dont-had-account-code-if-got-itemcode-can-it-be-import) +16. [My excel only had Barcode can it be import?](#my-excel-only-had-barcode-can-it-be-import) +17. [What is the Item Code Search Sequence?](#what-is-the-item-code-search-sequence) +18. [Why it keep only load lst 100 records even I had registered?](#why-it-keep-only-load-lst-100-records-even-i-had-registered) +19. [My CSV data is 00123 but after get data become 123 (missing 00)?](#my-csv-data-is-00123-but-after-get-data-become-123-missing-00) +20. [What is the Proper Steps to Import BOM?](#what-is-the-proper-steps-to-import-bom) +21. [Can I Import Payment/Credit Note without Knock off Information?](#can-i-import-paymentcredit-note-without-knock-off-information) +22. [Why after verify all detail Status shown ok but Header Still untick?](#why-after-verify-all-detail-status-shown-ok-but-header-still-untick) +23. [Why After Import to the Note/Attachment/Description3 data is truncated to 286 characters?](#why-after-import-to-the-noteattachmentdescription3-data-is-truncated-to-286-characters) +24. [Prompt "Access violation at address xxxxxx in module...." when Get file from excel](#prompt-access-violation-at-address-xxxxxx-in-module-when-get-file-from-excel) +25. [How to prevent Import Price Tag with empty row?](#how-to-prevent-import-price-tag-with-empty-row) +26. [How to convert the cell value so I can sum using formula in excel?](#how-to-convert-the-cell-value-so-i-can-sum-using-formula-in-excel) +27. [Can I Reimport for Same Transactions?](#can-i-reimport-for-same-transactions) +28. [What is alternative for FTP?](#what-is-alternative-for-ftp) +29. [How to add Excel Import Shortcut in SQL Accounting?](#how-to-add-excel-import-shortcut-in-sql-accounting) +30. [How to enter Multi Line for More Description in Excel?](#how-to-enter-multi-line-for-more-description-in-excel) +31. [How to enter Multi Line for More Description in csv/txt?](#how-to-enter-multi-line-for-more-description-in-csvtxt) +32. [How to convert Excel to CSV file?](#how-to-convert-excel-to-csv-file) +33. [How to Load CSV file?](#how-to-load-csv-file) +34. [I have problem to export field name with ( and ) can I ignore it?](#i-have-problem-to-export-field-name-with--and--can-i-ignore-it) +35. [Why the Auto Mapping is not correctly map?](#why-the-auto-mapping-is-not-correctly-map) +36. [I have more then 1 3rd party to import, can I create folder for each party?](#i-have-more-then-1-3rd-party-to-import-can-i-create-folder-for-each-party) +37. [Can I use SQL Accounting Auto Generate DocNo?](#can-i-use-sql-accounting-auto-generate-docno) +38. [How to Convert text number to number in Excel?](#how-to-convert-text-number-to-number-in-excel) +39. [Can I import without UnitPrice (i.e. SQL Account auto Calculate the UnitPrice)?](#can-i-import-without-unitprice-ie-sql-account-auto-calculate-the-unitprice) +40. [Can System Auto Knock off for Customer Payment Import?](#can-system-auto-knock-off-for-customer-payment-import) +41. [Can I reimport Customer/Supplier by just update few fields?](#can-i-reimport-customersupplier-by-just-update-few-fields) +42. [How to load last Save Field Mapping?](#how-to-load-last-save-field-mapping) +43. [Why after load excel some column had no data but my excel had?](#why-after-load-excel-some-column-had-no-data-but-my-excel-had) +44. [How to enter multi IV number for CN FromDoc field in excel?](#how-to-enter-multi-iv-number-for-cn-fromdoc-field-in-excel) +45. [Scheduler Log show Auto Post List Had update. Please Resetup the Auto Import Settings](#scheduler-log-show-auto-post-list-had-update-please-resetup-the-auto-import-settings) + +### Why the system take so long to Get Data from excel where in excel just few records? + +This happen when there is the problem in Excel Worksheet. + +Try below steps + +1. Press *CTRL + Home* + +2. Press *CTRL + A* (To Select All) + +3. Press *CTRL + C* (To Copy Selected) + +4. Press *Shift + F11* (To inserts a New Worksheet into the active Workbook) + +5. Press *CTRL + V* (To Paste) + +6. Save the Excel & Try again on New Worksheet + +[[FAQ]](#faq) [[top]](#requirement) + +### Prompt Error external table is not in the expected format when try Get Data from Excel + +Try save the file to other name using **File | Save As** in Excel + +[[FAQ]](#faq) [[top]](#requirement) + +### My excel date format is in YYYYMMDD format, how I convert it to dd/MM/yyyy? + +Can try use this formula *\=DATE(LEFT(A2,4),MID(A2,5,2),RIGHT(A2,2))* + +\* In Version 4.5.3.18 & above had function call **Convert YYYYMMDD to DD/MM/YYYY...** can help to convert it before import. + +Steps + +01. Follow from **Step 1 to 4** as above + + ![40](../../static/img/miscellaneous/XLS-MDB/faq-convert-date-step1.png) + +02. Select the column to be convert & Right Click + + ![41](../../static/img/miscellaneous/XLS-MDB/faq-convert-date-step5.png) + +03. Select **Convert YYYYMMDD to DD/MM/YYYY...** + +04. Continue Step 5 to 6 for other column + +05. Done can continue norm **Step 5 to 12** + +[[FAQ]](#faq) [[top]](#requirement) + +### My excel date format is in dd-mmm-yyyy with time format, how I convert it to dd/MM/yyyy? + +Can try use this formula *\=TEXT(DATEVALUE(TEXT(A41,"dd-mmm-yyyy")),"dd/mm/yyyy")* + +[[FAQ]](#faq) [[top]](#requirement) + +### Can I import without Tax Amount (i.e. SQL Account auto Calculate the Tax Amount)? + +Yes with Version *Build 10 & above*, just + +Don't Map the fields + +- **Amount** + +- **TaxAmt** + +- **TaxInclusive** + +Just Map Fields + +- **Qty** + +- **UnitPrice** + +- **Tax** + +![42](../../static/img/miscellaneous/XLS-MDB/faq-import-xtax.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### Why My Excel data shown as eg 5% but once I Get File become 0.05? + +It because Excel will auto convert the 5% to 0.05 in data. + +Solution : + +Use either one of the excel formula below: + +- *\=CONCATENATE(E1\*100,"%")* + +OR + +- *\=TEXT(E1,"0.00%")* + +[[FAQ]](#faq) [[top]](#requirement) + +### How to add file link in the Attachments Fields? + +Just Add *File.Your Link file* + +Eg With 2 Attachments file in 1 cell + +*File.*[https://cdn.bulbagarden.net/upload/3/36/648Meloetta-Pirouette.png_](https://cdn.bulbagarden.net/upload/3/36/648Meloetta-Pirouette.png) + +*File.*[https://cdn.bulbagarden.net/upload/6/63/Pokk%C3%A9n_Pikachu_Libre.png_](https://cdn.bulbagarden.net/upload/6/63/Pokk%C3%A9n_Pikachu_Libre.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### My Excel for Credit Note/Payment is in Negative Value, can it be import? + +No you can't import the document amount with Negative Value. + +- In Version 4.3.2.14 & above had function call **\*-1 All Data** can help to convert to positive before import. + +Steps + +01. Follow from **Step 1 to 4** as above + + ![43](../../static/img/miscellaneous/XLS-MDB/faq-neg-value-step1.png) + +02. Select the column to be convert & Right Click + + ![44](../../static/img/miscellaneous/XLS-MDB/faq-neg-value-step5.png) + +03. Select **\*-1 All Data** + +04. Continue Step 5 to 6 for other column + +05. Done can continue norm **Step 5 to 12** + +[[FAQ]](#faq) [[top]](#requirement) + +### In My Excel Only had SSM or GST No. for Customer/Supplier can it be import?** + +Yes using Build 16 & above. + +Just map your SSM or GST No to the **Code** Field. + +See below Other available Fields can map + +| Available SQL Accounting Field | Available Import Build | +| --- | --- | +| SSM/Reg No | 16 | +| GST No | 16 | +| Remark | 19 | +| Biz Natural | 30 | +| Company Name 2 | 31 | +| Note | 34 | + +### What is the Company Code Search Sequence? + +It will search as following sequence (Available in Build 34 & above) + +- Code +- CompanyName2 +- RegisterNo (Version 781 & Below) +- BRN (Version 782 & Above) +- BRN2 (Version 782 & Above) +- GSTNo +- BizNature +- Remark +- Note + +[[FAQ]](#faq) [[top]](#requirement) + +### Can system Auto Set Tax code if my Excel don't had tax code column? + +Yes using Version 16 & above + +Just make sure **Default Value** field is Empty + +[[FAQ]](#faq) [[top]](#requirement) + +### Prompt "Error Unexpected error from external database driver (1)" when Get file from excel + +This is due to Windows Security update [KB4041681](https://support.microsoft.com/en-us/help/4041681/windows-7-update-kb4041681) +Solution 1 + +Can try use **Get File 2...** under the arrow down button at **Get File...** button + +Solution 2 + +01. Save the Excel file to xlsx + +02. Install [Microsoft Access Database Engine 2010 Redistributable](https://www.microsoft.com/en-us/download/details.aspx?id=13255&751be11f-ede8-5a0c-058c-2ee190a24fa6=True) (AccessDatabaseEngine.exe) + +03. Reboot the PC. + +[[FAQ]](#faq) [[top]](#requirement) + +### Prompt "Provider cannot be found. It may not be properly installed" when Get file from excel + +Solution 1 + +Can try use **Get File 2...** under the arrow down button at **Get File...** button + +Solution 2 + +01. Install [Microsoft Access Database Engine 2010 Redistributable](https://www.microsoft.com/en-us/download/details.aspx?id=13255&751be11f-ede8-5a0c-058c-2ee190a24fa6=True) (AccessDatabaseEngine.exe - 32 bits) + +02. Reboot the PC. + +[[FAQ]](#faq) [[top]](#requirement) + +### My excel String size is longer then SQL, how I can reduce it? + +Can try use this formula *\=LEFT(A2,30)* (eg for get 1st 30 character from A2) + +- In Version 4.6.3.19 & above had function call **Truncate String...** can help to reduce it before import. + +Steps + +01. Follow from **Step 1 to 4** as above + + ![45](../../static/img/miscellaneous/XLS-MDB/faq-string-size-step1.png) + +02. Select the column to be convert & Right Click + + ![46](../../static/img/miscellaneous/XLS-MDB/faq-string-size-step5.png) + +03. Select **Truncate String...** + + ![47](../../static/img/miscellaneous/XLS-MDB/faq-string-size-step6.png) + +04. Enter the **New size** + +05. Continue Step 5 to 6 for other column + +06. Done can continue norm **Step 5 to 12** + +[[FAQ]](#faq) [[top]](#requirement) + +### My excel Don't had account code if got ItemCode can it be import? + +![48](../../static/img/miscellaneous/XLS-MDB/faq-item-code1.png) + +Yes just make sure Empty the Default Value for **Account** field so system can Auto Get from Maintain Stock Group + +![49](../../static/img/miscellaneous/XLS-MDB/faq-item-code2.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### My excel only had Barcode can it be import? + +Yes using Build 26 & above + +Just map your Barcode to the **ItemCode** Field. + +| Available SQL Accounting Field | Available Import Build | +| --- | --- | +| Barcode | 26 | +| Customer/Supplier Item Code | 26 | +| Remark 1 | 30 | +| Remark 2 | 30 | +| Shelf | 30 | +| Description 2 | 31 | +| Note | 31 | + +### What is the Item Code Search Sequence? + +It will search as following sequence (Available in Build 34 & above) + +- ItemCode +- Description2 +- Remark1 +- Remark2 +- Shelf +- BarCode +- Alternative Code (Available in Build 70 & above) +- CompanyItemCode +- Note + +[[FAQ]](#faq) [[top]](#requirement) + +### Why it keep only load lst 100 records even I had registered? + +![50](../../static/img/miscellaneous/XLS-MDB/faq-100.png) + +Make sure you set the Value before you Click **Get File** + +[[FAQ]](#faq) [[top]](#requirement) + +### My CSV data is 00123 but after get data become 123 (missing 00)? + +Make sure you Double Quoted the value eg "00123" + +### What is the Proper Steps to Import BOM? + +[[FAQ]](#faq) [[top]](#requirement) + +01. Import all Finish Goods & Raw Material Item code using Stock | Maintain Stock Item...& + + Make sure ItemType for Finish Goods is Set to B + +02. Import using Stock | Maintain Stock Item - BOM... + +[[FAQ]](#faq) [[top]](#requirement) + +### Can I Import Payment/Credit Note without Knock off Information? + +![51](../../static/img/miscellaneous/XLS-MDB/faq-import-payment.png) + +Yes just set the column & Default Value for **DocType**, **KODocNo** & **KOAmt** to empty + +[[FAQ]](#faq) [[top]](#requirement) + +### Why after verify all detail Status shown ok but Header Still untick? + +![52](../../static/img/miscellaneous/XLS-MDB/faq-header.png) + +This happen when there is the problem in Excel Worksheet. + +Try below steps + +1. Press *CTRL + Home* + +2. Press *CTRL + A* (To Select All) + +3. Press *CTRL + C* (To Copy Selected) + +4. Press *Shift + F11* (To inserts a New Worksheet into the active Workbook) + +5. Press *CTRL + V* (To Paste) + +6. Save the Excel & Try again on New Worksheet + +[[FAQ]](#faq) [[top]](#requirement) + +### Why After Import to the Note/Attachment/Description3 data is truncated to 286 characters? + +Make sure In Your Excel Header name is using **Note/Description3/Attachment** + +[[FAQ]](#faq) [[top]](#requirement) + +### Prompt "Access violation at address xxxxxx in module...." when Get file from excel + +Open the excel try delete few column at the end of excel (see example below) + +![53](../../static/img/miscellaneous/XLS-MDB/faq-access-violation.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### How to prevent Import Price Tag with empty row? + +![54](../../static/img/miscellaneous/XLS-MDB/faq-price-tag.png) + +Make sure your Excel consist of + +- Price Tag Qty +- Price Tag UOM (don't share same UOM for other field mapping for same Item code) + +[[FAQ]](#faq) [[top]](#requirement) + +### How to convert the cell value so I can sum using formula in excel? + +Can try use this formula *\=Value(A2)* + +[[FAQ]](#faq) [[top]](#requirement) + +### Can I Reimport for Same Transactions? + +Yes for Version 5.16.10.62 & above + +![55](../../static/img/miscellaneous/XLS-MDB/faq-reimport.png) + +01. Right Click Here & Tick the option Auto Replace for Duplicate + +02. Click Get file & Select Excel Sheet + +03. Click Get Data + +04. Click Verify + +05. Click Post To A/c + +[[FAQ]](#faq) [[top]](#requirement) + +### What is alternative for FTP? + +![56](../../static/img/miscellaneous/XLS-MDB/faq-ftp.png) + +You can use like + +- [Google Drive](https://www.google.com/drive/download/) +- [One Drive](https://www.microsoft.com/en-my/microsoft-365/onedrive/download) + +[[FAQ]](#faq) [[top]](#requirement) + +### How to add Excel Import Shortcut in SQL Accounting? + +You may refer [here](https://download.sql.com.my/customer/Fairy/Excel-Import-46.gif) for steps + +[[FAQ]](#faq) [[top]](#requirement) + +### How to enter Multi Line for More Description in Excel? + +![57](../../static/img/miscellaneous/XLS-MDB/faq-multi-line.png) + +You can enter it all in 1 cell + +[[FAQ]](#faq) [[top]](#requirement) + +### How to enter Multi Line for More Description in csv/txt? + +- In Version 5.19.19.87 & above you can just insert **#13** as return character + +eg ...|ERICSSON A10118s|Line 1#13Line 2#13Line 3|1|... + +[[FAQ]](#faq) [[top]](#requirement) + +### How to convert Excel to CSV file? + +![58](../../static/img/miscellaneous/XLS-MDB/faq-exl-to-csv.gif) + +[[FAQ]](#faq) [[top]](#requirement) + +### How to Load CSV file? + +![59](../../static/img/miscellaneous/XLS-MDB/faq-load-csv.gif) + +[[FAQ]](#faq) [[top]](#requirement) + +### I have problem to export field name with ( and ) can I ignore it? + +Yes you can just ignore the ( and ) + +eg **Code(10)** can just export as Code10 + +[[FAQ]](#faq) [[top]](#requirement) + +### Why the Auto Mapping is not correctly map? + +Make sure the column position you export out is same as our template column position + +[[FAQ]](#faq) [[top]](#requirement) + +### I have more then 1 3rd party to import, can I create folder for each party? + +Yes can for Build 70 & above. Below is Example to setup 3 diff POS System + +![60](../../static/img/miscellaneous/XLS-MDB/faq-3party-import1.png) + +In the Auto Import + +- **Pending Folder** - Select the Root folder where have more then 1 3rd party +- Tick/Select **Include SubFolder File(s)** + +![61](../../static/img/miscellaneous/XLS-MDB/faq-3party-import2.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### Can I use SQL Accounting Auto Generate DocNo? + +Yes can for Build 70 & above. Just Prefix ``n in the DocNo field for each set where n is number. Example below is for 2 Invoice number + +![62](../../static/img/miscellaneous/XLS-MDB/faq-auto-generate.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### How to Convert text number to number in Excel? + +![63](../../static/img/miscellaneous/XLS-MDB/faq-text-num.gif) + +[[FAQ]](#faq) [[top]](#requirement) + +### Can I import without UnitPrice (i.e. SQL Account auto Calculate the UnitPrice)? + +Yes with Version *Build 79 & above*, just + +Don't Map & Set Empty For Default Value for the fields + +- **UnitPrice** + +- **DISC** + +- **TaxAmt** + +- **TaxInclusive** + +- **Amount** + +![64](../../static/img/miscellaneous/XLS-MDB/faq-x-price.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### Can System Auto Knock off for Customer Payment Import? + +Yes with Version *Build 74 & above*, just tick the option + +![65](../../static/img/miscellaneous/XLS-MDB/faq-at-knockoff.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### Can I reimport Customer/Supplier by just update few fields? + +Yes using the Customer&Supplier Master_New template + +Make sure in your excel min 2 columns + +- Code +- CompanyName + +Below is steps how to import for update Maintain Customer Remark Field only + +[Click ME for steps](https://download.sql.com.my/customer/Fairy/Steps-Excel-Import-57.gif) for video + +[[FAQ]](#faq) [[top]](#requirement) + +### How to load last Save Field Mapping? + +![66](../../static/img/miscellaneous/XLS-MDB/faq-load-last-save.gif) + +[[FAQ]](#faq) [[top]](#requirement) + +### Why after load excel some column had no data but my excel had? + +This happen if 1 of the column is merge cell + +![67](../../static/img/miscellaneous/XLS-MDB/faq-load-excel.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### How to enter multi IV number for CN FromDoc field in excel? + +![68](../../static/img/miscellaneous/XLS-MDB/faq-multi-iv.png) + +[[FAQ]](#faq) [[top]](#requirement) + +### Scheduler Log show Auto Post List Had update. Please Resetup the Auto Import Settings + +May click the Reset Lit button in the Auto Import Setting... + +![69](../../static/img/miscellaneous/XLS-MDB/faq-log.gif) + +[[FAQ]](#faq) [[top]](#requirement) + +## Template History New/Updates/Changes + +**Update 16 Jun 2025** + +- Add StockList_Barcode template + +**Update 15 May 2025** + +- Add Postcode_City_State list + +**Update 09 May 2025** + +- Update CashBookEntry_PV_OR some missing Note + +**Update 03 May 2025** + +- Update IDTYPE Parameter +- Update CashBookEntry_PV_OR template by add E-Invoice Fields + +**Update 28 Apr 2024** + +- Fixed Stock Assembly & Disassembly Detail Qty Column Not correct. + +**Update 14 Dec 2024** + +- Update ST_Batch template for field ISActive fieldname & value + +**Update 12 Nov 2024** + +- Change Fieldname From EIVDateTime to EIV_UTC to support SQL Acc Version 5.2024.1001.858 & above + +**Update 14 Aug 2024** + +- Add SUBMISSIONTYPE & TAXEXEMPTIONREASON for Sales & Purchase +- Remove IRBM_SELFBILLED for Sales & Purchase template + +**Update 24 Jul 2024** + +- Highlight with color for E-Invoicing fields +- Add some Example for E-Invoicing fields + +**Update 22 Jul 2024** + +- Add New Field for E-Invoicing at Sales&Purchase template + +**Update 08 Jul 2024** + +- Add Country Tab list for Country field + +**Update 02 Jul 2024** + +- Add New Field for E-Invoicing at Customer&Supplier Master_New & Stock List template + +**Update 14 Jun 2024** + +- Add More Example for StockList +- Update Note For StockList and Sales & Purchase + +**Update 08 Jun 2024** + +- Update Note on Sales & Purchase +- Update CC field with field length & Sample Data in Sales & Purchase + +**Update 01 Dec 2023** + +- Add StockList_Category Template + +**Update 18 Nov 2023** + +- Update ChartOfAccount_GL FieldName not correct for auto mapping + +**Update 13 Nov 2023** + +- Update Sales & Purchase for Transfer Status Fields + +**Update 25 Oct 2023** + +- Add GL Stock & PD_JO (Job Order Template) +- Update STAS_STDS template with note & fixed error sample value + +**Update 09 Oct 2023** + +- Update Note on some field which Can't Empty + +**Update 03 Oct 2023** + +- Change some field from Compulsory to Optional + +**Update 25 Aug 2023** + +- Update Bank Giro List + +**Update 13 Dec 2022** + +- Update StockItem_BOM Missing Column & data not sorting + +**Update 25 Nov 2022** + +- Add new Customer&Supplier Master Format +- Add Maintain Shipper Format + +**Update 28 Oct 2022** + +- Fixed Payment Example Not Correct KO DocNo + +**Update 18 Oct 2022** + +- Add Example rounding for Sales & Purchase + +**Update 06 Oct 2022** + +- Add More sample for Journal Voucher +- Add Note for Journal Voucher + +**Update 01 Jun 2022** + +- Add Batch Delete format +- Add Currency With Detail format + +**Update 14 Apr 2022** + +- Add ST_Item_Alt format + +**Update 19 Oct 2021** + +- Update ARAP_Deposit Data to match Sample data +- Add ARAP_CN_KO Format +- Add ARAP_Deposit_Refund Format +- Add ARAP_Deposit_Forfeit Format + +**Update 05 Oct 2021** + +- Update StockList Missing Isbase column & Required field for RATE1 + +**Update 11 Sep 2021** + +- Add Price Tag Example for Stock List Template + +**Update 18 Aug 2021** + +- Add Enable Import Stock Item Matrix Profile Template + +**Update 03 Apr 2021** + +- Add GL_Budget Template +- Add AR_CustomerBranch Template + +**Update 14 Dec 2020** + +- Add StockLit_PriceTagARAP Template +- Update StockGroup, ST_ITEM_TPL, ST_Batch, Tariff & StockItem_BOM Template no mention field size + +**Update 14 Aug 2020** + +- Update ChartOfAccount_GL - Add More Example & Notes + +**Update 04 Jul 2020** + +- Update MaintainSupplier_Giro - Update to Match with Testing Company +- Add StockList_UOMnPrice Template + +**Update 03 Jun 2020** + +- Split Stock Issue & Stock Receive Template + +**Update 26 May 2020** + +- Add Stock Assembly & Disassembly Template +- Add more example for CashBookEntry_PV_OR +- Add Customer Deposit Template + +**Update 15 May 2020** + +- Move file to Google Drive + +**Update 12 Feb 2020** + +- Update Sales & Purchase Tab Information to Match with Testing Company + +**Update 03 Jan 2020** + +- Add Point Format + +## Program History New/Updates/Changes + +**Build 104** + +- Fixed Verify Shown invalid Account code when No Value. +- Fixed Export not filter untick records. + +**Build 103** + +- Fixed Export parameter should not case sensitive. +- Fixed Picture corrupted when do replace Stock Item when field not map. +- Add #9 for Tab Delimiter csv import & Export. +- Add Replace Header Only...Option. + +**Build 102** + +- Upgrade to Version 5.19.20. +- Fixed Verify Outstanding Qty not correct due to rounding issue. +- Fixed unable to email using GMail. +- Enable Download from sFTP. +- Enable Auto Generate DocNo using prefix `` for Customer/Supplier Payment. +- Enable import Stock Item Barcode only. +- Enable Upload to sFTP for Export CSV. + +**Build 101** + +- Fixed Import Not follow UOM when using Barcode as Itemcode. +- Fixed verify Payment unable to find record when user change Journal type BANK/CASH to Bank/Cash. +- Fixed Customer/Supplier unable to Import GEOCOORDINATE field. +- HDR Description Default Value not import if not mapping. + +**Build 100** + +- Fixed Import Maintain Item - UOM & Price error due to over Quoted. + +**Build 99** + +- Fixed Mapping for Customer/Supplier New not correct for State Field. +- Force export out with only fieldname even is no record. +- Fixed Job Order, Stock Assembly & Disassembly missing Detail Qty column. +- Add Search for SALESTAXNO, SERVICETAXNO & TIN for customer/supplier Code. + +**Build 98** + +- Enable Auto Get E-Invoice Info From Maintain Customer/Supplier when data field is Empty. +- Change Register db Checking to Actual Register Info field. + +**Build 97** + +- Add Get File From FTP option. +- Fixed export CSV Last Export Date keep increasing. + +**Build 96** + +- Fixed Import error when TaxInclusive empty. +- Fixed AutoExport CSV Last export Date not save to db. +- Fixed Company Name empty in Auto Import Setting. +- Fixed data not Trim if import using csv. +- Add Clear Default Value...option. + +**Build 95** + +- Fixed Import Tax code error. + +**Build 94** + +- Fixed Import Customer payment Voucher Error due to boolean type. +- Fixed TaxInclusive not import when the value True. +- Auto Select Show Uncheck Only for GL Acc after Verify have error. + +**Build 93** + +- Fixed Import Opening SST Error due to typo error. +- Fixed Tax field not Automap if FieldName is Tax. +- Enable support RichText Import for UDF Memo type. +- Fixed Replace Item Code for Maintain Item prompt Access Violation. + +**Build 92** + +- Fixed verify error when Invalid UOM due to boolean type. + +**Build 91** + +- Fixed unable to load record when Json record only 1. +- Add support :LastModified filter. +- Fixed some default value not update to support 860. +- Fixed verify with transfer status error due to boolean type. + +**Build 90** + +- Fixed Register activation code fail. + +**Build 89** + +- Fix incorrect Auto Field mapping for CC & Tax. +- Enable support Transfer IV,DN,CS to CN. +- Add Save & Load From File setting for CSV Export Setting. +- Fixed Same time record not posted due to Seq. +- Enable support Version 860 & above. + +**Build 88** + +- Fixed IDTYPE & SUBMISSIONTYPE should not have default value for transaction. +- Fixed Replace enable verify shown Dockey Not found. +- Change Auto Get Default Account Code from DB. + +**Build 87** + +- Enable Support read mulitple line for csv with #13 indicator. +- Enable Auto Height For Grid Data. +- Fixed unable to EMail using GMail Setting. +- Fixed AR/AP CN KnockOff verify Status not update when CN Not found. + +**Build 86** + +- Add By Pass Verify... option. +- Enable Import Extra DO & GRN. +- Force always read 1st excel sheet for AutoImport. +- Add EMail Error Log file... option. +- Add Delimiter Option for CSV Export. +- Fixed CSV output should double Quoted if had character same as delimiter. +- Fixed Supplier Deposit Verify not correct. +- Fixed Maintain Customer/Supplier - New missing CURRENCYCODE field. +- Fixed TaxRate not import when mapping. + +**Build 85** + +- Upgrade to Version 5.19.19. +- Add Export CSV function. +- Enable mapping for DocNoSetKey field. +- Fixed Purchase not support Transfer Status. + +**Build 84** + +- Fix not support mix data with Some have ItemCode & Same no ItemCode. +- Fixed Scheduler still not support without Branch Info for Maintain Customer/Supplier - New option. +- Fixed file not move when Replace Option is enabled. + +**Build 83** + +- Fixed slow when delete for replace transactions with lot details. +- Add Grid export for Stock Item Import. +- Remove license checking for Maintain Customer/Supplier - New option. +- Auto mapping with \_DTL &\_HDR ignore \_. +- Allow import Customer/Supplier without Branch Info for Maintain Customer/Supplier - New option. + +**Build 82** + +- Fixed Source Field have extra record. +- Fixed Error when using JSon File. +- Fixed Auto Import Setting not Save after Set. + +**Build 81** + +- Fixed Convert Row To Column function still open file still use old function. +- Fixed Convert Row To Column function not working due to Column 1 empty. +- Fixed Access Violation on Get File for Maintain Customer & Supplier. +- Fixed Payment still Import Even is Untick. + +**Build 80** + +- Upgrade to Version 5.18.18 +- Allow Import Empty Seq for Maintain Stock Item - Price Tag Import. +- Fixed GL Cash Book Data not link with docno. +- Enable Transfer Status for Sales & Purchase Module. +- Add highlighter for Error after verify. + +**Build 79** + +- Upgrade to Version 5.17.17. +- Add Maintain Stock Item - Category. +- Fixed Access Violation when Get Data From mdb file. +- Enable Auto get UnitPrice in SQL Acc by Not mapping UnitPrice & Set Default Value. +- Fixed Maintain Stock Item no PreVerify for Code field. +- Fixed CompanyName not check for field Mapping for Maintain Customer/Supplier Import. +- Add GL Stock Value. +- Add Job Order. +- Add Option "System Auto Detail" for Job Order, Stock Assembly & Stock Disassembly. + +**Build 78** + +- Fixed Verify Not correct when no Itemcode Mapping. + +**Build 77** + +- Upgrade to Version 5.17.16. +- Fixed Error on Function Memo to Column when split Memo row more then No of Columns. +- Add Clear Cache Data Option. +- Enable support Search Description2 for PaymentMethod Field. +- Fixed Verify UOM not same as excel when if itemcode have more the 1 UOM with Rate=1. +- Fixed ItemCode UOM sometime not correctly check. + +**Build 76** + +- Upgrade to Version 5.17.15. +- Fixed unable to find record if On Spot Change Code. +- Fixed import csv with long number become scientific notation. +- Fixed import csv with missing number begin with 00x. +- Add F1 shortcut for Get User Guide... function. +- Add Load Last Posted Status Information... function - For Transactions. +- Fixed Auto Import Stock Item Fail. + +**Build 75** + +- Enable Support Read UOM from Barcode & Stock Alt Item Table. +- Fixed Detail Description should not have Default Value. +- Fixed AR & AP KO should not show Agent & Area Mapping. +- Fixed AP Verify Error. +- Fixed Customer CN, Supplier DN & CN Default Value not correct. + +**Build 74** + +- Upgrade to Version 5.17.14. +- Enable Support Direct DB Connect for SQL Connect. +- Enable Auto Remember by BizType for Auto Replace. +- Fixed Error when Exit Program if the db is registered. +- Fixed Verify DocNo for Customer should excluded code. +- Fixed Default Open from Desktop else from My Document folder. +- Fixed Verify Slow. +- Add Option Auto KnockOff for Customer/Supplier Payment & Refund. + +**Build 73** + +- Fixed Error after done import Maintain Customer/Supplier New format. + +**Build 72** + +- Fixed Source Mapping Field have Extra Column. +- Fixed Get CSV with Unicode Error. +- Fixed Access Violation when posting Payment. + +**Build 71** + +- Fixed Import SL & PH missing detail. + +**Build 70** + +- Upgrade to Version 5.17.13. +- Remove 'Mapping Field can't be empty' for Stock Transfer Header Code. +- Enable Support Import Seq Field for Maintain Stock Item - BOM. +- Fixed Duplicate DocNo when Exce/CSV file data not sort by DocNo. +- Enable Read File in subfolder of pending for Auto Import. +- Add new option Include SubFolder File(s)... for Auto Import for multi 3rd Party Export to different folder. +- Enable Search AltCode for ItemCode field. +- Enable Import Maintain Shipper. +- Enable Auto Generate DocNo using prefix ``. +- Fixed Stock Transfer Customer code not checking other Maintain Customer fields. +- Fixed Verify 2nd time data gone. +- Fixed Verify Empty Value for Terms should bypass. +- Add New Format for Maintain Customer & Maintain Supplier to support Replace Action. +- Combine UE Function. +- Add Option Get file(s) from FTP... for transactions import. +- Enable Replace Option for Duplicate transaction for All Maintenance (Except Maintain Account). + +**Build 69** + +- Add Remove Other Character(s)... function. +- Fixed Copy Cell Value not enable for single table import. +- Fixed SUOMQTY field missing from mapping. + +**Build 68** + +- Fixed Field Auto Mapping not check equally match column. +- Fixed Sales.Points.OPF can't Auto Import. +- Fixed Import Attachment field become RichText. +- Fixed Import GL PV & GL OR error. + +**Build 67** + +- Change FTP download TransferType to Binary. +- Fixed Error when download FTP file with folder. +- Add Double Click Pending & Done label to open the folder. +- Add Test FTP Download option on Right Click Pending label. + +**Build 66** + +- Upgrade to Version 5.16.12. +- Fixed Slow on Auto Mapping function. +- Move Select Record Range to top. +- Fixed Tab Order. +- Add Batch Delete function. +- Enable Replace Option for Item Template & Maintain Batch. +- Fixed Import Stock Template not set 'Mapping Field can't be empty' for Code field. +- Allow import Detail Maintain Currency. +- Fixed FTP download Error. + +**Build 65** + +- Fixed Points Verify Keep shown Invalid Customer code. +- Fixed Points Post to Account prompt Access Violation. +- Fixed Verify if Mapped field with empty data for Agent, Area, Project should by pass + +**Build 64** + +- Upgrade to Version 5.16.11. +- Add Import Stock Alternative. +- Add Auto Resize Prefix Main Screen Size. + +**Build 63** + +- Fixed Error Import Matrix Profile. +- Fixed Disc have value even Excel don't have Disc Column. + +**Build 62** + +- Upgrade to Version 5.16. +- Enable Replace Option for Duplicate transaction. + +**Build 61** + +- Fixed Add for detail Mapping override by automap. + +**Build 60** + +- Fixed GL Acc Verify not correctly for SpecialAccount Type. +- Add Filter for Untick Only, Tick Only & All option for GL Acc. +- Misleading information at Stock Item Filter record to record when set 501 to 1000 become 500 + +(conflict with to rec & max record) + +[[top]](#requirement) + +## Program History New/Updates/Changes (UE Only) - (Deprecated) + +**Build 37** + +- Upgrade to Version 4.5.4. +- Fixed Slow on Auto Mapping function. +- Move Select Record Range to top. +- Fixed Tab Order. + +**Build 36** + +- Upgrade to Version 4.5.3. +- Add Import Stock Alternative. +- Add Auto Resize Prefix Main Screen Size. + +**Build 35** + +- Upgrade to Version 4.5. +- Add option Delete Existing Data for all Import Option except Maintain Stock Item. + +**Build 34** + +- Fixed Add for detail Mapping override by automap. + +**Build 33** + +- Misleading information at Stock Item Filter record to record when set 501 to 1000 become 500 (conflict with to rec & max record) + +**Build 32** + +- Fixed Stock Item Not Auto Maping Field for Sub Table. +- Fixed Import Unicode for More Description become ??? + +**Build 31** + +- Fixed More Description & Attachment not support Unicode. + +**Build 30** + +- Fixed Prompt Error when excel UOM Rate is empty. diff --git a/docs/miscellaneous/acc-cash-register-import.md b/docs/miscellaneous/acc-cash-register-import.md new file mode 100644 index 00000000..91cdc69a --- /dev/null +++ b/docs/miscellaneous/acc-cash-register-import.md @@ -0,0 +1,130 @@ +--- +sidebar_position: 16 +id: acc-cash-register-import +title: Acc Cash Register Import Guide +description: A quick guide on Acc Global Price Change for SQL Account +slug: /miscellaneous/acc-cash-register-import +tags: ["SQL Account", "Text", "Import"] +--- + +## Supported Model + +Sharp + +**Format 1** + +- XE-A147 +- XE-A137 + +**Format 2** + +- XE-A207 +- XE-A217 +- XE-A307 +- ER-A411/ER-A421 + +## Import Program + +- Version (1.1.0.1) - 19 Oct 2016 +- Evaluation Limit : 5 Times Posting +- [SQL Acc Cash Register setup](http://www.estream.com.my/downloadfile/Fairy/SQLAccCashRegister-setup.exe) +- MD5 : BF105B609B19CE6CA9E0186F4CD78B7F + +## Setting + +**Cash Register Machine** + +- Below is the setting to be set in your Cash Register Machine +- Updated 19 Mar 2016 +- All setting can be done at PGM mode → Setting → function text +- For Currency can be done at PGM mode → Setting → Optional → Basic system + +| Description | Function | Text | +|--------------------------------------------|------------|-----------| +| Currency Symbol | CURRENCY TEXT | RM | +| GST Standard Rate Symbol | TXBL1 SYMBOL | S | +| GST Zero Rate Symbol | TXBL2 SYMBOL | Z | +| Taxable subtotal (SubTotalWithTax) | TAX1 ST | GST TAX AMT | +| Taxable subtotal (SubTotalWithTax) | TAX2 ST | ZERO TAX AMT | +| VAT (GSTAmt) | VAT 1 | GST 6% | +| VAT (GSTAmt) | VAT 2 | GST 0% | +| Rounding | DIFFER | ROUNDING | +| DocAmt | Total | ***TOTAL | +| Total Before Service Charge | Subtotal | SUBTOTAL | +| Service Charge | SER.CHRG | SER.CHRG | +| Total After Service Charge before GST | NET 1 | NET | +| Cash Payment | CASH | CASH | +| Cheque Payment | CHECK | CHECK | +| Credit Card Payment | CREDIT | CREDIT | + +:::caution + +- All amount should be in Tax Inclusive as this is GST Rule for Simplified Tax Invoice +- You are not allow to VOID the Invoice + +::: + +**SQL Accounting** +May refer to Point 1 at Things To Consider Before Import/Post + +**Cash Register Import** +Menu: Tools | Options... + +![1](../../static/img/miscellaneous/acc-cash-register-import/cashreg-imp.png) + +| Function | Description | +|--------------------------|----------------------------------------------------------| +| DisplayFormatQty | Display Format For Quantity Field | +| DisplayFormatUnitPrice | Display Format For Unit Price Field | +| DisplayFormatAccountValue | Display Format For Amount Field | +| *MachineType | Last used Machine Type | +| *CompanyCode | Last used Customer Code | +| *SalesCodeSR | Last used Sales Code for SR | +| *SalesCodeZR | Last used Sales Code for ZR | +| *PaymentMethodCash | Last used Cash Payment Method Code | +| *PaymentMethodChq | Last used Cheque Payment Method Code | +| *PaymentMethodCredit | Last used Credit Card Payment Method Code | +| *PostAsOne | Posting Type | +| DocNoFormat | Document Number Format for PostAsOne = 1 | +| NextDocNo | Next Document Number for PostAsOne = 1 | + +:::info + +- User may ignore the option with * as this can be set on Posting Screen +- For Service Charge & Rounding system will use SalesCodeSR + +::: + +## Step + +Menu: Cash Sales... + +![2](../../static/img/miscellaneous/acc-cash-register-import/cashreg-step.png) + +1. Select **Machine Type** +2. Click **Get File** & browse to the folder & look for EJFILE.SDA +3. Steps 2 + Select **Debtor Code** for Debtor Field + Select **Sales Account Code** for SR + Select **Sales Account Code** for ZR +4. Payment Method + Select **Payment Method Account Code** For Cash + Select **Payment Method Account Code** For Cheque + Select **Payment Method Account Code** For Credit Card +5. Tick Post As 1 Record if you wanted to post all transaction as 1 Cash Sales (Recommended) + + | Option | Description | + |---------------|------------------------------------------------------------------------| + | True (Tick) | System will Post to SQL Accounting As 1 Cash Sales (Recommended) | + | False (UnTick)| System will Post 1 by 1 InvNo to Cash Sales | + + Select the Date (applicable if **Post As 1 Record** is Selected) + +6. Click **Verify** to check any Duplicate Cash Sales Number +7. Click **Post To A/c** button to Post. + +## FAQ + +### How do I know which EJ File had posted? + +In Build 1 & above once the EJ had posted to SQL Acc it will automatic rename the EJ file to EJFILE-yyyy-mm-dd.sda (yyy-mm-dd is the date posted) \ No newline at end of file diff --git a/docs/miscellaneous/acc-global-price-change.md b/docs/miscellaneous/acc-global-price-change.md new file mode 100644 index 00000000..9d0e6b72 --- /dev/null +++ b/docs/miscellaneous/acc-global-price-change.md @@ -0,0 +1,83 @@ +--- +sidebar_position: 16 +id: acc-global-price-change +title: Acc Global Price Change Guide +description: A quick guide on Acc Global Price Change for SQL Account +slug: /miscellaneous/acc-global-price-change +tags: ["SQL Account", "Text", "Import"] +--- + +## Import Program + +- Version (5.2.0.23) - 03 Feb 2025 +- Evaluation Limit : Unlimited +(For Version 737 & above) + +- SQLAccGlbPriceChangeV5-setup +- MD5 : `8DD462C2B440CE039DF3981896D92FB9` + +(For Version 736 & below) + +- SQLAccGlbPriceChange-setup +- MD5 : `8C73130765BFA98A5BB59EF069422BBC` + +## Step-By Item Code + +1. Click Maintain Stock Item... + + ![1](../../static/img/miscellaneous/acc-global/acc-global-price-change-step1.png) + +2. Select data/parameter to be update in the Steps 1 section + + |Option|Description| + |---|---| + |Grid Mode|Select this if your item list is more then 10,000 record to speed up the loading data| + +3. Click Get Stock Items List button + ![2](../../static/img/miscellaneous/acc-global/acc-global-price-change-step3.png) + +4. Enter the Value to change. It can be in Value and/or Percentage (%) except for Fixed Value only Value + + | **Option** | **Description** | + |-------------|-----------------| + | **Rounding Method** | Assuming **Round Decimal** is `2`

**Normal:** 0.1234 → 0.12
**Round Up:** 0.1234 → 0.13
**Round Down:** 0.1274 → 0.12 | + | **Input Value** | Sample Value | + | **Output Result** | Sample Result | + | **Round Decimal** | Number of Decimal Points | + | **Output Value** | Action to be taken:
- **Increase Value:** Adds up the value based on option selected.
- **Reduce Value:** Deducts the value based on option selected.
- **Fixed Value:** Replaces based on value set at Step 4 (only amount).
- **Inclusive Rate:** e.g. Amount `106` and user enters `6%` → becomes `100`. | + +5. Select field to be update. +6. Click Change button. +7. Click Post To A/c button to update the data + +:::info +Select Record Change History option if you wanted to Keep Changes History in the +Note Fields for each itemcode +::: + +## Step -By Comapny Price + +1. Click Maintain Stock Item - By Company... + ![3](../../static/img/miscellaneous/acc-global/acc-global-compare-price-step1.png) + +2. Select data/parameter to be update in the Steps 1 section +3. Select Company Type +4. Click Get Stock Items List button + ![4](../../static/img/miscellaneous/acc-global/acc-global-compare-price-step4.png) + +5. Enter the Value to change. It can be in Value and/or Percentage (%) except for Fixed Value only Value +6. Click Change button. +7. Click Post To A/c button to update the data + +:::info + +It use Customer/Supplier Price Tag (Company Column) + +::: + +## FAQ + +### Can I self enter/change the price by item code? + +Yes, just enter 0 in Step 4 & Change the Value in the grid (Circle in Red) + ![5](../../static/img/miscellaneous/acc-global/acc-global-faq.png) diff --git a/docs/miscellaneous/bad-debt.md b/docs/miscellaneous/bad-debt.md index 572d4058..00600b5b 100644 --- a/docs/miscellaneous/bad-debt.md +++ b/docs/miscellaneous/bad-debt.md @@ -31,7 +31,7 @@ Payment deemed to be irrecoverable whole or parts of the payment has been provid 4. May claim according to the formula below. - ![203](../../static/img/getting-started/user-guide/203.png) + ![203](../../static/img/miscellaneous/bad-debt/203.png) 2. Bad Debts Recovery @@ -45,4 +45,4 @@ Payment deemed to be irrecoverable whole or parts of the payment has been provid 4. Repay according to the formula below. - ![204](../../static/img/getting-started/user-guide/204.png) + ![204](../../static/img/miscellaneous/bad-debt/204.png) diff --git a/docs/miscellaneous/business-nature-industries/PhotocopierGuide.md b/docs/miscellaneous/business-nature-industries/PhotocopierGuide.md new file mode 100644 index 00000000..5f0f4726 --- /dev/null +++ b/docs/miscellaneous/business-nature-industries/PhotocopierGuide.md @@ -0,0 +1,239 @@ +--- +sidebar_position: 1 +id: photocopier +title: Photocopier Guide +description: A guide to use photocopier +slug: /miscellaneous/business-nature-industries/PhotocopierGuide +tags: ["Photocopier Meter"] +--- + +This Customisation is for the company who provide service on photocopier Machine + +[Sample Database](https://download.sql.com.my/customer/Fairy/ACC%20BK-%5BPhotocopier%5D.zip) + +History New/Updates/Changes + +Fixed zitemcode sometime not deleted after save. +Add Copy Description2 & Project info from QT. +28 Aug 2025 + +Fixed Tax code not copy to Invoice +Add report format Sales Invoice 8 (SST 2)-For Package +20 Aug 2025 + +Add Itemcode zRental +Add Option for No Check Expire Agreement at Quotation +Remove Use of UDF_MthlyCharge & UDF_AddFees +Add Use itemcode zRental & zAddFees +Change use From using IV DocDate to IV DeliveryDate for Current Reading-Date +07 Apr 2025 + +Add Option At QT for Rebate Round Up/Round Down +12 Sep 2018 + +Enable support by Packages for Free & Spoil Qty/Copies +Enable support Min Charges +22 May 2018 + +Fixed Invoice Seq keep moving +29 Mar 2018 + +Fixed Unable to save Invoice if document is transfer from other Document when had GST +08 Mar 2018 + +Should allow append Current Reading same as previous Reading. +22 Feb 2018 + +Fixed Current Reading less then previous Should not append. +Enable copy Quotation Detail Fields + +- Description3 +- Remark1 +- Remark2 +- Project +- Location +- Disc +- Tax +- TaxInclusive +19 Oct 2015 + +Fixed upgrade to Version 721 error. +03 Jul 2015 + +Fixed Unable to save Invoice if document is transfer from other Document + +## Modules Required + +- DIY Script +- DIY Field + +## Settings + +### Sales Quotation + +*Menu: Sales | Quotation...* + +- 1 Quotation is for 1 Customer Profile +- Can Keep a lot of Machine (unlimited) +- Use Doc No S-XXXX as the Setting - To avoid mix with actual use of Quotation +- Can use same itemcode for Different Reading + +![photocopier-quotation](../../../static/img/miscellaneous/business-nature-industries/photocopierGuide/photocopier-quotation.jpg) + +- Minimum UDF Fields Required (Header Fields) + +| **Field** | **Description** | +|---------------------|----------------------------------------------------------------| +| **UDF_RebateRoundUD** | Rebate Calc to Round Up or Round Down; Tick: Round Down; UnTick: Round Up | + +- Minimum UDF Fields Required (Item Fields) + +| **Field** | **Description** | +|---------------------|----------------------------------------------| +| **Delivery Date** | Contract Expiry Date | +| **UDF_CMR** | Current Meter Reading | +| **UDF_DOCDATE** | Current Reading Date; Norm is Invoice Date | +| **UDF_QTY** | Current Qty Charge | +| **UDF_REBATE** | Rebate Qty or % | +| **UDF_MTHLYCHARGE** | Fixed Monthly Charges | +| **UDF_FREEQTY** | Free Qty | +| **UDF_ADDFEE** | Additional Fixed Fee Charges | + +- Minimum UDF Fields Required (Header Fields) + +| **Name** | **Data Type** | **Size** | **Sub Size** | **Caption** | **Required** | **Default Value** | **Display Format** | +|------------------|---------------|----------|--------------|---------------------|--------------|-------------------|--------------------| +| **RebateRoundUD** | Boolean | | | UDF_RebateRoundUD | False | 0 | False | + +- Minimum UDF Fields Required (Items Fields) + +| **Name** | **Data Type** | **Size** | **Sub Size** | **Caption** | **Required** | **Default Value** | **Display Format** | +|----------------|---------------|----------|--------------|-----------------------------|--------------|-------------------|----------------------| +| **CMR** | Integer | | | UDF_Current Reading | False | 0 | #,0;-#,0 | +| **DocDate** | Date | | | UDF_Current Reading-Date | False | | | +| **Qty** | Integer | | | UDF_Current Qty Charge | False | 0 | #,0;-#,0 | +| **Rebate** | String | 50 | | UDF_Rebate | False | | | +| **MthlyCharge**| Currency | | | UDF_Monthly Charge | False | 0 | #,0.00;-#,0.00 | +| **FreeQty** | Integer | | | UDF_Free Qty | False | 0 | #,0;-#,0 | +| **AddFees** | Currency | | | UDF_AddFees | False | 0 | #,0.00;-#,0.00 | + +### Maintain Stock Item + +*Menu: Stock | Maintain Stock Item...* + +- Need to keep 2 itemcode for 1 same item(physically) + +- 1 for Norm Itemcode with Stock Control +- 1 for Non-Stock ItemCode for Meter Reading +- See example MACH_CANNON1(Norm Itemcode) & CANNON1(Meter Reading) + +- Below is for By Packages Only + +| **ItemCode** | **Description** | **Quotation Detail Field Used** | +|---------------|---------------------|---------------------------------------| +| **zFreeQty** | For Free Qty | UDF_FreeQty & UnitPrice | +| **zSpoil** | For Spoil Copies | UDF_Rebate & UnitPrice | +| **zMinCharge**| Minimum Charges | UnitPrice | + +### Sales Invoice + +*Menu: Sales | Invoice...* + +- Will Check Expiry Date - Auto Untick the selection if Expired +- Auto Get Previous Meter Reading & Monthly Charge +- Will update Current Meter Reading, Current Qty Charge to Sales Quotation By ItemCode + +| **Field** | **Description** | +|--------------------|---------------------------------------------------------------------------------| +| **No. of Copies** | `Current Meter Reading - Previous Meter Reading` | +| **Rebate** | `It can be in % or Qty` | +| **Qty Charges** | `No. of Copies - FOC Qty - (No. of Copies * Rebate)` | +| **Amount Charges** | `(Qty Charges * Unit Price) + Add Fees + Monthly Charge (if No. of Copies > FOC Qty); Add Fees + Monthly Charge (if No. of Copies <= FOC Qty)` | + +- Below is the field relation between Sales Quotation & Sales Invoice + +| **Invoice Field** | **Quotation Field** | +|---------------------|----------------------------------------------| +| **ItemCode** | ItemCode | +| **Description** | Description | +| **Description2** | Description2 | +| **Description3** | Description3 | +| **Remark1** | Remark1 | +| **Remark2** | Remark2 | +| **Project** | Project | +| **Location** | Location | +| **UDF_PMR** | UDF_CMR | +| **UDF_CMR** | Meter Reading enter by user | +| **UDF_Rebate** | UDF_Rebate | +| **UDF_FreeQty** | UDF_FreeQty | +| **UDF_MthlyCharge** | UDF_MthlyCharge | +| **UDF_AddFees** | UDF_AddFees | +| **UOM** | UOM | +| **UDF_UnitPrice** | UnitPrice | +| **Disc** | Disc | +| **Tax** | Tax | +| **TaxInclusive** | TaxInclusive | +| **UDF_PMRDate** | UDF_DocDate | +| **UDF_Qty** | Calculated based on formula above | +| **Amount** | Calculated based on formula above | +| **UDF_FromDocNo** | DocNo | + +- Minimum UDF Fields Required (Header Fields) + +| **Name** | **Data Type** | **Size** | **Sub Size** | **Caption** | **Required** | **Default Value** | **Display Format** | +|-----------------|---------------|----------|--------------|-------------------|--------------|-------------------|--------------------| +| **RebateRoundUD** | Boolean | | | UDF_RebateRoundUD | False | 0 | False | + +- Minimum UDF Fields Required (Items Fields) + +| **Name** | **Data Type** | **Size** | **Sub Size** | **Caption** | **Required** | **Default Value** | **Display Format** | +|----------------|---------------|----------|--------------|-----------------------------|--------------|-------------------|------------------------| +| **PMR** | Integer | | | UDF_Previous Reading | False | 0 | #,0;-#,0 | +| **CMR** | Integer | | | UDF_Current Reading | False | 0 | #,0;-#,0 | +| **FreeQty** | Integer | | | UDF_FreeQty | False | 0 | #,0;-#,0 | +| **Rebate** | String | 50 | | UDF_Rebate | False | | | +| **MthlyCharge**| Currency | | | UDF_Monthly Charge | False | 0 | #,0.00;-#,0.00 | +| **SubTotal** | Currency | | | UDF_SubTotal | False | 0 | #,0.00;-#,0.00 | +| **Qty** | Float | 10 | 4 | UDF_Current Qty Charge | False | 1 | #,0;-#,0 | +| **UnitPrice** | Float | 10 | 4 | UDF_UnitPrice | False | 0 | #,0.000;-#,0.000 | +| **AddFees** | Currency | | | UDF_AddFees | False | 0 | #,0.00;-#,0.00 | +| **FromDocKey** | Integer | | | UDF_FromDocKey | False | 0 | | +| **FromDtlKey** | Integer | | | UDF_FromDtlKey | False | 0 | | +| **PMRDate** | Date | | | UDF_PMRDate | False | | | +| **FromDocNo** | String | 20 | | UDF_FromDocNo | False | | | + +## Steps + +*Menu: Sales | Invoice...* + +![photocopier-invoice](../../../static/img/miscellaneous/business-nature-industries/photocopierGuide/photocopier-invoice.jpg) + +1. Select Customer. +2. Click 1. Get Price button. +3. Enter the Current New reading for each machine +4. Click Post button after done. + +## FAQ + +### How I list out all the Expired Agreement? + +1. Click Sales | Outstanding Sales Document Listing. +2. Untick Doc Date +3. Tick Delivery Date +4. Enter the Range Date +5. Click Apply + +### How system check the Expire Date? + + It will Auto Tick if Expire Date > CurrentWorkingDate OR Expire Date is Empty + +### How system calculate the Minimum Charges? + + System will use Balancing Method to Calculate the Minimum Charges. + Eg Min. Charge RM 300 + + A. Machine Usage RM 6.86 + B. Free Copy RM 2.50 + C. Spoil Copy RM 0.14 + D. Total before Min Charges (A - B - C) RM 4.22 + E. Min. Charge (RM 300 - D) RM 295.78 diff --git a/docs/miscellaneous/business-nature-industries/RecurringGuide.md b/docs/miscellaneous/business-nature-industries/RecurringGuide.md new file mode 100644 index 00000000..f9c07c51 --- /dev/null +++ b/docs/miscellaneous/business-nature-industries/RecurringGuide.md @@ -0,0 +1,596 @@ +--- +sidebar_position: 3 +id: recurring-guide +title: Recurring Guide +description: Guide on Recurring +slug: /miscellaneous/recurring-guide +tags: ["Sample Recurring", "Company"] +--- + +This Customisation is for simple calculation for the management property which normally monthly charge Maintenance, Sinking Fund & etc. + +[Sample Database](https://download.sql.com.my/customer/Fairy/ACC%20BK-%5BRecurring%5D.zip) + +## History New/Updates/Changes + +02 Jun 2025 + +Add Option to Post as IV for Customer Due & Payment. +23 Jan 2025 + +Add Use Full Age Option for Late Charge Qty in Customer Due Listing. +Enable Save Setting for Customer Due Listing using Note Field for ItemCode OVERDUE. +Enable Recurring without Filter by Company Category +Add 0Sales Debit Note 9-Late Charges format. +Add 0Sales Invoice 8 (SST 2)-Aging-Recurring-Maintenance format. +Add 0Sales Invoice 8 (SST 2)-Aging-Recurring-Meter format. +Add 0Sales Invoice 8 (SST 2)-Aging-Recurring-Meter-PrcRange format. +Add 0Sales Invoice 8 (SST 2)-Recurring-Meter-PrcRange format. +Exclude posting if amount = 0 when generate DN. + +11 Aug 2022 + +Add Tick/UnTick All Option for Gen/B In Maintain Customer. +Fix sometime prompt error when using Price Range. +Add With 5 Cents Rounding Options for Customer Due Listing. +Add T.O/S Amt label (Total Outstanding Amount) in Sales Invoice. +Fixed Header Description for Total Amount Not Correctly Sum when using Price Range. +Add Prompt for Open Sales Invoice after done Posting. +Add With 5 Cents Rounding & With DN Options for Customer Payment. +Add Prompt for Open Sales Debit Note after done Posting. +Add UDF_LastReading & UDF_CurrReading at Sales Invoice for Price Range use. +Fixed Error due to system override when using Min Charge only for utilities. +Fixed Display Format for utilities should be in 4 decimal point +Enable Optional to use Maintain Customer Agent & Terms when using zProfile code for Agent & Terms +Fixed SQLAcc auto exit when Click Generate in Lastest SQL Acc Version. +15 Apr 2019 + +Add Option Include Zero Qty for Utilities +Fixed Unable Recurring For Document Listing after upgrade to 776 +Fixed Utilities will shown Discount 1 when PriceTag discount is empty +22 Mar 2019 + +Add Process Status on Recurring SQFT in Maintain Customer +Fixed Min. Charge not working for Lead Time 0 & 1 +28 Jan 2019 + +Move Footer Count to Company Name +Increase Form width to 1024 +Remove all Tax Code in Sample Data +Add Use Doc Tax Code option for Doc Listing +Allow Multi range price for Utility +04 Oct 2018 + +Fixed Amount not correct if Qty = Min Charge Amt Qty +15 Aug 2018 + +Reduce the Doc & Item Project Length at Customer Payment +Set to 0 if using both Rebate & Min Charge if below Min Charge amount +11 Jul 2018 + +Allow more then 1 Stock Group for SQFT in Maintain Customer +Add UDF_UseSQFT in QT Detail - True Qty = UDF_BuildUp(Maintain Customer) +Add UDF_UseARPrice in QT Detail - True UnitPrice = UDF_UPSQFT(Maintain Customer) +Add Last Payment Date, Amount & Outstanding Information in Invoice Detail Screen +Add Document & Item Project selection Posting for Customer Due +15 Feb 2018 + +Generate by SQFT by Customer +Add Cust Local - Payment Listing (GST 1) - Knock Off Doc No Set - Cross +Add Sales Customer Price History - ItemCode - Cross +Allow to change Header Description for DN Overdue +Set Default TaxRate 0% for Payment DN overdue +21 Mar 2017 + +Change Header Description for Posting DN to Late Payment Charges for +25 Jan 2017 + +Add Pre-Post DN at Customer Payment. +Add Sales Document Listing Recurring. +16 Sep 2016 + +Fixed access violation error if No Record Found prompt. +12 Jan 2016 + +Enable GAS Reading +25 Dec 2015 + +* Add 0Sales Invoice 7 (GST 2)-Recurring-Maintenance Report +* Add 0Sales Invoice 7 (GST 2)-Recurring-Meter Report +* Enable GAS Reading +* Allow Select Multi DocNo Set for Different Reading +* Fixed bug LeadTime=0 - Will being override by Rebate when is below Min Charge (i.e. will set to 0 if less then Min Charge) +* Fixed Cust Statement 06 Mths 1 Report Not shown Address 1 & take too much space at footer +26 Sep 2015 + +* Remove 5 Cent rounding Script & use build in 5 Cent rounding +* Fixed Customise Statement report not follow company profile information +* Set Customer Payment UDF_PostDN Default Value = False +12 Aug 2015 + +* Fixed Posting Overdue DN should excluding the GST amount from the calculation + +## Modules Required + +* General Ledger, Customer, Supplier +* Sales, Purchase +* DIY Field +* DIY Script +* Multiple Pricing (Price Tag) +* Multiple Document Number Set + +## Tutotial Video + +[Recurring](https://www.youtube.com/watch?v=DLShuxExZi8&t=27s) + +## Settings + +### Maintain User + +*Menu: Tools | Maintain User...* + +Untick the Access Right for Prompt Replace Unit Price Dialog under **Group : Sales** + +### Maintain Customer + +*Menu: Customer | Maintain Customer...* + +* Below fields MUST had Value (minimum is 0 not empty or Null) + +* UDF_WaterReading +* UDF_ElectricReading +* UDF_GasReading +* UDF_IWKReading +* Price Tag + +* Minimum UDF Fields Required + +| **Name** | **Data Type** | **Size** | **Sub Size** | **Caption** | **Required** | **Default Value** | **Display Format** | +|-------------------|---------------|----------|--------------|--------------------------|--------------|-------------------|---------------------------| +| WaterReading | Float | 10 | 4 | UDF_WaterReading | False | 0 | #,0;-#,0 | +| ElectricReading | Float | 10 | 4 | UDF_ElectricReading | False | 0 | #,0;-#,0 | +| GasReading | Float | 10 | 4 | UDF_GasReading | False | 0 | #,0;-#,0 | +| IWKReading | Float | 10 | 4 | UDF_IWKReading | False | 0 | #,0;-#,0 | +| UseARPrice | Boolean | | | Use Maintain Customer Price | False | False | | +| UPSQFT | Float | 10 | 4 | Unit Price/SQFT | False | 0 | #,0.00;-#,0.00 | +| BuildUp | Float | 10 | 4 | Build Up (sf) | False | 0 | #,0.00;-#,0.00 | +| WaterLastDate | Date | | | UDF_WaterLastDate | | | | +| ElectricLastDate | Date | | | UDF_ElectricLastDate | | | | +| GasLastDate | Date | | | UDF_GasLastDate | | | | +| IWKLastDate | Date | | | UDF_IWKLastDate | | | | + +:::success NOTE : +UseARPrice & UPSQFT is use for Recurring by square feet (SQFT) +UseARPrice +True = the Unit Price is by Customer +False = the Unit Price is from Maintain Item Ref Price +The Item Code List is filter by Stock Group Code LIKE MAINTENANCE% +::: + +### Quotation + +*Menu: Sales | Quotation...* + +* DocNo Format := CompanyCategoryCode;Type; + +```cs + eg + B-Shop;Main; => For Maintenance + B-Shop;Water; => For Water Billing + B-Shop;Park; => For Car Park +``` + +* For Meter Reading (eg Water, Electric & etc), Detail can be empty cause system will auto APPEND the itemcode + +:::note + +* Master Description if using + +* 1.Generate Maintenance it will use the Quotation Master Description. +* 2.Generate Meter Reading (eg Water, Electric & etc), it will shown how much the meter usage +[Master Description (MMM YYYY) - CurrentReading - PreviousReading=Usage@UnitPrice]. +* 2.Generate Meter Reading with "Include Grid Detail Info." Option tick it will use the Quotation Master Description. +* UDF_UseSQFT + +* True := Qty = UDF_BuildUp from Maintain Customer +* False := Qty = Quotation Qty +* UDF_UseARPrice + +* True := UnitPrice = UDF_UPSQFT from Maintain Customer +* False := UnitPrice = Quotation UnitPrice + +::: + +Quotation - SQFT + +![recurring-quotation](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/recurring-quotation.jpg) + +Quotation - Utilities - Price Range + +Below Example is for Price Range Water Reading + +![recurring-quotation-2](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/recurring-quotation-2.jpg) + +1. Tick Use Price Range +2. Select Item Code (eg WATER for Water Reading) +3. Enter the Description to be shown in Invoice for Each Range +4. Enter the Range UDF_From & UDF_To +5. Enter the Unit Price + +:::success NOTE : +For Last Range the UDF_To may enter as 999999 (6 digit of 9 (max)) +::: + +* List Field to be copy from Quotation to Invoice + +| **Master Fields** | **Detail Fields** | +|-------------------|-------------------| +| DocNoEx | Number | +| DocDate | ItemCode | +| Terms | Description | +| Agent | Description2 | +| Description | Description3 | +| DocRef1 | Remark1 | +| DocRef2 | Remark2 | +| DocRef3 | Location | +| DocRef4 | Project | +| Project | DeliveryDate | +| Validity | Qty | +| DeliveryTerm | UOM | +| CC | UnitPrice | +| | Tax | +| | Disc | + +* Minimum UDF Fields Required (Header Fields) + +| **Name** | **Data Type** | **Caption** | **Required** | **Default Value** | +|-------------|---------------|-----------------|--------------|-------------------| +| DocNoSet | Integer | UDF_DocNoSet | False | 0 | +| Type | Integer | UDF_Type | False | 0 | +| IsPrcRange | Boolean | UDF_IsPrcRange | False | False | +| IncZero | Boolean | UDF_IncZero | False | False | + +* Minimum UDF Fields Required (Item Fields) + +| **Name** | **Data Type** | **Caption** | **Required** | **Default Value** | **Display Format** | +|--------------|---------------|------------------|--------------|-------------------|--------------------| +| From | Integer | UDF_From | False | 0 | #,0;-#,0 | +| To | Integer | UDF_To | False | 0 | #,0;-#,0 | +| UseSQFT | Boolean | UDF_UseSQFT | False | False | | +| UseARPrice | Boolean | UDF_UseARPrice | False | False | | + +### Invoice + +*Menu: Sales | Invoice...* + +* Minimum UDF Fields Required (Items Fields & Headers Fields) + +| **Name** | **Data Type** | **Size** | **Sub Size** | **Caption** | **Required** | **Default Value** | **Display Format** | +|---------------|---------------|----------|--------------|--------------------|--------------|-------------------|--------------------| +| LastReading | Float | 10 | 4 | UDF_LastReading | False | 0 | #,0;-#,0 | +| CurrReading | Float | 10 | 4 | UDF_CurrReading | False | 0 | #,0;-#,0 | + +### Debit Note + +*Menu: Sales | Debit Note...* + +* Minimum UDF Fields Required (Items Fields) + +| **Name** | **Data Type** | **Size** | **Caption** | **Required** | **Default Value** | **Display Format** | +|------------|---------------|----------|---------------|--------------|-------------------|----------------------| +| IVDocNo | String | 20 | UDF_IVDocNo | False | | | +| IVDocDate | Date | | UDF_IVDocDate | | | | +| IVDueDate | Date | | UDF_IVDueDate | | | | +| IVDocAmt | Currency | | UDF_IVDocAmt | False | 0 | #,0.00;-#,0.00 | +| IVOSAmt | Currency | | UDF_IVOSAmt | False | 0 | #,0.00;-#,0.00 | + +### Stock Item + +*Menu: Stock | Maintain Stock Item...* + +* Item Code to be create + +* WATER +* ELECTRIC +* GAS +* IWK +* RTN5Cents => For Rounding Mechanism +* OVERDUE => For Overdue Charge (Just set at Ref Price & enter 0.1 for 10% pa) +* MINCHARGE => For Utilities Price Range +* REBATE => For Utilities Price Range + +* Price Tag => For Different UnitPrice for Meter Reading (eg WATER, ELECTRIC & etc) + + Use Disc column as Rebate & Min Charge => Format := Rebate+MinCharge +eg + +### Lead Time Setup + +| **Lead Time** | **Type** | **Description** | **Input Value** | +|---------------|-------------------|---------------------------------|-----------------| +| 0 | Both | Rebate 11.75 & MinCharge 5 | 11.75+5 | +| 1 | Rebate Only | Rebate 12.30 & MinCharge 0 | 12.30+0 | +| 2 | Min Charge Only | Rebate 0 & MinCharge 5 | 0+5 | + +* Lead Time => 0: Both, 1: Rebate Only, 2: Min Charge Only +* For MinCharge make sure it had Value else set at 1 + +![ch352](../../../static/img/miscellaneous/business-nature-industries/sample-recurring-company/ch352.jpg) + +:::success How System calculate Min. Qty for Min. Charge? + +* Using above example => Min. Qty := 5 / 0.3121 = 16.0205 +* if the Qty is below or equal 16.0205 then Amount will Reset to 5 +::: + +### Customer Payment + +*Menu: Customer | Customer Payment...* + +* Auto Generate Sales DN for overdue IV if UDF_PostDN (in [DIY Fields](../../usage/tools/guide#maintain-diy)) Default Value is set to True (Default is False) +* Only Knock-off to DN will not regenerate DN again if overdue +* Formula for Age + +```vb +Age := CurrentWorkingDate - Knock off Invoice Due Date +``` + +* Formula For Qty + +```vb +if Age < DayOf(CurrentWorkingDate) then + Qty := Age else + Qty := DayOf(CurrentWorkingDate); +``` + +* Formula for UnitPrice + +```vb +Unit Price := Rate/365 * Knock off amount (Excluding GST) +``` + +* Minimum UDF Fields Required (Header Fields) + +| **Name** | **Data Type** | **Size** | **Caption** | **Required** | **Default Value** | +|-----------|---------------|----------|---------------|--------------|-------------------| +| PostDN | Boolean | | UDF_PostDN | False | False | +| TaxRate | String | 10 | UDF_TaxRate | False | 0% | + +### Customer Due Listing + +*Menu: Customer | Print Customer Due Document...* + +* Auto Generate Sales Debit Note for overdue Invoice & Debit Note (can untick the option if don't wanted to be included before click Apply button) +* It will Generate 1 Customer Code 1 Sales Debit Note +* The rate is from Ref Price of OVERDUE itemcode (just enter 0.1 for 10% pa) +* Formula Qty + +```vb +if Age < DaysInAMonth(edDueDate.Date) then + Qty := Age else + Qty := DaysInAMonth(edDueDate.Date); +``` + +* Formula UnitPrice + +```vb +Unit Price := Rate/365 * Outstanding amount (Excluding GST) +``` + +![custDueDocListing](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/custDueDocListing.jpg) + +1. Set the Date to generate Overdue +2. Tick the following option + + * Invoice + * Debit Note (if you wanted to include in calculation overdue) + * Overdue + +3. Click Apply button +4. Select & Enter the DN Information +5. Click 1. Post DN button + +:::success NOTE : +For more accurate calculation for Unit Price, try set the Unit Price to 4 Decimal points +::: + +### Sales Document Listing + +*Menu: Sales | Print Sales Document Listing...* + +* Is a batch + +* Delete Document +* Copy From 1 Document type & Paste To Same or Other Document Type + +Base on the parameter selected & result shown in the grid + +![salesDocList](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/salesDocList.jpg) + +### Batch Delete Document + +Below is example to delete Invoice + +1. Select Invoice Listing +2. Select Range Date or any parameter you prefer +3. Click Apply button +4. Click Delete button + +:::warning +Only Select follow filter + +* Date +* Customer +* Agent +* Area +* Company Category +* Doc. Project + +::: + +### Batch Copy & Paste Document + +Below is example to Copy from Invoice to Invoice + +1. Select Invoice Listing +2. Select Range Date or any parameter you prefer +3. Click Apply button +4. In the section A (See icon A) + +5. Click Post button + +## Steps + +### Maintain Customer + +*Menu: Customer | Maintain Customer...* + +Generating Maintenance - SQFT + +![maintainCust](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/maintainCust.jpg) + +1. Click 1. Gen/B button. + + ![custList](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/custList.jpg) + +2. Untick any Customer you don't wanted to Generate +3. Select the Item Code. +4. Enter the Item Description. +5. Enter the Document Date. +6. Select Project (Optional) +7. Select Document Number Set to use +8. Click Post to generate + +:::success If system prompt "Do you want to set "xxxxxx" as your default document running number set?" +Just click Yes to avoid keep prompt again +::: + +:::warning +Make sure the Build Up (sf), Use Maintain Customer Price & Unit Price/SQFT Column +is shown at Browse Screen before Click the Gen/B button +::: + +### Quotation + +*Menu: Sales | Quotation...* + +#### Generating Maintenance + +![quotMaintainence](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/quotMaintainence.jpg) + +1. Enter/Change the Description to be shown in Sales Invoice & Customer Statement +2. Enter/Change the Date & Terms & other Information in Detail +3. Select Recurring Type (i.e. Maintenance). +4. Select Document Number Set to use. +5. Click Save button. +6. Click 3. Generate Bill button. + +![custGenerate](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/custGenerate.jpg) + +1. Untick any Customer you don't wanted to Generate +2. Click Ok button to generate + +:::success The above steps also applicable for **Generating Maintenance for SQFT** +::: + +#### Generating Meter Reading + +![meterReading](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/meterReading.jpg) + +1. Enter/Change the Description to be shown in Sales Invoice & Customer Statement +2. Enter/Change the **Date & Terms** & other Information in Detail +3. Select Recurring Type (i.e. Water Reading). +4. Select **Document Number Set** to use. +5. Click Save button. +6. Click **3. Generate Bill** button. + +![tick](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/tick.jpg) + +1. Untick any Customer you don't wanted to Generate +2. Enter the Current Reading for each Customer + +3. Tick **Include Grid Detail Info**. (optional & available if Use Price Range is UnTick) + * if you wanted combine **Generate Maintenance** + * Must use the **Generate Maintenance** Template(Quotation) + +4. Click Ok button to generate + +:::success If system prompt "Do you want to set "xxxxxx" as your default document running number set?" +Just click Yes to avoid keep prompt again +::: + +### Customer Payment + +*Menu: Customer | Customer Payment...* + +![custPaymentEntry](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/custPaymentEntry.jpg) + +Below is example for **Generating Due Interest** from Customer Payment + +1. Click New button +2. Select Customer Code +3. Enter & Select the DN Information +4. Click **0. Show Due IV/DN...** button + + ![dueInterest](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/dueInterest.jpg) + +5. May untick which don't wanted to include the Due Interest Calculation. +6. Click **Post DN** Button to Post/Generate Due Interest DN +7. Click **Close** + +:::warning +Make sure the **UDF_PostDN** Default is Set to **False** else will double posting +::: + +:::success NOTE: +The Age calculate to System Working Date. + +The UnitPrice is round to 4 Decimal Point. + +The GST Rate field is use to Pre-Calculate the Due Amount before posting Only. + +The GST rate is still base on the GST Tax code you set in Maintain Item or Tools | option or Maintain Customer. +::: + +## Recurring FAQ + +### Where to Generate the Cust Local - Payment Listing (GST 1) - Knock Off Doc No Set - Cross report? + +*Menu : Customer | Print Customer Document Listing... | Customer Payment Listing*_ + +### How the Column Description shown in Cust Local - Payment Listing (GST 1) - Knock Off Doc No Set - Cross report? + +*Menu : Tools | Maintain Document Number...* + +It use + +* Description field as Caption +* First 2 Character Format field as Grouping (eg Format RE-IV-%.5d it will group by RE) + +### Where to Generate the Sales Customer Price History - ItemCode - Cross report? + +*Menu : Sales | Print Print Sales Price History...* + +Select Customer in Group/Sort By : Option + +### My company not using Rebate & Min. Charge. What Input Value I need to set? + +Just set the Discount Value to 0+0 + +### How is the Rebate & Min.Charge is Work? + +Default System will Calculate the Min. Charge then Only Rebate + +### Can I use Maintain Customer Agent/Terms code instead use Quotation Agent/Terms code? + +Yes can just Create & set the Code as zProfile for Agent and/or Terms + +### Can I use Maintain Customer Agent/Terms code instead of using Quotation Agent/Terms code? + +Yes can just Create & set the Code as zProfile for Agent and/or Terms + +![zProfile](../../../static/img/miscellaneous/business-nature-industries/recurringGuide/zProfile.jpg) + +### Why at Maintain Customer Gen/B I can't select the Itemcode? + +Make sure you had Stock Group begin with MAINTENANCE & all itemcode is set to this Stock Group diff --git a/docs/miscellaneous/business-nature-industries/photocopier-meter.md b/docs/miscellaneous/business-nature-industries/photocopier-meter.md index f53e3e84..0c98b998 100644 --- a/docs/miscellaneous/business-nature-industries/photocopier-meter.md +++ b/docs/miscellaneous/business-nature-industries/photocopier-meter.md @@ -1,5 +1,5 @@ --- -sidebar_position: 1 +sidebar_position: 2 id: photocopier-meter title: Photocopier Meter description: A guide to get price of photocopier meter in quotation @@ -15,11 +15,11 @@ The document number must be in the format = `S-%.5d` to allow the system to get 1. Create a new quatation (QT), and enter all product info inside. - ![1](../../../static/img/business-nature-industries/photocopier-meter/1.png) + ![1](../../../static/img/miscellaneous/business-nature-industries/photocopier-meter/1.png) 2. Tools | Option | Unitprice, place Last Quotation Selling Price at first place. - ![2](../../../static/img/business-nature-industries/photocopier-meter/2.png) + ![2](../../../static/img/miscellaneous/business-nature-industries/photocopier-meter/2.png) 3. Create a new sales invoice and select a customer @@ -27,11 +27,11 @@ The document number must be in the format = `S-%.5d` to allow the system to get 2. Enter Current Reading (Meter reading). 0 reading will not append to this invoice 3. After done, Press **POST** Button - ![3](../../../static/img/business-nature-industries/photocopier-meter/3.png) + ![3](../../../static/img/miscellaneous/business-nature-industries/photocopier-meter/3.png) Result after done: - ![4](../../../static/img/business-nature-industries/photocopier-meter/4.png) + ![4](../../../static/img/miscellaneous/business-nature-industries/photocopier-meter/4.png) 4. After saving the invoice, system will append the info to QT. @@ -45,4 +45,4 @@ The document number must be in the format = `S-%.5d` to allow the system to get - Amount = UDF_AddFees + UDF_MthlyCharges - After that system will auto update the info to QT. - ![5](../../../static/img/business-nature-industries/photocopier-meter/5.png) + ![5](../../../static/img/miscellaneous/business-nature-industries/photocopier-meter/5.png) diff --git a/docs/miscellaneous/business-nature-industries/sample-recurring-company.md b/docs/miscellaneous/business-nature-industries/sample-recurring-company.md index 8d4ab940..bdd06790 100644 --- a/docs/miscellaneous/business-nature-industries/sample-recurring-company.md +++ b/docs/miscellaneous/business-nature-industries/sample-recurring-company.md @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +sidebar_position: 4 id: sample-recurring-company title: Sample Recurring Company description: sample recurring company @@ -19,7 +19,7 @@ Use Company Category for filtering 1. Customer | Maintain Customer | Cust. Category = Filtering - ![1](../../../static/img/business-nature-industries/sample-recurring-company/1.png) + ![1](../../../static/img/miscellaneous/business-nature-industries/sample-recurring-company/1.png) 2. Sales | Quotation | @@ -33,11 +33,11 @@ Use Company Category for filtering - A-Tenant;Water => For Water Billing - A-Tenant;Park => For Car Park - ![2](../../../static/img/business-nature-industries/sample-recurring-company/2.png) + ![2](../../../static/img/miscellaneous/business-nature-industries/sample-recurring-company/2.png) - ![3](../../../static/img/business-nature-industries/sample-recurring-company/3.png) + ![3](../../../static/img/miscellaneous/business-nature-industries/sample-recurring-company/3.png) - ![4](../../../static/img/business-nature-industries/sample-recurring-company/4.png) + ![4](../../../static/img/miscellaneous/business-nature-industries/sample-recurring-company/4.png) 3. Sales | Invoice | Invoice auto generated. @@ -70,11 +70,11 @@ Use Company Category for filtering Refer below sample picture: - ![5](../../../static/img/business-nature-industries/sample-recurring-company/5.png) + ![5](../../../static/img/miscellaneous/business-nature-industries/sample-recurring-company/5.png) When you press ok, system will prompt this message as below : - ![6](../../../static/img/business-nature-industries/sample-recurring-company/6.png) + ![6](../../../static/img/miscellaneous/business-nature-industries/sample-recurring-company/6.png) 1. Press **No** so that the system will capture the *Price* you have set at **Cust Price Tab**. @@ -130,7 +130,7 @@ Use Company Category for filtering - Will auto generate Overdue Debit Note if the Knock-off Invoice is overdue. - User can set **Default Value** to ***False*** (at AR_PM - Payment Field), if not used (**Default Value** is set to ***True***) - ![7](../../../static/img/business-nature-industries/sample-recurring-company/7.png) + ![7](../../../static/img/miscellaneous/business-nature-industries/sample-recurring-company/7.png) Formula: Rate/365 * KOAmt diff --git a/docs/miscellaneous/clipboard-import.md b/docs/miscellaneous/clipboard-import.md index fdbce505..acad5fde 100644 --- a/docs/miscellaneous/clipboard-import.md +++ b/docs/miscellaneous/clipboard-import.md @@ -1,5 +1,6 @@ --- title: Clipboard Excel Import +id: clipboard-import description: A guide about clipboard excel import for SQL Account slug: /miscellaneous/clipboard-import tags: ["SQL Account", 'Import'] diff --git a/docs/miscellaneous/excel-import-program.md b/docs/miscellaneous/excel-import-program.md deleted file mode 100644 index 69b6cd46..00000000 --- a/docs/miscellaneous/excel-import-program.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -sidebar_position: 16 -id: excel-import-program -title: Excel Import Guide -description: A quick guide on Excel Import Program for SQL Account -slug: /miscellaneous/excel-import-program -tags: ["SQL Account", "Excel", "Import"] ---- - -[Click here for latest Excel Import guide](https://wiki.sql.com.my/wiki/SQL_Acc_XLS_n_MDB_Import) diff --git a/docs/miscellaneous/gst.md b/docs/miscellaneous/gst.md deleted file mode 100644 index e7411b50..00000000 --- a/docs/miscellaneous/gst.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: GST -description: Info about GST -slug: /miscellaneous/gst -tags: ["SQL Account","GST"] ---- - -## History of GST - -Historical changes in GST Accounting Guideline. - -![97](../../static/img/getting-started/user-guide/96.png) - -## GST Audit File (GAF) - -1. GAF is constructed from 5 records elements. - - ![98](../../static/img/getting-started/user-guide/97.png) - -2. GAF – Record Elements (P, S). - - ![99](../../static/img/getting-started/user-guide/98.png) - -3. GAF – Record Elements (L). - - ![100](../../static/img/getting-started/user-guide/99.png) - -4. GAF – Record Elements (F). - - ![101](../../static/img/getting-started/user-guide/100.png) - -## Generate GAF - -:::info - -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=EoyLOMs5pQg&feature=youtu.be) - -::: - -GAF = GST Audit File. - -The purpose of a GAF is for Customs to audit the accuracy of your GST Return but GAF submission is only required upon request. It is not required to be submitted with GST-03. - -1. Click on **GST** | **Open GST Return**. - - ![102](../../static/img/getting-started/user-guide/101.png) - -2. Select the cycle for the GAF that you want to generate. Then click on the **arrow down button** and select **Generate GST Audit File(GAF)**. - - ![103](../../static/img/getting-started/user-guide/102.png) - -3. The result is generated based on **General, Sales & Purchase Ledger** for you to check your transactions before submitting to Customs for auditing purposes. - - ![104](../../static/img/getting-started/user-guide/103.png) - -4. You may check the report. - -5. Click on **Save as Text**. - - ![105](../../static/img/getting-started/user-guide/104.png) - -6. Save your GAF text file to desktop. - - ![106](../../static/img/getting-started/user-guide/105.png) - -7. After saving, the message “File generated successfully” will automatically pop-up, just click **OK**. - - ![107](../../static/img/getting-started/user-guide/106.png) - -8. Go to desktop to select the GAF.txt file. The output will be similar to the image below: - - ![108](../../static/img/getting-started/user-guide/107.png) - -The above is the exported file that has fulfilled all requirements by Customs, you may submit to [Customs Department](https://gst.customs.gov.my/TAP) - -:::note - -C= Company Name - -P = Purchase Transaction - -S = Sales Transaction - -L = General Ledger transaction - -You have to submit GAF File upon request by Customs. - -::: - -## GST Listing Report - -This report is to analyse the detail of GST transactions grouped by tax type. It can be used to check against GST-03. - -1. **GST** | **Print GST Listing**. - -2. Filter the date range that you want to apply or you can filter by GST Process, tax code. - -3. Click **Apply**. - - ![109](../../static/img/getting-started/user-guide/108.png) - - ![110](../../static/img/getting-started/user-guide/109.png) diff --git a/docs/miscellaneous/import-export-guide.md b/docs/miscellaneous/import-export-guide.md index 6fdc2171..b9cf0447 100644 --- a/docs/miscellaneous/import-export-guide.md +++ b/docs/miscellaneous/import-export-guide.md @@ -40,7 +40,7 @@ For more details & updates, please click [here](https://wiki.sql.com.my/wiki/SQL 5. Click Export > Select the location where you want to export > Enter the Export File Name > Press Save > Export the Data 6. Done - ![export-succuess](../../static/img/miscellaneous/import-export-guide/export-success.png) + ![export-success](../../static/img/miscellaneous/import-export-guide/export-success.png) ## Import @@ -131,3 +131,75 @@ If you encounter this error message: **Solution:** Check if you have any DIY Fields in the source database and ensure the destination database has the same DIY Fields configured. + +## FAQ + +### Why the SO or PH Deposit is not Imported even the XML had the information? + +It because the D_DocNo field can't set. User had to export the OR/PV from Customer Payment/Supplier Payment + +### Why AR_PM, AR_CN, AP_SP & AP_SC can't don't had the Replace Action? + +It due to + +- Gain Loss +- Refund knock off can't be replace +- GST-03 Item 12 Net Gain in Forex + +### Why after upgrade SQL Acc Version 742 & above when import GL_PV, GL_OR & GL_JE prompt Access Violation + +It due to from Version 742 & above the Detail field TAXREF is change to GSTNO; + +### I had 2 or more database/Company to import but how can I avoid import wrong zip file? + +- Using Version 5.6.0.21 you can add in the zip file with Profile.txt with content "CompanyName";"Remark"; +eg "Testing Company";"2017"; in the Profile.txt +- This function unavailable for Fast XML Import function. +- Remember to set to 1 in Tools | Options | CheckProfile +- This function is only Alert user if not match & user still can by ignore the Alert & continue import + +### In my zip file consist of xml file which filename had follow the requirement but why still empty when Get file? + +Make sure the xml file Attributes for the following setting is selected (Right Click | Properties | General | Advanced...) + +- File is ready for archiving +- Allow this file to have contents indexed in addition to file properties + +### Do the XML import Description3 support multi line? + +Yes but you need to adjust the Field SUBTYPE from Binary to Text + +Original + +```pascal +... + +... +``` + +Original + +```pascal +... + +... +``` + +And Data input as below + +```pascal +... + + +... +``` + +Result + +```pascal +Line 1 +#Line 2 +Line 3 +``` diff --git a/docs/miscellaneous/list-acc-import.md b/docs/miscellaneous/list-acc-import.md new file mode 100644 index 00000000..bcf578b6 --- /dev/null +++ b/docs/miscellaneous/list-acc-import.md @@ -0,0 +1,49 @@ +--- +sidebar_position: 16 +id: import-list +title: List of Accounting can be import to SQL Accounting +description: List of Accounting can be import to SQL Accounting +slug: /miscellaneous/list-acc-import +tags: ["SQL Account", "Export", "Import"] +--- + + +| Product | File Type | File/Table Name | File Extension | Master File (90%) | Opening Balance (70–80%) | Current Transactions (70–80%) | Remarks | +|----------|------------|------------------|----------------|-------------------|---------------------------|--------------------------------|----------| +| Autocount Enterprise 2005 | MSSQL | AutoCount Backup | A06 | Yes | Yes | Yes (Except Sales & Purchase Outstanding) | | +| UBS Accounting | Foxpro | UBS Backup | ACC | Yes | Yes | No | | +| UBS Stock | Foxpro | UBS Backup | STK | Yes | Yes | No | | +| QnE | Firebird | Tables | GDB / QZB / QIB | Yes (Except GL Maintain Account) | No | No | | +| QnE (MSSQL) | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | +| Mr Accounting (MSSQL) | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | +| 3A Accounting (Windows) | MS Access | Crdat.mdb / DbDat.mdb / Stdat.mdb | MDB | Yes (Except GL Maintain Account) | No | No | | +| Emas | Foxpro | Emas Backup | EMS | Yes* | Yes | No | | +| Emas (MySQL) | MySQL | Tables | sql | Yes (Except GL Maintain Account & Stock) | No | No | | +| Smart Accounting | — | AcStk.DB / AcCard.DB (Use Office XP to Open) | DB | Yes (Except GL Maintain Account) | No | No | | +| Smart Accounting (MSSQL) | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | +| AccSys Business Information System | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | +| Million Business Software | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | Yes | No | | +| ICS Accounting | MS Access | Cred6000 / Debt6000 / Mast4000 / ENVI1000.MDB | MDB | Yes (Except GL Maintain Account) | No | No | | +| APlus | DBase | agent.dbf / area.dbf / currency.dbf / customer.dbf / vendor.dbf / stock.dbf | DBF | Yes (Except GL Maintain Account) | No | No | | +| APlus (MSSQL) | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | +| MYOB | MYO | addr.csv / cards.csv / chacc.csv / items.csv / terms.csv (CSV via myData CLI) | MYO | Yes | No | No | | +| Master Accounting | MySQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | +| ESoft Accounting | MySQL | Tables | sql | Yes (Except GL Maintain Account & Stock) | No | No | | +| iFAS Accounting | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | +| Remicle | PostgreSQL | PostgreSQL dump (.sql / .zip) — product_product, res_partner | sql | Yes (Except GL Maintain Account) | No | No | | +| GreenPlus Accounting | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | +| Kusimi | MySQL | Tables | sql | Yes (Except GL Maintain Account & Stock) | No | No | | +| MHW Financial Accounting | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | +| BBS Accounting | MSSQL | Tables | BAK | Yes (Except GL Maintain Account) | No | No | | + +*Yes* = Supported +*No* = Not supported +*Yes\** = Conditional support depending on data completeness + +:::info + +* EMAS Chart of Account - will only assign bank account special type if detected. The rest of accounts need customer re-check. + +::: + +Highlighted with background mean direct import to SQL Database else will export to Excel or CSV file diff --git a/docs/miscellaneous/party-3-import.md b/docs/miscellaneous/party-3-import.md new file mode 100644 index 00000000..40096c25 --- /dev/null +++ b/docs/miscellaneous/party-3-import.md @@ -0,0 +1,812 @@ +--- +sidebar_position: 2 +title: Third Party Import +description: A guide about Third Party Import for SQL Account +slug: /miscellaneous/party-3-import +tags: ["SQL Account", 'Import'] +--- + +## Mamee + +Is External Shareware Program which to import Mamee Text or CSV file to + +- Sales Invoice +- Sales Credit Note +- Sales Debit Note (Non Product Related Only) + +## Limitation (Mamee) + +- Fixed Tax Code SR (i.e. all transaction is SR) +- Only support Mamee Product Related file (i.e. file with end HDR or DTL eg INVHDR or INVDTL) + +## Mamee Specification + +### Format 1 (Mamee) + +- 03 Dec 2015 +- [Mamee Example File](http://www.estream.com.my/downloadfile/Fairy/Mamee-ExampleFile.zip) + +### Format 2 (Mamee) + +- 22 Nov 2017 +- [Mamee Example File 2](http://www.estream.com.my/downloadfile/Fairy/Mamee-ExampleFile2.zip) + +## Import Program (Mamee) + +- Version (2.4.0.5) - 08 Dec 2017 +- Evaluation Limit : 100 Records per file +- [SQL Account Mamee Import Setup](http://www.estream.com.my/downloadfile/Fairy/SQLAccMameeImp-setup.exe) +- MD5 : `BA72428486784AFC3655601294BE83FD` + +### History New/Update/Changes (Mamee) + +--Build 5-- + +- Upgrade to Version 2.4. +- Upgrade to New Compiler. +- Add Format 2 import. +--Build 4-- + +- Upgrade to Version 1.3. +- Add Maintain Non-Product GL Function. +- Enable Import Non-Product Sales CN & DN Import +--Build 3-- + +- Upgrade to Version 1.2. +- Error in matching Agent +- Amount not excluding Disc Amount after Import. +- Add Link to SQL Acc. File | Run. +- Rearrange Detail column +- Fix Detail not Sort by Seq +- Set Disc to 2 Decimal Point. +--Build 2-- + +- Error on Maintain Agent if Record More then 1 +--Build 1-- + +- Upgrade to Version 1.1 +- Add Maintain Agent Function. +- Enable Use Census Number field as SQL Acc Customer Code. + +## Field Mapping - Header (Mamee) + +### Produc Related - Format 1 (Mamee Header) + +![21](../../static/img/miscellaneous/third-party-import/mamee-header-1.png) + +### Product Related - Format 2 (Mamee Header) + +![22](../../static/img/miscellaneous/third-party-import/mamee-header-2.png) + +## Field Mapping - Detail (Mamee) + +### Product Related - Format 1 (Mamee Detail) + +![23](../../static/img/miscellaneous/third-party-import/mamee-detail-1.png) + +### Product Related - Format 2 (Mamee Detail) + +![24](../../static/img/miscellaneous/third-party-import/mamee-detail-2.png) + +### Non-Product Related (Mamee Header) + +![25](../../static/img/miscellaneous/third-party-import/mamee-header-xproduct.png) + +## Setting (Mamee) + +### In SQL Accounting (Mamee) + +Make sure this option is Tick under Tools | Options | Customer + +- One Cent Different Rounding (Local Currency Fields) for all AR/SL Documents (Recommended) + +### In Mamee Import + +Menu : Tools | Options... + +| **Options** | **Description** | +|--------------|-----------------| +| **MameeCustomerCodeAsCode** | `0` : Mamee Census Number check against SQLAcc Customer Code Field
`1` : Mamee Customer Code same as SQLAcc Customer Code Field **(Recommended)** | +| **MameeSalesmanCodeAsAgent** | `0` : Mamee Salesman Code will use Mamee Import Agent List
`1` : Mamee Salesman Code same as SQLAcc Agent Code **(Recommended)** | +| **FormatType** | `1` : Format 1
`2` : Format 2 | + +Menu : Tools | Maintain Agent... + +![1](../../static/img/miscellaneous/third-party-import/mamee-import1.png) + +| Options | Description | +|---------------|-----------------------------| +| Saleman Code | Mamee Salesman Code | +| Agent | SQL Accounting Agent Code | + +01. Click the + button +02. Enter the Mamee Salesman Code +03. Select the SQL Accounting Agent Code +04. Click Tick to Save +Menu : Tools | Maintain Non-Product GL... + +![2](../../static/img/miscellaneous/third-party-import/mamee-import2.png) + +| Options | Description | +|-----------------------|--------------------------------------------------| +| Mamee Reason Code | Mamee Reason Code | +| Reason Desc. | Mamee Reason Description | +| GL Acc. Debit Note | SQL Accounting GL Account Code for Debit Note | +| GL Acc. Credit Note | SQL Accounting GL Account Code for Credit Note | + +01. Select the record +02. Click Edit (the up arrow) +03. Select the GL Code for Debit Note +04. Select the GL Code for Credit Note +05. Click Tick to Save + +## Steps (Mamee) + +### Product Related (Mamee) + +Below steps is example to import Sales Invoice + +01. Click **Product | Invoice...** + + ![3](../../static/img/miscellaneous/third-party-import/mamee-pr-step1.png) + +02. Click **Get File** button & system will prompt 2 dialog like below + + ![4](../../static/img/miscellaneous/third-party-import/mamee-pr-step2.png) + +03. Select the Mamee Invoice **Text/CSV** Header File +04. Click **Open** + + ![5](../../static/img/miscellaneous/third-party-import/mamee-pr-step4.png) + +05. Select the Mamee Invoice Text/CSV Detail File +06. Click **Open** +07. Click **Verify** button to check the data with SQL Accounting Data +08. Click **Post To A/c** button if confirm all is ok to post to SQL Accounting + +:::info +Record(s) will only **Post** if the **Check Box** is Tick & **Status** is Ok +::: + +### Non-Product Related (Mamee) + +Below steps is example to import Sales Credit Note + +01. Click **Non-Product | Credit Note...** + + ![6](../../static/img/miscellaneous/third-party-import/mamee-npr-step1.png) + +02. Click **Get File** button & system will prompt dialog like below + + ![7](../../static/img/miscellaneous/third-party-import/mamee-npr-step2.png) + +03. Select the Mamee Non Product Credit Note Text/CSV File +04. Click **Open** +05. Click **Verify** button to check the data with SQL Accounting Data +06. Click **Post To A/c** button if confirm all is ok to post to SQL Accounting + +## F&N + +Is External Shareware Program which to import F&N Text file to + +- Sales Invoice +- Sales Credit Note +Export E-Invoice to F&N - Available in Build 18 & Above + +- Sales Invoice +- Sales Credit Note + +## Limitation (F&N) + +- TaxCode with DS will not import. + +## F&N Specification + +- 17 Jun 2015 - ESD soft-drink +- [FN Acct Integration Refrences-20150617](https://download.sql.com.my/customer/Fairy/FN-Acct_Integration_Reference-20150617.zip) + +- 15 Aug 2016 - ESD Online +- [FN-Acct Integration Refrences-20160815](https://download.sql.com.my/customer/Fairy/FN-Acct_Integration_Reference-20160815.zip) + +## Import Program (F&N) + +- Version (3.5.0.23) - 18 Dec 2024 +- Evaluation Limit : 50 Records per file +- [SQL Account F&N Import Setup](https://download.sql.com.my/customer/Fairy/SQLAccFNImp-setup.exe) +- MD5 : `F8114AE694FB966D93082A3FEC57D17C` + +### History New/Update/Changes (F&N) + +--Build 23-- + +- Remove Check UOM from Option. +- Add check UOM base on FnN UOM. +--Build 22-- + +- Fix partly support Version 860 & above. +- Add show Outlet Name. +--Build 21-- + +- Enable support Version 858 for Export E-IV. +- Enable support Version 860 & above. +--Build 20-- + +- Fixed Export E-IV for CN apply error. +- Fixed Export E-IV dateTimeValidated formatting not correct. +--Build 19-- + +- Enable Import E-Invoice Info from FnN. +- Fixed Export E-IV header delimiter not correct. +--Build 18-- + +- Upgrade to Version 3.6. +- Add FnN to Header Field CC as indicator Import from FnN. +- Remove L tax code from import. +- Set Default Open FnN ESD Online Files format. +- Add E-Invoicing Export function. +--Build 17-- + +- Fixed Use UOMList not working. +--Build 16-- + +- Add Import Remark to DeliveryTerm Field for CSV format. +--Build 15-- + +- Add Auto Set to Outlet_ID2 if Debtor_Code2 is empty for CSV format. +- Add Get User Guide Option. +--Build 14-- + +- Upgrade to Version 3.5. +- Enable support Running In Windows Limited User. +- Fixed Verify Detail Error not untick the Master when itemcode not found. +- Fixed Verify Not Check Item Code UOM. +- Fixed Scrollbar not visible. +--Build 13-- + +- Upgrade to Version 3.4. +- Add Project & Location Lookup for Posting. +--Build 12-- + +- Add Outlet_ID2 to shown in Grid. +--Build 11-- + +- Upgrade to D25 Compiler. +- Upgrade to Version 3.3. +- Remove Import Debtor_Name2. +--Build 10-- + +- Upgrade to XE10 Compiler. +- Upgrade to Version 3.2 +- Add Link to SQL Acc. File | Run. +- Add OutletID=Maintain Customer Code +- Add ESD Online - CSV Format +--Build 9-- + +- Fix unable to import docamt is 0 even is no DS Code. +- Fix Status no dropdown list. +- Fix Detail not Verify. +--Build 8-- + +- Fix Get File Error when record is without tax code. +--Build 7-- + +- Fix CN Get File Error. + +## Field Mapping - Header (F&N) + +- As at 17 Jun 2015 - ESD soft-drink - Fixed Length Format + +| FnN Field | Field Position | Field Size | SQL Accounting Field | +|-------------|--------------:|----------:|---------------------------------------| +| Invoice_Date| 1 | 10 | DocDate | +| Invoice_ID | 11 | 10 | DocNo | +| Gross Amount| 41 | 10 | DocAmt | +| Outlet_ID | 71 | 10 | Maintain Customer Remark or Code | + +- As at 15 Aug 2016 - ESD Online - CSV Format + +| FnN Field | Field Position | Field Size | SQL Accounting Field | +|------------------|--------------:|----------:|------------------------------------------------| +| Invoice_Date | 0 | 10 | DocDate | +| Invoice_ID | 1 | 15 | DocNo | +| Total_Gross_Amount | 4 | 10 | DocAmt | +| Debtor_Code2 | 9 | 10 | Customer Code | +| Debtor_Name2 | 10 | 150 | Customer Name
Not valid for Build 11 & above | +| Outlet_ID2 | 11 | 10 | Display Only | +| Remark | 12 | 200 | Delivery Term
Available in Build 16 & above | + +## Field Mapping - Detail + +- As at 17 Jun 2015 - ESD soft-drink - Fixed Length Format + +![26](../../static/img/miscellaneous/third-party-import/fnn-detail1.png) + +- As at 15 Aug 2016 - ESD Online - CSV Format + +![27](../../static/img/miscellaneous/third-party-import/fnn-detail2.png) + +## Setting (F&N) + +### In SQL Accounting (F&N) + +01. May refer to Point 2 at Things To Consider Before Import/Post +02. Make sure this option is Tick under Tools | Options | Customer + +- Perform Tax/Local Amount Rounding + +### In F&N Import + +| Options | Description | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------| +| UOMList | List of UOM available in F&N (Normally is CTN & PCS) | +| DocNoAsDocNo | 0 : F&N DocNo will post to SQLAcc DocNoEx Field
1 : F&N DocNo will post to SQLAcc DocNo Field (Recommended) | +| FNCodeAsItemCode | 0 : F&N ItemCode will check against SQL Accounting \| Maintain Item \| Note Field
1 : F&N Itemcode same as SQL Accounting Itemcode (Recommended) | +| FNUOMAsUOM | 0 : F&N ItemCode will check against UOMList
1 : F&N Itemcode UOM same as SQLAcc Itemcode UOM (Recommended) | +| OutletIDAsCompCode| For ESD soft-drink – Fixed Length Format Only
0 : F&N Outlet ID will check against SQL Accounting \| Maintain Customer \| Remark Field
1 : F&N Outlet ID same as SQLAcc Customer Code (Recommended) | + +## Steps (F&N) + +### Import Invoice/Credit Note (F&N) + +Below steps is example to import Sales Invoice +01. Click Sales | Invoice... +02. Click Get File button & system will prompt 2 dialog like below + + ![8](../../static/img/miscellaneous/third-party-import/fnn-import1.png) + +03. Click Files of Type & select the FnN File Format type +04. Select the F&N Invoice Text Header File + + ![9](../../static/img/miscellaneous/third-party-import/fnn-import2.png) + +05. Select the F&N Invoice Text Detail File + + ![10](../../static/img/miscellaneous/third-party-import/fnn-import3.png) + +06. Click Verify button to check the data with SQL Accounting Data +07. Select Project & Location (if Required) +08. Click Post To A/c button if confirm all is ok to post to SQL Accounting + +:::caution +Remember to check the data with Has Deemed Supplies column which is Tick as system will by pass posting +::: + +### Export E Invoice/Credit Note (F&N) + + ![11](../../static/img/miscellaneous/third-party-import/fnn-export.png) + +01. Click Export E-Invoice Status... +02. Select Range Date (E-Invoice Submission date) +03. Select DocType (eg Invoice) +04. Click Apply +05. Click Export + +## Unilever + +Is External Shareware Program which to import Unilever CSV file to + +- Sales Order +- Sales Invoice +- Sales Credit Note + +## Unilever Specification + +- 07 Feb 2018 +- [Unilever Import Structure-20180207](http://www.estream.com.my/downloadfile/Fairy/UnileverImp-Structure-20180207.zip) +- 25 Sep 2017 +- [Unilever Import Structure-20170925](http://www.estream.com.my/downloadfile/Fairy/UnileverImp-Structure-20170925.zip) + +## Import Program (Unilever) + +- Version (1.3.0.12) - 05 Apr 2025 +- Evaluation Limit : 100 Records per file +- SQLAccUnileverImp-setup.exe +- MD5 : `44F7A21D88D3EA4F4C1D7CF0571FFD5D` + +### History New/Update/Changes (Unilever) + +--Build 12-- + +- Fixed Get SO for Old Format no data. +--Build 11-- + +- Upgrade to Version 1.3. +- Add Option to Import as Sales Order. +- Add Get User Guide option. +--Build 10-- + +- Enable Support Version 860 & above. +--Build 9-- + +- Add Copy Cell Value Function. +- Add Auto Add Rounding for DocAmt <> Total Detail Amount. +--Build 8-- + +- Fixed Find Company Code not Correct if almost same Retail Code. +- Fixed Setting loss after uninstall. +--Build 7-- + +- Upgrade to Version 1.2. +- Enable Support if Unilever using Both Cases and Pieces for 1 row by Convert to Smallest UOM for Cases. +--Build 6-- + +- Add ZRL & SR TaxCode Option +--Build 5-- + +- Fix Header DocNo not match with Detail DocNo +--Build 4-- + +- Verify DocNo not correct for Old Format import +- Amount should deduct Discount before append +--Build 3-- + +- Upgrade to Version 1.1. +- Add back Old Format Import with auto add 00 in-front of DocNo before Post to Account. +--Build 2-- + +- Fixed UnitPrice 0 when After Post to Account. +--Build 1-- + +- Update New Format. +--Build 0-- + +## Field Mapping - Header (Unilever) + +- 25 Sep 2017 + +| Unilever Field | Field Position | Field Size | SQL Accounting Field | +|------------------|--------------:|----------:|----------------------| +| **INVH_Type** | 1 | 2 | 01 – Sales Invoice
02 – Sales Credit Note | +| **INVH_No** | 3 | 10 | DocNo | +| **INVH_Retailer**| 17 | 8 | Code or Maintain Customer Remark | +| **INVH_Date** | 26 | 19 | DocDate | +| **INVH_Total** | 141 | 21 | Amount Before Discount | +| **INVH_Discount**| 162 | 21 | Discount Amount | + +- 07 Feb 2018 + +| Unilever Field | Field Position | Field Size | SQL Accounting Field | +|------------------|--------------:|----------:|----------------------| +| **INVH_Type** | 1 | 2 | 01 – Sales Invoice
02 – Sales Credit Note | +| **INVH_No** | 3 | 12 | DocNo | +| **INVH_Retailer**| 19 | 8 | Code or Maintain Customer Remark | +| **INVH_Date** | 28 | 19 | DocDate | +| **INVH_Total** | 143 | 21 | Amount Before Discount | +| **INVH_Discount**| 164 | 21 | Discount Amount | + +## Field Mapping - Detail (Unilever) + +- 25 Sep 2017 + +| Unilever Field | Field Position | Field Size | SQL Accounting Field | +|-----------------|--------------:|----------:|----------------------| +| **INVR_No** | 3 | 10 | DocNo | +| **INVR_Product**| 13 | 8 | Item Code or
Maintain Item Code Note | +| **INVR_Cases** | 26 | 22 | Qty (UOM = CA) | +| **INVR_Pieces** | 48 | 22 | Qty (UOM = PCS) | +| **INVR_Amount** | 70 | 21 | Amount | +| **INVR_Discount**| 91 | 21 | Discount | +| **INVR_TAXRate**| 133 | 22 | 0 Tax Code = ZRL
6 Tax Code = SR | +| **INVR_TAXTotal**| 155 | 21 | GST Amount | + +- 07 Feb 2018 + +| Unilever Field | Field Position | Field Size | SQL Accounting Field | +|------------------|--------------:|----------:|----------------------| +| **INVR_No** | 3 | 12 | DocNo | +| **INVR_Product** | 15 | 8 | Item Code or
Maintain Item Code Note | +| **INVR_Cases** | 28 | 22 | Qty (UOM = CA) | +| **INVR_Pieces** | 50 | 22 | Qty (UOM = PCS) | +| **INVR_Amount** | 72 | 21 | Amount | +| **INVR_Discount**| 93 | 21 | Discount | +| **INVR_TAXRate** | 135 | 22 | 0 Tax Code = ZRL
6 Tax Code = SR | +| **INVR_TAXTotal**| 157 | 21 | GST Amount | + +- Unit Price will not import & will auto Assign by SQL Accounting due to Unilever file don't had Pieces Price & UOM Rate + +## Setting (Unilever) + +### In SQL Accounting (Unilever) + +01. May refer to Point 2 at Things To Consider Before Import/Post +02. Make sure this option is Tick under Tools | Options | Customer + + - Perform Tax/Local Amount Rounding + +03. Menu: Stock | Maintain Stock Item... + +- Item Code to be create + - Rounding + +### In Unilever Import (Unilever) + +This can be see under Tools | Options + +| Options | Description | +|----------------------|------------| +| **UOM_Cases** | UOM for Cases in SQL Accounting
Default is CA | +| **UOM_Pieces** | UOM for Pieces in SQL Accounting
Default is PCS | +| **RetailAsCompCode** | 0 : Unilever Retail Code will check against SQL Accounting | Maintain Customer | Remark Field
1 : Unilever Retail Code same as SQL Accounting Customer Code (Recommended) | +| **UnileverCodeAsItemCode** | 0 : Unilever Item Code will check against SQL Accounting | Maintain Item | Note Field
1 : Unilever Item Code same as SQL Accounting Item Code (Recommended) | +| **TaxCodeZRL** | Tax code for 0% | +| **TaxCodeSR** | Tax Code other than 0% | + +## Steps (Unilever) + +Below steps is example to import Sales Invoice + +01. Click Sales | Invoice... +02. Click Get File button & system will prompt 2 dialog like below + + ![12](../../static/img/miscellaneous/third-party-import/unilever-import-step2.png) + +03. Select the Unilever Invoice Text Header File + + ![13](../../static/img/miscellaneous/third-party-import/unilever-import-step3.png) + +04. Select the Unilever Invoice Text Detail File + + ![14](../../static/img/miscellaneous/third-party-import/unilever-import-step4.png) + +05. Click Verify button to check the data with SQL Accounting Data +06. Select Project & Location (if Required) +07. Click Post To A/c button if confirm all is ok to post to SQL Accounting + +## Dryper + +Is External Shareware Program which to import & Export Dryper excel file to + +**Import** + +- Sales Order or Sales Invoice +- Purchase Order or Purchase Invoice +**Export** +- Sales Credit Note + +## Dryper Specification + +- 15 Jan 2019 +- [Dryper Specification-20190115](https://download.sql.com.my/customer/Fairy/Dryper_Spec-20190115.zip) + +## Import Program (Dryper) + +- Version (1.1.0.3) - 29 Jan 2021 +- Evaluation Limit : 100 Records per file +- [SQLAccDryperImp-setup](https://download.sql.com.my/customer/Fairy/SQLAccDryperImp-setup.exe) +- MD5 : `5D18B0207C9C12168D0394855EA378ED` + +### History New/Update/Changes (Dryper) + +--Build 3-- + +- Enable Support Version 782 & above (New ROC). +- Fixed DocNo Not able to select. +- Fixed Unable to Batch Highlight DocNo. +- Fixed Import Prompt Date Error. +- Add Shortcut Get User Guide. +--Build 2-- + +- Add Option SL-UseDryperItemDesc & PH-UseDryperItemDesc. +- Add Option SL-UseDocNoEx & PH-UseDocNoEx. +- Fixed Setting will loss on Uninstall. +--Build 1-- + +- Upgrade to Version 1.1. +- Add Option for use CustomerCode or ExternalReferenceNo2 for SQL Accounting Customer Code. +- Add Check Box at DocNo & remove Check Box in Data Grid +- Add Import PO & PI. +- Add Checking for BizNature & CompanyName2 field for Customer/Supplier Code +- Remove Import DocNoEx for ExternalReferenceNo2 +- Add Checking for Description2 & Note field for Item Code. +- Fixed unable to register. +--Build 0-- + +## Field Mapping (Dryper) + +### Sales Order or Sales Invoice (Dryper Mapping) + +| Dryper Field – SO | Dryper Field – IV | SQL Accounting Field | +|-------------------|-------------------|----------------------| +| **SalesOrderCode** | **SalesInvoiceCode** | DocNo | +| *Either 1 below* | *Either 1 below* | | +| CustomerCode | CustomerCode | Code | +| ExternalReferenceNo2 | ExternalReferenceNo2 | RegisterNo / GSTNo / Remark / CompanyName2 | +| **OrderDate** | **InvoiceDate** | DocDate | +| **ItemCode** | **ItemCode** | *Either 1 below* | +| | | Code
Remark1
Remark2
Shelf
Barcode | +| **ItemName** | **ItemName** | Item Description | +| **Quantity** | **Quantity** | Qty | +| **UOM** | **UOM** | UOM | +| **UnitPrice** | **UnitPrice** | UnitPrice | +| DiscountRate
where LineType = 1 | DiscountRate
where LineType = 1 | Disc | +| **TotalTaxAmount** | **TotalTaxAmount** | TaxAmt | +| **NetAmount** | **NetAmount** | Amount | +| **RoundingAmount** | **RoundingAmount** | Will Append as New itemcode RTN5Cents | + +### Purchase Order or Purchase Invoice (Dryper Mapping) + +| Dryper Field – PO | Dryper Field – PI | SQL Accounting Field | +|-------------------|-------------------|----------------------| +| **PurchaseOrderNo** | **InvoiceNo** | DocNo | +| *Either 1 below* | *Either 1 below* | | +| CreditorCode | CreditorCode | Code | +| SupplierCode | SupplierCode | RegisterNo / GSTNo / Remark / CompanyName2 | +| **ItemCode** | **ItemCode** | *Either 1 below* | +| | | Code
Remark1
Remark2
Shelf
Barcode | +| **ItemName** | **ItemName** | Item Description | +| **POQuantity** | **Quantity** | Qty | +| **UOM** | **UOM** | UOM | +| **UnitCost** | **UnitPrice** | UnitPrice | +| **NetAmount** | **NetAmount** | Amount | +| **OrderDate** | **GRNDate** | DocDate | + +### Customer Credit Note - Export (Dryper Mapping) + +| Dryper Field | SQL Accounting Field | +|-------------------|-----------------------------| +| **CompanyCode** | Hard Coded as 1 | +| **DistributorCode** | Field To Enter in Export Program | +| **BranchCode** | Field To Enter in Export Program | +| **CustomerCode** | Customer Code | +| **DocumentNo** | DocNo | +| **DocumentDate** | DocDate | +| **TotalAmount** | DocAmt | +| **PaidAmount** | DocAmt | +| **Status** | Hard Coded as 1 | +| **CreatedBy** | Hard Coded as SYSTEM | +| **CreatedTimestamp** | DocDate | + +## Setting (Dryper) + +### In SQL Accounting (Dryper Setting) + +01. May refer to Point 2 at Things To Consider Before Import/Post + +### In Dryper Import (Dryper Setting) + +This can be see under Tools | Options + +| Options | Description | +|--------------------------|------------| +| **UseCustomerCode** | 0 : Import will use Dryper ExternalReferenceNo2 Field as Customer Code
1 : Import will use Dryper CustomerCode Field as Customer Code | +| **UseSupplierCode** | 0 : Import will use Dryper CreditorCode Field as Supplier Code
1 : Import will use Dryper SupplierCode Field as Supplier Code | +| **SL-UseDryperItemDesc** | 0 : Import will use SQL Accounting Item Description For Sales Import
1 : Import will use Dryper Item Description For Sales Import | +| **PH-UseDryperItemDesc** | 0 : Import will use SQL Accounting Item Description For Purchase Import
1 : Import will use Dryper Item Description For Purchase Import | +| **SL-UseDocNoEx** | 0 : Import will Map Dryper DocNo to SQL Accounting DocNo For Sales Import
1 : Import will Map Dryper DocNo to SQL Accounting DocNoEx For Sales Import | +| **PH-UseDocNoEx** | 0 : Import will Map Dryper DocNo to SQL Accounting DocNo For Purchase Import
1 : Import will Map Dryper DocNo to SQL Accounting DocNoEx For Purchase Import | + +## Sales Order or Sales Invoice (Dryper Setting) + +Below is example for import Sales Invoice... +Menu: Sales | Invoice... + +01. Click 1. Get File button + + ![15](../../static/img/miscellaneous/third-party-import/dryper-so-step1.png) + +02. Select the File file wanted to import +03. Click Open + + ![16](../../static/img/miscellaneous/third-party-import/dryper-so-step3.png) + +04. Select the Excel Sheet (if more then 1) +05. Set No of record to Load (only available for Registered user) +06. Click 2. Get Data button +07. Click 3. Verify button +08. Click 4. Post To A/c button + +## Customer Credit Note - Export (Dryper Setting) + +Menu: Customer | Customer Credit Note - Export... +![17](../../static/img/miscellaneous/third-party-import/dryper-cn-export.png) + +01. Enter the Distributor Code (Provided by Dryper) +02. Enter the Branch Code (Provided by Dryper) +03. Select Range Date To export +04. Click Get Data... to get the Data from SQL Accounting +05. Click Export to xlsx to export out + +## FAQ (Dryper) + +### How it look like if Dryper had 3 level of discount? + +Once Import it will look like below + +![18](../../static/img/miscellaneous/third-party-import/faq-3level.png) + +## SLPH + +Is External Shareware Program which Convert Sales to Purchase Module or vice versa which exported from SQL Accounting +Normally is use to Export Data From SQL Accounting Database A from Document Type A (Eg Sales Invoice) & Import to SQL Accounting Database B as other Document Type (Eg Purchase Invoice) + +## Limitation (SLPH) + +- Only support 1 Company Code (i.e. 1 batch 1 Company Code) +- Both Source & Target must had Same Itemcode + +## Import Program (SLPH) + +- Version (5.2.1.10) - 20 Aug 2025 +- [Download Link](https://download.sql.com.my/customer/Fairy/SQLAccSLPHV5-setup.exe) +- MD5 : `7ECC58CCBA8B04A00E2F5582D234CE14` + +### History New/Update/Changes (SLPH) + +--Build 10-- + +- Fixed Tax Code empty after verify. +- Fixed TaxInclusive not Import. +--Build 9-- + +- Fixed Get File no records when in SQL Connect. +--Build 8-- + +- Fixed Get File Error due to SEQ field. +Add Get User Guide... Option. +--Build 7-- + +- Upgrade to Version 5.2.1. +- Enable Quick Customise Layout for Grid. +- Empty Item Code should by pass from Verify. +- Allow User Override Header Description. +- Enable Support Unicode +--Build 6-- + +- Fixed Import Sales/Purchase CN & DN Error. +--Build 5-- + +- Upgrade to Version 5.2. +- Add Option Use My Maintain Supplier/Customer Information for Sales/Purchase Import. +- Enable support Running In Windows Limited User. +--Build 4-- + +- Fixed Shown TaxCode Even Original no TaxCode. +--Build 3-- + +- Fix TaxRate Not Import +- Fixed Import Customer/Supplier prompt bad variance type. +--Build 2-- + +- Enable Support Version 5 SQL Accounting +- Add Maintain Tax +--Build 1-- + +- Fix unable to register Database + +## Setting (SLPH) + +### In SQL Accounting (SLPH) + +01. May refer to Point 2 at Things To Consider Before Import/Post +02. Make sure this option is Tick under Tools | Options | Customer + - Perform Tax/Local Amount Rounding + +### In SLPH Import + +Menu : Tools | Maintain Tax + +![19](../../static/img/miscellaneous/third-party-import/slph_import.png) + +01. Click New/Edit to Insert or update +02. Select Sales Tax Code +03. Select Purchase Tax Code +04. Click Post/Save + +## Steps (SLPH) + +Menu : Purchase | Purchase Invoice... +Below steps is example to import Purchase Invoice + +![20](../../static/img/miscellaneous/third-party-import/slph-step.png) + +01. Click Get File button +02. Select Supplier Code to update +03. Click Change Button +04. Click Verify button +05. Click Post to A/c Button + +| Option | Description | +|--------|------------| +| **Use Supplier Document No** | Tick : Will follow DocNo in the XML
UnTick : Auto Assign New Document Number In SQL Accounting | +| **Use My Maintain Supplier Information** | Tick : Will follow Maintain Supplier Information
UnTick : Will follow Document Supplier Information | +| **Purchase Invoice (Below Use My Maintain Supplier Information Option)** | Empty it : Will follow Document Header Description
With Value : Will follow the value entered in this field for Header Description | diff --git a/docs/miscellaneous/sst/_category_.json b/docs/miscellaneous/sst/_category_.json deleted file mode 100644 index 26d4b3d8..00000000 --- a/docs/miscellaneous/sst/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "SST", - "link": { - "type": "generated-index", - "title": "Sales & Service Tax", - "description": "SST info" - } -} \ No newline at end of file diff --git a/docs/miscellaneous/sst/double-entry.md b/docs/miscellaneous/sst/double-entry.md deleted file mode 100644 index 7c18a546..00000000 --- a/docs/miscellaneous/sst/double-entry.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Double Entry -description: SST double entry -slug: /miscellaneous/sst/double-entry -tags: ["SQL Account","SST", "Double Entry"] ---- - -## Posting - -1. Sales Tax (Accrual Basis) - - ![221](../../../static/img/getting-started/user-guide/221.png) - -2. Service Tax (Payment Basis) - - In SST 2.0, the service tax is due and payable when payment is received for any taxable service. - - ![222](../../../static/img/getting-started/user-guide/222.png) - - 1. Issue sales invoice with service tax 6%, date 31/10/2018, Amount RM 1,000.00 & Tax Amount RM 60.00. - - ![223](../../../static/img/getting-started/user-guide/223.png) - - 2. Process SST Return from 01/09/2018 to 31/10/2018. Total Tax Payable is RM 0. Due to no payment is receive for the invoices issued. - - ![224](../../../static/img/getting-started/user-guide/224.png) - - 3. Payment is received on 05/11/2018, knocked-off on IV-00111. - - ![225](../../../static/img/getting-started/user-guide/225.png) - - 4. Process second cycle of taxable period, the tax payable will be capture as payment is received. - - ![226](../../../static/img/getting-started/user-guide/226.png) - - 5. SQL Account will auto Credit to SST- Deferred Tax account during invoice issue but no payment. Once payment is received, a Debit will be auto reversed at SST-Deferred Tax Account. - - ![227](../../../static/img/getting-started/user-guide/227.png) - - 6. the taxable amount of RM 1,000.00 and Tax Amount of RM 60.00 will also capture in SST-02 Part B2, number 11c. - - ![228](../../../static/img/getting-started/user-guide/228.png) diff --git a/docs/miscellaneous/sst/returns.md b/docs/miscellaneous/sst/returns.md index ccc09719..c1a801f7 100644 --- a/docs/miscellaneous/sst/returns.md +++ b/docs/miscellaneous/sst/returns.md @@ -75,4 +75,4 @@ Understand SST02 27 Column : [Video](https://www.facebook.com/SQLEstream/videos/ 8. Part G - ![220](../../../static/img/getting-started/user-guide/220.png) + ![220](../../../static/img/getting-started/user-guide/220.png) \ No newline at end of file diff --git a/docs/miscellaneous/sst/sales-tax.md b/docs/miscellaneous/sst/sales-tax.md deleted file mode 100644 index 22b57128..00000000 --- a/docs/miscellaneous/sst/sales-tax.md +++ /dev/null @@ -1,483 +0,0 @@ ---- -title: Sales Tax -description: Sales tax details -slug: /miscellaneous/sst/sales-tax -tags: ["SQL Account","SST", "Sales Tax"] ---- - -## Sales Tax Legislation - -### Act - - 1. Sales Tax 2018 - -### Regulations - - 1. Sales Tax Regulations 2018 - - 2. Sales Tax (Customs Ruling) Regulations 2018 - - 3. Sales Tax (Determination of Sale Value of Taxable Goods) Regulations 2018 - - 4. Sales Tax (Compounding of Offences) Regulations 2018 - -### Order - - 1. Appointment of Date of Coming into Operation - - 2. Sales Tax (Person Exempted From Payment Of Tax) Order 2018 - - 3. Sales Tax (Imposition Of Tax In Respect Of Designated Area) Order 2018 - - 4. Sales Tax (Imposition Of Tax In Respect Of Special Area) Order 2018 - - 5. Sales Tax (Exemption From Registration) Order 2018 - - 6. Sales Tax (Goods Exempted From Tax) Order 2018 - - 7. Sales Tax (Rates Of Tax) Order 2018 - - 8. Sales Tax (Total Sale Value Of Taxable Goods) Orders 2018 - -## Scope and Charge - -Sales Tax is a tax charged and levied - - -- on taxable goods manufactured in Malaysia by a taxable person and sold, used or disposed by him; - -- on taxable goods imported into Malaysia - -**Definition of:** - -◆ Goods means all kind of movable property. - -◆ Taxable goods means goods of a class or kind not exempted from sales tax; i.e goods which are not listed in Sales Tax (Goods Exempted From Sales Tax) Order 2018). - -◆ Sales includes barter, disposal of goods with a right of purchase or on terms providing that the seller retains an interest in the goods, and delivery of goods under any conditions as to future payment. - -Sales Tax is not charged on- - -- Goods listed under Sales Tax (Goods Exempted From Sales Tax) Order 2018; - -- Certain manufacturing activities are exempted by Minister of Finance through Sales Tax (Exemption from Registration) Order 2018. - -:::note -Malaysia excludes designated area (DA) and special area (SA). -::: - -## Sales Tax Mechanism - -Overview of Sales Tax flow chart:- - -![181](../../../static/img/getting-started/user-guide/181.png) - -## Meaning of Manufacture - -Manufacture defines as **a conversion of materials** by manual or mechanical means into a new product by changing the following: - -1. size - -2. shape - -3. composition - -4. nature - -5. quality - -of such materials and includes the assembly of parts into a piece of machinery or other products. - -However, manufacture does not include the installation of machinery or equipment for the purpose of construction. - -In relation to petroleum, any process of:- - -1. separation - -2. purification - -3. conversion - -4. refining - -5. Blending - -For goods other than petroleum - -1. By conversion - - ![182](../../../static/img/getting-started/user-guide/182.png) - -2. The assembly - - ![183](../../../static/img/getting-started/user-guide/183.png) - -3. For petroleum - - ![184](../../../static/img/getting-started/user-guide/184.png) - -## Meaning of Taxable Person - -Taxable person is a person who manufacturing taxable goods and is: - -1. Liable to be registered - - - Reached sales threshold - - - Manufacturer - RM 500,000.00 - - - Sub-contractor - RM 500,000.00 - -2. Registered under Sales Tax Legislation - - - Mandatorily registered - - - Voluntarily registered - -## Sales Tax Registration - -### Liability To Register - -Taxable goods manufacturers are required / liable to be registered when SALES VALUE OF TAXABLE GOODS has exceeded RM 500,000 for 12 months period. - -Manufacturers who carry out sub-contract work on taxable goods where the VALUE of work performed exceeds RM500,000 for 12 months period. - -Taxable goods belong to: - -- Registered manufacturer; - -- Non-registered manufacturer - -- Manufacturer in special area (FIZ and LMW) - -:::note -Registered Person will known as Registered Manufacturers. -::: - -### Voluntary Registration - -Conditions are: - -- Sales value of taxable goods below threshold (ie. < RM 500,000). -- Person who are exempted from registration - -### Determination of Turnover - -Manufacturers should calculate the sales value of taxable goods for a period of 12 months using the following methods: - -1. Historical Method - - The total value of taxable goods in that month and the 11 months immediately preceding the month; - -2. Future Method - - The total value of taxable goods in that month and the 11 months immediately succeeding the month. - -### Exemption from Registration - -- Manufacturer of non taxable goods. (Not eligible for voluntary registration). - -- Manufacturer below threshold (ie. < RM 500,000). - -- Sub-contractor manufacturer below threshold. - -- Manufacturing activities that have been exempted from registration. E.g : - - - Tailoring - - - Installation incorporation of goods into building - -### Transitional Registration - - Manufacturer who is liable to be registered is required to register before 1 September 2018. Registration commencement date will be on 1 September 2018. - - 1. Automatic Registration - - - Manufacturers who are GST Registered Persons which have been identified and fulfilled the required criteria will be registered automatically as Registered Manufacturer under Sales Tax. - - - Registered Manufacturer need to charge tax beginning 1 September 2018. - - 2. Person Not Registered Automatically - - - GST registered person who fulfilled the required criteria to be registered but were not registered by 1 September 2018 need to apply for registration within 30 days from the commencement date. - -## Taxable vs Exempted Goods - -### Taxable Goods - -Taxable goods means goods of a class or kind of **not exempted** from sales tax. - -In another words, goods which are not listed in **Sales Tax (Goods Exempted From Sales Tax) Order 2018.** - -Example of taxable goods are: - -![185](../../../static/img/getting-started/user-guide/185.png) - -It is chargeable with a tax rate of - -- 10% - standard sales tax rate - -- 5% - reduced sales tax rate - - - First Schedule in the Sales Tax (Rate of Tax) Order 2018 - -- Specific rate - for petroleum product (eg. RM0.30 per litre) - - - Second Schedule in the Sales Tax (Rate of Tax) Order 2018 - -How to determine the rate of sales tax for goods? - -![186](../../../static/img/getting-started/user-guide/186.png) - -### Exempted Goods - - **Exempted goods** means goods of a class or kind of exempted from sales tax which are listed in **Sales Tax (Goods Exempted From Sales Tax) Order 2018**. - - Example of exempted goods are: - - ![187](../../../static/img/getting-started/user-guide/187.png) - -## Value of Taxable Goods - -Refer to **Sales Tax (Rules of Valuation) Regulation 2018**, value of taxable goods that: - -- sold by taxable person - -- manufactured and used by the manufacturer for other purpose than as materials in manufacturing; or - -- disposed by manufacturer. - -For goods belongs to another manufacturer is known as sub-contract work. - -- Sale value of the goods = Amount of the work performed and charged by **sub-contractor**. - -The sale value of the goods shall be determined on the basis of the **transactions value of the goods** as the primary basis of valuation. - -Transaction value of the goods, - -- The **actual price** the goods are sold, without any conditions or restrictions imposed to purchaser. - -- Purchaser is not required to give parts of proceed on subsequent sale to the manufacturer. - -- Purchaser and manufacturer are not related or if related the relationship did not influence the price. - -## Responsibility of Registered Manufacturer - - ![188](../../../static/img/getting-started/user-guide/188.png) - -## Exemption and Facilities - -### Goods Exemption from Sales Tax - -**Goods** refer to Sales Tax (Goods Exempted From Sales Tax) Order 2018. - -- E.g. live animals, unprocessed food, vegetables, medicines, machinery, chemicals, etc. - -### Person Exempted from Sales Tax - -Person refer to Sales Tax (Person Exempted From Sales Tax) Order 2018. - -- Schedule A: Class of person, e.g. Ruler of States, Federal or State Government Department, Local Authority, Inland Clearance Depot, Duty Free Shop. - -- Schedule B: Manufacturer of specific non-taxable goods, e.g. any manufacturer of - - 1. Controlled goods under Control of Supplies Act 1961 - - 2. Pharmaceuticals products - - 3. Solely manufacture milk products - - 4. Solely manufacture of exempted goods for export to import/purchase raw materials, components and packaging materials. - - - Schedule C: Registered Manufacturer, exemption of tax on the acquisition of raw materials, components, packaging to be used in manufacturing of taxable goods (previously known as CJ5, CJ5A, CJ5B). - -### Field Exempted from Sales Tax - - Manufacturing activities exempted from registration regardless of turnover. - -- E.g. tailor, jeweller, optician, engraving, vanishing table top, etc. - -## Special Rules - -### Treatment in Designated Area (DA) - -![189](../../../static/img/getting-started/user-guide/189.png) - -:::note -SA = Special Area, e.g. Free Zone (FZ), Licensed Warehouse, Licensed Manufacturing Warehouse (LMW) and Joint Development Area (JDA). - -PCA = Principal Customs Area -::: - -### Treatment in Special Area (SA) - -![190](../../../static/img/getting-started/user-guide/190.png) - -## Accounting of Tax - -### Invoices - -Issuance of Invoice: - -- Mandatory for registered manufacturer who sell taxable goods. - -- Hard copy or electronically. - -- Containing prescribed particulars. - -- Bahasa Melayu or English. - - **Prescribed particulars** are: - - 1. The invoice serial number; - - 2. The date of the invoice; - - 3. The name, address and identification number of the registered manufacturer (Sales Tax Number); - - 4. The name and address of the person to whom the taxable goods is sold; - - 5. Description and quantity of the goods; - - 6. Any discount offered; - - 7. For each description, distinguish the type of goods, quantity and amount payable excluding tax; - - 8. The total amount payable excluding tax, the rate of tax and the total tax chargeable shown as a separate amount or total amount payable inclusive of total of tax chargeable; - - 9. Any amount expressed in a currency other than ringgit shall also be expressed in ringgit at the selling rate of exchange prevailing in Malaysia at the time of sale. - -## Credit Note & Debit Note - -A credit note is allowed to issue by registered manufacturer under the situation where the goods are returned by the purchaser due to : - -- Wrong quantity, poor or defective quality or uncontracted goods, provided that the goods have not been subsequently sold or disposed of by the purchaser. - -- Discount given in respect of goods sold and which are freely available to all who are willing to conduct business. - -A debit note is allowed to issue by registered manufacturer under the situation where there is an additional of sales tax to be paid for any price adjustment. - -Both credit note and debit note shall contains the following particulars: - -- The word “credit note” or “debit note” in a prominent place. - -- The serial number and date of issue. - -- The name, address and Sales Tax identification number of the supplier. - -- The name and address of the customer. - -- The **reason** for issuance. - -- Description which identifies the description of goods, the quantity and amount for which CN or DN is given. - -- The total amount excluding tax. - -- The rate and amount of tax. - -- The number and date of the original invoice. - -If changes related to amount of tax payable: - -- Adjustment in the return for the taxable period in which the credit note or debit note is issued. - -- Adjustment in the return for the last taxable for person who has ceased to be a taxable person. - -If deduction for taxable period exceeds the amount of sales tax payable, the balance is to be carried forward to the next taxable period. Refund is not allowed on balance carried forward if taxable person has ceased to carry on business. - -## Accounting Basis and Taxable Period - -### Accounting Basis - -Sales Tax is based on accrual basis and it is required to be accounted at the time when the goods are sold, disposed or first used. - -### Taxable Period - -Regular interval period where a taxable person accounts and remits sales tax to Government. Default taxable period for the registered manufacturer to be **bimonthly (2 months)** period. - -Registered manufacturer may apply for taxable period other than the default taxable period. - -In summary, - -![191](../../../static/img/getting-started/user-guide/191.png) - -## Furnishing Sales Tax (SST-02) Return & Payment of Tax - -Registered manufacturer has to declare SST return every 2 months according to the taxable period. - -- Sales tax return has to be submitted not later than the last day of the following month after the taxable period ended. - -- Sales tax return has to be submitted regardless of whether there is any tax to be paid or not. - -- Sales tax return has to be submitted electronically or by cheque, bank draft and posted to SST Processing Centre. - -Payment for tax due and payable declared in SST-02. Failure to submit return is an offence. - -## Miscellaneous (Remission, Refund of Overpaid Tax, Drawback. Penalty) - -### Remission - -Minister may remit the whole or any part of sale tax due and payable. - -Director General may remit the whole or any part of: - -- Surcharge - -- Penalty - -- Fee - -- Other money payable under the Act - -### Refund of overpaid tax - -Any person who has overpaid or erroneously paid of sales tax, penalty, surcharge, fee; or If any person who has paid sales tax and then exemption or remission of sales tax has granted by Minister. - -Claim to be made in form JKDM No. 2 within one year from the date of over payment or erroneously payment; or entitlement of refund. - -### Drawback - -Director General may allow drawback of the full amount of sales tax paid by a person in respect of taxable goods which are subsequently exported. This is not applicable to petroleum. - -Conditions: - -- Goods must be exported within six months from Sales Tax paid on import or date of invoice issued. - -- Application made within three months from the date of export in JKDM Form no. 2 - -- Other conditions with regards to documentation and declaration. - -Submission to sales tax office at applicants’ place of business. - -Illustration: - -![192](../../../static/img/getting-started/user-guide/192.png) - -### Penalty for late payment of tax - -Late payment penalty on the amount of sales tax not paid as shown in the table below. - -![193](../../../static/img/getting-started/user-guide/193.png) - -### Other penalty for offences - -Evasion of sales tax: - -- 1st offence - either or both - - - Fine - - - Minimum 10x Sales Tax Amount - - - Maximum 20x Sales Tax Amount - - - Imprisonment not exceeding 5 years - -- 2nd offence - either or both - - - Fine - - - Minimum 20x Sales Tax Amount - - - Maximum 40x Sales Tax Amount - - - Imprisonment not exceeding 7 years diff --git a/docs/miscellaneous/sst/service-tax.md b/docs/miscellaneous/sst/service-tax.md deleted file mode 100644 index eb1fd04d..00000000 --- a/docs/miscellaneous/sst/service-tax.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Service Tax -description: Service tax details -slug: /miscellaneous/sst/service-tax -tags: ["SQL Account","SST", "Service Tax"] ---- - -## Service Tax Legislation - -### Act - - 1. Service Tax 2018 - -### Regulations - - 1. Service Tax Regulations 2018 - - 2. Service Tax (Customs Ruling) Regulatons 2018 - - 3. Service Tax (Compounding of Offences) Regulations 2018 - -### Order - - 1. Appointment of Date of Coming into Operation - - 2. Appointment of Effective Date for Charging and Levying of Service Tax - - 3. Service Tax (Imposition Of Tax For Taxable Service in Respect of Designated Areas and Special Areas) Order 2018 - - 4. Service Tax (Rates Of Tax) Order 2018 - -## Scope and Charge - -Service tax is charged on: - -- any provision of taxable services; - -- made in the course or furtherance of any business; - -- by a taxable person; and - -- In Malaysia - -Service tax is not chargeable on: - -- Imported services - -- Exported services - -## Service Tax Mechanism - -Overview of Service Tax flow chart:- - -![194](../../../static/img/getting-started/user-guide/194.png) - -## Meaning of Taxable Person - -A service provider who is liable to be registered or registered under the Service Tax Act 2018. The service provider provides taxable services in the course or furtherance of business in Malaysia. - -## Taxable Service - -Value of taxable service provided by a service provider for a period of 12 months that exceed a threshold of RM 500,000 is liable to be registered. Except the following taxable service group: - -- Food and Beverages (exceed RM 1,500,000) - -- Credit card / charge card (no threshold) - -![195](../../../static/img/getting-started/user-guide/195.png) - -![196](../../../static/img/getting-started/user-guide/196.png) - -![197](../../../static/img/getting-started/user-guide/197.png) - -![198](../../../static/img/getting-started/user-guide/198.png) - -## Rate of Services - -All taxable services are fixed charged at a rate of 6%, except the provision of credit card/charge card services are charged at a specific rate of tax of RM25 is imposed upo issuance of principal or supplementary card and every subsequent year or part thereof. - -## Service Tax Registration - -### Types of Registration list - -![199](../../../static/img/getting-started/user-guide/199.png) - -### Determination of Taxable Turnover - -Service provider should calculate the value of taxable services provided for a period of 12 months using the following method: - -1. Historical Method - - The total value of taxable supplies in that month and the 11 months immediately preceding the month. - -2. Future Method - - The total value of taxable supplies in that month and the 11 months immediately succeeding the month. - -### Transitional Registration - - Any person who liable to register are required to register before 1 September 2018 and registration commencement date will be on 1 September 2018. - - 1. Automatic Registration - - - Service provider who is a GST Registrant which have been identified and fulfilled the required criteria will be registered automatically as a registered person. - - 2. Person Not Registered Automatically - - - Service provider who is a GST Registered person that fulfilled the required criteria to be registered but was not registered by 1 September 2018 need to apply for registration within 30 days from the commencement date. - -## Contra System Facility - -Registered person is allowed to deduct service tax in his return for any cancellation and termination of services or any other reasons such as reducing premiums or discounts. - -## Special rules for specific areas - -### Treatment in Designated Area (DA) - -![200](../../../static/img/getting-started/user-guide/200.png) - -:::note - -1. SA = Special Area, e.g. Free Zone (FZ), Licensed Warehouse, Licensed Manufacturing Warehouse (LMW) and Joint Development Area (JDA). - -2. PCA = Principal Customs Area - -::: - -### Treatment in Special Area (SA) - -![201](../../../static/img/getting-started/user-guide/201.png) - -## Accounting - -### Issuance of Invoice - -- Mandatory for registered person who provides any taxable services.. - -- Hard copy or electronically. - -- Containing prescribed particulars. - -- Bahasa Melayu or English. - - **Prescribed particulars** are: - - 1. The invoice serial number; - - 2. The date of the invoice; - - 3. The name, address and identification number of the registered person (Service Tax Number); - - 4. The name and address of the person to whom the taxable service is provided; - - 5. Description of service provided; - - 6. Any discount offered; - - 7. For each description, distinguish the type of service and amount payable excluding tax; - - 8. The total amount payable excluding tax, the rate of tax and the total tax chargeable shown as a separate amount or total amount payable inclusive of total of tax chargeable; - - 9. Any amount expressed in a currency other than ringgit shall also be expressed in ringgit at the selling rate of exchange prevailing in Malaysia at the time of sale. - -### Credit Note & Debit Note - - Both credit note and debit note are allowed to issue by registered person. It shall contained the prescribed particular and make an adjustment in his SST-02 return. - -## Accounting Basis and Taxable Period - -### Accounting Basis - -Service Tax is based on payment basis and it is required to be accounted at the time when the payment has received. On the day following period of twelve months when any whole or part of the payment is not received from the date of the invoice for the taxable service provided. - -### Taxable Period - -Regular interval period where a taxable person accounts and remits service tax to Government. Default taxable period for the registered person to be bimonthly (2 months) period. - -Registered person may apply for taxable period other than the default taxable period. - -In summary, - -![202](../../../static/img/getting-started/user-guide/202.png) - -## Furnishing Service Tax (SST-02) Return & Payment of Tax - -Registered person has to declare service tax return every 2 months according to the taxable period. - -- Service Tax return has to be submitted not later than the last day of the following month after the taxable period ended. - -- Service Tax return has to be submitted regardless of whether there is any tax to be paid or not. - -- Service Tax return has to be submitted electronically or by cheque, bank draft and posted to SST Processing Centre. - -Payment for tax due and payable declared in SST-02. Failure to submit return is an offence. diff --git a/docs/miscellaneous/sst/sst-introduction.md b/docs/miscellaneous/sst/sst-introduction.md deleted file mode 100644 index 249034a9..00000000 --- a/docs/miscellaneous/sst/sst-introduction.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -sidebar_position: 1 -id: sst-introduction -title: Introduction -description: SST model & scope -tags: ["SQL Account","SST", "Introduction"] ---- - -Introduced in September 2018, SST replaced the former 6% Goods and Services Tax (GST) system. SST comprises two parts: Sales tax and Service tax. Sales tax is a single-stage tax levied on all taxable goods manufactured in and imported into Malaysia; whereas Service tax is a single-stage tax charged on any taxable services provided in Malaysia by a registered person in conducting the business. Malaysia has a few special designated areas that are exempted from service tax, namely Langkawi Island, Tioman Island and Federal Territory of Labuan. - -## Sales and Service Tax 2018 Model and Scope - -Sales and Service Tax model are structured as below: - -![180](../../../static/img/getting-started/user-guide/180.png) diff --git a/docs/miscellaneous/tax-code.md b/docs/miscellaneous/tax-code.md index 15e3c791..a2bc8fc2 100644 --- a/docs/miscellaneous/tax-code.md +++ b/docs/miscellaneous/tax-code.md @@ -8,7 +8,7 @@ tags: ["SQL Account","Tax Code"] Access list of Tax Codes in SQL Account by browsing **Tools > Maintain Tax**. -![205](../../static/img/getting-started/user-guide/205.png) +![205](../../static/img/miscellaneous/tax-code/205.png) ### Default SST Account diff --git a/docs/miscellaneous/text-import-utility.md b/docs/miscellaneous/text-import-utility.md deleted file mode 100644 index 597c48f5..00000000 --- a/docs/miscellaneous/text-import-utility.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -sidebar_position: 16 -id: text-import-utility -title: Text Import Utility Guide -description: A quick guide on Text Import Utility for SQL Account -slug: /miscellaneous/text-import-utility -tags: ["SQL Account", "Text", "Import"] ---- - -## Text Import Step - - 1. Download [SQLAccXLSnMDBImp-setup.exe](https://download.sql.com.my/customer/Fairy/SQLAccXLSnMDBImp-setup.exe) in your pc. - - 2. Run and Install the setup file. - - 3. Log on to your correct database - - ![1](../../static/img/miscellaneous/text-import-utility/1.png) - - 4. Double click the following icon - - ![2](../../static/img/miscellaneous/text-import-utility/2.png) - - 5. Makesure the top is show the database you choose - - - Choose the transaction you want to import, eg. customer-maintain customer - - ![3](../../static/img/miscellaneous/text-import-utility/3.png) - - 6. Open the patch file you save - - ![4](../../static/img/miscellaneous/text-import-utility/4.png) - - 7. Invalid status... - - 1. Go into SQL to add the status which are not in the database - - ![5](../../static/img/miscellaneous/text-import-utility/5.png) - - 2. Example : - - ![6](../../static/img/miscellaneous/text-import-utility/6.png) - - 3. So now, you go into your SQL, add the agent code - - ![7](../../static/img/miscellaneous/text-import-utility/7.png) - - ![8](../../static/img/miscellaneous/text-import-utility/8.png) - - 8. Go back to the Text Import, **VERIFY** again. - - 1. If the status show invalid again, go to the SQL and add in. - - 2. After add in, get the file and verify again. - - 3. For this example, go to Tools --> Maintain Area - - ![9](../../static/img/miscellaneous/text-import-utility/9.png) - - 4. The status will shown **“** OK **”** once you complete. - - ![10](../../static/img/miscellaneous/text-import-utility/10.png) - - 5. Once you post to A/C, go to SQL ...... Customer -–> Maintain Customer - - 6. Log out and log in again, the new customer name will automatically shown in the customer list. - - ![11](../../static/img/miscellaneous/text-import-utility/11.png) diff --git a/docs/miscellaneous/text-import.md b/docs/miscellaneous/text-import.md new file mode 100644 index 00000000..c95670a7 --- /dev/null +++ b/docs/miscellaneous/text-import.md @@ -0,0 +1,93 @@ +--- +sidebar_position: 16 +id: text-import-utility +title: Text Import Utility Guide +description: A quick guide on Text Import Utility for SQL Account +slug: /miscellaneous/text-import +tags: ["SQL Account", "Text", "Import"] +--- + +## Text Import Step + + 1. Download [SQLAccXLSnMDBImp-setup.exe](https://download.sql.com.my/customer/Fairy/SQLAccXLSnMDBImp-setup.exe) in your pc. + + 2. Run and Install the setup file. + + 3. Log on to your correct database + + ![1](../../static/img/miscellaneous/text-import-utility/1.png) + + 4. Double click the following icon + + ![2](../../static/img/miscellaneous/text-import-utility/2.png) + + 5. Makesure the top is show the database you choose + + - Choose the transaction you want to import, eg. customer-maintain customer + + ![3](../../static/img/miscellaneous/text-import-utility/3.png) + + 6. Open the patch file you save + + ![4](../../static/img/miscellaneous/text-import-utility/4.png) + + 7. Invalid status... + + 1. Go into SQL to add the status which are not in the database + + ![5](../../static/img/miscellaneous/text-import-utility/5.png) + + 2. Example : + + ![6](../../static/img/miscellaneous/text-import-utility/6.png) + + 3. So now, you go into your SQL, add the agent code + + ![7](../../static/img/miscellaneous/text-import-utility/7.png) + + ![8](../../static/img/miscellaneous/text-import-utility/8.png) + + 8. Go back to the Text Import, **VERIFY** again. + + 1. If the status show invalid again, go to the SQL and add in. + + 2. After add in, get the file and verify again. + + 3. For this example, go to Tools --> Maintain Area + + ![9](../../static/img/miscellaneous/text-import-utility/9.png) + + 4. The status will shown **“** OK **”** once you complete. + + ![10](../../static/img/miscellaneous/text-import-utility/10.png) + + 5. Once you post to A/C, go to SQL ...... Customer -–> Maintain Customer + + 6. Log out and log in again, the new customer name will automatically shown in the customer list. + + ![11](../../static/img/miscellaneous/text-import-utility/11.png) + +## FAQ + +### Do the text import Description3 support multi line? + +Yes if you using the Version 5 & above. All you had to do is to set each line using #13 + + ```pascal + DETAIL;POS4;;;----;----;"SALES - Foods";;"Line 1#13# Line 2#13Line 3#13#13B#13C";50;UNIT;0;21.20;25/12/2016;;SR;60;1000;T;500-000;T;;;1;; + ``` + +Result + + ```pascal + Line 1 + # Line 2 + Line 3 + + B + C + ``` + +### My Data had Special Character/Symbol (eg Ø) how to handle it? + +If you had special Character/Symbol, try convert it to UTF-8 before you export out to text file \ No newline at end of file diff --git a/docs/miscellaneous/third-party-export/_category_.json b/docs/miscellaneous/third-party-export/_category_.json new file mode 100644 index 00000000..d995c02c --- /dev/null +++ b/docs/miscellaneous/third-party-export/_category_.json @@ -0,0 +1,9 @@ +{ + "label": "Third Party Export", + "position": 2, + "link": { + "type": "generated-index", + "title": "SST", + "description": "Export" + } +} \ No newline at end of file diff --git a/docs/miscellaneous/third-party-export/dksh-export.md b/docs/miscellaneous/third-party-export/dksh-export.md new file mode 100644 index 00000000..6bd8489c --- /dev/null +++ b/docs/miscellaneous/third-party-export/dksh-export.md @@ -0,0 +1,103 @@ +--- +sidebar_position: 2 +title: SQL Acc DKSH Export +description: SQL Acc DKSH Export +slug: /miscellaneous/third-party-export/dksh-export +tags: ["SQL Account","DKSH" , "Export"] +--- + +## Introduction + +Is External Shareware Program which Export Data for DKSH System. +Document Type Export + +- Maintain Customer - Cust.txt +- Maintain Item - Item.txt +- Maintain Agent - Salesman.txt +- Sales Invoice - InvDtl.txt +- Sales Credit Note - CN_Dtl.txt + +## Limitataion + +- 1 Computer only can export 1 Company Database only + +## DKSH Specification + +- 03 Jun 2016 +- [DKSH Manage Sales Integration Specification](http://www.estream.com.my/downloadfile/Fairy/DKSH_ManageSales_Integration_Spec.zip) + +## Export Program + +- Version (1.1.0.4) - 06 Jun 2017 +- Evaluation Limit : 30 Times Export +- [SQLAcc DKSHE Export Setup](http://www.estream.com.my/downloadfile/Fairy/SQLAccDKSHExport-setup.exe) +- MD5 : `1DDE4D72A1808F0DA0CAA27094B7C821` + +## Settings + +### Firebird + +During Installation of Firebird make sure the option (see Below picture) is selected + +![15](../../../static/img/miscellaneous/third-party-export/dksh-firbird.png) + +### Export Program Setting + +![16](../../../static/img/miscellaneous/third-party-export/dksh-exp.png) + +01. Enter the Server Name or IP Address. +02. Click the button & select the Database to be export out. +03. Select the Output Path folder (where DKSH file to be exported to). +04. Enter the Organization prefix provide by DKSH. +05. Click Test Connection to make sure is successfully Connected. + + Below steps is to export data + +06. Select Date Range data to Export. +07. Click Export Output... button to export the data. + +## SQL Accountin + +### Maintain Customer + +Menu: Customer | Maintain Customer... + +![17](../../../static/img/miscellaneous/third-party-export/dksh-customer.png) + +01. Click Edit +02. Enter the **DKSH Outlet Type** at CompanyName2 +03. Click *Save* + +### Stock Item + +Menu: Stock | Maintain Stock Item... + +![18](../../../static/img/miscellaneous/third-party-export/dksh-item.png) + +01. Click Edit +02. Enter the **DKSH Product Code** at *Description2* +03. Click Save + +## Program History New/Updates/Changes + +--Build 4-- + +- Upgrade to Version 1.1. +- Upgrade to XE25. +- Fixed Export still locking even is registered. + +--Build 3-- + +- Fixed Export Slow. +- Add Export Status. + +--Build 2-- + +- Fixed Register Fail. + +--Build 1-- + +- Item missing RefPrice field. +- Remove , for Currency field. + +--Build 0-- diff --git a/docs/miscellaneous/third-party-export/michelin-export.md b/docs/miscellaneous/third-party-export/michelin-export.md new file mode 100644 index 00000000..b983c4dc --- /dev/null +++ b/docs/miscellaneous/third-party-export/michelin-export.md @@ -0,0 +1,162 @@ +--- +sidebar_position: 1 +title: SQL Acc Michelin Export +description: SQL Acc Michelin Export +slug: /miscellaneous/third-party-export/michelin-export +tags: ["SQL Account","Michelin" , "Export"] +--- + +## Introduction + +Is External Shareware Program which Export Daily Sales for Michelin System. +Document Type Export (Only 1 text file) + +- Sales Invoice +- Sales Cash Sales +- Sales Debit Note +- Sales Credit Note + +## Limitataion + +- 1 Computer only can export 1 Company Database only + +## Michelin Export Specification + +- 11 May 2016 +- [Michelin Export Specification](http://www.estream.com.my/downloadfile/Fairy/MICHELIN_WEBMAX.zip) + +## Export Program + +- Version (1.2.0.8) - 13 May 2020 +- Evaluation Limit : 30 Times Export +- [SQLAccMichelinExport-setup](http://www.estream.com.my/downloadfile/Fairy/SQLAccMichelinExport-setup.exe) +- MD5 : `64541BCDE1FE677BD001E820B5ADA865` + +## Settings + +### Firebird + +During Installation of Firebird make sure the option (see Below picture) is selected + +![1](../../../static/img/miscellaneous/third-party-export/michelin-firebird.png) + +### Export Program Setting + +![2](../../../static/img/miscellaneous/third-party-export/michelin-exp.png) + +01. Enter the Server Name or IP Address +02. Click the button & select the Database to be export out. +03. Select the Output Path +04. Enter the Branch Code (optional) given by Michelin (may leave it empty if unavailable) +05. Enter the Supplier Code for Michelin +06. Select the Start Date to export (ONLY for 1st time use & make sure not more then 1(min)/2(max) month(s) from now) +07. Select Number of Month to generate (min 0 & max 1). +08. Click Test Connection to make sure is successfully Connected. + +### Windows Schedule + +01. Open Windows Control Panel | Administrative Tools | Task Scheduler. + + ![3](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step1.png) + +02. Click Action | Create Basic Task... + + ![4](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step2.png) + +03. Enter Task Name (eg SQL Acc Michelin Export) & Click Next. + + ![5](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step3.png) + +04. Select Daily & Click Next. + + ![6](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step4.png) + +05. Set the Start Date & Time to Start. +06. Set 1 for Recur every field & Click Next. + + ![7](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step6.png) + +07. Select Start a program & Click Next. + + ![8](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step7.png) + +08. Click Browse button & find the SQLAccMichelinExportSchedule.exe (Default at C:\eStream\Utilities\SQLAccMichelinExport). +09. Set the Start in(optional) path to the Exe folder (eg. C:\eStream\Utilities\SQLAccMichelinExport) & Click Next. + + ![9](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step9.png) + +10. Tick the option Open the Properties dialog for this task when I click Finish. +11. Click Finish. + + ![10](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step11.png) + +12. Select the option Run whether user is logged on or not. +13. Click Triggers tab at top. + + ![11](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step13.png) + +14. Click Edit... button. + + ![12](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step14.png) + +15. Change the time to run. +16. Click OK 2 times. + + ![13](../../../static/img/miscellaneous/third-party-export/michelin-schedule-step16.png) + +17. Enter the window User Name & Password. +18. Click Ok. + +### SQL Accounting + + ![14](../../../static/img/miscellaneous/third-party-export/michelin-sqlacc.png) + +01. Click Stock | Maintain Stock Item... +02. Look for the Michelin Item Code. +03. Click **Edit**. +04. Click **Supp. Item** tab. +05. Click **+** button. +06. Select the **Supplier Code** for Michelin. +07. Enter the Michelin Item Code. +08. Click **Save**. +09. Repeat **Step 2** till **Step 8** for other Michelin Item Code. + +### Program History New/Updates/Changes + +--Build 8-- + +- Fixed Prompt Access Violation on Export. + +--Build 7-- + +- Enable support Version 875.782 & above for REGISTERNO field Only. + +--Build 6-- + +- Date Not reset on 6th days. + +--Build 5-- + +- Add No. of Month Option. + +--Build 4-- + +- Fixed only export 50 due after fix bug in build 3. + +--Build 3-- + +- Fixed Unable to Export if Description too long. + +--Build 2-- + +- Upgrade Compiler. +- Upgrade to Version 1.2. +- Add Branch Code Field. + +--Build 1-- + +- Fixed Tab Sequence problem. +- Add filter by Supplier Code. +- Date Reset On 4th Months. + +--Build 0-- diff --git a/docs/miscellaneous/third-party-export/samsung-export.md b/docs/miscellaneous/third-party-export/samsung-export.md new file mode 100644 index 00000000..e81a59f0 --- /dev/null +++ b/docs/miscellaneous/third-party-export/samsung-export.md @@ -0,0 +1,201 @@ +--- +sidebar_position: 3 +title: SQL Acc Samsung Export +description: SQL Acc Samsung Export +slug: /miscellaneous/third-party-export/samsung-export +tags: ["SQL Account","Samsung" , "Export"] +--- +## Introduction + +Is External Shareware Program which Export Daily Sales for Samsung System. +Document Type Export (Total 2 Text files) + +- Sales Delivery Order +- Sales Invoice +- Sales Cash Sales +- Sales Debit Note +- Sales Credit Note +- Stock Physical Worksheet + +## Limitataion + +- 1 Computer only can export 1 Company Database only +- Build 2 & above can + +## Samsung Export Specification + +- 28 Dec 2016 +- [Samsung-20161228.zip](https://download.sql.com.my/customer/Fairy/Samsung-20161228.zip) + +## Modules Require + +- Serial Number + +## Export Program + +- Version (2.0.2.15) - 27 Feb 2025 +- Evaluation Limit : 30 Times Export +- [SQLAccSamsungExport-setup.exe](https://download.sql.com.my/customer/Fairy/SQLAccSamsungExport-setup.exe) +- MD5 : `A3F809D610D92A44662A9AE7D2D3A3B1` + +## Settings + +### Export Program Setting + +![19](../../../static/img/miscellaneous/third-party-export/samsung-exp.png) + +01. Select SQL Accounting DCF file. +02. Select SQL Accounting Database to export. +03. Click **Test Connection**. +04. Click Next. + + ![20](../../../static/img/miscellaneous/third-party-export/samsung-exp-step4.png) + + | Field | Description | + |-----------------------|-------------| + | **Samsung Co. Code** | - Samsung Company Code given by Samsung | + | **Default (----) Location Code** | - Default Location code (----) in SQL Accounting for Samsung (Default HQ) | + | **RA MCS ID Type** | - Information for RA MCS ID Type in SQL Accounting | + | **Exclude Customer Info...** | - Tick: Will not Export CompanyName & Phone1
- Untick: Will Export with CompanyName & Phone1 | + +05. Select Information to filter If you wanted. +06. Enter the **Samsung Code** (Provided by Samsung). +07. Click Next. + + ![21](../../../static/img/miscellaneous/third-party-export/samsung-exp-step7.png) + +08. Select Output folder. +09. Select Last Export Date. +10. Click Export Data to Export. + +### Windows Schedule + +01. Open Windows Control Panel | Administrative Tools | Task Scheduler. + + ![22](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step1.png) + +02. Click Action | Create Basic Task... + + ![23](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step2.png) + +03. Enter Task Name (eg SQL Acc Sumsung Export) & Click Next + + ![24](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step3.png) + +04. Select Daily & Click Next. + + ![25](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step4.png) + +05. Set the Start Date & Time to Start. +06. Set 1 for Recur every field & Click Next. + + ![26](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step6.png) + +07. Select Start a program & Click Next. + + ![27](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step7.png) + +08. Click Browse button & find the **SQLAccSumsungExportV2.exe** (Default at +C:\eStream\Utilities\SQLAccSumsungExportV2). +09. Set the Add arguments(optional) as -**Auto**. +10. Set the Start in(optional) path to the Exe folder (eg. +C:\eStream\Utilities\SQLAccSumsungExportV2) & Click Next. + + ![28](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step10.png) + +11. Tick the option Open the Properties dialog for this task when I click Finish +12. Click Finish + + ![29](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step12.png) + +13. Select the option *Run* whether user is logged on or not +14. Click *Triggers* tab at top + + ![30](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step14.png) + +15. Click Edit... button + + ![31](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step15.png) + +16. Change the time to run +17. Click OK 2 times + + ![32](../../../static/img/miscellaneous/third-party-export/samsung-win-sche-step17.png) + +18. Enter the window User Name & Password +19. Click Ok + +### Program History New/Updates/Changes + +--Build 15-- + +- Fixed unable to connect to db in SQL Connect. + +--Build 14-- + +- Enable support Version 860 & above. + +--Build 13-- + +- Fixed MCS_INV_ output Default (----) Location Code not follow user setting. + +--Build 12-- + +- Fixed sometime not correct Location Code. + +--Build 11-- + +- Upgrade to Version 2.0.2 . +- Add Option Exclude Customer Info. +- Add Option Default (----) Location Code. + +--Build 10-- + +- Add Export Sales DO. + +--Build 9-- + +- Fixed MCS_SALES_xxx Default location code not set to HQ. + +--Build 8-- + +- Upgrade to Version 2.0.1. +- Add Option for MCS ID type. + +--Build 7-- + +- Fixed Show Access violation when Auto Run. + +--Build 6-- + +- Fixed Auto Run Unable to Call SQLAcc in Window 7. +- Fixed Auto Run Button Caption not correct after finish. +- Fixed Auto Run Not Force Kill SQLAcc Before & after export. + +--Build 5-- + +- Fixed MCS_INV data not group by Location & project. + +--Build 4-- + +- Upgrade to Version 2. +- Add Filtering Location & Item Project. + +--Build 3-- + +- Fixed click 2nd time Test output prompt error. +- History New/Updates/Changes. +- Fixed Schedule not running. + +--Build 2-- + +- Support Export more then 1 Serial Number Output. +- Fixed spelling error. + +--Build 1-- + +- MCS_SALES_xxx should take Agent Description. +- Filename for Stock should be MCS_INV_xxx. +- Stock Column incorrect position. + +--Build 0-- diff --git a/docs/troubleshooting/change-panasonic.md b/docs/troubleshooting/change-panasonic.md index bdeefc69..664491ad 100644 --- a/docs/troubleshooting/change-panasonic.md +++ b/docs/troubleshooting/change-panasonic.md @@ -14,17 +14,17 @@ If you're experiencing issues where the preview is fine but the printout is miss 1. Check the Port of your printer - ![1](../../static/img/getting-started/change-panasonic/1.png) + ![printer-properties](../../static/img/troubleshooting/change-panasonic/printer-properties.png) - ![2](../../static/img/getting-started/change-panasonic/2.png) + ![check-port](../../static/img/troubleshooting/change-panasonic/check-port.png) 2. Press "**Add a printer**" and select "**Add a local printer.**" - ![3](../../static/img/getting-started/change-panasonic/3.png) + ![add-local-printer](../../static/img/troubleshooting/change-panasonic/add-local-printer.png) 3. Choose the port of your printer respectively. - ![4](../../static/img/getting-started/change-panasonic/4.png) + ![choose-printer-port](../../static/img/troubleshooting/change-panasonic/choose-printer-port.png) 4. Select manufacturer and printer @@ -38,22 +38,22 @@ If you're experiencing issues where the preview is fine but the printout is miss ::: - ![5](../../static/img/getting-started/change-panasonic/5.png) + ![select-printer](../../static/img/troubleshooting/change-panasonic/select-printer.png) 5. Type in the printer name you desire. - ![6](../../static/img/getting-started/change-panasonic/6.png) + ![enter-printer-name](../../static/img/troubleshooting/change-panasonic/enter-printer-name.png) 6. Press "**Next**" if you don’t want to share this printer. - ![7](../../static/img/getting-started/change-panasonic/7.png) + ![press-next](../../static/img/troubleshooting/change-panasonic/press-next.png) 7. Finish the setup. - ![8](../../static/img/getting-started/change-panasonic/8.png) + ![finish](../../static/img/troubleshooting/change-panasonic/finish.png) Lastly, go to your **Printer Properties** | **Device Settings** | **Installable Options** | **Printable Area** | **Old OS**. You are done. Congratulations! -![9](../../static/img/getting-started/change-panasonic/9.png) +![result](../../static/img/troubleshooting/change-panasonic/result.png) diff --git a/docs/troubleshooting/db-shutdown.md b/docs/troubleshooting/db-shutdown.md index 65023ac9..5ce41f13 100644 --- a/docs/troubleshooting/db-shutdown.md +++ b/docs/troubleshooting/db-shutdown.md @@ -14,12 +14,12 @@ tags: ["SQL Account", "Troubleshooting"] ## How to solve? -1. Download [SQL DiagnosisV2](https://download.sql.com.my/customer/Fairy/SQLDiagnosisV2-setup.exe) +1. Download [sql-diagnosis-v2](https://download.sql.com.my/customer/Fairy/SQLDiagnosisV2-setup.exe) 2. Launch SQL DiagnosisV2 - ![1](../../static/img/troubleshooting/db-error/1.png) + ![launch-sql-diagnosis](../../static/img/troubleshooting/db-error/launch-sql-diagnosis.png) 3. Select the DB stucked in `Shutdown` state. - ![2](../../static/img/troubleshooting/db-error/2.png) + ![select-database](../../static/img/troubleshooting/db-error/select-database.png) diff --git a/docs/troubleshooting/enlarge-ui.md b/docs/troubleshooting/enlarge-ui.md index 0d5003ae..986def06 100644 --- a/docs/troubleshooting/enlarge-ui.md +++ b/docs/troubleshooting/enlarge-ui.md @@ -13,13 +13,13 @@ tags: ["SQL Account", "Troubleshooting", "Enlarge UI Screen"] 2. Click on **Display Settings** - ![1](../../static/img/getting-started/enlarge-ui/1.png) + ![display-settings](../../static/img/troubleshooting/enlarge-ui/display-settings.png) 3. Click on **Display** tab 4. Slide the indicator to the display size desired (125%/ 150%/ 200%) - ![2](../../static/img/getting-started/enlarge-ui/2.png) + ![display-tab](../../static/img/troubleshooting/enlarge-ui/display-tab.png) :::note @@ -37,7 +37,7 @@ tags: ["SQL Account", "Troubleshooting", "Enlarge UI Screen"] 4. Slide the indicator to the display size desired (125%/ 150%/ 200%) - ![3](../../static/img/getting-started/enlarge-ui/3.png) + ![win78-display](../../static/img/troubleshooting/enlarge-ui/win78-display.png) ## For Windows XP @@ -51,4 +51,4 @@ tags: ["SQL Account", "Troubleshooting", "Enlarge UI Screen"] 5. Choose the screen size desired or Click on **Custom Setting** to customize the screen size by dragging the indicator - ![4](../../static/img/getting-started/enlarge-ui/4.png) ![4b](../../static/img/getting-started/enlarge-ui/4b.png) + ![winxp-general](../../static/img/troubleshooting/enlarge-ui/winxp-general.png) ![winxp-dpi](../../static/img/troubleshooting/enlarge-ui/winxp-dpi.png) diff --git a/docs/troubleshooting/firebird-unable-complete.md b/docs/troubleshooting/firebird-unable-complete.md new file mode 100644 index 00000000..010e1789 --- /dev/null +++ b/docs/troubleshooting/firebird-unable-complete.md @@ -0,0 +1,73 @@ +--- +id: firebird-unable-complete +title: Firebird Unable to complete network request to host name +description: Solution for Firebird Unable to complete network request to host name +slug: /troubleshooting/firebird-unable-complete +tags: ["SQL Account", "Troubleshooting", "Firebird"] +--- + +![firebird-inactive](../../static/img/troubleshooting/firebird-unable-complete/firebird-inactive.jpg) + +## Common Causes + +### 1. Firebird not installed in main PC/Server + +Install the firebird in main PC/Server. Click to [Firebird](docs/getting-started/multi-user-setup.md#firebird-installation) installation guide. + +### 2. Invalid IP address of main PC/Server + +1. Run the command prompt. + +2. Type **ipconfig** and hit ENTER key. + + ![firebird-reason2-1](../../static/img/troubleshooting/firebird-unable-complete/firebird-reason2-1.jpg) + +3. Ensure the IP Address is correct in Database Group setting. + + ![firebird-reason2-2](../../static/img/troubleshooting/firebird-unable-complete/firebird-reason2-2.jpg) + +### 3. Firewall has blocked the port number (3050) + +Add the port number 3050 as exception in any anti-virus firewall. + +### 4. Windows system file has altered to other port number (eg. 3999) + +#### Check the port number has set to other than 3050 + +1. Run the command prompt. +2. Type **netstat** and hit ENTER key. +3. Local address will be ended with 3999. See screenshot below. + +![check-port-number](../../static/img/troubleshooting/firebird-unable-complete/check-port-number.jpg) + +#### Change the port number to 3050 + +1. To search the command prompt, type **CMD**. + + ![change-port-number-1](../../static/img/troubleshooting/firebird-unable-complete/change-port-number-1.jpg) + +2. **Run as Administrator** (Right click on command prompt). Must run as administrator. + + ![change-port-number-2](../../static/img/troubleshooting/firebird-unable-complete/change-port-number-2.jpg) + +3. At command line **c:\WINDOWS\system32>** , type **cd drivers\etc** + + ![change-port-number-3](../../static/img/troubleshooting/firebird-unable-complete/change-port-number-3.jpg) + +4. Hit **ENTER** key. + +5. Follow by type **notepad services**. + + ![change-port-number-4](../../static/img/troubleshooting/firebird-unable-complete/change-port-number-4.jpg) + +6. Hit ENTER key. + +7. Find (Ctrl+F) the keyword **3999/tcp**. + + ![change-port-number-5](../../static/img/troubleshooting/firebird-unable-complete/change-port-number-5.jpg) + +8. Disable the line by insert #. Example: **gds_db** to **#gds_db** + +9. Close the notepad and save the setting. + + ![change-port-number-6](../../static/img/troubleshooting/firebird-unable-complete/change-port-number-6.jpg) diff --git a/docs/troubleshooting/maintain-diff-ver.md b/docs/troubleshooting/maintain-diff-ver.md index b0807a5c..5639662e 100644 --- a/docs/troubleshooting/maintain-diff-ver.md +++ b/docs/troubleshooting/maintain-diff-ver.md @@ -12,15 +12,15 @@ For example: version 4 (728) and version 5 (743) 1. Open setup 728 - ![1](../../static/img/troubleshooting/maintain-diff-ver/1.png) + ![icon](../../static/img/troubleshooting/maintain-diff-ver/icon.png) 2. Check the version from the last 3-digit number, and click **Next** - ![2](../../static/img/troubleshooting/maintain-diff-ver/2.png) + ![next](../../static/img/troubleshooting/maintain-diff-ver/next.png) 3. Click "**I accept the agreement**" and click **Next** - ![3](../../static/img/troubleshooting/maintain-diff-ver/3.png) + ![license-agreement](../../static/img/troubleshooting/maintain-diff-ver/license-agreement.png) 4. Make sure the link is as below and click **Next**: @@ -30,7 +30,7 @@ For example: version 4 (728) and version 5 (743) If for version 743, please change the number behind to 743 ::: - ![4](../../static/img/troubleshooting/maintain-diff-ver/4.png) + ![destination-location](../../static/img/troubleshooting/maintain-diff-ver/destination-location.png) 5. Make sure the 3 directory is as shown in the picture below, and click **Next** @@ -38,33 +38,33 @@ For example: version 4 (728) and version 5 (743) If for version 743, please change the number behind to 743 ::: - ![5](../../static/img/troubleshooting/maintain-diff-ver/5.png) + ![database-location](../../static/img/troubleshooting/maintain-diff-ver/database-location.png) 6. Click on **Install** - ![6](../../static/img/troubleshooting/maintain-diff-ver/6.png) + ![install-sql](../../static/img/troubleshooting/maintain-diff-ver/install-sql.png) 7. Click on **Finish** - ![7](../../static/img/troubleshooting/maintain-diff-ver/7.png) + ![finish-install](../../static/img/troubleshooting/maintain-diff-ver/finish-install.png) 8. Click on Custom Settings - ![8](../../static/img/troubleshooting/maintain-diff-ver/8.png) + ![custom-settings](../../static/img/troubleshooting/maintain-diff-ver/custom-settings.png) :::note If installing version 743, after Launch, it will show as shown in the picture below, please click on Back to Database Group. ::: - ![9](../../static/img/troubleshooting/maintain-diff-ver/9.png) + ![back-to-database-grp](../../static/img/troubleshooting/maintain-diff-ver/back-to-database-grp.png) 9. Click on Create Group - ![10](../../static/img/troubleshooting/maintain-diff-ver/10.png) + ![create-grp](../../static/img/troubleshooting/maintain-diff-ver/create-grp.png) 10. Save in Share Folder - ![11](../../static/img/troubleshooting/maintain-diff-ver/11.png) + ![save-share-folder](../../static/img/troubleshooting/maintain-diff-ver/save-share-folder.png) 11. Make sure the folder directory is the same as shown in the picture below, and click on Test Connection. Lastly, click OK. @@ -72,7 +72,7 @@ For example: version 4 (728) and version 5 (743) If version 743, then the directory will be C:\eStream\SQLAccounting743\DB ::: - ![12](../../static/img/troubleshooting/maintain-diff-ver/12.png) + ![test-connection](../../static/img/troubleshooting/maintain-diff-ver/test-connection.png) 12. Repeat Step 1 to Step 11 for version 743 installation @@ -82,13 +82,13 @@ For example: version 4 (728) and version 5 (743) If version 743, then rename to 743. ::: - ![13](../../static/img/troubleshooting/maintain-diff-ver/13.png) + ![rename-grp-1](../../static/img/troubleshooting/maintain-diff-ver/rename-grp-1.png) - ![14](../../static/img/troubleshooting/maintain-diff-ver/14.png) + ![rename-grp-2](../../static/img/troubleshooting/maintain-diff-ver/rename-grp-2.png) The final result will be shown like the picture below. - ![15](../../static/img/troubleshooting/maintain-diff-ver/15.png) + ![rename-result](../../static/img/troubleshooting/maintain-diff-ver/rename-result.png) 14. In version 728, right-click on DCF (728), and click on Create Desktop Shortcut. @@ -96,8 +96,8 @@ For example: version 4 (728) and version 5 (743) If in version 743, then right-click on DCF(743), choose Create Desktop Shortcut. ::: - ![16](../../static/img/troubleshooting/maintain-diff-ver/16.png) + ![create-grp-shortcut](../../static/img/troubleshooting/maintain-diff-ver/create-grp-shortcut.png) 15. After done for both versions, on the Desktop, you will see 2 icons, and please rename the icons to the number of versions for easier recognition. - ![17](../../static/img/troubleshooting/maintain-diff-ver/17.png) + ![final-result](../../static/img/troubleshooting/maintain-diff-ver/final-result.png) diff --git a/docs/troubleshooting/patch-file.md b/docs/troubleshooting/patch-file.md index 33804e6d..4ca78a13 100644 --- a/docs/troubleshooting/patch-file.md +++ b/docs/troubleshooting/patch-file.md @@ -14,47 +14,47 @@ After cloning master data, we want to delete a customer (AR) or a supplier (AP). 1. Must be done at the server PC, and all users must log out first -2. [Click Here](http://www.sql.com.my/document) and download the patch file +2. [Click me to the patch file list](http://www.sql.com.my/document) and download the patch file - ![1](../../static/img/troubleshooting/patch-file/1.png) + ![download-patch-file](../../static/img/troubleshooting/patch-file/download-patch-file.png) 3. Open the downloaded patch (For example, if you want to delete a supplier) - ![2](../../static/img/troubleshooting/patch-file/2.png) + ![open-patch-file](../../static/img/troubleshooting/patch-file/open-patch-file.png) - ![3](../../static/img/troubleshooting/patch-file/3.png) + ![extract-to-desktop](../../static/img/troubleshooting/patch-file/extract-to-desktop.png) -4. [Click Here](http://www.sql.com.my/utility) and download diagnosis +4. [Click me to utility website](http://www.sql.com.my/utility) and download diagnosis - ![4](../../static/img/troubleshooting/patch-file/4.png) + ![download-diagnosis-1](../../static/img/troubleshooting/patch-file/download-diagnosis-1.png) - ![5](../../static/img/troubleshooting/patch-file/5.png) + ![download-diagnosis-2](../../static/img/troubleshooting/patch-file/download-diagnosis-2.png) After download completed, click on the setup: - ![6](../../static/img/troubleshooting/patch-file/6.png) + ![download-diagnosis-3](../../static/img/troubleshooting/patch-file/download-diagnosis-3.png) - ![7](../../static/img/troubleshooting/patch-file/7.png) + ![download-diagnosis-4](../../static/img/troubleshooting/patch-file/download-diagnosis-4.png) - ![8](../../static/img/troubleshooting/patch-file/8.png) + ![download-diagnosis-5](../../static/img/troubleshooting/patch-file/download-diagnosis-5.png) - ![9](../../static/img/troubleshooting/patch-file/9.png) + ![download-diagnosis-6](../../static/img/troubleshooting/patch-file/download-diagnosis-6.png) - ![10](../../static/img/troubleshooting/patch-file/10.png) + ![download-diagnosis-7](../../static/img/troubleshooting/patch-file/download-diagnosis-7.png) - ![11](../../static/img/troubleshooting/patch-file/11.png) + ![download-diagnosis-8](../../static/img/troubleshooting/patch-file/download-diagnosis-8.png) - ![12](../../static/img/troubleshooting/patch-file/12.png) + ![download-diagnosis-9](../../static/img/troubleshooting/patch-file/download-diagnosis-9.png) 5. Open SQL Accounting Diagnosis - ![13](../../static/img/troubleshooting/patch-file/13.png) + ![run-patch-file-1](../../static/img/troubleshooting/patch-file/run-patch-file-1.png) - ![14](../../static/img/troubleshooting/patch-file/14.png) + ![run-patch-file-2](../../static/img/troubleshooting/patch-file/run-patch-file-2.png) - ![15](../../static/img/troubleshooting/patch-file/15.png) + ![run-patch-file-3](../../static/img/troubleshooting/patch-file/run-patch-file-3.png) - ![16](../../static/img/troubleshooting/patch-file/16.png) + ![run-patch-file-4](../../static/img/troubleshooting/patch-file/run-patch-file-4.png) --- @@ -66,8 +66,8 @@ After cloning master data, we want to delete a customer (AR) or a supplier (AP). 1. Click on `⚙️` - ![17](../../static/img/troubleshooting/patch-file/17.png) + ![tips-1](../../static/img/troubleshooting/patch-file/tips-1.png) 2. You can identify the database by checking the Database ID (For example, ACC-003.FDB) - ![18](../../static/img/troubleshooting/patch-file/18.png) + ![tips-2](../../static/img/troubleshooting/patch-file/tips-2.png) diff --git a/docs/troubleshooting/perf-speed-improve.md b/docs/troubleshooting/perf-speed-improve.md index 0d1b3758..51bbb913 100644 --- a/docs/troubleshooting/perf-speed-improve.md +++ b/docs/troubleshooting/perf-speed-improve.md @@ -10,7 +10,7 @@ tags: ["SQL Account", "Troubleshooting"] 1. Right click on the primary Hard Disc (eg. C:\), click to Properties\Hardware \Properties. - ![1](../../static/img/troubleshooting/perf-speed-improve/1.png) + ![solution-a-properties](../../static/img/troubleshooting/perf-speed-improve/solution-a-properties.png) 2. Go to ‘Policies’ tab. @@ -20,7 +20,7 @@ tags: ["SQL Account", "Troubleshooting"] 4. Press OK to EXIT. - ![2](../../static/img/troubleshooting/perf-speed-improve/2.png) + ![solution-a-policies](../../static/img/troubleshooting/perf-speed-improve/solution-a-policies.png) ## Solution B (Recommended) @@ -36,4 +36,4 @@ tags: ["SQL Account", "Troubleshooting"] 5. Press OK to EXIT. - ![3](../../static/img/troubleshooting/perf-speed-improve/3.png) + ![solution-b](../../static/img/troubleshooting/perf-speed-improve/solution-b.png) diff --git a/docs/troubleshooting/validate-db.md b/docs/troubleshooting/validate-db.md index 04f159fd..fb43646b 100644 --- a/docs/troubleshooting/validate-db.md +++ b/docs/troubleshooting/validate-db.md @@ -8,22 +8,22 @@ tags: ["SQL Account", "Troubleshooting"] ## Steps & Instruction :::note -Download & Install SQL Accounting Diagnosis from [**Here**](http://www.sql.com.my/utility/SQLAccDiagnosis-setup.exe) +Download & Install SQL Accounting Diagnosis from [**This Link**](http://www.sql.com.my/utility/SQLAccDiagnosis-setup.exe) User & password to access to above link = sqlutility ::: 1. Find below icon on your desktop after installing SQL Accounting Diagnosis - ![1](../../static/img/troubleshooting/validate-db/1.png) + ![sql-diag-icon](../../static/img/troubleshooting/validate-db/sql-diag-icon.png) 2. Choose Firebird 2.5 and click on **Database Validate** - ![2](../../static/img/troubleshooting/validate-db/2.png) + ![database-validate-1](../../static/img/troubleshooting/validate-db/database-validate-1.png) 3. Click on the yellow color folder to select your database - ![3](../../static/img/troubleshooting/validate-db/3.png) + ![database-validate-2](../../static/img/troubleshooting/validate-db/database-validate-2.png) 4. Select your database @@ -33,17 +33,17 @@ User & password to access to above link = sqlutility 3. Click on Open - ![4](../../static/img/troubleshooting/validate-db/4.png) + ![select-database](../../static/img/troubleshooting/validate-db/select-database.png) 5. Go to SQL Financial Accounting - 1. Click on the ⚙️ button in the logo screen + 1. Click on the ⚙️ button in the logon screen - ![5](../../static/img/getting-started/backup-restore/7.png) + ![5](../../static/img/getting-started/database/backup-restore/7.png) 2. Check your ACC-XXXX.FDB - ![6](../../static/img/troubleshooting/validate-db/6.png) + ![check-fdb](../../static/img/troubleshooting/validate-db/check-fdb.png) 3. Click on back to the database group @@ -51,15 +51,15 @@ User & password to access to above link = sqlutility 5. Go to properties - ![7](../../static/img/troubleshooting/validate-db/7.png) + ![grp-properties](../../static/img/troubleshooting/validate-db/grp-properties.png) 6. Check on the DB Folder - ![8](../../static/img/troubleshooting/validate-db/8.png) + ![properties](../../static/img/troubleshooting/validate-db/properties.png) 6. After selecting your correct ACC-XXXX.FDB, click on **Validate** and make sure you get the message “**Database Validation Complete**” as shown on the right screen. Then, click **ok**. - ![9](../../static/img/troubleshooting/validate-db/9.png) + ![validation-complete](../../static/img/troubleshooting/validate-db/validation-complete.png) :::info If you don’t get “Database validation complete” and get an error “bad parameter,” please contact the helpdesk to fix this database. @@ -67,31 +67,31 @@ User & password to access to above link = sqlutility 7. Click on Backup if you get “database validation complete” > select **Desktop** > Click on **OK** > Click **ok** for Backup Successful. - ![10](../../static/img/troubleshooting/validate-db/10.png) + ![backup](../../static/img/troubleshooting/validate-db/backup.png) 8. Restore database 1. Restore your database as usual > Click on the ⚙️ button - ![11](../../static/img/getting-started/backup-restore/7.png) + ![11](../../static/img/getting-started/database/backup-restore/7.png) 2. Click on Restore - ![12](../../static/img/troubleshooting/validate-db/12.png) + ![restore-1](../../static/img/troubleshooting/validate-db/restore-1.png) 3. Click on the 3 dot button - ![13](../../static/img/troubleshooting/validate-db/13.png) + ![restore-2](../../static/img/troubleshooting/validate-db/restore-2.png) 4. Select the backup file on the desktop > Open > Click on **OK** > Click on **OK** - ![14](../../static/img/troubleshooting/validate-db/14.png) + ![restore-3](../../static/img/troubleshooting/validate-db/restore-3.png) - ![15](../../static/img/troubleshooting/validate-db/15.png) + ![restore-4](../../static/img/troubleshooting/validate-db/restore-4.png) 5. Click on **OK** - ![16](../../static/img/troubleshooting/validate-db/16.png) + ![restore-5](../../static/img/troubleshooting/validate-db/restore-5.png) 9. After the restore, you will see two databases with the same name. On the left side, ACC-0160.FDB is the old (refer to step **5 ii**). And on the right side, ACC-0161.FDB is the new file you restored (refer to step **8 iv**). @@ -101,4 +101,4 @@ User & password to access to above link = sqlutility - **Delete Database**: Permanently delete, no way to call it back. - ![17](../../static/img/troubleshooting/validate-db/17.png) + ![delete-old-database](../../static/img/troubleshooting/validate-db/delete-old-database.png) diff --git a/docs/usage/Asset/_category_.json b/docs/usage/Asset/_category_.json new file mode 100644 index 00000000..00545449 --- /dev/null +++ b/docs/usage/Asset/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Asset", + "position": 11, + "link": { + "type": "generated-index", + "description": "Asset guide" + } +} \ No newline at end of file diff --git a/docs/usage/Asset/faq.md b/docs/usage/Asset/faq.md new file mode 100644 index 00000000..7eae3be3 --- /dev/null +++ b/docs/usage/Asset/faq.md @@ -0,0 +1,103 @@ +--- +sidebar_position: 2 +title: FAQ +description: FAQ related to Asset +slug: /usage/asset/faq +tags: ["SQL Account", "Asset", "FAQ"] +--- + +## How to process Asset Opening and tally with the GL Maintain Opening Balance + +### Process Opening Depreciation + +*Menu: Asset | Process Depreciation...* + + You are allowed to process Asset Opening Depreciation BEFORE System Conversion Date. + +![asset-depr](../../../static/img/usage/asset/assetFaq/asset-depr.jpg) + +:::note Tips: +A - FIRST acquire date of the asset +B - System Conversion Date -1 day +::: + +## I have posted the depreciation until December 2021. How do I record my new asset? + +### Method 1 : Use the Last Asset Net Book Value from Balance Sheet + +Maintain the Asset Item as below: + +![asset-item](../../../static/img/usage/asset/assetFaq/asset-item.jpg) + +1. Key in the Cost as *Net Book Value* (as at 31/12/2021). +2. Acquire Date, eg. 01/01/2022 +3. Useful life = *Balance of useful life* to be depreciate +4. Start Process Depreciation from 01/01/2022 + +### Method 2: Follow Original Cost and Acquire Date + +Maintain the Asset as below : + +![asset-item1](../../../static/img/usage/asset/assetFaq/asset-item1.jpg) + +1. Key in the Cost as *Original Cost* +2. Acquire Date set as *Original Purchase Date* +3. Useful life = *Full useful life* +4. Process Depreciation until 31/12/2021. + +5. Tick *Cancelled* to the Journal posted from Step 4 +![je-cancellled](../../../static/img/usage/asset/assetFaq/je-cancellled.jpg) + +## If the depreciation value differs from my previous Journal, can I edit the depreciation value calculated in Maintain Asset Item? + +Yes, you can change the depreciation value in Maintain Asset Item (Depreciation Schedule). + +![asset-amount](../../../static/img/usage/asset/assetFaq/asset-amount.jpg) + +![depr-value](../../../static/img/usage/asset/assetFaq/depr-value.jpg) + +## Can the amortization of Intangible Assets such as licenses, be managed in the Asset Module? + +Yes, it can. Maintain it as you would a __Tangible Asset__ (Fixed Asset). + +For __Intangible Asset__ (eg. goodwill, license), the __amortization calculation__ uses the __straight line method__ , which can be selected in the Asset Group. The calculation involves subtracting the asset's anticipated salvage or book value from its cost and dividing the result by the total number of years it will be used. + +## Can I import the asset list using Excel instead of manually key-in? + +Yes, you can. The asset import function is available in SQL Account version 5.2022.948.826 + +Refer to [Import-Asset Master List](../../usage/asset/guide#importing-asset-master-list) + +## How do I handle additional cost for the Fixed Asset? + +Create new asset code to handle additional cost, eg.: + +| __Asset Code__ | __Description__ | __Remark__ | +|----------------|-----------------------------|---------------------| +| MV-0001 | TOYOTA VIOS - BZZ 999 | Initial Purchase | +| MV-0001A | TOYOTA VIOS - BZZ 999 | Additional Cost | + +:::info + Do not mix the depreciation value of the original asset and the additional cost. +::: + +### Quick Steps + +1. Copy the existing asset code. + + ![copy-asset](../../../static/img/usage/asset/assetFaq/copy-asset.jpg) + +2. Create new asset. +3. Click on More | Paste Asset Item. + + ![paste-asset](../../../static/img/usage/asset/assetFaq/paste-asset.jpg) + +4. *Change the asset code* by inserting any characters to differentiate it + - Acquire date = Date the additional cost was incurred. + - Cost = Additional Cost + + ![depr-rate](../../../static/img/usage/asset/assetFaq/depr-rate.jpg) + +## Should the cost in Maintain Asset Item be key-in in local currency or the original currency (eg. purchase in USD)? + +The cost should be key-in as the __Local value__. The depreciation value will then be calculated and posted in the local currency. diff --git a/docs/usage/Asset/guide.md b/docs/usage/Asset/guide.md new file mode 100644 index 00000000..a19183a8 --- /dev/null +++ b/docs/usage/Asset/guide.md @@ -0,0 +1,374 @@ +--- +sidebar_position: 1 +title: Guide +description: A guide on Asset +slug: /usage/asset/guide +tags: ["SQL Account", "Usage", "Submission"] +--- + +## Asset + +:::note Fixed Asset Module +This is a **paid module**. +::: + +![asset-tab](../../../static/img/usage/asset/assetBasicGuide/asset-tab.png) + +## Maintain Asset Group + +*Menu: Asset | Asset Group...* + +Group the asset items based on the following considerations. + +1. Type of assets, eg. Motor Vehicle, Furniture, etc; +2. GL Account mapping. + + ![asset-grp](../../../static/img/usage/asset/assetBasicGuide/asset-grp.jpg) + +### Asset Group + +![asset-grp2](../../../static/img/usage/asset/assetBasicGuide/asset-grp2.jpg) + +| **Field Name** | **Explanation & Properties** | +|-------------------------|-----------------------------------------------------------------------------------------------| +| **Code** | Input the new Asset Group Code. **Field type:** Alphanumerical; **Length:** 20. | +| **Description** | Input the Asset Group description, e.g., *Furniture*, *Motor Vehicle*. **Field type:** Alphanumerical; **Length:** 200. | +| **Depreciation Method** | Select an appropriate Depreciation Method to generate the depreciation value. | +| **Fixed Asset** | Select the Balance Sheet GL Account code for Fixed Asset. | +| **Accum Depreciation** | Select the Balance Sheet GL Account code for Accumulated Depreciation. | +| **Depreciation** | Select the P&L GL Account for Depreciation of Asset. | +| **Disposal Gain** | Select the P&L GL Account for Gain from Disposal of Asset. | +| **Disposal Loss** | Select the P&L GL Account for Loss from Disposal of Asset. | + +## Maintain Asset Item + +*Menu: Asset | Asset Item...* + +Add new asset items. + +![add-asset-item](../../../static/img/usage/asset/assetBasicGuide/add-asset-item.jpg) + +### Asset Item + +![asset-items](../../../static/img/usage/asset/assetBasicGuide/asset-items.jpg) + +| **Field Name** | **Field Type** | **Length** | **Explanation** | +|--------------------------|------------------|------------|---------------------------------------------------------------------------------| +| **Code** | Alphanumerical | 20 | Input the new Asset Item Code | +| **Description** | Alphanumerical | 200 | Input the Asset Item description, e.g., Meeting Table, Toyota Vios, Perodua MYVI | +| **Asset Group** | Selection | – | Select an appropriate Asset Group for depreciation calculation and GL Account posting | +| **Agent** | Selection | – | Select who is the Agent using this Asset Item | +| **Area** | Selection | – | Select where the asset is located | +| **Acquire Date** | Date | – | Set the acquire date for this asset | +| **Cost** | Currency | – | Set the purchase cost for this asset | +| **Useful Life (Years)** | Integer/Float | – | Set the useful life of this asset | +| **Residual Value** | Currency/Float | – | Set the residual value for this asset | +| **Status** | Selection | – | Default is Active. Can be set to Inactive with an inactive date | + +### Depreciation Schedule + +1. Select the Frequency to generate the depreciation schedule by :- + 1. Monthly + 2. Quarterly + 3. Half Yearly + 4. Yearly + +2. Click Generate button. + + ![depr-schedule](../../../static/img/usage/asset/assetBasicGuide/depr-schedule.jpg) + +### Project + +Set the depreciation allocation by Project (for Departmental/Cost Center purpose). + + ![depr-schedule-p1](../../../static/img/usage/asset/assetBasicGuide/depr-schedule-p1.jpg) + +### History + +Add the important remarks in the asset history. For instances: + 1. who has borrowed/ when has returned this asset? + 2. asset has been sent for repair or service... + 3. asset has been destroyed by flood + +![depr-history](../../../static/img/usage/asset/assetBasicGuide/depr-history.jpg) + +### Photo + +Add the asset photo. + +![asset-photo](../../../static/img/usage/asset/assetBasicGuide/asset-photo.jpg) + +### Asset Item Attachments + +Add the attachments for an asset + +![asset-attach](../../../static/img/usage/asset/assetBasicGuide/asset-attach.jpg) + +## Process Depreciation + +*Menu: Asset | Process Depreciation...* + +### Asset Depreciation + +![asset-date-range](../../../static/img/usage/asset/assetBasicGuide/asset-date-range.jpg) + +1. Select the process date range. + + :::note Tips: + + 1. Process date range allows to select more than 1 month or 1 year to process the depreciation. + 2. Allow to process BEFORE system conversion date (No update to Maintain Opening Balance). + ::: + +2. Select the Process Date. + + ![asset-process-date](../../../static/img/usage/asset/assetBasicGuide/asset-process-date.jpg) + + :::note Tips: + Journal Voucher date will follow this Process Date. + ::: + +3. Description will be captured in the Journal Voucher description. +4. Click Process. +5. Preview the assets depreciation value and Net Book Value (NBV) before post to Journal Voucher. Click Save to post it. + + ![asset-nbv](../../../static/img/usage/asset/assetBasicGuide/asset-nbv.jpg) + +## Open Depreciation + +*Menu: Asset | Open Depreciation...* + + Open to view the historical Depreciation Listing. + +![depr-list](../../../static/img/usage/asset/assetBasicGuide/depr-list.jpg) + +## Asset Disposal + +*Menu: Asset | Asset Disposal...* + +### Asset Disposal Entry + +1. Click New. +2. Enter Date. +3. Select Asset wish to dispose. +4. Enter Description. +5. Enter Ref1, eg. invoice no. +6. Enter Ref2 if any. +7. Select Project. Default follow Asset Item. +8. Select Agent. Default follow Asset Item. +9. Select Area. Default follow Asset Item. + +![asset-disposal](../../../static/img/usage/asset/assetBasicGuide/asset-disposal.jpg) + +### General Tab + +1. Cost, Accum Depreciation, and Net Book Value are retrieved from Maintain Asset Item automatically. +2. Key-in the **Disposal** value. +3. Select **Payment Method** to receive disposal value. +4. **(Gain)/Loss** worked out automatically. +5. Gain/Loss Account default follow from Maintain Asset. May change the **(Gain)/Loss Account** if necessary. + +![general-tab-asset](../../../static/img/usage/asset/assetBasicGuide/general-tab-asset.jpg) + +### More Tab + +Enter detailed **Note**. +![more-tab-asset](../../../static/img/usage/asset/assetBasicGuide/more-tab-asset.jpg) + +### Asset Disposal Attachments + + Add more attachment files +![attachments-tab-asset](../../../static/img/usage/asset/assetBasicGuide/attachments-tab-asset.jpg) + +## Print Yearly Depreciation + +*Menu: Asset | Print Yearly Depreciation...* + +![yearly-depr](../../../static/img/usage/asset/assetBasicGuide/yearly-depr.jpg) + +## Print Yearly Analysis + +*Menu: Asset | Print Asset Analysis...* + +![asset-analysis](../../../static/img/usage/asset/assetBasicGuide/asset-analysis.jpg) + +### Reports Selection + +1. This will analyze the asset **Cost, Accumulated Depreciation, Net Book Value (NBV)** and **Disposal Value**. +2. It allows you to choose and generate the following reports format: +Monthly (12 Months) +Quarterly (4 quarters) +Half Yearly (First Half and 2nd Half) +Yearly (5 Years) + + ![asset-analysis-report](../../../static/img/usage/asset/assetBasicGuide/asset-analysis-report.jpg) + +### Asset Analysis vs GL Balance Sheet Report + +1. At GL | Print Balance Sheet Statement..., choose the Balance Sheet Format : **This Year - 3 columns** +2. At Asset | Print Asset Analysis..., choose Report: **Yearly (5 columns)** + + ![balance-sheet-vs-asset-analysis](../../../static/img/usage/asset/assetBasicGuide/balance-sheet-vs-asset-analysis.jpg) + +## Print Asset Disposal Listing + +*Menu: Asset | Print Asset Disposal Listing...* + +![asset-disposal-list](../../../static/img/usage/asset/assetBasicGuide/asset-disposal-list.jpg) + +## Importing Asset Master List + +### Preparation for Asset Master Import Excel Template + +Download the [Asset Master Template](https://download.sql.com.my/customer/Asset/Asset_Master_Import.xlsx) + +![asset-import](../../../static/img/usage/asset/assetBasicGuide/asset-import.jpg) + +### Asset Master Template (xlsx) + +| **Sheet Name** | **Refer to** | +|---------------------------|--------------------------------------------------| +| **FA.GROUP.OPF** | Maintain Asset Group | +| **FA.ITEM.OPF** | Maintain Asset Item | +| **FA.ITEM.OPF.DeprSche** | Maintain Asset Item – Depreciation Schedule tab | +| **FA.ITEM.OPF.Project** | Maintain Asset Item – Project tab | + +:::warning NOTE: +**DO NOT** rename the **sheet** name. +::: + +1. FA.GROUP.OPF (Maintain Asset Group) + + | **Column** | **Length** | **Note** | + |--------------------|-----------------|--------------------------------------------------------------------------| + | **Code** | 20 | Asset Group Code, e.g., Furniture | + | **Description** | 160 | Asset Group Description, e.g., Furniture & Fittings | + | **DeprMethod** | 1 (Integer) | Depreciation Method, e.g., 1: Straight Line Method | + | **AssetAcc** | 10 | e.g., Furniture & Fittings under Non-Current Assets (B/S) | + | **AccumDeprAcc** | 10 | e.g., Accumulated Depreciation – Furniture & Fittings under Non-Current Assets (B/S) | + | **DeprAcc** | 10 | e.g., Depreciation account under Expenses (P&L) | + | **DisposalGainAcc**| 10 | e.g., Disposal Gain account under Other Income / Expenses (P&L) | + | **DisposalLossAcc**| 10 | e.g., Disposal Loss account under Expenses (P&L) | + + - **Example :** + + | **Code** | **Description** | **DeprMethod** | **AssetAcc** | **AccumDeprAcc** | **DeprAcc** | **DisposalGainAcc** | **DisposalLossAcc** | + |------------|--------------------------|----------------|--------------|------------------|-------------|---------------------|---------------------| + | Furniture | Furniture & Fittings | 1 | 200-200 | 200-205 | 923-000 | 530-999 | 980-999 | + | MV | Motor Vehicle | 1 | 200-400 | 200-405 | 923-000 | 530-999 | 980-999 | + +2. FA.ITEM.OPF (Maintain Asset Item) + + | **Column** | **Length** | **Note** | + |-------------------|-------------|--------------------------------------------------------------------------| + | **Code** | 20 | Asset Code, e.g., FF-0001 | + | **Description** | 160 | Asset Description, e.g., Chairs, Table | + | **Asset Group** | 20 | Asset Group, e.g., Furniture | + | **Agent** | 10 | Assigned an agent if any | + | **Area** | 10 | Assigned an area if any | + | **AcquireDate** | Date | Purchase date | + | **Cost** | Currency | Purchase cost | + | **UsefulLife** | Float | Useful life in years, e.g., 5 years, 3.3 years | + | **DeprFrequency** | 1 (Integer) | Depreciation frequency options: 1 = Monthly, 2 = Quarterly, 3 = Half Yearly, 4 = Yearly | + | **Residual** | Float | Re-sellable value | + + - **Example** + + | **Code** | **Description** | **Asset Group** | **Agent** | **Area** | **AcquireDate** | **Cost** | **UsefulLife** | **DeprFrequency** | **Residual** | + |-----------|------------------------------|-----------------|-----------|----------|-----------------|------------|----------------|-------------------|--------------| + | FF-001 | Chairs | Furniture | ---- | KL | 13/10/2022 | 12,000.00 | 10 | 1 (Monthly) | 100.00 | + | FF-002 | Meeting Table | Furniture | ---- | KL | 23/01/2021 | 15,000.00 | 10 | 2 (Quarterly) | 0.01 | + | MV-001 | TOYOTA VIOS 1.5 / RED | MV | YUKI | SEL | 17/03/2020 | 88,000.00 | 5 | 4 (Yearly) | 30,000.00 | + +3. FA.ITEM.OPF.DeprSche (Maintain Asset item-Depreciation Schedule) + + | **Column** | **Length** | **Note** | + |----------------|------------|--------------------------------------------------------------------------| + | **Code** | 20 | Asset Code, e.g., FF-0001 | + | **ScheDate** | Date | Scheduled depreciation posting date | + | **Description**| 160 | Depreciation description | + | **Amount** | Currency | Depreciation amount based on the depreciation frequency | + + - **Depreciation Frequency** + + - **Monthly** + + | **Calculation** | **Formula** | **Result** | + |------------------------|-----------------------------------|-------------| + | No. of Rows | Useful life × 12 months | 5 × 12 = 60 | + | Amount per Row (RM) | (Cost – Residual) ÷ No. of Rows | (88,000 – 30,000) ÷ 60 = 966.67 | + + - **Quarterly** + + | **Calculation** | **Formula** | **Result** | + |------------------------|-----------------------------------|-------------| + | No. of Rows | Useful life × 4 quarters | 5 × 4 = 20 | + | Amount per Row (RM) | (Cost – Residual) ÷ No. of Rows | (88,000 – 30,000) ÷ 20 = 2,900 | + + - **Half-Yearly** + + | **Calculation** | **Formula** | **Result** | + |------------------------|-----------------------------------|-------------| + | No. of Rows | Useful life × 2 half-years | 5 × 2 = 10 | + | Amount per Row (RM) | (Cost – Residual) ÷ No. of Rows | (88,000 – 30,000) ÷ 10 = 5,800 | + + - **Yearly** + + | **Calculation** | **Formula** | **Result** | + |------------------------|-----------------------------------|-------------| + | No. of Rows | Useful life (years) | 5 | + | Amount per Row (RM) | (Cost – Residual) ÷ No. of Rows | (88,000 – 30,000) ÷ 5 = 11,600 | + + - **Example** + + ![asset-import-fa-item-opf](../../../static/img/usage/asset/assetBasicGuide/asset-import-fa-item-opf.jpg) + + - **4.FA.ITEM.OPF.Project(Maintain Asset Item-Project)** + + | **Column** | **Length** | **Note** | + |------------|------------|------------------------------------| + | **Code** | 20 | Asset Code, e.g., FF-0001 | + | **Project**| 20 | Project Code | + | **Rate** | Float | Allocation percentage (%) | + + - **Example** + + | **Code** | **Project** | **Rate** | + |-----------|--------------|----------| + | FF-001 | Project-A | 30 | + | FF-001 | Project-B | 70 | + | MV-001 | Project-A | 100 | + +### Quick Import Asset List + +*Menu: File | Import | Excel Files...* + +1. Click Open folder button. + + ![files-import-button](../../../static/img/usage/asset/assetBasicGuide/files-import-button.jpg) + +2. Select the Asset Template excel file... + +3. Click Execute (Direct Import). Click Verify if you wish to verify the excel data before import. + + ![files-import-execute](../../../static/img/usage/asset/assetBasicGuide/files-import-execute.jpg) + + :::note NOTE: + Asset import function available in SQL Account version 5.2022.948.826 and above. + ::: + +## Generate Asset Opening vs GL Maintain Opening Balance Report + +*Menu: Asset | Maintain Asset Item...* + +1. At Maintain Asset Item, click Preview button. + + ![preview-asset](../../../static/img/usage/asset/assetBasicGuide/preview-asset.jpg) + +2. For instance, the **Out of Balance** result get from the comparison between Asset Opening Balance and GL Maintain Opening Balance. + + ![opening](../../../static/img/usage/asset/assetBasicGuide/opening.jpg) + +3. With the **Asset Opening Breakdown** in the report, it helps you to ensure the asset data inputs are correctly recorded in Maintain Asset Item. + + ![asset-breakdown](../../../static/img/usage/asset/assetBasicGuide/asset-breakdown.jpg) diff --git a/docs/usage/Customer/Report.md b/docs/usage/Customer/Report.md new file mode 100644 index 00000000..46b56ee2 --- /dev/null +++ b/docs/usage/Customer/Report.md @@ -0,0 +1,131 @@ +--- +sidebar_position: 2 +title: Reports +description: All kind of customer reports and it's purpose +slug: /usage/customer/report +tags: ["SQL Account", "Usage", "Customer"] +--- + +## Print Customer Document Listing + +* View all customer transactions (Invoices, Payments, Credit Notes, Debit Notes, Refunds, Contras). +* Batch print or email documents. +* The payment details for each document are displayed at the bottom of the screen. + +![printCustDocList](../../../static/img/usage/customer/customerReport/print-cust-doc-list.png) + +* Select which Document listing you want to see. Follow the image: + +![docListType](../../../static/img/usage/customer/customerReport/doc-list-type.png) + +* Click Apply Button + +![docListApply](../../../static/img/usage/customer/customerReport/doc-list-apply.png) + +* Click Preview & Listing Report + +![docListPreview](../../../static/img/usage/customer/customerReport/doc-list-preview.png) + +* Example of customer invoice listing report + +![custInvoiceListReport](../../../static/img/usage/customer/customerReport/cust-invoice-list-report.png) + +### Print Document Style + +* Tick relevant checkboxes + +![tickPrintDocStyle](../../../static/img/usage/customer/customerReport/tick-print-doc-style.png) + +| Field Name | Explanation | +|----------------------------|-------------------------------------------------------| +| Print Document Style | Tick this checkbox to print out bulk report or send batch email | +| Include Cancelled Documents| Tick this checkbox to include cancelled documents in the listing | + +* If you tick **Print Document Style** , you will see that you will be able to choose customer invoice report format. + +![custInvoiceReportFormat](../../../static/img/usage/customer/customerReport/cust-invoice-report-format.png) +![custInvoiceReportFormat2](../../../static/img/usage/customer/customerReport/cust-invoice-report-format2.png) + +### Group/Sort by + +* You can filter your documents based on Customer, Agent, Area, Currency, Project and Company Category + +![GrpBy-which](../../../static/img/usage/customer/customerReport/grp-by-which.png) + +* You can use the Group/Sort By table to choose how you want to group your report listing + +![grp-sortBy](../../../static/img/usage/customer/customerReport/grp-sort-by.png) + +* For example, you can group the report by "Customer Code" + +![grpByCustName](../../../static/img/usage/customer/customerReport/grp-by-cust-name.png) + +* Select the Listing Report + +![ListingReport](../../../static/img/usage/customer/customerReport/listing-report.png) + +* Here is an example of the report + +![custInvoiceListingreport](../../../static/img/usage/customer/customerReport/cust-invoice-listing-report.png) + +## Print Customer Balance Report + +* Print Customer Balance Report allows you to **see all the customer's balance**. + +![printCustBalanceReport](../../../static/img/usage/customer/customerReport/print-cust-balance-report.png) + +* Select the date period for the balance report + +![datePeriod](../../../static/img/usage/customer/customerReport/date-period.png) + +* You can filter the report by selecting the customer, agent, area, project of the transaction + +![custBalanceFilter](../../../static/img/usage/customer/customerReport/cust-balance-filter.png) + +* For example, filtering by customer name, we selected one company: ALPHA & BETA COMPUTER + +![custBalanceApplyFilter](../../../static/img/usage/customer/customerReport/cust-balance-apply-filter.png) + +* You can click on the small + icon to expand the row and see the transactions details. + +![plusIconToExpand](../../../static/img/usage/customer/customerReport/plus-icon-to-expand.png) + +* Press the Preview icon to preview and print the report + +![previewCustBalance](../../../static/img/usage/customer/customerReport/preview-cust-balance.png) + +## Print Customer Due Document Listing + +Customer Due Document allows you to print reminder letters for customers with outstanding amounts. + +1. **Filter by Date, Document** (Invoice, Debit Note, Credit Note, Contra) + +2. Overdue or Undue document. + +3. System can generate by group and give you a summary on each group (group/sort by) + +4. **Apply**. + + ![cust-due-doc-list-apply](../../../static/img/usage/customer/customerReport/cust-due-doc-list-apply.png) + +5. If you want to **print a reminder letter, make sure you tick the customer code under “Group / Sort by”** and **Apply**. + + ![grp-sort-by-customer-code](../../../static/img/usage/customer/customerReport/grp-sort-by-customer-code.png) + +6. Preview the report and you will see **Cust Overdue Letter**, choose your preferred format. + + ![cust-overdue-letter](../../../static/img/usage/customer/customerReport/cust-overdue-letter.png) + + ![print-overdue-letter](../../../static/img/usage/customer/customerReport/print-overdue-letter.png) + +7. Customer Analysis By Document + + This report is used to analyse all customer documents. You can check total Invoice, Credit Note, Debit Note, Payment and the rest of the document amount. + +8. **Customer** > **Print Customer Analysis By Document** + +9. Filter by Document Date and any others optional field to display. + +10. **Apply** + + ![cust-analysis-by-doc-apply](../../../static/img/usage/customer/customerReport/cust-analysis-by-doc-apply.png) diff --git a/docs/usage/Customer/_category_.json b/docs/usage/Customer/_category_.json new file mode 100644 index 00000000..cb5e08f4 --- /dev/null +++ b/docs/usage/Customer/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Customer", + "position": 4, + "link": { + "type": "generated-index", + "description": "Customer workflow" + } +} \ No newline at end of file diff --git a/docs/usage/Customer/faq.md b/docs/usage/Customer/faq.md new file mode 100644 index 00000000..ba7ab160 --- /dev/null +++ b/docs/usage/Customer/faq.md @@ -0,0 +1,481 @@ +--- +sidebar_position: 3 +title: FAQ +description: Customer Frequently Ask Questions +slug: /usage/customer/customerFaq/faq +tags: ["SQL Account", "Usage", "Customer","faq"] +--- + +## Bounce Payment for different currency + +### Customer Invoice + +Invoice amount USD 100 | Rate 3.00 | Local net total = RM300 + +![1](../../../static/img/usage/customer/customerFaq/bounce-payment/1.png) + +#### Situation 1: Received payment RM330, so Gain RM30 + +![2](../../../static/img/usage/customer/customerFaq/bounce-payment/2.png) + +Please follow the steps below to do the bounce payment: + +1. **Issue a Customer Debit Note as the previous invoice that had issue.** + + ![3](../../../static/img/usage/customer/customerFaq/bounce-payment/3.png) + +2. **Issue a payment voucher to credit out the amount that already knock off.** + + ![4](../../../static/img/usage/customer/customerFaq/bounce-payment/4.png) + +#### Situation 2: Received payment RM270, so Loss RM30 + +![5](../../../static/img/usage/customer/customerFaq/bounce-payment/5.png) + +Please follow the steps below to do the bounce payment: + + 1. **Issue a Customer Debit Note as the previous invoice that had issue.** + + ![6](../../../static/img/usage/customer/customerFaq/bounce-payment/6.png) + + 2. **Issue a payment voucher to credit out the amount that already knock off.** + + ![7](../../../static/img/usage/customer/customerFaq/bounce-payment/7.png) + +### Supplier Invoice + +Supplier Invoice amount USD100 | Rate 3.00 | Local net total = RM300 + +![8](../../../static/img/usage/customer/customerFaq/bounce-payment/8.png) + +#### Situation 1: Make payment RM330, so Loss RM30 + +![9](../../../static/img/usage/customer/customerFaq/bounce-payment/9.png) + +Please follow the steps below to do the bounce payment: + + 1. **Issue a Supplier Debit Note as the previous invoice that had issue.** + + ![10](../../../static/img/usage/customer/customerFaq/bounce-payment/10.png) + + 2. **Issue an Official receipt to debit the amount that already knock off.** + + ***Put USD30 into loss GL account because we need to paid more USD30 to supplier,but we loss USD**. + + ![11](../../../static/img/usage/customer/customerFaq/bounce-payment/11.png) + +#### Situation 2: Make payment RM270, so Gain RM30 + +![12](../../../static/img/usage/customer/customerFaq/bounce-payment/12.png) + +Please follow the steps below to do the bounce payment: + + 1. **Issue a Supplier Debit Note as the previous invoice that had issue.** + + ![13](../../../static/img/usage/customer/customerFaq/bounce-payment/13.png) + + 2. **Issue an Official receipt to debit the amount that already knock off.** + + **\*Put USD -30 into gain GL account because we pay less USD30 to supplier,but we gain USD30.** + + ![14](../../../static/img/usage/customer/customerFaq/bounce-payment/14.png) + +## Foreign Customer Unrealised Gain Loss + +### Customer | Print Customer Aging Report + +![1](../../../static/img/usage/customer/customerFaq/foreign/1.png) + +1. Select Date + +2. Select Foreign Customer + +3. Select UnRealised Gain Loss report + +4. Click Apply + + ![2](../../../static/img/usage/customer/customerFaq/foreign/2.png) + +5. Click Preview, system will prompt a dialog to let you enter currency rate + +6. Enter **closing currency rate** | Click OK + + ![3](../../../static/img/usage/customer/customerFaq/foreign/3.png) + +7. System will show the report with the auto-calculated UnRealised Gain/Loss Amount + + ![4](../../../static/img/usage/customer/customerFaq/foreign/4.png) + +8. Click Post_DNCN_Adjustment + + ![5](../../../static/img/usage/customer/customerFaq/foreign/5.png) + +9. Show Posting Done... + + ![6](../../../static/img/usage/customer/customerFaq/foreign/6.png) + +10. Go to Customer Credit Note / Customer Debit Note to check the document posted. + +:::note + +1. Same step for supplier. + +2. For more info, may go to the [Youtube](https://www.youtube.com/watch?v=PnLYx8ophIQ) link + +::: + +## Bank Deposit + +Opening Bank Deposit can be done when you are banking in 2 or more cheques at a time in a same transaction slip. After it is done, the transaction will be displayed in grouped form at bank reconciliation for you to reconcile. + +### Steps to open bank deposit + +1. Firstly, point to **“Customer”** tab and select **“Customer Payment”**. + + ![1](../../../static/img/usage/customer/customerFaq/open-bank-deposit/1.png) + +2. Click on **“New”** + + ![2](../../../static/img/usage/customer/customerFaq/open-bank-deposit/2.png) + +3. Right click at the blank space, and you will see a panel displayed with *“Open Bank Deposit”* for you to select. Click on **“Open Bank Deposit”** + + ![3](../../../static/img/usage/customer/customerFaq/open-bank-deposit/3.png) + +4. Click on **“New”** + + ![4](../../../static/img/usage/customer/customerFaq/open-bank-deposit/4.png) + +5. You will come to this interface. Enter the transaction slip number, select the correct date and account. + ![5](../../../static/img/usage/customer/customerFaq/open-bank-deposit/5.png) + ![6](../../../static/img/usage/customer/customerFaq/open-bank-deposit/6.png) + +6. Click **“Search”**. System will search for customer payment within the selected date. + + ![7](../../../static/img/usage/customer/customerFaq/open-bank-deposit/7.png) + + ![8](../../../static/img/usage/customer/customerFaq/open-bank-deposit/8.png) + +7. Tick on the payments which are made under the same transaction. Then, click **“OK”**. + + ![9](../../../static/img/usage/customer/customerFaq/open-bank-deposit/9.png) + +8. You will see the selected payments displayed in the panel. If you have wrongly selected the payment, you can always remove it by clicking on the “-“button. Click **“Save”**. + + ![10](../../../static/img/usage/customer/customerFaq/open-bank-deposit/10.png) + +9. Point to **“GL”** and click into **“Bank Reconciliation”**. + + ![11](../../../static/img/usage/customer/customerFaq/open-bank-deposit/11.png) + +10. Click on **“New”**. + + ![12](../../../static/img/usage/customer/customerFaq/open-bank-deposit/12.png) + +11. Then, you will come to this panel. Select the bank statement date (When the bank statement is received). Make sure that you have selected the correct account. + + ![13](../../../static/img/usage/customer/customerFaq/open-bank-deposit/13.png) + +12. Select the correct display period (including the date of the bank deposit opening made). Key in Bank Statement Bank Closing according to the bank statement you received. Click **“Apply”**. + + ![14](../../../static/img/usage/customer/customerFaq/open-bank-deposit/14.png) + +13. You will see the cheques from **“Opening Bank Deposit”** will be displayed together in a row with the total amount added up together. Then, click **“Save”**. + + ![15](../../../static/img/usage/customer/customerFaq/open-bank-deposit/15.png) + +### Opening Bank Deposit at Cash Book Entry + +“Opening Bank Deposit” can also be done at cash book entry. Firstly, point to **“GL”** and select **“Cash Book Entry”**. + + ![16](../../../static/img/usage/customer/customerFaq/open-bank-deposit/16.png) + +Click on **“New”** + + ![17](../../../static/img/usage/customer/customerFaq/open-bank-deposit/17.png) + +Then, right click at the blank space beside Payment Voucher, you will see **“Open Bank Deposit”** for you to select. + + ![18](../../../static/img/usage/customer/customerFaq/open-bank-deposit/18.png) + +## Payment Guide + +### Customer Payment Scenario + +|#|Customer Pay| You Receive| +|---|---|---| +|1|RM|RM| +|2|USD|RM| +|3|USD|USD| +|4|USD|SGD| + +#### 1. Customer Paid in RM & Payment Received in RM + +1. First step to know the customer for currency RM by default is with “----“ sign. + + **Customer > Maintain Customer** + + ![1](../../../static/img/usage/customer/customerFaq/payment-guide/1.png) + +2. Customer order and proceed to Invoice + + **Sales > Invoice** + + ![2](../../../static/img/usage/customer/customerFaq/payment-guide/2.png) + +3. Proceed to Payment + + **Customer > Payment** + + ![3](../../../static/img/usage/customer/customerFaq/payment-guide/3.png) + +Make sure the above step for Customer in RM currency, payment in default is RM currency also. + +#### 2. Customer Paid in USD & Payment Received in RM + +:::note +Refer to Step 1 in [Scenario 1](#1-customer-paid-in-rm--payment-received-in-rm) to know if the customer using USD currency. +::: + +1. Check the local amount and net total. Is it different with the previous one? If yes, proved that the document amount is in USD currency. + + **Sales > Invoice** + + ![4](../../../static/img/usage/customer/customerFaq/payment-guide/4.png) + +2. Proceed to Payment + + **Customer > Payment** + + ![5](../../../static/img/usage/customer/customerFaq/payment-guide/5.png) + + - 2A. Currency rate for knocking off the payment (System auto calculate) + + - 2B. Payment Amount made in RM (Note: This payment amount is based on Bank payment method currency) **[check on Tools > Maintain payment method to know more!]** + + - 2C. Bank payment method, make sure you choose the correct bank. + + - 2D. This pay amount you can either put it on your desire amount and check on the 2A, you’ll notice that currency rate will change once you try to knock off the amount. + +#### 3. Customer Paid in USD & Payment Received in USD + +1. For this case where customer currency is USD and payment also in USD, there’ll be a few more step to do. + + 1. you need to maintain a USD Bank in GL Account (**GL > Maintain Account**) where this will be the bank you’ll be getting your + payment in. + + 2. After maintained the GL Account, go to **Tools > Maintain Payment Method** to assign the currency of the + payment method in the particular bank. + + ![6](../../../static/img/usage/customer/customerFaq/payment-guide/6.png) + +2. After maintained payment method, we can proceed to do transaction for cases similar (USD Currency on Invoice). + + **Sales > Invoice** + + ![7](../../../static/img/usage/customer/customerFaq/payment-guide/7.png) + +3. Proceed to Payment + + **Customer > Payment** + + :::info + The currency rate in the top-right corner can only be edited if the customer's currency matches the payment currency. + ::: + + ![8](../../../static/img/usage/customer/customerFaq/payment-guide/8.png) + + 1. Now, this rate can be changed as the currency rate change according to the currency rate + + 2. Select the correct payment method in order to allow USD payment knocking off USD Invoice + + 3. Paid amount will be the amount of USD you receive + + 4. Local amount is the amount of conversion of (paid amount x currency rate at the moment) + + 5. This IV amount will always be following the currency amount not local amount. + + After confirming all the related info is correct may save it. If your currency rate is different from the one stated in the Invoice, a message should prompt out defining your gain/loss on foreign exchange. + + ![9](../../../static/img/usage/customer/customerFaq/payment-guide/9.png) + + :::note + If your Invoice currency is stated 3.5 at the moment, and when your customer pay to you on 3.6 rate, the system will auto calculate the amount of gain/loss you actually got from this transaction and show to you the amount when you click save. Above prompt dialog will appear. + ::: + +#### 4. Customer Paid in USD & Payment Received in SGD + +For customer on USD and receiving payment on different currency you just need to main the payment method. + +:::note +How to maintain payment method? – Refer to [Scenario 3](#3-customer-paid-in-usd--payment-received-in-usd) +::: + +## Payment Listing Commission + +### Guideline: Commission Report + +1. Go to **Tools > Maintain Commission Script > New** to add in the commission + script. Fill in the Code and Description. + + :::note + Maintain Commission Script requires additional module + ::: + + ![1](../../../static/img/usage/customer/customerFaq/comm/1.png) + + ![2](../../../static/img/usage/customer/customerFaq/comm/2.png) + + ![3](../../../static/img/usage/customer/customerFaq/comm/3.png) + + Default commission script: + + ```pascal + procedure CalculateCommission(AKODocAmt, AAge: variant; var Value: variant); + begin + if AAge < 10 then + Value := AKODocAmt * 0.05 + else if AAge < 20 then + Value := AKODocAmt * 0.03 + else if AAge < 30 then + Value := AKODocAmt * 0.02 + else + Value := AKODocAmt * 0.05005; + end; + ``` + +2. Change the value highlighted as below according to commission rate for agent and Save. + + ![4](../../../static/img/usage/customer/customerFaq/comm/4.png) + + 1. Value 10, 20, 30 = Age + + 2. Value 0.05, 0.03, 0.02, 0.005 = Commission Rate + +3. Go to **Tools > Maintain Agent** and select the agent that need to load the commission script. + + ![5](../../../static/img/usage/customer/customerFaq/comm/5.png) + +4. At the attachment tab, add in the commission script by selecting it as shown below and click Save after adding the script. + + ![6](../../../static/img/usage/customer/customerFaq/comm/6.png) + +5. Go to **Customer > Print Customer Document Listing**, select **Document Type** as **Customer Payment Listing**, group by Agent and apply. Preview the result with **Cust Local - Payment Listing - Collection Report**. + + ![7](../../../static/img/usage/customer/customerFaq/comm/7.png) + + ![8](../../../static/img/usage/customer/customerFaq/comm/8.png) + + ![9](../../../static/img/usage/customer/customerFaq/comm/9.png) + +## Post-dated & Bounced Cheque + +### Post-dated Cheque + +Post-dated cheque is a cheque written by the drawer (payer) for a date in the future. + +1. Firstly, go to **Customer > Customer Payment**. + + ![1](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/1.png) + +2. Click on **New** to create a new customer payment. + + ![2](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/2.png) + +3. As usual, create a customer payment and tick to knock off the corresponding invoice. Make sure the bank account and amount is correct. + + ![3](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/3.png) + +4. To set the payment as a post-dated cheque, simply point the cursor to the blank space beside **Customer Payment** and right click. Click into **Set Posting Date**. + + ![4](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/4.png) + +5. Select the actual posting date of the cheque (e.g., 16th of July 2015). Then, click **OK**. + + ![5](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/5.png) + + ![6](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/6.png) + +6. Now, you will see the posting date is clearly stated in the system. Click **Save**. + + ![7](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/7.png) + +7. From ledger report, by selecting the posting date and corresponding account, you will see that the document date and transaction is clearly stated. + + ![8](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/8.png) + +8. To view the listing of post-dated cheques. Go to **Customer Reports** and select **Print Customer Post Dated Cheque Listing**. + + ![9](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/9.png) + +9. Select the date of the payment made (NOT the cheque posting date), and click **Apply**. (You can filter the search by payment method, customer, agent and etc. before clicking **Apply**) + + ![10](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/10.png) + +10. Upon clicking the **Apply** button, a list of post-dated cheque will be displayed + + ![11](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/11.png) + +### Bounced Cheque + +A bounced cheque is a cheque that cannot be processed because the payer has insufficient funds or written wrong / incomplete information on the cheque. + +1. Firstly, go to **Customer** and click into **Customer Payment**. + + ![12](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/12.png) + +2. Select the bounced cheque customer payment. Double click into the document. + + ![13](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/13.png) + +3. Click **Edit**. + + ![14](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/14.png) + +4. To set the payment as a bounced cheque, simply point the cursor to the blank space beside **Customer Payment** and right click. Click into **Bounced Status**. + + ![15](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/15.png) + +5. Tick in checkbox to bounce the payment. And set the bounce date. (For this case, the cheque is posted on 16th of July 2015, thus the bounce date should be later that 16th of July 2015). Click **OK**. + + ![16](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/16.png) + +6. The cheque will then be labelled as bounced, and the bounce date will be clearly stated. Then click **Save**. + + ![17](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/17.png) + +7. From ledger report, by selecting the bounce date and the corresponding account, you can clearly see the transaction is bounced. + + ![18](../../../static/img/usage/customer/customerFaq/post-dated-bounced-cheque/18.png) + +## MyKad Reader + +### Read Customer Info using MyKad Reader + +1. Link your Smart Card Reader to your computer. + +2. The reader will display a red light when successfully linked to your computer. + + ![1](../../../static/img/usage/customer/customerFaq/read-mykad/1.png) + +3. Put MyKad into reader + +4. The reader will display a blue light when it successfully reads your MyKad. + + ![2](../../../static/img/usage/customer/customerFaq/read-mykad/2.png) + +5. Open your SQL Accounting New Customer Profile > ***Read MyKad*** + + ![3](../../../static/img/usage/customer/customerFaq/read-mykad/3.png) + +6. Select ***Reader Devices*** > ***Click Read Card*** + + ![4](../../../static/img/usage/customer/customerFaq/read-mykad/4.png) + +7. Click ***Read MyKad*** + + ![5](../../../static/img/usage/customer/customerFaq/read-mykad/5.png) + +8. The system will automatically fill in MyKad details ***(NAME , ADDRESS , ID Number)*** + + ![6](../../../static/img/usage/customer/customerFaq/read-mykad/6.png) diff --git a/docs/usage/Customer/guide.md b/docs/usage/Customer/guide.md new file mode 100644 index 00000000..ea98cce1 --- /dev/null +++ b/docs/usage/Customer/guide.md @@ -0,0 +1,386 @@ +--- +sidebar_position: 1 +title: Guide +description: Customer workflow +slug: /usage/customer/guide +tags: ["SQL Account", "Usage", "Customer"] +--- + +## Customer Work Flow (Account Receivable) + +Example of **Customer (AR)** process work flow aligned with SQL Account flow: + +![42](../../../static/img/usage/customer/customerBasicGuide/42.png) + +**AR = Account Receivable**. + +* To maintain customer profile data such as addresses, phone numbers, fax, email, contact persons, credit limits, credit terms, etc. In other words, it is your customer contacts list. + +![maintain-cust](../../../static/img/usage/customer/customerBasicGuide/maintain-cust.png) + +## Create New Customer + +* Click the **NEW** button. + +1. **Customer** | **Maintain Customer** | **New** + +2. Enter the customer’s name and other information accordingly. + +![newCust](../../../static/img/usage/customer/customerBasicGuide/new-cust.png) + +* Enter your customer's details + +![custEntry](../../../static/img/usage/customer/customerBasicGuide/cust-entry.png) + +* You may input the following fields: + +| **Field Name** | **Explanation & Properties** | +|-----------------|------------------------------| +| **Company** | • Input the customer billing company name.
• **Field type:** Alphanumerical
• **Length:** 100 | +| **Description 2** (underline below *Company*) | • An optional field where you can enter Chinese translated name, former company name, company register no, etc.
• **Field type:** Alphanumerical
• **Length:** 100 | +| **Control A/c** | • Select an appropriate Customer Control Account to be posted to GL when customer documents are created.
• **Field type:** Lookup from Maintain Accounts (Special Type: Customer Control Account)
• **Length:** 10 | +| **Code** | • AUTO/MANUAL generate the Customer Code.
• **Field type:** Alphanumerical
• **Length:** 10 | +| **Cust Category** | • Categorize your customer for reporting purpose.
• **Field type:** Lookup from Maintain Company Category
• **Length:** 15 | + +## Maintain Customer + +### General + +![custGeneral](../../../static/img/usage/customer/customerBasicGuide/cust-general.png) + +| **Field Name** | **Explanation & Properties** | +|----------------|------------------------------| +| **Branch Name** | • You may maintain multiple sets of addresses by differentiating the Branch Name.
Default Branch Name: BILLING
**Field type:** Alphanumerical
**Length:** 100 | +| **Address (4 lines)** | • Input the company addresses.
**Field type:** Alphanumerical
**Length:** 40 (each line) | +| **Attention** | • Input the contact person.
**Field type:** Alphanumerical
**Length:** 70 | +| **Phone 1 & 2** | • Input the telephone number(s).
**Field type:** Alphanumerical
**Length:** 30 | +| **Fax 1 & 2** | • Input the fax number(s).
**Field type:** Alphanumerical
**Length:** 30 | +| **Email** | • Input the email address.
**Field type:** Alphanumerical
**Length:** 60 | +| **Area** | • Select a default Area.
**Field type:** Lookup from Maintain Area
**Length:** 10 | +| **Agent** | • Select a default Agent.
**Field type:** Lookup from Maintain Agent
**Length:** 10 | +| **Currency** | • Select a default Currency.
**Field type:** Lookup from Maintain Currency
**Length:** 6 | +| **Credit Terms** | • Select a default Terms.
**Field type:** Lookup from Maintain Terms
**Length:** 10 | +| **Credit Limit** | • Set the credit limit (for non-Advance Credit Control module).
**Field type:** Numeric | +| **Statement** | • Select a default statement type: Open Item or Brought Forward.
**Brought Forward:** Summary Statement
**Open Item:** Detail Statement
**Field type:** Option
**Default:** Open Item | +| **Aging On** | • Select a default Aging type: Invoice Date or Due Date.
**Invoice Date:** based on IV Date
**Due Date:** based on after due date (terms)
**Field type:** Option
**Default:** Invoice Date | +| **Price Tag** | • Set the price tag to the items.
**Field type:** Lookup from Maintain Stock Price Tag
**Length:** 10 | + +1. You can categorize your customers into different groups such as category, agents, area. How to create a new agent/ area? Refer to the step below: + + ![custGroup](../../../static/img/usage/customer/customerBasicGuide/cust-group.png) + +2. You can also insert more than one billing / delivery addresses (unlimited) + +3. There are different options for viewing customer aging and customer statement + +:::note + +1. Customer Statement + +* Brought Forward: Summary Statement + +* Open Item: Detail Statement + +2. Customer Aging + +* Invoice Date: based on IV Date + +* Due Date: Based on after due date (terms) + +::: + +### Note + +![custNote](../../../static/img/usage/customer/customerBasicGuide/cust-note.png) + +| **Field Name** | **Explanation & Properties** | +|----------------|------------------------------| +| **Account Open Date** | • Represents the creation date of the account.
**Field type:** Date | +| **Remark** | • A note that will appear in Inquiry → Account Inquiry.
**Example:** "Check payment refer to Ms Lee (012-345 67890)".
**Field type:** Alphanumerical
**Length:** 80 | +| **Reg No. (new)** | • Company’s new registration number.
**Field type:** Alphanumerical
**Length:** 80 | +| **Reg No. (old)** | • Use the magnifying icon to search for the old registration number.
**Field type:** Alphanumerical
**Length:** 80 | +| **Biz Nature** | • Customer’s business nature.
**Example:** Chemical Manufacturing, Car Service, etc.
**Field type:** Alphanumerical
**Length:** 100 | +| **Note** | • Used to record the customer knowledge base.
Supports **Date Stamp** feature for tracking.
**Field type:** Alphanumerical
**Length:** Rich Text | +| **Status** | • Indicates the operational state of the customer account:
- **Active** → Can create official documents and print Customer Statement.
- **Inactive** → Cannot create official documents and cannot print Customer Statement.
- **Suspend** → Cannot create official documents but can print Customer Statement.
- **Prospect** → Can create official documents and print Customer Statement.
- **Pending** → Can create official documents and print Customer Statement. | + +### Tax + +![custTax](../../../static/img/usage/customer/customerBasicGuide/cust-tax.png) + +| **Field Name** | **Explanation & Properties** | +|-----------------|------------------------------| +| **Default Tax** | • Select a default tax code based on customer. | +| **Tax Area** | • Not applicable to Malaysia/Singapore. | +| **Sales Tax Area** | • Enter the company’s Sales Tax Number. | +| **Service Tax Area** | • Enter the company’s Service Tax Number. | +| **Exemption No** | • Enter the Sales Tax Exemption number received from customer.
**Field type:** Alphanumerical
**Length:** 50 | +| **Expiry Date** | • Set the expiry date for tax exemption.
• The customer will be tax exempted before the expiry date.
**Field type:** Date | + +### Tariff Code Setting + +* This setting set to customer who has supply the taxable goods under the Sales Tax (Person Exempted from Payment of Tax) Order 2018. + +| **Field Name** | **Explanation & Properties** | +|-----------------|------------------------------| +| **Tariff** | • Add tariff code of taxable goods to be sold in exemption.
• You can find your tariff code at [https://ezhs.customs.gov.my/](https://ezhs.customs.gov.my/)
**Lookup:** Maintain Tariff
**Related Topic:** [Maintain Stock Item → Main Header](../../usage/stock/stock-guide#maintain-stock-item) | +| **Tax** | • Select an appropriate tax code that falls under the Person Exempted in Schedule A, B, and C.
**Schedule A tax code:** SE
**Schedule B tax code:** SEB
**Schedule C tax codes:** SEC1, SEC2, SEC3, SEC4, SEC5
**Lookup:** Maintain Tax | + +* Press **SAVE** button once you are done + +After Saving, you should see all your customer's information on this screen. + +![custAfterSave](../../../static/img/usage/customer/customerBasicGuide/cust-after-save.png) + +## Customer Code Format + +* Customer code are generated AUTOMATICALLY after pressing the SAVE button. + +>IMPORTANT : +> +>1. Every customer code is unique. +>2. If the system found there is a duplicate code trying to save, users will be notified with a warning message. +>See screenshot below. +> + +![custDuplicatedCode](../../../static/img/usage/customer/customerBasicGuide/cust-duplicated-code.png) + +* You can set the customer code format via Tools | Options...(Customer). See screenshot below. + +![custCodeFormat](../../../static/img/usage/customer/customerBasicGuide/cust-code-format.png) + +* Explanation of the Customer Code Format: + +![custCodeFormatExplain](../../../static/img/usage/customer/customerBasicGuide/cust-code-format-explain.png) + +* For Example + +| Company Name | Customer Control Acc | Format | Result | +|--------------|-----------------------|---------------|--------------| +| ABCD SDN BHD | 301-000 | %.1s-%.1s%.1d | 3-A-1 | +| ABCD SDN BHD | 301-000 | %.2s-%.2s%.2d | 30-AB-01 | +| ABCD SDN BHD | 301-000 | %.3s-%.3s%.3d | 301-ABC-001 | +| ABCD SDN BHD | 301-000 | %.4s-%.4s%.4d | 301--ABCD-0001 | + +## Advance Credit Control + +> This is a **paid module**. + +* Credit Control is used to manage the customer outstanding within the specific overdue and credit limit given. See screenshot below. + +![custCreditControl](../../../static/img/usage/customer/customerBasicGuide/cust-credit-control.png) + +>IMPORTANT : +> +>1. Depends on the user access rights to the Customer Credit Control. +>2. Override credit limit can be granted in the user access control. +> + +### Credit/Overdue Limit + +* Credit limit is the limit to set based on the total outstanding. +* Overdue limit is the limit to set based on the overdue outstanding only. +* Tick "Add PD Cheque to Credit Limit" to include any post dated payment to increase the credit limit. + +### Exceed Credit/Overdue Limit + +:::note Credit Control +Can be applied to the following document types: + +1. QT - Quotation +2. SO - Sales Order +3. DO - Delivery Order +4. IV - Sales Invoice +5. CS - Cash Sales +6. DN - Debit Note +::: + +* You have to tick "Apply To" in order to set the further action (e.g. unblock, block or override) to control the exceed credit and overdue limit. See screenshot below: + +![credContAction](../../../static/img/usage/customer/customerBasicGuide/cred-cont-action.png) + +| Control Type | Action | ALLOW EXCEED | +|-----------------------|----------|---------------------| +| Exceed Credit Limit | Unblock | YES | +| Exceed Credit Limit | Block | NO | +| Exceed Credit Limit | Override | PASSWORD REQUIRED | +| Exceed Overdue Limit | Unblock | YES | +| Exceed Overdue Limit | Block | NO | +| Exceed Overdue Limit | Override | PASSWORD REQUIRED | + +:::note +>**Unblock** – No restrictions +> +>**Block** – Blocked for all users +> +>**Override** – Certain users which have access rights can key in their username & password to override. +> +>**Suspended** – Blocked with suspended message +> +::: + +### Suspended + +* You have to tick "Apply To" any document type in order to tick the SUSPENDED. +* At the same time, you can enter the suspended message to prompt the user when they try to save the document. See screenshot below: + +![suspend-CreditControl](../../../static/img/usage/customer/customerBasicGuide/suspend-credit-control.png) + +## Customer Invoice + +### Customer Invoice vs Sales Invoice + +The differences between a Customer Invoice and a Sales Invoice are as follows: + +|**Customer Invoice**| **Sales Invoice**| +|---|---| +|• Shows only the accounts code and does not show Qty / Unit Price.| • Linked to the stock and account modules. Hence, we advise users who need to key in stock items to use Sales Invoice. Once the information in the Sales Invoice is updated, the information in the Customer Invoice will automatically be updated by the system.| + +![custInvoiceEntry](../../../static/img/usage/customer/customerBasicGuide/cust-invoice-entry.png) + +### Create a new Customer Invoice + + 1. **Customer** | **Customer Invoice** | **New** + + 2. Select **Customer Code** | insert transaction and amount. + + 3. **Save** + + ![saveCustInvoiceEntry](../../../static/img/usage/customer/customerBasicGuide/save-cust-invoice-entry.png) + +## Customer Payment + +### Local Bank Payment + + :::info + Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=IjHX5ys846I&feature=youtu.be) + ::: + + 1. **Customer** | **Customer Payment** | **New** + + 2. Select your **Customer** + + 3. Select the **bank for your account and cheque no** if applicable + + 4. Key in the **customer payment amount** + + 5. **Tick the corresponding invoice/debit note to be knocked off** + + ![45](../../../static/img/usage/customer/customerBasicGuide/45.png) + +### Post Dated Cheque + + 1. Search for the payment that you want to edit, click on **Edit**, right click on Customer Payment, you will see **Set Posting Date** + + ![46](../../../static/img/usage/customer/customerBasicGuide/46.png) + + ![47](../../../static/img/usage/customer/customerBasicGuide/47.png) + +### Bounced Cheque + + 1. Search for the payment that you want to edit, click on **Edit**, right click on Customer Payment, you will see **Bounced Status** + + ![48](../../../static/img/usage/customer/customerBasicGuide/48.png) + + ![49](../../../static/img/usage/customer/customerBasicGuide/49.png) + + After bounced, system will auto revert the payment out, you can view your ledger. + + ![50](../../../static/img/usage/customer/customerBasicGuide/50.png) + +## Customer Credit Note + +If the situation involves return stock from customer, please do Sales Credit Note and knock off it in Customer Credit Note as below step. + +1. **Customer** | **Customer Credit Note** + +2. **Edit** | Click **Yes** + +3. **Knocked off accordingly**. + + ![51](../../../static/img/usage/customer/customerBasicGuide/51.png) + + If it does not involve with returned stock, e.g. discount given with + + 1. **Customer** | **Customer Credit Note** | **New CN** + + 2. **New** | Select **Customer** | Select **GL Account** | **Amount** + + 3. **Knocked off accordingly**. + + ![52](../../../static/img/usage/customer/customerBasicGuide/52.png) + +## Customer Refund + +You can use this document to refund a customer. You can knock off with Customer Payment or Credit Note which have unapplied amounts. + +1. **Customer** | **Customer Refund**. + +2. Choose the **Customer** | Select your **Payment Method** | **Enter your Refund Amount** + +3. **Knock off the payment or credit note and save**. + + ![54](../../../static/img/usage/customer/customerBasicGuide/54.png) + +## Customer Contra + +If you have a customer who is also a supplier, you may want to offset the outstanding customer and supplier invoices. This is known as a **contra entry**. You can offset the two invoices by using Customer Contra and Supplier Contra. This means that when you record the invoices as being paid, it will not affect your current bank account balance. + +>**Scenario:** +> +>If you have an outstanding sales invoice for RM200 and a purchase invoice for RM150 for the same customer or company, the actual amount owed to you is RM50 and the contra entry amount is RM150. + +### Make sure you have a valid `Contra Account` + +1. **Tools** | **Options** + + ![1](../../../static/img/usage/customer/customerBasicGuide/1.png) + +2. **General Ledger** | Make sure you have selected a valid Contra Account + + ![2](../../../static/img/usage/customer/customerBasicGuide/2.png) + +### Contra Entry + + 1. Go **Customer** | **Customer Contra** + + ![3](../../../static/img/usage/customer/customerBasicGuide/3.png) + + 2. Press on **NEW** + + ![4](../../../static/img/usage/customer/customerBasicGuide/4.png) + + 2a. Select your Customer Code + + 2b. Enter your Contra Amount + + 2c. Knock off your Invoice + + 2d. Press on **SAVE** Button + + ![5](../../../static/img/usage/customer/customerBasicGuide/5.png) + + 3. The system will automatically generate a Contra Number, jot down the number and go to **Supplier | Supplier Contra** to edit it. + + ![6](../../../static/img/usage/customer/customerBasicGuide/6.png) + + 4. Look for the Same Contra Number (refer step 2e), EDIT it. + + ![7](../../../static/img/usage/customer/customerBasicGuide/7.png) + + 4a. Select your **Supplier** + + 4b. Enter Contra Amount (Must be same as Customer Contra Amount) + + 4c. Knock off your Supplier Invoice + + 4d. Press on **SAVE** Button + + ![8](../../../static/img/usage/customer/customerBasicGuide/8.png) + +After you post the contra entry: + +* The outstanding amount on the sales invoice is RM50. + +* The purchase invoice is fully knock off. + +* When you receive the RM50, you can record this against the sales invoice using your normal Customer Payment entry. diff --git a/docs/usage/Tools/RTM/_category_.json b/docs/usage/Tools/RTM/_category_.json new file mode 100644 index 00000000..3f280944 --- /dev/null +++ b/docs/usage/Tools/RTM/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "RTM", + "position": 2, + "link": { + "type": "generated-index", + "description": "RTM report builder" + } +} \ No newline at end of file diff --git a/docs/usage/Tools/RTM/basic-guide.md b/docs/usage/Tools/RTM/basic-guide.md new file mode 100644 index 00000000..8522cc81 --- /dev/null +++ b/docs/usage/Tools/RTM/basic-guide.md @@ -0,0 +1,594 @@ +--- +sidebar_position: 1 +title: RTM Guide +description: How to do custom reports in report builder +slug: /usage/tools/rtm/guide +tags: ["SQL Account", "Usage", "Tools"] +--- + +## Load Report Template + +1. **Tools** > **Report Designer** + + ![1](../../../../static/img/usage/tools/rtm-basic-guide/1.png) + +2. Press on **IMPORT** + + ![2](../../../../static/img/usage/tools/rtm-basic-guide/2.png) + +3. Follow the steps below : + + 1. Change the report type to **SQL Report(rtm)** + + 2. Select your **Report** + + 3. Press **OPEN** + + ![3](../../../../static/img/usage/tools/rtm-basic-guide/3.png) + +## Simple Calculation + +* In Report Builder, you can also do some simple calculation using the Variable (The Calculator Icon) + +![variable-to-double](../../../../static/img/usage/tools/rtm-basic-guide/variable-to-double.jpg) + +1. Click on SubRptNorm: Document_Detail +2. Select the Variable button (the Calculator icon) +3. Click on the place to be print/shown. +4. Click on Calc Tab + + ![insert-code-in-oncalc](../../../../static/img/usage/tools/rtm-basic-guide/insert-code-in-oncalc.jpg) + +5. Right click here & Select Event & find the component just now we had placed (eg Variable2) +6. Click OnCalc +7. Click here & enter the script below: + +
+ Script + + ```pascal + procedure Variable2OnCalc(var value: Variant); + + begin + + Variable2.DisplayFormat := Option.GetFieldValue('StockPriceDisplayFormat'); // Set Display Format + + Value := Document_Detail.GetFieldValue('Amount')/Document_Detail.GetFieldValue('Qty'); + + end; + ``` + +
+ +8. Click File | Save As & enter New report Name after done + +## Get Data Directly from DB + +* Sometime in the report you might wanted some extra information but you not able to select in the report design. So you had to self query to get the extra information. + +### Get Single Field + +* Example 1 - Get Shelf Field from Maintain Item + + - Below is Example are doing following actions using Variable + - At Sales Invoice, get the Shelf field from Maintain Item + +![output-type](../../../../static/img/usage/tools/rtm-basic-guide/output-type.jpg) + +1. Click on SubRptNorm: Document_Detail +2. Select the Variable button (the Calculator icon) +3. Click on the place to be print/shown. +4. Click on Calc Tab + + ![insert-code-in-oncalc-singlefield](../../../../static/img/usage/tools/rtm-basic-guide/insert-code-in-oncalc-singlefield.jpg) + +5. Right click here & Select Event & find the component just now we had placed (eg Variable2) +6. Click OnCalc +7. Click here & enter the script below: + +
+ Script + + ```pascal + procedure Variable2OnCalc(var value: Variant); + + var s: string; + + begin + + s := 'SELECT Shelf FROM ST_ITEM ' + + + 'WHERE CODE=' + QuotedStr(Document_Detail.GetFieldValue('ItemCode')); + + Value := Trim(DBSQL_GetFieldValue(s)); + + end; + ``` + +
+ +8. Click File | Save As & enter New report Name after done + +### Example 2 - Get Picture Field from Maintain Item + +Below is Example are doing following actions using Image + +At Sales Invoice, get the Picture field from Maintain Item + +* Steps + + 1. Click on SubRptNorm: Document_Detail + 2. Select the Image button (the Mountain & sun icon) + 3. Click on the place to be print/shown. + 4. Click on Calc Tab + 5. Right click here & Select Event & find the component just now we had placed (eg Image1) + 6. Click OnPrint + 7. Click here & enter the below script + +
+ Script + + ```pascal + + procedure Image1OnPrint; + + var s: string; + + begin + + s := 'SELECT Picture FROM ST_ITEM ' + + + 'WHERE Code='+ QuotedStr(Document_Detail.GetFieldValue('ItemCode')); + + Image1.Visible := DBSQL_GetPicture(s, Image1.Picture); + + end; + ``` + +
+ + 8. Click File | Save As & enter New report Name after done + +### Example 3 - Get Document Created UserName from Audit + +Below is Example is to Get the who created the Document from Audit Table. + +* Steps + +1. Select the Variable button (the Calculator icon) +2. Click on the place to be print/shown. +3. Click on Calc Tab +4. Right click here & Select Event & find the component just now we had placed (eg Variable2) +5. Click OnCalc +6. Click here & enter the below script: + +
+ Script + + ```pascal + procedure Variable2OnCalc(var value: Variant); + + var s: string; + + begin + + s := 'SELECT UserName FROM AUDIT WHERE UPDATEKIND=''I'' ' + + + 'AND REFERENCE LIKE ' + + + QuotedStr('%'+ + + Main.GetFieldValue('DocNo')+ + + '%Code: '+ //Delete this line for JV & CB + + Main.GetFieldValue('Code')+ //Delete this line for JV & CB + + ',%'); + + Value := Trim(DBSQL_GetFieldValue(s)); + + end; + ``` + +
+ +7. Click File | Save As & enter New report Name after done + +### Example 4 - Get From Doc No. in Sales Invoice + +Below is Example is to Get the From Document Number at Invoice Header. + +* Steps + +1. Select the Variable button (the Calculator icon) +2. Click on the place to be print/shown. +3. Click on Calc Tab +4. Right click here & Select Event & find the component just now we had placed (eg Variable2) +5. Click OnCalc +6. Click here & enter the below script + +
+ Script + + ```pascal + procedure Variable2OnCalc(var value: Variant); + + var s, V : string; + + begin + + s := 'SELECT First 1 FromDocType FROM SL_IVDTL '+ + + 'WHERE Dockey=' + Main.GetFieldValue('Dockey') + + + ' AND FROMDOCTYPE IS NOT NULL'; + + V := Trim(DBSQL_GetFieldValue(s)); + + if Trim(V) \<> '' then begin + + s := 'SELECT DocNo FROM SL_' + v + + + ' WHERE DocKey=(SELECT First 1 FromDockey FROM SL_IVDTL '+ + + 'WHERE Dockey=' + Main.GetFieldValue('Dockey') + + + ' AND FROMDOCTYPE IS NOT NULL)'; + + Value := Trim(DBSQL_GetFieldValue(s)); + + end else + + Value := ''; + + end; + ``` + +
+ +7. Click File | Save As & enter New report Name after done + +## Get Whole Table + +
+ Get Whole Table - click to expand + +### Example 1 - Get Maintain Batch Information + +Below is Example doing following actions + +* Get data information From Stock Batch + +![calc-tab-insert-code](../../../../static/img/usage/tools/rtm-basic-guide/calc-tab-insert-code.jpg) + +1. Click on Calc Tab +2. Right click here & Select Module +3. Select Declarations +4. Select Variables +5. Add new/to existing as below variable + + ```pascal + var + SQL_Batch: String; + ``` + + ![event-oncreate-insert-code](../../../../static/img/usage/tools/rtm-basic-guide/event-oncreate-insert-code.jpg) + +6. Select Events +7. Select OnCreate +8. Copy below script & paste to here + + SQL_Batch := 'SELECT Code, Description, ExpDate, MfgDate, Remark1, Remark2 FROM ST_BATCH'; + + DBSQL_SELECT(plSQL_Batch, SQL_Batch, 'Code'); + + SetDataPipelineFieldLink(Document_Detail, plSQL_Batch, 'Batch', 'Code'); + +9. Click File | Save As... to save the file (eg Sales Invoice 1) +10. Click File | Exit to exit the report design +11. Click Design again in the report designer for the file just save on Steps 9 (eg Sales Invoice 1) + + ![pipeline-and-expdate](../../../../static/img/usage/tools/rtm-basic-guide/pipeline-and-expdate.jpg) + +12. Click SubRptNorm:Document_Detail tab +13. Click DBText icon +14. Click the place you wanted to show/print +15. Select plSQL_Batch pipeline +16. Type ExpDate (eg to get expired Date) +17. Save the report + +### Example 2 - Row Number Query + +Below is Example Create SEQ Field base on SQL + +* Steps + +1. Click on Calc Tab +2. Right click here & Select Module +3. Select Declarations +4. Select Variables +5. Add new/to existing as below variable + + ```pascal + var + **SQL_1: String; + ``` + +6. Select Events +7. Select OnCreate +8. Copy below script & paste to here + +SQL_1 := 'SELECT DOCKEY, DTLKEY, SEQ, ROW_NUMBER() OVER (PARTITION BY DOCKEY ORDER BY SEQ) AS NSEQ '+ + + 'FROM SL_IVDTL ' + + + 'WHERE NOT (DESCRIPTION LIKE ''R-%'' ' + + + 'OR DESCRIPTION LIKE ''T-%'') '+ + + 'AND DOCKEY IN (SELECT DOCKEY FROM SL_IV '+ + + ' WHERE DOCDATE BETWEEN ' + FormatSQLDate(Parameter.GetFieldValue('DateFrom')) + + + ' AND ' + FormatSQLDate(Parameter.GetFieldValue('DateTo')) + + + ') ORDER BY DocKey, NSeq'; + + DBSQL_SELECT(plSQL_1, SQL_1, 'Dockey;NSeq'); + + SetDataPipelineFieldLink(Document_Detail, plSQL_1, 'Dockey;Seq', 'Dockey;Seq'); + + ![program-function-insert-code](../../../../static/img/usage/tools/rtm-basic-guide/program-function-insert-code.jpg) + +9. Select Programs +10. Right Click | New Function +11. Copy Function Script + + ``` pascal + function FormatSQLDate(D: TDateTime): String; + + var AFormat: string; + + begin + + AFormat := 'dd mmm yyyy'; //'dd/mmm/yyyy' if can't + + Result := QuotedStr(FormatDateTime(AFormat, D)); + + //If yr output for TxQuery use below coding + + // AFormat :='dd/mm/yyyy'; + + // Result := '#'+FormatDateTime(AFormat, D)+'#'; + + end; + ``` + +12. Click File | Save As... to save the file (eg Sales Invoice 1) +13. Click File | Exit to exit the report design +14. Click Design again in the report designer for the file just save on Steps 12 (eg Sales Invoice 3 (SubTotal)-New) +15. Click SubRptNorm:Document_Detail tab +16. Click DBText icon +17. Click the place you wanted to show/print +18. Select plSQL_1pipeline +19. Type NSeq +20. Save the report + +:::warning +Preview/Print/Export will delay/slow a bit if compare with build in Preview/Print/Export report +::: + +
+ +## Get Data from Available Pipeline + +Sometime in the report you might wanted some extra information or further analysis from the report itself but you not able to select in the report design. So you had to self query to get the extra information or further analysis. + +### Example 1 - Show GST Summary at Last Page + +Below is Example doing following actions + +* Get data information (Tax, Tax rate, LocalAmount, LocalTaxAmt) +* Group the data by Tax code + +![calctab-module-insert-variable](../../../../static/img/usage/tools/rtm-basic-guide/calctab-module-insert-variable.jpg) + +1. Click on Calc Tab +2. Right click here & Select Module +3. Select Declarations +4. Select Variables +5. Add new/to existing as below variable + + ```pascal + var + SQL_6: String; + ``` + + ![event-oncreate-insert-code-datafrom-available-pipeline](../../../../static/img/usage/tools/rtm-basic-guide/event-oncreate-insert-code-datafrom-available-pipeline.jpg) + +6. Select Events +7. Select OnCreate +8. Copy below script & paste to here + +
+ Script + + ```sql + SQL_6 := 'SELECT DocKey, Tax, TaxRate, Sum(LocalAmount) LocalAmount, Sum(LocalTaxAmt) localTaxAmt, '+ + + 'Description FROM Document_Detail ' + + + 'Where Tax \<> ''''' + + + 'GROUP BY Dockey, Tax, TaxRate'; + ``` + +
+ + ![procedure-before-print-insert-code](../../../../static/img/usage/tools/rtm-basic-guide/procedure-before-print-insert-code.jpg) + +9. Select Event Handlers +10. Select procedure ReportBeforePrint +11. Copy below script & paste to here + +
+ Script + + ```sql + LocalSQL_SELECT(plSQL_6, SQL_6, 'Dockey;Tax'); //Create New pipeline + + SetDataPipelineFieldLink(Main, plSQL_6, 'DocKey', 'DocKey'); //Link with Main + ``` + +
+ +12. Click File | Save As... to save the file (eg 0Sales Cash Sales 3 (GST 1)) +13. Click File | Exit to exit the report design +14. Click Design again in the report designer for the file just save on Steps 12 (eg 0Sales Cash Sales 3 (GST 1)) + + ![subreport-place](../../../../static/img/usage/tools/rtm-basic-guide/subreport-place.jpg) + +15. Click Subreport icon +16. Click the place you wanted to show/print + + ![parentwidth-subreport-rightclick](../../../../static/img/usage/tools/rtm-basic-guide/parentwidth-subreport-rightclick.jpg) + +17. Right click the Sub report +18. Untick the ParentWitdh & manual adjust the sub report width to the width you wanted +19. Select the Pipeline just create (eg plSQL_6) +20. Scroll till end +21. Click SubReport2:plSQL_6 tab + + ![report-settings](../../../../static/img/usage/tools/rtm-basic-guide/report-settings.jpg) + +22. Click Report & set the following setting + + * Title - Select + * Summary - Select + * Header - UnSelect + * Footer - UnSelect + + ![variables-place](../../../../static/img/usage/tools/rtm-basic-guide/variables-place.jpg) + +23. Click DBText icon +24. Click the place you wanted to show/print (in between Title & Detail Band) +25. Select LocalAmount field +26. Repeat Step 23 to 25 for LocalTaxAmt field +27. Click DBCalc icon +28. Click the place you wanted to show/print (in between Detail & Summary Band) +29. Select LocalAmount field (See Step 25) +30. Repeat Step 27 to 29 for LocalTaxAmt field +31. Click Variable icon +32. Click the place you wanted to show/print (in between Title & Detail Band) +33. Right Click the variable + + ![variable-insert-code-right-click](../../../../static/img/usage/tools/rtm-basic-guide/variable-insert-code-right-click.jpg) + +34. Copy below script & paste to here + +
+ Script + + ```sql + if Trim(plsql_6.getfieldvalue('TaxRate')) \<> '' then + + Value := plsql_6.getfieldvalue('Tax') + ' @ ' + plsql_6.getfieldvalue('TaxRate') else + + Value := plsql_6.getfieldvalue('Tax'); + ``` + +
+ +35. Click Ok +36. For label can Click Label icon +37. Save the report after done + +### Example 2 - Show 1st FromDocNo at Header + +Below is Example will get FromDocNo Field from the Detail Data + +1. Click on Calc Tab +2. Right click here & Select Module +3. Select Declarations +4. Select Variables +5. Add new/to existing as below variable + + ```sql + var + SQL_6: String; + ``` + +6. Select Events +7. Select OnCreate +8. Copy below script & paste to here + + ```sql + SQL_6 := 'SELECT Dockey, Min(Seq) Seq, FromDocDate, FromDocNo FROM Document_Detail '+ + 'WHERE FromDocType \<> '''' '; + ``` + +9. Select Event Handlers +10. Select procedure ReportBeforePrint +11. Copy below script & paste to here + + ```sql + LocalSQL_SELECT(plSQL_6, SQL_6, 'Dockey'); //Create New pipeline + SetDataPipelineFieldLink(Main, plSQL_6, 'DocKey', 'DocKey'); //Link with Main + ``` + +12. Click File | Save As... to save the file (eg 0Sales Cash Sales 3 (GST 1)) +13. Click File | Exit to exit the report design +14. Click Design again in the report designer for the file just save on Steps 12 (eg 0Sales Cash Sales 3 (GST 1)) +15. Click DBText icon +16. Click the place you wanted to show/print at the Header +17. Select FromDocNo field +18. For label can Click Label icon +19. Save the report after done + +### Example 3 - Show Total SVE at Footer + +Below Example is to Get total SVE for 6% + +1. Click on Calc Tab +2. Right click here & Select Module +3. Select Declarations +4. Select Variables +5. Add new/to existing as below variable + + ```sql + var + SQL_6: String; + ``` + +6. Select Events +7. Select OnCreate +8. Copy below script & paste to here + + ```sql + SQL_6 := 'SELECT DocKey, SUM(LocalAmount)*0.06 SVE FROM Document_Detail ' + + 'WHERE Tax=''SVE'' ' + + 'GROUP BY DocKey'; + ``` + +9. Select Event Handlers +10. Select procedure ReportBeforePrint +11. Copy below script & paste to here + + ```sql + LocalSQL_SELECT(plSQL_6, SQL_6, 'Dockey'); //Create New pipeline + SetDataPipelineFieldLink(Main, plSQL_6, 'DocKey', 'DocKey'); //Link with Main + ``` + +12. Click File | Save As... to save the file (eg Sales Invoice 1-New) +13. Click File | Exit to exit the report design +14. Click Design again in the report designer for the file just save on Steps 12 (eg Sales Invoice 1-New) +15. Click DBText icon +16. Click the place you wanted to show/print at the Header + + ![pipeline-field-place](../../../../static/img/usage/tools/rtm-basic-guide/pipeline-field-place.jpg) + +17. Select plSQL_6 pipeline +18. Select SVE field +19. For label can Click Label icon +20. Save the report after done diff --git a/docs/usage/Tools/RTM/faq.md b/docs/usage/Tools/RTM/faq.md new file mode 100644 index 00000000..b464f8fb --- /dev/null +++ b/docs/usage/Tools/RTM/faq.md @@ -0,0 +1,685 @@ +--- +sidebar_position: 2 +title: RTM FAQ +description: Frequently Asked Questions in report builder +slug: /usage/tools/rtm/faq +tags: ["SQL Account", "Usage", "Tools"] +--- + +## How to rename the component I use? + +![rename-component](../../../../static/img/usage/tools/rtm-faq/rename-component.jpg) + +1. Click the icon here (eg DBText) +2. Click on the place to be print/shown +3. At the Properties for XXXXXX, look for Identity | UserName & change the Name as you like (Only Alphanumeric & no spacing) + +## Why when Export to PDF format the Company Logo looks "ugly"? + +![image-compression-level-1](../../../../static/img/usage/tools/rtm-faq/image-compression-level-1.jpg) + +1. In the report designer set the setting + + - ImageCompressionLevel to 1 + - Untick ScaleImages + +2. At the Company Logo Right Click + - Tick DirectDraw + - Untick Stretch + +3. Resize your Jpeg Logo to smaller dimension +4. Resize the Company Logo (Report Builder component) to the same dimension of your Jpeg Logo + +## Why when Export to PDF format the the file size so large? + +![compression-level-clmax](../../../../static/img/usage/tools/rtm-faq/compression-level-clmax.jpg) + +1. In the report designer set the setting look for PDFSettings + - CompressionLevel to clMax + +2. In the report designer set the setting look for PDFSettings | EmbedFontOptions + - efUseSubset to True (checked) + +## Special DisplayFormat + +### 1. How if data is PI-12345 but I wanted to be printed as 12345? + +Just Enter as Follow code:- + +
+ Code + +```vb +Procedure DBTxtDocNoOnGetText(var Text: String); + +begin + + Delete(Text, 1, 3); + + Text := Text; + +end; +``` + +
+ +### 2. How if data is PI-12345 but I wanted to be printed as PI12345? + +Just Enter as Follow code:- + +
+ Code + +```pascal + Procedure DBTxtDocNoOnGetText(var Text: String); + + begin + + Delete(Text, 3, 1); + + Text := Text; + + end; +``` + +
+ +### 3. How if data is 17-08-2005 but I wanted to be printed as 17 hb? + +Just Enter as Follow code in the DisplayFormat:- + +**dd 'hb'** * + +### 4. How if data is 1234-001 but I wanted to be printed as 1234 & the value is not fixed (i.e may 12345-001, 1234-001)? + + Just Enter as Follow code:- + +
+ Code + +```pascal +Procedure DBTxtDocNoOnGetText(var Text: String); + +begin + + Text := SubStrOfDelimitedStr(Text, 0, 1, '-'); + +end; +``` + +
+ +### 5. How if data is 1234-001 but I wanted to be printed as 001 & the value is not fixed (i.e may 12345-001, 1234-32)? + + Just Enter as Follow code:- + +
+ Code + +```pascal +Procedure DBTxtDocNoOnGetText(var Text: String); + +begin + + Text := SubStrOfDelimitedStr(Text, 1, 1, '-'); + +end; +``` + +
+ +### 6. How to reverse this #,0.00;-#,0.00 to this -#,0.00;#,0.00? + + Just Enter as Follow code:- + +
+ Code + +```pascal +procedure DetailBeforePrint; + +var d, s : string; + +begin + + s := Option.GetFieldValue('AccountingValueDisplayFormat'); + + d := ValueOfSemiColonStr(s, 1)+';'+ ValueOfSemiColonStr(s, 0); + + DBTxtC4.DisplayFormat := d; + +end; +``` + +
+ +### 7. How to set 0 when empty? + +Below is Example : + +
+ Code + +```pascal +procedure DBTxtTaxOnGetText(var Text:String); + +begin + + if Trim(plSQL_1.GetFieldValue('TaxAmt')) = '' then + + Text := '0.00' ; + +end; +``` + +
+ +### 8. How to Combine Currency Symbol with DocAmt or DBCalc.Value using TppVariable? + +
+ Code + +```pascal +procedure VarSumDROnCalc(var Value : Variant); + +var V : string; + +begin + + V := FormatFloat(Option.GetFieldValue('AccountingValueDisplayFormat'), DBCalcSCR.Value); + + Value := Option.GetFieldValue('LocalCurrencySymbol') + ' ' + V; + +end; +``` + +
+ +## How to Set Current Date Time plus/minus N? + +
+ Code + +```pascal +procedure Variable1OnCalc(var Value : Variant); + +var lDT : Variant; + +begin + + //Example deduct 1.5 hrs + + lDT := CurrentDateTime-0.0625; //(1.5/24) + + Value := FormatDateTime('dd/MM/yyyy hh:mm AM/PM', lDT); + +end; +``` + +
+ +## How to Maintain the QR Code Size with large Data? + +:::note +It might be unable to scan if the size is too small & the data is too large +::: + +![qrcode-autosize](../../../../static/img/usage/tools/rtm-faq/qrcode-autosize.jpg) + +## How to Add QR Code for E-Invoicing? + +:::note +Only Available in Version 852 & above +::: + +![qrcode-settings](../../../../static/img/usage/tools/rtm-faq/qrcode-settings.jpg) + +- The measurement is in Inch +- This guide is designed for Laser Printer only +- For Dot Matrix Printer make sure set to 1 for Height & Width + +## How to Add FromDocNo and FromDocDate Variable in Report Design ? + +1. Go in Report Design | Click on ![1](../../../../static/img/usage/tools/rtm-faq/1.png) then place at the grid – refer below Pic + + ![2](../../../../static/img/usage/tools/rtm-faq/2.png) + + 1. Right Click on Variable2 | Select Calculation | + + ![3](../../../../static/img/usage/tools/rtm-faq/3.png) + + After Done press OK + +2. If the date is not appearing in report preview + + ![4](../../../../static/img/usage/tools/rtm-faq/4.png) + + 1. Click on **Calc Tab** + + 2. **Menu bar** | click **View** | Select **Events** + + 3. Look for ***Variable*** + + 4. Click on **OnPrint** + + 5. Click on **Document_Detail** + + 6. Click on **FromDocNo** + + 7. Drag from **FromDocNo** to the query box. + +## How to Create SUM Variable for TAX Column ? + +![1](../../../../static/img/usage/tools/rtm-faq/11.png) + +1. Click on the variable icon + +2. Click on where you want to create a new variable, right click on the variable created > go calculations , Insert the query in the next section accordingly + +3. Click on the variable created, and make sure choose it to `DOUBLE`. + +**Query:** + +1. **Formula for Sub Total** + + ```pascal + Variable1.DisplayFormat := Option.GetFieldValue('AccountingValueDisplayFormat'); + + Value := GetAggregateValue(agSUM, Document_Detail, 'DocKey', 'Amount'); + ``` + +2. **Formula for Total Exclude GST (RM)** + + ```pascal + Variable2.DisplayFormat := Option.GetFieldValue('AccountingValueDisplayFormat'); + + Value := GetAggregateValue(agSUM, Document_Detail, 'DocKey', 'LocalAmount'); + ``` + +3. **Formula for Total of Tax Amt (RM)** + + ```pascal + Variable5.DisplayFormat := Option.GetFieldValue('AccountingValueDisplayFormat'); + + Value := GetAggregateValue(agSUM, Document_Detail, 'DocKey', 'LocalTaxAmt'); + ``` + +4. **Formula for Total Include GST (RM)** + + ```pascal + Variable6.DisplayFormat := Option.GetFieldValue('AccountingValueDisplayFormat'); + + Value := GetAggregateValue(agSUM, Document_Detail, 'DocKey', 'LocalAmountWithTax'); + ``` + +## How to Disable Query for Deleted Field ? + +1. If you had deleted any field in report designer with Query, then u will get the below message, click **OK** + + ![1](../../../../static/img/usage/tools/rtm-faq/111.png) + +2. Click on the blue colour report name to enter in report designer page + + ![2](../../../../static/img/usage/tools/rtm-faq/22.png) + +3. Click on the field, the field name will be shown at the left bottom of the application as shown below. If you had deleted the field, refer to step 4. + + ![3](../../../../static/img/usage/tools/rtm-faq/33.png) + +4. Click on **CALC**, go View > Modules + + ![4](../../../../static/img/usage/tools/rtm-faq/44.png) + +5. Follow the steps below: + + 1. Click on **Event Handlers** + + 2. Go to **procedure DetailBeforePrint** + + 3. An error will be shown at the bottom, double click on it, and the system will redirect to the row with the error + + ![5](../../../../static/img/usage/tools/rtm-faq/5.png) + +6. Enter '//' as in the image below : + + ![6](../../../../static/img/usage/tools/rtm-faq/6.png) + +7. Right click and compile , make sure no error > save > close the preview screen and try preview again. + +## Display Exemption Number & Expiry Date in Invoice Template + +### Part A : Custom | Maintain Customer + +![1](../../../../static/img/usage/tools/rtm-faq/1111.png) + +### Part B : Report Format add customer exemption Number + +1. Go to Sales | Sales Invoice | Select any of your invoice | Preview | choose your invoice format template | click on the bottom blue color report name to go into report designer page + + ![2](../../../../static/img/usage/tools/rtm-faq/2222.png) + +2. Insert **Exemption Number** label + + 1. click on the A label icon + 2. click on the area that you want to locate the field + 3. rename the label + + ![3](../../../../static/img/usage/tools/rtm-faq/3333.png) + +3. Insert **Tax Exemption Number** DBText + + 1. click on the DBText field + 2. click on the are that you want to located the field + 3. select Document Company & TaxExemptNo + + ![4](../../../../static/img/usage/tools/rtm-faq/4444.png) + +4. Insert **Expiry Date** label + + 1. click on the A label icon + 2. click on the area that you want to locate the field + 3. rename the label + + ![5](../../../../static/img/usage/tools/rtm-faq/5555.png) + +5. Insert **Tax Expiry Date** DBText + + 1. click on the DBText field + 2. click on the are that you want to located the field + 3. select Document Company & TaxExpDate + + ![6](../../../../static/img/usage/tools/rtm-faq/6666.png) + +### Part C: Save as a new report name & preview the new format + +1. Once you complete, go file | save as | enter a new report name | Save + + ![7](../../../../static/img/usage/tools/rtm-faq/7777.png) + +2. Preview your new report + + ![8](../../../../static/img/usage/tools/rtm-faq/8888.png) + +3. The exemption number & expiry date added + + ![9](../../../../static/img/usage/tools/rtm-faq/9999.png) + +## How to Drag XML Report into SQL ? + +:::info[note] +If this XML Report is for Customer Aging, go to Customer Aging to drag the XML Report + +If this XML report is Supplier Aging Report, go to Supplier Aging to drag the XML Report +::: + +1. Open the XML Report & also Customer Aging, drag the XML Report into the Report Name field + + ![1](../../../../static/img/usage/tools/rtm-faq/12.png) + +2. Double Click on the new report template in blue color. + + ![2](../../../../static/img/usage/tools/rtm-faq/21.png) + +3. Click on the arrow down key to choose the right template + + - Eg : If the report Name is Cust-Local-**L0**-06 Month + + - L0 = no special grouping, the template you have to choose eg Cust 06 Month Aging + - L1 = Grouping by 1 level, the template you have to choose eg Cust 06 Month Aging – Level 1 + - L2 =Grouping by 2 level, the template you have to choose eg Cust 06 Month Aging – Level 2 + + - Eg : If the report Name is Cust-Local-L0-**06** Month + + - 04 = 04 Month + - 06 = 06 Month + - 12 = 12 Month + +## How to Make Official Receipt Format Set Knock Off Grid to Show Full Width ? + +1. Go to **subreport1 : Document_KnockOff** + + ![1](../../../../static/img/usage/tools/rtm-faq/11111.png) + +2. Go to **Report**, click on **Title** + + ![2](../../../../static/img/usage/tools/rtm-faq/22222.png) + +3. Move all field in Column Header to **Title** + + ![3](../../../../static/img/usage/tools/rtm-faq/33333.png) + +4. Go to **File** > **Page Setup...** + + ![4](../../../../static/img/usage/tools/rtm-faq/44444.png) + +5. Go to **Layout**, change the **column** to ***1*** + + ![5](../../../../static/img/usage/tools/rtm-faq/55555.png) + +6. Now, it expands to full page, you can adjust all your column as your wish. + + ![6](../../../../static/img/usage/tools/rtm-faq/66666.png) + +7. Once you done adjust, go file > save as, key a new report name. + +8. Close the preview, and preview your new report name. + +## How to do Rounding of Figure in Report ? + +**Sample Invoice with Rounding RM0.02 :** + +![1](../../../../static/img/usage/tools/rtm-faq/1a.png) + +1. Using Tax Invoice format 06-Tax-Invoice + ![2](../../../../static/img/usage/tools/rtm-faq/2a.png) + + :::info[note] + Click on blue color link - **06-Tax-Invoice** + ::: + +2. Click on **Calc** Tab + + ![3](../../../../static/img/usage/tools/rtm-faq/3a.png) + +3. Right Click select **Module** + + ![4](../../../../static/img/usage/tools/rtm-faq/4a.png) + +4. Click on **Declarations** + + ![5](../../../../static/img/usage/tools/rtm-faq/5a.png) + +5. Declare **SQL_Rounding** under **Variable** + + ![6](../../../../static/img/usage/tools/rtm-faq/6a.png) + +6. Click on Events | On Create | Procedure GlobalOnCreate insert syntax as below : + + ```pascal + SQL_Rounding := 'SELECT DocKey, Sum(Amount) Amount, Description '+ + 'FROM Document_Detail ' + + 'WHERE ItemCode=''RTN5Cents'' '+ + 'GROUP BY DocKey'; + ``` + + **Refer Picture below :** + + ![7](../../../../static/img/usage/tools/rtm-faq/7a.png) + + :::info[Optional] + Add additional syntax in plSQL_4 – Refer below, only if Total Amount beforeGST you want to exclude rounding amount. + + ![8](../../../../static/img/usage/tools/rtm-faq/8a.png) + + ```pascal + SQL_4 := 'SELECT DocKey, Sum(Amount) Amount, Description '+ + 'FROM Document_Detail ' + + 'WHERE ItemCode <> ''DISC'' '+ + 'or Itemcode is null ' + + 'and ItemCode <> ''RTN5Cents'' ' + + 'GROUP BY DocKey'; + ``` + + ::: + +7. Click on Event Handlers | Click on procedure Report BeforePrint, insert syntax as below : + + ```pascal + LocalSQL_SELECT(plSQL_Rounding, SQL_Rounding, 'DocKey'); + SetDataPipelineFieldLink(Main, plSQL_Rounding, 'DocKey', 'DocKey'); + ``` + + ![9](../../../../static/img/usage/tools/rtm-faq/9a.png) + +8. File | Save | Exit from report design and go in to Report Design again. + +9. Insert DBText | and place at the place you want. + + ![10](../../../../static/img/usage/tools/rtm-faq/10a.png) + + 1. Click on DBText + + 2. Place at the Group Footer area + + 3. Select plSQL_Rounding + + 4. Manually type in Amount + + Here is the output : + + ![11](../../../../static/img/usage/tools/rtm-faq/11a.png) + + After adjust the position : + + ![12](../../../../static/img/usage/tools/rtm-faq/12a.png) + + **Item Detail hide Item Code RTN5Cents to be appearing, refer step as below :** + +10. Click on Document_Detail Tab as below | Click on Calc | Event Handlers | Procedure RdiscOnPrint + + ![13](../../../../static/img/usage/tools/rtm-faq/13a.png) + + - Syntax: + + ```pascal + RDisc.Visible := (Document_Detail.getfieldvalue('Itemcode') <> 'DISC') + and (Document_Detail.getfieldvalue('Itemcode') <> 'RTN5Cents'); + ``` + + - Output : + + ![14](../../../../static/img/usage/tools/rtm-faq/14a.png) + + **How to do if the report never create the region before?** + +11. Right click tick all the Toolbars + + ![15](../../../../static/img/usage/tools/rtm-faq/15a.png) + +12. Click on Region component + + ![16](../../../../static/img/usage/tools/rtm-faq/16a.png) + +13. Place at the design grid | Click at the region | Select no Fill + + ![17](../../../../static/img/usage/tools/rtm-faq/17a.png) + +14. Select No Line + + ![18](../../../../static/img/usage/tools/rtm-faq/18a.png) + +15. Place all the DBtext/DBRichText inside the Region. + + ![19](../../../../static/img/usage/tools/rtm-faq/19a.png) + +16. Click on Region to check the object name : + + ![20](../../../../static/img/usage/tools/rtm-faq/20a.png) + +17. Click on Calc tab | Right Click select Events + + ![21](../../../../static/img/usage/tools/rtm-faq/21a.png) + +18. Look for RDisc | Select OnOnPrint | Place the syntax inside bottom box + + ![22](../../../../static/img/usage/tools/rtm-faq/22a.png) + + Syntax : + + ```pascal + RDisc.Visible := (Document_Detail.getfieldvalue('Itemcode') <> 'DISC') + and (Document_Detail.getfieldvalue('Itemcode') <> 'RTN5Cents'); + ``` + + :::info[note] + **RDisc** is your object name, if you object name is **Region1**, then have to change as below : + + ```pascal + Region1.Visible := (Document_Detail.getfieldvalue('Itemcode') <> 'DISC') + and (Document_Detail.getfieldvalue('Itemcode') <> 'RTN5Cents'); + ``` + + ::: + +## How to Update GST from 6% to 0% (show zero instead of blank) ? + +SQL Account system build in report format will automatic detect your Tax Rate based on your invoice issued. + +- if invoice issued on May it will show GST @ 6%, while invoice issued on June will display GST @ 0%. +- D/O issued on May, transferred to Invoice and invoice date is in June, then system will automatic detect it and set the GST rate correctly. +- However, if your format is customized previously, you can refer this guideline on how to change the script from GST @ 6% to GST 0% . + +1. Click on your report name to enter into report designer page. + + ![1](../../../../static/img/usage/tools/rtm-faq/1b.png) + +2. Follow the steps below: + + 1. Go to **Calc**, click on **View** > select **Module** + + ![2](../../../../static/img/usage/tools/rtm-faq/2b.png) + + 2. Go **Event Handlers** + + 3. Go **Procedure lbTaxAmtOnGetText(var Text:String);** + + 4. Replace to this script: + + ```pascal + var s : string; + begin + if (plSQL_0.GetFieldValue('TaxDate') < '01 Jun >2018') or + VarToCurr(plSQL_1.GetFieldValue('TaxAmt')) <> 0) then + + s := 'GST Amt @ 6% ' else + s := 'GST Amt @ 0% '; + if plSQL_2.GetFieldValue('Code') <> '----' >then + Text := s + '(RM) :' else + Text := s + ':'; + end; + ``` + + ![3](../../../../static/img/usage/tools/rtm-faq/3b.png) + +To Display Tax as 0.00 Instead of Blank: + + 1. Click on your report name to enter into report designer page. + + ![4](../../../../static/img/usage/tools/rtm-faq/4b.png) + + 2. Go to **Calc**, click on **View** and select **Events** + + ![5](../../../../static/img/usage/tools/rtm-faq/5b.png) + + 3. Find **DBTxtTax**and select **OnGetText**, then paste the script as below: + + ```pascal + begin + if Trim(plSQL_1.GetFieldValue('TaxAmt')) = '' then + Text := '0.00' ; + end; + ``` + + ![6](../../../../static/img/usage/tools/rtm-faq/6b.png) + + Once you completed, save the report and exit, then you may preview again your format outcome. diff --git a/docs/usage/Tools/_category_.json b/docs/usage/Tools/_category_.json new file mode 100644 index 00000000..b791039d --- /dev/null +++ b/docs/usage/Tools/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Tools", + "position": 13, + "link": { + "type": "generated-index", + "description": "SQL Account Tools" + } +} \ No newline at end of file diff --git a/docs/usage/Tools/basic-guide.md b/docs/usage/Tools/basic-guide.md new file mode 100644 index 00000000..d7e77fd2 --- /dev/null +++ b/docs/usage/Tools/basic-guide.md @@ -0,0 +1,2443 @@ +--- +sidebar_position: 1 +title: Tools Guide +description: Components and Functions in Tools +slug: /usage/tools/guide +tags: ["SQL Account", "Usage", "Tools"] +--- + +## Maintain User + +### Create New User + +1. Select **Tools** > **Maintain User** > **New** + +2. Enter the **Code and Name** (both can be the same e.g. Code = ALI, Name = ALI) + +3. Click on **More** Options and look for **Change Password** + + ![110](../../../static/img/usage/tools/tools-basic-guide/110.png) + +4. Click Save. Your new user account is now created. + +:::info info + SQL User license is per concurrent basis (i.e. how many users can login to the system at the same time). This mean that if you have 5 staffs in the office who can access SQL but you only 3 license for 3 concurrent users, you can still maintain all 5 users in the system but only 3 users can login and access at the same time. +::: + +### User Access Right + +:::info Video Guide +Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=t_TJKdOihfw&feature=youtu.be) +::: + +Not every user is going to have the same access rights as ADMIN, and ADMIN user might want to set security control settings in system. + +1. Select **Tools** > **Maintain User** > **Edit for the user that you want to set the access right for**. + +2. Click on **More** Options and look for **Access Right**. + +3. You need to check the transactions / functions (row), compare with the user (column) and **tick = Allowed** or **untick = Disallowed**, the action for a particular user for particular transactions. For example, base on the settings in the following images, the user is not allowed to delete Customers or to view Customer Payments. + + ![112](../../../static/img/usage/tools/tools-basic-guide/111.png) + +### Bar Navigator + +*Tools | Maintain User... | More | Bar Navigator* + +This function is to allow user to **customize** the buttons at the Main Application by user. + +![bar-navigator](../../../static/img/usage/tools/tools-basic-guide/bar-navigator.jpg) + +| **Field Name** | **Properties** | +|------------------|-----------------------------------------------------| +| **Description** | Definition: Navigator Full Description; Field Type: Alphanumerical; Length: 160 | +| **Reset Button** | To restore to Default Layout | + +1. Right Click here + + ![customise](../../../static/img/usage/tools/tools-basic-guide/customise.jpg) + +2. Select Customize... + + ![customise-toolbars](../../../static/img/usage/tools/tools-basic-guide/customise-toolbars.jpg) + + | **Field Name** | **Properties** | + |------------------|---------------------------------------| + | **Toolbars** | Show list of available Toolbars | + | **New... button**| Create New Toolbar | + | **Rename...button** | Rename the highlighted Toolbar | + | **Delete** | Delete highlighted Toolbar | + +3. Select Commands tab + + ![customise-commands](../../../static/img/usage/tools/tools-basic-guide/customise-commands.jpg) + + | **Field Name** | **Properties** | + |----------------|--------------------------------------------------| + | **Categories** | List of Available Buttons Category | + | **Commands** | List of Available Buttons on the Selected Category | + + ![customise-commands-barnavigator](../../../static/img/usage/tools/tools-basic-guide/customise-commands-barnavigator.jpg) + +4. Select Categories (eg Sales) +5. Select Commands (eg Invoice...) +6. Drag from Step 5 to here +7. Click Close +8. Click Save +9. Click Browse +10. Click More | Navigator vs User + + ![navigator-vs-user](../../../static/img/usage/tools/tools-basic-guide/navigator-vs-user.jpg) + + | **Options** | **Properties** | + |-------------|-----------------------------------------------| + | – | No setting is set | + | **Default** | Set the setting | + | **Deny** | Not allowed to use (Not used in this function) | + +11. Set the User to use the Toolbar. +12. Click Save (Blue Disc Icon button) + +## Maintain Document Number + +You can maintain document number format and next number. + +:::info +Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=hFR6TfqxnRU&feature=youtu.be) +::: + +1. **Tools** > **Maintain Document Number**. + +2. Insert **description** for the particular set of document and select a **document type** (e.g. Payment Voucher) + +3. The system’s defaults is the **Format** %.5d, where “%” is the formula which allows the function to auto-run for the document number while 5d stands for 5 digits. + + ![112a](../../../static/img/usage/tools/tools-basic-guide/111a.png) + +4. You can select the **Frequency** option as Never Reset or others. + +5. Set the **Next Number** for this document. + + ![113](../../../static/img/usage/tools/tools-basic-guide/112.png) + +## Maintain Acceptable Transaction Date + +:::info +SQL do not need to perform year end, it will cut off automatically. Once account closed, if you wish to block the period to avoid your users changed the account figure, you may apply this setting. +::: + +Maintain Acceptable Transaction Date allows you to control which documents you are allowed to maintain (New, Edit) based on their dates. + +- Any document which date falls **within** the allowed transaction dates **can** be edited. + +- Any document which date falls **outside** the allowed transaction dated **cannot** be edited/created. + +### New Acceptable Transaction Date + +1. **Tools** > **Maintain Acceptable Transaction Date** + + ![1](../../../static/img/usage/tools/tools-basic-guide/1.png) + +2. Click on **Append** (Icon with + symbol) + + ![2](../../../static/img/usage/tools/tools-basic-guide/2.png) + +3. Choose the period which you want to **allow transactions** + +4. **Save**. + + ![3](../../../static/img/usage/tools/tools-basic-guide/3.png) + +5. Result: + + It will show the message if users try to save a document that are not in acceptable transaction period + + ![4](../../../static/img/usage/tools/tools-basic-guide/4.png) + + If the user click "**Yes**" a dialogue box will request override permission by ID/PW with rights to override it. + + :::info + The default setting grants users override permission. Refer to the following section for instructions on revoking this privilege from a specific user. + ::: + +### Override Acceptable Transaction Date + + To override i.e. save a document that falls outside the acceptable transaction dates, you will need to be logged-in as a user with the right to override acceptable transactions dates. + + 1. **Tool** > **Maintain User**. Double click on the user that you want to **edit**. + + ![5](../../../static/img/usage/tools/tools-basic-guide/5.png) + + 2. Click on **More** > **Access Control** + + ![6](../../../static/img/usage/tools/tools-basic-guide/6.png) + + 3. Under **Group Tools**, tick or untick the option of **Override Acceptable Transaction Date** to allow or deny the user from having the overriding right to save a document out of the acceptable transaction period. + + 4. **Save** the access right. + + ![115](../../../static/img/usage/tools/tools-basic-guide/114.png) + + 5. Result: + + If the user Is not permitted to override, the system will prompt the following dialog and you can choose either + + - **OK = cancel saving** + - **Override = Enter user the ID and password of a user who can override then save the transaction.** + + ![115b](../../../static/img/usage/tools/tools-basic-guide/115.png) + + ![116](../../../static/img/usage/tools/tools-basic-guide/116.png) + +### SQL Global Price Change + +SQL Global Price Change will help you **mark down price** for all items with few clicks + +:::info +This is a **paid module**. Contact your SQL Service to get this standalone application. +::: + +![3](../../../static/img/usage/tools/tools-basic-guide/3b.png) + +### Setup + +1. Select your group of item + + 1. You can select on certain stock group/ category, if you want all items, then leave stock group and category blank + 2. You can also choose only active item + 3. Once your group of item selected, click on Get Stock Items List + + ![4](../../../static/img/usage/tools/tools-basic-guide/4b.png) + +2. Setting on value to be adjust + + :::info note + Scenario: You are trying to reduce price due to removal of GST (6% > 0%) + ::: + + ![5](../../../static/img/usage/tools/tools-basic-guide/5b.png) + + - Rounding Method (Assuming Round Decimal is 2) + 1. Normal : Example : 0.1234 => 0.12 + 2. Round Up : Example : 0.1234 => 0.13 + 3. Round Down : Example : 0.1274 => 0.12 + + - Input Value = Sample Value + - Output Result = Sample Result + - Round decimal = No. of Decimal Point + + It may looks like a **6%** reduction but it is actually **5.66%** + + Example: + + Item price = RM 100 + + With 6% GST = RM 100 * 1.06 = RM 100 + 6% = RM 106 + Removal of 6% GST = RM 106 / 1.06 = RM 106 - 5.66% = RM 106 + + - Mark down = 5.66 % + - Why 5.66% instead of 6% ? + - 30 May 2018 selling price = RM 106 GST Inclusive + - 01 June 2018 selling Price RM 106 – 5.66% = RM 100 + - **NOT RM 106 – 6% = RM 99.64** + +3. Select fields to be update + + ![6](../../../static/img/usage/tools/tools-basic-guide/6b.png) + + - Tick on which option you want to adjust / update eg : Reference Price + - You can also tick Record change history then system will update this changes history in your note + - Once you complete the setting, click on Change + + 4. Check & Post + +![7](../../../static/img/usage/tools/tools-basic-guide/7b.png) + +![8](../../../static/img/usage/tools/tools-basic-guide/8b.png) + +## Maintain Form Mode + +Form Mode helps filter data based on defined criteria. It is used to restrict users to view only specific sets of data for a certain document. For example, agent **Lip Fong can view and access the sales invoices belonging to his agent code** LF ONLY. + +### New Form Mode + +:::info +Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=bqSDZlAhM5I&feature=youtu.be) +::: + +1. **Tools** > **Maintain Form Mode** > **New**. + +2. **Enter Code & Select the document** form that you want to filter, e.g. Invoice + + ![117](../../../static/img/usage/tools/tools-basic-guide/117.png) + +3. Click on the **Customize Filter** and then click on the **press the button to add a new condition**. + + ![118](../../../static/img/usage/tools/tools-basic-guide/118.png) + +4. Change the **“SL_IV.DOCKEY” to “SL_IV.Agent”** because right now I need to filter based on sales invoice agent field, then change **the “= equals” to “like”** after that **enter the agent code** that you want to filter and click on **OK**. + + ![119](../../../static/img/usage/tools/tools-basic-guide/119.png) + +5. Make sure the info is updated correctly then you can **Save**. + + ![120](../../../static/img/usage/tools/tools-basic-guide/120.png) + +6. Other optional setting: + + ![121](../../../static/img/usage/tools/tools-basic-guide/121.png) + + ![122](../../../static/img/usage/tools/tools-basic-guide/122.png) + +7. If you have set **more than 1 form mode**, once you click **Sales** > **Invoice** > you will get the prompt browse mode to choose which form mode that you want to apply. + + ![123](../../../static/img/usage/tools/tools-basic-guide/123.png) + +### Form Mode VS User + + How do I apply the format mode on a specific user? + + 1. **Tools** > **User Access Right Assignment…** + + 2. Under the list of security, click on **form mode** + + 3. Select the user, eg: user code: LF (Lip Fong) + + 4. Tick to apply the **form mode**, e.g. tick **form mode: IV-LF** and click Save + + ![124](../../../static/img/usage/tools/tools-basic-guide/124.png) + +## Maintain Terms + +Maintain Terms allows the user to maintain their Customer and Supplier terms. In SQL there are 3 types of different terms for you to assign. + +1. **Tools** > **Maintain Terms** > **New** + +2. **Insert Code, Description and allocated Term Type.** + ![125](../../../static/img/usage/tools/tools-basic-guide/125.png) + + - **Due in number of days** – Means how many days until document is due, e.g. if you set 30 days then the document will be due on the 30th day from the document date. + + ![126](../../../static/img/usage/tools/tools-basic-guide/126.png) + + - **Due on specific day of the month** – Means how many months and which day the document is due, e.g. if you set it as 1 Month 6 Days the document will be due on the 6th of the next month. + + ![127](../../../static/img/usage/tools/tools-basic-guide/127.png) + + - **Due in the month end** – Means how many months until the document is due at the end of the final month, e.g. if you set it as 2 months, the document will be due at the end of 2nd month. + +## Maintain Currency + +### New Foreign Currency + +:::info +Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=qfhtlAjW4As&feature=youtu.be) +::: + +You can bill overseas customers & suppliers in foreign currencies e.g. USD, SGD, Euro & etc. **(Prof Package Inclusive)** + +1. **Tools** > **Maintain Currency** > **New** + + ![128](../../../static/img/usage/tools/tools-basic-guide/128.png) + +2. **Maintain Customer / Supplier to assign the currency** + + ![129](../../../static/img/usage/tools/tools-basic-guide/129.png) + +3. Sales document, select the customer, sample as below: + + 1. Currency Rate will follow your setting from Tools > Maintain Currency, but it is still changeable in this invoice. + + 2. Unit Price entered is in based on Customer’s currency eg this customer is in USD. + + 3. system will auto converted into default currency RM on right bottom Local Net Total column. + + ![130](../../../static/img/usage/tools/tools-basic-guide/130.png) + +### Payment from Foreign Customer + +#### Scenario 1 + +:::note +Customer Invoice **invoice billing in USD**, but **payment paid in your local RM bank** +::: + + 1. **Customer** > **Customer Payment** > **New** + + 2. Select your Customer + + 3. Choose your RM Bank + + 4. Enter your RM Amount + + 5. Knock off the invoice and the rate will be update automatically by system. Foreign gain loss will be auto calculated and post to account accordingly. (you can call out Rate & Gain Loss column from the hidden field). + + ![131](../../../static/img/usage/tools/tools-basic-guide/131.png) + +#### Scenario 2 + +:::info note +Customer Invoice **billing in USD, Payment paid in your Foreign USD Bank** + +*([Advance Currency](../../usage/tools/faq#advanced-currency-module) modules required)* +::: + + 1. Go to Tools > Maintain Payment > edit your USD Bank + + 2. **Currency**: You can assign the currency for the particular payment method, so that the payment method will be in foreign currency payment. + + 3. **Bank Charge Acc**: You can pre-set bank charges account to the payment method accordingly. + + 4. **OR & PV Number Set**: Set default running document number for the particular payment method (optional) + + 5. **Bank Info**: able to set Giro info & make payment thru Giro (refer [Interbank Giro](docs/additional-module/interbank-giro.md) Topic for more detail) + + ![132](../../../static/img/usage/tools/tools-basic-guide/132.png) + + Select your payment received in your **Foreign USD Bank**, enter your **paid Amount in USD, Enter your USD Rate** & Knock off the invoice, foreign gain loss will be auto calculated by system. + + ![133](../../../static/img/usage/tools/tools-basic-guide/133.png) + +#### Scenario 3 + +:::info note +Customer Invoice **billing in USD**, but **payment in others currency** eg SGD / RMB / EURO +::: + + 1. Select your Bank eg you received in SGD Bank, enter your SGD Amount & SGD Rate. + + 2. Knock off your USD Invoice. + + 3. USD rate will be auto calculated & foreign gain loss will auto calculated and posting to account accordingly + + ![134](../../../static/img/usage/tools/tools-basic-guide/134.png) + +## Maintain Project (Required Project Module) + +:::info note +This is an extra module , which means have to buy , may contact customer support to purchase. +::: + +This module allows the user to maintain the project accounting on a branch or departmental basis, the user can use this module for simple construction business as they get to view Profit and Loss / Balance Sheet by Project. + +1. Click on **Tools** > **Maintain Project**. + + ![135](../../../static/img/usage/tools/tools-basic-guide/135.png) + +2. Insert **Project Code & Description**. Project Value and Project Cost is not compulsory fields to fill in, if you have filled in then it is for remark purpose. + + ![136](../../../static/img/usage/tools/tools-basic-guide/136.png) + +3. Click on **Tools** > **Options**. + + ![137](../../../static/img/usage/tools/tools-basic-guide/137.png) + +4. Then look for **Miscellaneous** > Make sure the option **“Show Document Project”** is ticked. + + ![138](../../../static/img/usage/tools/tools-basic-guide/138.png) + +5. During **sales and purchase** transactions, make sure you can **the project column**, then **update** accordingly. + + ![139](../../../static/img/usage/tools/tools-basic-guide/139.png) + + When keying-in a transaction, some users will ask why is there a project at item detail and another beside the Customer. Duplicate tab? + + **What is the difference between More > Project >(Document Project) and Item Detail > Project (Item Project )?** + + ![140](../../../static/img/usage/tools/tools-basic-guide/140.png) + + ![141](../../../static/img/usage/tools/tools-basic-guide/141.png) + + ![142](../../../static/img/usage/tools/tools-basic-guide/142.png) + + **The project feature is also available for GL > Cash Book Entry.** + + After updating the document with project, how to view report with project and compare by project? For example: **GL > Print Profit & Loss Statement**. + +6. Filter by the date that you want to view for the P&L report, then if you want to perform a project-to-project comparison then choose **“Comparison – Project (6 columns)”** + + ![143](../../../static/img/usage/tools/tools-basic-guide/143.png) + + :::info note + + 6 Columns = up to 6 projects + + 10 Columns = up to 10 projects + + 19 Columns = up to 19 projects. + + ::: + +7. Criteria + + 1. After selecting the report that you need, make sure to tick the **“Show Column Options”**, then the top of the report will show column options. + + 2. You may change the period that you want to view, e.g. by default it will be **“Current Month”**. + + If you want to view the whole year figures, then you have to **change to “Current Year”**. + + ![144](../../../static/img/usage/tools/tools-basic-guide/144.png) + +8. After changing the column options, you have to **tick the “Print Project Comparison”**, then the project tab will appear on the **right hand site**, you can select which project that you want to view then click on **Add**. + + ![145](../../../static/img/usage/tools/tools-basic-guide/145.png) + +9. Click on **Apply** and you will see the result. The P&L report will compare each project that you select. + + ![146](../../../static/img/usage/tools/tools-basic-guide/146.png) + +### 5 Cents Rounding + +We can pre-set the system to automatically round your invoice or cash sales amounts to the nearest 5 cents. + +:::info + +Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=VSnX55l_3xw&feature=youtu.be) + +::: + +1. **Tools** > **Options** > **Customer** + +2. **Tick 5 Cents Rounding** for Sales Invoice/ Cash Sales + + ![147](../../../static/img/usage/tools/tools-basic-guide/147.png) + + ![148](../../../static/img/usage/tools/tools-basic-guide/148.png) + +### Online Mobile Approval + +### How it works? + +For example : If we set Credit Limit over RM30,000 will required override + +1. A Dialog box will be prompted after *Save Invoice*, ***‘Do You want to override?’*** > Click ***Yes*** + + ![8](../../../static/img/usage/tools/tools-basic-guide/8.png) + +2. Click on ***Online Approval*** + + ![9](../../../static/img/usage/tools/tools-basic-guide/9.png) + + 1. Tick the ID that you choose to get approval + + 2. You can choose to send by **Whatsapp**, **Send by Email** or **Send by Whatsapp & Email** + + ![10](../../../static/img/usage/tools/tools-basic-guide/10.png) + +3. You will receive a message at **Whatsapp** message or **email sent by system** + + - **Senario 1 : Send By Whatsapp** + + You will receive a message > Click the link + + ![11](../../../static/img/usage/tools/tools-basic-guide/11.png) + + - **Senario 2 : Send By Email** + + You will receive an email > Click **'CLICK HERE FOR MORE ACTIONS'** + + ![12](../../../static/img/usage/tools/tools-basic-guide/12.png) + +4. Login **Gmail Address** that you set in maintain user **Open ID (Google)** + + :::info[note] + + - This step is for those send by **whatsapp** and **not use Gmail** to receive notification + - Those use **Gmail Address** to receive notification and approve can jump to **Step 6** + + ::: + + ![13](../../../static/img/usage/tools/tools-basic-guide/13.png) + +5. Enter your Gmail Password + + ![14](../../../static/img/usage/tools/tools-basic-guide/14.png) + +6. After Login Gmail you will see this window + + ![15](../../../static/img/usage/tools/tools-basic-guide/15.png) + +7. You can click on **Doc Detail** and **ScreenShot** to see the detail + + 1. **Doc Detail** : To show Customer Code, the reason why need override + + 2. **ScreenShot** : To see the transaction screen + + 3. **Reply** : You can left a message and click Approve or Reject + + ![16](../../../static/img/usage/tools/tools-basic-guide/16.png) + + :::info[note] + After Approve or Reject you can go back SQL Accounting, you will see below possible scenario + ::: + + - **Scenario 1 : Approve Override** + + >a. Message : Approve Message + > + >b. The green tick will appear after approve + > + >c. Click **OK** to save that transaction + + ![17](../../../static/img/usage/tools/tools-basic-guide/17.png) + + - **Scenario 2 : Reject Override** + + >a. Message : Reject Message + > + >b. The cross will appear after reject + > + >c. **OK** button is disabled after reject, click **Cancel** + + ![18](../../../static/img/usage/tools/tools-basic-guide/18.png) + + After Click Cancel System will Prompt back to this dialog box : + + ![19](../../../static/img/usage/tools/tools-basic-guide/19.png) + +### When to use? + +These **ALL** can use Online Approval for user : + +| Module | Action | +|---------------|-----------------| +| Logon Screen | - No access right to change password | +| All Module | - All Document entry without Execute / Print / Preview / Export access rights | +| | - Unable to Save and Manage Grid Layout | +| | - Unable to Grid Export | +| | - Save Document Fall Outside Acceptable Trans Date | +| Customer Inovice| - Fast entry save Invoice | +| SL&PH | - Prompt Stock Qty Control Dialog | +| | - Prompt change unit price | +| | - Save price below cost (fmSLPriceControl) | +| | - Override Credit Control | +| GL | - Bank Recon Entry form to Check Bank Recon Listing | +| Stock | - Update GL stock value from other stock month end report | +| | - Stock Report with Execute access right but without Process right | +| Inquiry | - Hide Dashboard | + +### 1. Maintain User + +1. Tools > Maintain User + + ![1](../../../static/img/usage/tools/tools-basic-guide/111c.png) + +### 2. Edit User + +1. Double click the user that you want to setting > Edit + + ![2](../../../static/img/usage/tools/tools-basic-guide/21.png) + + ![3](../../../static/img/usage/tools/tools-basic-guide/31.png) + +### 3. Set Approval Person + +- Setting The Detail For Approval Person (ONLY GMAIL CAN LOGIN TO APPROVE OR REJECT) + + 1. Mobile number - To which whatsapp number to get notification for approval only + + 2. Email - To which email address to get notification for approval only + + 3. Open ID (Google) - Gmail for approve or reject + + :::info[note] + If receive notification email and approve email is Gmail, do setting only at **3.OPEN ID (Google)** and leave **2.Email** column blank + ::: + + ![4](../../../static/img/usage/tools/tools-basic-guide/4.png) + + For Example : + + - **Senario 1 : Use Same Gmail to Receive Notification and Give Approval** + + Your Gmail address is : `XXXXXX@gmail.com` + + 1. Open ID (Google) : `XXXXXX@gmail.com` + 2. Email : **Left as blank** + + ![5](../../../static/img/usage/tools/tools-basic-guide/51.png) + + - **Senario 2 : Use Different email to received notification and give approval** + + - To Give Approval Gmail Address is : `XXXXXX@gmail.com` + - To Received notification Address is : `XXXXXX@estream.com` + + 1. Open ID (Google) : Put your gmail address `XXXXXX@gmail.com` + 2. Email : `XXXXXX@estream.com` + + ![6](../../../static/img/usage/tools/tools-basic-guide/61.png) + +### 4. Setting SMTP + +:::info[note] + +- This Setting is for user who want to **use Email to send Notification** +- If use whatsapp to send approval can skip this step + +::: + +1. Make Sure you had create App Password + - If you are using Gmail , you can [CLICK HERE](https://support.google.com/accounts/answer/185833?hl=en) to follow the steps to create your App Password + - After getting your App Password, return to your SQL Accounting + +2. Click on Email Setting +3. Your Email SMTP Host +4. Your Email SMTP Port +5. Your Email SMTP Connection Security +6. Your Email Address +7. Your Apps Password +8. Your Email Sender Name +9. Afte done setting click Save + + ![7](../../../static/img/usage/tools/tools-basic-guide/71.png) + +## Maintain Journal + +- Journal is mostly utilized to categorize document kinds while analyzing reports by journal. + +![maintain-journal](../../../static/img/usage/tools/tools-basic-guide/maintain-journal.png) + +### Create New Journal + +![maintain-journal-entry](../../../static/img/usage/tools/tools-basic-guide/maintain-journal-entry.jpg) + +| **Field Name** | **Explanation & Properties** | +|----------------|------------------------------| +| **Journal** | - Input the new Journal code +- **Field type:** Alphanumerical +- **Length:** 10 | +| **Description** | - Input the Journal description +- **Field type:** Alphanumerical +- **Length:** 80 | +| **Active** | - Checked = Active +- Unchecked = Inactive | | + +### Journal Setting + +1. Lets said you have create a new Journal named "Sales-DN". See below screenshot. + + ![maintain-journal-sales-dn](../../../static/img/usage/tools/tools-basic-guide/maintain-journal-sales-dn.jpg) + +2. You have to set the Journal at Tools | Options... +3. At the General Ledger tab, you can link the Journal to a default Journal. +4. For example, "Sales-DN" Journal link to a default Journal "Customer Debit Note". See below screenshot. + +![options-gl-cust-dn](../../../static/img/usage/tools/tools-basic-guide/options-gl-cust-dn.jpg) + +### Reporting by Journal + +GL | Print Journal of Transaction Listing...See below screenshot : + + ![journal-of-trans-list-journal](../../../static/img/usage/tools/tools-basic-guide/journal-of-trans-list-journal.jpg) +![print-journal-of-trans-list](../../../static/img/usage/tools/tools-basic-guide/print-journal-of-trans-list.png) + +2. You can select the Journal lookup as shown in the above screenshot. +3. System will list out the double entry posted from the Sales/Customer Debit Note. + +## Maintain Style + + *Menu: Tools | Maintain Style* + + >To display the document details in different font type (currently not supported) and size. + >For example the document detail font size is 10, see the below screenshot: + > + +![invoice-with-style](../../../static/img/usage/tools/tools-basic-guide/invoice-with-style.jpg) + +### Create New Style + +![maintain-style](../../../static/img/usage/tools/tools-basic-guide/maintain-style.png) + +![maintain-style-entry](../../../static/img/usage/tools/tools-basic-guide/maintain-style-entry.png) + +| Field Name | Explanation & Properties | +|--------------------|----------------------------------------------------------------------------------| +| **Style ID** | - Input the new Style ID.
- **Field type:** Alphanumerical
- **Length:** 5 | +| **Font** | - Always tick and click on the Font button to select the font size.
- **Field type:** Checkbox | +| **Background - Color** | - Not supported | +| **Background - Image** | - Not supported | + +## Maintain Commision + +- Menu: Tools | Maintain Commission Script... + +1. To execute a simple commission script to determine the commission rate based on the payment age (Payment Date - Invoice Date). +2. Sales Commission Script module is required. + +Browse mode in Maintain Style. See the below screenshot: + +![maintain-scripts](../../../static/img/usage/tools/tools-basic-guide/maintain-scripts.jpg) + +### Create New Commission Script + +1. Click on NEW. See the below screemshot. + +![maintain-comission-scripts](../../../static/img/usage/tools/tools-basic-guide/maintain-comission-scripts.png) + + | Field Name | Explanation | + |--------------|------------------------------------------| + | **Code** | Input the new code. | + | **Description** | Input the commission script description. | + | **Script** | Load the commission script. | + +2. Example of the scripts: + + a. Script 1 + +
+ Commission Script + +```sql +procedure CalculateCommission(AKODocAmt, AAge: variant; var Value: variant); +begin + if AAge < 10 then + Value := AKODocAmt * 0.05 + else if AAge < 20 then + Value := AKODocAmt * 0.03 + else if AAge < 30 then + Value := AKODocAmt * 0.02 + else + Value := AKODocAmt * 0.005; +end; +``` + +
+ +## Maintain Agent + +*Menu: Tools | Maintain Agent...* + +1. An agent is the sales person or sales representative. +2. It is very useful when you are trying to apply the reports by an Agent. +3. You can create/edit the agent or sales person code here. + +![maintain-agent](../../../static/img/usage/tools/tools-basic-guide/maintain-agent.png) + +### Create New Agent + +![maintain-agent-entry](../../../static/img/usage/tools/tools-basic-guide/maintain-agent-entry.jpg) + +| Field Name | Explanation & Properties | +|--------------|---------------------------| +| **Code** | - Input the new Agent code - Field type: Alphanumerical - Length: 10 | +| **Description** | - Input the Agent Name - Field type: Alphanumerical - Length: 80 | +| **Active** | - Checked = Active - Unchecked = Inactive | + +## Maintain Area + +- Menu: Tools | Maintain Area... + +>1. Area can be the state, country or regions. +>2. It is very useful when you are try to apply the reports by Area. +>3. You can create/edit the area or country code here. +> + +![maintain-area](../../../static/img/usage/tools/tools-basic-guide/maintain-area.jpg) + +### Create New Area + +- Below is Area entry form + +![maintain-area-entry](../../../static/img/usage/tools/tools-basic-guide/maintain-area-entry.jpg) + +## Maintain Withholding Tax + +*Menu : Tools | Maintain Withholding Tax...* + +### Create Withholding Tax Code + +1. Click New. +2. Input the following data: + + | Field Name | Explanation | Remark | + |-------------------|----------------------------------------------|------------------------------------------------------------------------| + | **Code** | Set a code | WTH-TAX15 | + | **Description** | Describe the meaning/usage of this code | Withholding Tax 15% | + | **Tax Rate** | Withholding Tax Rate | 15% | + | **Tax Account (DR)** | Set to Withholding Tax Expense account | At GL\Maintain Account, create the Withholding Tax Expense account under **Expenses** | + | **Tax Account (CR)** | Set to Withholding Tax Payable account | At GL\Maintain Account, create the Withholding Tax Payable account under **Current Liabilities** | + + ![withholding-tax](../../../static/img/usage/tools/tools-basic-guide/withholding-tax.jpg) + +3. Click on Save. + +## Maintain Company Category + +*Menu: Tools | Maintain Company Category...* + +1. Company Category usually use to categorize the customer/supplier. For example, 3rd Parties-Domestic, 3rd Parties-Export, Intercompany, etc. +2. It is very useful when you are try to apply the reports by Company Category. +3. You can create/edit the Company Category or sales person code here. + +![maintain-company-category](../../../static/img/usage/tools/tools-basic-guide/maintain-company-category.jpg) + +### Create New Company Category + +- Screenshot below is the Company Category entry form. + +![maintain-company-category-entry](../../../static/img/usage/tools/tools-basic-guide/maintain-company-category-entry.jpg) + +| Field Name | Explanation & Properties | +|-------------|--------------------------------------------------| +| **Code** | Input the new Company Category code *Field type:* Alphanumerical *Length:* 10 | +| **Description** | Input the Company Category Name. *Field type:* Alphanumerical *Length:* 80 | +| **Active** | Checked = Active Unchecked = Inactive | + +### Use of Company Category + +- You can link the Company Category to the Customer or Supplier. + +![cust-cate-supp-cate](../../../static/img/usage/tools/tools-basic-guide/cust-cate-supp-cate.jpg) + +Reports by Company Category + +1. You can apply the following reports by Company Category. + +
+ Customer + + a. Print Customer Document Listing... + + b. Print Customer Balance Report... + + c. Print Customer Due Document... + + d. Print Customer Aging Report... + + e. Print Customer Statement... + + f. Print Customer Post Dated Cheque Listing... + + g. Print Customer Analysis By Document... + + h. Print Customer Sales and Collection Analysis... + +
+ +
+ Supplier + + a. Print Supplier Document Listing... + + b. Print Supplier Balance Report... + + c. Print Supplier Due Document... + + d. Print Supplier Aging Report... + + e. Print Supplier Statement... + + f. Print Supplier Post Dated Cheque Listing... + + g. Print Supplier Analysis By Document... + + h. Print Supplier Sales and Collection Analysis... + +
+ +
+ Sales + + a. Print Sales Document Listing... + + b. Print Outstanding Sales Document Listing... + + c. Print Sales Price History... + + d. Print Profit & Loss by Document... + + e. Print Sales Analysis by Document... + + f. Print Yearly Sales Analysis... + +
+ +
+ Purchase + + a. Print Purchase Document Listing... + + b. Print Outstanding Purchase Document Listing... + + c. Print Purchase Price History... + + d. Print Purchase Analysis by Document... + + e. Print Yearly Purchase Analysis... + +
+ +2. Example of Print Customer Aging Report screenshot. + +![cust-aging-report](../../../static/img/usage/tools/tools-basic-guide/cust-aging-report.jpg) + +## Maintain Shipper + +*Menu: Tools | Maintain Shipper...* + +1. To maintain the shipper profile such as **name**, **address**, **phone**, **account**, etc. It is easy to trace the shipper name who ship the goods or service. +2. Sometimes, you can use as "**Global Delivery**" where you can apply to both sales / purchase documents. + +![shipper](../../../static/img/usage/tools/tools-basic-guide/shipper.jpg) + +### Create New Shipper + +![shipper-entry](../../../static/img/usage/tools/tools-basic-guide/shipper-entry.jpg) + +
+ Shipper Fields + + | **Field Name** | **Explanation** | **Properties** | + |----------------|-----------------|----------------| + | Code | Input the new Shipper code | Alphanumerical, Length: 30 | + | Description | Input the Shipper name | Alphanumerical, Length: 160 | + | Address | Input the Shipper Address | Alphanumerical, Length: 60 per line | + | Phone | Input the Shipper Phone | Alphanumerical, Length: 20 per line | + | Account | Input the Shipper Account | Alphanumerical, Length: 40 | + | Remark 1 | Input any remark (free field) | Alphanumerical, Length: 200 | + | Remark 2 | Input any remark (free field) | Alphanumerical, Length: 200 | + | Description | Input the Shipper name | Alphanumerical, Length: 160 | + | Active | Checked = Active, Unchecked = Inactive | Boolean | + +
+ +### Use of Shipper + +1. Both Sales / Purchase documents, you can select the shipper by clicking on the **MORE** tab (LEFT side bar) +2. Example of Sales Delivery Order screenshot + +![shipper](../../../static/img/usage/tools/tools-basic-guide/shipper.jpg) + +### Report by Shipper + +1. You can apply the Sales report by Shipper, especially the reports from **Sales | Print Sales Price History**. +2. Example of Sales Price History report screenshot + +![sales-report-by-shipper](../../../static/img/usage/tools/tools-basic-guide/sales-report-by-shipper.jpg) + +## Maintain Tariff + +*Menu: Tools | Maintain Tariff...* + +- Tariff classification is a complex yet extremely important aspect of **cross-border trading**. + +- **Goods imported** from or to Malaysia are classified by the Harmonized Tariff Schedule (HTS) or commonly referred to as **HS Codes**. + +- The codes, created by World Customs Organization (WCO), categorize up to 5,000 commodity +HS Codes are made of **6-digit numbers** that are recognized internationally, although different countries can extend the numbers by two or four digits to define commodities at a more detailed level. + +[Click here to search for tariff rates on products](https://ezhs.customs.gov.my/) to search the tariff code list from Kastam system. + +### Create New Tariff + +![tariff](../../../static/img/usage/tools/tools-basic-guide/tariff.jpg) + +| **Field Name** | **Explanation** | **Properties** | + |----------------|-----------------|----------------| + | Code | Input the new Tariff Code | Alphanumerical, Length: 20 | + | Description | Input the Tariff Description | Alphanumerical, Length: 160 | + | Active | Checked = Active, Unchecked = Inactive | Boolean | + +## Print Audit Trail + +*Menu: Tools | Print Audit Trail...* + +> All questions regarding who created, edited, or deleted the data, and when, can be answered through the Print Audit Trails. + +![audit-trail](../../../static/img/usage/tools/tools-basic-guide/audit-trail.jpg) + +| Field Name | Explanation & Properties | +|------------|---------------------------| +| Date | Input the date range to be audited. | +| User | Select the user to be audited. | +| Event | Insert = Check who/when the data was created.Edit = Check who/when the data was modified.Delete = Check who/when the data was deleted. | +| Where | Tick the modules to be audited. | +| Find Text | Input the specific keyword to be audited, e.g., invoice no., customer code, etc. | + +### Advanced Options + + > If you wish to audit the Sales/Purchase/Stock documents details, you must enable this "Post Audit Trail for Stock/Sales/Purchase Detail". See below screenshot: + + ![options-miscellaneous](../../../static/img/usage/tools/tools-basic-guide/options-miscellaneous.jpg) + +## Analyse Data Integrity + + Menu: Tools | Analyse Data Integrity... + +:::warning +RUN Analyse Data Integrity ONLY when you have at least **1-3 hours** for operations in company and SQL Account to be **fully stop**... +::: + + To analyse the data integrity check. It is recommended to perform this action **weekly** or **monthly** + > (before month end closing). + +Reason to run this may due to the following unpredictable matters: + +>1. malfunction/glitch from hardware such as network switch, computer, server, etc. +>2. Network stability, such as wireless lost connection. +>3. Power failure +>4. Operating System failure +> + +
+ Parts of Analyse Data Integrity - click to expand + +There are 3 parts of analyse data integrity : + +a. Regular Data Integrity (Default) + +- Check AP Knock Off Integrity +- Check AR Knock Off Integrity +- Update Customer Outstanding +- Check Document Integrity +- Check Document Transfer Integrity +- Check Delivery Order/Invoice/Cash Sales to Credit Note Posting Date +- Check Production Document Transfer Integrity +- Check GL Opening Balance +- Check GST DO -> IV Posting Integrity +- Repost Stock Transactions +- Calculate Stock Costing +- Compress Stock Item Pictures +- Update Stock Balance Quantity +- Update Supplier Outstanding +- Resequence Table Fields +- Regenerate Views +- Remove Temporary Table + +b. Reposting (Optional) + +- Repost AR Documents +- Repost AP Documents +- Repost GL Documents +- Repost PH Documents +- Repost SL Documents + +
+ +:::info NOTE: + +1. Reposting might took longer time to perform repost for the documents selected. + +2. Recommended to run at the server side. +::: + + ![analyse-data-integrity](../../../static/img/usage/tools/tools-basic-guide/analyse-data-integrity.jpg) + +### To Start Analyse + +1. Tick the Analyse Items required to analyse, otherwise skip this step 1. +2. Click on Start Analyse. + + ![analyse-data-integrity-start](../../../static/img/usage/tools/tools-basic-guide/analyse-data-integrity-start.jpg) + +3. Prompt the message to inform you the total tasks ticked has analyse completed. + + ![analyse-data-integrity-complete-message](../../../static/img/usage/tools/tools-basic-guide/analyse-data-integrity-complete-message.jpg) + +4. You can copy the analyse log detail by click on Copy to Clipboard. + + ![analyse-data-integrity-log-detail](../../../static/img/usage/tools/tools-basic-guide/analyse-data-integrity-log-detail.jpg) + +5. Open notepad or Microsoft Words. Paste it. + + ![analyse-data-integrity-log-paste-notepad](../../../static/img/usage/tools/tools-basic-guide/analyse-data-integrity-log-paste-notepad.jpg) + +## Print Bar Code (Direct Printer) + +*Menu: Tools | Print Bar Code (Direct Printer)* + +- To print the bar code label using Special Bar Code Printer for the items created in Maintain Stock Item. + +![print-label](../../../static/img/usage/tools/tools-basic-guide/print-label.jpg) + +### Bar Code Printer Setting + +*Menu: Tools | Options...(BarCode)* + +1. Insert the new barcode printer setting and template. + + ![print-label-template-settings](../../../static/img/usage/tools/tools-basic-guide/print-label-template-settings.jpg) + +2. Click on OK to exit. + +### Print the Bar Code Label + +1. Click on the arrow key-down beside the Print button. See the screenshot below. +2. You can choose either Print to Printer (barcode printer) or Print To File (output as text file). + +![print-label-print-to](../../../static/img/usage/tools/tools-basic-guide/print-label-print-to.jpg) + +## Print Bar Code (Windows Printer) + +*Menu: Tools | Print Bar Code (Windows Printer)* + +- To print the bar code label using Windows Printer for the items created in Maintain Stock Item. + +![bar-code](../../../static/img/usage/tools/tools-basic-guide/bar-code.jpg) + +### Update Item Bar Code Listing + +1. At first, you can update the item bar code in the Maintain Stock Item. + + ![bar-code-same-as-in-item](../../../static/img/usage/tools/tools-basic-guide/bar-code-same-as-in-item.jpg) + +2. Click on + button to insert the items. See the screenshot below. + + ![plus-button-bar-code](../../../static/img/usage/tools/tools-basic-guide/plus-button-bar-code.jpg) + +3. Click the SAVE button to save the item bar code listing. Type a file name (eg. BarCode_Items_31122015) to save. See the screenshot below. + + ![save-button-bar-code](../../../static/img/usage/tools/tools-basic-guide/plus-button-bar-code.jpg) + +4. Message prompted. Click OK. + +![save-bar-code](../../../static/img/usage/tools/tools-basic-guide/save-bar-code.jpg) + +### Load the Previous Item Bar Code Listing + +1. Click on a Carbinet button to load from the previous file for item bar code listing (eg.BarCode_Items_31122015). Click on OPEN. + + ![cabinet-button-bar-code](../../../static/img/usage/tools/tools-basic-guide/cabinet-button-bar-code.jpg) + +2. Confirmation message prompted. Click on OK to load it. Click on NO' to cancel it. + + ![confirmation-message](../../../static/img/usage/tools/tools-basic-guide/confirmation-message.jpg) + +3. Message Load success prompted. Click on OK to proceed. + +![load-success](../../../static/img/usage/tools/tools-basic-guide/load-success.jpg) + +### Preview/Print the Bar Code Level + +1. Click on Preview or Printer (to skip the preview). + + ![preview-button](../../../static/img/usage/tools/tools-basic-guide/preview-button.jpg) + +2. After the preview, click on Printer button to print. + +### How to Change the Label Size (mm) Measurement for the Bar Code Label + +1. Click on the Report Name. See the screenshot below. + + ![click-report-name](../../../static/img/usage/tools/tools-basic-guide/click-report-name.jpg) + +2. To change the paper unit measurement. Click on Report | Units, choose to Millimeters. + + ![report-unit-mm](../../../static/img/usage/tools/tools-basic-guide/report-unit-mm.jpg) + +3. To change the paper size. Click on **File | Page Setup...** + + ![file-pagesetup](../../../static/img/usage/tools/tools-basic-guide/file-pagesetup.jpg) + +4. Click on Paper Size tab, change the Width and Height to 35 and 25 respectively (mm), eg. the label paper size is 35mm x 25mm. + + ![paper-size](../../../static/img/usage/tools/tools-basic-guide/paper-size.jpg) + +5. Check the Layout tab to make sure the Columns set to value = 1. + + ![page-setup-layout-tab](../../../static/img/usage/tools/tools-basic-guide/page-setup-layout-tab.jpg) + +6. Check the Margin tab as well to make sure all (Top, Bottom, Left, Right) are set to value = 0 . Click OK to exit Page Setup. + + ![page-setup-margin-tab](../../../static/img/usage/tools/tools-basic-guide/page-setup-margin-tab.jpg) + +7. To fix label each page contains 1 barcode of an item. Right click on Detail band, select Position. + + ![detail-position](../../../static/img/usage/tools/tools-basic-guide/detail-position.jpg) + +8. Set Print Count to value = 1. Click OK to confirm. + + ![position-print-count](../../../static/img/usage/tools/tools-basic-guide/position-print-count.jpg) + +9. Save the report with **another name**. + +## Options + +
+ Options (Acc) - click to expand + +*Menu: Tools | Options...* + +Settings for the following: + +1. General +2. BarCode +3. Miscellaneous +4. Unit Price +5. General Ledger +6. Customer +7. Supplier + +![tools-options](../../../static/img/usage/tools/tools-basic-guide/tools-options.png) + +### General + +- Automation Server Registration - Use to register/communicate to the external application via Windows platform. + + ![options-general](../../../static/img/usage/tools/tools-basic-guide/options-general.jpg) + +### Bar Code + +- To define the cash drawer setting with a compatible device, eg. cash drawer. + +![options-barcode-cashdrawer](../../../static/img/usage/tools/tools-basic-guide/options-barcode-cashdrawer.jpg) + +- To define the barcode setting with a compatible device, eg. barcode printer. + +![options-barcode-barcodes](../../../static/img/usage/tools/tools-basic-guide/options-barcode-barcodes.jpg) + +### Miscellaneous + +Others setting. + +![options-miscellaneous-](../../../static/img/usage/tools/tools-basic-guide/options-miscellaneous-.jpg) + +#### To set the display format + +- To understand the display format. See the below picture: + +![display-format](../../../static/img/usage/tools/tools-basic-guide/display-format.jpg) + +| Numbering Type | Display Format | Example | +|-----------------------------|--------------------|---------| +| Accounting Value | #,0.00;(#,0.00) |
Amount/DR/CR display format
Positive value = 1,000.00
Negative value = (1,000.00)
| +| Currency Rate | #,0.0000 |
Exchange Rate display format, e.g. 1 USD = 4.2334 MYR
| +| Stock Quantity | #,0.00;-#,0.00 |
Qty display format
Qty In = 2.00 units
Qty Out = -2.00 units
| +| Item Selling Price | #,0.00;-#,0.00 |
Sales Unit Price display format, e.g. unit selling price = 25.53
| +| Item Purchase Price / Costing | #,0.00;-#,0.00 |
Purchase Unit Price and Total Cost display format, e.g. unit purchase price = 15.33
| + +#### Merge Same Item Code + +1. Tick this option to merge same items quantity and amount when you print the documents, eg. sales invoice, cash sales, etc. +2. Conditions: + +- a. Same item Code; +- b. Same UOM; +- c. Same Unit Price; +- d. Sames Disc; +- e. Same Tax Code. + +![merge-itemcode](../../../static/img/usage/tools/tools-basic-guide/merge-itemcode.jpg) + +#### Prompt Negative Stock Quantity Dialog Box + +- Tick this option the system will prompt alert message if the stock below quantity on hand or below re-order level or below minimum quantity in the sales documents. + +![stock-quantity-control](../../../static/img/usage/tools/tools-basic-guide/stock-quantity-control.jpg) + +#### Show Document Project + +1. Tick this option to enable to select the document project. +2. See the example in the screenshot below. + +![document-project](../../../static/img/usage/tools/tools-basic-guide/document-project.jpg) + +#### Runtime Stock Costing Calculation for Stock Document + +1. To enable to execute the costing calculation when print the stock documents reports (report name ended with Actual Cost) in the Stock Issue, Stock Adjustment and Stock Transfer (available in multiple warehouse module). +2. See the example of stock issue as shown in the screenshot below. + +![stock-issue](../../../static/img/usage/tools/tools-basic-guide/stock-issue.jpg) + +#### Prompt Duplicate Cheque Number + +- To alert a message if duplicate cheque number are try to save in Payment Voucher/Official Receipt. + + ![duplicate-cheque-num](../../../static/img/usage/tools/tools-basic-guide/duplicate-cheque-num.jpg) + +#### Use Doc Date For Acceptable Transactions Date Checking + +1. System will use document date instead of post date to check and allow to save the document based on the allow date set in Maintain Acceptable Transaction Date. +2. For instance, the document date = 01/01/2016 and post date = 17/02/2016. System will not allow to save this document fall outside the acceptable transaction date (ie. 01/02/2016 - 29/02/2016). See the screenshot below. + + ![trans-date-out](../../../static/img/usage/tools/tools-basic-guide/trans-date-out.jpg) + +#### Post Audit Trail for Stock/Sales/Purchase Detail + +- To audit log the changes has been made in Sales and Purchase detail. + +![audit-sales-and-purchase](../../../static/img/usage/tools/tools-basic-guide/audit-sales-and-purchase.jpg) + +#### Default UOM + +- Default the base UOM when create new item in Maintain Stock Item. + +![options-mis-default-uom](../../../static/img/usage/tools/tools-basic-guide/options-mis-default-uom.jpg) + +### Unit Price + +- To set the unit price priority apply to the sales/purchase/stock documents when select the item code for a customer/supplier. + +- Sales + +![options-unitprice-sales](../../../static/img/usage/tools/tools-basic-guide/options-unitprice-sales.jpg) + +- Purchase + +![options-unitprice-purchase](../../../static/img/usage/tools/tools-basic-guide/options-unitprice-purchase.jpg) + +- Stock + +![options-unitprice-stock](../../../static/img/usage/tools/tools-basic-guide/options-unitprice-stock.jpg) + +- Cash Sales + +![options-unitprice-cash-sales](../../../static/img/usage/tools/tools-basic-guide/options-unitprice-cash-sales.jpg) + +- Cash Purchase + +![options-unitprice-cash-purchase](../../../static/img/usage/tools/tools-basic-guide/options-unitprice-purchase.jpg) + +### General Ledger (GL) + +- It is important to define the setting correctly in the new database created. + +![options-gl](../../../static/img/usage/tools/tools-basic-guide/options-gl.jpg) + +**Financial Start Period** + To define the company Financial Start Date, eg. 01/01/2016 (system will be notified New Financial Start Date at 1st January every year). + +**System Conversation Date** + System conversation date from other system or new company database setup. + +**Default Account** + Default account use to auto posting by the system. + +| Default Account | Account | Explanation | +|--------------------------------------|-----------|-----------------------------------------------------------------------------| +| Foreign Exchange Rate Gain Account | 530-000 | Foreign Exchange Rate Gain auto posting from Customer and Supplier Payment. | +| Foreign Exchange Rate Loss Account | 980-000 | Foreign Exchange Rate Loss auto posting from Customer and Supplier Payment. | +| Bank Charge Account | 902-000 | Bank charge auto posting from GL Cash Book Entry, Customer and Supplier Payment if entered in the bank charge field. | +| Contra Account | 450-000 | Applicable to Customer and Supplier Contra. | +| Sales Account | 500-000 | Default sales account in Sales Invoice and Debit Note if empty item code. | +| Cash Sales Account | 500-000 | Default cash sales account in Sales Cash Sales if empty item code. | +| Sales Returns Account | 510-000 | Default sales returns account in Sales Credit Note if empty item code. | +| GST-Output Tax Prepaid | GST-103 | Applicable to 21 Days Rules and Non-Refundable Deposit. | +| GST-Sales Deferred Tax | GST-202 | Applicable to Bad Debt Relief and Bad Debt Recovered related to Customer. | +| Purchase Account | 610-000 | Default purchase account in Purchase Invoice and Debit Note if empty item code. | +| Cash Purchase Account | 610-000 | Default cash purchase account in Purchase Cash Purchase if empty item code. | +| Purchase Return Account | 612-000 | Default purchase returns account in Purchase Returns if empty item code. | +| GST-Purchase Deferred Tax | GST-102 | Applicable to Bad Debt Relief and Bad Debt Recovered related to Supplier. | +| GST-Payable (Kastam) | GST-KASTAM| RMCD accounts. | +| Unclaimable GST Account | GST-301 | Applicable to Mixed Supplies only. | + +#### Default Journal + +1. To classify the transactions into the Journal created in Maintain Journal. Usually leave it as default. +2. It is very useful for applying the Journal of Transactions Listing and Summary report. + + ![options-default-general](../../../static/img/usage/tools/tools-basic-guide/options-default-general.jpg) + +3. Below is the default journal list:- + +| Default Journal | Journal | +|----------------------------------|-----------| +| Bank Journal | BANK | +| Cash Journal | CASH | +| Journal Entry | GENERAL | +| Foreign Bank Adjustment | BANK | +| Foreign Exchange Rate Gain/Loss | GENERAL | +| Customer/Supplier Contra | GENERAL | +| Customer Invoice | SALES | +| Customer Cash Sales | SALES | +| Customer Credit Note | SALES | +| Customer Debit Note | SALES | +| Supplier Invoice | PURCHASE | +| Supplier Cash Purchase | PURCHASE | +| Supplier Credit Note | PURCHASE | +| Supplier Debit Note | PURCHASE | + +### Customer + +- It is important to define the Customer setting in the new database created. + +![options-cust](../../../static/img/usage/tools/tools-basic-guide/options-cust.jpg) + +**Default Control Account** + Default control account when create new customer in Maintain Customer. + +![options-cust-def-cont-acc](../../../static/img/usage/tools/tools-basic-guide/options-cust-def-cont-acc.jpg) + +**Default Credit Terms** + Default credit terms when create new customer in Maintain Customer. + +![options-cust-def-cred-terms](../../../static/img/usage/tools/tools-basic-guide/options-cust-def-cred-terms.jpg) + +**Default Credit Limit** + Default credit limit value when create new customer in Maintain Customer. + +![options-cust-def-cred-limits](../../../static/img/usage/tools/tools-basic-guide/options-cust-def-cred-limits.jpg) + +**Default Output Tax** + Default output tax code when create new customer/sales documents entry, eg. customer invoice, customer debit note, etc. + +![options-cust-def-output-tax](../../../static/img/usage/tools/tools-basic-guide/options-cust-def-output-tax.jpg) + +#### **Customer Account Code Format** + +1. To Define the customer code format. +2. Format explanation as per below. + +![cust-code-format](../../../static/img/usage/tools/tools-basic-guide/cust-code-format.jpg) + +| Ref | Code Format | Explanation | +|-----|-------------|--------------------------------------------------------------------| +| A | %.3s- | First number of digits from Customer Control Account code. | +| B | %.1s | First character from Customer Name. | +| C | %.4d | Sequence running number. | + +**Example 1:** + a. Customer Control Account = 300-000 + b. Customer Name = ALI BABA SDN BHD + + | Code Format | Result | + |-------------|--------| + | %.3s- | 300- | + | %.1s | A | + | %.4d | 0001 | + c. Customer Code = 300-A0001 + +**Example 2:** + a. Customer Control Account = 3001-0000 + b. Customer Name = ALI BABA SDN BHD + + | Code Format | Result | + |-------------|--------| + | %.4s/ | 3001/ | + | %.2s | AL | + | %.2d | 01 | + c. Customer Code = 3001-AL01 + +#### **Exceptional Customer Code Format (Regular Expression)** + +1. Copy and paste the below regular express line into Customer Format field (see the screenshot below). + + ```sql + + "%.3s"-"(?i)\b(?!sykt\b|persatuan\b)(?![-.,\s]).{1,1}""%.4d" + + ``` + +![cust-code-format-entry](../../../static/img/usage/tools/tools-basic-guide/cust-code-format-entry.jpg) + +**Example 1:** + a. Customer Name: SYKT ALI + b. Keyword excluded: sykt (non-case sensitive) + c. Customer Code= 300-A0001 + +**Example 2:** + a. Customer Name: PERSATUAN KLANG + b. Keyword excluded: persatuan (non-case sensitive) + c. Customer Code= 300-K0001 + +#### Default Customer Aging Format + +1. Set a default customer aging format to show the aging result at **Inquiry | Account Inquiry (Customer)**. + +2. Customer aging format list: + a. Cust-Multi-F1-06 Mths Statement-Current,1 Mth,... + b. Cust-Multi-F2-06 Mths Statement-Current,1 Mth,... + c. Cust-Multi-F1-12 Mths Statement-Current,1 Mth,... + d. Cust-Multi-F2-12 Mths Statement-Current,1 Mth,... + +![default-cust-aging-format](../../../static/img/usage/tools/tools-basic-guide/default-cust-aging-format.jpg) + +**Use Cash Sales No. for Payment Received** + Use Cash Sales No as the official receipt no for cash sales only. + +![same-doc-no-cash-sales-offic-receipt](../../../static/img/usage/tools/tools-basic-guide/same-doc-no-cash-sales-offic-receipt.jpg) + +#### Perform Tax / Local Amount Rounding + +1. Choose a method to calculate the tax amount consistently. +2. By default, it is always **untick**. + A. Once Cent Different: Untick (by Default) + + It is **total of tax amount from each detail amount** multiply by GST 6%. + **Total Tax Amount** = 20.00 + 24.62 + 0.73 + 7.39 +1.94 = 54.68 + + | Items | Amount | Tax | Tax Amount | Total | +|--------|--------|-----|------------|--------| +| Item 1 | 333.33 | SR | 20.00 | 353.33 | +| **Item 2** | **410.37** | **SR** | **24.62** | **434.99** | +| Item 3 | 12.13 | SR | 0.73 | 12.86 | +| Item 4 | 123.15 | SR | 7.39 | 130.54 | +| Item 5 | 32.26 | SR | 1.94 | 34.20 | +| **Total** | **911.24** | | **54.68** | **965.92** | + +B. One Cent Different: Tick + It is based on **total document amount** to multiply with GST 6%. + **Total Tax Amount based on itemized** = 20.00 + 24.62 + 0.73 + 7.39 + 1.94 = **54.68** + **Total Tax Amount based on total amount** = 911.24 x 6% = 54.67 + Differences = 54.68 - 54.67 = **0.01** + Therefore, the system will perform **auto rounding mechanism** to the largest value (ie. item 2 = 24.62-0.01 = **24.61**). + +| Items | Amount | Tax | Tax Amount | Total | +|-----------|---------|-----|------------|---------| +| Item 1 | 333.33 | SR | 20.00 | 353.33 | +| **Item 2** | **410.37** | **SR** | **24.61** | **434.98** | +| Item 3 | 12.13 | SR | 0.73 | 12.86 | +| Item 4 | 123.15 | SR | 7.39 | 130.54 | +| Item 5 | 32.26 | SR | 1.94 | 34.20 | +| **Total** | **911.24** | | **54.67** | **965.91** | + +**5 Cents Rounding (Sales Invoice)** + This option will auto insert an items code **RTN5Cents** to adjust the total invoice amount if found the total amount not in simple rounding. + +![rounding](../../../static/img/usage/tools/tools-basic-guide/rounding.jpg) + +**5 Cents Rounding (Cash Sales)** + This option will auto insert an items code **RTN5Cents** to adjust the total cash sales amount if found the total amount not in simple rounding. + +![adjust-cash-sales-amt](../../../static/img/usage/tools/tools-basic-guide/adjust-cash-sales-amt.jpg) + +### Supplier +
+ Supplier - click to expand + +- It is important to define the Supplier setting in the new database created. + +![options-supplier](../../../static/img/usage/tools/tools-basic-guide/options-supplier.jpg) + +**Default Control Account** + Default control account when create new supplier in Maintain Supplier. + +![options-supplier-def-supp-acc](../../../static/img/usage/tools/tools-basic-guide/options-supplier-def-supp-acc.jpg) + +**Default Credit Terms** + Default credit terms when create new supplier in Maintain Supplier. + +![options-supplier-def-cred-terms](../../../static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-terms.jpg) + +**Default Credit Limit** + Default credit limit value when create new supplier in Maintain Supplier. + +![options-supplier-def-cred-limit](../../../static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-limit.jpg) + +**Default Input Tax** + Default input tax code when create new supplier/purchase documents entry, eg. supplier invoice, supplier debit note, etc. + +![options-supplier-def-input-tax](../../../static/img/usage/tools/tools-basic-guide/options-supplier-def-input-tax.jpg) + +#### Supplier Account Code Format + + 1. To Define the supplier code format. + 2. Format explanation as per below. + +![supp-code-format](../../../static/img/usage/tools/tools-basic-guide/supp-code-format.jpg) + +| Ref | Code Format | Explanation | +|-----|-------------|--------------------------------------------------------------| +| A | %.3s- | First number of digit from **Supplier Control Account code**. | +| B | %.1s | First number of characters from **Supplier Name**. | +| C | %.4d | Sequence running number. | + +**Example 1:** + +1. Supplier Control Account = **400-000** +2. Supplier Name = **ALI BABA SDN BHD** + + | Code Format | Result | + |-------------|--------| + | %.3s- | 400- | + | %.1s | A | + | %.4d | 0001 | + +3. Supplier Code = **400-A0001** + +**Example 2:** + +1. Supplier Control Account = **4001-0000** +2. Supplier Name = **ALI BABA SDN BHD** + + | Code Format | Result | + |-------------|--------| + | %.4s/ | 4001/ | + | %.2s | AL | + | %.2d | 01 | + +3. Supplier Code = **4001-AL01** + +#### Exceptional Supplier Code Format (Regular Expression) + + 1. Copy and paste the below regular express line into Supplier Format field (see the screenshot below). + + ```sql + "%.3s"-"(?i)\b(?!sykt\b|persatuan\b)(?![-.,\s]).{1,1}""%.4d" + ``` + +![supp-code-format-entry](../../../static/img/usage/tools/tools-basic-guide/supp-code-format-entry.jpg) + +**Example 1:** + +1. Supplier Name: SYKT TAN & SON +2. Keyword excluded: **sykt** (non-case sensitive) +3. Supplier Code= **400-T0001** + +**Example 2:** + +1. Supplier Name: PERSATUAN BOLA SEPAK +2. Keyword excluded: persatuan (non-case sensitive) +3. Supplier Code= **400-B0001** + +#### Default Supplier Aging Format + +1. Set a default supplier aging format to show the aging result at **Inquiry | Account Inquiry (Supplier)**. +2. Supplier aging format list: + + - Supp-Multi-F1-06 Mths Statement-Current,1 Mth,... + - Supp-Multi-F2-06 Mths Statement-Current,1 Mth,... + - Supp-Multi-F1-12 Mths Statement-Current,1 Mth,... + - Supp-Multi-F2-12 Mths Statement-Current,1 Mth,... + +![def-supp-aging-format](../../../static/img/usage/tools/tools-basic-guide/def-supp-aging-format.jpg) + +**Use Cash Purchase No. for Payment Paid** + Use Cash Purchase No as the payment voucher no for cash purchase only. + +![cp-num-same-as-voucher-num](../../../static/img/usage/tools/tools-basic-guide/cp-num-same-as-voucher-num.jpg) + +
+ +
+ +## Maintain DIY + +*Menu: Tools | DIY | Maintain DIY...* + +This Additional Module(DIY Fields & DIY Script Module) + +![maintain-diy](../../../static/img/usage/tools/tools-basic-guide/maintain-diy.jpg) + +| Function | Description | +|---------------------|-------------------------------------------------------------------| +| Field and Quick Form | User can Self Create new User Define Field(s) & Design the Layout | +| Script | Customise the Application | +| Calculation | Override the build in Calculation (SQL Payroll ONLY) | +| View Template | For Advance Form Mode | +| Report Data | Deprecated | + +### Field and Quick Form + +Below is Example are doing following actions + +- Create UDF_JobTitle at Maintain User +- Create New Form at Maintain User + +1. Right Click at User + + ![new-field](../../../static/img/usage/tools/tools-basic-guide/new-field.jpg) + +2. Select New Field + + ![diy-field-template](../../../static/img/usage/tools/tools-basic-guide/diy-field-template.jpg) + +3. Click **New** button + + ![calc-field](../../../static/img/usage/tools/tools-basic-guide/calc-field.jpg) + +4. Enter any Description (eg Calc-Field) in the **Description** field (Only Alphanumeric & no spacing) +5. Click the + button to add the New UDF Field & Enter/Select the option as above picture +6. Click Save (the Blue Disc icon) after done +7. Close the windows. + + - Available Data Field Type + + | Field Type | Definition | + |-----------------|-------------------------------------------------------------------------------------------------------------| + | String | Text data of a fixed length (up to 8192 bytes) | + | Unicode String | A field representing a Unicode (16 bits per character) string. | + | Boolean | A Boolean value. | + | Integer | Whole numbers in the range of long integers (32 bits). | + | Currency | Currency values with the same range as the Real data type. | + | Bcd | Real numbers with a fixed number of digits after the decimal point. | + | Date | A date value. | + | Blob | Binary data with no size limit (BLOB stands for binary large object). The theoretical maximum limit is 2 GB. | + | Memo | Text of arbitrary length. | + + :::warning + + - Only String data can increase the field size so plan properly before add the field. + - User can't change from 1 data type to another once it save. + - Avoid create too many UDF field as it will reduce system performance & take longer time to save 1 data entry. + + ::: + + ![calc-field-select](../../../static/img/usage/tools/tools-basic-guide/calc-field-select.jpg) + +8. Select the Item just created (eg. Calc-Field) +9. Click Ok button +10. Right Click at User again + + ![new-field](../../../static/img/usage/tools/tools-basic-guide/new-field.jpg) + +11. Select New Quick Form + + ![diy-field-template](../../../static/img/usage/tools/tools-basic-guide/diy-field-template.jpg) + +12. Click New button + + ![job-title](../../../static/img/usage/tools/tools-basic-guide/job-title.jpg) + +13. Enter any Description to be shown at Maintain User(eg Info) in the **Description** field (Only Alphanumeric & no spacing) +14. Click Customize button (Icon 1) +15. Drag the UDF Field from the **Available Items** (Icon 2) to empty space (Icon 3) +16. Click **Close** button to **Customize** windows +17. Click Save (Icon 4) after done +18. Close the windows. + + ![quickform-template](../../../static/img/usage/tools/tools-basic-guide/quickform-template.jpg) + +19. Select the Item just created (eg. Info) +20. Click Ok button + + ![field-and-quick-form](../../../static/img/usage/tools/tools-basic-guide/field-and-quick-form.jpg) + +21. Done. + +### Script + +> This is Additional Module(DIY Script Module) which allow user to +> +> override or customise the SQL System. +> The Language use is **Pascal** + +![script](../../../static/img/usage/tools/tools-basic-guide/script.jpg) + +- Available forms to customise : + +| Form Type | Example | Description | +|------------|-----------------------|---------------------------------------------------| +| Browse Form | ![user](../../../static/img/usage/tools/tools-basic-guide/user.jpg) | Script Run/Execute when in Browse window form | +| Entry Form | ![user-entry](../../../static/img/usage/tools/tools-basic-guide/user-entry.jpg) | Script Run/Execute when in Data Entry window form | +| Param Form | ![stock-physical-worksheet](../../../static/img/usage/tools/tools-basic-guide/stock-physical-worksheet.jpg) | Script Run/Execute when at in Icon 1 (Seldom use) | +| Data Form | ![stock-physical-worksheet](../../../static/img/usage/tools/tools-basic-guide/stock-physical-worksheet.jpg) | Script Run/Execute when at in Icon 2 (Frequently use) | + +- Available Action/Event + +| Action/Event | Description | +|------------------|-----------------------------------------------------------------------------| +| OnOpenForm | The script trigger On Open the Form (eg. On Open the Sales Invoice Form) | +| OnApply | The script trigger After Click Apply button (for Data Form) | +| OnBeforeOpen | The script trigger On Before the Form Open | +| OnAfterOpen | The script trigger On After the Form Open | +| OnNew | The script trigger after the build-in New Button action Execute | +| OnBeforeEdit | The script trigger before the build-in Edit Button action Execute | +| OnAfterEdit | The script trigger after the build-in Edit Button action Execute | +| OnBeforeDelete | The script trigger before the build-in Delete Button action Execute | +| OnAfterDelete | The script trigger after the build-in Delete Button action Execute | +| OnBeforeCancel | The script trigger before the build-in Cancel Button action Execute | +| OnAfterCancel | The script trigger after the build-in Cancel Button action Execute | +| OnBeforeSave | The script trigger before the build-in Save Button action Execute | +| OnAfterSave | The script trigger after the build-in Save Button action Execute | + +#### Example 1 - List Serial Number in Stock Physical Worksheet + +Below is Example are doing following actions + + - After apply **Stock Physical Worksheet** will auto Create New Tab + - List all the Serial Number in the new Grid + +**Level : Advance** + +![diy-script-stockphysicalworksheet](../../../static/img/usage/tools/tools-basic-guide/diy-script-stockphysicalworksheet.jpg) + +1. Right Click at Stock Physical Worksheet - Data Form + + ![new-script](../../../static/img/usage/tools/tools-basic-guide/new-script.jpg) + +2. Select New Script + + ![event-onapply](../../../static/img/usage/tools/tools-basic-guide/event-onapply.jpg) + +3. Select OnApply +4. Click OK button + + ![diy-script-template](../../../static/img/usage/tools/tools-basic-guide/diy-script-template.jpg) + +5. Click New Button + + ![script-stock-phy-worksheet](../../../static/img/usage/tools/tools-basic-guide/script-stock-phy-worksheet.jpg) + +6. Enter any description (eg Stock_Physical_Worksheet-DataForm-OnApply) in the Description field (Only Alphanumeric & no spacing) +7. Copy below script & paste to the Script Field + +
+ DataForm-OnApply Script + + ```sql + + uses Forms, Dialogs, DataProcessor, DBClient, cxGridDBTableView, cxGrid, cxGridLevel, + xQuery, Math, ComObj, SysUtils, DateUtils; + + var M, SN : TDataSet; + dsGrid : TDatasource; + FcxGrid : TcxGrid; + gvGrid : TcxGridDBTableView; + lTime : TDateTime; + cdsOutput : TClientDataset; + lDisplayFormat, S : String; + + procedure SetNumericDisplayFormat(AClientDataSet: TClientDataSet); + var f : TFMTBCDField; + f1 : TFloatField; + i : Integer; + DT : TFieldType; + begin + for i := 0 to AClientDataSet.FieldCount - 1 do begin + DT := AClientDataSet.FieldDefs.Items[i].DataType; + if DT = ftFMTBcd then begin + f := TFMTBCDField(AClientDataSet.Fields.Fields[i]); + if not (f = nil) then f.DisplayFormat := lDisplayFormat; + end; + if DT = ftFloat then begin + f1 := TFloatField(AClientDataSet.Fields.Fields[i]); + if not (f1 = nil) then f1.DisplayFormat := lDisplayFormat; + end; + end; + end; + + procedure PrepareNewTab; + begin + FcxGrid.RootLevelOptions.DetailTabsPosition := dtpTop; + gvGrid := FcxGrid.CreateView('TcxGridDBTableView') as TcxGridDBTableView; + with FcxGrid.Levels.Add do begin + Caption := 'Calc'; + GridView := TcxCustomGridView(gvGrid); + Active := True; + end; + + with gvGrid do begin + Name := 'Restricted_1'; + OptionsCustomize.ColumnFiltering := True; + OptionsView.ColumnAutoWidth := False; + OptionsView.Footer := True; + OptionsView.GroupByBox := False; + OptionsBehavior.IncSearch := True; + DataController.DataSource := dsGrid; + OptionsData.Editing := False; + end; + end; + + procedure TuneGrid; + var i : integer; + DT : TFieldType; + begin + SetNumericDisplayFormat(cdsOutput); + with gvGrid.DataController do begin + DataSource := dsGrid; + CreateAllItems(False); + end; + with gvGrid do begin + //Hide Columns + //GetColumnByFieldName('DtlKey').Visible := False; + //Rename Columns Caption + GetColumnByFieldName('ItemCode').Caption :='Item Code'; + end; + + with gvGrid.DataController.Summary do begin + BeginUpdate; + try + with TcxGridDBTableSummaryItem(FooterSummaryItems.Add) do begin + Column := gvGrid.Columns[0]; + Position := spFooter; + Kind := skCount; + Format := 'Count = #'; + end; + for i := 0 to cdsOutput.FieldDefs.Count-1 do begin + DT := cdsOutput.FieldDefs.Items[i].DataType; + if (DT = ftFMTBcd) or (DT = ftFloat) then begin + with TcxGridDBTableSummaryItem(FooterSummaryItems.Add) do begin + Column := gvGrid.Columns[i]; + Position := spFooter; + Kind := skSum; + Format := lDisplayFormat; + end; + end; + end; + finally + EndUpdate; + end; + end; + gvGrid.ApplyBestFit(nil, False, False); + end; + + procedure CreateXMLTable; + begin + if Assigned(cdsOutput) then + cdsOutput.Free; + cdsOutput := TClientDataSet.Create(FcxGrid); + cdsOutput.FieldDefs.Assign(SN.FieldDefs); + cdsOutput.CreateDataSet; + dsGrid.DataSet := cdsOutput; + end; + + procedure AppendData; + var i : integer; + begin + M.First; + while not M.Eof do begin + SN.DisableControls; + SN.First; + While not SN.Eof do begin + cdsOutput.Append; + for i:=0 to SN.FieldDefs.Count-1 do + cdsOutput.FindField(SN.FieldDefs.Items[i].Name).Value := SN.FindField(SN.FieldDefs.Items[i].Name).Value; + cdsOutput.Post; + SN.Next; + end; + SN.EnableControls; + M.Next; + end; + end; + + begin + M := Self_DataProcessor.GetDataSetByName('Main'); + SN := Self_DataProcessor.GetDataSetByName('SerialNumber'); + FcxGrid := TcxGrid(Self.FindComponent('cxGrid1')); + dsGrid := TDataSource.Create(M); + + lTime := now; + s := 'Stock Physical Worksheet'; + lDisplayFormat := '#,0.00;-#,0.00;-'; + + + try + Self.Caption := s + '- Prepare Tab'; + PrepareNewTab; + Self.Caption := s + '- Prepare XML'; + CreateXMLTable; + Self.Caption := s + '- Append Data'; + AppendData; + Self.Caption := s + '- Tuning Grid'; + TuneGrid; + finally + + lTime := Now - lTime; + Self.Caption := Format(s + ' - [Elapsed Time: %s ]',[FormatDateTime ('hh:nn:ss:zzz', lTime)]); + end; + end. + + ``` + +
+ +8. Click Save (the Blue Disc Icon) +9. Close the window. + + ![script-select-stkphyworksheet](../../../static/img/usage/tools/tools-basic-guide/script-select-stkphyworksheet.jpg) + +10. Select the Item just created (eg. Stock_Physical_Worksheet-DataForm-OnApply) +11. Click OK button + + ![diy-script-stkphyworksheet](../../../static/img/usage/tools/tools-basic-guide/diy-script-stkphyworksheet.jpg) + +12. Click Stock | Print Stock Physical Worksheet | Apply + +### Example 2 - Set Default Filtering for Sales + +Below is Example are doing following actions + +- Filter by Agent in Sales Profit & Loss By Document +- Disable Selection for Agent + +**Leve l : Basic** + +1. Right Click at **Sales Profit & Loss By Document - Param Form** +2. Select **New Script** +3. Select OnOpenForm +4. Click OK button +5. Click New Button +6. Enter any description (eg SL-PnL-ParamForm-OnOpen) in the Description field (Only Alphanumeric & no spacing) +7. Copy below script & paste to the Script Field + +
+ Param Form - OnOpenForm Script + + ```sql + + uses SysUtils, Dialogs, Forms; + + var C, D : TControl; + L: TStringList; + begin + C := Self.FindChildControl('edAgent_Panel') as TWinControl; + L := TStringList.Create; + try + if C <> nil then C.Enabled := False; // Disable Selection + C := TWinControl(C).FindChildControl('edAgent_Edit') as TWinControl; + L.Add('NF'); + L.Add('LF'); + (C as TControl).SetTextBuf(L.CommaText);//For Multi Records + // (C as TControl).SetTextBuf('LF');//For 1 record + finally + L.Free; + end; + end. + + ``` + +
+ +8. Click Save (the Blue Disc Icon) +9. Close the window. +10. Select the Item just created (eg. SL-PnL-ParamForm-OnOpen) +11. Click OK button +12. Click Sales | Print Profit & Loss By Document... + +### Example 3 - Drop Down List at Maintain User + +Below is Example are doing following actions + +- Create a drop down list of Project List at Maintain User for UDF_Project +**Level : Advance** + +1. Right Click at User - Entry Form +2. Select New Script +3. Select OnOpenForm +4. Click OK button +5. Click New Button +6. Enter any description (eg UserEntryForm-OnOpen) in the Description field (Only Alphanumeric & no spacing) +7. Copy below script & paste to the Script Field + +
+ Entry Form - OnOpen Script + + ```sql + uses Forms, StdCtrls, DBCtrls, Dialogs, ComObj, DBClient; + + Var edProject : TDBLookupComboBox; + btnCPassword : Tbutton; + M, dsList : TDataSource; + lbProject : TComponent; + C : TControl; + FComServer : Variant; + cdsList : TClientDataset; + + function ComServer: Variant; + begin + if FComServer = Null then begin + FComServer := CreateOleObject('SQLAcc.BizApp'); + end; + Result := FComServer; + end; + + procedure GetList; + var lSQL : String; + begin + FComServer := null; + cdsList := TClientDataset.Create(C); + lSQL := 'SELECT Code, Description FROM Project WHERE IsActive=''T'' '; + + try + cdsList.Data := ComServer.DBManager.Execute(lSQL); + dsList.Dataset := cdsList; + finally + FComServer := null; + end; + end; + + begin + M := TDataSource(Self.FindComponent('dsMain')); + C := Self.FindChildControl('lbName'); + dsList := TDataSource.Create(C); + GetList; + if Assigned(C) then begin + edProject := TDBLookupComboBox.Create(C); + lbProject := TLabel.Create(C); + + with TLabel(lbProject) do begin + Parent := C.Parent; + Caption := '&1. Project :'; + Left := 200; + Top := 68; + FocusControl := edProject; + end; + + with edProject do begin + Parent := C.Parent; + Top := 65; + Left := 260; + Width := 120; + Name := 'edProject'; + Datasource := M; + ListSource := dsList; + DataField :='UDF_Project'; + DropDownWidth := 500; + KeyField := 'Code'; + ListFieldIndex := 1; //Search By Description + ListField := 'Code;Description'; //Show 2 Column + end; + end; + end. + + ``` + +
+ +8. Click Save (the Blue Disc Icon) +9. Close the window. +10. Select the Item just created (eg. UserEntryForm-OnOpen) +11. Click OK button +12. Click Tools | Maintain User... + +## SQL Control Center + +*Menu: Tools | DIY | SQL Control Center...* + +### Create new field (DIY Fields Module) + +:::info DIY Fields +This is a paid module. +::: + +- This Additional Module(DIY Fields Module) where user can self Create new User Define Field(s) + +- Available Data Field Type + +| Field Type | Definition | +|------------|------------| +| String | Text data of a fixed length (up to 8192 bytes) | +| Boolean | A Boolean value. | +| Integer | Whole numbers in the range of long integers (32 bits). | +| Currency | Currency values with the same range as the Real data type (Max 4 decimal point). | +| Float | Real numbers with a fixed number of digits after the decimal point. | +| Date | A date value. | +| Picture | A Picture Value. | +| Memo | Text of arbitrary length. | + +- For Explanation for Each Data Type may refer to +[w3schools](http://www.w3schools.com/sql/sql_datatypes_general.asp) + +:::warning + +- Avoid use Picture data if can as it will cause your database size increase very fast. +- Only String data can increase the field size so plan properly before add the field. +- User can't change from 1 data type to another once it save. +- Avoid create too many UDF field as it will reduce system performance & take longer time to save 1 data entry. (Recommended Max is 30 UDF Fields) +- Avoid Create String data with too large size. (Recommended Max is 200) + +::: + +- User can create DIY Fields either at Header Fields or Item Fields +- In each Table had the below interface + +![table-sl-qt](../../../static/img/usage/tools/tools-basic-guide/table-sl-qt.jpg) + +| Name | Description | +|---------------|-------------| +| Name | Field name. Only alphanumeric, no spacing. | +| Data Type | Type of Field. | +| Size | The Field Size. Only applicable for Float, Integer & String Data Type. | +| Sub Size | The Field Sub Size (normally the decimal point). Only applicable for Float Data Type. | +| Caption | Field name to be shown at user interface. | +| Required | The current field MUST not be empty. | +| Default Value | Default value to insert on new record. | +| Display Format | Set display format for Float, Currency & Integer Data Type. | +| Load | Reload the script from the Database (only for DIY Script). | +| Load From File | Load Script/Fields from a text file. **Be careful**: system will delete existing field before loading. | +| Save | Save current Script/Field. Do not Delete, Rename & Insert at the same time (only for DIY Fields). | +| Save To File | Save current Script/Fields to a text file. | +| + Button | Add new field. | +| - Button | Delete selected field. | + +#### Header Fields + +Below is the example for Sales Invoice + +**Add New Fields** + + ![sales-invoice-new-field](../../../static/img/usage/tools/tools-basic-guide/sales-invoice-new-field.jpg) + +1. At the left panel look for **Sales Invoice | Header Fields** +2. Click the + Button on top to add New fields as above picture +3. Click Save button + +#### Design Layout + + They are 2 ways to creating the Layout for new fields added. + + ![new-event-](../../../static/img/usage/tools/tools-basic-guide/new-event-.jpg) + +### Advance Form Design + + This mode is only for the user who known how to use the Delphi. + + * **Pros** + + - Freely adjust & place the component. + + * **Cons** + + - Not Easy to design + - Not support Date & Picture Data Type + +1. Select **New Advance Form Design** + + ![new-adv-form-design](../../../static/img/usage/tools/tools-basic-guide/new-adv-form-design.jpg) + +2. Enter the name (eg Freight Info) this will shown in the Sales Invoice Data Entry +3. Click OK +4. Click the **Freight Info** (name create at **Step 3** above) on the left panel + + ![name-freight-info](../../../static/img/usage/tools/tools-basic-guide/name-freight-info.jpg) + + ![standard](../../../static/img/usage/tools/tools-basic-guide/standard.jpg) + + - This Standard component is just for Fixed labeling or decoration + + - The detail of each button can be refer to [delphibasics](http://www.delphibasics.co.uk/Article.asp?Name=Standard) + + ![data-controls](../../../static/img/usage/tools/tools-basic-guide/data-controls.jpg) + + - This Data Controls component is use for Variable data which can be use at Data Entry + + - Below is the detail of each button (From Left) + + | Component | Purpose | + |---------------|-------------------------------------------------------------------------| + | DBText | Data-aware label that can display a field from a currently active record. | + | DBEdit | Data-aware edit box that can display or edit a field from a currently active record. | + | DBMemo | Data-aware memo box that can display or edit text BLOB data from a currently active record. | + | DBImage | Data-aware image box that can display, cut, or paste bitmapped BLOB images to and from a currently active record. | + | DBListBox | Data-aware list box that can display values from a column in a table. | + | DBCheckBox | Data-aware check box that can display or edit a Boolean data field from a currently active record. | + | DBRichEdit | Data-aware Rich Text Editor that can display or edit text BLOB data from a currently active record. | + | cxDBSpinEdit | Data-aware edit box that can display or edit Integer or Float data from a currently active record. | + + :::success Normally we only use + **Standard** Tab component + + - Label - For Labeling each field + **Data Controls** Tab component + - DBEdit - For String Data + - DBRichEdit - For Memo Data + - cxDBSpinEdit - For Currency, Float or Integer Data + ::: + +5. Click the **Standard** Tab & select Label button place on thee right panel +6. In the **Object Inspector** look for + + - Caption & set to the Caption you like (eg Container Number) + - Font & set the Size to 12 or any size you prefer + + ![caption-and-font](../../../static/img/usage/tools/tools-basic-guide/caption-and-font.jpg) + +7. Click the **Data Controls** Tab & select DBEdit button place on thee right panel +8. In the **Object Inspector** look for + + - **DataField** & set to the UDF field name (normally is UDF_FieldName) (eg UDF_ContainerNo) + - **Font** & set the **Size** to 12 or any size you prefer + + ![datafield-font-size](../../../static/img/usage/tools/tools-basic-guide/datafield-font-size.jpg) + +9. Continue repeat Step 6 till Step 8 for rest of the UDF field. +10. Click Save button after done. + + - **Quick Form Design (Recommended)** + + - This mode is for the user who don't known how to use the Delphi. + + **Pros** + - Easy to Design + + **Cons** + - Unable to freely adjust & place the component. + - Not support Rich Text Editor. + +11. Select New Quick Form Design + + ![newquick-form-info-freight](../../../static/img/usage/tools/tools-basic-guide/newquick-form-info-freight.jpg) + +12. Enter the name (eg Freight Info) this will shown in the Sales Invoice Data Entry +13. Click OK +14. Click the **Freight Info** (name create at **Step 3** above) on the left panel + + ![container-num](../../../static/img/usage/tools/tools-basic-guide/container-num.jpg) + +15. Click Customise button. +16. Drag the UDF Field from the **Available Item** dialog box & drop to Right Panel +17. Continue repeat **Step 7** for rest of the UDF field. +18. Click Save button after done. + +**Item Fields** + There is no layout need to be design for Item Field UDF. You can drag out all the UDF field in the Field Chooser in the data Entry + +- **Add New Fields** + +1. At the left panel look for Sales Invoice | Item Fields +2. Click the + Button on top to add New fields as above picture +3. Click Save button + + ![right-click-descrp-field](../../../static/img/usage/tools/tools-basic-guide/right-click-descrp-field.jpg) + +4. Drag the UDF field from the Customization Dialog +5. Drop it the column you wanted to shown (eg In between Description Column & Qty Column) + +## DIY Authenticator + +*Tools | DIY | DIY Authenticator...* + +This function is use to **lock** the [Maintain DIY Module](#maintain-diy) so only **authorised person** allow to access. + +#### Requirements + +- Mobile Phone with Camera +- QR Reader Application +- Google Authenticator + +#### Setup + +1. Enter account name or use default name. This will be shown in Google Authenticator list. + + ![acc-name](../../../static/img/usage/tools/tools-basic-guide/acc-name.jpg) + +2. Enter a Access ID. This use by the system to pairing with the Google Authenticator. + + ![access-id](../../../static/img/usage/tools/tools-basic-guide/access-id.jpg) + +3. Select the Device you wanted to use to Scan with. + + ![device](../../../static/img/usage/tools/tools-basic-guide/device.jpg) + +4. Use the Google Authenticator to scan the QR barcode. +5. Enter the Code generated by the Google Authenticator. +6. Click Pair. + + ![authenticator](../../../static/img/usage/tools/tools-basic-guide/authenticator.jpg) + +7. System will prompt below dialog if successfully pairing. + + ![verification-code](../../../static/img/usage/tools/tools-basic-guide/verification-code.jpg) + +Each time user Click the [Maintain DIY](#maintain-diy) it will prompt below dialog for Verification Code. + + ![enter-verification-code](../../../static/img/usage/tools/tools-basic-guide/enter-verification-code.jpg) + +#### Remove Locking + +1. Click Tools | DIY | DIY Authenticator.... +2. Enter the Verification Code. + + ![enter-verification-code](../../../static/img/usage/tools/tools-basic-guide/enter-verification-code.jpg) + +3. System will prompt below option. +4. Click Remove Access ID. + + ![operation](../../../static/img/usage/tools/tools-basic-guide/operation.jpg) + + | **Option Name** | **Properties** | + |-----------------------|-----------------------------------------------| + | **Remove Access ID** | To permanently unlock the Maintain DIY | + | **Recover Access ID** | To retrieve the current Access ID | + | **Reset Access ID** | To recreate a new Access ID | + +5. System will prompt below dialog if successfully unlock + +![protection-removed](../../../static/img/usage/tools/tools-basic-guide/protection-removed.jpg) + +:::warning +Make sure you had keep few copy of QRCode as once you lost all we not able to retrieve back the Access ID +::: + +> More Customisations at [SQL Control Center](/usage/customisation/sqlControlCenter) \ No newline at end of file diff --git a/docs/usage/Tools/faq.md b/docs/usage/Tools/faq.md new file mode 100644 index 00000000..c28f56fd --- /dev/null +++ b/docs/usage/Tools/faq.md @@ -0,0 +1,277 @@ +--- +sidebar_position: 2 +title: Tools FAQ +description: Frequently Asked Questions in Tools +slug: /usage/tools/faq +tags: ["SQL Account", "Usage", "Tools","Currency","Module"] +--- + +## Can I set my first year financial period longer than 12 months (e.g., 18 months)? + +Yes. You can set your first financial period for more than 12 months (e.g., from 1st July 2014 to 31st December 2015). --> [learn more here](#set-first-year-account-more-than-12-months) + +## DIY Fields FAQ + +
+ DIY Fields FAQ - click to expand + +### Can I show the detail fields in Header? + +**Yes** , but with the following condition + +* Only available in Advance Form Design +* The Data will change/run base on the last selected Record in the Detail Grid + +1. Open the Form you want to Add (eg Sales | Sales Invoice) +2. Open the [Advance form](/usage/tools/guide#advance-form-design) +3. Design as usual except you need to select **DataSource** + + ![main-form](../../../static/img/usage/tools/tools-faq/main-form.jpg) + +4. Select the XXXXX.YYYYY.dsDocDetail + +### Can I have option selection for 1 UDF? + +**Yes** , using **Advance Form Design** + +Steps : + +1. Open the Form you want to Add (eg Sales | Sales Delivery Order) +2. Open The Advance form [Advance form](/usage/tools/guide#advance-form-design) +3. Design as usual for Label +4. For the UDF you wanted to have option + +![componentpalette-datacontrols](../../../static/img/usage/tools/tools-faq/componentpalette-datacontrols.jpg) + +
+ +## Set First Year Account more than 12 Months + +
+ Set First Year Account more than 12 Months - click to expand + +* This guideline is to guide how to setup your first year account if it is more than 12 month , below example given is first year account in 18 months. + +* First financial period will in 18 month from 1st July 2014 to 31st December 2015. + +:::warning CAUTION +You are advised to set your financial start period and system conversion date as below. +::: + +### Setup + +1. Go Tools > Option > General Ledger + + * Set your financial start period and system conversion date as 1/1/2014, so in the following year, you do not need to run year end to set again your financial start period & System conversion date. + + ![1](../../../static/img/usage/tools/tools-faq/1.png) + +2. Set profit & loss statement print in 18 months + + ![2](../../../static/img/usage/tools/tools-faq/2.png) + + 1. Right click as pointed + + 2. Select 640 x 480 to make your SQL Screen smaller + + 3. Highlight report name “this year-2column” click and drag it to desktop + ![3](../../../static/img/usage/tools/tools-faq/3.png) + + 4. From desktop click the report “This Year-2Column” drag it back to SQL report section. + + 5. Click ok + ![4](../../../static/img/usage/tools/tools-faq/4.png) + + 6. Double click on the new report name “ This year 2 column” in blue color. + + 7. Change Period Class to Fixed Date + + * Param 1 = Date from eg 1/7/2014 + * Param 2 = Date to eg 31/12/2015 + + 8. You can insert a report name for you easy to differentiate. + +
+ +## Advanced Currency Module + +
+ + Advanced Currency Module- click to expand + + :::info + This module is required if you use foreign banks. + + Related: [Payment from Foreign Customer](../../usage/tools/guide#maintain-currency) + ::: + +### Setup Foreign Currency Payment Method + +#### Steps + +1. GL > Maintain Account + + ![1](../../../static/img/usage/tools/tools-faq/1a.png) + +2. Create your bank respectively + + ![2](../../../static/img/usage/tools/tools-faq/2a.png) + +3. Tools > Maintain Payment Method + + ![3](../../../static/img/usage/tools/tools-faq/3a.png) + +
+ +:::success Advanced Currency Module FAQ + **How do I record transactions in a foreign bank account?** + + **Why can’t I receive payment from a foreign customer in their currency?** + + **How do I handle supplier payments in USD, EUR, etc.?** + + **Do I need to activate any module to use foreign currency in SQL Accounting?** + + **Why does my system show error when applying exchange rate in payment?** + +These questions goes to one solution , which is +[Advanced Currency Module](/usage/tools/faq#advanced-currency-module) +::: + +## Can I auto-post exchange gain/loss when using foreign banks? + +Yes, via [Advanced Currency](#advanced-currency-module) Module and [Gain/Loss setup](../../usage/tools/guide#payment-from-foreign-customer) + +**What is SQL Global Price Change and when should I use it?** → [SQL Global Price Change](/usage/tools/guide#sql-global-price-change) + +**Can I update prices for only specific stock groups or categories?** → [SQL Global Price Change by category](/usage/tools/guide#sql-global-price-change) + +## How to do Customer One Cent Rounding ? + +One Cent (0.01$) difference Rounding(Local Currency Fields) for all AR/SL(Subsidiary Ledger) Documents + +### Setup + +1. Go to Tools > Option > Customer + + ![1](../../../static/img/usage/tools/tools-faq/1c.png) + + 1. Tick One Cent Different Rounding (Local Currency Fields) for all /AR/SL Documents **(Recommend)** + + 2. Press OK + +2. Sales Invoice > New > Refer below screen + + ![2](../../../static/img/usage/tools/tools-faq/2c.png) + + :::caution + But once you save you will notice the first line of the Tax Amount will be different, this is because system + using Total Amount of IV to calculate 6%. Refer below Screen: + ::: + + ![3](../../../static/img/usage/tools/tools-faq/3c.png) + + Formula: Sum up SubTotal with Tax, Multiple with 6% **(Note : system will exclude the Subtotal if the Tax Rate is 0%)** + + Tax Amount Calc = RM 15.54 * 6% = 0.93, mostly system will reverse on first line of the Item. + + :::note + If you don’t want system to help you to do the One Cent Rounding, please refer **Step 1** to **un-tick** the option will do. + ::: + +## How to do Password Policy (with 2 Steps Verification) ? + +### Password Policy Setup + +Go to menu : **Tools > Options…** click on **Password Policy**. + + ![1](../../../static/img/usage/tools/tools-faq/1d.png) + + You can choose the following password requirements: + + * Maximum Password Age (days): number of days to **expire** and **change** password. + * Minimum Password Length: password length **cannot less** than the minimum,eg. 8. + * Save Password History (0-5): number of password history **not allow to re-use** + * Password combination of + * At least one Upper Case letter (A-Z) + * At least one Lower Case letter (a-z) + * At least one number (0-9) + * At least one non-alphanumeric character \!\$\%\^\&\*\(\)_\-\+\=\@\~\#\<\,\>\.\? + +## How to reset password for user ? + +1. Go to menu : **Tools > Maintain User**. + +2. Click on More (arrow key down), click **Reset Password**. + + ![2](../../../static/img/usage/tools/tools-faq/2d.png) + +3. New password auto generated. + + ![3](../../../static/img/usage/tools/tools-faq/3d.png) + +4. Press **Yes** (Copy password to clipboard = Tick). + +5. You can press **Ctrl + V** to paste the New Password into an email and send to the new user. + +## 2-Steps Verifications Login + +1. Go to menu : **File > 2-Steps Verification**. + + ![4](../../../static/img/usage/tools/tools-faq/4d.png) + +2. Enter your current password, press **Ok** to proceed. + +3. Choose an Authenticator device. + + ![5](../../../static/img/usage/tools/tools-faq/5d.png) + +4. Follow the instructions to install and setup the Authenticator on your hand-phone. + +5. Each time login, you will be required to enter the verification code generated by the Authenticator in your mobile phone. + + ![6](../../../static/img/usage/tools/tools-faq/6d.png) + +## How to set Running Document Number by Date/Year Format ? + +:::tip Sample: +**PV0615/001** is actually (**PVmmyy/001**) +::: + +### Steps and Instructions + + **Step 1** + +Tools > Maintain Document No + + **Step 2** + +Create New or amend from the existing + +![1](../../../static/img/usage/tools/tools-faq/1e.png) + + :::caution +make sure the format is follow the sample attached + ::: + + **Step 3** + +![2](../../../static/img/usage/tools/tools-faq/2e.png) + +![3](../../../static/img/usage/tools/tools-faq/3e.png) + +:::info +We can also set default running no at for default payment method +::: + + **Step 4** + +Go to tools > Maintain Payment Method + +![4](../../../static/img/usage/tools/tools-faq/4e.png) + +![5](../../../static/img/usage/tools/tools-faq/5e.png) + +:::info note +vice versa for Official Receipt +::: diff --git a/docs/usage/customer-supplier.md b/docs/usage/customer-supplier.md deleted file mode 100644 index aeac092e..00000000 --- a/docs/usage/customer-supplier.md +++ /dev/null @@ -1,191 +0,0 @@ ---- -sidebar_position: 5 -title: Customer & Supplier -description: Customer & supplier work flow -slug: /usage/customer-supplier -tags: ["SQL Account", "Usage", "Customer", "Supplier"] ---- - -## Customer Work Flow (AR) - -Example of **customer (AR)** process work flow aligned with SQL Account flow: - -![42](../../static/img/getting-started/user-guide/42.png) - -AR = Account Receivable - -## Customer Invoice - -### Customer Invoice vs Sales Invoice - -The difference between Customer Invoice and Sales Invoice: - -|**Customer Invoice**| **Sales Invoice**| -|---|---| -|shows only the accounts code and does not show Qty / Unit Price.| linked to the stock and account modules. Hence, we advise users who need to key in stock items to use Sales Invoice. Once the information in the Sales Invoice is updated, the information in the Customer Invoice will automatically be updated by the system.| - -![43](../../static/img/getting-started/user-guide/43.png) - -### Create a new Customer Invoice - - 1. **Customer** | **Customer Invoice** | **New** - - 2. Select **Customer Code** | insert transaction and amount. - - 3. **Save** - - ![44](../../static/img/getting-started/user-guide/44.png) - -## Customer Payment - -### Local Bank Payment - - :::info - Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=IjHX5ys846I&feature=youtu.be) - ::: - - 1. **Customer** | **Customer Payment** | **New** - - 2. Select your **Customer** - - 3. Select the **bank for your account and cheque no** if applicable - - 4. Key in the **customer payment amount** - - 5. **Tick the corresponding invoice/debit note to be knocked off** - - ![45](../../static/img/getting-started/user-guide/45.png) - -### Post Dated Cheque - - 1. Search for the payment that you want to edit, click on **Edit**, right click on Customer Payment, you will see **Set Posting Date** - - ![46](../../static/img/getting-started/user-guide/46.png) - - ![47](../../static/img/getting-started/user-guide/47.png) - -### Bounced Cheque - - 1. Search for the payment that you want to edit, click on **Edit**, right click on Customer Payment, you will see **Bounced Status** - - ![48](../../static/img/getting-started/user-guide/48.png) - - ![49](../../static/img/getting-started/user-guide/49.png) - - After bounced, system will auto revert the payment out, you can view your ledger. - - ![50](../../static/img/getting-started/user-guide/50.png) - -## Customer Credit Note - -If the situation involves return stock from customer, please do Sales Credit Note and knock off it in Customer Credit Note as below step. - -1. **Customer** | **Customer Credit Note** - -2. **Edit** | Click **Yes** - -3. **Knocked off accordingly**. - - ![51](../../static/img/getting-started/user-guide/51.png) - - If it does not involve with returned stock, e.g. discount given with - - 1. **Customer** | **Customer Credit Note** | **New CN** - - 2. **New** | Select **Customer** | Select **GL Account** | **Amount** - - 3. **Knocked off accordingly**. - - ![52](../../static/img/getting-started/user-guide/52.png) - -## Customer Refund - -You can use this document to refund a customer. You can knock off with Customer Payment or Credit Note which have unapplied amounts. - -1. **Customer** | **Customer Refund**. - -2. Choose the **Customer** | Select your **Payment Method** | **Enter your Refund Amount** - -3. **Knock off the payment or credit note and save**. - - ![54](../../static/img/getting-started/user-guide/54.png) - -## Customer Contra - -If you have a customer who is also a supplier, you may want to offset the outstanding customer and supplier invoices. This is known as a contra entry. You can offset the two invoices by using Customer Contra and Supplier Contra. This means that when you record the invoices as being paid, it will not affect your current bank account balance. - -**Scenario:** - -**If you have an outstanding sales invoice for RM200 and a purchase invoice for RM150 for the same customer or company, the actual amount owed to you is RM50 and the contra entry amount is RM150.** - -### Make sure you have a valid `Contra Account` - -1. Tools | Options - - ![1](../../static/img/customer/contra/1.png) - -2. General Ledger | make sure you had chosen a valid Contra Account - - ![2](../../static/img/customer/contra/2.png) - -### Contra Entry - - 1. Go Customer | Customer Contra - - ![3](../../static/img/customer/contra/3.png) - - 2. Press on NEW - - ![4](../../static/img/customer/contra/4.png) - - 2a. Select your Customer Code - - 2b. Enter your Contra Amount - - 2c. Knock off your Invoice - - 2d. Press on SAVE Button - - ![5](../../static/img/customer/contra/5.png) - - 3. System will auto generated a Contra Number, jot down the number and go **Supplier | Supplier Contra** to edit it. - - ![6](../../static/img/customer/contra/6.png) - - 4. Look for the Same Contra Number (refer step 2e), EDIT it. - - ![7](../../static/img/customer/contra/7.png) - - 4a. Select your Supplier - - 4b. Enter Contra Amount (Must be same as Customer Contra Amount) - - 4c. Knock off your Supplier Invoice - - 4d. Press on SAVE Button - - ![8](../../static/img/customer/contra/8.png) - -After you post the contra entry: - -- The outstanding amount on the sales invoice is RM50. - -- The purchase invoice is fully knock off. - -- When you receive the RM50, you can record this against the sales invoice using your normal Customer Payment entry. - -## Supplier Work Flow (AP) - -Example of **supplier (AP)** process work flow aligned with SQL Account flow: - -![60](../../static/img/getting-started/user-guide/59.png) - -AP = Account Payable - -**Supplier module** is the similar to **Customer Module**. - -You can apply the same steps from [Customer Invoice](#customer-invoice) → [Customer Contra](#customer-contra) for Supplier Module (Invoice, Payment, Credit Note, Refund, Contra). - -## Interbank GIRO (IBG) - -Refer to [Additional Module](../additional-module/interbank-giro.md) diff --git a/docs/usage/customization/_category_.json b/docs/usage/customization/_category_.json new file mode 100644 index 00000000..ba6d48e4 --- /dev/null +++ b/docs/usage/customization/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Customisation", + "position": 15, + "link": { + "type": "generated-index", + "description": "SQL Account Customisation" + } +} \ No newline at end of file diff --git a/docs/usage/customization/sql-control-center.md b/docs/usage/customization/sql-control-center.md new file mode 100644 index 00000000..04a14aa5 --- /dev/null +++ b/docs/usage/customization/sql-control-center.md @@ -0,0 +1,797 @@ +--- +title: SQL Control Center +description: Customisations in SQL Control Center +slug: /usage/customisation/sqlControlCenter +tags: ["SQL Account"] +--- + +## Shipping/Forwarding (S/F) + +This Customisation provides simple calculations for shipping/forwarding companies. + +[Sample Database](https://download.sql.com.my/customer/Fairy/ACC%20BK-%5bShipping%5d.zip) + +[YouTube video](https://www.youtube.com/watch?v=LPoz1h3hyvQ) + +### History New/Updates/Changes (S/F) + +14 May 2025 + +* Use Maintain Currency for Currency Symbol & Currency Rate for detail UDF +05 Feb 2016 + +* Fixed TaxInvoice-Fowarding2 batch print: tax summary mixed together. +* Fixed Quotation & Debit Note OnBeforeSave script sequence not correct. +04 Jan 2016 + +* Fixed TaxInvoice-Fowarding2 title missing the word "Tax". + +07 Dec 2015 + +Fixed Sales Local - Invoice Listing - Level 1: Ent column showed empty values when 0. +02 Nov 2015 + +* Fixed sequence error. +* Fixed TaxInvoice-Fowarding2 format: showed 'A' instead of the tax rate. + +20 Oct 2015 + +* Fixed Transfer document TaxAmt calculation when using UDF_ExRate \<> 1. +* Fixed partial transfer quantity TaxAmt calculation. + +19 Oct 2015 + +* Fixed upgrade to Version 721 error. +* Fixed Transfer document TaxAmt calculation. + +14 Oct 2015 + +* Fixed 0Sales Local - Invoice Listing - Level 1: margin not correct. +* Converted DocRef3 to UDF_EntCost for 0Sales Local - Invoice Listing - Level 1 Ent column. + +### Settings (S/F) + +#### Maintain User (S/F) + +*Menu: Tools | Maintain User...* + +Untick the "Access Right for Prompt Replace Unit Price Dialog" under the Group: Sales. + +### Steps (S/F) + +#### Invoice + +*Menu: Sales | Invoice...* + +![shipping-CustomerInvoice](../../../static/img/miscellaneous/sqlControlCenter/shipping-CustomerInvoice.jpg) + +1. Select Customer Code +2. Select Item Code +3. Enter the Cost incurred for the selected item code (for the Profit & Loss By Document report) +4. Enter Qty +5. Enter UnitPrice +6. Enter Exchange Rate (if have) +7. Click More tab to enter extra/others Information + +![invoice-More](../../../static/img/miscellaneous/sqlControlCenter/invoice-More.jpg) + +#### Profit & Loss By Document + +*Menu: Sales | Print Profit and Loss By Document...* + +![printProfit&LossByDoc](../../../static/img/miscellaneous/sqlControlCenter/printProfit&LossByDoc.png) + +1. Select Invoice Listing and date range. +2. Tick 'Group by Customer Code'. +3. Click Apply. +4. Press F6 to preview. +5. Select the report named '0Sales Local - Invoice Listing - Level 1'. +6. Click OK. + +## Bonus Point System (BPS) + +This Customisation is to calculate/maintain the Point/Bonus + +* Pros + - Able to set Claim Rate (i.e. 1 Point = How many RM eg 1 Point = RM0.01 so enter as 0.01) + - Able to set Point Rate by item code (i.e. RM1 = How many point eg RM1 = 1 so enter as 1) + - Point Rate can be calculate by Amount and/or Qty + - Able to Claim like Voucher as Discount + - Able to Claim Item + - Claim Point Rate can be change runtime + +* Cons + - Unable to handle the cancel & Delete Invoice - Manually deduct the point using Update Button on Extra DO + - If the customer no transaction within the month it unable to Generate Statement + - No Auto Deduct Expiry Point - manually deduct the point using Update Button on Extra DO + - Able to handle 2 decimal Point only + - Batch Insert no checking (i.e. User may over deduct the point) + - User had to manually Adjust for Opening after the Year End Purging had done. + +[Sample Database](https://www.sql.com.my/document/ACC%20BK-%5BBonusVoucherPoint%5D.zip) + +### History New/Updates/Changes (BPS) + +25 Dec 2015 + +* Enabled GST support. +* Added UnClaim Voucher Listing report. +* Added Bonus-Sales Invoice 7 (GST 2) report. +* Fixed Bonus Statement currency symbol issue. +* Removed auto 5-cent rounding script. + +### Modules required (BPS) + +* DIY Field +* DIY Script +* Invoice → DO +* Multiple Document Number Set + +### Settings (BPS) + +#### Maintain User (BPS) + +*Menu: Tools | Maintain User...* + +Untick the "Access Right for Prompt Replace Unit Price Dialog" under the Group: Sales. + +#### Maintain Item + +*Menu: Stock | Maintain Stock Item...* + +![stockItemClaimRate](../../../static/img/miscellaneous/sqlControlCenter/stockItemClaimRate.jpg) + +1. Create an item code for the voucher (example: Voucher — used for claims, e.g. 1 point = RM0.01). + + ![stockItemVoucherRate](../../../static/img/miscellaneous/sqlControlCenter/stockItemVoucherRate.jpg) + +2. For each item code enter the Voucher Rate (eg 0.5 point = RM 1) + +***Sales Invoice*** + +*Menu: Sales | Invoice...* + + This applicable also at Sales Debit Note, Sales Cash Sales & Sales Credit Note + +| **UDF Field** | **Description** | +|---------------------|---------------------------------------------------------------------------------| +| **UDF_VoucherNo** | Enter the Voucher Number (Extra DO DocNo). Amount will be based on the Extra DO DocAmt. Not applicable for Sales Credit Note. | +| **UDF_VoucherRate**| From Maintain Item. The user can still adjust the rate if needed. | +| **UDF_UseQty** | **Tick** → `UDF_Voucher = UDF_VoucherRate * Qty`. **UnTick** → `UDF_Voucher = UDF_VoucherRate * Amount`. | +| **UDF_Voucher** | `Total current item point`. | + +***Extra Delivery Order*** + +*Menu: Sales | Extra Delivery Order...* + + This is the center or Ledger for all Point IN & OUT. + +![extraDeliveryOrder](../../../static/img/miscellaneous/sqlControlCenter/extraDeliveryOrder.jpg) + +| **Field** | **Description** | +|------------------|---------------------------------------------------------------------------------| +| **DocNo** | `CRP-XXXXX` → Claim/Deduct Transactions Point. `VOC-XXXXX` → In/Add Transactions Point. | +| **DocNoEx** | Source document number from which this document is generated. | +| **DocRef1** | Indicates which `VOC-XXXXX` is used for Claim/Deduct Point. | +| **DocAmt** | Total point for each transaction. | +| **UDF_CRPoint** | **Tick** → Claim/Deduct Transactions Point. **UnTick** → In/Add Transactions Point. | + +### Steps (BPS) + +***Sales Invoice*** + +Below is an example of Sales Invoice with voucher claim. +*Menu: Sales | Invoice...* + +![utdPoint](../../../static/img/miscellaneous/sqlControlCenter/utdPoint.jpg) + +1. Enter all Information (eg Company Code, Date, ItemCode, etc) as norm for Normal Sales (i.e. Add Point). +2. Select itemcode Voucher. +3. Enter the Voucher Number. +4. Save. + +:::success If no Voucher is use (i.e. Just deduct/redeem either fully/partly by Point) + +* Just enter the UDF_VoucherRate as - (Negative Value) after enter the Negative UnitPrice +::: + +***Extra Delivery Order*** + +*Menu: Sales | Extra Delivery Order...* + +In here user can do adjustment for the point for each Customer. + +1. Click Update Button + + ![updateExtraDO](../../../static/img/miscellaneous/sqlControlCenter/updateExtraDO.jpg) + +2. Untick this if you wanted to Add the point +3. Enter the Point to Add/Reduce. +4. Click Post Button + +#### Extra Delivery Order Listing + +*Menu: Sales | Print Sales Document Listing...* + + Here is for user to print the Bonus Statement or UnClaim Voucher Listing report + +![bonusStatement](../../../static/img/miscellaneous/sqlControlCenter/bonusStatement.jpg) + +1. Select Extra Delivery Order Listing & Range Date +2. Tick Customer Code +3. Click Apply button +4. Press F6 to preview +5. Select report name Bonus Statement or UnClaim Voucher Listing +6. Click Ok button + +## Branch Control + +Branch Control Setting is done to prevent branch user from selecting Customer, Project, Stock Item or Location info that is not relevant to them. + +### Restricted for + +* Branch user only allows to select their own customer +* Preset default Agent, Project, Item Code, Location code for each branch user +* Reports only shows transactions issued by the branch user +* Filter reports only using information assigned to the branch user +* Generate accurate P&L, Stock Balance Report for branches + +### Modules Required (Branch Control) + +* DIY Field +* DIY Script + +## Branch Control Module Features + +### Project & Location + +* Authorising each branch users to have the accessibility to their respective branch, SQL will automatically assign transactions created by the user to a specific branch to prevent human mistakes. Account entries, stock warehouse will automatically be posted to the appropriate branch. + +![project&Location](../../../static/img/miscellaneous/sqlControlCenter/project&Location.png) + +### Customer List + +* The user can only select/access the customer information for the own branch and is not permitted to post transactions for any other branch. You can avoid information being shared to other branches at data entry staff’s level. + +![custList](../../../static/img/miscellaneous/sqlControlCenter/custList.png) + +### Agent / Area List + +* Automatically set the default agent/area code based on user login to ease the user's instead of requiring manual selection. + +![agent&Area](../../../static/img/miscellaneous/sqlControlCenter/agent&Area.png) + +### Stock Item List + +* The user only able to select the list of item code belong to their branch. + +![itemCode](../../../static/img/miscellaneous/sqlControlCenter/itemCode.png) + +### Payment Method + +* Restrict payment methods for each branch to prevent human error and posting to unnecessary accounts. + +![payMethods](../../../static/img/miscellaneous/sqlControlCenter/payMethods.png) + +### Reporting + +* Stay on top of your financial and operational transactions across all your branches with SQL. You can monitor all transactions happening in each branch. with this information, you can identify which branch is the most profitable and which branch that needs to monitor closely. + +![reporting](../../../static/img/miscellaneous/sqlControlCenter/reporting.png) + +### Profit & Loss Project + +* By consolidating headquarter accounts with branch accounts, SQL allows for the viewing of consolidated balance sheets, profit and loss accounts by authorised users to evaluate the company’s overall performance. Bosses are able to drill down to the transactions of each branch individually. + +![P&L-Project](../../../static/img/miscellaneous/sqlControlCenter/P&L-Project.png) + +## One Time Setting + +*Menu: Tools | Maintain User...* + +![branchControlSettings](../../../static/img/miscellaneous/sqlControlCenter/branchControlSettings.jpg) + +Here are the guidelines to set **Branch Control Setting** + +1. **MUST** Logon as **ADMIN** account +2. Choose for the sub account, e.g. Yuki agent account +3. Go to **Access Right for Branch Control** tab +4. Choose the **Branch Control Settings** tab you need + +### Sales + +1. Tick Lock Customer +2. If want filter customers by : + + | **Filter By** | **Number** | + |----------------------|------------| + | Area | 1 | + | Agent | 2 | + | Company Category | 3 | + + The setting can only function within the range of **1 to 3**. + +3. Enter the Area code for Area in Allowable List, you are allow to enter more than 1 area codes. +4. If want search customer by + +| **Search By** | **Number** | +|-------------------|------------| +| Code | 1 | +| Company Name | 2 | +| Company Name 2 | 3 | +| Currency Code | 4 | + +The setting can only function within the range of **1 to 4**. + +:::note E.g. +Tick the **Lock Customer** Option and filtered customer list by area, enter as 1 in Filter Customers by. Enter Area code such as KL, JB, and SG in the allowable list column. User prefer to search for Customer Code, enter as 1 if would like to search Customer Column. +::: + +![filterCustBy](../../../static/img/miscellaneous/sqlControlCenter/filterCustBy.jpg) + +### Purchase + +1. Tick Lock Supplier +2. If want filter suppliers by + + | **Filter By** | **Number** | + |-----------------------|------------| + | Area | 1 | + | Agent | 2 | + | Company Category | 3 | + + The setting can only function within the range of **1 to 3**. + +3. Enter the Agent code for Agent in **Allowable List**, you are allow to enter more than 1 agent codes. +4. If want search supplier by : + +| **Search By** | **Number** | +|-------------------|------------| +| Code | 1 | +| Company Name | 2 | +| Company Name 2 | 3 | +| Currency Code | 4 | + +The setting can only function within the range of **1 to 4**. + +:::note E.g. +Tick the Lock Supplier option and filter supplier list by agent, enter as 2 in Filter Suppliers by. Enter Agent code, such as YUKI, in the allowable list column, and user prefer to search for supplier code, enter as 1 in Search Supplier Column. +::: + +![filterSuppliersBy](../../../static/img/miscellaneous/sqlControlCenter/filterSuppliersBy.jpg) + +### Item Code + +1. Tick Lock Item Code +2. If want filter stock item by + + | **Filter By** | **Number** | + |----------------|------------| + | Stock Group | 1 | + | Category | 2 | + | Item Code | 3 | + + The setting can only function within the range of **1 to 3**. + +3. Enter the item code for Item Code in **Allowable Item Code**, you are allow to enter more than 1 item codes. +4. If want search item code by + +| **Search By** | **Number** | +|-----------------|------------| +| Item Code | 1 | +| Description | 2 | +| Description 2 | 3 | + +The setting can only function within the range of **1 to 3**. + +:::note E.g. +Tick the Lock Item Code option and filter by item code. Enter item codes, such as BOM-02/Red, ER/Lamp, and ISCT, in the column, and search for item descriptions by item code. +::: + +![lockItemCode](../../../static/img/miscellaneous/sqlControlCenter/lockItemCode.jpg) + +### General Setting + +1. Tick Lock Project if you need to lock the project code +2. Tick if want search by Project Code, unticked will search by Project Description. +3. Enter the code for Project Code in Allowable ... columns, you are allow to enter more than 1 codes for Project Code +4. Repeat Step 1 to Step 3 for the remaining settings. + +:::note E.g. +Tick the Lock Project option. Tick IsSearchProjectCode to allow searching by project code, and enter project codes, such as P1 and P2, in the column for search. +::: + +![lockProject](../../../static/img/miscellaneous/sqlControlCenter/lockProject.jpg) + +## Assignment : To Create the Unit Price Calculation + +* Create the DIY field such as UDF_mUnitPrice in Sales documents (eg. sales invoice) +* Purpose: User will key-in the base unit price to convert into new unit price based on the UOM rate in Maintain Stock Item. + +![udf-unit-price](../../../static/img/miscellaneous/sqlControlCenter/udf-unit-price.png) + +* Calculation for Unit Price := UDF_mUnitPrice x Rate + +**Steps :** + +### Insert DIY Field (Unit Price Calculation) + +1. Click Tools | DIY | SQL Control Center... +2. At the left panel look for Sales Invoice. +3. Point to Items Fields. +4. On the right panel, insert the DIY field as per the TABLE below. + + | Name | Data Type | Size | SubSize | Caption | Required | Default Value | Display Format | + |-------------|-----------|------|---------|---------------|----------------|---------------|------------------| + | mUnitPrice | Float | 10 | 2 | UDF_mUnitPrice| FALSE (Untick) | BLANK | #,0.00;-#,0.00 | + + ![item-fields-unit-price](../../../static/img/miscellaneous/sqlControlCenter/item-fields-unit-price.png) + +5. Click Save. +6. Update operation successful message. Click OK. +7. DONE + +### Insert DIY Script (Unit Price Calculation) + +1. Click Tools | DIY | SQL Control Center... +2. At the left panel look for Sales Invoice . +3. Right Click the Sales Invoice. + + ![new-event](../../../static/img/miscellaneous/sqlControlCenter/new-event.png) + +4. Select New Event. + + ![event-properties](../../../static/img/miscellaneous/sqlControlCenter/event-properties.png) + +5. Enter any name (eg Calc) in the Name field (Only Alphanumeric & no spacing). +6. Select OnGridColumnValueChanged for Event field. +7. Click OK. +8. Click the Calc (name create at Step 5 above) on the left panel. + + ![ongrid-column-value-changed](../../../static/img/miscellaneous/sqlControlCenter/ongrid-column-value-changed.png) + +9. Copy below script & paste to the Right Panel (Script Section). + + ```vb + begin + if SameText(EditingField, 'ItemCode')or + SameText(EditingField, 'UDF_mUnitPrice') then begin + DataSet.FindField('UnitPrice').AsFloat := + DataSet.FindField('Rate').AsFloat * DataSet.FindField('UDF_mUnitPrice').AsFloat; + + end; + end. + ``` + +10. Click Save button. + +:::warning +Avoid update the same existing field name Unit Price. You have to create different name ie. UDF_mUnitPrice. +::: + +### Result Test (Unit Price Calculation) + +1. Go to Stock | Maintain Stock Item... +2. Edit the item code ANT. +3. Insert additional UOM with different RATE, eg. 1 CARTON = 12 UNITS and 1 BOX = 60 UNITS. + + ![item-code-ant](../../../static/img/miscellaneous/sqlControlCenter/item-code-ant.png) + +4. Create new sales invoice from Sales | Invoice... +5. Call out the columns name UDF_mUnitPrice and Rate. + + ![columns-udf-rate](../../../static/img/miscellaneous/sqlControlCenter/columns-udf-rate.png) + +6. Insert and select the item code ANT. +7. Select the UOM to CARTON. Rate will be changed to 12. +8. Input the value into UDF_mUnitPrice. U/Price will be calculated from your DIY script formula (UDF_mUnitPrice x Rate). + +![input-values-for-udf](../../../static/img/miscellaneous/sqlControlCenter/input-values-for-udf.png) + +## Assignment : How to get the data from Master Table into entry form? + +* Create the DIY fields such as UDF_PCS, UDF_CTN in Maintain Stock Item; and +* UDF_Price in Sales Documents (eg. sales invoice). +* Purpose is: + + ```bash + + Get UDF_PCS & UDF_CTN from Maintain Item to Sales Invoice Detail UDF_Price + + If selected itemcode UOM is PCS then use UDF_PCS + if selected itemcode UOM is CTN then use UDF_CTN + if selected itemcode UOM not PCS or CTN then default is 1 + + ``` + +* Calculation for Unit Price := UDF_Price * UDF_Rate + +**Steps :** + +### Insert DIY Field (Master Data) + +1. Click Tools | DIY | SQL Control Center... +2. At the left panel look for Stock | Stock Item . +3. Point to Stock Items Fields. +4. On the right panel, insert the new field as per the table below. + + | Name | Data Type | Size | SubSize | Caption | Required | Default Value | Display Format | + |------|-----------|------|---------|-----------|----------------|---------------|----------------------| + | PCS | Float | 10 | 2 | UDF_PCS | FALSE (Untick) | BLANK | #,0.00;-#,0.00 | + | CTN | Float | 10 | 2 | UDF_CTN | FALSE (Untick) | BLANK | #,0.00;-#,0.00 | + + ![stock-item-fields](../../../static/img/miscellaneous/sqlControlCenter/stock-item-fields.png) + +5. Click Save. +6. Update operation successful message. Click OK. +7. Next... +8. At the left panel look for Sales | Sales Invoice. +9. Point to Items Fields. +10. On the right panel, insert the new field as per the table below. + + | Name | Data Type | Size | SubSize | Caption | Required | Default Value | Display Format | + |-------|-----------|------|---------|------------|----------------|---------------|----------------------| + | Price | Float | 10 | 2 | UDF_Price | FALSE (Untick) | BLANK | #,0.00;-#,0.00 | + | Rate | Float | 10 | 2 | UDF_Rate | FALSE (Untick) | BLANK | #,0.00;-#,0.00 | + + ![sales-salesinvoice-itemfields](../../../static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-itemfields.png) + +11. Click Save. +12. Update operation successful message. Click OK. +13. DONE. + +### Create Quick Form (Master Data) + +1. Click Tools | DIY | SQL Control Center... +2. At the left panel look for Stock | Stock Item . +3. Right click on te Stock Item. +4. Select New Quick Form Design. + + ![newquickformdesign](../../../static/img/miscellaneous/sqlControlCenter/newquickformdesign.png) + +5. Enter the new name as EXTRA. Click OK. + + ![new-name-quickformdesign](../../../static/img/miscellaneous/sqlControlCenter/new-name-quickformdesign.png) + +6. Click on the EXTRA follow by Customize button. +7. Drag the UDF_CTN adn UDF_PCS from right to the place marked X. See the screenshot below. + + ![stock-stockitem-newfield-will-be-here](../../../static/img/miscellaneous/sqlControlCenter/stock-stockitem-newfield-will-be-here.png) + +8. Both the UDF fields will be under the Root. Click CLOSE. + +9. Click SAVE. + + ![createquickform-save](../../../static/img/miscellaneous/sqlControlCenter/createquickform-save.png) + +10. DONE. + +### Insert DIY Script (Master Data) + +1. Click Tools | DIY | SQL Control Center... +2. At the left panel look for Sales Invoice . +3. Right Click the Sales Invoice. + + ![new-event-salesinvoice](../../../static/img/miscellaneous/sqlControlCenter/new-event-salesinvoice.png) + +4. Select New Event. + + ![event-properties-salesinvoice](../../../static/img/miscellaneous/sqlControlCenter/event-properties-salesinvoice.png) + +5. Enter any name (eg Calc) in the Name field (Only Alphanumeric & no spacing). +6. Select OnGridColumnValueChanged for Event field. +7. Click OK. +8. Click the Calc (name create at Step 5 above) on the left panel. + + ![sales-salesinvoice-ongrid](../../../static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-ongrid.png) + +9. Copy below script & paste to the Right Panel (Script Section). + + ```bash + var FComServer, lBizObj : Variant; + cdsData : TClientDataSet; + + function ComServer: Variant; + begin + if FComServer = Null then begin + FComServer := CreateOleObject('SQLAcc.BizApp'); + end; + Result := FComServer; + end; + + procedure GetStockInfo; + var lSQL, lCode : String; + begin + FComServer := null; + cdsData := TClientDataSet.Create(nil); // Create & preparing Component + try + lCode := Dataset.FindField('ItemCode').AsString; + lSQL := Format('SELECT UDF_PCS, UDF_CTN FROM ST_ITEM WHERE Code=%s',[QuotedStr(lCode)]); + + cdsData.Data := ComServer.DBManager.Execute(lSQL); + finally + lBizObj := null; + FComServer := null; + end; + end; + + begin + if SameText(EditingField, 'ItemCode') or + SameText(EditingField, 'UOM') or + SameText(EditingField, 'UDF_Rate') then begin + try + GetStockInfo; + if Dataset.FindField('UOM').AsString = 'PCS' then + Dataset.FindField('UDF_Price').AsFloat := cdsData.FindField('UDF_PCS').AsFloat else + if Dataset.FindField('UOM').AsString = 'CTN' then + Dataset.FindField('UDF_Price').AsFloat := cdsData.FindField('UDF_CTN').AsFloat else + Dataset.FindField('UDF_Price').AsFloat := 1; + + Dataset.FindField('UnitPrice').AsFloat := Dataset.FindField('UDF_Price').AsFloat * + Dataset.FindField('UDF_Rate').AsFloat; + finally + cdsData.Free; + end; + end; + end. + ``` + +10. Click Save button. + + :::warning + Avoid update the same existing field name Unit Price and "Rate". You have to create different name ie. UDF_Price and UDF_Rate. + ::: + +### Result Test (Master Data) + +1. Go to Stock | Maintain Stock Item... +2. Create a new item code called PEN. +3. Update the UOM tab. See the screenshot below. + + ![uomtab](../../../static/img/miscellaneous/sqlControlCenter/uomtab.png) + +4. Click on EXTRA tab. +5. Input the UDF_CTN and UDF_PCS value. + + ![extratab](../../../static/img/miscellaneous/sqlControlCenter/extratab.png) + +6. Create new sales invoice from Sales | Invoice... +7. Call out the columns name UDF_Price and UDF_Rate. + + ![udfprice-udfrate](../../../static/img/miscellaneous/sqlControlCenter/udfprice-udfrate.png) + +8. Insert and select the item code PEN. +9. Select the UOM to CTN. +10. UDF_Price will be changed to 50.00 (based on the UDF_CTN set for PEN). +11. Input the value into UDF_Rate. U/Price will be calculated from your DIY script formula (UDF_Price x UDF_Rate). + + ![valuesfor-udfprice-udfrate](../../../static/img/miscellaneous/sqlControlCenter/valuesfor-udfprice-udfrate.png) + +## Assignment : How to get Outstanding IV amount & show below the Browse button at Sales Invoice? + +* This assignment no need to create any DIY fields +* Purpose is to display the total outstanding balance for the customer selected at the Invoice + +**Steps :** + +### Insert DIY Script (Outstanding Amount) + +1. Click Tools | DIY | SQL Control Center... +2. At the left panel look for Sales Invoice . +3. Right Click the Sales Invoice. + + ![newevent-salesinvoice](../../../static/img/miscellaneous/sqlControlCenter/newevent-salesinvoice.png) + +4. Select New Event. + + ![name-event-new](../../../static/img/miscellaneous/sqlControlCenter/name-event-new.png) + +5. Enter any name (eg Calc) in the Name field (Only Alphanumeric & no spacing). +6. Select OnOpen for Event field. +7. Click OK. +8. Click the Calc (name create at Step 5 above) on the left panel. + + ![sales-salesinvoice-onopencalc](../../../static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-onopencalc.png) + +9. Copy below script & paste to the Right Panel (Script Section). + + ```bash + var FComServer, lBizObj : Variant; + C : TComponent; + T : TTimer; + M : TDataSource; + L1, L2 : TLabel; + cdsTemp : TClientDataset; + + function ComServer: Variant; + begin + if FComServer = Null then + FComServer := CreateOleObject('SQLAcc.BizApp'); + Result := FComServer; + end; + + procedure Setup; + begin + T := TTimer.Create(Self); + L1 := TLabel.Create(self); + L2 := TLabel.Create(self); + end; + + procedure DocInfo; + var lSQL, lDocNo : String; + begin + lDocNo := M.Dataset.FindField('DocNo').AsString; + + FComServer := null; + cdsTemp := TClientDataset.Create(nil); + lSQL := Format('SELECT (DocAmt - PaymentAmt) OS FROM AR_IV '+ + 'WHERE DocNo=%s ',[QuotedStr(lDocNo)]); + + try + cdsTemp.Data := ComServer.DBManager.Execute(lSQL); + finally + FComServer := null; + end; + end; + + procedure OnTimer(Sender: TObject); + var AState : TDataSetState; + begin + AState := M.DataSet.State; + if AState = dsBrowse then begin + DocInfo; + L2.Caption := ''; + try + L2.Caption := FormatCurr('#,0.00;-#,0.00', cdsTemp.FindField('OS').AsFloat); + finally + cdsTemp.Free; + end; + end; + end; + + begin + M := TDataSource(Self.FindComponent('dsDocMaster')); + C := Self.FindComponent('frDataSetButton1'); + + if Assigned(C) then begin + T.Enabled := True; + T.Interval := 1000; // = 1 sec + T.OnTimer := @OnTimer; + + with L1 do begin + Parent := TWinControl(C); + Width := 66; + Left := 6; + Top := 200; + Caption := 'Outstanding'; + Font.Color := clBlue; + Font.Style := [fsBold]; + end; + with L2 do begin + Parent := TWinControl(C); + Width := 66; + Left := 6; + Top := 215; + Caption := 'DocNo'; + Font.Color := clBlue; + Font.Style := [fsBold]; + end; + end; + end. + ``` + +10. Click Save button. + +### Result Test (Outstanding Amount) + +1. Create a new sales invoice, eg. Invoice Amount = Rm1060.00 + + ![new-salesinvoice-with-amount](../../../static/img/miscellaneous/sqlControlCenter/new-salesinvoice-with-amount.png) + +2. Make a payment amount = Rm636.00 and knock-off with the invoice created in step 01. + + ![payment](../../../static/img/miscellaneous/sqlControlCenter/payment.png) + +3. You can get the document outstanding balance (Rm1060.00 - Rm636.00 = Rm424.00) at Sales Invoice. + + ![outstanding-balance-sales-invoice](../../../static/img/miscellaneous/sqlControlCenter/outstanding-balance-sales-invoice.png) diff --git a/docs/usage/first-time-setup.md b/docs/usage/first-time-setup.md index 3c2b682a..b118487c 100644 --- a/docs/usage/first-time-setup.md +++ b/docs/usage/first-time-setup.md @@ -9,25 +9,25 @@ tags: ["SQL Account", "Usage", "Setup"] ## Financial Period & System Conversion Date :::info -Watch tutorial video here : [Youtube](https://www.youtube.com/watch?v=yH8VfNGjEr0&feature=youtu.be) +Watch the tutorial video here: [YouTube](https://www.youtube.com/watch?v=yH8VfNGjEr0&feature=youtu.be) ::: 1. **Tools** | **Options** - ![2](../../static/img/getting-started/user-guide/2.png) + ![tools-options](../../static/img/usage/first-time-setup/tools-options.png) - :::note - Once you have set up your Financial Start Period & System Conversion Date, it is not possible to change it again. This configuration can only be set once during the creation of a new database. - ::: + :::note + Once you have set up your Financial Start Period and System Conversion Date, it is not possible to change them later. This configuration can only be set once when creating a new database. + ::: 2. Select **General Ledger** 3. Select **Financial Start Period & System Conversion Date** - ![3](../../static/img/getting-started/user-guide/3.png) + ![options-gl](../../static/img/usage/first-time-setup/options-gl.png) :::note Scenario 1 - My financial period starts on 1st January every year, I start using SQL from 1/1/2015. + My financial period starts on 1 January every year. I started using SQL on 1/1/2015. **Financial Start Period** = 1/1/2015 @@ -35,7 +35,7 @@ Watch tutorial video here : [Youtube](https://www.youtube.com/watch?v=yH8VfNGjEr ::: :::note Scenario 2 - My financial period starts on 1st January every year, I start using SQL from 1/4/2015. + My financial period starts on 1 January every year. I started using SQL on 1/4/2015. **Financial Start Period** = 1/1/2015 @@ -46,52 +46,52 @@ Watch tutorial video here : [Youtube](https://www.youtube.com/watch?v=yH8VfNGjEr ### Activate SST -1. In SQL Account, click on the menu **SST/GST** -> **Start SST now...** +1. In SQL Account, click the menu **SST/GST** → **Start SST now...** - ![1](../../static/img/start-sst/1.png) + ![start-sst-1](../../static/img/usage/first-time-setup/start-sst-1.png) -2. For the country, select **Malaysia**, and click Next +2. Select **Malaysia** as the country, then click **Next**. - ![2](../../static/img/start-sst/2.png) + ![start-sst-2](../../static/img/usage/first-time-setup/start-sst-2.png) 3. Fill in **SST Effective Date** -4. Tick **I have SST registered number** if you have a valid SST registration number from the government (skip to *Step 6* if you don't have one) +4. Tick **I have an SST registration number** if you have a valid SST registration number from the government (skip to *Step 6* if you don't). - ![3](../../static/img/start-sst/3.png) + ![start-sst-3](../../static/img/usage/first-time-setup/start-sst-3.png) -5. Fill in your **Sales Tax No** and **Service Tax No** (These details will be auto updated in your company profile) +5. Fill in your **Sales Tax No** and **Service Tax No**. These details will be auto-updated in your company profile. - ![4](../../static/img/start-sst/4.png) + ![start-sst-4](../../static/img/usage/first-time-setup/start-sst-4.png) -6. In the next step, click Next to auto generate **SST GL Account** +6. In the next step, click **Next** to auto-generate the **SST GL Account**. - ![5](../../static/img/start-sst/5.png) + ![start-sst-5](../../static/img/usage/first-time-setup/start-sst-5.png) 7. In the following screen, you can preset your tax code for billing (Sales Tax, Service Tax, Sales Tax Exempted, etc.) - ![6](../../static/img/start-sst/6.png) + ![start-sst-6](../../static/img/usage/first-time-setup/start-sst-6.png) -8. System will prompt to re-login, and you are good to go +8. The system will prompt you to log in again; after that, you're ready to go. -9. After log-in, you will see a new drop down list for SST Functions, the SST setup is now completed. +9. After logging in, you will see a new drop-down list for SST functions. The SST setup is now complete. ### Maintain Tariff Go to **Tools** | **Maintain tariff** | **New** -Insert your product tariff code here, you can also find out your product tariff code from Malaysia Custom [JKDM HS Explorer](https://ezhs.customs.gov.my/) +Insert your product tariff code here. You can also look up your product tariff code using the Malaysia Customs [JKDM HS Explorer](https://ezhs.customs.gov.my/) -![11](../../static/img/getting-started/user-guide/11.png) +![maintain-tarrif](../../static/img/usage/first-time-setup/maintain-tarrif.png) ## Company Profile -1. Go To **File** | **Company Profile** +1. Go to **File** | **Company Profile** - Fill in your company particulars and if this company is subject to both sales and service tax, fill in the Sales Tax number / Service Tax number. + Fill in your company particulars. If the company is subject to both sales and service tax, enter the Sales Tax and Service Tax numbers. - ![12](../../static/img/getting-started/user-guide/12.png) + ![company-profile-sst](../../static/img/usage/first-time-setup/company-profile-sst.png) 2. Select **Report Header** & **Set Report Header** - ![13](../../static/img/getting-started/user-guide/13.png) + ![company-profile-header](../../static/img/usage/first-time-setup/company-profile-header.png) diff --git a/docs/usage/general-ledger.md b/docs/usage/general-ledger.md deleted file mode 100644 index 357cf097..00000000 --- a/docs/usage/general-ledger.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -sidebar_position: 6 -title: General Ledger -description: General Ledger management -slug: /usage/general-ledger -tags: ["SQL Account", "Usage", "General Ledger", "GL"] ---- - -## Opening Balance - -:::info -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=43y_4awgSlA&feature=youtu.be) -::: - -### General Ledger - - 1. **GL** > **Maintain Opening Balance** - - 2. Highlight the account that you wish to key in as opening balance, and click **Edit**. - - 3. **Insert the figure in local Dr or local Cr**. Then **Save**. - - 4. **Make sure the Dr and Cr figures tally** - - ![61](../../static/img/getting-started/user-guide/60.png) - -### Customer and Supplier - - 1. Customer(Supplier) > **New** - - 2. Set the **Date** (before system conversion date) - - 3. Key in only the **outstanding amount**. - - 4. The words “Past Invoice” must appear; (they will not appear if the inserted date is after system conversion date) - - 5. Click **Save**. - - ![62](../../static/img/getting-started/user-guide/61.png) - -### Stock Value - - 1. **GL** > **Maintain Stock Value** > **Edit** - - 2. Set the year - - 3. **Insert the Opening Balance** - - ![63](../../static/img/getting-started/user-guide/62.png) - - ![63b](../../static/img/getting-started/user-guide/62b.png) - -### Bank Reconciliation - -:::info -For further info about bank reconciliation, refer to [Bank Recon](../faq/general-ledger/bank-recon.md) and [Auto Bank Recon](../faq/general-ledger/auto-recon.md). -::: - - 1. **GL** > **Bank Reconciliation** > **New** - - 2. **Right click, to see Opening Bank Reconciliation** - - 3. **Set the Date** (before System Conversion Date) - - ![64](../../static/img/getting-started/user-guide/63.png) - -## Journal Entry - -:::info -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=WHzNMsCmFHg&feature=youtu.be) -::: - -1. **GL** > **Journal Entry** - -2. **Key in your double entry** - -3. Click on **Save** (System will blocked in Dr and Cr are not tally) - - ![65](../../static/img/getting-started/user-guide/64.png) - -## Cash Book Entry - -:::info -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=rh0L-Kol1ts&feature=youtu.be) -::: - -Cash book entry is normally used for a non-customer/ supplier payment or receipt e.g. payment for salaries, utilities etc. - -1. **GL** > **Cash Book Entry** > **New** (choose between Payment Voucher or Official Receipt) - - ![66](../../static/img/getting-started/user-guide/65.png) - -2. **Insert Payable Name** > Select **GL Code > Tax > Amount** - - ![67](../../static/img/getting-started/user-guide/66.png) diff --git a/docs/usage/general-ledger/_category_.json b/docs/usage/general-ledger/_category_.json new file mode 100644 index 00000000..1bce2ed8 --- /dev/null +++ b/docs/usage/general-ledger/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "General Ledger", + "position": 3, + "link": { + "type": "generated-index", + "description": "SQL Account GL Guide" + } +} \ No newline at end of file diff --git a/docs/usage/general-ledger/faq.md b/docs/usage/general-ledger/faq.md new file mode 100644 index 00000000..24762063 --- /dev/null +++ b/docs/usage/general-ledger/faq.md @@ -0,0 +1,681 @@ +--- +sidebar_position: 3 +title: FAQ +description: General Ledger FAQ Info +slug: /usage/general-ledger/faq +tags: ["SQL Account", "Usage"] +--- + +## Trial balance not tally in YTD(Year To Date) + +**Issue:** + +Year To Date DR and CR not balanced in Trial Balance because Retained Earnings account is missing. + +![1](../../../static/img/usage/general-ledger/glfaq/tb-not-balance-iss.png) + +**Solution:** + +1. Go to **GL** | **Maintain Account**... +2. Restore the Retained Earning Account by drag and drop into Retained Earning group (original). + + ![2](../../../static/img/usage/general-ledger/glfaq/tb-not-balance-sol.png) + +3. Apply the Trial Balance again. +4. Retained Earning Account has restored to Trial Balance, Year To Date DR and CR are now balanced. + +## How to make the foreign bank account record as USD + +**Issue:** + +I cannot key in the foreign bank transactions in USD. + +![3](../../../static/img/usage/general-ledger/glfaq/fb-usd-iss.png) + +**Solution:** + +Please make sure you have the following add-on modules: + +- Multi-Currency (allow to add more currency code, eg. USD, SGD, etc) +- Advance Currency (allow bank account to select foreign currency) + +1. Go to Tools | Maintain Payment Method... +2. Edit the Foreign Bank Account. +3. Change the currency to USD. + + ![4](../../../static/img/usage/general-ledger/glfaq/fb-usd-sol1.png) + +4. The foreign bank account will now be valued in USD. See example in Supplier Payment. + +![5](../../../static/img/usage/general-ledger/glfaq/fb-usd-sol2.png) + +## Accumulated Depreciation for Fixed Asset + +### Record accumulated depreciation for fixed asset + +1. **GL > Journal Entry > New** + +2. Key in the double entry for recording accumulated depreciation. + + :::info + e.g.: Record the depreciation of motor vehicle in year 2015 + Debit Depreciation Expenses RM1000 + Credit Accumulated Depreciation of Motor Vehicle RM1000 + ::: + +3. Save + + ![6](../../../static/img/usage/general-ledger/glfaq/dep-fixed-asset-step1.png) + +### For The Next Year + +1. **GL > Journal Entry**. Open the journal entry of depreciation in year 2015. + +2. Right click on empty space, refer picture , **Copy Journal Entry**. + + ![7](../../../static/img/usage/general-ledger/glfaq/dep-fixed-asset-step2.png) + +3. **New** + +4. Right click on empty space, refer picture, **Paste Journal Entry**. + ![8](../../../static/img/usage/general-ledger/glfaq/dep-fixed-asset-step3.png) + +5. Edit the journal entry by changing the date, description and amount. + + ![9](../../../static/img/usage/general-ledger/glfaq/dep-fixed-asset-step4.png) + +6. **Save**. + +## Auto Maintain Stock Value with Project Setup + +:::caution + +Required SQL Account version 839 and above. + +::: + +### Step 1: Turn on Auto Post GL Stock Value Option + +1. Click on **Tools**. + +2. Click on **Option**. + + ![10](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/1.png) + +3. Click on **Miscellaneous**. + +4. Tick on **Auto Post GL Stock Value**. + + ![11](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/2.png) + +### Step 2: Map Balance Sheet Stock Account in Maintain Stock Group + +1. Click on **Stock**. + +2. Click on **Maintain Stock Group**. + + ![12](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/3.png) + +3. Click on **Edit**. + +4. **Choose** the Account Code for your Stock Value Posting. + +5. Click on **Save**. + + ![13](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/4.png) + + :::note + Ensure that all Stock Groups are mapped to the **Balance Sheet Account Code (A)**. + ::: + + ![14](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/5.png) + +### Step 3: Map Project Code in Maintain Location + +1. Click on **Stock**. + +2. Click on **Maintain Location**. + + ![15](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/6.png) + +3. Click on **Edit**. + +4. You can set your stock project for each location. + +5. **Save**. + + ![16](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/7.png) + + :::info + Ensure that all Location are mapped to the **Project Code (A)**. + + ![17](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/8.png) + + :::info + Note : May ignore this step if you have **only 1** Project. + ::: + +### Step 4: Maintain Stock Month End, to show the total Stock Value for default project and P1 + +:::info Example A +Project Code : ---- + +Closing Stock : 308534.22 +::: + +![18](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/9.png) + +:::info Example B +Project Code : P1 + +Closing Stock : 3560.00 +::: + +![19](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/10.png) + +### Step 5: Apply Financial Report will auto update Stock value + +:::note +When you apply **Profit & Loss Statement, Balance Sheet or Trial Balance Report**, +system will automatically retrieve the Stock value from Stock Month End +Balance and present it in financial report. Additionally, the system will update +closing Stock value to **Maintain Stock Value**. +::: + +1. This is a sample of a Balance Sheet Statement report to show a **Closing Stock Value**. + + ![20](../../../static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/11.png) + +:::info +Note : When Fall Outside Maintain Acceptable Trans Date range, the system will no longer retrieve the Stock +Value from the Stock Month End Balance and will silently bypass the update. +::: + +## Auto Post Stock Month End Value Setup + +:::warning +Require SQL Account version 748 & above. +::: + +This feature allows the system to automatically post the stock value from Maintain Month End value to GL Maintain Stock Value. + +### Step 1: Stock > Maintain Stock Group + +![21](../../../static/img/usage/general-ledger/glfaq/auto-post-stock-month-end-value/1.png) + +### Step 2: Stock > Print Stock Month End Balance Report + +![22](../../../static/img/usage/general-ledger/glfaq/auto-post-stock-month-end-value/2.png) + +:::info Note : +Required to fill in the Balance Sheet Account in the Stock Group to update GL Stock Value. +::: + +### Step 3: GL > Maintain Stock Value + +![23](../../../static/img/usage/general-ledger/glfaq/auto-post-stock-month-end-value/3.png) + +## Auto Bank Reconciliation Example + +### Step 1: In SQL General Ledger, go to **Bank Reconciliation** -> **Create New** + +1. Select the **Bank Statement Date**. + +2. Select the **Account**. + +3. Tick **“Show Current Recon Transactions”**. + +4. Click **Apply**. + + ![24](../../../static/img/usage/general-ledger/glfaq/auto-recon/1.png) + +5. Click **Load Statement**. + + ![25](../../../static/img/usage/general-ledger/glfaq/auto-recon/2.png) + +6. Select your **Bank Statement (PDF / CSV)**. + + ![26](../../../static/img/usage/general-ledger/glfaq/auto-recon/3.png) + +7. System loading... + + ![27](../../../static/img/usage/general-ledger/glfaq/auto-recon/4.png) + +8. System will detect the Name of your Bank and prompt message below, Click **Yes** if it is **correct**. + + ![28](../../../static/img/usage/general-ledger/glfaq/auto-recon/5.png) + +9. Once you have loaded in your bank statement, bank closing amount will be automatically filled. + + ![29](../../../static/img/usage/general-ledger/glfaq/auto-recon/6.png) + + :::info + Criteria to Match: + + 1. Cheque number + Amount + + 2. Description + Amount + ::: + +10. System will automatically match the transactions with the bank statement and automatically tick them. **(yellow highlighted)**. + + But some transactions may not be able to auto match **[red box]** + + ![30](../../../static/img/usage/general-ledger/glfaq/auto-recon/7.png) + +### Step 2: Step to match on unmatched transactions with bank statement + +1. Click on the untick transaction. + + At the bottom, search for **SAME DR/CR AMOUNT**, you will find that is a **“Match”** button or few “Match” button…(if there are few same amount, eg. 50.00) + + ![31](../../../static/img/usage/general-ledger/glfaq/auto-recon/8.png) + +2. Click on **“Match”** when this is the correct bank transactions for **[Salary for Ali]**. + + ![32](../../../static/img/usage/general-ledger/glfaq/auto-recon/9.png) + + After click “Match”, system will auto tick the transactions and show the date and bank description at Bank Statement (Match) Column + +## Bank Reconciliation Example + +:::note +For Opening Bank Reconciliation, you may refer this [Guide](../../usage/general-ledger/guide.md#bank-reconciliation). +::: + +A bank reconciliation is a process performed by a company to ensure that the company's records +(check register, **general ledger account**, **balance sheet**, etc.) are tally with bank's records. + +### Reconciliation Bank Transaction + + GL | Bank Reconciliation + ![33](../../../static/img/usage/general-ledger/glfaq/bank-recon/1.png) + + ![34](../../../static/img/usage/general-ledger/glfaq/bank-recon/2.png) + +### Bank Reconciliation + +- Select the Bank Statement Date +- Select the Bank Account, e.g. Hong Leong Bank +- Display Period (normally the date from period will be BLANK, and date to will be same as per Bank Statement Date) +- Check(√) Show Unticked Transaction +- Check(√) Show Current Recon Transaction +- Check (√) Merge Bank Charges +- Click Apply +- You may tick the bank transaction reconcile with the transaction show in Bank Statement and save + + ![35](../../../static/img/usage/general-ledger/glfaq/bank-recon/3.png) + + ![36](../../../static/img/usage/general-ledger/glfaq/bank-recon/4.png) + + As attached bank statement is the sample, compare with the transaction, if exist then you may check as sample picture above. + +### Print Bank Reconciliation Report + +After reconciliation done, you can save and preview reconciliation report. + +![37](../../../static/img/usage/general-ledger/glfaq/bank-recon/5.png) + +:::note +You can press F6 button for preview report. +::: + +## How to Calculate P&L Percentage + +![38](../../../static/img/usage/general-ledger/glfaq/cal-p&l-percent/1.png) + +:::note +Formula : +Account Amount / Total Sales * 100 +::: + +### Example + +#### How to get A % = 62.1 ? + +- Using Sales / Total Sales \* 100 = 184,119.49/ 296,502.11 \* 100 = 62.1% + +#### How to get C % = 2.5 ? + +- Using Purchase / Total Sales \* 100 = 7,406.8 / 296,502.11 \* 100 = 2.5 % + +#### How to get D % = 95 ? + +- Using Gross Profit / Total Sales \* 100 = 281,662.21 / 296,502.11 \* 100 = 95% + +#### How to get E % = 3.4? + +- Using Expenses value / Total Sales \* 100= 10,000/296,502.11 \* 100 = 3.4% + +#### How to get F % = 91.7 ? + +- Using Net Profit / Total Sales \* 100 = 271,805.66 /296,502.11 \* 100 = 91.7% + +:::info + +% will round to nearest 1 Decimal Point. + +::: + +## Foreign Bank Adjustment + +1. Go to **GL** > **Foreign Bank Adjustment** > Create **New** > Click **Bank Revalue**. + + ![39](../../../static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/1.png) + +2. In Revalue windows > Select **Bank Account Code & Date**. + + ![40](../../../static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/2.png) + +3. Balance USD & local amount are shown as per ledger report. + + ![41](../../../static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/3.png) + +4. Enter the Revalue to currency rate, system will auto recalculate the: + + - **New local balance amount** + - **Gain/Loss Amount** + + ![42](../../../static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/4.png) + +5. Click **OK** + + ![43](../../../static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/5.png) + +6. System will auto post the double entries + + ![44](../../../static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/6.png) + +7. Click **Save** + +8. Please check the ledger for the adjustment post. + +## Maintain Budget + +### Budget Setting + +1. Click on **General Ledger**. + +2. Click on **Maintain Budget**. + + ![45](../../../static/img/usage/general-ledger/glfaq/maintain-budget/1.png) + +3. Select the year you want to set the budget. + +4. Choose your project code for budgeting, or select 'Non Project' if applicable. + +5. Click **Edit**. + +6. Enter monthly budget amounts to update quarterly, half-yearly, and yearly budgets automatically. + +7. Enter your budget by account code. + +8. Click **Save**. + + ![46](../../../static/img/usage/general-ledger/glfaq/maintain-budget/2.png) + +### Profit & Loss Statement with Budget Report + +1. This Month vs Month Budget - This Year vs Year Budget. + +2. This Month vs Month Budget. + +3. This Year vs Last Year Budget. + + This is a sample of a Profit & Loss Statement report comparing. **This Month vs. Monthly Budget** and **This Year vs. Yearly Budget** + + A : Month to date Vs Monthly Budget + + B : Year to date Vs Yearly Budget + + ![47](../../../static/img/usage/general-ledger/glfaq/maintain-budget/3.png) + +### Balance Sheet Statement with Budget Report + +1. This Month vs Month Budget - This Year vs Year Budget. + +2. This Month vs Month Budget. + +3. This Year vs Last Year Budget. + + This is a sample of a Balance Sheet Statement report comparing **This Month vs. Monthly Budget** and **This Year vs. Yearly Budget** + + C : Month to date Vs Monthly Budget + + D : Year to date Vs Yearly Budget + + ![48](../../../static/img/usage/general-ledger/glfaq/maintain-budget/4.png) + +## P&L Statement more than 12 months + +1. **GL** > **Print Profit & Loss Statement**. + + ![49](../../../static/img/usage/general-ledger/glfaq/p&l-more-than-12/1.png) + +2. Right Click on **SQL Icon** > go **800 x 600** to smaller SQL Screen. + + ![50](../../../static/img/usage/general-ledger/glfaq/p&l-more-than-12/2.png) + +3. Click on the report name **This Year - 2 Column** > click and drag it to desktop. + + ![51](../../../static/img/usage/general-ledger/glfaq/p&l-more-than-12/3.png) + +4. Click on the report from desktop and drag it back into SQL. + + ![52](../../../static/img/usage/general-ledger/glfaq/p&l-more-than-12/4.png) + +5. After drag in will prompt dialog above > click on **OK**. + + ![53](../../../static/img/usage/general-ledger/glfaq/p&l-more-than-12/5.png) + +6. Double click on the report name **This Year - 2 Column** *(in blue colour font)*. + + ![54](../../../static/img/usage/general-ledger/glfaq/p&l-more-than-12/6.png) + + 1. You can enter a report name. + + 2. Change the period class to **Fixed Date**. + + 3. **Param 1** : Date **From**. + + **Param 2** : Date **To**. + + 4. Click on **OK**. + + ![55](../../../static/img/usage/general-ledger/glfaq/p&l-more-than-12/7.png) + +:::info +Apply the report as usual, the result will captured based on Param 1 & 2 set. + +Repeat the same step on GL > Print Balance Sheet Statement +::: + +## P&L Statement with Appropriation + +1. **GL** > **Maintain Account**. + + ![56](../../../static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/1.png) + + 1. Click on Appropriation Account. + + 2. Click on **New**. + + ![57](../../../static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/2.png) + + 3. Insert **GL Code** and **GL Description** > After Done Press **OK**. + +2. **GL** > **Journal Entry** > Create **New**. + + ![58](../../../static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/3.png) + + e.g: Dr Dividend 2,000 Cr Bank 2,000 + +3. GL > Print P&L Statement. + + 1. Select the **Date**. + + 2. Select **P&L Report format : This Year – 2 Column**. + + 3. **Apply**. + + ![59](../../../static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/4.png) + + 4. Click on **Preview**. + + ![60](../../../static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/5.png) + + ![61](../../../static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/6.png) + +## General Ledger Report Ref1(DocNo) appear as (New) + +When you see General Ledger Report `Ref1(DocNo)` appears as `<>`, use the method below to fix it. + +![62](../../../static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/1.png) + +### How to Fix it + +1. Find out the document to check the source for this document. + + ![63](../../../static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/2.png) + +2. Go to **Journal Entry**, look for the Date 31/03/2015 (Because Ledger Date is 31/03/15). + + ![64](../../../static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/3.png) + +3. Press Edit and Save Button for all the Date is 31/03/2015. + +4. After Edit and Save, apply the Ledger to see the result. + + ![65](../../../static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/4.png) + +5. Done. + +## Trial Balance not tally + +If your trial balance is not tally, try running the following checks. + +## Make sure Retained Earning must have 1 Account code + +1. **GL** > **Maintain Account** + + ![66](../../../static/img/usage/general-ledger/glfaq/trial-balance-not-tally/1.png) + +:::note +If your Retained Earning is empty, you may create under Reserve, then only drag into Retained Earning. +::: + +## Make Sure Maintain Opening Balance is Tally + +1. **GL** > **Maintain Opening Balance**. + +2. Untick Project at left top. + +3. Make sure Local DR and Local CR is tally. (Refer Pic2). + + ![67](../../../static/img/usage/general-ledger/glfaq/trial-balance-not-tally/2.png) + +## Not tally due to current transaction + +:::tip +If the above two steps are correct, it means the current transaction is causing the imbalance. Please follow the steps below. +::: + +1. **GL** > **Print Journal of Transaction Listing** > Choose the date period which is not tally. + +2. Click on **Preview**. + +3. Select report name : **GL Journal-of-Transaction-Imbalance-Document**. + +4. The list show which mean is the document cause not tally. + +5. May upload the backup file to us and mention the problem. + +## Witholding Tax + +Go to **GL > Maintain Account**. + +| GL Account | Description | Remark | +|------------|----------------------|-------------------------| +|460-XXX |Witholding Tax Payable|Under Current Liabilities| + +:::note +GL Account is not compulsory to be the same. +::: + +## Maintain Withholding Tax + +Go to **Tools > Maintain Withholding Tax**. + +1. Click **New**. + +2. Input the following data: + + | Field Name | Explanation | Remark | + |----------------|------------------------------------------|--------------------------------------------------------------------------------------------| + |Code |Set a code |WTH-TAX15 | + |Description |Describe the meaning/usage of this code |Withholding Tax 15% | + |Tax Rate |Witholding Tax Rate |15% | + |Tax Account(DR) |Expenses Account |**<<Follow document accounts>>** if leave blank here | + |Tax Account(CR) |Set to **Withholding Tax Payable** account|At GL\Maintain Account, create the Withholding Tax Payable account under Current Liabilities| + + ![68](../../../static/img/usage/general-ledger/glfaq/witholding-tax/1.png) + + :::note + Tax Account (DR) leave blank + ::: + +3. Click on **Save**. + +## Withholding Tax Purchase Entry + +Available in multiple menus: + +|Purchase|Supplier| +|---|---| +|Purchase Invoice|Supplier Invoice| +|Cash Purchase|Supplier Invoice| +|Purchase Debit Note|Supplier Debit Note| +|Purchase Returned| Supplier Credit Note| + +1. In **Purchase Invoice**, insert the following columns: + + - WH Local Tax Amt + - WH Tax + - WH Tax Rate + + ![69](../../../static/img/usage/general-ledger/glfaq/witholding-tax/2.png) + +2. Select the Withholding Tax Code in **WH Tax** column. + + ![70](../../../static/img/usage/general-ledger/glfaq/witholding-tax/3.png) + +3. System will auto post the withholding tax double entry. Press **CTRL + O** to check the double entry. + + | GL Description | Local DR | Local CR | + |--------------------------------------------------------|-----------|------------| + |Expenses Account (follow the document detail GL Account)|XXX | | + |Withholding Tax Payable | | XXX | + + ![71](../../../static/img/usage/general-ledger/glfaq/witholding-tax/4.png) + +:::note +The withholding tax amount will not be added to the purchase invoice amount. +::: + +## Payment of Withholding Tax + +1. Go to **GL > Cash Book Entry.** + +2. Create **New PV**. + +3. Enter Payee name. + +4. Select bank account to pay. + +5. In detail grid, select the GL Account **(Withholding Tax Payable)**. + +6. Enter the withholding tax amount to be paid. Save it. + + ![72](../../../static/img/usage/general-ledger/glfaq/witholding-tax/5.png) + +7. You can check the ledger report for Withholding Tax Payable outstanding balance. diff --git a/docs/usage/general-ledger/guide.md b/docs/usage/general-ledger/guide.md new file mode 100644 index 00000000..35b5d26c --- /dev/null +++ b/docs/usage/general-ledger/guide.md @@ -0,0 +1,122 @@ +--- +sidebar_position: 1 +title: Guide +description: General Ledger Info +slug: /usage/general-ledger/guide +tags: ["SQL Account", "Usage"] +--- + +## Maintain Account + +1. Creating a New Account + 1. Select **GL** | **Maintain Account** | Select category (e.g., Fixed Assets) | **New** + 2. Enter the **GL Code** and **Description** (alphanumeric characters are acceptable) + 3. Check the Special Account Type if applicable, e.g., the account belongs to the Accumulated Deprn Account (Fixed Assets). + 4. Click **OK**. Your new account is now created. + + ![1](../../../static/img/usage/general-ledger/glguide/chart-step1-1.png) + + ![2](../../../static/img/usage/general-ledger/glguide/chart-step1-2.png) + +2. Creating a Sub Account + 1. Point to the parent account (e.g. Cash at Bank) + 2. Follow the same steps from [creating a new account](#maintain-chart-of-account). + + ![3](../../../static/img/usage/general-ledger/glguide/chart-step2-1.png) + +You are allowed to create an unlimited level of sub accounts. Just point to any account, and add a sub or sub-sub account to it. + +## Cash Book Entry + +:::info + +Watch tutorial video here: [youtube](https://www.youtube.com/watch?v=rh0L-Kol1ts&feature=youtu.be) + +::: + +Cash book entry is normally used for a non-customer/ supplier payment or receipt e.g., payment for salaries, utilities etc. + +1. **GL** > **Cash Book Entry** > **New** (choose between Payment Voucher or Official Receipt) + + ![4](../../../static/img/usage/general-ledger/glguide/cb-entry-step1.png) + +2. **Insert Payable Name** > Select **GL Code > Tax > Amount** + + ![5](../../../static/img/usage/general-ledger/glguide/cb-entry-step2.png) + +## Journal Entry + +:::info + +Watch tutorial video here: [youtube](https://www.youtube.com/watch?v=WHzNMsCmFHg&feature=youtu.be) + +::: + +1. **GL > Journal Entry** +2. **Key in your double entry** +3. Click on **Save** (The system will block the entry if the DR and CR amounts do not tally.) + +![6](../../../static/img/usage/general-ledger/glguide/jr-entry.png) + +## Foreign Bank Adjustment + +- To revalue the foreign bank balance at the end of each month +- Calculate and post double entry for the unrealized FOREX gain/loss + +Refer this ledger: + +![7](../../../static/img/usage/general-ledger/glguide/f-bank-adj.png) + +Local Balance is now RM 57,350 and you wish to revalue it using a monthly exchange rate of 4.50000 to get the local balance RM 56,250. What should I do? + +### Foreign Bank Adjustment Entry + +1. Click on **New** +2. Enter the date, eg. end of the month +3. Click on **Bank Revalue button** + + ![8](../../../static/img/usage/general-ledger/glguide/f-bank-adj-entry-step3.png) + +4. Choose the foreign bank, the system will get the bank balance from the ledger as per the date. +5. Enter the **Revalue currency rate**, eg. 4.5000. The system will automatically calculate the unrealized FOREX gain/loss. + + ![9](../../../static/img/usage/general-ledger/glguide/f-bank-adj-entry-step5.png) + +6. Click **OK** to proceed. +7. Click on **Save** + +![10](../../../static/img/usage/general-ledger/glguide/f-bank-adj-entry-step7.png) + +## Maintain Opening Balance + +1. **GL** > **Maintain Opening Balance** +2. Highlight the account that you wish to key in as opening balance and click **Edit**. +3. Insert the figure in **Local DR** or **Local CR**. Then **Save**. +4. Make sure the **DR** and **CR** figures tally. + +![11](../../../static/img/usage/general-ledger/glguide/o-balance.png) + +## Bank Reconciliation + +1. **GL > Bank Reconciliation > New** +2. Right-click to view Opening Bank Reconciliation +3. Set the **Date** (before System Conversion Date) + +![12](../../../static/img/usage/general-ledger/glguide/bank-recon.png) + +## Maintain Stock Value + +1. **GL** > **Maintain Stock Value** > **Edit** +2. Set the **Year** +3. Insert the **Opening Balance** + +![13](../../../static/img/usage/general-ledger/glguide/stock-value-step3-1.png) +![14](../../../static/img/usage/general-ledger/glguide/stock-value-step3-2.png) + +## Maintain Budget + +- Press **EDIT**. +- Start input the budget value into each month. +- After input finished, **SAVE** it. + +![15](../../../static/img/usage/general-ledger/glguide/maintain-budget.png) diff --git a/docs/usage/general-ledger/report.md b/docs/usage/general-ledger/report.md new file mode 100644 index 00000000..f09a4050 --- /dev/null +++ b/docs/usage/general-ledger/report.md @@ -0,0 +1,124 @@ +--- +sidebar_position: 2 +title: Reports +description: General Ledger Report Info +slug: /usage/general-ledger/report +tags: ["SQL Account", "Usage"] +--- + +## Print Ledger Report + +1. Go to **GL** > **Print Ledger Report** > Select your date +2. Filter by account, project, area, agent (optional) +3. Tick whether you want to view General Ledger, Sales Ledger (Customer) or Purchase Ledger (Supplier) +4. System can generate reports by group and provide a summary for each group (Group/Sort by) +5. In Option Upper Level + + 1. **Merge GL Code for same document** – If you have the same account in one single transaction, the system will automatically merge, if you want to separate the account code for the same document, please un-tick. + 2. **Exclude Project when merging** – Exclude the project when merging GL Account. + 3. **Use second description** – Use second description which is maintained under GL > Maintain Chart of Account. + 4. **Include Zero Closing Balance** – Choose to show accounts in the report even if their amount is 0. + 5. **Include Zero Transaction** – Choose to show accounts in the report even if there are 0 transactions. + 6. **Local Currency & Foreign Currency** – If you have foreign currency transactions, you can tick the foreign currency so that the system will show the figures in foreign currency compare versus local currency. + 7. **Apply** + +![1](../../../static/img/usage/general-ledger/glreport/ledge-rpt.png) + +## Print Balance Sheet Statement + +1. Go to **GL** > **Print Balance Sheet Statement** > Select your date + +2. Choose your preferred format + +3. “Show Up to Level” under Option refers to the depth of sub-accounts in your Maintain Chart of Account, the higher the value, the more level of detail will be shown. + +4. In Option Upper Level + + 1. **Use second description** – Use second description which is controlled at GL > Maintain Chart of Account. + + 2. **Zero Balance Account** – Choose to show accounts in the report even if their amount is 0. + + 3. **Display Trade Debtor/Creditor in Details** – Show detailed information for each customer account. + +5. In Option Bottom Level + + 1. **Print Sub Account Only** – Select a certain account to view. + + 2. **Print Project Comparison** – You are allowed to view your report by project (project module requested). + + 3. **Show Column Options** – You can preset setting as attached. + +6. **Apply** + +![2](../../../static/img/usage/general-ledger/glreport/bal-sheet.png) + +## Print Profit & Loss Statement + +1. Go to **GL** > **Print Profit & Loss Statement** > Select your date + +2. Choose your preferred format + +3. In Option Upper Level + + 1. **Use second description** – Use second description which is maintained under GL > Maintain Chart of Account. + + 2. **Zero Balance Account** – Choose to show accounts in the report even if their amount is 0. + +4. In Option Upper Level + + 1. **Print Sub Account Only** – Select a certain account to view. + + 2. **Print Manufacturing Account** – You are only allowed to view manufacturing account if you have set it up under Maintain Chart of Account. + + 3. **Print Project Comparison** – You are allowed to view your report by project (project module requested). + + 4. **Show Column Options** – refer Balance Sheet + +5. **Apply** + + ![3](../../../static/img/usage/general-ledger/glreport/pnl-state.png) + +## Print Profit & Loss Statement (Consolidation) + +- **Consolidation** refers to the aggregation of financial statements of a group company as consolidated financial statements. +- New add-on module name : **Financial Consolidation**. +- **Quick summary** of setup the group of companies database list to be displayed in Profit & Loss Statement. + + ![pnl-consolidate](../../../static/img/usage/general-ledger/glreport/pnl-consolidate.png) + +1. Tick Print Consolidate. + + ![pnl-consolidate1](../../../static/img/usage/general-ledger/glreport/pnl-consolidate1.png) + +2. Select (tick) on the company name from different Groups of Companies. +3. Click Apply. +4. It will merge the financial data from the companies selected. Represent a Short Company Name for each company. + + ![pnl-consolidate2](../../../static/img/usage/general-ledger/glreport/pnl-consolidate2.png) + +:::info[TIPS] + +1. **Short Company Name** will be display in the grid column when you apply the Financial Consolidation. +2. It can be defined in File | Company Profile... **(More tab)**. + + ![pnl-consolidate3](../../../static/img/usage/general-ledger/glreport/pnl-consolidate3.png) + +::: + +## Print Trial Balance + +1. Go to **GL** > **Print Trial Balance** > Select your date + +2. Filter by project, area, agent (optional) + +3. Tick whether you want to view General Ledger, Sales Ledger(Customer) or Purchase Ledger (Supplier) + +4. In Option Upper Level + + 1. **Use second description** – Use second description is which maintained under GL > Maintain Chart of Account. + + 2. **Zero Balance Account** – Choose to show accounts in the report even if their amount is 0. + +5. **Apply** + + ![4](../../../static/img/usage/general-ledger/glreport/trial-bal.png) diff --git a/docs/usage/general/_category_.json b/docs/usage/general/_category_.json new file mode 100644 index 00000000..25a7fd5a --- /dev/null +++ b/docs/usage/general/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "General", + "position": 16, + "link": { + "type": "generated-index", + "description": "SQL Account General Guide" + } +} \ No newline at end of file diff --git a/docs/usage/general/case-study/_category_.json b/docs/usage/general/case-study/_category_.json new file mode 100644 index 00000000..11049cf6 --- /dev/null +++ b/docs/usage/general/case-study/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Case Study", + "position": 4, + "link": { + "type": "generated-index", + "description": "general guide" + } +} \ No newline at end of file diff --git a/docs/usage/general/case-study/aluminium-extrusion-manufacturing.md b/docs/usage/general/case-study/aluminium-extrusion-manufacturing.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/usage/general/case-study/aluniminium-extrution-manufacturing.md b/docs/usage/general/case-study/aluniminium-extrution-manufacturing.md new file mode 100644 index 00000000..1b91bbcb --- /dev/null +++ b/docs/usage/general/case-study/aluniminium-extrution-manufacturing.md @@ -0,0 +1,146 @@ +--- +sidebar_position: 2 +title: Aluminium Extrution Manufactoring +description: A guide for Aluminium Extrution Manufactoring +slug: /usage/myinvois/aluminium-extrution-manufactoring +tags: ["SQL Account", "Usage"] +--- + +## Introduction + +Aluminium Extrusion manufacturing usually will based on a variable length and a fixed linear weight to determine the price before quote to customer. + +## Updates + +Last Customisation Update : 06 Nov 2015 + +## Criterias + +### Maintain Stock Group + +[Stock | Maintain Stock Group...] + +Stock group will be used as the Product Grade to categorise the stock items list. + +### Maintain Stock Item + +[Stock | Maintain Stock Item...] + +1. Stock Master Data. + +| Types | Field Name | Data Types | Length | Usage | +| --- | --- | --- | --- | --- | +| STD | Code | String | 30 | Product Code, eg. EA 6035 (NA) | +| STD | Description | String | 200 | Product Name | +| STD | 2nd Description | String | 200 | Aluminium size to be display in sales tax invoice, eg. 38.10 x 1.80 thk | +| STD | Base UOM | String | 10 | stock unit of measurement, usually either enter as PCS or KG or Roll | +| DIY | Linear Weight (Kg/M) | Float | Size :10, SubSize: 4 | Linear Weight (Kg/M) value | + +### Sales Document Entry + +1. Sales document types include: + + - Quotation + - Sales Order + - Delivery Order + - Invoice + - Debit Note + - Credit Note + +2. Insert and update the following DIY fields & Script into above mentions sales documents in Tools | DIY | SQL Control Center... + + 1. DIY Fields + + | Type | Field Name | Data Types | Length | + | --- | --- | --- | --- | + | DIY-F | Length | Float | Size: 10, SubSize: 4 | + | DIY-F | LinearWeight | Float | Size: 10, SubSize: 4 | + | DIY-F | UnitPrice_Kg | Float | Size: 10, SubSize: 4 | + | DIY-F | UnitPrice_Pcs | Float | Size: 10, SubSize: 4 | + | DIY-F | Qty_Kg | Float | Size: 10, SubSize: 4 | + | DIY-F | Qty_Pcs | Float | Size: 10, SubSize: 4 | + + 2. DIY Script: OnGridColumnValueChange event + + ```sql + var + FComServer : Variant; + + function ComServer: Variant; + begin + if FComServer = Null then begin + FComServer := CreateOleObject('SQLAcc.BizApp'); + end; + Result := FComServer; + end; + + var + lSQL, lCode : String; + cdsTemp : TClientDataSet; + D : TDataSource; + + begin + FComServer := null; + D := TDataSource(Self.FindComponent('dsDocDetail')); + + cdsTemp := TClientDataSet.Create(nil); + lCode := D.DataSet.FindField('ItemCode').AsString; + lSQL := Format('SELECT UDF_LinearWeight FROM ST_ITEM WHERE Code=%s ',[QuotedStr(lCode)]); + cdsTemp.Data := ComServer.DBManager.Execute(lSQL); + + //select item and batch to retrieve the linear weight from item master + if SameText(editingfield,'ItemCode') or + SameText(editingfield,'Batch') then begin + D.DataSet.FindField('UDF_LinearWeight').Value := cdsTemp.FindField('UDF_LinearWeight').Value; + D.DataSet.FindField('UDF_Length').Value := 0; + end; + + //select batch as "Length value" + if SameText(editingfield,'Batch') then begin + D.DataSet.FindField('UDF_Length').Value := D.DataSet.FindField('Batch').Value; + end; + + //key-in unit price per kg to convert into unit price per pcs + if SameText(editingfield,'UDF_UnitPrice_Kg') or + SameText(editingfield,'Batch') then begin + D.DataSet.FindField('UDF_UnitPrice_Pcs').AsFloat := (D.DataSet.FindField('UDF_UnitPrice_Kg').AsFloat* + D.DataSet.FindField('UDF_Length').AsFloat* + D.DataSet.FindField('UDF_LinearWeight').AsFloat); + end; + + //key-in unit price per pcs to convert into unit price per kg + if SameText(editingfield,'UDF_UnitPrice_Pcs') or + SameText(editingfield,'Batch') then begin + D.DataSet.FindField('UDF_UnitPrice_Kg').AsFloat := (D.DataSet.FindField('UDF_UnitPrice_Pcs').AsFloat/ + D.DataSet.FindField('UDF_Length').AsFloat/ + D.DataSet.FindField('UDF_LinearWeight').AsFloat); + end; + + //to compute the subtotal either based on unit price per pcs or per kg + if (D.DataSet.FindField('UDF_Length').Value <> 0.0000) or + (D.DataSet.FindField('UDF_LinearWeight').Value <> 0.000) or + (D.DataSet.FindField('UDF_Qty_Pcs').Value <> 0.0000) or + (D.DataSet.FindField('UDF_UnitPrice_Pcs').Value <> 0.0000) then begin + D.DataSet.FindField('Qty').Value := D.DataSet.FindField('UDF_Qty_Pcs').AsFloat; + D.DataSet.FindField('UnitPrice').Value := D.DataSet.FindField('UDF_UnitPrice_Pcs').AsFloat; + D.DataSet.FindField('UDF_Qty_Kg').AsFloat := (D.DataSet.FindField('UDF_Length').AsFloat* + D.DataSet.FindField('UDF_LinearWeight').AsFloat* + D.DataSet.FindField('UDF_Qty_Pcs').AsFloat); + end; + + FComServer := null; + cdsTemp.Free; + + end. + ``` + + ```pascal + Formula: + + 1. Unit price per Pcs = Unit price per Kg x Length x Linear Weight + 2. Unit price per Kg = Unit price per Pcs / Length / Linear Weight + 3. Total Weight = Length x Linear Weight x No of Pcs + + + Both formula results are rounding up to 4 decimals. + ``` diff --git a/docs/usage/general/case-study/gst-margin-scheme.md b/docs/usage/general/case-study/gst-margin-scheme.md new file mode 100644 index 00000000..1f70ea41 --- /dev/null +++ b/docs/usage/general/case-study/gst-margin-scheme.md @@ -0,0 +1,285 @@ +--- +sidebar_position: 1 +title: GST Margin Scheme +description: A guide on GST Margin Scheme +slug: /usage/myinvois/gst-margin-scheme +tags: ["SQL Account", "Usage"] +--- + +## GST Margin Scheme + +### Introduction + +GST is normally due on the full value of goods sold. The margin scheme allows a GST Margin Scheme registered person (GST MS registered person) who meets all the conditions to calculate and charge GST on the margin i.e. the difference between the price at which the goods were obtained and the selling price. If no margin is made (because the purchase price exceeds the selling price) then no GST is charged and payable. +For the purpose of GST, margin under this scheme means the difference between selling price and purchase price. If there is any value being added to the eligible goods such as cost for repairing, this cost is part of the margin other than profit. In other words, the value added must be included in the selling price and not the purchase price. +Therefore, we have designed a database structure specially for business which has margin scheme involvement. + +### Model Require + +1. SQL Accounting Basic (GST compliance) +2. DIY field +3. DIY script +4. Project (use to record Car Plate number) + +See below the overview of Margin Scheme process flow: + +![1](../../../../static/img/usage/general/case-study/gst-margin-scheme/gst-process-flow.png) + +#### Setup Margin Scheme Database + +***Last Customisation Update : 13 Sep 2016*** + +1. Get the NEW database structure for Margin Scheme (in backup format) from this link NEW COMPANY (For Margin Scheme) +2. Restore this backup. +3. Enter the user ID and password with “ADMIN” to login. + +### History New/Updates/Changes + +***Last Customisation Update: 27 Nov 2015*** + +- Moved Cars Information to Maintain Project +- Added Auto Capture Initial Cost on Project Selection + +***Last Customisation Update: 20 Feb 2016*** + +- Empty item code (eg. repairs) will not update the Project - Purchase Details. +- Run the SQL Accounting Diagnosis - DB Patch and apply the patch files can be download from Patch-Margin Scheme-20160220.zip + +1. Select the database file (eg.ACC-XXXXX.FDB). +2. Drag the patch filename Patch-MarginScheme1. +3. Click Execute. +4. Repeat step 2 - 3 and apply with another patch filename Patch-MarginScheme-02-20160220. + +***Last Customisation Update : 08 Mar 2016*** + +- Tax amount not equal to zero. Will prompt message "Cost will be tax excluded for GST Margin purpose" after save the purchase invoice. +- Run the SQL Accounting Diagnosis - DB Patch and apply the patch files can be download from Patch-MarginScheme-20160308.zip + +1. Select the database file (eg.ACC-XXXXX.FDB). +2. Unzip the patch file downloaded. +3. Drag the patch filename DELETE_PHPI_OnAfterSave_08.03.2016. +4. Click Execute. +5. Repeat step 2 - 4 and apply with another patch filename UPDATE_PHPI_OnAfterSave_08.03.2016. + +***Last Customisation Update : 08 Aug 2016*** + +- To remove the compulsory action to select project code other than Default Project (----). +- Run the SQL Accounting Diagnosis - DB Patch and apply the patch files can be download from [Patch-Margin Scheme-20160808.zip](http://www.sql.com.my/document/Patch-MarginScheme-20160808.zip) + +1. Select the database file (eg.ACC-XXXXX.FDB). +2. Unzip the patch file downloaded. +3. Drag the patch filename DELETE_SLIV_OnBeforerSave_2016.08.08. +4. Click Execute. + +****Last Customisation Update : 13 Sep 2016*** + +- Margin Scheme options added in Maintain Project. It is allow to determine the car sold using GST margin scheme or GST standard calculation. +- Run the SQL Accounting Diagnosis - DB Patch and apply the patch files can be download from [Patch-Margin Scheme-20160913.zip](https://www.sql.com.my/document/Patch-MarginScheme-20160913.zip) + +1. Select the database file (eg.ACC-XXXXX.FDB). +2. Unzip the patch file downloaded. +3. Drag the patch filename DELETE_SLIV_OnGridColValChg_2016.09.13. +4. Click Execute. +5. Repeat step 2 - 4 and apply with another patch filename INSERT_SLIV_OnGridColValChg_2016.09.13. + +- Add new field name MS in Maintain Project. + +1. Go to Tools | DIY | SQL Control Center... +2. Browse to Business Objects | Miscellaneous | Project | Project Fields + + ![2](../../../../static/img/usage/general/case-study/gst-margin-scheme/sep-step2.png) + +3. Add new field name MS and the Data Type, Size, Sub Size, Caption, etc must follow the screenshot below. Click to Save button. + + ![3](../../../../static/img/usage/general/case-study/gst-margin-scheme/sep-step3.png) + +4. Next, click on the existing Margin Scheme form. See the screenshot below. + + ![4](../../../../static/img/usage/general/case-study/gst-margin-scheme/sep-step4.png) + +5. Click on Customize button. + + ![5](../../../../static/img/usage/general/case-study/gst-margin-scheme/sep-step5.png) + +6. Drag the Margin Scheme from Available Item list and drop under Purchase Details. See screenshow below. + + ![6](../../../../static/img/usage/general/case-study/gst-margin-scheme/sep-step6.png) + +7. Lastly, click to Save button. + + ![7](../../../../static/img/usage/general/case-study/gst-margin-scheme/sep-step7.png) + +:::info Note +Patch files are applicable to old margin scheme database. +::: + +***Last Customisation Update : 09 Nov 2016*** + +- Added Stock Book Number into Maintain Project. It will auto update project Stock Book Number key-in at purchase invoice Ext. No. +- Fixed the bug update project from Purchase Invoice on the First line only. +- Run the SQL Accounting Diagnosis - DB Patch and apply the patch files can be download from [Patch-Margin Scheme-20161109.zip](https://www.sql.com.my/document/Patch-MarginScheme-20161109.zip) + +1. Select the database file (eg.ACC-XXXXX.FDB). +2. Unzip the patch file downloaded. +3. Drag the patch filename DELETE_PHPI_OnAfterSave_2016.11.09. +4. Click Execute. +5. Repeat step 2 - 4 and apply with another patch filename INSERT_PHPI_OnAfterSave_2016.11.09. + +- Add new field name StkBookNo in Maintain Project. + +1. Go to Tools | DIY | SQL Control Center... + + ![8](../../../../static/img/usage/general/case-study/gst-margin-scheme/nov-step1.png) + +2. Browse to Business Objects | Miscellaneous | Project | Project Fields + + ![9](../../../../static/img/usage/general/case-study/gst-margin-scheme/nov-step2.png) + +3. Add new field name StkBookNo and the Data Type, Size, Sub Size, Caption, etc must follow the screenshot below. Click to Save button. + + ![10](../../../../static/img/usage/general/case-study/gst-margin-scheme/nov-step3.png) + +4. Next, click on the existing Margin Scheme form. See the screenshot below. + + ![11](../../../../static/img/usage/general/case-study/gst-margin-scheme/nov-step4.png) + +5. Click on Customize button. + + ![12](../../../../static/img/usage/general/case-study/gst-margin-scheme/nov-step5.png) + +6. Drag the Stock Book No from Available Item list and drop under Purchase Details. See screenshow below. + + ![13](../../../../static/img/usage/general/case-study/gst-margin-scheme/nov-step6.png) + +7. Lastly, click to Save button. + + ![14](../../../../static/img/usage/general/case-study/gst-margin-scheme/nov-step7.png) + +:::info Note +Patch files are applicable to old margin scheme database. +::: + +### Setup Master Data + +#### Maintain Customer + +[Customer | Maintain Customer…] + +1. Create new buyer name (eg. company name or person name). + +2. Click on Tax tab to input the GST No (if applicable). + + ![15](../../../../static/img/usage/general/case-study/gst-margin-scheme/set-md-cust.png) + +3. Click on extra tab. You can enter the road tax, inspection and insurance reminder date for reference. + +#### Maintain Supplier + +[Supplier | Maintain Supplier…] + +1. Create new seller name (eg. company name or person name). + +2. Click on Tax tab to input the GST No (if applicable). + + ![16](../../../../static/img/usage/general/case-study/gst-margin-scheme/set-md-supp.png) + +#### Maintain Stock Item + +[Stock | Maintain Stock Item…] + +1. Create the car model at Maintain Stock Item. For example, TOYOTA VIOS 1.5G(AT) + +2. Click on Vehicle tab to define this item is a "Vehicle". + + ![17](../../../../static/img/usage/general/case-study/gst-margin-scheme/set-md-item.png) + +#### Maintain Project + +[Tools | Maintain Project…] + +1. Create the second car plate number in Maintain Project. + +2. Update the Vehicle detail. + + ![18](../../../../static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step2.png) + +3. Tick on Margin Scheme if it is a second hand car plate number. + + ![19](../../../../static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step3.png) + +4. Leave BLANK to Purchase Invoice Date, Purchase Invoice No and Cost. It will auto update when you are select the project code and save at the Purchase Invoice. + + ![20](../../../../static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step4.png) + +### Record Purchase of Second Hand Car Value + +[Purchase | Purchase Invoice…] + +1. Enter the purchase value of second car at Purchase Invoice. (eg. RM30,000 ) + +2. You must select the correct car plate number from Project. (eg. PGE3333, AAA9999) + +3. Supplier GST No, Purchase invoice number, date and cost will be update automatically after you have save the purchase invoice. + +| Duration of migration from Sage UBS | 1000 Records | 10,000 Records | +| --- | --- | --- | +| Masterfile | 2-5 Mins | 8-10 Mins | +| AR/AP Opening Balance | 5-10 Mins | 15-30 Mins | +| Sales/ Purchase Price History | 5-10 Mins | 15-30 Mins | +| Sales/ Purchase Current Transactions | 30-50 Mins | 1.5-2 Hours | +| AR/AP Current Transactions | 30-40 Mins | 1.5-2 Hours | +| GL Current Transactions | 10-15 Mins | 25-40 Mins | + +![21](../../../../static/img/usage/general/case-study/gst-margin-scheme/record-2nd-hand-car.png) + +:::info Note + +1. This information is required to show in Lampiran 07 -Monthly Report for Relief for Secondhand Goods or Margin Scheme (MS). + +2. Auto update to project purchase detail (Purchase No, Purchase Date and Cost) if tax amount is zero. +::: + +[Sales | Invoice…] + +#### Margin Scheme Input + +1. Enter the sale value of second car at Invoice. (eg.RM90,113.69) +2. You must select the correct car plate number from Project.(eg.PGE3333) +3. Initial Purchase Cost will auto upadate after select the project (car plate number). +4. Tax amount will be calculated based on Margin Scheme method.(See screenshot below) + 1. Sellng Price = 90,113.69 + 2. Purchase Cost = 30,000.00 + 3. Margin = 90,113.69 – 30,000.00 = 60,113.69 + 4. Tax amount = 60,113.69 x 6/106 = 3,402.66 + + ![22](../../../../static/img/usage/general/case-study/gst-margin-scheme/margin-scheme.png) + +5. Invoice no, invoice date, selling price, margin, and margin tax amount will be shown in Lampiran 07 -Monthly Report for Relief for Secondhand Goods or Margin Scheme (MS) + +#### Other Information + +1. Customer Particular tab. + + ![23](../../../../static/img/usage/general/case-study/gst-margin-scheme/other-step1.png) + +2. Deposit Info (For record purpose, no posting to account). + + ![24](../../../../static/img/usage/general/case-study/gst-margin-scheme/other-step2.png) + +3. Vehichle Detail (Auto retrieve from Vehicle Detail in Maintain Project). + + ![25](../../../../static/img/usage/general/case-study/gst-margin-scheme/other-step3.png) + +### Print for GST Lampiran 07 (Lampiran B0-Penyata=Pemantauan-SM-Syrikat) + +[Sales | Print Sales Document Listing…] + +1. Select document to “Invoice Listing” and click APPLY. + + ![26](../../../../static/img/usage/general/case-study/gst-margin-scheme/lampiran-step1.png) + +2. Click on preview or print. Select the report name “Lampiran B0-Penyata-Pemantauan-SM-Syarikat”. + + ![27](../../../../static/img/usage/general/case-study/gst-margin-scheme/lampiran-step2.png) + +static/img/usage/general/case-study/gst-margin-scheme/ diff --git a/docs/usage/general/case-study/lock-report.md b/docs/usage/general/case-study/lock-report.md new file mode 100644 index 00000000..9ad9f0b7 --- /dev/null +++ b/docs/usage/general/case-study/lock-report.md @@ -0,0 +1,117 @@ +--- +sidebar_position: 1 +title: Lock Report by User +description: A guide on Lock Report +slug: /usage/myinvois/lock-report +tags: ["SQL Account", "Usage"] +--- + +## Introduction + +For some reason, the company managers wish to let users to check and view the report by themselves. They cannot access other users data, eg. agent A cannot see agent B sales value. Therefore, we have come out this script to lock at the report according to the user rights. + +## Updates + +Last Customisation Update : 07 Nov 2015 + +## Criterias + +[Tools | Maintain User...] + +1. Advanced Lock in Maintain User. + + | Types | Field Name | Data Types | Length | Usage | + | --- | --- | --- | --- | --- | + | STD | Code | String | 20 | User ID, eg. LEE | + | STD | Name | String | 100 | User Name | + | DIY-F | Agent_Lock | Boolean | False value: 0, True value: 1 | To lock the agent parameter in report | + | DIY-F | Agent | String | 10 | Set an agent code to lock to this user | + | DIY-F | Location_Lock | Boolean | False value: 0, True value: 1 | To lock the location parameter in report | + | DIY-F | Location | String | 10 | Set a location code to lock to this user | + +2. The above DIY fields are created at Tools | DIY | Maintain_DIY(link) + +## Reporting + +1. As long the report parameter has Project, Agent, Area, or Location, the reports able to lock based on user login. For instances: + + - Customer Aging (Agent, Area, Project) + - Sales/Purchase Document Listing (Agent, Area, Doc Project) + - Outstanding Sales/Purchase Document Listing (Agent, Area, Doc Project, Item Project, Location) + - Stock Card (Location) + - etc... + +2. Insert and update the following DIY Script into Script tab (Report name - Param Form) in Tools | DIY | Maintain DIY + + For instance, apply the below script into Sales Profit & Loss By Document - Param Form. + + ![reporting](../../../../static/img/usage/general/case-study/lock-report/reporting.png) + + ```pascal + uses SysUtils, Dialogs, Forms, ComObj, DBClient; + + var C, D : TWinControl; + FComServer, lBizObj : Variant; + lLock, lLock2 : Boolean; + L, P : TStringList; + + function ComServer: Variant; + begin + if FComServer = Null then begin + FComServer := CreateOleObject('SQLAcc.BizApp'); + end; + Result := FComServer; + end; + + procedure CheckLock; + var cdsTemp : TClientDataset; + lSQL : String; + begin + lLock := False; + lLock2 := False; + FComServer := null; + cdsTemp := TClientDataset.Create(nil); + lSQL := Format('SELECT UDF_Location_Lock, UDF_Agent_Lock, UDF_Agent, UDF_Location FROM SY_USER WHERE Code=%s',[QuotedStr(UserID)]); + + try + cdsTemp.Data := ComServer.DBManager.Execute(lSQL); + if cdsTemp.RecordCount > 0 then begin + lLock := cdsTemp.FindField('UDF_Location_Lock').Value = 1; + L.Text := cdsTemp.FindField('UDF_Location').AsString; + lLock2 := cdsTemp.FindField('UDF_Agent_Lock').Value = 1; + P.Text := cdsTemp.FindField('UDF_Agent').AsString; + end; + + finally + cdsTemp.Free; + FComServer := null; + end; + end; + + begin + + C := Self.FindChildControl('edLocation_Panel') as TWinControl; + D := Self.FindChildControl('edAgent_Panel') as TWinControl; + L := TStringList.Create; + P := TStringList.Create; + + CheckLock; + try + if C <> nil then C.Enabled := not lLock; + if lLock then begin + C := TWinControl(C).FindChildControl('edLocation_Edit') as TWinControl; + (C as TControl).SetTextBuf(L.CommaText); + end; + + if D <> nil then D.Enabled := not lLock2; + if lLock2 then begin + D := TWinControl(D).FindChildControl('edAgent_Edit') as TWinControl; + (D as TControl).SetTextBuf(P.CommaText); + end; + + finally + L.Free; + P.Free; + end; + end. + ``` diff --git a/docs/usage/general/case-study/paper-industries.md b/docs/usage/general/case-study/paper-industries.md new file mode 100644 index 00000000..550376a1 --- /dev/null +++ b/docs/usage/general/case-study/paper-industries.md @@ -0,0 +1,149 @@ +--- +sidebar_position: 2 +title: Paper Industry +description: A guide for Paper Industry +slug: /usage/myinvois/paper-industires +tags: ["SQL Account", "Usage"] +--- + +## Introduction + +For mostly paper industries, they have to calculate the total weight in KG converted from different packing size like REAM, PKT or MT. This total weight will be printed in the sales order, delivery order and tax invoice. + +## Updates + +Last Customisation Update : 06 Nov 2015 + +## Criterias + +### Maintain Stock Group + +[Stock | Maintain Stock Group...] + +Stock group will be used as the Product Grade and Branding to categorise the stock items list. + +### Maintain Stock Item + +[Stock | Maintain Stock Item...] + +1. Stock Master Data. + + | Types | Field Name | Data Types | Length | Usage | + | --- | --- | --- | --- | --- | + | STD | Code | String | 30 | Product Code, eg. ACGAAA100SK-31004300 | + | STD | Description | String | 200 | Product Name, eg. Matt A/Paper China | + | STD | 2nd Description | String | 200 | Paper packaging size to be display in sales tax invoice, eg. 100gsm 31" x 43" | + | STD | Base UOM | String | 10 | stock unit of measurement, usually either enter as REAM or MT or PKT | + | DIY | GSM | Float | Size :10, SubSize: 2 | GSM value for Weight KG calculation | + | DIY | Width | Float | Size :10, SubSize: 2 | Width value for Weight KG calculation | + | DIY | Length | Float | Size :10, SubSize: 2 | Length value for Weight KG calculation | + | DIY | PKT | Float | Size :10, SubSize: 2 | PKT value for Weight KG calculation | + | DIY | Weight_MT | Float | Size :10, SubSize: 4 | Weight MT value | + | DIY | Weight_KG | Float | Size :10, SubSize: 4 | Weight Kgs value | + +2. Formula + + ```pascal + Weight KG = ((GSM x Width x Length)/3100)/PKT + Weight MT = Weight KG/1000 + + + Both formula results are rounded to 4 decimal places. + ``` + +3. Under Tools | DIY | SQL Control Center...Browse to Stock | Stock Item and insert new event OnBeforeSave with the DIY Script below: + +```pascal +Var M : TDataSource; + +begin + M := TDataSource(Self.FindComponent('dsAccess')); + M.DataSet.Edit; + M.DataSet.FindField('UDF_Weight_KG').Value := SimpleRoundToEx(( + (M.DataSet.FindField('UDF_GSM').AsFloat * + M.DataSet.FindField('UDF_Width').AsFloat * + M.DataSet.FindField('UDF_Length').AsFloat) / 3100) / + M.DataSet.FindField('UDF_PKT').AsFloat, -4); + + M.DataSet.FindField('UDF_Weight_MT').Value := + SimpleRoundToEx((M.DataSet.FindField('UDF_Weight_KG').AsFloat / 1000), -4); +end. +``` + +### Sales Document Entry + +1. Sales document types include: + + - Quotation + - Sales Order + - Delivery Order + - Invoice + - Debit Note + - Credit Note + +2. Insert and update the following DIY fields & Script into above mentions sales documents in Tools | DIY | SQL Control Center... + + 1. DIY Fields + + | Type | Field Name | Data Types | Length | + | --- | --- | --- | --- | + | DIY-F | GSM | Float | Size: 10, SubSize: 2 | + | DIY-F | Width | Float | Size: 10, SubSize: 2 | + | DIY-F | Length | Float | Size: 10, SubSize: 2 | + | DIY-F | PKT | Float | Size: 10, SubSize: 2 | + | DIY-F | Weight_MT | Float | Size: 10, SubSize: 4 | + | DIY-F | Weight_KG | Float | Size: 10, SubSize: 4 | + | DIY-F | TotWeight_MT | Float | Size: 10, SubSize: 4 | + | DIY-F | TotWeight_KG | Float | Size: 10, SubSize: 4 | + + 2. DIY Script: OnGridColumnValueChange event + + ```pascal + var + FComServer : Variant; + + function ComServer: Variant; + begin + if FComServer = Null then begin + FComServer := CreateOleObject('SQLAcc.BizApp'); + end; + Result := FComServer; + end; + + var + lBizObj,S,S2 : Variant; + lSQL : String; + lCdsDataList : TClientDataSet; + D : TDataSource; + + begin + FComServer := null; + lCdsDataList := TClientDataSet.Create(nil); + D := TDataSource(Self.FindComponent('dsDocDetail')); + try + lSQL := 'Code='+ QuotedStr(D.DataSet.FindField('ItemCode').AsString); + lBizObj := ComServer.BizObjects.Find('ST_ITEM'); + + lCdsDataList.XMLData := lBizObj.Select('UDF_GSM, UDF_Width, UDF_Length, UDF_PKT, UDF_Weight_KG, UDF_Weight_MT',lSQL,'','SX',',',''); + if SameText(EditingField, 'ItemCode') or + SameText(EditingField, 'Qty') then begin + D.DataSet.edit; + D.DataSet.FindField('UDF_GSM').Value := lCdsDataList.FindField('UDF_GSM').Value; + D.DataSet.FindField('UDF_Width').Value := lCdsDataList.FindField('UDF_Width').Value; + D.DataSet.FindField('UDF_Length').Value := lCdsDataList.FindField('UDF_Length').Value; + D.DataSet.FindField('UDF_PKT').Value := lCdsDataList.FindField('UDF_PKT').Value; + D.DataSet.FindField('UDF_Weight_KG').Value := lCdsDataList.FindField('UDF_Weight_KG').Value; + D.DataSet.FindField('UDF_Weight_MT').Value := lCdsDataList.FindField('UDF_Weight_MT').Value; + D.DataSet.FindField('UDF_TotWeight_KG').value := D.DataSet.FindField('UDF_Weight_KG').AsFloat* + D.DataSet.FindField('Qty').Value; + D.DataSet.FindField('UDF_TotWeight_MT').value := D.DataSet.FindField('UDF_Weight_MT').AsFloat* + D.DataSet.FindField('Qty').Value; + end; + + finally + lBizObj := null; + FComServer := null; + lCdsDataList.Free; + end; + end. + ``` diff --git a/docs/usage/general/grid-layout.md b/docs/usage/general/grid-layout.md new file mode 100644 index 00000000..6046f2ee --- /dev/null +++ b/docs/usage/general/grid-layout.md @@ -0,0 +1,135 @@ +--- +sidebar_position: 6 +title: Grid Layout +description: A guide about Grid Layout for SQL Account +slug: /usage/general/grid-layout +tags: ["SQL Account", "General", "Layout"] +--- + +## Clear Sorting + +### Scenario + +I have selected "Group by Document No" in Sales Profit and Loss by Document. However, when previewing the report, the same document number is split. How can I resolve this issue, as shown in the screenshots below? + +![scenario1-1](../../../static/img/usage/general/grid-layout/clear-sorting/scenario1-1.png) + +![scenario1-2](../../../static/img/usage/general/grid-layout/clear-sorting/scenario1-2.png) + +### Steps & Instruction + +1. Right click on any grid column. + +2. From the pop-up menu, click on Clear Sorting. + + ![steps-1](../../../static/img/usage/general/grid-layout/clear-sorting/steps-1.png) + +3. All grid columns will have their sorting cleared and will follow the Group By command. + + ![steps-2](../../../static/img/usage/general/grid-layout/clear-sorting/steps-2.png) + +4. Preview the report. The same document numbers will now be grouped together. + + ![steps-3](../../../static/img/usage/general/grid-layout/clear-sorting/steps-3.png) + +## Rename Grid Header + +### Rename Steps & Instruction + +1. Right click on any grid header. From the small menu, select **Properties**. + + ![right-click-properties](../../../static/img/usage/general/grid-layout/rename-header/right-click-properties.png) + +2. Find the column you want to rename and change its caption. Click OK to confirm. + + ![grid-properties](../../../static/img/usage/general/grid-layout/rename-header/grid-properties.png) + +3. The original column name “Ref 1” has now been changed to “Cust PO”. + + ![column-result](../../../static/img/usage/general/grid-layout/rename-header/column-result.png) + +## Reset/Delete Layout + +### Step to reset layout + +![reset-layout-1](../../../static/img/usage/general/grid-layout/reset-layout/reset-layout-1.png) + +1. Hover over **Item code** and **right click** + +2. Select **Grid Layout** + +3. Click on **Load Layout** + + ![reset-layout-2](../../../static/img/usage/general/grid-layout/reset-layout/reset-layout-2.png) + +4. Press **Reset Layout** + +### Step to delete Existing Layout + +![delete-layout-1](../../../static/img/usage/general/grid-layout/reset-layout/delete-layout-1.png) + +1. Hover over **item code** and **right click** + +2. Select **Grid Layout** + +3. Click on **Manage Layout** + +![delete-layout-2](../../../static/img/usage/general/grid-layout/reset-layout/delete-layout-2.png) + +If your screen looks like the one above , select the **layout | press DELETE | SAVE** + +## Save and Manage Layout + +### How to call out hidden field? + +1. Click on the button from left side of Item Code , checked all field you wish to show out + + ![13](../../../static/img/usage/general/grid-layout/save-manage-layout/call-out-hidden-field.png) + +2. **Right-click on the grid** (for example, right-click the “Description” column) and select **Grid Layout | Save Layout**. + + ![save-layout-1](../../../static/img/usage/general/grid-layout/save-manage-layout/save-layout-1.png) + +3. Enter a layout name. Check “**Save as Default Layout**” if you want to set this as your default layout, then click **Save**. + + ![save-layout-2](../../../static/img/usage/general/grid-layout/save-manage-layout/save-layout-2.png) + +### How to assign this layout to others users? + +1. After saving your layout, **right-click on the grid** (for example, right-click the “Description” column) and select **Grid Layout | Manage Layout**. + + ![manage-layout](../../../static/img/usage/general/grid-layout/save-manage-layout/manage-layout.png) + +2. You can assign your layout either by users or by groups. For example, to assign by users: + + ![manage-layout-users](../../../static/img/usage/general/grid-layout/save-manage-layout/manage-layout-users.png) + +3. Click the arrow next to the user's name, select the user, and click **SAVE**. + + ![manage-layout-users-select](../../../static/img/usage/general/grid-layout/save-manage-layout/manage-layout-users-select.png) + +:::note +**Default**: Make this layout the default for the user. + +− : Empty it without setting any layout for this user + +**Deny**: Hide this layout so the user cannot see or load it. +::: + +### How to disable users access right to go field chooser and customize layout ? + +1. Go **Tools | Maintain User** + + ![access-control-1](../../../static/img/usage/general/grid-layout/save-manage-layout/access-control-1.png) + +2. **Highlighted** on the user name and press on **EDIT** + + ![access-control-2](../../../static/img/usage/general/grid-layout/save-manage-layout/access-control-2.png) + +3. Click on **More | Access Control** + + ![access-control-3](../../../static/img/usage/general/grid-layout/save-manage-layout/access-control-3.png) + +4. Go to Group: Misc, uncheck **Customize grid (field chooser)** and **Manage Grid Layout**, then click **SAVE**. + + ![access-control-4](../../../static/img/usage/general/grid-layout/save-manage-layout/access-control-4.png) diff --git a/docs/usage/general/myttx.md b/docs/usage/general/myttx.md new file mode 100644 index 00000000..34b26fc1 --- /dev/null +++ b/docs/usage/general/myttx.md @@ -0,0 +1,368 @@ +--- +sidebar_position: 5 +title: Malaysia Tourism Tax System (MyTTx) +description: A guide about Malaysia Tourism Tax System (MyTTx) for SQL Account +slug: /usage/general/myttx +tags: ["SQL Account", "General", "MyTTx"] +--- + +## Introduction + +1. MYTTx implementation date : **01 September 2017**. + +2. **TTx** is a tax charged and levied on a **tourist** staying at any **accommodation premises** made available by an **operator** at the rate fixed by the Minister. It is the duty of the tourist to pay TTx to the operator. + +3. **Tourist** means any person, whether he is a Malaysian national or otherwise, visiting any place in Malaysia for any of the following purposes, namely: + + 1. pleasure, recreation or holiday + 2. culture + 3. religion + 4. visiting friends or relatives + 5. sports + 6. business + 7. meetings, conferences, seminars or conventions + 8. studies or research + 9. any other purpose which is not related to an occupation that is remunerated from the place visited. + +4. **Accommodation** premises means any building, including hostels, hotels, inns, boardinghouses, rest houses and lodging houses, held out by the proprietor, owner or manager, either wholly or partly, as offering lodging or sleeping accommodation to tourists for hire or any other form of reward, whether or not food or drink is also offered. + +5. **Accommodation premises excludes** ‘innovative’ accommodations such as Apache-type hotels, caravan, container, bustel, boat house, tree house, sleeping tube, tents, cruise, and such similar accommodations. [added in the **GENERAL GUIDE ON TOURISM TAX** revised on 29 Aug 2017] + +6. **Rate of tourism tax** is fixed at a flat rate of **RM10.00 per room per night**. + +7. **Tourism Tax (Amendment) Act 2021:** Tourism tax shall be **charged and levied** on a tourist staying at any accommodation premises made available through service relating to online booking accommodation premises provided by a **digital platform service provider** at the rate fixed in accordance with section 8. + +8. **Exemption from TTx** are: + + 1. A **Malaysian national**; or a permanent resident of Malaysia who holds MyPR card. + + 2. An operator who operates **homestay** as determined by the Ministry of Tourism and Culture Malaysia under the Pengalaman Homestay Malaysia Programme and is registered with Ministry of Tourism and Culture Malaysia. + + 3. An operator who operates **kampungstay** determined by the Ministry of Tourism and Culture Malaysia under the Visit My Kampung Kampungstay Programme and is registered with Ministry of Tourism and Culture Malaysia. + + 4. The Federal Government, State Government, statutory body, local authority or private higher educational institutions registered under Private Higher Educational Institutions Act 1996 [Act 555] operating accommodation premises that provide accommodation to any person for **educational, training or welfare purposes.** + + **Example 25** + + As an illustration of accommodation premises which are exempted from registration and collecting TTx under item (c) above are as follows: + + - Akademi Kastam Diraja Malaysia + - Lanai Kijang Bank Negara Malaysia + - Institut Latihan Dewan Bandaraya Kuala Lumpur + - HELP Residence, HELP University + - Pusat Transit Gelandangan Kuala Lumpur + + 5. The employer operating accommodation premises as a facility to their employees. + + **Example 26** As an illustration of accommodation premises which are exempted from registration and collecting TTx under item (d) above are as follows: + + - Rumah Peranginan Persekutuan + - Rumah Rehat Kerajaan Negeri + - Rumah Peranginan Bank Negara Malaysia + - Rumah Peranginan Tenaga Nasional Berhad + + 6. Religious or welfare body who fully operates accommodation premises for the purpose of religious or welfare activities **not for commercial purpose** and registered under the written law and approved by the Minister responsible **for religious or welfare matters**. + + 7. An operator of accommodation premises **having four or less than four rooms.** ( \<\= 4 rooms) + +9. Therefore, we have designed a database structure specially for business which has provide accommodation to tourists. + + ![ttx-flow](../../../static/img/usage/general/myttx/ttx-flow.jpg) + + *Source from Royal Malaysian Customs Department official page* + +List of Guidance about MYTTx : + +1. [General Guide on Tourism Tax [Panduan Am Cukai Pelancongan]](https://www.myttx.customs.gov.my/wp-content/uploads/2024/12/Panduan-Am-Cukai-Pelancongan-V2-06122024.pdf) +2. [Guide on Registration](https://www.myttx.customs.gov.my/wp-content/uploads/2022/05/APPENDIX-B-Panduan-Pendaftaran-Cukai-Pelancongan.pdf) +3. [Guideline to fill up Form TTx-01 [Panduan Mengisi Borang TTx-01]](https://www.myttx.customs.gov.my/wp-content/uploads/2022/05/APPENDIX-C-Panduan-Mengisi-Borang-TTx-01.pdf) +4. [Guide on Return, Payment and Refund](https://www.myttx.customs.gov.my/wp-content/uploads/2022/05/APPENDIX-D-Panduan-Pengemukaan-Penyata-dan-Pembayaran-PUBLIC.pdf) +5. [Guideline to fill up Form TTx-03 [Panduan Mengisi Borang TTx-03]](https://www.myttx.customs.gov.my/wp-content/uploads/2022/05/APPENDIX-E-Panduan-Mengisi-Borang-TTx-03.pdf) +6. [Guideline to fill up Form TTx-04 [Panduan Mengisi Borang TTx-04]](https://www.myttx.customs.gov.my/wp-content/uploads/2022/05/APPENDIX-F-Panduan-Mengisi-Borang-TTx-04.pdf) +7. [Tourism Tax (Amendment) Act 2021](https://www.myttx.customs.gov.my/wp-content/uploads/2022/05/20210202_A1633_BI_Act-A1633.pdf) +8. [Guide On Tourism Tax [Digital Platform Service Provider]](https://www.myttx.customs.gov.my/wp-content/uploads/2025/03/Guide-on-DPSP-11032025.pdf) + +## Modules Require + +1. SQL Accounting (S&P) +2. DIY field +3. DIY script + +## MyTTx Database + +1. MyTTx database consists of: + 1. Compliance of Tax Invoice / Invoice format follow the MYTTx and GST standard. + 2. MYTTx preset setting ready. + 3. TTx-03 form. +2. Click on the link below and get the backup file for MYTTx database structure: + 1. [MYTTx-Testing Company](http://www.sql.com.my/document/MYTTx_TestingCompany-%5bTTx-01Sept2017%5d-2017-09-18-sqlacc.zip) +3. Restore this backup. +4. Enter the user ID and password with “ADMIN” to login. + +## MyTTx Basic Settings (Compulsory) + +### MyTTx - Maintain Account + +Go to **[GL | Maintain Account...]**, under **Current Liabilities**, create a new GL Account for GL Code is **TTx-201**, description is **TTx - Payable**. + +### MyTTx - Maintain Stock Group + +Go to **[Stock | Maintain Stock Group... | New]** and setting like this: + +![basic-setting-stock-grp](../../../static/img/usage/general/myttx/basic-setting-stock-grp.jpg) + +### MyTTx - Maintain Stock Item + +Go to **[Stock | Maintain Stock Item... | New]** + +MyTTx list settings are compulsory to follow : + +| No. | Code | Description | Item Group | Base UOM | Ref. Price | Output Tax | Stock Control | +|-----|------|--------------|-------------|-----------|-------------|-------------|----------------| +| 1. | TTx | TTx | TTx | ROOM/NIGHT | 10.00 | NS | Untick | +| 2. | TTxE | TTx Exempted | TTx | ROOM/NIGHT | 0.00 | NS | Untick | + +:::info + + 1. For GST registered person, output tax must set to NS. + NS - Matters to be treated as neither a supply of goods nor a supply of services, and no GST chargeable (0%) + 2. For Non-GST registered person, output tax must LEAVE IT BLANK. + +::: + +![basic-setting-stock-item](../../../static/img/usage/general/myttx/basic-setting-stock-item.jpg) + +## Room Settings + +### Room - Maintain Account + +Go to **[GL | Maintain Account...]** and make sure **GL Account 500-000** is set as **SALES**. If it is not, create one. + +### Room - Maintain Stock Group + +Go to **[Stock | Maintain Stock Group... | New]** and setting like this: + +![room-setting-stock-grp](../../../static/img/usage/general/myttx/room-setting-stock-grp.jpg) + +### Room - Maintain Stock Item + +:::info + For GST or Non-GST registered person, output tax always LEAVE IT BLANK. +::: + +Go to **[Stock | Maintain Stock Item... | New]** + + 1. You can create different room types as different item code. + 2. Example of the room types settings list are: + +| No. | Code | Description | Item Group | Base UOM | Ref. Price | Output Tax | Stock Control | +|-----|------|--------------|-------------|-----------|-------------|-------------|----------------| +| 1. | ROOM-NORM | NORMAL-ROOM CHARGES | ROOM | ROOM/NIGHT | 200.00 | | Untick | +| 2. | ROOM-EXEC | EXECUTIVE-ROOM CHARGES | ROOM | ROOM/NIGHT | 400.00 | | Untick | +| 3. | ROOM-DELUX | DELUXE-ROOM CHARGES | ROOM | ROOM/NIGHT | 600.00 | | Untick | + +![room-setting-stock-item](../../../static/img/usage/general/myttx/room-setting-stock-item.jpg) + +## Service Charge Settings + +### Service Charge - Maintain Account + +Go to **[GL | Maintain Account...]**, under **Revenue**, create a new GL Account for GL Code is **500-001**, description is **SERVICE CHARGES**. + +### Service Charge - Maintain Stock Group + +Go to **[Stock | Maintain Stock Group... | New]** and setting like this: + +![service-setting-stock-grp](../../../static/img/usage/general/myttx/service-setting-stock-grp.jpg) + +### Service Charge - Maintain Stock Item + +:::info + For GST or Non-GST registered person, output tax always LEAVE IT BLANK. +::: + +Go to **[Stock | Maintain Stock Item... | New]** + +![service-setting-stock-item-1](../../../static/img/usage/general/myttx/service-setting-stock-item-1.jpg) + + 1. Example of the Service Charge setting: + + | No. | Code | Description | Item Group | Output Tax | Stock Control | + |-----|------|--------------|-------------|-------------|----------------| + | 1. | SERVICE-CHARGE | Service Charge | SERVICE-CHARGE | | Untick | + + 2. **UOM Tab** can be use to preset the types of room rate. + + | No. | UOM | Rate | Ref. Price | + |-----|-----|------|-------------| + | 1. | ROOM-NORM | 1.00 | 200.00 | + | 2. | ROOM-EXEC | 1.00 | 400.00 | + | 3. | ROOM-DELUX | 1.00 | 600.00 | + + 3. SERVICE SETTINGS + 1. Tick to confirm this is Service Charge code. + 2. Enter a service rate %. Example the screenshot below is 10%. + + ![service-setting-stock-item-4](../../../static/img/usage/general/myttx/service-setting-stock-item-4.jpg) + +## New Guest Details + +Go to **[Customer | Maintain Customer...]** + + 1. You can maintain all the guest particular details at Maintain Customer. + 2. Record the **passport no** at company name 2. See the screenshot below. + + ![new-guest-details-1](../../../static/img/usage/general/myttx/new-guest-details-1.jpg) + + 3. Tick on TTX Payable checkbox if he/she is NOT a Malaysian national or a permanent resident who holds MyPR card. + + ![new-guest-details-2](../../../static/img/usage/general/myttx/new-guest-details-2.jpg) + +## Record of Tax Invoice / Invoice + +Go to **[Sales | Invoice...]** + + 1. Click on New. + 2. Select a customer (guest). + 3. Select an agent (eg. front desk agent). + 4. Enter the room, service charges, date stay, TTx at the details parts. + + | No. | Field Name | Original Field Name | DIY Field | + |-----|-------------|---------------------|------------| + | 1 | Item Code | Item Code | | + | 2 | Description | Description | | + | 3 | No of Room | UDF_Room_Qty | YES | + | 4 | Types | UOM | | + | 5 | Room Rate | Unit Price | | + | 6 | Date Stay | Delivery Date | | + | 7 | Sub Total | Sub Total | | + | 8 | Tax | Tax | | + | 9 | Tax Amt | Tax Amt | | + | 10 | Sub Total(Tax) | Sub Total(Tax) | | + | 11 | Service Chrg % | UDF_Service_Rate | YES | + + ![record-tax-inv-step1](../../../static/img/usage/general/myttx/record-tax-inv-step1.jpg) + + 5. Select the room, service charges and TTx at Item Code column. + + ![record-tax-inv-step2](../../../static/img/usage/general/myttx/record-tax-inv-step2.jpg) + + 6. Enter the number of rooms to be stay at No of Room column. + + ![record-tax-inv-step3](../../../static/img/usage/general/myttx/record-tax-inv-step3.jpg) + + 7. For **service charges**, select the **types of the room** (eg. room normal or executive) to calculate the service charge % on the room type rate. + + ![record-tax-inv-step4](../../../static/img/usage/general/myttx/record-tax-inv-step4.jpg) + + 8. Enter the Date Stay. + + ![record-tax-inv-step5](../../../static/img/usage/general/myttx/record-tax-inv-step5.jpg) + + 9. To confirm the Invoice, click on Save. + 10. You can preview/print the Tax Invoice or Invoice. + +### Sample of Full Tax Invoice (For GST Registered Person) + +1. Full Tax Invoice requires the following information for operators **registered with GST**: + 1. the word ‘tax invoice’ in a prominent place; + 2. the tax invoice serial number; + 3. the date of issuance of the tax invoice; + 4. the name, address and identification number of the supplier; + 5. the name and address of the person to whom the goods or services are supplied; + 6. a description sufficient to identify the goods or services supplied; + 7. for each description, distinguish the type of supply for zero rate, standard rate and exempt, the quantity of the goods or the extent of the services supplied and the amount payable, excluding tax; + 8. any discount offered; + 9. the total amount payable excluding tax, the rate of tax and the total tax chargeable to be shown separately; +2. The **additional details** required in the tax invoices are as follows: + 1. the Tourism Tax Identification Number of the operator; and + 2. the rate and amount of TTx payable, separately from the charges for the accommodation provided by the operator. + +![full-tax-inv-sample](../../../static/img/usage/general/myttx/full-tax-inv-sample.jpg) + +### Sample of Invoice (For Non-GST Registered Person) + +For operators **not registered for GST**, details to be include in the invoice, receipt or other document to the tourist are as follows: + + 1. The invoice serial number. + 2. The date of the invoice. + 3. The name, address and the Tourism Tax Identification Number of the operator. + 4. The name and address of the person to whom the accommodation premises are provided. + 5. The rate and amount of TTx payable, separately from the charges for the accommodation provided by the operator. + +![inv-sample](../../../static/img/usage/general/myttx/inv-sample.jpg) + +## Adjustment Using Debit/Credit Note + +### Credit Note + +Go to **[Sales | Credit Note | New...]** + +1. Select a customer (guest). +2. Right click on the **Credit Note** title. See the screenshot below. + + ![adjustment-credit-note](../../../static/img/usage/general/myttx/adjustment-credit-note.jpg) + +3. Select the tax invoice/invoice to transfer for CN adjustment. +4. State the reason at the document description. See the screenshot below. + + ![adjustment-credit-note-2](../../../static/img/usage/general/myttx/adjustment-credit-note-2.jpg) + +### Debit Note + +Go to **[Sales | Debit Note | New...]** + +1. Select a customer (guest). +2. Select a Tax Invoice/Invoice at **From Doc**. See the screenshot below. + + ![adjustment-debit-note](../../../static/img/usage/general/myttx/adjustment-debit-note.jpg) + +3. State the reason at the document description. + +## Print TTX-03 Form + +Go to **[Sales | Print Sales Price History...]** + +1. Select the **date range (Taxable Period)**. +2. Tick the following document types: + 1. Invoice + 2. Cash Sale + 3. Debit Note (adjustment) + 4. Credit Note (adjustment) +3. Click **Apply**. +4. Preview / print the **TTx-03** form. + +![print-ttx-form](../../../static/img/usage/general/myttx/print-ttx-form.jpg) + +### Sample of TTx-03 generated from SQL Account + +Page 1 + +![sample-ttx-1](../../../static/img/usage/general/myttx/sample-ttx-1.jpg) + +Page 2 + +![sample-ttx-2](../../../static/img/usage/general/myttx/sample-ttx-2.jpg) + +### TTx-03 Part A - Detail of Operator + +Go to **[File | Company Profile...]** + +1. Click **Edit** the Company Profile. +2. Click to the **More** tab. +3. Enter the **Tourism Tax Identification number** in ATS/ATMS Permit No. + +![ttx-part-a](../../../static/img/usage/general/myttx/ttx-part-a.jpg) + +### TTx-03 Part D - Declaration Part + +Go to **[User | Maintain User...]** + +Under **Misc** tab, you can update the following info as required in TTx-03 form: + + 1. IC (New) + 2. IC (Old) + 3. Passport + 4. Nationality + +![ttx-part-d](../../../static/img/usage/general/myttx/ttx-part-d.jpg) diff --git a/docs/usage/general/others/_category_.json b/docs/usage/general/others/_category_.json new file mode 100644 index 00000000..bc583ac4 --- /dev/null +++ b/docs/usage/general/others/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Others", + "position": 3, + "link": { + "type": "generated-index", + "description": "Others guideline for SQL Account" + } +} \ No newline at end of file diff --git a/docs/usage/general/others/command-line.md b/docs/usage/general/others/command-line.md new file mode 100644 index 00000000..9f823972 --- /dev/null +++ b/docs/usage/general/others/command-line.md @@ -0,0 +1,64 @@ +--- +sidebar_position: 18 +title: Command Line Switches +description: A guide about Command Line Switches +slug: /usage/general/others/command-line +tags: ["SQL Account", "Others", "Command Line"] +--- + +## Introduction + +The following switches are available when starting the SQL application from the command line. + +All switches must be preceded by a dash (-), unless otherwise noted. + +The switches are case-sensitive. + +## Command switches + +| Command | Description | +|----------|-------------| +| `-b` | Backup database. | +| `-t ` | Run unit testing with GUI or Console application type. | +| `-i` | *(For developer use only)* Generate application integrity file. | +| `-deploy` | *(For developer use only)* Deploy runtime files. | + +## General switches + +| Command | Description | +|----------|-------------| +| `-g ` | Optional. Access to DCF file. | +| `-d ` | Optional. Access to database file. | +| `-u ` | Optional. Login username. | +| `-p ` | Optional. Login password. | + +## Unit Testing Switches + +| Command | Description | +|----------|-------------| +| `-testparams ` | Optional. Unit testing parameters. | + +## Backup Switches + +| Command | Description | +|----------|-------------| +| `-g ` | Optional. Backup all databases in the specified DCF file. Uses the default DCF file if not specified. | +| `-d ` | Optional. Backup the specified database only. | +| `-u ` | Optional. Database server authenticated username. Uses the default username if not specified. | +| `-p ` | Optional. Database server authenticated password. Uses the default password if not specified. | +| `-to=` | **Required.** Folder to store backup files. | +| `-remove` | Optional. Remove temporary tables before backup. | +| `-zip` | Optional. Compress backup files using ZIP format. | +| `-mail` | Optional. Send email notification. | +| `-ap ` | Undocumented option. Database ADMIN passwords separated by CRLF and encoded with Base64. | + +## E-mail switches + +| Command | Description | +|----------|-------------| +| `-smtp_host=` | SMTP server host name or IP address. | +| `-smtp_port=` | SMTP service port number. | +| `-smtp_user=` | Username for SMTP authentication. | +| `-smtp_pass=` | Password for SMTP authentication. | +| `-mail_from=` | Sender’s email address. | +| `-mail_to=,,,...` | Recipient email addresses. | diff --git a/docs/usage/general/others/cross-checking-reports.md b/docs/usage/general/others/cross-checking-reports.md new file mode 100644 index 00000000..c630a5bf --- /dev/null +++ b/docs/usage/general/others/cross-checking-reports.md @@ -0,0 +1,63 @@ +--- +sidebar_position: 1 +title: Cross Checking Reports +description: A guide about Cross Checking Reports +slug: /usage/general/others/cross-checking-reports +tags: ["SQL Account", "Others", "Cross Checking"] +--- + +## Introduction + +Sometimes we want to ensure all data is correctly posted/recorded, so we need some **extra** reports to check before submitting or reporting to: + +- Top Management +- Auditors +- Customs (Kastam) + +## Reports + +### GL Ledger + +| Report Name | Description | +|--------------|-------------| +| **GST-Ledger-GST-Output Tax Prepaid** | Lists transactions still outstanding for GST-Output Tax Prepaid. | +| **GST-Ledger-Vs-GST-03_5b** | Checks consistency between GST PAYABLE account & GST-03 5b transactions. | +| **GST-Ledger-Vs-GST-03_6b** | Checks consistency between GST CLAIMABLE account & GST-03 6b transactions. | +| **GL Journal of Transaction - Inbalance** | Ensures that total local DR & total local CR for each transaction are balanced. | +| **GL Cash Book Listing - GST Review** | Ensures local amount & local tax amount are correctly calculated for all Official Receipts & Payment Vouchers. | + +### Sales Listing + +| Report Name | Description | +|--------------|-------------| +| **Sales Local - Invoice Listing (GST 1) - SLvsAR** | Checks consistency between Sales Invoice & Customer Invoice transactions. | +| **Sales Local - Cash Sales Listing (GST 1) - SLvsAR** | Checks consistency between Sales Cash Sales & Customer Invoice transactions. | +| **Sales Local - Debit Note Listing (GST 1) - SLvsAR** | Checks consistency between Sales Debit Note & Customer Debit Note transactions. | +| **Sales Local - Credit Note Listing (GST 1) - SLvsAR** | Checks consistency between Sales Credit Note & Customer Credit Note transactions. | +| **Sales Customer Price History (GST 1) - Review** | Ensures the local amount & local tax amount are correctly calculated. | + +### Purchase Listing + +| Report Name | Description | +|--------------|-------------| +| **Purchase Local - Purchase Invoice Listing (GST 1) - PHvsAP** | Checks consistency between Purchase Invoice & Supplier Invoice transactions. | +| **Purchase Local - Cash Purchase Listing (GST 1) - PHvsAP** | Checks consistency between Purchase Cash Purchase & Supplier Invoice transactions. | +| **Purchase Local - Debit Note Listing (GST 1) - PHvsAP** | Checks consistency between Purchase Debit Note & Supplier Debit Note transactions. | +| **Purchase Local - Purchase Return Listing (GST 1) - PHvsAP** | Checks consistency between Purchase Return & Supplier Credit Note transactions. | +| **Purchase Supplier Price History (GST 1) - Review** | Ensures the local amount & local tax amount are correctly calculated. | + +### Customer Listing + +| Report Name | Description | +|--------------|-------------| +| **Customer - GST Review** | Ensures the local amount & local tax amount are correctly calculated for all Customer Invoices, Debit Notes, & Credit Notes. | +| **Cust Local - Payment Listing (GST 1) - Opening Bad Debts** | Ensures past payments with GST are properly recorded. | +| **Cust Local - Credit Note Listing (GST 1) - Opening Bad Debts** | Ensures past credit notes with GST are properly recorded. | + +### Supplier Listing + +| Report Name | Description | +|--------------|-------------| +| **Supplier - GST Review** | Ensures the local amount & local tax amount are correctly calculated for all Supplier Invoices, Debit Notes, & Credit Notes. | +| **Supp Local - Payment Listing (GST 1) - Opening Bad Debts** | Ensures past payments with GST are properly recorded. | +| **Supp Local - Credit Note Listing (GST 1) - Opening Bad Debts** | Ensures past credit notes with GST are properly recorded. | diff --git a/docs/usage/general/others/display-pole.md b/docs/usage/general/others/display-pole.md new file mode 100644 index 00000000..962c9c38 --- /dev/null +++ b/docs/usage/general/others/display-pole.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 5 +title: Display Pole - VFD-800-U in Windows 10 +description: A guide about Display Pole - VFD-800-U in Windows 10 +slug: /usage/general/others/display-pole +tags: ["SQL Account", "Others", "Display Pole"] +--- + +## Introduction + +If you upgraded to Windows 10 and are using the Display Pole VFD-800-U (this may affect other models), you may experience communication problems with SQL Accounting. + +This occurs because the built-in or original driver is incompatible with Windows 10. + +## Tools & Driver Required + +1. **[USBDeView](http://www.nirsoft.net/utils/usb_devices_view.html)** - To check USB Status & Com Port Number +2. **Driver** (Select Either 1 below which is match with your Display Pole Model) + - VFD-800-U + - CD-7220 - *Select Install Simulation to COM Port USB Driver option* + +## Problem + +When you run the USBDeview.exe you will see the above problem. + +![display-problem](../../../../static/img/usage/general/others/display-pole/display-problem.jpg) + +## Solution + +1. Right Click **This PC | Properties** +2. Click **Device Manager** +3. Right-click on the problematic COM port + + ![display-solution1](../../../../static/img/usage/general/others/display-pole/display-solution1.jpg) + +4. Select "Delete the driver software for this device" + + ![display-solution2](../../../../static/img/usage/general/others/display-pole/display-solution2.jpg) + +5. Click OK +6. Install New/Update driver (May refer to the Display Pole Provider) +7. Click Action | Scan for hardware changes +8. Done & will look like below screen + +In **USBDeView** + +![display-solution3](../../../../static/img/usage/general/others/display-pole/display-solution3.jpg) + +In **Device Manager** + +![display-solution4](../../../../static/img/usage/general/others/display-pole/display-solution4.jpg) diff --git a/docs/usage/general/others/firebird-odbc.md b/docs/usage/general/others/firebird-odbc.md new file mode 100644 index 00000000..b3fb391f --- /dev/null +++ b/docs/usage/general/others/firebird-odbc.md @@ -0,0 +1,145 @@ +--- +sidebar_position: 10 +title: Firebird ODBC +description: A guide about Firebird ODBC +slug: /usage/general/others/firebird-odbc +tags: ["SQL Account", "Others", "Firebird ODBC"] +--- + +## Introduction + +This is an External Utilities for other Application to Access Firebird Database. + +1. **Pros** + + - Can direct Retrieve/Get, Delete and/or Modified the Information/Data From Connected Database. + +2. **Cons** + + - User might lost concurrent license (i.e. need to buy double) + - Might corrupt the database if not careful + - Might cause unable to upgrade database due to database is "modified" + - Setting need to reset if user change the database file name + - Setting need to reset if estream change firebird version or table/field name + +:::warning +Using this Application is at your own risk. +Estream will not responsible on any data corrupt or missing due to usage of this application. +No further support other then this but we will try our best to help. +::: + +## Requirement + +1. Firebird Server 3.0 & above: + - [32 bits](https://github.com/FirebirdSQL/firebird/releases/download/R3_0_7/Firebird-3.0.7.33374_1_Win32.exe) + - [64 bits](https://github.com/FirebirdSQL/firebird/releases/download/R3_0_7/Firebird-3.0.7.33374_1_x64.exe) +2. [SQL Accounting](https://www.sql.com.my/download/demo/sqlacc-setup.exe) + +## Program + +1. [Firebird ODBC 2.0.4.155 Win32](https://sourceforge.net/projects/firebird/files/firebird-ODBC-driver/2.0.4-Release/Firebird_ODBC_2.0.4.155_Win32.exe/download) +2. [Firebird ODBC 2.0.5.156 Win64](https://sourceforge.net/projects/firebird/files/firebird-ODBC-driver/2.0.5-Release/Firebird_ODBC_2.0.5.156_x64.exe/download) + +## Setup + +1. Open **Control Panel.** + +2. Double Click **Administrative Tools |** + - ODBC Data Sources (32-bit), or + - ODBC Data Sources (64-bit) +3. Click on **System DSN** tab + +4. Click **Add** button. + + ![setup-step1](../../../../static/img/usage/general/others/firebird-odbc/setup-step1.jpg) + +5. Select **Firebird/InterBase(r) Driver** + +6. Click Finish button. + + ![setup-step2](../../../../static/img/usage/general/others/firebird-odbc/setup-step2.jpg) + +7. Under Firebird ODBC Setup, define the following info only and the rest by default : + + 1. **Data Source Name (DSN)**: Can be any Name (eg. FB) + 2. **Description**: Can be any Description (eg. FB) + 3. **Database**: + - The Firebird FDB file path + - Can get it under SQLAccounting\DB or estream\DB Folder + 4. **Client**: + - The Firebird fbclient.dll path + - Can get it under SQLAccounting\firebird 3.0 or Firebird\Firebird 3_0 Folder + - For 64 Bit can Leave it empty + 5. **Database Account**: Firebird user name (Default is **SYSDBA**) + 6. **Password**: Firebird password (Default is **masterkey**) + 7. **Character Set**: Set to **UTF8** (For FB3.0 & above) + 8. **Dialect**: Set to **3** + 9. **Read(default write)**: Check/Tick to make transactions read-only + +![setup-step3](../../../../static/img/usage/general/others/firebird-odbc/setup-step3.jpg) + +:::info + +- Make sure when click **Test Connection** is shown Connection successful! then only continue others Steps +- To access the FDB with network environment you can enter the ServerName or ServerIPAddress:Database Path at Database field + +Examples: + +1. ServerPC: `C:\Program Files\estream\SQLAccounting\DB\ACC-0001.FDB` +2. 192.168.0.18: `C:\Program Files\estream\SQLAccounting\DB\ACC-0001.FDB` + +::: + +Below is example where to get the ServerName, Path & FDB + +![setup-step4](../../../../static/img/usage/general/others/firebird-odbc/setup-step4.gif) + +## Example Access From Microsoft Excel + +Below example is using Microsoft Excel 2016 to get Firebird Data using ODBC + +1. Create **New Worksheet** +2. Click **Data** Tab +3. Clcik **Get External Data | From Other Source | From Microsoft Query** + + ![example-access-1](../../../../static/img/usage/general/others/firebird-odbc/example-access-1.jpg) + +4. Select **FB\*** (The Data Source Name entered in ODBC) + +5. Click **OK** button + + ![example-access-2](../../../../static/img/usage/general/others/firebird-odbc/example-access-2.jpg) + +6. Select the table at the Available tables and columns field + +7. Click the **>** button to select the Columns + +8. Click **Next** button till you see below dialog + + ![example-access-3](../../../../static/img/usage/general/others/firebird-odbc/example-access-3.jpg) + +9. Select **View data or edit query** in Microsoft Query option + +10. Click **Finish** button + + ![example-access-4](../../../../static/img/usage/general/others/firebird-odbc/example-access-4.jpg) + +11. Click SQL button to edit your Query + +12. Edit the **Query Statement here** + +13. Click **OK button** when done + + ![example-access-5](../../../../static/img/usage/general/others/firebird-odbc/example-access-5.jpg) + +14. Click **File | Return Data to Microsoft Excel** + + ![example-access-6](../../../../static/img/usage/general/others/firebird-odbc/example-access-6.jpg) + +15. Click **Ok** button + + ![example-access-7](../../../../static/img/usage/general/others/firebird-odbc/example-access-7.jpg) + +16. **Result** + + ![example-access-8](../../../../static/img/usage/general/others/firebird-odbc/example-access-8.jpg) diff --git a/docs/usage/general/others/flame-robin.md b/docs/usage/general/others/flame-robin.md new file mode 100644 index 00000000..acef3f53 --- /dev/null +++ b/docs/usage/general/others/flame-robin.md @@ -0,0 +1,105 @@ +--- +sidebar_position: 9 +title: Flame Robin +description: A guide about Flame Robin +slug: /usage/general/others/flame-robin +tags: ["SQL Account", "Others", "Flame Robin"] +--- + +## Introduction + +This is an External Firebird Console Application. + +:::warning +Use of this application is at your own risk. +Estream is not responsible for any data corruption or loss resulting from the use of this application. +::: + +## Requirement + +1. Firebird Server + +## Program + +1. [Flame Robin Homepage](http://www.flamerobin.org/) +2. [Alternative Download](https://download.sql.com.my/customer/Fairy/FlameRobin(x64).zip) +3. MD5 : DCF5938386D92FE858803923CD171841 (Alternative Link Only) + +## Installation + +1. **Using Official Download**: Double-click the setup file and follow the Setup Wizard. +2. **Using Alternative Download**: Extract the files to your desired location. + +## Steps + +### Server Information + +Only 1 time setting for each Firebird Version + +1. Right Click Here + + ![server-information-step1](../../../../static/img/usage/general/others/flame-robin/server-information-step1.jpg) + +2. Select Server registration info... + + ![server-information-step2](../../../../static/img/usage/general/others/flame-robin/server-information-step2.jpg) + +3. Enter the following information: + + - **Display name**: Any name of your choice (e.g., Happy) + - **Hostname**: Server Name or IP Address + - **Port Number**: Firebird Port number (Default: **3050**) + + ![server-information-step3](../../../../static/img/usage/general/others/flame-robin/server-information-step3.jpg) + +4. Click **Save** button + +### Register New Database + +You can register multiple databases, but you can also register one and reuse its settings. + +1. Click **Database | Register existing database...** + + ![register-new-database](../../../../static/img/usage/general/others/flame-robin/register-new-database.jpg) + +2. Enter the following information: + + - **Display name**: Any name of your choice (e.g., ACC-0038) + - **Database path**: The Firebird FDB file path + - **Authentication**: Select "Use saved username and password" + - **Username**: Firebird username (Default: SYSDBA) + - **Password**: Firebird password (Default: masterkey) + - **Charset**: Set to UTF8 (For FB3.0 and above) + - **Role**: Leave empty + +3. Click **Save** button +4. Click **Database | Connect** + +### Update/Reuse Registered Database + +1. Select the database from the list: + + ![update-registered-database](../../../../static/img/usage/general/others/flame-robin/update-registered-database.jpg) + +2. Click **Database | Database Registration Info...** +3. You will see the same form as in Step 2 of "Register New Database" above +4. Update the **Display name** (optional) and **Database path** as needed +5. Click the **Save** button +6. Click **Database | Connect** + +### Write Query + +1. Select here + + ![write-query-1](../../../../static/img/usage/general/others/flame-robin/write-query-1.jpg) + +2. Click **Database | Run a query...** + + ![write-query-2](../../../../static/img/usage/general/others/flame-robin/write-query-2.jpg) + +3. Enter your SQL query in the query window: + + ![write-query-3](../../../../static/img/usage/general/others/flame-robin/write-query-3.jpg) + +4. Press **F4** to execute your query +5. Press **F5** to commit your query diff --git a/docs/usage/general/others/generate-backup-script.md b/docs/usage/general/others/generate-backup-script.md new file mode 100644 index 00000000..e2821d6a --- /dev/null +++ b/docs/usage/general/others/generate-backup-script.md @@ -0,0 +1,153 @@ +--- +sidebar_position: 14 +title: Generate Backup Script +description: A guide about Generate Backup Script +slug: /usage/general/others/generate-backup-script +tags: ["SQL Account", "Others", "Backup", "Script"] +--- + +## Introduction + +SQL application may backup database via Command Line Switches operation. The command line operation may backup all databases or specified database store in DCF file with proper switches. + +The command line backup script may generated via context menu command in DCF: **Generate Backup Script**. The script may execute in console or batch file. + +A common usage of backup script is execute the script in **Windows Task Scheduler** to backup database periodically. This action automate backup operation to ease administrator's task. Tasks added to Task Scheduler starts each time you start Windows, and runs in the background. With Task Scheduler, you can schedule a backup databases task to run daily, weekly, monthly, or at certain times (such as system startup). + +This command line backup script is only applicable for **Windows 7 & above** only. + +## Generate Backup Script for Database Group + +1. To generate a backup script for all databases in the selected group: +2. Right-click the desired database group and select "Generate Backup Script" + +![generate-backup-script-grp](../../../../static/img/usage/general/others/generate-backup-script/generate-backup-script-grp.jpg) + +## Generate Backup Script for Single Database + +1. To generate a backup script for a single database: +2. Right-click the desired database and select "Generate Backup Script" + +![generate-backup-script-item](../../../../static/img/usage/general/others/generate-backup-script/generate-backup-script-item.jpg) + +## Generate Backup Script + +1. **Database (optional)**: If no database is specified, all databases in the group will be backed up +2. **Backup to**: Select the backup directory +3. **Admin Password(s)**: Enter admin user passwords for database access. For multiple databases with different admin passwords, separate passwords with commas. Use the adjacent button to toggle between plain text and masked password display +4. **Send Mail**: Enable to receive backup status notifications via email +5. **Zip Backup**: Enable to compress the backup into a zip file +6. **Test Email**: Click to verify successful email delivery to recipient accounts +7. **Copy**: The command text will be automatically copied to your clipboard for pasting into Windows Task Scheduler (accessible via the "Launch Window Task Scheduler" shortcut) + +![generate-backup-script-step1](../../../../static/img/usage/general/others/generate-backup-script/generate-backup-script-step1.jpg) + +### Email setting for TMNet + +- SMTP Host: **smtp-proxy.tm.net.my** +- SMTP Port No: **25** +- SMTP User: n/a. Leave empty +- SMTP Password: n/a. Leave empty +- Use SSL: **False** (or unticked) + +### Email setting for Gmail + +- SMTP Host: **smtp.gmail.com** +- SMTP Port No: **465** +- SMTP User: **e.g.: \@gmail.com** +- SMTP Password: **\*\*\*\*\*\*\* \** +- Use SSL: **True** (or ticked) + +:::success[note] + 1. [Guide to create & use app password](https://support.google.com/accounts/answer/185833?hl=en) + 2. [Google AppPassword](https://myaccount.google.com/apppasswords) +::: + +![generate-backup-script-step2](../../../../static/img/usage/general/others/generate-backup-script/generate-backup-script-step2.jpg) + +![generate-backup-script-step3](../../../../static/img/usage/general/others/generate-backup-script/generate-backup-script-step3.jpg) + +### Email setting for Yahoo! Mail + +- SMTP Host: **smtp.mail.yahoo.com** +- SMTP Port No: **465** +- SMTP User: **e.g.: \@yahoo.com** +- SMTP Password: **\*\*\*\*\*\*\*** +- Use SSL: **True** (or ticked) + +### Email setting for private mail server + +The following a sample setting. Configure according to your private mail server setting. + +- SMTP Host: **\** +- SMTP Port No: **587** +- SMTP User: **e.g.: \** +- SMTP Password: **\*\*\*\*\*\*\*** +- Use SSL: **True or False** + +### Email setting for MSN live mail or Hotmail + +Unsupported + +## Adding Backup Task to Windows Task Scheduler + +1. Navigate to **Start > Accessories > System Tools > Task Scheduler** +2. Click **Action > Create Basic Task** + + ![add-task-to-scheduler-1](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-1.jpg) + +3. Enter a name for the task + + ![add-task-to-scheduler-2](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-2.jpg) + +4. Click Next and select when to trigger the task (e.g., Daily) + + ![add-task-to-scheduler-3](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-3.jpg) + +5. Click Next, then set the start date, start time, and daily recurrence + + ![add-task-to-scheduler-4](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-4.jpg) + +6. Click next, choose **Start a Program** + + ![add-task-to-scheduler-5](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-5.jpg) + +7. Click next, paste all the backup script text that you copied just now into ****"Program/Script"** + + ![add-task-to-scheduler-6](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-6.jpg) + +8. Set the Start in(optional) path to the Exe folder (eg. **C:\Estream\SQL Accounting**) +9. Click next, a dialog prompted and click **Yes** + + ![add-task-to-scheduler-7](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-7.jpg) + +10. Click **Next** +11. Tick the option **Open the Properties dialog for this task when I click Finish** + + ![add-task-to-scheduler-8](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-8.jpg) + +12. Click **Finish** +13. Select the option **Run whether user is logged on or not** + + ![add-task-to-scheduler-9](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-9.jpg) + +14. Click **Triggers** tab at top then click **Edit...** button + + ![add-task-to-scheduler-10](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-10.jpg) + +15. Change the time to run + + ![add-task-to-scheduler-11](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-11.jpg) + +16. Click OK 2 times + + ![add-task-to-scheduler-12](../../../../static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-12.jpg) + +17. Enter the window **User Name & Password** +18. Click **Ok** + +## Recommendations + +- Schedule backups during off-hours (e.g., starting at 1:00 AM) +- Do not shut down the server while automatic backups are running +- Consider scheduling server shutdown and startup times for weekends as needed diff --git a/docs/usage/general/others/gst-bounce-cheque.md b/docs/usage/general/others/gst-bounce-cheque.md new file mode 100644 index 00000000..214e1585 --- /dev/null +++ b/docs/usage/general/others/gst-bounce-cheque.md @@ -0,0 +1,44 @@ +--- +sidebar_position: 6 +title: GST Bounce Cheque +description: A guide about GST Bounce Cheque +slug: /usage/general/others/GST-Bounce-Cheque +tags: ["SQL Account", "Others", "GST", "Bounce"] +--- + +## Scenario + +1. Invoice Date Jan 2016 +2. Bad Debts Relief - Jul 2016 to Sep 2016 +3. Payment Dec 2016 +4. Bad Debts Recover - Oct 2016 to Dec 2016 +5. **Payment Bounce - Jan 2017** \<--- Should do Adjustment on Bounce GST Period (before process GST-03) +6. Bad Debts Relief(after Adjustment) - Jan 2017 to Mar 2017 +7. Replace New Cheque - Apr 2017 +8. Bad Debts Recover - Apr 2017 to Jun 2017 + +## Solution + +By using the GL Journal Voucher - Bank Charges - GST Reversal button + +### Customer Side + +At GST Period Jan 2017: + +1. DR GST-101 - GST - CLAIMABLE --> (SL-AJP-BD) +2. CR GST-202 - GST - SALES DEFERRED TAX + +![customer-side-1](../../../../static/img/usage/general/others/gst-bounce-cheque/customer-side-1.jpg) + +![customer-side-2](../../../../static/img/usage/general/others/gst-bounce-cheque/customer-side-2.jpg) + +### Supplier Side + +For GST Period January 2017: + +1. Debit: GST-102 - GST - PURCHASE DEFERRED TAX +2. Credit: GST-201 - GST - PAYABLE → (PH-AJS-BD) + +![supplier-side-1](../../../../static/img/usage/general/others/gst-bounce-cheque/supplier-side-1.jpg) + +![supplier-side-2](../../../../static/img/usage/general/others/gst-bounce-cheque/supplier-side-2.jpg) diff --git a/docs/usage/general/others/gst-gain-loss.md b/docs/usage/general/others/gst-gain-loss.md new file mode 100644 index 00000000..d8c5b5fe --- /dev/null +++ b/docs/usage/general/others/gst-gain-loss.md @@ -0,0 +1,50 @@ +--- +sidebar_position: 7 +title: GST Gain Loss - Manual +description: A guide about GST Gain Loss - Manual +slug: /usage/general/others/gst-gain-loss +tags: ["SQL Account", "Others", "GST", "Gain Loss"] +--- + +## Scenario + +1. Foreign Customer/Supplier accounts set in local currency in SQL Accounting +2. Using local currency for Foreign Customer/Supplier accounts without the Currency Module in SQL Accounting + +## Solution + +Use the following documents for Customer/Supplier transactions: + +1. Debit Notes +2. Credit Notes +3. GL Journal Vouchers +4. Foreign Gain/Loss Account (with Tax Code IES, replacing ES43) + +### Customer Side + +1. **Debit Note (Gain)** + - DR Debtor + - CR Foreign Gain Account (IES (Replace for ES43)) +2. **Credit Note (Loss)** + - DR Foreign Loss Account (IES (Replace for ES43)) + - CR Debtor + +### Supplier Side + +#### Gain + +1. **Supplier Credit Note** + - DR Supplier + - CR Contra +2. **GL Journal Voucher** + - DR Contra + - CR Foreign Gain Account (IES (Replace for ES43)) + +#### Loss + +1. **Supplier Debit Note** + - DR Contra + - CR Supplier +2. **GL Journal Voucher** + - DR Foreign Loss Account (IES (Replace for ES43)) + - CR Contra diff --git a/docs/usage/general/others/gst-summary-sheet.md b/docs/usage/general/others/gst-summary-sheet.md new file mode 100644 index 00000000..04d9e1e7 --- /dev/null +++ b/docs/usage/general/others/gst-summary-sheet.md @@ -0,0 +1,23 @@ +--- +sidebar_position: 8 +title: GST Summary Sheet - MY - Detail +description: A guide about GST Summary Sheet - MY - Detail +slug: /usage/general/others/gst-summary-sheet +tags: ["SQL Account", "Others", "GST", "Summary"] +--- + +## Introduction + +This report has been available since April 1, 2015. It provides a summary by tax and transaction type. However, this report is not included in the latest GST Accounting Guidelines (March 2, 2017). The Customs (Kastam) website does not provide details about how amounts should be displayed. + +## Column Detail + +The following details explain how amounts are calculated, based on user and accountant feedback: + +### Input Tax + +| Types of Acquisition | Value of Acquisition Excluding GST (RM) | Input Tax 6% (Claimable) | Input Tax 6% (Non-Claimable) | +|------------------------|------------------------------------------|----------------------------|-------------------------------| +| 1. Normal Purchase – to make standard rated supply | TX Amount | TX TaxAmount | NIL | +| Normal Purchase – to make Exempt supply | TXRE + EP Amount | TXRE + EP TaxAmount | TXRE with DocType _B | +| Normal Purchase – to make incidental Exempt Supply (Reg. 43 & 44A) | TXIES Amount | TXIES TaxAmount | TXIES with DocType _A | diff --git a/docs/usage/general/others/loopback-adapter.md b/docs/usage/general/others/loopback-adapter.md new file mode 100644 index 00000000..574391ec --- /dev/null +++ b/docs/usage/general/others/loopback-adapter.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 13 +title: Loopback Adapter +description: A guide about Loopback Adapter +slug: /usage/general/others/loopback-adapter +tags: ["SQL Account", "Others", "Loopback", "Adapter"] +--- + +## Introduction + +A Loopback Adapter is a virtual network adapter that enables network communications between applications on the same computer, even without a physical network connection. + +You need to install the Loopback Adapter only if both of these conditions apply: + +1. You are using Firebird 3.0 database server +2. Your computer is in a non-networked environment (not connected to any network) + +## Installation Steps + +Follow these steps to install the Loopback Adapter: + +1. Press **Windows + R** to open Run dialog +2. Type `hdwwiz` and press Enter +3. Click **Next** +4. Select "Install the hardware that I manually select from a list (Advanced)" +5. Click **Next** +6. Scroll down and select **Network adapters** +7. Click **Next** +8. Select "Microsoft" in the **Manufacturer** column +9. In the **Model** column, select either: + - Microsoft Loopback Adapter, or + - Microsoft KM-TEST Loopback Adapter +10. Click **Next** and follow the prompts to complete installation +11. Restart your computer diff --git a/docs/usage/general/others/preview-menu.md b/docs/usage/general/others/preview-menu.md new file mode 100644 index 00000000..3a12061a --- /dev/null +++ b/docs/usage/general/others/preview-menu.md @@ -0,0 +1,35 @@ +--- +sidebar_position: 16 +title: Preview Menu +description: A guide about Preview Menu +slug: /usage/general/others/preview-menu +tags: ["SQL Account", "Others", "Preview", "Menu"] +--- + +## Introduction + +After clicking "Apply" on any report grid output, you'll find a small arrow on the Preview Button located on the right side. Clicking this arrow reveals a dropdown menu with various export and preview functions, as shown below: + +![menu-list](../../../../static/img/usage/general/others/preview-menu/menu-list.jpg) + +Below are the details of each function (listed from top to bottom): + +| Name | Properties | +|------|-------------| +| Print | Direct Print the report to printer. | +| Preview | Preview the report on screen. | +| Preview as docked page | Preview the report on screen as a docked page instead of a new window (Default). | +| Export to PDF file | Export the report to Portable Document Format (PDF). | +| Export to Excel table (OLE) | Export the report to Excel Object Linking and Embedding (OLE) (xls) format. | +| Export to RTF file | Export the report to Rich Text Format (RTF). | +| Export to E-Mail Client | E-mail the report as an attachment using the default Windows E-Mail client (e.g., Microsoft Outlook, Outlook Express, Mozilla Thunderbird, or Windows Live Mail). | +| Export to E-Mail Client (Batch) | E-mail the report as an attachment using the default Windows E-Mail client (e.g., Microsoft Outlook, Outlook Express, Mozilla Thunderbird, or Windows Live Mail) to all e-mails set in Maintenance. *(Additional Module)* | +| Export to HTML file | Export the report to Hypertext Markup Language (HTML) format. | +| Export to Excel table (XML) | Export the report to Excel in Extensible Markup Language (XML) format. | +| Export to BMP image | Export the report to Bitmap (BMP) image. | +| Export to GIF image | Export the report to Graphics Interchange Format (GIF) image. | +| Export to JPEG image | Export the report to Joint Photographic Experts Group (JPEG) image. | +| Export to TIFF image | Export the report to Tagged Image File Format (TIFF) image. | +| Export to Text file | Export the report to text (TXT) file format. | +| Export to CSV file | Export the report to Comma-Separated Values (CSV) file format. | +| Fast Report Native Preview | Use Fast Report Preview Mode to view the report. | diff --git a/docs/usage/general/others/properties.md b/docs/usage/general/others/properties.md new file mode 100644 index 00000000..73ca44d9 --- /dev/null +++ b/docs/usage/general/others/properties.md @@ -0,0 +1,46 @@ +--- +sidebar_position: 17 +title: Properties +description: A guide about Properties +slug: /usage/general/others/properties +tags: ["SQL Account", "Others", "Properties"] +--- + +## Introduction + +By default, Firebird does not fully utilize the available RAM. This feature allows you to manually allocate RAM size for each database, optimizing performance. + +1. Pros + 1. Fully use the available RAM in server + 2. Increase the database performance +2. Cons + 1. Will slow down the Server Performance if not careful + 2. Not support for Standalone +3. Requirement + 1. Firebird Server + 2. Minimum 16 GB RAM + 3. A reliable Uninterrupted Power Supply or UPS (ie. backup power battery). +4. **Steps** + 1. Click 3 dot button in the Login Screen + 2. **Right Click** the **Database** you wanted to set. + 3. Select **Properties** + 4. Enter **ADMIN** Password + 5. Enter the Size you wanted or Click Use recommended page buffers setting (Default is 300 MB) + 6. Click OK + +![properties-detail](../../../../static/img/usage/general/others/properties/properties-detail.jpg) + +:::info +Important considerations when disabling "Write data to hard disk immediately": +1. Server must be protected by a reliable UPS (backup power supply) +2. Ensure proper server shutdown procedures are followed +3. Minimum operating system requirements: + - Windows 7 + - Windows Server 2012 + - Or newer versions +::: + +| Function | Description | +|-----------|-------------| +| Write data to hard disk immediately | **Enabled (Default):** Data is immediately written to disk on COMMIT — provides maximum data safety
**Disabled:** The operating system manages data writing to disk *(Not recommended)* | +| Page Buffers (in MB) | **Default: 16 MB** - Adjust based on your server's available RAM and performance requirements | diff --git a/docs/usage/general/others/sql-diagnosis.md b/docs/usage/general/others/sql-diagnosis.md new file mode 100644 index 00000000..490dd245 --- /dev/null +++ b/docs/usage/general/others/sql-diagnosis.md @@ -0,0 +1,395 @@ +--- +sidebar_position: 11 +title: SQL Diagnosis +description: A guide about SQL Diagnosis +slug: /usage/general/others/sql-diagnosis +tags: ["SQL Account", "Others", "SQL Diagnosis"] +--- + +## Introduction + +SQL Diagnosis is an external utility for fixing and managing SQL Firebird Databases. It provides essential tools for database maintenance, repair, and optimization. + +![diagnosis-intro](../../../../static/img/usage/general/others/sql-diagnosis/diagnosis-intro.jpg) + +## Software Download + +1. [sql-diagnosis-v2](https://download.sql.com.my/customer/Fairy/SQLDiagnosisV2-setup.exe) + +## System Requirements + +- Firebird Server (required for both networked and standalone installations) + +## Database Patch + +1. A min console use to manipulate the data including edit, delete and append data. +2. There are 2 type of patch + - Patch From Estream + - Build In Patch + +### Applying Database Patches + +1. Click **Database Patch** button (**Icon A**). +2. Click This button to **select the SQL Firebird Database.** + + ![patch-step](../../../../static/img/usage/general/others/sql-diagnosis/patch-step.jpg) + +### Scenario 1 : Patch From Estream (Continue Database Patch Steps) + +1. Right-click in the area below Step 2 +2. Select **Load From File 1...** + + ![patch-scenario1-1](../../../../static/img/usage/general/others/sql-diagnosis/patch-scenario1-1.jpg) + +3. Look for patch file (Norm begin with Patch-XXXX.sql2) +4. Click **Open** button. + + ![patch-scenario1-2](../../../../static/img/usage/general/others/sql-diagnosis/patch-scenario1-2.jpg) + +5. Click **Execute...** button (In Step 3 Section). + + ![patch-scenario1-3](../../../../static/img/usage/general/others/sql-diagnosis/patch-scenario1-3.gif) + +### Scenario 2 : Build In Patch (Continue Database Patch Steps) + +1. Click the **Arrow** down button near the **Execute...** button. +2. Select the Patch from the available list. +3. Click **Execute...** button (In **Steps 3** Section). + +### Available Patch Types and Descriptions + +| Patch File Type | Description | +|------------------|-------------| +| **AR/AP Copy Paste Error** | - Updates Customer or Supplier Code based on the code provided by the user.
- Sets the invalid transaction code to the provided Customer or Supplier code.
- After patching, go to the respective document number, Maintain Customer & Maintain Supplier to delete it or use CN to contra it. | +| **Change → Cash To Bank Type** | - Changes Account Type from Cash to Bank type.
- Ensure the Account Code is changed to **CH2BA** before running this patch. | +| **Change → Agent Code** | Changes all transactions from Agent Code A to Agent Code B. | +| **Change → Area Code** | Changes all transactions from Area Code A to Area Code B. | +| **Reset Grid Layout** | Resets all grid layouts to default. | +| **YED QT & PQ Purge** | Batch deletes Sales Quotation and Purchase Request records. | +| **Add Browse/Detail Form Mode** | Adds Form Mode (like SQL Accounting Version 775 and below) for SQL Accounting 776 and above. | +| **Update → Non Stock Control to Fixed Cost** | Sets all Non-Stock Control items to Fixed Cost. | +| **Update → Generators** | Updates all generators for SQL Accounting. | +| **Update → GL Account Special A/c Type Null to Empty** | Sets “Maintain Account Special Account Type” field from **Null** to **Empty**. | +| **Update → Batch Null to Empty** | Sets all Batch fields from **Null** to **Empty**. | +| **Update → Trim Empty Space - Payroll** | Removes empty spaces from all fields due to import. | +| **Remove → Invalid Payment Method** | Deletes invalid records in Maintain Payment Method. | +| **Remove → Non-Stock Control Opening Balance** | Deletes all Non-Stock Control Opening Balance records. | +| **Remove → All Customer** | Deletes all Maintain Customer records. | +| **Remove → All Supplier** | Deletes all Maintain Supplier records. | +| **Remove → All Stock Item** | Deletes all Maintain Item records. | +| **Remove → All Other Stock Maintenance** | Deletes all other Stock Maintenance data, including:
- Stock Group
- Stock Location
- Stock Price Tag
- Stock Batch
- Stock Category | +| **Remove → Default Currency Code** | Deletes the Default Currency. | +| **Remove → Invalid Credit Note** | Removes redundant AR/AP Credit Note Detail records in GL Ledger. | +| **Remove → Duplicate GL Stock Value** | Removes duplicate (double) amounts shown in GL Maintain Stock Value. | +| **Remove → Invalid GST Transactions** | Removes "ghost" transactions in GST Listing (`GST_TR`). | +| **Remove → Inactive Users** | Removes all users where *Active* = False. | +| **Remove → Invalid Stock Category** | Removes invalid Stock Category codes set in Maintain Item (usually due to import). | + +## Database Validate + +The Database Validate function helps repair and maintain the integrity of your database. It is especially useful when you encounter database corruption or errors that prevent normal operations. By validating the database, you can identify and fix issues to ensure smooth performance and reliability. + +### Database Validate Steps + +1. **Stop** the **Firebird Service.** +2. **Copy** the database & **Paste** to Desktop or any folder you wanted. +3. **Start** the **Firebird Service.** +4. Click **Database Validate** button (Icon B). + + ![validate-step](../../../../static/img/usage/general/others/sql-diagnosis/validate-step.jpg) + +5. Click the button to select your **copied** SQL Firebird Database +6. Click the **Validate** button + + :::info + You can Click few times **Validate** button to make sure it can maximise the database fixing + ::: + +7. Click the **Backup...** button to access these options: + + - **Backup Metadata...**: Extracts an empty database structure for use with IB Pump when creating a new database + - **SQL DB Copy Table...**: Opens the Database Pump utility for copying data to a new database + - **Direct Zip...**: Creates a compressed file for uploading to Estream support if issues persist + +### Backup MetaData + +Use this option when normal backup is fail. + +1. Click the arrow down button at **Backup...** button. +2. Select **Backup MetaData....** + + ![validate-backup-metadata-1](../../../../static/img/usage/general/others/sql-diagnosis/validate-backup-metadata-1.jpg) + +3. Click **Start Copy** to begin copying. + + - **Start Copy...**: Uses a single connection to copy tables to the new database. + - **Start Multi Copy...**: + - Uses two connections simultaneously to copy tables to the new database. + - Connection 1: AUDIT, AUDITDTL, GST_TR, ST_TR + - Connection 2: All other tables + +:::warning +Using **Start Multi Copy...** may cause the following issues: + +- The application UI may become scrambled +- You may encounter out-of-memory errors +- You may see Access Violations when closing windows or exiting the application + +If this occurs, restart SQL Diagnosis. +Refer to the image below after completing a copy using **Start Multi Copy...** +::: + + ![validate-backup-metadata-2](../../../../static/img/usage/general/others/sql-diagnosis/validate-backup-metadata-2.jpg) + +4. Click **OK** when you see the "Done" message. +5. Click **Close**. +6. Click the **Backup...** button. + +:::info +Want to import specific tables only? +Remove any tables you do not want to import from the list before starting. +::: + +:::warning +Be careful if you just wanted to Import Specific table Only as might cause more error. +::: + +## Adhoc Backup + +Adhoc Backup allows you to manually create a backup of your SQL Firebird database at any time. This feature is useful for safeguarding your data before performing major changes, troubleshooting, or simply as part of your regular backup routine. Backups can be saved to your preferred location for easy restoration if needed. + +### Adhoc Backup Steps + +1. Click **Adhoc Backup** button (Icon C). +2. Click the button to select the SQL Firebird database. +3. Click the **Backup** button. + + ![adhoc-backup-step1](../../../../static/img/usage/general/others/sql-diagnosis/adhoc-backup-step1.jpg) + +4. Choose the backup folder (default: Desktop). +5. Click **OK** to start the backup. + + ![adhoc-backup-step2](../../../../static/img/usage/general/others/sql-diagnosis/adhoc-backup-step2.jpg) + +## Database Online + +The Database Online function is designed to bring your database back online when it has been shut down due to errors or maintenance. If you encounter a **"Database Shutdown"** message, this feature helps you quickly restore access and resume normal operations without extensive troubleshooting. + +### Database Online Steps + +1. Restart the Firebird service. +2. Click the **Database Online** button (Icon D). +3. Click the button to select the SQL Firebird database. + +![database-online-step](../../../../static/img/usage/general/others/sql-diagnosis/database-online-step.jpg) + +## Batch Backup + +Batch Backup allows you to back up multiple databases at once or via a scheduled task. This is useful when managing several databases that require regular backups. + +1. Click the **Batch Backup...** button (Icon E). +2. Click **New**. +3. Enter the server name or IP address. + + ![batch-backup-step-1](../../../../static/img/usage/general/others/sql-diagnosis/batch-backup-step-1.jpg) + +4. Click the three-dot button for the **Target Backup Folder** field and choose a folder, then click **OK**. + + ![batch-backup-step-2](../../../../static/img/usage/general/others/sql-diagnosis/batch-backup-step-2.jpg) + +5. Select the folder where you wanted to backup to & click OK +6. Click on 3 dot button for Database File field + + ![batch-backup-step-3](../../../../static/img/usage/general/others/sql-diagnosis/batch-backup-step-3.jpg) + +7. Select the SQL Accounting/Payroll Database & Click Open +8. Click Save Button. +9. Repeat Step 2 to 8 for additional database + +| Field | Description | +|---------------------|---------------------------------------------------------------| +| Check Box | Tick = Backup & UnTick = Not Backup | +| Seq | System Auto run record number sequence | +| Server IP or Name | Server Name/IP Address | +| Target Backup Folder| A folder path where the database is backup to | +| Database File | SQL Accounting/Payroll Firebird Database | +| Remark | System Auto Shown the selected Database Company Name & Remark | +| Status | Last Backup Status | +| Date Time | Last Backup Date & Time | + +### Schedule Backup + +Using Windows Schedule to Automatically run Batch Backup. + +1. Open Windows **Control Panel | Administrative Tools | Task Scheduler** + + ![schedule-backup-1](../../../../static/img/usage/general/others/sql-diagnosis/schedule-backup-1.jpg) + +2. Click Action | Create Basic Task... + + ![schedule-backup-2](../../../../static/img/usage/general/others/sql-diagnosis/schedule-backup-2.jpg) + +3. Enter Task Name (eg SQL Backup) & Click Next + + ![schedule-backup-3](../../../../static/img/usage/general/others/sql-diagnosis/schedule-backup-3.jpg) + +4. Select Daily & Click Next + + ![schedule-backup-4](../../../../static/img/usage/general/others/sql-diagnosis/schedule-backup-4.jpg) + +5. Set the Start Date & Time to Start +6. Set 1 for Recur every field & Click Next + + ![schedule-backup-5](../../../../static/img/usage/general/others/sql-diagnosis/schedule-backup-5.jpg) + +7. Select Start a program & Click Next + + ![schedule-backup-6](../../../../static/img/usage/general/others/sql-diagnosis/schedule-backup-6.jpg) + +### For Build 32 & above (Following Steps) + +1. Click **Browse** and locate **SQLDiagnosisV2.exe** (default: `C:\eStream\Utilities\SQLDiagnosis`). +2. Set the **Add arguments (optional)** field to **-Auto**. + +### For Build till 31 (Following Steps) + +1. Click **Browse** and locate **SQLScheduleV2.exe** (e.g., `C:\eStream\Utilities\SQLDiagnosis\SQLScheduleV2.exe`). +2. Set **Start in (optional)** to the exe folder (e.g., `C:\eStream\Utilities\SQLDiagnosis`) and click **Next**. +3. Tick **Open the Properties dialog for this task when I click Finish**. +4. Click **Finish**. + + ![backup-for-build31-step1](../../../../static/img/usage/general/others/sql-diagnosis/backup-for-build31-step1.jpg) + +5. Select **Run whether user is logged on or not**. + + ![backup-for-build31-step2](../../../../static/img/usage/general/others/sql-diagnosis/backup-for-build31-step2.jpg) + +6. Go to the **Triggers** tab and click **Edit...** to change the trigger time. + + ![backup-for-build31-step3](../../../../static/img/usage/general/others/sql-diagnosis/backup-for-build31-step3.jpg) + +7. Change the scheduled time as required. + + ![backup-for-build31-step4](../../../../static/img/usage/general/others/sql-diagnosis/backup-for-build31-step4.jpg) + +8. Click **OK** twice. +9. Enter the Windows user name and password when prompted, then click **OK**. + +:::info +Commands you can use in scheduled tasks to stop and start Firebird: + +- Stop Firebird: `C:\WINDOWS\SYSTEM32\NET.EXE` stop "Firebird Server - DefaultInstance" +- Start Firebird: `C:\WINDOWS\SYSTEM32\NET.EXE` start "Firebird Server - DefaultInstance" + +::: + +## History New/Updates/Changes + +### --Build 32-- + +- Mini Console - Add Get Generator List Function. +- Fix still unable to backup FDB if no SY_Profile table. +- Mini Console - Add Get Table Records Count Function. +- Change Schedule Backup using command instead exe. +- Enable support restore without zip. +- Remove Verbose on Schedule Backup. +- Update High Resolution Icon. +- Add "Non System Document Number Set..." Patch. + +### --Build 31-- + +- Add New Application Window function. +- Add Sweep Database in Validate function. +- Add Trim Empty Space - Payroll function in DB Patch. +- Update Copy Paste Error function to allow user enter Valid Company Code. +- Fix Memo not scroll down when remove temp table. +- Add Remove InValid Stock Category... Patch +- Fix unable to backup FDB if no SY_Profile table. + +### --Build 30-- + +- Add Option Use Full name for batch backup. +- Enable support FB3.0.2. + +### --Build 29-- + +- Add Update Generator to DB Patch function. +- Add Update Non Stock Control to Fixed Cost...to DB Patch function. +- Add Remove InActive User to DB Patch function. +- Add Change Agent & Area code to DB Patch function. +- Add Update GL Account Special A/c Type Null to Empty to DB Patch function. +- Add Update Batch Null to Empty to DB Patch function. + +### --Build 28-- + +- Upgrade to Version 2.8. +- Change New Icon. +- Fix InValid GST Transactions not working. +- Add Update Generators... Patch. + +### --Build 27-- + +- Fix patch Error string literal with 19890 characters exceeds the maximum length of 16383 characters for the utf8 character set. +- Add Multi Copy function for SQL DB Copy Table... + +### --Build 26-- + +- Add YED QT && PQ Purge... +- Add InValid GST Transations. + +### --Build 25-- + +- Upgrade to Version 2.7. +- Remove -l -g -ig from Schedule & Batch Backup. +- Replace IB Pump with SQL DB Copy Table...function. + +### --Build 24-- + +- Add Remark for Batch Backup filename. +- Add Load From File 2 for DB Patch function. + +### --Build 23-- + +- Upgrade to Version 2.6. +- Fixed DB Patch will auto remove & in the script. +- Fixed Load Build-In Patch Error in some pc. +- Add Remove Duplicate GL Stock Value Patch. +- Enable Proper Installation. + +### --Build 22-- + +- Internal release. + +### --Build 21-- + +- Upgrade to Version 2.5. +- Fix unable open fdb in LocalHost. +- Add Batch Backup. +- Add Schedule Backup. +- Fix AR/AP Copy Paste Patch not working in some situation. +- Fix still unable to backup in some situation. +- Fix Backup Metadata setting not correct for FB3.0 unicode +- Add Firebird Version label for Patch, Validate & Adhoc Backup. + +### --Build 20-- + +- Fix Application Name Error. +- Add DB Online function. +- Add Remove InValid CN Patch. + +### --Build 19-- + +- Fix unable to backup. +- Add Load From File... for DB Patch... + +### --Build 18-- + +- Upgrade to Version 2.4. +- Enable Support Firebird 3.0. +- Enhance Validate to support IBPump. +- Find Tune SQL Patch for New Patch Generator. +- Add Remove Maintain Customer, Supplier, Stock Item & Other Stock Maintenance. +- Add AR/AP Copy Paste Error Patch. +- Add Change Cash To Bank Type Patch. +- Add Reset Grid Layout Patch. +- Add Delete Default Currency Patch. diff --git a/docs/usage/general/others/supercharging-firebird-sql.md b/docs/usage/general/others/supercharging-firebird-sql.md new file mode 100644 index 00000000..592435e6 --- /dev/null +++ b/docs/usage/general/others/supercharging-firebird-sql.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 12 +title: Supercharging FirebirdSQL +description: A guide about Supercharging FirebirdSQL +slug: /usage/general/others/supercharging-firebird-sql +tags: ["SQL Account", "Others", "Supercharging", "FirebirdSQL"] +--- + +## Introduction + +By default, Firebird does not fully utilize the available RAM. The steps below show how to adjust Firebird's page cache settings to: + +1. Make better use of available RAM (up to ~90% depending on database size and number of attached databases) +2. Improve database performance + +## Requirement + +- 64-bit Firebird Server +- Minimum 16 GB of RAM (recommended) + +Important: Make sure the server has a reliable UPS and that you test changes in a non-production environment first. Adjusting cache settings can significantly increase memory use and may affect system stability if not tested. + +## Steps + +1. Browse to Firebird folder (Normally in `C:\Program Files\Firebird\Firebird_3_0` for Firebird 3). + +2. Look for **firebird.conf** file & copy to Desktop. + +3. Open the **firebird.conf** at Desktop. + +4. Look for **#DefaultDbCachePages = 2048**. + +5. Remove the **#** . + +6. Change the **2048** to **1000000** for 16 GB RAM. (will use 8GB RAM) + +7. Save the file. + +8. Copy the **firebird.conf** at Desktop. + +9. Paste & Replace it in the Firebird folder **firebird.conf** file. + +10. Restart the Server. diff --git a/docs/usage/general/others/upgrade721-error.md b/docs/usage/general/others/upgrade721-error.md new file mode 100644 index 00000000..609626a2 --- /dev/null +++ b/docs/usage/general/others/upgrade721-error.md @@ -0,0 +1,110 @@ +--- +sidebar_position: 2 +title: Upgrade to 721 Script Error +description: A guide about Upgrade to 721 Script Error +slug: /usage/general/others/upgrade721-error +tags: ["SQL Account", "Others", "Upgrade", "Script"] +--- + +## Introduction + +This issue occurs if you have a script that reads the **TaxRate** from Maintain Tax in either: + +- the **OnGridColumnValueChange** script, or +- the **OnBeforeSave** script + +The error is caused by changes in SQL Accounting's coding structure that affect how tax rates are provided to user-defined scripts. + +## Problem + +You will see the error shown below when selecting an item code or changing a value in your UDF that triggers the function. + +![upgrade-problem](../../../../static/img/usage/general/others/upgrade721-error/upgrade-problem.jpg) + +## Solution + +The following example shows the error occurring in **Sales Invoice**. + +1. Click **Tools | DIY | SQL Control Center...** +2. In the left panel, locate **Sales Invoice > OnGridColumnValueChange** and/or **OnBeforeSave**. + + ![upgrade-solution](../../../../static/img/usage/general/others/upgrade721-error/upgrade-solution.jpg) + +3. Find the function definition similar to: + + **function GetTaxedValue(AValue: Variant; lTaxRate: string): Variant;** +4. Replace the existing function with the updated version below. + +Use this version for the **OnGridColumnValueChange** script: + +```pascal +function GetTaxedValue(AValue: Variant; lTaxRate: string): Variant; +var lStrLst: TStringList; + TaxRate, S: string; + I: Integer; +begin + Result := Null; + lStrLst := TStringList.Create; + TaxRate := DataSet.FindField('TaxRate').AsString; + try + try + lStrLst.Delimiter := '&'; + S := Trim(StringReplace(TaxRate, '+', '&', [rfReplaceAll])); + lStrLst.DelimitedText := Trim(StringReplace(s, 'E', '', [rfReplaceAll])); + for I := 0 to lStrLst.Count - 1 do + begin + S := Trim(lStrLst.Strings[I]); + if S[Length(S)] = '%' then + begin + S := Trim(Copy(S, 1, Length(S) - 1)); + AValue := AValue * ((100 + StrToFloat(S)) / 100); + end + else + AValue := AValue + StrToFloat(S); + end; + Result := AValue; + except + RaiseException(ExceptionType, 'Tax Rate formatting error '); + end; + finally + lStrLst.Free; + end; +end; +``` + +Use this version for the **OnBeforeSave** script: + +```pascal +function GetTaxedValue(AValue: Variant; lTaxRate: string): Variant; +var lStrLst: TStringList; + TaxRate, S: string; + I: Integer; +begin + Result := Null; + lStrLst := TStringList.Create; + TaxRate := D.DataSet.FindField('TaxRate').AsString; + try + try + lStrLst.Delimiter := '&'; + S := Trim(StringReplace(TaxRate, '+', '&', [rfReplaceAll])); + lStrLst.DelimitedText := Trim(StringReplace(s, 'E', '', [rfReplaceAll])); + for I := 0 to lStrLst.Count - 1 do + begin + S := Trim(lStrLst.Strings[I]); + if S[Length(S)] = '%' then + begin + S := Trim(Copy(S, 1, Length(S) - 1)); + AValue := AValue * ((100 + StrToFloat(S)) / 100); + end + else + AValue := AValue + StrToFloat(S); + end; + Result := AValue; + except + RaiseException(ExceptionType, 'Tax Rate formatting error '); + end; + finally + lStrLst.Free; + end; +end; +``` diff --git a/docs/usage/general/others/upgrade721-tax-fr3report.md b/docs/usage/general/others/upgrade721-tax-fr3report.md new file mode 100644 index 00000000..0ec66b15 --- /dev/null +++ b/docs/usage/general/others/upgrade721-tax-fr3report.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 4 +title: Upgrade to 721 TaxRate Show A - Fast Report +description: A guide about Upgrade to 721 TaxRate Show A - Fast Report +slug: /usage/general/others/upgrade721-tax-fr3report +tags: ["SQL Account", "Others", "Upgrade", "Report"] +--- + +## Introduction + +This issue occurs when a report contains a script that retrieves the **TaxRate** from Maintain Tax. + +The error is caused by changes in SQL Accounting's coding structure that affect how tax rates are provided to reports. + +## Problem + +You will see the following error when previewing the report: + +![fr3-report-problem](../../../../static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-problem.jpg) + +## Solution + +1. Click the **Code** tab. +2. Scroll down and locate `procedure SetUp;`. +3. Replace the existing code with the following: + + ![fr3-report-solution1](../../../../static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution1.jpg) + + ```pascal + SQL := 'SELECT Dockey, Tax, TaxRate, Sum(CAST(LocalTaxAmt AS REAL)) LocalTaxAmt, Sum(CAST(LocalAmount AS REAL)) LocalAmount '+ + 'FROM Document_Detail ' + + 'WHERE Tax <> '''' ' + + 'GROUP BY Dockey, Tax, TaxRate'; + AddDataSet('GSTAmt', ['Tax', 'TaxRate', 'LocalTaxAmt', 'LocalAmount']) + ``` + +4. Click the **Subreport1** tab. + + ![fr3-report-solution2](../../../../static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution2.jpg) + +5. Double-click the Tax Rate memo. +6. Replace its expression with the following: + + ![fr3-report-solution3](../../../../static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution3.jpg) + + ```pascal + [IIF(Trim()='',, +' @ ' + )] + ``` + +7. Click **OK**. +8. Save the report. diff --git a/docs/usage/general/others/upgrade721-tax-rtmreport.md b/docs/usage/general/others/upgrade721-tax-rtmreport.md new file mode 100644 index 00000000..f61e4445 --- /dev/null +++ b/docs/usage/general/others/upgrade721-tax-rtmreport.md @@ -0,0 +1,57 @@ +--- +sidebar_position: 3 +title: Upgrade to 721 TaxRate Show A - RTM Report +description: A guide about Upgrade to 721 TaxRate Show A - RTM Report +slug: /usage/general/others/upgrade721-tax-rtmreport +tags: ["SQL Account", "Others", "Upgrade", "Report"] +--- + +## Introduction + +This issue occurs when a report contains a script that retrieves the **TaxRate** from Maintain Tax. + +The error is caused by changes in SQL Accounting's coding structure that affect how tax rates are provided to reports. + +## Problem + +You will see the following error when previewing the report: + +![rtm-report-problem](../../../../static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-problem.jpg) + +## Solution + +1. Click **Calc** Tab +2. Click **View | Module** +3. Click **Event** +4. Click **OnCreate** +5. Scroll down & look for **SQL_6** +6. Replace this script with below script + + ![rtm-report-solution1](../../../../static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-solution1.jpg) + + ```pascal + SQL_6 := 'SELECT DocKey, Tax, TaxRate, Sum(LocalAmount) LocalAmount, Sum(Qty) Qty, '+ + 'Sum(LocalTaxAmt) localTaxAmt, Description '+ + 'FROM Document_Detail ' + + 'Where Tax <> ''''' + + 'GROUP BY Dockey, Tax, TaxRate'; + ``` + +7. Click on **Subreport4:plSQL_6** tab +8. Click on **Event Handlers** +9. Click on **procedure VarTaxOnCalc(var Value:Variant);** +10. Replace this script with below script + + ![rtm-report-solution2](../../../../static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-solution2.jpg) + + ```pascal + procedure VarTaxOnCalc(var Value:Variant); + Var s : string; + begin + if Trim(plsql_6.getfieldvalue('TaxRate')) <> '' then + Value := plsql_6.getfieldvalue('Tax') + ' @ ' + plsql_6.getfieldvalue('TaxRate') else + Value := plsql_6.getfieldvalue('Tax'); + end; + ``` + +11. **Save** the report. diff --git a/docs/usage/general/tips-&-tricks.md b/docs/usage/general/tips-&-tricks.md new file mode 100644 index 00000000..60e0d515 --- /dev/null +++ b/docs/usage/general/tips-&-tricks.md @@ -0,0 +1,630 @@ +--- +sidebar_position: 2 +title: Tips & Tricks +description: Other Info +slug: /usage/general/tips-&-tricks +tags: ["SQL Account", "Usage"] +--- + +## SQL Accounting Linking + +There are four methods to integrate or link with SQL Accounting + +- [Restful API](https://wiki.sql.com.my/wiki/Restful_API) (Recommended - For two way communication & SQL Public Connect User) +- [SDK Live](/integration/sdk-live/basic-guide#documentation) (Recommended - For two way communication) +- [SQL Acc XLS n MDB Import](../../miscellaneous/acc-xls-mdb-import) - XLS, XLSX, Json & CSV/TXT File (Format 2 - Bar(|),Comma(,),Semi Comma(;),Tilde(~)) +- [SQL XML Import](../../miscellaneous/import-export-guide.md) - XML File +- [SQL Text Import](../../miscellaneous/text-import.md) - CSV/TXT File (Format 1 - Semi Comma (;) Only) + +### Choosing Method + +SQL Accounting has three environment setups. Below are the available method options: + +1. Public Cloud ([SQL Public Connect](https://connect.sql.com.my/)) + + Data is hosted on our public server. + + - [Restful API](https://wiki.sql.com.my/wiki/Restful_API) + - [SQL Acc XLS n MDB Import](../../miscellaneous/acc-xls-mdb-import) + +2. On Premise Cloud ([SQL Private Connect](https://private.sql.com.my/)) + + Data is hosted at the user's office. + + - [Restful API](https://wiki.sql.com.my/wiki/Restful_API) + - [SDK Live](https://wiki.sql.com.my/wiki/SDK_Live) + - [SQL Acc XLS n MDB Import](../../miscellaneous/acc-xls-mdb-import) + +3. On Premise (Offline) + + Data is hosted at the user's office. + + - [SDK Live](https://wiki.sql.com.my/wiki/SDK_Live) + - [SQL Acc XLS n MDB Import](../../miscellaneous/acc-xls-mdb-import) + - [SQL Accounting](https://www.sql.com.my/download/demo/sqlacc-setup.exe) + - [Firebird 64 bit](https://github.com/FirebirdSQL/firebird/releases/download/R3_0_7/Firebird-3.0.7.33374_1_x64.exe) + - [Installation Guide](https://download.sql.com.my/customer/Fairy/Steps-InstallnCreateSampleDB.gif) + +### SQL Accounting & Firebird Program + + - [SQL Accounting](https://www.sql.com.my/download/demo/sqlacc-setup.exe) + - [Firebird 64bit](https://github.com/FirebirdSQL/firebird/releases/download/v5.0.3/Firebird-5.0.3.1683-0-windows-x64.exe) + - [Installation Guide](https://download.sql.com.my/customer/Fairy/Steps-InstallnCreateSampleDB.gif) + +### Sample DB + + - [GSTnSST-SampleDB](https://download.sql.com.my/customer/Fairy/Testing-2022-05-18.zip) + - [Restore DB Guide](https://download.sql.com.my/customer/Fairy/Steps-RestoreDB.gif) + +### Empty DB + +1. At the Login Screen Click 2 dot Button +2. Click Create New Database +3. Follow the wizard + +**Default username and password is ADMIN** + +### Things To Consider Before Import/Post + +Before wanted to Import/Post to SQL Accounting Database, below information/setting must set in the SQL Accounting + +1. Click *Menu: View* + + Untick(UnSelect) the option + + - Command Navigator + - Tabbed Docking + - Allow Multiple Windows + - Enable Windows Task Bar + +2. Click _Menu: `Tools | Options... | Customer` + + Tick(Select) the option + + - Use Cash Sales No. for Payment Received + + Untick(UnSelect) the option + + - Perform Tax / Local Amount Rounding + - 5 Cents Rounding (Sales Invoice) + - 5 Cents Rounding (Cash Sales) + +3. Click _Menu: `Tools | Options... | Miscellaneous` + + Untick(UnSelect) the option + + - Prompt Negative Stock Quantity Dialog Box + - Prompt Duplicate Cheque Number + +4. Click _Menu: `Tools | Maintain User... | New` + + Create New User (eg POS) + +5. Click _Menu: `Tools | Maintain User... | Access Right` + + Tick (Select) the option + + - Override Customer Credit Control under the Group : Customer + - Override Sales Min/Max Price under the Group : Sales + - Override Acceptable Transaction Date under the Group : Tools + - Save on Negative Quantity under the Group : Stock + + Untick (UnSelect) the option + + Under the Group : Sales + + - Prompt Replace Unit Price Dialog + - Show Payment / Change Dialog in Cash Sales + +6. The following must exist and be valid in SQL Accounting + + | Field | In SQL Accounting | + | --- | --- | + | Customer Code | Customer => Maintain Customer | + | Supplier Code | Supplier => Maintain Supplier | + | Terms Code | Tools => Maintain Terms | + | Project Code | Tools => Maintain Project | + | Sales/Purchase Account Code | GL => Maintain Account | + | Sales/Purchase Return Account Code | GL => Maintain Account | + | Cash/Bank Account Code | Tools => Maintain Payment Method (Created from Maintain Account) | + | Agent Code | Tools => Maintain Agent | + | Area Code | Tools => Maintain Area | + | Currency Code | Tools => Maintain Currency | + | Tax Code | Tools => Maintain Tax (if had SST / GST) | + +7. Below is Optional (i.e. if had post/import item code to SQL Accounting) + +| Field | Location/Form | +| --- | --- | +| Item Code | Stock => Maintain Stock Item | +| Location Code | Stock => Maintain Location | +| Batch Code | Stock => Maintain Batch | + +**\**ALWAYS do backup the database First before Import/Post to SQL Accounting** + +## Table/Fields Detail + +- Updated 15 Jan 2025 +- [DetailSpec](https://docs.google.com/spreadsheets/d/1K-eWqe-NHfJfqn9kaoJc4m5YZCvKmGw7WmHqV5Hj6XU/edit?usp=sharing) + +### Normal Used Table/Biz Object Name + +#### Sales Side + +| Biz Object | Description | +| --- | --- | +| `AR_Customer` | Maintain Customer | +| `SL_IV` | Sales Invoice | +| `SL_CS` | Cash Sales | +| `SL_CN` | Sales Credit Note | +| `SL_DN` | Sales Debit Note | +| `AR_PM` | Customer Payment | +| `AR_IV` | Customer Invoice | +| `AR_DN` | Customer Debit Note | +| `AR_CN` | Customer Credit Note | + +#### Purchase Side + +| Biz Object | Description | +| --- | --- | +| `AP_Supplier` | Maintain Supplier | +| `PH_PI` | Purchase Invoice | +| `PH_CP` | Cash Purchase | +| `PH_SC` | Purchase Return | +| `PH_SD` | Purchase Debit Note | +| `AP_SP` | Supplier Payment | +| `AP_PI` | Supplier Invoice | +| `AP_SD` | Supplier Debit Note | +| `AP_SC` | Supplier Credit Note | + +### Posting Information + +- Detail Data should Group by Stock Group/Category & TaxType (ZRL or SR) & Itemcode (if wanted import itemcode) +- Eg. Cafe can be group by + - Food - SR + - Food - ZRL + - Beverage + - Service Charges + - Rounding + +- Detail Data should Group by Stock Group/Category & TaxType (ZRL or SR) & Itemcode (if wanted import itemcode) +- Eg. Cafe can be group by + - Food - SR + - Food - ZRL + - Beverage + - Service Charges + - Rounding + +For example, if there are 10 transactions today: + - 8 are Simplified Invoices, grouped as one Doc No: POS-00001 + - 2 are Full Tax Invoices/Credit Sales Invoices, each with its own Doc No: POS-00002, POS-00003 + +All can be posted to `SL_CS` and `AR_PM`. +Below is an example: Today's total Simplified Invoice sales is RM1000. + +#### Method 1 (Recommended) + +This will result in four transactions + +1. RM1000 - Post to `SL_CS` & (`P_DocNo`, `P_PaymentMethod` field is empty & `P_Amount`, `P_PaidAmount` field is 0) + +2. RM700 by Cash - Post to `AR_PM` + +3. RM200 by MasterCard - Post to `AR_PM` + +4. RM100 by CreditCard - Post to `AR_PM` + +**Pros** : Easy to Edit or Delete the transactions + +**Cons** : Many Posting document + +#### Method 2 + +This approach results in three transactions: + +1. RM700 by Cash — Post to `SL_CS` and set the `P_PaymentMethod` field +2. RM200 by MasterCard — Post to `AR_PM` +3. RM100 by CreditCard — Post to `AR_PM` + +**Pros**: Fewer posting documents + +**Cons** : + +- Not Easy to Edit or Delete the transactions +- Cash Sales OR number unable to override (i.e. System Auto set/assign) + +## Extra Notes + +- Both Full Tax & Simplified IV can use same Debtor Code as Not mention required Customer GST ID +- Government 5 cents Rounding Mechanism - NO Tax/GST Code +- Deposit for Non Refundable can use Customer Payment `AR_PM` & set *NONREFUNDABLE* field to *1* + - Default is `SR` + - Will auto reverse once it being Knock-Off + +- Document discounts should be apportioned by subtotal amounts when mixing tax codes (see Cash Sales POS-DocDisc). + + Example (10% document discount): + - Subtotal for SR = 150.24 → Discount = 150.24 * 10% = 15.02 + - Subtotal for ZR = 988.88 → Discount = 988.88 * 10% = 98.89 + + Or + + - Doc Discount = 113.91 + - Sub Total for SR = 150.24 => Disc ((150.24/1139.12) \* 113.91) = 15.02 + - Sub Total for ZR = 988.88 => Disc ((988.88/1139.12) \* 113.91) = 98.89 + +- Mixed supplies tax codes include: + - ES + - TX-ES (replaces TX-N43) + - TX-RE + +- Realise Bad Debts Use CN as Normal + - System will contra the provision bad debts done at GST-03 by 6 mth bad debts + - Make sure Knock the actual Bad debts Invoice + +- For Purchase Invoice(PI) MUST 1 by 1 post in (i.e. can't Group multi PI in 1 PI) + +**Prompt Invalid class string, ProdID: "SQLAcc.BizApp" error while try to link to SQL Accounting.** + +1. Login SQL Accounting +2. Click `Tools | Options | General` +3. Click Register & follow wizard +4. Exit SQL Accounting +5. Login SQL Accounting +6. Try run you application to link again + +If still prompt after above steps + +1. Uninstall SQL Accounting +2. Stop Anti Virus +3. Reinstall SQL Accounting +4. Run the above steps again + +**Prompt Access Violation when importing** + +This can happen due to: + +The fieldname is not match with SQL Accounting (eg, SQLAcc fieldname `UDF_Width`, but you had call for `UDF_Weight`) + +1. Old version of SQL Acc Import program, try update the SQL Acc Import program +2. The fieldname had the empty space at the beginning and/or end (norm happen if import from Excel) eg 'DocNo ' or ' DocNo' instead of 'DocNo' + +## SQL Accounting Linking FAQ + +### Prompt Invalid class string, ProdID: "SQLAcc.BizApp" error while try to link to SQL Accounting + +- Login SQL Accounting +- Click Tools | Options | General +- Click Register & follow wizard +- Exit SQL Accounting +- Login SQL Accounting +- Try run you application to link again + +If still prompt after above steps + +- Uninstall SQL Accounting +- Stop Anti Virus +- Reinstall SQL Accounting +- Run the above steps again + +### Prompt Access Violation when importing + +This can happen due to: + +This happen due to + +The fieldname is not match with SQL Accounting (eg SQLAcc fieldname `UDF_Width` yr had call for `UDF_Weight`) + +- Old version of SQL Acc Import program, try update the SQL Acc Import program +- The fieldname had the empty space at the beginning and/or end (norm happen if import from Excel) eg 'DocNo ' or ' DocNo' instead of 'DocNo' + +### Why after import the DO still had outstanding even the Invoice had imported? + +Yes all import will loss the *Transfer* status (i.e. if import DO & IV will treat as different) except using SDK import with condition + +### Which field should I map/insert to for Credit Note & Debit Note for Invoice Number, Invoice Date & Reason? + +In Generally(Recommended) you can use below field (All in Header Field) + +| SQL Accounting Field | Mapping Field | Description | +| --- | --- | --- | +| DocNoEx | Invoice Number | Field Size : 20 | +| DocRef1 | Invoice Date | Field Size : 25 | +| Description | Reason | Field Size : 200 | + +If you wanted posted in Detail Field also can + +| SQL Accounting Field | Mapping Field | Description | +| --- | --- | --- | +| Remark1 | Invoice Number | Field Size : 200 | +| Remark2 | Invoice Date | Field Size : 200 | +| Description2 | Reason | Field Size : 200 | + +### Can I post/import to SQL Accounting on a monthly basis? + +No. For the GST/SST era, we recommend posting/importing on a **daily** basis so users have time to verify and correct any errors. + +Below is the proper steps to perform posting/importing + +- Backup +- Post/Import to SQL Accounting +- Compare listings in SQL Accounting with your POS/external program + +### I have multiple levels of document discounts — how do I post to SQL Accounting? + +You can insert two or more rows (depending on the number of discount levels) with negative unit prices. + +As mentioned above in [**Extra Notes**](./tips-&-tricks.md#extra-notes), proportion the discount by subtotal amount when mixing tax codes. + +### Can I do like this, DR Bank/Cash In hand/Debtor & CR Sales Account using Journal? + +No. The correct Double Entry is as following + +- **Invoice/Cash Sales** + + - DR - Debtor + - CR - Sales Account + +- **Payment Received** + + - DR - Bank/Cash In Hand + - CR - Debtor + +### Can I use the ADMIN ID for importing/posting? + +No. *ADMIN* has full access rights; if a problem occurs it can be difficult to trace who performed the import. We recommend creating a separate user with limited access rights for importing/posting. + +It adviceable to create Another ID with less Access Right + +### Can SQL Accounting & External Program(eg POS) Import/Posting doing Stock Control in same time? + +Yes, but we Recommended External Program(eg POS) to do all the Stock Control if the External Program(eg POS) able to do all the report Required by the User. + +Reason : + +01. Faster import time + +02. Timing issue as in SQL Acc the Qty is *ALWAYS* outdated cause real *Stock In/Out* is from the External Program(eg POS) + +03. Data redundancy when two systems store the same data + +04. Avoid wasting time on Sync correctness stock data between 2 system + +Related Ref : [Can I control my Stock when I link with other Application?](https://wiki.sql.com.my/wiki/SDK_Live#Can_I_control_my_Stock_when_I_link_with_other_Application.3F) + +### Can SQL Acc accept negative amounts? + +Yes, for item row amounts. + +No all document amount(DocAmt field) must not below 0 + +### Is there any setting for transactions without tax? + +No, there is no special setting. Set the following fields: + +| Field | Value | +| --- | --- | +| Tax | '' | +| TaxInclusive | 0 | +| TaxAmt | 0 | + +### How to post when a supplier issues a simplified invoice but it exceeds RM500? + +It advisable to ask the user to Request **Full Tax Invoice** from their supplier as user might pay double Tax due to add back for non claimable amount to the company profit by their Audit/Accountant. + +Below is a suggested example of how to post a simplified supplier invoice. + +![exceed-500-1](../../../static/img/usage/general/tips-tricks/exceed500.png) + +![exceed-500-2](../../../static/img/usage/general/tips-tricks/exceed500-2.png) + +### Prompt could not convert variant of type (Null) into type (Integer) error while try to post (eg Invoice) + +Ensure the database you are logged into has GST started/enabled. + +### How to post SR with 6% for documents issued after 01 Jun 2018? + +There are two solutions: + +#### Solution 1 + +Add a TaxRate field script/code. + +#### Solution 2 + +Create a new SR tax code with 6% (e.g., SR6) in SQL Accounting. + +**Is there any change in linking for SST?** + +- GST to No SST + +May follow [Non GST](https://wiki.sql.com.my/wiki/SQL_Accounting_Linking#Is_there_any_setting_for_transaction_without_Tax?) + +- GST to SST + + There are not many changes — treat it like normal GST; only the tax codes differ. + +| Tax Code | Description | Rate | Required Tariff Code | +| --- | --- | --- | --- | +| ST5 | Sales Tax | 5% | Y | +| ST | Sales Tax | 10% | Y | +| SV | Service Tax | 6% (8% From 01 Mar 2024) | Y | +| STE | Sales Tax Exempted | | N | +| SVE | Service Tax Exempted | | N | + +New field added: + +| **Field Name** | **Field Type** | **Field Size** | **Mandatory** | **Default Value** | **Remarks** | +|----------------|----------------|----------------|----------------|------------------|--------------| +| **TARIFF** | String | 20 | C | | Tariff or HS Code
**Mandatory** – If posting to:
- GL Payment Voucher & GL Official Receipt
- Customer Invoice, Debit Note & Credit Note
- Supplier Invoice, Debit Note & Credit Note
- All Sales & Purchase Module without Item Code
**Not Required** – If posting Sales & Purchase with Item Code | + +### How to SQL Accounting handle if had Discount/Cash Voucher? + +You can treat the Discount/Cash Voucher as Part of item row but is in Negative UnitPrice + +![disc](../../../static/img/usage/general/tips-tricks/disc.png) + +### Begin 11 Oct 2019 the Company ROC/BRN will increase to 12 digit characters. Any changes in Linking? + +Yes if user is upgrade to Version 875.782 & above. + +Table Affected + +- `SY_PROFILE` => File | Company Profile + +- `AR_CUSTOMER` => Customer | Maintain Customer + +- `AP_SUPPLIER` => Supplier | Maintain Supplier + +Field Changes + +- Original Name **REGISTERNO** change to BRN + +- New Field BRN2 + +- New Field Size for both Fields 30 + +[SSM Announcement](https://www.ssm.com.my/Lists/Announcement/AnnouncementDetails.aspx?ID=134) or [PDF](https://download.sql.com.my/customer/Fairy/Announcement-NewROC.pdf) + +### Is there any changes in Linking for the E-Invoicing? + +New Field Added +Available in Version 5.2024.983.848 & above + +#### Maintain Customer & Maintain Supplier + +| **Field Name** | **Field Type** | **Field Size** | **Remarks** | +|----------------|----------------|----------------|--------------| +| **TIN** | String | 14 | Company Tax Register Number | +| **IDTYPE** | Integer | | 0 - Empty
1 - Reg No
2 - NRIC (New)
3 - Passport
4 - ARMY
5 - NRIC (Old) | +| **IDNO** | String | 20 | This field will depend on the ID Type selected | +| **TOURISMNO** | String | 17 | This is only applicable to tourism tax registrant, which may consist of hotel operators and online travel operators | +| **SIC** | String | 10 | Malaysia Standard Industrial Classification (MSIC) Codes
[https://sdk.myinvois.hasil.gov.my/codes/#msic-codes](https://sdk.myinvois.hasil.gov.my/codes/#msic-codes)
Available in Version (TBA)
Maintain Supplier Only | +| **SUBMISSIONTYPE** | Integer | 0 | Available in Version 5.2024.992.854 & above
0 = None
17 = E-Invoice/Self Billing (for Maintain Supplier)
18 = Consolidate | +| **IRBM_CLASSIFICATION** | String | 3 | Maintain Supplier Only
Category of products or services being billed as a result of a commercial transaction. More than 1 classification code can be added for goods / services included in the e-Invoice.
[https://sdk.myinvois.hasil.gov.my/codes/classification-codes/](https://sdk.myinvois.hasil.gov.my/codes/classification-codes/)
Available in Version 5.2024.990.852 & above | +| **POSTCODE** | String | 10 | The identifier for an addressable group of properties according to the relevant postal service | +| **CITY** | String | 50 | The common name of the city, town, or village, where the Customer/Supplier address is located. | +| **STATE** | String | 50 | The state of a country.
[https://sdk.myinvois.hasil.gov.my/codes/state-codes/](https://sdk.myinvois.hasil.gov.my/codes/state-codes/) | +| **COUNTRY** | String | 2 | A code that identifies the country.
May refer to [Country List](https://docs.google.com/spreadsheets/d/1TcFVqH1VCJ5SjHAt2VCHIeTTcQVUjtIBxLaZGGM0E5k/edit?gid=1859696683#gid=1859696683) | + +#### Maintain Stock Item + +| **Field Name** | **Field Type** | **Field Size** | **Remarks** | +|----------------|----------------|----------------|--------------| +| **IRBM_CLASSIFICATION** | String | 3 | Category of products or services being billed as a result of a commercial transaction. More than 1 classification code can be added for goods / services included in the e-Invoice.
[https://sdk.myinvois.hasil.gov.my/codes/classification-codes/](https://sdk.myinvois.hasil.gov.my/codes/classification-codes/) | + +Available in Version 5.2024.990.852 & above + +#### Sales & Purchase Data Entry - Header + +| **Field Name** | **Field Type** | **Field Size** | **Remarks** | +|----------------|----------------|----------------|--------------| +| **EIVDATETIME** | DateTime | 0 | For below version 5.2024.1001.858
E-Invoicing Submitted Date time in the UTC timezone
e.g. 19/07/2024 7:17:43 AM | +| **EIV_UTC** | DateTime | 0 | For version 5.2024.1001.858 & Above
E-Invoicing Submitted Date time in the UTC timezone
e.g. 19/07/2024 7:17:43 AM | +| **IRBM_UUID** | String | 26 | E-Invoicing Submitted response UUID
e.g. FSEP22A4Y5BFGGWAX95N943811 | +| **IRBM_LONGID** | String | 50 | E-Invoicing Submitted response Long UUID
e.g. TM9AFNQ0M76T07BTX95NX43J10CzvSE31712365482 | +| **IRBM_STATUS** | Integer | 0 | E-Invoicing Submitted Status
[https://sdk.myinvois.hasil.gov.my/faq/](https://sdk.myinvois.hasil.gov.my/faq/)
e.g. 2 | +| **POSTCODE** | String | 10 | The identifier for an addressable group of properties according to the relevant postal service | +| **CITY** | String | 50 | The common name of the city, town, or village where the Customer/Supplier address is located. | +| **STATE** | String | 50 | The state of a country.
[https://sdk.myinvois.hasil.gov.my/codes/state-codes/](https://sdk.myinvois.hasil.gov.my/codes/state-codes/) | +| **COUNTRY** | String | 2 | A code that identifies the country.
May refer to Country List Here | +| **DPOSTCODE** | String | 10 | The identifier for an addressable group of properties according to the relevant postal service | +| **DCITY** | String | 50 | The common name of the city, town, or village where the Customer/Supplier address is located. | +| **DSTATE** | String | 50 | The state of a country.
[https://sdk.myinvois.hasil.gov.my/codes/state-codes/](https://sdk.myinvois.hasil.gov.my/codes/state-codes/) | +| **DCOUNTRY** | String | 2 | A code that identifies the country.
May refer to Country List Here | +| **SALESTAXNO** | String | 25 | | +| **SERVICETAXNO** | String | 25 | | +| **TIN** | String | 14 | Company Tax Register Number | +| **IDTYPE** | Integer | | 0 - Empty
1 - Reg No
2 - NRIC (New)
3 - Passport
4 - ARMY
5 - NRIC (Old) | +| **IDNO** | String | 20 | This field will depend on the ID Type selected | +| **TOURISMNO** | String | 17 | This is only applicable to tourism tax registrant, which may consist of hotel operators and online travel operators | +| **SIC** | String | 10 | Malaysia Standard Industrial Classification (MSIC) Codes
[https://sdk.myinvois.hasil.gov.my/codes/#msic-codes](https://sdk.myinvois.hasil.gov.my/codes/#msic-codes)
Maintain Supplier Only | +| **INCOTERMS** | String | 20 | A set of international trade rules that define the responsibilities of buyers and suppliers.
The input of special characters is not allowed. | +| **SUBMISSIONTYPE** | Integer | 0 | Available in Version 5.2024.992.854 & above
0 = None
17 = E-Invoice/Self Billing (for Purchase Only)
18 = Consolidate | + +#### Sales & Purchase Data Entry - Detail + +| **Field Name** | **Field Type** | **Field Size** | **Remarks** | +|----------------|----------------|----------------|--------------| +| **TAXEXEMPTIONREASON** | String | 300 | Available in Version 5.2024.992.854 & above
For Tax Exemption Code use only | +| **IRBM_CLASSIFICATION** | String | 3 | Category of products or services being billed as a result of a commercial transaction. More than 1 classification code can be added for goods / services included in the e-Invoice.
[https://sdk.myinvois.hasil.gov.my/codes/classification-codes/](https://sdk.myinvois.hasil.gov.my/codes/classification-codes/) | + +Available in Version 5.2024.990.852 & above + +#### Maintain Currency + +| **Field Name** | **Field Type** | **Field Size** | **Remarks** | +|----------------|----------------|----------------|--------------| +| **ISOCODE** | String | 3 | [https://sdk.myinvois.hasil.gov.my/codes/countries/](https://sdk.myinvois.hasil.gov.my/codes/countries/) | + +Available in Version 5.2024.995.855 & above + +#### GL Cash Book - Payment Voucher & Office Receipt - Header + +| **Field Name** | **Field Type** | **Field Size** | **Remarks** | +|----------------|----------------|----------------|--------------| +| **EIV_UTC** | DateTime | 0 | E-Invoicing Submitted Date time in the UTC timezone
e.g. 19/07/2024 7:17:43 AM | +| **COMPANYNAME** | String | 100 | | +| **ADDRESS1** | String | 60 | | +| **ADDRESS2** | String | 60 | | +| **ADDRESS3** | String | 60 | | +| **ADDRESS4** | String | 60 | | +| **POSTCODE** | String | 10 | The identifier for an addressable group of properties according to the relevant postal service | +| **CITY** | String | 50 | The common name of the city, town, or village where the Customer/Supplier address is located. | +| **STATE** | String | 50 | The state of a country.
[https://sdk.myinvois.hasil.gov.my/codes/state-codes/](https://sdk.myinvois.hasil.gov.my/codes/state-codes/) | +| **COUNTRY** | String | 2 | A code that identifies the country.
May refer to Country List Here | +| **PHONE1** | String | 200 | | +| **SALESTAXNO** | String | 25 | | +| **SERVICETAXNO** | String | 25 | | +| **TIN** | String | 14 | Company Tax Register Number | +| **IDTYPE** | Integer | | 0 - Empty
1 - Reg No
2 - NRIC (New)
3 - Passport
4 - ARMY
5 - NRIC (Old) | +| **IDNO** | String | 20 | This field will depend on the ID Type selected | +| **TOURISMNO** | String | 17 | This is only applicable to tourism tax registrant, which may consist of hotel operators and online travel operators | +| **SIC** | String | 10 | Malaysia Standard Industrial Classification (MSIC) Codes
[https://sdk.myinvois.hasil.gov.my/codes/#msic-codes](https://sdk.myinvois.hasil.gov.my/codes/#msic-codes)
Maintain Supplier Only | +| **SUBMISSIONTYPE** | Integer | 0 | 0 = None
17 = Self Billing
18 = Consolidate
19 = E-Invoice Refund | +| **IRBM_UUID** | String | 26 | E-Invoicing Submitted response UUID
e.g. FSEP22A4Y5BFGGWAX95N943811 | +| **IRBM_LONGID** | String | 50 | E-Invoicing Submitted response Long UUID
e.g. TM9AFNQ0M76T07BTX95NX43J10CzvSE31712365482 | +| **IRBM_STATUS** | Integer | 0 | E-Invoicing Submitted Status
[https://sdk.myinvois.hasil.gov.my/faq/](https://sdk.myinvois.hasil.gov.my/faq/)
e.g. 2 | + +#### GL Cash Book - Payment Voucher & Office Receipt - Detail + +| **Field Name** | **Field Type** | **Field Size** | **Remarks** | +|----------------|----------------|----------------|--------------| +| **IRBM_CLASSIFICATION** | String | 3 | Category of products or services being billed as a result of a commercial transaction. More than 1 classification code can be added for goods / services included in the e-Invoice.
[https://sdk.myinvois.hasil.gov.my/codes/classification-codes/](https://sdk.myinvois.hasil.gov.my/codes/classification-codes/) | + +### Change to Boolean Type + +Begin from SQL Acc Version 5.2024.1007.860 & above the follow field type will change to Boolean Type (True/False) + +[SQL Accounting 860](https://download.sql.com.my/customer/Fairy/sqlacc.x86.5.2024.1008.860.exe) + +| **For Version 859 & Below** | **For Version 860 & Above** | +|-----------------------------|------------------------------| +| - T
- 1 | True | +| - F
- 0 | False | + +| FieldName | True Value | False Value | +| --- | --- | --- | +| TaxInclusive | 1 | 0 | +| SerialNumber | T | F | +| Cancelled | T | F | +| Cancelled | 1 | 0 | +| AddPDCToCRLimit | T | F | +| Transferable | T | F | +| IsActive | T | F | +| IsActive | 1 | 0 | +| NonRefundable | 1 | 0 | +| AllowExceedCreditLimit | T | F | +| Printable | T | F | +| StockControl | T | F | +| IsBase | 1 | 0 | +| IsDefault | 1 | 0 | +| IsDefault | T | F | + +| Programming | Before (For Version 859 & below) | After (For Version 860 & Above) | +| --- | --- | --- | +| C# | lDetail.FindField("TaxInclusive").value = 1;
lDetail.FindField("Printable").AsString = "T"; | lDetail.FindField("TaxInclusive").value = True;
lDetail.FindField("Printable").value = True; | +| PHP | \$lDetail->FindField("TaxInclusive")->value = 0;
\$lDetail->FindField("Printable")->AsString = "T"; | \$lDetail->FindField("TaxInclusive")->value = False;
\$lDetail->FindField("Printable")->value = True; | +| Python | lDetail.FindField("TaxInclusive").value = 1
lDetail.FindField("Printable").AsString = "T" | lDetail.FindField("TaxInclusive").value = True
lDetail.FindField("Printable").value = True | +| Query SQL | SELECT CODE, DESCRIPTION FROM AGENT
WHERE ISACTIVE='T'
or
SELECT CODE, DESCRIPTION FROM SHIPPER
WHERE ISACTIVE=1 | SELECT CODE, DESCRIPTION FROM AGENT
WHERE ISACTIVE
or
SELECT CODE, DESCRIPTION FROM SHIPPER
WHERE ISACTIVE | +| Query SQL | SELECT CODE, DESCRIPTION FROM AGENT
WHERE ISACTIVE='F'
or
SELECT CODE, DESCRIPTION FROM SHIPPER
WHERE ISACTIVE=0 | SELECT CODE, DESCRIPTION FROM AGENT
WHERE NOT ISACTIVE or
SELECT CODE, DESCRIPTION FROM SHIPPER
WHERE NOT ISACTIVE | diff --git a/docs/usage/general/view.md b/docs/usage/general/view.md new file mode 100644 index 00000000..67e6ff10 --- /dev/null +++ b/docs/usage/general/view.md @@ -0,0 +1,232 @@ +--- +sidebar_position: 1 +title: View +description: A guide about View for SQL Account +slug: /usage/general/view +tags: ["SQL Account", "Usage", "View"] +--- + +## Tabbed Docking + +Similar to Internet Explorer or Google Chrome, the application supports a tabbed layout so you can view windows as tabs instead of separate windows. + +![tabbed-docking-1](../../../static/img/usage/general/view/tabbed-docking-1.png) + +![tabbed-docking-2](../../../static/img/usage/general/view/tabbed-docking-2.png) + +## Application Theme + +The Application Theme allows users to change the application's skin/layout to their preference. Enabling themes may consume more system resources. + +![application-theme-1](../../../static/img/usage/general/view/application-theme-1.png) + +![application-theme-2](../../../static/img/usage/general/view/application-theme-2.png) + +## Show Chart + +`View | Show Chart` + +This function displays sales and purchase price history data in chart form. + +1. Open Sales or Purchase Price History via `Sales | Print Sales Price History` or `Purchase | Print Purchase Price History`. + +2. Highlight the data in the grids. + + ![show-chart-step-2](../../../static/img/usage/general/tips-tricks/show-chart-step2.png) + +3. Click on `View | Show Chart`. + +4. A dialog prompts three chart types (Bar Chart, Line Chart, Pie Chart). See the screenshot below. + + ![show-chart-step-4](../../../static/img/usage/general/tips-tricks/show-chart-step4.png) + +Data transform into the chart depends on the data highlighted in the Sales/Purchase Price History grid. + +## Sales Price History (Shift+Ctrl+S) + +`View | Sales Price History...` + +This function provides a quick check of an item's sales price history while creating sales, purchase, or stock documents. + +`Shift + Ctrl + S` + +1. As long as you have highlighted the item code (e.g., in Maintain Stock Item or while creating sales/purchase documents). + +2. Press Shift + Ctrl + S to open the Sales Price History for the item. + + ![sales-ph-step-2](../../../static/img/usage/general/tips-tricks/sales-ph-step2.png) + +3. Insert a Company Name column to compare the sales price history by company. + + ![sales-ph-step-3](../../../static/img/usage/general/tips-tricks/sales-ph-step3.png) + +4. Set the latest number of records to be displayed for each sales document type (QT, SO, DO, IV, CS, CN, DN). + + ![sales-ph-step-4](../../../static/img/usage/general/tips-tricks/sales-ph-step4.png) + +5. Click on Sales to exclude the sales document types. + + ![sales-ph-step-5](../../../static/img/usage/general/tips-tricks/sales-ph-step5.png) + +Sales Price History is always enabled to quickly view the price history for customers. + +## Purchase Price History (Shift+Ctrl+P) + +`View | Purchase Price History...` + +This function provides a quick check of an item's purchase price history while creating sales, purchase, or stock documents. + +`Shift + Ctrl + P` + +1. As long as you have highlighted the item code (e.g., in Maintain Stock Item or while creating sales/purchase documents). + +2. Press Shift + Ctrl + P to open the Purchase Price History for the item. + + ![purchase-ph-step-2](../../../static/img/usage/general/tips-tricks/purchase-ph-step2.png) + +3. Insert a Company Name column to compare purchase price history by company. + + ![purchase-ph-step-3](../../../static/img/usage/general/tips-tricks/purchase-ph-step3.png) + +4. Set the latest number of records to be display for each purchase document types (PQ, PO, GR, PI, CP, SC, SD). + + ![purchase-ph-step-4](../../../static/img/usage/general/tips-tricks/purchase-ph-step4.png) + +5. Click on Purchase to exclude the purchase document types. + + ![purchase-ph-step-5](../../../static/img/usage/general/tips-tricks/purchase-ph-step5.png) + +Purchase Price History is always enabled to quickly view price history for suppliers. + +## Available Stock Balance (Ctrl+F11) + +`View | Available Stock Balance...` + +This function provides a quick check of stock status while creating sales, purchase, or stock documents. + +`Ctrl+F11` + +1. As long as you have highlighted the item code (e.g., in Maintain Stock Item or while creating sales/purchase documents). + +2. Press Ctrl+F11 - Available Stock Balance.... + + ![stock-bal-step-2](../../../static/img/usage/general/tips-tricks/stock-bal-step2.png) + +### Stock Card Qty By Location + +1. The Stock Card Qty By Location tab shows the stock status summarized by location and batch. + +2. See the screenshot below. + + ![stock-card-qty-2](../../../static/img/usage/general/tips-tricks/stock-card-qty-step2.png) + + | Column Name | Explanation | + | --- | --- | + | Location | Stock qty balances group by location. | + | Batch | Stock qty balances group by batch. | + | S.O.Qty | Outstanding SO Qty (Back Order). | + | P.O.Qty | Outstanding PO Qty (Back Order). | + | J.O.Qty | Outstanding JO Qty (Job Order Outstanding). | + | Qty | On hand Qty. | + | Avail.Qty | Future Qty. | + | Exp.Date | Batch expiry date. | + +### Back Order Detail + +1. To check the S.O.Qty, P.O.Qty and J.O.Qty in detail. +2. Click on Back Order Detail tab. See the screenshot below. + + ![back-order-detail](../../../static/img/usage/general/tips-tricks/back-order-detail.png) + +### Alternative Stock Item + +1. Click on the Alternative Stock Item tab to check the alternative item code. +2. See the screenshot below. + + ![alternative-stock-item](../../../static/img/usage/general/tips-tricks/alternative-stock-item.png) + +Available Stock Balance is always enabled to quickly view stock status. + +## Price Tag (Ctrl+T) + +`View | Price Tag...` + +This function quickly displays the price tag settings for an item. + +`Ctrl + T` + +1. As long you are highlight the item code, eg. at Maintain Stock Item or during the sales/purchase documents creation. +2. Press Ctrl + T to check the Price Tag... for the item. + + ![price-tag](../../../static/img/usage/general/tips-tricks/price-tag.png) + +Price Tag is always enabled to quickly view price tag information for the item. + +## Stock Item Picture + +`View | Stock Item Picture` + +This function displays the picture of the selected stock item. + +1. As long you are highlight the item code, eg. at Maintain Stock Item or during the sales/purchase documents creation. +2. Click on View | Stock Item Picture. + + ![stock-item-price](../../../static/img/usage/general/tips-tricks/stock-item-price.png) + +Stock Item Picture always turns-on to quickly view the picture of the stock item. + +## Stock Item Search (F9) + +`View | Stock Item Search` + +This function is to quickly search for the items by entering a keyword. It is easy to apply the item found into the sales/purchase/stock documents. + +![stock-item-search](../../../static/img/usage/general/tips-tricks/stock-item-search.png) + +`F9` + +1. Enter a keyword to search for items. + + ![stock-item-search-step-1](../../../static/img/usage/general/tips-tricks/stock-item-search-step1.png) + +2. You can highlight multiple items. + + ![stock-item-search-step-2](../../../static/img/usage/general/tips-tricks/stock-item-search-step2.png) + +3. Drag and drop the highlighted items into the invoice detail grid. + + ![stock-item-search-step-3](../../../static/img/usage/general/tips-tricks/stock-item-search-step3.png) + +4. The items will be inserted into the invoice detail grid. See the screenshot below. + + ![stock-item-search-step-4](../../../static/img/usage/general/tips-tricks/stock-item-search-step4.png) + +Item Search is always enabled to help find items when creating documents. + +## Advance Search (Ctrl+F) + +`Edit | Find` + +This function finds records by selected field(s) and parameters. + +`Ctrl + F` + +![advance-search](../../../static/img/usage/general/tips-tricks/advance-search.png) + +| Field Name | Properties | +| --- | --- | +| Display Fields | Fields to be displayed on the result screen. | +| Tick Button | Select all. | +| Cross Button | Unselect all. | +| Plus Button | Add Condition | +| Minus Button | Remove Selected Condition | +| Match any of the following | Is OR condition. Find ANY Match Value on the Selected Condition. | +| Match all of the following | Is an AND condition. Find ALL Match Value on the Selected Condition. | +| Fields | Available Field(s) can Search for. | +| Operator | Type of Search. | +| Check Box | Selected Conditions which need to run/execute. | +| Value 1 | Parameter 1 or What to Value to Find. | +| Value 2 | Parameter 2 or What to Value to find and only Available for Operators between and not between. | +| Search | Apply or Search the Value. | +| Clear | To Clear All Conditions(Default Action) or All Value. | +| Case Sensitive | Tick if you want to find the value is Case Sensitive. | diff --git a/docs/usage/gst-and-sst/_category_.json b/docs/usage/gst-and-sst/_category_.json new file mode 100644 index 00000000..0734dfb9 --- /dev/null +++ b/docs/usage/gst-and-sst/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "GST and SST ", + "position": 10, + "link": { + "type": "generated-index", + "description": "GST and SST guide" + } +} \ No newline at end of file diff --git a/docs/usage/gst-and-sst/gst.md b/docs/usage/gst-and-sst/gst.md new file mode 100644 index 00000000..158b0435 --- /dev/null +++ b/docs/usage/gst-and-sst/gst.md @@ -0,0 +1,3174 @@ +--- +sidebar_position: 1 +title: GST +description: GST +slug: /usage/gst-and-sst/gst +tags: ["SQL Account", "Usage", "GST"] +--- + +## GST Setup and Information + +## GST Count Down Timer + +This is a countdown timer for the submission of the GST Return. It is generally displayed 7 days before the GST Return due date. + +**Example GST Count Down Timer:** + +![des-gst-countdown-timer-1](../../../static/img/usage/gst-and-sst/gst/gst-countdown-timer-1.jpg) + +### Formula + +Visible := (Return Due - Today Date - 1) < 7 + +### Example + +Frequently : Monthly + +Next Submission : Nov 2016 + +Count Down begin shown : 24 Dec 2016 + +Today date : 27 Dec 2016 + +Count Down Shown : 3 Days+++ + +## GST Return + +To process and close the GST Returns period. You can generate the GST-03 and GAF. + +### New GST Return + +![des-new-gst-return-1](../../../static/img/usage/gst-and-sst/gst/new-gst-return-1.jpg) + +| **Field Name** | **Field Type** | **Explanation** | +|--------------------------------|----------------|---------------------------------------------------------------------------------| +| Process From to | Date | GST Taxable Period, e.g., either monthly or quarterly. | +| Process Date | Date | Date to process the GST Return. | +| Amendment | Boolean | Ticked. In GST-03, the "Amendment" checkbox will be marked X. | +| C/F Refund for GST | Boolean | Ticked. In GST-03, Item 9 "Do you choose to carry forward refund for GST?" will be marked X in Yes checkbox. | +| Longer Period Adjustment (LPA) | Boolean | Auto ticked according to the first tax year adjustment. | +| Description | String | GST Return - Process From Date to Date (by default). | +| Ref 1 | String | Key-in any reference no. | +| Ref 2 | String | Key-in any reference no. | + +### Draft GST Return + +You can draft the GST-03 before the final GST-03 submission by processing it as a draft. + +1. Click the dropdown arrow nect to the Process button (Y). +2. Refer to the screenshot below. + + ![des-draft-gst-return-1](../../../static/img/usage/gst-and-sst/gst/draft-gst-return-1.jpg) + +3. DRAFT Status showed for the GST Returns period. + + ![des-draft-gst-return-2](../../../static/img/usage/gst-and-sst/gst/draft-gst-return-2.jpg) + +:::note + +You can still amend documents while the GST return is in **DRAFT** status. Multiple drafts can be created before FINAL process the GST Returns for the period. + +::: + +### Final GST Return + +1. Click the Process button. +2. Refer to the screenshot below. + + ![des-final-gst-return-1](../../../static/img/usage/gst-and-sst/gst/final-gst-return-1.jpg) + +3. The finalized GST Return will no longer display "DRAFT" in the status column. + + ![des-final-gst-return-2](../../../static/img/usage/gst-and-sst/gst/final-gst-return-2.jpg) + +:::note + +You cannot amend the documents anymore where the FINAL GST return has generated. + +::: + +### Extra + +#### AR & AP Bad Debt Relief + +1. Bad Debt Relief screen will appear (see the screenshot below) if the system detects outstanding Tax Invoices that have expired for 6 months. +2. Sales documents from the company without GST No. will be un-ticked. You can tick the documents if you believe the company is GST-Registered. + + ![des-gst-bad-debt-relief-1](../../../static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-1.jpg) + + :::note Tips: + + ![des-gst-bad-debt-relief-2](../../../static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-2.jpg) + + To avoid to tick the documents manually for GST Registered company, please go to update the GST no at Maintain Customer. + + ::: + +3. Press OK if a "confirm" message is prompted (see the screenshot below), This indicates that some companies do not have a GST No. +4. If you confirmed that the company is Non-GST Registered, press YES to proceed. +5. Otherwise, press NO and update the GST No. in Maintain Customer to confirm the company is GST-registered before processing the GST Return. + + ![des-gst-bad-debt-relief-3](../../../static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-3.jpg) + +#### Capital Goods Acquired + +1. If you receive a prompt for **GST Return - Capital Goods Acquired**, it indicates that there are credit adjustment transactions for Fixed Asset Account. See below screenshot. + + ![des-gst-capital-goods-acquired-1](../../../static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-1.jpg) + +2. Select the transactions line to include the credit adjustment (eg. Rm15,000.00). Otherwise, the system will capture the value of Rm60,000.00 in GST-03 item 16. See the screenshot below. + + ![des-gst-capital-goods-acquired-2](../../../static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-2.jpg) + +3. It will capture the net capital goods acquired value in GST-03 item 16. + + ![des-gst-capital-goods-acquired-3](../../../static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-3.jpg) + +## Open GST Return + +1. See the screenshot below: + + ![des-open-gst-return-1](../../../static/img/usage/gst-and-sst/gst/open-gst-return-1.jpg) + +2. You can insert more available fields. + + ![des-open-gst-return-2](../../../static/img/usage/gst-and-sst/gst/open-gst-return-2.jpg) + + | **Field Name** | **Field Type** | **Explanation** | + |---------------------------------------|----------------|---------------------------------------------------------------------------------| + | Status | String | To show the GST Return status, i.e., DRAFT, DE-REGISTER. | + | Process Date | Date | To show process date. | + | Date From | Date | To show date from. | + | Date To | Date | To show date to. | + | Description | String | To show the description entered. | + | Ref 1 | String | To show the ref 1 entered. | + | Ref 2 | String | To show the ref 2 entered. | + | User | String | To display the User process the GST Return. | + | Closed | Boolean | Always ticked to close. | + | LPA for Partial Exemption | Boolean | Longer period adjustment (LPA) for partial exemption (Mixed Supplies). | + | De-register | Boolean | Ticked if the taxable period has de-register date. | + | Amendment | Boolean | To show the GST Return has ticked this option. | + | | | Refer to :[GST GUIDE ON AMENDMENT RETURN (GST-03)](https://sites.google.com/site/sqlestream/sql-financial-accounting/9-good-and-service-tax-gst---malaysia/9-22-gst-03-item-detail) | + | C/F Refund for GST | Boolean | To show the GST Return has ticked this option. | + | Process Net Realized Exchange Gain/Loss | Boolean | No longer use because system auto handles this option. | + | Tax Year | Boolean | Tax Year point. | + | De Minimis Rule | Boolean | - Ticked = Pass | + | | | - Un-ticked = Not Pass | + | Residual Input Tax Recovery Rate (%) | Float | To display the IRR %. | + | LPA Date From | Date | LPA date from. | + | LPA Date To | Float | LPA date to. | + | ∑ Output Tax | Float | To show the total output tax value. | + | ∑ Input Tax | Float | To show the total input tax value. | + | GST Amount Payable | Float | Net GST Payable or Claimable. | + | Journal No. | String | Auto post the JVGST-XXXXX to reconcile the GST Payable and GST Claimable accounts. | + | | Button | Options button: GST-03, Print GST Listing, Generate GST Audit File (GAF). | + + :::note Tips: + + You can click New GST Return in Open GST Return screen. See below the screenshot. + + ![des-open-gst-return-3](../../../static/img/usage/gst-and-sst/gst/open-gst-return-3.jpg) + + ::: + +## Maintain Tax + +- This to Maintain all the available tax given by Government or user can self add or modified + +![des-gst-maintain-tax-1](../../../static/img/usage/gst-and-sst/gst/gst-maintain-tax-1.jpg) + +### Create New Tax + +- Screenshot below is the Maintain Tax entry form. + +![des-gst-maintain-tax-create-new-tax-1](../../../static/img/usage/gst-and-sst/gst/gst-maintain-tax-create-new-tax-1.jpg) + +![des-gst-maintain-tax-create-new-tax-2](../../../static/img/usage/gst-and-sst/gst/gst-maintain-tax-create-new-tax-2.jpg) + +| **Field Name** | **Explanation & Properties** | +|------------------|-----------------------------------------------------------------------------------------------| +| Code | Enter the tax code to be shown in report. | +| Active | - Checked: Active & able to select from the Tax List in data entry. | +| | - UnChecked: InActive & unable to select from the Tax List in data entry. | +| Description | Enter the tax description. | +| Tax Type | Select the Tax Type for the Tax Code to be created. | +| Tax Rate | User can self-determine the rate or set Auto: | +| | - **A**: Auto Tax Rate. System will auto change to new rate if there is update in GST Rate (must update SQL Accounting). | +| | - **E**: Excluded from IRR calculation (useful for OS Tax Code & Mixed Supplies Industry). | +| | - **EA**: Combination of A & E. | +| | - **6%**: User-defined fixed rate (e.g., 6%). | +| | - **E6%**: Fixed rate excluded from IRR calculation. | +| | Default 1st row is the Default selection in data entry. | +| Tax Account | Select an appropriate GL Account from Maintain Account. | +| Tax Inclusive | - Checked: Default is Tax Inclusive. | +| | - UnChecked: Default is Tax Exclusive. | + +### Use of Tax + +- You can set the tax as default at the following + 1. GL | Maintain Account... + 2. Customer | Maintain Customer... | Tax + 3. Supplier | Maintain Supplier... | Tax + 4. Stock | Maintain Stock Item... | Output Tax/Input Tax + 5. Tools | Options | Customer | Default Output Tax + 6. Tools | Options | Supplier | Default Input Tax +- Therefore, item inserted will be automatically calculate the tax amount based on the subtotal. See below screenshot. + +![des-gst-maintain-tax-use-of-tax-1](../../../static/img/usage/gst-and-sst/gst/gst-maintain-tax-use-of-tax-1.jpg) + +### Default System Tax Seq + +Default System Tax Seq are as follow + +***For Sales & Purchase*** + +1) Maintain Customer/Supplier +2) Maintain Item Code +3) Tools | Options | Customer/Supplier => For Version 836.761 & below +4) Maintain Tax with IsDefault is Tick => For Version 837.762 & above + +***For AR & AP*** + +1) Maintain Customer/Supplier +2) Maintain Account +3) Tools | Options | Customer/Supplier => For Version 836.761 & below +4) Maintain Tax with IsDefault is Tick => For Version 837.762 & above + +***For GL*** + +1) Maintain Account + +## GST Effective Date + +Enable to set the GST start date (register) and end date (de-register). + +1. Below the screenshot is the Start GST wizard, you are required to set the GST Effective Date. + + ![des-gst-effective-date-1](../../../static/img/usage/gst-and-sst/gst/gst-effective-date-1.jpg) + +2. You can check the GST Effective Date under the menu GST | GST Effective Date... + + ![des-gst-effective-date-2](../../../static/img/usage/gst-and-sst/gst/gst-effective-date-2.jpg) + + | Field Name | Field Type | Explanation | + |-------------------------------|------------|---------------------------------------| + | GST Effective Date | Date | GST start date. | + | I want to de-register from GST | Boolean | To set de-register date from GST. | + +### How to set De-register + +1. At the GST effective date screen, tick on I want to de-register from GST. + + ![des-gst-effective-date-how-to-deregister-1](../../../static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-1.jpg) + +2. Next', type-in the de-register date. Let's assume ABC Sdn Bhd ceased to be a registered person on 15 May 2016. + + ![des-gst-effective-date-how-to-deregister-2](../../../static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-2.jpg) + +3. Click Finish to confirm the de-register date. +4. GST De-register Date : 15 May 2016 will displayed below the GST effective date. See the screenshot below. + + ![des-gst-effective-date-how-to-deregister-3](../../../static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-3.jpg) + +5. Click **Finish** to exit. + +:::note Tips: + +You can found the De-Register markings in the GST Returns. See the screenshot below. + +![des-gst-effective-date-how-to-deregister-4](../../../static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-4.jpg) + +::: + +### How to cancel De-Register Date? + +1. At the GST effective date screen, click on the **De-Register Date**. + + ![des-gst-effective-date-how-to-cancel-1](../../../static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-1.jpg) + +2. Leave the De-Register date **blank** or become **d/M/yyyy**. See the screenshot below. + + ![des-gst-effective-date-how-to-cancel-2](../../../static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-2.jpg) + ![des-gst-effective-date-how-to-cancel-3](../../../static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-3.jpg) + +3. Click **Finish** to confirm remove the de-register date. + +## Gift / Deemed Supply + +This guide will teach you to enter the gift and deemed supply in SQL Financial Accounting. + +### Gift + +#### Gift Rules + +Goods worth not more than RM500 given FREE to the same person in the same year. **The word ‘year’ in paragraph 5(2) (a) of the First Schedule of GSTA 2014 refers to ‘tax year ‘(financial year)**. + +- not a supply +- not subject to GST +- input tax is claimable + +> **What it means year as Tax Year (Financial Year)?** +> For example.... +GST Effective Date: 01 Apr 2015 +Financial Start Period: 01 July 2014 +> +> +> First tax year will be: 01 Apr 2015 - 30 Jun 2016 (15 months) - Gift rule Rm500 per person per tax year +> Second tax year will be: 01 Jul 2016 - 30 Jun 2017 (12 months) - Gift rule Rm500 per person per tax year + +**Example 1:** +Company XY Sdn Bhd purchased 15 hampers worth RM200/hamper to be given to each of his employees. + +- every employee will get one hamper FOC. +- no need to account for output tax. +- input tax on 15 hampers = RM180.00 (6% x RM3,000.00) is claimable. + +**Example 2:** +Company CX Sdn Bhd has purchased a watch worth RM400.00 and gave it to one of the director’s son. + +- The gift is not subject to GST because its value is less than RM500.00 (gift rule). +- input tax incurred on the purchase is claimable. + +**Example 3:** +A Company purchased a laptop worth RM1,500.00 and gave the laptop to a director’s son as a gift. + +- GST on the laptop must be accounted for by the company as output tax. +- the value of the goods is more than RM500.00. + +**Example 4:** +A company purchased a laptop worth RM1,500.00 three years ago. Currently the company has given the laptop to one of his business partners. For the purpose of accounting GST, the company has to use open market value of the goods now where the value of the goods is RM450.00, i.e. the value of the goods has depreciated. + +- no need to account for output tax on the gift +- the value of the goods is less than RM500.00. (Gift rule applicable) + +**Example 5:** +Company C rewarded RM5,000.00 to his best employee of the year. + +- not subject to GST +- money is neither goods nor services + +#### Gift Document Entry + +1. Click on New. +2. Select Type : Gift. + + ![des-gift-document-entry-1](../../../static/img/usage/gst-and-sst/gst/gift-document-entry-1.jpg) + + :::note Note: + + You will see this note "Entitle Yearly Exempt RM500.00" at the bottom. + + ::: + +3. For Gift, you must select Code : Customer Code. +4. Select Item Code: Item Code. +5. Select a preferred Expenses GL Account. User has to create a GL Account in Maintain Account. + + For example, + + | Item Code | Description | Qty | UOM | U/Cost | Sub Total | Tax | Tax Rate | Tax Amount | SubTotal (Tax) | Expenses GL Account | + |-----------|-------------|------|------|--------|-----------|-----|----------|------------|----------------|--------------------------------| + | ANT | ANTENA | 1.00 | UNIT | 350.00 | 350.00 | DS | 6% | 0.00 | 350.00 | 999-999 GST Gift/Deemed Supply | + + ![des-gift-document-entry-2](../../../static/img/usage/gst-and-sst/gst/gift-document-entry-2.jpg) + +6. **Yearly Amount** will immediately updated together with the current Gift document amount. + + > **Yearly Amount** = Cumulative gift amount in the same year + current gift document amount + +7. Below screenshot is the 2nd gift document created for same company/person in the same year. **The word ‘year’ in paragraph 5(2) (a) of the First Schedule of GSTA 2014 refers to ‘tax year ‘(financial year)**. + + ![des-gift-document-entry-3](../../../static/img/usage/gst-and-sst/gst/gift-document-entry-3.jpg) + +8. System will auto calculate tax amount once exceed RM500.00 + + | Gift Date | Gift | Cost | Tax Amount | Calculation | + |------------|--------|--------|------------|----------------| + | 05/01/2016 | ANTENA | 200.00 | 0.00 | | + | 17/02/2016 | ANTENA | 350.00 | 33.00 | RM550 × 6% | + + :::note Note: + + The calculation of the gift is based on the Total value of the gift once exceed RM500. + + ::: + +9. Click on Tax Estimator. You can see the GST Amount to be process to the gift. + + ![des-gift-document-entry-4](../../../static/img/usage/gst-and-sst/gst/gift-document-entry-4.jpg) + +#### Process GST Return + +During process of GST-03 Return, if the system detects there are deemed supplies (DS) under gift, it will add this GST Tax under DS as output Tax. + +![des-process-gst-return-1](../../../static/img/usage/gst-and-sst/gst/process-gst-return-1.jpg) + +### Deemed Supply + +1. Click on **New**. +2. Select **Type** : Deemed Supply. + + ![des-deemed-supply-1](../../../static/img/usage/gst-and-sst/gst/deemed-supply-1.jpg) + +3. For Deemed Supply, you can leave the **Code** `<>` +4. Select **Item Code**: Item Code. +5. Select a preferred **Expenses GL Account**. User has to create a GL Account in Maintain Account. + + For example, + + | Item Code | Description | Qty | UOM | U/Cost | Sub Total | Tax | Tax Rate | Tax Amount | SubTotal (Tax) | Expenses GL Account | + |-----------|-------------|------|------|--------|-----------|-----|----------|------------|----------------|--------------------------------| + | ANT | ANTENA | 1.00 | UNIT | 350.00 | 350.00 | DS | 6% | 21.00 | 371.00 | 999-999 GST Gift/Deemed Supply | + +6. System will calculate tax amount instantly when you save the Deemed Supply, ie. Taxable Amount x 6%. +7. **Yearly Amount** always shown 0.00, because it is Deemed Supply. + +## Print GST Listing + +To generate a summary and details of the GST transactions after process the GST Returns. It is easy to cross check against with GST-03. + +### GST Listing + +![des-gst-listing-1](../../../static/img/usage/gst-and-sst/gst/gst-listing-1.jpg) + +#### GST Listing - Parameter + +![des-gst-listing-parameter-1](../../../static/img/usage/gst-and-sst/gst/gst-listing-parameter-1.jpg) + +| Parameter | Type | Explanation | +|------------------------------|---------|----------------------------------------------------| +| GST Process | Lookup | To select the GST Process period. | +| Date | Date | To range the date to retrieve the data after apply it. | +| Tax | Lookup | To select the tax code. | +| Include Zero Local Tax Amount | Boolean | To show the zero local tax amount. | + +#### GST Listing - Summary + +![des-gst-listing-summary-1](../../../static/img/usage/gst-and-sst/gst/gst-listing-summary-1.jpg) + +1. **Double click** on the tax code (eg. SR) in the Summary. +2. It will auto filter the GST transactions by tax code (SR) in the Details. + + ![des-gst-listing-summary-2](../../../static/img/usage/gst-and-sst/gst/gst-listing-summary-2.jpg) + +3. **Deselect** the tax code (SR), click on the X button. See the screenshot below. + + ![des-gst-listing-summary-3](../../../static/img/usage/gst-and-sst/gst/gst-listing-summary-3.jpg) + +#### GST Listing - Detail + + ![des-gst-listing-detail-1](../../../static/img/usage/gst-and-sst/gst/gst-listing-detail-1.jpg) + +1. **Find Panel** is very useful to search in any columns by the keywords entered by you. + + ![des-gst-listing-detail-2](../../../static/img/usage/gst-and-sst/gst/gst-listing-detail-2.jpg) + +2. It helps to search the transactions contain the keywords, eg. **"UPKEEP"**, **"TX"** or **"ZP"**. You just need to enter the keywords directly with a space in between each keywords. See the screenshot below. + + ![des-gst-listing-detail-3](../../../static/img/usage/gst-and-sst/gst/gst-listing-detail-3.jpg) + +### Find Panel Helper + +1. With this function, you can easily narrow down the search to identify the errors before the GST Returns submission. +2. Let say I wish to find the word **UPKEEP**. +3. Type the **UPKEEP** in the find panel. + + ![des-gst-listing-find-panel-helper-1](../../../static/img/usage/gst-and-sst/gst/gst-listing-find-panel-helper-1.jpg) + +4. If you want to **exclude** the **BL** tax code, then you have to enter as **UPKEEP -BL** in the find panel. + + ![des-gst-listing-find-panel-helper-2](../../../static/img/usage/gst-and-sst/gst/gst-listing-find-panel-helper-2.jpg) + +**Explanation of Extended Search Syntax :** + +| Example Search Syntax | Filter Operator | Explanation | +|-----------------------|-----------------|-----------------------------------------------------------------------------| +| apple pineapple mango | OR | Any transaction lines containing apple, pineapple, OR mango will be searched. | +| apple +pineapple | AND | Transaction lines with a combination of apple AND pineapple will be searched. | +| apple -mango | EXCLUDE | Transaction lines with the word apple but EXCLUDE mango. Result: apple and pineapple will be searched. | +| "pineapple apple" | EXACT WORD | Search for the exact words "pineapple apple". | + +:::note NOTE: + +Spacing is very important to make your search more accurate. + +::: + +### Reports + +1. Click on **Preview**. +2. Select a report to preview or print or export. + + ![des-gst-listing-reports-1](../../../static/img/usage/gst-and-sst/gst/gst-listing-reports-1.jpg) + + | No. | Report Name | Purpose | + |-----|------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------| + | 01 | GST Detail 1 | To show the document description in GST Listing. | + | 02 | GST Detail 2 | To show the document item details description in GST Listing. | + | 03 | GST Detail 3 - GST F5-(SG) | For Singapore GST, to show the GST-03 details in GST Listing. | + | 04 | GST Detail 3 - GST-03 | For Malaysia GST, to show the GST-03 details in GST Listing. | + | 05 | GST Detail 4 - Mixed Supplies | Applicable to Mixed Supplies. To show the calculations for DmR and Longer Period Adjustment. | + | 06 | GST Lampiran 2 | GST detail listing for standard rated. It is upon request by RMCD. | + | 07 | GST Lampiran 2-with ZR | Another GST detail listing for the standard rated and zero rated separately. | + | 08 | GST Lampiran 4 - Ringkasan Maklumat Permohanan Tuntutan Pelepasan Hutang Lapuk | Lampiran 4 as requested by Kastam Officer. | + | 09 | GST Listing - Yearly GST Analysis | To analyze the yearly tax amount and taxable amount. | + | 10 | GST Summary Sheet - MY | GST Summary Sheet format. | + | 11 | GST-Lampiran B-0 PT GST Bil 2B (ATS) (IS) | A special GST detail listing for Approved Trader Scheme (Refer to GST-03 item 14 & 15). | + | 12 | GST-Penyata Eksport (ZRE) | A special GST detail listing for Zero Rated Export supply (Refer to GST-03 item 11). | + | 13 | GST-Penyata Pembekalan Dikecualikan (ES & IES) | A special GST detail listing for Exempted Supplies (Refer to GST-03 item 12). | + | 14 | GST-Penyata Pembekalan Tempatan Berkadar Sifar (ZRL) | A special GST detail listing for Zero Rated Local supply (Refer to GST-03 item 10). | + + :::note NOTE: + + From Doc Types in GST Listing Detail are consists of: + + 1. _A = Un-claimable Non-Incidental Exempt Supplies (TX-N43) + 2. _B = Un-claimable TX-RE + 3. _C = Annual Adjustment Non-Incidental Exempt Supplies (TX-N43) + 4. _D = Annual Adjustment TX-RE + 5. _X = Realized Gain Loss + + ::: + +### Pivot Table + +1. Right click on any of the grid columns. +2. From the menu, select **Pivot Table**. + + ![des-gst-listing-pivot-table-1](../../../static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-1.jpg) + +3. At Pivot Table, there are 3 sections as below: + + a. **Data Fields** – Data field will auto inserted when you launch the pivot table. + + b. **Row Fields** – To structure the grouping for Rows. + + c. **Column Fields** – To structure the grouping for Columns. + + ![des-gst-listing-pivot-table-2](../../../static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-2.jpg) + +4. Use the grid columns to structure the pivot format. See the screenshot below. + + ![des-gst-listing-pivot-table-3](../../../static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-3.jpg) + +5. Drag the grid column into Row fields or Column fields. + + ![des-gst-listing-pivot-table-4](../../../static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-4.jpg) + +:::note Hint 1: + +1. Right click on the **Row Field** +2. Select **Expand All**. + ![des-gst-listing-pivot-table-5](../../../static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-5.jpg) + +::: + +:::note Hint 2: + +1. Right click on the grey area. +2. A small menu pop out. + +![des-gst-listing-pivot-table-6](../../../static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-6.jpg) + + 1. **Show Field List** - Not really use to it. + 2. **Show Pre-filter Dialog** - Insert filter conditions. + 3. **Print Grid** - To print the grid. + 4. **Grid Export** - To export the grid data into EXCEL, TEXT, HTML and XML. + +::: + +## Print GST - 03 + +To generate the GST-03 data for submission via TAP. + +### GST - 03 + +![des-gst03-1](../../../static/img/usage/gst-and-sst/gst/gst03-1.jpg) + +#### GST-03-Parameter + +![des-gst03-parameter-1](../../../static/img/usage/gst-and-sst/gst/gst03-parameter-1.jpg) + +| Parameter | Type | Explanation | +|-------------|--------|-------------------------------------| +| GST Process | Lookup | To select the GST Process Period. | + +See example of the **GST Process Lookup** screenshot below. + +![des-gst03-parameter-2](../../../static/img/usage/gst-and-sst/gst/gst03-parameter-2.jpg) + +#### GST-03 Form + +1. After select the GST Process parameter, click on APPLY. +2. See the below screenshot. + + ![des-gst03-form-1](../../../static/img/usage/gst-and-sst/gst/gst03-form-1.jpg) + +#### GST-03 TAP Upload File + +1. At the GST-03 on the screen, click on the **PLAY** button. +2. Click on **GST03_TAP**. See the below screenshot. + + ![des-gst03-tap-upload-file-1](../../../static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-1.jpg) + +3. Select the destination directory to save the TAP-Upload text file, eg. GST Tap Return for Oct 2015 the filename: **GSTTapReturn-201510**. +4. Click on **SAVE**. +5. See the below screenshot. + + ![des-gst03-tap-upload-file-2](../../../static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-2.jpg) + +6. Prompt the below message. Press OK to proceed to upload the file via TAP website. + + ![des-gst03-tap-upload-file-3](../../../static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-3.jpg) + +### GST - 03 Item Details + +Original source from RMCD website: +[GST-03 Guidelines from RMCD website](https://mydlv.customs.gov.my/www/admin/files/JKDM/resources/assets/pdf/Panduan_Mengisi_Borang%20GST-03.pdf) + +#### PART A : DETAILS OF REGISTERED PERSON + +| Item No. | Description | Guidelines | +|----------|--------------------|----------------------------------------------| +| 01 | GST No.* | GST No from File → Company Profile... | +| 02 | Name of Business* | Company Name from File → Company Profile... | + +#### PART B : DETAILS OF RETURN + +| Item No. | Description | Guidelines | +|----------|-----------------------------------------------------------------------------|----------------------------------------------------------------------------| +| 03 | Taxable Period* | GST Returns – Process date range. | +| 04 | Return and Payment Due Date* | Follow the RMCD due date. | +| 05a | Output Tax – Total Value of Standard Rated Supply* | **SR + DS** (Taxable Amount) | +| 05b | Output Tax – Total Output Tax (Inclusive of Tax Value on Bad Debt Recovered & other Adjustments)* | **SR + DS + AJS** (Tax Amount) | +| 06a | Input Tax – Total Value of Standard Rate and Flat Rate Acquisitions* | **TX + IM + TX-E43 + TX-RE** | +| 06b | Input Tax – Total Input Tax (Inclusive of Tax Value on Bad Debt Relief & other Adjustments)* | **TX + IM + TX-E43 + TX-RE + AJP** (Tax Amount) | +| 07 | GST Amount Payable (Item 5b – Item 6b)* | Output Tax Value > Input Tax Value | +| 08 | GST Amount Claimable (Item 6b – Item 5b)* | Input Tax Value > Output Tax Value | +| 09 | Do you choose to carry forward refund for GST? | Mark **X** on YES if you have ticked C/F Refund for GST. | + +#### PART C : ADDITIONAL INFORMATION + +| Item No. | Description | Guidelines | +|----------|---------------------------------------------------------------|------------------------------------------------------------------------------------------------| +| 10 | Total Value of Local Zero-Rated Supplies* | **ZRL + NTX** (Taxable Amount) | +| 11 | Total Value of Export Supplies* | **ZRE + ZDA** (Taxable Amount) | +| 12 | Total Value of Exempt Supplies* | **IES + ES** (Taxable Amount) | +| | | Note: Net Loss in Forex (IES) = 0.00 | +| 13 | Total Value of Supplies Granted GST Relief* | **RS** (Taxable Amount) | +| 14 | Total Value of Goods Imported Under Approved Trader Scheme* | **IS** (value excluding tax) | +| 15 | Total Value of GST Suspended under item 14* | **IS x 6%** (value of tax) | +| 16 | Total Value of Capital Goods Acquired* | **TX + TX-CG + IM** (value excluding tax) | +| | | Note: Regardless of purchase asset value. Purchase doc/Cash Book PV/ JV using "Fixed Asset" GL Account (exclude Block Tax). | +| 17 | Total Value of Bad Debt Relief Inclusive Tax* | **AJP** (value including tax) – Only Debtor (106 x AJP Input Tax / 6) | +| 18 | Total Value of Bad Debt Recovered Inclusive Tax* | **AJS** (value including tax) – Only Debtor (106 x AJS Input Tax / 6) | +| 19 | Breakdown Value of Output Tax in accordance with the Major Industries Code | Picks from GL Accounts that need MSIC Code: Sales Account, Cash Sales Account, Return Inwards, etc. | +| | | MSIC Code is a 5-digit code representing your business nature. | +| | | Used in Form GST-03 (Item 19). | +| | | The total GST amount of the respective MSIC Codes will be shown. | +| | | **Others** will be filled automatically if exceeding 5 MSIC codes. | +| | | Refer to list of [MSIC 2008](https://phl.hasil.gov.my/pdf/pdfam/NewBusinessCodes_MSIC2008_2.pdf). | + +#### PART D : DECLARATION + +| Item No. | Description | Guidelines | +|----------|-----------------------|---------------------------------------------------------| +| 20 | Name of Authorized Person* | **User name** from **Tools -> Maintain User...** | +| 21 | Identity Card No.* | **IC** (New) from **Tools -> Maintain User... (Misc tab)** | +| 22 | Passport No.* | **Passport** from **Tools -> Maintain User... (Misc tab)** | +| 23 | Nationality* | **Nationality** from **Tools -> Maintain User... (Misc tab)** | +| 24 | Date | Process Date | +| 25 | Signature | Sign on GST-03 print copy. | + +:::note Note: + +Column with (*) is a mandatory field. + +::: + +## Generate GST Audit File (GAF) + +To generate the GST Audit File (GAF) upon RMCD request. +Source from: [RMCD - GAF Guilde](https://mysst.customs.gov.my/assets/document/Specific%20Guides/Guide%20Customs%20Ruling%2002DIS2019_v4.pdf) + +### GST Audit File (GAF) + +GST Audit File (GAF) has break into 3 parts: + +1. General Ledger +2. Sales +3. Purchase + +![des-gst-audit-file-1](../../../static/img/usage/gst-and-sst/gst/gst-audit-file-1.jpg) + +### How to Export the GAF File + +1. Select the date range. + + ![des-gst-audit-file-how-to-export-1](../../../static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-1.jpg) + +2. Click on **APPLY**. + + ![des-gst-audit-file-how-to-export-2](../../../static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-2.jpg) + +3. Click on **Save As Text**. + + ![des-gst-audit-file-how-to-export-3](../../../static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-3.jpg) + +4. Select the destination directory to save the GAF file. See the below screenshot. + + ![des-gst-audit-file-how-to-export-4](../../../static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-4.jpg) + +5. File generated successfully. Press OK to exit the below message. + + ![des-gst-audit-file-how-to-export-5](../../../static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-5.jpg) + +## Print GST Bad Debt Relief + +A taxable person may claim bad debt relief subject to the requirements and conditions set forth under sec.58 of the GSTA 2014 and the person has not received any payment or part of the payment in respect of the taxable supply from the debtor after the sixth month from the date of supply. + +The bad debt relief may be claimed if - (amended on 28 Oct 2015 from DG Decision) +(a) requirements under s.58 GSTA and Part X of GST Regulations 2014 are fulfilled; and +(b) the supply is made by a GST registered person to another GST registered person + +The bad debt relief shall be claimed immediately in the taxable period after the expiry of the sixth month from the date of supply. If the bad debt relief is not claimed by the supplier in the immediate taxable period immediately after the expiry of the sixth month, then the taxable person has to notify the Director General (DG) within 30 days after the expiry of the sixth month on his intention to claim at a later date. + +A GST registered person who has made the input tax claim but fails to pay his supplier within six months from the date of supply shall account for output tax immediately after the expiry of the sixth month (s.38(9) GSTA). + +The word ‘month’ in sec.58 refers to calendar month or complete month – +Example: Invoice issued at 15 th January 2017. For monthly taxable period, the sixth month expires at the end of June and the bad debt relief shall be claimed in July taxable period. + +See below the overview of GST Bad Debt Relief system flow: + +![des-print-gst-bad-debt-relief-1](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-1.jpg) + +### Check List Related to Bad Debt Relief + +#### Maintain Tax (Bad Debt Relief) + +Below tax code will be AUTO used for Bad Debt Relief matter when process GST Return: + +| Tax Code | Description | Tax Acc Entry | Explanation | +|------------|-----------------------------------------------------------------------|-------------------------------------------------------------------------------|----------------------------------------| +| SL-AJP-BD | Input Tax adjustment e.g: Bad Debt Relief | DR GST-Claimable | For customer bad debt relief claim | +| | | CR GST-Sales Deferred Tax | | +| SL-AJS-BD | Output Tax adjustment e.g: Bad Debt Recover, outstanding invoice > 6 months | DR Sales Deferred Tax | For customer bad debt relief recovered | +| | | CR GST-Payable | | +| PH-AJP-BD | Input Tax adjustment e.g: Bad Debt Relief | DR GST-Claimable | For supplier bad debt relief recovered | +| | | CR GST-Purchase Deferred Tax | | +| PH-AJS-BD | Output Tax adjustment e.g: Bad Debt Recover, outstanding invoice > 6 months | DR GST-Purchase Deferred Tax | For supplier bad debt relief payable | +| | | CR GST-Payable | | + +#### Maintain Customer + +1. There is one condition to determine the bad debt relief can be claimed if - + + 1. **requirements under s.58 GSTA and Part X of GST Regulations 2014 are fulfilled**; and + 2. **the supply is made by a GST registered person to another GST registered person** + +2. Therefore, you need to update the GST No for your customer who is GST registered person. See the screenshot below. +3. Under the Tax tab in Maintain Customer, + + ![des-print-gst-bad-debt-relief-maintain-customer-1](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-maintain-customer-1.jpg) + +### Process GST Returns + +1. Process GST Return. For example, process from 01/10/2015 to 31/10/2015. +2. Bad Debt Relief screen will be prompted (see the screenshot below) if the system found there are outstanding Tax Invoices has expired at 6 months. +3. Sales documents from the company has empty GST No will be un-ticked. You can tick the documents if you think this company is a GST Registered person. + + ![des-print-gst-bad-debt-relief-process-gst-returns-1](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-1.jpg) + + :::note TIPS: + + ![des-print-gst-bad-debt-relief-process-gst-returns-note-1](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-note-1.jpg) + + To avoid to tick the documents manually for GST Registered company, please go to update the GST no at Maintain Customer. + + ::: + +4. Press OK if get a "confirm" message prompted (see the screenshot below), it means there are some company do not have GST No. +5. If you have confirmed that the company is Non-GST Registered person then you can press YES to proceed. +6. Otherwise press NO, you have to update the GST No at Maintain Customer to confirm the company is a GST Registered person before process the GST Return. + + ![des-print-gst-bad-debt-relief-process-gst-returns-2](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-2.jpg) + +### GST Listing (Bad Debt Relief) + +Category Others will appeared in GST Listing if there is found bad debt relief (eg. AJS-BD, AJP-BD): + +| Category | Description | Local Amount | Local Tax Amount | +|----------|-------------------------------------------------------------------------|--------------|------------------| +| AJS-BD | Output Tax adjustment e.g: Bad Debt Recover, outstanding invoice > 6 months | 17,000.00 | 1,020.00 | +| AJP-BD | Input Tax adjustment e.g: Bad Debt Relief | 9,114.57 | 546.87 | + +### GST - 03 (Bad Debt Relief) + +1. At GST Return screen, you can direct preview the GST-03 by click on the GST-03 button (see the screenshot below). + + ![des-print-gst-bad-debt-relief-gst03-1](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-gst03-1.jpg) + +2. GST-03 result from the above sample data: + + | GST-03 # | Description | Amount | + |----------|------------------------------------------------------------------------|----------| + | 5a | Total Value of Standard Rated Supply | 0.00 | + | 5b | Total Output Tax (Inclusive of Tax Value on Bad Debt Recovered & other Adjustments) | 1,020.00 | + | 6a | Total Value of Standard Rate and Flat Rate Acquisitions | 0.00 | + | 6b | Total Input Tax (Inclusive of Tax Value on Bad Debt Relief & other Adjustments) | 546.87 | + | 17 | Total Value of Bad Debt Relief Inclusive Tax | 9,661.44 | + | 18 | Total Value of Bad Debt Relief Recovered Inclusive Tax | 0.00 | + +### Print GST Bad Debt Relief Report + +1. This report is to help you to analyze the GST Bad Debt Relief happenings on each invoices. + + ![des-print-gst-bad-debt-relief-analyze-happenings-1](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-1.jpg) + +2. Let's say the IV-00109 has the following details:- + + | Seq | Description | Amount | Tax | Tax Amount | Amount with Tax | + |-----|-----------------------------|----------|-----|------------|-----------------| + | 1 | Sales of coconut can drinks | 1,000.00 | SR | 60.00 | 1,060.00 | + | 2 | Sales of coconut | 1,000.00 | ZRL | 0.00 | 1,000.00 | + +3. From the below report, it tells you that the bad debt relief claimed and to be recover at **Rm30.87** for IV-00109. You can found at the detail that the bad debt relief claimed at **Taxable Period 01 Oct 2015 to 31 Oct 2015**. + + ![des-print-gst-bad-debt-relief-analyze-happenings-2](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-2.jpg) + +4. After the IV-00109 has been full settlement in month Nov 2015, you will found the full tax paid **Rm60.00** and to be recover will be shown as 0. You can found at the detail that the bad debt relief recovered at **Taxable Period 01 Nov 2015 to 30 Nov 2015**. + + ![des-print-gst-bad-debt-relief-analyze-happenings-3](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-3.jpg) + +5. There are some option can choose to apply the GST Bad Debt Relief for further checking: + + #### Sales + + | Checkbox | Explanation | + |-----------------------------|-----------------------------------------------------------------------------| + | Bad Debt Relief Claimed | GST bad debt relief that you HAVE TICKED to claim on outstanding invoices when process your GST returns. | + | Bad Debt Relief Not Claim | GST bad debt relief that you DO NOT TICKED to claim on outstanding invoices when process your GST returns. | + | Bad Debt Relief Not Happen | Outstanding invoices the GST Amount not expired at 6 months GST bad debt relief. | + | Include Zero Outstanding | To include the outstanding invoices are zero. | + + #### Purchase + + | Checkbox | Explanation | + |----------------------------|-----------------------------------------------------------------------------| + | Bad Debt Relief Paid | GST bad debt relief have paid on the outstanding supplier invoices when process your GST returns. | + | Bad Debt Relief Not Pay | GST bad debt relief not pay yet on the outstanding supplier invoices. It could be due to late receive the supplier invoice. | + | Bad Debt Relief Not Happen | Outstanding invoices the GST Amount not expired at 6 months GST bad debt relief. | + | Include Zero Outstanding | To include the outstanding invoices are zero. | + +6. Click Preview button. You can found the following report list. + + | # | Report Name | Usage | + |----|--------------------------------------------|----------------------------------------------------------------------| + | 1 | GST Bad Debt Relief - Sales | GST Bad Debt Relief Listing with detail based on the checkbox ticked. | + | 2 | GST-BM Bad Debt Relief-Unclaimed Letter 1 | Bahasa Malaysia bad debt relief unclaimed letter format 1 to Director General | + | 3 | GST-BM Bad Debt Relief-Unclaimed Letter 2 | Bahasa Malaysia bad debt relief unclaimed letter format 2 to Director General | + | 4 | GST-EN Bad Debt Relief-Unclaimed Letter 1 | English version bad debt relief unclaimed letter format 1 to Director General | + | 5 | GST-EN Bad Debt Relief-Unclaimed Letter 2 | English version bad debt relief unclaimed letter format 2 to Director General | + + :::note TIPS 1 : To print the **bad debt relief unclaimed letter**. + + 1. Select the **Date Parameter** as **the GST effective date onwards**. + 2. Tick both **Bad Debt Relief Not Claim** and **Bad Debt Relief Not Happen** to apply follow by preview. + + ![des-print-gst-bad-debt-relief-relief-unclaimed-letter-1](../../../static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-relief-unclaimed-letter-1.jpg) + + 3. This letter applicable to customer has maintained **GST No** in Maintain Customer only. + + ::: + +## Migration System Features-How to handle the GST Past Documents Opening Balance for Customer and Supplier + +How to handle the GST Past Documents Opening Balance for Customer and Supplier? + +This guide will teach you the way to handle the past outstanding documents for Customer and Supplier from previous accounting system. We are ensure that the data migration part go smooth with GST matters happened in previous system likes bad debt relief and non-refundable deposit. + +**Overview of the GST Past Documents for Customer and Supplier:** +![des-overview-of-gst-past-documents-1](../../../static/img/usage/gst-and-sst/gst/overview-of-gst-past-documents-1.jpg) + +### How to enter GST Past Documents + +#### Financial Start Period and System Conversion Date + +1. Let's say the company GST reporting period is **Monthly**. Under the Tools | Options... set the following:- + **Financial Start Period** : 01 Jan 2016 + **System Conversion Date** : 01 Feb 2016 (Cut-off Date for Opening Entry) + + :::note NOTE: + + It is not recommended to set the System Conversion Date fall within the quarterly GST reporting period. + Let's say the company GST reporting period is Quarterly. + + GST effective date : 01 April 2015 + + You should set the System Conversion Date: 01 April 2016 or next quarter start date (ie. 01 July 2016). + ::: + +2. See below screenshot: + + ![des-how-to-enter-gst-past-documents-financial-start-and-system-conversion-1](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-financial-start-and-system-conversion-1.jpg) + +#### GST Effective Date (Bad Debt Relief) + +1. Let's assume the company is GST registered at 01 April 2015. +2. See below screenshot: + + ![des-how-to-enter-gst-past-documents-gst-effective-date-1](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-effective-date-1.jpg) + + :::note Important: + + It is very important to set the GST Effective Date where the GST commerce date started. + Bad debt relief will based on the GST Effective date. + + For example, **GST effective date set on 1 April 2015** and **system conversion date is 1 Jan 2016**. + Pass document dated in 15 July 2015 **(it is after the GST effective date)**. + Therefore, the Bad Debt Relief will be process in GST Returns-Jan 2016 automatically. + + ::: + +#### Enter the Past Documents (AR & AP) + +1. Create new customer/supplier invoice. +2. Enter the **Invoice No**. +3. Enter the **Original Invoice Date**. Date before the system conversion date, the document will converted to "Past Invoice" automatically. +4. Enter the **Outstanding Invoice Balance** into Total. +5. Save it. +6. See screenshots below. + + **Screenshot 1: Past Invoice:** + + ![des-how-to-enter-gst-past-documents-enter-past-documents-1](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-past-documents-1.jpg) + + **Screenshot 2: Past Payment:** + + ![des-how-to-enter-gst-past-documents-enter-past-documents-2](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-past-documents-2.jpg) + +7. Take note to the below table. + + | Action | Where to Enter? | + |---------------------------------------------------|---------------------------------------------------------------------------------| + | To enter the Customer Past Tax Invoice | a. Go to Customer / Customer Invoice... | + | | b. Refer the above step 1. | + | To enter the Supplier Past Tax Invoice | a. Go to Supplier / Supplier Invoice... | + | | b. Refer the above step 1. | + | To enter the Customer Past Non-Refundable Deposit (for SR, ZRL, ZRE) | a. Customer / Customer Payment... | + | | b. Refer the above step 1. | + | | c. Tick the Non-Refundable checkbox (for SR only). | + | | d. Un-tick the Non-Refundable checkbox (for ZRL & ZRE). | + +#### Enter the GST Taxable for Past Documents (AR & AP) + +1. Open the past tax invoice document. +2. **Press CTRL + ALT + G**.... You able to assign the tax code (SR / ZRL / ZRE / TX / IM...etc), the taxable amount (eg. Rm 1,000.00) and the tax amount (eg. Rm 60.00) for past document. + + :::note Note: + + Document must be saved before **press CTRL + ALT + G**. + + ::: + +3. Save it. +4. See screenshot below. + + **Screenshot 3: GST Taxable:** + + ![des-how-to-enter-gst-past-documents-enter-gst-taxable-past-documents-1](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-gst-taxable-past-documents-1.jpg) + +5. Take note to the below table. + + | Action | Where to Enter? | + |----------------------------------------------------|---------------------------------------------------------------------------------| + | To enter GST Taxable for the Customer Past Tax Invoice | a. Go to Customer / Customer Invoice... | + | | b. Refer the above step 1. | + | | c. Tax code commonly apply to this matter is SR / ZRL / ZRE / SL_AJP-BD (for bad debt relief claimed as input tax in old system). | + | To enter GST Taxable for the Supplier Past Tax Invoice | a. Go to Supplier / Supplier Invoice... | + | | b. Refer the above step 1. | + | | c. Tax code commonly apply to this matter is TX / IM / PH_AJS-BD (for bad debt relief paid as output tax in old system). | + | To enter GST Taxable for the Customer Past Non-Refundable Deposit | a. Go to Customer / Customer Payment... | + | | b. Refer the above step 1. | + | | c. Tax code commonly apply to this matter is SR. | + +#### Past Documents GST Taxable Listing + +1. Select the date range to apply. + + > *date from* (GST effective date) and *date to* (before the system conversion date). + +2. See screenshot below. + + Screenshot 4: GST Taxable Listing: + + ![des-how-to-enter-gst-past-documents-past-documents-gst-taxable-listing-1](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-past-documents-gst-taxable-listing-1.jpg) + +### GST Returns + +1. Select the date range. See screenshot below. + + 1. Monthly (eg. 01/02/2016 - 29/02/2016) + ![des-how-to-enter-gst-past-documents-gst-returns-1](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-1.jpg) + + 2. Quarterly (eg. 01/02/2016 - 30/04/2016) + ![des-how-to-enter-gst-past-documents-gst-returns-2](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-2.jpg) + +2. Click to **Process**. + +3. **Past GST transactions** will generated automatically after click **Process**. See below screenshot. + + ![des-how-to-enter-gst-past-documents-gst-returns-3](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-3.jpg) + + :::note Tips: + + To check the past GST listing, click on **GST Listing** button. + + ::: + +4. Current GST Returns will be processed at the same times. See below screenshot. + + ![des-how-to-enter-gst-past-documents-gst-returns-4](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-4.jpg) + +### Special Cases + +#### Case 1: Claim bad debt relief based on the outstanding in SQL Accounting + +1. Old System + 1. invoice + Invoice No: **IV-00001** + Invoice Date: **10 Aug 2015** + Invoice Doc Amount: **2,060.00** + Invoice Details: + + | Tax | Local Amount | Local Tax Amount | SubTotal | + |------|--------------|------------------|----------| + | SR | 1,000.00 | 60.00 | 1,060.00 | + | ZRL | 1,000.00 | 0.00 | 1,000.00 | + | **Total** | | | 2,060.00 | + + 2. Payment + OR Date: **20 Aug 2015** + Knock-Off Amount: **200.00** + + 3. Invoice Outstanding: **1,860.00** + +2. SQL Account + 1. Past Invoice: + Past Invoice No: **IV-00001** + Past Invoice Date: **10 Aug 2015** + Past Invoice Total: **1,860.00** + + :::note NOTE: + + User should key-in the total outstanding in the Past Invoice, eg. 2,060.00 - 200.00 = **1,860.00**. + + ::: + + See example of **past invoice** in below screenshot. + + ![des-how-to-enter-gst-past-documents-special-case1-1](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case1-1.jpg) + + 2. Past GST Taxable Detail: + + | Tax | Taxable Amount | Local Tax Amount | SubTotal | + |-----|----------------|------------------|----------| + | SR | 902.92 | 54.17 | 957.09 | + + OR + + | Tax | Taxable Amount | Local Tax Amount | SubTotal | + |------------------|----------------|------------------|----------| + | SR | 902.92 | 54.17 | 957.09 | + | ZRL | 902.91 | 0.00 | 902.91 | + | | | **Total Outstanding** | **1,860.00** | + + See example of **past GST taxable** in below screenshot. + + ![des-how-to-enter-gst-past-documents-special-case1-2](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case1-2.jpg) + +#### Case 2: Bad debt relief claimed and partial recover in Old System; partial or fully recover in SQL Account + +1. Old System + 1. Invoice: + + Invoice No: **IV-00002** + Invoice Date: **10 April 2015** + Invoice Doc Amount: **2,060.00** + Invoice Details: + + | Tax | Local Amount | Local Tax Amount | SubTotal | + |-------|--------------|------------------|----------| + | SR | 1,000.00 | 60.00 | 1,060.00 | + | ZRL | 1,000.00 | 0.00 | 1,000.00 | + | | |**Total** | **2,060.00** | + + 2. Payment #1: + + OR Date: **20 April 2015** + Knock-Off Amount: **200.00** + Bad Debt Relief detail from outstanding invoice: + + | Tax | Local Amount | Local Tax Amount | + |--------|--------------|------------------| + | AJP-BD | 902.92 | 54.17 | + + 3. Payment #2: + + OR Date: **01 Nov 2015** + Knock-Off Amount: **400.00** + Bad Debt Recover details: + + | Tax | Local Amount | Local Tax Amount | + |--------|--------------|------------------| + | AJS-BD | 194.18 | 11.65 | + + 4. Invoice Outstanding: 1,460.00 + +2. SQL Account + 1. Past Invoice: + + Past Invoice No: **IV-00002** + Past Invoice Date: **10 April 2015** + Past Invoice Total: **1,460.00** + + :::note Note: + + User should key-in the total outstanding in the Past Invoice, eg. 2,060.00 - 200.00 - 400.00= **1,460.00.** + + ::: + + See example of **past invoice** in below screenshot. + + ![des-how-to-enter-gst-past-documents-special-case2-1](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case2-1.jpg) + + 2. Past GST Taxable Detail: + + | Tax | Taxable Amount | Local Tax Amount | SubTotal | + |-----------|----------------|------------------|----------| + | SL-AJP-BD | 708.74 | 42.52 | 751.26 | + + :::note NOTE: + + User no need to key-in the payment #1 and payment #2 in SQL Account. + Outstanding Taxable amount = 902.92 (Payment #1) - 194.18 (Payment #2) = **708.74** + Bad debt relief not recover = 54.17 (Payment #1) - 11.65 (Payment #2) = **42.52** + **Any current payment knock-off to the above invoice will automatically treat as bad debt recover in next taxable period**. + + ::: + + See example of **past GST taxable** in below screenshot. + + ![des-how-to-enter-gst-past-documents-special-case2-2](../../../static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case2-2.jpg) + +## GST - Payment to RMCD + +1. Net GST Payable is the total GST amount to be paid to RMCD. +2. Net GST Claimable is the total GST amount to be claimed or refund from RMCD. + +### Payment to RMCD + +1. Click on the **New** followed by selecting **Payment Voucher**. +2. Enter the **ROYAL MALAYSIA CUSTOMS DIRAJA' into** Pay To field. +3. At the detail, select GL Code: **GST-KASTAM**. +4. Enter the description to describe the GST Payable for the period, eg. **GST Payable - Jan 2016**. +5. Based on the GST Returns, enter the GST amount payable **(Rm836.04)** into the **Amount** column. + + ![des-gst-payment-to-rmcd-1](../../../static/img/usage/gst-and-sst/gst/gst-payment-to-rmcd-1.jpg) + +6. Save it. See the screenshot below. + + ![des-gst-payment-to-rmcd-2](../../../static/img/usage/gst-and-sst/gst/gst-payment-to-rmcd-2.jpg) + +### Refund From RMCD + +1. Click on the **New** follow by select **Official Receipt**. +2. Enter the **ROYAL MALAYSIA CUSTOMS DIRAJA' into** Received From field. +3. At the detail, select GL Code: **GST-KASTAM**. +4. Enter the description to describe the GST Claimable for the period, eg. **GST Claimable - Feb 2016**. +5. Based on the GST Returns, enter the GST amount claimable **(Rm2,402.04)** into the **Amount** column. + + ![des-gst-refund-from-rmcd-1](../../../static/img/usage/gst-and-sst/gst/gst-refund-from-rmcd-1.jpg) + +6. Save it. See the screenshot below. + + ![des-gst-refund-from-rmcd-2](../../../static/img/usage/gst-and-sst/gst/gst-refund-from-rmcd-2.jpg) + +### GST - Kastam Account Inquiry + +1. Select the date range. +2. Select the GL Account code : **GST-KASTAM**. +3. Click **Apply**. +4. RMCD outstanding transactions will be display as below. + + ![des-gst-kastam-account-inquiry-1](../../../static/img/usage/gst-and-sst/gst/gst-kastam-account-inquiry-1.jpg) + +## GST - GST-03 Amendment + +For those company who might asked and self report to RMCD for the GST-03 amendment. It could be because of applying wrong tax code or others reasons. +Therefore, this guide will explain the features to perform amendment on the particular GST-03 and re-submit via TAP website. + +### Notification On GST 03 Return Amendment + +In accordance with **Regulation 69 of the GST Regulation 2014**, with **effect from 23 August 2016**, rules on return amendments are follows: + + 1. There is **no limit** on return amendments until due date of submission of return. + 2. Amendment are allowed once within 30 days **(for monthly taxable period)** or 90 days **(for quarterly taxable period)** after last day of submission of return. Subsequent amendment are subject to approval by GST Officer. + 3. Amendment after the period stated in PARA 2 above are subject to approval by GST Officer. + 4. Amendment can be made through TAP but are subject to approval by GST Officer. + 5. Return amendments which are not approved by GST Officer is considered invalid and previous return made before the amendment will be accepted. + +### GST - 03 Amendment + +1. Highlight and right click on the GST-03 that you are required to resubmit as **amendment**. + + ![des-gst03-amendment-step-1](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-1.jpg) + +2. Select **Unlock**. + + ![des-gst03-amendment-step-2](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-2.jpg) + +3. Click on **No** to unlock this GST Return. + + ![des-gst03-amendment-step-3](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-3.jpg) + + :::note Important: + + Read the message before take further actions. + + ::: + +4. Enter the ADMIN password. + + ![des-gst03-amendment-step-4](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-4.jpg) + + :::note NOTE: + + ADMIN password only + + ::: + +5. Status will added **Unlock** icon. It means users are allow to amend the documents for the month unlock, eg. the documents are able to amend in Oct 2015 only. + + ![des-gst03-amendment-step-5](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-5.jpg) + + :::note NOTE: + + 1. The month and all the subsequent month of GST-03 will converted to "Recalculate" action. It is depends on the amendment which might trigger the bad debt relief result changed. + 2. All the subsequent month of GST-03 are not allow to amend the documents (eg. invoice, credit note, supplied invoice, etc), unless you have **Unlock** it. + + ::: + +6. For example, to correct the tax code from ZRL to SR for the invoice amount Rm2,500.00. + + 1. Edit the invoice (eg. IV-00014 and date: 02 Oct 2015) + + ![des-gst03-amendment-step-6](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-6.jpg) + + ::: NOTE: + + **Unlock** GST-03 is allow you to edit the documents only. + + ::: + + 2. Change the tax code from **ZRL** to **SR**. + 3. It will will resulting the **output tax increased by Rm150.00** (Rm2,500.00 X 6%). + + ![des-gst03-amendment-step-7](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-7.jpg) + +7. Run **Recalculate** for the GST-03 (eg. Oct 2015) +8. System will prompt **Recalculate successfully**. + + ![des-gst03-amendment-step-8](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-8.jpg) + +9. Press ok to proceed and a draft copy of GST-03 for Oct 2015 will create automatically. A previous GST-03 before perform any amendment to the taxable period will converted as **DRAFT** status. + + ![des-gst03-amendment-step-9](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-9.jpg) + +10. You can see the comparison in between **the draft (from Recalculate)** and **the Final GST-03** for the amendment taxable period. + + ![des-gst03-amendment-step-10](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-step-10.jpg) + + | Status | Taxable Period | Total Output Tax | Total Input Tax | + |------------------------|--------------------|------------------|-----------------| + | | 01 Oct - 31 Oct 2015 | 422,415.73 | 474,787.86 | + | Draft | 01 Oct - 31 Oct 2015 | 422,265.73 | 474,787.86 | + | | Increase/Decrease (-) | 150.00 | 0.00 | + +### How to know the GST - 03 has performed amendment + +1. You can find a **cross marked (X)** on the amendment column in the GST-03. See the screenshot below. + + ![des-gst03-amendment-know-gst03-has-performed-amendment-1](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-know-gst03-has-performed-amendment-1.jpg) + +2. At the GST Returns, insert a grid column **Amendment**. Usually, you will found **the ticked on the amendment column** for both DRAFT and final GST-03. + + ![des-gst03-amendment-know-gst03-has-performed-amendment-2](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-know-gst03-has-performed-amendment-2.jpg) + +### How to unlock the subsequent GST - 03 for amendment + +1. Highlight on the subsequent GST-03, eg. for subsequent taxable period is 01 Nov - 30 Nov 2015. +2. Right and **unlock** it. + + ![des-gst03-amendment-unlock-gst03-for-amendment-1](../../../static/img/usage/gst-and-sst/gst/gst03-amendment-unlock-gst03-for-amendment-1.jpg) + +## How to Avoid Costly GST Errors + +This guide will help you to easily identify the common GST errors in GST Returns. To minimize GST amendment and incorrect GST Returns to RMCD. +You may wish to take note the follow errors commonly made by businesses: + +1. Standard Rated Supply (5a) and Output Tax (5b) +2. Standard Rate and Flat Rate Acquisitions (6a), and Input Tax (6b) +3. Local Zero-Rated Supplies +4. Export Supplies +5. Exempt Supplies +6. Supplies Granted GST Relief +7. Goods Imported Under Approved Trader Scheme and GST Suspended +8. Capital Goods Acquired +9. Bad Debt Relief +10. Bad Debt Recovered +11. Output tax value breakdown into Major Industries Code (MSIC Code) +12. Other important info required in GAF +13. GL Ledger vs GST-03 +14. Foreign currency exchange rate + +### Standard Rate Supply (5a) and Output Tax (5b) + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|--------------------------------------------------------------------------|------------| +| 5a | Total Value of Standard Rated Supply | **SR, DS** | +| 5b | Total Output Tax (Inclusive of Tax Value on Bad Debt Recovered & others adjustments) | **SR, DS, AJS** | + +1. Sale or disposal of business assets +2. Goods given free as gift. +3. Inter-company transactions +4. Margin Scheme + +### Standard Rate and Flat Rate Acquisitions (6a), and Input Tax (6b) + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|-------------------------------------------------------------------------|----------------------------------------------------------------------------------------------| +| 6a | Standard Rate and Flat Rate Acquisitions | **TX, TX-CG, TX-ES** (DMR is fulfilled only), **TX-IES** (Total/Full amount), **TX-RE, IM** | +| 6b | Total Input Tax (Inclusive of Tax Value on Bad Debt Relief & other Adjustments) | **TX, TX-CG, TX-ES** (DMR is fulfilled only), **TX-IES** (GST Claimable only based on IRR), **TX-RE, IM, AJP** | + +Not all input tax claims are allowable. You can claim input tax on your purchases only if the below conditions are fulfilled. + +1. Tax invoice / Simplified Tax Invoice / Custom K1 / Custom K9 + 1. The buyer can use **simplified tax invoice** if the **total amount GST payable is RM30 or less**. + 2. if the **total amount of GST payable is more than RM30**, the buyer must request for a **tax invoice** with the name and address of the buyer. + 3. Tax invoice issued by approved person for Flat Rate Scheme. + 4. **K1** form for imported goods + 5. **K1** and **K9** for goods removed from bonded warehouse + +2. Supplies made outside Malaysia which would be taxable supplies if **made in Malaysia**. +3. To be eligible for input tax claim relating to goods that are exported, a registered person (exporter) must ensure that:- + 1. prescribed customs form for export (K2 / K8) must have an endorsement on Remarks column in **Sistem Maklumat Kastam (SMK)** – “A claim for input tax under the GST Act 2014 will be made”; and + 2. Customs Official Receipt. + +4. **Disregarded supplies** (supplies within group, supplies made in warehouse, supplies between venture operator and venturers and supplies between toll manufacturer and overseas principal). +5. Directly attributable to taxable supplies (ie. standard rated supplies and zero rated supplies). +6. Must not be disallowed expenses (or known as **Blocked Input Tax**). + 1. Passenger motor cars (**not more than 9 passengers** including driver and unladen weight does not exceed 3,000 kg) including hiring of car + 2. Repair and maintenance for motor cars + 3. Family benefits + 4. Club subscription fee + 5. Medical and personal accident insurance + 6. Medical expenses + 7. Entertainment expenses for potential customer or others than employees. + +7. Must be taxable purchases (ie. purchases made from GST registered suppliers) + +### Local Zero - Rated Supplies + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|-------------------------------------|------------| +| 10 | Total Value of Local Zero-Rated Supplies | **ZRL, ZDA** | + +This refer to the following types according to **GST (Zero Rate Supplies) Order 2014**:- + +1. Local supply of goods and services (**ZRL**): + + 1. Zero-rated supply of goods of any of the descriptions as in Appendix (Zero-rated Supply) Order 2014 based on tariff code in such as milled-rice, fresh fruit, and live animals (cattle, buffalo, goat, sheep and swine), + 2. Medicaments and medical gases in the National Essential Medicines List issued by the Ministry of Health and approved by the Minister and put up in measured doses or in forms of packaging for retail sale, + 3. The supply of treated water by a person who is licensed under the Water Services Industry Act 2006 [Act 655] to domestic consumers irrespective of minimum or non-usage, + 4. The supply of raw materials and components made to a person who belongs in a country other than Malaysia for the treatment and processing of goods by any taxable person under the Approved Toll Manufacturer Scheme, and etc. + +2. Supply of goods from Malaysia to Designated Area, ie. Pulau Langkawi, Labuan, & Pulau Tioman (**ZDA**) + +### Export Supplies + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|------------------------------|----------| +| 11 | Total Value of Export Supplies | **ZRE** | + +This refer to the Supply of goods or services **from Malaysia to Oversea** according to **GST (Zero Rate Supplies) Order 2014**. + +1. Movement of goods is supported with **Customs K2** form which must stated the following:- + a. Supplier's name and address as the consignor. + b. Recipient's name and address in overseas recipient as the consignee. + c. Supply of services must attached with supporting documents such as invoice for an international services. Examples includes sales of air-tickets and international freight charges. + +**How to check the transactions correctly entered?** + +At the invoice entry, please ensure the following screenshot and steps are followed/entered correctly:- + +![des-avoid-gst-cost-check-transactions-entered-correct-1](../../../static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-1.jpg) + +1. **Customer name** and **address** must be a **foreigner company**. +2. **Country** to define the destination of goods deliver. +3. **Permit No** to record the **Custom K2** no for supporting document reference. +4. Tax code must be **ZRE**. + +### Exempted Supplies + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|-----------------------------|-----------| +| 12 | Total Value of Exempt Supplies | **ES, IES** | + +This refer to the following types according to **GST (Exempt Supplies) Order 2014:-** + +1. **Services (ES):-** + 1. Private education + 2. Private health services + 3. Childcare services + 4. Domestic transportation of passengers for mass Public Transports (eg. by rail, ship, boat, ferry, express bus, stage bus, school bus, feeder bus, workers bus and taxi) + 5. Toll highway + +2. **Financial Services (IES):-** + 1. Interest income from deposits placed with a financial institution in Malaysia + 2. Interest received from loans provided to employees (factoring receivables) + 3. [Realized foreign exchange gains](../../usage/gst-and-sst/gst#gst-03-item-12-es--ies--how-to-compare-the-total-value-of-exempt-supplies-between-gst-03-and-ledger) + +3. **Goods (ES):-** + 1. Residential properties + 2. Land for agricultural use + 3. Land for general user (ie. burial ground, playground or religious building) + +#### How to check the transactions correctly entered? + +***A. GST Listing*** + +1. After GST Return processed, go to **Print GST Listing....** + + ![des-avoid-gst-cost-check-transactions-entered-correct-gst-listing-1](../../../static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst-listing-1.jpg) + +2. Preview and select the report name **GST Detail 2**. +3. To ensure the **document detail descriptions** are clearly stated and map to the correct tax code. + + ![des-avoid-gst-cost-check-transactions-entered-correct-gst-listing-2](../../../static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst-listing-2.jpg) + +***B. GST-03*** + +1. To quick do amendment before submit the GST-03 to RMCD. [Click this link](../../usage/gst-and-sst/gst#gst---gst-03-amendment) to learn more about the **GST amendment**. +2. Double click on the item 12 in GST-03. + + ![des-avoid-gst-cost-check-transactions-entered-correct-gst03-1](../../../static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst03-1.jpg) + +3. Drill down the documents to open and correct it accordingly. +4. Lastly, you have to **Recalculate** the amended GST Return. + +### Supplies Grant GST Relief + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|------------------------------------------|----------| +| 13 | Total Value of Supplies Granted GST Relief | **RS** | + +### Goods Imported Under Approved Trader Scheme and GST Suspended + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|---------------------------------------------------------|--------------| +| 14 | Total Value of Goods Imported Under Approved Trader Scheme | **IS** | +| 15 | Total Value of GST Suspended under item 14 | **IS** x Tax Rate | + +### Capital Goods Acquired (Avoid Costly GST Error) + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|------------------------------------|--------------------------------------------------| +| 16 | Total Value of Capital Goods Acquired | **TX-CG, TX, IM** (Transaction GL Account related to **Fixed Asset**) | + +### Bad Debt Relief + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|--------------------------------------------|---------------| +| 17 | Total Value of Bad Debt Relief Inclusive Tax | **AJP (AR only)** | + +### Bad Debt Recovered + +**Mapping of GST Tax Code:** + +| GST-03 | Description | Tax Code | +|--------|---------------------------------------------|---------------| +| 18 | Total Value of Bad Debt Recovered Inclusive Tax | **AJS (AR only)** | + +### Output tax value breakdown into Major Industries Code (MSIC Code) + +1. This part usually require you to breakdown the total output tax reported in 5b according to your **main business**. +2. You have to map to [MSIC code](https://sites.google.com/site/sqlestream/sql-financial-accounting/9-good-and-service-tax-gst---malaysia/9-23-major-industries-code-msic). + +**Where to set the MSIC Code?** + +1. Select and edit your main business supplies GL Account, eg. my main business is selling hand-phones. +2. Select an appropriate **Industries Code**. +3. You can change the search pattern to **-A-**. See screenshot below. So you can type-in the keywords, eg. Phone. + + ![des-bad-debt-recovered-where-set-msic-code-1](../../../static/img/usage/gst-and-sst/gst/bad-debt-recovered-where-set-msic-code-1.jpg) + +### Other important info required in GAF + +The GST Audit file is a way for taxpayers to submit information relevant to auditors in response to an audit request on information for auditing purposes. The information provided includes company identifications, names, supply & purchases, and general ledger transactions. There is also a footer record to ensure file integrity. + +Record types are:- + +| Record Type | Description | Where it update??? | +|-------------|-------------|-------------------| +| C | Company | Company Profile | +| P | Purchase | Supplier Invoice (PI), Supplier Debit Note (SD), Supplier Credit Note (SC), Cash Book (PV), and Journal (JE) | +| S | Supply | Customer Invoice (IV), Customer Debit Note (DN), Customer Credit Note (CN), Cash Book (OR), Gift/Deemed Supply (GI), and Journal (JE) | +| L | Ledger | From the GL Ledger reports | +| F | Footer | GAF file integrity check | + +### GL Ledger VS GST - 03 + +1. **GST-Ledger-Vs-GST-03** is a very useful report to identify the unrealized human errors immediately. Possible errors may be due to documents had selected:- + + 1. Wrong tax code or category + 2. Wrong account code + 3. Use Tax Date which is different from Document Date + 4. 5 Cents rounding had selected Tax Code. + +2. It comprises of 2 reports:- + + | Report Name | GL Acc | Explanation | + |--------------------------|------------------------|-------------------------------------------------------------------------| + | 1. GST-Ledger-Vs-GST-03_5b | GST-201 (GST - Payable) | To reconcile the GST Payable account between the GL Ledger and GST-03 | + | 2. GST-Ledger-Vs-GST-03_6b | GST-101 (GST - Claimable) | To reconcile the GST Claimable account between the GL Ledger and GST-03 | + +3. For example, + + Supplier invoice date (15 Sept 2016) received in Oct 2016 and GST-03 Sept 2016 has submitted. Input tax will be claim in Oct 2016 by set the tax date (31 Oct 2016). In GL Ledger, the input tax will be posted in Sept 2016. However, this input tax will be appear in GT-03 Oct 2016. + With this **GST-Ledger-Vs-GST-03** report, you can very easy identify out the reasons. See the screenshot below. + + ![des-gl-ledger-vs-gst03-1](../../../static/img/usage/gst-and-sst/gst/gl-ledger-vs-gst03-1.jpg) + +### Foreign Currency Exchange Rate + +1. Always update the currency exchange rate at Tools | [Maintain Currency](../../usage/tools/guide#maintain-currency). +2. Critical cost on output tax if bill in foreign currency to local customer: + +| Currency | Status | Exchange Rate | Amount | Local Amount | Output Tax | +|----------|-----------|---------------|---------|--------------|------------| +| USD | Outdated | 3.8000 | 1,000.00 | 3,800.00 | 228.00 | +| USD | Actual | 4.3000 | 1,000.00 | 4,300.00 | 258.00 | +| | | | | **Under declared** | -30.00 | + +## Adjustment to negative value in GST-03 + +1. Negative value in 5a5b and 6a6b. +2. TAP system not accept negative value. + +![des-adjustment-to-negative-value-in-gst03-1](../../../static/img/usage/gst-and-sst/gst/adjustment-to-negative-value-in-gst03-1.png) + +### Negative in 5a5b + +1. **Output Tax (Negative)** + + | GST-03 | Value | + |--------|--------| + | 5a | -2,000 | + | 5b | -120 | + +2. **Journal Adjustment:** + + | GL Code | Tax | Tax Rate | Local DR | Local CR | Local DR(Tax) | Local CR(Tax) | GST-03 | + |----------|--------|----------|----------|----------|---------------|---------------|--------------| + | GST-103 | **AJP-OA** | 6% | 2,000 | | 2,120 | | **6a = 0, 6b = 120** | + | GST-103 | **SR** | 6% | | 2,000 | | 2,120 | **5a = 0, 5b = 0** | + + ![des-adjustment-to-negative-value-in-gst03-negative-in-5a5b-1](../../../static/img/usage/gst-and-sst/gst/adjustment-to-negative-value-in-gst03-negative-in-5a5b-1.jpg) + +### Negative in 6a6b + +1. **Input Tax (Negative)** + + | Items | Value | + |-------|--------| + | 6a | -1,000 | + | 6b | -60 | + +2. **Journal Adjustment:** + + | GL Code | Tax | Tax Rate | Local DR | Local CR | Local DR(Tax) | Local CR(Tax) | GST-03 | + |----------|--------|----------|----------|----------|---------------|---------------|--------------| + | GST-103 | **TX** | **6%** | 1,000 | | 1,060 | | **6a = 0, 6b = 0** | + | GST-103 | **AJS-OA** | **6%** | | 1,000 | | 1,060 | **5a = 0, 5b = 60** | + +## GST-Submission of Final GST Return + +Pursuant to Section 6, **Goods and Service Tax (Repeal) Act 2018**, all GST Registrants are required to submit the GST-03 Return on the final taxable period **(ie. 31 Aug 2018)** and make full payment for the amount of tax payable in connection with the supply **for the last taxable period within 120 days (29 December 2018)** from 01 Sept 2018. + +- Any input tax claimable from the purchase/supplier invoice received after 1 Sept 2018. It can be claim and must submit into the **Final GST Returns (31 Aug 2018)**. +- Input tax claim will be subjected to verification and audit. +- Refund will be made within 6 years. + +![des-gst-submission-of-final-gst-return-1](../../../static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-1.jpg) + +### How to enter the input tax 6% claimable from Purchase / Supplier invoice after 1st September 2018 + +For example, on **13 SEPT 2018**, my company has received a supplier tax invoice dated **07 MAY 2018** and amount inclusive GST is **RM10,600**. + +![des-gst-submission-of-final-gst-return-enter-6-percent-claimable-1](../../../static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-6-percent-claimable-1.jpg) + +#### Enter at Purchase Invoice + +![des-gst-submission-of-final-gst-return-enter-at-purchase-invoice-1](../../../static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-purchase-invoice-1.jpg) + +1. Set **Date**.... to record the original invoice date (eg. **07 MAY 2018**). +2. Set **Posting Date**... to post this transaction into GL reporting as at **13 SEP 2018**. + + :::note Note: + + To enable to set Posting Date, the **Double Document Module** is required. + + ::: + +3. Set **Tax Date**...to declare this GST input tax into **Final GST Returns (31 AUG 2018)**. + + ![des-gst-submission-of-final-gst-return-enter-at-purchase-invoice-2](../../../static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-purchase-invoice-2.jpg) + +#### Enter at Supplier Invoice + +![des-gst-submission-of-final-gst-return-enter-at-supplier-invoice-1](../../../static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-supplier-invoice-1.jpg) + +1. Set **Date**.... to record the original invoice date (eg. **07 MAY 2018**). +2. Set **Posting Date**... to post this transaction into GL reporting as **13 SEP 2018**. + + :::note Note: + + To enable to set Posting Date, the **Double Document Module** is required. + + ::: + +3. Set **Tax Date**...to declare this GST input tax into **Final GST Returns (31 AUG 2018)**. + + ![des-gst-submission-of-final-gst-return-enter-at-supplier-invoice-2](../../../static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-supplier-invoice-2.jpg) + +#### Enter at Cash Book (PV) + +![des-gst-submission-of-final-gst-return-enter-at-cashbook-1](../../../static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-cashbook-1.jpg) + +1. Set **Date**.... to record the original invoice date (eg. **07 MAY 2018**). +2. Set **Posting Date**... to post this transaction into GL reporting as at **13 SEP 2018**. +3. Set **Tax Date**...to declare this GST input tax into **Final GST Returns (31 AUG 2018)**. + + ![des-gst-submission-of-final-gst-return-enter-at-cashbook-2](../../../static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-cashbook-2.jpg) + +### Final GST Returns + +Process GST Returns up to **31 AUG 2018**. + +| Items | Value | +|-------|---------| +| 6a | 10,000 | +| 6b | 600 | + + :::note NOTE: + + 1. Final GST Returns until **31 AUG 2018**. + 2. Last date of submission for the **Final GST Returns is 29 DEC 2018** + + ::: + +## Transitional (from GST to SST) + +### Bad Debt Relief / Recovered + +1. GST registered person is eligible to claim the bad debt relief even if it spans on or after 1 September 2018. +2. Bad Debt Relief is allowed to be claimed within 120 days from the SST effective date (eg. 1 September 2018). +3. Bad Debt Recovery made on or after 1 September 2018 must to be paid as output tax to RMCD within 120 days from the SST effective date by amending the Final GST Return. + +![des-transitional-bad-debt-relief-1](../../../static/img/usage/gst-and-sst/gst/transitional-bad-debt-relief-1.jpg) + +#### Final GST Return Processor + +![des-transitional-final-gst-return-processor-1](../../../static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-1.jpg) + +1. System will AUTO define the last taxable period **(A)**, eg... + + | Process From | Process To | + |--------------|------------| + | 01/07/2018 | 31/08/2018 | + +2. Set the Process Date **(B)** as the date submit the Final GST return before 29 December 2018 (within 120 days from the SST effective date). + + 1. For example, + + ![des-transitional-final-gst-return-processor-2](../../../static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-2.jpg) + + 2. Double entry for **Cases 1**. + + ![des-transitional-final-gst-return-processor-3](../../../static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-3.jpg) + + 3. Double entry for **Cases 2**. + + ![des-transitional-final-gst-return-processor-4](../../../static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-4.jpg) + +## GST Sales/Purchase Deferred Tax Journal Adjustment + +1. Double entry adjustment for the balance of GST Sales / Purchase Deferred Tax (Bad Debt Relief) AFTER 29 December 2018. +2. Add the adjustment amount into Final GST Return (amendment). + + ![des-sales-purchase-deferred-tax-journal-adjustment-1](../../../static/img/usage/gst-and-sst/gst/sales-purchase-deferred-tax-journal-adjustment-1.jpg) + +### How to check the Sales / Purchase Bad Debt Recovered Amount after Final GST Returns + +1. Select a date **AFTER** the Final GST Return Date, eg. 28/02/2019. + + ![des-check-bad-debt-relief-after-final-gst-returns-1](../../../static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-1.jpg) + +2. Choose **Process As Draft**. + + ![des-check-bad-debt-relief-after-final-gst-returns-2](../../../static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-2.jpg) + +3. Click on **GST Return Draft** and **print GST Listing**. +4. Filter the **Tax Date** (ie. greater than or equal to 30 December 2018). + + ![des-check-bad-debt-relief-after-final-gst-returns-3](../../../static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-3.jpg) + + > **SL-AJS-BD** : Sales Bad Debt Recovered (Output Tax). + > **PH-AJP-BD** : Purchase Bad Debt Recovered (Input Tax). + +### Adjustment for GST Sales Deferred Tax (SL-AJS-BD) + +![des-adjustment-for-gst-sales-deferred-tax-1](../../../static/img/usage/gst-and-sst/gst/adjustment-for-gst-sales-deferred-tax-1.jpg) + +1. Based on the **GST Listing (Draft)**, post the GST Bad Debt Recovered double entry using **Journal Entry**. + + | GL Code | GL Description | Local DR | Local CR | Add to Final GST-03 | + |------------|---------------------------|----------|----------|----------------------| + | GST-202 | GST - Sales Deferred Tax | 3,600 | | | + | GST-KASTAM | GST - Payable (KASTAM) | | 3,600 | 5(b), 18 | + +2. Amend the Final GST Return (Aug 2018) at TAP. +3. Add the amount into + a. 5(b) + b. 18 + +### Adjustment for GST Purchase Deferred Tax (PH-AJP-BD) + +![des-adjustment-for-gst-purchase-deferred-tax-1](../../../static/img/usage/gst-and-sst/gst/adjustment-for-gst-purchase-deferred-tax-1.jpg) + +1. Based on the **GST Listing (Draft)**, post the GST Bad Debt Recovered double entry using **Journal Entry**. + + | GL Code | GL Description | Local DR | Local CR | Add to Final GST-03 | + |-------------|-----------------------------|----------|----------|----------------------| + | GST-KASTAM | GST - Payable (KASTAM) | 600 | | 6(b) | + | GST-102 | GST - Purchase Deferred Tax | | 600 | | + +2. Amend the Final GST Return (Aug 2018) at TAP. +3. Add the amount into + a. 6(b) + +### Payment to RMCD (Tax Journal Adjustment) + +Made payment to RMCD, use **Cash Book Entry (PV)**. + +| GL Code | GL Description | Local DR | Local CR | +|------------|---------------------------------------|----------|----------| +| GST-KASTAM | GST - Payable (KASTAM) - Net Balance | 3,000 | | +| BANK | Bank Name | | 3,000 | + +## GST Special Treatment + +## GST Margin Scheme + +How To Start the New Margin Scheme with Special Database? + +GST is normally due on the full value of goods sold. The margin scheme allows a GST Margin Scheme registered person (GST MS registered person) who meets all the conditions to calculate and charge GST on the margin i.e. the difference between the price at which the goods were obtained and the selling price. If no margin is made (because the purchase price exceeds the selling price) then no GST is charged and payable. + +For the purpose of GST, margin under this scheme means the difference between selling price and purchase price. If there is any value being added to the eligible goods such as cost for repairing, this cost is part of the margin other than profit. In other words, the value added must be included in the selling price and not the purchase price. + +Therefore, we have designed a database structure specially for business which has margin scheme involvement. + +### Modules Require + +1. SQL Accounting Basic (GST compliance) +2. DIY field +3. DIY script +4. Project (use to record Car Plate number) + +See below the overview of Margin Scheme process flow: + +![des-gst-special-treatment-modules-required-1](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-modules-required-1.jpg) + +### Setup Margin Scheme Database + +Last Customization Update : **13 Sep 2016** + +1. Get the NEW database structure for Margin Scheme (in backup format) from this link [NEW COMPANY (For Margin Scheme)](http://www.sql.com.my/document/NEW%20COMPANY%20(For%20Margin%20Scheme)%20-%20%5bGST-MS.09.11.2016%5d%20-%202016-11-10%20-%20sqlacc.zip) +2. Restore this backup. +3. Enter the user ID and password with “ADMIN” to login. + +#### History New/Updates/Changes + +***Last Customization Update : 27 Nov 2015*** + +- Move Cars Information to Maintain Project +- Auto Capture Initial Cost on Select Project + +***Last Customization Update : 20 Feb 2016*** + +- Empty item code (eg. repairs) will not update the Project - Purchase Details. +- Run the **SQL Accounting Diagnosis - DB Patch** and apply the patch files can be download from [Patch-Margin Scheme-20160220.zip](http://www.sql.com.my/downloadfile/Fairy/Patch-MarginScheme-20160220.zip) + + 1. Select the database file (eg.ACC-XXXXX.FDB). + 2. Drag the patch filename **Patch-MarginScheme1**. + 3. Click **Execute**. + 4. Repeat step 2 - 3 and apply with another patch filename **Patch-MarginScheme-02-20160220**. + +***Last Customization Update : 08 Mar 2016*** + +- Tax amount not equal to zero. Will prompt message "Cost will be tax excluded for GST Margin purpose" after save the purchase invoice. +- Run the **SQL Accounting Diagnosis - DB Patch** and apply the patch files can be download from [Patch-MarginScheme-20160308.zip](http://www.sql.com.my/document/Patch-MarginScheme-20160308.zip) + + 1. Select the database file (eg.ACC-XXXXX.FDB). + 2. Unzip the patch file downloaded. + 3. Drag the patch filename **DELETE_PHPI_OnAfterSave_08.03.2016**. + 4. Click **Execute**. + 5. Repeat step 2 - 4 and apply with another patch filename **UPDATE_PHPI_OnAfterSave_08.03.2016**. + +***Last Customization Update : 08 Aug 2016*** + +- To remove the compulsory action to select project code other than **Default Project (----)**. +- Run the **SQL Accounting Diagnosis - DB Patch** and apply the patch files can be download from [This Link here](http://www.sql.com.my/document/Patch-MarginScheme-20160808.zip) + + 1. Select the database file (eg.ACC-XXXXX.FDB). + 2. Unzip the patch file downloaded. + 3. Drag the patch filename **DELETE_SLIV_OnBeforerSave_2016.08.08**. + 4. Click **Execute**. + +***Last Customization Update : 13 Sep 2016*** + +- Margin Scheme options added in Maintain Project. It is allowed to determine the car sold using GST margin scheme or GST standard calculation. +- Run the **SQL Accounting Diagnosis - DB Patch** and apply the patch files can be download from [This Link here](http://www.sql.com.my/document/Patch-MarginScheme-20160913.zip) + + 1. Select the database file (eg.ACC-XXXXX.FDB). + 2. Unzip the patch file downloaded. + 3. Drag the patch filename **DELETE_SLIV_OnGridColValChg_2016.09.13**. + 4. Click **Execute**. + 5. Repeat step 2 - 4 and apply with another patch filename **INSERT_SLIV_OnGridColValChg_2016.09.13**. + +- Add new field name **MS** in Maintain Project. + + 1. Go to Tools | DIY | SQL Control Center... + 2. Browse to Business Objects | Miscellaneous | **Project** | Project Fields + + ![des-gst-special-treatment-history-1](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history-1.jpg) + + 3. Add new field name **MS** and the Data Type, Size, Sub Size, Caption, etc must follow the screenshot below. Click to Save button. + + ![des-gst-special-treatment-history-2](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history-2.jpg) + + 4. Next, click on the existing **Margin Scheme** form. See the screenshot below. + + ![des-gst-special-treatment-history-3](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history-3.jpg) + + 5. Click on **Customize** button. + + ![des-gst-special-treatment-history-4](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history-4.jpg) + + 6. Drag the **Margin Scheme** from Available Item list and drop under Purchase Details. See screenshot below. + + ![des-gst-special-treatment-history-5](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history-5.jpg) + + 7. Lastly, click to Save button. + + ![des-gst-special-treatment-history-6](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history-6.jpg) + +:::note NOTE: + +Patch files are applicable to old margin scheme database. + +::: + +***Last Customization Update : 09 Nov 2016*** + +- Added **Stock Book Number** into Maintain Project. It will auto update project **Stock Book Number** key-in at purchase invoice **Ext. No**. +- **Fixed the bug update project from Purchase Invoice on the First line only**. +- Run the **SQL Accounting Diagnosis - DB Patch** and apply the patch files can be download from [This Link Here](http://www.sql.com.my/document/Patch-MarginScheme-20161109.zip) + + 1. Select the database file (eg.ACC-XXXXX.FDB). + 2. Unzip the patch file downloaded. + 3. Drag the patch filename **DELETE_PHPI_OnAfterSave_2016.11.09**. + 4. Click **Execute**. + 5. Repeat step 2 - 4 and apply with another patch filename **INSERT_PHPI_OnAfterSave_2016.11.09**. + +- Add new field name **StkBookNo** in Maintain Project. + + 1. Go to Tools | DIY | SQL Control Center... + 2. Browse to Business Objects | Miscellaneous | **Project** | Project Fields + + ![des-gst-special-treatment-history2-1](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-1.jpg) + + 3. Add new field name **StkBookNo** and the Data Type, Size, Sub Size, Caption, etc **must follow the screenshot below**. Click to Save button. + + ![des-gst-special-treatment-history2-2](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-2.jpg) + + 4. Next, click on the existing **Margin Scheme** form. See the screenshot below. + + ![des-gst-special-treatment-history2-3](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-3.jpg) + + 5. Click on **Customize** button. + + ![des-gst-special-treatment-history2-4](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-4.jpg) + + 6. Drag the **Stock Book No** from Available Item list and drop under Purchase Details. See screenshot below. + + ![des-gst-special-treatment-history2-5](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-5.jpg) + + 7. Lastly, click to Save button. + + ![des-gst-special-treatment-history2-6](../../../static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-6.jpg) + +:::note NOTE: +Patch files are applicable to old margin scheme database. +::: + +### Setup Master Data (SMD) + +#### Maintain Customer (SMD) + +1. Create new buyer name (eg. company name or person name). +2. Click on Tax tab to input the GST No (if applicable). + + ![des-setup-master-data-maintain-customer-1](../../../static/img/usage/gst-and-sst/gst/setup-master-data-maintain-customer-1.jpg) + +3. Click on extra tab. You can enter the road tax, inspection and insurance reminder date for reference. + + ![des-setup-master-data-maintain-customer-2](../../../static/img/usage/gst-and-sst/gst/setup-master-data-maintain-customer-2.jpg) + +#### Maintain Supplier (SMD) + +1. Create new seller name (eg. company name or person name). +2. Click on Tax tab to input the GST No (if applicable). + + ![des-setup-master-data-maintain-supplier-1](../../../static/img/usage/gst-and-sst/gst/setup-master-data-maintain-supplier-1.jpg) + +#### Maintain Stock Item (SMD) + +1. Create the car model at Maintain Stock Item. For example, TOYOTA VIOS 1.5G(AT) +2. Click on Vehicle tab to define this item is a "Vehicle". + + ![des-setup-master-data-maintain-stock-item-1](../../../static/img/usage/gst-and-sst/gst/setup-master-data-maintain-stock-item-1.jpg) + +#### Maintain Project (SMD) + +1. Create the second car plate number in Maintain Project. +2. Update the Vehicle detail. + + ![des-setup-master-data-maintain-project-1](../../../static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-1.jpg) + +3. Tick on **Margin Scheme** if it is a second hand car plate number. + + ![des-setup-master-data-maintain-project-2](../../../static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-2.jpg) + +4. Leave BLANK to Purchase Invoice Date, Purchase Invoice No and Cost. It will auto update when you are select the project code and save at the Purchase Invoice. + + ![des-setup-master-data-maintain-project-3](../../../static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-3.jpg) + +### Record Purchase of Second Hand Car Value + +1. Enter the purchase value of second car at Purchase Invoice. (eg. RM30,000 ) +2. You must select the correct car plate number from Project. (eg. PGE3333, AAA9999) +3. Supplier GST No, Purchase invoice number, date and cost will be updated automatically after you have save the purchase invoice. + + | Project: Purchase Detail | Update from | + |--------------------------|--------------------------------| + | Supplier GST No | Maintain Supplier (GST No) | + | Purchase Invoice No | Purchase Invoice (Doc No) | + | Purchase Invoice Date | Purchase Invoice (Doc Date) | + | Cost | Purchase Invoice (Unit Price) | + | Stock Book No. | Purchase Invoice (Ext No) | + + ![des-record-purchase-of-second-hand-car-value-1](../../../static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-1.jpg) + +:::note NOTE : + +1. This information is required to show in Lampiran 07 -Monthly Report for Relief for Secondhand Goods or Margin Scheme (MS). + +2. Auto update to project purchase detail (Purchase No, Purchase Date and Cost) if tax amount is zero. + +::: + +### Record Sale of Second Hand Car Value + +#### Margin Scheme Input + +1. Enter the sale value of second car at Invoice. (eg.RM90,113.69) +2. You must select the correct car plate number from Project.(eg.PGE3333) +3. Initial Purchase Cost will auto upadate after select the project (car plate number). +4. Tax amount will be calculated based on Margin Scheme method.(See screenshot below) + + 1. Sellng Price = 90,113.69 + 2. Purchase Cost = 30,000.00 + 3. Margin = 90,113.69 – 30,000.00 = 60,113.69 + 4. Tax amount = 60,113.69 x 6/106 = 3,402.66 + + ![des-record-purchase-of-second-hand-car-value-margin-scheme-input-1](../../../static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-margin-scheme-input-1.jpg) + +5. Invoice no, invoice date, selling price, margin, and margin tax amount will be shown in Lampiran 07 -Monthly Report for Relief for Secondhand Goods or Margin Scheme (MS) + +#### Other Information + +1. Customer Particular tab. + + ![des-record-purchase-of-second-hand-car-value-other-information-1](../../../static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-1.jpg) + +2. Deposit Info (For record purpose, no posting to account). + + ![des-record-purchase-of-second-hand-car-value-other-information-2](../../../static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-2.jpg) + +3. Vehichle Detail (Auto retrieve from Vehicle Detail in Maintain Project). + + ![des-record-purchase-of-second-hand-car-value-other-information-3](../../../static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-3.jpg) + +### Print for Lampiran 07 (Lampiran B0-Penyata-Pemantauan-SM-Syarikat) + +1. Select document to “Invoice Listing” and click APPLY. + + ![des-print-for-lampiran07-1](../../../static/img/usage/gst-and-sst/gst/print-for-lampiran07-1.jpg) + +2. Click on preview or print. Select the report name “Lampiran B0-Penyata-Pemantauan-SM-Syarikat”. + + ![des-print-for-lampiran07-2](../../../static/img/usage/gst-and-sst/gst/print-for-lampiran07-2.jpg) + +## GST Treatment: Import Goods (IM) + +IM - "Import of goods with GST incurred". It means there is an input tax claimable. Tax rate is 6%. + +Purchase of goods from oversea supplier, the supplier invoice received will not incurred GST. However, the GST will be taken place when the goods are discharged out from the port to forwarder warehouse or direct to the buyer. Custom will incurred the GST on the total value stated in K1 form. + +### GST Importation of Goods (IM) + +#### Tax Code for Importion of Goods + +You can found the following tax code available in SQL Financial Accounting. + +| **Tax Code** | **Description** | **Tax Rate %** | +|--------------|-------------------------------------------------------------------|----------------| +| IM-0 | Import of goods with no GST incurred (for Foreign Supplier Account) | 0% | +| IM | Import of goods with GST incurred | 6% | + +#### Oversea Supplier Invoice + +1. Create the oversea supplier invoice at Purchase Invoice. +2. Select the tax code “IM-0”. Tax amount = 0.00 + + ![des-overseas-supplier-invoice-1](../../../static/img/usage/gst-and-sst/gst/overseas-supplier-invoice-1.jpg) + +### Received Forwarder Notification from K1 /Invoice + +Let's say in the K1 form details:- + +| Description | Amount (MYR) | Calculation | +|--------------------------|--------------|------------------------------| +| Goods Value (A) | 1,155.00 | USD300 × 3.8500 | +| Custom Duty (B) (5%) | 57.75 | RM1,155 × 5% | +| Total Taxable Amount (C) | 1,212.75 | A + B | +| **GST - IM** | **72.77** | **C × 6% = RM1,212.75 × 6%** | + +Usually, the forwarder will invoice to the principal company for the following details:- + +| Description | Net (MYR) | GST | Gross (MYR) | +|------------------------------------|-----------|-------|-------------| +| Est. Duties (Import &/ Excise Duty)| 57.75 | | | +| Est. GST Import (RM1,212.75 × 6%) | 72.77 | | | +| **Est Duties + GST Import** | **130.25**| | **130.52** | +| Duty Processing Fee | 100.00 | 6.00 | 106.00 | +| **Total Payable** | | | **236.52** | + +:::note NOTE : + +GST Import can be calculated in different way. It might based on total weight (ie. weight x container) or total meter square (ie,meter square x container). +For example, +GST Import = 30,000m2 x 10 containers x 6% = RM18,000.00 + +::: + +### Forwarder Invoice Entry (Purchase Invoice) + +1. Select the forwarder supplier code in Purchase Invoice. +2. Insert the following fields:- + + - **Tax Amount** + - **Local Tax Amount** + - **Import Purchase Amt (GST Import input)** + - Import Curr.Code (for display only) + - Import Curr Rate (for display only) + + ![des-forwarder-invoice-entry-1](../../../static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-1.jpg) + +3. Click on the side button in the Import Purchase Amt column. See screenshot below. + + ![des-forwarder-invoice-entry-2](../../../static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-2.jpg) + +4. You have to input the info according to 2.3. Received Forwarder Notification from K1 /Invoice example. + + | Field Name | Input Value | Explanation | + |--------------------|-------------|-------------------------------------| + | Currency Code | USD | Currency of the goods purchased | + | Currency Rate | 3.85 | Follow K1 exchange rate | + | Purchase Amount | 300.00 | Goods foreign value as stated in K1 | + | Custom Local Amount| 1,212.50 | Follow K1 total taxable amount | + | | | = Purchase Amount + Custom Duty + Excise Duty (if any) | + | Tax | IM 6% | Import GST at 6% | + | Tax Amount | 72.77 | = 1,212.75 × 6% | + | Permit No | K1-3232323 | Key-in the K1 number | + + ![des-forwarder-invoice-entry-3](../../../static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-3.jpg) + +5. After press OK to exit the GST Import screen, the purchase invoice item description will be updated as “Purchase Value USD 300.00@3.8500 = RM 1,155.00, Permit No: K1-32323232” from the GST Import entered. + +6. Below is the sample of Forwarder invoice entry. + + ![des-forwarder-invoice-entry-4](../../../static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-4.jpg) + +In summary: + +| Line # | Description | Sub Total | Tax | Tax Amount | Sub Total (Tax) | +|--------|-----------------------------------|-----------|------|------------|-----------------| +| 1 | Est. Duties (Import &/ Excise Duty)| 57.75 | IM-0 | 0.00 | 57.75 | +| 2 | Est. GST Import (RM1,212.75 × 6%) | 0.00 | IM | 72.77 | 72.77 | +| 3 | Duty Processing Fee | 100.00 | TX | 6.00 | 106.00 | +| | **Total Payable** | | | | **236.52** | + +### Other Supporting Documents Related to Import + +All imported goods, both dutiable or not, must be declared in the prescribed forms and be submitted to the customs station at the place of import. The prescribed forms are the following: + +1. Customs Form no. 1 (**K1**): Declaration of goods imported + - Import for dutiable and non-dutiable goods. +2. Customs Form no. 2 (**K2**): Declaration of goods to be exported + - Export for dutiable and non-dutiable goods. +3. Customs Form no. 3 (**K3**): Application/ Permit to transport goods within the Federation/Malaysia + - Import & Export of dutiable and non-dutiable goods within Malysia +4. Customs Form no. 8 (**K8**): Application/ Permit to tranship/remove goods + - Declaration of duty not paid goods + **a.** By rail - Pasir Gudang declared K8 to rail the containers from Pasir Gudang to Port Klang without paying the duty. Port Klang declared K1 to clear the containers by paying duty. (Dutiable cargo) + **b.** Transhipment - From one port tranship from another port. K8 can move container from westport to northport and vice versa without paying duty. + +5. Customs Form no. 9 (K9): Requisition/ Permit to remove dutiable goods from customs control + - Clear dutiable cargo slowly out from bonded warehouse. K8 declares for the container truck into bonded warehouse and K9 clears the cargo partial by partial out from the warehouse probably due to high duty charges. + +Supporting documents for the declaration forms are as follows: + +1. Delivery order +2. Packing list +3. Original invoice +4. Bill of lading +5. Certificate of origin +6. Import licenses which may be required by a proper officer of customs + +## GST Treatment: ATS + +**Approved Trader Scheme (ATS)** is a special schemes are introduced to relieve GST payment on importation of goods. + +Section 71 under ATS, + +1. ATS participants are allowed to suspend GST on the importation of goods. +2. Goods imported is used in the course or furtherance of business. +3. The amount of GST suspended needs to be declared in the GST return (for the taxable period to which the suspension relates). + +![des-gst-treatement-ats-1](../../../static/img/usage/gst-and-sst/gst/gst-treatement-ats-1.jpg) + +Persons eligible for ATS + +1. Companies located within Free Industries Zone (FIZ) +2. Licensed Manufacturing Warehouse (LMW) +3. International Procurement Centre (IPC) +4. Regional Distribution Centre (RDC) +5. Toll manufacturers under ATMS +6. Jewellery manufacturers under AJS +7. Companies with turnover above RM25 million and at least 80% of their supplies made are zero-rated; or +8. Any other person approved by the Minister. + +### ATS + +#### Tax Code for ATS + +| Tax Code | Description | Tax Rate % | +|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------| +| IS | Imports under special scheme with no GST incurred. This refers to goods imported under the Approved Trader Scheme (ATS) and Approved Toll Manufacturer Scheme (ATMS), where GST is suspended when the trader imports the non-dutiable goods into Malaysia. These two schemes are designed to ease the cash flow of ATS and ATMS traders, who have significant imports. | 0% | + +#### Purchase Invoice For ATS + +1. Create the oversea supplier invoice at Purchase Invoice. +2. You are required to key-in the Import Declaration No. (eg. K1 or K9) into Permit No column. This import declaration no will be appear in GAF file. +3. Select the tax code = IS. Tax amount = 0.00 +4. Taxable Amount (local value) should entered as: + + > **GST Value** = Customs Value (CIF) + any customs duty paid + any excise duty paid + + ![des-gst-treatement-purchase-invoice-for-ats-1](../../../static/img/usage/gst-and-sst/gst/gst-treatement-purchase-invoice-for-ats-1.jpg) + +#### GST Return Process + +1. Process the month GST Return. +2. GST03 item no 14 will be fill-up with the Taxable Amount from the purchase invoice item with tax code “IS”. +3. GST03 Item no 15 = Taxable Amount (local value) x 6% +4. For example, below screenshot:- + + > **GST03 Item no 15** = 74,600.00 x 6% = 4,476.00 + + ![des-gst-treatement-gst-return-process-1](../../../static/img/usage/gst-and-sst/gst/gst-treatement-gst-return-process-1.jpg) + +## GST Treatment: Non-Refundable Deposit + +How to enter the non-refundable deposit accounted to **Standard Rated** (SR) and **Zero Rated**(ZRL & ZRE) to reflect in GST-03 submission? + +This guide will help you out. All non-refundable deposit amount are inclusive tax. + +| Type of supplies | Tax Rate | GST-03 | +|------------------------|----------|------------------------------------------------------------------------| +| Standard Rated (SR) | 6% | 1. Total Value of Standard Rated Supply (5a) | +| | | 2. Total Output Tax (5b) | +| Zero Rated (ZRL & ZRE) | 0% | 1. Total Value of Local Zero Rated Supplies | +| | | 2. Total Value of Export Supplies | + +### Customer Payment + +#### Non-Refundable (SR) + +1. Create **New Customer Payment**. +2. Enter the **Paid Amount**, eg. Rm10,000.00 +3. **Tick Non-Refundable** for **GST not equal to 0%**. +4. See the screenshot below. + + ![des-customer-payment-non-refundable-1](../../../static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-1.jpg) + +5. Process GST Returns (GST | New GST Returns...). +6. Print the GST-03. + + **GST-03 results:-** + + | GST-03 Item | Description | Local Amount | + |-------------|--------------------------------------------------------------------------------|--------------| + | 5a | Total Value of Standard Rated Supply | **9,433.96** | + | 5b | Total Output Tax (Inclusive of Tax Value on Bad Debt Recovered & other Adjustments) | **566.04** | + +7. See the GST-03 screenshot below. + + ![des-customer-payment-non-refundable-2](../../../static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-2.jpg) + +#### Non-Refundable (ZR) + +1. Create **New Customer Payment**. +2. Enter the **Paid Amount**, eg. Rm25,000.00 (USD6,000.00) +3. Ensure the **Non-Refundable checkbox** is **Untick** for **GST equal to 0%**, eg. ZRL and ZRE. +4. Press **CTRL + ALT + G**. +5. Enter the tax transactions. See the **GST Taxable** detail in the screenshot below. + + ![des-customer-payment-non-refundable-3](../../../static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-3.jpg) + +6. Process GST Returns (GST | New GST Returns...). +7. Print the GST-03. + + **GST-03 results:-** + + | GST-03 Item | Description | Local Amount | + |-------------|-----------------------------------|--------------| + | 11 | Total Value of Export Supplies (ZRE) | 25,000.00 | + +8. See the GST-03 screenshot below. + + ![des-customer-payment-non-refundable-4](../../../static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-4.jpg) + +## GST Treatment: How to report GST-03 item 16 Capital Goods Acquired for Purchase of machinery from Oversea + +### Case 1 : Purchase of Machinery (Fixed Asset) From Overseas + +Let's say the oversea supplier has sent the bill amount USD15,000 (USD15,000 x 4.2 = Rm63,000 will recorded in the Account Book). +Understand that Custom will use GST valuation to compute the GST amt and stated in K1 form. Assume that GST Valuation after custom duty = Rm75,000 and GST amt Rm75,000 x 6% = Rm4,500. + +**Question:** +Which amount should I reported in GST-03 item 16 Capital Goods Acquired? Rm63,000 or Rm75,000? + +**Answer from RMCD:** +GST-03 item 16 Capital Goods Acquired = Rm75,000. + +### How to handle this in SQL Accounting? + +1. Oversea supplier bill enter at purchase/supplier invoice as usual. + + | Account | Local DR | Local CR | + |------------------|-----------|-----------| + | Machinery | 63,000.00 | | + | Oversea supplier | | 63,000.00 | + +2. When it comes to the forwarder bill after declaring the import goods, you must follow our GST Import Goods guideline. Refer to this link [1](../../usage/gst-and-sst/gst#gst-treatment-import-goods-im). + +3. You just have to select Fixed Asset Account at the item line updated from the GST Imports screen. (**Don't worry, Rm75,000 fixed asset will not post into your account book**). See the screenshot attached. + + ![des-which-amount-to-report-in-gst03-item16-capital-goods-1](../../../static/img/usage/gst-and-sst/gst/which-amount-to-report-in-gst03-item16-capital-goods-1.jpg) + + :::note NOTE: + + For GST-03 purpose, this is to report into item 16 Capital Goods Acquired for the import of machinery value as stated in the K1 form. Your account book still recorded as Rm63,000 in step 1. + + ::: + +## GST Treatment: Free Industrial Zone(FIZ) and Licensed Manufacturing Warehouse(LMW) + +This guide will teach you the way to key-in the data entry related to GST treatment on FIZ and LMW. +Under GST system, a person operating in a FIZ or having LMW status is treated as any person carrying out a business in Malaysia where normal rules of GST apply. This means that acquisition of goods locally or imported by the person operating in a FIZ or having LMW status is subject to GST. However, the person operating in a FIZ or having LMW status is eligible to apply for Approved Trader Scheme (ATS) to allow the Director General to suspend the payment of GST on imported goods at the time of importation. For further details, please refer to the guide on Approved Trader Scheme (ATS) and [SQL Accounting on ATS](http://www.sql.com.my/document/sqlacc_docs/PDF/GST36-Input_Entry_for_ATS.pdf) + +Subject to GST: + +1. Based on **transaction value**. GST = transaction value x (SR or ZR) %: + + 1. FIZ Local sell to FIZ Local → SR + 2. FIZ local sell to LMW Local → SR + 3. FIZ/LMW Local sell to Oversea → ZR + +2. Based on **the value of imported goods**. GST = (Custom Value + Import Duty) x SR %: + + 1. FIZ/LMW local sell to non-FIZ/LMW → SR + + For example (**FIZ/LMW local sell to non-FIZ/LMW**), + + | Item | Item Description | Qty | Unit Price (RM) | Value (RM) | Import Duty (RM) | + |------|------------------|---------|-----------------|------------|------------------| + | 1 | Shirts | 300 pcs | 25.00 | 7,500.00 | **1,500.00** | + | 2 | Paints | 100 pcs | 30.00 | 3,000.00 | **600.00** | + | | | | **Total** | 10,500.00 | **2,100.00** | + + ***Assuming 20% import duty (RM10,500 x 20% = 2,100.00)*** + + GST on value + Import Duty are subject to GST (SR) = (10,500.00 + 2,100.00) x 6% = **756.00** + + Therefore, the Tax Invoice will be presented as per below: + + | Item | Item Description | Qty | Unit Price (RM) | Value (RM) | + |------|------------------|---------|-----------------|------------| + | 1 | Shirt | 300 pcs | 25.00 | 7,500.00 | + | 2 | Paints | 100 pcs | 30.00 | 3,000.00 | + | | GST (SR-6%) | | | 756.00 | + | | Total Amount Payable | | | 11,256.00 | + +### How to enter the Tax Invoice if there is a FIZ/LMW transactions to another party? + +According to the example mentioned in above. + +1. Insert and select the stock items sold with empty tax code. Because the stock items are under FIZ/LMW control. + + | Item Code | Description | Qty | Unit Price | Subtotal | Tax Code | Tax Amount | SubTotal (Tax) | + |-----------|-------------|---------|------------|----------|----------|------------|----------------| + | SHIRT | SHIRTS | 300 pcs | 25.00 | 7,500.00 | BLANK | 0.00 | 7,500.00 | + | PAINTS | PAINTS | 100 pcs | 30.00 | 3,000.00 | BLANK | 0.00 | 3,000.00 | + +2. Inser new row and enter the GST on total supply value (Rm7500 + Rm3000 = Rm10,500) direct into Taxable Amount column (C1) + + | Description | Taxable Amount | Tax Code | Tax Amount | SubTotal(Tax) | + |---------------------------|----------------|----------|------------|---------------| + | GST on value Rm10,500.00 | 10,500.00 | SR | 630.00 | 630.00 | + + ![des-enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-1](../../../static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-1.jpg) + + :::note NOTE : + + A1 : Key-in "GST on value" into description. + + B1 : Must select tax code. + + C1 : Key-in the Total Supply Value into Taxable Amount. + + ::: + +3. Insert new row and enter the GST on total Import Duty (Rm1,500 + Rm600.00 = Rm2,100) direct into Taxable Amount column (C2) + + | Description | Taxable Amount | Tax Code | Tax Amount | SubTotal(Tax) | + |---------------------------|----------------|----------|------------|---------------| + | GST on Import Duty 20% | 2,100.00 | SR | 126.00 | 126.00 | + + ![des-enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-2](../../../static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-2.jpg) + + :::note NOTE : + + A2 : Key-in "GST on Import Duty" into description. + + B2 : Must select tax code. + + C2 : Key-in the Total Import Duty value into Taxable Amount. + + ::: + +### GST Return (FIZ and LMW) + +1. Process GST Return for the month +2. Click on print GST-03 + + ![des-enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-gst-return-1](../../../static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-gst-return-1.jpg) + +:::note RESULTS : + +5a Total value of supplies = 12,600.00 + +5b total output tax = 756.00 +::: + +## GST Treatment: Construction Business + +This guide will teach you the way to enter the tax invoice to the Developer from Main Contractor. +Time to account for GST is at the either of the following:- + + 1. when payment is received; + 2. when tax invoice is issued; + 3. if no tax invoice has been issued within 21 days after the certificate of work done is issued. + +We have to look into and show the following items in order to calculate the GST amount in the Tax Invoice: + + 1. Certified value - Progress claim value certified by Architect. + 2. Retention Amount - the amount of progress payment which is not paid until the conditions specified in the contract for the payment of such amounts have been met or until defects have been rectified. + 3. Progress payment + +For example, the Progress Payment:- + +| 1st interim certificate | Amount (RM) | Calculation | +|--------------------------------|-------------|--------------------------| +| Value of material and works (A1) | 30,000.00 | | +| Less: Retention Sum (B1) | (1,500.00) | RM30,000 × 5% | +| **Amount Paid (excl GST)** | **28,500.00** | A1 - B1 | +| **GST Amount** | **1,710.00** | RM28,500 × 6% (SR) | + +| 2nd interim certificate | Amount (RM) | Calculation | +|---------------------------------|-------------|-------------------------| +| Value of material and works (A2) | 90,000.00 | | +| Less: Retention Sum (B2) | (4,500.00) | RM90,000 × 5% | +| Less: 1st Interim Certificate (C2) | (28,500.00) | | +| **Amount Paid (excl GST)** | **57,000.00** | A2 - B2 - C2 | +| **GST Amount** | **3,420.00** | RM57,000 × 6% (SR) | + +| 3rd interim certificate | Amount (RM) | Calculation | +|----------------------------------|-------------|-------------------------| +| Value of material and works (A3) | 150,000.00 | | +| Less: Retention Sum (B3) | (7,500.00) | RM150,000 × 5% | +| Less: 1st Interim Certificate (C3) | (28,500.00) | | +| Less: 2nd Interim Certificate (D3) | (57,000.00) | | +| **Amount Paid (excl GST)** | **57,000.00** | A3 - B3 - C3 - D3 | +| **GST Amount** | **3,420.00** | RM57,000 × 6% (SR) | + +| 4th Interim Certificate | Amount (RM) | Calculation | +|-------------------------------------|-------------|------------------------------| +| Value of material and works (A4) | 300,000.00 | | +| Less: Retention Sum (B4) | (15,000.00) | RM300,000 × 5% | +| Less: 1st Interim Certificate (C4) | (28,500.00) | | +| Less: 2nd Interim Certificate (D4) | (57,000.00) | | +| Less: 3rd Interim Certificate (E4) | (57,000.00) | | +| **Amount Paid (excl. GST)** | **142,500.00** | A4 – B4 – C4 – D4 – E4 | +| **GST Amount (6%)** | **8,550.00** | RM142,500 × 6% (SR) | + +Lastly, the **sum of retention** will be invoiced after the full inspection of work done. + +| Retention Sum | Amount (RM) | Calculation | +|--------------------------------|-------------|---------------------| +| 1st Interim Certificate (R1) | 1,500.00 | | +| 2nd Interim Certificate (R2) | 3,000.00 | RM4,500 – 1,500 | +| 3rd Interim Certificate (R3) | 3,000.00 | RM7,500 – 4,500 | +| 4th Interim Certificate (R4) | 7,500.00 | RM15,000 – 7,500 | +| **Total** | **15,000.00** | | +| **GST Amount (6%)** | **900.00** | RM15,000 × 6% (SR) | + +### Tax Invoice Entry + +1. Click New. +2. Enter the detail as per below example screenshot. + +#### Progress Billing + +| Progress Billing | Value of Work Certified | Amount | Retention | Amount After Retention | GST Amount | +|------------------|--------------------------|--------------------------------|------------------------|------------------------|------------| +| A1 | 30,000 | 30,000 – 0 = 30,000 | 30,000 × 5% = 1,500 | 28,500 | 1,710 | +| A2 | 90,000 | 90,000 – 30,000 = 60,000 | 60,000 × 5% = 3,000 | 57,000 | 3,420 | +| A3 | 150,000 | 150,000 – 90,000 = 60,000 | 60,000 × 5% = 3,000 | 57,000 | 3,420 | +| A4 | 300,000 | 300,000 – 150,000 = 150,000 | 150,000 × 5% = 7,500 | 142,500 | 8,550 | +| **Total** | | **Total Value of Work** = 300,000 | **Total Retention** = 15,000 | 285,000 | 17,100 | + +***1st Interim - Tax Invoice*** + + ![des-gst-treatment-construction-business-progress-billing-1](../../../static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-1.jpg) + +***2nd Interim - Tax Invoice*** + + ![des-gst-treatment-construction-business-progress-billing-2](../../../static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-2.jpg) + +***3rd Interim - Tax Invoice*** + + ![des-gst-treatment-construction-business-progress-billing-3](../../../static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-3.jpg) + +***4th Interim = Tax Invoice*** + + ![des-gst-treatment-construction-business-progress-billing-4](../../../static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-4.jpg) + +#### Retention Billing + +| Progress Retention | Retention | GST Amount | +|---------------------|-----------|------------| +| R1 | 1,500 | 90 | +| R2 | 3,000 | 180 | +| R3 | 3,000 | 180 | +| R4 | 7,500 | 450 | +| Total | 15,000 | 900 | + +***Total Retention - Tax Invoice*** + +![des-gst-treatment-construction-business-retention-billing-1](../../../static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-retention-billing-1.jpg) + +:::note NOTE: + +GL Account : 399-999 - Retention (Create under the Current Asset) + +::: + +### Value of Material and Works Report by Project + +1. To check the total value of material and works balance report. See the screenshot below. +2. You can see the total value of material and works adjusted with **final result: Rm300,000.** + + ![des-value-of-material-and-works-by-project-1](../../../static/img/usage/gst-and-sst/gst/value-of-material-and-works-by-project-1.jpg) + +### Retention Report By Project + +1. To check the retention balance report. See the screenshot below. +2. If the retention balance is zero, it means the full settlement of retention sum. + + ![des-retention-report-by-project-1](../../../static/img/usage/gst-and-sst/gst/retention-report-by-project-1.jpg) + +## GST Treatment: Partial Exemption + +This guide will explains how Partial Exemption, Apportionment and Annual Adjustment are made in respect of residual input tax which is attributable to both taxable and exempt supplies in SQL Financial Accounting. + +### Tax Code for Partial Exemption + +Source from the **GUIDE ON ACCOUNTING SOFTWARE ENHANCEMENT TOWARDS GST COMPLIANCE** dated **01 Aug 2016.** + +| Tax Code | Tax Rate | Description | +|----------|----------|-------------------------------------------------------------------------------------------------------------| +| TX-ES | 6% | Purchase with GST incurred directly attributable to nonincidental exempt supplies. (**Note: Replace TX-N43**) | +| TX-IES | 6% | Purchase with GST incurred directly attributable to incidental exempt supplies. (**Note: Replace TX-E43**) | +| TX-RE | 6% | Purchase with GST incurred that is not directly attributable to taxable or exempt supplies. (Applicable for partially exempt trader/mixed supplier only) | +| IES | 0% | Incidental exempt supplies under GST legislations. (**Note: Replace ES43**) | + +### Partial Exemption Rules + +**Flowchart:** + +![des-partial-exemption-rules-1](../../../static/img/usage/gst-and-sst/gst/partial-exemption-rules-1.jpg) + +#### De Minimis Rule (DmR) + +To satisfy the De Minimis Rule: + + 1. Total Exempt Supply (ES) `<=` Average RM5,000.00 per month; **AND** + 2. DMR `<=` 5% + +Formula: +DmR = [E / (T + E)] x 100% + +| Supplies | Tax Code | Description | +|----------|----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| T | (SR + ZRL + ZDA + ZRE + DS + RS + GS + OS-TXM + NTX) | The total value (exclusive of GST) of all taxable supplies which are the sum of all standard-rated supplies, zero-rated supplies (Local), zero-rated supplies (Export), deemed taxable supplies, supplies made outside Malaysia which would be taxable if made in Malaysia, relief supplies, and disregarded supplies made in the taxable period. | +| E | (ES) | The total value (exclusive of GST) of exempt supplies made in the taxable period which NOT include incidental exempt supplies. | + +:::note NOTE : + + (i) IES is only for incidental supplies, therefore will not be part of the de minimis rule formula (DmR). + (ii) This formula functions is only to test the percentage and value that qualify for de minimis rule. + (iii) Accounting software users should apply DmR on their TX-ES transactions. + +The application for de minimis rule as stated below: + (i) Application of incidental exempt supplies to the de minimis rule. + (ii) Applying the de minimis rule in a taxable period. + (iii) Applying the de minimis rule in a tax year or longer period. + +::: + +#### Input Tax Recoverable Ratio (IRR) + +Formula: + +***IRR = (T-O1) / (T+E-O2)*** + +| Code | % / Tax Code | Description | +|------|--------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| IRR | % | The recoverable percentage of residual input tax or known as Input Tax Recoverable Rate (IRR). | +| T | (SR + ZRL + ZDA + ZRE + DS + RS + GS + OS-TXM + NTX) | The total value (exclusive of GST) of all taxable supplies which are the sum of all standard-rated supplies, zero-rated supplies (Local), zero-rated supplies (Export), deemed taxable supplies, supplies made outside Malaysia which would be taxable if made in Malaysia, relief supplies, and disregarded supplies made in the taxable period. | +| E | (ES) | The total value (exclusive of GST) of exempt supplies made in the taxable period. | +| O1 | - | The total value (exclusive of GST) of **all excluded taxable supplies.** | +| O2 | - | The total value (exclusive of GST) of **all excluded taxable supplies and all excluded exempt supplies.** | + +The supplies related to **O1** of the IRR formula are as follows: + +| Tax Code | Description | +|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| SR | The value of any supply of capital assets used by the taxable person for the purposes of his business (e.g., an asset or part of an asset is disposed of as Transfer of Going Concern). | +| DS | Supplies made by a recipient in accordance with Approved Trader Manufacturer Scheme (ATMS) where self-recipient accounting is made by recipient. | +| DS | Supplies of imported services where reverse charge mechanism (RSA) is made by recipient. | +| OS | Supplies made outside Malaysia which would not be taxable if made in Malaysia. | + +The supplies related to **O2** of the IRR formula are as follows: + +| Tax Code | Description | +|--------------|-----------------| +| SR | The value of any supply of capital assets used by the taxable person for the purposes of his business (e.g., an asset or part of an asset is disposed of as Transfer of Going Concern). | +| DS | Supplies made by a recipient in accordance with Approved Trader Manufacturer Scheme (ATMS) where self-recipient accounting is made by recipient. | +| DS | Supplies of imported services where reverse charge mechanism (RSA) is made by recipient. | +| OS | Out of scope supply is a supply which is not within the ambit or boundary of GST, and therefore GST is not chargeable on such supply. | +| ES | Exempt supplies of land for general use (Land used for burial, playground or religious building), and disposal of capital asset which is subject to exempt supplies. | + +:::note Note: +(i) IES is only for incidental exempt supplies, therefore will not be part of the Input Tax Recoverable Ratio (IRR) formula. +(ii) For other excluded transactions ("O1 & O2"), users need to analyse their transactions in ES, SR, DS & OS, +then make necessary adjustment before they can apply the correct ratio. +(iii) Accounting software users should apply IRR on their TX-RE transactions. +(iv) The above formula is based on the value of supplies made which is the standard method used to apportion the residual input tax. +If the person wishes to use other methods to apportion the residual input tax, he is required to get approval from customs. +For further details please refer to GST Guide on Partial Exemption +::: + +#### Input Tax Claimable Logic to TX-RE, TX-IES (TX-E43) & TX-ES (TX-N43) (Based on DMR) + +Below is the summary of the calculation logic based on DMR to determine the input tax claimable. + +| Tax Code | Tax Rate | Fulfill DMR? | Input Tax Claimable (ITC) | +|----------|----------|--------------|---------------------------| +| TX-RE | 6% | Yes | ITC × 100% | +| TX-RE | 6% | No | ITC × IRR | +| TX-IES | 6% | N/A | ITC × 100% | +| TX-ES | 6% | Yes | ITC × 100% | +| TX-ES | 6% | No | ITC × 0% | + +### How to exclude the IRR for the capital goods disposed off? + +For example, Mixed Co. Sdn Bhd., whose current tax year ends on 31 December 2016, has in his taxable period of April 2015, made some mixed supplies and at the same time incurred residual input tax as follows. + +| | | `RM)` | +|-----|-------------------------------------------------------|-------------| +| T | Value of all taxable supplies, exclusive of tax | 200,000.00 | +| E | Value of all exempt supplies | 40,000.00 | +| O1 & O2 | Value of a capital goods disposal off (exclusive of tax) | 50,000.00 | +| O2 | Value of incidental exempt supplies | 20,000.00 | +| | Residual Input Tax Incurred | 10,000.00 | + +#### Steps + +1. Go to GST | Maintain Tax... +2. Edit the **SR** tax code. +3. Click on the tax rate lookup. See the screenshot below. + + ![des-how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-1](../../../static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-1.jpg) + +4. Click +' sign follow by **IRR Excluded** to insert additional tax rate 6% IRR excluded **(O)**. + + :::note **Note:** + + 1. Tax Rate set as EA or E6%. + 2. E = Exclude from IRR formula. + + ::: + +5. Enter the disposal of asset in Customer Invoice. +6. Select tax code **SR**. +7. Select tax rate **E6%** to exclude from IRR calculation (It means **"O"** to the formula). + + ![des-how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-2](../../../static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-2.jpg) + +8. You will found the IRR calculated (**88.24%**) and the GST-Listing breakdown by tax code as shown in the screenshot below. + + ![des-how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-3](../../../static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-3.jpg) + + **IRR calculation:** + + | | | Calculation | RM | + |------------|-------------------------------------------------------|-----------------------------------|------------| + | t | Value of all taxable supplies, exclusive of tax | 100,000 (SR) + 50,000 (ZRL) + 50,000 (OS) | 200,000 | + | e | Value all of exempt supplies | 20,000 (ES) + 20,000 (IES) | 40,000 | + | o | Value of a capital goods disposal off (exclusive of tax) | 50,000 (SR with tax rate E6%) | 50,000 | + | o | Value of incidental exempt supplies | 20,000 (IES) | 20,000 | + | | Residual Input Tax Incurred | 166,666.66 x 6% (TX-RE) | 10,000 | + +9. Therefore, IRR = (200,000 -50,000) / (200,000 + 40,000) - (50,000 + 20,000) = 0.8824 (**88.24%**). +10. The amount of residual input tax can claim for the period is, + + Residual Input Tax Recovery % X Residual Input Tax = **88.24% x Rm10,000 (TX-RE) = Rm8,824.00**. + + ![des-how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-4](../../../static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-4.jpg) + +:::note **RMCD Reference:** + +We get the similar example from Partial Exempt guide by Royal Malaysian Customs Department. +See the screenshot below. + +![des-how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-5](../../../static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-5.jpg) + +::: + +### GST Listing - mixed Supply + +***Monthly/Quarterly*** + +1. Select the **GST Process**. +2. Click **Apply**. +3. Click **Preview**. +4. Select the report name : **GST Detail 4 - Mixed Supplies**. +5. Press **Ok**. + +**Page 1**: GST Listing 4 - Mixed Supplies + +![des-gst-listing-mixed-supply-1](../../../static/img/usage/gst-and-sst/gst/gst-listing-mixed-supply-1.jpg) + +**Page 2**: GST Listing 4 - Mixed Supplies + +![des-gst-listing-mixed-supply-2](../../../static/img/usage/gst-and-sst/gst/gst-listing-mixed-supply-2.jpg) + +## GST Treatment: Imported Services + +GST on **Imported Services** (Sec 13) is accounted by way of the reverse charge mechanism. + +**Reverse Charge Mechanism** (also known as Self Recipient Accounting-RSA) + +A supplier who is not based in Malaysia and supplies services to a customer in Malaysia does not charge GST. However, the customer receiving the services is required to account for GST using the reverse charge mechanism. + +The recipient must pay GST for the imported services received and simultaneously claim input tax in their GST return. The reverse charge mechanism is an accounting procedure where the recipient acts as both the supplier and the recipient of the services. + +**Example:** + +1. Royalty fee charged in Malaysia by a non-resident business situated outside Malaysia from Jan - Dec 2016 = USD 200,000 +2. Date of invoice = 10 March 2016 +3. Bank prevailing rate = Rm2.50 (Date: 10 March 2016) + +Calculation for GST: + +1. Consideration for the supply @Rm2.50 = Rm500,000.00 + GST 6% +2. GST to be accounted by recipient @6% GST = Rm30,000.00 + +RSA: +Account GST output = Rm30,000.00 +Claim GST Input = Rm30,000.00 + +***Time of Supply*** + +1. When supply are paid for (Date of payment made) - no longer +2. Start from **01 Jan 2016**, which ever is the earlier:- + + 1. Payment made; or + 2. Invoice date. + +### Maintain Tax (Imported Services) + +1. RSA tax code is preset in the SQL Financial Accounting. +2. It is use for the purpose of **Reverse Charge Mechanism or Recipient Self Accounting**. +3. RSA tax code setting. See the screenshot below. + + ![des-gst-treatment-imported-services-maintain-tax-1](../../../static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-maintain-tax-1.jpg) + +### Payment made before the invoice + +1. Click on the **New PV** to create new payment voucher. + + ![des-gst-treatment-imported-services-payment-made-before-invoice-1](../../../static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-1.jpg) + +2. Enter the **payment date**, eg. 02/06/2016. +3. Select **RSA** in tax column. + + ![des-gst-treatment-imported-services-payment-made-before-invoice-2](../../../static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-2.jpg) + + :::note **NOTE:** + + Tax amount will be calculated after process the GST Returns. + + ::: + +4. After GST Returns processed, you can check the double entry posting from GL | Print Journal of Transactions Listing... + + ![des-gst-treatment-imported-services-payment-made-before-invoice-3](../../../static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-3.jpg) + + **Double Entry - RSA:** + + | Account Code | Account Description | Tax Code | Local DR | Local CR | Taxable Period | + |--------------|-------------------|----------|----------|----------|-----------------------------------| + | GST-101 | GST - Claimable | TX | 2,460.00 | 0.00 | June 2016 **(follow payment date)** | + | GST-201 | GST - Payable | DS | 0.00 | 2,460.00 | June 2016 **(follow payment date)** | + +### Invoice First Payment Later + +1. Click on the **New** to create new supplier invoice. +2. Enter the **invoice date**, eg. 02/06/2016. +3. Select **RSA** in tax column. + + ![des-gst-treatment-imported-services-invoice-first-payment-letter-1](../../../static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-invoice-first-payment-letter-1.jpg) + + :::note **NOTE:** + + Tax amount will be calculated after process the GST Returns. + + ::: + +4. After GST Returns processed, you can check the double entry posting from GL | Print Journal of Transactions Listing... + + ![des-gst-treatment-imported-services-invoice-first-payment-letter-2](../../../static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-invoice-first-payment-letter-2.jpg) + + **Double Entry - RSA:** + + | Account Code | Account Description | Tax Code | Local DR | Local CR | Taxable Period | + |--------------|-------------------|----------|----------|----------|-----------------------------------| + | GST-101 | GST - Claimable | TX | 5,040.00 | 0.00 | June 2016 (**follow invoice date**) | + | GST-201 | GST - Payable | DS | 0.00 | 5,040.00 | June 2016 (**follow invoice date**) | + +## GST: Set Tax Year & Longer Period Adjustment + +To set the tax year and longer period adjustment (LPA). + +### Set Tax Year + +1. Highlight the final taxable period to be set as your **First Tax Year**, eg. final taxable period 01 Dec - 31 Dec 2016. + + ![des-gst-set-tax-year-set-tax-year-1](../../../static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-1.jpg) + +2. Double click on the GST Returns highlight in step 1. +3. System will prompt you a dialog box. +4. Tick on the **Tax Year** to set a tax year point. See the screenshot below. + + ![des-gst-set-tax-year-set-tax-year-2](../../../static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-2.jpg) + +5. Click **Save**. + + ![des-gst-set-tax-year-set-tax-year-3](../../../static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-3.jpg) + +6. You can insert a column **Tax Year**, eg. Tax Year point set at 31 Dec 2016. + + ![des-gst-set-tax-year-set-tax-year-4](../../../static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-4.jpg) + + :::note **Note:** + + You can direct set the tax year without delete/purge the GST Returns. + + ::: + +### Longer Period Adjustment + +Declaration of annual adjustment amount: + +- Regulation 43 – in a GST Return for the second taxable period next following the longer period. +For example, +Assumed the tax year set on 31 Dec 2016, LPA should be declared in: + + 1) For **monthly taxable period** , the second taxable period is **Feb 2017** and the submission is before or on 31/3/2017 + 2) For **quarterly taxable period**, the second taxable period is **Apr-Jun 2017** and the submission is before or on 31/7/2017 + +#### GST Returns (LPA) + +1. Process the GST Return.For example, process the **Second Taxable Period** (01/02/2017 - 28/02/2017). +2. LPA will tick automatically.(**if you have set the tax year**) + + ![des-gst-set-tax-year-gst-returns-1](../../../static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-1.jpg) + +3. Suggested period to be adjusted for LPA. + + ![des-gst-set-tax-year-gst-returns-2](../../../static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-2.jpg) + + :::note **Note:** + + User allow to overwrite the suggested period for Longer Period. + + ::: + +4. You can insert the **LPA Date From** and **LPA Date To** columns to check. + + ![des-gst-set-tax-year-gst-returns-3](../../../static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-3.jpg) + +### GST Listing - Mixed Supplies (LPA) + +***Longer Period Adjustment (LPA)*** + +1. Select the **Date From** and **Date To** (eg. the financial year is 01/01/2016 - 31/12/2016). +2. Click **Apply**. +3. Click **Preview**. +4. Select the report name : **GST Detail 4 - Mixed Supplies.** +5. Press **Ok**. + +**Page 1 :** GST Listing 4 - Mixed Supplies + + ![des-gst-set-tax-year-gst-listing-mixed-supplies-1](../../../static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-listing-mixed-supplies-1.jpg) + +**Page 2:** GST Listing 4 - Mixed Supplies + + ![des-gst-set-tax-year-gst-listing-mixed-supplies-2](../../../static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-listing-mixed-supplies-2.jpg) + +## Special-GST Treatment: Non-deductible Expenditure + +How to enter and to retrieve the non-deductible expenditure? + +This guide will teach you the way to key-in the data entry and help you to analyse the non-deductible expenditure related to GST. It is follow to the latest 2015 amendment in Income Tax Act 1967. + +***GST Expenditure (Effective from YA 2015)*** + +1. para 39(1)(o): GST input tax paid or to be paid not allowed as deduction if:- + 1. Non-registered person with turnover exceed GST threshold of Rm500,000. + 2. Registered person fail to claim input tax credit his entitled to claim. +2. section 39(1)(p): Output tax absorbed by GST by registered person is not allowed as tax deduction. +3. GST block input tax & deductible expenses:- + +| Block Tax | GST Input Tax | Tax Deductible? | +|------------------------------------------|---------------|-------------------------------------------------| +| Passenger car (Cost and maintenance) | Blocked | Deductible (to claim capital allowance) | +| Club subscription fee | Blocked | **Non-deductible** | +| Medical insurance/personal accident insurance | Blocked | Deductible | +| Family benefits | Blocked | Depend (check with your auditors or tax consultant) | +| Entertainment expenses (Potential customer) | Blocked | **Non-deductible** | +| Entertainment expenses (Supplier) | Blocked | Allowed 50% deduction | + +### How does it work? + +1. Click New. +2. Follow the below SETTINGS to create. + + | Field Name | Field Contents | + |--------------|-------------------------------------------------------------------------------| + | Code | ND-0 (Recommended code) | + | Description | Non-Deductible | + | Tax Type | (Non GST - Both Sales & Purchase) | + | Tax Rate | 0% (please key-in) | + | Tax Account | GST-301 (This field is compulsory. Due to tax rate is 0%, therefore no posting) | + | Tax Inclusive| Untick | + +3. Click Save. See below screenshot. + + ![des-special-gst-treatment-non-deductible-expenditure-how-it-works-1](../../../static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-it-works-1.jpg) + +:::note **NOTE :** + +Do not click the tax rate arrow key down if the tax account is not defined yet. + +::: + +#### Data Entry for Non-Deductible + +***For Purchase Invoice*** + +1. Insert a new detail row and key-in the total input tax not going to claim. +2. Select the tax code "ND-0". +3. See below screenshot. + + ![des-special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-1](../../../static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-1.jpg) + +***For GL Cash Book*** + +1. Insert a new detail row and key-in the **total input tax not going to claim**. +2. Select the tax code "ND-0". +3. See below screenshot. + + ![des-special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-2](../../../static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-2.jpg) + +:::note **NOTE:** +Please ensure you understand the Non-Deductible expenditure from your auditors before you apply this guide. +::: + +### How to analyse the total amount from Non-Deductable?\ + +1. Select the date range to APPLY. +2. Filter at the Tax grid column. See screenshot below. + + ![des-special-gst-treatment-non-deductible-expenditure-how-to-analyze-1](../../../static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-to-analyze-1.jpg) + +3. You can see the non-deductible transactions filtered by ND-0. + + ![des-special-gst-treatment-non-deductible-expenditure-how-to-analyze-2](../../../static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-to-analyze-2.jpg) + +4. From this instance, the total non-deductible expenditure amount is **Rm3030.00** + +:::note **NOTE:** + +This non-deductible tax amount will not post to GAF. + +::: + +## GST-03 Item 12 (ES + IES) : How to compare the Total Value of Exempt Supplies between GST-03 and Ledger + +How to compare the Total Value of Exempt Supplies between GST-03 and Ledger? + +This guide will help you to check the data entry source posted for **Item 12 Total Value of Exempt Supplies in GST-03.** + +1. **GST Tax Code** + + | Tax Code | Tax Description | Tax Rate | Explanation and examples | + |----------|----------------------------|----------|-------------------------| + | IES | Incidental Exempt Supplies | 0% | Incidental exempt supplies under GST legislations (Note: Replace ES43). Incidental Exempt Financial Services Supplies (IEFS) include: 1.interest income from deposits placed with a financial institution in Malaysia, 2.realized foreign exchange gains or losses | + | ES | Exempt Supplies under GST | 0% | This refers to supplies which are EXEMPTED UNDER GST. These supply includes: 1.Selling of Residential Properties to consumer, 2.Selling of tickets for Public Transportation (Taxis, Stage Buses, Ferries), 3.Financial Institution’s interest charges to customers for loan. | + +2. **GST-03** + + | Item No. | Description | Guidelines | + |----------|----------------------------|-------------------------------------| + | 12 | Total Value of Exempt Supplies | IES + ES (Taxable Amount) | + | | | Note : Net Loss in Forex (ES43) = 0.00 | + +### Example of Data Entry + +1. IES - **Interest income from deposits placed with a financial institution in Malaysia** + + Screenshot below from **Journal Entry.** + + ![des-gst-item12-data-entry-1](../../../static/img/usage/gst-and-sst/gst/gst-item12-data-entry-1.jpg) + +2. IES - **Realized foreign exchange gains or losses** + + 1. **Realized Gain in Foreign Exchange** + + Screenshot below from **Customer Payment**. + + ![des-gst-item12-data-entry-2](../../../static/img/usage/gst-and-sst/gst/gst-item12-data-entry-2.jpg) + + 2. **Realized Loss in Foreign Exchange** + + Screenshot below from **Customer Payment.** + + ![des-gst-item12-data-entry-3](../../../static/img/usage/gst-and-sst/gst/gst-item12-data-entry-3.jpg) + +3. ES - **Financial Institution’s interest charges to customers for loan** + + Screenshot below from **Customer Invoice.** + + ![des-gst-item12-data-entry-4](../../../static/img/usage/gst-and-sst/gst/gst-item12-data-entry-4.jpg) + +### GST - 03 Item 12 : Total Value of Exempted Supplies + +1. For instances, the **GST-03 Item 12 = Rm62.886.40** + + ![des-gst-item12-data-entry2-1](../../../static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-1.jpg) + +2. You can check the details by double click on the amount in **Item 12.** +3. Pop-up the item 12 detail. + + ![des-gst-item12-data-entry2-2](../../../static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-2.jpg) + +4. You can insert additional column, ie. **From Doc Type** and **Trans Type.** + + a. **From Doc Type** will help you to identify the documents where it posted; + b. **Trans Type** will tell you the document posted from special case, eg. Realized Gain in Foreign Exchange. + + ![des-gst-item12-data-entry2-3](../../../static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-3.jpg) + +:::note **NOTE:** +Trans Type = _X, it means the posting entry related to **Realized Gain or Loss in Foreign Exchange.** +::: + +### Cross Check Reports (CCR) + +#### GST Listing (CCR) + +1. Select the **date range** or **GST Process**. +2. You can select the tax parameter for **ES** and **IES**. +3. Apply the **GST Listing**. + + ![des-cross-check-reports-gst-listings-1](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-1.jpg) + + | Tax Code | Local Amount | Explanation | + |----------|-------------|-----------------------------------------------------------------------------| + | IES | 5,000.00 | Local amount from Sales/Customer/Journal Entry/Cash Book (OR) documents related to tax code: **IES** | + | IES | 7,886.40 | Net realized forex gain calculated | + | ES | 50,000.00 | Local amount from Sales/Customer/Journal Entry/Cash Book (OR) documents related to tax code: **ES** | + | **Total**| **62,886.40** | Total value shown in **GST-03 Item 12** | + +4. Click on each tax type, you able to view the details. See the example in the screenshot below. + +***1. IES*** + + ![des-cross-check-reports-gst-listings-2](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-2.jpg) + +***2. IES (Net Realized Forex Gain ONLY)*** + + ![des-cross-check-reports-gst-listings-3](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-3.jpg) + +***3. ES*** + + ![des-cross-check-reports-gst-listings-4](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-4.jpg) + +***GL Ledger*** + +1. In the General Ledger report, you have to insert the **Tax** grid column. +2. Filter the Tax Code **(ES and IES)**. + + ![des-cross-check-reports-gst-listings-5](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-5.jpg) + +3. Transactions related to **ES**. See the screenshot below. + + ![des-cross-check-reports-gst-listings-6](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-6.jpg) + +4. Transactions related to **IES**. See the screenshot below. + + ![des-cross-check-reports-gst-listings-7](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-7.jpg) + +***Special Posting for Net Realized Gain Forex (IES)*** + +Below question and answer extract from **GUIDE ACCOUNTING SOFTWARE ENHANCEMENT TOWARDS GST COMPLIANCE.** + + ![des-cross-check-reports-gst-listings-8](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-8.jpg) + +1. Check the Foreign Exchange Rate Gain or Loss Account setting at **Tools | Options...(General Ledger)**. For example, + + | Default Account | GL Account Code | + |------------------------------------|----------------| + | Foreign Exchange Rate Gain Account | 530-000 | + | Foreign Exchange Rate Loss Account | 980-000 | + + ![des-cross-check-reports-gst-listings-9](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-9.jpg) + +2. Select the **Foreign Exchange Rate Gain or Loss Account**, click **APPLY** + + ![des-cross-check-reports-gst-listings-10](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-10.jpg) + +3. You can see the **Foreign Exchange Rate Gain or Loss** posting transactions in **GL Ledger**. + + ![des-cross-check-reports-gst-listings-11](../../../static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-11.jpg) + + | Account | Local DR | Local CR | Explanation | + |-----------------------------|----------|----------|-----------------------------------------------------| + | Total Gain on Foreign Exchange | 0.00 | 8,480.00 | | + | Total Loss on Foreign Exchange | 593.60 | 0.00 | | + | Net Realized Forex | 593.60 | 8,480.00 | 8,480.00 - 593.60 = 7,886.40 GAIN (IES) | + +:::note **NOTE:** +RMCD has confirmed that **Net Realised Gain in Forex ONLY** need to add into **GST-03 item 12 Total Value of Exempt Supplies.** +Tax code = **IES** + +**Net Realised Loss in Forex** will be **NIL.** + +### Summary : Comparison between GST-03, GST Listing and Ledger Report + +Here is the result summarized: + +| Description | GST-03 | GST Listing | Ledger Report | +|-----------------------------|----------|------------|---------------| +| IES | | 5,000.00 | 5,000.00 | +| IES (Realized Gain Forex) | | 7,886.40 |Forex Gain = 8,480.00 | +| | | |Forex Loss = -593.60 | +| | | | **Net Forex Gain = 7,886.40** | +| ES | | 50,000.00 | 50,000.00 | +| Total Item 12 (ES + IES) | 62,886.40| 62,886.40 | 62,886.40 | diff --git a/docs/usage/gst-and-sst/sst.md b/docs/usage/gst-and-sst/sst.md new file mode 100644 index 00000000..04016ecc --- /dev/null +++ b/docs/usage/gst-and-sst/sst.md @@ -0,0 +1,1287 @@ +--- +sidebar_position: 2 +title: SST +description: SST +slug: /usage/gst-and-sst/sst +tags: ["SQL Account", "Usage", "SST"] +--- + +## SST Setup and Information + +## SST Introduction + +Introduced in September 2018, SST replaced the former 6% Goods and Services Tax (GST) system. SST consists of two parts: Sales Tax and Service Tax. Sales Tax is a single-stage tax applied to all taxable goods manufactured in or imported into Malaysia; while Service Tax is a single-stage tax imposed on taxable services provided in Malaysia by a registered business. Certain designated areas in Malaysia such as Langkawi Island, Tioman Island, and the Federal Territory of Labuan, are exempt from Service Tax. + +### Sales and Service Tax 2018 Model and Scope + +Sales and Service Tax model are structured as below: + +![des-sst-introduction-1](../../../static/img/usage/gst-and-sst/sst/sst-introduction-1.png) + +## Open SST Return + +### Tax code and SST-02 mapping + +SST tax code structures and mapping to SST-02: + +![des-sst-introduction-taxcode-and-sst02-mapping-sales-1](../../../static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-sales-1.png) + +![des-sst-introduction-taxcode-and-sst02-mapping-service-1](../../../static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-service-1.png) + +### Example of SST-02 + +:::info + +Follow the steps to process SST-02 in SQL Account : [Youtube](https://youtu.be/laLjRJWh2j8) + +::: + +1. Process SST Return from SST | New SST Return + + ![des-sst-introduction-example-of-sst02-1](../../../static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-1.png) + +2. Enter your taxable period + +3. Key in declaration, which will appear in Part F of the SST02 form. This declaration only needs to be entered once, as it will automatically appear in subsequent returns. + +4. click Process + + ![des-sst-introduction-example-of-sst02-2](../../../static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-2.png) + +5. click SST-02 + + ![des-sst-introduction-example-of-sst02-3](../../../static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-3.png) + + ![des-sst-introduction-example-of-sst02-4](../../../static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-4.png) + + ![des-sst-introduction-example-of-sst02-5](../../../static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-5.png) + +:::info + +Understand SST02 27 Column : [Video](https://www.facebook.com/SQLEstream/videos/2216806511940307/) + +::: + +--- + +1. Part A + + ![des-sst-introduction-2nd-example-of-sst02-1](../../../static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-1.png) + +2. Part B1 + + ![des-sst-introduction-2nd-example-of-sst02-2](../../../static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-2.png) + +3. Part B2 + + ![des-sst-introduction-2nd-example-of-sst02-3](../../../static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-3.png) + +4. Part C + + ![des-sst-introduction-2nd-example-of-sst02-4](../../../static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-4.png) + +5. Part D + + ![des-sst-introduction-2nd-example-of-sst02-5](../../../static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-5.png) + +6. Part E + + ![des-sst-introduction-2nd-example-of-sst02-6](../../../static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-6.png) + +7. Part F + + ![des-sst-introduction-2nd-example-of-sst02-7](../../../static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-7.png) + +8. Part G + + ![des-sst-introduction-2nd-example-of-sst02-8](../../../static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-8.png) + +## New SST Return + +To process and close the SST returns period. You can generate the SST-02. + +![des-new-sst-return-1](../../../static/img/usage/gst-and-sst/sst/new-sst-return-1.png) + +| Field Name | Field Type | Explanation | +|--------------------|------------|----------------------------------------------------------------------------------------------| +| Process From to | Date | SST Taxable Period, e.g., every 2 months. | +| Process Date | Date | Date to process the SST Return. | +| Amendment | Boolean | Ticked. In SST-02, the "Amendment" checkbox will be marked X. | +| C/F Refund for SST | Boolean | Ticked. In SST-02, the Item 9 "Do you choose to carry forward refund for SST?" will be marked X in Yes checkbox. | +| Description | String | SST Return - Process From Date to Date (by default). | +| Ref 1 | String | Key-in any reference no. | +| Ref 2 | String | Key-in any reference no. | + +## Draft SST Return + +You can draft the SST-02 before final submission by processing it as draft. + +1. Click on the arrow key down at the Process button (Y). +2. See below screenshot. + + ![des-sst-return-1](../../../static/img/usage/gst-and-sst/sst/sst-return-1.png) + +3. **DRAFT** Status showed for the SST Returns period. + + ![des-sst-return-2](../../../static/img/usage/gst-and-sst/sst/sst-return-2.png) + +:::note Note: + +You still can amend the documents where the DRAFT SST return has generated. You may create multiple drafts before finalizing the SST return for the period. + +::: + +## Final SST Return + +1. Click on the Process button. +2. See below screenshot. + + ![des-sst-return-1](../../../static/img/usage/gst-and-sst/sst/sst-return-1.png) + +3. Final SST Return will no longer display "DRAFT" in the status column. + + ![des-sst-return-2](../../../static/img/usage/gst-and-sst/sst/sst-return-2.png) + +:::note Note: + +Once the SST return is finalized, you cannot amend the documents. + +::: + +## Posting + +1. Sales Tax (Accrual Basis) + + ![des-sst-posting-1](../../../static/img/usage/gst-and-sst/sst/sst-posting-1.png) + +2. Service Tax (Payment Basis) + + In SST 2.0, the service tax is due and payable when payment is received for any taxable service. + + ![des-sst-posting-2](../../../static/img/usage/gst-and-sst/sst/sst-posting-2.png) + + 1. Issue sales invoice with service tax 6%, date 31/10/2018, Amount RM 1,000.00 & Tax Amount RM 60.00. + + ![des-sst-posting-3](../../../static/img/usage/gst-and-sst/sst/sst-posting-3.png) + + 2. Process SST Return for the period 01/09/2018 to 31/10/2018. Total Tax Payable is RM 0 because no payment was received for the invoices issued. + + ![des-sst-posting-4](../../../static/img/usage/gst-and-sst/sst/sst-posting-4.png) + + 3. Payment is received on 05/11/2018, knocked-off on IV-00111. + + ![des-sst-posting-5](../../../static/img/usage/gst-and-sst/sst/sst-posting-5.png) + + 4. Process the second cycle of taxable period. The tax payable will be recorded as payment is received. + + ![des-sst-posting-6](../../../static/img/usage/gst-and-sst/sst/sst-posting-6.png) + + 5. SQL Account will auto Credit to SST- Deferred Tax account during invoice issue but no payment. Once payment is received, a Debit will be auto reversed at SST-Deferred Tax Account. + + ![des-sst-posting-7](../../../static/img/usage/gst-and-sst/sst/sst-posting-7.png) + + 6. The taxable amount of RM 1,000.00 and the tax amount of RM 60.00 will also be recorded in SST-02 Part B2, item 11c. + + ![des-sst-posting-8](../../../static/img/usage/gst-and-sst/sst/sst-posting-8.png) + +## Sales Tax Legislation (SaTL) + +### Act (SaTL) + + 1. Sales Tax 2018 + +### Regulations (SaTL) + + 1. Sales Tax Regulations 2018 + + 2. Sales Tax (Customs Ruling) Regulations 2018 + + 3. Sales Tax (Determination of Sale Value of Taxable Goods) Regulations 2018 + + 4. Sales Tax (Compounding of Offences) Regulations 2018 + +### Order (SaTL) + + 1. Appointment of Date of Coming into Operation + + 2. Sales Tax (Person Exempted From Payment Of Tax) Order 2018 + + 3. Sales Tax (Imposition Of Tax In Respect Of Designated Area) Order 2018 + + 4. Sales Tax (Imposition Of Tax In Respect Of Special Area) Order 2018 + + 5. Sales Tax (Exemption From Registration) Order 2018 + + 6. Sales Tax (Goods Exempted From Tax) Order 2018 + + 7. Sales Tax (Rates Of Tax) Order 2018 + + 8. Sales Tax (Total Sale Value Of Taxable Goods) Orders 2018 + +## Scope and Charge (SaTL) + +Sales Tax is a tax charged and levied - + +- on taxable goods manufactured in Malaysia by a taxable person and sold, used or disposed by him; + +- on taxable goods imported into Malaysia + +**Definition of:** + +- Goods means all kind of movable property. + +- Taxable goods means goods of a class or kind not exempted from sales tax; i.e goods which are not listed in Sales Tax (Goods Exempted From Sales Tax) Order 2018. + +- Sales includes barter, disposal of goods with a right of purchase or on terms providing that the seller retains an interest in the goods, and delivery of goods under any conditions as to future payment. + +Sales Tax is not charged on- + +- Goods listed under Sales Tax (Goods Exempted From Sales Tax) Order 2018; + +- Certain manufacturing activities are exempted by Minister of Finance through Sales Tax (Exemption from Registration) Order 2018. + +:::note +Malaysia excludes designated area (DA) and special area (SA). +::: + +## Sales Tax Mechanism + +Overview of Sales Tax flow chart:- + +![des-sales-tax-mechanism-1](../../../static/img/usage/gst-and-sst/sst/sales-tax-mechanism-1.png) + +## Meaning of Manufacture + +Manufacture defines as **a conversion of materials** by manual or mechanical means into a new product by changing the following: + +1. size + +2. shape + +3. composition + +4. nature + +5. quality + +of such materials and includes the assembly of parts into a piece of machinery or other products. + +However, manufacture does not include the installation of machinery or equipment for the purpose of construction. + +In relation to petroleum, any process of:- + +1. separation + +2. purification + +3. conversion + +4. refining + +5. Blending + +For goods other than petroleum + +1. By conversion + + ![des-meaning-of-manufacture-1](../../../static/img/usage/gst-and-sst/sst/meaning-of-manufacture-1.png) + +2. The assembly + + ![des-meaning-of-manufacture-2](../../../static/img/usage/gst-and-sst/sst/meaning-of-manufacture-2.png) + +3. For petroleum + + ![des-meaning-of-manufacture-3](../../../static/img/usage/gst-and-sst/sst/meaning-of-manufacture-3.png) + +## Meaning of Taxable Person (SaTL) + +Taxable person is a person who manufacturing taxable goods and is: + +1. Liable to be registered + + - Reached sales threshold + + - Manufacturer - RM 500,000.00 + + - Sub-contractor - RM 500,000.00 + +2. Registered under Sales Tax Legislation + + - Mandatorily registered + + - Voluntarily registered + +## Sales Tax Registration + +### Liability To Register + +Manufactures of taxable goods are required to register when the **sales value of taxable goods** exceeds RM 500,000 over a 12 months period. + +Manufacturers who carry out sub-contract work on taxable goods where the VALUE of work performed exceeds RM500,000 for 12 months period. + +Taxable goods belong to: + +- Registered manufacturer; + +- Non-registered manufacturer + +- Manufacturer in special area (FIZ and LMW) + +:::note +Registered Person will known as Registered Manufacturers. +::: + +### Voluntary Registration + +Conditions are: + +- Sales value of taxable goods below threshold (ie. < RM 500,000). +- Person who are exempted from registration + +### Determination of Turnover + +Manufacturers should calculate the sales value of taxable goods for a period of 12 months using the following methods: + +1. Historical Method + + The total value of taxable goods in that month and the 11 months immediately preceding the month; + +2. Future Method + + The total value of taxable goods in that month and the 11 months immediately succeeding the month. + +### Exemption from Registration + +- Manufacturer of non taxable goods. (Not eligible for voluntary registration). + +- Manufacturer below threshold (ie. < RM 500,000). + +- Sub-contractor manufacturer below threshold. + +- Manufacturing activities that have been exempted from registration. E.g : + + - Tailoring + + - Installation incorporation of goods into building + +### Transitional Registration (Sales) + + Manufacturer liable for registration must register before September 1, 2018. The registration commencement date is September 1, 2018. + + 1. Automatic Registration + + - Manufacturers who are GST Registered Persons which have been identified and fulfilled the required criteria will be registered automatically as Registered Manufacturer under Sales Tax. + + - Registered Manufacturer need to charge tax beginning 1 September 2018. + + 2. Person Not Registered Automatically + + - GST registered person who fulfilled the required criteria to be registered but were not registered by 1 September 2018 need to apply for registration within 30 days from the commencement date. + +## Taxable vs Exempted Goods + +### Taxable Goods + +Taxable goods refer to goods of a class or kind **not exempted** from sales tax. + +In another words, goods which are not listed in **Sales Tax (Goods Exempted From Sales Tax) Order 2018.** + +Example of taxable goods include: + +![des-taxable-goods-1](../../../static/img/usage/gst-and-sst/sst/taxable-goods-1.png) + +It is chargeable with a tax rate of + +- 10% - standard sales tax rate + +- 5% - reduced sales tax rate + + - First Schedule in the Sales Tax (Rate of Tax) Order 2018 + +- Specific rate - for petroleum product (eg. RM0.30 per litre) + + - Second Schedule in the Sales Tax (Rate of Tax) Order 2018 + +How to determine the rate of sales tax for goods? + +![des-taxable-goods-2](../../../static/img/usage/gst-and-sst/sst/taxable-goods-2.png) + +### Exempted Goods + + **Exempted goods** refer to goods of a class or kind that are exempted from sales tax, as listed in the **Sales Tax (Goods Exempted From Sales Tax) Order 2018**. + + Example of exempted goods are: + + ![des-exempted-goods-1](../../../static/img/usage/gst-and-sst/sst/exempted-goods-1.png) + +## Value of Taxable Goods + +Refer to **Sales Tax (Rules of Valuation) Regulation 2018**, value of taxable goods that: + +- sold by taxable person + +- manufactured and used by the manufacturer for other purpose than as materials in manufacturing; or + +- disposed by manufacturer. + +For goods belongs to another manufacturer is known as sub-contract work. + +- Sale value of the goods = Amount of the work performed and charged by **sub-contractor**. + +The sale value of the goods shall be determined on the basis of the **transactions value of the goods** as the primary basis of valuation. + +Transaction value of the goods, + +- The **actual price** the goods are sold, without any conditions or restrictions imposed to purchaser. + +- Purchaser is not required to give parts of proceed on subsequent sale to the manufacturer. + +- Purchaser and manufacturer are not related or if related the relationship did not influence the price. + +## Responsibility of Registered Manufacturer + + ![des-responsibility-of-registered-manufacturer-1](../../../static/img/usage/gst-and-sst/sst/responsibility-of-registered-manufacturer-1.png) + +## Exemption and Facilities + +### Goods Exemption from Sales Tax + +**Goods** refer to Sales Tax (Goods Exempted From Sales Tax) Order 2018. + +- E.g. live animals, unprocessed food, vegetables, medicines, machinery, chemicals, etc. + +### Person Exempted from Sales Tax + +Person refer to Sales Tax (Person Exempted From Sales Tax) Order 2018. + +- Schedule A: Class of person, e.g. Ruler of States, Federal or State Government Department, Local Authority, Inland Clearance Depot, Duty Free Shop. + +- Schedule B: Manufacturer of specific non-taxable goods, e.g. any manufacturer of + + 1. Controlled goods under Control of Supplies Act 1961 + + 2. Pharmaceuticals products + + 3. Solely manufacture milk products + + 4. Solely manufacture of exempted goods for export to import/purchase raw materials, components and packaging materials. + + - Schedule C: Registered Manufacturer, exemption of tax on the acquisition of raw materials, components, packaging to be used in manufacturing of taxable goods (previously known as CJ5, CJ5A, CJ5B). + +### Field Exempted from Sales Tax + + Manufacturing activities exempted from registration regardless of turnover. + +- E.g. tailor, jeweller, optician, engraving, vanishing table top, etc. + +## Special Rules + +### Treatment in Designated Area for Sales (DA) + +![des-treatment-in-designated-area-1](../../../static/img/usage/gst-and-sst/sst/treatment-in-designated-area-1.png) + +:::note +SA = Special Area, e.g. Free Zone (FZ), Licensed Warehouse, Licensed Manufacturing Warehouse (LMW) and Joint Development Area (JDA). + +PCA = Principal Customs Area +::: + +### Treatment in Special Area for Sales (SA) + +![des-treatment-in-special-area-1](../../../static/img/usage/gst-and-sst/sst/treatment-in-special-area-1.png) + +## Accounting of Tax + +### Invoices + +Issuance of Invoice: + +- Mandatory for registered manufacturer who sell taxable goods. + +- Hard copy or electronically. + +- Containing prescribed particulars. + +- Bahasa Melayu or English. + + **Prescribed particulars** are: + + 1. The invoice serial number; + + 2. The date of the invoice; + + 3. The name, address and identification number of the registered manufacturer (Sales Tax Number); + + 4. The name and address of the person to whom the taxable goods is sold; + + 5. Description and quantity of the goods; + + 6. Any discount offered; + + 7. For each description, distinguish the type of goods, quantity and amount payable excluding tax; + + 8. The total amount payable excluding tax, the rate of tax and the total tax chargeable shown as a separate amount or total amount payable inclusive of total of tax chargeable; + + 9. Any amount expressed in a currency other than ringgit shall also be expressed in ringgit at the selling rate of exchange prevailing in Malaysia at the time of sale. + +## Credit Note & Debit Note usage + +A credit note is allowed to issue by registered manufacturer under the situation where the goods are returned by the purchaser due to : + +- Wrong quantity, poor or defective quality or uncontracted goods, provided that the goods have not been subsequently sold or disposed of by the purchaser. + +- Discount given in respect of goods sold and which are freely available to all who are willing to conduct business. + +A debit note is allowed to issue by registered manufacturer under the situation where there is an additional of sales tax to be paid for any price adjustment. + +Both credit note and debit note shall contains the following particulars: + +- The word “credit note” or “debit note” in a prominent place. + +- The serial number and date of issue. + +- The name, address and Sales Tax identification number of the supplier. + +- The name and address of the customer. + +- The **reason** for issuance. + +- Description which identifies the description of goods, the quantity and amount for which CN or DN is given. + +- The total amount excluding tax. + +- The rate and amount of tax. + +- The number and date of the original invoice. + +If changes related to amount of tax payable: + +- Adjustment in the return for the taxable period in which the credit note or debit note is issued. + +- Adjustment in the return for the last taxable for person who has ceased to be a taxable person. + +If deduction for taxable period exceeds the amount of sales tax payable, the balance is to be carried forward to the next taxable period. Refund is not allowed on balance carried forward if taxable person has ceased to carry on business. + +## Accounting Basis and Taxable Period Information + +### Accounting Basis Information + +Sales Tax is based on accrual basis and it is required to be accounted at the time when the goods are sold, disposed or first used. + +### Taxable Period Information + +Regular interval period where a taxable person accounts and remits sales tax to Government. Default taxable period for the registered manufacturer to be **bimonthly (2 months)** period. + +Registered manufacturer may apply for taxable period other than the default taxable period. + +In summary, + +![des-sst-taxable-period-1](../../../static/img/usage/gst-and-sst/sst/sst-taxable-period-1.png) + +## Furnishing Sales Tax (SST-02) Return & Payment of Tax + +Registered manufacturer has to declare SST return every 2 months according to the taxable period. + +- Sales tax return has to be submitted not later than the last day of the following month after the taxable period ended. + +- Sales tax return has to be submitted regardless of whether there is any tax to be paid or not. + +- Sales tax return has to be submitted electronically or by cheque, bank draft and posted to SST Processing Centre. + +Payment for tax due and payable declared in SST-02. Failure to submit return is an offence. + +## Miscellaneous (Remission, Refund of Overpaid Tax, Drawback. Penalty) + +### Remission + +The Minister may remit the whole or any part of sale tax due and payable. + +Director General may remit the whole or any part of: + +- Surcharge + +- Penalty + +- Fee + +- Other money payable under the Act + +### Refund of overpaid tax + +Any person who has overpaid or erroneously paid of sales tax, penalty, surcharge, fee; or If any person who has paid sales tax and then exemption or remission of sales tax is granted by Minister. + +Claim to be made in form JKDM No. 2 within one year from the date of over payment or erroneously payment; or entitlement of refund. + +### Drawback + +Director General may allow a drawback of the full amount of sales tax paid by a person for taxable goods that are subsequently exported. This does not apply to petroleum. + +Conditions: + +- Goods must be exported within six months from Sales Tax paid on import or date of invoice issued. + +- Application made within three months from the date of export in JKDM Form no. 2 + +- Other conditions with regards to documentation and declaration. + +Submission to sales tax office at applicants’ place of business. + +Illustration: + +![des-sst-drawback-1](../../../static/img/usage/gst-and-sst/sst/sst-drawback-1.png) + +### Penalty for late payment of tax + +Late payment penalty on the amount of sales tax not paid as shown in the table below. + +![des-sst-penalty-for-late-payment-of-tax-1](../../../static/img/usage/gst-and-sst/sst/sst-penalty-for-late-payment-of-tax-1.png) + +### Other penalty for offences + +Evasion of sales tax: + +- 1st offence - either or both + + - Fine + + - Minimum 10x Sales Tax Amount + + - Maximum 20x Sales Tax Amount + + - Imprisonment not exceeding 5 years + +- 2nd offence - either or both + + - Fine + + - Minimum 20x Sales Tax Amount + + - Maximum 40x Sales Tax Amount + + - Imprisonment not exceeding 7 years + +## Service Tax Legislation (SeTL) + +### Act (SeTL) + + 1. Service Tax 2018 + +### Regulations (SeTL) + + 1. Service Tax Regulations 2018 + + 2. Service Tax (Customs Ruling) Regulations 2018 + + 3. Service Tax (Compounding of Offences) Regulations 2018 + +### Order (SeTL) + + 1. Appointment of Date of Coming into Operation + + 2. Appointment of Effective Date for Charging and Levying of Service Tax + + 3. Service Tax (Imposition Of Tax For Taxable Service in Respect of Designated Areas and Special Areas) Order 2018 + + 4. Service Tax (Rates Of Tax) Order 2018 + +## Scope and Charge (SeTL) + +Service tax is charged on: + +- any provision of taxable services; + +- made in the course or furtherance of any business; + +- by a taxable person; and + +- In Malaysia + +Service tax is not chargeable on: + +- Imported services + +- Exported services + +## Service Tax Mechanism + +Overview of Service Tax flow chart:- + +![des-sst-service-tax-mechanism-1](../../../static/img/usage/gst-and-sst/sst/sst-service-tax-mechanism-1.png) + +## Meaning of Taxable Person (SeTL) + +A service provider who is liable to be registered or registered under the Service Tax Act 2018. The service provider provides taxable services in the course or furtherance of business in Malaysia. + +## Taxable Service + +Value of taxable service provided by a service provider for a period of 12 months that exceed a threshold of RM 500,000 is liable to be registered. Except the following taxable service group: + +- Food and Beverages (exceed RM 1,500,000) + +- Credit card / charge card (no threshold) + +![des-sst-taxable-services-1](../../../static/img/usage/gst-and-sst/sst/sst-taxable-services-1.png) + +![des-sst-taxable-services-2](../../../static/img/usage/gst-and-sst/sst/sst-taxable-services-2.png) + +![des-sst-taxable-services-3](../../../static/img/usage/gst-and-sst/sst/sst-taxable-services-3.png) + +![des-sst-taxable-services-4](../../../static/img/usage/gst-and-sst/sst/sst-taxable-services-4.png) + +## Rate of Services + +All taxable services are fixed charged at a rate of 6%, except the provision of credit card/charge card services are charged at a specific rate of tax of RM25 is imposed upon issuance of principal or supplementary card and every subsequent year or part thereof. + +## Service Tax Registration + +### Types of Registration list + +![des-sst-types-of-registration-list-1](../../../static/img/usage/gst-and-sst/sst/sst-types-of-registration-list-1.png) + +### Determination of Taxable Turnover + +Service provider should calculate the value of taxable services provided for a period of 12 months using the following method: + +1. Historical Method + + The total value of taxable supplies in that month and the 11 months immediately preceding the month. + +2. Future Method + + The total value of taxable supplies in that month and the 11 months immediately succeeding the month. + +### Transitional Registration (Service) + + Any person liable to register must do so before September 1, 2018. The registration commencement date is 1 September 2018. + + 1. Automatic Registration + + - Service provider who is a GST Registrant which have been identified and fulfilled the required criteria will be registered automatically as a registered person. + + 2. Person Not Registered Automatically + + - Service provider who is a GST Registered person that fulfilled the required criteria to be registered but was not registered by 1 September 2018 need to apply for registration within 30 days from the commencement date. + +## Contra System Facility + +Registered person is allowed to deduct service tax in his return for any cancellation and termination of services or any other reasons such as reducing premiums or discounts. + +## Special rules for specific areas + +### Treatment in Designated Area for Service (DA) + +![des-sst-special-rule-treatement-in-designated-area-1](../../../static/img/usage/gst-and-sst/sst/sst-special-rule-treatement-in-designated-area-1.png) + +:::note + +1. SA = Special Area, e.g. Free Zone (FZ), Licensed Warehouse, Licensed Manufacturing Warehouse (LMW) and Joint Development Area (JDA). + +2. PCA = Principal Customs Area + +::: + +### Treatment in Special Area for Service (SA) + +![des-sst-special-rule-treatement-in-special-area-1](../../../static/img/usage/gst-and-sst/sst/sst-special-rule-treatement-in-special-area-1.png) + +## Accounting + +### Issuance of Invoice + +- Mandatory for registered person who provides any taxable services.. + +- Hard copy or electronically. + +- Containing prescribed particulars. + +- Bahasa Melayu or English. + + **Prescribed particulars** are: + + 1. The invoice serial number; + + 2. The date of the invoice; + + 3. The name, address and identification number of the registered person (Service Tax Number); + + 4. The name and address of the person to whom the taxable service is provided; + + 5. Description of service provided; + + 6. Any discount offered; + + 7. For each description, distinguish the type of service and amount payable excluding tax; + + 8. The total amount payable excluding tax, the rate of tax and the total tax chargeable shown as a separate amount or total amount payable inclusive of total of tax chargeable; + + 9. Any amount expressed in a currency other than ringgit shall also be expressed in ringgit at the selling rate of exchange prevailing in Malaysia at the time of sale. + +### Credit Note & Debit Note + + Both credit note and debit note are allowed to issue by registered person. It shall contain the prescribed particular and make an adjustment in their SST-02 return. + +## Accounting Basis and Taxable Period + +### Accounting Basis + +Service Tax is based on payment basis and it is required to be accounted at the time when the payment has received. On the day following period of twelve months when any whole or part of the payment is not received from the date of the invoice for the taxable service provided. + +### Taxable Period + +Regular interval period where a taxable person accounts and remits service tax to Government. Default taxable period for the registered person to be bimonthly (2 months) period. + +Registered person may apply for taxable period other than the default taxable period. + +In summary, + +![des-sst-Accounting-basis-taxable-period-1](../../../static/img/usage/gst-and-sst/sst/sst-Accounting-basis-taxable-period-1.png) + +## Furnishing Service Tax (SST-02) Return & Payment of Tax + +Registered person has to declare service tax return every 2 months according to the taxable period. + +- Service Tax return has to be submitted not later than the last day of the following month after the taxable period ended. + +- Service Tax return has to be submitted regardless of whether there is any tax to be paid or not. + +- Service Tax return has to be submitted electronically or by cheque, bank draft and posted to SST Processing Centre. + +Payment for tax due and payable declared in SST-02. Failure to submit return is an offence. + +## SST-Tax Code + +Explain the importance and usage of SST Tax Code reflect to SST-02. + +### SST Tax Code + +SST tax code mapping to SST-02. + +![des-sst-introduction-taxcode-and-sst02-mapping-sales-1](../../../static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-sales-1.png) + +![des-sst-introduction-taxcode-and-sst02-mapping-service-1](../../../static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-service-1.png) + +### Sales Tax Code + +1) **Standard** + + | No | Tax Code | Description | Tax Rate | SST-02 | + |----|----------|------------------------------------------------------------------------|----------|----------| + | 01 | ST | Sales Tax 10% charged to the taxable goods based on accrual/billing basis | 10% | B1_8, B2_11B | + | 02 | ST5 | Sales Tax 5% charged to the taxable goods based on accrual/billing basis | 5% | B1_8, B2_11A | + +2) **Deemed Supply (Own Used/Disposed)** + + | No | Tax Code | Description | Tax Rate | SST-02 | + |----|----------|-----------------------------------------------------------------------------|----------|----------| + | 01 | SU | Goods Own Used/Disposed deemed taxable and charged at 10% based on accrual/billing basis | 10% | B1_9, B2_11B | + | 02 | SU5 | Goods Own Used/Disposed deemed taxable and charged at 5% based on accrual/billing basis | 5% | B1_9, B2_11A | + +3) **Sales - Exempted** + + | No | Tax Code | Description | Tax Rate | SST-02 | + |----|----------|-------------|----------|--------| + | 01 | STE | Sales Tax Exempted on goods as prescribed in the Sales Tax (Goods Exempted From Tax) Order 2018 | | | + | 02 | SE | Sales Tax Exempted to Export, Special Area (SA), e.g. Free Zone, LMW and Designated Area (DA), e.g. Langkawi, Tioman, Labuan | | D18_A | + | 03 | SEA | Sales Tax Exempted-Schedule A (Class of Person), e.g. Government, Local Authority Dept, etc. Detail refer to Schedule A in Sales Tax (Person Exempted From Payment Of Tax) Order 2018 | | D18_B1 | + | 04 | SEB | Sales Tax Exempted-Schedule B (Manufacturer of specific non-taxable goods), e.g. control products, medical. Detail refer to Schedule B in Sales Tax (Person Exempted From Payment Of Tax) Order 2018 | | D18_B2 | + | 05 | SEC1 | Sales Tax Exempted-Sch C (Item 1) on raw materials, components and packaging materials EXCLUDING PETROLEUM imported/purchased from a reg. manufacturer/licensed warehouse by any reg. manufacturer | | D18_B3 (i) | + | 06 | SEC2 | Sales Tax Exempted-Sch C (Item 2) on raw materials, components and packaging materials imported/purchased from a reg. manufacturer/licensed warehouse by any reg. manufacturer of PETROLEUM products | | D18_B3 (i) | + | 07 | SEC3 | Sales Tax Exempted-Sch C (Item 3) on raw materials, components and packaging materials EXCLUDING PETROLEUM imported/purchased from a reg. manufacturer by any agent on behalf of a reg. manufacturer | | D18_B3 (ii) | + | 08 | SEC4 | Sales Tax Exempted-Sch C (Item 4) on raw materials, components and packaging materials imported/purchased from a reg. manufacturer by any agent on behalf of a reg. manufacturer of PETROLEUM products | | D18_B3 (ii) | + | 09 | SEC5 | Sales Tax Exempted-Sch C (Item 5) on semi-finished taxable goods or finished taxable goods which are subsequently returned by a subcontractor to a reg. manufacturer after completion of subcontract work | | D18_B3 (iii) | + +4) **Purchase - Exempted** + + | No | Tax Code | Description | Tax Rate | SST-02 | + |----|----------|-------------|----------|--------| + | 01 | PEC1 | Purchase Tax Exempted-Sch C (Item 1) on raw materials, components and packaging materials EXCLUDING PETROLEUM imported/purchased from a reg. manufacturer/licensed warehouse by any reg. manufacturer | | E19 | + | 02 | PEC2 | Purchase Tax Exempted-Sch C (Item 2) on raw materials, components and packaging materials imported/purchased from a reg. manufacturer/licensed warehouse by any reg. manufacturer of PETROLEUM products | | E19 | + | 03 | PEC3 | Purchase Tax Exempted-Sch C (Item 3) on raw materials, components and packaging materials EXCLUDING PETROLEUM imported/purchased from a reg. manufacturer by any agent on behalf of a reg. manufacturer | | E20 | + | 04 | PEC4 | Purchase Tax Exempted-Sch C (Item 4) on raw materials, components and packaging materials imported/purchased from a reg. manufacturer by any agent on behalf of a reg. manufacturer of PETROLEUM products | | E20 | + | 05 | PEC5 | Purchase Tax Exempted-Sch C (Item 5) on semi-finished taxable goods or finished taxable goods which are subsequently returned by a subcontractor to a reg. manufacturer after completion of subcontract work | | E21 | + +### Service Tax Code + +1) **Standard** + + | No | Tax Code | Description | Tax Rate | SST-02 | + |----|----------|-------------|----------|--------| + | 01 | SV | Service Tax 6% charged to the taxable services based on payment basis | 6% | B1_10, B2_11C | + | 02 | SVA | Service Tax 6% charged to the taxable service based on accrual/billing basis. It is used in IMSV tax code to report in SST-02A | 6% | B1_10, B2_11C | + +2) **Deemed Supply (Own Used/Disposed)** + + | No | Tax Code | Description | Tax Rate | SST-02 | + |----|----------|-------------|----------|--------| + | 01 | SUV | Service Own Used charged at 6% on accrual/billing basis | 6% | B1_9, B2_11C | + +3) **Service Exempted** + + Applicable to same service provider under: + + 1) Group G to Group G (all except Employment and Guards protection service provider). + 2) Group I to Group I (ie. advertising service provider). + + | No | Tax Code | Description | Tax Rate | SST-02 | + |----|----------|-------------|----------|--------| + | 01 | SVE | Service Tax Exempted between same service providers in Group G (excluding item j and k) or in Group I item 8 only. Refer to Service Tax (Person Exempted From Payment of Tax) Order 2018 | | D18C | + +4) **Imported Service** + + 1) For non-Service Tax Registered must declare using **SST-02A**. + 2) For Service Tax Registered must declare using **SS-02**. + + | No | Tax Code | Description | Input Tax | Output Tax | SST-02 | SST-02A (for imported service) | + |----|----------|-------------|-----------|------------|--------|--------------------------------| + | 01 | IMSV | Imported Service Tax, any company in Malaysia who acquire the taxable service from company outside Malaysia. Non-SST & Sales Tax reg. must report in SST-02A. Service tax reg. remains report in SST-02 | PSV (6%) | SVA (6%) | B1_10 B2_11C | B10a | + | 02 | IMSVE | Imported Service Tax Exempted between same service providers in Group G (excluding item j and k) or in Group I item 8 only. Refer to Service Tax (Person Exempted From Payment of Tax) Order 2018 | PSVE | SVE | D18C | | + +## SST-Tariff Code + +- Tariff classification is a complex yet extremely important aspect of cross-border trading. +- Goods imported from or to Malaysia are classified by the Harmonized Tariff Schedule (HTS) or commonly referred to as HS Codes. +- The codes, created by World Customs Organization (WCO), categorize up to 5,000 commodity +- HS Codes are made of 6-digit numbers that are recognized internationally, though different countries can extend the numbers by two or four digits to define commodities at a more detailed level. +- [Click this link here](https://ezhs.customs.gov.my/) to search the tariff code list from Kastam system. + +### Quick Setup for Tariff Code + +1. Create the tariff code applicable to your product at [Maintain Tariff](../../usage/tools/guide#maintain-tariff). + + ![des-sst-quick-setup-for-tariff-code-1](../../../static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-1.jpg) + +2. Pick a tariff code for an items at [Maintain Stock Item](../../usage/stock/stock-guide#maintain-stock-item). + + ![des-sst-quick-setup-for-tariff-code-2](../../../static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-2.jpg) + +3. For exemption certificate case (under Schedule A, B, C), a tariff and tax code (SEA, SEB, SEC1, SEC2, SEC3, SEC4, SEC5) should set in [Maintain Customer](../../usage/customer/guide#maintain-customer) and [Maintain Supplier](../../usage/supplier/Setup#maintain-supplier) (Tariff code setting under Tax Tab). + + ![des-sst-quick-setup-for-tariff-code-3](../../../static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-3.jpg) + +## SST-Imported Service (SST-02A) + +### Imported Service Tax (IMSV) + +Purchase service from oversea by any companies in Malaysia and it is subject to **imported service tax 6%**. + +- for **Service Tax registered ONLY**, declare together with other service tax in SST-02 +- for **non-SST registered**, declare imported service in **SST-02A** +- for **Sales Tax registered ONLY**, declare imported service in **SST-02A** +- Enter at **Cash Book Entry (PV)** or at **Supplier/Purchase Invoice**. See the illustration below. +- use Tax code : **IMSV** + +![des-sst-importted-service-imported-service-tax-1](../../../static/img/usage/gst-and-sst/sst/sst-importted-service-imported-service-tax-1.jpg) + +### Imported Service Tax Exempted (IMSVE) + +Any company in Malaysia who acquires taxable services of Group G item (a), (b), (c), (d), (e), (f), (g), (h) and (i) from any company within the same group of companies outside Malaysia. It is **Exempted**. + +- Need to declare in SST-02 +- Enter at **Cash Book Entry (PV)** or at **Supplier/Purchase Invoice**. See the illustration below. +- use Tax code : **IMSVE** + +![des-sst-importted-service-imported-service-tax-exempted-1](../../../static/img/usage/gst-and-sst/sst/sst-importted-service-imported-service-tax-exempted-1.jpg) + +### How to get print SST-02A + +1. Go to **File | Company Profile**... +2. Make sure the **Service Tax No** field is **BLANK**. + + ![des-sst-importted-service-how-to-print-sst02a-1](../../../static/img/usage/gst-and-sst/sst/sst-importted-service-how-to-print-sst02a-1.jpg) + + :::note Note: + + For **Service Tax Registered company**, it is declare together with other service tax in SST-02 + + ::: + +3. Save it. +4. Logout and login again. +5. Go to menu : **SST/GST | Print SST-02A**... + + ![des-sst-importted-service-how-to-print-sst02a-2](../../../static/img/usage/gst-and-sst/sst/sst-importted-service-how-to-print-sst02a-2.jpg) + +## SST-Account for Pending Service Tax over 12 months + +Service Tax required to be accounted if on the day following period of 12 month when any whole or part of the payment is not received from the date of the invoice for the taxable service provided. + +![des-sst-account-for-pending-service-tax-over-12months-1](../../../static/img/usage/gst-and-sst/sst/sst-account-for-pending-service-tax-over-12months-1.jpg) + +### Journal Entry Adjustment + +#### [Invoice] Pending Service Tax To Be Paid + +1. For first time, create the following GL Account. + + ![des-sst-journal-entry-adjustment-1](../../../static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-1.jpg) + + | GL Acc | Description | Account Type | + |---------|--------------------------------------|-----------------| + | SST-PRE | SST - PENDING SERVICE TAX PREPAID | CURRENT ASSETS | + +2. Process SST Return, system will prompt the **Pending Service Tax > 12 months** if have found the outstanding service invoices has over 12 months. + +3. Follow the Service Tax rules, click Pay Pending Service Tax button. + + ![des-sst-journal-entry-adjustment-2](../../../static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-2.jpg) + +4. Right click on the grid column, select Print Grid. + + ![des-sst-journal-entry-adjustment-3](../../../static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-3.jpg) + +5. Print out the list of outstanding service invoices for record purpose. + + ![des-sst-journal-entry-adjustment-4](../../../static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-4.jpg) + +6. Post the journal entry and follow the double entry below to account the service tax pending over 12 months to be paid. + + ![des-sst-journal-entry-adjustment-5](../../../static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-5.jpg) + + | GL Code | GL Description | Tax | Local DR | Local CR | Tax Amount | Local DR (Tax) | Local CR (Tax) | + |---------|------------------------------------|-----|-----------|----------|------------|----------------|----------------| + | SST-PRE | SST - PENDING SERVICE TAX PREPAID | | 10,600.00 | | | 10,600.00 | | + | SST-PRE | SST - PENDING SERVICE TAX PREPAID | SVA | | 10,000.00| 600.00 | | 10,600.00 | + + :::note NOTE: + + For partial payment, should refer to **Outstanding Amount** instead of Local Amount. + + Active the tax code : SVA + 1. Go to **SST/GST | Maintain Tax**. + 2. Look for tax code: **SVA** or **SV**. + 3. Edit and tick **Active**. + 4. Save it. + + ::: + +7. Next, go to New SST Return. Click Process. +8. At this time, click **Continue SST-02**. + +#### [Payment] Recovery from Payment for Pending Service Tax Prepaid + +1. Under the **payment tab**, system will list out the prepayment service invoice which has been paid when process SST return. +2. If you have follow the Service Tax rules, click Pay Pending Service Tax button. + + ![des-sst-recovery-from-payment-1](../../../static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-1.jpg) + +3. Right click on the grid column, select Print Grid. +4. Print out the list of the prepayment service invoice which has been paid for record purpose. +5. Post the journal entry and follow the double entry below to recover the service has been paid. + + ![des-sst-recovery-from-payment-2](../../../static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-2.jpg) + + | GL Code | GL Description | Tax | Local DR | Local CR | Tax Amount | Local DR (Tax) | Local CR (Tax) | + |---------|-----------------------------------|-----|----------|----------|------------|----------------|----------------| + | SST-PRE | SST - PENDING SERVICE TAX PREPAID | SVA | 6,000.00 | | 360.00 | 6,360.00 | | + | SST-PRE | SST - PENDING SERVICE TAX PREPAID | | | 6,360.00 | | | 6,360.00 | + +6. Next, go to New SST Return. Click Process. +7. At this time, click Continue SST-02. + + ![des-sst-recovery-from-payment-3](../../../static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-3.jpg) + +## SST FAQ + +### 1.Can I Change the Service Tax Type to Accrual Basis? + +**Solution:** + +By Default System will use as Payment Basis for Service Tax Type +To change to Accrual Basis(i.e. Pay Kastam even no payment), Just Set as below + +![des-sstfaq-change-the-service-tax-type-to-accrual-basis-1](../../../static/img/usage/gst-and-sst/sst/sstfaq-change-the-service-tax-type-to-accrual-basis-1.jpg) + +### 2.Why does my SST-02 report preview show no value even though the screen display an amount? + +**Solution:** + +Make sure you have entered your **Service Tax** and/or **Sales Tax No.** in File | Company Profile + +### 3.Why does the tax code (ST5) used in my sales invoices not appear in SST-02, but it shows up in the SST-02 listing? + +**Solution:** + +Make sure you have entered your **Sales Tax no** instead of **Service Tax** no in File | Company Profile + +### 4.Why Some Service Tax Transaction not shown in SST-02 even the document is fully paid? + +**Solution:** + +Make sure you had select correct **Knock Off Date** in the Customer Payment + +![des-sstfaq-service-tax-transaction-not-shown-in-sst02-1](../../../static/img/usage/gst-and-sst/sst/sstfaq-service-tax-transaction-not-shown-in-sst02-1.jpg) + +### 5.Why does the service invoice that was knocked off (paid) in Sept 2018 not appear in SST-02 for the period Sept–Oct 2018? + +**Issue:** + +Knock-off tax date will follow the customer payment date if user has tick on an invoice. +Change the customer payment date (eg. from 29/05/2019 to 29/09/2018), the knock-off date will remains unchanged. + +![des-sstfaq-service-invoice-knockoff-not-appear-in-sst02-1](../../../static/img/usage/gst-and-sst/sst/sstfaq-service-invoice-knockoff-not-appear-in-sst02-1.jpg) + +**Solution:** + +Change the **Knock-off Tax Date** (follow the payment date) + +![des-sstfaq-service-invoice-knockoff-not-appear-in-sst02-2](../../../static/img/usage/gst-and-sst/sst/sstfaq-service-invoice-knockoff-not-appear-in-sst02-2.jpg) + +### 6.Can I mix sales tax and service tax in a single invoice? + +**Issue:** + +Can I mixed the sales and service tax code in single document? + +**Solution:** + +1. Customs officer has recommended the company should raise the invoice, debit note and credit note separately for sales and service invoice. +2. Indicate the sales and service tax registration no on the invoice letter head separately as well. +3. This is to ease the Customs audit operation purpose. + +Sales tax and service tax having different accounting basis as explained below. + +1. **SALES TAX** + - Billing / accrual basis + - Sales Tax required to be accounted at the time when the goods are sold, disposed or first used + +2. **SERVICE TAX** + - Payment basis + - Service Tax required to be accounted at the time when the payments is received. + - On the day following period of twelve month when any whole or part of the payment is not received from the date of the invoice for the taxable service provided + +### 7.What circumstances to use tax code SV and SVA for Credit Note? + +**Issue:** + +Service tax is based on payment basis. + +**Solution:** + +There will be 2 cases of service tax where credit note has taken in place: + +1. **Unpaid service tax** + + - Cancellation of service **before any payment**. + - use tax code: **SV** (follow the invoice tax code, eg. SV) + - system will **auto reverse the unpaid service tax amount** in the **SST - Deferred Tax (SST-203)**. + +2. **Paid service tax** + + - Cancellation of service **after payment and service tax has been paid** to RMCD. + - Adjustment tax deduction for refund of service tax approved by RMCD. + - use tax code: **SVA** + - system will reduce the service tax payable to RMCD + +### 8.What is Digital Service Tax + +New service tax effectively come into operation on **1 January 2020**. + +***Characteristics*** + +- delivered or subscribed over the **internet or other electronic network** +- delivered through **information technology medium** (human eye cannot see and touch) +- minimal or no human **intervention** (eg. automation, click to subscribe and consume) + +***Scope on Digital Service*** + +- Software, application & video games +- music, e-book and film +- advertisement and online platform +- search engine and social network (facebook) +- database and hosting (eg. website hosting, online data, file sharing, cloud storage) +- internet based telecommunication (eg. VOIP) +- Online training +- Subscription to online newspapers +- payment process services (paypal) + +***Taxable Person*** + +1. Foreign Service Provider (FSP) + + - any person who is **outside Malaysia providing** any digital service to a consumer directly + - any person who is **outside Malaysia operating an online platform** for buying and selling goods + - providing services (whether or not such person provides any digital services) who makes transactions for provision of digital services **on behalf of any person** + +2. Threshold exceeds RM500,000 (historical or future 12 months) + + **Accounting Basis** + + - Default is **Payment basis** (same to service tax) + - Accrual Basis (billing) must apply to DG upon registration + + **Exchange Rate** + + - Can use any exchange rate to calculate tax payable + + **Taxable Period** + + - Three months (quarterly) + +***Returns Form*** + +- Digital Service Return [DST-02](https://drive.google.com/file/d/1n2rrcnGrYms9RWki20Rg9vukzzRNtHll/view) + +***Exemption*** + +- No exemption announced + +***Claim Refund*** + +- Digital service tax overpaid allowed to claim refund. +- Need fill-in [JKDM-2](https://mysst.customs.gov.my/assets/document/SST%20Form/JKDM%20No.%202.pdf) + +### 9.What invoice format should I use for service tax exempted services? + +**Issue:** + +What invoice format can be use for service tax exempted + +**Solution:** + +1. Download the invoice format by click to [Sales Invoice 8 SST 1 (Exempted Taxable Service)](https://www.sql.com.my/webstore/templates/template-detail/?id=4769) +2. Go to **Tools | Report Designer**... +3. Click import the invoice format file. + +### 10.What is the double entry for service tax invoice and CN issued using SV tax code? + +**Issue:** + +How should the double entry be recorded for a service tax invoice and credit note issued under the SV tax code? + +**Solution:** + +1. **Full Service Tax Invoice issue** + + | GL Acc | Description | Tax | DR | CR | + |----------|-------------------|-----|--------|--------| + | 300-A0001| Customer ABC | | 1060.00| | + | 500-000 | Service Sales | SV | | 1000.00| + | SST-203 | SST - Deferred Tax| SV | | 60.00 | + +2. **Partial Payment** knock-off with invoice + + | GL Acc | Description | Tax | DR | CR | + |----------|--------------|-----|------|------| + | 330-000 | BANK | | 530.00| | + | 300-A0001| Customer ABC | | | 530.00| + + System auto reverse the SST-Deferred Tax after knock-off + + | GL Acc | Description | Tax | DR | CR | + |---------|-------------------|-----|------|------| + | SST-203 | SST - Deferred Tax| | 30.00| | + | SST-202 | SST - Service Tax | | | 30.00| + +3. Reduce/cancel the partly of the service amount. Issue CN using **tax code: SV** + + | GL Acc | Description | Tax | DR | CR | + |----------|----------------|-----|-------|-------| + | 500-000 | Service Sales | SV | 500.00| | + | SST-203 | SST - Deferred Tax | SV | 30.00 | | + | 300-A0001| Customer ABC | | | 530.00| + +Conclusion: + +SST Deferred Tax account `=` **ZERO** if the **Full Service Tax Invoice** (eg. SV only) outstanding is **ZERO**. +SST Deferred Tax account `<>` **ZERO** if the service tax invoice has **mixed tax type** (eg. ST, SV and empty tax code). diff --git a/docs/usage/inquiry.md b/docs/usage/inquiry.md new file mode 100644 index 00000000..ee471f4f --- /dev/null +++ b/docs/usage/inquiry.md @@ -0,0 +1,249 @@ +--- +sidebar_position: 12 +title: Inquiry +description: Inquiry guideline +slug: /usage/inquiry +tags: ["SQL Account", "Usage", "Inquiry"] +--- + +## Account Inquiry + +Quick inquiry into the ledger transactions for the General Ledger, Sales Ledger (Customer), and Purchase Ledger (Supplier). + +![account-inquiry](../../static/img/usage/inquiry/account-inquiry.jpg) + +### General Ledger + +1. Select the date range. + +2. Select a GL account code. + +3. Click on **Apply**. + +![general-ledger](../../static/img/usage/inquiry/general-ledger.jpg) + +### Sales Ledger (Customer) + +1. Select the date range. + +2. Select a Customer account code. + +3. Click on **Apply**. + +![sales-ledger](../../static/img/usage/inquiry/sales-ledger.jpg) + +### Purchase Ledger (Supplier) + +1. Select the date range. + +2. Select a Supplier account code. + +3. Click on **Apply**. + +![purchase-ledger](../../static/img/usage/inquiry/purchase-ledger.jpg) + +### Access Control in Account Inquiry + +*Tools | Maintain User...* + +1. You can set the access control for General, Sales and Purchase Ledger. + +2. Tick or untick Execute to: + +| Access Control | Explanation | +|----------------|--------------| +| Account Inquiry - Inquire G/L Account | Allows inquiry of G/L Account. | +| Account Inquiry - Inquire Customer Account | Allows inquiry of Customer Account (Sales Ledger). | +| Account Inquiry - Inquire Supplier Account | Allows inquiry of Supplier Account (Purchase Ledger). | +| Account Inquiry | Allows use of Account Inquiry feature. | + +![account-inquiry-access-control](../../static/img/usage/inquiry/account-inquiry-access-control.jpg) + +## Cash Flow Inquiry + +Quick inquiry the Cash Flow for all the **bank** and **cash** account types. + +![cash-flow-inquiry](../../static/img/usage/inquiry/cash-flow-inquiry.jpg) + +## Cash Flow Forecast + +1. It is a cash flow forecast based on the possibility to resolve into cash from **Trader Debtors (Customers)** and **Trade Creditors (Suppliers)**. + +2. Criteria to define for cash flow forecast are:- + + 1. Customer Due Documents + 2. PD Cheque Received + 3. Supplier Due Documents + 4. PD Cheques Issue + +:::info + 1. The Balance b/d is Total of all Payment Method as at From Date Selected -1. + 2. Example above is as at 05 Feb 2016 in GL Ledger +::: + +![cash-flow-forecast](../../static/img/usage/inquiry/cash-flow-forecast.jpg) + +### Summary + +1. You can select different **interval** to analyse the cash flow forecast. + +2. Interval selections are: + + 1. Daily + 2. Weekly + 3. Monthly + 4. Quarterly + 5. Half-Yearly + 6. Yearly + +![cash-flow-forecast-summary](../../static/img/usage/inquiry/cash-flow-forecast-summary.jpg) + +### Detail + +1. Highlight the **interval**. + + ![cash-flow-forecast-detail-1](../../static/img/usage/inquiry/cash-flow-forecast-detail-1.jpg) + +2. To check the details for the interval. Click on **Detail**. + + ![cash-flow-forecast-detail-2](../../static/img/usage/inquiry/cash-flow-forecast-detail-2.jpg) + +### Graph + +1. Highlight the **interval**. + + ![cash-flow-forecast-graph-1](../../static/img/usage/inquiry/cash-flow-forecast-graph-1.jpg) + +2. To view the graph for the interval. Click on **Graph**. + + ![cash-flow-forecast-graph-2](../../static/img/usage/inquiry/cash-flow-forecast-graph-2.jpg) + +## Customer Pricing Inquiry + +To inquire the item pricing for a customer. + +![customer-pricing-inquiry](../../static/img/usage/inquiry/customer-pricing-inquiry.jpg) + +### Customer Price Inquiry + +1. Select the **item code** to inquire the price. + + ![customer-price-inquiry-1](../../static/img/usage/inquiry/customer-price-inquiry-1.jpg) + +2. Select the **customer** to inquire the price. + + ![customer-price-inquiry-2](../../static/img/usage/inquiry/customer-price-inquiry-2.jpg) + +### Customer Profit Estimator + +You can enter the values (eg. quantity, UOM, Price Tag, unit price, discount, sales tax (GST) and ref.cost) to calculate the profit according to the cost of the item selected. + +![customer-profit-estimator](../../static/img/usage/inquiry/customer-profit-estimator.jpg) + +### Customer Price Book Reference + +To check the **reference price** in different UOM from **Maintain Stock Item**. + +![customer-price-book-reference](../../static/img/usage/inquiry/customer-price-book-reference.jpg) + +### Your SQL Sales Assistant + +Quick access to:- + 1. **Price History Inquiry** - Sales | Print Sales Price History... + 2. **Stock Status/Back Order** - Sales | Print Outstanding Sales Document Listing...(Outstanding Sales Order) + 3. **Cost of Stock in Hand** - Stock | Print Stock Month End Balance... + 4. **Customer Aging Details** - Customer | Print Customer Aging Report... + 5. **Sales & Collection Analysis** - Customer | Print Customer Sales & Collection Analysis... + +![sql-sales-assistant](../../static/img/usage/inquiry/sql-sales-assistant.jpg) + +## Supplier Pricing Inquiry + +To inquire the item pricing for a supplier. + +![supplier-pricing-inquiry](../../static/img/usage/inquiry/supplier-pricing-inquiry.jpg) + +### Supplier Price Inquiry + +1. Select the **item code** to inquire the purchase price. + + ![supplier-price-inquiry-1](../../static/img/usage/inquiry/supplier-price-inquiry-1.jpg) + +2. Select the **supplier** to inquire the purchase price. + + ![supplier-price-inquiry-2](../../static/img/usage/inquiry/supplier-price-inquiry-2.jpg) + +### Supplier Profit Estimator + +You can enter the values (eg. quantity, UOM, Price Tag, unit price, discount, sales tax (GST) and ref.cost) to calculate the profit according to the reference cost of the item selected. + +![supplier-profit-estimator](../../static/img/usage/inquiry/supplier-profit-estimator.jpg) + +### Supplier Price Book Reference + +To check the **reference cost** in different UOM from **Maintain Stock Item**. + +![supplier-price-book-reference](../../static/img/usage/inquiry/supplier-price-book-reference.jpg) + +### Your SQL Purchase Assistant + +Quick access to:- + 1. **Price History Inquiry** - Purchase | Print Purchase Price History... + 2. **Stock Status/Back Order** - Purchase | Print Outstanding Purchase Document Listing...(Outstanding Purchase Order) + 3. **Cost of Stock in Hand** - Stock | Print Stock Month End Balance... + 4. **Supplier Aging Details** - Supplier | Print Supplier Aging Report... + 5. **Purchase & Collection Analysis** - Supplier | Print Supplier Purchase & Payment Analysis... + +![sql-purchase-assistant](../../static/img/usage/inquiry/sql-purchase-assistant.jpg) + +## SQL Power Search + +*Inquiry | SQL Power Search* + +A powerful search with keywords in the company database. + +![sql-power-search](../../static/img/usage/inquiry/sql-power-search.jpg) + +### Find What + +**Change** the search conditions. + +![find-what](../../static/img/usage/inquiry/find-what.jpg) + +### Where + +1. Tick the modules to search. + + ![where-1](../../static/img/usage/inquiry/where-1.jpg) + +2. Click on **Advance** to expand more areas in search. + + ![where-2](../../static/img/usage/inquiry/where-2.jpg) + +3. Click on **Find**. + + ![where-3](../../static/img/usage/inquiry/where-3.jpg) + +### Example + +1. Let's try to search the words of **Apple** in the invoice. See the screenshot below. + + ![sql-search-example-1](../../static/img/usage/inquiry/sql-search-example-1.jpg) + +2. At SQL Power Search Engine, tick on **Invoice** in **Where** section. + + ![sql-search-example-2](../../static/img/usage/inquiry/sql-search-example-2.jpg) + +3. To ensure the search area cover the **More Description**. Click on **Advance**. See the screenshot below. + + ![sql-search-example-3](../../static/img/usage/inquiry/sql-search-example-3.jpg) + +4. Type the keyword **Apple** in **Find What**. + + ![sql-search-example-4](../../static/img/usage/inquiry/sql-search-example-4.jpg) + +5. Click on **Find** button. + +6. You can see the search result appear below. + + ![sql-search-example-5](../../static/img/usage/inquiry/sql-search-example-5.jpg) diff --git a/docs/usage/inventory.md b/docs/usage/inventory.md deleted file mode 100644 index c8e7f4cb..00000000 --- a/docs/usage/inventory.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -sidebar_position: 7 -title: Inventory -description: Stock management -slug: /usage/inventory -tags: ["SQL Account", "Usage", "Inventory", "Stock"] ---- - -## Stock Received - -Allows user to increase stock quantity without purchasing. It is normally used when you have assembled or manufactured finished goods. Just key-in the item code, quantity IN and cost that you want. - -1. **Stock** > **Stock Received** > **New**. - - ![68](../../static/img/getting-started/user-guide/67.png) - -## Stock Issue - -Allows user to **decrease stock quantity without selling**. It is normally used when you consume raw material during assembly or when manufacturing finished goods or even sometimes for internal usage. Just key-in the item code, quantity OUT and cost and you may also click on the Update Cost, then the system will auto-detect the actual costing base on your document date. - -1. **Stock** > **Stock Issue** > **New**. - - ![69](../../static/img/getting-started/user-guide/68.png) - -## Stock Adjustment / Stock Take - -:::success[INFO] -Check out our new [Stock Take App](https://www.sql.com.my/sqlstocktake/) -::: - -Allows user to key-in quantity in and quantity out from the system, just like a combination of stock received and stock issue. Normally used for stock take purposes. **(Stock > Stock Adjustment > New)** - -:::info -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=uEbCRAftQ4A&feature=youtu.be) -::: - -1. Click on **Stock** - -2. Choose **Print Stock Physical Worksheet** - -3. **Filter** by date, stock group or others **information** that you want to do for the stock take, please **make sure that you choose the correct location and batch if you have these two modules**. - - ![70](../../static/img/getting-started/user-guide/69.png) - -4. lick on Preview & choose your report format. - - ![71](../../static/img/getting-started/user-guide/70.png) - -5. **Print out the “Stock Take Sheet”** for stock keeper. - - The stock keeper should manually **fill in the actual quantity into the “physical qty” column**. - - ![72](../../static/img/getting-started/user-guide/71.png) - -6. After complete updating the stock take report by your stock-keeper, do your stock adjustment in system from **Stock** > **Stock Adjustment** > **and drag out Book Qty and Physical Qty**. - - ![73](../../static/img/getting-started/user-guide/72.png) - - ![74](../../static/img/getting-started/user-guide/73.png) - -7. Click on the first item in **Stock Physical Worksheet**, press on **Ctrl + A** on the keyboard to select all items. - - **Then Drag & Drop into Stock Adjustment**. - - ![75](../../static/img/getting-started/user-guide/74.png) - -8. Based on the stock keeper’s Stock Take Report, **fill in the actual physical quantity** in your warehouse into the Stock Adjustment **Physical Qty column**, the system will calculate the variance based on the Book Qty and apply a correction to the Qty column. - - :::note - - **Book Qty** = Quantity that is recorded in system. - - **Physical Qty** = Actual Quantity at your warehouse. - - **Qty** = Variance between Physical and Book Quantity, system will auto-adjust then update accordingly. (Physical Qty – Book Qty) - - ::: diff --git a/docs/usage/master-data.md b/docs/usage/master-data.md index 13dd7974..b50fbe2e 100644 --- a/docs/usage/master-data.md +++ b/docs/usage/master-data.md @@ -9,22 +9,22 @@ tags: ["SQL Account", "Usage"] ## General Ledger (Maintain Chart of Account) :::info -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=hsdpDJImya4&feature=youtu.be) +Watch the tutorial video here: [YouTube](https://www.youtube.com/watch?v=hsdpDJImya4&feature=youtu.be) ::: 1. Creating a New Account 1. Select **GL** | **Maintain Account** | Select category (e.g. Fixed Assets) | **New** - 2. Enter the **GL Code** and **Description** (alphanumeric characters are acceptable) +2. Enter the **GL Code** and **Description** (alphanumeric characters are acceptable). - 3. Check the **Special Account Type** if applicable, e.g. the account is belonging to Accumulated Deprn Account (Fixed Assets) +3. Check the **Special Account Type** if applicable, e.g., if the account belongs to the Accumulated Depreciation Account (Fixed Assets). 4. Click **OK**. Your new account is now created. - ![14](../../static/img/getting-started/user-guide/14.png) + ![new-account-code](../../static/img/usage/master-data/new-account-code.png) - ![15](../../static/img/getting-started/user-guide/15.png) + ![special-acc-type](../../static/img/usage/master-data/special-acc-type.png) 2. Creating a Sub Account @@ -32,34 +32,34 @@ Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=hsdpDJImya4 2. Follow the same steps from **2.1.1 Create New Account** - ![16](../../static/img/getting-started/user-guide/16.png) + ![sub-account](../../static/img/usage/master-data/sub-account.png) - You are allow to create an unlimited level of sub accounts. Just point to any account, and add a sub or sub-sub account to it. + You are allowed to create an unlimited number of sub-accounts. Point to any account and add a sub- or sub-sub-account. ## Maintain Customer :::info -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=qn0xmeHUZkk&feature=youtu.be) +Watch the tutorial video here: [YouTube](https://www.youtube.com/watch?v=qn0xmeHUZkk&feature=youtu.be) ::: -There are 4 main tabs under Maintain Customer, let’s create a new customer and look at each tab one by one. +There are four main tabs under Maintain Customer. Let's create a new customer and look at each tab one by one. ### Create New Customer 1. **Customer** | **Maintain Customer** | **New** -2. **Enter the customer’s name and other information accordingly**. +2. **Enter the customer’s name and other information as appropriate**. ### General (Maintenance) -1. You can categorize your customers into different groups, e.g. Category, agents, area - How do you create your new agent/ area? Refer to the step below: +1. You can categorize your customers into different groups (e.g., category, agents, area). + To create a new agent or area, refer to the steps below: - ![19](../../static/img/getting-started/user-guide/19.png) + ![maintain-agent](../../static/img/usage/master-data/maintain-agent.png) -2. You can also insert more than one billing / delivery addresses (unlimited) +2. You can also add multiple billing and delivery addresses (unlimited). -3. There are different options for viewing a customer aging and customer statement +3. There are different options for viewing customer aging and customer statements. :::note 1. **Customer Statement** @@ -71,47 +71,47 @@ There are 4 main tabs under Maintain Customer, let’s create a new customer and - Due Date: Based on after due date (terms) ::: - ![17](../../static/img/getting-started/user-guide/17.png) + ![maintain-customer-1](../../static/img/usage/master-data/maintain-customer-1.png) - ![18](../../static/img/getting-started/user-guide/18.png) + ![maintain-customer-2](../../static/img/usage/master-data/maintain-customer-2.png) ### Advance Credit Control (*Pro Package Inclusive) -![20](../../static/img/getting-started/user-guide/20.png) +![advance-credit-control](../../static/img/usage/master-data/advance-credit-control.png) -You can set the credit limit and overdue limit amounts as well as blocking a certain transaction entry for specific customers. What does the document include and for the following documents: Quotation(QT), Sales Order(SO), Delivery Order(DO), Invoice (IV), Cash Sales (CS) and Debit Note(DN) +You can set the credit limit and overdue limit amounts, and block certain transaction entries for specific customers. This applies to the following documents: Quotation (QT), Sales Order (SO), Delivery Order (DO), Invoice (IV), Cash Sales (CS), and Debit Note (DN). We can also set once exceed limit & overdue limit, -1. Unblock – No restrictions +1. Unblock – No restrictions. -2. Block – Blocked for all users +2. Block – Blocked for all users. -3. Override – Certain users which have access rights can key in their username & password to override. +3. Override – Certain users with access rights can enter their username and password to override. -4. Suspended – Blocked with suspended message +4. Suspended – Blocked with a suspended message. ### Tax -If the customer provides you with certificate exemption number, you may fill in part A & B as below. +If the customer provides a certificate exemption number, fill in parts A and B as shown below. -![21](../../static/img/getting-started/user-guide/21.png) +![tax-1](../../static/img/usage/master-data/tax-1.png) -![22](../../static/img/getting-started/user-guide/22.png) +![tax-2](../../static/img/usage/master-data/tax-2.png) ## Maintain Supplier -![23](../../static/img/getting-started/user-guide/23.png) +![maintain-supplier](../../static/img/usage/master-data/maintain-supplier.png) -**Maintain Supplier** it’s just a mirror of Maintain Customer, please refer to [Maintain Customer](#maintain-customer). +**Maintain Supplier** is a mirror of Maintain Customer; please refer to [Maintain Customer](#maintain-customer). -Additional features: GIRO (beta version) +Additional features: GIRO (beta version). -Please refer here to get more information on [GIRO module](http://www.sql.com.my/document/sqlacc_docs/PDF/13-05-GIRO_SupplierPayment.pdf) +Refer to the [GIRO module PDF](http://www.sql.com.my/document/sqlacc_docs/PDF/13-05-GIRO_SupplierPayment.pdf) for more information. ## Maintain Stock Group -Allows the user to set default account posting for the a particular group of items. +Allows the user to set default account posting for a particular group of items. :::info Watch tutorial video here: [Stock Maintain Stock Item](https://www.youtube.com/watch?v=o4Z3oyhdeq0&feature=youtu.be) @@ -119,11 +119,11 @@ Watch tutorial video here: [Stock Maintain Stock Item](https://www.youtube.com/w 1. **Stock** | **Maintain Stock Group** | **New** - ![24](../../static/img/getting-started/user-guide/24.png) + ![maintain-stock-grp](../../static/img/usage/master-data/maintain-stock-grp.png) -2. You can enter your **code** and **description**; you can also assign your **costing method** e.g. FIFO, Weighted Average & Fixed Cost. +2. You can enter your **code** and **description**. You can also assign your **costing method**, e.g., FIFO, Weighted Average, or Fixed Cost. -3. Assign the account accordingly to sales, cash sales, sales return, purchase, cash purchase and purchase return. +3. Assign the accounts accordingly for sales, cash sales, sales returns, purchases, cash purchases, and purchase returns. :::note In this case, you can create a different stock group for a different costing method, to apply on a different item code. @@ -131,7 +131,7 @@ Watch tutorial video here: [Stock Maintain Stock Item](https://www.youtube.com/w ## Maintain Stock Item -Allows user to maintain an item or service that you provide for your business. +Allows the user to maintain items or services provided by the business. :::info Watch tutorial video here: [Stock Maintain Stock Item](https://www.youtube.com/watch?v=o4Z3oyhdeq0&feature=youtu.be) @@ -139,15 +139,15 @@ Watch tutorial video here: [Stock Maintain Stock Item](https://www.youtube.com/w 1. **Stock** | **Maintain Stock Item** | **New** - ![25](../../static/img/getting-started/user-guide/25.png) + ![maintain-stock-item](../../static/img/usage/master-data/maintain-stock-item.png) 2. You can enter your **code** and **description**. 3. You can assign your item to a **group** (see 2.4 Maintain Stock Group to create a new group) -4. You can insert **Base UOM** as default / **smallest unit of measurement. Ref Cost and Ref Price** are used as **default purchase and sales price**. +4. You can set the **Base UOM** as the default/smallest unit of measurement. **Ref Cost** and **Ref Price** are used as the default purchase and sales prices. -5. We categorize **Reorder Level, Reorder Qty and Lead Time** as one group. The settings here allow you to pre-set all these details, so that if the stock quantity drops to the reorder level, report is generated as a reminder to reorder. +5. We group **Reorder Level, Reorder Qty, and Lead Time** together. These settings allow you to pre-set all details, so if the stock quantity drops to the reorder level a report is generated as a reminder to reorder. :::note **Reorder Level** = When stock balance drops to a certain level, system will be able to prompt you to re-order your stock @@ -156,24 +156,24 @@ Watch tutorial video here: [Stock Maintain Stock Item](https://www.youtube.com/w **Lead Time** = The number of days required for your stock item to arrive. - **Output Tax** = Default output tax code for an item (only need to define if different from the system default output tax in **Tools** | **Option** | **Customer**) + **Output Tax** = Default output tax code for an item (only needs to be defined if different from the system default output tax in **Tools** | **Option** | **Customer**) - **Input Tax** = Default input tax code for an item (only need to define if different from the system default output tax in **Tools** | **Option** | **Supplier**) + **Input Tax** = Default input tax code for an item (only needs to be defined if different from the system default input tax in **Tools** | **Option** | **Supplier**) - **If you pre-set Tax in Customer & Stock Item, system default will capture Maintain Customer Tax Code only follow by Stock Item** + **If you pre-set tax codes in both Customer and Stock Item, the system will use the Maintain Customer tax code first, followed by the Stock Item tax code.** ::: -6. You can set **MIN PRICE**, so that your sales personnel won’t sell below min price. +6. You can set **MIN PRICE**, so your sales personnel won’t sell below the minimum price. -7. **Multiple UOM purpose is useful for different packaging, as illustrated by the scenario below:** +7. **Multiple UOM is useful for different packaging, as illustrated by the scenario below:** - **Scenario A:** + **Scenario A:** - I am selling blue pens, blue pens haves different packaging, I can sell by pcs, by box or by carton. Now, I can pre-set them this way: + Suppose you sell blue pens that have different packaging. You can sell by pcs, box, or carton. You can pre-set them like this: - ![26](../../static/img/getting-started/user-guide/26.png) + ![maintain-stock-item-scenario](../../static/img/usage/master-data/maintain-stock-item-scenario.png) - As you can see above, I have different Units of Measurement (UOM) and different rates, + As shown above, there are different Units of Measurement (UOM) and different rates. :::note Base Rate = PCS = 1 diff --git a/docs/usage/myinvois/_category_.json b/docs/usage/myinvois/_category_.json index a6d8f61a..78f47937 100644 --- a/docs/usage/myinvois/_category_.json +++ b/docs/usage/myinvois/_category_.json @@ -1,6 +1,6 @@ { "label": "E-Invoice (MyInvois)", - "position": 11, + "position": 14, "link": { "type": "generated-index", "description": "E-Invoice onboarding and usage guide" diff --git a/docs/usage/myinvois/einvoice-operation.md b/docs/usage/myinvois/einvoice-operation.md index 91036272..8ca810b5 100644 --- a/docs/usage/myinvois/einvoice-operation.md +++ b/docs/usage/myinvois/einvoice-operation.md @@ -8,7 +8,7 @@ tags: ["SQL Account", "Usage", "MyInvois", "E-Invoice", "Submission"] ## Submission -In the E-Invoice system, there are few types of documents that can be submitted. The table below shows how each document type in SQL Account is mapped to its corresponding E-Invoice document type. Refer to each section for more detailed information on the specific document types. +In the E-Invoice system, there are a few types of documents that can be submitted. The table below shows how each document type in SQL Account is mapped to its corresponding E-Invoice document type. Refer to each section for more detailed information on the specific document types. | SQL Account Document Type | E-Invoice Document Type | | ------------------------------------------------------------- | --------------------------------- | @@ -27,7 +27,7 @@ In the E-Invoice system, there are few types of documents that can be submitted. 1. Click on **MyInvois** > **Submit E-Invoice** - ![sales-invoice-submit-eiv](../../../static/img/myinvois/einvoice/sales-invoice-submit-eiv.png) + ![sales-invoice-submit-eiv](../../../static/img/usage/myinvois/einvoice/sales-invoice-submit-eiv.png) 2. If the submission is valid, you will see the screen below, where you can see the validated Invoice info from LHDN directly. @@ -35,7 +35,7 @@ In the E-Invoice system, there are few types of documents that can be submitted. Ensure that all required fields are correctly filled before submission to avoid errors. If the submission is invalid, you will need to correct the issues and resubmit. ::: - ![sales-invoice-valid](../../../static/img/myinvois/einvoice/sales-invoice-valid.png) + ![sales-invoice-valid](../../../static/img/usage/myinvois/einvoice/sales-invoice-valid.png) ### Batch Submission @@ -43,47 +43,47 @@ In the scenario where you already issued a lot of invoices but yet to submit E-I 1. Click on **MyInvois** > **Batch Submit E-Invoice** - ![batch-submission-button](../../../static/img/myinvois/einvoice/batch-submission-button.png) + ![batch-submission-button](../../../static/img/usage/myinvois/einvoice/batch-submission-button.png) 2. Apply the desired date range and untick any invoices that you do not wish to submit yet, then proceed to **Submit**. - ![batch-submission-filter](../../../static/img/myinvois/einvoice/batch-submission-filter.png) + ![batch-submission-filter](../../../static/img/usage/myinvois/einvoice/batch-submission-filter.png) 3. Refer to **Status** column for each E-Invoice status. If there's any errors, go to the specific invoice and update the incorrect details then retry submission again. - ![batch-submission-status](../../../static/img/myinvois/einvoice/batch-submission-status.png) + ![batch-submission-status](../../../static/img/usage/myinvois/einvoice/batch-submission-status.png) 4. Go back to browse screen, click **Refresh** to see the updated status. - ![batch-submission-refresh](../../../static/img/myinvois/einvoice/batch-submission-refresh.png) + ![batch-submission-refresh](../../../static/img/usage/myinvois/einvoice/batch-submission-refresh.png) ### Resolving Submitting Status -Submitting status is not a common status you will encounter. It will only stuck at submitting status during the event SQL Account fails to receive response from MyInvois Portal when the document may or may not be submitted. This mechanism is to **prevent double submission**. +Submitting status is not a common status you will encounter. It will only be stuck at submitting status during the event SQL Account fails to receive response from MyInvois Portal when the document may or may not be submitted. This mechanism is to **prevent double submission**. -Below show the icon of submitting status, it is a **red** submitted icon. +Below show the icon for submitting status, it is a **red** submitted icon. - ![submitting-status-detail](../../../static/img/myinvois/einvoice/submitting-status-detail.png) + ![submitting-status-detail](../../../static/img/usage/myinvois/einvoice/submitting-status-detail.png) - ![submitting-status-browse](../../../static/img/myinvois/einvoice/submitting-status-browse.png) + ![submitting-status-browse](../../../static/img/usage/myinvois/einvoice/submitting-status-browse.png) There are 2 way to resolve submitting status. - Using [refresh status (Single Document)](#refresh-status-single-document). - Using [batch refresh status](#batch-refresh-status). -1. After refresh status is clicked, SQL Account will automatically check if the document was submitted successfully to MyInvois Portal. In the event that: +1. After refresh status is clicked, SQL Account will automatically check if the document was submitted successfully to the MyInvois Portal. In the event that: 1. Document is **successfully found** in MyInvois Portal. Confirmation dialog will be prompted. (1) show the current document number that is being resolved. Select the correct document and click **OK** (2) to complete resolving submitting status. - ![submitting-status-resolving](../../../static/img/myinvois/einvoice/submitting-status-resolving.png) + ![submitting-status-resolving](../../../static/img/usage/myinvois/einvoice/submitting-status-resolving.png) 2. Document is **not found** in MyInvois Portal. Action dialog will be prompted. - ![submitting-status-resolving-error](../../../static/img/myinvois/einvoice/submitting-status-resolving-error.png) + ![submitting-status-resolving-error](../../../static/img/usage/myinvois/einvoice/submitting-status-resolving-error.png) :::warning - Sometimes it take a long time for the submitted document to appear in MyInvois Portal. Please ensure it has not been submitted before Reset E-Invoice status to avoid double submission. + Sometimes it take a long time for the submitted document to appear in the MyInvois Portal. Please ensure it has not been submitted before Reset E-Invoice status to avoid double submission. ::: - Click **Search again** to retry find from MyInvois Portal again. @@ -103,17 +103,17 @@ This ensures that the invoice can be successfully submitted at a later stage. 1. After issuing an invoice, click **MyInvois** > **Test E-Invoice Validation** - ![test-einvoice-validation](../../../static/img/myinvois/einvoice/test-einvoice-validation-button.png) + ![test-einvoice-validation](../../../static/img/usage/myinvois/einvoice/test-einvoice-validation-button.png) -2. If there's some missing data, error list or dialog will be shown, you can update the incorrect data and try validate again. +2. If there's some missing data, an error list or dialog will be shown, you can update the incorrect data and try validate again. Example error dialog: - ![test-einvoice-error](../../../static/img/myinvois/einvoice/test-einvoice-validation-error.png) + ![test-einvoice-error](../../../static/img/usage/myinvois/einvoice/test-einvoice-validation-error.png) 3. If the validation is successful, you will see the following confirmation screen: - ![test-einvoice-result](../../../static/img/myinvois/einvoice/test-einvoice-validation-result.png) + ![test-einvoice-result](../../../static/img/usage/myinvois/einvoice/test-einvoice-validation-result.png) ## Consolidate @@ -123,22 +123,22 @@ However, you are required to aggregate these transactions monthly and submit a c 1. Click on **MyInvois** > **Consolidate E-Invoice** - ![consolidate-button](../../../static/img/myinvois/einvoice/consolidate-button.png) + ![consolidate-button](../../../static/img/usage/myinvois/einvoice/consolidate-button.png) 2. Select the documents to consolidate: 1. Choose the desired date range 2. Tick **Include unsubmitted E-Invoices** if you want to include invoices with **E-Invoice** submission type. Refer to [Step 4](e-invoice#sales-invoice--cash-sales) 3. Click **Apply** - ![consolidate-filter](../../../static/img/myinvois/einvoice/consolidate-filter.png) + ![consolidate-filter](../../../static/img/usage/myinvois/einvoice/consolidate-filter.png) 3. Review the aggregated invoice details and click **Submit** - ![consolidate-review](../../../static/img/myinvois/einvoice/consolidate-review.png) + ![consolidate-review](../../../static/img/usage/myinvois/einvoice/consolidate-review.png) 4. If the consolidated E-Invoice is submitted successfully, you will see the following confirmation screen: - ![consolidate-success](../../../static/img/myinvois/einvoice/consolidate-success.png) + ![consolidate-success](../../../static/img/usage/myinvois/einvoice/consolidate-success.png) ## Cancellation @@ -153,21 +153,21 @@ To cancel a submitted e-invoice: 1. Go to **MyInvois** > **Cancel Validated E-Invoice**. - ![sales-invoice-cancel-button](../../../static/img/myinvois/einvoice/sales-invoice-cancel-button.png) + ![sales-invoice-cancel-button](../../../static/img/usage/myinvois/einvoice/sales-invoice-cancel-button.png) 2. Enter the reason for cancellation then Click **Initiate Cancellation**. To dismiss the dialog, Click **Keep Document**. - ![sales-invoice-cancel-reason](../../../static/img/myinvois/einvoice/sales-invoice-cancel-reason.png) + ![sales-invoice-cancel-reason](../../../static/img/usage/myinvois/einvoice/sales-invoice-cancel-reason.png) 3. To verify the latest status, go to **MyInvois** > **Check E-Invoice Status**. - ![sales-invoice-cancelled](../../../static/img/myinvois/einvoice/sales-invoice-cancelled.png) + ![sales-invoice-cancelled](../../../static/img/usage/myinvois/einvoice/sales-invoice-cancelled.png) ## Report Preview the report and you can see the E-Invoice validation QR code is embedded in the invoice. -![sales-invoice-preview](../../../static/img/myinvois/einvoice/sales-invoice-preview.png) +![sales-invoice-preview](../../../static/img/usage/myinvois/einvoice/sales-invoice-preview.png) ## Refresh Status @@ -177,17 +177,17 @@ You can easily check the latest status of an invoice in SQL Account to ensure it 1. Click on **MyInvois** > **Check E-Invoice Status** (1) or **Icon** (2). - ![sales-invoice-refresh-status-button](../../../static/img/myinvois/einvoice/sales-invoice-refresh-status-button.png) + ![sales-invoice-refresh-status-button](../../../static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-button.png) 2. You will be able to see the current status of the submitted invoice, along with the QR code and a validation page. - ![sales-invoice-refresh-status-valid](../../../static/img/myinvois/einvoice/sales-invoice-refresh-status-valid.png) + ![sales-invoice-refresh-status-valid](../../../static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-valid.png) :::info[NOTE] If the invoice status is marked as invalid, a list of errors will be displayed. You can use this information to correct the invoice and resubmit it. ::: - ![sales-invoice-refresh-status-invalid](../../../static/img/myinvois/einvoice/sales-invoice-refresh-status-invalid.png) + ![sales-invoice-refresh-status-invalid](../../../static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-invalid.png) ### Batch Refresh Status @@ -204,29 +204,29 @@ To ensure that you are viewing the most up-to-date status of your E-Invoices, fo This process will retrieve the latest status for all submitted documents, ensuring that your records are accurate and up to date. - ![batch-refresh-status](../../../static/img/myinvois/einvoice/batch-refresh-status.png) + ![batch-refresh-status](../../../static/img/usage/myinvois/einvoice/batch-refresh-status.png) ## Submission Log -You can view all past submission and cancellation log of an invoice. +You can view all past submission and cancellation logs of an invoice. 1. Click on **MyInvois** > **MyInvois Log** - ![sales-invoice-log-button](../../../static/img/myinvois/einvoice/sales-invoice-log-button.png) + ![sales-invoice-log-button](../../../static/img/usage/myinvois/einvoice/sales-invoice-log-button.png) - ![sales-invoice-log](../../../static/img/myinvois/einvoice/sales-invoice-log.png) + ![sales-invoice-log](../../../static/img/usage/myinvois/einvoice/sales-invoice-log.png) ## Transaction -MyInvois Transaction is a feature that will list all MyInvois documents. +MyInvois Transaction is a feature that list all MyInvois documents. -You can access MyInvois Transaction from cloud category in menu bar. +You can access MyInvois Transaction from cloud category in the menu bar. -![myinvois-trans-location](../../../static/img/myinvois/einvoice/myinvois-trans-location.png) +![myinvois-trans-location](../../../static/img/usage/myinvois/einvoice/myinvois-trans-location.png) Below show the MyInvois Transaction form with 3 tabs. -![myinvois-trans-overview](../../../static/img/myinvois/einvoice/myinvois-trans-overview.png) +![myinvois-trans-overview](../../../static/img/usage/myinvois/einvoice/myinvois-trans-overview.png) 1. All - List all MyInvois documents. 2. Submitted - List MyInvois documents that you submitted. @@ -236,20 +236,20 @@ MyInvois Transaction feature: 1. ### Sync MyInvois documents - ![myinvois-trans-sync](../../../static/img/myinvois/einvoice/myinvois-trans-sync.png) + ![myinvois-trans-sync](../../../static/img/usage/myinvois/einvoice/myinvois-trans-sync.png) - - SQL Account will help sync MyInvois documents from MyInvois portal in background when **MyInvois Transaction** or [**Import**](#import) form is opened. + - SQL Account will help sync MyInvois documents from the MyInvois portal in background when **MyInvois Transaction** or [**Import**](#import) form is opened. - There are 2 kinds of sync task: - **Loading all documents** - Sync all MyInvois documents starting from the latest and going back to 1 Aug 2024 for first time only, it may takes a long time to complete. - **Syncing recent documents** - Sync recent documents only. - After sync task is completed, it will show **Last Sync**. - SQL Account will resync after 30 minutes or you can force resync instantly by clicking resync button. - ![myinvois-trans-resync](../../../static/img/myinvois/einvoice/myinvois-trans-resync.png) + ![myinvois-trans-resync](../../../static/img/usage/myinvois/einvoice/myinvois-trans-resync.png) - - Click refresh button to query MyInvois documents synced from MyInvois portal into your database. + - Click refresh button to query MyInvois documents synced from the MyInvois portal into your database. - ![myinvois-trans-refresh](../../../static/img/myinvois/einvoice/myinvois-trans-refresh.png) + ![myinvois-trans-refresh](../../../static/img/usage/myinvois/einvoice/myinvois-trans-refresh.png) :::info[NOTE] You may leave MyInvois Transaction or Import form open in the background to sync documents as you carry on with other tasks. @@ -259,9 +259,9 @@ MyInvois Transaction feature: You can find the **Invoice state** column in field chooser. - ![myinvois-trans-state](../../../static/img/myinvois/einvoice/myinvois-trans-state.png) + ![myinvois-trans-state](../../../static/img/usage/myinvois/einvoice/myinvois-trans-state.png) - There are 3 Invoice state: + There are 3 Invoice states: - **None** - The document has no issues. - **Missing** (Highlighted in **red** for submitted documents) - The document exists in MyInvois portal, but does not exists in your accounting document entry. @@ -273,13 +273,13 @@ MyInvois Transaction feature: 3. ### Cancel / Reject - - Click cancel to initiate document cancellation on submitted document. + - Click cancel to initiate document cancellation on a submitted document. - ![myinvois-trans-cancel](../../../static/img/myinvois/einvoice/myinvois-trans-cancel.png) + ![myinvois-trans-cancel](../../../static/img/usage/myinvois/einvoice/myinvois-trans-cancel.png) - Click reject to inititate document rejection on received document - ![myinvois-trans-reject](../../../static/img/myinvois/einvoice/myinvois-trans-reject.png) + ![myinvois-trans-reject](../../../static/img/usage/myinvois/einvoice/myinvois-trans-reject.png) :::info[NOTE] You can batch cancel or reject by selecting multiple documents. @@ -289,7 +289,7 @@ MyInvois Transaction feature: Click the **print / preview** to print report using field value from MyInvois document. - ![myinvois-trans-print](../../../static/img/myinvois/einvoice/myinvois-trans-print.png) + ![myinvois-trans-print](../../../static/img/usage/myinvois/einvoice/myinvois-trans-print.png) ## Import @@ -315,28 +315,28 @@ To ensure proper import, it's important to understand how the document types in ### Batch Import -You can view all received documents and batch import into SQL Account. +You can view all received documents and batch import them into SQL Account. 1. Click on **MyInvois** > **Batch import E-Invoice** - ![purchase-invoice-batch-import-button](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-button.png) + ![purchase-invoice-batch-import-button](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-button.png) - ![purchase-invoice-batch-import-form](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-form.png) + ![purchase-invoice-batch-import-form](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form.png) -2. Opening Import form will also start [Sync MyInvois documents](#sync-myinvois-documents). The first sync may take longer as it syncs documents from latest to oldest. Please wait if you need to import older documents. +2. Opening Import form will also start [Sync MyInvois documents](#sync-myinvois-documents). The first sync may take longer as it syncs documents from the latest to the oldest. Please wait if you need to import older documents. - ![purchase-invoice-batch-import-sync](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-sync.png) + ![purchase-invoice-batch-import-sync](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-sync.png) 3. Choose the desired date range and click the **Apply** to query documents already synced to your database. Unsynced documents will not appear. - ![purchase-invoice-batch-import-form-daterange](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-form-daterange.png) + ![purchase-invoice-batch-import-form-daterange](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-daterange.png) 4. There are two tables inside the form: - The upper table will display the list of E-Invoice documents your company has received - The lower table will show the item details for the document you have selected - ![purchase-invoice-batch-import-form-apply](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-form-apply.png) + ![purchase-invoice-batch-import-form-apply](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-apply.png) 5. Each document will display a status in the **Status** column. Below is the description and import action of each status: @@ -356,21 +356,21 @@ You can view all received documents and batch import into SQL Account. - Same **TIN** (prioritized) - Same **ID Number** or similar **Company Name** - ![purchase-invoice-batch-import-form-select-supplier](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-form-select-supplier.png) + ![purchase-invoice-batch-import-form-select-supplier](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-select-supplier.png) 7. A tax code is required for an item if the tax amount is greater than 0 - ![purchase-invoice-batch-import-form-select-tax](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-form-select-tax.png) + ![purchase-invoice-batch-import-form-select-tax](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-select-tax.png) 8. You may click on the **Import** button to proceed with the import - ![purchase-invoice-batch-import](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import.png) + ![purchase-invoice-batch-import](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import.png) 9. A message dialog will indicate success or display an error, if any - ![purchase-invoice-batch-import-success](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-success.png) + ![purchase-invoice-batch-import-success](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-success.png) - ![purchase-invoice-batch-import-error](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-error.png) + ![purchase-invoice-batch-import-error](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-error.png) ### Linking @@ -378,11 +378,11 @@ You can view and link the received E-Invoice documents associated with the TIN o 1. Click on **🔍** of MyInvois UUID field in more panel - ![purchase-invoice-linking](../../../static/img/myinvois/einvoice/purchase-invoice-linking.png) + ![purchase-invoice-linking](../../../static/img/usage/myinvois/einvoice/purchase-invoice-linking.png) 2. The form will display only documents related to the same TIN as the selected record - ![purchase-invoice-linking-form](../../../static/img/myinvois/einvoice/purchase-invoice-linking-form.png) + ![purchase-invoice-linking-form](../../../static/img/usage/myinvois/einvoice/purchase-invoice-linking-form.png) 3. Select the appropriate document and click on the **Update** button to link it @@ -396,7 +396,7 @@ To create or update a customer or supplier from the import form, follow these st If the Customer/Supplier Code has value, SQL Account will update the existing record. If it is empty, a new customer/supplier will be created. ::: - ![purchase-invoice-batch-import-update-supplier](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-update-supplier.png) + ![purchase-invoice-batch-import-update-supplier](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-update-supplier.png) 2. A comparison view will appear showing fields from the existing record in Maintain Customer/Supplier and the E-Invoice document @@ -406,7 +406,7 @@ To create or update a customer or supplier from the import form, follow these st - If both values (from E-Invoice and existing record) are identical, the cell will be merged ::: - ![purchase-invoice-batch-import-supplier-form](../../../static/img/myinvois/einvoice/purchase-invoice-batch-import-supplier-form.png) + ![purchase-invoice-batch-import-supplier-form](../../../static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-supplier-form.png) 3. Click the **Create** or **Update** button to apply the changes to the customer or supplier record @@ -420,11 +420,11 @@ To reject a received e-invoice: 1. Go to **MyInvois** > **Reject Validated E-Invoice**. - ![purchase-invoice-reject-button](../../../static/img/myinvois/einvoice/purchase-invoice-reject-button.png) + ![purchase-invoice-reject-button](../../../static/img/usage/myinvois/einvoice/purchase-invoice-reject-button.png) 2. Enter the reason for rejection then click **Initiate Rejection**. To dismiss the dialog, Click **Keep Document**. - ![purchase-invoice-reject-reason](../../../static/img/myinvois/einvoice/purchase-invoice-reject-reason.png) + ![purchase-invoice-reject-reason](../../../static/img/usage/myinvois/einvoice/purchase-invoice-reject-reason.png) ## Share PDF (Experimental) @@ -432,17 +432,17 @@ You can share invoice PDF to SQL buyer. 1. Click on **MyInvois** > **Check E-Invoice Status** - ![sales-invoice-refresh-status-button](../../../static/img/myinvois/einvoice/sales-invoice-refresh-status-button.png) + ![sales-invoice-refresh-status-button](../../../static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-button.png) 2. Click on **Share** to share the invoice PDF with SQL buyer - ![sales-invoice-share-pdf-button](../../../static/img/myinvois/einvoice/sales-invoice-share-pdf-button.png) + ![sales-invoice-share-pdf-button](../../../static/img/usage/myinvois/einvoice/sales-invoice-share-pdf-button.png) 3. Continue to choose the report format to share with SQL buyer - ![sales-invoice-share-pdf-select-report](../../../static/img/myinvois/einvoice/sales-invoice-share-pdf-select-report.png) + ![sales-invoice-share-pdf-select-report](../../../static/img/usage/myinvois/einvoice/sales-invoice-share-pdf-select-report.png) - ![sales-invoice-share-pdf-success](../../../static/img/myinvois/einvoice/sales-invoice-share-pdf-success.png) + ![sales-invoice-share-pdf-success](../../../static/img/usage/myinvois/einvoice/sales-invoice-share-pdf-success.png) ## Download PDF (Experimental) @@ -451,12 +451,12 @@ You can download the shared invoice PDF from SQL supplier. 1. Click on **MyInvois** > **Download PDF from SQL Supplier (Experimental)** :::info[NOTE] - The option will be enabled if the supplier uploaded the PDF + The option will be enabled if the supplier has uploaded the PDF ::: - ![purchase-invoice-download-pdf-button](../../../static/img/myinvois/einvoice/purchase-invoice-download-pdf-button.png) + ![purchase-invoice-download-pdf-button](../../../static/img/usage/myinvois/einvoice/purchase-invoice-download-pdf-button.png) - ![purchase-invoice-download-pdf](../../../static/img/myinvois/einvoice/purchase-invoice-download-pdf.png) + ![purchase-invoice-download-pdf](../../../static/img/usage/myinvois/einvoice/purchase-invoice-download-pdf.png) ## E-Invoice Request @@ -472,11 +472,11 @@ To create E-Invoice Request that allows buyers to fill in their personal or comp 1. Click on **MyInvois** > **E-Invoice Request** in detail mode - ![create-request](../../../static/img/myinvois/einvoice-request/create-request.png) + ![create-request](../../../static/img/usage/myinvois/einvoice-request/create-request.png) 2. Select the desired report from the report list - ![report-list](../../../static/img/myinvois/einvoice-request/report-list.png) + ![report-list](../../../static/img/usage/myinvois/einvoice-request/report-list.png) 3. Share the report with the buyer @@ -488,9 +488,9 @@ To create E-Invoice Request that allows buyers to fill in their personal or comp When clicked, the icon will open the link shared with the buyer ::: - ![hourglass](../../../static/img/myinvois/einvoice-request/hourglass.png) + ![hourglass](../../../static/img/usage/myinvois/einvoice-request/hourglass.png) - ![eivrequest-form-pending](../../../static/img/myinvois/einvoice-request/eivrequest-form-pending.png) + ![eivrequest-form-pending](../../../static/img/usage/myinvois/einvoice-request/eivrequest-form-pending.png) 6. A filled hourglass icon indicates that the buyer has completed and submitted the required information for E-Invoice @@ -498,9 +498,9 @@ To create E-Invoice Request that allows buyers to fill in their personal or comp When clicked, the icon updates the invoice with the submitted details and opens the link shared with the buyer ::: - ![filled-hourglass](../../../static/img/myinvois/einvoice-request/filled-hourglass.png) + ![filled-hourglass](../../../static/img/usage/myinvois/einvoice-request/filled-hourglass.png) - ![eivrequest-form-valid](../../../static/img/myinvois/einvoice-request/eivrequest-form-valid.png) + ![eivrequest-form-valid](../../../static/img/usage/myinvois/einvoice-request/eivrequest-form-valid.png) ### Cancel E-Invoice Request @@ -508,7 +508,7 @@ To cancel the E-Invoice Request and prevent the buyer from submitting informatio 1. Click on **MyInvois** > **Cancel E-Invoice Request** in detail mode - ![cancel-request](../../../static/img/myinvois/einvoice-request/cancel-request.png) + ![cancel-request](../../../static/img/usage/myinvois/einvoice-request/cancel-request.png) ### Refresh E-Invoice Request status @@ -516,11 +516,11 @@ To check if the buyer has submitted information for E-Invoice and update the inv 1. Click on **MyInvois** > **Refresh E-Invoice Request status** in detail mode - ![refresh-status](../../../static/img/myinvois/einvoice-request/refresh-status.png) + ![refresh-status](../../../static/img/usage/myinvois/einvoice-request/refresh-status.png) 2. If the buyer has submitted the required information, the status icon will change to "Valid" and the invoice will be updated with the submitted details - ![refresh-status-valid](../../../static/img/myinvois/einvoice-request/refresh-status-valid.png) + ![refresh-status-valid](../../../static/img/usage/myinvois/einvoice-request/refresh-status-valid.png) ### Batch Refresh E-Invoice Request status @@ -528,11 +528,11 @@ To check if buyers have submitted information for E-Invoice and update the statu 1. Click on **MyInvois** > **Batch Refresh E-Invoice Request status** in browse mode - ![batch-refresh-status](../../../static/img/myinvois/einvoice-request/batch-refresh-status.png) + ![batch-refresh-status](../../../static/img/usage/myinvois/einvoice-request/batch-refresh-status.png) 2. A progress dialog will appear and retrieve the latest status for all invoices with E-Invoice Request - ![batch-refresh-status-progress](../../../static/img/myinvois/einvoice-request/batch-refresh-status-progress.png) + ![batch-refresh-status-progress](../../../static/img/usage/myinvois/einvoice-request/batch-refresh-status-progress.png) ### Batch Submit E-Invoice & Consolidate E-Invoice @@ -541,12 +541,12 @@ When selected invoices include those with E-Invoice Request (Hourglass icon), th - Refresh - Verify that the selected invoices have been submitted for E-Invoice by the buyers and update the information - Cancel - Cancel the E-Invoice Request for the selected invoices to prevent buyers from submitting information for E-Invoice - ![batch-submit](../../../static/img/myinvois/einvoice-request/batch-submit.png) + ![batch-submit](../../../static/img/usage/myinvois/einvoice-request/batch-submit.png) :::info[NOTE] - You may click the Valid icon to perform refresh status + You may click the Valid icon to perform refresh the status ::: - ![batch-submit-valid](../../../static/img/myinvois/einvoice-request/batch-submit-valid.png) + ![batch-submit-valid](../../../static/img/usage/myinvois/einvoice-request/batch-submit-valid.png) - ![batch-submit-refresh-status](../../../static/img/myinvois/einvoice-request/batch-submit-refresh-status.png) + ![batch-submit-refresh-status](../../../static/img/usage/myinvois/einvoice-request/batch-submit-refresh-status.png) diff --git a/docs/usage/myinvois/einvoice.md b/docs/usage/myinvois/einvoice.md index 1d4344e7..d02b3464 100644 --- a/docs/usage/myinvois/einvoice.md +++ b/docs/usage/myinvois/einvoice.md @@ -13,17 +13,17 @@ Submitting E-Invoices via SQL Account is seamless and integrates smoothly with y ### Sales Invoice / Cash Sales :::info[NOTE] -These documents generate MyInvois Invoice which is a commercial document that itemises and records a transaction between your customer and you. +These documents generate a MyInvois Invoice which is a commercial document that itemises and records a transaction between you and your customer. ::: 1. Go to **Sales** > **Invoice / Cash Sales** > **New** to issue a new invoice / cash sales. 2. Select an existing customer or create a new customer. - ![sales-invoice-customer](../../../static/img/myinvois/einvoice/sales-invoice-customer.png) + ![sales-invoice-customer](../../../static/img/usage/myinvois/einvoice/sales-invoice-customer.png) -3. Click on **More** (1) to view mandatory info required for e-invoice, it will be prefilled with the info from existing customer's profile. Click on 📌(2) to pin the tab for easier view. +3. Click on **More** (1) to view the mandatory info required for e-invoice, it will be prefilled with information from existing customer's profile. Click on 📌(2) to pin the tab for easier view. - ![sales-invoice-more](../../../static/img/myinvois/einvoice/sales-invoice-more.png) + ![sales-invoice-more](../../../static/img/usage/myinvois/einvoice/sales-invoice-more.png) 4. Select the submission type for this document. - If you do not want to use the default submission type from the customer's profile, select a different option for this document. @@ -34,9 +34,9 @@ These documents generate MyInvois Invoice which is a commercial document that it - Consolidate – This document will be submitted as consolidated E-Invoice. ::: - ![sales-invoice-submission-type](../../../static/img/myinvois/einvoice/sales-invoice-submission-type.png) + ![sales-invoice-submission-type](../../../static/img/usage/myinvois/einvoice/sales-invoice-submission-type.png) -5. Continue with usual invoice / cash sales entry and **Save**. +5. Continue with the usual invoice / cash sales entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-sales-invoice} @@ -58,7 +58,7 @@ After saving your Sales Invoice or Cash Sales document, you can access E-Invoice ### Credit Note :::info[NOTE] -This document generate MyInvois Credit Note which is issued by you to correct errors, apply discounts, or account for returns in a previously issued E-Invoice with the purpose of reducing the value of the original E-Invoice. This is used in situations where the reduction of the original E-Invoice does not involve return of monies to your customer. +This document generates a MyInvois Credit Note which is issued by you to correct errors, apply discounts, or account for returns in a previously issued E-Invoice with the purpose of reducing the value of the original E-Invoice. This is used in situations where the reduction of the original E-Invoice does not involve the return of monies to your customer. ::: When creating a credit note, you have the option to reference validated E-Invoices. There are three methods to do this: @@ -81,17 +81,17 @@ Please ensure that the referenced documents are validated E-Invoices. If they ar - Consolidate – This document will be submitted as consolidated Credit Note. ::: - ![sales-credit-note-more](../../../static/img/myinvois/einvoice/sales-credit-note-more.png) + ![sales-credit-note-more](../../../static/img/usage/myinvois/einvoice/sales-credit-note-more.png) -4. Continue with usual credit note entry and **Save**. +4. Continue with the usual credit note entry and **Save**. #### Transfer From 1. Go to **Sales** > **Credit Note** > **New** to issue a new credit note. -2. **Right Click on Credit Note title**, select **Transfer From Sales Invoice** / **Transfer From Cash Sale**, then do transfer from operation as usual (Choose validated documents for valid references). +2. **Right Click on the Credit Note title**, select **Transfer From Sales Invoice** / **Transfer From Cash Sale**, then do transfer from operation as usual (Choose validated documents for valid references). -3. Click on **More** (1) to view mandatory info required for e-invoice, it will be prefilled with the info from the validated invoice / cash sales. Click on 📌(2) to pin the tab for easier view. +3. Click on **More** (1) to view mandatory info required for e-invoice, it will be prefilled with information from the validated invoice / cash sales. Click on 📌(2) to pin the tab for easier view. :::info[SUBMISSION] - None – Exclude this document from Credit Note submission. @@ -99,9 +99,9 @@ Please ensure that the referenced documents are validated E-Invoices. If they ar - Consolidate – This document will be submitted as consolidated Credit Note. ::: - ![sales-credit-note-more](../../../static/img/myinvois/einvoice/sales-credit-note-more.png) + ![sales-credit-note-more](../../../static/img/usage/myinvois/einvoice/sales-credit-note-more.png) -4. Continue with usual credit note entry and **Save**. +4. Continue with the usual credit note entry and **Save**. #### From Doc @@ -109,9 +109,9 @@ Please ensure that the referenced documents are validated E-Invoices. If they ar 2. Select an existing customer or create a new customer. - ![sales-credit-note-customer](../../../static/img/myinvois/einvoice/sales-credit-note-customer.png) + ![sales-credit-note-customer](../../../static/img/usage/myinvois/einvoice/sales-credit-note-customer.png) -3. Click on **More** (1) to view mandatory info required for e-invoice, it will be prefilled with the info from existing customer's profile. Click on 📌(2) to pin the tab for easier view. +3. Click on **More** (1) to view mandatory info required for e-invoice, it will be prefilled with information from existing customer's profile. Click on 📌(2) to pin the tab for easier view. :::info[SUBMISSION] - None – Exclude this document from Credit Note submission. @@ -119,7 +119,7 @@ Please ensure that the referenced documents are validated E-Invoices. If they ar - Consolidate – This document will be submitted as consolidated Credit Note. ::: - ![sales-credit-note-more](../../../static/img/myinvois/einvoice/sales-credit-note-more.png) + ![sales-credit-note-more](../../../static/img/usage/myinvois/einvoice/sales-credit-note-more.png) 4. Click on From Doc button **⋯** (1) to manually **select one or more** validated invoices / cash sales (2) to establish the reference. @@ -127,9 +127,9 @@ Please ensure that the referenced documents are validated E-Invoices. If they ar From Doc field allow you to manually select one or more validated invoices / cash sales as reference without affecting transfer quantity. ::: - ![sales-credit-note-fromdoc](../../../static/img/myinvois/einvoice/sales-credit-note-fromdoc.png) + ![sales-credit-note-fromdoc](../../../static/img/usage/myinvois/einvoice/sales-credit-note-fromdoc.png) -5. Continue with usual credit note entry and **Save**. +5. Continue with the usual credit note entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-sales-credit-note} @@ -149,7 +149,7 @@ After saving your Credit Note document, you can access E-Invoice operations thro ### Debit Note :::info[NOTE] -This document generate MyInvois Debit Note which is issued by you to indicate additional charges on a previously issued E-Invoice. +This document generates a MyInvois Debit Note which is issued by you to indicate additional charges on a previously issued E-Invoice. ::: When creating a debit note, you have the option to reference validated E-Invoices. @@ -162,9 +162,9 @@ Please ensure that the referenced documents are validated E-Invoices. If they ar 2. Select an existing customer or create a new customer. - ![sales-debit-note-customer](../../../static/img/myinvois/einvoice/sales-debit-note-customer.png) + ![sales-debit-note-customer](../../../static/img/usage/myinvois/einvoice/sales-debit-note-customer.png) -3. Click on **More** (1) to view mandatory info required for e-invoice, it will be prefilled with the info from existing customer's profile. Click on 📌(2) to pin the tab for easier view. +3. Click on **More** (1) to view mandatory info required for e-invoice, it will be prefilled with information from existing customer's profile. Click on 📌(2) to pin the tab for easier view. :::info[SUBMISSION] - None – Exclude this document from Debit Note submission. @@ -172,7 +172,7 @@ Please ensure that the referenced documents are validated E-Invoices. If they ar - Consolidate – This document will be submitted as consolidated Debit Note. ::: - ![sales-debit-note-more](../../../static/img/myinvois/einvoice/sales-debit-note-more.png) + ![sales-debit-note-more](../../../static/img/usage/myinvois/einvoice/sales-debit-note-more.png) 4. Click on From Doc button **⋯** (1) to manually **select one or more** validated invoices / cash sales (2) to establish the reference. @@ -180,9 +180,9 @@ Please ensure that the referenced documents are validated E-Invoices. If they ar From Doc field allow you to manually select one or more validated invoices / cash sales as reference without affecting transfer quantity. ::: - ![sales-debit-note-fromdoc](../../../static/img/myinvois/einvoice/sales-debit-note-fromdoc.png) + ![sales-debit-note-fromdoc](../../../static/img/usage/myinvois/einvoice/sales-debit-note-fromdoc.png) -5. Continue with usual debit note entry and **Save**. +5. Continue with the usual debit note entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-sales-debit-note} @@ -204,7 +204,7 @@ After saving your Debit Note document, you can access E-Invoice operations throu ### Purchase Invoice / Cash Purchase :::info[NOTE] -These documents generate MyInvois Self-Billed Invoice which is a commercial document to document expenses that itemises and records a transaction between your supplier and you. For E-Invoice purposes, you shall issue Self-Billed E-Invoices for the following transactions: +These documents generate a MyInvois Self-Billed Invoice which is a commercial document to document expenses that itemises and records a transaction between you and your supplier. For E-Invoice purposes, you shall issue Self-Billed E-Invoices for the following transactions: 1. Payment to agents, dealers, distributors, etc. 2. Goods sold or services rendered by foreign suppliers @@ -223,11 +223,11 @@ These documents generate MyInvois Self-Billed Invoice which is a commercial docu 1. Go to **Purchase** > **Purchase Invoice / Cash Purchase** > **New** to issue a new purchase invoice / cash purchase. 2. Select an existing supplier or create a new supplier. - ![purchase-invoice-supplier](../../../static/img/myinvois/einvoice/purchase-invoice-supplier.png) + ![purchase-invoice-supplier](../../../static/img/usage/myinvois/einvoice/purchase-invoice-supplier.png) -3. Click on **More** (1) to view mandatory info required for Self-Billed E-Invoice, it will be prefilled with the info from existing supplier's profile. Click on 📌(2) to pin the tab for easier view. +3. Click on **More** (1) to view mandatory info required for Self-Billed E-Invoice, it will be prefilled with information from existing supplier's profile. Click on 📌(2) to pin the tab for easier view. - ![purchase-invoice-more](../../../static/img/myinvois/einvoice/purchase-invoice-more.png) + ![purchase-invoice-more](../../../static/img/usage/myinvois/einvoice/purchase-invoice-more.png) 4. Select the submission type for this document. - If you do not want to use the default submission type from the supplier's profile, select a different option for this document. @@ -238,9 +238,9 @@ These documents generate MyInvois Self-Billed Invoice which is a commercial docu - Consolidate – This document will be submitted as consolidated Self-Billed E-Invoice. ::: - ![purchase-invoice-submission-type](../../../static/img/myinvois/einvoice/purchase-invoice-submission-type.png) + ![purchase-invoice-submission-type](../../../static/img/usage/myinvois/einvoice/purchase-invoice-submission-type.png) -5. Continue with usual purchase invoice / cash purchase entry and **Save**. +5. Continue with the usual purchase invoice / cash purchase entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-purchase-invoice} @@ -262,7 +262,7 @@ After saving your Purchase Invoice or Cash Purchase document, you can access E-I ### Purchase Returned :::info[NOTE] -This document generate MyInvois Self-Billed Credit Note which is issued by you to correct errors, apply discounts, or account for returns in a previously issued Self-Billed E-Invoice with the purpose of reducing the value of the original Self-Billed E-Invoice. This is used in situations where the reduction of the original Self-Billed E-Invoice does not involve return of monies to the you +This document generates a MyInvois Self-Billed Credit Note which is issued by you to correct errors, apply discounts, or account for returns in a previously issued Self-Billed E-Invoice with the purpose of reducing the value of the original Self-Billed E-Invoice. This is used in situations where the reduction of the original Self-Billed E-Invoice does not involve the return of monies to the you ::: When creating a purchase returned, you have the option to reference validated Self-Billed E-Invoices. There are three methods to do this: @@ -285,9 +285,9 @@ Please ensure that the referenced documents are validated Self-Billed E-Invoices - Consolidate – This document will be submitted as consolidated Self-Billed Credit Note. ::: - ![purchase-returned-more](../../../static/img/myinvois/einvoice/purchase-returned-more.png) + ![purchase-returned-more](../../../static/img/usage/myinvois/einvoice/purchase-returned-more.png) -4. Continue with usual purchase returned entry and **Save**. +4. Continue with the usual purchase returned entry and **Save**. #### Transfer From {#transfer-from-purchase-returned} @@ -303,9 +303,9 @@ Please ensure that the referenced documents are validated Self-Billed E-Invoices - Consolidate – This document will be submitted as consolidated Self-Billed Credit Note. ::: - ![purchase-invoice-more](../../../static/img/myinvois/einvoice/purchase-invoice-more.png) + ![purchase-invoice-more](../../../static/img/usage/myinvois/einvoice/purchase-invoice-more.png) -4. Continue with usual purchase returned entry and **Save**. +4. Continue with the usual purchase returned entry and **Save**. #### From Doc {#from-doc-purchase-returned} @@ -313,7 +313,7 @@ Please ensure that the referenced documents are validated Self-Billed E-Invoices 2. Select an existing supplier or create a new supplier. - ![purchase-returned-supplier](../../../static/img/myinvois/einvoice/purchase-returned-supplier.png) + ![purchase-returned-supplier](../../../static/img/usage/myinvois/einvoice/purchase-returned-supplier.png) 3. Click on **More** (1) to view mandatory info required for Self-Billed Credit Note, it will be prefilled with the info from the validated purchase invoice / cash purchase. Click on 📌(2) to pin the tab for easier view. @@ -323,7 +323,7 @@ Please ensure that the referenced documents are validated Self-Billed E-Invoices - Consolidate – This document will be submitted as consolidated Self-Billed Credit Note. ::: - ![purchase-invoice-more](../../../static/img/myinvois/einvoice/purchase-invoice-more.png) + ![purchase-invoice-more](../../../static/img/usage/myinvois/einvoice/purchase-invoice-more.png) 4. Click on From Doc button **⋯** (1) to manually **select one or more** validated purchase invoices / cash purchases (2) to establish the reference. @@ -331,9 +331,9 @@ Please ensure that the referenced documents are validated Self-Billed E-Invoices From Doc field allow you to manually select one or more validated purchase invoices / cash purchases as reference without affecting transfer quantity. ::: - ![purchase-returned-fromdoc](../../../static/img/myinvois/einvoice/purchase-returned-fromdoc.png) + ![purchase-returned-fromdoc](../../../static/img/usage/myinvois/einvoice/purchase-returned-fromdoc.png) -5. Continue with usual purchase returned entry and **Save**. +5. Continue with the usual purchase returned entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-purchase-returned} @@ -354,7 +354,7 @@ After saving your Purchase Returned document, you can access E-Invoice operation ### Purchase Debit Note :::info[NOTE] -This document generate MyInvois Self-Billed Debit Note which is issued by you to indicate additional charges on a previously issued Self-Billed E-Invoice. +This document generates a MyInvois Self-Billed Debit Note which is issued by you to indicate additional charges on a previously issued Self-Billed E-Invoice. ::: When creating a purchase debit note, you have the option to reference validated Self-Billed E-Invoices. @@ -367,9 +367,9 @@ Please ensure that the referenced documents are validated Self-Billed E-Invoices 2. Select an existing supplier or create a new supplier. - ![purchase-debit-note-supplier](../../../static/img/myinvois/einvoice/purchase-debit-note-supplier.png) + ![purchase-debit-note-supplier](../../../static/img/usage/myinvois/einvoice/purchase-debit-note-supplier.png) -3. Click on **More** (1) to view mandatory info required for Self-Billed Debit Note, it will be prefilled with the info from existing supplier's profile. Click on 📌(2) to pin the tab for easier view. +3. Click on **More** (1) to view mandatory info required for Self-Billed Debit Note, it will be prefilled with information from existing supplier's profile. Click on 📌(2) to pin the tab for easier view. :::info[SUBMISSION] - None – Exclude this document from Self-Billed Debit Note submission. @@ -377,7 +377,7 @@ Please ensure that the referenced documents are validated Self-Billed E-Invoices - Consolidate – This document will be submitted as consolidated Self-Billed Debit Note. ::: - ![purchase-debit-note-more](../../../static/img/myinvois/einvoice/purchase-debit-note-more.png) + ![purchase-debit-note-more](../../../static/img/usage/myinvois/einvoice/purchase-debit-note-more.png) 4. Click on From Doc button **⋯** (1) to manually **select one or more** validated purchase invoices / cash purchases (2) to establish the reference. @@ -385,9 +385,9 @@ Please ensure that the referenced documents are validated Self-Billed E-Invoices From Doc field allow you to manually select one or more validated purchase invoices / cash purchases as reference without affecting transfer quantity. ::: - ![purchase-debit-note-fromdoc](../../../static/img/myinvois/einvoice/purchase-debit-note-fromdoc.png) + ![purchase-debit-note-fromdoc](../../../static/img/usage/myinvois/einvoice/purchase-debit-note-fromdoc.png) -5. Continue with usual purchase debit note entry and **Save**. +5. Continue with the usual purchase debit note entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-purchase-debit-note} @@ -415,23 +415,23 @@ Cash Book does not use customer / supplier info from maintain customer / supplie 2. Click on **More** (1) to fill in mandatory fields. Click on 📌(2) to pin the tab for easier view. - ![cash-book-more](../../../static/img/myinvois/einvoice/cash-book-more.png) + ![cash-book-more](../../../static/img/usage/myinvois/einvoice/cash-book-more.png) 3. Fill in **Company Name**. You may **click on the label** (1) or press **enter** to fill in company name. - ![cash-book-company-name](../../../static/img/myinvois/einvoice/cash-book-company-name.png) + ![cash-book-company-name](../../../static/img/usage/myinvois/einvoice/cash-book-company-name.png) 4. Manually fill in the mandatory fields below. **TIN** must be filled. - ![cash-book-mandatory-fields](../../../static/img/myinvois/einvoice/cash-book-mandatory-fields.png) + ![cash-book-mandatory-fields](../../../static/img/usage/myinvois/einvoice/cash-book-mandatory-fields.png) - ![cash-book-mandatory-fields-filled](../../../static/img/myinvois/einvoice/cash-book-mandatory-fields-filled.png) + ![cash-book-mandatory-fields-filled](../../../static/img/usage/myinvois/einvoice/cash-book-mandatory-fields-filled.png) 5. Continue with cash book entry following [Payment Voucher guide](#payment-voucher) or [Receipt Voucher guide](#receipt-voucher) below and **Save**. 6. For the next entry, you can reuse the mandatory info filled in during Step 4. It can be found in the company name lookup. - ![cash-book-company-name-lookup](../../../static/img/myinvois/einvoice/cash-book-company-name-lookup.png) + ![cash-book-company-name-lookup](../../../static/img/usage/myinvois/einvoice/cash-book-company-name-lookup.png) ### Payment Voucher @@ -449,7 +449,7 @@ This document can generate either MyInvois Self-Billed Invoice or MyInvois Refun #### Self-Billed Invoice :::info[NOTE] -Self-Billed Invoice is a commercial document that itemises and records a transaction between your supplier and you. +Self-Billed Invoice is a commercial document that itemises and records a transaction between you and your supplier. For E-Invoice purposes, you shall issue Self-Billed E-Invoices for the following transactions: @@ -469,13 +469,13 @@ For E-Invoice purposes, you shall issue Self-Billed E-Invoices for the following 1. Go to **GL** > **Cash Book Entry** > **New PV** to issue a new payment voucher. -2. Fill in mandatory fields following the [guide](#mandatory-fields). +2. Fill in the mandatory fields following the [guide](#mandatory-fields). 3. Select **Self-billed** submission type. - ![payment-voucher-submission-self-billed](../../../static/img/myinvois/einvoice/payment-voucher-submission-self-billed.png) + ![payment-voucher-submission-self-billed](../../../static/img/usage/myinvois/einvoice/payment-voucher-submission-self-billed.png) -4. Continue with usual payment voucher entry and **Save**. +4. Continue with the usual payment voucher entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-payment-voucher-self-billed} @@ -505,15 +505,15 @@ Please ensure that the referenced documents are validated E-Invoices (Receipt Vo 2. Click on From Doc button **⋯** (1) to manually **select one or more** validated Receipt Voucher (2) to establish the reference. - ![payment-voucher-fromdoc](../../../static/img/myinvois/einvoice/payment-voucher-fromdoc.png) + ![payment-voucher-fromdoc](../../../static/img/usage/myinvois/einvoice/payment-voucher-fromdoc.png) -3. Fill in mandatory fields following the [guide](#mandatory-fields). +3. Fill in the mandatory fields following the [guide](#mandatory-fields). 4. Select **E-Invoice Refund** submission type. - ![payment-voucher-submission-e-invoice-refund](../../../static/img/myinvois/einvoice/payment-voucher-submission-e-invoice-refund.png) + ![payment-voucher-submission-e-invoice-refund](../../../static/img/usage/myinvois/einvoice/payment-voucher-submission-e-invoice-refund.png) -5. Continue with usual payment voucher entry and **Save**. +5. Continue with the usual payment voucher entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-payment-voucher-e-invoice-refund} @@ -548,13 +548,13 @@ Invoice is a commercial document that itemises and records a transaction between 1. Go to **GL** > **Cash Book Entry** > **New OR** to issue a new receipt voucher. -2. Fill in mandatory fields following the [guide](#mandatory-fields). +2. Fill in the mandatory fields following the [guide](#mandatory-fields). 3. Select **E-Invoice** submission type. - ![receipt-voucher-submission-e-invoice](../../../static/img/myinvois/einvoice/receipt-voucher-submission-e-invoice.png) + ![receipt-voucher-submission-e-invoice](../../../static/img/usage/myinvois/einvoice/receipt-voucher-submission-e-invoice.png) -4. Continue with usual receipt voucher entry and **Save**. +4. Continue with the usual receipt voucher entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-receipt-voucher-e-invoice} @@ -584,15 +584,15 @@ Please ensure that the referenced documents are validated Self-Billed E-Invoices 2. Click on From Doc button **⋯** (1) to manually **select one or more** validated Payment Voucher (2) to establish the reference. - ![receipt-voucher-fromdoc](../../../static/img/myinvois/einvoice/receipt-voucher-fromdoc.png) + ![receipt-voucher-fromdoc](../../../static/img/usage/myinvois/einvoice/receipt-voucher-fromdoc.png) -3. Fill in mandatory fields following the [guide](#mandatory-fields). +3. Fill in the mandatory fields following the [guide](#mandatory-fields). 4. Select **Self-billed Refund** submission type. - ![receipt-voucher-submission-self-billed-refund](../../../static/img/myinvois/einvoice/receipt-voucher-submission-self-billed-refund.png) + ![receipt-voucher-submission-self-billed-refund](../../../static/img/usage/myinvois/einvoice/receipt-voucher-submission-self-billed-refund.png) -5. Continue with usual receipt voucher entry and **Save**. +5. Continue with the usual receipt voucher entry and **Save**. #### E-Invoice Operation {#e-invoice-operation-receipt-voucher-self-billed-refund} diff --git a/docs/usage/myinvois/mandatory-fields.md b/docs/usage/myinvois/mandatory-fields.md index debecce6..dee4f3f5 100644 --- a/docs/usage/myinvois/mandatory-fields.md +++ b/docs/usage/myinvois/mandatory-fields.md @@ -6,7 +6,7 @@ slug: /usage/myinvois/mandatory-fields tags: ["SQL Account", "Usage", "MyInvois", "E-Invoice", "Customer", "Stock"] --- -Before issuing an E-Invoice or self-billed E-Invoice, you will need to make sure some mandatory fields is updated correctly. +Before issuing an E-Invoice or self-billed E-Invoice, you need to make sure some mandatory fields are updated correctly. ## Update Customer Info @@ -15,7 +15,7 @@ Customer info will be used for issuing E-Invoice. 1. Go to **Customer** > **Maintain Customer** > **New** or **Edit** an existing customer. 2. Fill in the mandatory fields as shown below. - ![maintain-customer-general](../../../static/img/myinvois/guide/maintain-customer-general.png) + ![maintain-customer-general](../../../static/img/usage/myinvois/guide/maintain-customer-general.png) 3. Select the default **submission type** to be used when issuing a document. This can be modified at the time of document creation if needed. @@ -25,9 +25,9 @@ Customer info will be used for issuing E-Invoice. - Consolidate – Documents created for this customer will be submitted as consolidated E-Invoice by default. ::: - ![maintain-customer-submission-type](../../../static/img/myinvois/guide/maintain-customer-submission-type.png) + ![maintain-customer-submission-type](../../../static/img/usage/myinvois/guide/maintain-customer-submission-type.png) -4. Click on **Tax** tab, and fill in customer tax info according to [guide](#customer--supplier-tax-info). +4. Click on **Tax** tab, and fill in the customer tax info according to [guide](#customer--supplier-tax-info). ## Update Supplier Info @@ -36,7 +36,7 @@ Supplier info will be used for issuing self-billed E-Invoice. 1. Go to **Supplier** > **Maintain Supplier** > **New** or **Edit** an existing supplier. 2. Fill in the mandatory fields as shown below. - ![maintain-supplier-general](../../../static/img/myinvois/guide/maintain-supplier-general.png) + ![maintain-supplier-general](../../../static/img/usage/myinvois/guide/maintain-supplier-general.png) 3. Select the default **submission type** to be used when issuing a document. This can be modified at the time of document creation if needed. @@ -46,13 +46,13 @@ Supplier info will be used for issuing self-billed E-Invoice. - Consolidate – Documents created for this customer will be submitted as consolidated self-billed E-Invoice by default. ::: - ![maintain-supplier-submission-type](../../../static/img/myinvois/guide/maintain-supplier-submission-type.png) + ![maintain-supplier-submission-type](../../../static/img/usage/myinvois/guide/maintain-supplier-submission-type.png) 4. Select the default **classification** to be used for item detail when issuing a document. - ![maintain-supplier-classification](../../../static/img/myinvois/guide/maintain-supplier-classification.png) + ![maintain-supplier-classification](../../../static/img/usage/myinvois/guide/maintain-supplier-classification.png) -5. Click on **Tax** tab, and fill in supplier tax info according to [guide](#customer--supplier-tax-info). +5. Click on **Tax** tab, and fill in the supplier tax info according to [customer/supplier tax info](#customer--supplier-tax-info). ## Info Request in Maintain Customer/Supplier @@ -66,7 +66,7 @@ To generate an Info Request that allows customers or suppliers to submit their c 2. Right click on an empty space, click on **Create Info Request** - ![create-info-request](../../../static/img/myinvois/guide/create-info-request.png) + ![create-info-request](../../../static/img/usage/myinvois/guide/create-info-request.png) 3. A dialog will appear showing a unique link. You can copy the link and share it manually or email it directly to the customer/supplier @@ -74,7 +74,7 @@ To generate an Info Request that allows customers or suppliers to submit their c An email address is required to use the email option ::: - ![info-request-pending](../../../static/img/myinvois/guide/info-request-pending.png) + ![info-request-pending](../../../static/img/usage/myinvois/guide/info-request-pending.png) ### Retrieve Info @@ -84,32 +84,32 @@ To collect the submitted data and update the customer's or supplier’s record 2. Right click on an empty space, click on **Retrieve Info** - ![retrieve-info](../../../static/img/myinvois/guide/retrieve-info.png) + ![retrieve-info](../../../static/img/usage/myinvois/guide/retrieve-info.png) 3. A dialog will display the submitted details along with the original request link - ![info-request-valid](../../../static/img/myinvois/guide/info-request-valid.png) + ![info-request-valid](../../../static/img/usage/myinvois/guide/info-request-valid.png) -4. Once you close the dialog, the record will be update automatically with the new information +4. Once you close the dialog, the record will be updated automatically with the new information - ![maintain-customer-retrieve-info](../../../static/img/myinvois/guide/maintain-customer-retrieve-info.png) + ![maintain-customer-retrieve-info](../../../static/img/usage/myinvois/guide/maintain-customer-retrieve-info.png) ### Batch Retrieve Info To retrieve and update information for multiple customers or suppliers at once :::info[NOTE] -An hourglass icon will appear next to customers or suppliers who has created Info Request -![maintain-customer-info-request](../../../static/img/myinvois/guide/maintain-customer-info-request.png) +An hourglass icon will appear next to customers or suppliers who has created an Info Request +![maintain-customer-info-request](../../../static/img/usage/myinvois/guide/maintain-customer-info-request.png) ::: 1. In the browse screen, right-click on the button panel, click on **Batch Retrieve Info** - ![batch-retrieve-info](../../../static/img/myinvois/guide/batch-retrieve-info.png) + ![batch-retrieve-info](../../../static/img/usage/myinvois/guide/batch-retrieve-info.png) 2. A progress dialog will appear and automatically fetch the submitted data for all customers/suppliers - ![batch-retrieve-info-progress](../../../static/img/myinvois/guide/batch-retrieve-info-progress.png) + ![batch-retrieve-info-progress](../../../static/img/usage/myinvois/guide/batch-retrieve-info-progress.png) ## Taxpayer's QR Code @@ -121,11 +121,11 @@ This feature allows you to upload a customer's or supplier's MyInvois Taxpayer Q 2. Go to the **Tax** tab and click on the **Upload File** button - ![taxpayers-qr-maintain-customer](../../../static/img/myinvois/einvoice/taxpayers-qr-maintain-customer.png) + ![taxpayers-qr-maintain-customer](../../../static/img/usage/myinvois/einvoice/taxpayers-qr-maintain-customer.png) 3. Click the **Open File** icon to select a QR code image from your device or click the **Paste** icon to paste a QR code image from your clipboard - ![taxpayers-qr-form](../../../static/img/myinvois/einvoice/taxpayers-qr-form.png) + ![taxpayers-qr-form](../../../static/img/usage/myinvois/einvoice/taxpayers-qr-form.png) 4. Once the QR code is uploaded, SQL Account will automatically retrieve and display the taxpayer's information in the memo field @@ -133,11 +133,11 @@ This feature allows you to upload a customer's or supplier's MyInvois Taxpayer Q Upload Production Taxpayer's QR Code only ::: - ![taxpayers-qr-form-info](../../../static/img/myinvois/einvoice/taxpayers-qr-form-info.png) + ![taxpayers-qr-form-info](../../../static/img/usage/myinvois/einvoice/taxpayers-qr-form-info.png) 5. Click the **OK** button to update the selected customer or supplier with the retrieved data - ![taxpayers-qr-form-ok](../../../static/img/myinvois/einvoice/taxpayers-qr-form-ok.png) + ![taxpayers-qr-form-ok](../../../static/img/usage/myinvois/einvoice/taxpayers-qr-form-ok.png) ### Sales / Purchase / Cashbook document @@ -145,11 +145,11 @@ This feature allows you to upload a customer's or supplier's MyInvois Taxpayer Q 2. Go to the **More** panel and click on the **QR Code** icon in MyInvois header - ![taxpayers-qr-sales-invoice](../../../static/img/myinvois/einvoice/taxpayers-qr-sales-invoice.png) + ![taxpayers-qr-sales-invoice](../../../static/img/usage/myinvois/einvoice/taxpayers-qr-sales-invoice.png) 3. Click the **Open File** icon to select a QR code image from your device or click the **Paste** icon to paste a QR code image from your clipboard - ![taxpayers-qr-form](../../../static/img/myinvois/einvoice/taxpayers-qr-form.png) + ![taxpayers-qr-form](../../../static/img/usage/myinvois/einvoice/taxpayers-qr-form.png) 4. Once the QR code is uploaded, SQL Account will automatically retrieve and display the taxpayer's information in the memo field @@ -157,25 +157,25 @@ This feature allows you to upload a customer's or supplier's MyInvois Taxpayer Q Upload Production Taxpayer's QR Code only ::: - ![taxpayers-qr-form-info](../../../static/img/myinvois/einvoice/taxpayers-qr-form-info.png) + ![taxpayers-qr-form-info](../../../static/img/usage/myinvois/einvoice/taxpayers-qr-form-info.png) 5. Click the **OK** button to update the selected document with the retrieved data - ![taxpayers-qr-form-ok](../../../static/img/myinvois/einvoice/taxpayers-qr-form-ok.png) + ![taxpayers-qr-form-ok](../../../static/img/usage/myinvois/einvoice/taxpayers-qr-form-ok.png) ## Customer / Supplier Tax Info ### Local Business (Companies registered with local authorities) -If your customers / suppliers are a registered entity in Malaysia (e.g.: SSM registered), you must fill in the BRN & TIN of the customer in order to issue E-Invoice / self-billed E-Invoice to the buyer / supplier. +If your customers / suppliers are a registered entity in Malaysia (e.g.: SSM registered), you must fill in the BRN & TIN of the customer in order to issue an E-Invoice / self-billed E-Invoice to the buyer / supplier. - ![maintain-customer-tax](../../../static/img/myinvois/guide/maintain-customer-tax.png) + ![maintain-customer-tax](../../../static/img/usage/myinvois/guide/maintain-customer-tax.png) ### Individual / Foreign Buyer In facilitating a more efficient E-Invoice issuance process as well as to ease the burden of individuals in providing their Tax Identification Number (TIN) and identification number details, IRBM provides the following concession to individuals: -1. For Malaysian Individuals to provider either: +1. For Malaysian Individuals to provide either: 1. TIN only 2. MyKad / MyTentera identification number only 3. Both TIN and MyKad / MyTentera identification number @@ -204,11 +204,11 @@ For non-Malaysian Individuals: 1. List of ID Type in Maintain Customer / Supplier: - ![maintain-customer-tax-idtype](../../../static/img/myinvois/guide/maintain-customer-tax-idtype.png) + ![maintain-customer-tax-idtype](../../../static/img/usage/myinvois/guide/maintain-customer-tax-idtype.png) 2. List of General TIN in Maintain Customer / Supplier: - ![maintain-customer-tax-tin](../../../static/img/myinvois/guide/maintain-customer-tax-tin.png) + ![maintain-customer-tax-tin](../../../static/img/usage/myinvois/guide/maintain-customer-tax-tin.png) ### Batch TIN Lookup @@ -218,15 +218,15 @@ This feature enables users to **quickly look up missing New BRN/TIN information 1. Navigate to **Customer** > **Maintain Customer** or **Supplier** > **Maintain Supplier**. - ![batch-tin-lookup-1](../../../static/img/myinvois/guide/batch-tin-lookup-1.png) + ![batch-tin-lookup-1](../../../static/img/usage/myinvois/guide/batch-tin-lookup-1.png) 2. Right click on the menu bar (located at the right side of the window), select **TIN Lookup**. - ![batch-tin-lookup-2](../../../static/img/myinvois/guide/batch-tin-lookup-2.png) + ![batch-tin-lookup-2](../../../static/img/usage/myinvois/guide/batch-tin-lookup-2.png) 3. In the **Tin Lookup** window, you will be able to view all of your customers / suppliers details such as *Old BRN, New BRN, TIN* and etc. Click on the **🔍** to do a quick lookup on the missing fields, when you are done, click **Save** to apply. - ![batch-tin-lookup-3](../../../static/img/myinvois/guide/batch-tin-lookup-3.png) + ![batch-tin-lookup-3](../../../static/img/usage/myinvois/guide/batch-tin-lookup-3.png) ## Update Stock Item @@ -235,12 +235,12 @@ IRBM (LHDN) has introduced [Classification Codes](https://sdk.myinvois.hasil.gov 1. Go to **Stock** > **Maintain Stock Item** > **Edit** stock 2. Update the classification accordingly. - ![maintain-stock-classification](../../../static/img/myinvois/guide/maintain-stock-classification.png) + ![maintain-stock-classification](../../../static/img/usage/myinvois/guide/maintain-stock-classification.png) 3. Repeat Step 1-2 for all stocks. :::info You can also override the stock item classification codes during sales invoice entry. -![sales-invoice-classification](../../../static/img/myinvois/guide/sales-invoice-classification.png) +![sales-invoice-classification](../../../static/img/usage/myinvois/guide/sales-invoice-classification.png) ::: diff --git a/docs/usage/myinvois/onboarding.md b/docs/usage/myinvois/onboarding.md index 5812be53..f1760302 100644 --- a/docs/usage/myinvois/onboarding.md +++ b/docs/usage/myinvois/onboarding.md @@ -6,24 +6,24 @@ slug: /usage/myinvois/onboarding tags: ["SQL Account", "Usage", "MyInvois", "E-Invoice", "Onboarding"] --- -To streamline the e-invoice submission through SQL Account, you will need to go through a simple onboarding process. +To streamline e-invoice submission through SQL Account, you need to go through a simple onboarding process. ## Company Profile Setup -1. Go to **File** > **Company Profile** > **General** and make sure the country have been set to **Malaysia** to enable E-Invoice feature. +1. Go to **File** > **Company Profile** > **General** and make sure the country has been set to **Malaysia** to enable the E-Invoice feature. - ![company-profile-country](../../../static/img/myinvois/onboarding/company-profile-country.png) + ![company-profile-country](../../../static/img/usage/myinvois/onboarding/company-profile-country.png) 2. Go to **File** > **Company Profile** > **MyInvois**. - 1. Make sure your company registration number (BRN) is correctly filled in. (click on the magnifying glass to utilize our auto BRN lookup feature) + 1. Make sure your company registration number (BRN) is filled in correctly. (Click on the magnifying glass to utilize our auto BRN lookup feature) 2. Make sure the TIN number has been filled in correctly. 3. Click on 💾 **Save**. - ![company-profile](../../../static/img/myinvois/onboarding/company-profile-myinvois-1.png) + ![company-profile](../../../static/img/usage/myinvois/onboarding/company-profile-myinvois-1.png) 3. Click on **Connect MyInvois** to setup your **LHDN MyInvois** credential. - ![company-profile-myinvois-button](../../../static/img/myinvois/onboarding/company-profile-myinvois-2.png) + ![company-profile-myinvois-button](../../../static/img/usage/myinvois/onboarding/company-profile-myinvois-2.png) ## MyInvois Integration @@ -36,7 +36,7 @@ To streamline the e-invoice submission through SQL Account, you will need to go You can skip 1 & 2 entirely and setup **[Sandbox credentials & Intermediary](#sandbox-credentials--intermediary)** alone for **Testing/Training** purposes. ::: -![company-profile-myinvois-sandbox](../../../static/img/myinvois/onboarding/company-profile-myinvois-connect.png) +![company-profile-myinvois-sandbox](../../../static/img/usage/myinvois/onboarding/company-profile-myinvois-connect.png) ### MyInvois Environment (Production/Sandbox) @@ -62,7 +62,7 @@ Purpose of the **E-Invoice Start Date**: - Manage the ability to submit e-invoices in the **Production** environment. (You will only be able to start submitting e-invoices **after** the selected start date.) - If you begin with the **Sandbox (Testing)** environment and have completed setting up your **Production** credentials, you will be prompted to activate your Production environment 7 days before the chosen start date. - ![myinvois-start-date](../../../static/img/myinvois/onboarding/myinvois-start-date.png) + ![myinvois-start-date](../../../static/img/usage/myinvois/onboarding/myinvois-start-date.png) :::info[Note] The E-Invoice Start Date is not limited to the three provided options. You can set it to any date, such as **1/6/2025**, as per your preference. @@ -71,24 +71,24 @@ The E-Invoice Start Date is not limited to the three provided options. You can s ### Production Credentials & Intermediary :::info[Note] -You may skip this part if you only intend to try out e-invoice features using demo database. +You may skip this part if you only intend to try out e-invoice features using a demo database. ::: 1. Login to MyInvois Portal on the right side. - ![myinvois-production-login](../../../static/img/myinvois/onboarding/myinvois-production-login.png) + ![myinvois-production-login](../../../static/img/usage/myinvois/onboarding/myinvois-production-login.png) 2. Click on **MyInvois**. - ![myinvois-production-mytax](../../../static/img/myinvois/onboarding/myinvois-production-mytax.png) + ![myinvois-production-mytax](../../../static/img/usage/myinvois/onboarding/myinvois-production-mytax.png) 3. Click on top right, and click on **View Taxpayer Profile**. - ![myinvois-production-view-taxpayer-profile](../../../static/img/myinvois/onboarding/myinvois-production-view-taxpayer-profile.png) + ![myinvois-production-view-taxpayer-profile](../../../static/img/usage/myinvois/onboarding/myinvois-production-view-taxpayer-profile.png) 4. Scroll to the bottom and click on **Add Intermediary**. - ![myinvois-production-add-intermediary-1](../../../static/img/myinvois/onboarding/myinvois-production-add-intermediary-1.png) + ![myinvois-production-add-intermediary-1](../../../static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-1.png) 5. Fill in the TIN, BRN, and Name using the provided info on the left. Enter the captcha and click on **Search** then **Continue**. @@ -101,34 +101,34 @@ You may skip this part if you only intend to try out e-invoice features using de ::: - ![myinvois-production-add-intermediary-2](../../../static/img/myinvois/onboarding/myinvois-production-add-intermediary-2.png) + ![myinvois-production-add-intermediary-2](../../../static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-2.png) -6. Setup the **Representation From**, **Representantion To** (leave empty to avoid expiry), and make sure all permissions has been enabled. Click on **Add Intermediary** to finish. +6. Setup the **Representation From**, **Representantion To** (leave empty to avoid expiry), and make sure all permissions have been enabled. Click on **Add Intermediary** to finish. - ![myinvois-production-add-intermediary-3](../../../static/img/myinvois/onboarding/myinvois-production-add-intermediary-3.png) + ![myinvois-production-add-intermediary-3](../../../static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-3.png) -7. Click on **Test Intermediary** and you shall see all permissions can be retrieved successfully. +7. Click on **Test Intermediary** and you should see that all permissions can be retrieved successfully. - ![myinvois-production-add-intermediary-4](../../../static/img/myinvois/onboarding/myinvois-production-add-intermediary-4.png) + ![myinvois-production-add-intermediary-4](../../../static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-4.png) 8. Click on **Register ERP**. - ![myinvois-production-add-erp-1](../../../static/img/myinvois/onboarding/myinvois-production-add-erp-1.png) + ![myinvois-production-add-erp-1](../../../static/img/usage/myinvois/onboarding/myinvois-production-add-erp-1.png) 9. Fill in the **ERP Name** & **Client Secret expiration** as below: - ![myinvois-production-add-erp-2](../../../static/img/myinvois/onboarding/myinvois-production-add-erp-2.png) + ![myinvois-production-add-erp-2](../../../static/img/usage/myinvois/onboarding/myinvois-production-add-erp-2.png) -10. Click on the copy button in sequence as shown below and you shall see the client id & secrets are being automatically filled on the left. Tick the **checkbox** & click on **Done**. +10. Click on the copy button in sequence as shown below and you should see the client id & secrets are automatically filled on the left. Tick the **checkbox** & click on **Done**. - ![myinvois-production-add-erp-3](../../../static/img/myinvois/onboarding/myinvois-production-add-erp-3.png) + ![myinvois-production-add-erp-3](../../../static/img/usage/myinvois/onboarding/myinvois-production-add-erp-3.png) 11. If you do not wish to utilize the Test Validation using sandbox feature, click on **Register ERP** and you're done! You can now start submitting E-Invoice in **Production** mode. ### Sandbox Credentials & Intermediary :::info[Note] -You will need to setup Sandbox Credentials if you wished to: +You will need to setup Sandbox Credentials if you wish to: 1. Utilize **Test E-Invoice Validation** Feature. 2. Training / Testing. @@ -137,21 +137,21 @@ Follow this [guide](https://preprod-mytax.hasil.gov.my/assets/pdf/usermanualweb( ::: -1. Click on the empty Client ID input and you will find see that the right panel now switched to **Sandbox MyInvois Portal**. Proceed to login. +1. Click on the empty Client ID input and you will see that the right panel now switched to **Sandbox MyInvois Portal**. Proceed to login. - ![myinvois-sandbox-login](../../../static/img/myinvois/onboarding/myinvois-sandbox-login.png) + ![myinvois-sandbox-login](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-login.png) 2. Click on **MyInvois9**. - ![myinvois-sandbox-mytax](../../../static/img/myinvois/onboarding/myinvois-sandbox-mytax.png) + ![myinvois-sandbox-mytax](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-mytax.png) 3. Click on top right, and click on **View Taxpayer Profile**. - ![myinvois-sandbox-view-taxpayer-profile](../../../static/img/myinvois/onboarding/myinvois-sandbox-view-taxpayer-profile.png) + ![myinvois-sandbox-view-taxpayer-profile](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-view-taxpayer-profile.png) 4. Scroll to the bottom and click on **Add Intermediary**. - ![myinvois-sandbox-add-intermediary-1](../../../static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-1.png) + ![myinvois-sandbox-add-intermediary-1](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-1.png) 5. Fill in the TIN, BRN, and Name using the provided info on the left. Enter the captcha and click on **Search** then **Continue**. @@ -164,26 +164,26 @@ Follow this [guide](https://preprod-mytax.hasil.gov.my/assets/pdf/usermanualweb( ::: - ![myinvois-sandbox-add-intermediary-2](../../../static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-2.png) + ![myinvois-sandbox-add-intermediary-2](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-2.png) -6. Setup the **Representation From**, **Representantion To** (leave empty to avoid expiry), and make sure all permissions has been enabled. Click on **Add Intermediary** to finish. +6. Setup the **Representation From**, **Representantion To** (leave empty to avoid expiry), and make sure all permissions have been enabled. Click on **Add Intermediary** to finish. - ![myinvois-sandbox-add-intermediary-3](../../../static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-3.png) + ![myinvois-sandbox-add-intermediary-3](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-3.png) -7. Click on **Test Intermediary** and you shall see all permissions can be retrieved successfully and remained valid (**green**). +7. Click on **Test Intermediary** and you should see that all permissions can be retrieved successfully and remained valid (**green**). - ![myinvois-sandbox-add-intermediary-4](../../../static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-4.png) + ![myinvois-sandbox-add-intermediary-4](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-4.png) 8. Click on **Register ERP**. - ![myinvois-sandbox-add-erp-1](../../../static/img/myinvois/onboarding/myinvois-sandbox-add-erp-1.png) + ![myinvois-sandbox-add-erp-1](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-add-erp-1.png) 9. Fill in the **ERP Name** & **Client Secret expiration** as below: - ![myinvois-sandbox-add-erp-2](../../../static/img/myinvois/onboarding/myinvois-sandbox-add-erp-2.png) + ![myinvois-sandbox-add-erp-2](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-add-erp-2.png) -10. Click on the copy button in sequence as shown below and you shall see the client id & secrets are being automatically filled on the left. Tick the **checkbox** & click on **Done**. +10. Click on the copy button in sequence as shown below and you should see the client id & secrets are automatically filled on the left. Tick the **checkbox** & click on **Done**. - ![myinvois-sandbox-add-erp-3](../../../static/img/myinvois/onboarding/myinvois-sandbox-add-erp-3.png) + ![myinvois-sandbox-add-erp-3](../../../static/img/usage/myinvois/onboarding/myinvois-sandbox-add-erp-3.png) 11. Click on **Register ERP** and you're done. diff --git a/docs/usage/production.md b/docs/usage/production.md deleted file mode 100644 index dfe47603..00000000 --- a/docs/usage/production.md +++ /dev/null @@ -1,201 +0,0 @@ ---- -sidebar_position: 10 -title: Production -description: Production Job Order -slug: /usage/production -tags: ["SQL Account", "Usage", "Production"] ---- - -:::info -Watch tutorial video here: [Youtube](https://youtu.be/q97_s92bmZQ) -::: - -## Setup production accounts and stock items - -### Chart of Account - - 1. GL > Maintain Account - - 2. Create finished good, raw material, WIP’s closing stock account in your balance sheet current asset account as below. - - ![159a](../../static/img/getting-started/user-guide/159a.png) - ![159b](../../static/img/getting-started/user-guide/159b.png) - - 3. Create Manufacturing Account under Cost of Goods Sold (Profit & Loss) - - 1. Highlight on Cost of Goods Sold and click on NEW Button, Insert GL Code, Description and make sure tick on special Account type Manufacturing Control Account. - - ![160](../../static/img/getting-started/user-guide/160.png) - - 2. Create all your raw materials opening stock, closing stock, production overhead charges group into Manufacturing cost account under Cost of Goods Sold. - - ![161](../../static/img/getting-started/user-guide/161.png) - -### Stock Group - - Stock > Maintain Stock Group - - Use to differentiate the types of stocks and the costing method use for the stock, eg. raw materials, finished goods, etc. - - To produce a chemical products, the costing calculation based on stock group:- - - 1. Raw Materials - - Assign your Raw Material Purchase code, Cash Purchase code, Purchase Return code. - - \- Costing Method : FIFO - - ![162](../../static/img/getting-started/user-guide/162.png) - - 2. Water - - Assigned your Raw Material Purchase code, Cash Purchase code, Purchase Return code. - - \- Costing Method : Fixed Costing - - ![163](../../static/img/getting-started/user-guide/163.png) - - 3. Finished Goods - - Assigned your Finished Goods Purchase code, Cash Purchase code, Purchase Return code. - - \- Costing Method : FIFO - - ![164](../../static/img/getting-started/user-guide/164.png) - -### Stock Item - - Stock > Maintain Stock Item - - Setup the stock item master data for all types of stock. Eg. raw materials, end products, trading products, etc. - - 1. Create all your raw materials items and assigned stock group respectively. - - ![165](../../static/img/getting-started/user-guide/165.png) - - 2. Create your finished goods item and assign raw materials. - - 1. assigned stock group, enter based UOM, ref cost and ref price. - - 2. go to **BOM** tab, choose this product it a **BOM** item, and assigned all the raw materials, quantity needed. - - **Location** is the Raw Materials keep and deducted from which warehouse. - - **Overhead Cost** is a fixed additional cost to the material cost incurred during to each material process. - - **Assembly Cost** is a fixed cost incurred to the entire process for final products. - - ![166](../../static/img/getting-started/user-guide/166.png) - -### Location (Warehouse) - - Stock > Maintain Location - - Define the warehouse code to identify the stock movement between the locations. - - 1. Receive raw materials from purchase and keep at **Raw Materials Warehouse**. - - 2. Production use the materials to produce the final products. Raw materials must deduct from the **Raw Materials Warehouse**. - - 3. Final products will be kept at **Finished Goods Warehouse**. - - 4. Work in progress stock kept in **WIP Warehouse**. - - ![167](../../static/img/getting-started/user-guide/167.png) - -## Overview of Manufacturing Business Flow - -Sales coordinator usually will input the Sales Order (SO) based on the customer PO received. The stock products will be updated into the system as ordered qty. If the stock are purchased from supplier, then the purchaser has to transfer from SO to PO. - -Unless the stock is manufactured, then you have to proceed to Job Order process. How much of the materials/components -required to meet the products ordered by customer? This question raised by the Material Planning department. Therefore, the Job Order takes place as the order to be input after Sales Order. It will planned the materials/components required based on the qty ordered from Sales Order. - -When products produce out, you have to transfer the Job Order to Stock Assembly to commit on the stock on hand. - -![168](../../static/img/getting-started/user-guide/168.png) - -![169](../../static/img/getting-started/user-guide/169.png) - -### Sales Order - - Customer order will be enter via Sales Order by Sales Coordinator. - - 1. Sales > Sales Order > New > choose your customer > enter the items orders from your customer > save. - - ![170](../../static/img/getting-started/user-guide/170.png) - - 2. : You can also press on **CTRL + F11** to check Available Stock Balance, if there is sufficient stock on hand you may directly proceed to delivery, but there is short of stock you may need to proceed to Job Order on the planning to manufacturer the items. - - ![171](../../static/img/getting-started/user-guide/171.png) - -### Production Job Order - - A Job Order is a document that contains the requirements and instruction to produce a particular of goods. - - 1. **Production** > **Job Order** > **New** - - 2. Select **Customer Code** - - 3. **Right Click on Job Order** title, select **Transfer from Sales Order**. - - 4. enter the **X/F Qty** for the quantity you want to produce. - - ![172](../../static/img/getting-started/user-guide/172.png) - - 5. Save the Job Order. - - 6. you can also click **CTRL + F11** to check all your raw material stock available balance. - - ![173](../../static/img/getting-started/user-guide/173.png) - -### Stock Item Assembly - - Stock Item Assembly is an entry form to record the actual components (materials) usage to convert/produce the final product based on the actual output. Unit cost will be used to revalue the stock balance. - - Actual components (materials) used will be deduct out from the stock balance. However, the final products will be replenished the stock balance. You can always check the stock movement from the stock card report. - - 1. **Production** > **Stock Item Assembly** > **New** - - 2. **Right Click**, select **Transfer from Job Order**. - - 3. enter the **X/F Qty** for the quantity produced. - - ![174](../../static/img/getting-started/user-guide/174.png) - - 4. Save the Stock Item Assembly. - - ![175](../../static/img/getting-started/user-guide/175.png) - -## Stock Batch - -:::info - -Watch tutorial video here: [Stock Maintain Batch](https://youtu.be/QUlp-Js_cnk) - -::: - -This module commonly used in food manufacturing, pharmaceutical, cosmetic/skin care product. It helps to trace the expiry date of the products. It can set the manufacturing date for label print purposes and easy to identify the stock expired to write off using stock adjustment. - -1. **Stock** > **Maintain Batch** > **New** - - Insert the code, description, Expiry date, Manufacturing date & items that will expire on this expiry date. - - ![176](../../static/img/getting-started/user-guide/176.png) - -2. **Purchase** > **Purchase Invoice** > **New** - - You can enable Batch column from the hidden bar and assign your stock batch during purchase for every individual item. - - ![177](../../static/img/getting-started/user-guide/177.png) - -3. **Sales** > **Sales Invoice** > **New** - - In Sales Invoice, you can select the item issue out from which batch (expiry date), system will also show the expiry day & quantity available. - - ![178](../../static/img/getting-started/user-guide/178.png) - -4. **Stock** > **Print Stock Batch Expiry** - - You can also check the listing of your product that will be expire soon as well as you can trace the product manufacture date. - - ![179](../../static/img/getting-started/user-guide/179.png) diff --git a/docs/usage/production/_category_.json b/docs/usage/production/_category_.json new file mode 100644 index 00000000..ccb2851a --- /dev/null +++ b/docs/usage/production/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Production", + "position": 9, + "link": { + "type": "generated-index", + "description": "SQL Account Production Guide" + } +} \ No newline at end of file diff --git a/docs/usage/production/guide.md b/docs/usage/production/guide.md new file mode 100644 index 00000000..137f0402 --- /dev/null +++ b/docs/usage/production/guide.md @@ -0,0 +1,655 @@ +--- +sidebar_position: 2 +title: Guide +description: A guideline for Job Order +slug: /usage/production/guide +tags: ["SQL Account", "Usage", "Production", "Job Order", "Guide"] +--- + +:::note +This is an additional module. +::: + +:::info + Watch tutorial video here: [Youtube](https://youtu.be/q97_s92bmZQ) +::: + +## Setup + +### Chart of Account + +1. GL > Maintain Account + +2. Create finished good, raw material, and WIP's closing stock account in your balance sheet current asset account as shown below + + ![create-gl-account-finished-goods](../../../static/img/usage/production/guide/create-gl-account-finished-goods.png) + + ![list-of-gl-account-stock-account-created](../../../static/img/usage/production/guide/list-of-gl-account-stock-account-created.png) + +3. Create Manufacturing Account under Cost of Goods Sold (Profit & Loss) + + i. Highlight on Cost of Goods Sold and click on NEW Button, Insert GL Code, Description and make sure to tick on a special Account type Manufacturing Control Account. + + ![create-gl-account](../../../static/img/usage/production/guide/create-gl-account.png) + + ii. Highlight on Cost of Goods Sold and click on NEW Button, Insert GL Code, Description and make sure to tick on a special Account type Manufacturing Control Account. + + ![highlight-cost-of-goods-sold](../../../static/img/usage/production/guide/highlight-cost-of-goods-sold.png) + +### Stock Group + +Stock -> Maintain Stock Group + +Used to differentiate the types of stocks and the costing method used for the stock, e.g. raw materials, finished goods, etc. + +To produce a chemical products, the costing calculation based on stock group:- + + 1. Raw Materials + + Assign your Raw Material Purchase code, Cash Purchase code, Purchase Return code. + + - Costing Method : FIFO + + ![create-stock-group-raw-material](../../../static/img/usage/production/guide/create-stock-group-raw-material.png) + + 2. Water + + Assign your Raw Material Purchase code, Cash Purchase code, Purchase Return code. + + - Costing Method : Fixed Costing + + ![create-stock-group-water](../../../static/img/usage/production/guide/create-stock-group-water.png) + + 3. Finished Goods + + Assign your Finished Goods Purchase code, Cash Purchase code, Purchase Return code. + + - Costing Method : FIFO + + ![create-stock-group-finished-goods](../../../static/img/usage/production/guide/create-stock-group-finished-goods.png) + +### Stock Item + +Stock -> Maintain Stock Item + +Setup the stock item master data for all types of stock. Eg. raw materials, end products, trading products, etc. + + 1. Create all your raw materials items and assign stock group respectively. + + ![create-raw-materials-stock-item](../../../static/img/usage/production/guide/create-raw-materials-stock-item.png) + + 2. Create your finished goods item and assign raw materials. + + 1. assign stock group, enter based UOM, ref cost and ref price. + + 2. go to the BOM tab, choose this product as a BOM item, and assign all the raw materials, quantity needed. + + Location is the Raw Materials kept and deducted from which warehouse. + + Overhead Cost is a fixed additional cost to the material cost incurred during each material process. + + Assembly Cost is a fixed cost incurred to the entire process for final products. + + ![assign-item-with-bom-item](../../../static/img/usage/production/guide/assign-item-with-bom-item.png) + +### Location (Warehouse) + +Stock > Maintain Location + +Define the warehouse code to identify the stock movement between the locations. + +1. Receive raw materials from purchase and keep at the Raw Materials Warehouse. + +2. Production uses the materials to produce the final products. Raw materials must be deducted from the Raw Materials Warehouse. + +3. Final products will be kept at the Finished Goods Warehouse. + +4. Work in progress stock kept in WIP Warehouse. + +![overview-workflow-warehouse](../../../static/img/usage/production/guide/overview-workflow-warehouse.png) + +### Overview Workflow + +The sales coordinator usually inputs the Sales Order (SO) based on the customer's PO. The stock products will be updated in the system as the ordered quantity. If the stock is purchased from a supplier, then the purchaser needs to transfer from SO to PO. + +If the stock is manufactured, then you have to proceed to the Job Order process. How much material/components are required to meet the products ordered by the customer? This question is raised by the Material Planning department. Therefore, the Job Order takes place as an order to be input after the Sales Order. It will plan the materials/components required based on the quantity ordered from the Sales Order. + +When products are produced, you have to transfer the Job Order to the Stock Assembly to commit the stock on hand. + +![overview-workflow-so-jo](../../../static/img/usage/production/guide/overview-workflow-so-jo.png) + +![overview-of-manufacturing-business-flow](../../../static/img/usage/production/guide/overview-of-manufacturing-business-flow.png) + +## Job Order + +Sales coordinator usually will input the Sales Order (SO) based on the customer PO received. The stock products will be updated into the system as ordered qty. + +How much of the materials/components required to meet the products ordered by the customer? This question was raised by the Material Planning department. Therefore, the Job Order takes place as the order to be input after the Sales Order. It will plan the materials/components required based on the qty ordered from Sales Order. When products are produced out, basically you have to transfer the Job Order to the Stock Assembly to commit the stock on hand. + +IMPORTANT: It is required for the Job Order module. For more information about price, please refer to our sales personnel. + +:::important + +The SO -> PO and Job Order modules are required. For more information about price, please refer to our sales personnel. + +::: + +### Sales Order + + 1. Create Sales Order (SO) + + Go to **Sales | Sales Order** + + Create and save the customer PO into Sales Order. + + ![sales-order](../../../static/img/usage/production/guide/sales-order.png) + + 2. SO Check the Available Stock Balance + + You can press F11 (Available Stock Balance) on the item code highlighted. + + Below is **CAR** stock available balance. + + ![car-available-balance](../../../static/img/usage/production/guide/car-available-balance.png) + + :::note + + **Results for CAR Item:** + + SO Qty = -100.00 + + PO Qty = 0.00 + + JO Qty = 0.00 + + Qty (On Hand) = 0.00 + + Available Qty = -100.00 + + ::: + + Below is **WHEEL** stock available balance. + + ![wheel-available-balance](../../../static/img/usage/production/guide/wheel-available-balance.png) + +### Purchase Order (Transfer From SO) + + 1. Create New Purchase Order (PO) + + Go to Purchase | Purchase Order + + 1. Click on the NEW button to start with a new PO + + 2. Select the Supplier + + ![purchase-order-new](../../../static/img/usage/production/guide/purchase-order-new.png) + + 2. PO Transfer From SO + + 1. Right click on P/Order (Title) + + 2. Click on Transfer From Sales Order in the menu + + ![purchase-order-transfer-from](../../../static/img/usage/production/guide/purchase-order-transfer-from.png) + + 3. Document Transfer (SO -> PO) + + 1. Pick the Item from the SO list + + 2. Input Transfer Qty to transfer over PO + + 3. Click OK to proceed + + ![document-transfer](../../../static/img/usage/production/guide/document-transfer.png) + + 4. Save the PO Document + + Click on the SAVE button + + ![purchase-order-save](../../../static/img/usage/production/guide/purchase-order-save.png) + + 5. PO Check the Available Stock Balance + + You can press F11 (Available Stock Balance) on the item code highlighted. + + Below is WHEEL stock available balance + + ![wheel-available-balance-after-save](../../../static/img/usage/production/guide/wheel-available-balance-after-save.png) + + :::note + + **Results for WHEEL Item:** + + SO Qty = -100.00 + + PO Qty = -35.00 + + JO Qty = 0.00 + + Qty (On Hand) = 0.00 + + Available Qty = -65.00 + ::: + +### Create New Job Order + +Click on the NEW button and select the Customer. + +![new-job-order](../../../static/img/usage/production/guide/new-job-order.png) + +:::info + +> Customer Info from SO + +Basically, the customer and other information is copied from the SO. + +> Assembly Item Info (Header & Footer) + +The assembly item is transferred from the SO. It will determine the BOM Components required and the assembly unit cost. + +> BOM Components Details + +Total components quantity requirements to meet the total output. + +::: + +### Document Transfer (SO --> JO) + +1. Create New Job Order (JO) + + Go to **Production | Job Order...**. + + 1. Click on the NEW button to start with a new JO + + 2. Select the Customer + + ![new-job-order](../../../static/img/usage/production/guide/new-job-order.png) + +2. JO Transfer From SO + + 1. Right click on Job Order (Title) + + 2. Click on Transfer From Sales Order in the menu + + ![job-order-transfer-from](../../../static/img/usage/production/guide/job-order-transfer-from.png) + +3. Document Transfer (SO --> JO) + + 1. Pick the Item from the SO list + + 2. Input Transfer Qty to transfer over JO + + 3. Click OK to proceed + + ![production-document-transfer](../../../static/img/usage/production/guide/production-document-transfer.png) + +4. Show Multilevel BOM in Flat Mode + + This function enables users to drill down to the flattened level of the multilevel BOM structure. For example, the CAR multilevel BOM structure. + + |**Level 0** | **Level 1** | **Level 2** | **Level 3** | + |---|---|---|---| + |Car | Frame | Front Frame | Orange | + |Car | Frame | Front Frame | Screw | + |Car | Frame | Back Frame | Red Light | + |Car | Frame | Back Frame | Screw | + |Car | Wheel | Rim | | + |Car | Wheel | Tyres | | + |Car | Engine | Engine Block | Filter | + |Car | Engine | Engine Block | Screw | + |Car | Engine | Piston | Tube | + |Car | Engine | Piston | Cover | + |Car | Labour | | | + + Before FLAT MODE, BOM components show at **LEVEL 1**. + + ![click-show-multilevel-bom-in-flat-mode](../../../static/img/usage/production/guide/click-show-multilevel-bom-in-flat-mode.png) + + Click on Show Multilevel BOM in Flat Mode button. + + It will prompt the below message. + + ![confirm-operation](../../../static/img/usage/production/guide/confirm-operation.png) + + Press NO to keep the BOM components at **LEVEL 1**. + + Press YES to continue to flatten the multilevel BOM to **LEVEL 3**. + + After FLAT MODE, BOM components show at **LEVEL 3**. + + ![bom-components](../../../static/img/usage/production/guide/bom-components.png) + +5. Save the JO Document + + Click on the SAVE button. + + ![job-order-save](../../../static/img/usage/production/guide/job-order-save.png) + +6. JO Check the Available Stock Balance + + You can press F11 (Available Stock Balance) on the item code highlighted. + + Below is component “FRAME” stock available balance. + + ![frame-available-balance](../../../static/img/usage/production/guide/frame-available-balance.png) + + :::note + + **Result for component "FRAME" Item:** + + SO Qty = 0.00 + + PO Qty = 0.00 + + JO Qty = -6.00 + + Qty (On Hand) = 0.00 + + Available Qty = -6.00 + + ::: + + Below is component “WHEEL” stock available balance. + + ![wheel-available-balance-2](../../../static/img/usage/production/guide/wheel-available-balance-2.png) + + :::note + + **Result for component "WHEEL" Item:** + + SO Qty = -100.00 + + PO Qty = +35.00 + + JO Qty = -24.00 + + Qty (On Hand) = 0.00 + + Available Qty = -89.00 + + ::: + + Below is component "Engine" stock available balance. + + ![engine-available-balance](../../../static/img/usage/production/guide/engine-available-balance.png) + + :::note + + **Result for component "ENGINE" Item:** + + SO Qty = 0.00 + + PO Qty = 0.00 + + JO Qty = -6.00 + + Qty (On Hand) = 0.00 + + Available Qty = -6.00 + + ::: + +### Offset Qty In Sales Order + +What is the purpose of the Offset Qty in Sales Order? You will see a new column named “Offset Qty”. It allows you to input a value to increase or reduce the original QTY to be transferred to Purchase Order and Job Order. + +![offset-qty-so](../../../static/img/usage/production/guide/offset-qty-so.png) + +1. Positive Offset Qty + + REDUCE the Transferable QTY to PO and JO. + + For example, + + |**SO Original Qty**|**Offset Qty**|**Transferable to PO/JO**| + |---|---|---| + |100.00 | 0.00 (default) | 100.00 | + |100.00 | +15.00 | 85.00 | + +2. Negative Offset Qty + + INCREASE the Transferable QTY to PO and JO. + + For example, + + |**SO Original Qty**|**Offset Qty**|**Transferable to PO/JO**| + |---|---|---| + |100.00 | 0.00 (default) | 100.00 | + |100.00 | -15.00 | 115.00 | + +### Split to X Process + +1. Use this field to assign multiple processes/machines in one Job Order/Stock Item Assembly to produce the same End Products using the same range of BOM components. + + ![split-to-x-process](../../../static/img/usage/production/guide/split-to-x-process.png) + +2. For example, To make a cup of MILO KAO KAO, it needs - MILO Powder x 5 spoons - Sugar x 0.5 spoon - Water x 100ml + + In order to make 100 cups of milo from one Job Order created, we need 10 persons to make it more efficient. Therefore, we have to input "Split to 10 process(s)", it means 10 persons processing. Job Order will break down the BOM components into 10 processes like below: + + |**No of process(s)** | **1** | **2** | **3** | **4** | **5** | **6** | **7** | **8** | **9** | **10** | **TOTAL** | + |---|---|---|---|---|---|---|---|---|---|---|---| + |MILO POWDER | 50 | 50 | 50 | 50 | 50 | 50 | 50 | 50 | 50 | 50 | 500 spoons | + |Sugar | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 50 spoons | + |Water | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 10000 ml | + + NOTE: Preview and select the standard report name "Job Order 2 with Multiplier - 30 Columns (without cost)". + +### BOM Tree Entry + +1. Some manufacturing companies need to modify and overwrite the standard BOM structure during the entry stage. This button helps to add/remove the components to overwrite the BOM structure. + +2. Click the "BOM Tree Entry" button. + + ![click-bom-tree-entry](../../../static/img/usage/production/guide/click-bom-tree-entry.png) + +3. You can drill down all the BOM structures. + +4. Tick the components in the tree you wish to insert into the Job Order/Stock Assembly/Disassembly. + +5. Press OK to confirm. + + ![stock-bom-tree-entry](../../../static/img/usage/production/guide/stock-bom-tree-entry.png) + + |**Button**|**Function**| + |---|---| + |Add | To add new components at LEVEL 1 ONLY | + |Add Child | To add new child components start from LEVEL 2 onwards | + |Delete | To remove the components at all LEVEL 1, 2, 3, 4, ... | + +### Stock Batch + +:::info + +Watch tutorial video here: [Stock Maintain Batch](https://youtu.be/QUlp-Js-cnk) + +::: + +This module commonly used in food manufacturing, pharmaceutical, cosmetic/skin care product. It helps to trace the expiry date of the products. It can set the manufacturing date for label print purposes and easy to identify the stock expired to write off using stock adjustment. + +1. **Stock** > **Maintain Batch** > **New** + + Insert the code, description, Expiry date, Manufacturing date & items that will expire on this expiry date. + + ![stock-batch](../../../static/img/usage/production/guide/stock-batch.png) + +2. **Purchase** > **Purchase Invoice** > **New** + + You can enable Batch column from the hidden bar and assign your stock batch during purchase for every individual item. + + ![batch-in-pi](../../../static/img/usage/production/guide/batch-in-pi.png) + +3. **Sales** > **Sales Invoice** > **New** + + In Sales Invoice, you can select the item issue out from which batch (expiry date), system will also show the expiry day & quantity available. + + ![batch-in-IV](../../../static/img/usage/production/guide/batch-in-iv.png) + +4. **Stock** > **Print Stock Batch Expiry** + + You can also check the listing of your product that will be expire soon as well as you can trace the product manufacture date. + + ![print-stock-batch-expiry](../../../static/img/usage/production/guide/print-stock-batch-expiry.png) + +## Stock Item Assembly + +Stock Item Assembly is an entry form to record the actual components (materials) usage to convert/produce the final product based on the actual output. Unit cost will be used to revalue the stock balance. + +Actual components (materials) used will be deducted out from the stock balance. However, the final products will replenish the stock balance. You can always check the stock movement from the stock card report. + +### Stock Item Assembly (Transfer From JO) + +1. Create New Stock Item Assembly (AS) + + Go to **Production | Stock Item Assembly…**. + + Click on the NEW button to start with a new AS. + + ![stock-item-assembly](../../../static/img/usage/production/guide/stock-item-assembly.png) + +2. AS Transfer From JO + + 1. Right click on Item Assembly (Title). + + 2. Click on Transfer From Job Order in the menu. + + ![item-assembly-transfer-from](../../../static/img/usage/production/guide/item-assembly-transfer-from.png) + +3. Document Transfer (JO → AS) + + 1. Pick the Item from the JO list. + + 2. Input X/F Qty to transfer over AS. + + 3. Click OK to proceed. + + ![production-document-transfer-2](../../../static/img/usage/production/guide/production-document-transfer-2.png) + +4. Save the AS Document + + Click on SAVE button. + + ![item-assembly-save](../../../static/img/usage/production/guide/item-assembly-save.png) + +5. AS Check the Available Stock Balance + + You can press F11 (Available Stock Balance) on the item code highlighted. + + Below is **component “FRAME”** stock available balance. + + ![frame-available-balance-2](../../../static/img/usage/production/guide/frame-available-balance-2.png) + + :::note + + **Result for component "FRAME" item:** + + SO Qty = 0.00 + + PO Qty = 0.00 + + JO Qty = -2.00 + + Qty (On Hand) = -4.00 + + Available Qty = -6.00 + + ::: + + Below is **component “WHEEL”** stock available balance. + + ![wheel-available-balance-3](../../../static/img/usage/production/guide/wheel-available-balance-3.png) + + :::note + + **Result for component "WHEEL" item:** + + SO Qty = -100.00 + + PO Qty = +35.00 + + JO Qty = -8.00 + + Qty (On Hand) = -16.00 + + Available Qty = -89.00 + + ::: + + Below is **component “ENGINE”** stock available balance. + + ![engine-available-balance-2](../../../static/img/usage/production/guide/engine-available-balance-2.png) + + :::note + + **Result for component "ENGINE" item:** + + SO Qty = 0.00 + + PO Qty = 0.00 + + JO Qty = -2.00 + + Qty (On Hand) = -4.00 + + Available Qty = -6.00 + + ::: + +### Batch Update Unit Cost + +Allow users to run Update Unit Cost for ALL or Stock Item Assembly selected. + +1. At Stock Item Assembly browse, RIGHT click on the area between the detail and close button. + +2. You will see the small menu. See screenshot below. + + ![batch-update-unit-cost](../../../static/img/usage/production/guide/batch-update-unit-cost.png) + +3. Click on Batch Update Unit Cost. You will see the screenshot below. + +4. You can highlight more than one Stock Assembly document. RIGHT click and "Tick Selection". + + ![stock-batch-update-unit-cost](../../../static/img/usage/production/guide/stock-batch-update-unit-cost.png) + +5. After that, press the UPDATE button to start. + + ![confirm-stock-batch-update-unit-cost](../../../static/img/usage/production/guide/confirm-stock-batch-update-unit-cost.png) + +6. Once completed, it will prompt the below message. Press OK to exit. + + ![confirm-stock-batch-update-unit-cost-2](../../../static/img/usage/production/guide/confirm-stock-batch-update-unit-cost-2.png) + +## Stock Item Disassembly + +Stock Item Disassembly is an entry form to record the actual components (materials) to be received after convert or disassemble from the final product. + +Components (materials) will be added into the stock balance. However, the final products will be deducted out from the stock balance. You can always check the stock movement from the stock card report. + +### Stock Item Disassembly (DS) Entry + +1. CLICK on the **NEW** button. + + ![item-disassembly-new](../../../static/img/usage/production/guide/item-disassembly-new.png) + +2. Select the **Disassembly Code** to disassembly. + + ![select-disassembly-code](../../../static/img/usage/production/guide/select-disassembly-code.png) + +3. Enter the **quantity**. BOM components quantity based on the BOM master in **Maintain Stock Item**. + + ![select-disassembly-qty](../../../static/img/usage/production/guide/select-disassembly-qty.png) + +4. CLICK on the **SAVE** button. + + ![item-disassembly-save](../../../static/img/usage/production/guide/item-disassembly-save.png) + +### Stock Balance Result After Disassembly + +Stock balance results: + +| | Item Code | Qty | DS | **After DS Qty** | +|---|---|---|---|---| +|End Products | BOM | 5.00 | -5.00 | **0.00** | +|Component | ANT | 0.00 | +5.00 | **5.00** | +|Component | C-PRE-100 | 0.00 | +5.00 | **5.00** | +|Component | COVER | 0.00 | +15.00 | **15.00** | diff --git a/docs/usage/production/report.md b/docs/usage/production/report.md new file mode 100644 index 00000000..59dda07f --- /dev/null +++ b/docs/usage/production/report.md @@ -0,0 +1,201 @@ +--- +sidebar_position: 6 +title: Reports +description: A guide on Production Report +slug: /usage/production/report +tags: ["SQL Account", "Usage", "Production", "Report"] +--- + +:::note +This is an additional module. +::: + +## Print Job Order Listing + +### How to Print Job Order Listing + +1. Go to Production -> Select the report + + ![navigate-job-order-listing](../../../static/img/usage/production/report/navigate-job-order-listing.png) + +2. Select the Document Master Details + + ![job-order-listing-master-details](../../../static/img/usage/production/report/job-order-listing-master-details.png) + +3. Select the Document Details + + ![job-order-listing-document-details](../../../static/img/usage/production/report/job-order-listing-document-details.png) + +4. Press Apply Button + +5. Click Preview + + - Example of job order listing report. + + ![job-order-listing-example](../../../static/img/usage/production/report/job-order-listing-example.png) + +### Print Document Style + +Select the relevant checkboxes. + +![job-order-listing-print-document-style](../../../static/img/usage/production/report/job-order-listing-print-document-style.png) + +|**Field Name**| **Explanation**| +|---|---| +|Print Document Style | Tick this checkbox to print out bulk report or send batch email| +|Include Cancelled Documents | Tick this checkbox to include cancelled documents in the listing| + +## Print Outstanding Production Document Listing + +### How to Print Outstanding Production Document Listing + +1. Go to Production -> Select the report + + ![navigate-outstanding-production-document-listing](../../../static/img/usage/production/report/navigate-outstanding-production-document-listing.png) + +2. Select Outstanding Sales Order or Outstanding Job Order + + ![outstanding-production-document-listing-report-type](../../../static/img/usage/production/report/outstanding-production-document-listing-report-type.png) + +3. Choose how you want to filter your report + + ![outstanding-production-document-listing-filter](../../../static/img/usage/production/report/outstanding-production-document-listing-filter.png) + +4. Select the relevant options. + + |**Field Name**| **Explanation**| + |---|---| + |Print Outstanding Item | Tick this to include documents and items that have not been transferred to other documents| + |Print Fulfilled Item | Tick this to include documents and items that have already been transferred to other documents| + |Include Cancelled Document | Tick this checkbox to include cancelled documents in the listing| + +5. Press Apply Button + +6. Click Preview + + - Example of outstanding job order listing report. + + ![outstanding-job-order-listing-report](../../../static/img/usage/production/report/outstanding-job-order-listing-report.png) + + - Example of outstanding sales order listing report. + + ![outstanding-sales-order-listing-report](../../../static/img/usage/production/report/outstanding-sales-order-listing-report.png) + +## Print BOM Relation + +### How to Print BOM Relation + +1. Go to Production -> Select the report + + ![navigate-bom-relation](../../../static/img/usage/production/report/navigate-bom-relation.png) + +2. Select the Item Code + + ![bom-relation-select-item](../../../static/img/usage/production/report/bom-relation-select-item.png) + +3. Press Apply button + + ![bom-relation-click-apply](../../../static/img/usage/production/report/bom-relation-click-apply.png) + +4. Preview the report + + ![bom-relation-example](../../../static/img/usage/production/report/bom-relation-example.png) + +## Print BOM Listing + +### How to Print BOM Listing + +1. Go to Production -> Select the report + + ![navigate-bom-listing](../../../static/img/usage/production/report/navigate-bom-listing.png) + +2. This is the browse screen + + ![bom-listing-browse](../../../static/img/usage/production/report/bom-listing-browse.png) + +3. Select document type + + ![bom-listing-document-type](../../../static/img/usage/production/report/bom-listing-document-type.png) + +4. Tick relevant options + + |**Field Name** | **Explanation**| + |---|---| + |Print Document Style| Tick this to print all documents in this list as individual documents| + |Include Cancelled Document | Tick this checkbox to include cancelled documents in the listing| + + ![bom-listing-print-document-style](../../../static/img/usage/production/report/bom-listing-print-document-style.png) + +5. Filter your document listing + + ![bom-listing-filter](../../../static/img/usage/production/report/bom-listing-filter.png) + +6. Press Apply Button + +7. Preview the report. Press "detail" icon to see the detailed item information for each document + + ![bom-listing-example](../../../static/img/usage/production/report/bom-listing-example.png) + +## Print BOM Material Usage + +### How to Print BOM Material Usage + +1. Go to Production -> Select the report + + ![navigate-bom-material-usage](../../../static/img/usage/production/report/navigate-bom-material-usage.png) + +2. Filter by selecting the sub item, location, stock group, batch and category + + ![bom-material-usage-filter](../../../static/img/usage/production/report/bom-material-usage-filter.png) + +3. Press Apply Button + + ![bom-material-usage-apply](../../../static/img/usage/production/report/bom-material-usage-apply.png) + +4. Preview the report + + ![bom-material-usage-example](../../../static/img/usage/production/report/bom-material-usage-example.png) + +## Print BOM Planner + +### How to Print BOM Planner + +1. Go to Production -> Select the report + + ![navigate-bom-planner](../../../static/img/usage/production/report/navigate-bom-planner.png) + + ![bom-planner](../../../static/img/usage/production/report/bom-planner.png) + +2. Filter by selecting the BOM Code or BOM template + + ![bom-planner-filter](../../../static/img/usage/production/report/bom-planner-filter.png) + +3. Press Apply Button + +4. Preview the report + + ![bom-planner-example](../../../static/img/usage/production/report/bom-planner-example.png) + +## Print BOM Wastage Report + +### How to Print BOM Wastage Report + +1. Go to Production -> Select the report + + ![navigate-bom-wastage](../../../static/img/usage/production/report/navigate-bom-wastage.png) + + ![bom-wastage](../../../static/img/usage/production/report/bom-wastage.png) + +2. Set the date period, and select if you want to see Stock Assembly or Stock disassembly + + ![bom-wastage-select-date-range](../../../static/img/usage/production/report/bom-wastage-select-date-range.png) + +3. Filter based on project , stock group, item, location, and batch + + ![bom-wastage-filter](../../../static/img/usage/production/report/bom-wastage-filter.png) + +4. Press Apply Button + +5. Preview the report + + ![bom-wastage-example](../../../static/img/usage/production/report/bom-wastage-example.png) diff --git a/docs/usage/purchase.md b/docs/usage/purchase.md deleted file mode 100644 index ceb7bac5..00000000 --- a/docs/usage/purchase.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -sidebar_position: 3 -title: Purchase -description: Purchase work flow -slug: /usage/purchase -tags: ["SQL Account", "Usage", "Purchase"] ---- - -## Purchase Work Flow - -Example of sales process work flow aligned with SQL Account flow: - -![27](../../static/img/getting-started/user-guide/27.png) - -## Purchase Order - -1. **Purchase** | **Purchase Order** | **New** - -2. **Select Supplier** - -3. **Insert Item Code** - - 3a. **Insert Item Code and details** (e.g. Qty, Unit Cost) - - :::note - - You can navigate the search column by using the “TAB” button on your keyboard. It will apply to all drop down tables. - - ::: - - 3b. **Click on the show/hide/move column icon to customize your column layout**. - - 3c. If you want to key in for a discount amount, you may tick the discount field by following step 3b and update the discount field. You can key in multiple levels of discount as shown by the picture attached. - - ![28](../../static/img/getting-started/user-guide/28.png) - -4. After updating, click **Save** - -5. To preview the report, you may click on the preview button and select the format you wish to print. - - ![29](../../static/img/getting-started/user-guide/29.png) - -## Purchase Goods Received - -1. **Purchase** | **Goods Received** | **New** - -2. Select **Supplier Code** - -3. **Right Click on G/R Note title**, select **Transfer from Purchase Order**, tick the document that you wish to transfer - -4. **Save** the Goods Received Note - - ![30](../../static/img/getting-started/user-guide/30.png) - -## Purchase Invoice - -1. **Purchase** | **Purchase Invoice** | **New** - -2. **Select Supplier Code** - -3. **Right Click on Purchase Invoice title**, select **Transfer from Goods Received**, tick the document that you wish to transfer - -4. **Save** the Purchase Invoice - - ![31](../../static/img/getting-started/user-guide/31.png) diff --git a/docs/usage/purchase/_category_.json b/docs/usage/purchase/_category_.json new file mode 100644 index 00000000..ef78043a --- /dev/null +++ b/docs/usage/purchase/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Purchase", + "position": 7, + "link": { + "type": "generated-index", + "description": "SQL Account Purchase Guide" + } +} \ No newline at end of file diff --git a/docs/usage/purchase/faq.md b/docs/usage/purchase/faq.md new file mode 100644 index 00000000..c904fbb6 --- /dev/null +++ b/docs/usage/purchase/faq.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 3 +title: FAQ +description: FAQ +slug: /usage/purchase/faq +tags: ["SQL Account", "Usage", "Purchase", "FAQ"] +--- + +## 1. Why user still cannot view the unit price and subtotal where show cost in Goods Received Note / Invoice have granted rights + +**Issue:** + +1. User Access Control has been granted to **Show Cost in Purchase Goods Received.** +2. The Purchase Goods Received Note still does not display the unit price, tax amount, and subtotal. + +![missing-column](../../../static/img/usage/purchase/faq/missing-column.png) + +**Solution:** + +1. Point your mouse to any detail grid column. + + ![right-click-detail-grid-columns](../../../static/img/usage/purchase/faq/right-click-detail-grid-columns.png) + +2. Right Click -> Grid Layout -> Load Layout. + + ![grid-load-layout](../../../static/img/usage/purchase/faq/grid-load-layout.png) + +3. At Load Grid Layout, click on Reset Layout. + + ![reset-layout](../../../static/img/usage/purchase/faq/reset-layout.png) + +4. Purchase Goods Received detail grid layout has been reset to follow the user's access rights. + + ![default-layout](../../../static/img/usage/purchase/faq/default-layout.png) diff --git a/docs/usage/purchase/guide.md b/docs/usage/purchase/guide.md new file mode 100644 index 00000000..dd3d0bc2 --- /dev/null +++ b/docs/usage/purchase/guide.md @@ -0,0 +1,482 @@ +--- +sidebar_position: 1 +title: Guide +description: A guideline for Purchase Data Entry +slug: /usage/purchase/guide +tags: ["SQL Account", "Usage", "Purchase", "Guide"] +--- + +## Purchase Work Flow + +Example of sales process work flow aligned with SQL Account flow: + +![sales-process-workflow](../../../static/img/usage/purchase/guide/sales-process-workflow.png) + +## Purchase Request + +Purchase Request is an internal document used within a company between departments to request a purchase or product. + +For example, you want to purchase more office supplies. You must submit a Purchase Request to the purchasing department. + +![purchase-request](../../../static/img/usage/purchase/guide/purchase-request.png) + +![purchase-request-details](../../../static/img/usage/purchase/guide/purchase-request-details.png) + +1. **Purchase | Purchase Request | New** + +2. **Select Supplier Code** + +3. **Insert Item Code and details** (e.g., Qty, Unit Cost) + +4. **Write a description to explain your Purchase Request** + + ![purchase-request-data-entry](../../../static/img/usage/purchase/guide/purchase-request-data-entry.png) + +5. **Click the Save button once you are done. Below is the example of the entry created.** + + ![purchase-request-example-entry](../../../static/img/usage/purchase/guide/purchase-request-example-entry.png) + +## Purchase Order + +Purchase Order is a document that is issued by the purchasing department when placing an order with their supplier. + +A purchase order document contains the details (quantity, unit price) of the items that want to be purchased. + +![purchase-order](../../../static/img/usage/purchase/guide/purchase-order.png) + +![purchase-order-details](../../../static/img/usage/purchase/guide/purchase-order-details.png) + +1. **Purchase | Purchase Order | New** + +2. **Select Supplier Code** + +3. **Insert Item** + + 1. **Insert Item Code and details** (e.g. Qty, Unit Cost) + + :::info + + You can navigate the search column by using the “TAB” button on your keyboard. It will apply to all drop down tables. + + ::: + + 2. **Click on the show/hide/move column icon to customize your column layout**. + + 3. If you want to key in the discount amount, you may tick the discount field by following step 3b and update the discount field. You can key in multiple levels of discount as shown by the picture attached. + +4. **Write a description to explain your purchase order** + + ![purchase-order-data-entry](../../../static/img/usage/purchase/guide/purchase-order-data-entry.png) + +5. **Click the Save button once you are done. Below is the example of the entry created:** + + ![purchase-order-example-entry](../../../static/img/usage/purchase/guide/purchase-order-example-entry.png) + +### More : Project + +There are 2 types of project you need to be take note: + +1.Document Project + +2.Detail Project + +For **document project**, you need to point to **MORE** section **(on the left sidebar)**. + +For **detail project**, you have to add the **project** column from the Field Chooser. + +![detail-project](../../../static/img/usage/purchase/guide/detail-project.png) + +### Attachment + +You can use this feature to attach external PDF, excel, word documents and image files. + +![attachment](../../../static/img/usage/purchase/guide/attachment.png) + +1. Go to the left of the screen and click "Attachment" + +2. Click the small black arrow at the link icon + +3. Select ‘Attach files to Local Drive’ and choose the file from your computer to attach + +### Note + +1. Click on the Note section (on the LEFT side bar). + +2. RIGHT click it, you will see the Rich Text Editor pop-up. + +3. You can start typing the note. See the example screenshot below. + +4. Click on the X button to save and exit the Rich Text Editor. + +5. You will get prompted the ‘Save changes?’ message. Click YES to save it. + +![note](../../../static/img/usage/purchase/guide/note.png) + +### How to preview report + +To preview the report, you may click on the preview button and select the format you wish to print. + +![select-report](../../../static/img/usage/purchase/guide/select-report.png) + +### How to send report via Whatsapp + +![send-report-via-whatsapp](../../../static/img/usage/purchase/guide/send-report-via-whatsapp.png) + +A QR code will appear on the screen. Scan the QR code with your Whatsapp's Whatsapp Web function. + +## Goods Received + +Goods Received is a document issued after receiving a delivery as proof of the order receipt. + +![goods-received](../../../static/img/usage/purchase/guide/goods-received.png) + +![goods-received-details](../../../static/img/usage/purchase/guide/goods-received-details.png) + +1. **Purchase | Goods Receive | New** + +2. **Select Supplier Code** + +3. **Insert Item Code and details (e.g. Qty, Unit Cost)** + +4. **Write a description to explain your Goods Receive** + + ![goods-received-data-entry](../../../static/img/usage/purchase/guide/goods-received-data-entry.png) + +5. **Click the Save button once you are done. Below is the example of the entry created:** + +![goods-received-example-entry](../../../static/img/usage/purchase/guide/goods-received-example-entry.png) + +### Transfer From PO To DO + +1. **Purchase | Goods Receive | New** + +2. **Select Supplier Code** + +3. **Right Click on G/R Note title**, select **Transfer from Purchase Order**, tick the document that you wish to transfer + +4. **Save** the Goods Received Note + +![goods-received-transfer-from-po](../../../static/img/usage/purchase/guide/goods-received-transfer-from-po.png) + +### Notes - Landing Cost + +:::info +This is an additional module. +::: + +Landing Cost is to handle the cost to the warehouse that is not billed by the same supplier. In other words, it is an additional cost to increase your stock cost. This cost depends on the company and whether they want to add in or not. For instance, if you buy a product from Supplier A but it is shipped by Transport company B, you must enter the transport charges as a landing cost to increase your product cost. + +![landing-cost-1](../../../static/img/usage/purchase/guide/landing-cost-1.png) + +How to set Landing Cost? + +Follow the below image: + +![landing-cost-2](../../../static/img/usage/purchase/guide/landing-cost-2.png) + +1. **Landing Cost 1** = Key your Landing Cost to this column.(This cost will not take into the account.) +2. **Landing Cost 2** = If you have a different calculation than Landing Cost 1, you may enter your value to this column. +3. Click on + Button to select the cost allocated. + +![cost-allocated-by-subtotal](../../../static/img/usage/purchase/guide/cost-allocated-by-subtotal.png) + +***Formula for Cost Allocated By SubTotal*** + +- Formula : Item Subtotal / Document Subtotal * Landing Cost1 + +![formula-subtotal](../../../static/img/usage/purchase/guide/formula-subtotal.png) + +:::info + + Item 1 = A/B * C + + Landing Cost1 (D) = 50.00 / 1949.00 * 200 = 5.13 + + Item 2 + + Landing Cost (D) = 1899.00 / 1949.00 * 200 = 194.87 + +::: + +![stock-card-check-cost](../../../static/img/usage/purchase/guide/stock-card-check-cost.png) + +:::info + + How to get unit cost = 5.51? + + Formula : Product Unit Cost + Item Landing Cost1 / Item Qty + + Formula : 5 + (5.13 / 10) = 5.51 + +::: + +***Formula for Cost Allocated By Qty*** + +- Formula : Item Qty / Document Qty * Landing Cost1 + +![cost-allocated-by-quantity](../../../static/img/usage/purchase/guide/cost-allocated-by-quantity.png) + +![formula-quantity](../../../static/img/usage/purchase/guide/formula-quantity.png) + +:::info + + Item 1 : 10 / 11 * 200 = 181.81 + + Item 2 : 1 / 11 * 200 = 18.18 + +::: + +***Stock Card Report Outcome:*** + +:::info + + *Item ANT : unit cost will be 23.18, how to get 23.18 ? + + Unit Cost + (Landing Cost1 / Qty) = 5 + (181.82 / 10) = 23.18 + + *Item LCLIP : Unit Cost will be 1917.18 + + Unit Cost + (Landing Cost1 / Qty) = 1899 + (18.18 / 1) = 1917.18 + +::: + +***Formula for Cost Allocated By Smallest Qty*** + +- Formula : Item Qty *Rate/ Sum(Qty* Rate) * Landing Cost1 + +![cost-allocated-by-smallest-quantity](../../../static/img/usage/purchase/guide/cost-allocated-by-smallest-quantity.png) + +![formula-smallest-quantity](../../../static/img/usage/purchase/guide/formula-smallest-quantity.png) + +:::info + + Item 1 : 10 * 12 = 120 / 121 = 198.35 + + Item 2 : 1 * 1 = 1 / 121 = 1.65 + +::: + +***Stock Card Report Outcome*** + +:::info + + Item 1 : Unit cost for ANT = [Unit Price + (Item Landing Cost1 / Item Qty)] / ItemRate = [30 + (198.35 / 10)] / 12 = 4.15 + + Item 2 : Unit cost for LCLIP = [Unit Price + (Item Landing Cost1 / Item Qty)] / ItemRate = 1899 + 1.65 = 1900.65 + +::: + +That seed will grow to be a peach tree. You may wish for an apple or an orange, but you will get a peach. + +## Purchase Invoice + +You can key in the Purchase Invoice after your Purchase Order has been approved and the goods have been received. + +![purchase-invoice](../../../static/img/usage/purchase/guide/purchase-invoice.png) + +1. **Purchase | Purchase Invoice | New** + + ![purchase-invoice-data-entry](../../../static/img/usage/purchase/guide/purchase-invoice-data-entry.png) + +2. **Select Supplier Code** + +3. **Insert Item** + + 1. **Insert Item Code and details** (e.g. Qty, Unit Cost) + + :::info + + You can navigate the search column by using the "TAB" button on your keyboard. It will apply to all drop down tables. + + ::: + + ![search-supplier-column](../../../static/img/usage/purchase/guide/search-supplier-column.png) + +4. **Write a description to explain your Purchase Invoice** + +5. **Click the Save button once you are done. Below is the example of the entry created:** + +***Double Entry will be:-*** + +| Account | DR (RM) | CR (RM) | +|--------------------|---------|---------| +| Purchase Account | 500.00 | | +| Supplier Account | | 500.00 | + +### Transfer From DO + +1. **Purchase | Purchase Invoice | New** + +2. **Select Supplier Code** + +3. **Right Click on Purchase Invoice title**, select Transfer from Goods Received, tick the document that you wish to transfer + +4. **Save** the Purchase Invoice + +![purchase-invoice-transfer-from-do](../../../static/img/usage/purchase/guide/purchase-invoice-transfer-from-do.png) + +## Cash Purchase + +You can key in Cash Purchase after your Purchase Order has been approved and the goods have been received. + +Cash purchases are used for purchases that are paid for with cash and have no outstanding payment. + +![cash-purchase](../../../static/img/usage/purchase/guide/cash-purchase.png) + +1. **Purchase | Cash Purchase | New** + + ![cash-purchase-data-entry](../../../static/img/usage/purchase/guide/cash-purchase-data-entry.png) + +2. **Select Supplier Code** + +3. **Insert Item** + + 1. **Insert Item Code and details** (e.g. Qty, Unit Cost) + + :::info + + You can navigate the search column by using the "TAB" button on your keyboard. It will apply to all drop down tables. + + ::: + + ![search-supplier-column-2](../../../static/img/usage/purchase/guide/search-supplier-column-2.png) + +4. Write a description to explain your Cash Purchase + +5. Click the **Save** button once you are done. + +![cash-purchase-example-entry](../../../static/img/usage/purchase/guide/cash-purchase-example-entry.png) + +### Transfer From + +You can transfer your existing Purchase Order, Goods Receive Note, or Purchase Request to your Cash Sales. + +All you have to do is RIGHT-CLICK at the "Cash Purchase" title + +![cash-purchase-transfer-from](../../../static/img/usage/purchase/guide/cash-purchase-transfer-from.png) + +### Payment Paid + +For cash purchases, you can select the payment method. and key in the payment amount. + +![cash-purchase-payment-paid-details](../../../static/img/usage/purchase/guide/cash-purchase-payment-paid-details.png) + +![cash-purchase-payment-paid-payment-by](../../../static/img/usage/purchase/guide/cash-purchase-payment-paid-payment-by.png) + +You can also key in the Cheque No. and Bank Charges if there are any . + +Once you have **SAVED** your "Cash Purchase", The system will have created a Supplier payment document for you. + +![cash-purchase-generate-pv-number](../../../static/img/usage/purchase/guide/cash-purchase-generate-pv-number.png) + +## Extra Goods Received + +Extra Goods Received is usually used by businesses where Invoices are issued before Goods Received. + +You would need an Invoice -> DO module in order to issue Extra Goods Received Note. + +![navigate-extra-goods-received](../../../static/img/usage/purchase/guide/navigate-extra-goods-received.png) + +1. **Purchase | Extra Goods Receive | New** + +2. **Select Supplier Code** + +3. **Insert Item Code and details** (e.g. Qty, Unit Cost) + +4. **Write a description to explain your Extra Goods Receive** + + ![extra-goods-received-data-entry](../../../static/img/usage/purchase/guide/extra-goods-received-data-entry.png) + +5. **Click the Save button once you are done.** + +### Transfer From PI To EGR + +You can transfer your existing Purchase invoice or Cash Purchase. + +All you have to do is RIGHT-CLICK at the "Extra Goods Received" title. + +![extra-goods-received-transfer-from](../../../static/img/usage/purchase/guide/extra-goods-received-transfer-from.png) + +## Purchase Debit Note + +Purchase Debit Note is used to increase your expense amount. + +Or to increase the amount of credit that you owe your supplier. + +![purchase-debit-note](../../../static/img/usage/purchase/guide/purchase-debit-note.png) + +1. **Purchase | Purchase Debit Note | New** + +2. **Select Supplier Code** + +3. **Insert Item Code and details** (e.g. Qty, Unit Cost) + +4. **Write a description to explain your Purchase Debit Note** + + ![purchase-debit-note-data-entry](../../../static/img/usage/purchase/guide/purchase-debit-note-data-entry.png) + +5. **Click the Save button once you are done. Below is the example of the entry created:** + + ![purchase-debit-note-example-entry](../../../static/img/usage/purchase/guide/purchase-debit-note-example-entry.png) + +### Transfer From PI + +Instead of keying in a new document, you can transfer it from an existing Purchase Request or Purchase Order or Goods Received document. + +All you have to do is RIGHT-CLICK at the "Purchase Debit Note" title. + +![purchase-debit-note-transfer-from](../../../static/img/usage/purchase/guide/purchase-debit-note-transfer-from.png) + +## Purchase Returned + +Purchase Return document is created when you return purchased goods to the supplier. + +![purchase-returned](../../../static/img/usage/purchase/guide/purchase-returned.png) + +1. **Purchase | Purchase Returned | New** + +2. **Select Supplier Code** + +3. **Insert Item Code and details** (e.g. Qty, Unit Cost) + +4. **Write a description to explain your Purchase Return** + + ![purchase-returned-data-entry](../../../static/img/usage/purchase/guide/purchase-returned-data-entry.png) + +5. **Click the Save button once you are done. Below is the example of the entry created:** + +![purchase-returned-example-entry](../../../static/img/usage/purchase/guide/purchase-returned-example-entry.png) + +### Transfer From PI To PDN + +Instead of keying in a new document, you can transfer it from an existing Purchase Invoice or Cash Purchase document. + +All you have to do is RIGHT-CLICK at the "Purchase Return" title. + +![purchase-returned-transfer-from](../../../static/img/usage/purchase/guide/purchase-returned-transfer-from.png) + +## Purchase Cancelled Note + +You can key in the Purchase Cancelled Note to remove any outstanding Purchase Orders. + +![purchase-cancelled-note](../../../static/img/usage/purchase/guide/purchase-cancelled-note.png) + +1. **Purchase | Purchase Cancelled Note | New** + +2. **Select Supplier Code** + +3. **Insert Item Code and details** (e.g. Qty, Unit Cost) + +4. **Write a description to explain your Purchase Cancelled Note** + + ![purchase-cancelled-note-data-entry](../../../static/img/usage/purchase/guide/purchase-cancelled-note-data-entry.png) + +5. **Click the Save button once you are done.** + +### Transfer From PO To PCN + +Instead of keying in a new document, you can transfer it from an existing Purchase Invoice or Cash Purchase document. + +All you have to do is RIGHT-CLICK at the "Purchase Cancelled Note" title. + +![purchase-cancelled-note-transfer-from](../../../static/img/usage/purchase/guide/purchase-cancelled-note-transfer-from.png) diff --git a/docs/usage/purchase/report.md b/docs/usage/purchase/report.md new file mode 100644 index 00000000..b4f8734b --- /dev/null +++ b/docs/usage/purchase/report.md @@ -0,0 +1,247 @@ +--- +sidebar_position: 2 +title: Reports +description: A guideline to print Purchase Report +slug: /usage/purchase/report +tags: ["SQL Account", "Usage", "Purchase", "Report"] +--- + +## Print Purchase Document Listing + +### How to Print Purchase Document Listing + +1. Go to Purchase and click Print Purchase Document Listing. + + ![navigate-purchase-document-listing](../../../static/img/usage/purchase/report/navigate-purchase-document-listing.png) + +2. Select which Document listing you want to view. Refer the image below. + + ![purchase-document-listing](../../../static/img/usage/purchase/report/purchase-document-listing.png) + +3. Press Apply Button. + + ![purchase-document-listing-apply](../../../static/img/usage/purchase/report/purchase-document-listing-apply.png) + +4. Click Preview & Listing Report. + + ![purchase-document-listing-select-report](../../../static/img/usage/purchase/report/purchase-document-listing-select-report.png) + +- Example of customer invoices listing report. + + ![purchase-document-listing-report](../../../static/img/usage/purchase/report/purchase-document-listing-report.png) + +### Print Document Style + +Tick relevant check boxes. + +![purchase-document-listing-print-document-style](../../../static/img/usage/purchase/report/purchase-document-listing-print-document-style.png) + +|**Field Name**| **Explanation**| +|---|---| +|Print Document Style| Tick this checkbox to print out bulk report or send batch email| +|Include Cancelled Documents| Tick this checkbox to include cancelled documents in the listing| + +If you Tick Print Document Style , you will able to choose purchase document report format. + +![purchase-document-listing-print-document-style-2](../../../static/img/usage/purchase/report/purchase-document-listing-print-document-style-2.png) + +***Group/Sort By*** + +You can filter your documents based on Document, Agent, Area, Currency, Project and Company Category. + +![purchase-document-listing-group-sort-by](../../../static/img/usage/purchase/report/purchase-document-listing-group-sort-by.png) + +You can use the Group by/Sort by table to choose how you want to group your report listing. + +![purchase-document-listing-group-sort-by-2](../../../static/img/usage/purchase/report/purchase-document-listing-group-sort-by-2.png) + +Select the Listing Report. + +![purchase-document-listing-group-sort-by-select-report](../../../static/img/usage/purchase/report/purchase-document-listing-group-sort-by-select-report.png) + +Here is an example of the report. + +![purchase-document-listing-group-sort-by-report](../../../static/img/usage/purchase/report/purchase-document-listing-group-sort-by-report.png) + +## Print Outstanding Purchase Document Listing + +### How to Print Outstanding Purchase Document Listing + +![navigate-outstanding-purchase-document-listing](../../../static/img/usage/purchase/report/navigate-outstanding-purchase-document-listing.png) + +1. Select which Document listing you want to view. Refer to the image below. + + ![outstanding-purchase-document-listing](../../../static/img/usage/purchase/report/outstanding-purchase-document-listing.png) + +2. Press Apply Button. + + ![outstanding-purchase-document-listing-apply](../../../static/img/usage/purchase/report/outstanding-purchase-document-listing-apply.png) + +3. Click Preview & Listing Report. + + ![outstanding-purchase-document-listing-select-report](../../../static/img/usage/purchase/report/outstanding-purchase-document-listing-select-report.png) + +- Example of outstanding purchase document listing report. + + ![outstanding-purchase-document-listing-report](../../../static/img/usage/purchase/report/outstanding-purchase-document-listing-report.png) + +### Print Outstanding Item & Print Fulfilled Item + +|**Field Name**| **Explanation**| +|---|---| +|Print Outstanding Item| Tick this to include documents and items that have not been transferred to other documents.| +|Print Fulfilled Item| Tick this to include documents and items that have already been transferred to other documents.| +|Include Cancelled Document| Tick this checkbox to include cancelled documents in the listing.| +|Calculate Outstanding SO & PO Qty| Calculate outstanding quantity in the report.| +|Transfer Doc Date Follow Filtered Date| Display documents based on the transfer date.| + +![outstanding-purchase-document-listing-print-outstanding-item-fulfilled-item](../../../static/img/usage/purchase/report/outstanding-purchase-document-listing-print-outstanding-item-fulfilled-item.png) + +***Group/Sort By*** + +You can filter your documents based on Document, Agent, Area, Currency, Project, and Company Category. + +![outstanding-purchase-document-listing-group-sort-by](../../../static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by.png) + +You can use the Group by/Sort by table to choose how you want to group your report listing. + +![outstanding-purchase-document-listing-group-sort-by-2](../../../static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-2.png) + +Select the Listing Report. + +![outstanding-purchase-document-listing-group-sort-by-select-report](../../../static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-select-report.png) + +- Here is an example of the outstanding purchase report: + +![outstanding-purchase-document-listing-group-sort-by-report](../../../static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-report.png) + +## Print Purchase Price History + +### How to Print Purchase Price History + +![navigate-purchase-price-history](../../../static/img/usage/purchase/report/navigate-purchase-price-history.png) + +1. Select which Document listing you want to see. Follow the image + +2. Filter the documents by supplier, agent, area, etc. + + ![purchase-price-history](../../../static/img/usage/purchase/report/purchase-price-history.png) + +3. Select how many records you want to display. + + ![purchase-price-history-set-records-number](../../../static/img/usage/purchase/report/purchase-price-history-set-records-number.png) + +4. Press Apply Button. + + ![purchase-price-history-apply](../../../static/img/usage/purchase/report/purchase-price-history-apply.png) + +5. Click Preview & Listing Report + + ![purchase-price-history-select-report](../../../static/img/usage/purchase/report/purchase-price-history-select-report.png) + +- Example of purchase price history report. + + ![purchase-price-history-report](../../../static/img/usage/purchase/report/purchase-price-history-report.png) + +- Example of price history. + + ![purchase-price-history-example](../../../static/img/usage/purchase/report/purchase-price-history-example.png) + +- Price movement. + + ![purchase-price-history-price-movement](../../../static/img/usage/purchase/report/purchase-price-history-price-movement.png) + +- Price/qty breakdown. + + ![purchase-price-history-price-qty-breakdown](../../../static/img/usage/purchase/report/purchase-price-history-price-qty-breakdown.png) + +- Price book. + + ![purchase-price-history-price-book](../../../static/img/usage/purchase/report/purchase-price-history-price-book.png) + +|**Feature**| **Explanation**| +|---|---| +|Price History| View past prices of stock items| +|Price Movement| Observe price movements for each stock item on a line graph| +|Price/Qty Breakdown| Analyze each price breakdown for your stock item displayed on a pie chart| +|Price Book| Review price tags for item codes| + +***Group/Sort By*** + +You can filter your documents based on Document, Agent, Area, Currency, Project, and Company Category. + +You can use the Group by/Sort by table to choose how you want to group your report listing. + +![purchase-price-history-group-sort-by](../../../static/img/usage/purchase/report/purchase-price-history-group-sort-by.png) + +Select the Listing Report. + +![purchase-price-history-group-sort-by-select-report](../../../static/img/usage/purchase/report/purchase-price-history-group-sort-by-select-report.png) + +- Here is an example of the price history report: + + ![purchase-price-history-group-sort-by-report](../../../static/img/usage/purchase/report/purchase-price-history-group-sort-by-report.png) + +## Print Purchase Analysis by Document + +### How to Print Purchase Analysis by Document + +![navigate-purchase-analysis-by-document](../../../static/img/usage/purchase/report/navigate-purchase-analysis-by-document.png) + +1. Filter the documents by supplier, agent, area, etc. + + ![purchase-analysis-by-document-filter](../../../static/img/usage/purchase/report/purchase-analysis-by-document-filter.png) + +2. Select which documents you want to view, if you want to see the RM amount or quantity , and whether to include tax and foreign currency. + + ![purchase-analysis-by-document-select-document](../../../static/img/usage/purchase/report/purchase-analysis-by-document-select-document.png) + +3. Press Apply Button. + + ![purchase-analysis-by-document-apply](../../../static/img/usage/purchase/report/purchase-analysis-by-document-apply.png) + +4. Click Preveiw & Listing Report. + +- Example of the analysis report. + + ![purchase-analysis-by-document-report](../../../static/img/usage/purchase/report/purchase-analysis-by-document-report.png) + +***Group/Sort By*** + +You can filter your documents based on Document, Agent, Area, Currency, Project and Company Category. + +You can use the Group by/Sort by table to choose how you want to group your report listing. + +![purchase-analysis-by-document-group-sort-by](../../../static/img/usage/purchase/report/purchase-analysis-by-document-group-sort-by.png) + +## Print Yearly Purchase Analysis + +### How to Print Yearly Purchase Analysis + +![navigate-yearly-purchase-analysis](../../../static/img/usage/purchase/report/navigate-yearly-purchase-analysis.png) + +1. Filter the documents by supplier, agent, area, etc. + + ![yearly-purchase-analysis-filter](../../../static/img/usage/purchase/report/yearly-purchase-analysis-filter.png) + +2. Set how you want to group the report by using Group by / Sort by. + + ![yearly-purchase-analysis-sort-group-by](../../../static/img/usage/purchase/report/yearly-purchase-analysis-sort-group-by.png) + +3. Select if you want to view the yearly amount or yearly quantity of your purchase. + + ![yearly-purchase-analysis-amount-quantity](../../../static/img/usage/purchase/report/yearly-purchase-analysis-amount-quantity.png) + +4. Press Apply Button. + + ![yearly-purchase-analysis-apply](../../../static/img/usage/purchase/report/yearly-purchase-analysis-apply.png) + +5. Click Preveiw & Listing Report. + + - For example, if you tick "Qty", your report will show the yearly quantity. + + ![yearly-purchase-analysis-qty-report](../../../static/img/usage/purchase/report/yearly-purchase-analysis-qty-report.png) + + - For example, if you tick "Amount", your report will show the yearly amount. + + ![yearly-purchase-analysis-amount-report](../../../static/img/usage/purchase/report/yearly-purchase-analysis-amount-report.png) diff --git a/docs/usage/report.md b/docs/usage/report.md deleted file mode 100644 index a8bdad9e..00000000 --- a/docs/usage/report.md +++ /dev/null @@ -1,285 +0,0 @@ ---- -sidebar_position: 8 -title: Report -description: Stock management -slug: /usage/report -tags: ["SQL Account", "Usage", "Report"] ---- - -## General Ledger - -### Balance Sheet - -1. Go to **GL** > **Print Balance Sheet** > Select your date - -2. Choose your preferred format - -3. “Show Up to Level” under Option refer to the depth of sub-accounts in your Maintain Chart of Account, the higher the value, the more level of detail will be shown. - -4. In Option Upper Level - - 1. **Use second description** – use second description which is controlled at GL > Maintain Chart of Account - - 2. **Zero Balance Account** – choose to show accounts in the report even if their amount is 0. - - 3. **Display Trade Debtor/Creditor in Details** – show per customer account in detail - -5. In Option Bottom Level - - 1. **Print Sub Account Only** – Select a certain account to view - - 2. **Print Project Comparison** – you are allowed to view your report by project (project module requested) - - 3. **Show Column Options** – you can preset setting as attached - -6. **Apply** - -![76](../../static/img/getting-started/user-guide/75.png) - -### Profit & Loss Statement - -1. Go to **GL** > **Print Profit and Loss Statement** > Select your date - -2. Choose your preferred format - -3. In Option Upper Level - - 1. **Use second description** – use second description which is maintained under GL > Maintain Chart of Account - - 2. **Zero Balance Account** – choose to show accounts in the report even if their amount is 0 - -4. In Option Upper Level - - 1. **Print Sub Account Only** – Select a certain account to view - - 2. **Print Manufacturing Account** – you are only allowed to view manufacturing account if you have set it up under Maintain Chart of Account - - 3. **Print Project Comparison** – you are allowed to view your report by project (project module requested) - - 4. **Show Column Options** – refer Balance Sheet - -5.**Apply** - - ![77](../../static/img/getting-started/user-guide/76.png) - -### Trial Balance - -1. Go to **GL** > **Print Trial Balance** > Select your date - -2. Filter by project, area, agent (optional) - -3. Tick whether you want to view General Ledger, Sales Ledger(Customer) or Purchase Ledger (Supplier) - -4. In Option Upper Level - - 1. **Use second description** – use second description is which maintained under GL > Maintain Chart of Account - - 2. **Zero Balance Account** – choose to show accounts in the report even if their amount is 0 - -5. **Apply** - - ![78](../../static/img/getting-started/user-guide/77.png) - -### Ledger Report - -1. Go to **GL** > **Print Ledger Report** > Select your date - -2. Filter by account, project, area, agent (optional) - -3. Tick whether you want to view General Ledger, Sales Ledger(Customer) or Purchase Ledger (Supplier) - -4. System can generate by group and give you a summary of each group (group/sort by) - -5. In Option Upper Level - - 1. **Merge GL Code for same document** – if you have the same account in one single transaction, the system will automatically merge, if you want to separate the account code for the same document, please un-tick. - - 2. **Exclude Project when merging** – exclude project when merge GL Account. - - 3. **Use second description** – use second description which is maintained under GL > Maintain Chart of Account - - 4. **Include Zero Closing Balance** – choose to show accounts in the report even if their amount is 0 - - 5. **Include Zero Transaction** – choose to show accounts in the report even if there are 0 transactions. - - 6. **Local Currency & Foreign Currency** – If you have foreign currency transactions, you can tick the foreign currency so that the system will show the figures in foreign currency compare versus local currency. - - 7. **Apply**. - - ![79](../../static/img/getting-started/user-guide/78.png) - -## Customer Report - -### Customer Aging - -1. **Customer** > **Print Customer Aging** > **Filter Aging Date** - -2. Choose your preferred report format options. - -3. You can select either 4 months, 6 months or 12 months aging - -4. Click on **Apply** - -![80](../../static/img/getting-started/user-guide/79.png) - -### Customer Statement - -1. **Customer** > **Print Customer Statement** > **Set Date Range** - -2. Choose your preferred options. - - 1. **Default Statement Type** – The default Setting preset under Maintain Customer - - 2. **Open Item Statement** – Show all outstanding transaction row by row - - 3. **Brought Forward Statement** – Show outstanding amount from previous months as a lump-sum - -3. You can select either 6 months or 12 months’ statement - -4. Click on **Apply** - - ![81](../../static/img/getting-started/user-guide/80.png) - -### Customer Due Document Listing - -In this report, you can print a reminder letter to remind customers of outstanding amounts. - -1. **Filter by Date, Document** (Invoice, Debit Note, Credit Note, Contra) - -2. Overdue or Undue document. - -3. System can generate by group and give you a summary on each group (group/sort by) - -4. **Apply**. - - ![82](../../static/img/getting-started/user-guide/81.png) - -5. If you want to **print a reminder letter, make sure you tick the customer code under “group / sort by”** and **Apply**. - - ![83](../../static/img/getting-started/user-guide/82.png) - -6. Preview the report and you will see **Cust Overdue Letter**, choose your preferred format. - - ![84](../../static/img/getting-started/user-guide/83.png) - - ![85](../../static/img/getting-started/user-guide/84.png) - -7. Customer Analysis By Document - - This report is used to analyse all customer documents in one report. You can check total Invoice, Credit Note, Debit Note, Payment and the rest of the document amount. - -8. **Customer** > **Customer Analysis By Document** - -9. Filter by Document Date and any others optional field to display. - -10. **Apply** - - ![86](../../static/img/getting-started/user-guide/85.png) - -## Sales Report - -### Sales Document Listing - - 1. Go to **Sales** > **Print Sales Document Listing** > filter which type of document you want: for example, **Sales Quotation /Sales Order/ Deliver Order/ Invoice Listing** - - 2. Filter by **date**, if left untick means all periods will be shown - - 3. Filter area by pipelines (It’s optional) - - 4. System can generate by group and can give you a summary on each diff group (group/sort by) - - 5. Click **Apply** to generate, whenever you change any setting under Step 3 or 4, please redo by clicking Apply - - ![87](../../static/img/getting-started/user-guide/86.png) - - :::note - - 1. **Export report into Excel** - - 1. **Right click on any title bar** - - 2. **Click on Grid Export > Export to Excel**. - - ![88](../../static/img/getting-started/user-guide/87.png) - - 2. **Batch Printing Invoices** - - If you want to print out entire month invoices by batch and into a page-by-page format, - - 1. **Sales** > **Print Sales Document Listing**. - - 2. Tick **“Print Document Style”** - - ::: - - :::info - - Watch tutorial video here: [Sales Invoicing Batch Print Invoices](ttps://www.youtube.com/watch?v=MbNMVn0mBiw&feature=youtu.be) - - ::: - - ![89](../../static/img/getting-started/user-guide/88.png) - -### Outstanding Sales Document Listing (Require Partial Delivery Module) - -This report can help you check the transfer document’s info, such as the amount of outstanding items for the particular document and; which invoices the DO have been transferred to. - -1. **Sales** > **Print Outstanding Sales Document Listing**. - -2. Filter the information that you want and apply. - -3. Criteria - - 1. **Print Outstanding Item** – to check outstanding items which have not yet been transferred. - - 2. **Print Fulfilled Item** – to check those documents which have been fully transferred and transferred to which document. - - 3. **Include cancelled documents** – tick to show cancelled documents in the report. - - 4. **Outstanding SO & PO** – to check the number of outstanding items from sales order and purchase order - - 5. **Transfer Doc Date Follow Filtered Date** – tick this if you want the document transfer date (e.g. transfer document Sales Order to Invoice both will followed filtered date. - -4. **Apply** - - ![90](../../static/img/getting-started/user-guide/89.png) - -5. If you want to know where this **document has already been transferred** to, you just **Preview** the report. - - ![91](../../static/img/getting-started/user-guide/90.png) - -## Inventory Report - -A subsidiary report where each individual movement of stock is recorded, including stock movements from Purchases, Sales and Returns. - -### Stock Card - - Step: **Stock** > **Print Stock Card** > **Apply** - - ![92](../../static/img/getting-started/user-guide/91.png) - -### Stock Card Qty - - Same purpose with stock card but stock card qty is without costing and pricing, this is useful for customers who want to block specific users from viewing stock costing. - - 1. **Stock** > **Print Stock Card Qty** > **Apply**. - - ![93](../../static/img/getting-started/user-guide/92.png) - -### Stock Month End Balance - - The Monthly Stock Balance Report summarizes the stock balances of the participant as of a calendar month end. The report also shows the monthly custody fee charged for each stock. - - 1. **Stock** > **Print Stock Card Qty** > **Apply**. - - ![94](../../static/img/getting-started/user-guide/93.png) - -### Stock Reorder Advice - - This report is to show reorder advice according to stock level, normally used to trace pending Purchase Orders and Sales Orders. You may compare as seen below: - - 1. **Stock** > **Print Stock Reorder Advice** > **Apply**. - - ![95](../../static/img/getting-started/user-guide/94.png) - - ![96](../../static/img/getting-started/user-guide/95.png) diff --git a/docs/usage/sales.md b/docs/usage/sales.md deleted file mode 100644 index c3100f19..00000000 --- a/docs/usage/sales.md +++ /dev/null @@ -1,145 +0,0 @@ ---- -sidebar_position: 4 -title: Sales -description: Sales work flow -slug: /usage/sales -tags: ["SQL Account", "Usage", "Sales"] ---- - -## Sales Work Flow - -Example of sales process work flow aligned with SQL Account flow: - -![32](../../static/img/getting-started/user-guide/32.png) - -## Sales Quotation - -:::info -Watch tutorial video here: [Sales Quotation](http://www.sql.com.my/video/sqlacc_tutorial/06-01_Sales_Quotation.mp4) -::: - -1. **Sales** | **Quotation** | **New** - -2. Select **Customer Code** - -3. Insert the item that is requested by the customer, and you can estimate your profit & loss in this transaction by checking on **Profit Estimator** - - ![33](../../static/img/getting-started/user-guide/33.png) - -4. After everything is keyed in correctly, save the **Sales Quotation** - -5. **Preview** the report and you can **print** or **export** it into PDF/ Email/ RTF(Microsoft Word)/Excel or others. - - ![34](../../static/img/getting-started/user-guide/34.png) - -## Sales Order - -:::info -Watch tutorial video here: [Sales Invoicing Sales Order](https://www.youtube.com/watch?v=klEAjmFT0og&feature=youtu.be) -::: - -1. **Sales** | **Sales Order** | **New** - -2. Select **Customer Code** - -3. **Right Click on Sales Order title**, select **Transfer from Quotation**. You can either transfer the whole quotation or only part of the quotation document (*Partial Delivery Module requested) - - ![35](../../static/img/getting-started/user-guide/35.png) - -4. Save the **Sales Order**. - - :::note - For additional reports showing outstanding sales orders, you can access **Sales | Print Outstanding Sales Document Listing**, and select **Sales Order** to view. This also applies to other sales documents. - ::: - -## Sales Delivery Order - -1. **Sales** | **Delivery Order** | **New** - -2. Select **Customer Code** - -3. **Right Click on D/Order title**, select **Transfer from Sales Order**. - -4. Save the **Delivery Order**. - - :::note - Once the delivery order is saved, the stock will be deducted. - ::: - -## Sales Invoice - -### Create New Invoice - -:::info -Watch tutorial video here: [Sales Invoicing Sales Invoice](https://www.youtube.com/watch?v=hQ6bX5pOKRQ&feature=youtu.be) -::: - -1. **Sales** | **Invoice** | **New** - -2. Select **Customer Code** - -3. **Right Click on Invoice** title, select **Transfer from Delivery Order**. - -4. **Save** the Invoice. - -### Show Double Entry - - :::info - Watch tutorial video here: [Ctrl + O](https://www.youtube.com/watch?v=FAKSzjEezjo&t=9s) - ::: - -**There have 2 methods to show double entry of the transactions:** - -1. After you save then invoice then you can press on keyboard short cut key “ Ctrl + O” to get the show double entry result. - - ![36](../../static/img/getting-started/user-guide/36.png) - -2. After you save the invoice, you may right click on the wording of Invoice then select “Show Double Entry”. - - ![37](../../static/img/getting-started/user-guide/37.png) - -## Cash Sales - -1. **Sales** | **Cash Sales** | **New** - -2. Select **Customer Code** - -3. Insert item and **Save** the **Cash Sales**. - -4. When saving, the system will prompt a **Payment/ Change** dialog box - - ![38](../../static/img/getting-started/user-guide/38.png) - - ![39](../../static/img/getting-started/user-guide/39.png) - -## Sales Credit Note - -:::info -Watch tutorial video here: [Sales Invoicing Sales Credit Note](https://www.youtube.com/watch?v=2LrsegwiWJM&feature=youtu.be) -::: - -1. **Sales** | **Credit Note** | **New** - -2. Select **Customer Code** - -3. **Right Click on Credit Note title**, select **Transfer from Sales Invoice/ Cash Sales**, enter the returned quality in X/F column. - -4. **Save** the Credit Note. - - ![40](../../static/img/getting-started/user-guide/40.png) - -## Sales Cancelled Note (required partial delivery module) - -Sales Cancelled Note is used for the cancelling of any outstanding Sales Order. - -1. **Sales** | **Sales Cancelled Note** | **New**. - -2. **Right Click on the Cancelled Note title**, select **Transfer from Sales Order**; (in Sales Cancelled Note, items can only be inserted by transferring from Sales Order) - - ![41](../../static/img/getting-started/user-guide/41.png) - -3. You can choose to transfer the sales order either by the whole document or partially. - - ![41b](../../static/img/getting-started/user-guide/41b.png) - -4. **Save** the Cancelled Note. diff --git a/docs/usage/sales/_category_.json b/docs/usage/sales/_category_.json new file mode 100644 index 00000000..fc5e5e3a --- /dev/null +++ b/docs/usage/sales/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Sales", + "position": 6, + "link": { + "type": "generated-index", + "description": "Sales guide" + } +} \ No newline at end of file diff --git a/docs/usage/sales/sales-faq.md b/docs/usage/sales/sales-faq.md new file mode 100644 index 00000000..bcb9f671 --- /dev/null +++ b/docs/usage/sales/sales-faq.md @@ -0,0 +1,66 @@ +--- +sidebar_position: 3 +title: FAQ +description: Solution for Sales +slug: /usage/sales/faq +tags: ["SQL Account", "Sales", "FAQ"] +--- + +## How to set Cash Drawer Kick Out? + +### Setup + +1. Tools > Options > Click on Barcode + + - **Option 1 :** Direct Kick Out -> The cash drawer connects directly to your PC. + + ![barcode-direct-kick-out](../../../static/img/usage/sales/sales-faq/cash-drawer-kick-out/barcode-direct-kick-out.png) + + :::tip[tip] + Select the correct *Port No* and click the **Kick Out** button to test whether the *Cash Drawer* opens. If the port number doesn't appear in the list, you may type it manually. + ::: + + - **Option 2**: Printer Kick Out -> The Cash Drawer direct connect to Printer + + ![barcode-printer-kick-out](../../../static/img/usage/sales/sales-faq/cash-drawer-kick-out/barcode-printer-kick-out.png) + + :::tip[tip] + Select your Printer and click the **Kick Out** button to test whether the *Cash Drawer* opens. + ::: + + :::info[note] + There are the problem if you are using cash drawer RJ 11, RJ 14, may switch to a COM port (USB cash drawer required). + ::: + +**If you met the problem on direct kick out, please answer the questions below before calling support :** + +1. Check Windows OS +2. Check SQL Account version +3. Try previewing and printing to see if the output prints correctly. +4. Run Windows 'Test Print' on the receipt printer. +5. Try Tools > Options > Kick Out to see if it responds. +6. Check the receipt printer Model. +7. Check which receipt printer driver is installed. +8. Check the cash drawer model. RJ11 is not supported; use a USB/COM cash drawer connected directly to the PC. + +## Why prompt error message when apply the Sales Price History? + +### Issue + +**Error message:** `arithmetic exception, numeric overflow or string truncation numeric value is out of range` + +1. Don't have **multi currency module.** + +2. Don't have big currency value like Indonesia. + +![sales-price-history-issue](../../../static/img/usage/sales/sales-faq/error-msg-sales-price-history/sales-price-history-issue.jpg) + +### Solution + +1. Go to **Tools | Options...** + +2. Click on **Miscellaneous.** + +3. Change the **Currency Rate** display format to **#,0.0000** (4 decimals places). + +![sales-price-history-solution](../../../static/img/usage/sales/sales-faq/error-msg-sales-price-history/sales-price-history-solution.jpg) diff --git a/docs/usage/sales/sales-guide.md b/docs/usage/sales/sales-guide.md new file mode 100644 index 00000000..4aef428c --- /dev/null +++ b/docs/usage/sales/sales-guide.md @@ -0,0 +1,181 @@ +--- +sidebar_position: 1 +title: Guide +description: Sales work flow +slug: /usage/sales/guide +tags: ["SQL Account", "Usage", "Sales"] +--- + +## Sales Work Flow + +Example of sales process work flow aligned with SQL Account flow: + +![sales-work-flow](../../../static/img/usage/sales/sales-guide/sales-work-flow.png) + +## Sales Quotation + +:::info +Watch the tutorial video here: [Sales Quotation](https://www.youtube.com/watch?v=2hKhtpaQfP4) +::: + +1. **Sales** | **Quotation** | **New** + +2. Select **Customer Code** + +3. Insert the requested item by the customer and estimate profit & loss using the **Profit Estimator** + + ![profit-estimator](../../../static/img/usage/sales/sales-guide/profit-estimator.png) + +4. After everything is keyed in correctly, save the **Sales Quotation** + +5. **Preview** the report and you can **print** or **export** it into PDF/ Email/ RTF(Microsoft Word)/Excel or others. + + ![preview-export](../../../static/img/usage/sales/sales-guide/preview-export.png) + +### Project + +There are 2 types of project you need to be take note. + +1. Document Project. For document project, you need to point to **MORE** section (on the **left side bar**). + +2. Detail Project. For detail project, you have to **insert the project column out from Field Chooser**. + + ![quotation-project](../../../static/img/usage/sales/sales-guide/quotation-project.png) + +### Attachment + +You can use this feature to attach external PDF, excel, word documents and image files. + +1. Go to the left of the screen and click "**Attachment**" + +2. Click the first icon + +3. Then choose the file from your computer that you want to attach + + ![quotation-attachment](../../../static/img/usage/sales/sales-guide/quotation-attachment.png) + +### Note + +1. Click on the Note section (on the **LEFT side bar**). + +2. **RIGHT click** it, you will see the Rich Text Editor pop-up. + +3. You can start key-in the note. See the example screenshot below. + +4. Click on **X** button (top right corner) to save and exit the Rich Text Editor. + +5. You will get prompted the Save changes? message. Click YES to save it. + + ![quotation-note](../../../static/img/usage/sales/sales-guide/quotation-note.png) + +## Sales Order + +:::info +Watch tutorial video here: [Sales Invoicing Sales Order](https://www.youtube.com/watch?v=klEAjmFT0og&feature=youtu.be) +::: + +1. **Sales** | **Sales Order** | **New** + +2. Select **Customer Code** + +3. **Right Click on Sales Order title**, select **Transfer from Quotation**. You can either transfer the whole quotation or only part of the quotation document (*Partial Delivery Module requested) + + ![document-transfer](../../../static/img/usage/sales/sales-guide/document-transfer.png) + +4. Save the **Sales Order**. + + :::note + For additional reports showing outstanding sales orders, you can access **Sales | Print Outstanding Sales Document Listing**, and select **Sales Order** to view. This also applies to other sales documents. + ::: + +## Delivery Order + +1. **Sales** | **Delivery Order** | **New** + +2. Select **Customer Code** + +3. **Right Click on D/Order title**, select **Transfer from Sales Order**. + +4. Save the **Delivery Order**. + + :::note + Once the delivery order is saved, the stock will be deducted. + ::: + +## Invoice + +### Create New Invoice + +:::info +Watch tutorial video here: [Sales Invoicing Sales Invoice](https://www.youtube.com/watch?v=hQ6bX5pOKRQ&feature=youtu.be) +::: + +1. **Sales** | **Invoice** | **New** + +2. Select **Customer Code** + +3. **Right Click on Invoice** title, select **Transfer from Delivery Order**. + +4. **Save** the Invoice. + +### Show Double Entry + + :::info + Watch tutorial video here: [Ctrl + O](https://www.youtube.com/watch?v=FAKSzjEezjo&t=9s) + ::: + +**There are 2 methods to show the double entry for a transaction:** + +1. After saving the invoice, press the keyboard shortcut key "Ctrl + O" to display the double entry result. + + ![show-double-entry-1](../../../static/img/usage/sales/sales-guide/show-double-entry-1.png) + +2. After you save the invoice, you may right click on the wording of Invoice then select “Show Double Entry”. + + ![show-double-entry-2](../../../static/img/usage/sales/sales-guide/show-double-entry-2.png) + +## Cash Sales + +1. **Sales** | **Cash Sales** | **New** + +2. Select **Customer Code** + +3. Insert item and **Save** the **Cash Sales**. + +4. When saving, the system will prompt a **Payment/ Change** dialog box + + ![cash-sales-1](../../../static/img/usage/sales/sales-guide/cash-sales-1.png) + + ![payment-received](../../../static/img/usage/sales/sales-guide/payment-received.png) + +## Credit Note + +:::info +Watch tutorial video here: [Sales Invoicing Sales Credit Note](https://www.youtube.com/watch?v=2LrsegwiWJM&feature=youtu.be) +::: + +1. **Sales** | **Credit Note** | **New** + +2. Select **Customer Code** + +3. **Right Click on Credit Note title**, select **Transfer from Sales Invoice/ Cash Sales**, enter the returned quantity in X/F column. + +4. **Save** the Credit Note. + + ![sales-credit-note](../../../static/img/usage/sales/sales-guide/sales-credit-note.png) + +## Sales Cancelled Note + +The Sales Cancelled Note is used to cancel any outstanding Sales Order. + +1. **Sales** | **Sales Cancelled Note** | **New**. + +2. **Right Click on the Cancelled Note title**, select **Transfer from Sales Order**; (in Sales Cancelled Note, items can only be inserted by transferring from Sales Order) + + ![sales-cancelled-note-1](../../../static/img/usage/sales/sales-guide/sales-cancelled-note-1.png) + +3. You can choose to transfer the sales order either by the whole document or partially. + + ![sales-cancelled-note-2](../../../static/img/usage/sales/sales-guide/sales-cancelled-note-2.png) + +4. **Save** the Cancelled Note. diff --git a/docs/usage/sales/sales-report.md b/docs/usage/sales/sales-report.md new file mode 100644 index 00000000..219144e1 --- /dev/null +++ b/docs/usage/sales/sales-report.md @@ -0,0 +1,73 @@ +--- +sidebar_position: 2 +title: Reports +description: Sales Report guideline +slug: /usage/sales/report +tags: ["SQL Account", "Sales", "Sales Report"] +--- + +## Print Sales Document Listing + + 1. Go to **Sales > Print Sales Document Listing**, and filter the document type you want, for example: **Sales Quotation, Sales Order, Delivery Order, Invoice Listing.** + + 2. Filter by **date**. If left unchecked, all periods will be shown + + 3. Filter area by pipelines (It’s optional) + + 4. The system can group results and provide a summary for each different group (group/sort by) + + 5. Click **Apply** to generate. If you change any settings in Steps 3 or 4, click Apply again. + + ![sales-document-listing](../../../static/img/usage/sales/sales-reports/sales-document-listing.png) + +### Export report into Excel + + 1. **Right click any title bar** + + 2. **Click Grid Export > Export to Excel**. + + ![export-report-into-excel](../../../static/img/usage/sales/sales-reports/export-report-into-excel.png) + +### Batch Printing Invoices + + If you want to print an entire month's invoices in batch (page‑by‑page format), + + 1. **Sales** > **Print Sales Document Listing**. + + 2. Check **“Print Document Style”** + + :::info + + Watch tutorial video here: [Sales Invoicing Batch Print Invoices](https://www.youtube.com/watch?v=MbNMVn0mBiw&feature=youtu.be) + + ::: + + ![batch-printing-invoices](../../../static/img/usage/sales/sales-reports/batch-printing-invoices.png) + +## Print Outstanding Sales Document Listing + +This report can help you check the transfer document’s information such as the number of outstanding items for the particular document and which invoices the DO have been transferred to. + +1. Sales > Print Outstanding Sales Document Listing. + +2. Filter the information that you want and click **Apply**. + +3. Criteria + + 1. **Print Outstanding Item** – to check items that have not yet been transferred. + + 2. **Print Fulfilled Item** – to check documents that have been fully transferred and to which document they were transferred. + + 3. **Include cancelled documents** – tick to show cancelled documents in the report. + + 4. **Outstanding SO & PO** – to check the number of outstanding items from sales orders and purchase orders. + + 5. **Transfer Doc Date Follow Filtered Date** – tick this if you want the transfer document date to follow the filtered date (e.g., if a Sales Order is transferred to an Invoice, both will follow the filtered date). + +4. Click **Apply** + + ![outstanding-sales-doc-listing](../../../static/img/usage/sales/sales-reports/outstanding-sales-doc-listing.png) + +5. To see where this document has been transferred, **preview** the report. + + ![outstanding-sales-doc-listing-preview](../../../static/img/usage/sales/sales-reports/outstanding-sales-doc-listing-preview.png) diff --git a/docs/usage/stock/_category_.json b/docs/usage/stock/_category_.json new file mode 100644 index 00000000..662b7465 --- /dev/null +++ b/docs/usage/stock/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Stock (Inventory)", + "position": 7, + "link": { + "type": "generated-index", + "description": "Stock usage guide" + } +} \ No newline at end of file diff --git a/docs/usage/stock/stock-faq.md b/docs/usage/stock/stock-faq.md new file mode 100644 index 00000000..756a2695 --- /dev/null +++ b/docs/usage/stock/stock-faq.md @@ -0,0 +1,584 @@ +--- +sidebar_position: 3 +title: FAQ +description: Stock FAQ +slug: /usage/stock/stock-faq +tags: ["SQL Account", "Usage", "Inventory", "Stock","FAQ"] +--- + +## Barcode + +### How to Setup Barcode + +1. Download the GRN Barcode Report Template from the link below. + + 1. Barcode Capture from Maintain Stock Item Barcode as Barcode. + - Template: [GRN BarCode (20×40) Capture Item BarCode](https://www.sql.com.my/webstore/templates/template-detail/?id=4047) + + 2. Barcode Capture from Maintain Stock Item as Barcode. + - Template: [GRN BarCode (35×25) Capture Item Code](https://www.sql.com.my/webstore/templates/template-detail/?id=4058) + +2. Steps to import the report into SQL. + + :::info + Refer to this [guide](../../usage/tools/rtm/guide) for details + ::: + + 1. Logon to SQL Account. + 2. Go to **Tools > Report Designer > Import**. + 3. Change the file type from *Fast Report(\*.fr3)* to *SQL Reports(\*.rtm)*. + 4. Select the report downloaded from Step1.1 or 1.2. + +3. Purchase > Goods Received Note > Preview. + + ![1](../../../static/img/usage/stock/stock-faq/barcode/barcode-setup.png) + + - Click on blue color link to enter into Report Design. + +4. Change the report type to MM due to the barcode size is small. + + ![2](../../../static/img/usage/stock/stock-faq/barcode/barcode-setup1.png) + +5. Change barcode size - > File > Page Setup > Paper Size. + + ![3](../../../static/img/usage/stock/stock-faq/barcode/barcode-setup2.png) + + - Currently this sample is Width = 35mm > Height = 25mm. + +6. Click on SubRptNorm : Document_Detail. + + ![4](../../../static/img/usage/stock/stock-faq/barcode/barcode-setup3.png) + + - **From here you may change the Barcode layout.**. + +7. Click on DBBarcode > Right click > Configure. + + ![5](../../../static/img/usage/stock/stock-faq/barcode/barcode-setup4.png) + + 1. Type : Select 128. + + 2. Bar Width : This is barcode width. + +8. GRN Barcode Event. + + - View > Module > Click on Event Handlers > Procedure DetailBeforeDetail. + + ![6](../../../static/img/usage/stock/stock-faq/barcode/barcode-setup5.png) + + This step captures the item quantity. For example, if the quantity is 10, it will generate 10 barcode labels. + +### How to Do Cash Drawer Setting + +- To define the cash drawer setting with a compatible device, eg. cash drawer. + +1. **Tools** > **Options** > **Barcode** > **Cash Drawer**. + +![cash-drawer](../../../static/img/usage/stock/stock-faq/barcode/cash-drawer.png) + +### How to Do Barcode Setting + +- To define the barcode setting with a compatible device, eg. barcode printer. + +1. **Tools** > **Options** > **Barcode** > **Barcode**. + +![barcode-setting](../../../static/img/usage/stock/stock-faq/barcode/barcode-setting.png) + +## Print Barcode (Direct Printer) + +- To print the bar code label using Special Bar Code Printer for the items created in Maintain Stock Item. + +### How to Do Barcode Printer Setting + +![barcode-printer-setting](../../../static/img/usage/stock/stock-faq/barcode/barcode-printer-setting.png) + +1. **Tools** > **Options** > **Barcode** > **Barcode**. +2. Insert the new barcode printer setting and template. + + ![barcode-printer-setting1](../../../static/img/usage/stock/stock-faq/barcode/barcode-printer-setting1.png) +3. Click on OK to exit. + +### How to Print the Barcode Label + +1. Click on the arrow key-down beside the Print button. See the screenshot below. +2. You can choose either Print to Printer (barcode printer) or Print To File (output as text file). + +![print-barcode-label](../../../static/img/usage/stock/stock-faq/barcode/print-barcode-label.png) + +## Print Barcode (Winodws Printer) + +- To print the barcode label using a Windows Printer for the items created in Maintain Stock Item. + +![windows-printer](../../../static/img/usage/stock/stock-faq/barcode/windows-printer.png) + +### How to Update Item Barcode Listing + +1. At first, you can update the item bar code in the Maintain Stock Item. + + ![item-barcode-listing](../../../static/img/usage/stock/stock-faq/barcode/item-barcode-listing.png) + +2. Click on + button to insert the items. See the screenshot below. + + ![item-barcode-listing1](../../../static/img/usage/stock/stock-faq/barcode/item-barcode-listing1.png) + +3. Click the SAVE button to save the item bar code listing. Type a file name (eg. BarCode_Items_31122015) to save. See the screenshot below. + + ![item-barcode-listing2](../../../static/img/usage/stock/stock-faq/barcode/item-barcode-listing2.png) + +4. Message prompted. Click OK. + +![item-barcode-listing3](../../../static/img/usage/stock/stock-faq/barcode/item-barcode-listing3.png) + +### How to Load the Previous Item Barcode Listing + +1. Click on a Carbinet button to load the previous file for the item barcode listing (eg.BarCode_Items_31122015). Click on OPEN. + + ![item-barcode-listing4](../../../static/img/usage/stock/stock-faq/barcode/item-barcode-listing4.png) + +2. Confirmation message prompted. Click on OK to load it. Click on NO' to cancel it. + + ![item-barcode-listing5](../../../static/img/usage/stock/stock-faq/barcode/item-barcode-listing5.png) + +3. Message Load success prompted. Click on OK to proceed. + + ![item-barcode-listing6](../../../static/img/usage/stock/stock-faq/barcode/item-barcode-listing6.png) + +4. You can continue updating the new items and save as new file name. + + ![item-barcode-listing7](../../../static/img/usage/stock/stock-faq/barcode/item-barcode-listing7.png) + +### How to Preview/Print the Barcode Label + +1. . Click on Preview or Printer (to skip the preview). + + ![preview-barcode-label](../../../static/img/usage/stock/stock-faq/barcode/preview-barcode-label.png) + +2. After the preview, click on Printer button to print. + +### How to Changing the Label Size (mm) Measurement for the Bar Code Label + +1. Click on the **Report Name**. See the screenshot below. + + ![10](../../../static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size.png) + +2. To change the paper unit measurement. Click on **Report > Units**, choose to **Millimeters**. + + ![11](../../../static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size1.png) + +3. To change the paper size. Click on **File > Page Setup...** + + ![12](../../../static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size2.png) + +4. Click on **Paper Size** tab, change the **Width** and **Height** to **35** and **25** respectively (mm), eg. the label paper size is 35mm x 25mm. + + ![13](../../../static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size3.png) + +5. Check the **Layout** tab to make sure the **Columns** set to value = **1**. + + ![14](../../../static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size4.png) + +6. Check the **Margin** tab as well to make sure all **(Top, Bottom, Left, Right)** are set to value = **0** . Click **OK** to exit Page Setup. + + ![15](../../../static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size5.png) + +7. To fix label each page contains 1 barcode of an item. Right click on **Detail** band, select **Position**. + + ![16](../../../static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size6.png) + +8. Set **Print Count** to value = **1**. Click **OK** to confirm. + + ![17](../../../static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size7.png) + +9. Save the report with another name. + +## Stock (Inventory) + +### How to Batch Edit Value in Maintain Stock Item + +:::tip +Allow to update/edit the field value by batch. +::: + +1. Go to **Stock > Maintain Stock Items**. + +2. For example, **change the output tax code from ZRL to SR** for ZRL items only. + +3. Click on the first column (beside the item column). + +4. Tick out the Output Tax column. + + ![1](../../../static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value.png) + +5. You will see the Output Tax column as per the screenshot below. + + ![2](../../../static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value1.png) + +6. Click on Output Tax filter. + +7. Tick ZRL. All ZRL items will be filtered. + + ![3](../../../static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value2.png) + +8. **Press Ctrl + A** to select all ZRL items. + +9. Right click on the highlighted items. Click on **Batch Edit Value**. + + ![4](../../../static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value3.png) + +10. Tick Output Tax and select the tax code (SR). + +11. Click Ok to proceed the changes. + + ![5](../../../static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value4.png) + +12. Click **Yes** to confirm update. + + ![6](../../../static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value5.png) + +13. Click **Ok**. + + ![7](../../../static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value6.png) + +- **Result** + +Items default output tax previously ZRL are **successfully changed to SR**. + +![8](../../../static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value7.png) + +### How to Setup Costing Method + +1. Go to Stock > Maintain Stock Group. + + ![1](../../../static/img/usage/stock/stock-faq/costing-method/costing-method-setup.png) + +2. There have 3 method let you to assign. + + 1. FIFO - cost flow assumption that the first goods purchased are also the first goods sold. + 2. Fixed Costing –fixed cost where had maintain under maintain stock item. + 3. Weighted Average -average cost of production to a product. + +3. If you **change** your costing method (previously with transaction existing). + + 1. Please remember must run **analyse data integrity** (tools | analyse data integrity) before you check the costing report again. + + ![2](../../../static/img/usage/stock/stock-faq/costing-method/costing-method-setup1.png) + + :::tip + System will auto update from first date until current date transaction with new costing + method cost…. + ::: + +## Multi Location Module + +- This module is to manage mulitple warehouse, inter-branch transfer, consignment, van-sales, etc. + +### How to Set Multiple Warehouse + +:::info Case studies +HQ is helping the KL branch to order goods and goods shall be sending to KL branch warehouse. +::: + +1. When purchase the item from supplier, you may choose your branch warehouse (KL) as your location in purchase invoice. + + ![1](../../../static/img/usage/stock/stock-faq/multi-location/multiple-warehouse.png) + +2. When you sell out the item, you may choose the location to be sell out from branch warehouse (KL). + + ![2](../../../static/img/usage/stock/stock-faq/multi-location/multiple-warehouse1.png) + +3. You will see stock in to branch warehouse (KL) and stock out from branch warehouse (KL) as well when you check your stock card report. + + ![3](../../../static/img/usage/stock/stock-faq/multi-location/multiple-warehouse2.png) + +From the stock card report, you can see the item is store in two locations, one is default, one is KL, the stock in and out that previously u did will be in location KL. + +### How to Do Consignment + +:::info Case studies +A batch of goods is consigned to your customer side for selling without billing first, will only bill after they sell out the goods. +::: + +1. Open a stock transfer documents to transfer the goods from your warehouse (Default) to customer warehouse (Batu Caves). + + ![4](../../../static/img/usage/stock/stock-faq/multi-location/consignment.png) + +2. Customer received 1 box of goods (20 units) and sold out 15 units. Then you can bill customer 15 units in where the goods out from customer location (Batu Caves). + + ![5](../../../static/img/usage/stock/stock-faq/multi-location/consignment1.png) + +3. You will see stock transfer out from your warehouse (Default), and stock will transfer into customer warehouse (Batu Caves). + + ![6](../../../static/img/usage/stock/stock-faq/multi-location/consignment2.png) + +From the stock card report, you can see the item is sold out from your customer location (Batu Caves) after you make the billing. + +## Stock Adjustment & Stock Take + +- Allows users to key in quantities in and out of the system, similar to a combination of stock received and stock issued. It is normally used for stock-taking purposes. (Stock > Stock Adjustment > New). + +### How SQL System can help during Stock Take ? + +1. Go to **Stock > Print Stock Physical Worksheet**. + + ![1](../../../static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take.png) + +2. **Filter** the date, stock group or others **information** that you want to do for the stock take, please **ensure that you have chosen the correct location and batch if you have these 2 modules.** + + ![2](../../../static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take1.png) + +3. Click on **Apply and Preview**. + + ![3](../../../static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take2.png) + +4. **Print out this stock physical worksheet -stock take sheet** for stock keeper to manually fill in the actual stock physical quantity at warehouse, so stock keeper just have to **fill in the actual quantity into the physical qty column**. + +5. After complete update the stock take report, click on **Stock > Stock Adjustment > Drag Out Book Qty and Physical Qty.** + + ![4](../../../static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take3.png) + + ![5](../../../static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take4.png) + +6. **Repeat the Step 1 & 2** to call out the Stock Physical Worksheet again, at the same time open 2 screen, one is stock adjustment another is stock physical worksheet, then click on **Window | Tile Vertical**. + +7. Click on the first item in **Stock Physical Worksheet**, press on **Ctrl + A** on keyboard to select all items. **Then Drag & Drop into Stock Adjustment**. + + ![6](../../../static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take5.png) + +8. Based on the stock keeper’s Stock Take Report then **fill in the actual physical quantity** on your warehouse into the Stock Adjustment **Physical Qty column**, then system will base on Book Qty and calculate the variant then apply at Qty column. + +:::info +**Book Qty** = Quantity that record in system. + +**Physical Qty** = Actual Quantity at your warehouse. + +**Qty** = Variant between Physical and Book Quantity, system will auto adjust then update accordingly.( Physical Qty – Book Qty ) +::: + +## Stock Price Tag Module + +- This module is mainly used to set different pricing groups for different customers and suppliers. It is normally used to set different customer categories with different pricing. In order to do individual customer then you can group your customer into different price groups. + +### How to Setup Price Tag + +1. Go to **Stock > Maintain Stock Price Tag**. + + ![1](../../../static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup.png) + +2. **Create category** of the customer that you want. + + ![2](../../../static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup1.png) + +3. Edit Customer Price Tag. + + - After creating the customer category in Maintain Stock Price Tag, click on **Customer > Maintain Customer > Edit the Price Tag and assign it accordingly.** + + ![3](../../../static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup2.png) + +4. Assign Customer Price Tag. + + - Click into **Stock > Maintain Stock Item > Edit and click in the Cust Price Tag then assign accordingly**. + + ![4](../../../static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup3.png) + + :::info + + 1. **Price Tag** : Select the price tag which you have assign the group under Maintain Customer. + 2. **Company** : Beside of price tag, you can set a particular pricing to an individual customer. + 3. **Qty & UOM** : You can define the quantity that you want to apply the price. + 4. **Unit Price** : The unit price that you want to offer for those customer. + 5. **Discount** : You can set follow original unit price but you give discount more like 5% or RM 5. + 6. **Note** : Additional remark that you can record, like Year End sales promotion. + 7. **Date From & Date To** : The price validity date. + + ::: + +5. **Repeat** the same step on Supplier if you want apply on the **Supplier Price**. + +## Reorder Lvl & Qty + +![1](../../../static/img/usage/stock/stock-faq/stock-reorder/reorder-lvl-qty.png) + +### How to Set the Reorder Level + +:::info Definition +Reorder level (or reorder point) is the inventory level at which a company would place a new order or start a new manufacturing run. +::: + +**Example:** + +![2](../../../static/img/usage/stock/stock-faq/stock-reorder/set-reorder-lvl.png) + +- For this item, Reorder Qty = 5, when Bal Qty less than 5 unit(Which is 9-5 = 4), saving document will prompt(Dialog : Stock Quatity Control) to remind you should place an order. + +:::tip +Stock Quality Control dialog can choose to Turn On (Tools > Option > Miscellaneous > Prompt Negative Stock Quantity Dialog Box > Checked it). +::: + +### How to Set the Reorder Qty + +:::info Definition +Reorder quantity is the point at which a business must buy more inventory as to not run out of inventory. +::: + +**How to check the stock is running out of reorder level ?** + +1. Stock > Print Stock Reorder Advise > Select any criteria if have > Apply. + +![3](../../../static/img/usage/stock/stock-faq/stock-reorder/check-reorder-lvl.png) + +:::info +Criteria A : There have option : + +1. On Hand Qty +2. On Hand Qty + PO +3. On Hand Qty – SO +4. On Hand Qty + PO – SO + +VS + +1. Reorder Level +2. Min Level +3. Max Level + +::: + +There is a faster way to create Purchase Order (PO) with Reoder QTY. Please see below Screen : + +![4](../../../static/img/usage/stock/stock-faq/stock-reorder/check-reorder-lvl1.png) + +Step : + +1. After get the appropriate result of Reoder Advise > Click on First Item > Press Shift Key(Keyboard) > Click on Last Item. +2. New PO > Select Supplier > Drag from Reorder Advise to PO Itemize (As per picture). PO Qty = Reorder Qty. + +## Serial No Module + +### How to Setup Control Serial Number + +1. Go to **Stock > Maintain Stock Item > Edit > Checked Serial No** if you would like to control the serial number for this item. + + ![1](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup.png) + +2. **Purchase > Goods Received Note > New**. + +There are 3 methods to apply serial no : + +- **Method 1 : Manually Enter** + +1. Click on + (Green Icon) > Manually Enter at Empty Box. + + ![2](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup1.png) + +- **Method 2 : Import from Notepad / Word** + +1. Enter the Serial No at the notepad. + + ![3](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup2.png) + +2. Click Import. + + ![4](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup3.png) + +3. Select Notepad where you have saved to. + + ![5](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup4.png) + +4. Click Ok. + + ![6](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup5.png) + +- **Method 3 : Generator** + +1. Click on Generator. + + ![7](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup6.png) + +2. Format = Serial No Format. + + Start From = What number you wish to start from. + + Count = How many units to generate. + + ![8](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup7.png) + +3. Here the output. + + ![9](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup8.png) + +4. **Sales > Delivery Order > Click Add.** + + ![10](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup9.png) + + **+ (Green Color) Same method as Method 1**. + **Import same method as Method 2**. + +5. Tick Serial No > Press Ok. + + ![10](../../../static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup10.png) + +:::info +Stock Adjustment does not support serial no. You may use Stock Received and Stock Issue as a replacement. +::: + +## Serial No Report + +1. **Stock > Print Stock Physical Worksheet** – Will show all balance serial number haven’t use. + +2. **Stock > Print Stock Card** - Tick Calculate Serial Number before apply. + + :::info Note + *Checked Calculate Serial No > Only Report : Stock Card – Location* + ::: + +3. **Stock > Print Stock Month End Balance** – Tick Calculate Serial Number before apply. + +4. **Stock > Print Stock Serial No Conflict** + + 1. To check non Existent Serial No. Example : Purchase for this Item the serial number is 555666, but when stock out stock the serial number is 222333. + 2. To check duplicate Serial Number received at the same location / batch for the same item. If return in the stock with same serial number and out again will not consider conflict. + +5. **Stock** > **Print Stock Outstanding Serial No**. + + 1. For those documents Issued or Received do no applying serial no. + +6. **Inquiry > Print Serial No Inquiry**. + + 1. Check serial no movement. + +7. **Sales > S/N Profit & Loss by Document**. + + 1. This Report Cost is capture exactly from Stock In Serial Number Cost. + If DO transfer to IV, due to DO have deducted Serial number, so will not have any result for this report. + +### How to USe Access Right for Serial No + +1. **Group Stock >Always match Qty with Serial No**. + + - which mean this access right the serial no must match with Qty key in. Eg : 2 Qty must have 2 Serial No. + - If checked this right, Print Outstanding Serial No will no result. + +2. **Allow Non-Existent Serial No**. + + - Which mean this access right control if tick which will allow out stock the serial number without match the serial number when purchase. + Example : Purchase for this Item the serial number is 555666, but when stock out stock the serial number is 222333. If you do not allow this, may uncheck this access right. + - If unchecked this right, Print Stock Serial No Conflict will no result. + +## Stock Month End Balance + +### Why cannot update the GL Stock Value at Stock Month End Balance? + +- **Issue** +- Click the Update button at Stock Month End Balance, but no stock value is updated to GL Maintain Stock Value. + + ![update-gl-stock-value-smeb](../../../static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb.png) + +- **Solution** + +1. Ensure all the **stock group** has defined a **Stock Account**. + + ![update-gl-stock-value-smeb1](../../../static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb1.png) + +2. Apply the Stock Month End again and click **Update** button. + + ![update-gl-stock-value-smeb2](../../../static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb2.png) + +3. **GL | Maintain Stock Value**....Stock Value has same to Stock Month End Balance. diff --git a/docs/usage/stock/stock-guide.md b/docs/usage/stock/stock-guide.md new file mode 100644 index 00000000..c2f3196b --- /dev/null +++ b/docs/usage/stock/stock-guide.md @@ -0,0 +1,544 @@ +--- +sidebar_position: 1 +title: Guide +description: Stock Guide +slug: /usage/stock/stock-guide +tags: ["SQL Account", "Usage", "Inventory", "Stock"] +--- + +## Maintain Stock Group + +1. **Stock** > **Maintain Stock Group**. + +2. It is commonly used to categorize the stock based on the following considerations. + - Brandings, e.g., **Apple, Sony, Samsung, LG**, etc. + - Different **costing method**; + - Product types, eg. **raw materials, trading products, manufactured products**; + - To report different sales/purchase account in **Profit & Loss Statement**. + + ![mtn-stock-grp-list](../../../static/img/usage/stock/stock-guide/mtn-stock-grp-list.png) + +3. Maintain Stock Group form as shown in the screenshot below. + + ![mtn-stock-grp](../../../static/img/usage/stock/stock-guide/mtn-stock-grp.png) + +| **Field Name** | **Explanation & Properties** | +|----------------|------------------------------| +| **Code** | • Input the new Stock Group code
• Field type: Alphanumerical
• Length: 20 | +| **Description** | • Input the Stock Group description
• Field type: Alphanumerical
• Length: 200 | +| **Costing Method** | • Select an appropriate Costing Method for stock valuation
• Options: FIFO, Weighted Average, Fixed Costing | +| **Sales Code** | • Select a GL Account for Sales | +| **Cash Sales Code** | • Select a GL Account for Cash Sales | +| **S.Return Code** | • Select a GL Account for Sales Returns Inward | +| **Purchase Code** | • Select a GL Account for Purchase | +| **Cash Purchase Code** | • Select a GL Account for Cash Purchase | +| **P.Return Code** | • Select a GL Account for Purchase Returns Outward | + +## Maintain Stock Item + +1. **Stock** > **Maintain Stock Item**. + +2. To set up the stock item list. + +![mtn-stock-item-list](../../../static/img/usage/stock/stock-guide/mtn-stock-item-list.png) + +### Main Header + +1. Maintain Stock Item entry form is shown in the screenshot below. + +![mtn-stock-item-main-header](../../../static/img/usage/stock/stock-guide/mtn-stock-item-main-header.png) + +| **Field Name** | **Explanation & Properties** | +|----------------|-------------------------------| +| **Code** | • Input the new Stock Code
• Field type: Alphanumerical
• Length: 30 | +| **Description** | • Input the Stock Description (This usually appears in most of the documents printouts, e.g., invoices, purchase orders, etc...)
• Field type: Alphanumerical
• Length: 200 | +| **2nd Description** | • Input the 2nd Description, eg. size, alternative product name
• Field type: Alphanumerical
• Length: 200 | +| **Serial No.** | • Tick to enable serial control items (Requires Serial Number module)
• Field type: Checkbox | +| **Stock Control** | • Tick to enable stock control. The system will check availability to ensure the stock balance does not fall below zero or the reorder level.
• Field type: Checkbox | +| **Active** | • Tick for the stock in use
• Untick for discontinued stock
• Field type: Checkbox | +| **Item Group** | • Select an appropriate Stock Group | +| **Base UOM** | • Enter a base UOM for stock valuation, eg. UNIT | +| **Ref. Cost** | • Enter a standard cost | +| **Ref. Price** | • Enter a standard selling price | +| **Shelf** | • Enter a shelf/rank no., e.g., A-01, A-02, A-03 in location A | +| **Reorder Level** | • Enter a stock reorder level to alert new order
• Refer to menu: Stock \ Print Stock Reorder Advice... | +| **Reorder Qty** | • Enter a reorder qty (MOQ) | +| **Lead Time** | • Enter a lead time to receive the goods | +| **Output Tax** | • Enter a default Output Tax | +| **Input Tax** | • Enter a default Input Tax | +| **Remark 1** | • Free field to enter extra info | +| **Remark 2** | • Free field to enter extra info | +| **Barcode** | • Enter a barcode (represents base UOM) | +| **Tariff** | • Assign a tariff code
• Lookup from Maintain Tax
• Related Topic: Maintain_Customer#Tax , Maintain_Supplier#Tax | +| **Bal Qty** | • Display the latest qty balance | + +### UOM + +1. Allow to set multiple UOM, e.g., 1 carton = 12 units. +2. Besides that, you can set the default UOM for Sales, Purchase and Stock entry form. +3. See the screenshot below. + +![mtn-stock-item-uom](../../../static/img/usage/stock/stock-guide/mtn-stock-item-uom.png) + +### Cust.Price + +1. Allow to set **multiple pricing/contract prices** for customer. +2. You can use **price tag** to tag the price for a customer. +3. The **Multiple Pricing** module is required. +4. See the screenshot below. + +![mtn-stock-item-cust-price](../../../static/img/usage/stock/stock-guide/mtn-stock-item-cust-price.png) + +### Supp.Price + +1. Allow to set **multiple pricing/contract prices** for supplier. +2. You can use **price tag** to tag the price for a supplier. +3. The **Multiple Pricing** module is required. +4. See the screenshot below. + +![mtn-stock-item-supp-price](../../../static/img/usage/stock/stock-guide/mtn-stock-item-supp-price.png) + +- Related Topic : [How is the Price Tag work?](https://sites.google.com/site/sqlestream/sql-financial-accounting/7-system-setting/7-20-how-is-the-price-tag-work) + +### BOM + +1. Allow to setup **recipes/ingredients** for a manufactured product. +2. The **Bill of Materials** module is required. +3. See the screenshot below. + +![mtn-stock-item-bom](../../../static/img/usage/stock/stock-guide/mtn-stock-item-bom.png) + +### More Desc + +1. Enter the product details or specifications. +2. See the screenshot below. + +![mtn-stock-item-more-desc](../../../static/img/usage/stock/stock-guide/mtn-stock-item-more-desc.png) + +> **Tips:** +> Example view from Sales Tax Invoice: + +![mtn-stock-item-more-desc1](../../../static/img/usage/stock/stock-guide/mtn-stock-item-more-desc1.png) + +### Opn Bal + +1. Used to enter the opening stock quantity and value balances. + +![mtn-stock-item-opn-bal](../../../static/img/usage/stock/stock-guide/mtn-stock-item-opn-bal.png) + +### Category + +1. Used to set multiple stock categories for reporting purposes, e.g., country origins, brands, etc. +2. See the screenshot below. + +![mtn-stock-item-category](../../../static/img/usage/stock/stock-guide/mtn-stock-item-category.png) + +### Alternative + +1. Enable to identify the alternative items for replacement. + +![mtn-stock-item-alternative](../../../static/img/usage/stock/stock-guide/mtn-stock-item-alternative.png) + +### Cust. Item + +1. To enter the **customer item code** and **description**. +2. The purpose is to search for or print the customer item code and description in a tax invoice instead of using the original item description. +![mtn-stock-item-cust-item](../../../static/img/usage/stock/stock-guide/mtn-stock-item-cust-item.png) + +### Supp. Item + +1. To enter the **supplier item code** and **description**. +2. The purpose is to search for or print the supplier item code and description in a purchase invoice instead of using the original item description. + +![mtn-stock-item-supp-item](../../../static/img/usage/stock/stock-guide/mtn-stock-item-supp-item.png) + +### Barcode + +1. To enter the barcode for different UOM. +2. See the screenshot below. + +![mtn-stock-item-barcode](../../../static/img/usage/stock/stock-guide/mtn-stock-item-barcode.png) + +### Note + +1. Others stock information. + +| **Field Name** | **Explanation & Properties** | +|----------------|-------------------------------| +| **Item Creation Date** | • Item created date.
• Field type: Date | +| **Item Matrix** | • Required Stock Matrix module.
• Field type: Lookup | +| **Min Qty** | • Enter the minimum qty.
• Field type: Float | +| **Max Qty** | • Enter the maximum qty.
• Field type: Float | +| **Picture** | • Load a product picture.
• Recommended picture size (jpg or jpeg) less than 16kb.
• Field type: Picture | +| **Note** | • Enter the product additional information for internal view.
• Field type: Rich Text | + +2. See the screenshot below. + +![mtn-stock-item-note](../../../static/img/usage/stock/stock-guide/mtn-stock-item-note.png) + +> **Note:** +> Do not load the picture size more than 16kb. This is to avoid the database size growth bigger. + +## Maintain Stock Category + +1. It can be used to further categorize stock besides the stock group. +2. It allows to set multiple stock category for an stock item code. +3. Commonly used for:- + 1. Brandings, eg. Apple, Sony, Samsung, LG, etc; + 2. Country origins; + 3. Product types, eg. raw materials, trading products, manufactured products; +4. **Stock** > **Maintain Stock Category.** + + ![mtn-stock-category](../../../static/img/usage/stock/stock-guide/mtn-stock-category.png) + +5. Maintain Stock Category form as shown the screenshot below. + + ![mtn-stock-category1](../../../static/img/usage/stock/stock-guide/mtn-stock-category1.png) + +| **Field Name** | **Explanation & Properties** | +|----------------|-------------------------------| +| **Code** | • Input the new **Stock Category** code.
• Field type: Alphanumerical
• Length: 15 | +| **Description** | • Input the **Stock Category** description.
• Field type: Alphanumerical
• Length: 200 | + +## Maintain Stock Category Template + +1. It is a pre-defined the conditions for Stock Category use in reports. +2. It allows to set the conditions in **AND** or **OR** for stock category. +3. **Stock** > **Maintain Stock Category Template.** + + ![mtn-stock-category-template](../../../static/img/usage/stock/stock-guide/mtn-stock-category-template.png) + +4. Maintain Stock Category Template form as shown the screenshot below. + + ![mtn-stock-category-template1](../../../static/img/usage/stock/stock-guide/mtn-stock-category-template1.png) + +| **Field Name** | **Explanation & Properties** | +|----------------|-------------------------------| +| **Code** | • Input the new Stock Category code.
• Field type: Alphanumerical
• Length: 15 | +| **Description** | • Input the Stock Category description.
• Field type: Alphanumerical
• Length: 200 | +| **Template** | • To set the pre-defined conditions for stock category. | + +### How To Set The Template + +- Use **OR** condition + +1. At the new **Maintain Category View**, click the + sign. +2. Drag the **stock category** selected over into the blank line. + + ![mtn-stock-category-template2](../../../static/img/usage/stock/stock-guide/mtn-stock-category-template2.png) + +3. You will see the stock category added in the template list as per the screenshot below.' + + ![mtn-stock-category-template3](../../../static/img/usage/stock/stock-guide/mtn-stock-category-template3.png) + +- Use **AND** condition + +1. At the new **Maintain Category View**, click the **+** sign. +2. Select multiple stock category (**Hold CTRL** + click on **stock category**). +3. Drag the **stock category** selected over into the **blank** line. + + ![mtn-stock-category-template4](../../../static/img/usage/stock/stock-guide/mtn-stock-category-template4.png) + +4. You will see the stock category added in the template list as per the screenshot below. + + ![mtn-stock-category-template5](../../../static/img/usage/stock/stock-guide/mtn-stock-category-template5.png) + + ![mtn-stock-category-template6](../../../static/img/usage/stock/stock-guide/mtn-stock-category-template6.png) + +## Maintain Item Template + +1. It is usually used for sets or package items. +2. You can create a template consisting of selected items to use in Sales, Purchase, or Stock documents. +3. **Stock** > **Maintain Item Template**. + + ![mtn-item-template](../../../static/img/usage/stock/stock-guide/mtn-item-template.png) + +4. Maintain Item Template form as shown the screenshot below. + + ![mtn-item-template1](../../../static/img/usage/stock/stock-guide/mtn-item-template1.png) + +| **Field Name** | **Explanation & Properties** | +|----------------|-------------------------------| +| **Code** | • Input the new Item Template code.
• Field type: Alphanumerical
• Length: 20 | +| **Description** | • Input the Item Template description.
• Field type: Alphanumerical
• Length: 200 | +| **Description 2** | • Input the Item Template description 2.
• Field type: Alphanumerical
• Length: 200 | +| **Reference Price** | • Input the Reference Selling Price.
• Field type: Float | +| **Item Template** | • Insert the items details. | +| **Matrix** | • To load the Matrix profile.
• It requires Stock Matrix module. | + +### How to Use The Template + + 1. For example at the Sales Invoice, click on Item Template (Left Side Bar). + 2. Double click on the Item Template. See the screenshot below. + + ![mtn-item-template2](../../../static/img/usage/stock/stock-guide/mtn-item-template2.png) + + 3. List of items updated into the Sales Invoice detail. See the screenshot below. + + ![mtn-item-template3](../../../static/img/usage/stock/stock-guide/mtn-item-template3.png) + +## Maintain Item Matrix Profile + +1. It is commonly used to organize coding requirements for generating item codes. It is frequently used in the following industries: +2. **Stock** > **Maintain Stock Item Matrix Profile**. + + ![mtn-item-matrix-profile](../../../static/img/usage/stock/stock-guide/mtn-item-matrix-profile.png) + +3. Example of the stock item matrix settings to generate the T-Shirt code with different sizes and colors. +4. See the requirement setting as shown in the screenshot below. + + ![mtn-item-matrix-profile1](../../../static/img/usage/stock/stock-guide/mtn-item-matrix-profile1.png) + +5. Matrix setting:- + +| **Matrix** | **Setting** | **Length** | **Code** | **Note** | +|-------------|-------------|-------------|-----------|-----------| +| **Prefix** | 1 - 5 | 5 | | To enter a prefix when generating the item code. | +| **Dimension 1 (Row)** | 7 - 10 | 4 | BLUE
YELL
BLCK
WHIT
RED_ | Preset code list. | +| **Dimension 2 (Column)** | 12 - 13 | 1 | _S
_M
_L
XL | Preset code list. | +| **Separator** | - | 1 | | A separator between the prefix, dimension row, and column. | + +> **Note:** +> Code length must follow as set in Matrix Settings constantly, especially the Dimension 1 (Row) and 2 (Column). + +### How Does It Works + +#### Generate Matrix Item Code + +1. Go to Maintain Stock Item. +2. Right click the area below the **Detail** button. +3. Click on **Generate Item Code**. See the screenshot below. + + ![mtn-item-matrix-profile2](../../../static/img/usage/stock/stock-guide/mtn-item-matrix-profile2.png) + +4. Select the **Matrix Profile**,eg. **SHIRT**. +5. Enter a **Prefix**,eg. **CROC**. +6. Select an **Item Group**,eg. **T-Shirt**. +7. Press **Ok** to start generate. + + ![mtn-item-matrix-profile3](../../../static/img/usage/stock/stock-guide/mtn-item-matrix-profile3.png) + +8. List of CROC item code created in Maintain Stock Item. + + ![mtn-item-matrix-profile4](../../../static/img/usage/stock/stock-guide/mtn-item-matrix-profile4.png) + +#### Generate Invoice Using Matrix + +1. At Sales Invoice, select one of the prefix item code, eg. **CROC**. + + ![mtn-item-matrix-profile5](../../../static/img/usage/stock/stock-guide/mtn-item-matrix-profile5.png) + +2. Click on **Matrix** tab. You can start enter the quantity in the dimension row and column. + + ![mtn-item-matrix-profile6](../../../static/img/usage/stock/stock-guide/mtn-item-matrix-profile6.png) + +3. Click back to Invoice tab. Item code will be inserted automatically. + + ![mtn-item-matrix-profile7](../../../static/img/usage/stock/stock-guide/mtn-item-matrix-profile7.png) + +## Maintain Location + +1. It is used for warehouses, inter-branch transfers, consignment, van sales, etc. +2. The **Multiple Location (Warehouse)** module is required. +3. **Stock** > **Maintain Location**. + + ![mtn-location](../../../static/img/usage/stock/stock-guide/mtn-location.png) + +4. Maintain Location form as shown the screenshot below. + + ![mtn-location1](../../../static/img/usage/stock/stock-guide/mtn-location1.png) + +| **Field Name** | **Explanation & Properties** | +|----------------|-------------------------------| +| **Code** | • Input the new Location code.
• Field type: Alphanumerical
• Length: 20 | +| **Description** | • Input the Location description.
• Field type: Alphanumerical
• Length: 200 | +| **Description 2** | • Input the Location description 2.
• Field type: Alphanumerical
• Length: 200 | +| **Address Line 1** | • Input the Location Address Line 1.
• Field type: Alphanumerical
• Length: 60 | +| **Address Line 2** | • Input the Location Address Line 2.
• Field type: Alphanumerical
• Length: 60 | +| **Address Line 3** | • Input the Location Address Line 3.
• Field type: Alphanumerical
• Length: 60 | +| **Address Line 4** | • Input the Location Address Line 4.
• Field type: Alphanumerical
• Length: 60 | +| **Attention** | • Input the contact person name.
• Field type: Alphanumerical
• Length: 70 | +| **Phone 1** | • Input the Phone 1.
• Field type: Alphanumerical
• Length: 30 | +| **Phone 2** | • Input the Phone 2.
• Field type: Alphanumerical
• Length: 30 | +| **Fax 1** | • Input the Fax 1.
• Field type: Alphanumerical
• Length: 30 | +| **Fax 2** | • Input the Fax 2.
• Field type: Alphanumerical
• Length: 30 | +| **Email** | • Input the Email.
• Field type: Alphanumerical
• Length: 200 | +| **ISACTIVE** | • To make the location Active or Inactive.
• Field type: Checkbox | +| **Note** | • Input the Additional Note to describe the location.
• Field type: Rich Text | +| **Attachments** | • To insert attachment files, such as Excel, PDF, pictures... | + +## Maintain Batch + +1. **Batch number** is very useful and widely explore for alternative usage. Commonly usage are: + - Trace the goods purchased from the suppliers; + - Trace the returns goods come from which production batch; + - Differentiate costing of the products; +2. **Stock** > **Maintain Batch**. + + ![mtn-batch](../../../static/img/usage/stock/stock-guide/mtn-batch.png) + +3. Fill-in the batch details. See the screenshot below. + + ![mtn-batch1](../../../static/img/usage/stock/stock-guide/mtn-batch1.png) + + | **Field Name** | **Explanation & Properties** | + |----------------|-------------------------------| + | **Code** | • Input the new **Batch** code.
• Field type: Alphanumerical
• Length: 30 | + | **Description** | • Input the **Batch** description.
• Field type: Alphanumerical
• Length: 160 | + | **Expiry Date** | • Set an **Expiry Date**.
• Field type: Date | + | **Manufacturing Date** | • Set a **Manufacturing Date**.
• Field type: Date | + | **Remark 1** | • Free field.
• Field type: Alphanumerical
• Length: 200 | + | **Remark 2** | • Free field.
• Field type: Alphanumerical
• Length: 200 | + | **ISACTIVE** | • To make the batch **Active** or **Inactive**.
• Field type: Checkbox | + +4. You can choose to lock the stock item to the batch number. Purpose is to avoid other user assign wrong batch number to an item code. + + ![mtn-batch2](../../../static/img/usage/stock/stock-guide/mtn-batch2.png) + +### Copy & Paste Function + +#### Append Batch Existing Number + +1. Click on **More** (arrow key down). +2. **Copy Stock Batch**. + + ![mtn-batch3](../../../static/img/usage/stock/stock-guide/mtn-batch3.png) + +3. Click on **New**. +4. Click on **More** (arrow key down). +5. **Paste Stock Batch**. + + ![mtn-batch4](../../../static/img/usage/stock/stock-guide/mtn-batch4.png) + +6. **Batch code** copied and will paste into new batch code as well. +7. Append the batch code and save it. + + ![mtn-batch5](../../../static/img/usage/stock/stock-guide/mtn-batch5.png) + +#### New Batch Number + +1. Click on **More** (arrow key down). +2. **Copy Stock Batch**. + + ![mtn-batch6](../../../static/img/usage/stock/stock-guide/mtn-batch6.png) + +3. Click on **New**. +4. Click on **More** (arrow key down). +5. **Paste Stock Batch**. + + ![mtn-batch7](../../../static/img/usage/stock/stock-guide/mtn-batch7.png) + +6. **Batch code** copied and will paste into new batch code as well. +7. Remove the batch number. +8. Click on Save. System will assign a new batch number automatically. + + ![mtn-batch8](../../../static/img/usage/stock/stock-guide/mtn-batch8.png) + +## Stock Received + +Allows user to increase stock quantity without purchasing. It is normally used when you have assembled or manufactured finished goods. Just key-in the item code, quantity IN and cost that you want. + +1. **Stock** > **Stock Received** > **New**. + + ![68](../../../static/img/usage/stock/stock-guide/stock-received.png) + +## Stock Issue + +Allows user to **decrease stock quantity without selling**. It is normally used when you consume raw material during assembly or when manufacturing finished goods or even sometimes for internal usage. Just key-in the item code, quantity OUT and cost and you may also click on the Update Cost, then the system will auto-detect the actual costing base on your document date. + +1. **Stock** > **Stock Issue** > **New**. + + ![69](../../../static/img/usage/stock/stock-guide/stock-issue.png) + +## Stock Transfer + +**Stock Transfer** is an entry to handle the stock movement from one location to another location, **eg. location A to B**. Commonly used for: + +- Consignment stock; +- Van sales location represent van; +- Inter branch transfer; +- Goods in transit; + +![stock-transfer](../../../static/img/usage/stock/stock-guide/stock-transfer.png) + +1. Click on **New**. + + ![stock-transfer1](../../../static/img/usage/stock/stock-guide/stock-transfer1.png) + +2. Enter the **Description** to describe the stock transfer entry, eg. "Stock Transfer from BALAKONG TO BATU CAVE". +3. Add the items to be transferred. +4. You may enter the **reason, remark and authorised by** for future reference. + + ![stock-transfer2](../../../static/img/usage/stock/stock-guide/stock-transfer2.png) + +5. Click on **Save** to commit the stock movement between the locations. +6. For some circumstances, it is required to select the customer code and enter the unit price, tax code, tax amount and subtotal for consignment sales. + + ![stock-transfer3](../../../static/img/usage/stock/stock-guide/stock-transfer3.png) + +### Update Cost + +1. You update the unit cost by click on **Update Cost** button. +2. System will based on the update cost method to retrieve the unit cost for each items. There are: + + ![stock-transfer4](../../../static/img/usage/stock/stock-guide/stock-transfer4.png) + +| **No.** | **Update Cost Method** | **Explanation** | +|----------|------------------------|-----------------| +| 1 | Use Ref.Cost When Qty <= 0 (by default) | If qty balance below 0, unit cost will update with Reference Cost from Maintain Stock Item. | +| 2 | Use Strict Costing | Unit cost calculated from the Costing Method set in Maintain Stock Group. | +| 3 | Use Serial Number Costing | Unit cost will be based on the serial number. | + +## Stock Adjustment + +:::success[INFO] +Check out our new [stock take app](https://www.sql.com.my/sqlstocktake/) +::: + +Allows users to key in quantity in and quantity out from the system, just like a combination of stock received and stock issue. Normally used for stock take purposes. **(Stock > Stock Adjustment > New)** + +:::info +Watch tutorial video here: [youtube](https://www.youtube.com/watch?v=uEbCRAftQ4A&feature=youtu.be) +::: + +1. Click on **Stock** + +2. Choose **Print Stock Physical Worksheet** + +3. **Filter** by date, stock group or others **information** that you want to do for the stock take, please **make sure that you choose the correct location and batch if you have these two modules**. + + ![70](../../../static/img/usage/stock/stock-guide/stock-adjustment.png) + +4. Click on Preview & choose your report format. + + ![71](../../../static/img/usage/stock/stock-guide/stock-adjustment1.png) + +5. **Print out the “Stock Take Sheet”** for stock keeper. + + The stock keeper should manually **fill in the actual quantity into the “physical qty” column**. + + ![72](../../../static/img/usage/stock/stock-guide/stock-adjustment2.png) + +6. After complete updating the stock take report by your stock-keeper, do your stock adjustment in system from **Stock** > **Stock Adjustment** > **and drag out Book Qty and Physical Qty**. + + ![73](../../../static/img/usage/stock/stock-guide/stock-adjustment3.png) + + ![74](../../../static/img/usage/stock/stock-guide/stock-adjustment4.png) + +7. Click on the first item in **Stock Physical Worksheet**, press on **Ctrl + A** on the keyboard to select all items. + + **Then Drag & Drop into Stock Adjustment**. + + ![75](../../../static/img/usage/stock/stock-guide/stock-adjustment5.png) + +8. Based on the stock keeper’s Stock Take Report, **fill in the actual physical quantity** in your warehouse into the Stock Adjustment **Physical Qty column**, the system will calculate the variance based on the Book Qty and apply a correction to the Qty column. + + :::info + + **Book Qty** = Quantity that is recorded in system. + + **Physical Qty** = Actual Quantity at your warehouse. + + **Qty** = Variance between Physical and Book Quantity, system will auto-adjust then update accordingly. (Physical Qty – Book Qty) + + ::: diff --git a/docs/usage/stock/stock-report.md b/docs/usage/stock/stock-report.md new file mode 100644 index 00000000..d8c24ba6 --- /dev/null +++ b/docs/usage/stock/stock-report.md @@ -0,0 +1,347 @@ +--- +sidebar_position: 2 +title: Reports +description: Stock Report +slug: /usage/stock/stock-report +tags: ["SQL Account", "Usage", "Inventory", "Stock","Report"] +--- + +## Print Stock Document Listing + +- Print Stock Document Listing can be used to view all the stock adjustment documents that you have issued. +- You can see Stock Received Listing, Stock Issue Listing, Stock Transfer Listing, Stock Adjustment Listing. + +### How to Print Stock Document Listing + +1. **Stock** > **Print Stock Document Listing** + + ![print-stock-document-listing](../../../static/img/usage/stock/stock-report/print-stock-document-listing.png) + +2. Select which Document listing you want to see. Follow the image + + ![print-stock-document-listing1](../../../static/img/usage/stock/stock-report/print-stock-document-listing1.png) + +3. Press the Apply Button + + ![print-stock-document-listing2](../../../static/img/usage/stock/stock-report/print-stock-document-listing2.png) + +4. Click Preview & Listing Report +5. Example of stock document listing report + + ![print-stock-document-listing3](../../../static/img/usage/stock/stock-report/print-stock-document-listing3.png) + +### Print Document Style + +1. Tick relevant check boxes + + ![print-stock-document-listing4](../../../static/img/usage/stock/stock-report/print-stock-document-listing4.png) + + | **Field Name** | **Explanation** | + |----------------|----------------| + | **Print Document Style** | Tick this checkbox to print out bulk report or send batch email | + | **Include Cancelled Documents** | Tick this checkbox to include cancelled documents in the listing | + +2. If you Tick Print Document Style , you will be able to choose a purchase document report format. + + ![print-stock-document-listing5](../../../static/img/usage/stock/stock-report/print-stock-document-listing5.png) + +### Group/Sort By + +1. You can filter your documents based on Project, location and Company Category + + ![print-stock-document-listing6](../../../static/img/usage/stock/stock-report/print-stock-document-listing6.png) + +2. You can use the Group by/Sort by table to choose how you want to group your report listing + + ![print-stock-document-listing7](../../../static/img/usage/stock/stock-report/print-stock-document-listing7.png) + +3. Here is an example of the report + + ![print-stock-document-listing8](../../../static/img/usage/stock/stock-report/print-stock-document-listing8.png) + +## Print Stock Reorder Advice + +- Print Stock Reorder Advice can be used to check which items have quantities below the set reorder level (set in Maintain Stock Item) + +### How to Print Stock Reorder Advice + +1. **Stock** > **Print Stock Reorder Advice** + + ![print-stock-reorder-advice](../../../static/img/usage/stock/stock-report/print-stock-reorder-advice.png) + + ![print-stock-reorder-advice1](../../../static/img/usage/stock/stock-report/print-stock-reorder-advice1.png) + + ![print-stock-reorder-advice2](../../../static/img/usage/stock/stock-report/print-stock-reorder-advice2.png) + +2. Press Apply Button + +3. Click Preview & Listing Report +4. Example of stock reorder report + +![print-stock-reorder-advice3](../../../static/img/usage/stock/stock-report/print-stock-reorder-advice3.png) + +### Setting + +1. Select what quantities you wish to compare against + + ![print-stock-reorder-advice4](../../../static/img/usage/stock/stock-report/print-stock-reorder-advice4.png) + + | **Field Name** | **Explanation** | + |----------------|----------------| + | **On Hand Qty** | Stock balance quantity | + | **On Hand + PO Qty & SO Qty** | Stock balance quantity plus Purchase Order Quantity or Sales Order Quantity | + | **On Hand + PO Qty - SO Qty** | Stock balance quantity plus Purchase Order Quantity minus Sales Order Quantity | + | **On Hand + PO Qty (+/-) JO Qty** | Stock balance quantity plus Purchase Order Quantity plus Job Order Quantity | + | **On Hand - SO Qty (+/-) JO Qty** | Stock balance quantity minus Sales Order Quantity plus Job Order Quantity | + | **On Hand + PO Qty - SO Qty (+/-) JO Qty** | Stock balance quantity plus Purchase Order Quantity minus Sales Order Quantity minus Job Order Quantity | + +2. After that, select the type of comparison. The balance quantities will be compared to the Max Value, Min Value or the Reorder Level. All set in Maintain Stock Item. + +### Group/Sort By + +1. You can filter your documents based on Item, Batch and Company Category + + ![print-stock-reorder-advice5](../../../static/img/usage/stock/stock-report/print-stock-reorder-advice5.png) + +2. You can use the Group by/Sort by table to choose how you want to group your report listing + + ![print-stock-reorder-advice6](../../../static/img/usage/stock/stock-report/print-stock-reorder-advice6.png) + +## Print Stock Physical Worksheet + +1. Click on **Stock** + +2. Choose **Print Stock Physical Worksheet** + +3. **Filter** by date, stock group or other **information** for the stock take, please **make sure that you choose the correct location and batch if you have these two modules**. + + ![70](../../../static/img/usage/stock/stock-report/stock-physical-worksheet.png) + +4. Click on Preview & choose your report format. + + ![71](../../../static/img/usage/stock/stock-report/stock-physical-worksheet1.png) + +5. **Print out the “Stock Take Sheet”** for stock keeper. + + The stock keeper should manually **fill in the actual quantity into the “physical qty” column**. + + ![72](../../../static/img/usage/stock/stock-report/stock-physical-worksheet2.png) + +6. After complete updating the stock take report by your stock-keeper, perform your stock adjustment in system by going to **Stock** > **Stock Adjustment** > **and dragging out Book Qty and Physical Qty**. + + ![73](../../../static/img/usage/stock/stock-report/stock-physical-worksheet3.png) + + ![74](../../../static/img/usage/stock/stock-report/stock-physical-worksheet4.png) + +7. Click on the first item in **Stock Physical Worksheet**, press on **Ctrl + A** on the keyboard to select all items. + + **Then Drag & Drop into Stock Adjustment**. + + ![75](../../../static/img/usage/stock/stock-report/stock-physical-worksheet5.png) + +8. Based on the stock keeper’s Stock Take Report, **fill in the actual physical quantity** in your warehouse into the Stock Adjustment **Physical Qty column**, the system will calculate the variance based on the Book Qty and apply a correction to the Qty column. + + :::info + + **Book Qty** = The quantity recorded in the system. + + **Physical Qty** = Actual Quantity at your warehouse. + + **Qty** = The variance between Physical and Book Quantity. The system will automatically adjust and update accordingly. (Physical Qty – Book Qty) + + ::: + +## Print Stock Card & Print Stock Card Qty + +- Print Stock Card can be used to view your stock movement and stock cost during a certain period of time. +- You can see your stock movement based on location and batch. + +### How to Print Stock Card + +1. **Stock** > **Print Stock Document Listing** +print-stock-card + ![print-stock-card](../../../static/img/usage/stock/stock-report/print-stock-card.png) + + ![print-stock-card1](../../../static/img/usage/stock/stock-report/print-stock-card1.png) + +2. Press Apply Button +3. Click Preview & Listing Report +4. Example of stock card report + +![print-stock-card2](../../../static/img/usage/stock/stock-report/print-stock-card2.png) + +### How to Print Stock Card Qty + +- Similar to Print Stock Card, but this report only shows the quantity. + +## Print Stock Month End Balance + +- Print Stock Month End Balance can be used to view your month end stock quantity and total cost . + +### How to Print Stock Month End Balance + +1. **Stock** > **Print Stock Month End Balance** + + ![print-stock-month-end-balance](../../../static/img/usage/stock/stock-report/print-stock-month-end-balance.png) + +2. Set the date and press the Apply button. + + ![print-stock-month-end-balance1](../../../static/img/usage/stock/stock-report/print-stock-month-end-balance1.png) + +3. You can set your filters to filter your stock month end by location, stock group and item + + ![print-stock-month-end-balance2](../../../static/img/usage/stock/stock-report/print-stock-month-end-balance2.png) + +4. Press Preview button +5. Click Preview& Listing Report +6. Example of stock month end report + + ![print-stock-month-end-balance3](../../../static/img/usage/stock/stock-report/print-stock-month-end-balance3.png) + +## Print Stock Aging + +- Print Stock Aging is used to view the quantity of a certain stock on hand and how much of that stock has been sold. + +print-stock-aging + + ![print-stock-aging](../../../static/img/usage/stock/stock-report/print-stock-aging.png) + +### How to Print Stock Aging + +1. **Stock** > **Print Stock Aging** +2. Set your filter option and group by options + + ![print-stock-aging1](../../../static/img/usage/stock/stock-report/print-stock-aging1.png) + + ![print-stock-aging2](../../../static/img/usage/stock/stock-report/print-stock-aging2.png) + +3. Tick Qty and/or Cost if you want to see the aging for both or either + + ![print-stock-aging3](../../../static/img/usage/stock/stock-report/print-stock-aging3.png) + +4. Set stock aging type + + ![print-stock-aging4](../../../static/img/usage/stock/stock-report/print-stock-aging4.png) + +5. Months = Aging calculated for every 1 months +6. Months + 5 Years = Aging calculated for every month and also above 5 years +7. 3 months = Aging calculated every 3 months +8. Press Apply Button +9. Click Preview + +![print-stock-aging5](../../../static/img/usage/stock/stock-report/print-stock-aging5.png) + +## Print Stock Analysis By Document + +- Print Stock Analysis By Document can be used to view your stock movement quantity for each document type like Invoice, Cash sales, Purchase Invoice, etc. + +### How to Print Stock Analysis By Document + +1. **Stock** > **Print Stock Analysis By Document** + + ![print-stock-analysis-by-document](../../../static/img/usage/stock/stock-report/print-stock-analysis-by-document.png) + + ![print-stock-analysis-by-document1](../../../static/img/usage/stock/stock-report/print-stock-analysis-by-document1.png) + +2. Press Apply Button +3. Click Preview +4. Example of stock analysis by document report + + ![print-stock-analysis-by-document2](../../../static/img/usage/stock/stock-report/print-stock-analysis-by-document2.png) + +## Print Stock Batch Expiry + +- Print Stock Batch Expiry can be used to view all the items in your batches along with their manufacturing and expiry dates. + +### How to Print Stock Batch Expiry + +1. **Stock** > **Print Stock Batch Expiry** + + ![print-stock-batch-expiry](../../../static/img/usage/stock/stock-report/print-stock-batch-expiry.png) + +2. Press Apply Button + + ![print-stock-batch-expiry1](../../../static/img/usage/stock/stock-report/print-stock-batch-expiry1.png) + +3. Click Preview +4. Example of stock batch expiry report + + ![print-stock-batch-expiry2](../../../static/img/usage/stock/stock-report/print-stock-batch-expiry2.png) + +### How to Assign Batch to Your Stock Item + +- For example, After creating your batch codes and assigning the items at "Maintain Batch", go to Sales Invoice. Select the stock item and select the batch + +![print-stock-batch-expiry3](../../../static/img/usage/stock/stock-report/print-stock-batch-expiry3.png) + +![print-stock-batch-expiry4](../../../static/img/usage/stock/stock-report/print-stock-batch-expiry4.png) + +## Print Stock Serial Number Conflict + +- Print Stock Serial Number Conflict an be used to view +- SN items issued out without receiving SN +- Duplicate SN received at the same location and batch + +![print-stock-serial-number-conflict](../../../static/img/usage/stock/stock-report/print-stock-serial-number-conflict.png) + +### How to Print Stock Serial Number Conflict + +1. **Stock** > **Print Stock Serial Number Conflict** + + ![print-stock-serial-number-conflict1](../../../static/img/usage/stock/stock-report/print-stock-serial-number-conflict1.png) + +2. Press Apply Button + + ![print-stock-serial-number-conflict2](../../../static/img/usage/stock/stock-report/print-stock-serial-number-conflict2.png) + +3. Click Preview +4. Example of stock batch expiry report + + ![print-stock-serial-number-conflict3](../../../static/img/usage/stock/stock-report/print-stock-serial-number-conflict3.png) + +### How to Assign Serial to Your Stock Item + +1. First go to Maintain Stock Item an tick the serial number check box + + ![print-stock-serial-number-conflict4](../../../static/img/usage/stock/stock-report/print-stock-serial-number-conflict4.png) + +2. At your purchases, assign Serial number to your stock item, you can key it in, import it in from a text file, or automatically generate it . + +![print-stock-serial-number-conflict5](../../../static/img/usage/stock/stock-report/print-stock-serial-number-conflict5.png) + +### How to Automatically Generate Serial Number for Your Stock Item + +1. Click the generator button, set your number format, and press OK. + +![print-stock-serial-number-conflict6](../../../static/img/usage/stock/stock-report/print-stock-serial-number-conflict6.png) + +### How to Import Serial Number for Text File for Your Stock Item + +1. Click the import button, select your text file, and press OK. + + ![print-stock-serial-number-conflict7](../../../static/img/usage/stock/stock-report/print-stock-serial-number-conflict7.png) + +2. Your serial number has been successfully imported + +![print-stock-serial-number-conflict8](../../../static/img/usage/stock/stock-report/print-stock-serial-number-conflict8.png) + +## Print Stock Serial Number Outstanding + +- Print Stock Serial Number Outstanding can be used to check if you did not assign any serial number to you purchased stock items. +- An example of a missing serial number can be seen in this purchase invoice. +print-stock-serial-number-outstanding +![print-stock-serial-number-outstanding](../../../static/img/usage/stock/stock-report/print-stock-serial-number-outstanding.png) + +### How to Print Stock Serial Number Outstanding + +1. **Stock** > **Print Stock Serial Number Outstanding** + + ![print-stock-serial-number-outstanding1](../../../static/img/usage/stock/stock-report/print-stock-serial-number-outstanding1.png) + +2. Press Apply Button + + ![print-stock-serial-number-outstanding2](../../../static/img/usage/stock/stock-report/print-stock-serial-number-outstanding2.png) + +3. Click Preview + + ![print-stock-serial-number-outstanding3](../../../static/img/usage/stock/stock-report/print-stock-serial-number-outstanding3.png) diff --git a/docs/usage/supplier/_category_.json b/docs/usage/supplier/_category_.json new file mode 100644 index 00000000..fb40366c --- /dev/null +++ b/docs/usage/supplier/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Supplier", + "position": 5, + "link": { + "type": "generated-index", + "description": "Supplier and usage guide" + } +} \ No newline at end of file diff --git a/docs/usage/supplier/faq.md b/docs/usage/supplier/faq.md new file mode 100644 index 00000000..49171bdf --- /dev/null +++ b/docs/usage/supplier/faq.md @@ -0,0 +1,46 @@ +--- +sidebar_position: 3 +title: FAQ +description: Supplier Frequently Asked Questions +slug: /usage/supplier/FAQ +tags: ["SQL Account", "Supplier", "FAQ"] +--- + +## JOMPAY - How to add the Ref 2 (optional) in the bank payment file format? + +**Issue:** + +How to capture the JomPay Ref 2 (bill no) in the bank payment file format? + +![supplier-faq-add-reference2-1](../../../static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-1.jpg) + +**Solution:** + +1. Go to **Tools | DIY | SQL Control Center**... +2. Add the JomPAY Ref 2 field under **Supplier | Supplier Payment | Payment Fields**. + + | Field Name | Data Type | Size | + |-------------|-----------|------| + | JomPAY_Ref2 | String | 30 | + + ![supplier-faq-add-reference2-2](../../../static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-2.jpg) + +3. Create **Quick Form** and add the UDF_JomPay_Ref2. + + ![supplier-faq-add-reference2-3](../../../static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-3.jpg) + +4. At **Supplier Payment**, key in the bill no into UDF_JomPAY_Ref2 under JOMPAY tab. + + ![supplier-faq-add-reference2-4](../../../static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-4.jpg) + +5. JomPAY Ref 2 will be captured in the bank JomPAY payment format. + + ![supplier-faq-add-reference2-5](../../../static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-5.jpg) + +:::note NOTE: +The above solution is using SQL Account version 784 and above. Modules required: + +1. Interbank GIRO +2. DIY Field (or Professional Set). + +::: diff --git a/docs/usage/supplier/report.md b/docs/usage/supplier/report.md new file mode 100644 index 00000000..7ae2d8d2 --- /dev/null +++ b/docs/usage/supplier/report.md @@ -0,0 +1,228 @@ +--- +sidebar_position: 2 +title: Reports +description: MyInvois onboarding process +slug: /usage/supplier/Reports +tags: ["SQL Account", "Reports"] +--- + +## Print Supplier Document (InterBank GIRO) Listing + +- Print Supplier Document (InterBank GIRO) Listing can be used to see all the supplier transactions that you have entered into this system +- You can see Supplier Invoice, Supplier Payment, Supplier Credit Note, Supplier Debit Note, Supplier Refund, and Supplier Contra listings. +- You can use Document Listing to batch print and batch email your Supplier's documents. +- At the bottom of the screen, you can see the payment details for each document + +### How to Print Document Listing + +![des-print-document-listing-step1](../../../static/img/usage/supplier/supplier-reports-images/print-document-listing-step1.png) + +- Select which Document Listing you want to see. Follow the image below : + +![des-print-document-listing-step2](../../../static/img/usage/supplier/supplier-reports-images/print-document-listing-step2.png) + +- Press the Apply Button +- Click Preview & Listing Report +- Example of supplier invoice listing report + +![des-print-document-listing-step3](../../../static/img/usage/supplier/supplier-reports-images/print-document-listing-step3.png) + +### Print document Style + +- Tick the relevant check boxes + +![des-print-document-style-1](../../../static/img/usage/supplier/supplier-reports-images/print-document-style-1.png) + +| **Field Name** | **Explanation** | +|------------------------------|----------------------------------------------------------------------| +| Print Document Style | Tick this checkbox to print out bulk report or send batch email. | +| Include Cancelled Documents | Tick this checkbox to include cancelled documents in the listing. | + +- If you Tick Print Document Style , you will be able to choose supplier invoice report format. + +![des-print-document-style-2](../../../static/img/usage/supplier/supplier-reports-images/print-document-style-2.png) + +### Group/Sort By + +- You can filter your documents based on Supplier, Agent, Area, Currency, and Project + +![des-print-document-style-filter1](../../../static/img/usage/supplier/supplier-reports-images/print-document-style-filter1.png) + +- You can use the Group/Sort By table to choose how you want to group your report listing + +![des-print-document-style-group-sort1](../../../static/img/usage/supplier/supplier-reports-images/print-document-style-group-sort1.png) + +- For example, you can group the report by "Supplier Code" + +![des-print-document-style-group-sort2](../../../static/img/usage/supplier/supplier-reports-images/print-document-style-group-sort2.png) + +- Select the Listing Report +- Here is an example of the report + +![des-print-document-style-example1](../../../static/img/usage/supplier/supplier-reports-images/print-document-style-example1.png) + +## Print Supplier Balance Report + +- Print Supplier Balance Report allows you to **see all the supplier's balance**. + +### How to Print Supplier Balance Report + +![des-print-supplier-lisiting-step1](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step1.png) + +- Select the date period for the balance report. + +![des-print-supplier-lisiting-step2](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step2.png) + +- You can filter the report selecting the supplier, agent, area, project of the transaction. + +![des-print-supplier-lisiting-step3](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step3.png) + +- For example, filtering by supplier name. + +![des-print-supplier-lisiting-step4](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step4.png) + +- You can click on the small + icon to expand the row and see the transactions details. + +![des-print-supplier-lisiting-step5](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step5.png) + +- Press the Preview icon to preview and print the report + +![des-print-supplier-lisiting-step6](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step6.png) + +## Print Supplier Due Document + +- Print Supplier Due Document allows you to see all the supplier's overdue and undue balance. + +### How to Print Supplier Due Document Report + +![des-print-supplier-due-document-step1](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step1.png) + +- Set the date. Select if you want to see Overdue or Undue documents. + +![des-print-supplier-due-document-step2](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step2.png) + +- Select which documents you want to see. + +![des-print-supplier-due-document-step3](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step3.png) + +- You can also filter the listing based on supplier, agent, area, or currency + +![des-print-supplier-due-document-step4](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step4.png) + +## Print Supplier Aging Report + +- Print Supplier Aging to see unpaid invoice balances along with the duration for which the supplier has been outstanding. + +### How to Print Supplier Aging Report + +![des-print-supplier-aging-report-step1](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step1.png) + +![des-print-supplier-aging-report-step2](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step2.png) + +- Select the report name. Then click the Apply button. + +![des-print-supplier-aging-report-step3](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step3.png) + +- Select the Preview icon to view and print the report + +![des-print-supplier-aging-report-step4](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step4.png) + +### Set Aging + +![des-set-aging1](../../../static/img/usage/supplier/supplier-reports-images/set-aging1.png) + +| **Field Name** | **Explanation** | +|------------------|------------------------------------------------------------------| +| Default Aging | Follow aging that has been set at Maintain Supplier "Aging On". | +| Document Date | Aging based on invoice date. | +| Due Date | Aging based on after due date (terms). | + +## Print Supplier Statement + +A statement of account, also known as an account statement or Supplier Statement, is a document that outlines the transactions between a buyer and a seller. + +- We use Supplier Statement to : + 1. Calculate an outstanding account balance + 2. Check which Supplier accounts balance we need to settle + 3. Avoid disputes with suppliers. + +![des-print-supplier-statement-step1](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-statement-step1.png) + +![des-print-supplier-statement-step2](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-statement-step2.png) + +### Statement Type + +- Select the Statement Type. + +![des-print-supplier-statement-style1](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-statement-style1.jpg) + +| **Field Name** | **Explanation** | +|------------------------------|----------------------------------------------------| +| Default Statement Type | Follow the statement type set in Maintain Supplier | +| Open Item Statement | Detail Statement | +| Brought Forward Statement | Summary Statement | + +### Sample Supplier Statement + +![Print_Supplier_Statement4](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-statement-example1.png) + +## Print Supplier Post Dated Cheque Listing + +- We use this report to see the post date cheques issued by that date + +![des-print-supplier-post-dated-checque-listing-step1](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step1.png) + +- Set the date +- Select your Payment Method + +![des-print-supplier-post-dated-checque-listing-step2](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step2.png) + +- Press Apply +- Preview report. +- Here is a sample of the report + +![des-print-supplier-post-dated-checque-listing-step3](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step3.png) + +### How to set Post Dated Cheque + +- At your supplier payment, you can RIGHT-CLICK at the white area and select "Posting Date" + +![des-post-dated-checque-listing-how-to-set1](../../../static/img/usage/supplier/supplier-reports-images/post-dated-checque-listing-how-to-set1.png) + +- Key in your posting date and press OK. + +![des-post-dated-checque-listing-how-to-set2](../../../static/img/usage/supplier/supplier-reports-images/post-dated-checque-listing-how-to-set2.png) + +## Print Supplier Analysis By Document + +- We use this report to see the total of all your supplier's invoices, credit/debit notes and contra amounts. + +![des-print-suppier-analysis-by-document-step1](../../../static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step1.png) + +- Set the date +- Select how you want to group your report by ticking the checkboxes at the Group/Sort By. + +![des-print-suppier-analysis-by-document-step2](../../../static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step2.png) + +- Click the preview icon and view/print your report. + +![des-print-suppier-analysis-by-document-step3](../../../static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step3.png) + +## Print Supplier Bills and Payment Analysis + +- We use this report to see the monthly payment and purchases for your supplier. + +![des-print-supplier-purchase-and-payment-analysis-step1](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step1.png) + +- Set the date +- Tick the checkbox to indicate if you want to see the total payment, purchases or both. + +![des-print-supplier-purchase-and-payment-analysis-step2](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step2.png) + +- If you tick "Payment" Click the preview icon and view/print your collection report. + +![des-print-supplier-purchase-and-payment-analysis-step3](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step3.png) + +- If you tick "Purchase" Click the preview icon and view/print your sales analysis report. + +![des-print-supplier-purchase-and-payment-analysis-step4](../../../static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step4.png) diff --git a/docs/usage/supplier/setup.md b/docs/usage/supplier/setup.md new file mode 100644 index 00000000..9167f0e9 --- /dev/null +++ b/docs/usage/supplier/setup.md @@ -0,0 +1,846 @@ +--- +sidebar_position: 1 +title: Setup +description: Basic Supplier Setup +slug: /usage/supplier/Setup +tags: ["SQL Account", "Usage", "Supplier"] +--- + +## Maintain Supplier + +To maintain the supplier profile data such as addresses, phone numbers, fax, email, contact persons, credit limits, credit +terms, etc. In other words, it is your supplier contacts list. + +![des-maintain-supplier-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-1.jpg) + +### New Supplier + +To create NEW supplier, CLICK on NEW button. See screenshot below. + +![des-maintain-supplier-new-supplier-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-new-supplier-1.jpg) + +You will get a blank form to be filled in with the supplier data. + +![des-maintain-supplier-new-supplier-2](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-new-supplier-2.jpg) + +You may start input the following fields: + +| **Field Name** | **Field Type** | **Length** | **Explanation** | +|-----------------------|------------------------------------------------------------------------------------------------------|------------|-------------------------------------------------------------------------------------------------------| +| Company | Alphanumerical | 100 | Input the supplier billing company name. | +| Description 2 (under Company) | Alphanumerical | 100 | An optional field where you can enter Chinese translated name, former company name, company register no, etc. | +| Control A/c | Lookup from Maintain Accounts (Special Type: Supplier Control Account) | 10 | Select an appropriate Supplier Control Account to be posted to GL when supplier documents are created. | +| Code | Alphanumerical | 10 | AUTO/MANUAL generate the Supplier Code. | +| Cust Category | Lookup from Maintain Company Category | 15 | Categorize your supplier for reporting purpose. | + +#### General + +![des-maintain-supplier-general-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-general-1.jpg) + +| **Field Name** | **Field Type** | **Length** | **Explanation** | +|------------------|----------------------------------------------|-------------------------|---------------------------------------------------------------------------------| +| Branch Name | Alphanumerical | 100 | You may maintain multiple sets of addresses by differentiating the Branch Name
Default Branch Name: BILLING | +| Address (4 lines)| Alphanumerical | 40 (each line) | Input the company addresses. | +| Attention | Alphanumerical | 70 | Input the contact person. | +| Phone 1 & 2 | Alphanumerical | 30 | Input the telephone number. | +| Fax 1 & 2 | Alphanumerical | 30 | Input the fax number. | +| Email | Alphanumerical | 60 | Input the email. | +| Area | Lookup from Maintain Area | 10 | Select a default Area. | +| Agent | Lookup from Maintain Agent | 10 | Select a default Agent. | +| Currency | Lookup from Maintain Currency | 6 | Select a default Currency. | +| Credit Terms | Lookup from Maintain Terms | 10 | Select a default Terms. | +| Credit Limit | Numeric | — | Set the credit limit. | +| Statement | Option | — | Select a default statement type, e.g., Open Item or Brought Forward.
Default: Open Item | +| Aging On | Option | — | Select a default Aging type, e.g., Invoice Date or Due Date. Default: Invoice Date | +| Price Tag | Lookup from Maintain Stock Price Tag | 10 | Set the price tag to the items. | + +#### Note + +![des-maintain-supplier-note-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-note-1.jpg) + +| **Field Name** | **Field Type** | **Length** | **Explanation** | +|----------------------|------------------|-------------|---------------------------------------------------------------------------------| +| Account Open Date | Date | — | Creation date. | +| Remark | Alphanumerical | 80 | This remark will show in Inquiry → Account Inquiry. | +| Biz Nature | Alphanumerical | 100 | Input supplier business nature. For example, Chemical Manufacturing, Car Service, etc. | +| Note | Alphanumerical | Rich Text | Record the supplier knowledge base. You can use the "Date Stamp". | +| Status | Option | — | See **Status Options** table below. | + +| **Status** | **Explanation** | +|------------|---------------------------------------------------------------------------------| +| Active | Allow to create official documents and select to print Supplier Statement. | +| Inactive | Not allow to create official documents, but cannot select to print Supplier Statement. | +| Suspend | Not allow to create official documents, but can select to print Supplier Statement. | +| Prospect | Allow to create official documents and select to print Supplier Statement. | +| Pending | Allow to create official documents and select to print Supplier Statement. | + +#### Tax + +![des-maintain-supplier-tax-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-tax-1.jpg) + +| **Field Name** | **Explanation & Properties** | +|------------------|-----------------------------------------------------------------------------------------------| +| Default Tax | Select a default tax code based on supplier. | +| Tax Area | Not applicable to Malaysia/Singapore. | +| Exemption No | • Input the Tax Exemption number applicable to your supplier. | +| | • Field type: Alphanumerical. | +| | • Length: 50 | +| Expiry Date | Set an expiry date. | +| | • This will be tax exempted before the expiry date. | +| | • Field type: Date. | + +**Tariff Code Setting** +This setting set the supplier who has supply the taxable goods under the Sales Tax (Person Exempted from Payment of Tax) Order 2018. + +| **Field Name** | **Explanation & Properties** | +|----------------|-------------------------------| +| Tariff | • Add tariff code of taxable goods to be sold in exemption. | +| | • Lookup: [Maintain Tariff](../../usage/tools/guide#maintain-tariff) | +| | • Related Topic: [Maintain Stock Item → Main Header](../../usage/stock/stock-guide#maintain-stock-item) | +| Tax | • Select an appropriate tax code that falls under the Person Exempted in **Schedule C ONLY** (must be declared in SST-02). | +| | • Schedule C tax code: PEC1, PEC2, PEC3, PEC4, PEC5 | +| | • Lookup: [Maintain Tax](../../usage/gst-and-sst/gst#maintain-tax) | + +#### Bank Account + +![des-maintain-supplier-bank-account-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-bank-account-1.jpg) + +| **Field Name** | **Explanation & Properties** | +|----------------|-------------------------------| +| Bank | Select the correct bank. | +| Account No | Key in the account number of the supplier. | +| Account Name | Insert the name. | +| ID Type | Select the ID type that you want. | +| ID | Insert the ID. | +| Active | • Tick it when active. | +| | • Untick when inactive. | + +### Edit Supplier + +You can EDIT the supplier, CLICK on EDIT button. See screenshot below. + +![des-maintain-supplier-edit-supplier-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-edit-supplier-1.jpg) + +:::note + + 1. Users are able to EDIT the supplier data depends on the user access rights granted. + 2. Any EDITING the system will be audited (logged) with changes made. + +::: + +### Save Supplier + +You have to SAVE the supplier data before can be used. See screenshot below. + +![des-maintain-supplier-save-supplier-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-save-supplier-1.jpg) + +### Delete Supplier + +You can DELETE the unwanted supplier data. See screenshot below. + +![des-maintain-supplier-delete-supplier-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-delete-supplier-1.jpg) + +:::note + + 1. User able to DELETE the supplier data depends on the user access rights granted. + +::: + +### Supplier Code Format + +Supplier code can be AUTO generate or overwrite it manually. See screenshot below. + +![des-maintain-supplier-supplier-code-format-1](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-1.jpg) + +:::note Important + + 1. Every supplier code is unique. + 2. If the system found there is a duplicate code trying to save, users will be notified with a warning message. + +::: + +You can set the supplier code format via Tools | Options...(Supplier). See screenshot below. + +![des-maintain-supplier-supplier-code-format-2](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-2.jpg) + +Explanation of the Supplier Code Format: + +![des-maintain-supplier-supplier-code-format-3](../../../static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-3.jpg) + +For example, + +| **Company Name** | **Customer Control Acc** | **Format** | **Result** | +|------------------|---------------------------|----------------|----------------| +| ABCD SDN BHD | 401-000 | %.1s-%.1s%.1d | 4-A-1 | +| ABCD SDN BHD | 401-000 | %.2s-%.2s%.2d | 40-AB-01 | +| ABCD SDN BHD | 401-000 | %.3s-%.3s%.3d | 401-ABC-001 | +| ABCD SDN BHD | 401-000 | %.4s-%.4s%.4d | 401--ABCD-0001 | + +## Supplier Invoice (SI) + +- General invoice received from suppliers likes purchase of service, insurance, stationery or any non-stock control billing. +- Besides that, you can check the invoices status such as outstanding and payment history. + +![des-supplier-invoice-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-1.jpg) + +### Basic Entry (SI) + +1. Click on New button. +2. See the New Supplier Invoice entry form screenshot below. + + ![des-supplier-invoice-entry-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-entry-1.jpg) + +3. Select the Supplier Code. You direct key in and search by either supplier code or name. +4. Input the Purchase A/c and amount to be debit. +5. Below is the example of the entry created: + + ![des-supplier-invoice-entry-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-entry-2.jpg) + + | Account | DR (RM) | CR (RM) | + |---------------------------|----------|----------| + | Stationery | 500.00 | | + | Supplier Control Account | | 500.00 | + +### Project (SI) + +- There are 2 types of project you need to be take note. + 1) Document Project + 2) Detail Project +- For document project, you need to point to More section (on the left side bar). +- For detail project, you have to insert the project column out from Field Chooser. + +![des-supplier-invoice-project-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-project-1.jpg) + +| **Label** | **Types** | **Explanation** | +|-----------|--------------------|-------------------------------------------------------------| +| A | Document Project | It represents the project for a document to be credited. | +| B | Detail Project | It represents the project for individual GL Account to be debited. | + +### Attachment (SI) + +- It is very useful to attach any supporting documents to an invoice. +- In future, you are able to retrieve and refer the attachment file easily. + +![des-supplier-invoice-attachment-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-attachment-1.jpg) + +1) You have to point to the attachment section. +2) Click on ( + ) button to insert the filename path. +3) See the sample screenshot below. + +![des-supplier-invoice-attachment-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-attachment-2.jpg) + +### Note (SI) + +1. Click on the Note section (on the LEFT side bar). +2. RIGHT click it, you will see the Rich Text Editor pop-up. +3. You can start key-in the note. See the example screenshot below. +4. Click on X button to save and exit the Rich Text Editor. + + ![des-supplier-invoice-note-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-note-1.jpg) + +5. You will get prompted the Save changes? message. Click YES to save it. + + ![des-supplier-invoice-note-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-note-2.jpg) + +### Invoice description (SI) + +1. To show the document description in Supplier Statement, e.g., Purchase-Stationery April 2015. + + ![des-supplier-invoice-invoice-description-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-invoice-description-1.jpg) + +2. Sample of supplier statement screenshot below. + + ![des-supplier-invoice-invoice-description-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-invoice-invoice-description-2.jpg) + +## Supplier Payment (SP) + +- To record the payment amount to Suppliers. +- To off-set against the outstanding supplier invoices. + +![des-supplier-payment-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-1.jpg) + +### Basic Entry (SP) + +1. Click on New button. +2. See the New Supplier Payment entry form screenshot below. + + ![des-supplier-payment-entry-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-1.jpg) + +3. Select the Supplier Code. Direct key in and search by either Supplier code or name. +4. Select the Payment Method (bank or cash account) in Payment By. +5. Enter the Paid Amount (follow the bank account currency). +6. Below is the example of the entry created: + + ![des-supplier-payment-entry-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-2.jpg) + + **Double Entry will be:-** + + | **Account** | **DR (RM)** | **CR (RM)** | + |--------------------------|-------------|-------------| + | Supplier Control Acc | 2,500.00 | | + | Bank Account | | 2,500.00 | + +7. Enter Bank Charges if there is a bank charges. + + ![des-supplier-payment-entry-3](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-3.jpg) + +8. It will auto post the following double entry:- + + | **Account** | **DR (RM)** | **CR (RM)** | + |-----------------|-------------|-------------| + | Bank Charges | 2.00 | | + | Bank Account | | 2.00 | + +9. Enter the cheque number, cash or TT into Cheque No. field. + + ![des-supplier-payment-entry-4](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-4.jpg) + +### Knock-Off (SP) + +Purpose to knock-off the invoices: + +1. To show the outstanding invoices in Supplier Aging Report. +2. To indicate the payment knock-off the invoices in Supplier Statement. +3. To remove / recover from the GST Bad Debt Relief on outstanding more than 6 months + +#### Partial Knock-Off (SP) + +1. You can enter the knock-off amount into Pay column (auto tick). +2. Unapplied Amt will be reduced by the knock-off amount entered. + + ![des-supplier-payment-partial-knockoff-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-partial-knockoff-1.jpg) + +#### Document Knock-Off (SP) + +1. You can tick on the outstanding documents. +2. Unapplied Amt will be reduced by the knock-off amount ticked. + + ![des-supplier-payment-document-knockoff-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-document-knockoff-1.jpg) + +#### Random Knock-Off (SP) + +1. You can click on the Pay column. It will auto tick on the outstanding documents. +2. Unapplied Amt will be reduced according to the outstanding balance. + + ![des-supplier-payment-random-knockoff-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-random-knockoff-1.jpg) + +:::note + Unapplied amount shows the Supplier payment amount not allocated/knock-off against any outstanding invoices and debit note. +::: + +### Attachment (SP) + +- It is very useful to attach any supporting documents. +- In future, you are able to retrieve and refer the attachment file easily. + +![des-supplier-payment-attachment-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-attachment-1.jpg) + +1. You have to point to the attachment section. +2. Click on ( + ) button to insert the filename path. +3. See the sample screenshot below. + + ![des-supplier-payment-attachment-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-attachment-2.jpg) + +### Note (SP) + +1. Click on the Note section (on the LEFT side bar). +2. RIGHT click it, you will see the Rich Text Editor pop-up. + + ![des-supplier-payment-note-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-note-1.jpg) + +3. You can start key-in the note. See the example screenshot below. +4. Click on X button to save and exit the Rich Text Editor. + + ![des-supplier-payment-note-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-note-2.jpg) + +5. You will get prompted the Save changes? message. Click YES to save it. + + ![des-supplier-payment-note-3](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-note-3.jpg) + +### Description (SP) + +To show the Supplier payment description in the Supplier Statement, e.g., Payment For Jan & Feb 2016. + +![des-supplier-payment-description-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-description-1.jpg) + +Sample of Supplier statement screenshot below. + +![des-supplier-payment-description-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-payment-description-2.jpg) + +## Supplier Debit Note (SDN) + +- General debit note received from Supplier likes the adjustment for undercharged to purchase of stationery, services, insurance, or any non-stock control billing. +- Besides that, you can check the debit note status such as outstanding and payment history. + +![des-supplier-debit-note-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-1.jpg) + +### Basic Entry (SDN) + +1. Click on New button. +2. See the New Supplier Debit Note entry form screenshot below. + + ![des-supplier-debit-note-entry-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-entry-1.jpg) + +3. Select the Supplier Code. You direct key in and search by either supplier code or name. +4. Input the Purchase A/c and amount to be debit. +5. Below is the example of the entry created: + + ![des-supplier-debit-note-entry-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-entry-2.jpg) + + **Double Entry will be:-** + + | **Account** | **DR (RM)** | **CR (RM)** | + |----------------------------|-------------|-------------| + | Stationery | 500.00 | | + | Supplier Control Account | | 500.00 | + +### Project (SDN) + +- There are 2 types of project you need to be take note. + 1. Document Project + 2. Detail Project +- For document project, you need to point to More section (on the left side bar). +- For detail project, you have to insert the project column out from Field Chooser. + +![des-supplier-debit-note-project-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-project-1.jpg) + +| **Label** | **Types** | **Explanation** | +|-----------|------------------|------------------------------------------------------------------| +| A | Document Project | It represents the project for a document to be credited. | +| B | Detail Project | It represents the project for individual GL Account to be debited. | + +### Attachment (SDN) + +- It is very useful to attach any supporting documents to a debit note. +- In future, you are able to retrieve and refer the attachment file easily. + +![des-supplier-debit-note-attachment-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-attachment-1.jpg) + +1. You have to point to the attachment section. +2. Click on ( + ) button to insert the filename path. +3. See the sample screenshot below. + + ![des-supplier-debit-note-attachment-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-attachment-2.jpg) + +### Note (SDN) + +1. Click on the Note section (on the LEFT side bar). +2. RIGHT click it, you will see the Rich Text Editor pop-up. +3. You can start key-in the note. See the example screenshot below. +4. Click on X button to save and exit the Rich Text Editor. + + ![des-supplier-debit-note-note-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-note-1.jpg) + +5. You will get prompted the Save changes? message. Click YES to save it. + + ![des-supplier-debit-note-note-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-note-2.jpg) + +### D/N Description (SDN) + +1. To show the document description in Supplier Statement, e.g., Undercharged-Stationery April 2015. + + ![des-supplier-debit-note-dn-description-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-dn-description-1.jpg) + +2. Sample of supplier statement screenshot below. + + ![des-supplier-debit-note-dn-description-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-debit-note-dn-description-2.jpg) + +## Supplier Credit Note (SCN) + +- Credit note is used to reduce and offset the outstanding invoices or debit note. +- For those Credit Note created from Purchase module, you are required to offset against the outstanding invoices/debit note here. +- You can check any unapplied amount for a credit note. Unapplied amount meaning the credit note amount must find the invoice / debit note to knock-off. + +![des-supplier-credit-note-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-1.jpg) + +### Basic Entry (SCN) + +1. Click on New button. +2. See the New Supplier Credit Note entry form screenshot below. + + ![des-supplier-credit-note-entry-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-entry-1.jpg) + +3. Select the Supplier Code. You direct key in and search by either supplier code or name. +4. Input the Purchase A/c and amount to be credit. +5. Below is the example of the entry created: + + ![des-supplier-credit-note-entry-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-entry-2.jpg) + + **Double Entry will be:-** + + | **Account** | **DR (RM)** | **CR (RM)** | + |-------------------------|-------------|-------------| + | Supplier Control Acc | 500.00 | | + | Purchase Returns | | 500.00 | + +### Unapplied Amount (SCN) + +- Unapplied amount shows the credit note amount not allocated/knock-off against any outstanding invoices and debit note. +- It will remains in supplier aging report show as negative amount (-). + +![des-supplier-credit-note-unapplied-amount-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-unapplied-amount-1.jpg) + +### Knock-Off Outstanding (SCN) + +- To knock-off the outstanding invoice/debit note, TICK the checkbox beside the pay column. +- You can direct input the pay amount into pay column. + +![des-supplier-credit-note-knockoff-outstanding-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-knockoff-outstanding-1.jpg) + +### Project (SCN) + +- There are 2 types of project you need to be take note. + 1. Document Project + 2. Detail Project +- For document project, you need to point to More section (on the left side bar). +- For detail project, you have to insert the project column out from Field Chooser. + +![des-supplier-credit-note-project-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-project-1.jpg) + +| **Label** | **Types** | **Explanation** | +|-----------|------------------|------------------------------------------------------------------| +| A | Document Project | It represents the project for a document to be debited. | +| B | Detail Project | It represents the project for individual GL Account to be credited. | + +### Attachment (SCN) + +- It is very useful to attach any supporting documents to a credit note. +- In future, you are able to retrieve and refer the attachment file easily. + +![des-supplier-credit-note-attachment-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-attachment-1.jpg) + +1. You have to point to the attachment section. +2. Click on ( + ) button to insert the filename path. +3. See the sample screenshot below. + + ![des-supplier-credit-note-attachment-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-attachment-2.jpg) + +### Note (SCN) + +1. Click on the Note section (on the LEFT side bar). +2. RIGHT click it, you will see the Rich Text Editor pop-up. +3. You can start key-in the note. See the example screenshot below. +4. Click on X button to save and exit the Rich Text Editor. + + ![des-supplier-credit-note-note-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-note-1.jpg) + +5. You will get prompted the Save changes? message. Click YES to save it. + + ![des-supplier-credit-note-note-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-note-2.jpg) + +### C/N Description (SCN) + +1. To show the document description in Supplier Statement, e.g., Overcharged-Stationery April 2015. + + ![des-supplier-credit-note-cn-description-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-cn-description-1.jpg) + +2. Sample of supplier statement screenshot below. + + ![des-supplier-credit-note-cn-description-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-cn-description-2.jpg) + +### Foreign Exchange Currency Gain/Loss (SCN) + +- Difference in the foreign currency exchange rate will AUTO post the FOREX Gain/Loss entry into GL. +- Posting date can be changed to reflect the FOREX Gain/Loss for a month. + +![des-supplier-credit-note-gainloss-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-credit-note-gainloss-1.jpg) + +## Supplier Refund (SR) + +- To receive the refund for the amount over paid to supplier. +- To off-set against the unapplied amount for Supplier Payment and Credit Note. + +![des-supplier-refund-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-1.jpg) + +### Basic Entry (SR) + +1. Click on New button. +2. See the New Supplier Refund entry form screenshot below. + + ![des-supplier-refund-entry-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-1.jpg) + +3. Select the Supplier Code. Direct key in and search by either Supplier code or name. +4. Select the Payment Method (bank or cash account) in Received In. +5. Enter the Refund Amount (follow the bank account currency). +6. Below is the example of the entry created: + + ![des-supplier-refund-entry-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-2.jpg) + + **Double Entry will be:-** + + | **Account** | **DR (RM)** | **CR (RM)** | + |-------------------------|-------------|-------------| + | Bank Acc | 3,590.00 | | + | Supplier Control Acc | | 3,590.00 | + +7. Enter Bank Charges if there is a bank charges. + + ![des-supplier-refund-entry-3](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-3.jpg) + +8. Let's say the bank charges = RM2.00; therefore, the double entry posting will be:- + + | **Account** | **DR (RM)** | **CR (RM)** | + |------------------|-------------|-------------| + | Bank Charges | 2.00 | | + | Bank Account | | 2.00 | + +9. Enter the cheque number, cash or TT into Cheque No. field. + + ![des-supplier-refund-entry-4](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-4.jpg) + +### Knock-off (SR) + +Purpose to knock-off the invoices: + +1. To show the outstanding invoices in Supplier Aging Report. +2. To indicate the payment knock-off the invoices in Supplier Statement. + +#### Partial Knock-Off (SR) + +1. You can enter the knock-off amount into Pay column (auto tick). +2. Unapplied Amt will be reduced by the knock-off amount entered. + + ![des-supplier-refund-partial-knockoff-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-partial-knockoff-1.jpg) + +#### Document Knock-Off (SR) + +1. You can tick on the outstanding documents. +2. Unapplied Amt will be reduced by the knock-off amount ticked. + + ![des-supplier-refund-document-knockoff-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-document-knockoff-1.jpg) + +#### Random Knock 0ff (SR) + +1. You can click on the Pay column. It will auto tick on the outstanding documents. +2. Unapplied Amt will be reduced according to the outstanding balance. + + ![des-supplier-refund-random-knockoff-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-random-knockoff-1.jpg) + + :::note + Refund Unapplied amount shows the supplier refund amount not allocated/knock-off against any unapplied amount in supplier payment and credit note. + ::: + +### Attachment (SR) + +- It is very useful to attach any supporting documents. +- In future, you are able to retrieve and refer the attachment file easily. + +![des-supplier-refund-attachment-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-attachment-1.jpg) + +1. You have to point to the attachment section. +2. Click on ( + ) button to insert the filename path. +3. See the sample screenshot below. + + ![des-supplier-refund-attachment-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-attachment-2.jpg) + +### Note (SR) + +1. Click on the Note section (on the LEFT side bar). +2. RIGHT click it, you will see the Rich Text Editor pop-up. + + ![des-supplier-refund-note-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-note-1.jpg) + +3. You can start key-in the note. See the example screenshot below. +4. Click on X button to save and exit the Rich Text Editor. + + ![des-supplier-refund-note-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-note-2.jpg) + +5. You will get prompted the Save changes? message. Click YES to save it. + + ![des-supplier-refund-note-3](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-note-3.jpg) + +### Description (SR) + +To show the supplier refund description in the Supplier Statement, e.g., Refund For SC-00002 & PV-00004.. + +![des-supplier-refund-description-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-description-1.jpg) + +Sample of supplier statement screenshot below. + +![des-supplier-refund-description-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-refund-description-2.jpg) + +## Supplier Contra (SC) + +- To make settlement of the outstanding between both supplier and customer accounts without any monetary transactions. +- It will use an intermediate accounts known as Contra Account. This account balance must be ZERO. + +![des-supplier-contra-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-1.jpg) + +### Basic Entry (SC) + +Assume that you have created the [Customer Contra](../../usage/customer/guide#customer-contra). You will found the same contra no. appeared in the Supplier Contra. + +1. Highlight the Contra No to edit. Click on Edit button. +2. See the Supplier Contra entry from screenshot below. + + ![des-supplier-contra-entry-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-entry-1.jpg) + +3. Select the Supplier Code. Direct key in and search by either supplier code or name. +4. Enter the Contra Amount (follow the supplier currency). +5. Below is the example of the entry created: + + ![des-supplier-contra-entry-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-entry-2.jpg) + + **Double Entry will be:-** + + | **Account** | **DR (RM)** | **CR (RM)** | + |--------------------------|-------------|-------------| + | Supplier Control Acc | 1,500.00 | | + | Contra Acc | | 1,500.00 | + +:::note TIPS + +To ensure the contra account has set properly. [Contra Account](../../usage/tools/guide#options) + +::: + +### Knock-off (SC) + +Purpose to knock-off the invoices: + +1. To show the outstanding invoices in Supplier Aging Report. +2. To indicate the contra knock-off the invoices in Supplier Statement. + +#### Partial Knock-Off (SC) + +1. You can enter the knock-off amount into Pay column (auto tick). +2. Unapplied Amt will be reduced by the knock-off amount entered. + + ![des-supplier-contra-partial-knockoff-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-partial-knockoff-1.jpg) + +#### Document Knock-Off (SC) + +1. You can tick on the outstanding documents. +2. Unapplied Amt will be reduced by the knock-off amount ticked. + + ![des-supplier-contra-document-knockoff-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-document-knockoff-1.jpg) + +#### Random Knock-Off (SC) + +1. You can click on the Pay column. It will auto tick on the outstanding documents. +2. Unapplied Amt will be reduced according to the outstanding balance. + + ![des-supplier-contra-random-knockoff-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-random-knockoff-1.jpg) + + :::note + + Refund unapplied amount shows the supplier contra amount not allocated/knock-off against any outstanding supplier invoices and debit note. + + ::: + +### Attachment (SC) + +- It is very useful to attach any supporting documents. +- In future, you are able to retrieve and refer the attachment file easily. + +![des-supplier-contra-attachment-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-attachment-1.jpg) + +1. You have to point to the attachment section. +2. Click on ( + ) button to insert the filename path. +3. See the sample screenshot below. + + ![des-supplier-contra-attachment-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-attachment-2.jpg) + +### Note (SC) + +1. Click on the Note section (on the LEFT side bar). +2. RIGHT click it, you will see the Rich Text Editor pop-up. + + ![des-supplier-contra-note-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-note-1.jpg) + +3. You can start key-in the note. See the example screenshot below. +4. Click on X button to save and exit the Rich Text Editor. + + ![des-supplier-contra-note-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-note-2.jpg) + +5. You will get prompted the Save changes? message. Click YES to save it. + + ![des-supplier-contra-note-3](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-note-3.jpg) + +### Description (SC) + +To show the supplier contra description in the Supplier Statement, e.g., Contra IV-00005 . + +![des-supplier-contra-description-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-description-1.jpg) + +Sample of supplier statement screenshot below. + +![des-supplier-contra-description-2](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-description-2.jpg) + +### GL Ledger - Contra Account + +1. Select the date range. +2. Select the account code, e.g., 450-000 CONTRA ACCOUNT. +3. Tick on General Ledger. +4. Click Apply button. +5. Example of the Contra Account ledger as shown below. + + ![des-supplier-contra-contra-account-1](../../../static/img/usage/supplier/supplier-guide-images/supplier-contra-contra-account-1.jpg) + +## InterBank GIRO Module + +To use the **Interbank GIRO** feature, you must have the **Interbank GIRO** module enabled in SQL Account. + +![des-interbank-giro-requirement](../../../static/img/usage/supplier/supplier-guide-images/interbank-giro-requirement.png) + +### Bank File Format + +The following shows the list of bank file formats that are currently supported. + +![des-giro-bank-file-format](../../../static/img/usage/supplier/supplier-guide-images/giro-bank-file-format.png) + +### Payment Method + +1. Click the **Bank Info** button. + + ![des-giro-payment-method-1](../../../static/img/usage/supplier/supplier-guide-images/giro-payment-method-1.png) + +2. Choose a **bank**. + + ![des-giro-payment-method-2](../../../static/img/usage/supplier/supplier-guide-images/giro-payment-method-2.png) + +3. Click the **OK** button. + + ![des-giro-payment-method-3](../../../static/img/usage/supplier/supplier-guide-images/giro-payment-method-3.png) + +4. The bank you have chosen may have **more than one file format**, please ensure you have selected the **correct file format**. + + ![des-giro-payment-method-4](../../../static/img/usage/supplier/supplier-guide-images/giro-payment-method-4.png) + +5. Enter the **bank information**, click the **OK** button, then Save. + + ![des-giro-payment-method-5](../../../static/img/usage/supplier/supplier-guide-images/giro-payment-method-5.png) + +### Supplier Bank Account + +1. Add a **bank account**, then Save. + + ![des-giro-supplier-bank-account-1](../../../static/img/usage/supplier/supplier-guide-images/giro-supplier-bank-account-1.png) + +### Supplier Payment Method + +1. Select **Supplier Bank** from the drop-down list. + + ![des-giro-supplier-payment-method-1](../../../static/img/usage/supplier/supplier-guide-images/giro-supplier-payment-method-1.png) + +2. Choose the **payment method** that contains **bank information**, then Save. + + ![giro-supplier-payment-method-2](../../../static/img/usage/supplier/supplier-guide-images/giro-supplier-payment-method-2.png) + +### Print Supplier Document (Interbank GIRO) Listing + +1. Click the **GIRO** button. + + ![des-giro-print-supplier-document-listing-1](../../../static/img/usage/supplier/supplier-guide-images/giro-print-supplier-document-listing-1.png) + +2. Enter additional information, then click the **Save** button. + + ![des-giro-print-supplier-document-listing-2](../../../static/img/usage/supplier/supplier-guide-images/giro-print-supplier-document-listing-2.png) + +3. You can now upload the bank instruction file to the bank host. + +### Excel Format + +By default, the system automatically saves an Excel file in XLSX format. Some banks (**Alliance Bank, Public Bank, RHB**) require the bank instruction file in XLS format. First, you must have **Microsoft Excel 2007** or a version above installed on your machine. + +Then, **open** the Excel file and **save it as XLS** format. diff --git a/docs/usage/tools.md b/docs/usage/tools.md deleted file mode 100644 index 328ae4ee..00000000 --- a/docs/usage/tools.md +++ /dev/null @@ -1,567 +0,0 @@ ---- -sidebar_position: 9 -title: Tools -description: Maintenance -slug: /usage/tools -tags: ["SQL Account", "Usage", "Tools"] ---- - -## Maintain User - -### Create New User - -1. Select **Tools** > **Maintain User** > **New** - -2. Enter the **Code and Name** (both can be the same e.g. Code = ALI, Name = ALI) - -3. Click on **More** Options and look for **Change Password** - - ![111](../../static/img/getting-started/user-guide/110.png) - -4. Click Save. Your new user account is now created. - - :::success info - SQL User license is per concurrent basis (i.e. how many users can login to the system at the same time). This mean that if you have 5 staffs in the office who can access SQL but you only 3 license for 3 concurrent users, you can still maintain all 5 users in the system but only 3 users can login and access at the same time. - ::: - -### User Access Right - -:::info Video Guide -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=t_TJKdOihfw&feature=youtu.be) -::: - -Not every user is going to have the same access rights as ADMIN, and ADMIN user might want to set security control settings in system. - -1. Select **Tools** > **Maintain User** > **Edit for the user that you want to set the access right for**. - -2. Click on **More** Options and look for **Access Right**. - -3. You need to check the transactions / functions (row), compare with the user (column) and **tick = Allowed** or **untick = Disallowed**, the action for a particular user for particular transactions. For example, base on the setting in the following images, the user is not allowed to delete Customers or to view Customer Payments. - - ![112](../../static/img/getting-started/user-guide/111.png) - -## Maintain Document Number - -You can maintain document number format and next number. - -:::info -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=hFR6TfqxnRU&feature=youtu.be) -::: - -1. **Tools** > **Maintain Document Number**. - -2. Insert **description** for the particular set of document and select a **document type** (e.g. Payment Voucher) - -3. The system’s defaults is the **Format** %.5d, where “%” is the formula which allows the function to auto-run for the document number while 5d stands for 5 digits. - - ![112a](../../static/img/getting-started/user-guide/111a.png) - -4. You can select the **Frequency** option as Never Reset or others. - -5. Set the **Next Number** for this document. - - ![113](../../static/img/getting-started/user-guide/112.png) - -## Maintain Acceptable Transaction Date - -:::info -SQL do not need to perform year end, it will cut off automatically. Once account closed, if you wish to block the period to avoid your users changed the account figure, you may apply this setting. -::: - -Maintain Acceptable Transaction Date allows you to control which documents you are allowed to maintain (New, Edit) based on their dates. - -- Any document which date falls **within** the allowed transaction dates **can** be edited. - -- Any document which date falls **outside** the allowed transaction dated **cannot** be edited/created. - -### New Acceptable Transaction Date - -1. **Tools** > **Maintain Acceptable Transaction Date** - - ![1](../../static/img/tools/acceptable-transaction-date/1.png) - -2. Click on **Append** (Icon with + symbol) - - ![2](../../static/img/tools/acceptable-transaction-date/2.png) - -3. Choose the period which you want to **allow transactions** - -4. **Save**. - - ![3](../../static/img/tools/acceptable-transaction-date/3.png) - -5. Result: - - It will show the message if users try to save a document that are not in acceptable transaction period - - ![4](../../static/img/tools/acceptable-transaction-date/4.png) - - If the user click "**Yes**" a dialogue box will request override permission by ID/PW with rights to override it. - - :::info - The default setting grants users override permission. Refer to the following section for instructions on revoking this privilege from a specific user. - ::: - -### Override Acceptable Transaction Date - - To override i.e. save a document that falls outside the acceptable transaction dates, you will need to be logged-in as a user with the right to override acceptable transactions dates. - - 1. **Tool** > **Maintain User**. Double click on the user that you want to **edit**. - - ![5](../../static/img/tools/acceptable-transaction-date/5.png) - - 2. Click on **More** > **Access Control** - ![6](../../static/img/tools/acceptable-transaction-date/6.png) - - 3. Under **Group Tools**, tick or untick the option of **Override Acceptable Transaction Date** to allow or deny the user from having the overriding right to save a document out of the acceptable transaction period. - - 4. **Save** the access right. - - ![115](../../static/img/getting-started/user-guide/114.png) - - 5. Result: - - If the user Is not permitted to override, the system will prompt the following dialog and you can choose either - - - **OK = cancel saving** - - **Override = Enter user the ID and password of a user who can override then save the transaction.** - - ![115b](../../static/img/getting-started/user-guide/115.png) - - ![116](../../static/img/getting-started/user-guide/116.png) - -## Maintain Form Mode - -Form Mode helps to filter data based on defined criteria. It is used to restrict users to view only specific sets of data for a certain document. For example, agent **Lip Fong can view and access the sales invoices belonging to his agent code** LF ONLY. - -### New Form Mode - -:::info -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=bqSDZlAhM5I&feature=youtu.be) -::: - -1. **Tools** > **Maintain Form Mode** > **New**. - -2. **Enter Code & Select the document** form that you want to filter, e.g. Invoice - - ![117](../../static/img/getting-started/user-guide/117.png) - -3. Click on the **Customize Filter** and then click on the **press the button to add a new condition**. - - ![118](../../static/img/getting-started/user-guide/118.png) - -4. Change the **“SL_IV.DOCKEY” to “SL_IV.Agent”** because right now I need to filter based on sales invoice agent field, then change **the “= equals” to “like”** after that **enter the agent code** that you want to filter and click on **OK**. - - ![119](../../static/img/getting-started/user-guide/119.png) - -5. Make sure the info is updated correctly then you can **Save**. - - ![120](../../static/img/getting-started/user-guide/120.png) - -6. Other optional setting: - - ![121](../../static/img/getting-started/user-guide/121.png) - - ![122](../../static/img/getting-started/user-guide/122.png) - -7. If you have set **more than 1 form mode**, once you click **Sales** > **Invoice** > you will get the prompt browse mode to choose which form mode that you want to apply. - - ![123](../../static/img/getting-started/user-guide/123.png) - -### Form Mode VS User - - How do I apply the format mode on a specific user? - - 1. **Tools** > **User Access Right Assignment…** - - 2. Under the list of security, click on **form mode** - - 3. Select the user, eg: user code: LF (Lip Fong) - - 4. Tick to apply the **form mode**, e.g. tick **form mode: IV-LF** and click Save - - ![124](../../static/img/getting-started/user-guide/124.png) - -## Maintain Terms - -Maintain Terms allows the user to maintain their Customer and Supplier terms. In SQL there are 3 types of different terms for you to assign. - -1. **Tools** > **Maintain Terms** > **New** - -2. **Insert Code, Description and allocated Term Type.** - ![125](../../static/img/getting-started/user-guide/125.png) - - - **Due in number of days** – Means how many days until document is due, e.g. if you set 30 days then the document will be due on the 30th day from the document date. - - ![126](../../static/img/getting-started/user-guide/126.png) - - - **Due on specific day of the month** – Means how many months and which day the document is due, e.g. if you set it as 1 Month 6 Days the document will be due on the 6th of the next month. - - ![127](../../static/img/getting-started/user-guide/127.png) - - - **Due in the month end** – Means how many months until the document is due at the end of the final month, e.g. if you set it as 2 months, the document will be due at the end of 2nd month. - -## Maintain Currency - -### New Foreign Currency - -:::info -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=qfhtlAjW4As&feature=youtu.be) -::: - -You can bill overseas customers & suppliers in foreign currencies e.g. USD, SGD, Euro & etc. **(Prof Package Inclusive)** - -1. **Tools** > **Maintain Currency** > **New** - - ![128](../../static/img/getting-started/user-guide/128.png) - -2. **Maintain Customer / Supplier to assign the currency** - - ![129](../../static/img/getting-started/user-guide/129.png) - -3. Sales document, select the customer, sample as below: - - 1. Currency Rate will follow your setting from Tools > Maintain Currency, but it is still changeable in this invoice. - - 2. Unit Price entered is in based on Customer’s currency eg this customer is in USD. - - 3. system will auto converted into default currency RM on right bottom Local Net Total column. - - ![130](../../static/img/getting-started/user-guide/130.png) - -### Payment from Foreign Customer - -#### Scenario 1 - -:::note -Customer Invoice **invoice billing in USD**, but **payment paid in your local RM bank** -::: - - 1. **Customer** > **Customer Payment** > **New** - - 2. Select your Customer - - 3. Choose your RM Bank - - 4. Enter your RM Amount - - 5. Knock off the invoice and the rate will be update automatically by system. Foreign gain loss will be auto calculated and post to account accordingly. (you can call out Rate & Gain Loss column from the hidden field). - - ![131](../../static/img/getting-started/user-guide/131.png) - -#### Scenario 2 - -:::note -Customer Invoice **billing in USD, Payment paid in your Foreign USD Bank** - -*([Advance Currency](../faq/tools/advance-currency.md) modules required)* -::: - - 1. Go to Tools > Maintain Payment > edit your USD Bank - - 2. **Currency**: You can assign the currency for the particular payment method, so that the payment method will be in foreign currency payment. - - 3. **Bank Charge Acc**: You can pre-set bank charges account to the payment method accordingly. - - 4. **OR & PV Number Set**: Set default running document number for the particular payment method (optional) - - 5. **Bank Info**: able to set Giro info & make payment thru Giro (refer [Interbank Giro](../additional-module/interbank-giro.md) Topic for more detail) - - ![132](../../static/img/getting-started/user-guide/132.png) - - Select your payment received in your **Foreign USD Bank**, enter your **paid Amount in USD, Enter your USD Rate** & Knock off the invoice, foreign gain loss will be auto calculated by system. - - ![133](../../static/img/getting-started/user-guide/133.png) - -#### Scenario 3 - -:::note -Customer Invoice **billing in USD**, but **payment in others currency** eg SGD / RMB / EURO -::: - - 1. Select your Bank eg you received in SGD Bank, enter your SGD Amount & SGD Rate. - - 2. Knock off your USD Invoice. - - 3. USD rate will be auto calculated & foreign gain loss will auto calculated and posting to account accordingly - - ![134](../../static/img/getting-started/user-guide/134.png) - -## Maintain Project (Required Project Module) - -This module allows the user to maintain the project accounting on a branch or departmental basis, the user can use this module for simple construction business as they get to view Profit and Loss / Balance Sheet by Project. - -1. Click on **Tools** > **Maintain Project**. - - ![135](../../static/img/getting-started/user-guide/135.png) - -2. Insert **Project Code & Description**. Project Value and Project Cost is not compulsory fields to fill in, if you have filled in then it is for remark purpose. - - ![136](../../static/img/getting-started/user-guide/136.png) - -3. Click on **Tools** > **Options**. - - ![137](../../static/img/getting-started/user-guide/137.png) - -4. Then look for **Miscellaneous** > Make sure the option **“Show Document Project”** is ticked. - - ![138](../../static/img/getting-started/user-guide/138.png) - -5. During **sales and purchase** transactions, make sure you can **the project column**, then **update** accordingly. - - ![139](../../static/img/getting-started/user-guide/139.png) - - When keying-in a transaction, some users will ask why is there a project at item detail and another beside the Customer. Duplicate tab? - - **What is the difference between More > Project >(Document Project) and Item Detail > Project (Item Project )?** - - ![140](../../static/img/getting-started/user-guide/140.png) - - ![141](../../static/img/getting-started/user-guide/141.png) - - ![142](../../static/img/getting-started/user-guide/142.png) - - **The project feature is also available for GL > Cash Book Entry.** - - After updating the document with project, how to view report with project and compare by project? For example: **GL > Print Profit & Loss Statement**. - -6. Filter by the date that you want to view for the P&L report, then if you want to perform a project-to-project comparison then choose **“Comparison – Project (6 columns)”** - - ![143](../../static/img/getting-started/user-guide/143.png) - - :::note - - 6 Columns = up to 6 projects - - 10 Columns = up to 10 projects - - 19 Columns = up to 19 projects. - - ::: - -7. Criteria - - 1. After selecting the report that you need, make sure to tick the **“Show Column Options”**, then the top of the report will show column options. - - 2. You may change the period that you want to view, e.g. by default it will be **“Current Month”**. - - If you want to view the whole year figures, then you have to **change to “Current Year”**. - - ![144](../../static/img/getting-started/user-guide/144.png) - -8. After changing the column options, you have to **tick the “Print Project Comparison”**, then the project tab will appear on the **right hand site**, you can select which project that you want to view then click on **Add**. - - ![145](../../static/img/getting-started/user-guide/145.png) - -9. Click on **Apply** and you will see the result. The P&L report will compare each project that you select. - - ![146](../../static/img/getting-started/user-guide/146.png) - -## 5 Cents Rounding - -We can pre-set the system to automatically round your invoice or cash sales amounts to the nearest 5 cents. - -:::info - -Watch tutorial video here: [Youtube](https://www.youtube.com/watch?v=VSnX55l_3xw&feature=youtu.be) - -::: - -1. **Tools** > **Options** > **Customer** - -2. **Tick 5 Cents Rounding** for Sales Invoice/ Cash Sales - - ![147](../../static/img/getting-started/user-guide/147.png) - - ![148](../../static/img/getting-started/user-guide/148.png) - -## Online Mobile Approval - -### How it works? - -For example : If we set Credit Limit over RM30,000 will required override - -1. A Dialog box will be prompted after *Save Invoice*, ***‘Do You want to override?’*** > Click ***Yes*** - - ![8](../../static/img/sales/start-online-mobile-approval/8.png) - -2. Click on ***Online Approval*** - - ![9](../../static/img/sales/start-online-mobile-approval/9.png) - - 1. Tick the ID that you choose to get approval - - 2. You can choose to send by **Whatsapp**, **Send by Email** or **Send by Whatsapp & Email** - - ![10](../../static/img/sales/start-online-mobile-approval/10.png) - -3. You will receive a message at **Whatsapp** message or **email sent by system** - - - **Senario 1 : Send By Whatsapp** - - You will receive a message > Click the link - - ![11](../../static/img/sales/start-online-mobile-approval/11.png) - - - **Senario 2 : Send By Email** - - You will receive an email > Click **'CLICK HERE FOR MORE ACTIONS'** - - ![12](../../static/img/sales/start-online-mobile-approval/12.png) - -4. Login **Gmail Address** that you set in maintain user **Open ID (Google)** - - :::info[note] - - - This step is for those send by **whatsapp** and **not use Gmail** to receive notification - - Those use **Gmail Address** to receive notification and approve can jump to **Step 6** - - ::: - - ![13](../../static/img/sales/start-online-mobile-approval/13.png) - -5. Enter your Gmail Password - - ![14](../../static/img/sales/start-online-mobile-approval/14.png) - -6. After Login Gmail you will see this window - - ![15](../../static/img/sales/start-online-mobile-approval/15.png) - -7. You can click on **Doc Detail** and **ScreenShot** to see the detail - - 1. **Doc Detail** : To show Customer Code, the reason why need override - - 2. **ScreenShot** : To see the transaction screen - - 3. **Reply** : You can left a message and click Approve or Reject - - ![16](../../static/img/sales/start-online-mobile-approval/16.png) - - :::info[note] - After Approve or Reject you can go back SQL Accounting, you will see below possible scenario - ::: - - - **Scenario 1 : Approve Override** - - >a. Message : Approve Message - > - >b. The green tick will appear after approve - > - >c. Click **OK** to save that transaction - - ![17](../../static/img/sales/start-online-mobile-approval/17.png) - - - **Scenario 2 : Reject Override** - - >a. Message : Reject Message - > - >b. The cross will appear after reject - > - >c. **OK** button is disabled after reject, click **Cancel** - - ![18](../../static/img/sales/start-online-mobile-approval/18.png) - - After Click Cancel System will Prompt back to this dialog box : - - ![19](../../static/img/sales/start-online-mobile-approval/19.png) - -### When to use? - -These **ALL** can use Online Approval for user : - -| Module | Action | -|---------------|-----------------| -| Logon Screen | - No access right to change password | -| All Module | - All Document entry without Execute / Print / Preview / Export access rights | -| | - Unable to Save and Manage Grid Layout | -| | - Unable to Grid Export | -| | - Save Document Fall Outside Acceptable Trans Date | -| Customer Inovice| - Fast entry save Invoice | -| SL&PH | - Prompt Stock Qty Control Dialog | -| | - Prompt change unit price | -| | - Save price below cost (fmSLPriceControl) | -| | - Override Credit Control | -| GL | - Bank Recon Entry form to Check Bank Recon Listing | -| Stock | - Update GL stock value from other stock month end report | -| | - Stock Report with Execute access right but without Process right | -| Inquiry | - Hide Dashboard | - -### 1. Maintain User - -1. Tools > Maintain User - - ![1](../../static/img/sales/start-online-mobile-approval/1.png) - -### 2. Edit User - -1. Double click the user that you want to setting > Edit - - ![2](../../static/img/sales/start-online-mobile-approval/2.png) - - ![3](../../static/img/sales/start-online-mobile-approval/3.png) - -### 3. Set Approval Person - -- Setting The Detail For Approval Person (ONLY GMAIL CAN LOGIN TO APPROVE OR REJECT) - - 1. Mobile number - To which whatsapp number to get notification for approval only - - 2. Email - To which email address to get notification for approval only - - 3. Open ID (Google) - Gmail for approve or reject - - :::info[note] - If receive notification email and approve email is Gmail, do setting only at **3.OPEN ID (Google)** and leave **2.Email** column blank - ::: - - ![4](../../static/img/sales/start-online-mobile-approval/4.png) - - For Example : - - - **Senario 1 : Use Same Gmail to Receive Notification and Give Approval** - - ``` - Your Gmail address is : `XXXXXX@gmail.com` - - 1. Open ID (Google) : `XXXXXX@gmail.com` - 2. Email : **Left as blank** - ``` - - ![5](../../static/img/sales/start-online-mobile-approval/5.png) - - - **Senario 2 : Use Different email to received notification and give approval** - - ``` - - To Give Approval Gmail Address is : `XXXXXX@gmail.com` - - To Received notification Address is : `XXXXXX@estream.com` - ``` - - 1. Open ID (Google) : Put your gmail address XXXXXX@gmail.com - 2. Email : XXXXXX@estream.com - - ![6](../../static/img/sales/start-online-mobile-approval/6.png) - -### 4. Setting SMTP - -:::info[note] - -- This Setting is for user who want to **use Email to send Notification** -- If use whatsapp to send approval can skip this step - -::: - -1. Make Sure you had create App Password - - If you are using Gmail , you can [CLICK HERE](https://support.google.com/accounts/answer/185833?hl=en) to follow the steps to create your App Password - - After getting your App Password, return to your SQL Accounting - -2. Click on Email Setting -3. Your Email SMTP Host -4. Your Email SMTP Port -5. Your Email SMTP Connection Security -6. Your Email Address -7. Your Apps Password -8. Your Email Sender Name -9. Afte done setting click Save - - ![7](../../static/img/sales/start-online-mobile-approval/7.png) diff --git a/docs/usage/tools/fast-report/_category_.json b/docs/usage/tools/fast-report/_category_.json new file mode 100644 index 00000000..936a7779 --- /dev/null +++ b/docs/usage/tools/fast-report/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Fast Report (FR3)", + "position": 3, + "link": { + "type": "generated-index", + "description": "Fast Report Designer" + } +} \ No newline at end of file diff --git a/docs/usage/tools/fast-report/basic-guide.md b/docs/usage/tools/fast-report/basic-guide.md new file mode 100644 index 00000000..6860315a --- /dev/null +++ b/docs/usage/tools/fast-report/basic-guide.md @@ -0,0 +1,2837 @@ +--- +sidebar_position: 1 +title: FR3 Guide +description: How to do custom reports in fast report +slug: /usage/tools/fast-report/guide +tags: ["SQL Account", "Usage", "Tools"] +--- + +## Understanding the Toolbar + +1. **Report Object** + + ![1](../../../../static/img/usage/tools/fastReport-basicGuide/1.png) + +2. **Align Toolbar** + + ![2](../../../../static/img/usage/tools/fastReport-basicGuide/2.png) + +## Sales Invoice Bands + +1. Understanding Bands + + 1. Group Header + - Grouping Header + - To Print on every page, right-click on ***Group Header Band***, select ***reprint on new page*** + + 2. Master Data + - The ***Main*** Dataset of the report + - Normally Bind to Main Dataset + - Each Page allows to have 1 ***Main Dataset Only*** + + 3. Detail Data + - To display ***all Item Details*** + + 4. Group Footer + - Grouping Footer + - Display on ***Last Page*** only + + 5. Page Footer + - Display on ***Every Page*** + +2. Sample Layout in Design Mode + + ![3](../../../../static/img/usage/tools/fastReport-basicGuide/3.png) + +3. Sample Layout on Preview Mode + + ![4](../../../../static/img/usage/tools/fastReport-basicGuide/4.png) + +4. Print Position + + - Group Footer content will be printed at the pixel value input. + - Higher Value = Higher Footer + - without setting the print position, the group footer will be printed after the document + detail records. + - Example Source Code: + + ```pascal + if Engine.FreeSpace < (GroupFooter1.Height + PageFooter1.Height + 30) then Engine.NewPage; + + Engine.CurY := Engine.PageHeight - GroupFooter1.Height - PageFooter1.Height - **60** ; + ``` + + :::info[note] + **60** -> Higher Value = Higher Footer + ::: + + 1. How to do the Print Position setting in Report? + + 1. Click on ***Group Footer*** -> Click on ***Properties*** -> ***Events*** Tab -> Double Click on ***OnbeforePrint*** event name + + ![5](../../../../static/img/usage/tools/fastReport-basicGuide/5.png) + + 2. Adjust the value + + ![6](../../../../static/img/usage/tools/fastReport-basicGuide/6.png) + +5. Stop Position vs Print Count + + | Stop Position | Print Count | + | :---: | :----: | + | Details will stop at the input value| Details will stop by number of records inputs| + | Recommended | Not recommend if using More Description | + | Value in Pixels | Number of Records | + + 1. How to do the Stop Position in Report? + + 1. Right click ***DetailData1*** -> Click on ***Events*** Tab -> Double click ***onAfterCalcHeight*** name + + ![7](../../../../static/img/usage/tools/fastReport-basicGuide/7.png) + + 2. Set the stop position + + ![8](../../../../static/img/usage/tools/fastReport-basicGuide/8.png) + + :::tip[TIPS] + 1. Set Either Print Count or Stop Position + 2. use // to disable the command + 3. When you set both Print Count and Stop Position, the system will capture Print Count. + ::: + + 3. Sample on Print Position / Stop Position + + ![9](../../../../static/img/usage/tools/fastReport-basicGuide/9.png) + +## How to design a Simple Sales Invoice? + +- Preview Invoice +- Click on Report Name to enter Design Mode + +1. **Add PICTURE** + + 1. Click on Picture Object + + ![10](../../../../static/img/usage/tools/fastReport-basicGuide/10.png) + + 2. Place on Report Page + + ![11](../../../../static/img/usage/tools/fastReport-basicGuide/11.png) + + - **Fix Picture** + + 1. Click on Load + + ![12](../../../../static/img/usage/tools/fastReport-basicGuide/12.png) + + 2. Select the Picture from your local drive + + 3. Click on ![tick](../../../../static/img/usage/tools/fastReport-basicGuide/tick.png) + + ![13](../../../../static/img/usage/tools/fastReport-basicGuide/13.png) + + 4. Adjust to the desired size + + ![14](../../../../static/img/usage/tools/fastReport-basicGuide/14.png) + + - **Capture Picture from Report Dataset** + + ![15](../../../../static/img/usage/tools/fastReport-basicGuide/15.png) + +2. **Text Memo** + + **Add Customer Email Address** + + 1. Click on Text Memo + + ![16](../../../../static/img/usage/tools/fastReport-basicGuide/16.png) + + 2. Place it on the Report Page + + 3. Enter Text : Email + + ![17](../../../../static/img/usage/tools/fastReport-basicGuide/17.png) + + 4. Repeat Steps i & ii + + 5. Select Document_CompanyBranch -> Email Expression + + ![18](../../../../static/img/usage/tools/fastReport-basicGuide/18.png) + +3. **Rich Text Object** + + **Add Note** + + 1. Click on RichText Object + + ![19](../../../../static/img/usage/tools/fastReport-basicGuide/19.png) + + 2. Place on Report Page + + 3. Select Main -> Note + + ![20](../../../../static/img/usage/tools/fastReport-basicGuide/20.png) + +4. **System Text** + + - **Add Sum Qty** + + 1. Click on System Text Object + + ![21](../../../../static/img/usage/tools/fastReport-basicGuide/21.png) + + 2. Place it on the Report Page + + 3. Select Aggregate value + + ![22](../../../../static/img/usage/tools/fastReport-basicGuide/22.png) + +5. **Draw Line** + + 1. Click on Line + + ![23](../../../../static/img/usage/tools/fastReport-basicGuide/23.png) + + 2. Place it on the Report Page + + 3. Draw a line + + ![24](../../../../static/img/usage/tools/fastReport-basicGuide/24.png) + +6. **Center Horizontally in Band** + + - Display the object in center horizontal + + 1. Click on the Object you want to show in center horizontal + + 2. Click on Center Horizontally In Band + + ![25](../../../../static/img/usage/tools/fastReport-basicGuide/25.png) + +7. **Align Left / Middle / Right** + + 1. Click on the multiple Object to Align as same alignment. System will follow the first object as alignment + + ![26](../../../../static/img/usage/tools/fastReport-basicGuide/26.png) + +8. **Save the File** + + 1. File -> Save As -> Enter Report Name -> Save + + 2. Preview to see the result + + Result: + + ![27](../../../../static/img/usage/tools/fastReport-basicGuide/27.png) + +## How to create the Subreport in Report? + +- Preview Invoice +- Click on ***Report Name*** to enter Design Mode + + ![28](../../../../static/img/usage/tools/fastReport-basicGuide/28.png) + + 1. Click on **Subreport Object** + + ![29](../../../../static/img/usage/tools/fastReport-basicGuide/29.png) + + 2. Place on Report Page you want to show. + + ![30](../../../../static/img/usage/tools/fastReport-basicGuide/30.png) + + 3. System will prompt a new blank page for the Subreport + + ![31](../../../../static/img/usage/tools/fastReport-basicGuide/31.png) + + 4. Click on **Insert Band** to design the layout or insert data + + ![32](../../../../static/img/usage/tools/fastReport-basicGuide/32.png) + +## Check Box + +1. **Simple CheckBox** + + 1. Click on CheckBox object + + ![33](../../../../static/img/usage/tools/fastReport-basicGuide/33.png) + + 2. Place on the place you want to show. + + ![34](../../../../static/img/usage/tools/fastReport-basicGuide/34.png) + + 3. Press the button + + ![35](../../../../static/img/usage/tools/fastReport-basicGuide/35.png) + + 4. Select the frame design + + ![36](../../../../static/img/usage/tools/fastReport-basicGuide/36.png) + + 5. Change to False + + ![37](../../../../static/img/usage/tools/fastReport-basicGuide/37.png) + + 6. Save the File + 1. File -> Save As -> Enter Report Name -> Save + 2. Preview and see the result + + Result : + + ![38](../../../../static/img/usage/tools/fastReport-basicGuide/38.png) + +2. **Query to show Check Box either True to False** + + 1. Click on CheckBox | Double Click OnBeforePrint + + ![39](../../../../static/img/usage/tools/fastReport-basicGuide/39.png) + + 2. Place a Query below + + ![40](../../../../static/img/usage/tools/fastReport-basicGuide/40.png) + + Query: + + ```pascal + procedure Check/box1OnBeforePRint(Sender: TfrxComponent); + begin + if (Main."UDF_updated") = 'T' then + checkbox1.checked := true + else + checkbox1.checked := false; + end; + ``` + +## How to do Report Watermark? + +1. Insert Band | Select Overlay + + ![41](../../../../static/img/usage/tools/fastReport-basicGuide/41.png) + +2. Insert Picture / Text to load in the water mark + + ![42](../../../../static/img/usage/tools/fastReport-basicGuide/42.png) + +3. Overlay size can drag the same size as A4/Letter, and place the watermark on the position you want to show. + + ![43](../../../../static/img/usage/tools/fastReport-basicGuide/43.png) + +4. File | Save As: Enter report name + +5. Preview and see the Result : + + ![44](../../../../static/img/usage/tools/fastReport-basicGuide/44.png) + +## Fast Report - Doing Simple Calculation + +- In Fast Report you can also do some simple calculation using the Memo (Red A Icon) + +1. Below is an example using Sales Invoice to get Net Unit Price (after Discount) + +![netUnitPrice](../../../../static/img/usage/tools/fastReport-basicGuide/net-unit-price.jpg) + +1. Click the Red A Icon. +2. Click on the place to print/shown. + + ![memoABC](../../../../static/img/usage/tools/fastReport-basicGuide/memo-abc.jpg) + +3. Click the ABC Icon + + ![DocumentDetailExpression](../../../../static/img/usage/tools/fastReport-basicGuide/document-detail-expression.jpg) + +4. Scroll and look for Document_Detail Pipeline/Section & Double click the field to Insert (eg Amount & Qty) +5. Change the Expression or Formula here +6. Click Ok button. + + ![memoFormat&Category](../../../../static/img/usage/tools/fastReport-basicGuide/memo-format&category.jpg) + +7. Click Format tab +8. Set Category to Number & Format to 1,234.50 +9. Click Ok button. +10. Click Ok button again to close the Memo dialog. +11. Right Click the Memo. + +## Fast Report - Get Data Directly from DB + +Sometime in the report you might want some extra information that you are not able to select in the report design. So you had to self query to get the extra information. + +There are 2 ways to Get the data directly from the Database + +- Cache Query +- Get DB Data Query + +## Cache Query + +
+ Cache Query - click to expand + +> Only available SQL Accounting Version 723 & above + +- Pros + +1. Easy to write + +2. Can direct filter data from the Local Pipeline + +3. Less data Loading + +- Cons + +1. Unable to Total all result shown + +2. Only support = in the Query + +3. No pipeline is created + +### Example 1 - Get Shelf Field from Maintain Item + + Below is Example are doing following actions : + +- At Sales Invoice to get Shelf field from Maintain Item + + ![fr3GetShelfField](../../../../static/img/usage/tools/fastReport-basicGuide/fr3-get-shelf-field.jpg) + +1. Click the Red A Icon. +2. Click on the place to print/shown. +3. Right Click the Memo. + + ![rightClickMemo](../../../../static/img/usage/tools/fastReport-basicGuide/right-click-memo.jpg) + +4. Select Stretch +5. Click on the Events tab +6. Double Click OnBeforePrint +7. Enter below script + + ```pascal + procedure Memo18OnBeforePrint(Sender: TfrxComponent); + var V : Variant; + begin + V := Null; + //Get Shelf From ST_Item + if Trim() <> '' then + V := CacheQuery_GetValue(pST_Item, [], 'Shelf'); + + if not VarIsNull(V) then + Memo18.Text := V else + Memo18.Text := ''; + end; + ``` + + ![fr3InsertCode](../../../../static/img/usage/tools/fastReport-basicGuide/fr3-insert-code.jpg) + +8. Scroll up till the top of the Code +9. Enter below script at the First line + + ```pascal + var pST_Item : pointer; + ``` + + ![fr3InsertCode2](../../../../static/img/usage/tools/fastReport-basicGuide/fr3-insert-code2.jpg) + +10. Scroll down till the end of the Code +11. Enter below script in between begin and end. + + ```pascal + pST_Item := CacheQuery_New('SELECT Shelf FROM ST_ITEM WHERE Code=:Code'); + ``` + +12. Save the report. + +### Example 2 - Get RefCost Field from Maintain Item + +Below is Example are doing following actions + +- Sales Invoice to get RefCost field from Maintain Item +- Use RefCost * Qty in Sales Invoice + +1. Click the Red A Icon. +2. Click on the place to print/shown. +3. Right Click the Memo. +4. Select Stretch +5. Click on Events tab +6. Double Click OnBeforePrint +7. Enter below script + + ```pascal + procedure Memo18OnBeforePrint(Sender: TfrxComponent); + var V : Variant; + begin + V := Null; + //Get RefCost*Qty + if Trim() <> '' then + V := CacheQuery_GetValue(pST_Item_UOM, [, ], 'RefCost'); + + if not VarIsNull(V) then + V := V * else + V := 0; + Memo18.Text := FormatFloat(, V); + end; + ``` + +8. Scroll up till the top of the Code +9. Enter below script at the First line + + ```pascal + var pST_Item_UOM : pointer; + ``` + +10. Scroll down till the end of the Code +11. Enter below script in between begin and end. + + ```pascal + pST_Item_UOM := CacheQuery_New('SELECT RefCost FROM ST_ITEM_UOM WHERE Code=:Code AND UOM=:UOM'); + ``` + +12. Save the report. + +### Example 3 - Get Picture Field from Maintain Item + +Below is Example are doing following actions + +- Sales Invoice to get Picture field from Maintain Item + +> This function only available on Version 730 & above + + ![pictureField](../../../../static/img/usage/tools/fastReport-basicGuide/picture-field.jpg) + +1. Click on Picture Icon (Below Red A icon) +2. Click on the place to print/shown. +3. Click on Event tab on Object Inspector +4. Double Click OnBeforePrint +5. Enter below script + + ```pascal + procedure Picture1OnBeforePrint(Sender: TfrxComponent); + var V : Variant; + begin + Picture1.Height := 0; + V := Null; + V := CacheQuery_GetValue(pST_Item, [], 'Picture'); + if not VarIsNull(V) then begin + Picture1.LoadPictureFromBytes(V); + Picture1.Height := 48; + end; + end; + ``` + + ![pictureFieldInsertCode](../../../../static/img/usage/tools/fastReport-basicGuide/picture-field-insert-code.jpg) + +6. Scroll up till the top of the Code +7. Enter below script at the First line + + ```pascal + var pST_Item : pointer; + ``` + + ![pictureFieldInsertCode2](../../../../static/img/usage/tools/fastReport-basicGuide/picture-field-insert-code2.jpg) + +8. Scroll down till the end of the Code +9. Enter below script in between begin and end. + + ```pascal + pST_Item := CacheQuery_New('SELECT Picture FROM ST_ITEM WHERE Code=:Code'); + ``` + +10. Save the report. + +### Example 4 - Get Document Created UserName from Audit + +Below is Example is to Get the who created the Document from Audit Table. + +1. Click the Red A Icon. +2. Click on the place to print/shown. +3. Right Click the Memo. +4. Select Stretch +5. Click on Events tab +6. Double Click OnBeforePrint +7. Enter below script + + ```pascal + procedure Memo10OnBeforePrint(Sender: TfrxComponent); + var V : Variant; + p : Pointer; + s : String; + begin + V := Null; + if Trim() <> '' then begin + //For AR, AP, SL & PH Only + s := '%' + + '%Code: ' + + ',%'; + //For JV & CB Only + //s := '%' + + ',%'; + V := CacheQuery_GetValue(p_Audit, [s], 'Code'); //for User Code + //V := CacheQuery_GetValue(p_Audit, [s], 'Name'); //for User Name + end; + + if not VarIsNull(V) then + Memo10.Text := V else + Memo10.Text := ''; + end; + ``` + +8. Scroll up till the top of the Code +9. Enter below script at the First line + + ```pascal + var p_Audit : pointer; + ``` + +10. Scroll down till the end of the Code +11. Enter below script in between begin and end. + + ```pascal + p_Audit := CacheQuery_New('SELECT CODE, NAME FROM SY_USER WHERE CODE = (SELECT First 1 UserName FROM AUDIT WHERE UPDATEKIND=''I'' AND REFERENCE LIKE :DocNo) '); + ``` + +12. Save the report. + +### Example 5 - Get Transfer Information - QT to DO to IV + +Below is Example are doing following action + +- Quotation Transfer to Delivery Order to Invoice. +- Get the Quotation number & Date in the Invoice Detail + +1. Click the Red A Icon. +2. Click on the place to print/shown (In DetailData). +3. Right Click the Memo. +4. Select Stretch +5. Click on Events tab +6. Double Click OnBeforePrint +7. Enter below script (For DocNo) + + ```pascal + procedure Memo10OnBeforePrint(Sender: TfrxComponent); + var V : Variant; + begin + V := Null; + if Trim() <> '' then + V := CacheQuery_GetValue(pSL_QT, [], 'DocNo'); + + if not VarIsNull(V) then + Memo10.Text := V else + Memo10.Text := ''; + end; + ``` + +8. Repeat again Steps 01 to 06 +9. Enter below script (For DocDate) + + ```pascal + procedure Memo18OnBeforePrint(Sender: TfrxComponent); + var V : Variant; + begin + V := Null; + if Trim() <> '' then + V := CacheQuery_GetValue(pSL_QT, [], 'DocDate'); + + if not VarIsNull(V) then + Memo18.Text := V else + Memo18.Text := ''; + end; + ``` + +10. Scroll up till the top of the Code +11. Enter below script at the First line + + ```pascal + var pSL_QT : pointer; + ``` + +12. Scroll down till the end of the Code +13. Enter below script in between begin and end. + + ```pascal + pSL_QT := CacheQuery_New('SELECT A.DocNo, A.DocDate, B.Qty FROM SL_QT A '+ + 'INNER JOIN SL_QTDTL B ON (A.Dockey=B.Dockey) ' + + 'WHERE B.Dockey=(SELECT FROMDOCKEY FROM SL_DODTL ' + + 'WHERE Dtlkey=:Dtlkey) '+ + 'AND B.DtlKey=(SELECT FROMDTLKEY FROM SL_DODTL '+ + 'WHERE Dtlkey=:DtlKey)'); + ``` + +14. Save the report. + +### Example 6 - Get Customer Branch Email & Attention + +Below is Example are doing following actions + +- Sales Invoice to get Branch Email field from Maintain Customer + +1. Click the Red A Icon. +2. Click on the place to print/shown. +3. Right Click the Memo. +4. Select Stretch +5. Click on Events tab +6. Double Click OnBeforePrint +7. Enter below script + + ```vb + procedure Memo18OnBeforePrint(Sender: TfrxComponent); + var V : Variant; + begin + V := Null; + //For Email + V := CacheQuery_GetValue(pAR_Branch, [, ], 'EMail'); + //For Attention + //V := CacheQuery_GetValue(pAR_Branch, [, ], 'Attention'); + + if VarIsNull(V) then + V := ''; + Memo18.Text := V; + end; + ``` + +8. Scroll up till the top of the Code +9. Enter below script at the First line + + ```pasacal + var pAR_Branch : pointer; + ``` + +10. Scroll down till the end of the Code +11. Enter below script in between begin and end. + + ```pascal + pAR_Branch := CacheQuery_New('SELECT EMail, Attention FROM AR_CustomerBranch WHERE Code=:Code AND BranchName=:BranchName'); + ``` + +12. Save the report. + +
+ +## Get DB Data Query + +
+ Get DB Data Query - click to expand + +User can use this function to query & add new pipeline & also join/link the new pipeline to the existing/local pipeline. +The Steps is 99% same like **Fast Report - Get Data from Available Pipeline** the only different is the Script part. + +Pros + +- Can write complex query + +Cons + +1. Not Easy to write +2. Unable to filter data from Local Pipeline (i.e. Had to Select ALL data from the Table) +3. Might slow or Out of Memory on Print/Preview report if not careful + +### Example 1 - Get Maintain Batch Information + +Below is Example doing following actions + +- Get data information From Stock Batch + +![maintainBatchInsertCode](../../../../static/img/usage/tools/fastReport-basicGuide/maintain-batch-insert-code.jpg) + +1. Click Code tab & scroll down look for procedure SetUp +2. Copy below script & paste it between the begin & end; in procedure SetUp + + ```pascal + SQL := 'SELECT Code, Description, ExpDate, MfgDate, Remark1, Remark2 FROM ST_BATCH'; + AddDataSet('plST_Batch',['Code', 'Description', 'ExpDate', 'MfgDate', 'Remark1', 'Remark2']) + .GetDBData(SQL) + .LinkTo('Document_Detail', 'Batch', 'Code'); // Link to Detail + ``` + +3. Click File | Save As... to save the file (eg Sales Invoice 7 (GST 2)-New) +4. Click File | Exit to exit the report design +5. Click Design again in the report designer for the file just save on Steps 3 (eg Sales Invoice 7 (GST 2)-New) + + ![maintainBatchOptions](../../../../static/img/usage/tools/fastReport-basicGuide/maintain-batch-options.jpg) + +6. Click on Red A icon & click the place to print + +7. Select the option for following setting + + - Dataset : plST_Batch + - DataField : ExpDate + +8. Repeat Steps 6 to 7 for other field if necessary +9. Save the Report + +### Example 2 - Get Supplier Bank Information + +Below is Example doing following actions + +- Get Supplier Bank information From Maintain Supplier for Supplier Payment Voucher + +![supplierBankInsertCode](../../../../static/img/usage/tools/fastReport-basicGuide/supplier-bank-insert-code.jpg) + +1. Click Code tab & scroll down look for procedure SetUp +2. Copy below script & paste it above the procedure SetUp + +
+ Supplier Bank Info Script - click to expand + + ```pascal + function FormatSQLDate(D: TDateTime): String; + var AFormat: string; + begin + AFormat := 'dd mmm yyyy'; //'dd/mmm/yyyy' if can't + Result := QuotedStr(FormatDateTime(AFormat, D)); + end; + + function GetBankName(const lCode:String):String; + begin + case lCode of + 'AIBBMY' : Result := 'Affin Bank Berhad'; + 'RJHIMY' : Result := 'Al Rajhi Banking & Investment Corporation (Malaysia) Berhad'; + 'MFBBMY' : Result := 'Alliance Bank Malaysia Berhad'; + 'ARBKMY' : Result := 'AmBank (M) Berhad'; + 'BNPAMY' : Result := 'BNP Paribas Malaysia Berhad'; + 'BIMBMY' : Result := 'Bank Islam Malaysia Berhad'; + 'BKRMMY' : Result := 'Bank Kerjasama Rakyat Malaysia Berhad'; + 'BMMBMY' : Result := 'Bank Muamalat Malaysia Berhad'; + 'BOFAMY' : Result := 'Bank of America Malaysia Berhad'; + 'BOTKMY' : Result := 'Bank of Tokyo-Mitsubishi UFJ (Malaysia) Berhad'; + 'AGOBMY' : Result := 'Bank Pertanian Malaysia Berhad'; + 'BSNAMY' : Result := 'Bank Simpanan Nasional Berhad'; + 'CIBBMY' : Result := 'CIMB Bank Berhad'; + 'CITIMY' : Result := 'Citibank Berhad'; + 'DEUTMY' : Result := 'Deutsche Bank (Malaysia) Berhad'; + 'HLBBMY' : Result := 'Hong Leong Bank Berhad'; + 'HBMBMY' : Result := 'HSBC Bank Malaysia Berhad'; + 'ICBKMY' : Result := 'Industrial and Commercial Bank of China (Malaysia) Berhad'; + 'CHASMY' : Result := 'J.P. Morgan Chase Bank Berhad'; + 'KFHOMY' : Result := 'Kuwait Finance House (Malaysia) Berhad'; + 'MBBEMY' : Result := 'Malayan Banking Berhad'; + 'MHCBMY' : Result := 'Mizuho Bank (Malaysia) Berhad'; + 'OCBCMY' : Result := 'OCBC Bank (Malaysia) Berhad'; + 'PBBEMY' : Result := 'Public Bank Berhad'; + 'RHBBMY' : Result := 'RHB Bank Berhad'; + 'SCBLMY' : Result := 'Standard Chartered Bank Malaysia Berhad'; + 'SMBCMY' : Result := 'Sumitomo Mitsui Banking Corporation Malaysia Berhad'; + 'ABNAMY' : Result := 'The Royal Bank of Scotland Berhad'; + 'UOVBMY' : Result := 'United Overseas Bank (Malaysia) Bhd'; + 'ANZBSG' : Result := 'Australia and New Zealand Banking Group Limited'; + 'BKKBSG' : Result := 'Bangkok Bank Public Company Limited'; + 'BOFASG' : Result := 'Bank of America, National Association'; + 'BKCHSG' : Result := 'Bank of China Limited'; + 'BEASSG' : Result := 'The Bank of East Asia Limited'; + 'BNINSG' : Result := 'P.T. Bank Negara Indonesia (Persero)'; + 'BKIDSG' : Result := 'Bank of India'; + 'BOTKSG' : Result := 'Bank Of Tokyo-Mitsubishi UFJ Limited'; + 'BNPASG' : Result := 'BNP Paribas'; + 'CTCBSG' : Result := 'Chinatrust Commercial Bank Corporation Limited'; + 'CIBBSG' : Result := 'CIMB Bank Berhad'; + 'CITISG' : Result := 'Citibank, National Association'; + 'COBASG' : Result := 'Commerzbank AG'; + 'AGRISG' : Result := 'Credit Agricole Corporate And Investment Bank'; + 'DBSSSG' : Result := 'DBS Bank Limited'; + 'DEUTSG' : Result := 'Deutsche Bank AG'; + 'DNBASG' : Result := 'DNB Bank ASA'; + 'FAEASG' : Result := 'Far Eastern Bank Limited'; + 'FCBKSG' : Result := 'First Commercial Bank Limited'; + 'HLBBSG' : Result := 'HL Bank'; + 'HSBCSG' : Result := 'The Hongkong And Shanghai Banking Corporation Limited'; + 'ICICSG' : Result := 'ICICI Bank Limited'; + 'IDIBSG' : Result := 'Indian Bank'; + 'IOBASG' : Result := 'Indian Overseas Bank'; + 'iCBKSG' : Result := 'Industrial and Commercial Bank Of China'; + 'BCITSG' : Result := 'Intesa Sanpaolo SpA'; + 'CHASSG' : Result := 'JP Morgan Chase Bank, National Association'; + 'KOEXSG' : Result := 'Korea Exchange Bank'; + 'SOLASG' : Result := 'Landesbank Baden-Wurttemberg'; + 'MBBESG' : Result := 'Malayan Banking Bhd'; + 'MHCBSG' : Result := 'Mizuho Bank Limited'; + 'NATASG' : Result := 'National Australia Bank Limited'; + 'NDPBSG' : Result := 'Nordea Bank Finland PLC'; + 'OCBCSG' : Result := 'Oversea-Chinese Banking Corporation Limited'; + 'RHBBSG' : Result := 'RHB Bank Berhad'; + 'ESSESG' : Result := 'Skandinaviska Enskilda Banken AB'; + 'SOGESG' : Result := 'Societe Generale'; + 'SBSASG' : Result := 'Standard Chartered Bank'; + 'SBINSG' : Result := 'State Bank of India'; + 'SMBCSG' : Result := 'Sumitomo Mitsui Banking Corporation'; + 'HANDSG' : Result := 'Svenska Handelsbanken AB'; + 'RBOSSG' : Result := 'The Royal Bank of Scotland PLC'; + 'UBSWSG' : Result := 'UBS AG'; + 'UCBASG' : Result := 'UCO Bank'; + 'UOVBSG' : Result := 'United Overseas Bank Limited'; + end; + end; + + procedure SetUp_BankInfo; + var s : string; + begin + s := 'SELECT DocNo, BankAcc FROM AP_SP '; + + if = True then + s := Format(s, ['PostDate', FormatSQLDate(), + FormatSQLDate()]) else + s := Format(s, ['DocDate', FormatSQLDate(), + FormatSQLDate()]); + AddDataSet('pl_APPM', ['DocNo', 'BankAcc']) + .GetDBData(s) + .LinkTo('Main', 'DocNo', 'DocNo'); + + s := 'SELECT * FROM AP_SUPPLIERBANKACC '+ + 'WHERE IsActive=''T'' '; + AddDataSet('pl_SUPPLIERBANKACC', ['Bank', 'AccNo', 'AccName']) + .GetDBData(s) + .LinkTo('pl_APPM', 'BankAcc', 'AutoKey'); + end; + ``` + +
+ +3. Copy below script & paste it between the begin & end; in procedure SetUp + + ```pascal + SetUp_BankInfo; + ``` + +4. Click File | Save As... to save the file (eg GL Payment Voucher - Detail - Full (GST)-v BankInfo) +5. Click File | Exit to exit the report design +6. Click Design again in the report designer for the file just save on Steps 4 (eg GL Payment Voucher - Detail - Full (GST)-v BankInfo) + +![supplierBankOptions](../../../../static/img/usage/tools/fastReport-basicGuide/supplier-bank-options.jpg) + +7. Click on Red A icon & click the place to print +8. Select the option for following setting + +- Dataset : pl_SUPPLIERBANKACC +- DataField : AccNo + +9. Repeat Step 7 + +![supplierBankInsertCodeMemo](../../../../static/img/usage/tools/fastReport-basicGuide/supplier-bank-insert-code-memo.jpg) + +10. Copy below script & paste it in the Memo + + ```pascal + [GetBankName()] + ``` + +11. Click OK +12. Save the report + +
+ +## Fast Report - Get Data from Available Pipeline + +
+ Get Data from Available Pipeline - click to expand + +- Sometime in the report you might wanted some extra information or further analysis from the report itself but you not able to select in the report design. So you had to self query to get the extra information or further analysis. + +### Example 1 - Show GST Summary at Last Page + +Below is Example doing following actions : + +- Get data information (Tax, Tax rate, LocalAmount, LocalTaxAmt) +- Group the data by Tax code + +![showGSTSummaryInsertCode](../../../../static/img/usage/tools/fastReport-basicGuide/show-gst-summary-insert-code.jpg) + +1. Click Code tab & scroll down look for procedure SetUp +2. Copy below script & paste it between the begin & end; in procedure SetUp + + ```pascal + SQL := 'SELECT Dockey, Tax, TaxRate, Sum(CAST(LocalTaxAmt AS REAL)) LocalTaxAmt, ' + + 'Sum(CAST(LocalAmount AS REAL)) LocalAmount '+ + 'FROM Document_Detail ' + + 'WHERE Tax <> '''' ' + + 'GROUP BY Dockey, Tax, TaxRate'; + AddDataSet('GSTAmt', ['Tax', 'TaxRate', 'LocalTaxAmt', 'LocalAmount']) // Create New Pipeline (eg here is GSTAmt) + .GetLocalData(SQL) // Execute the Query + .SetDisplayFormat(['LocalTaxAmt', 'LocalAmount'],) // Set Display Format + .LinkTo('Main', 'Dockey', 'Dockey'); // Link the New Pipeline (eg here is to link with Main Pipeline) + ``` + +3. Click File | Save As... to save the file (eg Sales Invoice 7 (GST 2)-New) +4. Click File | Exit to exit the report design +5. Click Design again in the report designer for the file just save on Steps 3 (eg Sales Invoice 7 (GST 2)-New) + + ![subreportIcon-subreport](../../../../static/img/usage/tools/fastReport-basicGuide/subreport-icon-subreport.jpg) + +6. Click Subreport Icon +7. Click the place to print + + ![insertBand-MasterData](../../../../static/img/usage/tools/fastReport-basicGuide/insert-band-master-data.jpg) + +8. Click Insert Band icon +9. Select Master Data + + ![gstAmount](../../../../static/img/usage/tools/fastReport-basicGuide/gst-amount.jpg) + +10. In the Dataset select the New Pipeline created at Step 2 (eg GSTAmt) & Click Ok +11. Repeat Steps 8 to add the Header & Footer + + ![gstAmtOptions](../../../../static/img/usage/tools/fastReport-basicGuide/gst-amt-options.jpg) + +12. Click on Red A icon & click the place to print +13. Select the option for following setting + + - Dataset : GSTAmt + - DataField : LocalAmount + +14. Repeat Step 12 & 13 for other but DataField change to LocalTaxAmt +15. Click Sum Icon & click at the Footer + + ![aggregateValue](../../../../static/img/usage/tools/fastReport-basicGuide/aggregate-value.jpg) + +16. Select Aggregate value & set the option as following setting : + + - Function : SUM + - Data band : MasterData2 + - DataSet : GSTAmt + - DataField : LocalAmount + +17. Click Ok +18. Repeat Step 16 & 17 for other but DataField change to LocalTaxAmt + + ![displayFormat-gstSummary](../../../../static/img/usage/tools/fastReport-basicGuide/display-format-gst-summary.jpg) + +19. Right Click & select DisplayFormat + + ![displayFormatOptions-gstSummary](../../../../static/img/usage/tools/fastReport-basicGuide/display-format-options-gst-summary.jpg) + +20. Set the setting for following option : + + - Category : Number + - Format : 1,234.50 + +21. Click OK +22. Repeat Steps 19 to 21 for other Total field (i.e. LocalTaxAmt) +23. Click on Red A icon & click the place to show tax code +24. Copy below script & paste in the memo : + + ```pascal + [IIF(Trim()='',, +' @ ' + )] + ``` + + ![gstSummaryInsertCodeMemo](../../../../static/img/usage/tools/fastReport-basicGuide/gst-summary-insert-code-memo.jpg) + +25. Click OK. +26. For Label, Click on Red A icon, click the place to print & enter the Decription +27. Save the report. + +### Example 2 - Show Show 1st FromDocNo at Header + +Below is Example will get FromDocNo Field from the Detail Data + +1. Click Code tab & scroll down look for procedure SetUp +2. Copy below script & paste it between the begin & end; in procedure SetUp + + ```pascal + SQL := 'SELECT Dockey, Min(Seq) Seq, FromDocDate, FromDocNo FROM Document_Detail '+ + 'WHERE FromDocType <> '''' '; + AddDataSet('pl_FromDocInfo', ['Dockey', 'FromDocDate', 'FromDocNo']) + .GetLocalData(SQL) + .LinkTo('Main', 'Dockey', 'Dockey'); + ``` + +3. Click File | Save As... to save the file (eg Sales Invoice 7 (GST 2)-New) +4. Click File | Exit to exit the report design +5. Click Design again in the report designer for the file just save on Steps 3 (eg Sales Invoice 7 (GST 2)-New) +6. Click on Red A icon & click the place to print +7. Select the option for following setting + + - Dataset : pl_FromDocInfo + - DataField : FromDocNo + +8. Repeat Step 6 & 7 for other field +9. Save report + +### Example 3 - Group Overtime in Payslip + +Below is Example will group all the Overtime by Code, Description, Rate & PayRate. + +![grpOvertimeInsertCode](../../../../static/img/usage/tools/fastReport-basicGuide/grp-overtime-insert-code.jpg) + +1. Click Code tab & scroll look for begin & end. +2. Copy below script & paste it above the begin & end. + + ```pascal + procedure Setup; + var SQL : String; + begin + SQL := 'SELECT Employee, Code, Description, Rate, PayRate, ' + + 'Sum(CAST(WorkUnit AS REAL)) WorkUnit, Sum(CAST(Amount AS REAL)) Amount ' + + 'FROM Overtime ' + + 'GROUP BY Employee, Code, Description, Rate, PayRate'; + AddDataSet('OTGroup', ['Employee', 'Code', 'Description', 'Rate', 'PayRate', 'WorkUnit','Amount']) + .GetLocalData(SQL) // Execute the Query + .SetDisplayFormat(['WorkUnit'],) + .SetDisplayFormat(['Rate','PayRate'],) + .SetDisplayFormat(['Amount'],) + .LinkTo('Main', 'Employee', 'Employee'); + end; + ``` + +3. Click File | Save As... to save the file (eg PR.Payslip1A.Report-Group) +4. Click File | Exit to exit the report design +5. Click Design again in the report designer for the file just save on Steps 3 (eg SPR.Payslip1A.Report-Group) +6. Click Subreport3 +7. Double Click MasterData4 +8. Change the Dataset to OTGroup & Click OK +9. Change all the Field Data Set to OTGroup for all Component in MasterData4 + +### Example 4 - Show Total SVE at Footer + +Below Example is to Get total SVE for 6% + +1. Click Code tab & scroll down look for procedure SetUp +2. Copy below script & paste it between the begin & end; in procedure SetUp + + ```pascal + SQL := 'SELECT DocKey, SUM(LocalAmount)*0.06 SVE FROM Document_Detail ' + + 'WHERE Tax=''SVE'' ' + + 'GROUP BY DocKey'; + AddDataSet('pl_TotSVE', ['Dockey', 'SVE']) + .GetLocalData(SQL) + .SetDisplayFormat(['SVE'],) + .LinkTo('Main', 'Dockey', 'Dockey'); + ``` + +3. Click File | Save As... to save the file (eg Sales Invoice 8 (SST 2)-New) +4. Click File | Exit to exit the report design +5. Click Design again in the report designer for the file just save on Steps 3 (eg Sales Invoice 8 (SST 2)-New) +6. Click on Red A icon & click the place to print + + ![totalSVEInsertCode](../../../../static/img/usage/tools/fastReport-basicGuide/total-sve-insert-code.jpg) + +7. Select the option for following setting +Dataset : pl_TotSVE +DataField : SVE +8. Repeat Step 6 & 7 for other field +9. Save report + +
+ +## Fast Report - Shift Relative To Simulator + +
+ Shift Relative To Simulator - click to expand + +- In Fast Report there is **no** such function call Shit Relative To. This only available in Report Builder. So to **simulate** this function we had created the below script. + +### Requirement + +- Fast Report +- SQL Accounting Version 721 & above + +1. Place all the component (eg TfrxMemoView or TfrxRichView) as following + + ![pasteComponents](../../../../static/img/usage/tools/fastReport-basicGuide/paste-components.jpg) + +2. Only TfrxMemoView component need to select Dataset & DataField + + ![dataSet&DataFieldSelection](../../../../static/img/usage/tools/fastReport-basicGuide/data-set&data-field-selection.jpg) + +3. For TfrxRichView component must leave it empty for Dataset & DataField + + ![TfrxRichView-empty](../../../../static/img/usage/tools/fastReport-basicGuide/TfrxRich-view-empty.jpg) + +4. For TfrxRichView double click & select the ABC icon & select the Data Field + + ![selectDataField](../../../../static/img/usage/tools/fastReport-basicGuide/select-data-field.jpg) + +5. Click Tick icon after select the Field +6. On each component(i.e. MmDesc, RichDesc3 & RichSN) set all the GapY to **0** + + ![gapY-0](../../../../static/img/usage/tools/fastReport-basicGuide/gapY-0.jpg) + +7. Click on the Empty place (see icon 1 below) + + ![emptySpaceRightClick](../../../../static/img/usage/tools/fastReport-basicGuide/empty-space-right-click.jpg) + +8. Double click OnBeforePrint (see icon 2 above) +9. Enter below script + + ```pascal + procedure Page1OnBeforePrint(Sender: TfrxComponent); + begin + //For Version 721 & above + ShiftRelative([MmDesc, RichDesc3, RichSN]); // ShiftRelative([ComponentName1, ComponentName2, ComponentName3]) // For DetailData1 + ShiftRelative([MmDescM, RichDesc3M]); // For DetailData2 + end; + ``` + +10. Save the Report. + +:::note Note +Fastest way to do (For Version 721 & above Only) + +1. Copy from the build in report (Sales Invoice 7 (GST 1)) +2. Paste to your report +3. Direct jump to Step 7 +::: + +### Video Guide + +[Shift Relative To Simulator](https://youtu.be/4qEP_6kNHFE) + +### FAQ + +#### 1. Why it overlap when preview even at design time no overlap? + +If preview shown something like below, try adjust the component to by add 0.01 for Top field + +![compenentOverlap](../../../../static/img/usage/tools/fastReport-basicGuide/compenent-overlap.jpg) + +:::note Try Below Steps(in inch) + +- Set all component Height = 0.1 +- Set 2nd component Top = 0.1 +- Set 3rd component Top = 0.2 +- Tick the Shift When Overlapped option in right click for both 2nd & 3rd component +::: + +#### 2. Why it still same even after all the step above had follow & all scripts had copy? + +Make sure the compoents width not overlap to next field + +![componentWidth](../../../../static/img/usage/tools/fastReport-basicGuide/component-width.jpg) + +#### 3. Can my 2nd & 3rd field longer then 1st field? + +Yes , just tick the **Shift When Overlapped** option in right click for both 2nd & 3rd component + +![shift-when-overlapped](../../../../static/img/usage/tools/fastReport-basicGuide/shift-when-overlapped.jpg) + +
+ +## Fast Report - Down Then Across Column + +
+ Down Then Across Column - click to expand + +By default in Fast Report if you set 2 or more columns in detail it will shown the data Left Right. +In order to shown DownThenCross you need do some script as below. + +### Requirement + +- Fast Report +- SQL Accounting Version 722 & above + +### Steps + +Below is example using GL Official Receipt + +![example-gl-official-receipt](../../../../static/img/usage/tools/fastReport-basicGuide/example-gl-official-receipt.jpg) + +1. Select DetailData Band +2. Click Properties Tab +3. Set the following setting + + | Setting | Description | + |--------------|------------------------------| + | Columns | Number of column(s) to shown | + | ColumnWidth | Width for each column | + + ![example-gl-official-receipt2](../../../../static/img/usage/tools/fastReport-basicGuide/example-gl-official-receipt2.jpg) + +4. Click Events Tab +5. Double Click OnAfterPrint & enter below script + + ```pascal + procedure DetailData3OnAfterPrint(Sender: TfrxComponent); + begin + DownThenAcross_After(Sender, 'FromDockey'); + end; + ``` + +6. Repeat Step 5 again for OnBeforePrint & enter below script + + ```pascal + procedure DetailData3OnBeforePrint(Sender: TfrxComponent); + begin + DownThenAcross_Before(Sender, 'FromDockey'); + end; + ``` + +
+ +## Fast Report - Continue Next Page & Continue From Previous Page + +
+ Continue Next Page & Continue From Previous Page - click to expand + +- Sometime we need to show or an indicator to let the person who received the Document know there is more then 1 page. +- There are 2 ways to show this + - Header - Continue From Previous Page... + - Footer - Continue Next Page... + +Below is example using Sales Cash Sales + +![example-sales-cash-sales](../../../../static/img/usage/tools/fastReport-basicGuide/example-sales-cash-sales.jpg) + +### Header - Continue From Previous Page + +
+ Continue from Previos Page - click to expand + +![continous-grp-header](../../../../static/img/usage/tools/fastReport-basicGuide/continous-grp-header.jpg) + +1. Click on Red A icon +2. Click at the place to print/shown in the GroupHeader band +3. Enter the text you like (eg Continue From Previous Page...) +4. Change the Name (eg MmContinueT) + + ![continous-grp-header2](../../../../static/img/usage/tools/fastReport-basicGuide/continous-grp-header2.jpg) + +5. Click Events tab +6. Double Click OnBeforePrint and enter below script + +```pascal +procedure MmContinueTOnBeforePrint(Sender: TfrxComponent); +var B : Boolean; +begin + B := ( > 1); + MmContinueT.Visible := B; + MmContinueT.Printable := B; +end; +``` + +
+ +### Footer - Continue Next Page + +
+ Continue Next Page - click to expand + +![footer-continue-next-page](../../../../static/img/usage/tools/fastReport-basicGuide/footer-continue-next-page.jpg) + +1. Click on Red A icon +2. Click at the place to print/shown in the Footer band +3. Enter the text you like (eg Continue Next Page...) +4. Change the Name (eg MmContinueB) + + ![footer-continue-next-page2](../../../../static/img/usage/tools/fastReport-basicGuide/footer-continue-next-page2.jpg) + +5. Click Events tab +6. Double Click OnBeforePrint and enter below script + + ```pascal + procedure MmContinueBOnBeforePrint(Sender: TfrxComponent); + var B : Boolean; + begin + B := < ; + MmContinueB.Visible := B; + MmContinueB.Printable := B; + end; + ``` + +
+ +
+ +## Fast Report - E-Mail Client (Batch) & E-Mail (Native) + +
+ E-Mail Client (Batch) & E-Mail (Native) - click to expand + + By default we got **3** types of Export to E Mail for Fast Report + + E-Mail Client + + - Pros + + - User still can change the E-Mail address, Subject & body (E-Mail Content) before Sent + - Send E-Mail will keep in the Client E-Mail + - Support HTML format + - Can Attach more then 1 format + - Can use without E-Mail Script + + - Cons + + - Not easy to setup + - Only For Single Document E-Mail + - Attachment only Support pdf, Excel & HTML format + + E-Mail Client (Batch) + + - Pros + - Can use for Batch & Single Document E-Mail + - Send E-Mail will keep in the Client E-Mail + + - Cons + + - Not easy to setup + - Only support pdf attachment + - E-Mail Content only support plain text + - User can't change the E-Mail address, Subject & body (E-Mail Content) before Sent + - Must load the E-Mail Script + + E-Mail (Native) + + - Pros + + - Easy to Setup + - Support many attachment format + - User still can change the E-Mail address, Subject & body (E-Mail Content) before Sent + - Can use without E-Mail Script + + - Cons + + - No record is keeped for Sended E-Mail + - Only For Single Document E-Mail + - E-Mail Content only support plain text + - Only support Single Attachment + + ### Requirements + + - Fast Report + - Client E-Mail (eg Mozilla Thunderbird-Recommended) for E-Mail Client & E-Mail Client (Batch) Only + - An E-Mail Account (eg GMail) + - SQL Accounting Version 731 & above + + ### Setting + + Below is example using Sales Invoice + + ![batch-email](../../../../static/img/usage/tools/fastReport-basicGuide/batch-email.jpg) + + 1. Click the Code Tab + 2. Enter below Script at the First line + +
+ E-Mail Script 1 (Last Script Update : 21 Apr 2016) - click to expand + + ```pascal + //const MaxInt = 2147483647; + var lSQL : String; + + function StringReplace(const S, OldPattern, NewPattern: string; + iReplaceAll: boolean=true; iIgnoreCase :boolean=true): string; + var + SearchStr, Patt, NewStr: string; + Offset: Integer; + begin + // Usage StringReplace(,'/','') + if iIgnoreCase then begin + SearchStr := UpperCase(S); + Patt := UpperCase(OldPattern); + end else begin + SearchStr := S; + Patt := OldPattern; + end; + NewStr := S; + Result := ''; + while SearchStr <> '' do begin + Offset := Pos(Patt, SearchStr); + if Offset = 0 then begin + Result := Result + NewStr; + Break; + end; + Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern; + NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt); + if not iReplaceAll then begin + Result := Result + NewStr; + Break; + end; + SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt); + end; + end; + + procedure GetEMailTpl; + var D : TfrxDataSet; + lFN : String; + begin + lFN := Trim(Report.ReportOptions.Name); + lFN := StringReplace(lFN,'.fr3',''); + D := Report.GetDataSet('plEMailTpl'); + D.First; + While not D.Eof do begin + if Trim(D.Value('ReportName')) = lFN then + Break; + D.Next; + end; + end; + + function GetFldInfo(const AStr:String):String; + var D : TfrxDataSet; + nStr : String; + lSL,lPL : TStringList; + i, j : integer; + begin + nStr := AStr; + lSL := TStringList.Create; + lPL := TStringList.Create; + with lPL do begin //Available Pipeline + Add('Main'); + Add('Profile'); + end; + try + for j:=0 to lPL.Count -1 do begin + D := Report.GetDataSet(lPL[j]); + D.GetFieldList(lSL); + for i:=0 to lSL.Count -1 do begin + if D.IsBlobField(lSL[i]) then + nStr := StringReplace(nStr, '<'+ lPL[j] + '.' + lSL[i] + '>',D.Value(lSL[i])) else + nStr := StringReplace(nStr, '<'+ lPL[j] + '.' + lSL[i] + '>',D.DisplayText(lSL[i])); + end; + end; + Result := nStr; + finally + lSL.Free; + lPL.Free; + end; + end; + + //For E-Mail Client (Batch) + procedure OnGetEmailSettings(EmailSettings: TStrings); + var vEmail, vName: Variant; + begin + GetEMailTpl; + vEmail := Trim(); + vName := Trim(); + + if (vName <> '' ) and (vEmail <> '') then begin + EmailSettings.Values['Recipients'] := vEmail; + EmailSettings.Values['Subject'] := GetFldInfo(); + EmailSettings.Values['Body'] := GetFldInfo(RichTextToPlainText()); + end; + //ID uses for display on progress dialog + EmailSettings.Values['ID'] := vName; + end; + + //For E-Mail (Native) + function SQL_Email_GetInfo(Info: Integer): string; + var vEmail, vName: Variant; + begin + GetEMailTpl; + Result := ''; + vEmail := Trim(); + vName := Trim(); + + if (vName <> '' ) and (vEmail <> '') then begin + case Info of + SQL_Email_Address: Result := vEmail; + SQL_Email_Subject: Result := GetFldInfo(); + SQL_Email_Content: Result := GetFldInfo(RichTextToPlainText()); + end; + end; + end; + ``` + +
+ +
+ E-Mail Script 2 (Last Script Update : 22 Dec 2017) - click to expand + + ```pascal + //const MaxInt = 2147483647; // Only Available in Version 752 & above + var lSQL : String; + + function StringReplace(const S, OldPattern, NewPattern: string; + iReplaceAll: boolean=true; iIgnoreCase :boolean=true): string; + var + SearchStr, Patt, NewStr: string; + Offset: Integer; + begin + // Usage StringReplace(,'/','') + if iIgnoreCase then begin + SearchStr := UpperCase(S); + Patt := UpperCase(OldPattern); + end else begin + SearchStr := S; + Patt := OldPattern; + end; + NewStr := S; + Result := ''; + while SearchStr <> '' do begin + Offset := Pos(Patt, SearchStr); + if Offset = 0 then begin + Result := Result + NewStr; + Break; + end; + Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern; + NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt); + if not iReplaceAll then begin + Result := Result + NewStr; + Break; + end; + SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt); + end; + end; + + procedure GetEMailTpl; + var D : TfrxDataSet; + lFN : String; + begin + lFN := Trim(Report.ReportOptions.Name); + lFN := StringReplace(lFN,'.fr3',''); + D := Report.GetDataSet('plEMailTpl'); + D.First; + While not D.Eof do begin + if Trim(D.Value('ReportName')) = lFN then + Break; + D.Next; + end; + end; + + function GetPassword:String; + begin + if Trim() <> '' then + Result := else + Result := ; + end; + + function GetFldInfo(const AStr:String):String; + var D : TfrxDataSet; + nStr : String; + lSL,lPL : TStringList; + i, j : integer; + begin + nStr := AStr; + lSL := TStringList.Create; + lPL := TStringList.Create; + with lPL do begin //Available Pipeline + Add('Main'); + Add('Profile'); + Add('plEMailTpl'); + end; + try + for j:=0 to lPL.Count -1 do begin + D := Report.GetDataSet(lPL[j]); + D.GetFieldList(lSL); + for i:=0 to lSL.Count -1 do begin + if D.IsBlobField(lSL[i]) then + nStr := StringReplace(nStr, '<'+ lPL[j] + '.' + lSL[i] + '>',D.Value(lSL[i])) else + nStr := StringReplace(nStr, '<'+ lPL[j] + '.' + lSL[i] + '>',D.DisplayText(lSL[i])); + end; + end; + Result := nStr; + finally + lSL.Free; + lPL.Free; + end; + end; + + //For E-Mail Client (Batch) + procedure OnGetEmailSettings(EmailSettings: TStrings); + var vEmail, vName: Variant; + begin + GetEMailTpl; + vEmail := Trim(); + vName := Trim(); + + if (vName <> '' ) and (vEmail <> '') then begin + EmailSettings.Values['Recipients'] := vEmail; + EmailSettings.Values['CC'] := ; + EmailSettings.Values['BCC'] := ; + EmailSettings.Values['Subject'] := GetFldInfo(); + EmailSettings.Values['Body'] := GetFldInfo(RichTextToPlainText()); + if Trim() <> '' then + EmailSettings.Values['FileName'] := GetFldInfo(); + if Trim(GetPassword) <> '' then + EmailSettings.Values['PDFPassword'] := GetPassword; + end; + //ID uses for display on progress dialog + EmailSettings.Values['ID'] := vName; + end; + + //For E-Mail (Native) + function SQL_Email_GetInfo(Info: Integer): string; + var vEmail, vName: Variant; + begin + GetEMailTpl; + Result := ''; + vEmail := Trim(); + vName := Trim(); + + if (vName <> '' ) and (vEmail <> '') then begin + case Info of + SQL_Email_Address: Result := vEmail; + SQL_Email_Subject: Result := GetFldInfo(); + SQL_Email_Content: Result := GetFldInfo(RichTextToPlainText()); + end; + end; + end; + ``` + +
+ + ![batch-email-insert-code](../../../../static/img/usage/tools/fastReport-basicGuide/batch-email-insert-code.jpg) + + 3. Scroll down look for procedure SetUp + 4. Copy below script & paste it between the begin & end; in procedure SetUp + + ```pascal + SQL := 'SELECT B.Description As ReportName, B.Description2 As Subject, B.Description3 As Body, '+ + 'A.Address1 As CC, A.Address2 As BCC, B.Remark1 As PDFPassWord, B.Remark2 As PDFFileName ' + + 'FROM SL_QT A ' + + 'INNER JOIN SL_QTDTL B ON (A.Dockey=B.Dockey) ' + + 'WHERE A.DocNo=''EMAIL'' ' + + 'ORDER BY B.Seq '; + AddDataSet('plEMailTpl', ['ReportName', 'Subject', 'Body', 'PDFPassWord', 'PDFFileName', 'CC', 'BCC']) + .GetDBData(SQL); + ``` + + 5. Click File | Save As... to save the file (eg Sales Invoice 7 (GST 2)-Email) + 6. Click File | Exit to exit the report design + 7. Click Design again in the report designer for the file just save on Steps 5 (eg Sales Invoice 7 (GST 2)-Email) + 8. Click the Code Tab + 9. Remove the // at the First line of the Script + 10. Click File | Save to save the file + 11. Click File | Exit to exit the report design + + ### Quotation + +
+ Quotation - click to expand + + **Menu: Sales | Quotation...** + + - SQL Accounting can E Mail by different Subject & E Mail Content by report name + + ![batch-email-paste-quotation](../../../../static/img/usage/tools/fastReport-basicGuide/batch-email-paste-quotation.jpg) + + | Field Name | Description | + |------------------------------------|---------------------------------| + | Address1 | CC E-Mail Address | + | Address2 | BCC E-Mail Address | + | Description | Fast Report Name | + | Description2 | E-Mail Subject | + | Description3 (More Description) | E-Mail Content/Body | + | Remark1 | Global PDF Password | + | Remark2 | PDF FileName | + | Remark (Maintain Customer/Supplier)| Private/Individual PDF Password | + + 1. Create New Quotation + 2. Copy below Sample E-Mail Template + +
+ Sample E-Mail Template - click to expand + + ```pascal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ``` + +
+ +3. Right Click at the empty space below the Browse button +4. Select Paste Quotation +5. Set the Quot No to EMAIL +6. Click Save after done change the E-Mail Subject/Content/Body & other fields + +
+ +:::note + +- User can use eg `` (``) to show variable data +(eg Document Number) in the E-Mail Subject & Body. + +- The Pipeline name & FieldName is from the Report Designer Pipeline name & Field Name + +- Default Template(Must set at last Row) is use if system can't find the Report Name in the +Description field. + +::: + +### Maintain Employee + +**Menu: Human Resource | Employee...** + +Version 1.2020.182.158 & above + +- Only available in Version 1.2020.182.158 & above. + +![batch-email-paste-employee](../../../../static/img/usage/tools/fastReport-basicGuide/batch-email-paste-employee.jpg) + +| Field Name | Description | +|-----------------------------|-------------------------------| +| Phone1 | CC E-Mail Address | +| Phone2 | BCC E-Mail Address | +| Address4 | PDF FileName | +| Mobile | E-Mail Subject | +| Note | E-Mail Content/Body | +| Name2 | Global PDF Password | +| Name2 (For Each Employee) | Private/Individual PDF Password | + +Version 1.2021.196.166 & above + +![new-employee-batch-email](../../../../static/img/usage/tools/fastReport-basicGuide/new-employee-batch-email.jpg) + +| Section Name | Description | +|-------------------|---------------------------------------------------------| +| [CC] | CC E-Mail Address | +| [BCC] | BCC E-Mail Address | +| [PDFFileName] | PDF FileName | +| [Subject] | E-Mail Subject | +| [Body] | E-Mail Content/Body | +| [GlobalPassword] | Global PDF Password | +| [PrivatePassword] | For Each Employee Private/Individual PDF Password | +| EmployeeCode=Password | Example: For employee code `0004` with password `test 123` → `0004="test 123"` | +| [UseName2] | To use Employee Name 2 as password. Available in Version **1.2021.206.174 & above**. `1 = Enable`, `0 = Disable` | + +:::warning +or Version 1.2021.196.166 & above +Avoid use following character + +- [ +- ] +- " +- = + +::: + +| Available Function | Description | Available Report | +|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| +| GetTitle | Get report title | Payslip, EA, EC | +| GetMonth | Get Process Month & Year | Payslip | +| Function | Description | Available Report | +|---------------|-------------|------------------| +| UseNameICPass | **For PDF password (can be applied to Global/Private Password).** • The first character of Employee Name (in uppercase); • Second character is `@`; • The subsequent 6 characters are the last 6 digits of NRIC or Passport No. **Example:** Name: *Erza Scarlet*; NRIC: *800818-10-4858*; Output: `E@104858`. *Available in Version 1.2022.214.179 & above* | Payslip, EA, EC | + +1. Create New Employee +2. Copy below Sample E-Mail Template + +
+ Sample E-Mail Template (Version 1.2020.182.158 & above) - click to expand + +```pascal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +
+ +
+ + Sample E-Mail Template (Version 1.2021.196.166 & above) - click to expand + + ```pascal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ``` + +
+ +3. Click **More | Paste Employee** +4. Make sure Code is **EMAIL** +5. Click **Save** after done change the + +- E-Mail Subject/Content/Body & other fields (Version 1.2020.182.158 & above) +- Note field (Version 1.2021.196.166 & above) + +### Example Using Sales Invoice + +**Menu: Sales | Invoice...** + +1. Press **F6** +2. Select the Build-in/Customise **Fast Report** (eg Sales Invoice 7 (GST 2)-Email) +3. Click **OK** + + ![export-to-email](../../../../static/img/usage/tools/fastReport-basicGuide/export-to-email.jpg) + +4. Select either 1 of other following from the list + +- Export to E-Mail Client +- Export to E-Mail Client (Batch) +- Export to E-Mail (Native) + +
+ +## Fast Report - DSQL Lite Functions Commonly Use + +
+ SQL Lite Functions Commonly Use - click to expand + +### Useful Link + +[Date and Time Functions](https://www.sqlite.org/lang_datefunc.html) + +### How to get date difference results in days using SQL Lite? + +#### Example 1: Date different in between the Payment Date and Invoice Date + +Payment Date = 05/05/2016 +Invoice Date = 15/03/2016 + +| Month | Days | Description | +|--------------|------|-----------------------------------------------| +| Mar 2016 | 16 | Date from Invoice Date, i.e., 16/03/2016 | +| April 2016 | 30 | April month, i.e., 01/04/2016 - 30/04/2016 | +| May 2016 | 5 | Date to Payment Date, i.e., 05/05/2016 | +| Date Diff. | 51 | | + +| Julianday(Date2) - Julianday(Date1) | +|-------------------------------------| +| (julianday(Date(PaymentDate)) - julianday(Date(InvoiceDate))) | + +#### Example 2: Date different in between the Payment Date and the month end of the Invoice Date + +Payment Date = 05/05/2016 +Invoice Date = 15/03/2016 (31/03/2016) + +| Month | Days | Description | +|------------------|------|--------------------------------------------------| +| April 2016 | 30 | Date from Invoice Date, ie. 01/04/2016 | +| May 2016 | 5 | Date to payment date, ie. 05/05/2016 | +| Date differences | 35 | | + +| Julianday(Date2) - Julianday(Date1, start of month, 1 month,-1 day))| +|-------------------------------------| +| (julianday(Date(PaymentDate))-julianday(DATE(InvoiceDate, start of month, 1 month, -1 day))) | + +### Why in Query for Float or Currency type Field (eg DocAmt) the result becomes Integer ? + +Try use **CAST** + +```pascal +SELECT SUM(CAST(DocAmt AS REAL)) DocAmt FROM Main +``` + +### Why in Query for Float or Currency type Field and SetDisplayFormat already set but still detected as not set yet ? + +Try use **CASE WHEN... THEN... ELSE... END** + +```pascal +SELECT CAST(CASE WHEN C1 IS NULL THEN 0.00 ELSE C1 END AS REAL) C1 FROM Main +``` + +### Why in Query for Date type field (eg DocDate) the date is in yyyymmdd format ? + +Try use **strftime** + +```pascal + SELECT strftime(''%d/%m/%Y'', A.DocDate) AS DocDate FROM Main + ``` + +### How to Select with condition on Date ? + +Try use **DATE** + +```pascal +SELECT * FROM MAIN WHERE DOCDATE BETWEEN DATE(''2017-12-17'') AND DATE(''2017-12-31'') +``` + +### How to Filter by Day + +Below example is filter below and equal 11th + +```pascal +SELECT Employee, TransDate, Amount FROM WAGES WHERE strftime(''%d'', TransDate) <= ''11'' +``` + +### How to Filter by Data with NULL ? + +Below example is filter ItemCode not equal to RTN5Cents + +```pascal +SELECT * FROM Document_Detail WHERE (COALESCE(ITEMCODE, '''','''')) <> ''RTN5Cents''' +``` + +### How to Top 5 rows Data ? + +Try use **Limit** + +```pascal +SELECT * FROM Main Order By DocAmt Desc Limit 5 +``` + +
+ +## Fast Report - Get CSV Data from Memo Field + +
+ Get CSV Data from Memo Field - click to expand + +Below is example on how to get CSV data from Maintain Agent UDF_AList field + +```pascal + ProjectCode;Remark + P12W5;Rmakr 1 + P13W4;Note 1234 +``` + +1. Enter below script in the Code Tab + +
+ Get CSV Data Script - click to expand + + ```pascal + function SetStrictDelimiter(const AStr:String):string; + var i, x, ALength : integer; + s, s1 : string; + OrigList, MasterList, Row : TStringList; + begin + OrigList := TStringList.Create; + MasterList := TStringList.Create; + Row := TStringList.Create; + Row.Delimiter := ';'; + try + OrigList.Text := RichTextToPlainText(AStr); + for I := 0 to OrigList.Count - 1 do + begin + Row.Clear; + s1 := ''; + x := 1; + s := OrigList[I]; + ALength := Length(s); + while (x <= ALength) do begin + if x = ALength then begin + s1 := s1 + s[x]; + Row.Add(Trim(s1)); + end; + if (s[x] = ';') then begin + Row.Add(Trim(s1)); + s1 := ''; + end else + s1 := s1 + s[x]; + inc(x); + end; + MasterList.Add(Row.DelimitedText); + end; + Result := MasterList.Text; + finally + OrigList.Free; + MasterList.Free; + Row.Free; + end; + end; + + function ValueOfSemiColonStrEx(const AStr: string; const AIndex: integer): string; + var S: TStringList; + begin + S := TStringList.Create; + try + S.Delimiter := ';'; + S.DelimitedText := AStr; + if AIndex < S.Count then Result := S[AIndex] + else Result := ''; + finally + S.Free; + end; + end; + + function GetAgentData(const AProject:String):String; + var S: TStringList; + i: integer; + begin + S := TStringList.Create; + try + S.Text := SetStrictDelimiter(); + for I := 0 to S.Count - 1 do begin + if ValueOfSemiColonStrEx(S[i], 0) = AProject then //Same as Project Code CSV Column 1 + Result := ValueOfSemiColonStrEx(S[i], 1); //Show CSV Column 2 + end; + finally + s.Free; + end; + end; + ``` + +
+ + ![a-icon](../../../../static/img/usage/tools/fastReport-basicGuide/a-icon.jpg) + +2. Click the Red A Icon. + +3. Click on the place to print/shown. + + ![memo-insert-code](../../../../static/img/usage/tools/fastReport-basicGuide/memo-insert-code.jpg) + +4. Enter below Script in the memo + + ```pascal + [GetAgentData()] + ``` + +5. Click Ok button. +6. Right Click the Memo + + ![tick-stretch](../../../../static/img/usage/tools/fastReport-basicGuide/tick-stretch.jpg) + +7. Select Stretch +8. File | Save As & enter New report Name after done. + +
+ +## Fast Report - Share Text Message - WhatsApp + +
+ Share Text Message - WhatsApp - click to expand + +From Version 849.768 & above user can Share the report to WhatsApp, Skype, Line & etc + +### Requirement + +- Fast Report +- WhatsApp, Skype, Line & etc Login +- SQL Accounting Version 849.768 & above + +### Setting + +Below is example using Sales Invoice + +![sales-invoice-insert-code-procedure-setup](../../../../static/img/usage/tools/fastReport-basicGuide/sales-invoice-insert-code-procedure-setup.jpg) + +1. Click the Code Tab +2. Scroll down look for procedure SetUp +3. Copy below script & paste it between the begin & end; in procedure SetUp + + ```pascal + SQL := 'SELECT B.Description As ReportName, B.Description3 As Body '+ + 'FROM SL_QT A ' + + 'INNER JOIN SL_QTDTL B ON (A.Dockey=B.Dockey) ' + + 'WHERE A.DocNo=''WHATSAPP'' ' + + 'ORDER BY B.SEQ'; + AddDataSet('plShareMsg', ['ReportName', 'Body']) + .GetDBData(SQL); + ``` + +4. Click File | Save As... to save the file (eg Sales Invoice 8 (SST 2)-WhatApp) +5. Click File | Exit to exit the report design +6. Click Design again in the report designer for the file just save on Steps 5 (eg Sales Invoice 8 (SST 2)-WhatApp) +7. Click the Code Tab + + ![sales-invoice-strfloatdef-insert-code](../../../../static/img/usage/tools/fastReport-basicGuide/sales-invoice-strfloatdef-insert-code.jpg) + +8. Scroll down look for function StrToFloatDef(const lFld:Variant):string +9. Copy below script & paste it above the function + +
+ WhatsApp Script (Last Script Update : 05 Nov 2018)- click to expand + + ```pascal + procedure GetShareMsg; + var D : TfrxDataSet; + lFN : String; + begin + lFN := Trim(Report.ReportOptions.Name); + lFN := StringReplace(lFN,'.fr3',''); + D := Report.GetDataSet('plShareMsg'); + D.First; + While not D.Eof do begin + if Trim(D.Value('ReportName')) = lFN then + Break; + D.Next; + end; + end; + + function GetShareText: string; + begin + GetShareMsg; + Result := GetFldInfo(RichTextToPlainText()) + end; + ``` + +
+ + ![getidinfo-insert-code](../../../../static/img/usage/tools/fastReport-basicGuide/getidinfo-insert-code.jpg) + +10. Scroll up again look for function GetFldInfo(const AStr:String):String; +11. Copy below script & paste it between the Add('plEMailTpl'); & end; + + ```pascal + Add('Document_Currency'); + ``` + +12. Click File | Save to save the file +13. Click File | Exit to exit the report design + +### Quotation + +Menu: Sales | Quotation... + +SQL Accounting can Share message by different Content by report name + +![quot-no-whatsapp](../../../../static/img/usage/tools/fastReport-basicGuide/quot-no-whatsapp.jpg) + +| Field Name | Description | +|-------------|----------------------| +| Description | Fast Report Name | +| Description3 (More Description) | Message Content | + +1. Create New Quotation +02. Copy below Sample E-Mail Template + +
+ Sample Share Message Template - click to expand + + ```pascal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ``` + +
+ +3. Right Click at the empty space below the Browse button +4. Select Paste Quotation +5. Set the Quot No to WHATSAPP +6. Click Save after done change the Content + +:::note + +- User can use eg ` `(` `) to show variable data +(eg Document Number) in the E-Mail Subject & Body. +- The Pipeline name & FieldName is from the Report Designer Pipeline name & Field Name +- Default Template(Must set at last Row) is use if system can't find the Report Name in the Description field. + +::: + +### Example using Sales Invoice + +**Menu: Sales | Invoice...** + +1. Press F6 +2. Select the Build-in/Customise Fast Report (eg Sales Invoice 8 (SST 2)-Email) +3. Click OK + + ![icons](../../../../static/img/usage/tools/fastReport-basicGuide/icons.jpg) + +4. Select WhatsApp icon PDF + + ![whatsapp-messages-testing](../../../../static/img/usage/tools/fastReport-basicGuide/whatsapp-messages-testing.jpg) + +5. Enter the Mobile No +6. Click Send + +:::note + You can leave empty for Mobile No. if you wanted select from you Mobile Contact list. +::: + +
diff --git a/docs/usage/tools/fast-report/faq.md b/docs/usage/tools/fast-report/faq.md new file mode 100644 index 00000000..fe289173 --- /dev/null +++ b/docs/usage/tools/fast-report/faq.md @@ -0,0 +1,657 @@ +--- +sidebar_position: 2 +title: FR3 FAQ +description: Frequently Asked Questions in fast report +slug: /usage/tools/fast-report/faq +tags: ["SQL Account", "Usage", "Tools"] +--- + +## 1. When Unit price is 0, how to display it as Free of Charge (FOC) ? + +In Memo, enter the following syntax : + + ```pascal + [FormatFloat(',0.00;-,0.00;FOC ',)] + ``` + + ![0-foc-insert-code-memo](../../../../static/img/usage/tools/fast-report-faq/0-foc-insert-code-memo.png) + +## 2. How to change Cents to Sens in Document Currency Description ? + + Syntax: + + ```pascal + [Document_Currency."Description"] : [StringReplace(CurrencyToLangWord(,), 'CENTS', 'SENS', TRUE)] + ``` + + ![46](../../../../static/img/usage/tools/fast-report-faq/46.png) + +## 3. How to convert More Description into RichTextToPlainText ? + + Syntax : + + ```pascal + [RichTextToPlaintext()] + ``` + + ![47](../../../../static/img/usage/tools/fast-report-faq/47.png) + + ![48](../../../../static/img/usage/tools/fast-report-faq/48.png) + +## 4. How to change report paper size? + +File -> Page Setting -> + + ![49](../../../../static/img/usage/tools/fast-report-faq/49.png) + +## 5. if Qty > 10, how to change text color to red and bold? + +1. Double Click on Memo + +2. Click on **Highlight Tab** + +3. Click on **Add Button** + +4. Expression value > 10 + + ![50](../../../../static/img/usage/tools/fast-report-faq/50.png) + +5. Click on Font + + Can set for Font Type, Font Style, Size, Color or Effects + + ![51](../../../../static/img/usage/tools/fast-report-faq/51.png) + +6. Press **OK** + +7. Right Click on Memo, **Ticked Allow Expression** + +**Result** : + +![52](../../../../static/img/usage/tools/fast-report-faq/52.png) + +## 6. Why in Report I have placed at the position I want, but when preview it will show at bottom? + +Right click on Memo, **unticked Shift** and **Unticked Shift when Overlapped** + +## 7. How to Export PDF Logo that is blur ? + +![53](../../../../static/img/usage/tools/fast-report-faq/53.png) + +## 8. How to capture remark1 as a url path? + +In Memo properties : + +Hyperlink Expression added in the Data Field Name + + ![54](../../../../static/img/usage/tools/fast-report-faq/54.png) + +Result : + + ![55](../../../../static/img/usage/tools/fast-report-faq/55.png) + +## 9. How to print Payslip to show AL or MC only ? + +1. Click on **SubReport3** + +2. Right click on **Leave MasterData Band** + + ![56](../../../../static/img/usage/tools/fast-report-faq/56.png) + +3. Click on Filter button + +4. Enter the expression : + + ```pascal + ( ='AL') OR ( ='MC') + ``` + +5. Press OK + +6. Press OK + + ![57](../../../../static/img/usage/tools/fast-report-faq/57.png) + +## 10. How to get Net Unit Price ? + + 1. Click on **Memo Text** + + 2. Place on **Document Detail Band** + + 3. Drag data field from right to left box : + + ```pascal + [ / ] + ``` + + 4. Press OK + + 5. Adjust the position + + 6. Preview and see the result + + ![58](../../../../static/img/usage/tools/fast-report-faq/58.png) + +## 11. How to do if UOM = UNIT, Qty display without Decimal Point, else with 2 Decimal Point ? + + 1. Click On Memo Text + + 2. Copy the below syntax and Paste into Memo: + + ```pascal + [IIF( = 'UNIT'>, + FormatFloat('#,0;-#,0 ', ) , + FormatFloat('#,0.00;-#,0.00 ', ))] + ``` + + ![59](../../../../static/img/usage/tools/fast-report-faq/59.png) + + 3. Press **OK** + + 4. Result After Preview : + + ![60](../../../../static/img/usage/tools/fast-report-faq/60.png) + +## 12. How to Get Supplier Bank in Payment Voucher? + + 1. Click on Memo + + 2. Paste this syntax inside Memo + + ```pascal + [)] + ``` + + ![61](../../../../static/img/usage/tools/fast-report-faq/61.png) + +## 13. How to change the Amount in Word to First Character to Upper Case only? + +Can use function NameCase + +![62](../../../../static/img/usage/tools/fast-report-faq/62.png) + +Before : + +![63](../../../../static/img/usage/tools/fast-report-faq/63.png) + +After : + +![64](../../../../static/img/usage/tools/fast-report-faq/64.png) + +## 14. Why is it not the same when preview? + +![stacked-content-when-preview](../../../../static/img/usage/tools/fast-report-faq/stacked-content-when-preview.jpg) + + Try Untick the Option **Shift** by right click the Memo + +![right-click-untick-shift](../../../../static/img/usage/tools/fast-report-faq/right-click-untick-shift.jpg) + +## 16. How to rename the component I use? + +![rename-memo](../../../../static/img/usage/tools/fast-report-faq/rename-memo.jpg) + +01. Click the Red A Icon. +02. Click on the place to be print/shown +03. At the **Object Inspector**, look for **Name** & change the Name as you like (Only Alphanumeric & no spacing) + +## 17. How to draw line for whole report? + +![draw-line](../../../../static/img/usage/tools/fast-report-faq/draw-line.jpg) + +01. Click an empty place of outer report. +02. At the **Object Inspector**, look for Frame & click the + sign +03. Under the **Frame**, look for **Typ** & set to True for ftLeft, ftRight, ftTop & ftBottom. + +![draw-line-output](../../../../static/img/usage/tools/fast-report-faq/draw-line-output.jpg) + +:::warning +Make sure the **Paper Margin** for Top, Bottom, Left & Right not set to 0 +::: + +## 18. How to add spacing between 2 records? + +![spacing-2reports-height](../../../../static/img/usage/tools/fast-report-faq/spacing-2reports-height.jpg) + +1. Right Click on **DetailData**. + + ![add-child-band](../../../../static/img/usage/tools/fast-report-faq/add-child-band.jpg) + +2. Select **Add child band**. +3. At the **Object Inspector**, look for **Height** & set the gap Height you want + +## 19. My More Description is very long & it shown page 1 empty & shown in page 2 + +![grp-footer-issue](../../../../static/img/usage/tools/fast-report-faq/grp-footer-issue.jpg) + +1. Right Click on **DetailData**. + + ![right-click-allow-split](../../../../static/img/usage/tools/fast-report-faq/right-click-allow-split.jpg) + +2. Select **Allow Split**. +3. Click on **GroupFooter:GroupFooter1**. +4. Double Click **OnBeforePrint** + + ![on-before-print-remove-height-60](../../../../static/img/usage/tools/fast-report-faq/on-before-print-remove-height-60.jpg) + +5. Remove **- 60** + + ![navigate-to-onaftercalcheight](../../../../static/img/usage/tools/fast-report-faq/navigate-to-onaftercalcheight.jpg) + +6. Click on **DetailData:DetailData1**. +7. Double Click **OnAfterCalcHeight** + + ![comment-if-tfrxdetaildata](../../../../static/img/usage/tools/fast-report-faq/comment-if-tfrxdetaildata.jpg) + +8. Enter // + +## 20. Show Note at Header + + ![show-note-at-header](../../../../static/img/usage/tools/fast-report-faq/show-note-at-header.jpg) + +1. Right Click on **GroupHeader:GroupHeader1**. + + ![add-child-band-right-click](../../../../static/img/usage/tools/fast-report-faq/add-child-band-right-click.jpg) + +2. Select **Add Child Band** & Select **Stretch** +3. Adjust the Child band Height as you want +4. Right click on Child Band & Select **Stretch** +5. Move all the Title to **Child:Child1** +6. Click the Blue A icon (RichText Object) +7. Click on the place to be print/shown & set as below setting in Right Click + + - Stretch = True + - Shift = False + - Allow Expression = False + +8. At the **Object Inspector**, Look for & set as below + +- DataSet ==> Main +- DataField ==> Note + +## 21. Show Total Qty Excluding Item Code RTN5Cents + +1. Click the Red A Icon. +2. Click on the place to be print/shown +3. Enter the below code (make sure in the report had the **AdjRound** pipeline & **GetTotal** function (refer to Sales Invoice 7 (GST 1)) + + ```sql + [FormatFloat(, + IIF(Trim()<>'0', + GetTotal('Qty')-1, + GetTotal('Qty')) + )] + ``` + +## 22. How to print 2 pages in 1 A4? + +![print-2page-in-a4](../../../../static/img/usage/tools/fast-report-faq/print-2page-in-a4.jpg) + +01. Click Margin Icon +02. Adjust the **Height** to fit in 1 page +03. Select **Apply to all pages** +04. Click Ok +05. Set the **Zoom** to 100% and/or Page Within +06. Click Print Icon +07. Set **Print Mode** to Scale & **Print on Sheet** to A4 +08. Click Ok to print + +## 23. How to Load Notes/More Description to TfrRichView using script? + +Just add below script on the TfrRichView OnBeforePrint + + ```sql + procedure Rich1OnBeforePrint(Sender: TfrxComponent); + var slOutput : TStringList; + M: TMemoryStream; + begin + slOutput := TStringList.Create; + M := TMemoryStream.Create; + try + slOutput.Text := ; //The Note/More Description field + slOutput.SaveToStream(M); + M.Position := 0; + Rich1.RichEdit.Lines.LoadFromStream(M); //eg The TfrRichView name is Rich1 + finally + slOutput.Free; + M.Free; + end; + end; + ``` + +## 24. How to reduce the Column use when Export to Excel? + +Try use **Export to Excel Table (XML)** option & untick the Option **WYSIWYG** + +## 25. Special Display Format + +### How if data is Zero(0) and I wanted to be printed as - and some space on the back? + +A : Just Enter as Follow code:- + + ```pascal + [FormatFloat(',0.00;-,0.00;- ',)] + ``` + +### How to set a given string as this 123456121234 to show as 123456-12-1234? + +A : Just Enter as Follow code:- + + ```pascal + [FormatMaskText('000000-00-0000;0;',)] + ``` + +### How to set displayformat follow the option for Grand Total? + +A : Just Enter as Follow code:- + + ```pascal + [FormatFloat(, SUM(,MasterData1))] + ``` + +OR + + ```pascal + [FormatFloat(, SUM(,MasterData1))] + ``` + +### How to set displayformat BlankWhenZero or Hide Zeros if using FormatFloat function? + +A : Just set the display format at Tools | Options | Misc to + + ```pascal + #,0.00;-#,0.00; ; + ``` + +OR + +A : Just Enter as Follow code :- + + ```pascal + [IIF(SimpleRoundTo(*,-2) <> 0, + FormatFloat(, + SimpleRoundTo(*,-2)), '')] + ``` + +### How to Set Current Date Time plus/minus N? + + ```sql + procedure DBTxtTimeOnBeforePrint(Sender: TfrxComponent); + var lDT : variant; + begin + //Example deduct 1.5 hours + lDT := FormatDateTime('dd/MM/yyyy hh:mm AM/PM', Now - 0.0625); //(1.5/24) + DBTxtTime.Text := lDT; + end; + ``` + +### Page print count base on qty + + ```pascal + procedure Page1OnBeforePrint(Sender: TfrxComponent); + begin + Page1.PageCount := ; + end; + ``` + +## 26. How to use Line function? + +By default system will use **Line#** this will result as + + ```pascal + Group 1 + 1 + 2 + 3 + Group 2 + 4 + 5 + 6 + ``` + +Use Line will result in + + ```pascal + Group 1 + 1 + 2 + 3 + Group 2 + 1 + 2 + 3 + ``` + +01. Select **System Text** +02. Enter as **Line** in the Text field + +## 27. Can I do a running Total for each footer? + +Yes just add , 2 in the SUM formula + +:::warning +It can't batch Printing (i.e. will keep increasing) +::: + + ```pascal + [SUM(,DetailData1,2)] + ``` + +## 28. How to combine each string lines from detail without line break added? + +For example, + +| Items | Qty | Unit Price | Amount | +|---------|-----|------------|--------| +| RM-001 | 20 | 100 | 2000 | +| RM-002 | 40 | 200 | 8000 | + +Expected result: + + ```pascal + RM-001,20,100,2000|RM-002,40,200,8000| + ``` + + ```sql + var s: string; + Begin + s := Items + ',' + VarToStr(Qty) + ',' + VarToStr(Amount) +'|'; + Memo1.Text := '''Copy(Memo1.Text,1,Length(Memo1.Text)-2)''' + s; + End; + ``` + +## 29. How to make sure my report export to Excel as less column usage as possible? + +- Below is the guideline + +![less-column-usage-1](../../../../static/img/usage/tools/fast-report-faq/less-column-usage-1.jpg) + +- Use align to Grid button + +![align-to-grid](../../../../static/img/usage/tools/fast-report-faq/align-to-grid.jpg) + +- No gap between two component +- Must Align between top & Bottom of component + +![diagonal-false](../../../../static/img/usage/tools/fast-report-faq/diagonal-false.jpg) + +- Untick **Diagonal** when using Line +- Avoid using Rich Text (TfrRichView) +- Untick **Auto Width** +- Tick **Stretch to Max Height** (for Detail) + +## 30. Why when I export to PDF with Chinese Word become "tofu" or box box? + +This is because default Font is Tahoma is not support Unicode Font + +- Solution : Change the Font To **Microsft YaHei** in Report Designer + +![microsoft-yahei-font](../../../../static/img/usage/tools/fast-report-faq/microsoft-yahei-font.jpg) + +## 31. How to Maintain the QR Code Size with large Data? + +:::note NOTE: It might be unable to scan if size too small & data too large +::: + +![untick-auto-size](../../../../static/img/usage/tools/fast-report-faq/untick-auto-size.jpg) + +## 32. How to Show Even Row with Color? + +![even-row-with-color-insert-code](../../../../static/img/usage/tools/fast-report-faq/even-row-with-color-insert-code.jpg) + + ```sql + if mod 2 = 1 then + TfrxBrushFill(DetailData1.Fill).BackColor := clNone else + TfrxBrushFill(DetailData1.Fill).BackColor := clSilver; + ``` + +## 33. How to Add QR Code for E-Invoicing? + +:::note Note : +Only Available in Version 852 & above +::: + +- [Video](https://download.sql.com.my/customer/Fairy/Steps-FR-FAQ-26.gif) + +![barcode-qrcode](../../../../static/img/usage/tools/fast-report-faq/barcode-qrcode.jpg) + +![barcode-editor](../../../../static/img/usage/tools/fast-report-faq/barcode-editor.jpg) + +![dclick-onbeforeprint](../../../../static/img/usage/tools/fast-report-faq/dclick-onbeforeprint.jpg) + +![qrcode-insert-code](../../../../static/img/usage/tools/fast-report-faq/qrcode-insert-code.jpg) + + ```sql + procedure IRBM_QROnBeforePrint(Sender: TfrxComponent); + var B : Boolean; + begin + B := Trim() <> ''; + IRBM_QR.Visible := B; + IRBM_QR.Printable := B; + IRBM_QR.Hyperlink.Value := Trim(); + end; + ``` + +:::success + +- The measurement is in Inch +- This guide is designed for for Laser Printer only +- For Dot Matrix Printer make sure set to 1 for Height + +::: + +## 34. How to show Document Number at every Page Footer? + +- Just add the script on procedure GroupHeader2OnBeforePrint + + ```sql + procedure GroupHeader2OnBeforePrint(Sender: TfrxComponent); + begin + ... + Memo69.Text := ; //Add your script + end; + ``` + +## 35. How to set A5 size to print on A4 paper? + +![dclick-onbeforeprint-settings](../../../../static/img/usage/tools/fast-report-faq/dclick-onbeforeprint-settings.jpg) + +1. Change paper size to A4 +2. Set the Margin +3. Click ok **GroupFooter**: GroupFooter1 +4. Double Click **OnBeforePrint** Script + + ![change-onbeforeprint-values](../../../../static/img/usage/tools/fast-report-faq/change-onbeforeprint-values.jpg) + +5. Add the value + +:::warning +Might have problem if too many knock off which more then 1 page +Height +::: + +## 36. Customise Sales Debit Note Prompt Error after upgrade + +- Error + +![error-assertion-failure](../../../../static/img/usage/tools/fast-report-faq/error-assertion-failure.jpg) + +- Solution + +![disable-code-using-curlybracket](../../../../static/img/usage/tools/fast-report-faq/disable-code-using-curlybracket.jpg) + +## 37. How to Fix Report Tax Rate show A instead of 6% ? + +![1](../../../../static/img/usage/tools/fast-report-faq/1.png) + +1. Preview the Report format, Click on blue color link and enter into Report Design. + + ![2](../../../../static/img/usage/tools/fast-report-faq/2.png) + +2. Check GST Summary using which Pipeline | This Report using plSQL_7. + + ![3](../../../../static/img/usage/tools/fast-report-faq/3.png) + +3. Click on Calc Tab. + + ![4](../../../../static/img/usage/tools/fast-report-faq/4.png) + +4. Click on Menu View | Select Module + + ![5](../../../../static/img/usage/tools/fast-report-faq/5.png) + +5. Click on Events | Click on Main:plSQL_0 | Look for SQL_7(Refer Step 2 to see which pipeline) | Insert TaxRate + + ![6](../../../../static/img/usage/tools/fast-report-faq/6.png) + + Query: + + ```sql + SQL_7 := 'SELECT DocKey, Tax, TaxRate, Sum(LocalAmount) LocalAmount, Sum(Qty) Qty, Sum(LocalTaxAmt) localTaxAmt, Description '+ + 'FROM Document_Detail ' + + 'Where Tax <> ''''' + + 'GROUP BY Dockey, Tax, TaxRate'; + ``` + +6. Click on Event Handler | Select Procedure ReportBeforePrint | Look for Pipeline SQL_7 | Insert TaxRate + + ![7](../../../../static/img/usage/tools/fast-report-faq/7.png) + + Query: + + ```pascal + LocalSQL_SELECT(plSQL_7, SQL_7, 'Dockey;Tax;TaxRate'); + ``` + +7. Click on SubReport1:plSQL_7 Tab + + ![8](../../../../static/img/usage/tools/fast-report-faq/8.png) + +8. Click on VarTax | Right Click | Select Calculation + + ![9](../../../../static/img/usage/tools/fast-report-faq/9.png) + +9. Amend the Query | Press OK + + - Before Amend: + + ![10](../../../../static/img/usage/tools/fast-report-faq/10.png) + + - After Amend: + + ![11](../../../../static/img/usage/tools/fast-report-faq/11.png) + + Query: + + ```pascal + Value := plsql_7.getfieldvalue('Tax') + ' @ ' + plsql_7.getfieldvalue('TaxRate'); + ``` + +10. File | Save + + ![12](../../../../static/img/usage/tools/fast-report-faq/12.png) + +11. Close the report builder + +12. Preview again the same report format. + + ![13](../../../../static/img/usage/tools/fast-report-faq/13.png) diff --git a/package-lock.json b/package-lock.json index 867aeea4..a9372239 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "clsx": "^2.0.0", "gray-matter": "^4.0.3", "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom", - "prism-react-renderer": "^2.3.0", + "prism-react-renderer": "^2.4.1", "qrcode.react": "^4.2.0", "react": "^18.0.0", "react-dom": "^18.0.0", @@ -14740,9 +14740,10 @@ } }, "node_modules/prism-react-renderer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", - "integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "license": "MIT", "dependencies": { "@types/prismjs": "^1.26.0", "clsx": "^2.0.0" diff --git a/package.json b/package.json index 43b90cdd..d7310ca2 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "clsx": "^2.0.0", "gray-matter": "^4.0.3", "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom", - "prism-react-renderer": "^2.3.0", + "prism-react-renderer": "^2.4.1", "qrcode.react": "^4.2.0", "react": "^18.0.0", "react-dom": "^18.0.0", diff --git a/static/css/custom.css b/static/css/custom.css index c1eeb205..e09c3e98 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -2,4 +2,4 @@ img { max-width: 100%; height: auto; -} \ No newline at end of file +} diff --git a/static/img/ai-cloud-backup/user-guide/1.png b/static/img/ai-cloud-backup/user-guide/1.png deleted file mode 100644 index feebc436..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/1.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/10.png b/static/img/ai-cloud-backup/user-guide/10.png deleted file mode 100644 index ac6900c0..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/10.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/11.png b/static/img/ai-cloud-backup/user-guide/11.png deleted file mode 100644 index 61ba05cf..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/11.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/12.png b/static/img/ai-cloud-backup/user-guide/12.png deleted file mode 100644 index bd08e259..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/12.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/13.png b/static/img/ai-cloud-backup/user-guide/13.png deleted file mode 100644 index 99fdd5ee..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/13.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/14.png b/static/img/ai-cloud-backup/user-guide/14.png deleted file mode 100644 index 4bc97e1a..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/14.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/15.png b/static/img/ai-cloud-backup/user-guide/15.png deleted file mode 100644 index eb2fa279..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/15.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/16.png b/static/img/ai-cloud-backup/user-guide/16.png deleted file mode 100644 index 78797f11..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/16.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/17.png b/static/img/ai-cloud-backup/user-guide/17.png deleted file mode 100644 index 906e17cd..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/17.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/2.png b/static/img/ai-cloud-backup/user-guide/2.png deleted file mode 100644 index 4fc486cc..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/2.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/3.png b/static/img/ai-cloud-backup/user-guide/3.png deleted file mode 100644 index 099a4dec..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/3.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/4.png b/static/img/ai-cloud-backup/user-guide/4.png deleted file mode 100644 index e93da88d..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/4.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/5.png b/static/img/ai-cloud-backup/user-guide/5.png deleted file mode 100644 index fa6861d5..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/5.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/6.png b/static/img/ai-cloud-backup/user-guide/6.png deleted file mode 100644 index 1417b982..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/6.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/7.png b/static/img/ai-cloud-backup/user-guide/7.png deleted file mode 100644 index 5336e918..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/7.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/8.png b/static/img/ai-cloud-backup/user-guide/8.png deleted file mode 100644 index 5b6b022f..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/8.png and /dev/null differ diff --git a/static/img/ai-cloud-backup/user-guide/9.png b/static/img/ai-cloud-backup/user-guide/9.png deleted file mode 100644 index 442e157c..00000000 Binary files a/static/img/ai-cloud-backup/user-guide/9.png and /dev/null differ diff --git a/static/img/getting-started/backup-restore/1.png b/static/img/getting-started/database/backup-restore/1.png similarity index 100% rename from static/img/getting-started/backup-restore/1.png rename to static/img/getting-started/database/backup-restore/1.png diff --git a/static/img/getting-started/backup-restore/10.png b/static/img/getting-started/database/backup-restore/10.png similarity index 100% rename from static/img/getting-started/backup-restore/10.png rename to static/img/getting-started/database/backup-restore/10.png diff --git a/static/img/getting-started/backup-restore/11.png b/static/img/getting-started/database/backup-restore/11.png similarity index 100% rename from static/img/getting-started/backup-restore/11.png rename to static/img/getting-started/database/backup-restore/11.png diff --git a/static/img/getting-started/backup-restore/12.png b/static/img/getting-started/database/backup-restore/12.png similarity index 100% rename from static/img/getting-started/backup-restore/12.png rename to static/img/getting-started/database/backup-restore/12.png diff --git a/static/img/getting-started/backup-restore/13.png b/static/img/getting-started/database/backup-restore/13.png similarity index 100% rename from static/img/getting-started/backup-restore/13.png rename to static/img/getting-started/database/backup-restore/13.png diff --git a/static/img/getting-started/backup-restore/14.png b/static/img/getting-started/database/backup-restore/14.png similarity index 100% rename from static/img/getting-started/backup-restore/14.png rename to static/img/getting-started/database/backup-restore/14.png diff --git a/static/img/getting-started/backup-restore/15.png b/static/img/getting-started/database/backup-restore/15.png similarity index 100% rename from static/img/getting-started/backup-restore/15.png rename to static/img/getting-started/database/backup-restore/15.png diff --git a/static/img/getting-started/backup-restore/16.png b/static/img/getting-started/database/backup-restore/16.png similarity index 100% rename from static/img/getting-started/backup-restore/16.png rename to static/img/getting-started/database/backup-restore/16.png diff --git a/static/img/getting-started/backup-restore/17.png b/static/img/getting-started/database/backup-restore/17.png similarity index 100% rename from static/img/getting-started/backup-restore/17.png rename to static/img/getting-started/database/backup-restore/17.png diff --git a/static/img/getting-started/backup-restore/18.png b/static/img/getting-started/database/backup-restore/18.png similarity index 100% rename from static/img/getting-started/backup-restore/18.png rename to static/img/getting-started/database/backup-restore/18.png diff --git a/static/img/getting-started/backup-restore/19.png b/static/img/getting-started/database/backup-restore/19.png similarity index 100% rename from static/img/getting-started/backup-restore/19.png rename to static/img/getting-started/database/backup-restore/19.png diff --git a/static/img/getting-started/backup-restore/2.png b/static/img/getting-started/database/backup-restore/2.png similarity index 100% rename from static/img/getting-started/backup-restore/2.png rename to static/img/getting-started/database/backup-restore/2.png diff --git a/static/img/getting-started/backup-restore/20.png b/static/img/getting-started/database/backup-restore/20.png similarity index 100% rename from static/img/getting-started/backup-restore/20.png rename to static/img/getting-started/database/backup-restore/20.png diff --git a/static/img/getting-started/backup-restore/21.png b/static/img/getting-started/database/backup-restore/21.png similarity index 100% rename from static/img/getting-started/backup-restore/21.png rename to static/img/getting-started/database/backup-restore/21.png diff --git a/static/img/getting-started/backup-restore/22.png b/static/img/getting-started/database/backup-restore/22.png similarity index 100% rename from static/img/getting-started/backup-restore/22.png rename to static/img/getting-started/database/backup-restore/22.png diff --git a/static/img/getting-started/backup-restore/23.png b/static/img/getting-started/database/backup-restore/23.png similarity index 100% rename from static/img/getting-started/backup-restore/23.png rename to static/img/getting-started/database/backup-restore/23.png diff --git a/static/img/getting-started/backup-restore/24.png b/static/img/getting-started/database/backup-restore/24.png similarity index 100% rename from static/img/getting-started/backup-restore/24.png rename to static/img/getting-started/database/backup-restore/24.png diff --git a/static/img/getting-started/backup-restore/25.png b/static/img/getting-started/database/backup-restore/25.png similarity index 100% rename from static/img/getting-started/backup-restore/25.png rename to static/img/getting-started/database/backup-restore/25.png diff --git a/static/img/getting-started/backup-restore/3.png b/static/img/getting-started/database/backup-restore/3.png similarity index 100% rename from static/img/getting-started/backup-restore/3.png rename to static/img/getting-started/database/backup-restore/3.png diff --git a/static/img/getting-started/backup-restore/4.png b/static/img/getting-started/database/backup-restore/4.png similarity index 100% rename from static/img/getting-started/backup-restore/4.png rename to static/img/getting-started/database/backup-restore/4.png diff --git a/static/img/getting-started/backup-restore/5.png b/static/img/getting-started/database/backup-restore/5.png similarity index 100% rename from static/img/getting-started/backup-restore/5.png rename to static/img/getting-started/database/backup-restore/5.png diff --git a/static/img/getting-started/backup-restore/6.png b/static/img/getting-started/database/backup-restore/6.png similarity index 100% rename from static/img/getting-started/backup-restore/6.png rename to static/img/getting-started/database/backup-restore/6.png diff --git a/static/img/getting-started/backup-restore/7.png b/static/img/getting-started/database/backup-restore/7.png similarity index 100% rename from static/img/getting-started/backup-restore/7.png rename to static/img/getting-started/database/backup-restore/7.png diff --git a/static/img/getting-started/backup-restore/8.png b/static/img/getting-started/database/backup-restore/8.png similarity index 100% rename from static/img/getting-started/backup-restore/8.png rename to static/img/getting-started/database/backup-restore/8.png diff --git a/static/img/getting-started/backup-restore/9.png b/static/img/getting-started/database/backup-restore/9.png similarity index 100% rename from static/img/getting-started/backup-restore/9.png rename to static/img/getting-started/database/backup-restore/9.png diff --git a/static/img/getting-started/clone-master/1.png b/static/img/getting-started/database/clone-master/1.png similarity index 100% rename from static/img/getting-started/clone-master/1.png rename to static/img/getting-started/database/clone-master/1.png diff --git a/static/img/getting-started/clone-master/10.png b/static/img/getting-started/database/clone-master/10.png similarity index 100% rename from static/img/getting-started/clone-master/10.png rename to static/img/getting-started/database/clone-master/10.png diff --git a/static/img/getting-started/clone-master/11.png b/static/img/getting-started/database/clone-master/11.png similarity index 100% rename from static/img/getting-started/clone-master/11.png rename to static/img/getting-started/database/clone-master/11.png diff --git a/static/img/getting-started/clone-master/12.png b/static/img/getting-started/database/clone-master/12.png similarity index 100% rename from static/img/getting-started/clone-master/12.png rename to static/img/getting-started/database/clone-master/12.png diff --git a/static/img/getting-started/clone-master/13.png b/static/img/getting-started/database/clone-master/13.png similarity index 100% rename from static/img/getting-started/clone-master/13.png rename to static/img/getting-started/database/clone-master/13.png diff --git a/static/img/getting-started/clone-master/14.png b/static/img/getting-started/database/clone-master/14.png similarity index 100% rename from static/img/getting-started/clone-master/14.png rename to static/img/getting-started/database/clone-master/14.png diff --git a/static/img/getting-started/clone-master/2.png b/static/img/getting-started/database/clone-master/2.png similarity index 100% rename from static/img/getting-started/clone-master/2.png rename to static/img/getting-started/database/clone-master/2.png diff --git a/static/img/getting-started/clone-master/3.png b/static/img/getting-started/database/clone-master/3.png similarity index 100% rename from static/img/getting-started/clone-master/3.png rename to static/img/getting-started/database/clone-master/3.png diff --git a/static/img/getting-started/clone-master/4.png b/static/img/getting-started/database/clone-master/4.png similarity index 100% rename from static/img/getting-started/clone-master/4.png rename to static/img/getting-started/database/clone-master/4.png diff --git a/static/img/getting-started/clone-master/5.png b/static/img/getting-started/database/clone-master/5.png similarity index 100% rename from static/img/getting-started/clone-master/5.png rename to static/img/getting-started/database/clone-master/5.png diff --git a/static/img/getting-started/clone-master/6.png b/static/img/getting-started/database/clone-master/6.png similarity index 100% rename from static/img/getting-started/clone-master/6.png rename to static/img/getting-started/database/clone-master/6.png diff --git a/static/img/getting-started/clone-master/7.png b/static/img/getting-started/database/clone-master/7.png similarity index 100% rename from static/img/getting-started/clone-master/7.png rename to static/img/getting-started/database/clone-master/7.png diff --git a/static/img/getting-started/clone-master/8.png b/static/img/getting-started/database/clone-master/8.png similarity index 100% rename from static/img/getting-started/clone-master/8.png rename to static/img/getting-started/database/clone-master/8.png diff --git a/static/img/getting-started/clone-master/9.png b/static/img/getting-started/database/clone-master/9.png similarity index 100% rename from static/img/getting-started/clone-master/9.png rename to static/img/getting-started/database/clone-master/9.png diff --git a/static/img/getting-started/myob-migrate/1.png b/static/img/getting-started/migration/myob-migrate/1.png similarity index 100% rename from static/img/getting-started/myob-migrate/1.png rename to static/img/getting-started/migration/myob-migrate/1.png diff --git a/static/img/getting-started/myob-migrate/10.png b/static/img/getting-started/migration/myob-migrate/10.png similarity index 100% rename from static/img/getting-started/myob-migrate/10.png rename to static/img/getting-started/migration/myob-migrate/10.png diff --git a/static/img/getting-started/myob-migrate/11.png b/static/img/getting-started/migration/myob-migrate/11.png similarity index 100% rename from static/img/getting-started/myob-migrate/11.png rename to static/img/getting-started/migration/myob-migrate/11.png diff --git a/static/img/getting-started/myob-migrate/12.png b/static/img/getting-started/migration/myob-migrate/12.png similarity index 100% rename from static/img/getting-started/myob-migrate/12.png rename to static/img/getting-started/migration/myob-migrate/12.png diff --git a/static/img/getting-started/myob-migrate/2.png b/static/img/getting-started/migration/myob-migrate/2.png similarity index 100% rename from static/img/getting-started/myob-migrate/2.png rename to static/img/getting-started/migration/myob-migrate/2.png diff --git a/static/img/getting-started/myob-migrate/3.png b/static/img/getting-started/migration/myob-migrate/3.png similarity index 100% rename from static/img/getting-started/myob-migrate/3.png rename to static/img/getting-started/migration/myob-migrate/3.png diff --git a/static/img/getting-started/myob-migrate/4.png b/static/img/getting-started/migration/myob-migrate/4.png similarity index 100% rename from static/img/getting-started/myob-migrate/4.png rename to static/img/getting-started/migration/myob-migrate/4.png diff --git a/static/img/getting-started/myob-migrate/5.png b/static/img/getting-started/migration/myob-migrate/5.png similarity index 100% rename from static/img/getting-started/myob-migrate/5.png rename to static/img/getting-started/migration/myob-migrate/5.png diff --git a/static/img/getting-started/myob-migrate/6.png b/static/img/getting-started/migration/myob-migrate/6.png similarity index 100% rename from static/img/getting-started/myob-migrate/6.png rename to static/img/getting-started/migration/myob-migrate/6.png diff --git a/static/img/getting-started/myob-migrate/7.png b/static/img/getting-started/migration/myob-migrate/7.png similarity index 100% rename from static/img/getting-started/myob-migrate/7.png rename to static/img/getting-started/migration/myob-migrate/7.png diff --git a/static/img/getting-started/myob-migrate/8.png b/static/img/getting-started/migration/myob-migrate/8.png similarity index 100% rename from static/img/getting-started/myob-migrate/8.png rename to static/img/getting-started/migration/myob-migrate/8.png diff --git a/static/img/getting-started/myob-migrate/9.png b/static/img/getting-started/migration/myob-migrate/9.png similarity index 100% rename from static/img/getting-started/myob-migrate/9.png rename to static/img/getting-started/migration/myob-migrate/9.png diff --git a/static/img/getting-started/network-setting/1.png b/static/img/getting-started/multiuser-setup/1.png similarity index 100% rename from static/img/getting-started/network-setting/1.png rename to static/img/getting-started/multiuser-setup/1.png diff --git a/static/img/getting-started/network-setting/2.png b/static/img/getting-started/multiuser-setup/2.png similarity index 100% rename from static/img/getting-started/network-setting/2.png rename to static/img/getting-started/multiuser-setup/2.png diff --git a/static/img/getting-started/network-setting/3.png b/static/img/getting-started/multiuser-setup/3.png similarity index 100% rename from static/img/getting-started/network-setting/3.png rename to static/img/getting-started/multiuser-setup/3.png diff --git a/static/img/getting-started/network-setting/4.png b/static/img/getting-started/multiuser-setup/4.png similarity index 100% rename from static/img/getting-started/network-setting/4.png rename to static/img/getting-started/multiuser-setup/4.png diff --git a/static/img/getting-started/network-setting/5.png b/static/img/getting-started/multiuser-setup/5.png similarity index 100% rename from static/img/getting-started/network-setting/5.png rename to static/img/getting-started/multiuser-setup/5.png diff --git a/static/img/getting-started/network-setting/6.png b/static/img/getting-started/multiuser-setup/6.png similarity index 100% rename from static/img/getting-started/network-setting/6.png rename to static/img/getting-started/multiuser-setup/6.png diff --git a/static/img/getting-started/network-setting/7.png b/static/img/getting-started/multiuser-setup/7.png similarity index 100% rename from static/img/getting-started/network-setting/7.png rename to static/img/getting-started/multiuser-setup/7.png diff --git a/static/img/getting-started/install-sql/1.png b/static/img/getting-started/setup/1.png similarity index 100% rename from static/img/getting-started/install-sql/1.png rename to static/img/getting-started/setup/1.png diff --git a/static/img/getting-started/install-sql/10.png b/static/img/getting-started/setup/10.png similarity index 100% rename from static/img/getting-started/install-sql/10.png rename to static/img/getting-started/setup/10.png diff --git a/static/img/getting-started/install-sql/11.png b/static/img/getting-started/setup/11.png similarity index 100% rename from static/img/getting-started/install-sql/11.png rename to static/img/getting-started/setup/11.png diff --git a/static/img/getting-started/install-sql/12.png b/static/img/getting-started/setup/12.png similarity index 100% rename from static/img/getting-started/install-sql/12.png rename to static/img/getting-started/setup/12.png diff --git a/static/img/getting-started/install-sql/13.png b/static/img/getting-started/setup/13.png similarity index 100% rename from static/img/getting-started/install-sql/13.png rename to static/img/getting-started/setup/13.png diff --git a/static/img/getting-started/install-sql/2.png b/static/img/getting-started/setup/2.png similarity index 100% rename from static/img/getting-started/install-sql/2.png rename to static/img/getting-started/setup/2.png diff --git a/static/img/getting-started/install-sql/3.png b/static/img/getting-started/setup/3.png similarity index 100% rename from static/img/getting-started/install-sql/3.png rename to static/img/getting-started/setup/3.png diff --git a/static/img/getting-started/install-sql/4.png b/static/img/getting-started/setup/4.png similarity index 100% rename from static/img/getting-started/install-sql/4.png rename to static/img/getting-started/setup/4.png diff --git a/static/img/getting-started/install-sql/5.png b/static/img/getting-started/setup/5.png similarity index 100% rename from static/img/getting-started/install-sql/5.png rename to static/img/getting-started/setup/5.png diff --git a/static/img/getting-started/install-sql/6.png b/static/img/getting-started/setup/6.png similarity index 100% rename from static/img/getting-started/install-sql/6.png rename to static/img/getting-started/setup/6.png diff --git a/static/img/getting-started/install-sql/7.png b/static/img/getting-started/setup/7.png similarity index 100% rename from static/img/getting-started/install-sql/7.png rename to static/img/getting-started/setup/7.png diff --git a/static/img/getting-started/install-sql/8.png b/static/img/getting-started/setup/8.png similarity index 100% rename from static/img/getting-started/install-sql/8.png rename to static/img/getting-started/setup/8.png diff --git a/static/img/getting-started/install-sql/9.png b/static/img/getting-started/setup/9.png similarity index 100% rename from static/img/getting-started/install-sql/9.png rename to static/img/getting-started/setup/9.png diff --git a/static/img/activate-license/1.png b/static/img/getting-started/setup/activate-license/1.png similarity index 100% rename from static/img/activate-license/1.png rename to static/img/getting-started/setup/activate-license/1.png diff --git a/static/img/activate-license/1b.png b/static/img/getting-started/setup/activate-license/1b.png similarity index 100% rename from static/img/activate-license/1b.png rename to static/img/getting-started/setup/activate-license/1b.png diff --git a/static/img/activate-license/2.png b/static/img/getting-started/setup/activate-license/2.png similarity index 100% rename from static/img/activate-license/2.png rename to static/img/getting-started/setup/activate-license/2.png diff --git a/static/img/activate-license/3.png b/static/img/getting-started/setup/activate-license/3.png similarity index 100% rename from static/img/activate-license/3.png rename to static/img/getting-started/setup/activate-license/3.png diff --git a/static/img/activate-license/4.png b/static/img/getting-started/setup/activate-license/4.png similarity index 100% rename from static/img/activate-license/4.png rename to static/img/getting-started/setup/activate-license/4.png diff --git a/static/img/getting-started/setup/create-new-group-1.png b/static/img/getting-started/setup/create-new-group-1.png new file mode 100644 index 00000000..efbde3cb Binary files /dev/null and b/static/img/getting-started/setup/create-new-group-1.png differ diff --git a/static/img/getting-started/setup/create-new-group-2.png b/static/img/getting-started/setup/create-new-group-2.png new file mode 100644 index 00000000..3a817293 Binary files /dev/null and b/static/img/getting-started/setup/create-new-group-2.png differ diff --git a/static/img/getting-started/setup/create-new-group-3.png b/static/img/getting-started/setup/create-new-group-3.png new file mode 100644 index 00000000..5ab4f446 Binary files /dev/null and b/static/img/getting-started/setup/create-new-group-3.png differ diff --git a/static/img/getting-started/ubs/after-year-end.png b/static/img/getting-started/ubs/after-year-end.png new file mode 100644 index 00000000..6a85ceb6 Binary files /dev/null and b/static/img/getting-started/ubs/after-year-end.png differ diff --git a/static/img/getting-started/ubs/ap-ar-gl-trans.png b/static/img/getting-started/ubs/ap-ar-gl-trans.png new file mode 100644 index 00000000..d43b801e Binary files /dev/null and b/static/img/getting-started/ubs/ap-ar-gl-trans.png differ diff --git a/static/img/getting-started/ubs/current-trans.png b/static/img/getting-started/ubs/current-trans.png new file mode 100644 index 00000000..6269025f Binary files /dev/null and b/static/img/getting-started/ubs/current-trans.png differ diff --git a/static/img/getting-started/ubs/gl-ar-ap.png b/static/img/getting-started/ubs/gl-ar-ap.png new file mode 100644 index 00000000..616ac31c Binary files /dev/null and b/static/img/getting-started/ubs/gl-ar-ap.png differ diff --git a/static/img/getting-started/ubs/importmd-step1-1.png b/static/img/getting-started/ubs/importmd-step1-1.png new file mode 100644 index 00000000..f0ee8414 Binary files /dev/null and b/static/img/getting-started/ubs/importmd-step1-1.png differ diff --git a/static/img/getting-started/ubs/importmd-step1-2.png b/static/img/getting-started/ubs/importmd-step1-2.png new file mode 100644 index 00000000..ffe61713 Binary files /dev/null and b/static/img/getting-started/ubs/importmd-step1-2.png differ diff --git a/static/img/getting-started/ubs/importmd-step1-3.png b/static/img/getting-started/ubs/importmd-step1-3.png new file mode 100644 index 00000000..dfe66cc8 Binary files /dev/null and b/static/img/getting-started/ubs/importmd-step1-3.png differ diff --git a/static/img/getting-started/ubs/importmd-step1-4.png b/static/img/getting-started/ubs/importmd-step1-4.png new file mode 100644 index 00000000..f9d5e9aa Binary files /dev/null and b/static/img/getting-started/ubs/importmd-step1-4.png differ diff --git a/static/img/getting-started/ubs/importmd-step1-5.png b/static/img/getting-started/ubs/importmd-step1-5.png new file mode 100644 index 00000000..92a37fbe Binary files /dev/null and b/static/img/getting-started/ubs/importmd-step1-5.png differ diff --git a/static/img/getting-started/ubs/importsmd-step1.png b/static/img/getting-started/ubs/importsmd-step1.png new file mode 100644 index 00000000..3ab54822 Binary files /dev/null and b/static/img/getting-started/ubs/importsmd-step1.png differ diff --git a/static/img/getting-started/ubs/importsmd-step2-1.png b/static/img/getting-started/ubs/importsmd-step2-1.png new file mode 100644 index 00000000..5205050d Binary files /dev/null and b/static/img/getting-started/ubs/importsmd-step2-1.png differ diff --git a/static/img/getting-started/ubs/importsmd-step2-2.png b/static/img/getting-started/ubs/importsmd-step2-2.png new file mode 100644 index 00000000..77e6d6d5 Binary files /dev/null and b/static/img/getting-started/ubs/importsmd-step2-2.png differ diff --git a/static/img/getting-started/ubs/importsmd-step2-3.png b/static/img/getting-started/ubs/importsmd-step2-3.png new file mode 100644 index 00000000..730a9353 Binary files /dev/null and b/static/img/getting-started/ubs/importsmd-step2-3.png differ diff --git a/static/img/getting-started/ubs/prepare-step3.png b/static/img/getting-started/ubs/prepare-step3.png new file mode 100644 index 00000000..9b01ee58 Binary files /dev/null and b/static/img/getting-started/ubs/prepare-step3.png differ diff --git a/static/img/getting-started/ubs/restore-step3.png b/static/img/getting-started/ubs/restore-step3.png new file mode 100644 index 00000000..134d8804 Binary files /dev/null and b/static/img/getting-started/ubs/restore-step3.png differ diff --git a/static/img/getting-started/ubs/sales-step5.png b/static/img/getting-started/ubs/sales-step5.png new file mode 100644 index 00000000..13ce7f91 Binary files /dev/null and b/static/img/getting-started/ubs/sales-step5.png differ diff --git a/static/img/getting-started/ubs/snp.png b/static/img/getting-started/ubs/snp.png new file mode 100644 index 00000000..20658431 Binary files /dev/null and b/static/img/getting-started/ubs/snp.png differ diff --git a/static/img/getting-started/ubs/troubleshoot.png b/static/img/getting-started/ubs/troubleshoot.png new file mode 100644 index 00000000..ad933dd4 Binary files /dev/null and b/static/img/getting-started/ubs/troubleshoot.png differ diff --git a/static/img/getting-started/user-guide/100jt.png b/static/img/getting-started/user-guide/100jt.png new file mode 100644 index 00000000..89b3bdd4 Binary files /dev/null and b/static/img/getting-started/user-guide/100jt.png differ diff --git a/static/img/getting-started/user-guide/101jt.png b/static/img/getting-started/user-guide/101jt.png new file mode 100644 index 00000000..90fce804 Binary files /dev/null and b/static/img/getting-started/user-guide/101jt.png differ diff --git a/static/img/getting-started/user-guide/102jt.png b/static/img/getting-started/user-guide/102jt.png new file mode 100644 index 00000000..f147b652 Binary files /dev/null and b/static/img/getting-started/user-guide/102jt.png differ diff --git a/static/img/getting-started/user-guide/103jt.png b/static/img/getting-started/user-guide/103jt.png new file mode 100644 index 00000000..7827962c Binary files /dev/null and b/static/img/getting-started/user-guide/103jt.png differ diff --git a/static/img/getting-started/user-guide/104jt.png b/static/img/getting-started/user-guide/104jt.png new file mode 100644 index 00000000..50389134 Binary files /dev/null and b/static/img/getting-started/user-guide/104jt.png differ diff --git a/static/img/getting-started/user-guide/105jt.png b/static/img/getting-started/user-guide/105jt.png new file mode 100644 index 00000000..f53a726a Binary files /dev/null and b/static/img/getting-started/user-guide/105jt.png differ diff --git a/static/img/getting-started/user-guide/106jt.png b/static/img/getting-started/user-guide/106jt.png new file mode 100644 index 00000000..7a6dfa91 Binary files /dev/null and b/static/img/getting-started/user-guide/106jt.png differ diff --git a/static/img/getting-started/user-guide/107jt.png b/static/img/getting-started/user-guide/107jt.png new file mode 100644 index 00000000..39807264 Binary files /dev/null and b/static/img/getting-started/user-guide/107jt.png differ diff --git a/static/img/getting-started/user-guide/108jt.png b/static/img/getting-started/user-guide/108jt.png new file mode 100644 index 00000000..a2294ff3 Binary files /dev/null and b/static/img/getting-started/user-guide/108jt.png differ diff --git a/static/img/getting-started/user-guide/109jt.png b/static/img/getting-started/user-guide/109jt.png new file mode 100644 index 00000000..873bb502 Binary files /dev/null and b/static/img/getting-started/user-guide/109jt.png differ diff --git a/static/img/getting-started/user-guide/10jt.png b/static/img/getting-started/user-guide/10jt.png new file mode 100644 index 00000000..54751e88 Binary files /dev/null and b/static/img/getting-started/user-guide/10jt.png differ diff --git a/static/img/getting-started/user-guide/110jt.png b/static/img/getting-started/user-guide/110jt.png new file mode 100644 index 00000000..109d3646 Binary files /dev/null and b/static/img/getting-started/user-guide/110jt.png differ diff --git a/static/img/getting-started/user-guide/111jt.png b/static/img/getting-started/user-guide/111jt.png new file mode 100644 index 00000000..4b2fc768 Binary files /dev/null and b/static/img/getting-started/user-guide/111jt.png differ diff --git a/static/img/getting-started/user-guide/112jt.png b/static/img/getting-started/user-guide/112jt.png new file mode 100644 index 00000000..c2adb5ba Binary files /dev/null and b/static/img/getting-started/user-guide/112jt.png differ diff --git a/static/img/getting-started/user-guide/113jt.png b/static/img/getting-started/user-guide/113jt.png new file mode 100644 index 00000000..44562699 Binary files /dev/null and b/static/img/getting-started/user-guide/113jt.png differ diff --git a/static/img/getting-started/user-guide/114jt.png b/static/img/getting-started/user-guide/114jt.png new file mode 100644 index 00000000..2045d768 Binary files /dev/null and b/static/img/getting-started/user-guide/114jt.png differ diff --git a/static/img/getting-started/user-guide/115jt.png b/static/img/getting-started/user-guide/115jt.png new file mode 100644 index 00000000..c6892c3c Binary files /dev/null and b/static/img/getting-started/user-guide/115jt.png differ diff --git a/static/img/getting-started/user-guide/116jt.png b/static/img/getting-started/user-guide/116jt.png new file mode 100644 index 00000000..adf65bb1 Binary files /dev/null and b/static/img/getting-started/user-guide/116jt.png differ diff --git a/static/img/getting-started/user-guide/117jt.png b/static/img/getting-started/user-guide/117jt.png new file mode 100644 index 00000000..0f655035 Binary files /dev/null and b/static/img/getting-started/user-guide/117jt.png differ diff --git a/static/img/getting-started/user-guide/11jt.png b/static/img/getting-started/user-guide/11jt.png new file mode 100644 index 00000000..ce8a6a4d Binary files /dev/null and b/static/img/getting-started/user-guide/11jt.png differ diff --git a/static/img/getting-started/user-guide/12jt.png b/static/img/getting-started/user-guide/12jt.png new file mode 100644 index 00000000..673fc60e Binary files /dev/null and b/static/img/getting-started/user-guide/12jt.png differ diff --git a/static/img/getting-started/user-guide/13jt.png b/static/img/getting-started/user-guide/13jt.png new file mode 100644 index 00000000..fde3c11f Binary files /dev/null and b/static/img/getting-started/user-guide/13jt.png differ diff --git a/static/img/getting-started/user-guide/14jt.png b/static/img/getting-started/user-guide/14jt.png new file mode 100644 index 00000000..39d5a4fc Binary files /dev/null and b/static/img/getting-started/user-guide/14jt.png differ diff --git a/static/img/getting-started/user-guide/15jt.png b/static/img/getting-started/user-guide/15jt.png new file mode 100644 index 00000000..5beafb11 Binary files /dev/null and b/static/img/getting-started/user-guide/15jt.png differ diff --git a/static/img/getting-started/user-guide/16jt.png b/static/img/getting-started/user-guide/16jt.png new file mode 100644 index 00000000..4b2258fd Binary files /dev/null and b/static/img/getting-started/user-guide/16jt.png differ diff --git a/static/img/getting-started/user-guide/17jt.png b/static/img/getting-started/user-guide/17jt.png new file mode 100644 index 00000000..a963232e Binary files /dev/null and b/static/img/getting-started/user-guide/17jt.png differ diff --git a/static/img/getting-started/user-guide/18jt.png b/static/img/getting-started/user-guide/18jt.png new file mode 100644 index 00000000..e73dba3f Binary files /dev/null and b/static/img/getting-started/user-guide/18jt.png differ diff --git a/static/img/getting-started/user-guide/19jt.png b/static/img/getting-started/user-guide/19jt.png new file mode 100644 index 00000000..db9e2161 Binary files /dev/null and b/static/img/getting-started/user-guide/19jt.png differ diff --git a/static/img/getting-started/user-guide/20jt.png b/static/img/getting-started/user-guide/20jt.png new file mode 100644 index 00000000..4e681031 Binary files /dev/null and b/static/img/getting-started/user-guide/20jt.png differ diff --git a/static/img/getting-started/user-guide/21jt.png b/static/img/getting-started/user-guide/21jt.png new file mode 100644 index 00000000..2c9424a3 Binary files /dev/null and b/static/img/getting-started/user-guide/21jt.png differ diff --git a/static/img/getting-started/user-guide/22jt.png b/static/img/getting-started/user-guide/22jt.png new file mode 100644 index 00000000..6c003fc6 Binary files /dev/null and b/static/img/getting-started/user-guide/22jt.png differ diff --git a/static/img/getting-started/user-guide/23jt.png b/static/img/getting-started/user-guide/23jt.png new file mode 100644 index 00000000..8e2fba7b Binary files /dev/null and b/static/img/getting-started/user-guide/23jt.png differ diff --git a/static/img/getting-started/user-guide/24jt.png b/static/img/getting-started/user-guide/24jt.png new file mode 100644 index 00000000..8e2fba7b Binary files /dev/null and b/static/img/getting-started/user-guide/24jt.png differ diff --git a/static/img/getting-started/user-guide/25jt.png b/static/img/getting-started/user-guide/25jt.png new file mode 100644 index 00000000..1b321bd2 Binary files /dev/null and b/static/img/getting-started/user-guide/25jt.png differ diff --git a/static/img/getting-started/user-guide/26jt.png b/static/img/getting-started/user-guide/26jt.png new file mode 100644 index 00000000..bffaf69c Binary files /dev/null and b/static/img/getting-started/user-guide/26jt.png differ diff --git a/static/img/getting-started/user-guide/27jt.png b/static/img/getting-started/user-guide/27jt.png new file mode 100644 index 00000000..e69c5830 Binary files /dev/null and b/static/img/getting-started/user-guide/27jt.png differ diff --git a/static/img/getting-started/user-guide/28jt.png b/static/img/getting-started/user-guide/28jt.png new file mode 100644 index 00000000..35fcbbff Binary files /dev/null and b/static/img/getting-started/user-guide/28jt.png differ diff --git a/static/img/getting-started/user-guide/29jt.png b/static/img/getting-started/user-guide/29jt.png new file mode 100644 index 00000000..ba568699 Binary files /dev/null and b/static/img/getting-started/user-guide/29jt.png differ diff --git a/static/img/getting-started/user-guide/30jt.png b/static/img/getting-started/user-guide/30jt.png new file mode 100644 index 00000000..f830443b Binary files /dev/null and b/static/img/getting-started/user-guide/30jt.png differ diff --git a/static/img/getting-started/user-guide/31jt.png b/static/img/getting-started/user-guide/31jt.png new file mode 100644 index 00000000..a0055f4c Binary files /dev/null and b/static/img/getting-started/user-guide/31jt.png differ diff --git a/static/img/getting-started/user-guide/32jt.png b/static/img/getting-started/user-guide/32jt.png new file mode 100644 index 00000000..5eb60bd1 Binary files /dev/null and b/static/img/getting-started/user-guide/32jt.png differ diff --git a/static/img/getting-started/user-guide/33jt.png b/static/img/getting-started/user-guide/33jt.png new file mode 100644 index 00000000..7068d418 Binary files /dev/null and b/static/img/getting-started/user-guide/33jt.png differ diff --git a/static/img/getting-started/user-guide/34jt.png b/static/img/getting-started/user-guide/34jt.png new file mode 100644 index 00000000..cdf06cbe Binary files /dev/null and b/static/img/getting-started/user-guide/34jt.png differ diff --git a/static/img/getting-started/user-guide/35jt.png b/static/img/getting-started/user-guide/35jt.png new file mode 100644 index 00000000..7b05342a Binary files /dev/null and b/static/img/getting-started/user-guide/35jt.png differ diff --git a/static/img/getting-started/user-guide/36jt.png b/static/img/getting-started/user-guide/36jt.png new file mode 100644 index 00000000..e6ed41a8 Binary files /dev/null and b/static/img/getting-started/user-guide/36jt.png differ diff --git a/static/img/getting-started/user-guide/37jt.png b/static/img/getting-started/user-guide/37jt.png new file mode 100644 index 00000000..92fcd987 Binary files /dev/null and b/static/img/getting-started/user-guide/37jt.png differ diff --git a/static/img/getting-started/user-guide/38jt.png b/static/img/getting-started/user-guide/38jt.png new file mode 100644 index 00000000..63ef0d42 Binary files /dev/null and b/static/img/getting-started/user-guide/38jt.png differ diff --git a/static/img/getting-started/user-guide/39jt.png b/static/img/getting-started/user-guide/39jt.png new file mode 100644 index 00000000..b05b67ef Binary files /dev/null and b/static/img/getting-started/user-guide/39jt.png differ diff --git a/static/img/getting-started/user-guide/40jt.png b/static/img/getting-started/user-guide/40jt.png new file mode 100644 index 00000000..33a67980 Binary files /dev/null and b/static/img/getting-started/user-guide/40jt.png differ diff --git a/static/img/getting-started/user-guide/41jt.png b/static/img/getting-started/user-guide/41jt.png new file mode 100644 index 00000000..ee33c21d Binary files /dev/null and b/static/img/getting-started/user-guide/41jt.png differ diff --git a/static/img/getting-started/user-guide/42jt.png b/static/img/getting-started/user-guide/42jt.png new file mode 100644 index 00000000..4ba36d7a Binary files /dev/null and b/static/img/getting-started/user-guide/42jt.png differ diff --git a/static/img/getting-started/user-guide/43jt.png b/static/img/getting-started/user-guide/43jt.png new file mode 100644 index 00000000..c6db6da7 Binary files /dev/null and b/static/img/getting-started/user-guide/43jt.png differ diff --git a/static/img/getting-started/user-guide/44jt.png b/static/img/getting-started/user-guide/44jt.png new file mode 100644 index 00000000..7537a219 Binary files /dev/null and b/static/img/getting-started/user-guide/44jt.png differ diff --git a/static/img/getting-started/user-guide/45jt.png b/static/img/getting-started/user-guide/45jt.png new file mode 100644 index 00000000..02432507 Binary files /dev/null and b/static/img/getting-started/user-guide/45jt.png differ diff --git a/static/img/getting-started/user-guide/46jt.png b/static/img/getting-started/user-guide/46jt.png new file mode 100644 index 00000000..02fe62fd Binary files /dev/null and b/static/img/getting-started/user-guide/46jt.png differ diff --git a/static/img/getting-started/user-guide/47jt.png b/static/img/getting-started/user-guide/47jt.png new file mode 100644 index 00000000..7537a219 Binary files /dev/null and b/static/img/getting-started/user-guide/47jt.png differ diff --git a/static/img/getting-started/user-guide/48jt.png b/static/img/getting-started/user-guide/48jt.png new file mode 100644 index 00000000..02432507 Binary files /dev/null and b/static/img/getting-started/user-guide/48jt.png differ diff --git a/static/img/getting-started/user-guide/49jt.png b/static/img/getting-started/user-guide/49jt.png new file mode 100644 index 00000000..65afd93e Binary files /dev/null and b/static/img/getting-started/user-guide/49jt.png differ diff --git a/static/img/getting-started/user-guide/50jt.png b/static/img/getting-started/user-guide/50jt.png new file mode 100644 index 00000000..b6f42b68 Binary files /dev/null and b/static/img/getting-started/user-guide/50jt.png differ diff --git a/static/img/getting-started/user-guide/51jt.png b/static/img/getting-started/user-guide/51jt.png new file mode 100644 index 00000000..a97a6304 Binary files /dev/null and b/static/img/getting-started/user-guide/51jt.png differ diff --git a/static/img/getting-started/user-guide/52jt.png b/static/img/getting-started/user-guide/52jt.png new file mode 100644 index 00000000..39a7af4e Binary files /dev/null and b/static/img/getting-started/user-guide/52jt.png differ diff --git a/static/img/getting-started/user-guide/53jt.png b/static/img/getting-started/user-guide/53jt.png new file mode 100644 index 00000000..1ac1ff12 Binary files /dev/null and b/static/img/getting-started/user-guide/53jt.png differ diff --git a/static/img/getting-started/user-guide/54jt.png b/static/img/getting-started/user-guide/54jt.png new file mode 100644 index 00000000..999ae9f2 Binary files /dev/null and b/static/img/getting-started/user-guide/54jt.png differ diff --git a/static/img/getting-started/user-guide/55jt.png b/static/img/getting-started/user-guide/55jt.png new file mode 100644 index 00000000..de9fb2c2 Binary files /dev/null and b/static/img/getting-started/user-guide/55jt.png differ diff --git a/static/img/getting-started/user-guide/56jt.png b/static/img/getting-started/user-guide/56jt.png new file mode 100644 index 00000000..e64ea677 Binary files /dev/null and b/static/img/getting-started/user-guide/56jt.png differ diff --git a/static/img/getting-started/user-guide/57jt.png b/static/img/getting-started/user-guide/57jt.png new file mode 100644 index 00000000..7e5120c2 Binary files /dev/null and b/static/img/getting-started/user-guide/57jt.png differ diff --git a/static/img/getting-started/user-guide/58jt.png b/static/img/getting-started/user-guide/58jt.png new file mode 100644 index 00000000..ef3add97 Binary files /dev/null and b/static/img/getting-started/user-guide/58jt.png differ diff --git a/static/img/getting-started/user-guide/59jt.png b/static/img/getting-started/user-guide/59jt.png new file mode 100644 index 00000000..49c1880c Binary files /dev/null and b/static/img/getting-started/user-guide/59jt.png differ diff --git a/static/img/getting-started/user-guide/60jt.png b/static/img/getting-started/user-guide/60jt.png new file mode 100644 index 00000000..d0d35d47 Binary files /dev/null and b/static/img/getting-started/user-guide/60jt.png differ diff --git a/static/img/getting-started/user-guide/61jt.png b/static/img/getting-started/user-guide/61jt.png new file mode 100644 index 00000000..9a987fb1 Binary files /dev/null and b/static/img/getting-started/user-guide/61jt.png differ diff --git a/static/img/getting-started/user-guide/62jt.png b/static/img/getting-started/user-guide/62jt.png new file mode 100644 index 00000000..4d5972bc Binary files /dev/null and b/static/img/getting-started/user-guide/62jt.png differ diff --git a/static/img/getting-started/user-guide/63jt.png b/static/img/getting-started/user-guide/63jt.png new file mode 100644 index 00000000..c25ed4f3 Binary files /dev/null and b/static/img/getting-started/user-guide/63jt.png differ diff --git a/static/img/getting-started/user-guide/64jt.png b/static/img/getting-started/user-guide/64jt.png new file mode 100644 index 00000000..9396170c Binary files /dev/null and b/static/img/getting-started/user-guide/64jt.png differ diff --git a/static/img/getting-started/user-guide/65jt.png b/static/img/getting-started/user-guide/65jt.png new file mode 100644 index 00000000..f6322fbf Binary files /dev/null and b/static/img/getting-started/user-guide/65jt.png differ diff --git a/static/img/getting-started/user-guide/66jt.png b/static/img/getting-started/user-guide/66jt.png new file mode 100644 index 00000000..e3cc2a28 Binary files /dev/null and b/static/img/getting-started/user-guide/66jt.png differ diff --git a/static/img/getting-started/user-guide/67jt.png b/static/img/getting-started/user-guide/67jt.png new file mode 100644 index 00000000..e3cc2a28 Binary files /dev/null and b/static/img/getting-started/user-guide/67jt.png differ diff --git a/static/img/getting-started/user-guide/68jt.png b/static/img/getting-started/user-guide/68jt.png new file mode 100644 index 00000000..e2dc6767 Binary files /dev/null and b/static/img/getting-started/user-guide/68jt.png differ diff --git a/static/img/getting-started/user-guide/69jt.png b/static/img/getting-started/user-guide/69jt.png new file mode 100644 index 00000000..500a5d10 Binary files /dev/null and b/static/img/getting-started/user-guide/69jt.png differ diff --git a/static/img/getting-started/user-guide/70jt.png b/static/img/getting-started/user-guide/70jt.png new file mode 100644 index 00000000..a56bd319 Binary files /dev/null and b/static/img/getting-started/user-guide/70jt.png differ diff --git a/static/img/getting-started/user-guide/71jt.png b/static/img/getting-started/user-guide/71jt.png new file mode 100644 index 00000000..ede5dfed Binary files /dev/null and b/static/img/getting-started/user-guide/71jt.png differ diff --git a/static/img/getting-started/user-guide/72jt.png b/static/img/getting-started/user-guide/72jt.png new file mode 100644 index 00000000..f218e773 Binary files /dev/null and b/static/img/getting-started/user-guide/72jt.png differ diff --git a/static/img/getting-started/user-guide/73jt.png b/static/img/getting-started/user-guide/73jt.png new file mode 100644 index 00000000..748d68b6 Binary files /dev/null and b/static/img/getting-started/user-guide/73jt.png differ diff --git a/static/img/getting-started/user-guide/74jt.png b/static/img/getting-started/user-guide/74jt.png new file mode 100644 index 00000000..07a52027 Binary files /dev/null and b/static/img/getting-started/user-guide/74jt.png differ diff --git a/static/img/getting-started/user-guide/75jt.png b/static/img/getting-started/user-guide/75jt.png new file mode 100644 index 00000000..b96bbd06 Binary files /dev/null and b/static/img/getting-started/user-guide/75jt.png differ diff --git a/static/img/getting-started/user-guide/76jt.png b/static/img/getting-started/user-guide/76jt.png new file mode 100644 index 00000000..216a66e3 Binary files /dev/null and b/static/img/getting-started/user-guide/76jt.png differ diff --git a/static/img/getting-started/user-guide/77jt.png b/static/img/getting-started/user-guide/77jt.png new file mode 100644 index 00000000..25c10843 Binary files /dev/null and b/static/img/getting-started/user-guide/77jt.png differ diff --git a/static/img/getting-started/user-guide/78jt.png b/static/img/getting-started/user-guide/78jt.png new file mode 100644 index 00000000..d19255ab Binary files /dev/null and b/static/img/getting-started/user-guide/78jt.png differ diff --git a/static/img/getting-started/user-guide/79jt.png b/static/img/getting-started/user-guide/79jt.png new file mode 100644 index 00000000..1379ce61 Binary files /dev/null and b/static/img/getting-started/user-guide/79jt.png differ diff --git a/static/img/getting-started/user-guide/80jt.png b/static/img/getting-started/user-guide/80jt.png new file mode 100644 index 00000000..9a67a77d Binary files /dev/null and b/static/img/getting-started/user-guide/80jt.png differ diff --git a/static/img/getting-started/user-guide/81jt.png b/static/img/getting-started/user-guide/81jt.png new file mode 100644 index 00000000..09e87423 Binary files /dev/null and b/static/img/getting-started/user-guide/81jt.png differ diff --git a/static/img/getting-started/user-guide/82jt.png b/static/img/getting-started/user-guide/82jt.png new file mode 100644 index 00000000..fd7a9e3d Binary files /dev/null and b/static/img/getting-started/user-guide/82jt.png differ diff --git a/static/img/getting-started/user-guide/83jt.png b/static/img/getting-started/user-guide/83jt.png new file mode 100644 index 00000000..17446272 Binary files /dev/null and b/static/img/getting-started/user-guide/83jt.png differ diff --git a/static/img/getting-started/user-guide/84jt.png b/static/img/getting-started/user-guide/84jt.png new file mode 100644 index 00000000..66e0ea13 Binary files /dev/null and b/static/img/getting-started/user-guide/84jt.png differ diff --git a/static/img/getting-started/user-guide/85jt.png b/static/img/getting-started/user-guide/85jt.png new file mode 100644 index 00000000..707723bb Binary files /dev/null and b/static/img/getting-started/user-guide/85jt.png differ diff --git a/static/img/getting-started/user-guide/86jt.png b/static/img/getting-started/user-guide/86jt.png new file mode 100644 index 00000000..2f93a61c Binary files /dev/null and b/static/img/getting-started/user-guide/86jt.png differ diff --git a/static/img/getting-started/user-guide/87jt.png b/static/img/getting-started/user-guide/87jt.png new file mode 100644 index 00000000..3797e6ce Binary files /dev/null and b/static/img/getting-started/user-guide/87jt.png differ diff --git a/static/img/getting-started/user-guide/88jt.png b/static/img/getting-started/user-guide/88jt.png new file mode 100644 index 00000000..e30c2f17 Binary files /dev/null and b/static/img/getting-started/user-guide/88jt.png differ diff --git a/static/img/getting-started/user-guide/89jt.png b/static/img/getting-started/user-guide/89jt.png new file mode 100644 index 00000000..c56e6f39 Binary files /dev/null and b/static/img/getting-started/user-guide/89jt.png differ diff --git a/static/img/getting-started/user-guide/8jt.png b/static/img/getting-started/user-guide/8jt.png new file mode 100644 index 00000000..58a31fd9 Binary files /dev/null and b/static/img/getting-started/user-guide/8jt.png differ diff --git a/static/img/getting-started/user-guide/90jt.png b/static/img/getting-started/user-guide/90jt.png new file mode 100644 index 00000000..31e178fa Binary files /dev/null and b/static/img/getting-started/user-guide/90jt.png differ diff --git a/static/img/getting-started/user-guide/91jt.png b/static/img/getting-started/user-guide/91jt.png new file mode 100644 index 00000000..3e3361aa Binary files /dev/null and b/static/img/getting-started/user-guide/91jt.png differ diff --git a/static/img/getting-started/user-guide/92jt.png b/static/img/getting-started/user-guide/92jt.png new file mode 100644 index 00000000..78478ae4 Binary files /dev/null and b/static/img/getting-started/user-guide/92jt.png differ diff --git a/static/img/getting-started/user-guide/93jt.png b/static/img/getting-started/user-guide/93jt.png new file mode 100644 index 00000000..ba472ae3 Binary files /dev/null and b/static/img/getting-started/user-guide/93jt.png differ diff --git a/static/img/getting-started/user-guide/94jt.png b/static/img/getting-started/user-guide/94jt.png new file mode 100644 index 00000000..cf5df5e9 Binary files /dev/null and b/static/img/getting-started/user-guide/94jt.png differ diff --git a/static/img/getting-started/user-guide/95jt.png b/static/img/getting-started/user-guide/95jt.png new file mode 100644 index 00000000..92c079d4 Binary files /dev/null and b/static/img/getting-started/user-guide/95jt.png differ diff --git a/static/img/getting-started/user-guide/96jt.png b/static/img/getting-started/user-guide/96jt.png new file mode 100644 index 00000000..45186929 Binary files /dev/null and b/static/img/getting-started/user-guide/96jt.png differ diff --git a/static/img/getting-started/user-guide/97jt.png b/static/img/getting-started/user-guide/97jt.png new file mode 100644 index 00000000..f2597b49 Binary files /dev/null and b/static/img/getting-started/user-guide/97jt.png differ diff --git a/static/img/getting-started/user-guide/98jt.png b/static/img/getting-started/user-guide/98jt.png new file mode 100644 index 00000000..b23908b9 Binary files /dev/null and b/static/img/getting-started/user-guide/98jt.png differ diff --git a/static/img/getting-started/user-guide/99jt.png b/static/img/getting-started/user-guide/99jt.png new file mode 100644 index 00000000..945dd4b1 Binary files /dev/null and b/static/img/getting-started/user-guide/99jt.png differ diff --git a/static/img/getting-started/user-guide/9jt.png b/static/img/getting-started/user-guide/9jt.png new file mode 100644 index 00000000..ec208640 Binary files /dev/null and b/static/img/getting-started/user-guide/9jt.png differ diff --git a/static/img/getting-started/user-guide/LimYuHangSST1.png b/static/img/getting-started/user-guide/LimYuHangSST1.png new file mode 100644 index 00000000..410bbeda Binary files /dev/null and b/static/img/getting-started/user-guide/LimYuHangSST1.png differ diff --git a/static/img/getting-started/user-guide/LimYuHangSST2.png b/static/img/getting-started/user-guide/LimYuHangSST2.png new file mode 100644 index 00000000..6504b8c0 Binary files /dev/null and b/static/img/getting-started/user-guide/LimYuHangSST2.png differ diff --git a/static/img/getting-started/user-guide/LimYuHangSST3.png b/static/img/getting-started/user-guide/LimYuHangSST3.png new file mode 100644 index 00000000..275c65f0 Binary files /dev/null and b/static/img/getting-started/user-guide/LimYuHangSST3.png differ diff --git a/static/img/getting-started/user-guide/LimYuHangSupplierFAQ1.jpg b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ1.jpg new file mode 100644 index 00000000..19945a79 Binary files /dev/null and b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ1.jpg differ diff --git a/static/img/getting-started/user-guide/LimYuHangSupplierFAQ2.jpg b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ2.jpg new file mode 100644 index 00000000..196335c8 Binary files /dev/null and b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ2.jpg differ diff --git a/static/img/getting-started/user-guide/LimYuHangSupplierFAQ3.jpg b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ3.jpg new file mode 100644 index 00000000..44727877 Binary files /dev/null and b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ3.jpg differ diff --git a/static/img/getting-started/user-guide/LimYuHangSupplierFAQ4.jpg b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ4.jpg new file mode 100644 index 00000000..95523705 Binary files /dev/null and b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ4.jpg differ diff --git a/static/img/getting-started/user-guide/LimYuHangSupplierFAQ5.jpg b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ5.jpg new file mode 100644 index 00000000..85a6390d Binary files /dev/null and b/static/img/getting-started/user-guide/LimYuHangSupplierFAQ5.jpg differ diff --git a/static/img/getting-started/user-guide/ListingReport.png b/static/img/getting-started/user-guide/ListingReport.png new file mode 100644 index 00000000..34e25ca1 Binary files /dev/null and b/static/img/getting-started/user-guide/ListingReport.png differ diff --git a/static/img/getting-started/user-guide/jt1.png b/static/img/getting-started/user-guide/jt1.png new file mode 100644 index 00000000..687573d3 Binary files /dev/null and b/static/img/getting-started/user-guide/jt1.png differ diff --git a/static/img/getting-started/user-guide/jt2.png b/static/img/getting-started/user-guide/jt2.png new file mode 100644 index 00000000..6fad5db4 Binary files /dev/null and b/static/img/getting-started/user-guide/jt2.png differ diff --git a/static/img/getting-started/user-guide/jt3.png b/static/img/getting-started/user-guide/jt3.png new file mode 100644 index 00000000..f1ad6793 Binary files /dev/null and b/static/img/getting-started/user-guide/jt3.png differ diff --git a/static/img/getting-started/user-guide/jt4.png b/static/img/getting-started/user-guide/jt4.png new file mode 100644 index 00000000..dde0737c Binary files /dev/null and b/static/img/getting-started/user-guide/jt4.png differ diff --git a/static/img/getting-started/user-guide/jt5.png b/static/img/getting-started/user-guide/jt5.png new file mode 100644 index 00000000..d65f4e9b Binary files /dev/null and b/static/img/getting-started/user-guide/jt5.png differ diff --git a/static/img/getting-started/user-guide/jt6.png b/static/img/getting-started/user-guide/jt6.png new file mode 100644 index 00000000..4d8cecba Binary files /dev/null and b/static/img/getting-started/user-guide/jt6.png differ diff --git a/static/img/getting-started/user-guide/jt7.png b/static/img/getting-started/user-guide/jt7.png new file mode 100644 index 00000000..7caa1516 Binary files /dev/null and b/static/img/getting-started/user-guide/jt7.png differ diff --git a/static/img/getting-started/user-guide/14.png b/static/img/getting-started/user-guide/wl1.png similarity index 100% rename from static/img/getting-started/user-guide/14.png rename to static/img/getting-started/user-guide/wl1.png diff --git a/static/img/getting-started/user-guide/wl10.png b/static/img/getting-started/user-guide/wl10.png new file mode 100644 index 00000000..356f7859 Binary files /dev/null and b/static/img/getting-started/user-guide/wl10.png differ diff --git a/static/img/getting-started/user-guide/wl11.png b/static/img/getting-started/user-guide/wl11.png new file mode 100644 index 00000000..989904ee Binary files /dev/null and b/static/img/getting-started/user-guide/wl11.png differ diff --git a/static/img/getting-started/user-guide/wl12.png b/static/img/getting-started/user-guide/wl12.png new file mode 100644 index 00000000..2301c79a Binary files /dev/null and b/static/img/getting-started/user-guide/wl12.png differ diff --git a/static/img/getting-started/user-guide/wl13.png b/static/img/getting-started/user-guide/wl13.png new file mode 100644 index 00000000..fd12cef3 Binary files /dev/null and b/static/img/getting-started/user-guide/wl13.png differ diff --git a/static/img/getting-started/user-guide/wl14.png b/static/img/getting-started/user-guide/wl14.png new file mode 100644 index 00000000..a9bcf096 Binary files /dev/null and b/static/img/getting-started/user-guide/wl14.png differ diff --git a/static/img/getting-started/user-guide/wl15.png b/static/img/getting-started/user-guide/wl15.png new file mode 100644 index 00000000..6b5ec1c8 Binary files /dev/null and b/static/img/getting-started/user-guide/wl15.png differ diff --git a/static/img/getting-started/user-guide/wl16.png b/static/img/getting-started/user-guide/wl16.png new file mode 100644 index 00000000..0ae969e5 Binary files /dev/null and b/static/img/getting-started/user-guide/wl16.png differ diff --git a/static/img/getting-started/user-guide/wl17.png b/static/img/getting-started/user-guide/wl17.png new file mode 100644 index 00000000..6eea9860 Binary files /dev/null and b/static/img/getting-started/user-guide/wl17.png differ diff --git a/static/img/getting-started/user-guide/wl18.png b/static/img/getting-started/user-guide/wl18.png new file mode 100644 index 00000000..d6437b73 Binary files /dev/null and b/static/img/getting-started/user-guide/wl18.png differ diff --git a/static/img/getting-started/user-guide/wl19.png b/static/img/getting-started/user-guide/wl19.png new file mode 100644 index 00000000..e3809da5 Binary files /dev/null and b/static/img/getting-started/user-guide/wl19.png differ diff --git a/static/img/getting-started/user-guide/15.png b/static/img/getting-started/user-guide/wl2.png similarity index 100% rename from static/img/getting-started/user-guide/15.png rename to static/img/getting-started/user-guide/wl2.png diff --git a/static/img/getting-started/user-guide/wl20.png b/static/img/getting-started/user-guide/wl20.png new file mode 100644 index 00000000..0e99f440 Binary files /dev/null and b/static/img/getting-started/user-guide/wl20.png differ diff --git a/static/img/getting-started/user-guide/wl21.png b/static/img/getting-started/user-guide/wl21.png new file mode 100644 index 00000000..8c3ece5a Binary files /dev/null and b/static/img/getting-started/user-guide/wl21.png differ diff --git a/static/img/getting-started/user-guide/wl22.png b/static/img/getting-started/user-guide/wl22.png new file mode 100644 index 00000000..4d940c9c Binary files /dev/null and b/static/img/getting-started/user-guide/wl22.png differ diff --git a/static/img/getting-started/user-guide/wl23.png b/static/img/getting-started/user-guide/wl23.png new file mode 100644 index 00000000..4be24e66 Binary files /dev/null and b/static/img/getting-started/user-guide/wl23.png differ diff --git a/static/img/getting-started/user-guide/wl24.png b/static/img/getting-started/user-guide/wl24.png new file mode 100644 index 00000000..829aabab Binary files /dev/null and b/static/img/getting-started/user-guide/wl24.png differ diff --git a/static/img/getting-started/user-guide/wl25.png b/static/img/getting-started/user-guide/wl25.png new file mode 100644 index 00000000..12f0c5f0 Binary files /dev/null and b/static/img/getting-started/user-guide/wl25.png differ diff --git a/static/img/getting-started/user-guide/wl26.png b/static/img/getting-started/user-guide/wl26.png new file mode 100644 index 00000000..31c74b04 Binary files /dev/null and b/static/img/getting-started/user-guide/wl26.png differ diff --git a/static/img/getting-started/user-guide/wl27.png b/static/img/getting-started/user-guide/wl27.png new file mode 100644 index 00000000..1a9312b1 Binary files /dev/null and b/static/img/getting-started/user-guide/wl27.png differ diff --git a/static/img/getting-started/user-guide/wl28.png b/static/img/getting-started/user-guide/wl28.png new file mode 100644 index 00000000..776da900 Binary files /dev/null and b/static/img/getting-started/user-guide/wl28.png differ diff --git a/static/img/getting-started/user-guide/wl29.png b/static/img/getting-started/user-guide/wl29.png new file mode 100644 index 00000000..75b7231f Binary files /dev/null and b/static/img/getting-started/user-guide/wl29.png differ diff --git a/static/img/getting-started/user-guide/16.png b/static/img/getting-started/user-guide/wl3.png similarity index 100% rename from static/img/getting-started/user-guide/16.png rename to static/img/getting-started/user-guide/wl3.png diff --git a/static/img/getting-started/user-guide/wl30.png b/static/img/getting-started/user-guide/wl30.png new file mode 100644 index 00000000..208b4dfb Binary files /dev/null and b/static/img/getting-started/user-guide/wl30.png differ diff --git a/static/img/getting-started/user-guide/wl31.png b/static/img/getting-started/user-guide/wl31.png new file mode 100644 index 00000000..fd56093f Binary files /dev/null and b/static/img/getting-started/user-guide/wl31.png differ diff --git a/static/img/getting-started/user-guide/wl32.png b/static/img/getting-started/user-guide/wl32.png new file mode 100644 index 00000000..d4d09da0 Binary files /dev/null and b/static/img/getting-started/user-guide/wl32.png differ diff --git a/static/img/getting-started/user-guide/wl33.png b/static/img/getting-started/user-guide/wl33.png new file mode 100644 index 00000000..6f69f654 Binary files /dev/null and b/static/img/getting-started/user-guide/wl33.png differ diff --git a/static/img/getting-started/user-guide/wl34.png b/static/img/getting-started/user-guide/wl34.png new file mode 100644 index 00000000..4a7eace4 Binary files /dev/null and b/static/img/getting-started/user-guide/wl34.png differ diff --git a/static/img/getting-started/user-guide/wl35.png b/static/img/getting-started/user-guide/wl35.png new file mode 100644 index 00000000..ad2a9c95 Binary files /dev/null and b/static/img/getting-started/user-guide/wl35.png differ diff --git a/static/img/getting-started/user-guide/wl36.png b/static/img/getting-started/user-guide/wl36.png new file mode 100644 index 00000000..dd044321 Binary files /dev/null and b/static/img/getting-started/user-guide/wl36.png differ diff --git a/static/img/getting-started/user-guide/wl37.png b/static/img/getting-started/user-guide/wl37.png new file mode 100644 index 00000000..b1caab6c Binary files /dev/null and b/static/img/getting-started/user-guide/wl37.png differ diff --git a/static/img/getting-started/user-guide/wl38.png b/static/img/getting-started/user-guide/wl38.png new file mode 100644 index 00000000..9d35cab2 Binary files /dev/null and b/static/img/getting-started/user-guide/wl38.png differ diff --git a/static/img/getting-started/user-guide/wl39.png b/static/img/getting-started/user-guide/wl39.png new file mode 100644 index 00000000..a70857f9 Binary files /dev/null and b/static/img/getting-started/user-guide/wl39.png differ diff --git a/static/img/getting-started/user-guide/wl4.png b/static/img/getting-started/user-guide/wl4.png new file mode 100644 index 00000000..913b93de Binary files /dev/null and b/static/img/getting-started/user-guide/wl4.png differ diff --git a/static/img/getting-started/user-guide/wl40.png b/static/img/getting-started/user-guide/wl40.png new file mode 100644 index 00000000..9fe94d53 Binary files /dev/null and b/static/img/getting-started/user-guide/wl40.png differ diff --git a/static/img/getting-started/user-guide/wl41.png b/static/img/getting-started/user-guide/wl41.png new file mode 100644 index 00000000..a431a7a5 Binary files /dev/null and b/static/img/getting-started/user-guide/wl41.png differ diff --git a/static/img/getting-started/user-guide/wl42.png b/static/img/getting-started/user-guide/wl42.png new file mode 100644 index 00000000..038062c8 Binary files /dev/null and b/static/img/getting-started/user-guide/wl42.png differ diff --git a/static/img/getting-started/user-guide/wl43.png b/static/img/getting-started/user-guide/wl43.png new file mode 100644 index 00000000..ce3793ec Binary files /dev/null and b/static/img/getting-started/user-guide/wl43.png differ diff --git a/static/img/getting-started/user-guide/wl44.png b/static/img/getting-started/user-guide/wl44.png new file mode 100644 index 00000000..9aa63a7d Binary files /dev/null and b/static/img/getting-started/user-guide/wl44.png differ diff --git a/static/img/getting-started/user-guide/wl46.png b/static/img/getting-started/user-guide/wl46.png new file mode 100644 index 00000000..134d8804 Binary files /dev/null and b/static/img/getting-started/user-guide/wl46.png differ diff --git a/static/img/getting-started/user-guide/wl47.png b/static/img/getting-started/user-guide/wl47.png new file mode 100644 index 00000000..f0ee8414 Binary files /dev/null and b/static/img/getting-started/user-guide/wl47.png differ diff --git a/static/img/getting-started/user-guide/wl48.png b/static/img/getting-started/user-guide/wl48.png new file mode 100644 index 00000000..ffe61713 Binary files /dev/null and b/static/img/getting-started/user-guide/wl48.png differ diff --git a/static/img/getting-started/user-guide/wl49.png b/static/img/getting-started/user-guide/wl49.png new file mode 100644 index 00000000..dfe66cc8 Binary files /dev/null and b/static/img/getting-started/user-guide/wl49.png differ diff --git a/static/img/getting-started/user-guide/wl5.png b/static/img/getting-started/user-guide/wl5.png new file mode 100644 index 00000000..da7ab3d9 Binary files /dev/null and b/static/img/getting-started/user-guide/wl5.png differ diff --git a/static/img/getting-started/user-guide/wl50.png b/static/img/getting-started/user-guide/wl50.png new file mode 100644 index 00000000..f9d5e9aa Binary files /dev/null and b/static/img/getting-started/user-guide/wl50.png differ diff --git a/static/img/getting-started/user-guide/wl51.png b/static/img/getting-started/user-guide/wl51.png new file mode 100644 index 00000000..92a37fbe Binary files /dev/null and b/static/img/getting-started/user-guide/wl51.png differ diff --git a/static/img/getting-started/user-guide/wl52.png b/static/img/getting-started/user-guide/wl52.png new file mode 100644 index 00000000..3ab54822 Binary files /dev/null and b/static/img/getting-started/user-guide/wl52.png differ diff --git a/static/img/getting-started/user-guide/wl53.png b/static/img/getting-started/user-guide/wl53.png new file mode 100644 index 00000000..5205050d Binary files /dev/null and b/static/img/getting-started/user-guide/wl53.png differ diff --git a/static/img/getting-started/user-guide/wl54.png b/static/img/getting-started/user-guide/wl54.png new file mode 100644 index 00000000..77e6d6d5 Binary files /dev/null and b/static/img/getting-started/user-guide/wl54.png differ diff --git a/static/img/getting-started/user-guide/wl55.png b/static/img/getting-started/user-guide/wl55.png new file mode 100644 index 00000000..730a9353 Binary files /dev/null and b/static/img/getting-started/user-guide/wl55.png differ diff --git a/static/img/getting-started/user-guide/wl56.png b/static/img/getting-started/user-guide/wl56.png new file mode 100644 index 00000000..9b01ee58 Binary files /dev/null and b/static/img/getting-started/user-guide/wl56.png differ diff --git a/static/img/getting-started/user-guide/wl57.png b/static/img/getting-started/user-guide/wl57.png new file mode 100644 index 00000000..13ce7f91 Binary files /dev/null and b/static/img/getting-started/user-guide/wl57.png differ diff --git a/static/img/getting-started/user-guide/wl58.png b/static/img/getting-started/user-guide/wl58.png new file mode 100644 index 00000000..6a85ceb6 Binary files /dev/null and b/static/img/getting-started/user-guide/wl58.png differ diff --git a/static/img/getting-started/user-guide/wl59.png b/static/img/getting-started/user-guide/wl59.png new file mode 100644 index 00000000..6269025f Binary files /dev/null and b/static/img/getting-started/user-guide/wl59.png differ diff --git a/static/img/getting-started/user-guide/wl6.png b/static/img/getting-started/user-guide/wl6.png new file mode 100644 index 00000000..982e20de Binary files /dev/null and b/static/img/getting-started/user-guide/wl6.png differ diff --git a/static/img/getting-started/user-guide/wl60.png b/static/img/getting-started/user-guide/wl60.png new file mode 100644 index 00000000..d43b801e Binary files /dev/null and b/static/img/getting-started/user-guide/wl60.png differ diff --git a/static/img/getting-started/user-guide/wl61.png b/static/img/getting-started/user-guide/wl61.png new file mode 100644 index 00000000..ad933dd4 Binary files /dev/null and b/static/img/getting-started/user-guide/wl61.png differ diff --git a/static/img/getting-started/user-guide/wl62.png b/static/img/getting-started/user-guide/wl62.png new file mode 100644 index 00000000..20658431 Binary files /dev/null and b/static/img/getting-started/user-guide/wl62.png differ diff --git a/static/img/getting-started/user-guide/wl63.png b/static/img/getting-started/user-guide/wl63.png new file mode 100644 index 00000000..616ac31c Binary files /dev/null and b/static/img/getting-started/user-guide/wl63.png differ diff --git a/static/img/getting-started/user-guide/wl7.png b/static/img/getting-started/user-guide/wl7.png new file mode 100644 index 00000000..53f1ca68 Binary files /dev/null and b/static/img/getting-started/user-guide/wl7.png differ diff --git a/static/img/getting-started/user-guide/wl8.png b/static/img/getting-started/user-guide/wl8.png new file mode 100644 index 00000000..eeeb4a15 Binary files /dev/null and b/static/img/getting-started/user-guide/wl8.png differ diff --git a/static/img/getting-started/user-guide/wl9.png b/static/img/getting-started/user-guide/wl9.png new file mode 100644 index 00000000..945b5e2a Binary files /dev/null and b/static/img/getting-started/user-guide/wl9.png differ diff --git a/static/img/grid-layout/save-manage-layout/10.png b/static/img/grid-layout/save-manage-layout/10.png deleted file mode 100644 index 12556571..00000000 Binary files a/static/img/grid-layout/save-manage-layout/10.png and /dev/null differ diff --git a/static/img/grid-layout/save-manage-layout/7.png b/static/img/grid-layout/save-manage-layout/7.png deleted file mode 100644 index d0e4fbd1..00000000 Binary files a/static/img/grid-layout/save-manage-layout/7.png and /dev/null differ diff --git a/static/img/grid-layout/save-manage-layout/8.png b/static/img/grid-layout/save-manage-layout/8.png deleted file mode 100644 index 390f5393..00000000 Binary files a/static/img/grid-layout/save-manage-layout/8.png and /dev/null differ diff --git a/static/img/grid-layout/save-manage-layout/9.png b/static/img/grid-layout/save-manage-layout/9.png deleted file mode 100644 index 8486af01..00000000 Binary files a/static/img/grid-layout/save-manage-layout/9.png and /dev/null differ diff --git a/static/img/banking/cloud-icon.png b/static/img/integration/banks/cloud-icon.png similarity index 100% rename from static/img/banking/cloud-icon.png rename to static/img/integration/banks/cloud-icon.png diff --git a/static/img/banking/maybank/bank-recon-1.png b/static/img/integration/banks/maybank/bank-recon-1.png similarity index 100% rename from static/img/banking/maybank/bank-recon-1.png rename to static/img/integration/banks/maybank/bank-recon-1.png diff --git a/static/img/banking/maybank/bank-recon-2.png b/static/img/integration/banks/maybank/bank-recon-2.png similarity index 100% rename from static/img/banking/maybank/bank-recon-2.png rename to static/img/integration/banks/maybank/bank-recon-2.png diff --git a/static/img/banking/maybank/bank-recon-3.png b/static/img/integration/banks/maybank/bank-recon-3.png similarity index 100% rename from static/img/banking/maybank/bank-recon-3.png rename to static/img/integration/banks/maybank/bank-recon-3.png diff --git a/static/img/banking/maybank/bank-recon-4.png b/static/img/integration/banks/maybank/bank-recon-4.png similarity index 100% rename from static/img/banking/maybank/bank-recon-4.png rename to static/img/integration/banks/maybank/bank-recon-4.png diff --git a/static/img/banking/maybank/brn.png b/static/img/integration/banks/maybank/brn.png similarity index 100% rename from static/img/banking/maybank/brn.png rename to static/img/integration/banks/maybank/brn.png diff --git a/static/img/banking/maybank/company-profile.png b/static/img/integration/banks/maybank/company-profile.png similarity index 100% rename from static/img/banking/maybank/company-profile.png rename to static/img/integration/banks/maybank/company-profile.png diff --git a/static/img/banking/maybank/disconnect-1.png b/static/img/integration/banks/maybank/disconnect-1.png similarity index 100% rename from static/img/banking/maybank/disconnect-1.png rename to static/img/integration/banks/maybank/disconnect-1.png diff --git a/static/img/banking/maybank/disconnect-2.png b/static/img/integration/banks/maybank/disconnect-2.png similarity index 100% rename from static/img/banking/maybank/disconnect-2.png rename to static/img/integration/banks/maybank/disconnect-2.png diff --git a/static/img/banking/maybank/disconnect-3.png b/static/img/integration/banks/maybank/disconnect-3.png similarity index 100% rename from static/img/banking/maybank/disconnect-3.png rename to static/img/integration/banks/maybank/disconnect-3.png diff --git a/static/img/banking/maybank/linking-1.png b/static/img/integration/banks/maybank/linking-1.png similarity index 100% rename from static/img/banking/maybank/linking-1.png rename to static/img/integration/banks/maybank/linking-1.png diff --git a/static/img/banking/maybank/linking-2.png b/static/img/integration/banks/maybank/linking-2.png similarity index 100% rename from static/img/banking/maybank/linking-2.png rename to static/img/integration/banks/maybank/linking-2.png diff --git a/static/img/banking/maybank/linking-3.png b/static/img/integration/banks/maybank/linking-3.png similarity index 100% rename from static/img/banking/maybank/linking-3.png rename to static/img/integration/banks/maybank/linking-3.png diff --git a/static/img/banking/maybank/linking-4.png b/static/img/integration/banks/maybank/linking-4.png similarity index 100% rename from static/img/banking/maybank/linking-4.png rename to static/img/integration/banks/maybank/linking-4.png diff --git a/static/img/banking/maybank/linking-5.png b/static/img/integration/banks/maybank/linking-5.png similarity index 100% rename from static/img/banking/maybank/linking-5.png rename to static/img/integration/banks/maybank/linking-5.png diff --git a/static/img/banking/maybank/linking-6.png b/static/img/integration/banks/maybank/linking-6.png similarity index 100% rename from static/img/banking/maybank/linking-6.png rename to static/img/integration/banks/maybank/linking-6.png diff --git a/static/img/banking/maybank/maybank-ui.png b/static/img/integration/banks/maybank/maybank-ui.png similarity index 100% rename from static/img/banking/maybank/maybank-ui.png rename to static/img/integration/banks/maybank/maybank-ui.png diff --git a/static/img/banking/rhb/0.png b/static/img/integration/banks/rhb/0.png similarity index 100% rename from static/img/banking/rhb/0.png rename to static/img/integration/banks/rhb/0.png diff --git a/static/img/banking/rhb/1.png b/static/img/integration/banks/rhb/1.png similarity index 100% rename from static/img/banking/rhb/1.png rename to static/img/integration/banks/rhb/1.png diff --git a/static/img/banking/rhb/10.png b/static/img/integration/banks/rhb/10.png similarity index 100% rename from static/img/banking/rhb/10.png rename to static/img/integration/banks/rhb/10.png diff --git a/static/img/banking/rhb/11.png b/static/img/integration/banks/rhb/11.png similarity index 100% rename from static/img/banking/rhb/11.png rename to static/img/integration/banks/rhb/11.png diff --git a/static/img/banking/rhb/12.png b/static/img/integration/banks/rhb/12.png similarity index 100% rename from static/img/banking/rhb/12.png rename to static/img/integration/banks/rhb/12.png diff --git a/static/img/banking/rhb/13.png b/static/img/integration/banks/rhb/13.png similarity index 100% rename from static/img/banking/rhb/13.png rename to static/img/integration/banks/rhb/13.png diff --git a/static/img/banking/rhb/14.png b/static/img/integration/banks/rhb/14.png similarity index 100% rename from static/img/banking/rhb/14.png rename to static/img/integration/banks/rhb/14.png diff --git a/static/img/banking/rhb/15.png b/static/img/integration/banks/rhb/15.png similarity index 100% rename from static/img/banking/rhb/15.png rename to static/img/integration/banks/rhb/15.png diff --git a/static/img/banking/rhb/16.png b/static/img/integration/banks/rhb/16.png similarity index 100% rename from static/img/banking/rhb/16.png rename to static/img/integration/banks/rhb/16.png diff --git a/static/img/banking/rhb/17.png b/static/img/integration/banks/rhb/17.png similarity index 100% rename from static/img/banking/rhb/17.png rename to static/img/integration/banks/rhb/17.png diff --git a/static/img/banking/rhb/18.png b/static/img/integration/banks/rhb/18.png similarity index 100% rename from static/img/banking/rhb/18.png rename to static/img/integration/banks/rhb/18.png diff --git a/static/img/banking/rhb/19.png b/static/img/integration/banks/rhb/19.png similarity index 100% rename from static/img/banking/rhb/19.png rename to static/img/integration/banks/rhb/19.png diff --git a/static/img/banking/rhb/2.png b/static/img/integration/banks/rhb/2.png similarity index 100% rename from static/img/banking/rhb/2.png rename to static/img/integration/banks/rhb/2.png diff --git a/static/img/banking/rhb/20.png b/static/img/integration/banks/rhb/20.png similarity index 100% rename from static/img/banking/rhb/20.png rename to static/img/integration/banks/rhb/20.png diff --git a/static/img/banking/rhb/21.png b/static/img/integration/banks/rhb/21.png similarity index 100% rename from static/img/banking/rhb/21.png rename to static/img/integration/banks/rhb/21.png diff --git a/static/img/banking/rhb/22.png b/static/img/integration/banks/rhb/22.png similarity index 100% rename from static/img/banking/rhb/22.png rename to static/img/integration/banks/rhb/22.png diff --git a/static/img/banking/rhb/23.png b/static/img/integration/banks/rhb/23.png similarity index 100% rename from static/img/banking/rhb/23.png rename to static/img/integration/banks/rhb/23.png diff --git a/static/img/banking/rhb/24.png b/static/img/integration/banks/rhb/24.png similarity index 100% rename from static/img/banking/rhb/24.png rename to static/img/integration/banks/rhb/24.png diff --git a/static/img/banking/rhb/25.png b/static/img/integration/banks/rhb/25.png similarity index 100% rename from static/img/banking/rhb/25.png rename to static/img/integration/banks/rhb/25.png diff --git a/static/img/banking/rhb/26.png b/static/img/integration/banks/rhb/26.png similarity index 100% rename from static/img/banking/rhb/26.png rename to static/img/integration/banks/rhb/26.png diff --git a/static/img/banking/rhb/27.png b/static/img/integration/banks/rhb/27.png similarity index 100% rename from static/img/banking/rhb/27.png rename to static/img/integration/banks/rhb/27.png diff --git a/static/img/banking/rhb/28.png b/static/img/integration/banks/rhb/28.png similarity index 100% rename from static/img/banking/rhb/28.png rename to static/img/integration/banks/rhb/28.png diff --git a/static/img/banking/rhb/29.png b/static/img/integration/banks/rhb/29.png similarity index 100% rename from static/img/banking/rhb/29.png rename to static/img/integration/banks/rhb/29.png diff --git a/static/img/banking/rhb/3.png b/static/img/integration/banks/rhb/3.png similarity index 100% rename from static/img/banking/rhb/3.png rename to static/img/integration/banks/rhb/3.png diff --git a/static/img/banking/rhb/30.png b/static/img/integration/banks/rhb/30.png similarity index 100% rename from static/img/banking/rhb/30.png rename to static/img/integration/banks/rhb/30.png diff --git a/static/img/banking/rhb/31.png b/static/img/integration/banks/rhb/31.png similarity index 100% rename from static/img/banking/rhb/31.png rename to static/img/integration/banks/rhb/31.png diff --git a/static/img/banking/rhb/32.png b/static/img/integration/banks/rhb/32.png similarity index 100% rename from static/img/banking/rhb/32.png rename to static/img/integration/banks/rhb/32.png diff --git a/static/img/banking/rhb/33.png b/static/img/integration/banks/rhb/33.png similarity index 100% rename from static/img/banking/rhb/33.png rename to static/img/integration/banks/rhb/33.png diff --git a/static/img/banking/rhb/34.png b/static/img/integration/banks/rhb/34.png similarity index 100% rename from static/img/banking/rhb/34.png rename to static/img/integration/banks/rhb/34.png diff --git a/static/img/banking/rhb/35.png b/static/img/integration/banks/rhb/35.png similarity index 100% rename from static/img/banking/rhb/35.png rename to static/img/integration/banks/rhb/35.png diff --git a/static/img/banking/rhb/36.png b/static/img/integration/banks/rhb/36.png similarity index 100% rename from static/img/banking/rhb/36.png rename to static/img/integration/banks/rhb/36.png diff --git a/static/img/banking/rhb/37.png b/static/img/integration/banks/rhb/37.png similarity index 100% rename from static/img/banking/rhb/37.png rename to static/img/integration/banks/rhb/37.png diff --git a/static/img/banking/rhb/38.png b/static/img/integration/banks/rhb/38.png similarity index 100% rename from static/img/banking/rhb/38.png rename to static/img/integration/banks/rhb/38.png diff --git a/static/img/banking/rhb/4.png b/static/img/integration/banks/rhb/4.png similarity index 100% rename from static/img/banking/rhb/4.png rename to static/img/integration/banks/rhb/4.png diff --git a/static/img/banking/rhb/5.png b/static/img/integration/banks/rhb/5.png similarity index 100% rename from static/img/banking/rhb/5.png rename to static/img/integration/banks/rhb/5.png diff --git a/static/img/banking/rhb/6.png b/static/img/integration/banks/rhb/6.png similarity index 100% rename from static/img/banking/rhb/6.png rename to static/img/integration/banks/rhb/6.png diff --git a/static/img/banking/rhb/7.png b/static/img/integration/banks/rhb/7.png similarity index 100% rename from static/img/banking/rhb/7.png rename to static/img/integration/banks/rhb/7.png diff --git a/static/img/banking/rhb/8.png b/static/img/integration/banks/rhb/8.png similarity index 100% rename from static/img/banking/rhb/8.png rename to static/img/integration/banks/rhb/8.png diff --git a/static/img/banking/rhb/9.png b/static/img/integration/banks/rhb/9.png similarity index 100% rename from static/img/banking/rhb/9.png rename to static/img/integration/banks/rhb/9.png diff --git a/static/img/dashboard/first-time-login/1.png b/static/img/integration/bi-dashboard/1.png similarity index 100% rename from static/img/dashboard/first-time-login/1.png rename to static/img/integration/bi-dashboard/1.png diff --git a/static/img/dashboard/first-time-login/2.png b/static/img/integration/bi-dashboard/2.png similarity index 100% rename from static/img/dashboard/first-time-login/2.png rename to static/img/integration/bi-dashboard/2.png diff --git a/static/img/dashboard/first-time-login/3.png b/static/img/integration/bi-dashboard/3.png similarity index 100% rename from static/img/dashboard/first-time-login/3.png rename to static/img/integration/bi-dashboard/3.png diff --git a/static/img/dashboard/first-time-login/4.png b/static/img/integration/bi-dashboard/4.png similarity index 100% rename from static/img/dashboard/first-time-login/4.png rename to static/img/integration/bi-dashboard/4.png diff --git a/static/img/dashboard/first-time-login/5.png b/static/img/integration/bi-dashboard/5.png similarity index 100% rename from static/img/dashboard/first-time-login/5.png rename to static/img/integration/bi-dashboard/5.png diff --git a/static/img/dashboard/first-time-login/6.png b/static/img/integration/bi-dashboard/6.png similarity index 100% rename from static/img/dashboard/first-time-login/6.png rename to static/img/integration/bi-dashboard/6.png diff --git a/static/img/dashboard/first-time-login/7.png b/static/img/integration/bi-dashboard/7.png similarity index 100% rename from static/img/dashboard/first-time-login/7.png rename to static/img/integration/bi-dashboard/7.png diff --git a/static/img/dashboard/first-time-login/8.png b/static/img/integration/bi-dashboard/8.png similarity index 100% rename from static/img/dashboard/first-time-login/8.png rename to static/img/integration/bi-dashboard/8.png diff --git a/static/img/dashboard/first-time-login/9.png b/static/img/integration/bi-dashboard/9.png similarity index 100% rename from static/img/dashboard/first-time-login/9.png rename to static/img/integration/bi-dashboard/9.png diff --git a/static/img/miscellaneous/cloud-attachment/1.png b/static/img/integration/cloud-attachment/1.png similarity index 100% rename from static/img/miscellaneous/cloud-attachment/1.png rename to static/img/integration/cloud-attachment/1.png diff --git a/static/img/miscellaneous/cloud-attachment/2.png b/static/img/integration/cloud-attachment/2.png similarity index 100% rename from static/img/miscellaneous/cloud-attachment/2.png rename to static/img/integration/cloud-attachment/2.png diff --git a/static/img/miscellaneous/cloud-attachment/3.png b/static/img/integration/cloud-attachment/3.png similarity index 100% rename from static/img/miscellaneous/cloud-attachment/3.png rename to static/img/integration/cloud-attachment/3.png diff --git a/static/img/miscellaneous/cloud-attachment/4.png b/static/img/integration/cloud-attachment/4.png similarity index 100% rename from static/img/miscellaneous/cloud-attachment/4.png rename to static/img/integration/cloud-attachment/4.png diff --git a/static/img/miscellaneous/cloud-attachment/5.png b/static/img/integration/cloud-attachment/5.png similarity index 100% rename from static/img/miscellaneous/cloud-attachment/5.png rename to static/img/integration/cloud-attachment/5.png diff --git a/static/img/miscellaneous/cloud-attachment/7.png b/static/img/integration/cloud-attachment/7.png similarity index 100% rename from static/img/miscellaneous/cloud-attachment/7.png rename to static/img/integration/cloud-attachment/7.png diff --git a/static/img/miscellaneous/cloud-attachment/8.png b/static/img/integration/cloud-attachment/8.png similarity index 100% rename from static/img/miscellaneous/cloud-attachment/8.png rename to static/img/integration/cloud-attachment/8.png diff --git a/static/img/e-commerce/different/1.png b/static/img/integration/e-commerce/different/1.png similarity index 100% rename from static/img/e-commerce/different/1.png rename to static/img/integration/e-commerce/different/1.png diff --git a/static/img/e-commerce/different/10.png b/static/img/integration/e-commerce/different/10.png similarity index 100% rename from static/img/e-commerce/different/10.png rename to static/img/integration/e-commerce/different/10.png diff --git a/static/img/e-commerce/different/11.png b/static/img/integration/e-commerce/different/11.png similarity index 100% rename from static/img/e-commerce/different/11.png rename to static/img/integration/e-commerce/different/11.png diff --git a/static/img/e-commerce/different/12.png b/static/img/integration/e-commerce/different/12.png similarity index 100% rename from static/img/e-commerce/different/12.png rename to static/img/integration/e-commerce/different/12.png diff --git a/static/img/e-commerce/different/13.png b/static/img/integration/e-commerce/different/13.png similarity index 100% rename from static/img/e-commerce/different/13.png rename to static/img/integration/e-commerce/different/13.png diff --git a/static/img/e-commerce/different/14.png b/static/img/integration/e-commerce/different/14.png similarity index 100% rename from static/img/e-commerce/different/14.png rename to static/img/integration/e-commerce/different/14.png diff --git a/static/img/e-commerce/different/15.png b/static/img/integration/e-commerce/different/15.png similarity index 100% rename from static/img/e-commerce/different/15.png rename to static/img/integration/e-commerce/different/15.png diff --git a/static/img/e-commerce/different/16.png b/static/img/integration/e-commerce/different/16.png similarity index 100% rename from static/img/e-commerce/different/16.png rename to static/img/integration/e-commerce/different/16.png diff --git a/static/img/e-commerce/different/17.png b/static/img/integration/e-commerce/different/17.png similarity index 100% rename from static/img/e-commerce/different/17.png rename to static/img/integration/e-commerce/different/17.png diff --git a/static/img/e-commerce/different/18.png b/static/img/integration/e-commerce/different/18.png similarity index 100% rename from static/img/e-commerce/different/18.png rename to static/img/integration/e-commerce/different/18.png diff --git a/static/img/e-commerce/different/19.png b/static/img/integration/e-commerce/different/19.png similarity index 100% rename from static/img/e-commerce/different/19.png rename to static/img/integration/e-commerce/different/19.png diff --git a/static/img/e-commerce/different/2.png b/static/img/integration/e-commerce/different/2.png similarity index 100% rename from static/img/e-commerce/different/2.png rename to static/img/integration/e-commerce/different/2.png diff --git a/static/img/e-commerce/different/3.png b/static/img/integration/e-commerce/different/3.png similarity index 100% rename from static/img/e-commerce/different/3.png rename to static/img/integration/e-commerce/different/3.png diff --git a/static/img/e-commerce/different/4.png b/static/img/integration/e-commerce/different/4.png similarity index 100% rename from static/img/e-commerce/different/4.png rename to static/img/integration/e-commerce/different/4.png diff --git a/static/img/e-commerce/different/5.png b/static/img/integration/e-commerce/different/5.png similarity index 100% rename from static/img/e-commerce/different/5.png rename to static/img/integration/e-commerce/different/5.png diff --git a/static/img/e-commerce/different/6.png b/static/img/integration/e-commerce/different/6.png similarity index 100% rename from static/img/e-commerce/different/6.png rename to static/img/integration/e-commerce/different/6.png diff --git a/static/img/e-commerce/different/7.png b/static/img/integration/e-commerce/different/7.png similarity index 100% rename from static/img/e-commerce/different/7.png rename to static/img/integration/e-commerce/different/7.png diff --git a/static/img/e-commerce/different/8.png b/static/img/integration/e-commerce/different/8.png similarity index 100% rename from static/img/e-commerce/different/8.png rename to static/img/integration/e-commerce/different/8.png diff --git a/static/img/e-commerce/different/9.png b/static/img/integration/e-commerce/different/9.png similarity index 100% rename from static/img/e-commerce/different/9.png rename to static/img/integration/e-commerce/different/9.png diff --git a/static/img/integration/e-commerce/different/cancelled-order.png b/static/img/integration/e-commerce/different/cancelled-order.png new file mode 100644 index 00000000..05defc80 Binary files /dev/null and b/static/img/integration/e-commerce/different/cancelled-order.png differ diff --git a/static/img/integration/e-commerce/different/combo-product.png b/static/img/integration/e-commerce/different/combo-product.png new file mode 100644 index 00000000..a157f7f5 Binary files /dev/null and b/static/img/integration/e-commerce/different/combo-product.png differ diff --git a/static/img/integration/e-commerce/different/e-commerce-order-detail.png b/static/img/integration/e-commerce/different/e-commerce-order-detail.png new file mode 100644 index 00000000..515a63b0 Binary files /dev/null and b/static/img/integration/e-commerce/different/e-commerce-order-detail.png differ diff --git a/static/img/integration/e-commerce/different/e-commerce-settings.png b/static/img/integration/e-commerce/different/e-commerce-settings.png new file mode 100644 index 00000000..690b32f4 Binary files /dev/null and b/static/img/integration/e-commerce/different/e-commerce-settings.png differ diff --git a/static/img/integration/e-commerce/different/payments-date-incorrect.png b/static/img/integration/e-commerce/different/payments-date-incorrect.png new file mode 100644 index 00000000..b295e3e1 Binary files /dev/null and b/static/img/integration/e-commerce/different/payments-date-incorrect.png differ diff --git a/static/img/integration/e-commerce/different/system-date-time.png b/static/img/integration/e-commerce/different/system-date-time.png new file mode 100644 index 00000000..cefa0573 Binary files /dev/null and b/static/img/integration/e-commerce/different/system-date-time.png differ diff --git a/static/img/e-commerce/easyStore/1.png b/static/img/integration/e-commerce/easyStore/1.png similarity index 100% rename from static/img/e-commerce/easyStore/1.png rename to static/img/integration/e-commerce/easyStore/1.png diff --git a/static/img/e-commerce/easyStore/10.png b/static/img/integration/e-commerce/easyStore/10.png similarity index 100% rename from static/img/e-commerce/easyStore/10.png rename to static/img/integration/e-commerce/easyStore/10.png diff --git a/static/img/e-commerce/easyStore/11.png b/static/img/integration/e-commerce/easyStore/11.png similarity index 100% rename from static/img/e-commerce/easyStore/11.png rename to static/img/integration/e-commerce/easyStore/11.png diff --git a/static/img/e-commerce/easyStore/12.png b/static/img/integration/e-commerce/easyStore/12.png similarity index 100% rename from static/img/e-commerce/easyStore/12.png rename to static/img/integration/e-commerce/easyStore/12.png diff --git a/static/img/e-commerce/easyStore/13.png b/static/img/integration/e-commerce/easyStore/13.png similarity index 100% rename from static/img/e-commerce/easyStore/13.png rename to static/img/integration/e-commerce/easyStore/13.png diff --git a/static/img/e-commerce/easyStore/14.png b/static/img/integration/e-commerce/easyStore/14.png similarity index 100% rename from static/img/e-commerce/easyStore/14.png rename to static/img/integration/e-commerce/easyStore/14.png diff --git a/static/img/e-commerce/easyStore/15.png b/static/img/integration/e-commerce/easyStore/15.png similarity index 100% rename from static/img/e-commerce/easyStore/15.png rename to static/img/integration/e-commerce/easyStore/15.png diff --git a/static/img/e-commerce/easyStore/16.png b/static/img/integration/e-commerce/easyStore/16.png similarity index 100% rename from static/img/e-commerce/easyStore/16.png rename to static/img/integration/e-commerce/easyStore/16.png diff --git a/static/img/e-commerce/easyStore/17.png b/static/img/integration/e-commerce/easyStore/17.png similarity index 100% rename from static/img/e-commerce/easyStore/17.png rename to static/img/integration/e-commerce/easyStore/17.png diff --git a/static/img/e-commerce/easyStore/18.png b/static/img/integration/e-commerce/easyStore/18.png similarity index 100% rename from static/img/e-commerce/easyStore/18.png rename to static/img/integration/e-commerce/easyStore/18.png diff --git a/static/img/e-commerce/easyStore/19.png b/static/img/integration/e-commerce/easyStore/19.png similarity index 100% rename from static/img/e-commerce/easyStore/19.png rename to static/img/integration/e-commerce/easyStore/19.png diff --git a/static/img/e-commerce/easyStore/2.png b/static/img/integration/e-commerce/easyStore/2.png similarity index 100% rename from static/img/e-commerce/easyStore/2.png rename to static/img/integration/e-commerce/easyStore/2.png diff --git a/static/img/e-commerce/easyStore/20.png b/static/img/integration/e-commerce/easyStore/20.png similarity index 100% rename from static/img/e-commerce/easyStore/20.png rename to static/img/integration/e-commerce/easyStore/20.png diff --git a/static/img/e-commerce/easyStore/21.png b/static/img/integration/e-commerce/easyStore/21.png similarity index 100% rename from static/img/e-commerce/easyStore/21.png rename to static/img/integration/e-commerce/easyStore/21.png diff --git a/static/img/e-commerce/easyStore/22.png b/static/img/integration/e-commerce/easyStore/22.png similarity index 100% rename from static/img/e-commerce/easyStore/22.png rename to static/img/integration/e-commerce/easyStore/22.png diff --git a/static/img/e-commerce/easyStore/23.png b/static/img/integration/e-commerce/easyStore/23.png similarity index 100% rename from static/img/e-commerce/easyStore/23.png rename to static/img/integration/e-commerce/easyStore/23.png diff --git a/static/img/e-commerce/easyStore/24.png b/static/img/integration/e-commerce/easyStore/24.png similarity index 100% rename from static/img/e-commerce/easyStore/24.png rename to static/img/integration/e-commerce/easyStore/24.png diff --git a/static/img/e-commerce/easyStore/25.png b/static/img/integration/e-commerce/easyStore/25.png similarity index 100% rename from static/img/e-commerce/easyStore/25.png rename to static/img/integration/e-commerce/easyStore/25.png diff --git a/static/img/e-commerce/easyStore/26.png b/static/img/integration/e-commerce/easyStore/26.png similarity index 100% rename from static/img/e-commerce/easyStore/26.png rename to static/img/integration/e-commerce/easyStore/26.png diff --git a/static/img/e-commerce/easyStore/27.png b/static/img/integration/e-commerce/easyStore/27.png similarity index 100% rename from static/img/e-commerce/easyStore/27.png rename to static/img/integration/e-commerce/easyStore/27.png diff --git a/static/img/e-commerce/easyStore/28.png b/static/img/integration/e-commerce/easyStore/28.png similarity index 100% rename from static/img/e-commerce/easyStore/28.png rename to static/img/integration/e-commerce/easyStore/28.png diff --git a/static/img/e-commerce/easyStore/29.png b/static/img/integration/e-commerce/easyStore/29.png similarity index 100% rename from static/img/e-commerce/easyStore/29.png rename to static/img/integration/e-commerce/easyStore/29.png diff --git a/static/img/e-commerce/easyStore/3.png b/static/img/integration/e-commerce/easyStore/3.png similarity index 100% rename from static/img/e-commerce/easyStore/3.png rename to static/img/integration/e-commerce/easyStore/3.png diff --git a/static/img/e-commerce/easyStore/30.png b/static/img/integration/e-commerce/easyStore/30.png similarity index 100% rename from static/img/e-commerce/easyStore/30.png rename to static/img/integration/e-commerce/easyStore/30.png diff --git a/static/img/e-commerce/easyStore/31.png b/static/img/integration/e-commerce/easyStore/31.png similarity index 100% rename from static/img/e-commerce/easyStore/31.png rename to static/img/integration/e-commerce/easyStore/31.png diff --git a/static/img/e-commerce/easyStore/32.png b/static/img/integration/e-commerce/easyStore/32.png similarity index 100% rename from static/img/e-commerce/easyStore/32.png rename to static/img/integration/e-commerce/easyStore/32.png diff --git a/static/img/e-commerce/easyStore/33.png b/static/img/integration/e-commerce/easyStore/33.png similarity index 100% rename from static/img/e-commerce/easyStore/33.png rename to static/img/integration/e-commerce/easyStore/33.png diff --git a/static/img/e-commerce/easyStore/34.png b/static/img/integration/e-commerce/easyStore/34.png similarity index 100% rename from static/img/e-commerce/easyStore/34.png rename to static/img/integration/e-commerce/easyStore/34.png diff --git a/static/img/e-commerce/easyStore/35.png b/static/img/integration/e-commerce/easyStore/35.png similarity index 100% rename from static/img/e-commerce/easyStore/35.png rename to static/img/integration/e-commerce/easyStore/35.png diff --git a/static/img/e-commerce/easyStore/36.png b/static/img/integration/e-commerce/easyStore/36.png similarity index 100% rename from static/img/e-commerce/easyStore/36.png rename to static/img/integration/e-commerce/easyStore/36.png diff --git a/static/img/e-commerce/easyStore/37.png b/static/img/integration/e-commerce/easyStore/37.png similarity index 100% rename from static/img/e-commerce/easyStore/37.png rename to static/img/integration/e-commerce/easyStore/37.png diff --git a/static/img/e-commerce/easyStore/38.png b/static/img/integration/e-commerce/easyStore/38.png similarity index 100% rename from static/img/e-commerce/easyStore/38.png rename to static/img/integration/e-commerce/easyStore/38.png diff --git a/static/img/e-commerce/easyStore/39.png b/static/img/integration/e-commerce/easyStore/39.png similarity index 100% rename from static/img/e-commerce/easyStore/39.png rename to static/img/integration/e-commerce/easyStore/39.png diff --git a/static/img/e-commerce/easyStore/4.png b/static/img/integration/e-commerce/easyStore/4.png similarity index 100% rename from static/img/e-commerce/easyStore/4.png rename to static/img/integration/e-commerce/easyStore/4.png diff --git a/static/img/e-commerce/easyStore/40.png b/static/img/integration/e-commerce/easyStore/40.png similarity index 100% rename from static/img/e-commerce/easyStore/40.png rename to static/img/integration/e-commerce/easyStore/40.png diff --git a/static/img/e-commerce/easyStore/41.png b/static/img/integration/e-commerce/easyStore/41.png similarity index 100% rename from static/img/e-commerce/easyStore/41.png rename to static/img/integration/e-commerce/easyStore/41.png diff --git a/static/img/e-commerce/easyStore/42.png b/static/img/integration/e-commerce/easyStore/42.png similarity index 100% rename from static/img/e-commerce/easyStore/42.png rename to static/img/integration/e-commerce/easyStore/42.png diff --git a/static/img/e-commerce/easyStore/43.png b/static/img/integration/e-commerce/easyStore/43.png similarity index 100% rename from static/img/e-commerce/easyStore/43.png rename to static/img/integration/e-commerce/easyStore/43.png diff --git a/static/img/e-commerce/easyStore/5.png b/static/img/integration/e-commerce/easyStore/5.png similarity index 100% rename from static/img/e-commerce/easyStore/5.png rename to static/img/integration/e-commerce/easyStore/5.png diff --git a/static/img/e-commerce/easyStore/6.png b/static/img/integration/e-commerce/easyStore/6.png similarity index 100% rename from static/img/e-commerce/easyStore/6.png rename to static/img/integration/e-commerce/easyStore/6.png diff --git a/static/img/e-commerce/easyStore/7.png b/static/img/integration/e-commerce/easyStore/7.png similarity index 100% rename from static/img/e-commerce/easyStore/7.png rename to static/img/integration/e-commerce/easyStore/7.png diff --git a/static/img/e-commerce/easyStore/8.png b/static/img/integration/e-commerce/easyStore/8.png similarity index 100% rename from static/img/e-commerce/easyStore/8.png rename to static/img/integration/e-commerce/easyStore/8.png diff --git a/static/img/e-commerce/easyStore/9.png b/static/img/integration/e-commerce/easyStore/9.png similarity index 100% rename from static/img/e-commerce/easyStore/9.png rename to static/img/integration/e-commerce/easyStore/9.png diff --git a/static/img/e-commerce/lazada/1.png b/static/img/integration/e-commerce/lazada/1.png similarity index 100% rename from static/img/e-commerce/lazada/1.png rename to static/img/integration/e-commerce/lazada/1.png diff --git a/static/img/e-commerce/lazada/10.png b/static/img/integration/e-commerce/lazada/10.png similarity index 100% rename from static/img/e-commerce/lazada/10.png rename to static/img/integration/e-commerce/lazada/10.png diff --git a/static/img/e-commerce/lazada/11.png b/static/img/integration/e-commerce/lazada/11.png similarity index 100% rename from static/img/e-commerce/lazada/11.png rename to static/img/integration/e-commerce/lazada/11.png diff --git a/static/img/e-commerce/lazada/12.png b/static/img/integration/e-commerce/lazada/12.png similarity index 100% rename from static/img/e-commerce/lazada/12.png rename to static/img/integration/e-commerce/lazada/12.png diff --git a/static/img/e-commerce/lazada/13.png b/static/img/integration/e-commerce/lazada/13.png similarity index 100% rename from static/img/e-commerce/lazada/13.png rename to static/img/integration/e-commerce/lazada/13.png diff --git a/static/img/e-commerce/lazada/14.png b/static/img/integration/e-commerce/lazada/14.png similarity index 100% rename from static/img/e-commerce/lazada/14.png rename to static/img/integration/e-commerce/lazada/14.png diff --git a/static/img/e-commerce/lazada/15.png b/static/img/integration/e-commerce/lazada/15.png similarity index 100% rename from static/img/e-commerce/lazada/15.png rename to static/img/integration/e-commerce/lazada/15.png diff --git a/static/img/e-commerce/lazada/16.png b/static/img/integration/e-commerce/lazada/16.png similarity index 100% rename from static/img/e-commerce/lazada/16.png rename to static/img/integration/e-commerce/lazada/16.png diff --git a/static/img/e-commerce/lazada/17.png b/static/img/integration/e-commerce/lazada/17.png similarity index 100% rename from static/img/e-commerce/lazada/17.png rename to static/img/integration/e-commerce/lazada/17.png diff --git a/static/img/e-commerce/lazada/18.png b/static/img/integration/e-commerce/lazada/18.png similarity index 100% rename from static/img/e-commerce/lazada/18.png rename to static/img/integration/e-commerce/lazada/18.png diff --git a/static/img/e-commerce/lazada/19.png b/static/img/integration/e-commerce/lazada/19.png similarity index 100% rename from static/img/e-commerce/lazada/19.png rename to static/img/integration/e-commerce/lazada/19.png diff --git a/static/img/e-commerce/lazada/2.png b/static/img/integration/e-commerce/lazada/2.png similarity index 100% rename from static/img/e-commerce/lazada/2.png rename to static/img/integration/e-commerce/lazada/2.png diff --git a/static/img/e-commerce/lazada/20.png b/static/img/integration/e-commerce/lazada/20.png similarity index 100% rename from static/img/e-commerce/lazada/20.png rename to static/img/integration/e-commerce/lazada/20.png diff --git a/static/img/e-commerce/lazada/21.png b/static/img/integration/e-commerce/lazada/21.png similarity index 100% rename from static/img/e-commerce/lazada/21.png rename to static/img/integration/e-commerce/lazada/21.png diff --git a/static/img/e-commerce/lazada/22.png b/static/img/integration/e-commerce/lazada/22.png similarity index 100% rename from static/img/e-commerce/lazada/22.png rename to static/img/integration/e-commerce/lazada/22.png diff --git a/static/img/e-commerce/lazada/23.png b/static/img/integration/e-commerce/lazada/23.png similarity index 100% rename from static/img/e-commerce/lazada/23.png rename to static/img/integration/e-commerce/lazada/23.png diff --git a/static/img/e-commerce/lazada/24.png b/static/img/integration/e-commerce/lazada/24.png similarity index 100% rename from static/img/e-commerce/lazada/24.png rename to static/img/integration/e-commerce/lazada/24.png diff --git a/static/img/e-commerce/lazada/25.png b/static/img/integration/e-commerce/lazada/25.png similarity index 100% rename from static/img/e-commerce/lazada/25.png rename to static/img/integration/e-commerce/lazada/25.png diff --git a/static/img/e-commerce/lazada/26.png b/static/img/integration/e-commerce/lazada/26.png similarity index 100% rename from static/img/e-commerce/lazada/26.png rename to static/img/integration/e-commerce/lazada/26.png diff --git a/static/img/e-commerce/lazada/27.png b/static/img/integration/e-commerce/lazada/27.png similarity index 100% rename from static/img/e-commerce/lazada/27.png rename to static/img/integration/e-commerce/lazada/27.png diff --git a/static/img/e-commerce/lazada/28.png b/static/img/integration/e-commerce/lazada/28.png similarity index 100% rename from static/img/e-commerce/lazada/28.png rename to static/img/integration/e-commerce/lazada/28.png diff --git a/static/img/e-commerce/lazada/29.png b/static/img/integration/e-commerce/lazada/29.png similarity index 100% rename from static/img/e-commerce/lazada/29.png rename to static/img/integration/e-commerce/lazada/29.png diff --git a/static/img/e-commerce/lazada/3.png b/static/img/integration/e-commerce/lazada/3.png similarity index 100% rename from static/img/e-commerce/lazada/3.png rename to static/img/integration/e-commerce/lazada/3.png diff --git a/static/img/e-commerce/lazada/30.png b/static/img/integration/e-commerce/lazada/30.png similarity index 100% rename from static/img/e-commerce/lazada/30.png rename to static/img/integration/e-commerce/lazada/30.png diff --git a/static/img/e-commerce/lazada/31.png b/static/img/integration/e-commerce/lazada/31.png similarity index 100% rename from static/img/e-commerce/lazada/31.png rename to static/img/integration/e-commerce/lazada/31.png diff --git a/static/img/e-commerce/lazada/32.png b/static/img/integration/e-commerce/lazada/32.png similarity index 100% rename from static/img/e-commerce/lazada/32.png rename to static/img/integration/e-commerce/lazada/32.png diff --git a/static/img/e-commerce/lazada/33.png b/static/img/integration/e-commerce/lazada/33.png similarity index 100% rename from static/img/e-commerce/lazada/33.png rename to static/img/integration/e-commerce/lazada/33.png diff --git a/static/img/e-commerce/lazada/34.png b/static/img/integration/e-commerce/lazada/34.png similarity index 100% rename from static/img/e-commerce/lazada/34.png rename to static/img/integration/e-commerce/lazada/34.png diff --git a/static/img/e-commerce/lazada/35.png b/static/img/integration/e-commerce/lazada/35.png similarity index 100% rename from static/img/e-commerce/lazada/35.png rename to static/img/integration/e-commerce/lazada/35.png diff --git a/static/img/e-commerce/lazada/36.png b/static/img/integration/e-commerce/lazada/36.png similarity index 100% rename from static/img/e-commerce/lazada/36.png rename to static/img/integration/e-commerce/lazada/36.png diff --git a/static/img/e-commerce/lazada/37.png b/static/img/integration/e-commerce/lazada/37.png similarity index 100% rename from static/img/e-commerce/lazada/37.png rename to static/img/integration/e-commerce/lazada/37.png diff --git a/static/img/e-commerce/lazada/38.png b/static/img/integration/e-commerce/lazada/38.png similarity index 100% rename from static/img/e-commerce/lazada/38.png rename to static/img/integration/e-commerce/lazada/38.png diff --git a/static/img/e-commerce/lazada/39.png b/static/img/integration/e-commerce/lazada/39.png similarity index 100% rename from static/img/e-commerce/lazada/39.png rename to static/img/integration/e-commerce/lazada/39.png diff --git a/static/img/e-commerce/lazada/4.png b/static/img/integration/e-commerce/lazada/4.png similarity index 100% rename from static/img/e-commerce/lazada/4.png rename to static/img/integration/e-commerce/lazada/4.png diff --git a/static/img/e-commerce/lazada/40.png b/static/img/integration/e-commerce/lazada/40.png similarity index 100% rename from static/img/e-commerce/lazada/40.png rename to static/img/integration/e-commerce/lazada/40.png diff --git a/static/img/e-commerce/lazada/41.png b/static/img/integration/e-commerce/lazada/41.png similarity index 100% rename from static/img/e-commerce/lazada/41.png rename to static/img/integration/e-commerce/lazada/41.png diff --git a/static/img/e-commerce/lazada/42.png b/static/img/integration/e-commerce/lazada/42.png similarity index 100% rename from static/img/e-commerce/lazada/42.png rename to static/img/integration/e-commerce/lazada/42.png diff --git a/static/img/e-commerce/lazada/43.png b/static/img/integration/e-commerce/lazada/43.png similarity index 100% rename from static/img/e-commerce/lazada/43.png rename to static/img/integration/e-commerce/lazada/43.png diff --git a/static/img/e-commerce/lazada/44.png b/static/img/integration/e-commerce/lazada/44.png similarity index 100% rename from static/img/e-commerce/lazada/44.png rename to static/img/integration/e-commerce/lazada/44.png diff --git a/static/img/e-commerce/lazada/45.png b/static/img/integration/e-commerce/lazada/45.png similarity index 100% rename from static/img/e-commerce/lazada/45.png rename to static/img/integration/e-commerce/lazada/45.png diff --git a/static/img/e-commerce/lazada/46.png b/static/img/integration/e-commerce/lazada/46.png similarity index 100% rename from static/img/e-commerce/lazada/46.png rename to static/img/integration/e-commerce/lazada/46.png diff --git a/static/img/e-commerce/lazada/47.png b/static/img/integration/e-commerce/lazada/47.png similarity index 100% rename from static/img/e-commerce/lazada/47.png rename to static/img/integration/e-commerce/lazada/47.png diff --git a/static/img/e-commerce/lazada/48.png b/static/img/integration/e-commerce/lazada/48.png similarity index 100% rename from static/img/e-commerce/lazada/48.png rename to static/img/integration/e-commerce/lazada/48.png diff --git a/static/img/e-commerce/lazada/49.png b/static/img/integration/e-commerce/lazada/49.png similarity index 100% rename from static/img/e-commerce/lazada/49.png rename to static/img/integration/e-commerce/lazada/49.png diff --git a/static/img/e-commerce/lazada/5.png b/static/img/integration/e-commerce/lazada/5.png similarity index 100% rename from static/img/e-commerce/lazada/5.png rename to static/img/integration/e-commerce/lazada/5.png diff --git a/static/img/e-commerce/lazada/50.png b/static/img/integration/e-commerce/lazada/50.png similarity index 100% rename from static/img/e-commerce/lazada/50.png rename to static/img/integration/e-commerce/lazada/50.png diff --git a/static/img/e-commerce/lazada/51.png b/static/img/integration/e-commerce/lazada/51.png similarity index 100% rename from static/img/e-commerce/lazada/51.png rename to static/img/integration/e-commerce/lazada/51.png diff --git a/static/img/e-commerce/lazada/52.png b/static/img/integration/e-commerce/lazada/52.png similarity index 100% rename from static/img/e-commerce/lazada/52.png rename to static/img/integration/e-commerce/lazada/52.png diff --git a/static/img/e-commerce/lazada/53.png b/static/img/integration/e-commerce/lazada/53.png similarity index 100% rename from static/img/e-commerce/lazada/53.png rename to static/img/integration/e-commerce/lazada/53.png diff --git a/static/img/e-commerce/lazada/54.png b/static/img/integration/e-commerce/lazada/54.png similarity index 100% rename from static/img/e-commerce/lazada/54.png rename to static/img/integration/e-commerce/lazada/54.png diff --git a/static/img/e-commerce/lazada/55.png b/static/img/integration/e-commerce/lazada/55.png similarity index 100% rename from static/img/e-commerce/lazada/55.png rename to static/img/integration/e-commerce/lazada/55.png diff --git a/static/img/e-commerce/lazada/56.png b/static/img/integration/e-commerce/lazada/56.png similarity index 100% rename from static/img/e-commerce/lazada/56.png rename to static/img/integration/e-commerce/lazada/56.png diff --git a/static/img/e-commerce/lazada/57.png b/static/img/integration/e-commerce/lazada/57.png similarity index 100% rename from static/img/e-commerce/lazada/57.png rename to static/img/integration/e-commerce/lazada/57.png diff --git a/static/img/e-commerce/lazada/58.png b/static/img/integration/e-commerce/lazada/58.png similarity index 100% rename from static/img/e-commerce/lazada/58.png rename to static/img/integration/e-commerce/lazada/58.png diff --git a/static/img/e-commerce/lazada/59.png b/static/img/integration/e-commerce/lazada/59.png similarity index 100% rename from static/img/e-commerce/lazada/59.png rename to static/img/integration/e-commerce/lazada/59.png diff --git a/static/img/e-commerce/lazada/6.png b/static/img/integration/e-commerce/lazada/6.png similarity index 100% rename from static/img/e-commerce/lazada/6.png rename to static/img/integration/e-commerce/lazada/6.png diff --git a/static/img/e-commerce/lazada/60.png b/static/img/integration/e-commerce/lazada/60.png similarity index 100% rename from static/img/e-commerce/lazada/60.png rename to static/img/integration/e-commerce/lazada/60.png diff --git a/static/img/e-commerce/lazada/61.png b/static/img/integration/e-commerce/lazada/61.png similarity index 100% rename from static/img/e-commerce/lazada/61.png rename to static/img/integration/e-commerce/lazada/61.png diff --git a/static/img/e-commerce/lazada/62.png b/static/img/integration/e-commerce/lazada/62.png similarity index 100% rename from static/img/e-commerce/lazada/62.png rename to static/img/integration/e-commerce/lazada/62.png diff --git a/static/img/e-commerce/lazada/63.png b/static/img/integration/e-commerce/lazada/63.png similarity index 100% rename from static/img/e-commerce/lazada/63.png rename to static/img/integration/e-commerce/lazada/63.png diff --git a/static/img/e-commerce/lazada/64.png b/static/img/integration/e-commerce/lazada/64.png similarity index 100% rename from static/img/e-commerce/lazada/64.png rename to static/img/integration/e-commerce/lazada/64.png diff --git a/static/img/e-commerce/lazada/65.png b/static/img/integration/e-commerce/lazada/65.png similarity index 100% rename from static/img/e-commerce/lazada/65.png rename to static/img/integration/e-commerce/lazada/65.png diff --git a/static/img/e-commerce/lazada/66.png b/static/img/integration/e-commerce/lazada/66.png similarity index 100% rename from static/img/e-commerce/lazada/66.png rename to static/img/integration/e-commerce/lazada/66.png diff --git a/static/img/e-commerce/lazada/67.png b/static/img/integration/e-commerce/lazada/67.png similarity index 100% rename from static/img/e-commerce/lazada/67.png rename to static/img/integration/e-commerce/lazada/67.png diff --git a/static/img/e-commerce/lazada/68.png b/static/img/integration/e-commerce/lazada/68.png similarity index 100% rename from static/img/e-commerce/lazada/68.png rename to static/img/integration/e-commerce/lazada/68.png diff --git a/static/img/e-commerce/lazada/69.png b/static/img/integration/e-commerce/lazada/69.png similarity index 100% rename from static/img/e-commerce/lazada/69.png rename to static/img/integration/e-commerce/lazada/69.png diff --git a/static/img/e-commerce/lazada/7.png b/static/img/integration/e-commerce/lazada/7.png similarity index 100% rename from static/img/e-commerce/lazada/7.png rename to static/img/integration/e-commerce/lazada/7.png diff --git a/static/img/e-commerce/lazada/8.png b/static/img/integration/e-commerce/lazada/8.png similarity index 100% rename from static/img/e-commerce/lazada/8.png rename to static/img/integration/e-commerce/lazada/8.png diff --git a/static/img/e-commerce/lazada/9.png b/static/img/integration/e-commerce/lazada/9.png similarity index 100% rename from static/img/e-commerce/lazada/9.png rename to static/img/integration/e-commerce/lazada/9.png diff --git a/static/img/e-commerce/shopee/1.png b/static/img/integration/e-commerce/shopee/1.png similarity index 100% rename from static/img/e-commerce/shopee/1.png rename to static/img/integration/e-commerce/shopee/1.png diff --git a/static/img/e-commerce/shopee/10.png b/static/img/integration/e-commerce/shopee/10.png similarity index 100% rename from static/img/e-commerce/shopee/10.png rename to static/img/integration/e-commerce/shopee/10.png diff --git a/static/img/e-commerce/shopee/11.png b/static/img/integration/e-commerce/shopee/11.png similarity index 100% rename from static/img/e-commerce/shopee/11.png rename to static/img/integration/e-commerce/shopee/11.png diff --git a/static/img/e-commerce/shopee/12.png b/static/img/integration/e-commerce/shopee/12.png similarity index 100% rename from static/img/e-commerce/shopee/12.png rename to static/img/integration/e-commerce/shopee/12.png diff --git a/static/img/e-commerce/shopee/13.png b/static/img/integration/e-commerce/shopee/13.png similarity index 100% rename from static/img/e-commerce/shopee/13.png rename to static/img/integration/e-commerce/shopee/13.png diff --git a/static/img/e-commerce/shopee/14.png b/static/img/integration/e-commerce/shopee/14.png similarity index 100% rename from static/img/e-commerce/shopee/14.png rename to static/img/integration/e-commerce/shopee/14.png diff --git a/static/img/e-commerce/shopee/15.png b/static/img/integration/e-commerce/shopee/15.png similarity index 100% rename from static/img/e-commerce/shopee/15.png rename to static/img/integration/e-commerce/shopee/15.png diff --git a/static/img/e-commerce/shopee/16.png b/static/img/integration/e-commerce/shopee/16.png similarity index 100% rename from static/img/e-commerce/shopee/16.png rename to static/img/integration/e-commerce/shopee/16.png diff --git a/static/img/e-commerce/shopee/17.png b/static/img/integration/e-commerce/shopee/17.png similarity index 100% rename from static/img/e-commerce/shopee/17.png rename to static/img/integration/e-commerce/shopee/17.png diff --git a/static/img/e-commerce/shopee/18.png b/static/img/integration/e-commerce/shopee/18.png similarity index 100% rename from static/img/e-commerce/shopee/18.png rename to static/img/integration/e-commerce/shopee/18.png diff --git a/static/img/e-commerce/shopee/19.png b/static/img/integration/e-commerce/shopee/19.png similarity index 100% rename from static/img/e-commerce/shopee/19.png rename to static/img/integration/e-commerce/shopee/19.png diff --git a/static/img/e-commerce/shopee/2.png b/static/img/integration/e-commerce/shopee/2.png similarity index 100% rename from static/img/e-commerce/shopee/2.png rename to static/img/integration/e-commerce/shopee/2.png diff --git a/static/img/e-commerce/shopee/20.png b/static/img/integration/e-commerce/shopee/20.png similarity index 100% rename from static/img/e-commerce/shopee/20.png rename to static/img/integration/e-commerce/shopee/20.png diff --git a/static/img/e-commerce/shopee/21.png b/static/img/integration/e-commerce/shopee/21.png similarity index 100% rename from static/img/e-commerce/shopee/21.png rename to static/img/integration/e-commerce/shopee/21.png diff --git a/static/img/e-commerce/shopee/22.png b/static/img/integration/e-commerce/shopee/22.png similarity index 100% rename from static/img/e-commerce/shopee/22.png rename to static/img/integration/e-commerce/shopee/22.png diff --git a/static/img/e-commerce/shopee/23.png b/static/img/integration/e-commerce/shopee/23.png similarity index 100% rename from static/img/e-commerce/shopee/23.png rename to static/img/integration/e-commerce/shopee/23.png diff --git a/static/img/e-commerce/shopee/24.png b/static/img/integration/e-commerce/shopee/24.png similarity index 100% rename from static/img/e-commerce/shopee/24.png rename to static/img/integration/e-commerce/shopee/24.png diff --git a/static/img/e-commerce/shopee/25.png b/static/img/integration/e-commerce/shopee/25.png similarity index 100% rename from static/img/e-commerce/shopee/25.png rename to static/img/integration/e-commerce/shopee/25.png diff --git a/static/img/e-commerce/shopee/26.png b/static/img/integration/e-commerce/shopee/26.png similarity index 100% rename from static/img/e-commerce/shopee/26.png rename to static/img/integration/e-commerce/shopee/26.png diff --git a/static/img/e-commerce/shopee/27.png b/static/img/integration/e-commerce/shopee/27.png similarity index 100% rename from static/img/e-commerce/shopee/27.png rename to static/img/integration/e-commerce/shopee/27.png diff --git a/static/img/e-commerce/shopee/28.png b/static/img/integration/e-commerce/shopee/28.png similarity index 100% rename from static/img/e-commerce/shopee/28.png rename to static/img/integration/e-commerce/shopee/28.png diff --git a/static/img/e-commerce/shopee/29.png b/static/img/integration/e-commerce/shopee/29.png similarity index 100% rename from static/img/e-commerce/shopee/29.png rename to static/img/integration/e-commerce/shopee/29.png diff --git a/static/img/e-commerce/shopee/3.png b/static/img/integration/e-commerce/shopee/3.png similarity index 100% rename from static/img/e-commerce/shopee/3.png rename to static/img/integration/e-commerce/shopee/3.png diff --git a/static/img/e-commerce/shopee/30.png b/static/img/integration/e-commerce/shopee/30.png similarity index 100% rename from static/img/e-commerce/shopee/30.png rename to static/img/integration/e-commerce/shopee/30.png diff --git a/static/img/e-commerce/shopee/31.png b/static/img/integration/e-commerce/shopee/31.png similarity index 100% rename from static/img/e-commerce/shopee/31.png rename to static/img/integration/e-commerce/shopee/31.png diff --git a/static/img/e-commerce/shopee/32.png b/static/img/integration/e-commerce/shopee/32.png similarity index 100% rename from static/img/e-commerce/shopee/32.png rename to static/img/integration/e-commerce/shopee/32.png diff --git a/static/img/e-commerce/shopee/33.png b/static/img/integration/e-commerce/shopee/33.png similarity index 100% rename from static/img/e-commerce/shopee/33.png rename to static/img/integration/e-commerce/shopee/33.png diff --git a/static/img/e-commerce/shopee/34.png b/static/img/integration/e-commerce/shopee/34.png similarity index 100% rename from static/img/e-commerce/shopee/34.png rename to static/img/integration/e-commerce/shopee/34.png diff --git a/static/img/e-commerce/shopee/35.png b/static/img/integration/e-commerce/shopee/35.png similarity index 100% rename from static/img/e-commerce/shopee/35.png rename to static/img/integration/e-commerce/shopee/35.png diff --git a/static/img/e-commerce/shopee/36.png b/static/img/integration/e-commerce/shopee/36.png similarity index 100% rename from static/img/e-commerce/shopee/36.png rename to static/img/integration/e-commerce/shopee/36.png diff --git a/static/img/e-commerce/shopee/37.png b/static/img/integration/e-commerce/shopee/37.png similarity index 100% rename from static/img/e-commerce/shopee/37.png rename to static/img/integration/e-commerce/shopee/37.png diff --git a/static/img/e-commerce/shopee/38.png b/static/img/integration/e-commerce/shopee/38.png similarity index 100% rename from static/img/e-commerce/shopee/38.png rename to static/img/integration/e-commerce/shopee/38.png diff --git a/static/img/e-commerce/shopee/39.png b/static/img/integration/e-commerce/shopee/39.png similarity index 100% rename from static/img/e-commerce/shopee/39.png rename to static/img/integration/e-commerce/shopee/39.png diff --git a/static/img/e-commerce/shopee/4.png b/static/img/integration/e-commerce/shopee/4.png similarity index 100% rename from static/img/e-commerce/shopee/4.png rename to static/img/integration/e-commerce/shopee/4.png diff --git a/static/img/e-commerce/shopee/40.png b/static/img/integration/e-commerce/shopee/40.png similarity index 100% rename from static/img/e-commerce/shopee/40.png rename to static/img/integration/e-commerce/shopee/40.png diff --git a/static/img/e-commerce/shopee/41.png b/static/img/integration/e-commerce/shopee/41.png similarity index 100% rename from static/img/e-commerce/shopee/41.png rename to static/img/integration/e-commerce/shopee/41.png diff --git a/static/img/e-commerce/shopee/42.png b/static/img/integration/e-commerce/shopee/42.png similarity index 100% rename from static/img/e-commerce/shopee/42.png rename to static/img/integration/e-commerce/shopee/42.png diff --git a/static/img/e-commerce/shopee/43.png b/static/img/integration/e-commerce/shopee/43.png similarity index 100% rename from static/img/e-commerce/shopee/43.png rename to static/img/integration/e-commerce/shopee/43.png diff --git a/static/img/e-commerce/shopee/44.png b/static/img/integration/e-commerce/shopee/44.png similarity index 100% rename from static/img/e-commerce/shopee/44.png rename to static/img/integration/e-commerce/shopee/44.png diff --git a/static/img/e-commerce/shopee/45.png b/static/img/integration/e-commerce/shopee/45.png similarity index 100% rename from static/img/e-commerce/shopee/45.png rename to static/img/integration/e-commerce/shopee/45.png diff --git a/static/img/e-commerce/shopee/46.png b/static/img/integration/e-commerce/shopee/46.png similarity index 100% rename from static/img/e-commerce/shopee/46.png rename to static/img/integration/e-commerce/shopee/46.png diff --git a/static/img/e-commerce/shopee/47.png b/static/img/integration/e-commerce/shopee/47.png similarity index 100% rename from static/img/e-commerce/shopee/47.png rename to static/img/integration/e-commerce/shopee/47.png diff --git a/static/img/e-commerce/shopee/48.png b/static/img/integration/e-commerce/shopee/48.png similarity index 100% rename from static/img/e-commerce/shopee/48.png rename to static/img/integration/e-commerce/shopee/48.png diff --git a/static/img/e-commerce/shopee/49.png b/static/img/integration/e-commerce/shopee/49.png similarity index 100% rename from static/img/e-commerce/shopee/49.png rename to static/img/integration/e-commerce/shopee/49.png diff --git a/static/img/e-commerce/shopee/5.png b/static/img/integration/e-commerce/shopee/5.png similarity index 100% rename from static/img/e-commerce/shopee/5.png rename to static/img/integration/e-commerce/shopee/5.png diff --git a/static/img/e-commerce/shopee/50.png b/static/img/integration/e-commerce/shopee/50.png similarity index 100% rename from static/img/e-commerce/shopee/50.png rename to static/img/integration/e-commerce/shopee/50.png diff --git a/static/img/e-commerce/shopee/51.png b/static/img/integration/e-commerce/shopee/51.png similarity index 100% rename from static/img/e-commerce/shopee/51.png rename to static/img/integration/e-commerce/shopee/51.png diff --git a/static/img/e-commerce/shopee/52.png b/static/img/integration/e-commerce/shopee/52.png similarity index 100% rename from static/img/e-commerce/shopee/52.png rename to static/img/integration/e-commerce/shopee/52.png diff --git a/static/img/e-commerce/shopee/53.png b/static/img/integration/e-commerce/shopee/53.png similarity index 100% rename from static/img/e-commerce/shopee/53.png rename to static/img/integration/e-commerce/shopee/53.png diff --git a/static/img/e-commerce/shopee/54.png b/static/img/integration/e-commerce/shopee/54.png similarity index 100% rename from static/img/e-commerce/shopee/54.png rename to static/img/integration/e-commerce/shopee/54.png diff --git a/static/img/e-commerce/shopee/55.png b/static/img/integration/e-commerce/shopee/55.png similarity index 100% rename from static/img/e-commerce/shopee/55.png rename to static/img/integration/e-commerce/shopee/55.png diff --git a/static/img/e-commerce/shopee/56.png b/static/img/integration/e-commerce/shopee/56.png similarity index 100% rename from static/img/e-commerce/shopee/56.png rename to static/img/integration/e-commerce/shopee/56.png diff --git a/static/img/e-commerce/shopee/57.png b/static/img/integration/e-commerce/shopee/57.png similarity index 100% rename from static/img/e-commerce/shopee/57.png rename to static/img/integration/e-commerce/shopee/57.png diff --git a/static/img/e-commerce/shopee/58.png b/static/img/integration/e-commerce/shopee/58.png similarity index 100% rename from static/img/e-commerce/shopee/58.png rename to static/img/integration/e-commerce/shopee/58.png diff --git a/static/img/e-commerce/shopee/59.png b/static/img/integration/e-commerce/shopee/59.png similarity index 100% rename from static/img/e-commerce/shopee/59.png rename to static/img/integration/e-commerce/shopee/59.png diff --git a/static/img/e-commerce/shopee/6.png b/static/img/integration/e-commerce/shopee/6.png similarity index 100% rename from static/img/e-commerce/shopee/6.png rename to static/img/integration/e-commerce/shopee/6.png diff --git a/static/img/e-commerce/shopee/7.png b/static/img/integration/e-commerce/shopee/7.png similarity index 100% rename from static/img/e-commerce/shopee/7.png rename to static/img/integration/e-commerce/shopee/7.png diff --git a/static/img/e-commerce/shopee/8.png b/static/img/integration/e-commerce/shopee/8.png similarity index 100% rename from static/img/e-commerce/shopee/8.png rename to static/img/integration/e-commerce/shopee/8.png diff --git a/static/img/e-commerce/shopee/9.png b/static/img/integration/e-commerce/shopee/9.png similarity index 100% rename from static/img/e-commerce/shopee/9.png rename to static/img/integration/e-commerce/shopee/9.png diff --git a/static/img/e-commerce/tiktok/1.png b/static/img/integration/e-commerce/tiktok/1.png similarity index 100% rename from static/img/e-commerce/tiktok/1.png rename to static/img/integration/e-commerce/tiktok/1.png diff --git a/static/img/e-commerce/tiktok/10.png b/static/img/integration/e-commerce/tiktok/10.png similarity index 100% rename from static/img/e-commerce/tiktok/10.png rename to static/img/integration/e-commerce/tiktok/10.png diff --git a/static/img/e-commerce/tiktok/11.png b/static/img/integration/e-commerce/tiktok/11.png similarity index 100% rename from static/img/e-commerce/tiktok/11.png rename to static/img/integration/e-commerce/tiktok/11.png diff --git a/static/img/e-commerce/tiktok/12.png b/static/img/integration/e-commerce/tiktok/12.png similarity index 100% rename from static/img/e-commerce/tiktok/12.png rename to static/img/integration/e-commerce/tiktok/12.png diff --git a/static/img/e-commerce/tiktok/13.png b/static/img/integration/e-commerce/tiktok/13.png similarity index 100% rename from static/img/e-commerce/tiktok/13.png rename to static/img/integration/e-commerce/tiktok/13.png diff --git a/static/img/e-commerce/tiktok/14.png b/static/img/integration/e-commerce/tiktok/14.png similarity index 100% rename from static/img/e-commerce/tiktok/14.png rename to static/img/integration/e-commerce/tiktok/14.png diff --git a/static/img/e-commerce/tiktok/15.png b/static/img/integration/e-commerce/tiktok/15.png similarity index 100% rename from static/img/e-commerce/tiktok/15.png rename to static/img/integration/e-commerce/tiktok/15.png diff --git a/static/img/e-commerce/tiktok/16.png b/static/img/integration/e-commerce/tiktok/16.png similarity index 100% rename from static/img/e-commerce/tiktok/16.png rename to static/img/integration/e-commerce/tiktok/16.png diff --git a/static/img/e-commerce/tiktok/17.png b/static/img/integration/e-commerce/tiktok/17.png similarity index 100% rename from static/img/e-commerce/tiktok/17.png rename to static/img/integration/e-commerce/tiktok/17.png diff --git a/static/img/e-commerce/tiktok/18.png b/static/img/integration/e-commerce/tiktok/18.png similarity index 100% rename from static/img/e-commerce/tiktok/18.png rename to static/img/integration/e-commerce/tiktok/18.png diff --git a/static/img/e-commerce/tiktok/19.png b/static/img/integration/e-commerce/tiktok/19.png similarity index 100% rename from static/img/e-commerce/tiktok/19.png rename to static/img/integration/e-commerce/tiktok/19.png diff --git a/static/img/e-commerce/tiktok/2.png b/static/img/integration/e-commerce/tiktok/2.png similarity index 100% rename from static/img/e-commerce/tiktok/2.png rename to static/img/integration/e-commerce/tiktok/2.png diff --git a/static/img/e-commerce/tiktok/20.png b/static/img/integration/e-commerce/tiktok/20.png similarity index 100% rename from static/img/e-commerce/tiktok/20.png rename to static/img/integration/e-commerce/tiktok/20.png diff --git a/static/img/e-commerce/tiktok/21.png b/static/img/integration/e-commerce/tiktok/21.png similarity index 100% rename from static/img/e-commerce/tiktok/21.png rename to static/img/integration/e-commerce/tiktok/21.png diff --git a/static/img/e-commerce/tiktok/22.png b/static/img/integration/e-commerce/tiktok/22.png similarity index 100% rename from static/img/e-commerce/tiktok/22.png rename to static/img/integration/e-commerce/tiktok/22.png diff --git a/static/img/e-commerce/tiktok/23.png b/static/img/integration/e-commerce/tiktok/23.png similarity index 100% rename from static/img/e-commerce/tiktok/23.png rename to static/img/integration/e-commerce/tiktok/23.png diff --git a/static/img/e-commerce/tiktok/24.png b/static/img/integration/e-commerce/tiktok/24.png similarity index 100% rename from static/img/e-commerce/tiktok/24.png rename to static/img/integration/e-commerce/tiktok/24.png diff --git a/static/img/e-commerce/tiktok/25.png b/static/img/integration/e-commerce/tiktok/25.png similarity index 100% rename from static/img/e-commerce/tiktok/25.png rename to static/img/integration/e-commerce/tiktok/25.png diff --git a/static/img/e-commerce/tiktok/26.png b/static/img/integration/e-commerce/tiktok/26.png similarity index 100% rename from static/img/e-commerce/tiktok/26.png rename to static/img/integration/e-commerce/tiktok/26.png diff --git a/static/img/e-commerce/tiktok/27.png b/static/img/integration/e-commerce/tiktok/27.png similarity index 100% rename from static/img/e-commerce/tiktok/27.png rename to static/img/integration/e-commerce/tiktok/27.png diff --git a/static/img/e-commerce/tiktok/28.png b/static/img/integration/e-commerce/tiktok/28.png similarity index 100% rename from static/img/e-commerce/tiktok/28.png rename to static/img/integration/e-commerce/tiktok/28.png diff --git a/static/img/e-commerce/tiktok/29.png b/static/img/integration/e-commerce/tiktok/29.png similarity index 100% rename from static/img/e-commerce/tiktok/29.png rename to static/img/integration/e-commerce/tiktok/29.png diff --git a/static/img/e-commerce/tiktok/3.png b/static/img/integration/e-commerce/tiktok/3.png similarity index 100% rename from static/img/e-commerce/tiktok/3.png rename to static/img/integration/e-commerce/tiktok/3.png diff --git a/static/img/e-commerce/tiktok/30.png b/static/img/integration/e-commerce/tiktok/30.png similarity index 100% rename from static/img/e-commerce/tiktok/30.png rename to static/img/integration/e-commerce/tiktok/30.png diff --git a/static/img/e-commerce/tiktok/31.png b/static/img/integration/e-commerce/tiktok/31.png similarity index 100% rename from static/img/e-commerce/tiktok/31.png rename to static/img/integration/e-commerce/tiktok/31.png diff --git a/static/img/e-commerce/tiktok/32.png b/static/img/integration/e-commerce/tiktok/32.png similarity index 100% rename from static/img/e-commerce/tiktok/32.png rename to static/img/integration/e-commerce/tiktok/32.png diff --git a/static/img/e-commerce/tiktok/33.png b/static/img/integration/e-commerce/tiktok/33.png similarity index 100% rename from static/img/e-commerce/tiktok/33.png rename to static/img/integration/e-commerce/tiktok/33.png diff --git a/static/img/e-commerce/tiktok/34.png b/static/img/integration/e-commerce/tiktok/34.png similarity index 100% rename from static/img/e-commerce/tiktok/34.png rename to static/img/integration/e-commerce/tiktok/34.png diff --git a/static/img/e-commerce/tiktok/35.png b/static/img/integration/e-commerce/tiktok/35.png similarity index 100% rename from static/img/e-commerce/tiktok/35.png rename to static/img/integration/e-commerce/tiktok/35.png diff --git a/static/img/e-commerce/tiktok/36.png b/static/img/integration/e-commerce/tiktok/36.png similarity index 100% rename from static/img/e-commerce/tiktok/36.png rename to static/img/integration/e-commerce/tiktok/36.png diff --git a/static/img/e-commerce/tiktok/37.png b/static/img/integration/e-commerce/tiktok/37.png similarity index 100% rename from static/img/e-commerce/tiktok/37.png rename to static/img/integration/e-commerce/tiktok/37.png diff --git a/static/img/e-commerce/tiktok/38.png b/static/img/integration/e-commerce/tiktok/38.png similarity index 100% rename from static/img/e-commerce/tiktok/38.png rename to static/img/integration/e-commerce/tiktok/38.png diff --git a/static/img/e-commerce/tiktok/39.png b/static/img/integration/e-commerce/tiktok/39.png similarity index 100% rename from static/img/e-commerce/tiktok/39.png rename to static/img/integration/e-commerce/tiktok/39.png diff --git a/static/img/e-commerce/tiktok/4.png b/static/img/integration/e-commerce/tiktok/4.png similarity index 100% rename from static/img/e-commerce/tiktok/4.png rename to static/img/integration/e-commerce/tiktok/4.png diff --git a/static/img/e-commerce/tiktok/40.png b/static/img/integration/e-commerce/tiktok/40.png similarity index 100% rename from static/img/e-commerce/tiktok/40.png rename to static/img/integration/e-commerce/tiktok/40.png diff --git a/static/img/e-commerce/tiktok/41.png b/static/img/integration/e-commerce/tiktok/41.png similarity index 100% rename from static/img/e-commerce/tiktok/41.png rename to static/img/integration/e-commerce/tiktok/41.png diff --git a/static/img/e-commerce/tiktok/42.png b/static/img/integration/e-commerce/tiktok/42.png similarity index 100% rename from static/img/e-commerce/tiktok/42.png rename to static/img/integration/e-commerce/tiktok/42.png diff --git a/static/img/e-commerce/tiktok/43.png b/static/img/integration/e-commerce/tiktok/43.png similarity index 100% rename from static/img/e-commerce/tiktok/43.png rename to static/img/integration/e-commerce/tiktok/43.png diff --git a/static/img/e-commerce/tiktok/44.png b/static/img/integration/e-commerce/tiktok/44.png similarity index 100% rename from static/img/e-commerce/tiktok/44.png rename to static/img/integration/e-commerce/tiktok/44.png diff --git a/static/img/e-commerce/tiktok/45.png b/static/img/integration/e-commerce/tiktok/45.png similarity index 100% rename from static/img/e-commerce/tiktok/45.png rename to static/img/integration/e-commerce/tiktok/45.png diff --git a/static/img/e-commerce/tiktok/46.png b/static/img/integration/e-commerce/tiktok/46.png similarity index 100% rename from static/img/e-commerce/tiktok/46.png rename to static/img/integration/e-commerce/tiktok/46.png diff --git a/static/img/e-commerce/tiktok/47.png b/static/img/integration/e-commerce/tiktok/47.png similarity index 100% rename from static/img/e-commerce/tiktok/47.png rename to static/img/integration/e-commerce/tiktok/47.png diff --git a/static/img/e-commerce/tiktok/48.png b/static/img/integration/e-commerce/tiktok/48.png similarity index 100% rename from static/img/e-commerce/tiktok/48.png rename to static/img/integration/e-commerce/tiktok/48.png diff --git a/static/img/e-commerce/tiktok/49.png b/static/img/integration/e-commerce/tiktok/49.png similarity index 100% rename from static/img/e-commerce/tiktok/49.png rename to static/img/integration/e-commerce/tiktok/49.png diff --git a/static/img/e-commerce/tiktok/5.png b/static/img/integration/e-commerce/tiktok/5.png similarity index 100% rename from static/img/e-commerce/tiktok/5.png rename to static/img/integration/e-commerce/tiktok/5.png diff --git a/static/img/e-commerce/tiktok/50.png b/static/img/integration/e-commerce/tiktok/50.png similarity index 100% rename from static/img/e-commerce/tiktok/50.png rename to static/img/integration/e-commerce/tiktok/50.png diff --git a/static/img/e-commerce/tiktok/6.png b/static/img/integration/e-commerce/tiktok/6.png similarity index 100% rename from static/img/e-commerce/tiktok/6.png rename to static/img/integration/e-commerce/tiktok/6.png diff --git a/static/img/e-commerce/tiktok/7.png b/static/img/integration/e-commerce/tiktok/7.png similarity index 100% rename from static/img/e-commerce/tiktok/7.png rename to static/img/integration/e-commerce/tiktok/7.png diff --git a/static/img/e-commerce/tiktok/8.png b/static/img/integration/e-commerce/tiktok/8.png similarity index 100% rename from static/img/e-commerce/tiktok/8.png rename to static/img/integration/e-commerce/tiktok/8.png diff --git a/static/img/e-commerce/tiktok/9.png b/static/img/integration/e-commerce/tiktok/9.png similarity index 100% rename from static/img/e-commerce/tiktok/9.png rename to static/img/integration/e-commerce/tiktok/9.png diff --git a/static/img/e-commerce/woo/1.png b/static/img/integration/e-commerce/woo/1.png similarity index 100% rename from static/img/e-commerce/woo/1.png rename to static/img/integration/e-commerce/woo/1.png diff --git a/static/img/e-commerce/woo/10.png b/static/img/integration/e-commerce/woo/10.png similarity index 100% rename from static/img/e-commerce/woo/10.png rename to static/img/integration/e-commerce/woo/10.png diff --git a/static/img/e-commerce/woo/11.png b/static/img/integration/e-commerce/woo/11.png similarity index 100% rename from static/img/e-commerce/woo/11.png rename to static/img/integration/e-commerce/woo/11.png diff --git a/static/img/e-commerce/woo/12.png b/static/img/integration/e-commerce/woo/12.png similarity index 100% rename from static/img/e-commerce/woo/12.png rename to static/img/integration/e-commerce/woo/12.png diff --git a/static/img/e-commerce/woo/13.png b/static/img/integration/e-commerce/woo/13.png similarity index 100% rename from static/img/e-commerce/woo/13.png rename to static/img/integration/e-commerce/woo/13.png diff --git a/static/img/e-commerce/woo/14.png b/static/img/integration/e-commerce/woo/14.png similarity index 100% rename from static/img/e-commerce/woo/14.png rename to static/img/integration/e-commerce/woo/14.png diff --git a/static/img/e-commerce/woo/15.png b/static/img/integration/e-commerce/woo/15.png similarity index 100% rename from static/img/e-commerce/woo/15.png rename to static/img/integration/e-commerce/woo/15.png diff --git a/static/img/e-commerce/woo/16.png b/static/img/integration/e-commerce/woo/16.png similarity index 100% rename from static/img/e-commerce/woo/16.png rename to static/img/integration/e-commerce/woo/16.png diff --git a/static/img/e-commerce/woo/17.png b/static/img/integration/e-commerce/woo/17.png similarity index 100% rename from static/img/e-commerce/woo/17.png rename to static/img/integration/e-commerce/woo/17.png diff --git a/static/img/e-commerce/woo/18.png b/static/img/integration/e-commerce/woo/18.png similarity index 100% rename from static/img/e-commerce/woo/18.png rename to static/img/integration/e-commerce/woo/18.png diff --git a/static/img/e-commerce/woo/19.png b/static/img/integration/e-commerce/woo/19.png similarity index 100% rename from static/img/e-commerce/woo/19.png rename to static/img/integration/e-commerce/woo/19.png diff --git a/static/img/e-commerce/woo/2.png b/static/img/integration/e-commerce/woo/2.png similarity index 100% rename from static/img/e-commerce/woo/2.png rename to static/img/integration/e-commerce/woo/2.png diff --git a/static/img/e-commerce/woo/20.png b/static/img/integration/e-commerce/woo/20.png similarity index 100% rename from static/img/e-commerce/woo/20.png rename to static/img/integration/e-commerce/woo/20.png diff --git a/static/img/e-commerce/woo/21.png b/static/img/integration/e-commerce/woo/21.png similarity index 100% rename from static/img/e-commerce/woo/21.png rename to static/img/integration/e-commerce/woo/21.png diff --git a/static/img/e-commerce/woo/22.png b/static/img/integration/e-commerce/woo/22.png similarity index 100% rename from static/img/e-commerce/woo/22.png rename to static/img/integration/e-commerce/woo/22.png diff --git a/static/img/e-commerce/woo/23.png b/static/img/integration/e-commerce/woo/23.png similarity index 100% rename from static/img/e-commerce/woo/23.png rename to static/img/integration/e-commerce/woo/23.png diff --git a/static/img/e-commerce/woo/24.png b/static/img/integration/e-commerce/woo/24.png similarity index 100% rename from static/img/e-commerce/woo/24.png rename to static/img/integration/e-commerce/woo/24.png diff --git a/static/img/e-commerce/woo/25.png b/static/img/integration/e-commerce/woo/25.png similarity index 100% rename from static/img/e-commerce/woo/25.png rename to static/img/integration/e-commerce/woo/25.png diff --git a/static/img/e-commerce/woo/26.png b/static/img/integration/e-commerce/woo/26.png similarity index 100% rename from static/img/e-commerce/woo/26.png rename to static/img/integration/e-commerce/woo/26.png diff --git a/static/img/e-commerce/woo/27.png b/static/img/integration/e-commerce/woo/27.png similarity index 100% rename from static/img/e-commerce/woo/27.png rename to static/img/integration/e-commerce/woo/27.png diff --git a/static/img/e-commerce/woo/28.png b/static/img/integration/e-commerce/woo/28.png similarity index 100% rename from static/img/e-commerce/woo/28.png rename to static/img/integration/e-commerce/woo/28.png diff --git a/static/img/e-commerce/woo/29.png b/static/img/integration/e-commerce/woo/29.png similarity index 100% rename from static/img/e-commerce/woo/29.png rename to static/img/integration/e-commerce/woo/29.png diff --git a/static/img/e-commerce/woo/3.png b/static/img/integration/e-commerce/woo/3.png similarity index 100% rename from static/img/e-commerce/woo/3.png rename to static/img/integration/e-commerce/woo/3.png diff --git a/static/img/e-commerce/woo/30.png b/static/img/integration/e-commerce/woo/30.png similarity index 100% rename from static/img/e-commerce/woo/30.png rename to static/img/integration/e-commerce/woo/30.png diff --git a/static/img/e-commerce/woo/31.png b/static/img/integration/e-commerce/woo/31.png similarity index 100% rename from static/img/e-commerce/woo/31.png rename to static/img/integration/e-commerce/woo/31.png diff --git a/static/img/e-commerce/woo/32.png b/static/img/integration/e-commerce/woo/32.png similarity index 100% rename from static/img/e-commerce/woo/32.png rename to static/img/integration/e-commerce/woo/32.png diff --git a/static/img/e-commerce/woo/33.png b/static/img/integration/e-commerce/woo/33.png similarity index 100% rename from static/img/e-commerce/woo/33.png rename to static/img/integration/e-commerce/woo/33.png diff --git a/static/img/e-commerce/woo/34.png b/static/img/integration/e-commerce/woo/34.png similarity index 100% rename from static/img/e-commerce/woo/34.png rename to static/img/integration/e-commerce/woo/34.png diff --git a/static/img/e-commerce/woo/35.png b/static/img/integration/e-commerce/woo/35.png similarity index 100% rename from static/img/e-commerce/woo/35.png rename to static/img/integration/e-commerce/woo/35.png diff --git a/static/img/e-commerce/woo/36.png b/static/img/integration/e-commerce/woo/36.png similarity index 100% rename from static/img/e-commerce/woo/36.png rename to static/img/integration/e-commerce/woo/36.png diff --git a/static/img/e-commerce/woo/37.png b/static/img/integration/e-commerce/woo/37.png similarity index 100% rename from static/img/e-commerce/woo/37.png rename to static/img/integration/e-commerce/woo/37.png diff --git a/static/img/e-commerce/woo/38.png b/static/img/integration/e-commerce/woo/38.png similarity index 100% rename from static/img/e-commerce/woo/38.png rename to static/img/integration/e-commerce/woo/38.png diff --git a/static/img/e-commerce/woo/39.png b/static/img/integration/e-commerce/woo/39.png similarity index 100% rename from static/img/e-commerce/woo/39.png rename to static/img/integration/e-commerce/woo/39.png diff --git a/static/img/e-commerce/woo/4.png b/static/img/integration/e-commerce/woo/4.png similarity index 100% rename from static/img/e-commerce/woo/4.png rename to static/img/integration/e-commerce/woo/4.png diff --git a/static/img/e-commerce/woo/40.png b/static/img/integration/e-commerce/woo/40.png similarity index 100% rename from static/img/e-commerce/woo/40.png rename to static/img/integration/e-commerce/woo/40.png diff --git a/static/img/e-commerce/woo/41.png b/static/img/integration/e-commerce/woo/41.png similarity index 100% rename from static/img/e-commerce/woo/41.png rename to static/img/integration/e-commerce/woo/41.png diff --git a/static/img/e-commerce/woo/42.png b/static/img/integration/e-commerce/woo/42.png similarity index 100% rename from static/img/e-commerce/woo/42.png rename to static/img/integration/e-commerce/woo/42.png diff --git a/static/img/e-commerce/woo/43.png b/static/img/integration/e-commerce/woo/43.png similarity index 100% rename from static/img/e-commerce/woo/43.png rename to static/img/integration/e-commerce/woo/43.png diff --git a/static/img/e-commerce/woo/44.png b/static/img/integration/e-commerce/woo/44.png similarity index 100% rename from static/img/e-commerce/woo/44.png rename to static/img/integration/e-commerce/woo/44.png diff --git a/static/img/e-commerce/woo/5.png b/static/img/integration/e-commerce/woo/5.png similarity index 100% rename from static/img/e-commerce/woo/5.png rename to static/img/integration/e-commerce/woo/5.png diff --git a/static/img/e-commerce/woo/6.png b/static/img/integration/e-commerce/woo/6.png similarity index 100% rename from static/img/e-commerce/woo/6.png rename to static/img/integration/e-commerce/woo/6.png diff --git a/static/img/e-commerce/woo/7.png b/static/img/integration/e-commerce/woo/7.png similarity index 100% rename from static/img/e-commerce/woo/7.png rename to static/img/integration/e-commerce/woo/7.png diff --git a/static/img/e-commerce/woo/8.png b/static/img/integration/e-commerce/woo/8.png similarity index 100% rename from static/img/e-commerce/woo/8.png rename to static/img/integration/e-commerce/woo/8.png diff --git a/static/img/e-commerce/woo/9.png b/static/img/integration/e-commerce/woo/9.png similarity index 100% rename from static/img/e-commerce/woo/9.png rename to static/img/integration/e-commerce/woo/9.png diff --git a/static/img/pos/batch-module/1.png b/static/img/integration/pos/batch-module/batch-module.png similarity index 100% rename from static/img/pos/batch-module/1.png rename to static/img/integration/pos/batch-module/batch-module.png diff --git a/static/img/pos/batch-module/2.png b/static/img/integration/pos/batch-module/batch-module1.png similarity index 100% rename from static/img/pos/batch-module/2.png rename to static/img/integration/pos/batch-module/batch-module1.png diff --git a/static/img/pos/batch-module/3.png b/static/img/integration/pos/batch-module/batch-module2.png similarity index 100% rename from static/img/pos/batch-module/3.png rename to static/img/integration/pos/batch-module/batch-module2.png diff --git a/static/img/pos/batch-module/4.png b/static/img/integration/pos/batch-module/batch-module3.png similarity index 100% rename from static/img/pos/batch-module/4.png rename to static/img/integration/pos/batch-module/batch-module3.png diff --git a/static/img/pos/batch-module/5.png b/static/img/integration/pos/batch-module/batch-module4.png similarity index 100% rename from static/img/pos/batch-module/5.png rename to static/img/integration/pos/batch-module/batch-module4.png diff --git a/static/img/pos/batch-module/6.png b/static/img/integration/pos/batch-module/batch-module5.png similarity index 100% rename from static/img/pos/batch-module/6.png rename to static/img/integration/pos/batch-module/batch-module5.png diff --git a/static/img/pos/batch-module/7.png b/static/img/integration/pos/batch-module/batch-module6.png similarity index 100% rename from static/img/pos/batch-module/7.png rename to static/img/integration/pos/batch-module/batch-module6.png diff --git a/static/img/pos/category/1.png b/static/img/integration/pos/category/category-steps.png similarity index 100% rename from static/img/pos/category/1.png rename to static/img/integration/pos/category/category-steps.png diff --git a/static/img/pos/category/2.png b/static/img/integration/pos/category/category-steps1.png similarity index 100% rename from static/img/pos/category/2.png rename to static/img/integration/pos/category/category-steps1.png diff --git a/static/img/pos/category/3.png b/static/img/integration/pos/category/category-steps2.png similarity index 100% rename from static/img/pos/category/3.png rename to static/img/integration/pos/category/category-steps2.png diff --git a/static/img/pos/category/4.png b/static/img/integration/pos/category/category-steps3.png similarity index 100% rename from static/img/pos/category/4.png rename to static/img/integration/pos/category/category-steps3.png diff --git a/static/img/pos/category/5.png b/static/img/integration/pos/category/category-steps4.png similarity index 100% rename from static/img/pos/category/5.png rename to static/img/integration/pos/category/category-steps4.png diff --git a/static/img/integration/pos/intro/pos.png b/static/img/integration/pos/intro/pos.png new file mode 100644 index 00000000..136347cc Binary files /dev/null and b/static/img/integration/pos/intro/pos.png differ diff --git a/static/img/integration/pos/intro/pos2.png b/static/img/integration/pos/intro/pos2.png new file mode 100644 index 00000000..7797105f Binary files /dev/null and b/static/img/integration/pos/intro/pos2.png differ diff --git a/static/img/integration/pos/intro/pos3.png b/static/img/integration/pos/intro/pos3.png new file mode 100644 index 00000000..80015776 Binary files /dev/null and b/static/img/integration/pos/intro/pos3.png differ diff --git a/static/img/integration/pos/intro/system-system.png b/static/img/integration/pos/intro/system-system.png new file mode 100644 index 00000000..e21521cf Binary files /dev/null and b/static/img/integration/pos/intro/system-system.png differ diff --git a/static/img/pos/item-template/1.png b/static/img/integration/pos/item-template/pos-item-template.png similarity index 100% rename from static/img/pos/item-template/1.png rename to static/img/integration/pos/item-template/pos-item-template.png diff --git a/static/img/pos/item-template/2.png b/static/img/integration/pos/item-template/pos-item-template1.png similarity index 100% rename from static/img/pos/item-template/2.png rename to static/img/integration/pos/item-template/pos-item-template1.png diff --git a/static/img/pos/item-template/3.png b/static/img/integration/pos/item-template/pos-item-template2.png similarity index 100% rename from static/img/pos/item-template/3.png rename to static/img/integration/pos/item-template/pos-item-template2.png diff --git a/static/img/pos/item-template/4.png b/static/img/integration/pos/item-template/pos-item-template3.png similarity index 100% rename from static/img/pos/item-template/4.png rename to static/img/integration/pos/item-template/pos-item-template3.png diff --git a/static/img/pos/item-template/5.png b/static/img/integration/pos/item-template/pos-item-template4.png similarity index 100% rename from static/img/pos/item-template/5.png rename to static/img/integration/pos/item-template/pos-item-template4.png diff --git a/static/img/pos/item-template/6.png b/static/img/integration/pos/item-template/pos-item-template5.png similarity index 100% rename from static/img/pos/item-template/6.png rename to static/img/integration/pos/item-template/pos-item-template5.png diff --git a/static/img/pos/item-template/7.png b/static/img/integration/pos/item-template/pos-item-template6.png similarity index 100% rename from static/img/pos/item-template/7.png rename to static/img/integration/pos/item-template/pos-item-template6.png diff --git a/static/img/pos/item-template/8.png b/static/img/integration/pos/item-template/pos-item-template7.png similarity index 100% rename from static/img/pos/item-template/8.png rename to static/img/integration/pos/item-template/pos-item-template7.png diff --git a/static/img/pos/membership/25.png b/static/img/integration/pos/membership/access-right-generate-voucher.png similarity index 100% rename from static/img/pos/membership/25.png rename to static/img/integration/pos/membership/access-right-generate-voucher.png diff --git a/static/img/pos/membership/26.png b/static/img/integration/pos/membership/access-right-generate-voucher1.png similarity index 100% rename from static/img/pos/membership/26.png rename to static/img/integration/pos/membership/access-right-generate-voucher1.png diff --git a/static/img/pos/membership/10.png b/static/img/integration/pos/membership/add-members.png similarity index 100% rename from static/img/pos/membership/10.png rename to static/img/integration/pos/membership/add-members.png diff --git a/static/img/pos/membership/11.png b/static/img/integration/pos/membership/add-members1.png similarity index 100% rename from static/img/pos/membership/11.png rename to static/img/integration/pos/membership/add-members1.png diff --git a/static/img/pos/membership/12.png b/static/img/integration/pos/membership/add-members2.png similarity index 100% rename from static/img/pos/membership/12.png rename to static/img/integration/pos/membership/add-members2.png diff --git a/static/img/pos/membership/30.png b/static/img/integration/pos/membership/assign-member-price-tag.png similarity index 100% rename from static/img/pos/membership/30.png rename to static/img/integration/pos/membership/assign-member-price-tag.png diff --git a/static/img/pos/membership/31.png b/static/img/integration/pos/membership/assign-member-price-tag1.png similarity index 100% rename from static/img/pos/membership/31.png rename to static/img/integration/pos/membership/assign-member-price-tag1.png diff --git a/static/img/pos/membership/32.png b/static/img/integration/pos/membership/assign-member-price-tag2.png similarity index 100% rename from static/img/pos/membership/32.png rename to static/img/integration/pos/membership/assign-member-price-tag2.png diff --git a/static/img/pos/membership/14.png b/static/img/integration/pos/membership/check-member-history.png similarity index 100% rename from static/img/pos/membership/14.png rename to static/img/integration/pos/membership/check-member-history.png diff --git a/static/img/pos/membership/15.png b/static/img/integration/pos/membership/check-member-history1.png similarity index 100% rename from static/img/pos/membership/15.png rename to static/img/integration/pos/membership/check-member-history1.png diff --git a/static/img/pos/membership/24.png b/static/img/integration/pos/membership/generate-free-voucher.png similarity index 100% rename from static/img/pos/membership/24.png rename to static/img/integration/pos/membership/generate-free-voucher.png diff --git a/static/img/pos/membership/18.png b/static/img/integration/pos/membership/generate-voucher.png similarity index 100% rename from static/img/pos/membership/18.png rename to static/img/integration/pos/membership/generate-voucher.png diff --git a/static/img/pos/membership/19.png b/static/img/integration/pos/membership/generate-voucher1.png similarity index 100% rename from static/img/pos/membership/19.png rename to static/img/integration/pos/membership/generate-voucher1.png diff --git a/static/img/pos/membership/20.png b/static/img/integration/pos/membership/generate-voucher2.png similarity index 100% rename from static/img/pos/membership/20.png rename to static/img/integration/pos/membership/generate-voucher2.png diff --git a/static/img/pos/membership/21.png b/static/img/integration/pos/membership/generate-voucher3.png similarity index 100% rename from static/img/pos/membership/21.png rename to static/img/integration/pos/membership/generate-voucher3.png diff --git a/static/img/pos/membership/22.png b/static/img/integration/pos/membership/generate-voucher4.png similarity index 100% rename from static/img/pos/membership/22.png rename to static/img/integration/pos/membership/generate-voucher4.png diff --git a/static/img/pos/membership/23.png b/static/img/integration/pos/membership/generate-voucher5.png similarity index 100% rename from static/img/pos/membership/23.png rename to static/img/integration/pos/membership/generate-voucher5.png diff --git a/static/img/pos/membership/1.png b/static/img/integration/pos/membership/membership-setting.png similarity index 100% rename from static/img/pos/membership/1.png rename to static/img/integration/pos/membership/membership-setting.png diff --git a/static/img/pos/membership/2.png b/static/img/integration/pos/membership/membership-setting1.png similarity index 100% rename from static/img/pos/membership/2.png rename to static/img/integration/pos/membership/membership-setting1.png diff --git a/static/img/pos/membership/3.png b/static/img/integration/pos/membership/membership-setting2.png similarity index 100% rename from static/img/pos/membership/3.png rename to static/img/integration/pos/membership/membership-setting2.png diff --git a/static/img/pos/membership/4.png b/static/img/integration/pos/membership/membership-setting3.png similarity index 100% rename from static/img/pos/membership/4.png rename to static/img/integration/pos/membership/membership-setting3.png diff --git a/static/img/pos/membership/5.png b/static/img/integration/pos/membership/membership-setting4.png similarity index 100% rename from static/img/pos/membership/5.png rename to static/img/integration/pos/membership/membership-setting4.png diff --git a/static/img/pos/membership/13.png b/static/img/integration/pos/membership/search-members.png similarity index 100% rename from static/img/pos/membership/13.png rename to static/img/integration/pos/membership/search-members.png diff --git a/static/img/pos/membership/6.png b/static/img/integration/pos/membership/select-members.png similarity index 100% rename from static/img/pos/membership/6.png rename to static/img/integration/pos/membership/select-members.png diff --git a/static/img/pos/membership/7.png b/static/img/integration/pos/membership/select-members1.png similarity index 100% rename from static/img/pos/membership/7.png rename to static/img/integration/pos/membership/select-members1.png diff --git a/static/img/pos/membership/8.png b/static/img/integration/pos/membership/select-members2.png similarity index 100% rename from static/img/pos/membership/8.png rename to static/img/integration/pos/membership/select-members2.png diff --git a/static/img/pos/membership/9.png b/static/img/integration/pos/membership/select-members3.png similarity index 100% rename from static/img/pos/membership/9.png rename to static/img/integration/pos/membership/select-members3.png diff --git a/static/img/pos/membership/16.png b/static/img/integration/pos/membership/set-birthday-discount.png similarity index 100% rename from static/img/pos/membership/16.png rename to static/img/integration/pos/membership/set-birthday-discount.png diff --git a/static/img/pos/membership/17.png b/static/img/integration/pos/membership/set-birthday-discount1.png similarity index 100% rename from static/img/pos/membership/17.png rename to static/img/integration/pos/membership/set-birthday-discount1.png diff --git a/static/img/pos/membership/27.png b/static/img/integration/pos/membership/set-member-discount.png similarity index 100% rename from static/img/pos/membership/27.png rename to static/img/integration/pos/membership/set-member-discount.png diff --git a/static/img/pos/membership/28.png b/static/img/integration/pos/membership/set-member-discount1.png similarity index 100% rename from static/img/pos/membership/28.png rename to static/img/integration/pos/membership/set-member-discount1.png diff --git a/static/img/pos/membership/29.png b/static/img/integration/pos/membership/set-member-discount2.png similarity index 100% rename from static/img/pos/membership/29.png rename to static/img/integration/pos/membership/set-member-discount2.png diff --git a/static/img/pos/new-payment-method/1.png b/static/img/integration/pos/new-payment-method/new-payment-method-setting.png similarity index 100% rename from static/img/pos/new-payment-method/1.png rename to static/img/integration/pos/new-payment-method/new-payment-method-setting.png diff --git a/static/img/pos/new-payment-method/2.png b/static/img/integration/pos/new-payment-method/new-payment-method-setting1.png similarity index 100% rename from static/img/pos/new-payment-method/2.png rename to static/img/integration/pos/new-payment-method/new-payment-method-setting1.png diff --git a/static/img/pos/new-payment-method/3.png b/static/img/integration/pos/new-payment-method/new-payment-method-setting2.png similarity index 100% rename from static/img/pos/new-payment-method/3.png rename to static/img/integration/pos/new-payment-method/new-payment-method-setting2.png diff --git a/static/img/pos/new-payment-method/4.png b/static/img/integration/pos/new-payment-method/new-payment-method-setting3.png similarity index 100% rename from static/img/pos/new-payment-method/4.png rename to static/img/integration/pos/new-payment-method/new-payment-method-setting3.png diff --git a/static/img/pos/new-payment-method/5.png b/static/img/integration/pos/new-payment-method/new-payment-method-setting4.png similarity index 100% rename from static/img/pos/new-payment-method/5.png rename to static/img/integration/pos/new-payment-method/new-payment-method-setting4.png diff --git a/static/img/pos/new-payment-method/6.png b/static/img/integration/pos/new-payment-method/new-payment-method-setting5.png similarity index 100% rename from static/img/pos/new-payment-method/6.png rename to static/img/integration/pos/new-payment-method/new-payment-method-setting5.png diff --git a/static/img/pos/qna/31.png b/static/img/integration/pos/qna/counter-closed.png similarity index 100% rename from static/img/pos/qna/31.png rename to static/img/integration/pos/qna/counter-closed.png diff --git a/static/img/pos/qna/25.png b/static/img/integration/pos/qna/disable-preview-receipt.png similarity index 100% rename from static/img/pos/qna/25.png rename to static/img/integration/pos/qna/disable-preview-receipt.png diff --git a/static/img/pos/qna/26.png b/static/img/integration/pos/qna/disallow-user-return-stock.png similarity index 100% rename from static/img/pos/qna/26.png rename to static/img/integration/pos/qna/disallow-user-return-stock.png diff --git a/static/img/pos/qna/24.png b/static/img/integration/pos/qna/fail-assign-printer.png similarity index 100% rename from static/img/pos/qna/24.png rename to static/img/integration/pos/qna/fail-assign-printer.png diff --git a/static/img/pos/qna/30.png b/static/img/integration/pos/qna/fail-post-payment.png similarity index 100% rename from static/img/pos/qna/30.png rename to static/img/integration/pos/qna/fail-post-payment.png diff --git a/static/img/pos/qna/13.png b/static/img/integration/pos/qna/failed-to-set-error.png similarity index 100% rename from static/img/pos/qna/13.png rename to static/img/integration/pos/qna/failed-to-set-error.png diff --git a/static/img/pos/qna/16.png b/static/img/integration/pos/qna/file-in-use-error.png similarity index 100% rename from static/img/pos/qna/16.png rename to static/img/integration/pos/qna/file-in-use-error.png diff --git a/static/img/pos/qna/1.png b/static/img/integration/pos/qna/installation-error.png similarity index 100% rename from static/img/pos/qna/1.png rename to static/img/integration/pos/qna/installation-error.png diff --git a/static/img/pos/qna/5.png b/static/img/integration/pos/qna/integrate-it-uni-pos.png similarity index 100% rename from static/img/pos/qna/5.png rename to static/img/integration/pos/qna/integrate-it-uni-pos.png diff --git a/static/img/pos/qna/2.png b/static/img/integration/pos/qna/new-installation.png similarity index 100% rename from static/img/pos/qna/2.png rename to static/img/integration/pos/qna/new-installation.png diff --git a/static/img/pos/qna/3.png b/static/img/integration/pos/qna/new-installation1.png similarity index 100% rename from static/img/pos/qna/3.png rename to static/img/integration/pos/qna/new-installation1.png diff --git a/static/img/pos/qna/17.png b/static/img/integration/pos/qna/payment-type-not-match.png similarity index 100% rename from static/img/pos/qna/17.png rename to static/img/integration/pos/qna/payment-type-not-match.png diff --git a/static/img/pos/qna/14.png b/static/img/integration/pos/qna/price-set.png similarity index 100% rename from static/img/pos/qna/14.png rename to static/img/integration/pos/qna/price-set.png diff --git a/static/img/pos/qna/15.png b/static/img/integration/pos/qna/price-set1.png similarity index 100% rename from static/img/pos/qna/15.png rename to static/img/integration/pos/qna/price-set1.png diff --git a/static/img/pos/qna/6.png b/static/img/integration/pos/qna/print-receipt-chinese-word.png similarity index 100% rename from static/img/pos/qna/6.png rename to static/img/integration/pos/qna/print-receipt-chinese-word.png diff --git a/static/img/pos/qna/7.png b/static/img/integration/pos/qna/print-receipt-chinese-word1.png similarity index 100% rename from static/img/pos/qna/7.png rename to static/img/integration/pos/qna/print-receipt-chinese-word1.png diff --git a/static/img/pos/qna/8.png b/static/img/integration/pos/qna/print-receipt-chinese-word2.png similarity index 100% rename from static/img/pos/qna/8.png rename to static/img/integration/pos/qna/print-receipt-chinese-word2.png diff --git a/static/img/pos/qna/9.png b/static/img/integration/pos/qna/print-receipt-chinese-word3.png similarity index 100% rename from static/img/pos/qna/9.png rename to static/img/integration/pos/qna/print-receipt-chinese-word3.png diff --git a/static/img/pos/qna/10.png b/static/img/integration/pos/qna/print-receipt-chinese-word4.png similarity index 100% rename from static/img/pos/qna/10.png rename to static/img/integration/pos/qna/print-receipt-chinese-word4.png diff --git a/static/img/pos/qna/12.png b/static/img/integration/pos/qna/printer-not-exist-solution.png similarity index 100% rename from static/img/pos/qna/12.png rename to static/img/integration/pos/qna/printer-not-exist-solution.png diff --git a/static/img/pos/qna/11.png b/static/img/integration/pos/qna/printer-not-exist.png similarity index 100% rename from static/img/pos/qna/11.png rename to static/img/integration/pos/qna/printer-not-exist.png diff --git a/static/img/pos/qna/20.png b/static/img/integration/pos/qna/receipt-auto-cut-solution.png similarity index 100% rename from static/img/pos/qna/20.png rename to static/img/integration/pos/qna/receipt-auto-cut-solution.png diff --git a/static/img/pos/qna/19.png b/static/img/integration/pos/qna/receipt-auto-cut.png similarity index 100% rename from static/img/pos/qna/19.png rename to static/img/integration/pos/qna/receipt-auto-cut.png diff --git a/static/img/pos/qna/18.png b/static/img/integration/pos/qna/receipt-license-retrieve-button-missing.png similarity index 100% rename from static/img/pos/qna/18.png rename to static/img/integration/pos/qna/receipt-license-retrieve-button-missing.png diff --git a/static/img/pos/qna/23.png b/static/img/integration/pos/qna/set-branch-pos.png similarity index 100% rename from static/img/pos/qna/23.png rename to static/img/integration/pos/qna/set-branch-pos.png diff --git a/static/img/pos/qna/4.png b/static/img/integration/pos/qna/unable-get-utd-qty.png similarity index 100% rename from static/img/pos/qna/4.png rename to static/img/integration/pos/qna/unable-get-utd-qty.png diff --git a/static/img/pos/qna/21.png b/static/img/integration/pos/qna/unable-key-in-daily-cash-sales.png similarity index 100% rename from static/img/pos/qna/21.png rename to static/img/integration/pos/qna/unable-key-in-daily-cash-sales.png diff --git a/static/img/pos/qna/28.png b/static/img/integration/pos/qna/unable-sent-email-solution.png similarity index 100% rename from static/img/pos/qna/28.png rename to static/img/integration/pos/qna/unable-sent-email-solution.png diff --git a/static/img/pos/qna/29.png b/static/img/integration/pos/qna/unable-sent-email-solution1.png similarity index 100% rename from static/img/pos/qna/29.png rename to static/img/integration/pos/qna/unable-sent-email-solution1.png diff --git a/static/img/pos/qna/27.png b/static/img/integration/pos/qna/unable-sent-email.png similarity index 100% rename from static/img/pos/qna/27.png rename to static/img/integration/pos/qna/unable-sent-email.png diff --git a/static/img/pos/qna/22.png b/static/img/integration/pos/qna/unable-show-chinese-word.png similarity index 100% rename from static/img/pos/qna/22.png rename to static/img/integration/pos/qna/unable-show-chinese-word.png diff --git a/static/img/pos/serial-num/3.png b/static/img/integration/pos/serial-num/insert-serial-number.png similarity index 100% rename from static/img/pos/serial-num/3.png rename to static/img/integration/pos/serial-num/insert-serial-number.png diff --git a/static/img/pos/serial-num/4.png b/static/img/integration/pos/serial-num/insert-serial-number1.png similarity index 100% rename from static/img/pos/serial-num/4.png rename to static/img/integration/pos/serial-num/insert-serial-number1.png diff --git a/static/img/pos/serial-num/5.png b/static/img/integration/pos/serial-num/insert-serial-number2.png similarity index 100% rename from static/img/pos/serial-num/5.png rename to static/img/integration/pos/serial-num/insert-serial-number2.png diff --git a/static/img/pos/serial-num/6.png b/static/img/integration/pos/serial-num/insert-serial-number3.png similarity index 100% rename from static/img/pos/serial-num/6.png rename to static/img/integration/pos/serial-num/insert-serial-number3.png diff --git a/static/img/pos/serial-num/7.png b/static/img/integration/pos/serial-num/insert-serial-number4.png similarity index 100% rename from static/img/pos/serial-num/7.png rename to static/img/integration/pos/serial-num/insert-serial-number4.png diff --git a/static/img/pos/serial-num/8.png b/static/img/integration/pos/serial-num/insert-serial-number5.png similarity index 100% rename from static/img/pos/serial-num/8.png rename to static/img/integration/pos/serial-num/insert-serial-number5.png diff --git a/static/img/pos/serial-num/1.png b/static/img/integration/pos/serial-num/serial-number-module.png similarity index 100% rename from static/img/pos/serial-num/1.png rename to static/img/integration/pos/serial-num/serial-number-module.png diff --git a/static/img/pos/serial-num/2.png b/static/img/integration/pos/serial-num/serial-number-module1.png similarity index 100% rename from static/img/pos/serial-num/2.png rename to static/img/integration/pos/serial-num/serial-number-module1.png diff --git a/static/img/pos/sub-item/1.png b/static/img/integration/pos/sub-item/sub-item-setting.png similarity index 100% rename from static/img/pos/sub-item/1.png rename to static/img/integration/pos/sub-item/sub-item-setting.png diff --git a/static/img/pos/sub-item/2.png b/static/img/integration/pos/sub-item/sub-item-setting1.png similarity index 100% rename from static/img/pos/sub-item/2.png rename to static/img/integration/pos/sub-item/sub-item-setting1.png diff --git a/static/img/pos/sub-item/3.png b/static/img/integration/pos/sub-item/sub-item-setting2.png similarity index 100% rename from static/img/pos/sub-item/3.png rename to static/img/integration/pos/sub-item/sub-item-setting2.png diff --git a/static/img/pos/sub-item/4.png b/static/img/integration/pos/sub-item/sub-item-setting3.png similarity index 100% rename from static/img/pos/sub-item/4.png rename to static/img/integration/pos/sub-item/sub-item-setting3.png diff --git a/static/img/pos/sub-item/5.png b/static/img/integration/pos/sub-item/sub-item-setting4.png similarity index 100% rename from static/img/pos/sub-item/5.png rename to static/img/integration/pos/sub-item/sub-item-setting4.png diff --git a/static/img/pos/sub-item/6.png b/static/img/integration/pos/sub-item/sub-item-setting5.png similarity index 100% rename from static/img/pos/sub-item/6.png rename to static/img/integration/pos/sub-item/sub-item-setting5.png diff --git a/static/img/pos/user-setting/1.png b/static/img/integration/pos/user-setting/create-new-user.png similarity index 100% rename from static/img/pos/user-setting/1.png rename to static/img/integration/pos/user-setting/create-new-user.png diff --git a/static/img/pos/user-setting/2.png b/static/img/integration/pos/user-setting/create-new-user1.png similarity index 100% rename from static/img/pos/user-setting/2.png rename to static/img/integration/pos/user-setting/create-new-user1.png diff --git a/static/img/pos/user-setting/3.png b/static/img/integration/pos/user-setting/create-new-user2.png similarity index 100% rename from static/img/pos/user-setting/3.png rename to static/img/integration/pos/user-setting/create-new-user2.png diff --git a/static/img/pos/user-setting/5.png b/static/img/integration/pos/user-setting/set-user-access-right.png similarity index 100% rename from static/img/pos/user-setting/5.png rename to static/img/integration/pos/user-setting/set-user-access-right.png diff --git a/static/img/pos/user-setting/4.png b/static/img/integration/pos/user-setting/set-user-login-password.png similarity index 100% rename from static/img/pos/user-setting/4.png rename to static/img/integration/pos/user-setting/set-user-login-password.png diff --git a/static/img/pos/weighing-scale/1.png b/static/img/integration/pos/weighing-scale/maintain-stock-item.png similarity index 100% rename from static/img/pos/weighing-scale/1.png rename to static/img/integration/pos/weighing-scale/maintain-stock-item.png diff --git a/static/img/pos/weighing-scale/2.png b/static/img/integration/pos/weighing-scale/sql-pos-setting.png similarity index 100% rename from static/img/pos/weighing-scale/2.png rename to static/img/integration/pos/weighing-scale/sql-pos-setting.png diff --git a/static/img/pos/weighing-scale/3.png b/static/img/integration/pos/weighing-scale/sql-pos-setting1.png similarity index 100% rename from static/img/pos/weighing-scale/3.png rename to static/img/integration/pos/weighing-scale/sql-pos-setting1.png diff --git a/static/img/pos/weighing-scale/4.png b/static/img/integration/pos/weighing-scale/sql-pos-setting2.png similarity index 100% rename from static/img/pos/weighing-scale/4.png rename to static/img/integration/pos/weighing-scale/sql-pos-setting2.png diff --git a/static/img/pos/weighing-scale/5.png b/static/img/integration/pos/weighing-scale/sql-pos-setting3.png similarity index 100% rename from static/img/pos/weighing-scale/5.png rename to static/img/integration/pos/weighing-scale/sql-pos-setting3.png diff --git a/static/img/pos/weighing-scale/6.png b/static/img/integration/pos/weighing-scale/sql-pos-setting4.png similarity index 100% rename from static/img/pos/weighing-scale/6.png rename to static/img/integration/pos/weighing-scale/sql-pos-setting4.png diff --git a/static/img/pos/weighing-scale/7.png b/static/img/integration/pos/weighing-scale/sql-pos-setting5.png similarity index 100% rename from static/img/pos/weighing-scale/7.png rename to static/img/integration/pos/weighing-scale/sql-pos-setting5.png diff --git a/static/img/pos/weighing-scale/8.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale.png similarity index 100% rename from static/img/pos/weighing-scale/8.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale.png diff --git a/static/img/pos/weighing-scale/9.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale1.png similarity index 100% rename from static/img/pos/weighing-scale/9.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale1.png diff --git a/static/img/pos/weighing-scale/10.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale2.png similarity index 100% rename from static/img/pos/weighing-scale/10.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale2.png diff --git a/static/img/pos/weighing-scale/11.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale3.png similarity index 100% rename from static/img/pos/weighing-scale/11.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale3.png diff --git a/static/img/pos/weighing-scale/12.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale4.png similarity index 100% rename from static/img/pos/weighing-scale/12.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale4.png diff --git a/static/img/pos/weighing-scale/17.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale5.png similarity index 100% rename from static/img/pos/weighing-scale/17.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale5.png diff --git a/static/img/pos/weighing-scale/13.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale6.png similarity index 100% rename from static/img/pos/weighing-scale/13.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale6.png diff --git a/static/img/pos/weighing-scale/14.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale7.png similarity index 100% rename from static/img/pos/weighing-scale/14.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale7.png diff --git a/static/img/pos/weighing-scale/15.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale8.png similarity index 100% rename from static/img/pos/weighing-scale/15.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale8.png diff --git a/static/img/pos/weighing-scale/16.png b/static/img/integration/pos/weighing-scale/update-price-weighing-scale9.png similarity index 100% rename from static/img/pos/weighing-scale/16.png rename to static/img/integration/pos/weighing-scale/update-price-weighing-scale9.png diff --git a/static/img/pos/weight-scaling/1.png b/static/img/integration/pos/weight-scaling/1.png similarity index 100% rename from static/img/pos/weight-scaling/1.png rename to static/img/integration/pos/weight-scaling/1.png diff --git a/static/img/integration/sdk-live/basic-guide/cloud-mobile-external-program-linking.jpg b/static/img/integration/sdk-live/basic-guide/cloud-mobile-external-program-linking.jpg new file mode 100644 index 00000000..e2b65ec5 Binary files /dev/null and b/static/img/integration/sdk-live/basic-guide/cloud-mobile-external-program-linking.jpg differ diff --git a/static/img/integration/sdk-live/basic-guide/cloud-mobile-sys-sql-connect-public.jpg b/static/img/integration/sdk-live/basic-guide/cloud-mobile-sys-sql-connect-public.jpg new file mode 100644 index 00000000..6de74fe0 Binary files /dev/null and b/static/img/integration/sdk-live/basic-guide/cloud-mobile-sys-sql-connect-public.jpg differ diff --git a/static/img/integration/sdk-live/basic-guide/pos-system-external-program-linking.jpg b/static/img/integration/sdk-live/basic-guide/pos-system-external-program-linking.jpg new file mode 100644 index 00000000..b65ceaeb Binary files /dev/null and b/static/img/integration/sdk-live/basic-guide/pos-system-external-program-linking.jpg differ diff --git a/static/img/integration/sdk-live/faq/for-fb-30.jpg b/static/img/integration/sdk-live/faq/for-fb-30.jpg new file mode 100644 index 00000000..e09143e2 Binary files /dev/null and b/static/img/integration/sdk-live/faq/for-fb-30.jpg differ diff --git a/static/img/integration/sdk-live/faq/sql-login-3dot.jpg b/static/img/integration/sdk-live/faq/sql-login-3dot.jpg new file mode 100644 index 00000000..1cd5be1e Binary files /dev/null and b/static/img/integration/sdk-live/faq/sql-login-3dot.jpg differ diff --git a/static/img/integration/sdk-live/faq/sql-new-ver-login-setting-button.jpg b/static/img/integration/sdk-live/faq/sql-new-ver-login-setting-button.jpg new file mode 100644 index 00000000..771e03ee Binary files /dev/null and b/static/img/integration/sdk-live/faq/sql-new-ver-login-setting-button.jpg differ diff --git a/static/img/integration/sql-account-api/faq/purcahse-order-json-file.jpg b/static/img/integration/sql-account-api/faq/purcahse-order-json-file.jpg new file mode 100644 index 00000000..404b44ef Binary files /dev/null and b/static/img/integration/sql-account-api/faq/purcahse-order-json-file.jpg differ diff --git a/static/img/sql-account-api/generate-api-secret-key/1.png b/static/img/integration/sql-account-api/generate-api-secret-key/1.png similarity index 100% rename from static/img/sql-account-api/generate-api-secret-key/1.png rename to static/img/integration/sql-account-api/generate-api-secret-key/1.png diff --git a/static/img/sql-account-api/generate-api-secret-key/2.png b/static/img/integration/sql-account-api/generate-api-secret-key/2.png similarity index 100% rename from static/img/sql-account-api/generate-api-secret-key/2.png rename to static/img/integration/sql-account-api/generate-api-secret-key/2.png diff --git a/static/img/sql-account-api/generate-api-secret-key/3.png b/static/img/integration/sql-account-api/generate-api-secret-key/3.png similarity index 100% rename from static/img/sql-account-api/generate-api-secret-key/3.png rename to static/img/integration/sql-account-api/generate-api-secret-key/3.png diff --git a/static/img/sql-account-api/generate-api-secret-key/4.png b/static/img/integration/sql-account-api/generate-api-secret-key/4.png similarity index 100% rename from static/img/sql-account-api/generate-api-secret-key/4.png rename to static/img/integration/sql-account-api/generate-api-secret-key/4.png diff --git a/static/img/sql-account-api/generate-api-secret-key/5.png b/static/img/integration/sql-account-api/generate-api-secret-key/5.png similarity index 100% rename from static/img/sql-account-api/generate-api-secret-key/5.png rename to static/img/integration/sql-account-api/generate-api-secret-key/5.png diff --git a/static/img/sql-account-api/generate-api-secret-key/postman-1.png b/static/img/integration/sql-account-api/generate-api-secret-key/postman-1.png similarity index 100% rename from static/img/sql-account-api/generate-api-secret-key/postman-1.png rename to static/img/integration/sql-account-api/generate-api-secret-key/postman-1.png diff --git a/static/img/sql-account-api/generate-api-secret-key/postman-2.png b/static/img/integration/sql-account-api/generate-api-secret-key/postman-2.png similarity index 100% rename from static/img/sql-account-api/generate-api-secret-key/postman-2.png rename to static/img/integration/sql-account-api/generate-api-secret-key/postman-2.png diff --git a/static/img/sql-account-api/generate-api-secret-key/postman-3.png b/static/img/integration/sql-account-api/generate-api-secret-key/postman-3.png similarity index 100% rename from static/img/sql-account-api/generate-api-secret-key/postman-3.png rename to static/img/integration/sql-account-api/generate-api-secret-key/postman-3.png diff --git a/static/img/sql-account-api/on-premise-setup/1.png b/static/img/integration/sql-account-api/on-premise-setup/1.png similarity index 100% rename from static/img/sql-account-api/on-premise-setup/1.png rename to static/img/integration/sql-account-api/on-premise-setup/1.png diff --git a/static/img/sql-account-api/on-premise-setup/2.png b/static/img/integration/sql-account-api/on-premise-setup/2.png similarity index 100% rename from static/img/sql-account-api/on-premise-setup/2.png rename to static/img/integration/sql-account-api/on-premise-setup/2.png diff --git a/static/img/sql-account-api/on-premise-setup/3.png b/static/img/integration/sql-account-api/on-premise-setup/3.png similarity index 100% rename from static/img/sql-account-api/on-premise-setup/3.png rename to static/img/integration/sql-account-api/on-premise-setup/3.png diff --git a/static/img/sql-account-api/on-premise-setup/4.png b/static/img/integration/sql-account-api/on-premise-setup/4.png similarity index 100% rename from static/img/sql-account-api/on-premise-setup/4.png rename to static/img/integration/sql-account-api/on-premise-setup/4.png diff --git a/static/img/sql-account-api/on-premise-setup/5.png b/static/img/integration/sql-account-api/on-premise-setup/5.png similarity index 100% rename from static/img/sql-account-api/on-premise-setup/5.png rename to static/img/integration/sql-account-api/on-premise-setup/5.png diff --git a/static/img/sql-account-api/on-premise-setup/6.png b/static/img/integration/sql-account-api/on-premise-setup/6.png similarity index 100% rename from static/img/sql-account-api/on-premise-setup/6.png rename to static/img/integration/sql-account-api/on-premise-setup/6.png diff --git a/static/img/sql-account-api/on-premise-setup/7.png b/static/img/integration/sql-account-api/on-premise-setup/7.png similarity index 100% rename from static/img/sql-account-api/on-premise-setup/7.png rename to static/img/integration/sql-account-api/on-premise-setup/7.png diff --git a/static/img/integration/sql-account-api/on-premise-setup/steps-import-collection.jpg b/static/img/integration/sql-account-api/on-premise-setup/steps-import-collection.jpg new file mode 100644 index 00000000..6030f2be Binary files /dev/null and b/static/img/integration/sql-account-api/on-premise-setup/steps-import-collection.jpg differ diff --git a/static/img/sql-mobile-connect/on-premise-setup/1.png b/static/img/integration/sql-mobile-connect/on-premise-setup/1.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/1.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/1.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/10.png b/static/img/integration/sql-mobile-connect/on-premise-setup/10.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/10.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/10.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/11.png b/static/img/integration/sql-mobile-connect/on-premise-setup/11.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/11.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/11.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/12.png b/static/img/integration/sql-mobile-connect/on-premise-setup/12.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/12.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/12.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/2.png b/static/img/integration/sql-mobile-connect/on-premise-setup/2.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/2.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/2.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/3.png b/static/img/integration/sql-mobile-connect/on-premise-setup/3.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/3.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/3.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/4.png b/static/img/integration/sql-mobile-connect/on-premise-setup/4.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/4.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/4.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/5.png b/static/img/integration/sql-mobile-connect/on-premise-setup/5.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/5.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/5.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/6.png b/static/img/integration/sql-mobile-connect/on-premise-setup/6.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/6.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/6.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/7.png b/static/img/integration/sql-mobile-connect/on-premise-setup/7.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/7.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/7.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/8.png b/static/img/integration/sql-mobile-connect/on-premise-setup/8.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/8.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/8.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/9.png b/static/img/integration/sql-mobile-connect/on-premise-setup/9.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/9.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/9.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/AX3000-1.png b/static/img/integration/sql-mobile-connect/on-premise-setup/AX3000-1.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/AX3000-1.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/AX3000-1.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/AX3000-2.png b/static/img/integration/sql-mobile-connect/on-premise-setup/AX3000-2.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/AX3000-2.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/AX3000-2.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/C1200-1.png b/static/img/integration/sql-mobile-connect/on-premise-setup/C1200-1.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/C1200-1.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/C1200-1.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/C1200-2.png b/static/img/integration/sql-mobile-connect/on-premise-setup/C1200-2.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/C1200-2.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/C1200-2.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/HG8145X6-1.png b/static/img/integration/sql-mobile-connect/on-premise-setup/HG8145X6-1.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/HG8145X6-1.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/HG8145X6-1.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/HG8145X6-2.png b/static/img/integration/sql-mobile-connect/on-premise-setup/HG8145X6-2.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/HG8145X6-2.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/HG8145X6-2.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/SR1041F-1.png b/static/img/integration/sql-mobile-connect/on-premise-setup/SR1041F-1.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/SR1041F-1.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/SR1041F-1.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/SR1041F-2.png b/static/img/integration/sql-mobile-connect/on-premise-setup/SR1041F-2.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/SR1041F-2.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/SR1041F-2.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/SR120-A-1.png b/static/img/integration/sql-mobile-connect/on-premise-setup/SR120-A-1.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/SR120-A-1.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/SR120-A-1.png diff --git a/static/img/sql-mobile-connect/on-premise-setup/SR120-A-2.png b/static/img/integration/sql-mobile-connect/on-premise-setup/SR120-A-2.png similarity index 100% rename from static/img/sql-mobile-connect/on-premise-setup/SR120-A-2.png rename to static/img/integration/sql-mobile-connect/on-premise-setup/SR120-A-2.png diff --git a/static/img/sql-mobile-connect/set-customer-view/1.png b/static/img/integration/sql-mobile-connect/set-customer-view/1.png similarity index 100% rename from static/img/sql-mobile-connect/set-customer-view/1.png rename to static/img/integration/sql-mobile-connect/set-customer-view/1.png diff --git a/static/img/sql-mobile-connect/set-customer-view/2.png b/static/img/integration/sql-mobile-connect/set-customer-view/2.png similarity index 100% rename from static/img/sql-mobile-connect/set-customer-view/2.png rename to static/img/integration/sql-mobile-connect/set-customer-view/2.png diff --git a/static/img/sql-mobile-connect/set-customer-view/3.png b/static/img/integration/sql-mobile-connect/set-customer-view/3.png similarity index 100% rename from static/img/sql-mobile-connect/set-customer-view/3.png rename to static/img/integration/sql-mobile-connect/set-customer-view/3.png diff --git a/static/img/sql-mobile-connect/set-customer-view/4.png b/static/img/integration/sql-mobile-connect/set-customer-view/4.png similarity index 100% rename from static/img/sql-mobile-connect/set-customer-view/4.png rename to static/img/integration/sql-mobile-connect/set-customer-view/4.png diff --git a/static/img/sql-mobile-connect/set-customer-view/5.png b/static/img/integration/sql-mobile-connect/set-customer-view/5.png similarity index 100% rename from static/img/sql-mobile-connect/set-customer-view/5.png rename to static/img/integration/sql-mobile-connect/set-customer-view/5.png diff --git a/static/img/sql-mobile-connect/set-user-view/1.png b/static/img/integration/sql-mobile-connect/set-user-view/1.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/1.png rename to static/img/integration/sql-mobile-connect/set-user-view/1.png diff --git a/static/img/sql-mobile-connect/set-user-view/10.png b/static/img/integration/sql-mobile-connect/set-user-view/10.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/10.png rename to static/img/integration/sql-mobile-connect/set-user-view/10.png diff --git a/static/img/sql-mobile-connect/set-user-view/2.png b/static/img/integration/sql-mobile-connect/set-user-view/2.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/2.png rename to static/img/integration/sql-mobile-connect/set-user-view/2.png diff --git a/static/img/sql-mobile-connect/set-user-view/3.png b/static/img/integration/sql-mobile-connect/set-user-view/3.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/3.png rename to static/img/integration/sql-mobile-connect/set-user-view/3.png diff --git a/static/img/sql-mobile-connect/set-user-view/4.png b/static/img/integration/sql-mobile-connect/set-user-view/4.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/4.png rename to static/img/integration/sql-mobile-connect/set-user-view/4.png diff --git a/static/img/sql-mobile-connect/set-user-view/5.png b/static/img/integration/sql-mobile-connect/set-user-view/5.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/5.png rename to static/img/integration/sql-mobile-connect/set-user-view/5.png diff --git a/static/img/sql-mobile-connect/set-user-view/6.png b/static/img/integration/sql-mobile-connect/set-user-view/6.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/6.png rename to static/img/integration/sql-mobile-connect/set-user-view/6.png diff --git a/static/img/sql-mobile-connect/set-user-view/7.png b/static/img/integration/sql-mobile-connect/set-user-view/7.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/7.png rename to static/img/integration/sql-mobile-connect/set-user-view/7.png diff --git a/static/img/sql-mobile-connect/set-user-view/8.png b/static/img/integration/sql-mobile-connect/set-user-view/8.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/8.png rename to static/img/integration/sql-mobile-connect/set-user-view/8.png diff --git a/static/img/sql-mobile-connect/set-user-view/9.png b/static/img/integration/sql-mobile-connect/set-user-view/9.png similarity index 100% rename from static/img/sql-mobile-connect/set-user-view/9.png rename to static/img/integration/sql-mobile-connect/set-user-view/9.png diff --git a/static/img/sql-mobile-connect/use-in-web-view/1.png b/static/img/integration/sql-mobile-connect/use-in-web-view/1.png similarity index 100% rename from static/img/sql-mobile-connect/use-in-web-view/1.png rename to static/img/integration/sql-mobile-connect/use-in-web-view/1.png diff --git a/static/img/sql-mobile-connect/use-in-web-view/2a.png b/static/img/integration/sql-mobile-connect/use-in-web-view/2a.png similarity index 100% rename from static/img/sql-mobile-connect/use-in-web-view/2a.png rename to static/img/integration/sql-mobile-connect/use-in-web-view/2a.png diff --git a/static/img/sql-mobile-connect/use-in-web-view/2b.png b/static/img/integration/sql-mobile-connect/use-in-web-view/2b.png similarity index 100% rename from static/img/sql-mobile-connect/use-in-web-view/2b.png rename to static/img/integration/sql-mobile-connect/use-in-web-view/2b.png diff --git a/static/img/sql-mobile-connect/use-in-web-view/3.png b/static/img/integration/sql-mobile-connect/use-in-web-view/3.png similarity index 100% rename from static/img/sql-mobile-connect/use-in-web-view/3.png rename to static/img/integration/sql-mobile-connect/use-in-web-view/3.png diff --git a/static/img/sql-mobile-connect/use-in-web-view/4.png b/static/img/integration/sql-mobile-connect/use-in-web-view/4.png similarity index 100% rename from static/img/sql-mobile-connect/use-in-web-view/4.png rename to static/img/integration/sql-mobile-connect/use-in-web-view/4.png diff --git a/static/img/sql-mobile-connect/use-in-web-view/5.png b/static/img/integration/sql-mobile-connect/use-in-web-view/5.png similarity index 100% rename from static/img/sql-mobile-connect/use-in-web-view/5.png rename to static/img/integration/sql-mobile-connect/use-in-web-view/5.png diff --git a/static/img/sql-mobile-connect/use-in-web-view/6.png b/static/img/integration/sql-mobile-connect/use-in-web-view/6.png similarity index 100% rename from static/img/sql-mobile-connect/use-in-web-view/6.png rename to static/img/integration/sql-mobile-connect/use-in-web-view/6.png diff --git a/static/img/sql-mobile-connect/user-setup/1.png b/static/img/integration/sql-mobile-connect/user-setup/1.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/1.png rename to static/img/integration/sql-mobile-connect/user-setup/1.png diff --git a/static/img/sql-mobile-connect/user-setup/10.png b/static/img/integration/sql-mobile-connect/user-setup/10.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/10.png rename to static/img/integration/sql-mobile-connect/user-setup/10.png diff --git a/static/img/sql-mobile-connect/user-setup/11.png b/static/img/integration/sql-mobile-connect/user-setup/11.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/11.png rename to static/img/integration/sql-mobile-connect/user-setup/11.png diff --git a/static/img/sql-mobile-connect/user-setup/12.png b/static/img/integration/sql-mobile-connect/user-setup/12.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/12.png rename to static/img/integration/sql-mobile-connect/user-setup/12.png diff --git a/static/img/sql-mobile-connect/user-setup/2.png b/static/img/integration/sql-mobile-connect/user-setup/2.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/2.png rename to static/img/integration/sql-mobile-connect/user-setup/2.png diff --git a/static/img/sql-mobile-connect/user-setup/3.png b/static/img/integration/sql-mobile-connect/user-setup/3.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/3.png rename to static/img/integration/sql-mobile-connect/user-setup/3.png diff --git a/static/img/sql-mobile-connect/user-setup/4.png b/static/img/integration/sql-mobile-connect/user-setup/4.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/4.png rename to static/img/integration/sql-mobile-connect/user-setup/4.png diff --git a/static/img/sql-mobile-connect/user-setup/5.png b/static/img/integration/sql-mobile-connect/user-setup/5.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/5.png rename to static/img/integration/sql-mobile-connect/user-setup/5.png diff --git a/static/img/sql-mobile-connect/user-setup/6.png b/static/img/integration/sql-mobile-connect/user-setup/6.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/6.png rename to static/img/integration/sql-mobile-connect/user-setup/6.png diff --git a/static/img/sql-mobile-connect/user-setup/7.png b/static/img/integration/sql-mobile-connect/user-setup/7.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/7.png rename to static/img/integration/sql-mobile-connect/user-setup/7.png diff --git a/static/img/sql-mobile-connect/user-setup/8.png b/static/img/integration/sql-mobile-connect/user-setup/8.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/8.png rename to static/img/integration/sql-mobile-connect/user-setup/8.png diff --git a/static/img/sql-mobile-connect/user-setup/9.png b/static/img/integration/sql-mobile-connect/user-setup/9.png similarity index 100% rename from static/img/sql-mobile-connect/user-setup/9.png rename to static/img/integration/sql-mobile-connect/user-setup/9.png diff --git a/static/img/integration/stoke-take-mobile-app/faq/stoke-take-faq.png b/static/img/integration/stoke-take-mobile-app/faq/stoke-take-faq.png new file mode 100644 index 00000000..1c91a1e7 Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/faq/stoke-take-faq.png differ diff --git a/static/img/integration/stoke-take-mobile-app/faq/stoke-take-faq1.png b/static/img/integration/stoke-take-mobile-app/faq/stoke-take-faq1.png new file mode 100644 index 00000000..7e5fd8ad Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/faq/stoke-take-faq1.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take.png new file mode 100644 index 00000000..2856665c Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take1.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take1.png new file mode 100644 index 00000000..08ae9757 Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take1.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take10.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take10.png new file mode 100644 index 00000000..3b7a9a31 Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take10.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take2.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take2.png new file mode 100644 index 00000000..a6d178c3 Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take2.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take3.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take3.png new file mode 100644 index 00000000..b5d90d26 Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take3.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take4.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take4.png new file mode 100644 index 00000000..a88f19aa Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take4.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take5.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take5.png new file mode 100644 index 00000000..e5f998e0 Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take5.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take6.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take6.png new file mode 100644 index 00000000..c51099b2 Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take6.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take7.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take7.png new file mode 100644 index 00000000..a8c4ddd4 Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take7.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take8.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take8.png new file mode 100644 index 00000000..217cac5d Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take8.png differ diff --git a/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take9.png b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take9.png new file mode 100644 index 00000000..721491fe Binary files /dev/null and b/static/img/integration/stoke-take-mobile-app/stoke-take/stoke-take9.png differ diff --git a/static/img/interbank-giro/1.png b/static/img/interbank-giro/1.png deleted file mode 100644 index a6c44a0f..00000000 Binary files a/static/img/interbank-giro/1.png and /dev/null differ diff --git a/static/img/interbank-giro/10.png b/static/img/interbank-giro/10.png deleted file mode 100644 index d2d6df19..00000000 Binary files a/static/img/interbank-giro/10.png and /dev/null differ diff --git a/static/img/interbank-giro/11.png b/static/img/interbank-giro/11.png deleted file mode 100644 index c828a6ce..00000000 Binary files a/static/img/interbank-giro/11.png and /dev/null differ diff --git a/static/img/interbank-giro/12.png b/static/img/interbank-giro/12.png deleted file mode 100644 index 9151e1e3..00000000 Binary files a/static/img/interbank-giro/12.png and /dev/null differ diff --git a/static/img/interbank-giro/2.png b/static/img/interbank-giro/2.png deleted file mode 100644 index 4d436b26..00000000 Binary files a/static/img/interbank-giro/2.png and /dev/null differ diff --git a/static/img/interbank-giro/3.png b/static/img/interbank-giro/3.png deleted file mode 100644 index 067f18e0..00000000 Binary files a/static/img/interbank-giro/3.png and /dev/null differ diff --git a/static/img/interbank-giro/4.png b/static/img/interbank-giro/4.png deleted file mode 100644 index d396aa86..00000000 Binary files a/static/img/interbank-giro/4.png and /dev/null differ diff --git a/static/img/interbank-giro/5.png b/static/img/interbank-giro/5.png deleted file mode 100644 index 87c091dc..00000000 Binary files a/static/img/interbank-giro/5.png and /dev/null differ diff --git a/static/img/interbank-giro/6.png b/static/img/interbank-giro/6.png deleted file mode 100644 index d2451e0f..00000000 Binary files a/static/img/interbank-giro/6.png and /dev/null differ diff --git a/static/img/interbank-giro/7.png b/static/img/interbank-giro/7.png deleted file mode 100644 index ffeb6362..00000000 Binary files a/static/img/interbank-giro/7.png and /dev/null differ diff --git a/static/img/interbank-giro/8.png b/static/img/interbank-giro/8.png deleted file mode 100644 index 0450d272..00000000 Binary files a/static/img/interbank-giro/8.png and /dev/null differ diff --git a/static/img/interbank-giro/9.png b/static/img/interbank-giro/9.png deleted file mode 100644 index 15361814..00000000 Binary files a/static/img/interbank-giro/9.png and /dev/null differ diff --git a/static/img/getting-started/user-guide/1.png b/static/img/introduction/1.png similarity index 100% rename from static/img/getting-started/user-guide/1.png rename to static/img/introduction/1.png diff --git a/static/img/miscellaneous/XLS-MDB/check-dup-rec-step8.png b/static/img/miscellaneous/XLS-MDB/check-dup-rec-step8.png new file mode 100644 index 00000000..b943ae97 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/check-dup-rec-step8.png differ diff --git a/static/img/miscellaneous/XLS-MDB/check-dup-rec.png b/static/img/miscellaneous/XLS-MDB/check-dup-rec.png new file mode 100644 index 00000000..b72caf76 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/check-dup-rec.png differ diff --git a/static/img/miscellaneous/XLS-MDB/data-modify-step1-1.png b/static/img/miscellaneous/XLS-MDB/data-modify-step1-1.png new file mode 100644 index 00000000..cf8db346 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/data-modify-step1-1.png differ diff --git a/static/img/miscellaneous/XLS-MDB/data-modify-step1-2.gif b/static/img/miscellaneous/XLS-MDB/data-modify-step1-2.gif new file mode 100644 index 00000000..512d06cb Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/data-modify-step1-2.gif differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-100.png b/static/img/miscellaneous/XLS-MDB/faq-100.png new file mode 100644 index 00000000..505bf7a0 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-100.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-3party-import1.png b/static/img/miscellaneous/XLS-MDB/faq-3party-import1.png new file mode 100644 index 00000000..901a2564 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-3party-import1.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-3party-import2.png b/static/img/miscellaneous/XLS-MDB/faq-3party-import2.png new file mode 100644 index 00000000..87467f9e Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-3party-import2.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-access-violation.png b/static/img/miscellaneous/XLS-MDB/faq-access-violation.png new file mode 100644 index 00000000..97ef7fba Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-access-violation.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-at-knockoff.png b/static/img/miscellaneous/XLS-MDB/faq-at-knockoff.png new file mode 100644 index 00000000..8ba3d81e Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-at-knockoff.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-auto-generate.png b/static/img/miscellaneous/XLS-MDB/faq-auto-generate.png new file mode 100644 index 00000000..31646ce0 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-auto-generate.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-convert-date-step1.png b/static/img/miscellaneous/XLS-MDB/faq-convert-date-step1.png new file mode 100644 index 00000000..cf8db346 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-convert-date-step1.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-convert-date-step5.png b/static/img/miscellaneous/XLS-MDB/faq-convert-date-step5.png new file mode 100644 index 00000000..05a53af4 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-convert-date-step5.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-exl-to-csv.gif b/static/img/miscellaneous/XLS-MDB/faq-exl-to-csv.gif new file mode 100644 index 00000000..89100ea6 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-exl-to-csv.gif differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-ftp.png b/static/img/miscellaneous/XLS-MDB/faq-ftp.png new file mode 100644 index 00000000..9c982e6e Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-ftp.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-header.png b/static/img/miscellaneous/XLS-MDB/faq-header.png new file mode 100644 index 00000000..732be381 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-header.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-import-payment.png b/static/img/miscellaneous/XLS-MDB/faq-import-payment.png new file mode 100644 index 00000000..bf9891ef Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-import-payment.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-import-xtax.png b/static/img/miscellaneous/XLS-MDB/faq-import-xtax.png new file mode 100644 index 00000000..f5cae49a Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-import-xtax.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-item-code1.png b/static/img/miscellaneous/XLS-MDB/faq-item-code1.png new file mode 100644 index 00000000..03323288 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-item-code1.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-item-code2.png b/static/img/miscellaneous/XLS-MDB/faq-item-code2.png new file mode 100644 index 00000000..d6c4d856 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-item-code2.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-load-csv.gif b/static/img/miscellaneous/XLS-MDB/faq-load-csv.gif new file mode 100644 index 00000000..4b508296 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-load-csv.gif differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-load-excel.png b/static/img/miscellaneous/XLS-MDB/faq-load-excel.png new file mode 100644 index 00000000..065402f3 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-load-excel.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-load-last-save.gif b/static/img/miscellaneous/XLS-MDB/faq-load-last-save.gif new file mode 100644 index 00000000..8d6e2959 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-load-last-save.gif differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-log.gif b/static/img/miscellaneous/XLS-MDB/faq-log.gif new file mode 100644 index 00000000..797ba0e3 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-log.gif differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-multi-iv.png b/static/img/miscellaneous/XLS-MDB/faq-multi-iv.png new file mode 100644 index 00000000..1cf46a0e Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-multi-iv.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-multi-line.png b/static/img/miscellaneous/XLS-MDB/faq-multi-line.png new file mode 100644 index 00000000..cf16ca97 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-multi-line.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-neg-value-step1.png b/static/img/miscellaneous/XLS-MDB/faq-neg-value-step1.png new file mode 100644 index 00000000..338b59fc Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-neg-value-step1.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-neg-value-step5.png b/static/img/miscellaneous/XLS-MDB/faq-neg-value-step5.png new file mode 100644 index 00000000..e5ecdee2 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-neg-value-step5.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-price-tag.png b/static/img/miscellaneous/XLS-MDB/faq-price-tag.png new file mode 100644 index 00000000..b7068038 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-price-tag.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-reimport.png b/static/img/miscellaneous/XLS-MDB/faq-reimport.png new file mode 100644 index 00000000..688682fa Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-reimport.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-string-size-step1.png b/static/img/miscellaneous/XLS-MDB/faq-string-size-step1.png new file mode 100644 index 00000000..cdfb39f1 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-string-size-step1.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-string-size-step5.png b/static/img/miscellaneous/XLS-MDB/faq-string-size-step5.png new file mode 100644 index 00000000..611c4a7b Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-string-size-step5.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-string-size-step6.png b/static/img/miscellaneous/XLS-MDB/faq-string-size-step6.png new file mode 100644 index 00000000..63336269 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-string-size-step6.png differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-text-num.gif b/static/img/miscellaneous/XLS-MDB/faq-text-num.gif new file mode 100644 index 00000000..44a85cf6 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-text-num.gif differ diff --git a/static/img/miscellaneous/XLS-MDB/faq-x-price.png b/static/img/miscellaneous/XLS-MDB/faq-x-price.png new file mode 100644 index 00000000..42dc40f9 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/faq-x-price.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-master-step2.png b/static/img/miscellaneous/XLS-MDB/import-master-step2.png new file mode 100644 index 00000000..04a8bdf5 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-master-step2.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-master-step3.png b/static/img/miscellaneous/XLS-MDB/import-master-step3.png new file mode 100644 index 00000000..db3b1405 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-master-step3.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-setting-step13.png b/static/img/miscellaneous/XLS-MDB/import-setting-step13.png new file mode 100644 index 00000000..453a9811 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-setting-step13.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-setting-step15.png b/static/img/miscellaneous/XLS-MDB/import-setting-step15.png new file mode 100644 index 00000000..aa601de7 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-setting-step15.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-setting-step17.png b/static/img/miscellaneous/XLS-MDB/import-setting-step17.png new file mode 100644 index 00000000..8460600f Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-setting-step17.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-setting-step6.png b/static/img/miscellaneous/XLS-MDB/import-setting-step6.png new file mode 100644 index 00000000..ac453719 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-setting-step6.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-setting.png b/static/img/miscellaneous/XLS-MDB/import-setting.png new file mode 100644 index 00000000..b1849979 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-setting.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step1.png b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step1.png new file mode 100644 index 00000000..8b6798b7 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step1.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step2.png b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step2.png new file mode 100644 index 00000000..b3aebfff Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step2.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step3.png b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step3.png new file mode 100644 index 00000000..f37923ca Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step3.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step4.png b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step4.png new file mode 100644 index 00000000..50835983 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step4.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step7.png b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step7.png new file mode 100644 index 00000000..942ae1b5 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-trans-data-getfile-step7.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-trans-data-step2.png b/static/img/miscellaneous/XLS-MDB/import-trans-data-step2.png new file mode 100644 index 00000000..04a8bdf5 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-trans-data-step2.png differ diff --git a/static/img/miscellaneous/XLS-MDB/import-trans-data-step4.png b/static/img/miscellaneous/XLS-MDB/import-trans-data-step4.png new file mode 100644 index 00000000..54d58e0b Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/import-trans-data-step4.png differ diff --git a/static/img/miscellaneous/XLS-MDB/split-memo-step9.png b/static/img/miscellaneous/XLS-MDB/split-memo-step9.png new file mode 100644 index 00000000..6258fbdb Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/split-memo-step9.png differ diff --git a/static/img/miscellaneous/XLS-MDB/split-memo.png b/static/img/miscellaneous/XLS-MDB/split-memo.png new file mode 100644 index 00000000..e6ec7ec0 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/split-memo.png differ diff --git a/static/img/miscellaneous/XLS-MDB/split-rows-step9.png b/static/img/miscellaneous/XLS-MDB/split-rows-step9.png new file mode 100644 index 00000000..43be31bd Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/split-rows-step9.png differ diff --git a/static/img/miscellaneous/XLS-MDB/split-rows.png b/static/img/miscellaneous/XLS-MDB/split-rows.png new file mode 100644 index 00000000..7aafb6dc Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/split-rows.png differ diff --git a/static/img/miscellaneous/XLS-MDB/split-string-step9.png b/static/img/miscellaneous/XLS-MDB/split-string-step9.png new file mode 100644 index 00000000..fa3d8447 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/split-string-step9.png differ diff --git a/static/img/miscellaneous/XLS-MDB/split-string.png b/static/img/miscellaneous/XLS-MDB/split-string.png new file mode 100644 index 00000000..876fbef6 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/split-string.png differ diff --git a/static/img/miscellaneous/XLS-MDB/toc1.png b/static/img/miscellaneous/XLS-MDB/toc1.png new file mode 100644 index 00000000..5ed78832 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/toc1.png differ diff --git a/static/img/miscellaneous/XLS-MDB/toc2.png b/static/img/miscellaneous/XLS-MDB/toc2.png new file mode 100644 index 00000000..cf8fa801 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/toc2.png differ diff --git a/static/img/miscellaneous/XLS-MDB/toc3.png b/static/img/miscellaneous/XLS-MDB/toc3.png new file mode 100644 index 00000000..563e5cc0 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/toc3.png differ diff --git a/static/img/miscellaneous/XLS-MDB/toc4.png b/static/img/miscellaneous/XLS-MDB/toc4.png new file mode 100644 index 00000000..e7bee944 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/toc4.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step1.png b/static/img/miscellaneous/XLS-MDB/window-sche-step1.png new file mode 100644 index 00000000..615ef8e4 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step1.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step10.png b/static/img/miscellaneous/XLS-MDB/window-sche-step10.png new file mode 100644 index 00000000..99138e0d Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step10.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step12.png b/static/img/miscellaneous/XLS-MDB/window-sche-step12.png new file mode 100644 index 00000000..71b5abda Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step12.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step14.png b/static/img/miscellaneous/XLS-MDB/window-sche-step14.png new file mode 100644 index 00000000..363245dd Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step14.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step15.png b/static/img/miscellaneous/XLS-MDB/window-sche-step15.png new file mode 100644 index 00000000..9eb666da Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step15.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step17.png b/static/img/miscellaneous/XLS-MDB/window-sche-step17.png new file mode 100644 index 00000000..66cc6d04 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step17.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step2.png b/static/img/miscellaneous/XLS-MDB/window-sche-step2.png new file mode 100644 index 00000000..6d5da16d Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step2.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step3.png b/static/img/miscellaneous/XLS-MDB/window-sche-step3.png new file mode 100644 index 00000000..6d5da16d Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step3.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step4.png b/static/img/miscellaneous/XLS-MDB/window-sche-step4.png new file mode 100644 index 00000000..e2cb6065 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step4.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step6.png b/static/img/miscellaneous/XLS-MDB/window-sche-step6.png new file mode 100644 index 00000000..d7152862 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step6.png differ diff --git a/static/img/miscellaneous/XLS-MDB/window-sche-step7.png b/static/img/miscellaneous/XLS-MDB/window-sche-step7.png new file mode 100644 index 00000000..55b0f183 Binary files /dev/null and b/static/img/miscellaneous/XLS-MDB/window-sche-step7.png differ diff --git a/static/img/miscellaneous/acc-cash-register-import/cashreg-imp.png b/static/img/miscellaneous/acc-cash-register-import/cashreg-imp.png new file mode 100644 index 00000000..ee5d0493 Binary files /dev/null and b/static/img/miscellaneous/acc-cash-register-import/cashreg-imp.png differ diff --git a/static/img/miscellaneous/acc-cash-register-import/cashreg-step.png b/static/img/miscellaneous/acc-cash-register-import/cashreg-step.png new file mode 100644 index 00000000..b2c3d076 Binary files /dev/null and b/static/img/miscellaneous/acc-cash-register-import/cashreg-step.png differ diff --git a/static/img/miscellaneous/acc-global/acc-global-compare-price-step1.png b/static/img/miscellaneous/acc-global/acc-global-compare-price-step1.png new file mode 100644 index 00000000..18c50b3c Binary files /dev/null and b/static/img/miscellaneous/acc-global/acc-global-compare-price-step1.png differ diff --git a/static/img/miscellaneous/acc-global/acc-global-compare-price-step4.png b/static/img/miscellaneous/acc-global/acc-global-compare-price-step4.png new file mode 100644 index 00000000..bed69674 Binary files /dev/null and b/static/img/miscellaneous/acc-global/acc-global-compare-price-step4.png differ diff --git a/static/img/miscellaneous/acc-global/acc-global-faq.png b/static/img/miscellaneous/acc-global/acc-global-faq.png new file mode 100644 index 00000000..260fb591 Binary files /dev/null and b/static/img/miscellaneous/acc-global/acc-global-faq.png differ diff --git a/static/img/miscellaneous/acc-global/acc-global-price-change-step1.png b/static/img/miscellaneous/acc-global/acc-global-price-change-step1.png new file mode 100644 index 00000000..c3350d49 Binary files /dev/null and b/static/img/miscellaneous/acc-global/acc-global-price-change-step1.png differ diff --git a/static/img/miscellaneous/acc-global/acc-global-price-change-step3.png b/static/img/miscellaneous/acc-global/acc-global-price-change-step3.png new file mode 100644 index 00000000..91d73f96 Binary files /dev/null and b/static/img/miscellaneous/acc-global/acc-global-price-change-step3.png differ diff --git a/static/img/getting-started/user-guide/203.png b/static/img/miscellaneous/bad-debt/203.png similarity index 100% rename from static/img/getting-started/user-guide/203.png rename to static/img/miscellaneous/bad-debt/203.png diff --git a/static/img/getting-started/user-guide/204.png b/static/img/miscellaneous/bad-debt/204.png similarity index 100% rename from static/img/getting-started/user-guide/204.png rename to static/img/miscellaneous/bad-debt/204.png diff --git a/static/img/business-nature-industries/photocopier-meter/1.png b/static/img/miscellaneous/business-nature-industries/photocopier-meter/1.png similarity index 100% rename from static/img/business-nature-industries/photocopier-meter/1.png rename to static/img/miscellaneous/business-nature-industries/photocopier-meter/1.png diff --git a/static/img/business-nature-industries/photocopier-meter/2.png b/static/img/miscellaneous/business-nature-industries/photocopier-meter/2.png similarity index 100% rename from static/img/business-nature-industries/photocopier-meter/2.png rename to static/img/miscellaneous/business-nature-industries/photocopier-meter/2.png diff --git a/static/img/business-nature-industries/photocopier-meter/3.png b/static/img/miscellaneous/business-nature-industries/photocopier-meter/3.png similarity index 100% rename from static/img/business-nature-industries/photocopier-meter/3.png rename to static/img/miscellaneous/business-nature-industries/photocopier-meter/3.png diff --git a/static/img/business-nature-industries/photocopier-meter/4.png b/static/img/miscellaneous/business-nature-industries/photocopier-meter/4.png similarity index 100% rename from static/img/business-nature-industries/photocopier-meter/4.png rename to static/img/miscellaneous/business-nature-industries/photocopier-meter/4.png diff --git a/static/img/business-nature-industries/photocopier-meter/5.png b/static/img/miscellaneous/business-nature-industries/photocopier-meter/5.png similarity index 100% rename from static/img/business-nature-industries/photocopier-meter/5.png rename to static/img/miscellaneous/business-nature-industries/photocopier-meter/5.png diff --git a/static/img/miscellaneous/business-nature-industries/photocopierGuide/photocopier-invoice.jpg b/static/img/miscellaneous/business-nature-industries/photocopierGuide/photocopier-invoice.jpg new file mode 100644 index 00000000..0fbecd61 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/photocopierGuide/photocopier-invoice.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/photocopierGuide/photocopier-quotation.jpg b/static/img/miscellaneous/business-nature-industries/photocopierGuide/photocopier-quotation.jpg new file mode 100644 index 00000000..ef5befac Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/photocopierGuide/photocopier-quotation.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/custDueDocListing.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/custDueDocListing.jpg new file mode 100644 index 00000000..af5934f1 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/custDueDocListing.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/custGenerate.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/custGenerate.jpg new file mode 100644 index 00000000..41bbdbba Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/custGenerate.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/custList.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/custList.jpg new file mode 100644 index 00000000..f6f3bd9d Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/custList.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/custPaymentEntry.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/custPaymentEntry.jpg new file mode 100644 index 00000000..3153b5c3 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/custPaymentEntry.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/dueInterest.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/dueInterest.jpg new file mode 100644 index 00000000..1385365f Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/dueInterest.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/maintainCust.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/maintainCust.jpg new file mode 100644 index 00000000..81574fa0 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/maintainCust.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/meterReading.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/meterReading.jpg new file mode 100644 index 00000000..575bd1cb Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/meterReading.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/quotMaintainence.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/quotMaintainence.jpg new file mode 100644 index 00000000..79224e78 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/quotMaintainence.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/recurring-quotation-2.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/recurring-quotation-2.jpg new file mode 100644 index 00000000..ed4dc49c Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/recurring-quotation-2.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/recurring-quotation.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/recurring-quotation.jpg new file mode 100644 index 00000000..894bd6d8 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/recurring-quotation.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/salesDocList.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/salesDocList.jpg new file mode 100644 index 00000000..dbfa8c89 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/salesDocList.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/tick.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/tick.jpg new file mode 100644 index 00000000..14218a52 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/tick.jpg differ diff --git a/static/img/miscellaneous/business-nature-industries/recurringGuide/zProfile.jpg b/static/img/miscellaneous/business-nature-industries/recurringGuide/zProfile.jpg new file mode 100644 index 00000000..4eb4bde0 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/recurringGuide/zProfile.jpg differ diff --git a/static/img/business-nature-industries/sample-recurring-company/1.png b/static/img/miscellaneous/business-nature-industries/sample-recurring-company/1.png similarity index 100% rename from static/img/business-nature-industries/sample-recurring-company/1.png rename to static/img/miscellaneous/business-nature-industries/sample-recurring-company/1.png diff --git a/static/img/business-nature-industries/sample-recurring-company/2.png b/static/img/miscellaneous/business-nature-industries/sample-recurring-company/2.png similarity index 100% rename from static/img/business-nature-industries/sample-recurring-company/2.png rename to static/img/miscellaneous/business-nature-industries/sample-recurring-company/2.png diff --git a/static/img/business-nature-industries/sample-recurring-company/3.png b/static/img/miscellaneous/business-nature-industries/sample-recurring-company/3.png similarity index 100% rename from static/img/business-nature-industries/sample-recurring-company/3.png rename to static/img/miscellaneous/business-nature-industries/sample-recurring-company/3.png diff --git a/static/img/business-nature-industries/sample-recurring-company/4.png b/static/img/miscellaneous/business-nature-industries/sample-recurring-company/4.png similarity index 100% rename from static/img/business-nature-industries/sample-recurring-company/4.png rename to static/img/miscellaneous/business-nature-industries/sample-recurring-company/4.png diff --git a/static/img/business-nature-industries/sample-recurring-company/5.png b/static/img/miscellaneous/business-nature-industries/sample-recurring-company/5.png similarity index 100% rename from static/img/business-nature-industries/sample-recurring-company/5.png rename to static/img/miscellaneous/business-nature-industries/sample-recurring-company/5.png diff --git a/static/img/business-nature-industries/sample-recurring-company/6.png b/static/img/miscellaneous/business-nature-industries/sample-recurring-company/6.png similarity index 100% rename from static/img/business-nature-industries/sample-recurring-company/6.png rename to static/img/miscellaneous/business-nature-industries/sample-recurring-company/6.png diff --git a/static/img/business-nature-industries/sample-recurring-company/7.png b/static/img/miscellaneous/business-nature-industries/sample-recurring-company/7.png similarity index 100% rename from static/img/business-nature-industries/sample-recurring-company/7.png rename to static/img/miscellaneous/business-nature-industries/sample-recurring-company/7.png diff --git a/static/img/miscellaneous/business-nature-industries/sample-recurring-company/ch352.jpg b/static/img/miscellaneous/business-nature-industries/sample-recurring-company/ch352.jpg new file mode 100644 index 00000000..e5553594 Binary files /dev/null and b/static/img/miscellaneous/business-nature-industries/sample-recurring-company/ch352.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/P&L-Project.png b/static/img/miscellaneous/sqlControlCenter/P&L-Project.png new file mode 100644 index 00000000..cd7bc2e5 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/P&L-Project.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/agent&Area.png b/static/img/miscellaneous/sqlControlCenter/agent&Area.png new file mode 100644 index 00000000..2b977835 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/agent&Area.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/bonusStatement.jpg b/static/img/miscellaneous/sqlControlCenter/bonusStatement.jpg new file mode 100644 index 00000000..86472f8d Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/bonusStatement.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/branchControlSettings.jpg b/static/img/miscellaneous/sqlControlCenter/branchControlSettings.jpg new file mode 100644 index 00000000..e5c55a28 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/branchControlSettings.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/columns-udf-rate.png b/static/img/miscellaneous/sqlControlCenter/columns-udf-rate.png new file mode 100644 index 00000000..c48c8d12 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/columns-udf-rate.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/createquickform-save.png b/static/img/miscellaneous/sqlControlCenter/createquickform-save.png new file mode 100644 index 00000000..15c1ee07 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/createquickform-save.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/custList.png b/static/img/miscellaneous/sqlControlCenter/custList.png new file mode 100644 index 00000000..5c283b97 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/custList.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/event-properties-salesinvoice.png b/static/img/miscellaneous/sqlControlCenter/event-properties-salesinvoice.png new file mode 100644 index 00000000..06130a25 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/event-properties-salesinvoice.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/event-properties.png b/static/img/miscellaneous/sqlControlCenter/event-properties.png new file mode 100644 index 00000000..06130a25 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/event-properties.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/extraDeliveryOrder.jpg b/static/img/miscellaneous/sqlControlCenter/extraDeliveryOrder.jpg new file mode 100644 index 00000000..ac7bc99f Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/extraDeliveryOrder.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/extratab.png b/static/img/miscellaneous/sqlControlCenter/extratab.png new file mode 100644 index 00000000..dc3727ac Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/extratab.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/filterCustBy.jpg b/static/img/miscellaneous/sqlControlCenter/filterCustBy.jpg new file mode 100644 index 00000000..8fa4207f Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/filterCustBy.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/filterSuppliersBy.jpg b/static/img/miscellaneous/sqlControlCenter/filterSuppliersBy.jpg new file mode 100644 index 00000000..ecf2b832 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/filterSuppliersBy.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/input-values-for-udf.png b/static/img/miscellaneous/sqlControlCenter/input-values-for-udf.png new file mode 100644 index 00000000..d2726115 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/input-values-for-udf.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/invoice-More.jpg b/static/img/miscellaneous/sqlControlCenter/invoice-More.jpg new file mode 100644 index 00000000..0dfc4e52 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/invoice-More.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/item-code-ant.png b/static/img/miscellaneous/sqlControlCenter/item-code-ant.png new file mode 100644 index 00000000..7a4b12d1 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/item-code-ant.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/item-fields-unit-price.png b/static/img/miscellaneous/sqlControlCenter/item-fields-unit-price.png new file mode 100644 index 00000000..8de0d753 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/item-fields-unit-price.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/itemCode.png b/static/img/miscellaneous/sqlControlCenter/itemCode.png new file mode 100644 index 00000000..829858d8 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/itemCode.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/lockItemCode.jpg b/static/img/miscellaneous/sqlControlCenter/lockItemCode.jpg new file mode 100644 index 00000000..6377a6b5 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/lockItemCode.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/lockProject.jpg b/static/img/miscellaneous/sqlControlCenter/lockProject.jpg new file mode 100644 index 00000000..a6f94bec Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/lockProject.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/name-event-new.png b/static/img/miscellaneous/sqlControlCenter/name-event-new.png new file mode 100644 index 00000000..12c8d008 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/name-event-new.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/new-event-salesinvoice.png b/static/img/miscellaneous/sqlControlCenter/new-event-salesinvoice.png new file mode 100644 index 00000000..5247ba32 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/new-event-salesinvoice.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/new-event.png b/static/img/miscellaneous/sqlControlCenter/new-event.png new file mode 100644 index 00000000..5247ba32 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/new-event.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/new-name-quickformdesign.png b/static/img/miscellaneous/sqlControlCenter/new-name-quickformdesign.png new file mode 100644 index 00000000..6664d94e Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/new-name-quickformdesign.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/new-salesinvoice-with-amount.png b/static/img/miscellaneous/sqlControlCenter/new-salesinvoice-with-amount.png new file mode 100644 index 00000000..6515bb83 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/new-salesinvoice-with-amount.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/newevent-salesinvoice.png b/static/img/miscellaneous/sqlControlCenter/newevent-salesinvoice.png new file mode 100644 index 00000000..5247ba32 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/newevent-salesinvoice.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/newquickformdesign.png b/static/img/miscellaneous/sqlControlCenter/newquickformdesign.png new file mode 100644 index 00000000..035ad94f Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/newquickformdesign.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/ongrid-column-value-changed.png b/static/img/miscellaneous/sqlControlCenter/ongrid-column-value-changed.png new file mode 100644 index 00000000..a5116c7b Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/ongrid-column-value-changed.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/outstanding-balance-sales-invoice.png b/static/img/miscellaneous/sqlControlCenter/outstanding-balance-sales-invoice.png new file mode 100644 index 00000000..c869dad6 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/outstanding-balance-sales-invoice.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/payMethods.png b/static/img/miscellaneous/sqlControlCenter/payMethods.png new file mode 100644 index 00000000..a339da49 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/payMethods.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/payment.png b/static/img/miscellaneous/sqlControlCenter/payment.png new file mode 100644 index 00000000..0ec178fc Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/payment.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/printProfit&LossByDoc.png b/static/img/miscellaneous/sqlControlCenter/printProfit&LossByDoc.png new file mode 100644 index 00000000..d98036db Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/printProfit&LossByDoc.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/project&Location.png b/static/img/miscellaneous/sqlControlCenter/project&Location.png new file mode 100644 index 00000000..9882f9c7 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/project&Location.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/reporting.png b/static/img/miscellaneous/sqlControlCenter/reporting.png new file mode 100644 index 00000000..3345b8f2 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/reporting.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-itemfields.png b/static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-itemfields.png new file mode 100644 index 00000000..79411442 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-itemfields.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-ongrid.png b/static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-ongrid.png new file mode 100644 index 00000000..20be6f65 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-ongrid.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-onopencalc.png b/static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-onopencalc.png new file mode 100644 index 00000000..74f126c5 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/sales-salesinvoice-onopencalc.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/shipping-CustomerInvoice.jpg b/static/img/miscellaneous/sqlControlCenter/shipping-CustomerInvoice.jpg new file mode 100644 index 00000000..51516a17 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/shipping-CustomerInvoice.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/stock-item-fields.png b/static/img/miscellaneous/sqlControlCenter/stock-item-fields.png new file mode 100644 index 00000000..91aba948 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/stock-item-fields.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/stock-stockitem-newfield-will-be-here.png b/static/img/miscellaneous/sqlControlCenter/stock-stockitem-newfield-will-be-here.png new file mode 100644 index 00000000..3437175e Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/stock-stockitem-newfield-will-be-here.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/stockItemClaimRate.jpg b/static/img/miscellaneous/sqlControlCenter/stockItemClaimRate.jpg new file mode 100644 index 00000000..ae7e893b Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/stockItemClaimRate.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/stockItemVoucherRate.jpg b/static/img/miscellaneous/sqlControlCenter/stockItemVoucherRate.jpg new file mode 100644 index 00000000..59c254b9 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/stockItemVoucherRate.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/udf-unit-price.png b/static/img/miscellaneous/sqlControlCenter/udf-unit-price.png new file mode 100644 index 00000000..c70e6368 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/udf-unit-price.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/udfprice-udfrate.png b/static/img/miscellaneous/sqlControlCenter/udfprice-udfrate.png new file mode 100644 index 00000000..826fb7f3 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/udfprice-udfrate.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/uomtab.png b/static/img/miscellaneous/sqlControlCenter/uomtab.png new file mode 100644 index 00000000..6370ffa4 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/uomtab.png differ diff --git a/static/img/miscellaneous/sqlControlCenter/updateExtraDO.jpg b/static/img/miscellaneous/sqlControlCenter/updateExtraDO.jpg new file mode 100644 index 00000000..49589284 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/updateExtraDO.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/utdPoint.jpg b/static/img/miscellaneous/sqlControlCenter/utdPoint.jpg new file mode 100644 index 00000000..571fe3a2 Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/utdPoint.jpg differ diff --git a/static/img/miscellaneous/sqlControlCenter/valuesfor-udfprice-udfrate.png b/static/img/miscellaneous/sqlControlCenter/valuesfor-udfprice-udfrate.png new file mode 100644 index 00000000..734b5afe Binary files /dev/null and b/static/img/miscellaneous/sqlControlCenter/valuesfor-udfprice-udfrate.png differ diff --git a/static/img/getting-started/user-guide/205.png b/static/img/miscellaneous/tax-code/205.png similarity index 100% rename from static/img/getting-started/user-guide/205.png rename to static/img/miscellaneous/tax-code/205.png diff --git a/static/img/miscellaneous/third-party-export/dksh-customer.png b/static/img/miscellaneous/third-party-export/dksh-customer.png new file mode 100644 index 00000000..0d7b68ac Binary files /dev/null and b/static/img/miscellaneous/third-party-export/dksh-customer.png differ diff --git a/static/img/miscellaneous/third-party-export/dksh-exp.png b/static/img/miscellaneous/third-party-export/dksh-exp.png new file mode 100644 index 00000000..e4ec08b0 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/dksh-exp.png differ diff --git a/static/img/miscellaneous/third-party-export/dksh-firbird.png b/static/img/miscellaneous/third-party-export/dksh-firbird.png new file mode 100644 index 00000000..93685a5f Binary files /dev/null and b/static/img/miscellaneous/third-party-export/dksh-firbird.png differ diff --git a/static/img/miscellaneous/third-party-export/dksh-item.png b/static/img/miscellaneous/third-party-export/dksh-item.png new file mode 100644 index 00000000..f0954de2 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/dksh-item.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-exp.png b/static/img/miscellaneous/third-party-export/michelin-exp.png new file mode 100644 index 00000000..88a80791 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-exp.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-firebird.png b/static/img/miscellaneous/third-party-export/michelin-firebird.png new file mode 100644 index 00000000..93685a5f Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-firebird.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step1.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step1.png new file mode 100644 index 00000000..87c75f7b Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step1.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step11.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step11.png new file mode 100644 index 00000000..50f83e03 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step11.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step13.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step13.png new file mode 100644 index 00000000..2f5fe267 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step13.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step14.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step14.png new file mode 100644 index 00000000..9eb666da Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step14.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step16.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step16.png new file mode 100644 index 00000000..66cc6d04 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step16.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step2.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step2.png new file mode 100644 index 00000000..17f25de6 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step2.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step3.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step3.png new file mode 100644 index 00000000..89f721f1 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step3.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step4.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step4.png new file mode 100644 index 00000000..cddcaf8c Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step4.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step6.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step6.png new file mode 100644 index 00000000..8d079dca Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step6.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step7.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step7.png new file mode 100644 index 00000000..82c5910b Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step7.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-schedule-step9.png b/static/img/miscellaneous/third-party-export/michelin-schedule-step9.png new file mode 100644 index 00000000..f0c365e9 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-schedule-step9.png differ diff --git a/static/img/miscellaneous/third-party-export/michelin-sqlacc.png b/static/img/miscellaneous/third-party-export/michelin-sqlacc.png new file mode 100644 index 00000000..25c88956 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/michelin-sqlacc.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-exp-step4.png b/static/img/miscellaneous/third-party-export/samsung-exp-step4.png new file mode 100644 index 00000000..5322315d Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-exp-step4.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-exp-step7.png b/static/img/miscellaneous/third-party-export/samsung-exp-step7.png new file mode 100644 index 00000000..34f985fd Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-exp-step7.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-exp.png b/static/img/miscellaneous/third-party-export/samsung-exp.png new file mode 100644 index 00000000..5eb89e32 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-exp.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step1.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step1.png new file mode 100644 index 00000000..716f0cce Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step1.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step10.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step10.png new file mode 100644 index 00000000..fb48f276 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step10.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step12.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step12.png new file mode 100644 index 00000000..a6563bae Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step12.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step14.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step14.png new file mode 100644 index 00000000..b55272fd Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step14.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step15.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step15.png new file mode 100644 index 00000000..73c64233 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step15.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step17.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step17.png new file mode 100644 index 00000000..249f2016 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step17.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step2.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step2.png new file mode 100644 index 00000000..3154a75e Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step2.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step3.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step3.png new file mode 100644 index 00000000..b7be5a33 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step3.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step4.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step4.png new file mode 100644 index 00000000..6aa40ff4 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step4.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step6.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step6.png new file mode 100644 index 00000000..50c5be73 Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step6.png differ diff --git a/static/img/miscellaneous/third-party-export/samsung-win-sche-step7.png b/static/img/miscellaneous/third-party-export/samsung-win-sche-step7.png new file mode 100644 index 00000000..ac9d439e Binary files /dev/null and b/static/img/miscellaneous/third-party-export/samsung-win-sche-step7.png differ diff --git a/static/img/miscellaneous/third-party-import/dryper-cn-export.png b/static/img/miscellaneous/third-party-import/dryper-cn-export.png new file mode 100644 index 00000000..305df79b Binary files /dev/null and b/static/img/miscellaneous/third-party-import/dryper-cn-export.png differ diff --git a/static/img/miscellaneous/third-party-import/dryper-so-step1.png b/static/img/miscellaneous/third-party-import/dryper-so-step1.png new file mode 100644 index 00000000..4c19ef46 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/dryper-so-step1.png differ diff --git a/static/img/miscellaneous/third-party-import/dryper-so-step3.png b/static/img/miscellaneous/third-party-import/dryper-so-step3.png new file mode 100644 index 00000000..ab889939 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/dryper-so-step3.png differ diff --git a/static/img/miscellaneous/third-party-import/faq-3level.png b/static/img/miscellaneous/third-party-import/faq-3level.png new file mode 100644 index 00000000..91de61de Binary files /dev/null and b/static/img/miscellaneous/third-party-import/faq-3level.png differ diff --git a/static/img/miscellaneous/third-party-import/fnn-detail1.png b/static/img/miscellaneous/third-party-import/fnn-detail1.png new file mode 100644 index 00000000..4bdff52c Binary files /dev/null and b/static/img/miscellaneous/third-party-import/fnn-detail1.png differ diff --git a/static/img/miscellaneous/third-party-import/fnn-detail2.png b/static/img/miscellaneous/third-party-import/fnn-detail2.png new file mode 100644 index 00000000..7c58c33b Binary files /dev/null and b/static/img/miscellaneous/third-party-import/fnn-detail2.png differ diff --git a/static/img/miscellaneous/third-party-import/fnn-export.png b/static/img/miscellaneous/third-party-import/fnn-export.png new file mode 100644 index 00000000..147b6d6c Binary files /dev/null and b/static/img/miscellaneous/third-party-import/fnn-export.png differ diff --git a/static/img/miscellaneous/third-party-import/fnn-import1.png b/static/img/miscellaneous/third-party-import/fnn-import1.png new file mode 100644 index 00000000..f23dfbf0 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/fnn-import1.png differ diff --git a/static/img/miscellaneous/third-party-import/fnn-import2.png b/static/img/miscellaneous/third-party-import/fnn-import2.png new file mode 100644 index 00000000..89aa101b Binary files /dev/null and b/static/img/miscellaneous/third-party-import/fnn-import2.png differ diff --git a/static/img/miscellaneous/third-party-import/fnn-import3.png b/static/img/miscellaneous/third-party-import/fnn-import3.png new file mode 100644 index 00000000..e96e1f60 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/fnn-import3.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-detail-1.png b/static/img/miscellaneous/third-party-import/mamee-detail-1.png new file mode 100644 index 00000000..f443907c Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-detail-1.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-detail-2.png b/static/img/miscellaneous/third-party-import/mamee-detail-2.png new file mode 100644 index 00000000..506ef91a Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-detail-2.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-header-1.png b/static/img/miscellaneous/third-party-import/mamee-header-1.png new file mode 100644 index 00000000..8ecf3afc Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-header-1.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-header-2.png b/static/img/miscellaneous/third-party-import/mamee-header-2.png new file mode 100644 index 00000000..00e82c85 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-header-2.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-header-xproduct.png b/static/img/miscellaneous/third-party-import/mamee-header-xproduct.png new file mode 100644 index 00000000..74483344 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-header-xproduct.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-import1.png b/static/img/miscellaneous/third-party-import/mamee-import1.png new file mode 100644 index 00000000..b66ebd05 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-import1.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-import2.png b/static/img/miscellaneous/third-party-import/mamee-import2.png new file mode 100644 index 00000000..4147872e Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-import2.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-npr-step1.png b/static/img/miscellaneous/third-party-import/mamee-npr-step1.png new file mode 100644 index 00000000..b4533a58 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-npr-step1.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-npr-step2.png b/static/img/miscellaneous/third-party-import/mamee-npr-step2.png new file mode 100644 index 00000000..97dbb38c Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-npr-step2.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-pr-step1.png b/static/img/miscellaneous/third-party-import/mamee-pr-step1.png new file mode 100644 index 00000000..df6e09f6 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-pr-step1.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-pr-step2.png b/static/img/miscellaneous/third-party-import/mamee-pr-step2.png new file mode 100644 index 00000000..355cb096 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-pr-step2.png differ diff --git a/static/img/miscellaneous/third-party-import/mamee-pr-step4.png b/static/img/miscellaneous/third-party-import/mamee-pr-step4.png new file mode 100644 index 00000000..68cbfd32 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/mamee-pr-step4.png differ diff --git a/static/img/miscellaneous/third-party-import/slph-step.png b/static/img/miscellaneous/third-party-import/slph-step.png new file mode 100644 index 00000000..cef2bdd3 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/slph-step.png differ diff --git a/static/img/miscellaneous/third-party-import/slph_import.png b/static/img/miscellaneous/third-party-import/slph_import.png new file mode 100644 index 00000000..7a1d9bba Binary files /dev/null and b/static/img/miscellaneous/third-party-import/slph_import.png differ diff --git a/static/img/miscellaneous/third-party-import/unilever-import-step2.png b/static/img/miscellaneous/third-party-import/unilever-import-step2.png new file mode 100644 index 00000000..6c104b50 Binary files /dev/null and b/static/img/miscellaneous/third-party-import/unilever-import-step2.png differ diff --git a/static/img/miscellaneous/third-party-import/unilever-import-step3.png b/static/img/miscellaneous/third-party-import/unilever-import-step3.png new file mode 100644 index 00000000..3b3f922a Binary files /dev/null and b/static/img/miscellaneous/third-party-import/unilever-import-step3.png differ diff --git a/static/img/miscellaneous/third-party-import/unilever-import-step4.png b/static/img/miscellaneous/third-party-import/unilever-import-step4.png new file mode 100644 index 00000000..48a1aa0a Binary files /dev/null and b/static/img/miscellaneous/third-party-import/unilever-import-step4.png differ diff --git a/static/img/report/fastReport-6to0TaxRate/1.png b/static/img/report/fastReport-6to0TaxRate/1.png deleted file mode 100644 index 5e942f90..00000000 Binary files a/static/img/report/fastReport-6to0TaxRate/1.png and /dev/null differ diff --git a/static/img/report/fastReport-6to0TaxRate/2.png b/static/img/report/fastReport-6to0TaxRate/2.png deleted file mode 100644 index da3c72a0..00000000 Binary files a/static/img/report/fastReport-6to0TaxRate/2.png and /dev/null differ diff --git a/static/img/report/fastReport-6to0TaxRate/3.png b/static/img/report/fastReport-6to0TaxRate/3.png deleted file mode 100644 index c9573192..00000000 Binary files a/static/img/report/fastReport-6to0TaxRate/3.png and /dev/null differ diff --git a/static/img/report/fastReport-6to0TaxRate/4.png b/static/img/report/fastReport-6to0TaxRate/4.png deleted file mode 100644 index 1cf8910a..00000000 Binary files a/static/img/report/fastReport-6to0TaxRate/4.png and /dev/null differ diff --git a/static/img/report/fastReport-LRptNewGrpPg/1.png b/static/img/report/fastReport-LRptNewGrpPg/1.png deleted file mode 100644 index 6cca047b..00000000 Binary files a/static/img/report/fastReport-LRptNewGrpPg/1.png and /dev/null differ diff --git a/static/img/report/fastReport-LRptNewGrpPg/2.png b/static/img/report/fastReport-LRptNewGrpPg/2.png deleted file mode 100644 index 61bf8eb7..00000000 Binary files a/static/img/report/fastReport-LRptNewGrpPg/2.png and /dev/null differ diff --git a/static/img/report/fastReport-LRptNewGrpPg/3.png b/static/img/report/fastReport-LRptNewGrpPg/3.png deleted file mode 100644 index 28a47dbc..00000000 Binary files a/static/img/report/fastReport-LRptNewGrpPg/3.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/1.png b/static/img/report/fastReport-MoreDescMultipage/1.png deleted file mode 100644 index 689382f0..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/1.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/10.png b/static/img/report/fastReport-MoreDescMultipage/10.png deleted file mode 100644 index d16ff89b..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/10.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/11.png b/static/img/report/fastReport-MoreDescMultipage/11.png deleted file mode 100644 index 094dce96..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/11.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/12.png b/static/img/report/fastReport-MoreDescMultipage/12.png deleted file mode 100644 index fb6e639e..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/12.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/13.png b/static/img/report/fastReport-MoreDescMultipage/13.png deleted file mode 100644 index 28c44ee8..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/13.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/2.png b/static/img/report/fastReport-MoreDescMultipage/2.png deleted file mode 100644 index fa3100aa..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/2.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/3.png b/static/img/report/fastReport-MoreDescMultipage/3.png deleted file mode 100644 index 525e3bfe..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/3.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/4.png b/static/img/report/fastReport-MoreDescMultipage/4.png deleted file mode 100644 index 4e1eb88a..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/4.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/5.png b/static/img/report/fastReport-MoreDescMultipage/5.png deleted file mode 100644 index 34b0e4fd..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/5.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/6.png b/static/img/report/fastReport-MoreDescMultipage/6.png deleted file mode 100644 index 2840683a..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/6.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/7.png b/static/img/report/fastReport-MoreDescMultipage/7.png deleted file mode 100644 index 3854e04e..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/7.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/8.png b/static/img/report/fastReport-MoreDescMultipage/8.png deleted file mode 100644 index 1fadcae5..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/8.png and /dev/null differ diff --git a/static/img/report/fastReport-MoreDescMultipage/9.png b/static/img/report/fastReport-MoreDescMultipage/9.png deleted file mode 100644 index 7532945f..00000000 Binary files a/static/img/report/fastReport-MoreDescMultipage/9.png and /dev/null differ diff --git a/static/img/report/fastReport-batchEmailCurDate/1.png b/static/img/report/fastReport-batchEmailCurDate/1.png deleted file mode 100644 index 2c4165e4..00000000 Binary files a/static/img/report/fastReport-batchEmailCurDate/1.png and /dev/null differ diff --git a/static/img/report/fastReport-batchEmailCurDate/2.png b/static/img/report/fastReport-batchEmailCurDate/2.png deleted file mode 100644 index faadec61..00000000 Binary files a/static/img/report/fastReport-batchEmailCurDate/2.png and /dev/null differ diff --git a/static/img/report/fastReport-batchEmailCurDate/3.png b/static/img/report/fastReport-batchEmailCurDate/3.png deleted file mode 100644 index 5337c63b..00000000 Binary files a/static/img/report/fastReport-batchEmailCurDate/3.png and /dev/null differ diff --git a/static/img/report/fastReport-footerTxtLstPg/1.png b/static/img/report/fastReport-footerTxtLstPg/1.png deleted file mode 100644 index 3615afc1..00000000 Binary files a/static/img/report/fastReport-footerTxtLstPg/1.png and /dev/null differ diff --git a/static/img/report/fastReport-footerTxtLstPg/2.png b/static/img/report/fastReport-footerTxtLstPg/2.png deleted file mode 100644 index d9cc9d43..00000000 Binary files a/static/img/report/fastReport-footerTxtLstPg/2.png and /dev/null differ diff --git a/static/img/report/fastReport-hideZero/1.png b/static/img/report/fastReport-hideZero/1.png deleted file mode 100644 index 8edeae96..00000000 Binary files a/static/img/report/fastReport-hideZero/1.png and /dev/null differ diff --git a/static/img/report/fastReport-hideZero/2.png b/static/img/report/fastReport-hideZero/2.png deleted file mode 100644 index 1492e47d..00000000 Binary files a/static/img/report/fastReport-hideZero/2.png and /dev/null differ diff --git a/static/img/report/fastReport-hideZero/3.png b/static/img/report/fastReport-hideZero/3.png deleted file mode 100644 index ea7c0aa9..00000000 Binary files a/static/img/report/fastReport-hideZero/3.png and /dev/null differ diff --git a/static/img/report/fastReport-prtDTime/1.png b/static/img/report/fastReport-prtDTime/1.png deleted file mode 100644 index 2b54456c..00000000 Binary files a/static/img/report/fastReport-prtDTime/1.png and /dev/null differ diff --git a/static/img/report/fastReport-prtDTime/2.png b/static/img/report/fastReport-prtDTime/2.png deleted file mode 100644 index b3b84c27..00000000 Binary files a/static/img/report/fastReport-prtDTime/2.png and /dev/null differ diff --git a/static/img/report/fastReport-prtDTime/A.png b/static/img/report/fastReport-prtDTime/A.png deleted file mode 100644 index f84f277c..00000000 Binary files a/static/img/report/fastReport-prtDTime/A.png and /dev/null differ diff --git a/static/img/report/fastReport-rptPrtCount/1.png b/static/img/report/fastReport-rptPrtCount/1.png deleted file mode 100644 index 51432f39..00000000 Binary files a/static/img/report/fastReport-rptPrtCount/1.png and /dev/null differ diff --git a/static/img/report/fastReport-rptPrtCount/2.png b/static/img/report/fastReport-rptPrtCount/2.png deleted file mode 100644 index 576c5a28..00000000 Binary files a/static/img/report/fastReport-rptPrtCount/2.png and /dev/null differ diff --git a/static/img/report/fastReport-rptPrtCount/3.png b/static/img/report/fastReport-rptPrtCount/3.png deleted file mode 100644 index 99313adc..00000000 Binary files a/static/img/report/fastReport-rptPrtCount/3.png and /dev/null differ diff --git a/static/img/report/fastReport-stpPos/1.png b/static/img/report/fastReport-stpPos/1.png deleted file mode 100644 index 747e0b5c..00000000 Binary files a/static/img/report/fastReport-stpPos/1.png and /dev/null differ diff --git a/static/img/report/fastReport-stpPos/2.png b/static/img/report/fastReport-stpPos/2.png deleted file mode 100644 index fe8426b4..00000000 Binary files a/static/img/report/fastReport-stpPos/2.png and /dev/null differ diff --git a/static/img/report/fastReport-stpPos/3.png b/static/img/report/fastReport-stpPos/3.png deleted file mode 100644 index b7404253..00000000 Binary files a/static/img/report/fastReport-stpPos/3.png and /dev/null differ diff --git a/static/img/report/fastReport-stpPos/4.png b/static/img/report/fastReport-stpPos/4.png deleted file mode 100644 index 786534d4..00000000 Binary files a/static/img/report/fastReport-stpPos/4.png and /dev/null differ diff --git a/static/img/stock/change-barcode-label-size/1.png b/static/img/stock/change-barcode-label-size/1.png deleted file mode 100644 index 7448d41d..00000000 Binary files a/static/img/stock/change-barcode-label-size/1.png and /dev/null differ diff --git a/static/img/stock/change-barcode-label-size/2.png b/static/img/stock/change-barcode-label-size/2.png deleted file mode 100644 index 89df6c80..00000000 Binary files a/static/img/stock/change-barcode-label-size/2.png and /dev/null differ diff --git a/static/img/stock/change-barcode-label-size/3.png b/static/img/stock/change-barcode-label-size/3.png deleted file mode 100644 index c46c5d6f..00000000 Binary files a/static/img/stock/change-barcode-label-size/3.png and /dev/null differ diff --git a/static/img/stock/change-barcode-label-size/4.png b/static/img/stock/change-barcode-label-size/4.png deleted file mode 100644 index 15e9d64e..00000000 Binary files a/static/img/stock/change-barcode-label-size/4.png and /dev/null differ diff --git a/static/img/stock/change-barcode-label-size/5.png b/static/img/stock/change-barcode-label-size/5.png deleted file mode 100644 index a4d1ed51..00000000 Binary files a/static/img/stock/change-barcode-label-size/5.png and /dev/null differ diff --git a/static/img/stock/change-barcode-label-size/6.png b/static/img/stock/change-barcode-label-size/6.png deleted file mode 100644 index 3785b65f..00000000 Binary files a/static/img/stock/change-barcode-label-size/6.png and /dev/null differ diff --git a/static/img/stock/change-barcode-label-size/7.png b/static/img/stock/change-barcode-label-size/7.png deleted file mode 100644 index 2f9b7cd3..00000000 Binary files a/static/img/stock/change-barcode-label-size/7.png and /dev/null differ diff --git a/static/img/stock/change-barcode-label-size/8.png b/static/img/stock/change-barcode-label-size/8.png deleted file mode 100644 index e5546d95..00000000 Binary files a/static/img/stock/change-barcode-label-size/8.png and /dev/null differ diff --git a/static/img/stock/change-barcode-label-size/9.png b/static/img/stock/change-barcode-label-size/9.png deleted file mode 100644 index 9603709d..00000000 Binary files a/static/img/stock/change-barcode-label-size/9.png and /dev/null differ diff --git a/static/img/tools/data-integrity/1.png b/static/img/tools/data-integrity/1.png deleted file mode 100644 index fc04caff..00000000 Binary files a/static/img/tools/data-integrity/1.png and /dev/null differ diff --git a/static/img/tools/data-integrity/2.png b/static/img/tools/data-integrity/2.png deleted file mode 100644 index 034714aa..00000000 Binary files a/static/img/tools/data-integrity/2.png and /dev/null differ diff --git a/static/img/tools/data-integrity/3.png b/static/img/tools/data-integrity/3.png deleted file mode 100644 index 911475e3..00000000 Binary files a/static/img/tools/data-integrity/3.png and /dev/null differ diff --git a/static/img/tools/global-price-change/1.png b/static/img/tools/global-price-change/1.png deleted file mode 100644 index 3e012125..00000000 Binary files a/static/img/tools/global-price-change/1.png and /dev/null differ diff --git a/static/img/tools/global-price-change/2.png b/static/img/tools/global-price-change/2.png deleted file mode 100644 index 1bd03650..00000000 Binary files a/static/img/tools/global-price-change/2.png and /dev/null differ diff --git a/static/img/tools/maintain-user/1.png b/static/img/tools/maintain-user/1.png deleted file mode 100644 index db4d3063..00000000 Binary files a/static/img/tools/maintain-user/1.png and /dev/null differ diff --git a/static/img/tools/maintain-user/10.png b/static/img/tools/maintain-user/10.png deleted file mode 100644 index 94603d9b..00000000 Binary files a/static/img/tools/maintain-user/10.png and /dev/null differ diff --git a/static/img/tools/maintain-user/11.png b/static/img/tools/maintain-user/11.png deleted file mode 100644 index e3c7cf9c..00000000 Binary files a/static/img/tools/maintain-user/11.png and /dev/null differ diff --git a/static/img/tools/maintain-user/12.png b/static/img/tools/maintain-user/12.png deleted file mode 100644 index a58beb72..00000000 Binary files a/static/img/tools/maintain-user/12.png and /dev/null differ diff --git a/static/img/tools/maintain-user/13.png b/static/img/tools/maintain-user/13.png deleted file mode 100644 index e74eddc6..00000000 Binary files a/static/img/tools/maintain-user/13.png and /dev/null differ diff --git a/static/img/tools/maintain-user/2.png b/static/img/tools/maintain-user/2.png deleted file mode 100644 index 719b7187..00000000 Binary files a/static/img/tools/maintain-user/2.png and /dev/null differ diff --git a/static/img/tools/maintain-user/3.png b/static/img/tools/maintain-user/3.png deleted file mode 100644 index 408b737f..00000000 Binary files a/static/img/tools/maintain-user/3.png and /dev/null differ diff --git a/static/img/tools/maintain-user/4.png b/static/img/tools/maintain-user/4.png deleted file mode 100644 index d7f41d0a..00000000 Binary files a/static/img/tools/maintain-user/4.png and /dev/null differ diff --git a/static/img/tools/maintain-user/5.png b/static/img/tools/maintain-user/5.png deleted file mode 100644 index e251bc94..00000000 Binary files a/static/img/tools/maintain-user/5.png and /dev/null differ diff --git a/static/img/tools/maintain-user/6.png b/static/img/tools/maintain-user/6.png deleted file mode 100644 index 8ebb5a1e..00000000 Binary files a/static/img/tools/maintain-user/6.png and /dev/null differ diff --git a/static/img/tools/maintain-user/7.png b/static/img/tools/maintain-user/7.png deleted file mode 100644 index 8c1ea17e..00000000 Binary files a/static/img/tools/maintain-user/7.png and /dev/null differ diff --git a/static/img/tools/maintain-user/8.png b/static/img/tools/maintain-user/8.png deleted file mode 100644 index 32c59661..00000000 Binary files a/static/img/tools/maintain-user/8.png and /dev/null differ diff --git a/static/img/tools/maintain-user/9.png b/static/img/tools/maintain-user/9.png deleted file mode 100644 index 95203e3f..00000000 Binary files a/static/img/tools/maintain-user/9.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/1.png b/static/img/tools/new-user-access-control-reset-password/1.png deleted file mode 100644 index d7c5ea9f..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/1.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/10.png b/static/img/tools/new-user-access-control-reset-password/10.png deleted file mode 100644 index 628b39ba..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/10.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/11.png b/static/img/tools/new-user-access-control-reset-password/11.png deleted file mode 100644 index 8e099e15..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/11.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/12.png b/static/img/tools/new-user-access-control-reset-password/12.png deleted file mode 100644 index d06b5729..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/12.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/2.png b/static/img/tools/new-user-access-control-reset-password/2.png deleted file mode 100644 index 16b4142c..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/2.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/3.png b/static/img/tools/new-user-access-control-reset-password/3.png deleted file mode 100644 index 36bd4262..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/3.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/4.png b/static/img/tools/new-user-access-control-reset-password/4.png deleted file mode 100644 index 60b9fad6..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/4.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/5.png b/static/img/tools/new-user-access-control-reset-password/5.png deleted file mode 100644 index d9b8bc7d..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/5.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/6.png b/static/img/tools/new-user-access-control-reset-password/6.png deleted file mode 100644 index cfdf3bc3..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/6.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/7.png b/static/img/tools/new-user-access-control-reset-password/7.png deleted file mode 100644 index bf26d9cb..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/7.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/8.png b/static/img/tools/new-user-access-control-reset-password/8.png deleted file mode 100644 index 66064e27..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/8.png and /dev/null differ diff --git a/static/img/tools/new-user-access-control-reset-password/9.png b/static/img/tools/new-user-access-control-reset-password/9.png deleted file mode 100644 index 8968f0a1..00000000 Binary files a/static/img/tools/new-user-access-control-reset-password/9.png and /dev/null differ diff --git a/static/img/tools/project-module/1.png b/static/img/tools/project-module/1.png deleted file mode 100644 index d1ca56bd..00000000 Binary files a/static/img/tools/project-module/1.png and /dev/null differ diff --git a/static/img/tools/project-module/10.png b/static/img/tools/project-module/10.png deleted file mode 100644 index e3682653..00000000 Binary files a/static/img/tools/project-module/10.png and /dev/null differ diff --git a/static/img/tools/project-module/11.png b/static/img/tools/project-module/11.png deleted file mode 100644 index 0f78616a..00000000 Binary files a/static/img/tools/project-module/11.png and /dev/null differ diff --git a/static/img/tools/project-module/2.png b/static/img/tools/project-module/2.png deleted file mode 100644 index 3f429509..00000000 Binary files a/static/img/tools/project-module/2.png and /dev/null differ diff --git a/static/img/tools/project-module/3.png b/static/img/tools/project-module/3.png deleted file mode 100644 index e8150ebb..00000000 Binary files a/static/img/tools/project-module/3.png and /dev/null differ diff --git a/static/img/tools/project-module/4.png b/static/img/tools/project-module/4.png deleted file mode 100644 index 42ec1f3a..00000000 Binary files a/static/img/tools/project-module/4.png and /dev/null differ diff --git a/static/img/tools/project-module/5.png b/static/img/tools/project-module/5.png deleted file mode 100644 index 8333a080..00000000 Binary files a/static/img/tools/project-module/5.png and /dev/null differ diff --git a/static/img/tools/project-module/6.png b/static/img/tools/project-module/6.png deleted file mode 100644 index a9847a34..00000000 Binary files a/static/img/tools/project-module/6.png and /dev/null differ diff --git a/static/img/tools/project-module/7.png b/static/img/tools/project-module/7.png deleted file mode 100644 index 728e16a4..00000000 Binary files a/static/img/tools/project-module/7.png and /dev/null differ diff --git a/static/img/tools/project-module/8.png b/static/img/tools/project-module/8.png deleted file mode 100644 index 436ab10d..00000000 Binary files a/static/img/tools/project-module/8.png and /dev/null differ diff --git a/static/img/tools/project-module/9.png b/static/img/tools/project-module/9.png deleted file mode 100644 index 35c6b7bb..00000000 Binary files a/static/img/tools/project-module/9.png and /dev/null differ diff --git a/static/img/getting-started/change-panasonic/3.png b/static/img/troubleshooting/change-panasonic/add-local-printer.png similarity index 100% rename from static/img/getting-started/change-panasonic/3.png rename to static/img/troubleshooting/change-panasonic/add-local-printer.png diff --git a/static/img/getting-started/change-panasonic/2.png b/static/img/troubleshooting/change-panasonic/check-port.png similarity index 100% rename from static/img/getting-started/change-panasonic/2.png rename to static/img/troubleshooting/change-panasonic/check-port.png diff --git a/static/img/getting-started/change-panasonic/4.png b/static/img/troubleshooting/change-panasonic/choose-printer-port.png similarity index 100% rename from static/img/getting-started/change-panasonic/4.png rename to static/img/troubleshooting/change-panasonic/choose-printer-port.png diff --git a/static/img/getting-started/change-panasonic/6.png b/static/img/troubleshooting/change-panasonic/enter-printer-name.png similarity index 100% rename from static/img/getting-started/change-panasonic/6.png rename to static/img/troubleshooting/change-panasonic/enter-printer-name.png diff --git a/static/img/getting-started/change-panasonic/8.png b/static/img/troubleshooting/change-panasonic/finish.png similarity index 100% rename from static/img/getting-started/change-panasonic/8.png rename to static/img/troubleshooting/change-panasonic/finish.png diff --git a/static/img/getting-started/change-panasonic/7.png b/static/img/troubleshooting/change-panasonic/press-next.png similarity index 100% rename from static/img/getting-started/change-panasonic/7.png rename to static/img/troubleshooting/change-panasonic/press-next.png diff --git a/static/img/getting-started/change-panasonic/1.png b/static/img/troubleshooting/change-panasonic/printer-properties.png similarity index 100% rename from static/img/getting-started/change-panasonic/1.png rename to static/img/troubleshooting/change-panasonic/printer-properties.png diff --git a/static/img/getting-started/change-panasonic/9.png b/static/img/troubleshooting/change-panasonic/result.png similarity index 100% rename from static/img/getting-started/change-panasonic/9.png rename to static/img/troubleshooting/change-panasonic/result.png diff --git a/static/img/getting-started/change-panasonic/5.png b/static/img/troubleshooting/change-panasonic/select-printer.png similarity index 100% rename from static/img/getting-started/change-panasonic/5.png rename to static/img/troubleshooting/change-panasonic/select-printer.png diff --git a/static/img/troubleshooting/db-error/1.png b/static/img/troubleshooting/db-error/launch-sql-diagnosis.png similarity index 100% rename from static/img/troubleshooting/db-error/1.png rename to static/img/troubleshooting/db-error/launch-sql-diagnosis.png diff --git a/static/img/troubleshooting/db-error/2.png b/static/img/troubleshooting/db-error/select-database.png similarity index 100% rename from static/img/troubleshooting/db-error/2.png rename to static/img/troubleshooting/db-error/select-database.png diff --git a/static/img/getting-started/enlarge-ui/1.png b/static/img/troubleshooting/enlarge-ui/display-settings.png similarity index 100% rename from static/img/getting-started/enlarge-ui/1.png rename to static/img/troubleshooting/enlarge-ui/display-settings.png diff --git a/static/img/getting-started/enlarge-ui/2.png b/static/img/troubleshooting/enlarge-ui/display-tab.png similarity index 100% rename from static/img/getting-started/enlarge-ui/2.png rename to static/img/troubleshooting/enlarge-ui/display-tab.png diff --git a/static/img/getting-started/enlarge-ui/3.png b/static/img/troubleshooting/enlarge-ui/win78-display.png similarity index 100% rename from static/img/getting-started/enlarge-ui/3.png rename to static/img/troubleshooting/enlarge-ui/win78-display.png diff --git a/static/img/getting-started/enlarge-ui/4b.png b/static/img/troubleshooting/enlarge-ui/winxp-dpi.png similarity index 100% rename from static/img/getting-started/enlarge-ui/4b.png rename to static/img/troubleshooting/enlarge-ui/winxp-dpi.png diff --git a/static/img/getting-started/enlarge-ui/4.png b/static/img/troubleshooting/enlarge-ui/winxp-general.png similarity index 100% rename from static/img/getting-started/enlarge-ui/4.png rename to static/img/troubleshooting/enlarge-ui/winxp-general.png diff --git a/static/img/troubleshooting/firebird-unable-complete/change-port-number-1.jpg b/static/img/troubleshooting/firebird-unable-complete/change-port-number-1.jpg new file mode 100644 index 00000000..d7f78b73 Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/change-port-number-1.jpg differ diff --git a/static/img/troubleshooting/firebird-unable-complete/change-port-number-2.jpg b/static/img/troubleshooting/firebird-unable-complete/change-port-number-2.jpg new file mode 100644 index 00000000..d2ec1569 Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/change-port-number-2.jpg differ diff --git a/static/img/troubleshooting/firebird-unable-complete/change-port-number-3.jpg b/static/img/troubleshooting/firebird-unable-complete/change-port-number-3.jpg new file mode 100644 index 00000000..5b287f50 Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/change-port-number-3.jpg differ diff --git a/static/img/troubleshooting/firebird-unable-complete/change-port-number-4.jpg b/static/img/troubleshooting/firebird-unable-complete/change-port-number-4.jpg new file mode 100644 index 00000000..6574cf83 Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/change-port-number-4.jpg differ diff --git a/static/img/troubleshooting/firebird-unable-complete/change-port-number-5.jpg b/static/img/troubleshooting/firebird-unable-complete/change-port-number-5.jpg new file mode 100644 index 00000000..be60c6b2 Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/change-port-number-5.jpg differ diff --git a/static/img/troubleshooting/firebird-unable-complete/change-port-number-6.jpg b/static/img/troubleshooting/firebird-unable-complete/change-port-number-6.jpg new file mode 100644 index 00000000..4693d0bf Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/change-port-number-6.jpg differ diff --git a/static/img/troubleshooting/firebird-unable-complete/check-port-number.jpg b/static/img/troubleshooting/firebird-unable-complete/check-port-number.jpg new file mode 100644 index 00000000..768ff544 Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/check-port-number.jpg differ diff --git a/static/img/troubleshooting/firebird-unable-complete/firebird-inactive.jpg b/static/img/troubleshooting/firebird-unable-complete/firebird-inactive.jpg new file mode 100644 index 00000000..a7a35d21 Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/firebird-inactive.jpg differ diff --git a/static/img/troubleshooting/firebird-unable-complete/firebird-reason2-1.jpg b/static/img/troubleshooting/firebird-unable-complete/firebird-reason2-1.jpg new file mode 100644 index 00000000..bbf53da4 Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/firebird-reason2-1.jpg differ diff --git a/static/img/troubleshooting/firebird-unable-complete/firebird-reason2-2.jpg b/static/img/troubleshooting/firebird-unable-complete/firebird-reason2-2.jpg new file mode 100644 index 00000000..702b50ee Binary files /dev/null and b/static/img/troubleshooting/firebird-unable-complete/firebird-reason2-2.jpg differ diff --git a/static/img/troubleshooting/maintain-diff-ver/9.png b/static/img/troubleshooting/maintain-diff-ver/back-to-database-grp.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/9.png rename to static/img/troubleshooting/maintain-diff-ver/back-to-database-grp.png diff --git a/static/img/troubleshooting/maintain-diff-ver/16.png b/static/img/troubleshooting/maintain-diff-ver/create-grp-shortcut.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/16.png rename to static/img/troubleshooting/maintain-diff-ver/create-grp-shortcut.png diff --git a/static/img/troubleshooting/maintain-diff-ver/10.png b/static/img/troubleshooting/maintain-diff-ver/create-grp.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/10.png rename to static/img/troubleshooting/maintain-diff-ver/create-grp.png diff --git a/static/img/troubleshooting/maintain-diff-ver/8.png b/static/img/troubleshooting/maintain-diff-ver/custom-settings.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/8.png rename to static/img/troubleshooting/maintain-diff-ver/custom-settings.png diff --git a/static/img/troubleshooting/maintain-diff-ver/5.png b/static/img/troubleshooting/maintain-diff-ver/database-location.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/5.png rename to static/img/troubleshooting/maintain-diff-ver/database-location.png diff --git a/static/img/troubleshooting/maintain-diff-ver/4.png b/static/img/troubleshooting/maintain-diff-ver/destination-location.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/4.png rename to static/img/troubleshooting/maintain-diff-ver/destination-location.png diff --git a/static/img/troubleshooting/maintain-diff-ver/17.png b/static/img/troubleshooting/maintain-diff-ver/final-result.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/17.png rename to static/img/troubleshooting/maintain-diff-ver/final-result.png diff --git a/static/img/troubleshooting/maintain-diff-ver/7.png b/static/img/troubleshooting/maintain-diff-ver/finish-install.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/7.png rename to static/img/troubleshooting/maintain-diff-ver/finish-install.png diff --git a/static/img/troubleshooting/maintain-diff-ver/1.png b/static/img/troubleshooting/maintain-diff-ver/icon.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/1.png rename to static/img/troubleshooting/maintain-diff-ver/icon.png diff --git a/static/img/troubleshooting/maintain-diff-ver/6.png b/static/img/troubleshooting/maintain-diff-ver/install-sql.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/6.png rename to static/img/troubleshooting/maintain-diff-ver/install-sql.png diff --git a/static/img/troubleshooting/maintain-diff-ver/3.png b/static/img/troubleshooting/maintain-diff-ver/license-agreement.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/3.png rename to static/img/troubleshooting/maintain-diff-ver/license-agreement.png diff --git a/static/img/troubleshooting/maintain-diff-ver/2.png b/static/img/troubleshooting/maintain-diff-ver/next.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/2.png rename to static/img/troubleshooting/maintain-diff-ver/next.png diff --git a/static/img/troubleshooting/maintain-diff-ver/13.png b/static/img/troubleshooting/maintain-diff-ver/rename-grp-1.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/13.png rename to static/img/troubleshooting/maintain-diff-ver/rename-grp-1.png diff --git a/static/img/troubleshooting/maintain-diff-ver/14.png b/static/img/troubleshooting/maintain-diff-ver/rename-grp-2.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/14.png rename to static/img/troubleshooting/maintain-diff-ver/rename-grp-2.png diff --git a/static/img/troubleshooting/maintain-diff-ver/15.png b/static/img/troubleshooting/maintain-diff-ver/rename-result.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/15.png rename to static/img/troubleshooting/maintain-diff-ver/rename-result.png diff --git a/static/img/troubleshooting/maintain-diff-ver/11.png b/static/img/troubleshooting/maintain-diff-ver/save-share-folder.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/11.png rename to static/img/troubleshooting/maintain-diff-ver/save-share-folder.png diff --git a/static/img/troubleshooting/maintain-diff-ver/12.png b/static/img/troubleshooting/maintain-diff-ver/test-connection.png similarity index 100% rename from static/img/troubleshooting/maintain-diff-ver/12.png rename to static/img/troubleshooting/maintain-diff-ver/test-connection.png diff --git a/static/img/troubleshooting/patch-file/4.png b/static/img/troubleshooting/patch-file/download-diagnosis-1.png similarity index 100% rename from static/img/troubleshooting/patch-file/4.png rename to static/img/troubleshooting/patch-file/download-diagnosis-1.png diff --git a/static/img/troubleshooting/patch-file/5.png b/static/img/troubleshooting/patch-file/download-diagnosis-2.png similarity index 100% rename from static/img/troubleshooting/patch-file/5.png rename to static/img/troubleshooting/patch-file/download-diagnosis-2.png diff --git a/static/img/troubleshooting/patch-file/6.png b/static/img/troubleshooting/patch-file/download-diagnosis-3.png similarity index 100% rename from static/img/troubleshooting/patch-file/6.png rename to static/img/troubleshooting/patch-file/download-diagnosis-3.png diff --git a/static/img/troubleshooting/patch-file/7.png b/static/img/troubleshooting/patch-file/download-diagnosis-4.png similarity index 100% rename from static/img/troubleshooting/patch-file/7.png rename to static/img/troubleshooting/patch-file/download-diagnosis-4.png diff --git a/static/img/troubleshooting/patch-file/8.png b/static/img/troubleshooting/patch-file/download-diagnosis-5.png similarity index 100% rename from static/img/troubleshooting/patch-file/8.png rename to static/img/troubleshooting/patch-file/download-diagnosis-5.png diff --git a/static/img/troubleshooting/patch-file/9.png b/static/img/troubleshooting/patch-file/download-diagnosis-6.png similarity index 100% rename from static/img/troubleshooting/patch-file/9.png rename to static/img/troubleshooting/patch-file/download-diagnosis-6.png diff --git a/static/img/troubleshooting/patch-file/10.png b/static/img/troubleshooting/patch-file/download-diagnosis-7.png similarity index 100% rename from static/img/troubleshooting/patch-file/10.png rename to static/img/troubleshooting/patch-file/download-diagnosis-7.png diff --git a/static/img/troubleshooting/patch-file/11.png b/static/img/troubleshooting/patch-file/download-diagnosis-8.png similarity index 100% rename from static/img/troubleshooting/patch-file/11.png rename to static/img/troubleshooting/patch-file/download-diagnosis-8.png diff --git a/static/img/troubleshooting/patch-file/12.png b/static/img/troubleshooting/patch-file/download-diagnosis-9.png similarity index 100% rename from static/img/troubleshooting/patch-file/12.png rename to static/img/troubleshooting/patch-file/download-diagnosis-9.png diff --git a/static/img/troubleshooting/patch-file/1.png b/static/img/troubleshooting/patch-file/download-patch-file.png similarity index 100% rename from static/img/troubleshooting/patch-file/1.png rename to static/img/troubleshooting/patch-file/download-patch-file.png diff --git a/static/img/troubleshooting/patch-file/3.png b/static/img/troubleshooting/patch-file/extract-to-desktop.png similarity index 100% rename from static/img/troubleshooting/patch-file/3.png rename to static/img/troubleshooting/patch-file/extract-to-desktop.png diff --git a/static/img/troubleshooting/patch-file/2.png b/static/img/troubleshooting/patch-file/open-patch-file.png similarity index 100% rename from static/img/troubleshooting/patch-file/2.png rename to static/img/troubleshooting/patch-file/open-patch-file.png diff --git a/static/img/troubleshooting/patch-file/13.png b/static/img/troubleshooting/patch-file/run-patch-file-1.png similarity index 100% rename from static/img/troubleshooting/patch-file/13.png rename to static/img/troubleshooting/patch-file/run-patch-file-1.png diff --git a/static/img/troubleshooting/patch-file/14.png b/static/img/troubleshooting/patch-file/run-patch-file-2.png similarity index 100% rename from static/img/troubleshooting/patch-file/14.png rename to static/img/troubleshooting/patch-file/run-patch-file-2.png diff --git a/static/img/troubleshooting/patch-file/15.png b/static/img/troubleshooting/patch-file/run-patch-file-3.png similarity index 100% rename from static/img/troubleshooting/patch-file/15.png rename to static/img/troubleshooting/patch-file/run-patch-file-3.png diff --git a/static/img/troubleshooting/patch-file/16.png b/static/img/troubleshooting/patch-file/run-patch-file-4.png similarity index 100% rename from static/img/troubleshooting/patch-file/16.png rename to static/img/troubleshooting/patch-file/run-patch-file-4.png diff --git a/static/img/troubleshooting/patch-file/17.png b/static/img/troubleshooting/patch-file/tips-1.png similarity index 100% rename from static/img/troubleshooting/patch-file/17.png rename to static/img/troubleshooting/patch-file/tips-1.png diff --git a/static/img/troubleshooting/patch-file/18.png b/static/img/troubleshooting/patch-file/tips-2.png similarity index 100% rename from static/img/troubleshooting/patch-file/18.png rename to static/img/troubleshooting/patch-file/tips-2.png diff --git a/static/img/troubleshooting/perf-speed-improve/2.png b/static/img/troubleshooting/perf-speed-improve/solution-a-policies.png similarity index 100% rename from static/img/troubleshooting/perf-speed-improve/2.png rename to static/img/troubleshooting/perf-speed-improve/solution-a-policies.png diff --git a/static/img/troubleshooting/perf-speed-improve/1.png b/static/img/troubleshooting/perf-speed-improve/solution-a-properties.png similarity index 100% rename from static/img/troubleshooting/perf-speed-improve/1.png rename to static/img/troubleshooting/perf-speed-improve/solution-a-properties.png diff --git a/static/img/troubleshooting/perf-speed-improve/3.png b/static/img/troubleshooting/perf-speed-improve/solution-b.png similarity index 100% rename from static/img/troubleshooting/perf-speed-improve/3.png rename to static/img/troubleshooting/perf-speed-improve/solution-b.png diff --git a/static/img/troubleshooting/validate-db/11.png b/static/img/troubleshooting/validate-db/11.png deleted file mode 100644 index 73241282..00000000 Binary files a/static/img/troubleshooting/validate-db/11.png and /dev/null differ diff --git a/static/img/troubleshooting/validate-db/5.png b/static/img/troubleshooting/validate-db/5.png deleted file mode 100644 index 70e01746..00000000 Binary files a/static/img/troubleshooting/validate-db/5.png and /dev/null differ diff --git a/static/img/troubleshooting/validate-db/10.png b/static/img/troubleshooting/validate-db/backup.png similarity index 100% rename from static/img/troubleshooting/validate-db/10.png rename to static/img/troubleshooting/validate-db/backup.png diff --git a/static/img/troubleshooting/validate-db/6.png b/static/img/troubleshooting/validate-db/check-fdb.png similarity index 100% rename from static/img/troubleshooting/validate-db/6.png rename to static/img/troubleshooting/validate-db/check-fdb.png diff --git a/static/img/troubleshooting/validate-db/2.png b/static/img/troubleshooting/validate-db/database-validate-1.png similarity index 100% rename from static/img/troubleshooting/validate-db/2.png rename to static/img/troubleshooting/validate-db/database-validate-1.png diff --git a/static/img/troubleshooting/validate-db/3.png b/static/img/troubleshooting/validate-db/database-validate-2.png similarity index 100% rename from static/img/troubleshooting/validate-db/3.png rename to static/img/troubleshooting/validate-db/database-validate-2.png diff --git a/static/img/troubleshooting/validate-db/17.png b/static/img/troubleshooting/validate-db/delete-old-database.png similarity index 100% rename from static/img/troubleshooting/validate-db/17.png rename to static/img/troubleshooting/validate-db/delete-old-database.png diff --git a/static/img/troubleshooting/validate-db/7.png b/static/img/troubleshooting/validate-db/grp-properties.png similarity index 100% rename from static/img/troubleshooting/validate-db/7.png rename to static/img/troubleshooting/validate-db/grp-properties.png diff --git a/static/img/troubleshooting/validate-db/8.png b/static/img/troubleshooting/validate-db/properties.png similarity index 100% rename from static/img/troubleshooting/validate-db/8.png rename to static/img/troubleshooting/validate-db/properties.png diff --git a/static/img/troubleshooting/validate-db/12.png b/static/img/troubleshooting/validate-db/restore-1.png similarity index 100% rename from static/img/troubleshooting/validate-db/12.png rename to static/img/troubleshooting/validate-db/restore-1.png diff --git a/static/img/troubleshooting/validate-db/13.png b/static/img/troubleshooting/validate-db/restore-2.png similarity index 100% rename from static/img/troubleshooting/validate-db/13.png rename to static/img/troubleshooting/validate-db/restore-2.png diff --git a/static/img/troubleshooting/validate-db/14.png b/static/img/troubleshooting/validate-db/restore-3.png similarity index 100% rename from static/img/troubleshooting/validate-db/14.png rename to static/img/troubleshooting/validate-db/restore-3.png diff --git a/static/img/troubleshooting/validate-db/15.png b/static/img/troubleshooting/validate-db/restore-4.png similarity index 100% rename from static/img/troubleshooting/validate-db/15.png rename to static/img/troubleshooting/validate-db/restore-4.png diff --git a/static/img/troubleshooting/validate-db/16.png b/static/img/troubleshooting/validate-db/restore-5.png similarity index 100% rename from static/img/troubleshooting/validate-db/16.png rename to static/img/troubleshooting/validate-db/restore-5.png diff --git a/static/img/troubleshooting/validate-db/4.png b/static/img/troubleshooting/validate-db/select-database.png similarity index 100% rename from static/img/troubleshooting/validate-db/4.png rename to static/img/troubleshooting/validate-db/select-database.png diff --git a/static/img/troubleshooting/validate-db/1.png b/static/img/troubleshooting/validate-db/sql-diag-icon.png similarity index 100% rename from static/img/troubleshooting/validate-db/1.png rename to static/img/troubleshooting/validate-db/sql-diag-icon.png diff --git a/static/img/troubleshooting/validate-db/9.png b/static/img/troubleshooting/validate-db/validation-complete.png similarity index 100% rename from static/img/troubleshooting/validate-db/9.png rename to static/img/troubleshooting/validate-db/validation-complete.png diff --git a/static/img/usage/asset/assetBasicGuide/add-asset-item.jpg b/static/img/usage/asset/assetBasicGuide/add-asset-item.jpg new file mode 100644 index 00000000..5c7aeccc Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/add-asset-item.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-analysis-report.jpg b/static/img/usage/asset/assetBasicGuide/asset-analysis-report.jpg new file mode 100644 index 00000000..45ec73b9 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-analysis-report.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-analysis.jpg b/static/img/usage/asset/assetBasicGuide/asset-analysis.jpg new file mode 100644 index 00000000..41d28282 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-analysis.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-attach.jpg b/static/img/usage/asset/assetBasicGuide/asset-attach.jpg new file mode 100644 index 00000000..3c74e0b8 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-attach.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-breakdown.jpg b/static/img/usage/asset/assetBasicGuide/asset-breakdown.jpg new file mode 100644 index 00000000..557f8015 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-breakdown.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-date-range.jpg b/static/img/usage/asset/assetBasicGuide/asset-date-range.jpg new file mode 100644 index 00000000..d1915c11 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-date-range.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-disposal-list.jpg b/static/img/usage/asset/assetBasicGuide/asset-disposal-list.jpg new file mode 100644 index 00000000..3d71fa8d Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-disposal-list.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-disposal.jpg b/static/img/usage/asset/assetBasicGuide/asset-disposal.jpg new file mode 100644 index 00000000..703f169a Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-disposal.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-grp.jpg b/static/img/usage/asset/assetBasicGuide/asset-grp.jpg new file mode 100644 index 00000000..c1268bcc Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-grp.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-grp2.jpg b/static/img/usage/asset/assetBasicGuide/asset-grp2.jpg new file mode 100644 index 00000000..328d8ac4 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-grp2.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-import-fa-item-opf.jpg b/static/img/usage/asset/assetBasicGuide/asset-import-fa-item-opf.jpg new file mode 100644 index 00000000..23e97516 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-import-fa-item-opf.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-import.jpg b/static/img/usage/asset/assetBasicGuide/asset-import.jpg new file mode 100644 index 00000000..c7afce34 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-import.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-items.jpg b/static/img/usage/asset/assetBasicGuide/asset-items.jpg new file mode 100644 index 00000000..2e6ad306 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-items.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-nbv.jpg b/static/img/usage/asset/assetBasicGuide/asset-nbv.jpg new file mode 100644 index 00000000..4f0f44b9 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-nbv.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-photo.jpg b/static/img/usage/asset/assetBasicGuide/asset-photo.jpg new file mode 100644 index 00000000..167914fa Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-photo.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-process-date.jpg b/static/img/usage/asset/assetBasicGuide/asset-process-date.jpg new file mode 100644 index 00000000..3222bb96 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-process-date.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/asset-tab.png b/static/img/usage/asset/assetBasicGuide/asset-tab.png new file mode 100644 index 00000000..58b3a7d7 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/asset-tab.png differ diff --git a/static/img/usage/asset/assetBasicGuide/attachments-tab-asset.jpg b/static/img/usage/asset/assetBasicGuide/attachments-tab-asset.jpg new file mode 100644 index 00000000..4e18878a Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/attachments-tab-asset.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/balance-sheet-vs-asset-analysis.jpg b/static/img/usage/asset/assetBasicGuide/balance-sheet-vs-asset-analysis.jpg new file mode 100644 index 00000000..6ec18da0 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/balance-sheet-vs-asset-analysis.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/depr-history.jpg b/static/img/usage/asset/assetBasicGuide/depr-history.jpg new file mode 100644 index 00000000..7030603c Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/depr-history.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/depr-list.jpg b/static/img/usage/asset/assetBasicGuide/depr-list.jpg new file mode 100644 index 00000000..e2636f92 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/depr-list.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/depr-schedule-p1.jpg b/static/img/usage/asset/assetBasicGuide/depr-schedule-p1.jpg new file mode 100644 index 00000000..87f63f5f Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/depr-schedule-p1.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/depr-schedule.jpg b/static/img/usage/asset/assetBasicGuide/depr-schedule.jpg new file mode 100644 index 00000000..f575c9ed Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/depr-schedule.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/files-import-button.jpg b/static/img/usage/asset/assetBasicGuide/files-import-button.jpg new file mode 100644 index 00000000..74effd98 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/files-import-button.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/files-import-execute.jpg b/static/img/usage/asset/assetBasicGuide/files-import-execute.jpg new file mode 100644 index 00000000..465a07df Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/files-import-execute.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/general-tab-asset.jpg b/static/img/usage/asset/assetBasicGuide/general-tab-asset.jpg new file mode 100644 index 00000000..4c9ff9b4 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/general-tab-asset.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/more-tab-asset.jpg b/static/img/usage/asset/assetBasicGuide/more-tab-asset.jpg new file mode 100644 index 00000000..d9ffa9c5 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/more-tab-asset.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/opening.jpg b/static/img/usage/asset/assetBasicGuide/opening.jpg new file mode 100644 index 00000000..51da8bc6 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/opening.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/preview-asset.jpg b/static/img/usage/asset/assetBasicGuide/preview-asset.jpg new file mode 100644 index 00000000..08ecc85d Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/preview-asset.jpg differ diff --git a/static/img/usage/asset/assetBasicGuide/yearly-depr.jpg b/static/img/usage/asset/assetBasicGuide/yearly-depr.jpg new file mode 100644 index 00000000..24632712 Binary files /dev/null and b/static/img/usage/asset/assetBasicGuide/yearly-depr.jpg differ diff --git a/static/img/usage/asset/assetFaq/asset-amount.jpg b/static/img/usage/asset/assetFaq/asset-amount.jpg new file mode 100644 index 00000000..694a58d4 Binary files /dev/null and b/static/img/usage/asset/assetFaq/asset-amount.jpg differ diff --git a/static/img/usage/asset/assetFaq/asset-depr.jpg b/static/img/usage/asset/assetFaq/asset-depr.jpg new file mode 100644 index 00000000..e460a246 Binary files /dev/null and b/static/img/usage/asset/assetFaq/asset-depr.jpg differ diff --git a/static/img/usage/asset/assetFaq/asset-item.jpg b/static/img/usage/asset/assetFaq/asset-item.jpg new file mode 100644 index 00000000..fb3ba3b1 Binary files /dev/null and b/static/img/usage/asset/assetFaq/asset-item.jpg differ diff --git a/static/img/usage/asset/assetFaq/asset-item1.jpg b/static/img/usage/asset/assetFaq/asset-item1.jpg new file mode 100644 index 00000000..8a2d4bf0 Binary files /dev/null and b/static/img/usage/asset/assetFaq/asset-item1.jpg differ diff --git a/static/img/usage/asset/assetFaq/copy-asset.jpg b/static/img/usage/asset/assetFaq/copy-asset.jpg new file mode 100644 index 00000000..2b16e8e0 Binary files /dev/null and b/static/img/usage/asset/assetFaq/copy-asset.jpg differ diff --git a/static/img/usage/asset/assetFaq/depr-rate.jpg b/static/img/usage/asset/assetFaq/depr-rate.jpg new file mode 100644 index 00000000..794a9054 Binary files /dev/null and b/static/img/usage/asset/assetFaq/depr-rate.jpg differ diff --git a/static/img/usage/asset/assetFaq/depr-value.jpg b/static/img/usage/asset/assetFaq/depr-value.jpg new file mode 100644 index 00000000..b760223e Binary files /dev/null and b/static/img/usage/asset/assetFaq/depr-value.jpg differ diff --git a/static/img/usage/asset/assetFaq/je-cancellled.jpg b/static/img/usage/asset/assetFaq/je-cancellled.jpg new file mode 100644 index 00000000..100fc5a8 Binary files /dev/null and b/static/img/usage/asset/assetFaq/je-cancellled.jpg differ diff --git a/static/img/usage/asset/assetFaq/paste-asset.jpg b/static/img/usage/asset/assetFaq/paste-asset.jpg new file mode 100644 index 00000000..ae20122a Binary files /dev/null and b/static/img/usage/asset/assetFaq/paste-asset.jpg differ diff --git a/static/img/customer/contra/1.png b/static/img/usage/customer/customerBasicGuide/1.png similarity index 100% rename from static/img/customer/contra/1.png rename to static/img/usage/customer/customerBasicGuide/1.png diff --git a/static/img/customer/contra/2.png b/static/img/usage/customer/customerBasicGuide/2.png similarity index 100% rename from static/img/customer/contra/2.png rename to static/img/usage/customer/customerBasicGuide/2.png diff --git a/static/img/customer/contra/3.png b/static/img/usage/customer/customerBasicGuide/3.png similarity index 100% rename from static/img/customer/contra/3.png rename to static/img/usage/customer/customerBasicGuide/3.png diff --git a/static/img/customer/contra/4.png b/static/img/usage/customer/customerBasicGuide/4.png similarity index 100% rename from static/img/customer/contra/4.png rename to static/img/usage/customer/customerBasicGuide/4.png diff --git a/static/img/getting-started/user-guide/42.png b/static/img/usage/customer/customerBasicGuide/42.png similarity index 100% rename from static/img/getting-started/user-guide/42.png rename to static/img/usage/customer/customerBasicGuide/42.png diff --git a/static/img/getting-started/user-guide/45.png b/static/img/usage/customer/customerBasicGuide/45.png similarity index 100% rename from static/img/getting-started/user-guide/45.png rename to static/img/usage/customer/customerBasicGuide/45.png diff --git a/static/img/getting-started/user-guide/46.png b/static/img/usage/customer/customerBasicGuide/46.png similarity index 100% rename from static/img/getting-started/user-guide/46.png rename to static/img/usage/customer/customerBasicGuide/46.png diff --git a/static/img/getting-started/user-guide/47.png b/static/img/usage/customer/customerBasicGuide/47.png similarity index 100% rename from static/img/getting-started/user-guide/47.png rename to static/img/usage/customer/customerBasicGuide/47.png diff --git a/static/img/getting-started/user-guide/48.png b/static/img/usage/customer/customerBasicGuide/48.png similarity index 100% rename from static/img/getting-started/user-guide/48.png rename to static/img/usage/customer/customerBasicGuide/48.png diff --git a/static/img/getting-started/user-guide/49.png b/static/img/usage/customer/customerBasicGuide/49.png similarity index 100% rename from static/img/getting-started/user-guide/49.png rename to static/img/usage/customer/customerBasicGuide/49.png diff --git a/static/img/customer/contra/5.png b/static/img/usage/customer/customerBasicGuide/5.png similarity index 100% rename from static/img/customer/contra/5.png rename to static/img/usage/customer/customerBasicGuide/5.png diff --git a/static/img/getting-started/user-guide/50.png b/static/img/usage/customer/customerBasicGuide/50.png similarity index 100% rename from static/img/getting-started/user-guide/50.png rename to static/img/usage/customer/customerBasicGuide/50.png diff --git a/static/img/getting-started/user-guide/51.png b/static/img/usage/customer/customerBasicGuide/51.png similarity index 100% rename from static/img/getting-started/user-guide/51.png rename to static/img/usage/customer/customerBasicGuide/51.png diff --git a/static/img/getting-started/user-guide/52.png b/static/img/usage/customer/customerBasicGuide/52.png similarity index 100% rename from static/img/getting-started/user-guide/52.png rename to static/img/usage/customer/customerBasicGuide/52.png diff --git a/static/img/getting-started/user-guide/53.png b/static/img/usage/customer/customerBasicGuide/53.png similarity index 100% rename from static/img/getting-started/user-guide/53.png rename to static/img/usage/customer/customerBasicGuide/53.png diff --git a/static/img/getting-started/user-guide/54.png b/static/img/usage/customer/customerBasicGuide/54.png similarity index 100% rename from static/img/getting-started/user-guide/54.png rename to static/img/usage/customer/customerBasicGuide/54.png diff --git a/static/img/customer/contra/6.png b/static/img/usage/customer/customerBasicGuide/6.png similarity index 100% rename from static/img/customer/contra/6.png rename to static/img/usage/customer/customerBasicGuide/6.png diff --git a/static/img/customer/contra/7.png b/static/img/usage/customer/customerBasicGuide/7.png similarity index 100% rename from static/img/customer/contra/7.png rename to static/img/usage/customer/customerBasicGuide/7.png diff --git a/static/img/customer/contra/8.png b/static/img/usage/customer/customerBasicGuide/8.png similarity index 100% rename from static/img/customer/contra/8.png rename to static/img/usage/customer/customerBasicGuide/8.png diff --git a/static/img/usage/customer/customerBasicGuide/cred-cont-action.png b/static/img/usage/customer/customerBasicGuide/cred-cont-action.png new file mode 100644 index 00000000..ae80c6a0 Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cred-cont-action.png differ diff --git a/static/img/usage/customer/customerBasicGuide/cust-after-save.png b/static/img/usage/customer/customerBasicGuide/cust-after-save.png new file mode 100644 index 00000000..81c97d1e Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cust-after-save.png differ diff --git a/static/img/usage/customer/customerBasicGuide/cust-code-format-explain.png b/static/img/usage/customer/customerBasicGuide/cust-code-format-explain.png new file mode 100644 index 00000000..e52b0149 Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cust-code-format-explain.png differ diff --git a/static/img/usage/customer/customerBasicGuide/cust-code-format.png b/static/img/usage/customer/customerBasicGuide/cust-code-format.png new file mode 100644 index 00000000..36a0ee40 Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cust-code-format.png differ diff --git a/static/img/usage/customer/customerBasicGuide/cust-credit-control.png b/static/img/usage/customer/customerBasicGuide/cust-credit-control.png new file mode 100644 index 00000000..8e96f60b Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cust-credit-control.png differ diff --git a/static/img/usage/customer/customerBasicGuide/cust-duplicated-code.png b/static/img/usage/customer/customerBasicGuide/cust-duplicated-code.png new file mode 100644 index 00000000..a76d3feb Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cust-duplicated-code.png differ diff --git a/static/img/usage/customer/customerBasicGuide/cust-entry.png b/static/img/usage/customer/customerBasicGuide/cust-entry.png new file mode 100644 index 00000000..e617d3f8 Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cust-entry.png differ diff --git a/static/img/usage/customer/customerBasicGuide/cust-general.png b/static/img/usage/customer/customerBasicGuide/cust-general.png new file mode 100644 index 00000000..3f12b5b7 Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cust-general.png differ diff --git a/static/img/getting-started/user-guide/19.png b/static/img/usage/customer/customerBasicGuide/cust-group.png similarity index 100% rename from static/img/getting-started/user-guide/19.png rename to static/img/usage/customer/customerBasicGuide/cust-group.png diff --git a/static/img/getting-started/user-guide/43.png b/static/img/usage/customer/customerBasicGuide/cust-invoice-entry.png similarity index 100% rename from static/img/getting-started/user-guide/43.png rename to static/img/usage/customer/customerBasicGuide/cust-invoice-entry.png diff --git a/static/img/usage/customer/customerBasicGuide/cust-note.png b/static/img/usage/customer/customerBasicGuide/cust-note.png new file mode 100644 index 00000000..e4ed2924 Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cust-note.png differ diff --git a/static/img/usage/customer/customerBasicGuide/cust-tax.png b/static/img/usage/customer/customerBasicGuide/cust-tax.png new file mode 100644 index 00000000..4fbc601a Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/cust-tax.png differ diff --git a/static/img/usage/customer/customerBasicGuide/maintain-cust.png b/static/img/usage/customer/customerBasicGuide/maintain-cust.png new file mode 100644 index 00000000..ab00d170 Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/maintain-cust.png differ diff --git a/static/img/usage/customer/customerBasicGuide/new-cust.png b/static/img/usage/customer/customerBasicGuide/new-cust.png new file mode 100644 index 00000000..2d79466b Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/new-cust.png differ diff --git a/static/img/getting-started/user-guide/44.png b/static/img/usage/customer/customerBasicGuide/save-cust-invoice-entry.png similarity index 100% rename from static/img/getting-started/user-guide/44.png rename to static/img/usage/customer/customerBasicGuide/save-cust-invoice-entry.png diff --git a/static/img/usage/customer/customerBasicGuide/suspend-credit-control.png b/static/img/usage/customer/customerBasicGuide/suspend-credit-control.png new file mode 100644 index 00000000..85e5e9e9 Binary files /dev/null and b/static/img/usage/customer/customerBasicGuide/suspend-credit-control.png differ diff --git a/static/img/customer/bounce-payment/1.png b/static/img/usage/customer/customerFaq/bounce-payment/1.png similarity index 100% rename from static/img/customer/bounce-payment/1.png rename to static/img/usage/customer/customerFaq/bounce-payment/1.png diff --git a/static/img/customer/bounce-payment/10.png b/static/img/usage/customer/customerFaq/bounce-payment/10.png similarity index 100% rename from static/img/customer/bounce-payment/10.png rename to static/img/usage/customer/customerFaq/bounce-payment/10.png diff --git a/static/img/customer/bounce-payment/11.png b/static/img/usage/customer/customerFaq/bounce-payment/11.png similarity index 100% rename from static/img/customer/bounce-payment/11.png rename to static/img/usage/customer/customerFaq/bounce-payment/11.png diff --git a/static/img/customer/bounce-payment/12.png b/static/img/usage/customer/customerFaq/bounce-payment/12.png similarity index 100% rename from static/img/customer/bounce-payment/12.png rename to static/img/usage/customer/customerFaq/bounce-payment/12.png diff --git a/static/img/customer/bounce-payment/13.png b/static/img/usage/customer/customerFaq/bounce-payment/13.png similarity index 100% rename from static/img/customer/bounce-payment/13.png rename to static/img/usage/customer/customerFaq/bounce-payment/13.png diff --git a/static/img/customer/bounce-payment/14.png b/static/img/usage/customer/customerFaq/bounce-payment/14.png similarity index 100% rename from static/img/customer/bounce-payment/14.png rename to static/img/usage/customer/customerFaq/bounce-payment/14.png diff --git a/static/img/customer/bounce-payment/2.png b/static/img/usage/customer/customerFaq/bounce-payment/2.png similarity index 100% rename from static/img/customer/bounce-payment/2.png rename to static/img/usage/customer/customerFaq/bounce-payment/2.png diff --git a/static/img/customer/bounce-payment/3.png b/static/img/usage/customer/customerFaq/bounce-payment/3.png similarity index 100% rename from static/img/customer/bounce-payment/3.png rename to static/img/usage/customer/customerFaq/bounce-payment/3.png diff --git a/static/img/customer/bounce-payment/4.png b/static/img/usage/customer/customerFaq/bounce-payment/4.png similarity index 100% rename from static/img/customer/bounce-payment/4.png rename to static/img/usage/customer/customerFaq/bounce-payment/4.png diff --git a/static/img/customer/bounce-payment/5.png b/static/img/usage/customer/customerFaq/bounce-payment/5.png similarity index 100% rename from static/img/customer/bounce-payment/5.png rename to static/img/usage/customer/customerFaq/bounce-payment/5.png diff --git a/static/img/customer/bounce-payment/6.png b/static/img/usage/customer/customerFaq/bounce-payment/6.png similarity index 100% rename from static/img/customer/bounce-payment/6.png rename to static/img/usage/customer/customerFaq/bounce-payment/6.png diff --git a/static/img/customer/bounce-payment/7.png b/static/img/usage/customer/customerFaq/bounce-payment/7.png similarity index 100% rename from static/img/customer/bounce-payment/7.png rename to static/img/usage/customer/customerFaq/bounce-payment/7.png diff --git a/static/img/customer/bounce-payment/8.png b/static/img/usage/customer/customerFaq/bounce-payment/8.png similarity index 100% rename from static/img/customer/bounce-payment/8.png rename to static/img/usage/customer/customerFaq/bounce-payment/8.png diff --git a/static/img/customer/bounce-payment/9.png b/static/img/usage/customer/customerFaq/bounce-payment/9.png similarity index 100% rename from static/img/customer/bounce-payment/9.png rename to static/img/usage/customer/customerFaq/bounce-payment/9.png diff --git a/static/img/customer/comm/1.png b/static/img/usage/customer/customerFaq/comm/1.png similarity index 100% rename from static/img/customer/comm/1.png rename to static/img/usage/customer/customerFaq/comm/1.png diff --git a/static/img/customer/comm/2.png b/static/img/usage/customer/customerFaq/comm/2.png similarity index 100% rename from static/img/customer/comm/2.png rename to static/img/usage/customer/customerFaq/comm/2.png diff --git a/static/img/customer/comm/3.png b/static/img/usage/customer/customerFaq/comm/3.png similarity index 100% rename from static/img/customer/comm/3.png rename to static/img/usage/customer/customerFaq/comm/3.png diff --git a/static/img/customer/comm/4.png b/static/img/usage/customer/customerFaq/comm/4.png similarity index 100% rename from static/img/customer/comm/4.png rename to static/img/usage/customer/customerFaq/comm/4.png diff --git a/static/img/customer/comm/5.png b/static/img/usage/customer/customerFaq/comm/5.png similarity index 100% rename from static/img/customer/comm/5.png rename to static/img/usage/customer/customerFaq/comm/5.png diff --git a/static/img/customer/comm/6.png b/static/img/usage/customer/customerFaq/comm/6.png similarity index 100% rename from static/img/customer/comm/6.png rename to static/img/usage/customer/customerFaq/comm/6.png diff --git a/static/img/customer/comm/7.png b/static/img/usage/customer/customerFaq/comm/7.png similarity index 100% rename from static/img/customer/comm/7.png rename to static/img/usage/customer/customerFaq/comm/7.png diff --git a/static/img/customer/comm/8.png b/static/img/usage/customer/customerFaq/comm/8.png similarity index 100% rename from static/img/customer/comm/8.png rename to static/img/usage/customer/customerFaq/comm/8.png diff --git a/static/img/customer/comm/9.png b/static/img/usage/customer/customerFaq/comm/9.png similarity index 100% rename from static/img/customer/comm/9.png rename to static/img/usage/customer/customerFaq/comm/9.png diff --git a/static/img/customer/foreign/1.png b/static/img/usage/customer/customerFaq/foreign/1.png similarity index 100% rename from static/img/customer/foreign/1.png rename to static/img/usage/customer/customerFaq/foreign/1.png diff --git a/static/img/customer/foreign/2.png b/static/img/usage/customer/customerFaq/foreign/2.png similarity index 100% rename from static/img/customer/foreign/2.png rename to static/img/usage/customer/customerFaq/foreign/2.png diff --git a/static/img/customer/foreign/3.png b/static/img/usage/customer/customerFaq/foreign/3.png similarity index 100% rename from static/img/customer/foreign/3.png rename to static/img/usage/customer/customerFaq/foreign/3.png diff --git a/static/img/customer/foreign/4.png b/static/img/usage/customer/customerFaq/foreign/4.png similarity index 100% rename from static/img/customer/foreign/4.png rename to static/img/usage/customer/customerFaq/foreign/4.png diff --git a/static/img/customer/foreign/5.png b/static/img/usage/customer/customerFaq/foreign/5.png similarity index 100% rename from static/img/customer/foreign/5.png rename to static/img/usage/customer/customerFaq/foreign/5.png diff --git a/static/img/customer/foreign/6.png b/static/img/usage/customer/customerFaq/foreign/6.png similarity index 100% rename from static/img/customer/foreign/6.png rename to static/img/usage/customer/customerFaq/foreign/6.png diff --git a/static/img/customer/open-bank-deposit/1.png b/static/img/usage/customer/customerFaq/open-bank-deposit/1.png similarity index 100% rename from static/img/customer/open-bank-deposit/1.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/1.png diff --git a/static/img/customer/open-bank-deposit/10.png b/static/img/usage/customer/customerFaq/open-bank-deposit/10.png similarity index 100% rename from static/img/customer/open-bank-deposit/10.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/10.png diff --git a/static/img/customer/open-bank-deposit/11.png b/static/img/usage/customer/customerFaq/open-bank-deposit/11.png similarity index 100% rename from static/img/customer/open-bank-deposit/11.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/11.png diff --git a/static/img/customer/open-bank-deposit/12.png b/static/img/usage/customer/customerFaq/open-bank-deposit/12.png similarity index 100% rename from static/img/customer/open-bank-deposit/12.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/12.png diff --git a/static/img/customer/open-bank-deposit/13.png b/static/img/usage/customer/customerFaq/open-bank-deposit/13.png similarity index 100% rename from static/img/customer/open-bank-deposit/13.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/13.png diff --git a/static/img/customer/open-bank-deposit/14.png b/static/img/usage/customer/customerFaq/open-bank-deposit/14.png similarity index 100% rename from static/img/customer/open-bank-deposit/14.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/14.png diff --git a/static/img/customer/open-bank-deposit/15.png b/static/img/usage/customer/customerFaq/open-bank-deposit/15.png similarity index 100% rename from static/img/customer/open-bank-deposit/15.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/15.png diff --git a/static/img/customer/open-bank-deposit/16.png b/static/img/usage/customer/customerFaq/open-bank-deposit/16.png similarity index 100% rename from static/img/customer/open-bank-deposit/16.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/16.png diff --git a/static/img/customer/open-bank-deposit/17.png b/static/img/usage/customer/customerFaq/open-bank-deposit/17.png similarity index 100% rename from static/img/customer/open-bank-deposit/17.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/17.png diff --git a/static/img/customer/open-bank-deposit/18.png b/static/img/usage/customer/customerFaq/open-bank-deposit/18.png similarity index 100% rename from static/img/customer/open-bank-deposit/18.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/18.png diff --git a/static/img/customer/open-bank-deposit/2.png b/static/img/usage/customer/customerFaq/open-bank-deposit/2.png similarity index 100% rename from static/img/customer/open-bank-deposit/2.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/2.png diff --git a/static/img/customer/open-bank-deposit/3.png b/static/img/usage/customer/customerFaq/open-bank-deposit/3.png similarity index 100% rename from static/img/customer/open-bank-deposit/3.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/3.png diff --git a/static/img/customer/open-bank-deposit/4.png b/static/img/usage/customer/customerFaq/open-bank-deposit/4.png similarity index 100% rename from static/img/customer/open-bank-deposit/4.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/4.png diff --git a/static/img/customer/open-bank-deposit/5.png b/static/img/usage/customer/customerFaq/open-bank-deposit/5.png similarity index 100% rename from static/img/customer/open-bank-deposit/5.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/5.png diff --git a/static/img/customer/open-bank-deposit/6.png b/static/img/usage/customer/customerFaq/open-bank-deposit/6.png similarity index 100% rename from static/img/customer/open-bank-deposit/6.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/6.png diff --git a/static/img/customer/open-bank-deposit/7.png b/static/img/usage/customer/customerFaq/open-bank-deposit/7.png similarity index 100% rename from static/img/customer/open-bank-deposit/7.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/7.png diff --git a/static/img/customer/open-bank-deposit/8.png b/static/img/usage/customer/customerFaq/open-bank-deposit/8.png similarity index 100% rename from static/img/customer/open-bank-deposit/8.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/8.png diff --git a/static/img/customer/open-bank-deposit/9.png b/static/img/usage/customer/customerFaq/open-bank-deposit/9.png similarity index 100% rename from static/img/customer/open-bank-deposit/9.png rename to static/img/usage/customer/customerFaq/open-bank-deposit/9.png diff --git a/static/img/customer/payment-guide/1.png b/static/img/usage/customer/customerFaq/payment-guide/1.png similarity index 100% rename from static/img/customer/payment-guide/1.png rename to static/img/usage/customer/customerFaq/payment-guide/1.png diff --git a/static/img/customer/payment-guide/10.png b/static/img/usage/customer/customerFaq/payment-guide/10.png similarity index 100% rename from static/img/customer/payment-guide/10.png rename to static/img/usage/customer/customerFaq/payment-guide/10.png diff --git a/static/img/customer/payment-guide/2.png b/static/img/usage/customer/customerFaq/payment-guide/2.png similarity index 100% rename from static/img/customer/payment-guide/2.png rename to static/img/usage/customer/customerFaq/payment-guide/2.png diff --git a/static/img/customer/payment-guide/3.png b/static/img/usage/customer/customerFaq/payment-guide/3.png similarity index 100% rename from static/img/customer/payment-guide/3.png rename to static/img/usage/customer/customerFaq/payment-guide/3.png diff --git a/static/img/customer/payment-guide/4.png b/static/img/usage/customer/customerFaq/payment-guide/4.png similarity index 100% rename from static/img/customer/payment-guide/4.png rename to static/img/usage/customer/customerFaq/payment-guide/4.png diff --git a/static/img/customer/payment-guide/5.png b/static/img/usage/customer/customerFaq/payment-guide/5.png similarity index 100% rename from static/img/customer/payment-guide/5.png rename to static/img/usage/customer/customerFaq/payment-guide/5.png diff --git a/static/img/customer/payment-guide/6.png b/static/img/usage/customer/customerFaq/payment-guide/6.png similarity index 100% rename from static/img/customer/payment-guide/6.png rename to static/img/usage/customer/customerFaq/payment-guide/6.png diff --git a/static/img/customer/payment-guide/7.png b/static/img/usage/customer/customerFaq/payment-guide/7.png similarity index 100% rename from static/img/customer/payment-guide/7.png rename to static/img/usage/customer/customerFaq/payment-guide/7.png diff --git a/static/img/customer/payment-guide/8.png b/static/img/usage/customer/customerFaq/payment-guide/8.png similarity index 100% rename from static/img/customer/payment-guide/8.png rename to static/img/usage/customer/customerFaq/payment-guide/8.png diff --git a/static/img/customer/payment-guide/9.png b/static/img/usage/customer/customerFaq/payment-guide/9.png similarity index 100% rename from static/img/customer/payment-guide/9.png rename to static/img/usage/customer/customerFaq/payment-guide/9.png diff --git a/static/img/customer/post-dated-bounced-cheque/1.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/1.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/1.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/1.png diff --git a/static/img/customer/post-dated-bounced-cheque/10.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/10.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/10.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/10.png diff --git a/static/img/customer/post-dated-bounced-cheque/11.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/11.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/11.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/11.png diff --git a/static/img/customer/post-dated-bounced-cheque/12.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/12.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/12.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/12.png diff --git a/static/img/customer/post-dated-bounced-cheque/13.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/13.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/13.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/13.png diff --git a/static/img/customer/post-dated-bounced-cheque/14.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/14.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/14.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/14.png diff --git a/static/img/customer/post-dated-bounced-cheque/15.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/15.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/15.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/15.png diff --git a/static/img/customer/post-dated-bounced-cheque/16.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/16.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/16.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/16.png diff --git a/static/img/customer/post-dated-bounced-cheque/17.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/17.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/17.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/17.png diff --git a/static/img/customer/post-dated-bounced-cheque/18.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/18.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/18.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/18.png diff --git a/static/img/customer/post-dated-bounced-cheque/2.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/2.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/2.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/2.png diff --git a/static/img/customer/post-dated-bounced-cheque/3.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/3.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/3.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/3.png diff --git a/static/img/customer/post-dated-bounced-cheque/4.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/4.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/4.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/4.png diff --git a/static/img/customer/post-dated-bounced-cheque/5.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/5.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/5.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/5.png diff --git a/static/img/customer/post-dated-bounced-cheque/6.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/6.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/6.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/6.png diff --git a/static/img/customer/post-dated-bounced-cheque/7.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/7.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/7.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/7.png diff --git a/static/img/customer/post-dated-bounced-cheque/8.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/8.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/8.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/8.png diff --git a/static/img/customer/post-dated-bounced-cheque/9.png b/static/img/usage/customer/customerFaq/post-dated-bounced-cheque/9.png similarity index 100% rename from static/img/customer/post-dated-bounced-cheque/9.png rename to static/img/usage/customer/customerFaq/post-dated-bounced-cheque/9.png diff --git a/static/img/customer/read-mykad/1.png b/static/img/usage/customer/customerFaq/read-mykad/1.png similarity index 100% rename from static/img/customer/read-mykad/1.png rename to static/img/usage/customer/customerFaq/read-mykad/1.png diff --git a/static/img/customer/read-mykad/2.png b/static/img/usage/customer/customerFaq/read-mykad/2.png similarity index 100% rename from static/img/customer/read-mykad/2.png rename to static/img/usage/customer/customerFaq/read-mykad/2.png diff --git a/static/img/customer/read-mykad/3.png b/static/img/usage/customer/customerFaq/read-mykad/3.png similarity index 100% rename from static/img/customer/read-mykad/3.png rename to static/img/usage/customer/customerFaq/read-mykad/3.png diff --git a/static/img/customer/read-mykad/4.png b/static/img/usage/customer/customerFaq/read-mykad/4.png similarity index 100% rename from static/img/customer/read-mykad/4.png rename to static/img/usage/customer/customerFaq/read-mykad/4.png diff --git a/static/img/customer/read-mykad/5.png b/static/img/usage/customer/customerFaq/read-mykad/5.png similarity index 100% rename from static/img/customer/read-mykad/5.png rename to static/img/usage/customer/customerFaq/read-mykad/5.png diff --git a/static/img/customer/read-mykad/6.png b/static/img/usage/customer/customerFaq/read-mykad/6.png similarity index 100% rename from static/img/customer/read-mykad/6.png rename to static/img/usage/customer/customerFaq/read-mykad/6.png diff --git a/static/img/getting-started/user-guide/85.png b/static/img/usage/customer/customerReport/cust-analysis-by-doc-apply.png similarity index 100% rename from static/img/getting-started/user-guide/85.png rename to static/img/usage/customer/customerReport/cust-analysis-by-doc-apply.png diff --git a/static/img/usage/customer/customerReport/cust-balance-apply-filter.png b/static/img/usage/customer/customerReport/cust-balance-apply-filter.png new file mode 100644 index 00000000..790812bf Binary files /dev/null and b/static/img/usage/customer/customerReport/cust-balance-apply-filter.png differ diff --git a/static/img/usage/customer/customerReport/cust-balance-filter.png b/static/img/usage/customer/customerReport/cust-balance-filter.png new file mode 100644 index 00000000..8a91efc1 Binary files /dev/null and b/static/img/usage/customer/customerReport/cust-balance-filter.png differ diff --git a/static/img/getting-started/user-guide/81.png b/static/img/usage/customer/customerReport/cust-due-doc-list-apply.png similarity index 100% rename from static/img/getting-started/user-guide/81.png rename to static/img/usage/customer/customerReport/cust-due-doc-list-apply.png diff --git a/static/img/usage/customer/customerReport/cust-invoice-list-report.png b/static/img/usage/customer/customerReport/cust-invoice-list-report.png new file mode 100644 index 00000000..3706cc85 Binary files /dev/null and b/static/img/usage/customer/customerReport/cust-invoice-list-report.png differ diff --git a/static/img/usage/customer/customerReport/cust-invoice-listing-report.png b/static/img/usage/customer/customerReport/cust-invoice-listing-report.png new file mode 100644 index 00000000..34831cf9 Binary files /dev/null and b/static/img/usage/customer/customerReport/cust-invoice-listing-report.png differ diff --git a/static/img/usage/customer/customerReport/cust-invoice-report-format.png b/static/img/usage/customer/customerReport/cust-invoice-report-format.png new file mode 100644 index 00000000..65a7648a Binary files /dev/null and b/static/img/usage/customer/customerReport/cust-invoice-report-format.png differ diff --git a/static/img/usage/customer/customerReport/cust-invoice-report-format2.png b/static/img/usage/customer/customerReport/cust-invoice-report-format2.png new file mode 100644 index 00000000..7d5935d0 Binary files /dev/null and b/static/img/usage/customer/customerReport/cust-invoice-report-format2.png differ diff --git a/static/img/getting-started/user-guide/83.png b/static/img/usage/customer/customerReport/cust-overdue-letter.png similarity index 100% rename from static/img/getting-started/user-guide/83.png rename to static/img/usage/customer/customerReport/cust-overdue-letter.png diff --git a/static/img/usage/customer/customerReport/date-period.png b/static/img/usage/customer/customerReport/date-period.png new file mode 100644 index 00000000..c7c833f4 Binary files /dev/null and b/static/img/usage/customer/customerReport/date-period.png differ diff --git a/static/img/usage/customer/customerReport/doc-list-apply.png b/static/img/usage/customer/customerReport/doc-list-apply.png new file mode 100644 index 00000000..52217c67 Binary files /dev/null and b/static/img/usage/customer/customerReport/doc-list-apply.png differ diff --git a/static/img/usage/customer/customerReport/doc-list-preview.png b/static/img/usage/customer/customerReport/doc-list-preview.png new file mode 100644 index 00000000..26611432 Binary files /dev/null and b/static/img/usage/customer/customerReport/doc-list-preview.png differ diff --git a/static/img/usage/customer/customerReport/doc-list-type.png b/static/img/usage/customer/customerReport/doc-list-type.png new file mode 100644 index 00000000..93ecb230 Binary files /dev/null and b/static/img/usage/customer/customerReport/doc-list-type.png differ diff --git a/static/img/usage/customer/customerReport/grp-by-cust-name.png b/static/img/usage/customer/customerReport/grp-by-cust-name.png new file mode 100644 index 00000000..40dd8914 Binary files /dev/null and b/static/img/usage/customer/customerReport/grp-by-cust-name.png differ diff --git a/static/img/usage/customer/customerReport/grp-by-which.png b/static/img/usage/customer/customerReport/grp-by-which.png new file mode 100644 index 00000000..d7027d72 Binary files /dev/null and b/static/img/usage/customer/customerReport/grp-by-which.png differ diff --git a/static/img/getting-started/user-guide/82.png b/static/img/usage/customer/customerReport/grp-sort-by-customer-code.png similarity index 100% rename from static/img/getting-started/user-guide/82.png rename to static/img/usage/customer/customerReport/grp-sort-by-customer-code.png diff --git a/static/img/usage/customer/customerReport/grp-sort-by.png b/static/img/usage/customer/customerReport/grp-sort-by.png new file mode 100644 index 00000000..831c4e3d Binary files /dev/null and b/static/img/usage/customer/customerReport/grp-sort-by.png differ diff --git a/static/img/usage/customer/customerReport/listing-report.png b/static/img/usage/customer/customerReport/listing-report.png new file mode 100644 index 00000000..34e25ca1 Binary files /dev/null and b/static/img/usage/customer/customerReport/listing-report.png differ diff --git a/static/img/usage/customer/customerReport/plus-icon-to-expand.png b/static/img/usage/customer/customerReport/plus-icon-to-expand.png new file mode 100644 index 00000000..9d3d7fd7 Binary files /dev/null and b/static/img/usage/customer/customerReport/plus-icon-to-expand.png differ diff --git a/static/img/usage/customer/customerReport/preview-cust-balance.png b/static/img/usage/customer/customerReport/preview-cust-balance.png new file mode 100644 index 00000000..7fc75e30 Binary files /dev/null and b/static/img/usage/customer/customerReport/preview-cust-balance.png differ diff --git a/static/img/usage/customer/customerReport/print-cust-balance-report.png b/static/img/usage/customer/customerReport/print-cust-balance-report.png new file mode 100644 index 00000000..a8746f84 Binary files /dev/null and b/static/img/usage/customer/customerReport/print-cust-balance-report.png differ diff --git a/static/img/usage/customer/customerReport/print-cust-doc-list.png b/static/img/usage/customer/customerReport/print-cust-doc-list.png new file mode 100644 index 00000000..6c5499d2 Binary files /dev/null and b/static/img/usage/customer/customerReport/print-cust-doc-list.png differ diff --git a/static/img/getting-started/user-guide/84.png b/static/img/usage/customer/customerReport/print-overdue-letter.png similarity index 100% rename from static/img/getting-started/user-guide/84.png rename to static/img/usage/customer/customerReport/print-overdue-letter.png diff --git a/static/img/usage/customer/customerReport/tick-print-doc-style.png b/static/img/usage/customer/customerReport/tick-print-doc-style.png new file mode 100644 index 00000000..fe929715 Binary files /dev/null and b/static/img/usage/customer/customerReport/tick-print-doc-style.png differ diff --git a/static/img/getting-started/user-guide/13.png b/static/img/usage/first-time-setup/company-profile-header.png similarity index 100% rename from static/img/getting-started/user-guide/13.png rename to static/img/usage/first-time-setup/company-profile-header.png diff --git a/static/img/getting-started/user-guide/12.png b/static/img/usage/first-time-setup/company-profile-sst.png similarity index 100% rename from static/img/getting-started/user-guide/12.png rename to static/img/usage/first-time-setup/company-profile-sst.png diff --git a/static/img/getting-started/user-guide/11.png b/static/img/usage/first-time-setup/maintain-tarrif.png similarity index 100% rename from static/img/getting-started/user-guide/11.png rename to static/img/usage/first-time-setup/maintain-tarrif.png diff --git a/static/img/getting-started/user-guide/3.png b/static/img/usage/first-time-setup/options-gl.png similarity index 100% rename from static/img/getting-started/user-guide/3.png rename to static/img/usage/first-time-setup/options-gl.png diff --git a/static/img/start-sst/1.png b/static/img/usage/first-time-setup/start-sst-1.png similarity index 100% rename from static/img/start-sst/1.png rename to static/img/usage/first-time-setup/start-sst-1.png diff --git a/static/img/start-sst/2.png b/static/img/usage/first-time-setup/start-sst-2.png similarity index 100% rename from static/img/start-sst/2.png rename to static/img/usage/first-time-setup/start-sst-2.png diff --git a/static/img/start-sst/3.png b/static/img/usage/first-time-setup/start-sst-3.png similarity index 100% rename from static/img/start-sst/3.png rename to static/img/usage/first-time-setup/start-sst-3.png diff --git a/static/img/start-sst/4.png b/static/img/usage/first-time-setup/start-sst-4.png similarity index 100% rename from static/img/start-sst/4.png rename to static/img/usage/first-time-setup/start-sst-4.png diff --git a/static/img/start-sst/5.png b/static/img/usage/first-time-setup/start-sst-5.png similarity index 100% rename from static/img/start-sst/5.png rename to static/img/usage/first-time-setup/start-sst-5.png diff --git a/static/img/start-sst/6.png b/static/img/usage/first-time-setup/start-sst-6.png similarity index 100% rename from static/img/start-sst/6.png rename to static/img/usage/first-time-setup/start-sst-6.png diff --git a/static/img/getting-started/user-guide/2.png b/static/img/usage/first-time-setup/tools-options.png similarity index 100% rename from static/img/getting-started/user-guide/2.png rename to static/img/usage/first-time-setup/tools-options.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/1.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/1.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/1.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/1.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/10.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/10.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/10.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/10.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/11.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/11.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/11.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/11.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/2.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/2.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/2.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/2.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/3.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/3.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/3.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/3.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/4.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/4.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/4.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/4.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/5.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/5.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/5.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/5.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/6.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/6.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/6.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/6.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/7.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/7.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/7.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/7.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/8.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/8.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/8.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/8.png diff --git a/static/img/general-ledger/auto-post-gl-stock-value/9.png b/static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/9.png similarity index 100% rename from static/img/general-ledger/auto-post-gl-stock-value/9.png rename to static/img/usage/general-ledger/glfaq/auto-post-gl-stock-value/9.png diff --git a/static/img/general-ledger/auto-post-stock-month-end-value/1.png b/static/img/usage/general-ledger/glfaq/auto-post-stock-month-end-value/1.png similarity index 100% rename from static/img/general-ledger/auto-post-stock-month-end-value/1.png rename to static/img/usage/general-ledger/glfaq/auto-post-stock-month-end-value/1.png diff --git a/static/img/general-ledger/auto-post-stock-month-end-value/2.png b/static/img/usage/general-ledger/glfaq/auto-post-stock-month-end-value/2.png similarity index 100% rename from static/img/general-ledger/auto-post-stock-month-end-value/2.png rename to static/img/usage/general-ledger/glfaq/auto-post-stock-month-end-value/2.png diff --git a/static/img/general-ledger/auto-post-stock-month-end-value/3.png b/static/img/usage/general-ledger/glfaq/auto-post-stock-month-end-value/3.png similarity index 100% rename from static/img/general-ledger/auto-post-stock-month-end-value/3.png rename to static/img/usage/general-ledger/glfaq/auto-post-stock-month-end-value/3.png diff --git a/static/img/general-ledger/auto-recon/1.png b/static/img/usage/general-ledger/glfaq/auto-recon/1.png similarity index 100% rename from static/img/general-ledger/auto-recon/1.png rename to static/img/usage/general-ledger/glfaq/auto-recon/1.png diff --git a/static/img/general-ledger/auto-recon/2.png b/static/img/usage/general-ledger/glfaq/auto-recon/2.png similarity index 100% rename from static/img/general-ledger/auto-recon/2.png rename to static/img/usage/general-ledger/glfaq/auto-recon/2.png diff --git a/static/img/general-ledger/auto-recon/3.png b/static/img/usage/general-ledger/glfaq/auto-recon/3.png similarity index 100% rename from static/img/general-ledger/auto-recon/3.png rename to static/img/usage/general-ledger/glfaq/auto-recon/3.png diff --git a/static/img/general-ledger/auto-recon/4.png b/static/img/usage/general-ledger/glfaq/auto-recon/4.png similarity index 100% rename from static/img/general-ledger/auto-recon/4.png rename to static/img/usage/general-ledger/glfaq/auto-recon/4.png diff --git a/static/img/general-ledger/auto-recon/5.png b/static/img/usage/general-ledger/glfaq/auto-recon/5.png similarity index 100% rename from static/img/general-ledger/auto-recon/5.png rename to static/img/usage/general-ledger/glfaq/auto-recon/5.png diff --git a/static/img/general-ledger/auto-recon/6.png b/static/img/usage/general-ledger/glfaq/auto-recon/6.png similarity index 100% rename from static/img/general-ledger/auto-recon/6.png rename to static/img/usage/general-ledger/glfaq/auto-recon/6.png diff --git a/static/img/general-ledger/auto-recon/7.png b/static/img/usage/general-ledger/glfaq/auto-recon/7.png similarity index 100% rename from static/img/general-ledger/auto-recon/7.png rename to static/img/usage/general-ledger/glfaq/auto-recon/7.png diff --git a/static/img/general-ledger/auto-recon/8.png b/static/img/usage/general-ledger/glfaq/auto-recon/8.png similarity index 100% rename from static/img/general-ledger/auto-recon/8.png rename to static/img/usage/general-ledger/glfaq/auto-recon/8.png diff --git a/static/img/general-ledger/auto-recon/9.png b/static/img/usage/general-ledger/glfaq/auto-recon/9.png similarity index 100% rename from static/img/general-ledger/auto-recon/9.png rename to static/img/usage/general-ledger/glfaq/auto-recon/9.png diff --git a/static/img/general-ledger/bank-recon/1.png b/static/img/usage/general-ledger/glfaq/bank-recon/1.png similarity index 100% rename from static/img/general-ledger/bank-recon/1.png rename to static/img/usage/general-ledger/glfaq/bank-recon/1.png diff --git a/static/img/general-ledger/bank-recon/2.png b/static/img/usage/general-ledger/glfaq/bank-recon/2.png similarity index 100% rename from static/img/general-ledger/bank-recon/2.png rename to static/img/usage/general-ledger/glfaq/bank-recon/2.png diff --git a/static/img/general-ledger/bank-recon/3.png b/static/img/usage/general-ledger/glfaq/bank-recon/3.png similarity index 100% rename from static/img/general-ledger/bank-recon/3.png rename to static/img/usage/general-ledger/glfaq/bank-recon/3.png diff --git a/static/img/general-ledger/bank-recon/4.png b/static/img/usage/general-ledger/glfaq/bank-recon/4.png similarity index 100% rename from static/img/general-ledger/bank-recon/4.png rename to static/img/usage/general-ledger/glfaq/bank-recon/4.png diff --git a/static/img/general-ledger/bank-recon/5.png b/static/img/usage/general-ledger/glfaq/bank-recon/5.png similarity index 100% rename from static/img/general-ledger/bank-recon/5.png rename to static/img/usage/general-ledger/glfaq/bank-recon/5.png diff --git a/static/img/general-ledger/cal-p&l-percent/1.png b/static/img/usage/general-ledger/glfaq/cal-p&l-percent/1.png similarity index 100% rename from static/img/general-ledger/cal-p&l-percent/1.png rename to static/img/usage/general-ledger/glfaq/cal-p&l-percent/1.png diff --git a/static/img/general-ledger/accumulated-deprec-fixed-asset/1.png b/static/img/usage/general-ledger/glfaq/dep-fixed-asset-step1.png similarity index 100% rename from static/img/general-ledger/accumulated-deprec-fixed-asset/1.png rename to static/img/usage/general-ledger/glfaq/dep-fixed-asset-step1.png diff --git a/static/img/general-ledger/accumulated-deprec-fixed-asset/2.png b/static/img/usage/general-ledger/glfaq/dep-fixed-asset-step2.png similarity index 100% rename from static/img/general-ledger/accumulated-deprec-fixed-asset/2.png rename to static/img/usage/general-ledger/glfaq/dep-fixed-asset-step2.png diff --git a/static/img/general-ledger/accumulated-deprec-fixed-asset/3.png b/static/img/usage/general-ledger/glfaq/dep-fixed-asset-step3.png similarity index 100% rename from static/img/general-ledger/accumulated-deprec-fixed-asset/3.png rename to static/img/usage/general-ledger/glfaq/dep-fixed-asset-step3.png diff --git a/static/img/general-ledger/accumulated-deprec-fixed-asset/4.png b/static/img/usage/general-ledger/glfaq/dep-fixed-asset-step4.png similarity index 100% rename from static/img/general-ledger/accumulated-deprec-fixed-asset/4.png rename to static/img/usage/general-ledger/glfaq/dep-fixed-asset-step4.png diff --git a/static/img/usage/general-ledger/glfaq/fb-usd-iss.png b/static/img/usage/general-ledger/glfaq/fb-usd-iss.png new file mode 100644 index 00000000..038062c8 Binary files /dev/null and b/static/img/usage/general-ledger/glfaq/fb-usd-iss.png differ diff --git a/static/img/usage/general-ledger/glfaq/fb-usd-sol1.png b/static/img/usage/general-ledger/glfaq/fb-usd-sol1.png new file mode 100644 index 00000000..ce3793ec Binary files /dev/null and b/static/img/usage/general-ledger/glfaq/fb-usd-sol1.png differ diff --git a/static/img/usage/general-ledger/glfaq/fb-usd-sol2.png b/static/img/usage/general-ledger/glfaq/fb-usd-sol2.png new file mode 100644 index 00000000..9aa63a7d Binary files /dev/null and b/static/img/usage/general-ledger/glfaq/fb-usd-sol2.png differ diff --git a/static/img/general-ledger/foreign-bank-adjustment/1.png b/static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/1.png similarity index 100% rename from static/img/general-ledger/foreign-bank-adjustment/1.png rename to static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/1.png diff --git a/static/img/general-ledger/foreign-bank-adjustment/2.png b/static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/2.png similarity index 100% rename from static/img/general-ledger/foreign-bank-adjustment/2.png rename to static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/2.png diff --git a/static/img/general-ledger/foreign-bank-adjustment/3.png b/static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/3.png similarity index 100% rename from static/img/general-ledger/foreign-bank-adjustment/3.png rename to static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/3.png diff --git a/static/img/general-ledger/foreign-bank-adjustment/4.png b/static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/4.png similarity index 100% rename from static/img/general-ledger/foreign-bank-adjustment/4.png rename to static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/4.png diff --git a/static/img/general-ledger/foreign-bank-adjustment/5.png b/static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/5.png similarity index 100% rename from static/img/general-ledger/foreign-bank-adjustment/5.png rename to static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/5.png diff --git a/static/img/general-ledger/foreign-bank-adjustment/6.png b/static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/6.png similarity index 100% rename from static/img/general-ledger/foreign-bank-adjustment/6.png rename to static/img/usage/general-ledger/glfaq/foreign-bank-adjustment/6.png diff --git a/static/img/general-ledger/maintain-budget/1.png b/static/img/usage/general-ledger/glfaq/maintain-budget/1.png similarity index 100% rename from static/img/general-ledger/maintain-budget/1.png rename to static/img/usage/general-ledger/glfaq/maintain-budget/1.png diff --git a/static/img/general-ledger/maintain-budget/2.png b/static/img/usage/general-ledger/glfaq/maintain-budget/2.png similarity index 100% rename from static/img/general-ledger/maintain-budget/2.png rename to static/img/usage/general-ledger/glfaq/maintain-budget/2.png diff --git a/static/img/general-ledger/maintain-budget/3.png b/static/img/usage/general-ledger/glfaq/maintain-budget/3.png similarity index 100% rename from static/img/general-ledger/maintain-budget/3.png rename to static/img/usage/general-ledger/glfaq/maintain-budget/3.png diff --git a/static/img/general-ledger/maintain-budget/4.png b/static/img/usage/general-ledger/glfaq/maintain-budget/4.png similarity index 100% rename from static/img/general-ledger/maintain-budget/4.png rename to static/img/usage/general-ledger/glfaq/maintain-budget/4.png diff --git a/static/img/general-ledger/open-bank-recon/1.png b/static/img/usage/general-ledger/glfaq/open-bank-recon/1.png similarity index 100% rename from static/img/general-ledger/open-bank-recon/1.png rename to static/img/usage/general-ledger/glfaq/open-bank-recon/1.png diff --git a/static/img/general-ledger/open-bank-recon/2.png b/static/img/usage/general-ledger/glfaq/open-bank-recon/2.png similarity index 100% rename from static/img/general-ledger/open-bank-recon/2.png rename to static/img/usage/general-ledger/glfaq/open-bank-recon/2.png diff --git a/static/img/general-ledger/p&l-more-than-12/1.png b/static/img/usage/general-ledger/glfaq/p&l-more-than-12/1.png similarity index 100% rename from static/img/general-ledger/p&l-more-than-12/1.png rename to static/img/usage/general-ledger/glfaq/p&l-more-than-12/1.png diff --git a/static/img/general-ledger/p&l-more-than-12/2.png b/static/img/usage/general-ledger/glfaq/p&l-more-than-12/2.png similarity index 100% rename from static/img/general-ledger/p&l-more-than-12/2.png rename to static/img/usage/general-ledger/glfaq/p&l-more-than-12/2.png diff --git a/static/img/general-ledger/p&l-more-than-12/3.png b/static/img/usage/general-ledger/glfaq/p&l-more-than-12/3.png similarity index 100% rename from static/img/general-ledger/p&l-more-than-12/3.png rename to static/img/usage/general-ledger/glfaq/p&l-more-than-12/3.png diff --git a/static/img/general-ledger/p&l-more-than-12/4.png b/static/img/usage/general-ledger/glfaq/p&l-more-than-12/4.png similarity index 100% rename from static/img/general-ledger/p&l-more-than-12/4.png rename to static/img/usage/general-ledger/glfaq/p&l-more-than-12/4.png diff --git a/static/img/general-ledger/p&l-more-than-12/5.png b/static/img/usage/general-ledger/glfaq/p&l-more-than-12/5.png similarity index 100% rename from static/img/general-ledger/p&l-more-than-12/5.png rename to static/img/usage/general-ledger/glfaq/p&l-more-than-12/5.png diff --git a/static/img/general-ledger/p&l-more-than-12/6.png b/static/img/usage/general-ledger/glfaq/p&l-more-than-12/6.png similarity index 100% rename from static/img/general-ledger/p&l-more-than-12/6.png rename to static/img/usage/general-ledger/glfaq/p&l-more-than-12/6.png diff --git a/static/img/general-ledger/p&l-more-than-12/7.png b/static/img/usage/general-ledger/glfaq/p&l-more-than-12/7.png similarity index 100% rename from static/img/general-ledger/p&l-more-than-12/7.png rename to static/img/usage/general-ledger/glfaq/p&l-more-than-12/7.png diff --git a/static/img/general-ledger/p&l-statement-appropriation-acc/1.png b/static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/1.png similarity index 100% rename from static/img/general-ledger/p&l-statement-appropriation-acc/1.png rename to static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/1.png diff --git a/static/img/general-ledger/p&l-statement-appropriation-acc/2.png b/static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/2.png similarity index 100% rename from static/img/general-ledger/p&l-statement-appropriation-acc/2.png rename to static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/2.png diff --git a/static/img/general-ledger/p&l-statement-appropriation-acc/3.png b/static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/3.png similarity index 100% rename from static/img/general-ledger/p&l-statement-appropriation-acc/3.png rename to static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/3.png diff --git a/static/img/general-ledger/p&l-statement-appropriation-acc/4.png b/static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/4.png similarity index 100% rename from static/img/general-ledger/p&l-statement-appropriation-acc/4.png rename to static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/4.png diff --git a/static/img/general-ledger/p&l-statement-appropriation-acc/5.png b/static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/5.png similarity index 100% rename from static/img/general-ledger/p&l-statement-appropriation-acc/5.png rename to static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/5.png diff --git a/static/img/general-ledger/p&l-statement-appropriation-acc/6.png b/static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/6.png similarity index 100% rename from static/img/general-ledger/p&l-statement-appropriation-acc/6.png rename to static/img/usage/general-ledger/glfaq/p&l-statement-appropriation-acc/6.png diff --git a/static/img/general-ledger/solution-gl-report-ref1-as-new/1.png b/static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/1.png similarity index 100% rename from static/img/general-ledger/solution-gl-report-ref1-as-new/1.png rename to static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/1.png diff --git a/static/img/general-ledger/solution-gl-report-ref1-as-new/2.png b/static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/2.png similarity index 100% rename from static/img/general-ledger/solution-gl-report-ref1-as-new/2.png rename to static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/2.png diff --git a/static/img/general-ledger/solution-gl-report-ref1-as-new/3.png b/static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/3.png similarity index 100% rename from static/img/general-ledger/solution-gl-report-ref1-as-new/3.png rename to static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/3.png diff --git a/static/img/general-ledger/solution-gl-report-ref1-as-new/4.png b/static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/4.png similarity index 100% rename from static/img/general-ledger/solution-gl-report-ref1-as-new/4.png rename to static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/4.png diff --git a/static/img/general-ledger/solution-gl-report-ref1-as-new/5.png b/static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/5.png similarity index 100% rename from static/img/general-ledger/solution-gl-report-ref1-as-new/5.png rename to static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/5.png diff --git a/static/img/general-ledger/solution-gl-report-ref1-as-new/6.png b/static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/6.png similarity index 100% rename from static/img/general-ledger/solution-gl-report-ref1-as-new/6.png rename to static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/6.png diff --git a/static/img/general-ledger/solution-gl-report-ref1-as-new/7.png b/static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/7.png similarity index 100% rename from static/img/general-ledger/solution-gl-report-ref1-as-new/7.png rename to static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/7.png diff --git a/static/img/general-ledger/solution-gl-report-ref1-as-new/8.png b/static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/8.png similarity index 100% rename from static/img/general-ledger/solution-gl-report-ref1-as-new/8.png rename to static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/8.png diff --git a/static/img/general-ledger/solution-gl-report-ref1-as-new/9.png b/static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/9.png similarity index 100% rename from static/img/general-ledger/solution-gl-report-ref1-as-new/9.png rename to static/img/usage/general-ledger/glfaq/solution-gl-report-ref1-as-new/9.png diff --git a/static/img/usage/general-ledger/glfaq/tb-not-balance-iss.png b/static/img/usage/general-ledger/glfaq/tb-not-balance-iss.png new file mode 100644 index 00000000..9fe94d53 Binary files /dev/null and b/static/img/usage/general-ledger/glfaq/tb-not-balance-iss.png differ diff --git a/static/img/usage/general-ledger/glfaq/tb-not-balance-sol.png b/static/img/usage/general-ledger/glfaq/tb-not-balance-sol.png new file mode 100644 index 00000000..a431a7a5 Binary files /dev/null and b/static/img/usage/general-ledger/glfaq/tb-not-balance-sol.png differ diff --git a/static/img/general-ledger/trial-balance-not-tally/1.png b/static/img/usage/general-ledger/glfaq/trial-balance-not-tally/1.png similarity index 100% rename from static/img/general-ledger/trial-balance-not-tally/1.png rename to static/img/usage/general-ledger/glfaq/trial-balance-not-tally/1.png diff --git a/static/img/general-ledger/trial-balance-not-tally/2.png b/static/img/usage/general-ledger/glfaq/trial-balance-not-tally/2.png similarity index 100% rename from static/img/general-ledger/trial-balance-not-tally/2.png rename to static/img/usage/general-ledger/glfaq/trial-balance-not-tally/2.png diff --git a/static/img/general-ledger/witholding-tax/1.png b/static/img/usage/general-ledger/glfaq/witholding-tax/1.png similarity index 100% rename from static/img/general-ledger/witholding-tax/1.png rename to static/img/usage/general-ledger/glfaq/witholding-tax/1.png diff --git a/static/img/general-ledger/witholding-tax/2.png b/static/img/usage/general-ledger/glfaq/witholding-tax/2.png similarity index 100% rename from static/img/general-ledger/witholding-tax/2.png rename to static/img/usage/general-ledger/glfaq/witholding-tax/2.png diff --git a/static/img/general-ledger/witholding-tax/3.png b/static/img/usage/general-ledger/glfaq/witholding-tax/3.png similarity index 100% rename from static/img/general-ledger/witholding-tax/3.png rename to static/img/usage/general-ledger/glfaq/witholding-tax/3.png diff --git a/static/img/general-ledger/witholding-tax/4.png b/static/img/usage/general-ledger/glfaq/witholding-tax/4.png similarity index 100% rename from static/img/general-ledger/witholding-tax/4.png rename to static/img/usage/general-ledger/glfaq/witholding-tax/4.png diff --git a/static/img/general-ledger/witholding-tax/5.png b/static/img/usage/general-ledger/glfaq/witholding-tax/5.png similarity index 100% rename from static/img/general-ledger/witholding-tax/5.png rename to static/img/usage/general-ledger/glfaq/witholding-tax/5.png diff --git a/static/img/usage/general-ledger/glguide/bank-recon.png b/static/img/usage/general-ledger/glguide/bank-recon.png new file mode 100644 index 00000000..dd044321 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/bank-recon.png differ diff --git a/static/img/usage/general-ledger/glguide/cb-entry-step1.png b/static/img/usage/general-ledger/glguide/cb-entry-step1.png new file mode 100644 index 00000000..913b93de Binary files /dev/null and b/static/img/usage/general-ledger/glguide/cb-entry-step1.png differ diff --git a/static/img/usage/general-ledger/glguide/cb-entry-step2.png b/static/img/usage/general-ledger/glguide/cb-entry-step2.png new file mode 100644 index 00000000..da7ab3d9 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/cb-entry-step2.png differ diff --git a/static/img/usage/general-ledger/glguide/chart-step1-1.png b/static/img/usage/general-ledger/glguide/chart-step1-1.png new file mode 100644 index 00000000..bba609d1 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/chart-step1-1.png differ diff --git a/static/img/usage/general-ledger/glguide/chart-step1-2.png b/static/img/usage/general-ledger/glguide/chart-step1-2.png new file mode 100644 index 00000000..07382939 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/chart-step1-2.png differ diff --git a/static/img/usage/general-ledger/glguide/chart-step2-1.png b/static/img/usage/general-ledger/glguide/chart-step2-1.png new file mode 100644 index 00000000..1b30f0b7 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/chart-step2-1.png differ diff --git a/static/img/usage/general-ledger/glguide/f-bank-adj-entry-step3.png b/static/img/usage/general-ledger/glguide/f-bank-adj-entry-step3.png new file mode 100644 index 00000000..eeeb4a15 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/f-bank-adj-entry-step3.png differ diff --git a/static/img/usage/general-ledger/glguide/f-bank-adj-entry-step5.png b/static/img/usage/general-ledger/glguide/f-bank-adj-entry-step5.png new file mode 100644 index 00000000..945b5e2a Binary files /dev/null and b/static/img/usage/general-ledger/glguide/f-bank-adj-entry-step5.png differ diff --git a/static/img/usage/general-ledger/glguide/f-bank-adj-entry-step7.png b/static/img/usage/general-ledger/glguide/f-bank-adj-entry-step7.png new file mode 100644 index 00000000..356f7859 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/f-bank-adj-entry-step7.png differ diff --git a/static/img/usage/general-ledger/glguide/f-bank-adj.png b/static/img/usage/general-ledger/glguide/f-bank-adj.png new file mode 100644 index 00000000..53f1ca68 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/f-bank-adj.png differ diff --git a/static/img/usage/general-ledger/glguide/jr-entry.png b/static/img/usage/general-ledger/glguide/jr-entry.png new file mode 100644 index 00000000..982e20de Binary files /dev/null and b/static/img/usage/general-ledger/glguide/jr-entry.png differ diff --git a/static/img/usage/general-ledger/glguide/maintain-budget.png b/static/img/usage/general-ledger/glguide/maintain-budget.png new file mode 100644 index 00000000..a70857f9 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/maintain-budget.png differ diff --git a/static/img/usage/general-ledger/glguide/o-balance.png b/static/img/usage/general-ledger/glguide/o-balance.png new file mode 100644 index 00000000..ad2a9c95 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/o-balance.png differ diff --git a/static/img/usage/general-ledger/glguide/stock-value-step3-1.png b/static/img/usage/general-ledger/glguide/stock-value-step3-1.png new file mode 100644 index 00000000..b1caab6c Binary files /dev/null and b/static/img/usage/general-ledger/glguide/stock-value-step3-1.png differ diff --git a/static/img/usage/general-ledger/glguide/stock-value-step3-2.png b/static/img/usage/general-ledger/glguide/stock-value-step3-2.png new file mode 100644 index 00000000..9d35cab2 Binary files /dev/null and b/static/img/usage/general-ledger/glguide/stock-value-step3-2.png differ diff --git a/static/img/usage/general-ledger/glreport/bal-sheet.png b/static/img/usage/general-ledger/glreport/bal-sheet.png new file mode 100644 index 00000000..b6e153fe Binary files /dev/null and b/static/img/usage/general-ledger/glreport/bal-sheet.png differ diff --git a/static/img/usage/general-ledger/glreport/ledge-rpt.png b/static/img/usage/general-ledger/glreport/ledge-rpt.png new file mode 100644 index 00000000..4a7eace4 Binary files /dev/null and b/static/img/usage/general-ledger/glreport/ledge-rpt.png differ diff --git a/static/img/usage/general-ledger/glreport/pnl-consolidate.png b/static/img/usage/general-ledger/glreport/pnl-consolidate.png new file mode 100644 index 00000000..f733ba8f Binary files /dev/null and b/static/img/usage/general-ledger/glreport/pnl-consolidate.png differ diff --git a/static/img/usage/general-ledger/glreport/pnl-consolidate1.png b/static/img/usage/general-ledger/glreport/pnl-consolidate1.png new file mode 100644 index 00000000..a81d7f0d Binary files /dev/null and b/static/img/usage/general-ledger/glreport/pnl-consolidate1.png differ diff --git a/static/img/usage/general-ledger/glreport/pnl-consolidate2.png b/static/img/usage/general-ledger/glreport/pnl-consolidate2.png new file mode 100644 index 00000000..1edda274 Binary files /dev/null and b/static/img/usage/general-ledger/glreport/pnl-consolidate2.png differ diff --git a/static/img/usage/general-ledger/glreport/pnl-consolidate3.png b/static/img/usage/general-ledger/glreport/pnl-consolidate3.png new file mode 100644 index 00000000..4ea6be37 Binary files /dev/null and b/static/img/usage/general-ledger/glreport/pnl-consolidate3.png differ diff --git a/static/img/usage/general-ledger/glreport/pnl-state.png b/static/img/usage/general-ledger/glreport/pnl-state.png new file mode 100644 index 00000000..531a15e7 Binary files /dev/null and b/static/img/usage/general-ledger/glreport/pnl-state.png differ diff --git a/static/img/usage/general-ledger/glreport/trial-bal.png b/static/img/usage/general-ledger/glreport/trial-bal.png new file mode 100644 index 00000000..eae4ff6f Binary files /dev/null and b/static/img/usage/general-ledger/glreport/trial-bal.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/gst-process-flow.png b/static/img/usage/general/case-study/gst-margin-scheme/gst-process-flow.png new file mode 100644 index 00000000..4078cb01 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/gst-process-flow.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/lampiran-step1.png b/static/img/usage/general/case-study/gst-margin-scheme/lampiran-step1.png new file mode 100644 index 00000000..fff35e5a Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/lampiran-step1.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/lampiran-step2.png b/static/img/usage/general/case-study/gst-margin-scheme/lampiran-step2.png new file mode 100644 index 00000000..7a39d30a Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/lampiran-step2.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/margin-scheme.png b/static/img/usage/general/case-study/gst-margin-scheme/margin-scheme.png new file mode 100644 index 00000000..df3a7288 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/margin-scheme.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/nov-step1.png b/static/img/usage/general/case-study/gst-margin-scheme/nov-step1.png new file mode 100644 index 00000000..56a49217 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/nov-step1.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/nov-step2.png b/static/img/usage/general/case-study/gst-margin-scheme/nov-step2.png new file mode 100644 index 00000000..f6acd3fd Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/nov-step2.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/nov-step3.png b/static/img/usage/general/case-study/gst-margin-scheme/nov-step3.png new file mode 100644 index 00000000..7c8c4be1 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/nov-step3.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/nov-step4.png b/static/img/usage/general/case-study/gst-margin-scheme/nov-step4.png new file mode 100644 index 00000000..d2f29de9 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/nov-step4.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/nov-step5.png b/static/img/usage/general/case-study/gst-margin-scheme/nov-step5.png new file mode 100644 index 00000000..f5a6d3ae Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/nov-step5.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/nov-step6.png b/static/img/usage/general/case-study/gst-margin-scheme/nov-step6.png new file mode 100644 index 00000000..edc18499 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/nov-step6.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/nov-step7.png b/static/img/usage/general/case-study/gst-margin-scheme/nov-step7.png new file mode 100644 index 00000000..b177f5bb Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/nov-step7.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/other-step1.png b/static/img/usage/general/case-study/gst-margin-scheme/other-step1.png new file mode 100644 index 00000000..cc1d92c8 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/other-step1.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/other-step2.png b/static/img/usage/general/case-study/gst-margin-scheme/other-step2.png new file mode 100644 index 00000000..19842b64 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/other-step2.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/other-step3.png b/static/img/usage/general/case-study/gst-margin-scheme/other-step3.png new file mode 100644 index 00000000..7de6f59d Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/other-step3.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/record-2nd-hand-car.png b/static/img/usage/general/case-study/gst-margin-scheme/record-2nd-hand-car.png new file mode 100644 index 00000000..10100f41 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/record-2nd-hand-car.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/sep-step2.png b/static/img/usage/general/case-study/gst-margin-scheme/sep-step2.png new file mode 100644 index 00000000..0520afc7 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/sep-step2.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/sep-step3.png b/static/img/usage/general/case-study/gst-margin-scheme/sep-step3.png new file mode 100644 index 00000000..8e9cac94 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/sep-step3.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/sep-step4.png b/static/img/usage/general/case-study/gst-margin-scheme/sep-step4.png new file mode 100644 index 00000000..91897ba7 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/sep-step4.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/sep-step5.png b/static/img/usage/general/case-study/gst-margin-scheme/sep-step5.png new file mode 100644 index 00000000..a51b5a23 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/sep-step5.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/sep-step6.png b/static/img/usage/general/case-study/gst-margin-scheme/sep-step6.png new file mode 100644 index 00000000..8f56c113 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/sep-step6.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/sep-step7.png b/static/img/usage/general/case-study/gst-margin-scheme/sep-step7.png new file mode 100644 index 00000000..cfd915ae Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/sep-step7.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/set-md-cust.png b/static/img/usage/general/case-study/gst-margin-scheme/set-md-cust.png new file mode 100644 index 00000000..2592272f Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/set-md-cust.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/set-md-item.png b/static/img/usage/general/case-study/gst-margin-scheme/set-md-item.png new file mode 100644 index 00000000..cc05b487 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/set-md-item.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step2.png b/static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step2.png new file mode 100644 index 00000000..72ad172f Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step2.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step3.png b/static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step3.png new file mode 100644 index 00000000..20db739c Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step3.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step4.png b/static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step4.png new file mode 100644 index 00000000..eeac5128 Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/set-md-project-step4.png differ diff --git a/static/img/usage/general/case-study/gst-margin-scheme/set-md-supp.png b/static/img/usage/general/case-study/gst-margin-scheme/set-md-supp.png new file mode 100644 index 00000000..4dc31a1b Binary files /dev/null and b/static/img/usage/general/case-study/gst-margin-scheme/set-md-supp.png differ diff --git a/static/img/usage/general/case-study/lock-report/reporting.png b/static/img/usage/general/case-study/lock-report/reporting.png new file mode 100644 index 00000000..8034b76e Binary files /dev/null and b/static/img/usage/general/case-study/lock-report/reporting.png differ diff --git a/static/img/grid-layout/clear-sorting/1.png b/static/img/usage/general/grid-layout/clear-sorting/scenario1-1.png similarity index 100% rename from static/img/grid-layout/clear-sorting/1.png rename to static/img/usage/general/grid-layout/clear-sorting/scenario1-1.png diff --git a/static/img/grid-layout/clear-sorting/2.png b/static/img/usage/general/grid-layout/clear-sorting/scenario1-2.png similarity index 100% rename from static/img/grid-layout/clear-sorting/2.png rename to static/img/usage/general/grid-layout/clear-sorting/scenario1-2.png diff --git a/static/img/grid-layout/clear-sorting/3.png b/static/img/usage/general/grid-layout/clear-sorting/steps-1.png similarity index 100% rename from static/img/grid-layout/clear-sorting/3.png rename to static/img/usage/general/grid-layout/clear-sorting/steps-1.png diff --git a/static/img/grid-layout/clear-sorting/4.png b/static/img/usage/general/grid-layout/clear-sorting/steps-2.png similarity index 100% rename from static/img/grid-layout/clear-sorting/4.png rename to static/img/usage/general/grid-layout/clear-sorting/steps-2.png diff --git a/static/img/grid-layout/clear-sorting/5.png b/static/img/usage/general/grid-layout/clear-sorting/steps-3.png similarity index 100% rename from static/img/grid-layout/clear-sorting/5.png rename to static/img/usage/general/grid-layout/clear-sorting/steps-3.png diff --git a/static/img/grid-layout/rename-header/3.png b/static/img/usage/general/grid-layout/rename-header/column-result.png similarity index 100% rename from static/img/grid-layout/rename-header/3.png rename to static/img/usage/general/grid-layout/rename-header/column-result.png diff --git a/static/img/grid-layout/rename-header/2.png b/static/img/usage/general/grid-layout/rename-header/grid-properties.png similarity index 100% rename from static/img/grid-layout/rename-header/2.png rename to static/img/usage/general/grid-layout/rename-header/grid-properties.png diff --git a/static/img/grid-layout/rename-header/1.png b/static/img/usage/general/grid-layout/rename-header/right-click-properties.png similarity index 100% rename from static/img/grid-layout/rename-header/1.png rename to static/img/usage/general/grid-layout/rename-header/right-click-properties.png diff --git a/static/img/grid-layout/reset-layout/3.png b/static/img/usage/general/grid-layout/reset-layout/delete-layout-1.png similarity index 100% rename from static/img/grid-layout/reset-layout/3.png rename to static/img/usage/general/grid-layout/reset-layout/delete-layout-1.png diff --git a/static/img/grid-layout/reset-layout/4.png b/static/img/usage/general/grid-layout/reset-layout/delete-layout-2.png similarity index 100% rename from static/img/grid-layout/reset-layout/4.png rename to static/img/usage/general/grid-layout/reset-layout/delete-layout-2.png diff --git a/static/img/grid-layout/reset-layout/1.png b/static/img/usage/general/grid-layout/reset-layout/reset-layout-1.png similarity index 100% rename from static/img/grid-layout/reset-layout/1.png rename to static/img/usage/general/grid-layout/reset-layout/reset-layout-1.png diff --git a/static/img/grid-layout/reset-layout/2.png b/static/img/usage/general/grid-layout/reset-layout/reset-layout-2.png similarity index 100% rename from static/img/grid-layout/reset-layout/2.png rename to static/img/usage/general/grid-layout/reset-layout/reset-layout-2.png diff --git a/static/img/grid-layout/save-manage-layout/11.png b/static/img/usage/general/grid-layout/save-manage-layout/access-control-1.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/11.png rename to static/img/usage/general/grid-layout/save-manage-layout/access-control-1.png diff --git a/static/img/grid-layout/save-manage-layout/12.png b/static/img/usage/general/grid-layout/save-manage-layout/access-control-2.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/12.png rename to static/img/usage/general/grid-layout/save-manage-layout/access-control-2.png diff --git a/static/img/grid-layout/save-manage-layout/13.png b/static/img/usage/general/grid-layout/save-manage-layout/access-control-3.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/13.png rename to static/img/usage/general/grid-layout/save-manage-layout/access-control-3.png diff --git a/static/img/grid-layout/save-manage-layout/14.png b/static/img/usage/general/grid-layout/save-manage-layout/access-control-4.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/14.png rename to static/img/usage/general/grid-layout/save-manage-layout/access-control-4.png diff --git a/static/img/grid-layout/save-manage-layout/1.png b/static/img/usage/general/grid-layout/save-manage-layout/call-out-hidden-field.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/1.png rename to static/img/usage/general/grid-layout/save-manage-layout/call-out-hidden-field.png diff --git a/static/img/grid-layout/save-manage-layout/6.png b/static/img/usage/general/grid-layout/save-manage-layout/manage-layout-users-select.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/6.png rename to static/img/usage/general/grid-layout/save-manage-layout/manage-layout-users-select.png diff --git a/static/img/grid-layout/save-manage-layout/5.png b/static/img/usage/general/grid-layout/save-manage-layout/manage-layout-users.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/5.png rename to static/img/usage/general/grid-layout/save-manage-layout/manage-layout-users.png diff --git a/static/img/grid-layout/save-manage-layout/4.png b/static/img/usage/general/grid-layout/save-manage-layout/manage-layout.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/4.png rename to static/img/usage/general/grid-layout/save-manage-layout/manage-layout.png diff --git a/static/img/grid-layout/save-manage-layout/2.png b/static/img/usage/general/grid-layout/save-manage-layout/save-layout-1.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/2.png rename to static/img/usage/general/grid-layout/save-manage-layout/save-layout-1.png diff --git a/static/img/grid-layout/save-manage-layout/3.png b/static/img/usage/general/grid-layout/save-manage-layout/save-layout-2.png similarity index 100% rename from static/img/grid-layout/save-manage-layout/3.png rename to static/img/usage/general/grid-layout/save-manage-layout/save-layout-2.png diff --git a/static/img/usage/general/myttx/adjustment-credit-note-2.jpg b/static/img/usage/general/myttx/adjustment-credit-note-2.jpg new file mode 100644 index 00000000..b3d3bcc1 Binary files /dev/null and b/static/img/usage/general/myttx/adjustment-credit-note-2.jpg differ diff --git a/static/img/usage/general/myttx/adjustment-credit-note.jpg b/static/img/usage/general/myttx/adjustment-credit-note.jpg new file mode 100644 index 00000000..f623f9aa Binary files /dev/null and b/static/img/usage/general/myttx/adjustment-credit-note.jpg differ diff --git a/static/img/usage/general/myttx/adjustment-debit-note.jpg b/static/img/usage/general/myttx/adjustment-debit-note.jpg new file mode 100644 index 00000000..7301c9f8 Binary files /dev/null and b/static/img/usage/general/myttx/adjustment-debit-note.jpg differ diff --git a/static/img/usage/general/myttx/basic-setting-stock-grp.jpg b/static/img/usage/general/myttx/basic-setting-stock-grp.jpg new file mode 100644 index 00000000..16a4a77f Binary files /dev/null and b/static/img/usage/general/myttx/basic-setting-stock-grp.jpg differ diff --git a/static/img/usage/general/myttx/basic-setting-stock-item.jpg b/static/img/usage/general/myttx/basic-setting-stock-item.jpg new file mode 100644 index 00000000..89ad2a03 Binary files /dev/null and b/static/img/usage/general/myttx/basic-setting-stock-item.jpg differ diff --git a/static/img/usage/general/myttx/full-tax-inv-sample.jpg b/static/img/usage/general/myttx/full-tax-inv-sample.jpg new file mode 100644 index 00000000..f60ae875 Binary files /dev/null and b/static/img/usage/general/myttx/full-tax-inv-sample.jpg differ diff --git a/static/img/usage/general/myttx/inv-sample.jpg b/static/img/usage/general/myttx/inv-sample.jpg new file mode 100644 index 00000000..68486a45 Binary files /dev/null and b/static/img/usage/general/myttx/inv-sample.jpg differ diff --git a/static/img/usage/general/myttx/new-guest-details-1.jpg b/static/img/usage/general/myttx/new-guest-details-1.jpg new file mode 100644 index 00000000..4ae7fe57 Binary files /dev/null and b/static/img/usage/general/myttx/new-guest-details-1.jpg differ diff --git a/static/img/usage/general/myttx/new-guest-details-2.jpg b/static/img/usage/general/myttx/new-guest-details-2.jpg new file mode 100644 index 00000000..a1309e82 Binary files /dev/null and b/static/img/usage/general/myttx/new-guest-details-2.jpg differ diff --git a/static/img/usage/general/myttx/print-ttx-form.jpg b/static/img/usage/general/myttx/print-ttx-form.jpg new file mode 100644 index 00000000..9e3d2b3a Binary files /dev/null and b/static/img/usage/general/myttx/print-ttx-form.jpg differ diff --git a/static/img/usage/general/myttx/record-tax-inv-step1.jpg b/static/img/usage/general/myttx/record-tax-inv-step1.jpg new file mode 100644 index 00000000..d6de07e1 Binary files /dev/null and b/static/img/usage/general/myttx/record-tax-inv-step1.jpg differ diff --git a/static/img/usage/general/myttx/record-tax-inv-step2.jpg b/static/img/usage/general/myttx/record-tax-inv-step2.jpg new file mode 100644 index 00000000..40acc1f6 Binary files /dev/null and b/static/img/usage/general/myttx/record-tax-inv-step2.jpg differ diff --git a/static/img/usage/general/myttx/record-tax-inv-step3.jpg b/static/img/usage/general/myttx/record-tax-inv-step3.jpg new file mode 100644 index 00000000..b936630b Binary files /dev/null and b/static/img/usage/general/myttx/record-tax-inv-step3.jpg differ diff --git a/static/img/usage/general/myttx/record-tax-inv-step4.jpg b/static/img/usage/general/myttx/record-tax-inv-step4.jpg new file mode 100644 index 00000000..47a5a78d Binary files /dev/null and b/static/img/usage/general/myttx/record-tax-inv-step4.jpg differ diff --git a/static/img/usage/general/myttx/record-tax-inv-step5.jpg b/static/img/usage/general/myttx/record-tax-inv-step5.jpg new file mode 100644 index 00000000..f5780d72 Binary files /dev/null and b/static/img/usage/general/myttx/record-tax-inv-step5.jpg differ diff --git a/static/img/usage/general/myttx/room-setting-stock-grp.jpg b/static/img/usage/general/myttx/room-setting-stock-grp.jpg new file mode 100644 index 00000000..46f0f4cd Binary files /dev/null and b/static/img/usage/general/myttx/room-setting-stock-grp.jpg differ diff --git a/static/img/usage/general/myttx/room-setting-stock-item.jpg b/static/img/usage/general/myttx/room-setting-stock-item.jpg new file mode 100644 index 00000000..3dd0b2c6 Binary files /dev/null and b/static/img/usage/general/myttx/room-setting-stock-item.jpg differ diff --git a/static/img/usage/general/myttx/sample-ttx-1.jpg b/static/img/usage/general/myttx/sample-ttx-1.jpg new file mode 100644 index 00000000..7744cacd Binary files /dev/null and b/static/img/usage/general/myttx/sample-ttx-1.jpg differ diff --git a/static/img/usage/general/myttx/sample-ttx-2.jpg b/static/img/usage/general/myttx/sample-ttx-2.jpg new file mode 100644 index 00000000..5c8f5170 Binary files /dev/null and b/static/img/usage/general/myttx/sample-ttx-2.jpg differ diff --git a/static/img/usage/general/myttx/service-setting-stock-grp.jpg b/static/img/usage/general/myttx/service-setting-stock-grp.jpg new file mode 100644 index 00000000..447706c2 Binary files /dev/null and b/static/img/usage/general/myttx/service-setting-stock-grp.jpg differ diff --git a/static/img/usage/general/myttx/service-setting-stock-item-1.jpg b/static/img/usage/general/myttx/service-setting-stock-item-1.jpg new file mode 100644 index 00000000..e9347a59 Binary files /dev/null and b/static/img/usage/general/myttx/service-setting-stock-item-1.jpg differ diff --git a/static/img/usage/general/myttx/service-setting-stock-item-4.jpg b/static/img/usage/general/myttx/service-setting-stock-item-4.jpg new file mode 100644 index 00000000..2f555d12 Binary files /dev/null and b/static/img/usage/general/myttx/service-setting-stock-item-4.jpg differ diff --git a/static/img/usage/general/myttx/ttx-flow.jpg b/static/img/usage/general/myttx/ttx-flow.jpg new file mode 100644 index 00000000..d0274599 Binary files /dev/null and b/static/img/usage/general/myttx/ttx-flow.jpg differ diff --git a/static/img/usage/general/myttx/ttx-part-a.jpg b/static/img/usage/general/myttx/ttx-part-a.jpg new file mode 100644 index 00000000..6eb103df Binary files /dev/null and b/static/img/usage/general/myttx/ttx-part-a.jpg differ diff --git a/static/img/usage/general/myttx/ttx-part-d.jpg b/static/img/usage/general/myttx/ttx-part-d.jpg new file mode 100644 index 00000000..7fc4ef39 Binary files /dev/null and b/static/img/usage/general/myttx/ttx-part-d.jpg differ diff --git a/static/img/usage/general/others/display-pole/display-problem.jpg b/static/img/usage/general/others/display-pole/display-problem.jpg new file mode 100644 index 00000000..4f2a0ca2 Binary files /dev/null and b/static/img/usage/general/others/display-pole/display-problem.jpg differ diff --git a/static/img/usage/general/others/display-pole/display-solution1.jpg b/static/img/usage/general/others/display-pole/display-solution1.jpg new file mode 100644 index 00000000..42a1d820 Binary files /dev/null and b/static/img/usage/general/others/display-pole/display-solution1.jpg differ diff --git a/static/img/usage/general/others/display-pole/display-solution2.jpg b/static/img/usage/general/others/display-pole/display-solution2.jpg new file mode 100644 index 00000000..690edd95 Binary files /dev/null and b/static/img/usage/general/others/display-pole/display-solution2.jpg differ diff --git a/static/img/usage/general/others/display-pole/display-solution3.jpg b/static/img/usage/general/others/display-pole/display-solution3.jpg new file mode 100644 index 00000000..f963fa78 Binary files /dev/null and b/static/img/usage/general/others/display-pole/display-solution3.jpg differ diff --git a/static/img/usage/general/others/display-pole/display-solution4.jpg b/static/img/usage/general/others/display-pole/display-solution4.jpg new file mode 100644 index 00000000..6220c62a Binary files /dev/null and b/static/img/usage/general/others/display-pole/display-solution4.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/example-access-1.jpg b/static/img/usage/general/others/firebird-odbc/example-access-1.jpg new file mode 100644 index 00000000..65f537a6 Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/example-access-1.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/example-access-2.jpg b/static/img/usage/general/others/firebird-odbc/example-access-2.jpg new file mode 100644 index 00000000..2d313f0c Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/example-access-2.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/example-access-3.jpg b/static/img/usage/general/others/firebird-odbc/example-access-3.jpg new file mode 100644 index 00000000..d6450381 Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/example-access-3.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/example-access-4.jpg b/static/img/usage/general/others/firebird-odbc/example-access-4.jpg new file mode 100644 index 00000000..a4779ebd Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/example-access-4.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/example-access-5.jpg b/static/img/usage/general/others/firebird-odbc/example-access-5.jpg new file mode 100644 index 00000000..84b76dc7 Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/example-access-5.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/example-access-6.jpg b/static/img/usage/general/others/firebird-odbc/example-access-6.jpg new file mode 100644 index 00000000..935005e0 Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/example-access-6.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/example-access-7.jpg b/static/img/usage/general/others/firebird-odbc/example-access-7.jpg new file mode 100644 index 00000000..4c63f76f Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/example-access-7.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/example-access-8.jpg b/static/img/usage/general/others/firebird-odbc/example-access-8.jpg new file mode 100644 index 00000000..dfd32117 Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/example-access-8.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/setup-step1.jpg b/static/img/usage/general/others/firebird-odbc/setup-step1.jpg new file mode 100644 index 00000000..72cf67d7 Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/setup-step1.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/setup-step2.jpg b/static/img/usage/general/others/firebird-odbc/setup-step2.jpg new file mode 100644 index 00000000..1ea9d9c0 Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/setup-step2.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/setup-step3.jpg b/static/img/usage/general/others/firebird-odbc/setup-step3.jpg new file mode 100644 index 00000000..c089ea40 Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/setup-step3.jpg differ diff --git a/static/img/usage/general/others/firebird-odbc/setup-step4.gif b/static/img/usage/general/others/firebird-odbc/setup-step4.gif new file mode 100644 index 00000000..56db7234 Binary files /dev/null and b/static/img/usage/general/others/firebird-odbc/setup-step4.gif differ diff --git a/static/img/usage/general/others/flame-robin/register-new-database.jpg b/static/img/usage/general/others/flame-robin/register-new-database.jpg new file mode 100644 index 00000000..299e163f Binary files /dev/null and b/static/img/usage/general/others/flame-robin/register-new-database.jpg differ diff --git a/static/img/usage/general/others/flame-robin/server-information-step1.jpg b/static/img/usage/general/others/flame-robin/server-information-step1.jpg new file mode 100644 index 00000000..c9214e5a Binary files /dev/null and b/static/img/usage/general/others/flame-robin/server-information-step1.jpg differ diff --git a/static/img/usage/general/others/flame-robin/server-information-step2.jpg b/static/img/usage/general/others/flame-robin/server-information-step2.jpg new file mode 100644 index 00000000..66f1fe19 Binary files /dev/null and b/static/img/usage/general/others/flame-robin/server-information-step2.jpg differ diff --git a/static/img/usage/general/others/flame-robin/server-information-step3.jpg b/static/img/usage/general/others/flame-robin/server-information-step3.jpg new file mode 100644 index 00000000..657961ec Binary files /dev/null and b/static/img/usage/general/others/flame-robin/server-information-step3.jpg differ diff --git a/static/img/usage/general/others/flame-robin/update-registered-database.jpg b/static/img/usage/general/others/flame-robin/update-registered-database.jpg new file mode 100644 index 00000000..9c4189a8 Binary files /dev/null and b/static/img/usage/general/others/flame-robin/update-registered-database.jpg differ diff --git a/static/img/usage/general/others/flame-robin/write-query-1.jpg b/static/img/usage/general/others/flame-robin/write-query-1.jpg new file mode 100644 index 00000000..d2482833 Binary files /dev/null and b/static/img/usage/general/others/flame-robin/write-query-1.jpg differ diff --git a/static/img/usage/general/others/flame-robin/write-query-2.jpg b/static/img/usage/general/others/flame-robin/write-query-2.jpg new file mode 100644 index 00000000..12db5b72 Binary files /dev/null and b/static/img/usage/general/others/flame-robin/write-query-2.jpg differ diff --git a/static/img/usage/general/others/flame-robin/write-query-3.jpg b/static/img/usage/general/others/flame-robin/write-query-3.jpg new file mode 100644 index 00000000..0a7c507b Binary files /dev/null and b/static/img/usage/general/others/flame-robin/write-query-3.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-1.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-1.jpg new file mode 100644 index 00000000..4b7d67ac Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-1.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-10.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-10.jpg new file mode 100644 index 00000000..ff182ecc Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-10.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-11.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-11.jpg new file mode 100644 index 00000000..9eb666da Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-11.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-12.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-12.jpg new file mode 100644 index 00000000..66cc6d04 Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-12.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-2.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-2.jpg new file mode 100644 index 00000000..1c6895a2 Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-2.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-3.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-3.jpg new file mode 100644 index 00000000..e5013d3d Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-3.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-4.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-4.jpg new file mode 100644 index 00000000..9634c453 Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-4.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-5.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-5.jpg new file mode 100644 index 00000000..bc794055 Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-5.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-6.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-6.jpg new file mode 100644 index 00000000..f965749f Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-6.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-7.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-7.jpg new file mode 100644 index 00000000..426211bc Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-7.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-8.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-8.jpg new file mode 100644 index 00000000..6811afa7 Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-8.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-9.jpg b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-9.jpg new file mode 100644 index 00000000..d1fe036d Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/add-task-to-scheduler-9.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/generate-backup-script-grp.jpg b/static/img/usage/general/others/generate-backup-script/generate-backup-script-grp.jpg new file mode 100644 index 00000000..bdc53c37 Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/generate-backup-script-grp.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/generate-backup-script-item.jpg b/static/img/usage/general/others/generate-backup-script/generate-backup-script-item.jpg new file mode 100644 index 00000000..a301b9c1 Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/generate-backup-script-item.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/generate-backup-script-step1.jpg b/static/img/usage/general/others/generate-backup-script/generate-backup-script-step1.jpg new file mode 100644 index 00000000..1d8c7a41 Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/generate-backup-script-step1.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/generate-backup-script-step2.jpg b/static/img/usage/general/others/generate-backup-script/generate-backup-script-step2.jpg new file mode 100644 index 00000000..86b75f3a Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/generate-backup-script-step2.jpg differ diff --git a/static/img/usage/general/others/generate-backup-script/generate-backup-script-step3.jpg b/static/img/usage/general/others/generate-backup-script/generate-backup-script-step3.jpg new file mode 100644 index 00000000..0f2db159 Binary files /dev/null and b/static/img/usage/general/others/generate-backup-script/generate-backup-script-step3.jpg differ diff --git a/static/img/usage/general/others/gst-bounce-cheque/customer-side-1.jpg b/static/img/usage/general/others/gst-bounce-cheque/customer-side-1.jpg new file mode 100644 index 00000000..39bdbdec Binary files /dev/null and b/static/img/usage/general/others/gst-bounce-cheque/customer-side-1.jpg differ diff --git a/static/img/usage/general/others/gst-bounce-cheque/customer-side-2.jpg b/static/img/usage/general/others/gst-bounce-cheque/customer-side-2.jpg new file mode 100644 index 00000000..e6b057b2 Binary files /dev/null and b/static/img/usage/general/others/gst-bounce-cheque/customer-side-2.jpg differ diff --git a/static/img/usage/general/others/gst-bounce-cheque/supplier-side-1.jpg b/static/img/usage/general/others/gst-bounce-cheque/supplier-side-1.jpg new file mode 100644 index 00000000..043717f3 Binary files /dev/null and b/static/img/usage/general/others/gst-bounce-cheque/supplier-side-1.jpg differ diff --git a/static/img/usage/general/others/gst-bounce-cheque/supplier-side-2.jpg b/static/img/usage/general/others/gst-bounce-cheque/supplier-side-2.jpg new file mode 100644 index 00000000..6f895d22 Binary files /dev/null and b/static/img/usage/general/others/gst-bounce-cheque/supplier-side-2.jpg differ diff --git a/static/img/usage/general/others/navigator-toolbar/type1-bar.jpg b/static/img/usage/general/others/navigator-toolbar/type1-bar.jpg new file mode 100644 index 00000000..679b8816 Binary files /dev/null and b/static/img/usage/general/others/navigator-toolbar/type1-bar.jpg differ diff --git a/static/img/usage/general/others/navigator-toolbar/type1-result.jpg b/static/img/usage/general/others/navigator-toolbar/type1-result.jpg new file mode 100644 index 00000000..2da0eea7 Binary files /dev/null and b/static/img/usage/general/others/navigator-toolbar/type1-result.jpg differ diff --git a/static/img/usage/general/others/navigator-toolbar/type2-bar.jpg b/static/img/usage/general/others/navigator-toolbar/type2-bar.jpg new file mode 100644 index 00000000..9c45d832 Binary files /dev/null and b/static/img/usage/general/others/navigator-toolbar/type2-bar.jpg differ diff --git a/static/img/usage/general/others/preview-menu/menu-list.jpg b/static/img/usage/general/others/preview-menu/menu-list.jpg new file mode 100644 index 00000000..c4d723fd Binary files /dev/null and b/static/img/usage/general/others/preview-menu/menu-list.jpg differ diff --git a/static/img/usage/general/others/properties/properties-detail.jpg b/static/img/usage/general/others/properties/properties-detail.jpg new file mode 100644 index 00000000..89d2a4a2 Binary files /dev/null and b/static/img/usage/general/others/properties/properties-detail.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/adhoc-backup-step1.jpg b/static/img/usage/general/others/sql-diagnosis/adhoc-backup-step1.jpg new file mode 100644 index 00000000..7fac4cbd Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/adhoc-backup-step1.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/adhoc-backup-step2.jpg b/static/img/usage/general/others/sql-diagnosis/adhoc-backup-step2.jpg new file mode 100644 index 00000000..96088d8a Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/adhoc-backup-step2.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step1.jpg b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step1.jpg new file mode 100644 index 00000000..38c3ddf3 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step1.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step2.jpg b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step2.jpg new file mode 100644 index 00000000..9537a5cc Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step2.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step3.jpg b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step3.jpg new file mode 100644 index 00000000..47a9f6ef Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step3.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step4.jpg b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step4.jpg new file mode 100644 index 00000000..9eb666da Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step4.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step5.jpg b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step5.jpg new file mode 100644 index 00000000..66cc6d04 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/backup-for-build31-step5.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/batch-backup-step-1.jpg b/static/img/usage/general/others/sql-diagnosis/batch-backup-step-1.jpg new file mode 100644 index 00000000..c47e6e81 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/batch-backup-step-1.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/batch-backup-step-2.jpg b/static/img/usage/general/others/sql-diagnosis/batch-backup-step-2.jpg new file mode 100644 index 00000000..f475c76b Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/batch-backup-step-2.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/batch-backup-step-3.jpg b/static/img/usage/general/others/sql-diagnosis/batch-backup-step-3.jpg new file mode 100644 index 00000000..13a5a23e Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/batch-backup-step-3.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/database-online-step.jpg b/static/img/usage/general/others/sql-diagnosis/database-online-step.jpg new file mode 100644 index 00000000..d1acb8b7 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/database-online-step.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/diagnosis-intro.jpg b/static/img/usage/general/others/sql-diagnosis/diagnosis-intro.jpg new file mode 100644 index 00000000..c6211af7 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/diagnosis-intro.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/patch-scenario1-1.jpg b/static/img/usage/general/others/sql-diagnosis/patch-scenario1-1.jpg new file mode 100644 index 00000000..1adee88a Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/patch-scenario1-1.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/patch-scenario1-2.jpg b/static/img/usage/general/others/sql-diagnosis/patch-scenario1-2.jpg new file mode 100644 index 00000000..6e77e847 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/patch-scenario1-2.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/patch-scenario1-3.gif b/static/img/usage/general/others/sql-diagnosis/patch-scenario1-3.gif new file mode 100644 index 00000000..05ae311c Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/patch-scenario1-3.gif differ diff --git a/static/img/usage/general/others/sql-diagnosis/patch-step.jpg b/static/img/usage/general/others/sql-diagnosis/patch-step.jpg new file mode 100644 index 00000000..972b7138 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/patch-step.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/schedule-backup-1.jpg b/static/img/usage/general/others/sql-diagnosis/schedule-backup-1.jpg new file mode 100644 index 00000000..87c75f7b Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/schedule-backup-1.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/schedule-backup-2.jpg b/static/img/usage/general/others/sql-diagnosis/schedule-backup-2.jpg new file mode 100644 index 00000000..ed62df79 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/schedule-backup-2.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/schedule-backup-3.jpg b/static/img/usage/general/others/sql-diagnosis/schedule-backup-3.jpg new file mode 100644 index 00000000..89f721f1 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/schedule-backup-3.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/schedule-backup-4.jpg b/static/img/usage/general/others/sql-diagnosis/schedule-backup-4.jpg new file mode 100644 index 00000000..cddcaf8c Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/schedule-backup-4.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/schedule-backup-5.jpg b/static/img/usage/general/others/sql-diagnosis/schedule-backup-5.jpg new file mode 100644 index 00000000..8d079dca Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/schedule-backup-5.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/schedule-backup-6.jpg b/static/img/usage/general/others/sql-diagnosis/schedule-backup-6.jpg new file mode 100644 index 00000000..843fb3a2 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/schedule-backup-6.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/validate-backup-metadata-1.jpg b/static/img/usage/general/others/sql-diagnosis/validate-backup-metadata-1.jpg new file mode 100644 index 00000000..645a5ec7 Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/validate-backup-metadata-1.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/validate-backup-metadata-2.jpg b/static/img/usage/general/others/sql-diagnosis/validate-backup-metadata-2.jpg new file mode 100644 index 00000000..5beac69a Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/validate-backup-metadata-2.jpg differ diff --git a/static/img/usage/general/others/sql-diagnosis/validate-step.jpg b/static/img/usage/general/others/sql-diagnosis/validate-step.jpg new file mode 100644 index 00000000..2062b12b Binary files /dev/null and b/static/img/usage/general/others/sql-diagnosis/validate-step.jpg differ diff --git a/static/img/usage/general/others/upgrade721-error/upgrade-problem.jpg b/static/img/usage/general/others/upgrade721-error/upgrade-problem.jpg new file mode 100644 index 00000000..3ba4477b Binary files /dev/null and b/static/img/usage/general/others/upgrade721-error/upgrade-problem.jpg differ diff --git a/static/img/usage/general/others/upgrade721-error/upgrade-solution.jpg b/static/img/usage/general/others/upgrade721-error/upgrade-solution.jpg new file mode 100644 index 00000000..f6b6bdbc Binary files /dev/null and b/static/img/usage/general/others/upgrade721-error/upgrade-solution.jpg differ diff --git a/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-problem.jpg b/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-problem.jpg new file mode 100644 index 00000000..80c8c36f Binary files /dev/null and b/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-problem.jpg differ diff --git a/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution1.jpg b/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution1.jpg new file mode 100644 index 00000000..a9c73769 Binary files /dev/null and b/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution1.jpg differ diff --git a/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution2.jpg b/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution2.jpg new file mode 100644 index 00000000..df62e427 Binary files /dev/null and b/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution2.jpg differ diff --git a/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution3.jpg b/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution3.jpg new file mode 100644 index 00000000..bd14e579 Binary files /dev/null and b/static/img/usage/general/others/upgrade721-tax-fr3report/fr3-report-solution3.jpg differ diff --git a/static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-problem.jpg b/static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-problem.jpg new file mode 100644 index 00000000..f9e32604 Binary files /dev/null and b/static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-problem.jpg differ diff --git a/static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-solution1.jpg b/static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-solution1.jpg new file mode 100644 index 00000000..34a355c0 Binary files /dev/null and b/static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-solution1.jpg differ diff --git a/static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-solution2.jpg b/static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-solution2.jpg new file mode 100644 index 00000000..1bfd6e8a Binary files /dev/null and b/static/img/usage/general/others/upgrade721-tax-rtmreport/rtm-report-solution2.jpg differ diff --git a/static/img/usage/general/tips-tricks/accounting-linking.png b/static/img/usage/general/tips-tricks/accounting-linking.png new file mode 100644 index 00000000..6f69f654 Binary files /dev/null and b/static/img/usage/general/tips-tricks/accounting-linking.png differ diff --git a/static/img/usage/general/tips-tricks/advance-search.png b/static/img/usage/general/tips-tricks/advance-search.png new file mode 100644 index 00000000..d4d09da0 Binary files /dev/null and b/static/img/usage/general/tips-tricks/advance-search.png differ diff --git a/static/img/usage/general/tips-tricks/alternative-stock-item.png b/static/img/usage/general/tips-tricks/alternative-stock-item.png new file mode 100644 index 00000000..829aabab Binary files /dev/null and b/static/img/usage/general/tips-tricks/alternative-stock-item.png differ diff --git a/static/img/usage/general/tips-tricks/back-order-detail.png b/static/img/usage/general/tips-tricks/back-order-detail.png new file mode 100644 index 00000000..4be24e66 Binary files /dev/null and b/static/img/usage/general/tips-tricks/back-order-detail.png differ diff --git a/static/img/usage/general/tips-tricks/disc.png b/static/img/usage/general/tips-tricks/disc.png new file mode 100644 index 00000000..8eab3727 Binary files /dev/null and b/static/img/usage/general/tips-tricks/disc.png differ diff --git a/static/img/usage/general/tips-tricks/exceed500-2.png b/static/img/usage/general/tips-tricks/exceed500-2.png new file mode 100644 index 00000000..f3ee4aa4 Binary files /dev/null and b/static/img/usage/general/tips-tricks/exceed500-2.png differ diff --git a/static/img/usage/general/tips-tricks/exceed500.png b/static/img/usage/general/tips-tricks/exceed500.png new file mode 100644 index 00000000..7f47b71a Binary files /dev/null and b/static/img/usage/general/tips-tricks/exceed500.png differ diff --git a/static/img/usage/general/tips-tricks/price-tag.png b/static/img/usage/general/tips-tricks/price-tag.png new file mode 100644 index 00000000..12f0c5f0 Binary files /dev/null and b/static/img/usage/general/tips-tricks/price-tag.png differ diff --git a/static/img/usage/general/tips-tricks/purchase-ph-step2.png b/static/img/usage/general/tips-tricks/purchase-ph-step2.png new file mode 100644 index 00000000..6eea9860 Binary files /dev/null and b/static/img/usage/general/tips-tricks/purchase-ph-step2.png differ diff --git a/static/img/usage/general/tips-tricks/purchase-ph-step3.png b/static/img/usage/general/tips-tricks/purchase-ph-step3.png new file mode 100644 index 00000000..d6437b73 Binary files /dev/null and b/static/img/usage/general/tips-tricks/purchase-ph-step3.png differ diff --git a/static/img/usage/general/tips-tricks/purchase-ph-step4.png b/static/img/usage/general/tips-tricks/purchase-ph-step4.png new file mode 100644 index 00000000..e3809da5 Binary files /dev/null and b/static/img/usage/general/tips-tricks/purchase-ph-step4.png differ diff --git a/static/img/usage/general/tips-tricks/purchase-ph-step5.png b/static/img/usage/general/tips-tricks/purchase-ph-step5.png new file mode 100644 index 00000000..0e99f440 Binary files /dev/null and b/static/img/usage/general/tips-tricks/purchase-ph-step5.png differ diff --git a/static/img/usage/general/tips-tricks/sales-ph-step2.png b/static/img/usage/general/tips-tricks/sales-ph-step2.png new file mode 100644 index 00000000..fd12cef3 Binary files /dev/null and b/static/img/usage/general/tips-tricks/sales-ph-step2.png differ diff --git a/static/img/usage/general/tips-tricks/sales-ph-step3.png b/static/img/usage/general/tips-tricks/sales-ph-step3.png new file mode 100644 index 00000000..a9bcf096 Binary files /dev/null and b/static/img/usage/general/tips-tricks/sales-ph-step3.png differ diff --git a/static/img/usage/general/tips-tricks/sales-ph-step4.png b/static/img/usage/general/tips-tricks/sales-ph-step4.png new file mode 100644 index 00000000..6b5ec1c8 Binary files /dev/null and b/static/img/usage/general/tips-tricks/sales-ph-step4.png differ diff --git a/static/img/usage/general/tips-tricks/sales-ph-step5.png b/static/img/usage/general/tips-tricks/sales-ph-step5.png new file mode 100644 index 00000000..0ae969e5 Binary files /dev/null and b/static/img/usage/general/tips-tricks/sales-ph-step5.png differ diff --git a/static/img/usage/general/tips-tricks/show-chart-step2.png b/static/img/usage/general/tips-tricks/show-chart-step2.png new file mode 100644 index 00000000..989904ee Binary files /dev/null and b/static/img/usage/general/tips-tricks/show-chart-step2.png differ diff --git a/static/img/usage/general/tips-tricks/show-chart-step4.png b/static/img/usage/general/tips-tricks/show-chart-step4.png new file mode 100644 index 00000000..2301c79a Binary files /dev/null and b/static/img/usage/general/tips-tricks/show-chart-step4.png differ diff --git a/static/img/usage/general/tips-tricks/stock-bal-step2.png b/static/img/usage/general/tips-tricks/stock-bal-step2.png new file mode 100644 index 00000000..8c3ece5a Binary files /dev/null and b/static/img/usage/general/tips-tricks/stock-bal-step2.png differ diff --git a/static/img/usage/general/tips-tricks/stock-card-qty-step2.png b/static/img/usage/general/tips-tricks/stock-card-qty-step2.png new file mode 100644 index 00000000..4d940c9c Binary files /dev/null and b/static/img/usage/general/tips-tricks/stock-card-qty-step2.png differ diff --git a/static/img/usage/general/tips-tricks/stock-item-price.png b/static/img/usage/general/tips-tricks/stock-item-price.png new file mode 100644 index 00000000..31c74b04 Binary files /dev/null and b/static/img/usage/general/tips-tricks/stock-item-price.png differ diff --git a/static/img/usage/general/tips-tricks/stock-item-search-step1.png b/static/img/usage/general/tips-tricks/stock-item-search-step1.png new file mode 100644 index 00000000..776da900 Binary files /dev/null and b/static/img/usage/general/tips-tricks/stock-item-search-step1.png differ diff --git a/static/img/usage/general/tips-tricks/stock-item-search-step2.png b/static/img/usage/general/tips-tricks/stock-item-search-step2.png new file mode 100644 index 00000000..75b7231f Binary files /dev/null and b/static/img/usage/general/tips-tricks/stock-item-search-step2.png differ diff --git a/static/img/usage/general/tips-tricks/stock-item-search-step3.png b/static/img/usage/general/tips-tricks/stock-item-search-step3.png new file mode 100644 index 00000000..208b4dfb Binary files /dev/null and b/static/img/usage/general/tips-tricks/stock-item-search-step3.png differ diff --git a/static/img/usage/general/tips-tricks/stock-item-search-step4.png b/static/img/usage/general/tips-tricks/stock-item-search-step4.png new file mode 100644 index 00000000..fd56093f Binary files /dev/null and b/static/img/usage/general/tips-tricks/stock-item-search-step4.png differ diff --git a/static/img/usage/general/tips-tricks/stock-item-search.png b/static/img/usage/general/tips-tricks/stock-item-search.png new file mode 100644 index 00000000..1a9312b1 Binary files /dev/null and b/static/img/usage/general/tips-tricks/stock-item-search.png differ diff --git a/static/img/usage/general/view/application-theme-1.png b/static/img/usage/general/view/application-theme-1.png new file mode 100644 index 00000000..8e1e7dc2 Binary files /dev/null and b/static/img/usage/general/view/application-theme-1.png differ diff --git a/static/img/usage/general/view/application-theme-2.png b/static/img/usage/general/view/application-theme-2.png new file mode 100644 index 00000000..5eababa2 Binary files /dev/null and b/static/img/usage/general/view/application-theme-2.png differ diff --git a/static/img/usage/general/view/tabbed-docking-1.png b/static/img/usage/general/view/tabbed-docking-1.png new file mode 100644 index 00000000..b0ed4250 Binary files /dev/null and b/static/img/usage/general/view/tabbed-docking-1.png differ diff --git a/static/img/usage/general/view/tabbed-docking-2.png b/static/img/usage/general/view/tabbed-docking-2.png new file mode 100644 index 00000000..b8733d00 Binary files /dev/null and b/static/img/usage/general/view/tabbed-docking-2.png differ diff --git a/static/img/usage/gst-and-sst/gst/adjustment-for-gst-purchase-deferred-tax-1.jpg b/static/img/usage/gst-and-sst/gst/adjustment-for-gst-purchase-deferred-tax-1.jpg new file mode 100644 index 00000000..b7ca4d87 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/adjustment-for-gst-purchase-deferred-tax-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/adjustment-for-gst-sales-deferred-tax-1.jpg b/static/img/usage/gst-and-sst/gst/adjustment-for-gst-sales-deferred-tax-1.jpg new file mode 100644 index 00000000..62686112 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/adjustment-for-gst-sales-deferred-tax-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/adjustment-to-negative-value-in-gst03-1.png b/static/img/usage/gst-and-sst/gst/adjustment-to-negative-value-in-gst03-1.png new file mode 100644 index 00000000..ae0bfa42 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/adjustment-to-negative-value-in-gst03-1.png differ diff --git a/static/img/usage/gst-and-sst/gst/adjustment-to-negative-value-in-gst03-negative-in-5a5b-1.jpg b/static/img/usage/gst-and-sst/gst/adjustment-to-negative-value-in-gst03-negative-in-5a5b-1.jpg new file mode 100644 index 00000000..91f5cff7 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/adjustment-to-negative-value-in-gst03-negative-in-5a5b-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-1.jpg b/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-1.jpg new file mode 100644 index 00000000..a7730183 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst-listing-1.jpg b/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst-listing-1.jpg new file mode 100644 index 00000000..8dbe7ae1 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst-listing-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst-listing-2.jpg b/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst-listing-2.jpg new file mode 100644 index 00000000..fdfcc7e6 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst-listing-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst03-1.jpg b/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst03-1.jpg new file mode 100644 index 00000000..ace9e552 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/avoid-gst-cost-check-transactions-entered-correct-gst03-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/bad-debt-recovered-where-set-msic-code-1.jpg b/static/img/usage/gst-and-sst/gst/bad-debt-recovered-where-set-msic-code-1.jpg new file mode 100644 index 00000000..dc79c8e6 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/bad-debt-recovered-where-set-msic-code-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-1.jpg b/static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-1.jpg new file mode 100644 index 00000000..73deeba1 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-2.jpg b/static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-2.jpg new file mode 100644 index 00000000..79061538 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-3.jpg b/static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-3.jpg new file mode 100644 index 00000000..26205fe0 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/check-bad-debt-relief-after-final-gst-returns-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-1.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-1.jpg new file mode 100644 index 00000000..ae7aa00d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-10.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-10.jpg new file mode 100644 index 00000000..4baab58d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-10.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-11.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-11.jpg new file mode 100644 index 00000000..c9991bee Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-11.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-2.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-2.jpg new file mode 100644 index 00000000..d63f9874 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-3.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-3.jpg new file mode 100644 index 00000000..41a9d006 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-4.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-4.jpg new file mode 100644 index 00000000..3fa3aaf3 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-5.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-5.jpg new file mode 100644 index 00000000..fd968500 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-5.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-6.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-6.jpg new file mode 100644 index 00000000..324346d2 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-6.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-7.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-7.jpg new file mode 100644 index 00000000..06833a02 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-7.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-8.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-8.jpg new file mode 100644 index 00000000..230b1b55 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-8.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-9.jpg b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-9.jpg new file mode 100644 index 00000000..0bddc7f6 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/cross-check-reports-gst-listings-9.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-1.jpg b/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-1.jpg new file mode 100644 index 00000000..57524614 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-2.jpg b/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-2.jpg new file mode 100644 index 00000000..fe2ccb84 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-3.jpg b/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-3.jpg new file mode 100644 index 00000000..6389a4df Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-4.jpg b/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-4.jpg new file mode 100644 index 00000000..0417700c Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/customer-payment-non-refundable-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/deemed-supply-1.jpg b/static/img/usage/gst-and-sst/gst/deemed-supply-1.jpg new file mode 100644 index 00000000..81eeaa77 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/deemed-supply-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/draft-gst-return-1.jpg b/static/img/usage/gst-and-sst/gst/draft-gst-return-1.jpg new file mode 100644 index 00000000..6063970c Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/draft-gst-return-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/draft-gst-return-2.jpg b/static/img/usage/gst-and-sst/gst/draft-gst-return-2.jpg new file mode 100644 index 00000000..c7a0d669 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/draft-gst-return-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-1.jpg b/static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-1.jpg new file mode 100644 index 00000000..e9f538bc Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-2.jpg b/static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-2.jpg new file mode 100644 index 00000000..8c7b07ca Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-gst-return-1.jpg b/static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-gst-return-1.jpg new file mode 100644 index 00000000..9633c929 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/enter-tax-invoice-if-fiz-lmw-transactions-to-another-party-gst-return-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/final-gst-return-1.jpg b/static/img/usage/gst-and-sst/gst/final-gst-return-1.jpg new file mode 100644 index 00000000..a944bd13 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/final-gst-return-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/final-gst-return-2.jpg b/static/img/usage/gst-and-sst/gst/final-gst-return-2.jpg new file mode 100644 index 00000000..ac838efc Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/final-gst-return-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-1.jpg b/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-1.jpg new file mode 100644 index 00000000..35c41209 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-2.jpg b/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-2.jpg new file mode 100644 index 00000000..2135666b Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-3.jpg b/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-3.jpg new file mode 100644 index 00000000..6a1ca038 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-4.jpg b/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-4.jpg new file mode 100644 index 00000000..8a6a2a2f Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/forwarder-invoice-entry-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gift-document-entry-1.jpg b/static/img/usage/gst-and-sst/gst/gift-document-entry-1.jpg new file mode 100644 index 00000000..fe6e4a89 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gift-document-entry-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gift-document-entry-2.jpg b/static/img/usage/gst-and-sst/gst/gift-document-entry-2.jpg new file mode 100644 index 00000000..458333e1 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gift-document-entry-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gift-document-entry-3.jpg b/static/img/usage/gst-and-sst/gst/gift-document-entry-3.jpg new file mode 100644 index 00000000..bb991f16 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gift-document-entry-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gift-document-entry-4.jpg b/static/img/usage/gst-and-sst/gst/gift-document-entry-4.jpg new file mode 100644 index 00000000..67c2ec75 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gift-document-entry-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gl-ledger-vs-gst03-1.jpg b/static/img/usage/gst-and-sst/gst/gl-ledger-vs-gst03-1.jpg new file mode 100644 index 00000000..69dac94c Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gl-ledger-vs-gst03-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-audit-file-1.jpg b/static/img/usage/gst-and-sst/gst/gst-audit-file-1.jpg new file mode 100644 index 00000000..d79c3c7e Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-audit-file-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-1.jpg b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-1.jpg new file mode 100644 index 00000000..59c4855d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-2.jpg b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-2.jpg new file mode 100644 index 00000000..b71b3e2c Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-3.jpg b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-3.jpg new file mode 100644 index 00000000..c779514a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-4.jpg b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-4.jpg new file mode 100644 index 00000000..170045eb Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-5.jpg b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-5.jpg new file mode 100644 index 00000000..8cfc2bb5 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-audit-file-how-to-export-5.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-1.jpg b/static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-1.jpg new file mode 100644 index 00000000..ac7e0a0d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-2.jpg b/static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-2.jpg new file mode 100644 index 00000000..e2a9c01d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-3.jpg b/static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-3.jpg new file mode 100644 index 00000000..dd4c1e15 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-bad-debt-relief-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-1.jpg b/static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-1.jpg new file mode 100644 index 00000000..1aed3f1a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-2.jpg b/static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-2.jpg new file mode 100644 index 00000000..542a6269 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-3.jpg b/static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-3.jpg new file mode 100644 index 00000000..dee6531b Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-capital-goods-acquired-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-countdown-timer-1.jpg b/static/img/usage/gst-and-sst/gst/gst-countdown-timer-1.jpg new file mode 100644 index 00000000..2a46d427 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-countdown-timer-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-effective-date-1.jpg b/static/img/usage/gst-and-sst/gst/gst-effective-date-1.jpg new file mode 100644 index 00000000..afeb2b80 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-effective-date-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-effective-date-2.jpg b/static/img/usage/gst-and-sst/gst/gst-effective-date-2.jpg new file mode 100644 index 00000000..5b3baa35 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-effective-date-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-1.jpg b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-1.jpg new file mode 100644 index 00000000..4d259ae6 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-2.jpg b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-2.jpg new file mode 100644 index 00000000..7679b8f7 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-3.jpg b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-3.jpg new file mode 100644 index 00000000..f14569ec Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-cancel-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-1.jpg b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-1.jpg new file mode 100644 index 00000000..e6599b9c Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-2.jpg b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-2.jpg new file mode 100644 index 00000000..1c71d81d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-3.jpg b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-3.jpg new file mode 100644 index 00000000..383b5ec6 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-4.jpg b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-4.jpg new file mode 100644 index 00000000..157a13cc Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-effective-date-how-to-deregister-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-1.jpg b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-1.jpg new file mode 100644 index 00000000..998b0108 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-2.jpg b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-2.jpg new file mode 100644 index 00000000..aaeb398c Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-3.jpg b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-3.jpg new file mode 100644 index 00000000..c49ad5ca Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-4.jpg b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-4.jpg new file mode 100644 index 00000000..fc0cf4d6 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-1.jpg b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-1.jpg new file mode 100644 index 00000000..4113e571 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-2.jpg b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-2.jpg new file mode 100644 index 00000000..713ce152 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-3.jpg b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-3.jpg new file mode 100644 index 00000000..748e1ae6 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-item12-data-entry2-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-kastam-account-inquiry-1.jpg b/static/img/usage/gst-and-sst/gst/gst-kastam-account-inquiry-1.jpg new file mode 100644 index 00000000..8743cb38 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-kastam-account-inquiry-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-1.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-1.jpg new file mode 100644 index 00000000..ca3480a6 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-detail-1.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-detail-1.jpg new file mode 100644 index 00000000..95288ff5 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-detail-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-detail-2.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-detail-2.jpg new file mode 100644 index 00000000..f8525bc9 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-detail-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-detail-3.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-detail-3.jpg new file mode 100644 index 00000000..f323b075 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-detail-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-find-panel-helper-1.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-find-panel-helper-1.jpg new file mode 100644 index 00000000..c3073114 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-find-panel-helper-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-find-panel-helper-2.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-find-panel-helper-2.jpg new file mode 100644 index 00000000..2f4cc826 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-find-panel-helper-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-mixed-supply-1.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-mixed-supply-1.jpg new file mode 100644 index 00000000..0e153032 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-mixed-supply-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-mixed-supply-2.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-mixed-supply-2.jpg new file mode 100644 index 00000000..d61517bd Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-mixed-supply-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-parameter-1.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-parameter-1.jpg new file mode 100644 index 00000000..d2c002ed Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-parameter-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-1.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-1.jpg new file mode 100644 index 00000000..02fa0926 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-2.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-2.jpg new file mode 100644 index 00000000..d49a559a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-3.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-3.jpg new file mode 100644 index 00000000..1a1a8226 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-4.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-4.jpg new file mode 100644 index 00000000..3b3a47b2 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-5.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-5.jpg new file mode 100644 index 00000000..312519d2 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-5.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-6.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-6.jpg new file mode 100644 index 00000000..0a7436d7 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-pivot-table-6.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-reports-1.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-reports-1.jpg new file mode 100644 index 00000000..bd18bbf8 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-reports-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-summary-1.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-summary-1.jpg new file mode 100644 index 00000000..3eb40de5 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-summary-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-summary-2.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-summary-2.jpg new file mode 100644 index 00000000..ca2edf9f Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-summary-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-listing-summary-3.jpg b/static/img/usage/gst-and-sst/gst/gst-listing-summary-3.jpg new file mode 100644 index 00000000..4526b589 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-listing-summary-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-maintain-tax-1.jpg b/static/img/usage/gst-and-sst/gst/gst-maintain-tax-1.jpg new file mode 100644 index 00000000..80bac4ae Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-maintain-tax-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-maintain-tax-create-new-tax-1.jpg b/static/img/usage/gst-and-sst/gst/gst-maintain-tax-create-new-tax-1.jpg new file mode 100644 index 00000000..3a1e8c02 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-maintain-tax-create-new-tax-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-maintain-tax-create-new-tax-2.jpg b/static/img/usage/gst-and-sst/gst/gst-maintain-tax-create-new-tax-2.jpg new file mode 100644 index 00000000..b1852215 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-maintain-tax-create-new-tax-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-maintain-tax-use-of-tax-1.jpg b/static/img/usage/gst-and-sst/gst/gst-maintain-tax-use-of-tax-1.jpg new file mode 100644 index 00000000..a534d63d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-maintain-tax-use-of-tax-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-payment-to-rmcd-1.jpg b/static/img/usage/gst-and-sst/gst/gst-payment-to-rmcd-1.jpg new file mode 100644 index 00000000..cf6e549e Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-payment-to-rmcd-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-payment-to-rmcd-2.jpg b/static/img/usage/gst-and-sst/gst/gst-payment-to-rmcd-2.jpg new file mode 100644 index 00000000..7b59e4a3 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-payment-to-rmcd-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-refund-from-rmcd-1.jpg b/static/img/usage/gst-and-sst/gst/gst-refund-from-rmcd-1.jpg new file mode 100644 index 00000000..e5d33ed5 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-refund-from-rmcd-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-refund-from-rmcd-2.jpg b/static/img/usage/gst-and-sst/gst/gst-refund-from-rmcd-2.jpg new file mode 100644 index 00000000..40c27c68 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-refund-from-rmcd-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-listing-mixed-supplies-1.jpg b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-listing-mixed-supplies-1.jpg new file mode 100644 index 00000000..a59d0612 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-listing-mixed-supplies-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-listing-mixed-supplies-2.jpg b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-listing-mixed-supplies-2.jpg new file mode 100644 index 00000000..476d2c2d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-listing-mixed-supplies-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-1.jpg b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-1.jpg new file mode 100644 index 00000000..b154bb6c Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-2.jpg b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-2.jpg new file mode 100644 index 00000000..a2f852d7 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-3.jpg b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-3.jpg new file mode 100644 index 00000000..a2f852d7 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-gst-returns-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-1.jpg b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-1.jpg new file mode 100644 index 00000000..960200e7 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-2.jpg b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-2.jpg new file mode 100644 index 00000000..d9d7d1dc Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-3.jpg b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-3.jpg new file mode 100644 index 00000000..dc8596de Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-4.jpg b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-4.jpg new file mode 100644 index 00000000..9562cdfe Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-set-tax-year-set-tax-year-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-1.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-1.jpg new file mode 100644 index 00000000..0520afc7 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-2.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-2.jpg new file mode 100644 index 00000000..8e9cac94 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-3.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-3.jpg new file mode 100644 index 00000000..91897ba7 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-4.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-4.jpg new file mode 100644 index 00000000..a51b5a23 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-5.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-5.jpg new file mode 100644 index 00000000..8f56c113 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-5.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-6.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-6.jpg new file mode 100644 index 00000000..cfd915ae Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history-6.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-1.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-1.jpg new file mode 100644 index 00000000..56a49217 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-2.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-2.jpg new file mode 100644 index 00000000..f6acd3fd Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-3.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-3.jpg new file mode 100644 index 00000000..7c8c4be1 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-4.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-4.jpg new file mode 100644 index 00000000..d2f29de9 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-5.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-5.jpg new file mode 100644 index 00000000..f5a6d3ae Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-5.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-6.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-6.jpg new file mode 100644 index 00000000..edc18499 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-history2-6.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-special-treatment-modules-required-1.jpg b/static/img/usage/gst-and-sst/gst/gst-special-treatment-modules-required-1.jpg new file mode 100644 index 00000000..4078cb01 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-special-treatment-modules-required-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-1.jpg b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-1.jpg new file mode 100644 index 00000000..3a6f3c42 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-6-percent-claimable-1.jpg b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-6-percent-claimable-1.jpg new file mode 100644 index 00000000..d8906d4b Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-6-percent-claimable-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-cashbook-1.jpg b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-cashbook-1.jpg new file mode 100644 index 00000000..bb49460e Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-cashbook-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-cashbook-2.jpg b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-cashbook-2.jpg new file mode 100644 index 00000000..93ca55cd Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-cashbook-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-purchase-invoice-1.jpg b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-purchase-invoice-1.jpg new file mode 100644 index 00000000..11fb2d25 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-purchase-invoice-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-purchase-invoice-2.jpg b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-purchase-invoice-2.jpg new file mode 100644 index 00000000..20dbc7a2 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-purchase-invoice-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-supplier-invoice-1.jpg b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-supplier-invoice-1.jpg new file mode 100644 index 00000000..d2747e90 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-supplier-invoice-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-supplier-invoice-2.jpg b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-supplier-invoice-2.jpg new file mode 100644 index 00000000..69d18a2f Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-submission-of-final-gst-return-enter-at-supplier-invoice-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatement-ats-1.jpg b/static/img/usage/gst-and-sst/gst/gst-treatement-ats-1.jpg new file mode 100644 index 00000000..96e2619b Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatement-ats-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatement-gst-return-process-1.jpg b/static/img/usage/gst-and-sst/gst/gst-treatement-gst-return-process-1.jpg new file mode 100644 index 00000000..1e519797 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatement-gst-return-process-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatement-purchase-invoice-for-ats-1.jpg b/static/img/usage/gst-and-sst/gst/gst-treatement-purchase-invoice-for-ats-1.jpg new file mode 100644 index 00000000..f061f7ad Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatement-purchase-invoice-for-ats-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-1.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-1.jpg new file mode 100644 index 00000000..8ca2aa01 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-2.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-2.jpg new file mode 100644 index 00000000..c6cbd41a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-3.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-3.jpg new file mode 100644 index 00000000..0bde05f2 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-4.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-4.jpg new file mode 100644 index 00000000..75660cf0 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-progress-billing-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-retention-billing-1.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-retention-billing-1.jpg new file mode 100644 index 00000000..09b7d82e Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-construction-business-retention-billing-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-invoice-first-payment-letter-1.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-invoice-first-payment-letter-1.jpg new file mode 100644 index 00000000..1a19c927 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-invoice-first-payment-letter-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-invoice-first-payment-letter-2.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-invoice-first-payment-letter-2.jpg new file mode 100644 index 00000000..60fd9b84 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-invoice-first-payment-letter-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-maintain-tax-1.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-maintain-tax-1.jpg new file mode 100644 index 00000000..cd4e7885 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-maintain-tax-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-1.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-1.jpg new file mode 100644 index 00000000..a3ae4be2 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-2.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-2.jpg new file mode 100644 index 00000000..014eed66 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-3.jpg b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-3.jpg new file mode 100644 index 00000000..1f37743a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst-treatment-imported-services-payment-made-before-invoice-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-1.jpg b/static/img/usage/gst-and-sst/gst/gst03-1.jpg new file mode 100644 index 00000000..caee03ac Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-know-gst03-has-performed-amendment-1.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-know-gst03-has-performed-amendment-1.jpg new file mode 100644 index 00000000..282be2ba Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-know-gst03-has-performed-amendment-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-know-gst03-has-performed-amendment-2.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-know-gst03-has-performed-amendment-2.jpg new file mode 100644 index 00000000..f8ba4547 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-know-gst03-has-performed-amendment-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-1.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-1.jpg new file mode 100644 index 00000000..1a8e6173 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-10.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-10.jpg new file mode 100644 index 00000000..416ae460 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-10.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-2.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-2.jpg new file mode 100644 index 00000000..5e2dc8e9 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-3.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-3.jpg new file mode 100644 index 00000000..1a719225 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-4.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-4.jpg new file mode 100644 index 00000000..c9e25ef1 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-5.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-5.jpg new file mode 100644 index 00000000..430e6384 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-5.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-6.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-6.jpg new file mode 100644 index 00000000..a9a2796f Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-6.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-7.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-7.jpg new file mode 100644 index 00000000..b0736f8d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-7.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-8.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-8.jpg new file mode 100644 index 00000000..cb49c166 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-8.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-step-9.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-9.jpg new file mode 100644 index 00000000..dd466e19 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-step-9.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-amendment-unlock-gst03-for-amendment-1.jpg b/static/img/usage/gst-and-sst/gst/gst03-amendment-unlock-gst03-for-amendment-1.jpg new file mode 100644 index 00000000..01a811cb Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-amendment-unlock-gst03-for-amendment-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-form-1.jpg b/static/img/usage/gst-and-sst/gst/gst03-form-1.jpg new file mode 100644 index 00000000..20f34860 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-form-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-parameter-1.jpg b/static/img/usage/gst-and-sst/gst/gst03-parameter-1.jpg new file mode 100644 index 00000000..9a1c54fc Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-parameter-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-parameter-2.jpg b/static/img/usage/gst-and-sst/gst/gst03-parameter-2.jpg new file mode 100644 index 00000000..9150290e Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-parameter-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-1.jpg b/static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-1.jpg new file mode 100644 index 00000000..6ddbedc3 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-2.jpg b/static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-2.jpg new file mode 100644 index 00000000..23b9aa6a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-3.jpg b/static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-3.jpg new file mode 100644 index 00000000..d377f666 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/gst03-tap-upload-file-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-gst-taxable-past-documents-1.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-gst-taxable-past-documents-1.jpg new file mode 100644 index 00000000..1ba97eed Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-gst-taxable-past-documents-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-past-documents-1.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-past-documents-1.jpg new file mode 100644 index 00000000..896f33df Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-past-documents-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-past-documents-2.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-past-documents-2.jpg new file mode 100644 index 00000000..7d4e93ef Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-enter-past-documents-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-financial-start-and-system-conversion-1.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-financial-start-and-system-conversion-1.jpg new file mode 100644 index 00000000..84e6081d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-financial-start-and-system-conversion-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-effective-date-1.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-effective-date-1.jpg new file mode 100644 index 00000000..70d109ab Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-effective-date-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-1.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-1.jpg new file mode 100644 index 00000000..fc365de3 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-2.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-2.jpg new file mode 100644 index 00000000..07b31a9f Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-3.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-3.jpg new file mode 100644 index 00000000..6bb2d3ca Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-4.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-4.jpg new file mode 100644 index 00000000..326d3596 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-gst-returns-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-past-documents-gst-taxable-listing-1.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-past-documents-gst-taxable-listing-1.jpg new file mode 100644 index 00000000..473d7863 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-past-documents-gst-taxable-listing-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case1-1.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case1-1.jpg new file mode 100644 index 00000000..d2307df9 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case1-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case1-2.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case1-2.jpg new file mode 100644 index 00000000..afe147ac Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case1-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case2-1.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case2-1.jpg new file mode 100644 index 00000000..1cd023d1 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case2-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case2-2.jpg b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case2-2.jpg new file mode 100644 index 00000000..f03b7e22 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-enter-gst-past-documents-special-case2-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-1.jpg b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-1.jpg new file mode 100644 index 00000000..f9578908 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-2.jpg b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-2.jpg new file mode 100644 index 00000000..d0fb9697 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-3.jpg b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-3.jpg new file mode 100644 index 00000000..70ecebca Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-4.jpg b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-4.jpg new file mode 100644 index 00000000..204b1620 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-5.jpg b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-5.jpg new file mode 100644 index 00000000..54e646a4 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/how-to-exclude-irr-for-the-capital-goods-disposed-off-steps-5.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/new-gst-return-1.jpg b/static/img/usage/gst-and-sst/gst/new-gst-return-1.jpg new file mode 100644 index 00000000..13a1ee1c Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/new-gst-return-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/open-gst-return-1.jpg b/static/img/usage/gst-and-sst/gst/open-gst-return-1.jpg new file mode 100644 index 00000000..5a782cff Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/open-gst-return-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/open-gst-return-2.jpg b/static/img/usage/gst-and-sst/gst/open-gst-return-2.jpg new file mode 100644 index 00000000..e9ef7042 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/open-gst-return-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/open-gst-return-3.jpg b/static/img/usage/gst-and-sst/gst/open-gst-return-3.jpg new file mode 100644 index 00000000..eaa3f76a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/open-gst-return-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/overseas-supplier-invoice-1.jpg b/static/img/usage/gst-and-sst/gst/overseas-supplier-invoice-1.jpg new file mode 100644 index 00000000..a477d4cc Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/overseas-supplier-invoice-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/overview-of-gst-past-documents-1.jpg b/static/img/usage/gst-and-sst/gst/overview-of-gst-past-documents-1.jpg new file mode 100644 index 00000000..ffdaba7e Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/overview-of-gst-past-documents-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/partial-exemption-rules-1.jpg b/static/img/usage/gst-and-sst/gst/partial-exemption-rules-1.jpg new file mode 100644 index 00000000..30743389 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/partial-exemption-rules-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-for-lampiran07-1.jpg b/static/img/usage/gst-and-sst/gst/print-for-lampiran07-1.jpg new file mode 100644 index 00000000..fff35e5a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-for-lampiran07-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-for-lampiran07-2.jpg b/static/img/usage/gst-and-sst/gst/print-for-lampiran07-2.jpg new file mode 100644 index 00000000..7a39d30a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-for-lampiran07-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-1.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-1.jpg new file mode 100644 index 00000000..61a9dd68 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-1.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-1.jpg new file mode 100644 index 00000000..8848fac5 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-2.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-2.jpg new file mode 100644 index 00000000..70aeddb4 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-3.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-3.jpg new file mode 100644 index 00000000..b1ece109 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-analyze-happenings-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-gst03-1.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-gst03-1.jpg new file mode 100644 index 00000000..4f729175 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-gst03-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-maintain-customer-1.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-maintain-customer-1.jpg new file mode 100644 index 00000000..947e3eea Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-maintain-customer-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-1.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-1.jpg new file mode 100644 index 00000000..ac7e0a0d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-2.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-2.jpg new file mode 100644 index 00000000..dd4c1e15 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-note-1.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-note-1.jpg new file mode 100644 index 00000000..e2a9c01d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-process-gst-returns-note-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-relief-unclaimed-letter-1.jpg b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-relief-unclaimed-letter-1.jpg new file mode 100644 index 00000000..468a0e92 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/print-gst-bad-debt-relief-relief-unclaimed-letter-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/process-gst-return-1.jpg b/static/img/usage/gst-and-sst/gst/process-gst-return-1.jpg new file mode 100644 index 00000000..8c195787 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/process-gst-return-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-1.jpg b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-1.jpg new file mode 100644 index 00000000..10100f41 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-margin-scheme-input-1.jpg b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-margin-scheme-input-1.jpg new file mode 100644 index 00000000..df3a7288 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-margin-scheme-input-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-1.jpg b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-1.jpg new file mode 100644 index 00000000..cc1d92c8 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-2.jpg b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-2.jpg new file mode 100644 index 00000000..19842b64 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-3.jpg b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-3.jpg new file mode 100644 index 00000000..7de6f59d Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/record-purchase-of-second-hand-car-value-other-information-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/retention-report-by-project-1.jpg b/static/img/usage/gst-and-sst/gst/retention-report-by-project-1.jpg new file mode 100644 index 00000000..8be33f28 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/retention-report-by-project-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/sales-purchase-deferred-tax-journal-adjustment-1.jpg b/static/img/usage/gst-and-sst/gst/sales-purchase-deferred-tax-journal-adjustment-1.jpg new file mode 100644 index 00000000..4b75acbe Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/sales-purchase-deferred-tax-journal-adjustment-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-customer-1.jpg b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-customer-1.jpg new file mode 100644 index 00000000..b177f5bb Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-customer-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-customer-2.jpg b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-customer-2.jpg new file mode 100644 index 00000000..2592272f Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-customer-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-1.jpg b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-1.jpg new file mode 100644 index 00000000..72ad172f Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-2.jpg b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-2.jpg new file mode 100644 index 00000000..20db739c Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-3.jpg b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-3.jpg new file mode 100644 index 00000000..eeac5128 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-project-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-stock-item-1.jpg b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-stock-item-1.jpg new file mode 100644 index 00000000..cc05b487 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-stock-item-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-supplier-1.jpg b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-supplier-1.jpg new file mode 100644 index 00000000..4dc31a1b Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/setup-master-data-maintain-supplier-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-1.jpg b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-1.jpg new file mode 100644 index 00000000..19603c23 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-2.jpg b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-2.jpg new file mode 100644 index 00000000..e873dfc2 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-data-entry-for-non-deductables-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-it-works-1.jpg b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-it-works-1.jpg new file mode 100644 index 00000000..e42d0c7f Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-it-works-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-to-analyze-1.jpg b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-to-analyze-1.jpg new file mode 100644 index 00000000..d18e47fd Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-to-analyze-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-to-analyze-2.jpg b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-to-analyze-2.jpg new file mode 100644 index 00000000..1e5ec4ee Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/special-gst-treatment-non-deductible-expenditure-how-to-analyze-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/transitional-bad-debt-relief-1.jpg b/static/img/usage/gst-and-sst/gst/transitional-bad-debt-relief-1.jpg new file mode 100644 index 00000000..019a0d5a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/transitional-bad-debt-relief-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-1.jpg b/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-1.jpg new file mode 100644 index 00000000..1432e74a Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-2.jpg b/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-2.jpg new file mode 100644 index 00000000..3f194395 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-2.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-3.jpg b/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-3.jpg new file mode 100644 index 00000000..52e5ae68 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-3.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-4.jpg b/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-4.jpg new file mode 100644 index 00000000..922581c0 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/transitional-final-gst-return-processor-4.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/value-of-material-and-works-by-project-1.jpg b/static/img/usage/gst-and-sst/gst/value-of-material-and-works-by-project-1.jpg new file mode 100644 index 00000000..b0d9e276 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/value-of-material-and-works-by-project-1.jpg differ diff --git a/static/img/usage/gst-and-sst/gst/which-amount-to-report-in-gst03-item16-capital-goods-1.jpg b/static/img/usage/gst-and-sst/gst/which-amount-to-report-in-gst03-item16-capital-goods-1.jpg new file mode 100644 index 00000000..fac41832 Binary files /dev/null and b/static/img/usage/gst-and-sst/gst/which-amount-to-report-in-gst03-item16-capital-goods-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/exempted-goods-1.png b/static/img/usage/gst-and-sst/sst/exempted-goods-1.png new file mode 100644 index 00000000..c2640f15 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/exempted-goods-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/meaning-of-manufacture-1.png b/static/img/usage/gst-and-sst/sst/meaning-of-manufacture-1.png new file mode 100644 index 00000000..51b923d7 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/meaning-of-manufacture-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/meaning-of-manufacture-2.png b/static/img/usage/gst-and-sst/sst/meaning-of-manufacture-2.png new file mode 100644 index 00000000..0b25422f Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/meaning-of-manufacture-2.png differ diff --git a/static/img/usage/gst-and-sst/sst/meaning-of-manufacture-3.png b/static/img/usage/gst-and-sst/sst/meaning-of-manufacture-3.png new file mode 100644 index 00000000..80612365 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/meaning-of-manufacture-3.png differ diff --git a/static/img/usage/gst-and-sst/sst/new-sst-return-1.png b/static/img/usage/gst-and-sst/sst/new-sst-return-1.png new file mode 100644 index 00000000..410bbeda Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/new-sst-return-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/responsibility-of-registered-manufacturer-1.png b/static/img/usage/gst-and-sst/sst/responsibility-of-registered-manufacturer-1.png new file mode 100644 index 00000000..c933bb0e Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/responsibility-of-registered-manufacturer-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sales-tax-mechanism-1.png b/static/img/usage/gst-and-sst/sst/sales-tax-mechanism-1.png new file mode 100644 index 00000000..9cfb3bd1 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sales-tax-mechanism-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-Accounting-basis-taxable-period-1.png b/static/img/usage/gst-and-sst/sst/sst-Accounting-basis-taxable-period-1.png new file mode 100644 index 00000000..0d7052e1 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-Accounting-basis-taxable-period-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-account-for-pending-service-tax-over-12months-1.jpg b/static/img/usage/gst-and-sst/sst/sst-account-for-pending-service-tax-over-12months-1.jpg new file mode 100644 index 00000000..863f6c24 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-account-for-pending-service-tax-over-12months-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-drawback-1.png b/static/img/usage/gst-and-sst/sst/sst-drawback-1.png new file mode 100644 index 00000000..6bed48a5 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-drawback-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-importted-service-how-to-print-sst02a-1.jpg b/static/img/usage/gst-and-sst/sst/sst-importted-service-how-to-print-sst02a-1.jpg new file mode 100644 index 00000000..344cc565 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-importted-service-how-to-print-sst02a-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-importted-service-how-to-print-sst02a-2.jpg b/static/img/usage/gst-and-sst/sst/sst-importted-service-how-to-print-sst02a-2.jpg new file mode 100644 index 00000000..31a09f41 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-importted-service-how-to-print-sst02a-2.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-importted-service-imported-service-tax-1.jpg b/static/img/usage/gst-and-sst/sst/sst-importted-service-imported-service-tax-1.jpg new file mode 100644 index 00000000..6083816c Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-importted-service-imported-service-tax-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-importted-service-imported-service-tax-exempted-1.jpg b/static/img/usage/gst-and-sst/sst/sst-importted-service-imported-service-tax-exempted-1.jpg new file mode 100644 index 00000000..0598d50c Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-importted-service-imported-service-tax-exempted-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-1.png b/static/img/usage/gst-and-sst/sst/sst-introduction-1.png new file mode 100644 index 00000000..410a003f Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-1.png b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-1.png new file mode 100644 index 00000000..253fd9dc Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-2.png b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-2.png new file mode 100644 index 00000000..ead9aa99 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-2.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-3.png b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-3.png new file mode 100644 index 00000000..f9c54c2a Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-3.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-4.png b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-4.png new file mode 100644 index 00000000..1f559163 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-4.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-5.png b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-5.png new file mode 100644 index 00000000..bc6e0af7 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-5.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-6.png b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-6.png new file mode 100644 index 00000000..73f48444 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-6.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-7.png b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-7.png new file mode 100644 index 00000000..3dbdd4ac Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-7.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-8.png b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-8.png new file mode 100644 index 00000000..330044ac Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-2nd-example-of-sst02-8.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-1.png b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-1.png new file mode 100644 index 00000000..91b74ea9 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-2.png b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-2.png new file mode 100644 index 00000000..56fc86dd Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-2.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-3.png b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-3.png new file mode 100644 index 00000000..3886ebd0 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-3.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-4.png b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-4.png new file mode 100644 index 00000000..70318387 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-4.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-5.png b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-5.png new file mode 100644 index 00000000..65711d32 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-example-of-sst02-5.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-sales-1.png b/static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-sales-1.png new file mode 100644 index 00000000..3236ff4a Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-sales-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-service-1.png b/static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-service-1.png new file mode 100644 index 00000000..c2362b5f Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-introduction-taxcode-and-sst02-mapping-service-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-1.jpg b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-1.jpg new file mode 100644 index 00000000..fa5c81e1 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-2.jpg b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-2.jpg new file mode 100644 index 00000000..c6844a05 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-2.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-3.jpg b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-3.jpg new file mode 100644 index 00000000..da030cfc Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-3.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-4.jpg b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-4.jpg new file mode 100644 index 00000000..44e18aa8 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-4.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-5.jpg b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-5.jpg new file mode 100644 index 00000000..dfb1c393 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-journal-entry-adjustment-5.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-penalty-for-late-payment-of-tax-1.png b/static/img/usage/gst-and-sst/sst/sst-penalty-for-late-payment-of-tax-1.png new file mode 100644 index 00000000..2b4f52b2 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-penalty-for-late-payment-of-tax-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-posting-1.png b/static/img/usage/gst-and-sst/sst/sst-posting-1.png new file mode 100644 index 00000000..a04fa074 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-posting-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-posting-2.png b/static/img/usage/gst-and-sst/sst/sst-posting-2.png new file mode 100644 index 00000000..16a4b333 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-posting-2.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-posting-3.png b/static/img/usage/gst-and-sst/sst/sst-posting-3.png new file mode 100644 index 00000000..2930a319 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-posting-3.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-posting-4.png b/static/img/usage/gst-and-sst/sst/sst-posting-4.png new file mode 100644 index 00000000..5820416a Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-posting-4.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-posting-5.png b/static/img/usage/gst-and-sst/sst/sst-posting-5.png new file mode 100644 index 00000000..628a544b Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-posting-5.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-posting-6.png b/static/img/usage/gst-and-sst/sst/sst-posting-6.png new file mode 100644 index 00000000..e5ae3c0f Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-posting-6.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-posting-7.png b/static/img/usage/gst-and-sst/sst/sst-posting-7.png new file mode 100644 index 00000000..031511e4 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-posting-7.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-posting-8.png b/static/img/usage/gst-and-sst/sst/sst-posting-8.png new file mode 100644 index 00000000..86357fc5 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-posting-8.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-1.jpg b/static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-1.jpg new file mode 100644 index 00000000..782daf66 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-2.jpg b/static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-2.jpg new file mode 100644 index 00000000..e7b46f61 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-2.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-3.jpg b/static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-3.jpg new file mode 100644 index 00000000..a9897953 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-quick-setup-for-tariff-code-3.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-1.jpg b/static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-1.jpg new file mode 100644 index 00000000..5d4cb079 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-2.jpg b/static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-2.jpg new file mode 100644 index 00000000..85af5000 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-2.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-3.jpg b/static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-3.jpg new file mode 100644 index 00000000..21ee50e5 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-recovery-from-payment-3.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-return-1.png b/static/img/usage/gst-and-sst/sst/sst-return-1.png new file mode 100644 index 00000000..6504b8c0 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-return-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-return-2.png b/static/img/usage/gst-and-sst/sst/sst-return-2.png new file mode 100644 index 00000000..275c65f0 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-return-2.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-service-tax-mechanism-1.png b/static/img/usage/gst-and-sst/sst/sst-service-tax-mechanism-1.png new file mode 100644 index 00000000..f7d4b7e4 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-service-tax-mechanism-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-special-rule-treatement-in-designated-area-1.png b/static/img/usage/gst-and-sst/sst/sst-special-rule-treatement-in-designated-area-1.png new file mode 100644 index 00000000..71becee8 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-special-rule-treatement-in-designated-area-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-special-rule-treatement-in-special-area-1.png b/static/img/usage/gst-and-sst/sst/sst-special-rule-treatement-in-special-area-1.png new file mode 100644 index 00000000..7d3bce2b Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-special-rule-treatement-in-special-area-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-taxCode-1.jpg b/static/img/usage/gst-and-sst/sst/sst-taxCode-1.jpg new file mode 100644 index 00000000..2cf3c9d1 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-taxCode-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sst-taxable-period-1.png b/static/img/usage/gst-and-sst/sst/sst-taxable-period-1.png new file mode 100644 index 00000000..0e99e485 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-taxable-period-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-taxable-services-1.png b/static/img/usage/gst-and-sst/sst/sst-taxable-services-1.png new file mode 100644 index 00000000..cb9def45 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-taxable-services-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-taxable-services-2.png b/static/img/usage/gst-and-sst/sst/sst-taxable-services-2.png new file mode 100644 index 00000000..bb88b05e Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-taxable-services-2.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-taxable-services-3.png b/static/img/usage/gst-and-sst/sst/sst-taxable-services-3.png new file mode 100644 index 00000000..8ae5585c Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-taxable-services-3.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-taxable-services-4.png b/static/img/usage/gst-and-sst/sst/sst-taxable-services-4.png new file mode 100644 index 00000000..c7c3b2e9 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-taxable-services-4.png differ diff --git a/static/img/usage/gst-and-sst/sst/sst-types-of-registration-list-1.png b/static/img/usage/gst-and-sst/sst/sst-types-of-registration-list-1.png new file mode 100644 index 00000000..b14d1b24 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sst-types-of-registration-list-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/sstfaq-change-the-service-tax-type-to-accrual-basis-1.jpg b/static/img/usage/gst-and-sst/sst/sstfaq-change-the-service-tax-type-to-accrual-basis-1.jpg new file mode 100644 index 00000000..bb08440e Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sstfaq-change-the-service-tax-type-to-accrual-basis-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sstfaq-service-invoice-knockoff-not-appear-in-sst02-1.jpg b/static/img/usage/gst-and-sst/sst/sstfaq-service-invoice-knockoff-not-appear-in-sst02-1.jpg new file mode 100644 index 00000000..1144f110 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sstfaq-service-invoice-knockoff-not-appear-in-sst02-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sstfaq-service-invoice-knockoff-not-appear-in-sst02-2.jpg b/static/img/usage/gst-and-sst/sst/sstfaq-service-invoice-knockoff-not-appear-in-sst02-2.jpg new file mode 100644 index 00000000..1144f110 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sstfaq-service-invoice-knockoff-not-appear-in-sst02-2.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/sstfaq-service-tax-transaction-not-shown-in-sst02-1.jpg b/static/img/usage/gst-and-sst/sst/sstfaq-service-tax-transaction-not-shown-in-sst02-1.jpg new file mode 100644 index 00000000..1ba2e8de Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/sstfaq-service-tax-transaction-not-shown-in-sst02-1.jpg differ diff --git a/static/img/usage/gst-and-sst/sst/taxable-goods-1.png b/static/img/usage/gst-and-sst/sst/taxable-goods-1.png new file mode 100644 index 00000000..8865c060 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/taxable-goods-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/taxable-goods-2.png b/static/img/usage/gst-and-sst/sst/taxable-goods-2.png new file mode 100644 index 00000000..d75a7b7e Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/taxable-goods-2.png differ diff --git a/static/img/usage/gst-and-sst/sst/treatment-in-designated-area-1.png b/static/img/usage/gst-and-sst/sst/treatment-in-designated-area-1.png new file mode 100644 index 00000000..bd37f928 Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/treatment-in-designated-area-1.png differ diff --git a/static/img/usage/gst-and-sst/sst/treatment-in-special-area-1.png b/static/img/usage/gst-and-sst/sst/treatment-in-special-area-1.png new file mode 100644 index 00000000..65ed6b7b Binary files /dev/null and b/static/img/usage/gst-and-sst/sst/treatment-in-special-area-1.png differ diff --git a/static/img/usage/inquiry/account-inquiry-access-control.jpg b/static/img/usage/inquiry/account-inquiry-access-control.jpg new file mode 100644 index 00000000..b00d1115 Binary files /dev/null and b/static/img/usage/inquiry/account-inquiry-access-control.jpg differ diff --git a/static/img/usage/inquiry/account-inquiry.jpg b/static/img/usage/inquiry/account-inquiry.jpg new file mode 100644 index 00000000..ee4805ef Binary files /dev/null and b/static/img/usage/inquiry/account-inquiry.jpg differ diff --git a/static/img/usage/inquiry/cash-flow-forecast-detail-1.jpg b/static/img/usage/inquiry/cash-flow-forecast-detail-1.jpg new file mode 100644 index 00000000..1581df1d Binary files /dev/null and b/static/img/usage/inquiry/cash-flow-forecast-detail-1.jpg differ diff --git a/static/img/usage/inquiry/cash-flow-forecast-detail-2.jpg b/static/img/usage/inquiry/cash-flow-forecast-detail-2.jpg new file mode 100644 index 00000000..a5c5824f Binary files /dev/null and b/static/img/usage/inquiry/cash-flow-forecast-detail-2.jpg differ diff --git a/static/img/usage/inquiry/cash-flow-forecast-graph-1.jpg b/static/img/usage/inquiry/cash-flow-forecast-graph-1.jpg new file mode 100644 index 00000000..1581df1d Binary files /dev/null and b/static/img/usage/inquiry/cash-flow-forecast-graph-1.jpg differ diff --git a/static/img/usage/inquiry/cash-flow-forecast-graph-2.jpg b/static/img/usage/inquiry/cash-flow-forecast-graph-2.jpg new file mode 100644 index 00000000..b8fac846 Binary files /dev/null and b/static/img/usage/inquiry/cash-flow-forecast-graph-2.jpg differ diff --git a/static/img/usage/inquiry/cash-flow-forecast-summary.jpg b/static/img/usage/inquiry/cash-flow-forecast-summary.jpg new file mode 100644 index 00000000..62d79a10 Binary files /dev/null and b/static/img/usage/inquiry/cash-flow-forecast-summary.jpg differ diff --git a/static/img/usage/inquiry/cash-flow-forecast.jpg b/static/img/usage/inquiry/cash-flow-forecast.jpg new file mode 100644 index 00000000..5e63e0ac Binary files /dev/null and b/static/img/usage/inquiry/cash-flow-forecast.jpg differ diff --git a/static/img/usage/inquiry/cash-flow-inquiry.jpg b/static/img/usage/inquiry/cash-flow-inquiry.jpg new file mode 100644 index 00000000..59e9c18c Binary files /dev/null and b/static/img/usage/inquiry/cash-flow-inquiry.jpg differ diff --git a/static/img/usage/inquiry/customer-price-book-reference.jpg b/static/img/usage/inquiry/customer-price-book-reference.jpg new file mode 100644 index 00000000..2ad6a3b0 Binary files /dev/null and b/static/img/usage/inquiry/customer-price-book-reference.jpg differ diff --git a/static/img/usage/inquiry/customer-price-inquiry-1.jpg b/static/img/usage/inquiry/customer-price-inquiry-1.jpg new file mode 100644 index 00000000..897f4a65 Binary files /dev/null and b/static/img/usage/inquiry/customer-price-inquiry-1.jpg differ diff --git a/static/img/usage/inquiry/customer-price-inquiry-2.jpg b/static/img/usage/inquiry/customer-price-inquiry-2.jpg new file mode 100644 index 00000000..2abc6504 Binary files /dev/null and b/static/img/usage/inquiry/customer-price-inquiry-2.jpg differ diff --git a/static/img/usage/inquiry/customer-pricing-inquiry.jpg b/static/img/usage/inquiry/customer-pricing-inquiry.jpg new file mode 100644 index 00000000..2985aab9 Binary files /dev/null and b/static/img/usage/inquiry/customer-pricing-inquiry.jpg differ diff --git a/static/img/usage/inquiry/customer-profit-estimator.jpg b/static/img/usage/inquiry/customer-profit-estimator.jpg new file mode 100644 index 00000000..ec39a7c9 Binary files /dev/null and b/static/img/usage/inquiry/customer-profit-estimator.jpg differ diff --git a/static/img/usage/inquiry/find-what.jpg b/static/img/usage/inquiry/find-what.jpg new file mode 100644 index 00000000..2ccd85a8 Binary files /dev/null and b/static/img/usage/inquiry/find-what.jpg differ diff --git a/static/img/usage/inquiry/general-ledger.jpg b/static/img/usage/inquiry/general-ledger.jpg new file mode 100644 index 00000000..7ded2380 Binary files /dev/null and b/static/img/usage/inquiry/general-ledger.jpg differ diff --git a/static/img/usage/inquiry/purchase-ledger.jpg b/static/img/usage/inquiry/purchase-ledger.jpg new file mode 100644 index 00000000..3db6ecbf Binary files /dev/null and b/static/img/usage/inquiry/purchase-ledger.jpg differ diff --git a/static/img/usage/inquiry/sales-ledger.jpg b/static/img/usage/inquiry/sales-ledger.jpg new file mode 100644 index 00000000..687abf98 Binary files /dev/null and b/static/img/usage/inquiry/sales-ledger.jpg differ diff --git a/static/img/usage/inquiry/sql-power-search.jpg b/static/img/usage/inquiry/sql-power-search.jpg new file mode 100644 index 00000000..23993634 Binary files /dev/null and b/static/img/usage/inquiry/sql-power-search.jpg differ diff --git a/static/img/usage/inquiry/sql-purchase-assistant.jpg b/static/img/usage/inquiry/sql-purchase-assistant.jpg new file mode 100644 index 00000000..3a991d8f Binary files /dev/null and b/static/img/usage/inquiry/sql-purchase-assistant.jpg differ diff --git a/static/img/usage/inquiry/sql-sales-assistant.jpg b/static/img/usage/inquiry/sql-sales-assistant.jpg new file mode 100644 index 00000000..1a84c45d Binary files /dev/null and b/static/img/usage/inquiry/sql-sales-assistant.jpg differ diff --git a/static/img/usage/inquiry/sql-search-example-1.jpg b/static/img/usage/inquiry/sql-search-example-1.jpg new file mode 100644 index 00000000..6fd7824c Binary files /dev/null and b/static/img/usage/inquiry/sql-search-example-1.jpg differ diff --git a/static/img/usage/inquiry/sql-search-example-2.jpg b/static/img/usage/inquiry/sql-search-example-2.jpg new file mode 100644 index 00000000..1ed44854 Binary files /dev/null and b/static/img/usage/inquiry/sql-search-example-2.jpg differ diff --git a/static/img/usage/inquiry/sql-search-example-3.jpg b/static/img/usage/inquiry/sql-search-example-3.jpg new file mode 100644 index 00000000..2eba9a0e Binary files /dev/null and b/static/img/usage/inquiry/sql-search-example-3.jpg differ diff --git a/static/img/usage/inquiry/sql-search-example-4.jpg b/static/img/usage/inquiry/sql-search-example-4.jpg new file mode 100644 index 00000000..7a645baf Binary files /dev/null and b/static/img/usage/inquiry/sql-search-example-4.jpg differ diff --git a/static/img/usage/inquiry/sql-search-example-5.jpg b/static/img/usage/inquiry/sql-search-example-5.jpg new file mode 100644 index 00000000..a20601ab Binary files /dev/null and b/static/img/usage/inquiry/sql-search-example-5.jpg differ diff --git a/static/img/usage/inquiry/supplier-price-book-reference.jpg b/static/img/usage/inquiry/supplier-price-book-reference.jpg new file mode 100644 index 00000000..98621fcb Binary files /dev/null and b/static/img/usage/inquiry/supplier-price-book-reference.jpg differ diff --git a/static/img/usage/inquiry/supplier-price-inquiry-1.jpg b/static/img/usage/inquiry/supplier-price-inquiry-1.jpg new file mode 100644 index 00000000..84d9a6cd Binary files /dev/null and b/static/img/usage/inquiry/supplier-price-inquiry-1.jpg differ diff --git a/static/img/usage/inquiry/supplier-price-inquiry-2.jpg b/static/img/usage/inquiry/supplier-price-inquiry-2.jpg new file mode 100644 index 00000000..d24fd4ee Binary files /dev/null and b/static/img/usage/inquiry/supplier-price-inquiry-2.jpg differ diff --git a/static/img/usage/inquiry/supplier-pricing-inquiry.jpg b/static/img/usage/inquiry/supplier-pricing-inquiry.jpg new file mode 100644 index 00000000..b595ae60 Binary files /dev/null and b/static/img/usage/inquiry/supplier-pricing-inquiry.jpg differ diff --git a/static/img/usage/inquiry/supplier-profit-estimator.jpg b/static/img/usage/inquiry/supplier-profit-estimator.jpg new file mode 100644 index 00000000..d40a3fef Binary files /dev/null and b/static/img/usage/inquiry/supplier-profit-estimator.jpg differ diff --git a/static/img/usage/inquiry/where-1.jpg b/static/img/usage/inquiry/where-1.jpg new file mode 100644 index 00000000..da8a5bab Binary files /dev/null and b/static/img/usage/inquiry/where-1.jpg differ diff --git a/static/img/usage/inquiry/where-2.jpg b/static/img/usage/inquiry/where-2.jpg new file mode 100644 index 00000000..c42385d0 Binary files /dev/null and b/static/img/usage/inquiry/where-2.jpg differ diff --git a/static/img/usage/inquiry/where-3.jpg b/static/img/usage/inquiry/where-3.jpg new file mode 100644 index 00000000..7b4427d6 Binary files /dev/null and b/static/img/usage/inquiry/where-3.jpg differ diff --git a/static/img/getting-started/user-guide/20.png b/static/img/usage/master-data/advance-credit-control.png similarity index 100% rename from static/img/getting-started/user-guide/20.png rename to static/img/usage/master-data/advance-credit-control.png diff --git a/static/img/usage/master-data/maintain-agent.png b/static/img/usage/master-data/maintain-agent.png new file mode 100644 index 00000000..e7fcd6be Binary files /dev/null and b/static/img/usage/master-data/maintain-agent.png differ diff --git a/static/img/getting-started/user-guide/17.png b/static/img/usage/master-data/maintain-customer-1.png similarity index 100% rename from static/img/getting-started/user-guide/17.png rename to static/img/usage/master-data/maintain-customer-1.png diff --git a/static/img/getting-started/user-guide/18.png b/static/img/usage/master-data/maintain-customer-2.png similarity index 100% rename from static/img/getting-started/user-guide/18.png rename to static/img/usage/master-data/maintain-customer-2.png diff --git a/static/img/getting-started/user-guide/24.png b/static/img/usage/master-data/maintain-stock-grp.png similarity index 100% rename from static/img/getting-started/user-guide/24.png rename to static/img/usage/master-data/maintain-stock-grp.png diff --git a/static/img/getting-started/user-guide/26.png b/static/img/usage/master-data/maintain-stock-item-scenario.png similarity index 100% rename from static/img/getting-started/user-guide/26.png rename to static/img/usage/master-data/maintain-stock-item-scenario.png diff --git a/static/img/getting-started/user-guide/25.png b/static/img/usage/master-data/maintain-stock-item.png similarity index 100% rename from static/img/getting-started/user-guide/25.png rename to static/img/usage/master-data/maintain-stock-item.png diff --git a/static/img/getting-started/user-guide/23.png b/static/img/usage/master-data/maintain-supplier.png similarity index 100% rename from static/img/getting-started/user-guide/23.png rename to static/img/usage/master-data/maintain-supplier.png diff --git a/static/img/usage/master-data/new-account-code.png b/static/img/usage/master-data/new-account-code.png new file mode 100644 index 00000000..bba609d1 Binary files /dev/null and b/static/img/usage/master-data/new-account-code.png differ diff --git a/static/img/usage/master-data/special-acc-type.png b/static/img/usage/master-data/special-acc-type.png new file mode 100644 index 00000000..07382939 Binary files /dev/null and b/static/img/usage/master-data/special-acc-type.png differ diff --git a/static/img/usage/master-data/sub-account.png b/static/img/usage/master-data/sub-account.png new file mode 100644 index 00000000..1b30f0b7 Binary files /dev/null and b/static/img/usage/master-data/sub-account.png differ diff --git a/static/img/getting-started/user-guide/21.png b/static/img/usage/master-data/tax-1.png similarity index 100% rename from static/img/getting-started/user-guide/21.png rename to static/img/usage/master-data/tax-1.png diff --git a/static/img/getting-started/user-guide/22.png b/static/img/usage/master-data/tax-2.png similarity index 100% rename from static/img/getting-started/user-guide/22.png rename to static/img/usage/master-data/tax-2.png diff --git a/static/img/myinvois/einvoice-request/batch-refresh-status-progress.png b/static/img/usage/myinvois/einvoice-request/batch-refresh-status-progress.png similarity index 100% rename from static/img/myinvois/einvoice-request/batch-refresh-status-progress.png rename to static/img/usage/myinvois/einvoice-request/batch-refresh-status-progress.png diff --git a/static/img/myinvois/einvoice-request/batch-refresh-status.png b/static/img/usage/myinvois/einvoice-request/batch-refresh-status.png similarity index 100% rename from static/img/myinvois/einvoice-request/batch-refresh-status.png rename to static/img/usage/myinvois/einvoice-request/batch-refresh-status.png diff --git a/static/img/myinvois/einvoice-request/batch-submit-refresh-status.png b/static/img/usage/myinvois/einvoice-request/batch-submit-refresh-status.png similarity index 100% rename from static/img/myinvois/einvoice-request/batch-submit-refresh-status.png rename to static/img/usage/myinvois/einvoice-request/batch-submit-refresh-status.png diff --git a/static/img/myinvois/einvoice-request/batch-submit-valid.png b/static/img/usage/myinvois/einvoice-request/batch-submit-valid.png similarity index 100% rename from static/img/myinvois/einvoice-request/batch-submit-valid.png rename to static/img/usage/myinvois/einvoice-request/batch-submit-valid.png diff --git a/static/img/myinvois/einvoice-request/batch-submit.png b/static/img/usage/myinvois/einvoice-request/batch-submit.png similarity index 100% rename from static/img/myinvois/einvoice-request/batch-submit.png rename to static/img/usage/myinvois/einvoice-request/batch-submit.png diff --git a/static/img/myinvois/einvoice-request/cancel-request.png b/static/img/usage/myinvois/einvoice-request/cancel-request.png similarity index 100% rename from static/img/myinvois/einvoice-request/cancel-request.png rename to static/img/usage/myinvois/einvoice-request/cancel-request.png diff --git a/static/img/myinvois/einvoice-request/create-request.png b/static/img/usage/myinvois/einvoice-request/create-request.png similarity index 100% rename from static/img/myinvois/einvoice-request/create-request.png rename to static/img/usage/myinvois/einvoice-request/create-request.png diff --git a/static/img/myinvois/einvoice-request/eivrequest-form-pending.png b/static/img/usage/myinvois/einvoice-request/eivrequest-form-pending.png similarity index 100% rename from static/img/myinvois/einvoice-request/eivrequest-form-pending.png rename to static/img/usage/myinvois/einvoice-request/eivrequest-form-pending.png diff --git a/static/img/myinvois/einvoice-request/eivrequest-form-valid.png b/static/img/usage/myinvois/einvoice-request/eivrequest-form-valid.png similarity index 100% rename from static/img/myinvois/einvoice-request/eivrequest-form-valid.png rename to static/img/usage/myinvois/einvoice-request/eivrequest-form-valid.png diff --git a/static/img/myinvois/einvoice-request/filled-hourglass.png b/static/img/usage/myinvois/einvoice-request/filled-hourglass.png similarity index 100% rename from static/img/myinvois/einvoice-request/filled-hourglass.png rename to static/img/usage/myinvois/einvoice-request/filled-hourglass.png diff --git a/static/img/myinvois/einvoice-request/hourglass.png b/static/img/usage/myinvois/einvoice-request/hourglass.png similarity index 100% rename from static/img/myinvois/einvoice-request/hourglass.png rename to static/img/usage/myinvois/einvoice-request/hourglass.png diff --git a/static/img/myinvois/einvoice-request/refresh-status-valid.png b/static/img/usage/myinvois/einvoice-request/refresh-status-valid.png similarity index 100% rename from static/img/myinvois/einvoice-request/refresh-status-valid.png rename to static/img/usage/myinvois/einvoice-request/refresh-status-valid.png diff --git a/static/img/myinvois/einvoice-request/refresh-status.png b/static/img/usage/myinvois/einvoice-request/refresh-status.png similarity index 100% rename from static/img/myinvois/einvoice-request/refresh-status.png rename to static/img/usage/myinvois/einvoice-request/refresh-status.png diff --git a/static/img/myinvois/einvoice-request/report-list.png b/static/img/usage/myinvois/einvoice-request/report-list.png similarity index 100% rename from static/img/myinvois/einvoice-request/report-list.png rename to static/img/usage/myinvois/einvoice-request/report-list.png diff --git a/static/img/myinvois/einvoice/batch-refresh-status.png b/static/img/usage/myinvois/einvoice/batch-refresh-status.png similarity index 100% rename from static/img/myinvois/einvoice/batch-refresh-status.png rename to static/img/usage/myinvois/einvoice/batch-refresh-status.png diff --git a/static/img/myinvois/einvoice/batch-submission-button.png b/static/img/usage/myinvois/einvoice/batch-submission-button.png similarity index 100% rename from static/img/myinvois/einvoice/batch-submission-button.png rename to static/img/usage/myinvois/einvoice/batch-submission-button.png diff --git a/static/img/myinvois/einvoice/batch-submission-filter.png b/static/img/usage/myinvois/einvoice/batch-submission-filter.png similarity index 100% rename from static/img/myinvois/einvoice/batch-submission-filter.png rename to static/img/usage/myinvois/einvoice/batch-submission-filter.png diff --git a/static/img/myinvois/einvoice/batch-submission-refresh.png b/static/img/usage/myinvois/einvoice/batch-submission-refresh.png similarity index 100% rename from static/img/myinvois/einvoice/batch-submission-refresh.png rename to static/img/usage/myinvois/einvoice/batch-submission-refresh.png diff --git a/static/img/myinvois/einvoice/batch-submission-status.png b/static/img/usage/myinvois/einvoice/batch-submission-status.png similarity index 100% rename from static/img/myinvois/einvoice/batch-submission-status.png rename to static/img/usage/myinvois/einvoice/batch-submission-status.png diff --git a/static/img/myinvois/einvoice/cash-book-company-name-lookup.png b/static/img/usage/myinvois/einvoice/cash-book-company-name-lookup.png similarity index 100% rename from static/img/myinvois/einvoice/cash-book-company-name-lookup.png rename to static/img/usage/myinvois/einvoice/cash-book-company-name-lookup.png diff --git a/static/img/myinvois/einvoice/cash-book-company-name.png b/static/img/usage/myinvois/einvoice/cash-book-company-name.png similarity index 100% rename from static/img/myinvois/einvoice/cash-book-company-name.png rename to static/img/usage/myinvois/einvoice/cash-book-company-name.png diff --git a/static/img/myinvois/einvoice/cash-book-mandatory-fields-filled.png b/static/img/usage/myinvois/einvoice/cash-book-mandatory-fields-filled.png similarity index 100% rename from static/img/myinvois/einvoice/cash-book-mandatory-fields-filled.png rename to static/img/usage/myinvois/einvoice/cash-book-mandatory-fields-filled.png diff --git a/static/img/myinvois/einvoice/cash-book-mandatory-fields.png b/static/img/usage/myinvois/einvoice/cash-book-mandatory-fields.png similarity index 100% rename from static/img/myinvois/einvoice/cash-book-mandatory-fields.png rename to static/img/usage/myinvois/einvoice/cash-book-mandatory-fields.png diff --git a/static/img/myinvois/einvoice/cash-book-more.png b/static/img/usage/myinvois/einvoice/cash-book-more.png similarity index 100% rename from static/img/myinvois/einvoice/cash-book-more.png rename to static/img/usage/myinvois/einvoice/cash-book-more.png diff --git a/static/img/myinvois/einvoice/consolidate-button.png b/static/img/usage/myinvois/einvoice/consolidate-button.png similarity index 100% rename from static/img/myinvois/einvoice/consolidate-button.png rename to static/img/usage/myinvois/einvoice/consolidate-button.png diff --git a/static/img/myinvois/einvoice/consolidate-filter.png b/static/img/usage/myinvois/einvoice/consolidate-filter.png similarity index 100% rename from static/img/myinvois/einvoice/consolidate-filter.png rename to static/img/usage/myinvois/einvoice/consolidate-filter.png diff --git a/static/img/myinvois/einvoice/consolidate-review.png b/static/img/usage/myinvois/einvoice/consolidate-review.png similarity index 100% rename from static/img/myinvois/einvoice/consolidate-review.png rename to static/img/usage/myinvois/einvoice/consolidate-review.png diff --git a/static/img/myinvois/einvoice/consolidate-success.png b/static/img/usage/myinvois/einvoice/consolidate-success.png similarity index 100% rename from static/img/myinvois/einvoice/consolidate-success.png rename to static/img/usage/myinvois/einvoice/consolidate-success.png diff --git a/static/img/myinvois/einvoice/myinvois-trans-cancel.png b/static/img/usage/myinvois/einvoice/myinvois-trans-cancel.png similarity index 100% rename from static/img/myinvois/einvoice/myinvois-trans-cancel.png rename to static/img/usage/myinvois/einvoice/myinvois-trans-cancel.png diff --git a/static/img/myinvois/einvoice/myinvois-trans-location.png b/static/img/usage/myinvois/einvoice/myinvois-trans-location.png similarity index 100% rename from static/img/myinvois/einvoice/myinvois-trans-location.png rename to static/img/usage/myinvois/einvoice/myinvois-trans-location.png diff --git a/static/img/myinvois/einvoice/myinvois-trans-overview.png b/static/img/usage/myinvois/einvoice/myinvois-trans-overview.png similarity index 100% rename from static/img/myinvois/einvoice/myinvois-trans-overview.png rename to static/img/usage/myinvois/einvoice/myinvois-trans-overview.png diff --git a/static/img/myinvois/einvoice/myinvois-trans-print.png b/static/img/usage/myinvois/einvoice/myinvois-trans-print.png similarity index 100% rename from static/img/myinvois/einvoice/myinvois-trans-print.png rename to static/img/usage/myinvois/einvoice/myinvois-trans-print.png diff --git a/static/img/myinvois/einvoice/myinvois-trans-refresh.png b/static/img/usage/myinvois/einvoice/myinvois-trans-refresh.png similarity index 100% rename from static/img/myinvois/einvoice/myinvois-trans-refresh.png rename to static/img/usage/myinvois/einvoice/myinvois-trans-refresh.png diff --git a/static/img/myinvois/einvoice/myinvois-trans-reject.png b/static/img/usage/myinvois/einvoice/myinvois-trans-reject.png similarity index 100% rename from static/img/myinvois/einvoice/myinvois-trans-reject.png rename to static/img/usage/myinvois/einvoice/myinvois-trans-reject.png diff --git a/static/img/myinvois/einvoice/myinvois-trans-resync.png b/static/img/usage/myinvois/einvoice/myinvois-trans-resync.png similarity index 100% rename from static/img/myinvois/einvoice/myinvois-trans-resync.png rename to static/img/usage/myinvois/einvoice/myinvois-trans-resync.png diff --git a/static/img/myinvois/einvoice/myinvois-trans-state.png b/static/img/usage/myinvois/einvoice/myinvois-trans-state.png similarity index 100% rename from static/img/myinvois/einvoice/myinvois-trans-state.png rename to static/img/usage/myinvois/einvoice/myinvois-trans-state.png diff --git a/static/img/myinvois/einvoice/myinvois-trans-sync.png b/static/img/usage/myinvois/einvoice/myinvois-trans-sync.png similarity index 100% rename from static/img/myinvois/einvoice/myinvois-trans-sync.png rename to static/img/usage/myinvois/einvoice/myinvois-trans-sync.png diff --git a/static/img/myinvois/einvoice/payment-voucher-fromdoc.png b/static/img/usage/myinvois/einvoice/payment-voucher-fromdoc.png similarity index 100% rename from static/img/myinvois/einvoice/payment-voucher-fromdoc.png rename to static/img/usage/myinvois/einvoice/payment-voucher-fromdoc.png diff --git a/static/img/myinvois/einvoice/payment-voucher-submission-e-invoice-refund.png b/static/img/usage/myinvois/einvoice/payment-voucher-submission-e-invoice-refund.png similarity index 100% rename from static/img/myinvois/einvoice/payment-voucher-submission-e-invoice-refund.png rename to static/img/usage/myinvois/einvoice/payment-voucher-submission-e-invoice-refund.png diff --git a/static/img/myinvois/einvoice/payment-voucher-submission-self-billed.png b/static/img/usage/myinvois/einvoice/payment-voucher-submission-self-billed.png similarity index 100% rename from static/img/myinvois/einvoice/payment-voucher-submission-self-billed.png rename to static/img/usage/myinvois/einvoice/payment-voucher-submission-self-billed.png diff --git a/static/img/myinvois/einvoice/purchase-debit-note-fromdoc.png b/static/img/usage/myinvois/einvoice/purchase-debit-note-fromdoc.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-debit-note-fromdoc.png rename to static/img/usage/myinvois/einvoice/purchase-debit-note-fromdoc.png diff --git a/static/img/myinvois/einvoice/purchase-debit-note-more.png b/static/img/usage/myinvois/einvoice/purchase-debit-note-more.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-debit-note-more.png rename to static/img/usage/myinvois/einvoice/purchase-debit-note-more.png diff --git a/static/img/myinvois/einvoice/purchase-debit-note-supplier.png b/static/img/usage/myinvois/einvoice/purchase-debit-note-supplier.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-debit-note-supplier.png rename to static/img/usage/myinvois/einvoice/purchase-debit-note-supplier.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-button.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-button.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-button.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-button.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-error.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-error.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-error.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-error.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-form-apply.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-apply.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-form-apply.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-apply.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-form-daterange.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-daterange.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-form-daterange.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-daterange.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-form-select-supplier.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-select-supplier.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-form-select-supplier.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-select-supplier.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-form-select-tax.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-select-tax.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-form-select-tax.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form-select-tax.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-form.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-form.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-form.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-success.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-success.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-success.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-success.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-supplier-form.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-supplier-form.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-supplier-form.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-supplier-form.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-sync.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-sync.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-sync.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-sync.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import-update-supplier.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-update-supplier.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import-update-supplier.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import-update-supplier.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-batch-import.png b/static/img/usage/myinvois/einvoice/purchase-invoice-batch-import.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-batch-import.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-batch-import.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-download-pdf-button.png b/static/img/usage/myinvois/einvoice/purchase-invoice-download-pdf-button.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-download-pdf-button.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-download-pdf-button.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-download-pdf.png b/static/img/usage/myinvois/einvoice/purchase-invoice-download-pdf.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-download-pdf.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-download-pdf.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-linking-form.png b/static/img/usage/myinvois/einvoice/purchase-invoice-linking-form.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-linking-form.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-linking-form.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-linking.png b/static/img/usage/myinvois/einvoice/purchase-invoice-linking.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-linking.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-linking.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-more.png b/static/img/usage/myinvois/einvoice/purchase-invoice-more.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-more.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-more.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-reject-button.png b/static/img/usage/myinvois/einvoice/purchase-invoice-reject-button.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-reject-button.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-reject-button.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-reject-reason.png b/static/img/usage/myinvois/einvoice/purchase-invoice-reject-reason.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-reject-reason.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-reject-reason.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-submission-type.png b/static/img/usage/myinvois/einvoice/purchase-invoice-submission-type.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-submission-type.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-submission-type.png diff --git a/static/img/myinvois/einvoice/purchase-invoice-supplier.png b/static/img/usage/myinvois/einvoice/purchase-invoice-supplier.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-invoice-supplier.png rename to static/img/usage/myinvois/einvoice/purchase-invoice-supplier.png diff --git a/static/img/myinvois/einvoice/purchase-returned-fromdoc.png b/static/img/usage/myinvois/einvoice/purchase-returned-fromdoc.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-returned-fromdoc.png rename to static/img/usage/myinvois/einvoice/purchase-returned-fromdoc.png diff --git a/static/img/myinvois/einvoice/purchase-returned-more.png b/static/img/usage/myinvois/einvoice/purchase-returned-more.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-returned-more.png rename to static/img/usage/myinvois/einvoice/purchase-returned-more.png diff --git a/static/img/myinvois/einvoice/purchase-returned-supplier.png b/static/img/usage/myinvois/einvoice/purchase-returned-supplier.png similarity index 100% rename from static/img/myinvois/einvoice/purchase-returned-supplier.png rename to static/img/usage/myinvois/einvoice/purchase-returned-supplier.png diff --git a/static/img/myinvois/einvoice/receipt-voucher-fromdoc.png b/static/img/usage/myinvois/einvoice/receipt-voucher-fromdoc.png similarity index 100% rename from static/img/myinvois/einvoice/receipt-voucher-fromdoc.png rename to static/img/usage/myinvois/einvoice/receipt-voucher-fromdoc.png diff --git a/static/img/myinvois/einvoice/receipt-voucher-submission-e-invoice.png b/static/img/usage/myinvois/einvoice/receipt-voucher-submission-e-invoice.png similarity index 100% rename from static/img/myinvois/einvoice/receipt-voucher-submission-e-invoice.png rename to static/img/usage/myinvois/einvoice/receipt-voucher-submission-e-invoice.png diff --git a/static/img/myinvois/einvoice/receipt-voucher-submission-self-billed-refund.png b/static/img/usage/myinvois/einvoice/receipt-voucher-submission-self-billed-refund.png similarity index 100% rename from static/img/myinvois/einvoice/receipt-voucher-submission-self-billed-refund.png rename to static/img/usage/myinvois/einvoice/receipt-voucher-submission-self-billed-refund.png diff --git a/static/img/myinvois/einvoice/sales-credit-note-customer.png b/static/img/usage/myinvois/einvoice/sales-credit-note-customer.png similarity index 100% rename from static/img/myinvois/einvoice/sales-credit-note-customer.png rename to static/img/usage/myinvois/einvoice/sales-credit-note-customer.png diff --git a/static/img/myinvois/einvoice/sales-credit-note-fromdoc.png b/static/img/usage/myinvois/einvoice/sales-credit-note-fromdoc.png similarity index 100% rename from static/img/myinvois/einvoice/sales-credit-note-fromdoc.png rename to static/img/usage/myinvois/einvoice/sales-credit-note-fromdoc.png diff --git a/static/img/myinvois/einvoice/sales-credit-note-more.png b/static/img/usage/myinvois/einvoice/sales-credit-note-more.png similarity index 100% rename from static/img/myinvois/einvoice/sales-credit-note-more.png rename to static/img/usage/myinvois/einvoice/sales-credit-note-more.png diff --git a/static/img/myinvois/einvoice/sales-debit-note-customer.png b/static/img/usage/myinvois/einvoice/sales-debit-note-customer.png similarity index 100% rename from static/img/myinvois/einvoice/sales-debit-note-customer.png rename to static/img/usage/myinvois/einvoice/sales-debit-note-customer.png diff --git a/static/img/myinvois/einvoice/sales-debit-note-fromdoc.png b/static/img/usage/myinvois/einvoice/sales-debit-note-fromdoc.png similarity index 100% rename from static/img/myinvois/einvoice/sales-debit-note-fromdoc.png rename to static/img/usage/myinvois/einvoice/sales-debit-note-fromdoc.png diff --git a/static/img/myinvois/einvoice/sales-debit-note-more.png b/static/img/usage/myinvois/einvoice/sales-debit-note-more.png similarity index 100% rename from static/img/myinvois/einvoice/sales-debit-note-more.png rename to static/img/usage/myinvois/einvoice/sales-debit-note-more.png diff --git a/static/img/myinvois/einvoice/sales-invoice-cancel-button.png b/static/img/usage/myinvois/einvoice/sales-invoice-cancel-button.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-cancel-button.png rename to static/img/usage/myinvois/einvoice/sales-invoice-cancel-button.png diff --git a/static/img/myinvois/einvoice/sales-invoice-cancel-reason.png b/static/img/usage/myinvois/einvoice/sales-invoice-cancel-reason.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-cancel-reason.png rename to static/img/usage/myinvois/einvoice/sales-invoice-cancel-reason.png diff --git a/static/img/myinvois/einvoice/sales-invoice-cancelled.png b/static/img/usage/myinvois/einvoice/sales-invoice-cancelled.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-cancelled.png rename to static/img/usage/myinvois/einvoice/sales-invoice-cancelled.png diff --git a/static/img/myinvois/einvoice/sales-invoice-class.png b/static/img/usage/myinvois/einvoice/sales-invoice-class.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-class.png rename to static/img/usage/myinvois/einvoice/sales-invoice-class.png diff --git a/static/img/myinvois/einvoice/sales-invoice-customer.png b/static/img/usage/myinvois/einvoice/sales-invoice-customer.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-customer.png rename to static/img/usage/myinvois/einvoice/sales-invoice-customer.png diff --git a/static/img/myinvois/einvoice/sales-invoice-log-button.png b/static/img/usage/myinvois/einvoice/sales-invoice-log-button.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-log-button.png rename to static/img/usage/myinvois/einvoice/sales-invoice-log-button.png diff --git a/static/img/myinvois/einvoice/sales-invoice-log.png b/static/img/usage/myinvois/einvoice/sales-invoice-log.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-log.png rename to static/img/usage/myinvois/einvoice/sales-invoice-log.png diff --git a/static/img/myinvois/einvoice/sales-invoice-more.png b/static/img/usage/myinvois/einvoice/sales-invoice-more.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-more.png rename to static/img/usage/myinvois/einvoice/sales-invoice-more.png diff --git a/static/img/myinvois/einvoice/sales-invoice-preview.png b/static/img/usage/myinvois/einvoice/sales-invoice-preview.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-preview.png rename to static/img/usage/myinvois/einvoice/sales-invoice-preview.png diff --git a/static/img/myinvois/einvoice/sales-invoice-refresh-status-button.png b/static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-button.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-refresh-status-button.png rename to static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-button.png diff --git a/static/img/myinvois/einvoice/sales-invoice-refresh-status-invalid.png b/static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-invalid.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-refresh-status-invalid.png rename to static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-invalid.png diff --git a/static/img/myinvois/einvoice/sales-invoice-refresh-status-valid.png b/static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-valid.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-refresh-status-valid.png rename to static/img/usage/myinvois/einvoice/sales-invoice-refresh-status-valid.png diff --git a/static/img/myinvois/einvoice/sales-invoice-share-pdf-button.png b/static/img/usage/myinvois/einvoice/sales-invoice-share-pdf-button.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-share-pdf-button.png rename to static/img/usage/myinvois/einvoice/sales-invoice-share-pdf-button.png diff --git a/static/img/myinvois/einvoice/sales-invoice-share-pdf-select-report.png b/static/img/usage/myinvois/einvoice/sales-invoice-share-pdf-select-report.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-share-pdf-select-report.png rename to static/img/usage/myinvois/einvoice/sales-invoice-share-pdf-select-report.png diff --git a/static/img/myinvois/einvoice/sales-invoice-share-pdf-success.png b/static/img/usage/myinvois/einvoice/sales-invoice-share-pdf-success.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-share-pdf-success.png rename to static/img/usage/myinvois/einvoice/sales-invoice-share-pdf-success.png diff --git a/static/img/myinvois/einvoice/sales-invoice-submission-type.png b/static/img/usage/myinvois/einvoice/sales-invoice-submission-type.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-submission-type.png rename to static/img/usage/myinvois/einvoice/sales-invoice-submission-type.png diff --git a/static/img/myinvois/einvoice/sales-invoice-submit-eiv.png b/static/img/usage/myinvois/einvoice/sales-invoice-submit-eiv.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-submit-eiv.png rename to static/img/usage/myinvois/einvoice/sales-invoice-submit-eiv.png diff --git a/static/img/myinvois/einvoice/sales-invoice-valid.png b/static/img/usage/myinvois/einvoice/sales-invoice-valid.png similarity index 100% rename from static/img/myinvois/einvoice/sales-invoice-valid.png rename to static/img/usage/myinvois/einvoice/sales-invoice-valid.png diff --git a/static/img/myinvois/einvoice/submitting-status-browse.png b/static/img/usage/myinvois/einvoice/submitting-status-browse.png similarity index 100% rename from static/img/myinvois/einvoice/submitting-status-browse.png rename to static/img/usage/myinvois/einvoice/submitting-status-browse.png diff --git a/static/img/myinvois/einvoice/submitting-status-detail.png b/static/img/usage/myinvois/einvoice/submitting-status-detail.png similarity index 100% rename from static/img/myinvois/einvoice/submitting-status-detail.png rename to static/img/usage/myinvois/einvoice/submitting-status-detail.png diff --git a/static/img/myinvois/einvoice/submitting-status-resolving-error.png b/static/img/usage/myinvois/einvoice/submitting-status-resolving-error.png similarity index 100% rename from static/img/myinvois/einvoice/submitting-status-resolving-error.png rename to static/img/usage/myinvois/einvoice/submitting-status-resolving-error.png diff --git a/static/img/myinvois/einvoice/submitting-status-resolving.png b/static/img/usage/myinvois/einvoice/submitting-status-resolving.png similarity index 100% rename from static/img/myinvois/einvoice/submitting-status-resolving.png rename to static/img/usage/myinvois/einvoice/submitting-status-resolving.png diff --git a/static/img/myinvois/einvoice/taxpayers-qr-form-info.png b/static/img/usage/myinvois/einvoice/taxpayers-qr-form-info.png similarity index 100% rename from static/img/myinvois/einvoice/taxpayers-qr-form-info.png rename to static/img/usage/myinvois/einvoice/taxpayers-qr-form-info.png diff --git a/static/img/myinvois/einvoice/taxpayers-qr-form-ok.png b/static/img/usage/myinvois/einvoice/taxpayers-qr-form-ok.png similarity index 100% rename from static/img/myinvois/einvoice/taxpayers-qr-form-ok.png rename to static/img/usage/myinvois/einvoice/taxpayers-qr-form-ok.png diff --git a/static/img/myinvois/einvoice/taxpayers-qr-form.png b/static/img/usage/myinvois/einvoice/taxpayers-qr-form.png similarity index 100% rename from static/img/myinvois/einvoice/taxpayers-qr-form.png rename to static/img/usage/myinvois/einvoice/taxpayers-qr-form.png diff --git a/static/img/myinvois/einvoice/taxpayers-qr-maintain-customer.png b/static/img/usage/myinvois/einvoice/taxpayers-qr-maintain-customer.png similarity index 100% rename from static/img/myinvois/einvoice/taxpayers-qr-maintain-customer.png rename to static/img/usage/myinvois/einvoice/taxpayers-qr-maintain-customer.png diff --git a/static/img/myinvois/einvoice/taxpayers-qr-sales-invoice.png b/static/img/usage/myinvois/einvoice/taxpayers-qr-sales-invoice.png similarity index 100% rename from static/img/myinvois/einvoice/taxpayers-qr-sales-invoice.png rename to static/img/usage/myinvois/einvoice/taxpayers-qr-sales-invoice.png diff --git a/static/img/myinvois/einvoice/test-einvoice-validation-button.png b/static/img/usage/myinvois/einvoice/test-einvoice-validation-button.png similarity index 100% rename from static/img/myinvois/einvoice/test-einvoice-validation-button.png rename to static/img/usage/myinvois/einvoice/test-einvoice-validation-button.png diff --git a/static/img/myinvois/einvoice/test-einvoice-validation-error.png b/static/img/usage/myinvois/einvoice/test-einvoice-validation-error.png similarity index 100% rename from static/img/myinvois/einvoice/test-einvoice-validation-error.png rename to static/img/usage/myinvois/einvoice/test-einvoice-validation-error.png diff --git a/static/img/myinvois/einvoice/test-einvoice-validation-result.png b/static/img/usage/myinvois/einvoice/test-einvoice-validation-result.png similarity index 100% rename from static/img/myinvois/einvoice/test-einvoice-validation-result.png rename to static/img/usage/myinvois/einvoice/test-einvoice-validation-result.png diff --git a/static/img/myinvois/guide/batch-retrieve-info-progress.png b/static/img/usage/myinvois/guide/batch-retrieve-info-progress.png similarity index 100% rename from static/img/myinvois/guide/batch-retrieve-info-progress.png rename to static/img/usage/myinvois/guide/batch-retrieve-info-progress.png diff --git a/static/img/myinvois/guide/batch-retrieve-info.png b/static/img/usage/myinvois/guide/batch-retrieve-info.png similarity index 100% rename from static/img/myinvois/guide/batch-retrieve-info.png rename to static/img/usage/myinvois/guide/batch-retrieve-info.png diff --git a/static/img/myinvois/guide/batch-tin-lookup-1.png b/static/img/usage/myinvois/guide/batch-tin-lookup-1.png similarity index 100% rename from static/img/myinvois/guide/batch-tin-lookup-1.png rename to static/img/usage/myinvois/guide/batch-tin-lookup-1.png diff --git a/static/img/myinvois/guide/batch-tin-lookup-2.png b/static/img/usage/myinvois/guide/batch-tin-lookup-2.png similarity index 100% rename from static/img/myinvois/guide/batch-tin-lookup-2.png rename to static/img/usage/myinvois/guide/batch-tin-lookup-2.png diff --git a/static/img/myinvois/guide/batch-tin-lookup-3.png b/static/img/usage/myinvois/guide/batch-tin-lookup-3.png similarity index 100% rename from static/img/myinvois/guide/batch-tin-lookup-3.png rename to static/img/usage/myinvois/guide/batch-tin-lookup-3.png diff --git a/static/img/myinvois/guide/create-info-request.png b/static/img/usage/myinvois/guide/create-info-request.png similarity index 100% rename from static/img/myinvois/guide/create-info-request.png rename to static/img/usage/myinvois/guide/create-info-request.png diff --git a/static/img/myinvois/guide/info-request-pending.png b/static/img/usage/myinvois/guide/info-request-pending.png similarity index 100% rename from static/img/myinvois/guide/info-request-pending.png rename to static/img/usage/myinvois/guide/info-request-pending.png diff --git a/static/img/myinvois/guide/info-request-valid.png b/static/img/usage/myinvois/guide/info-request-valid.png similarity index 100% rename from static/img/myinvois/guide/info-request-valid.png rename to static/img/usage/myinvois/guide/info-request-valid.png diff --git a/static/img/myinvois/guide/maintain-customer-general.png b/static/img/usage/myinvois/guide/maintain-customer-general.png similarity index 100% rename from static/img/myinvois/guide/maintain-customer-general.png rename to static/img/usage/myinvois/guide/maintain-customer-general.png diff --git a/static/img/myinvois/guide/maintain-customer-info-request.png b/static/img/usage/myinvois/guide/maintain-customer-info-request.png similarity index 100% rename from static/img/myinvois/guide/maintain-customer-info-request.png rename to static/img/usage/myinvois/guide/maintain-customer-info-request.png diff --git a/static/img/myinvois/guide/maintain-customer-retrieve-info.png b/static/img/usage/myinvois/guide/maintain-customer-retrieve-info.png similarity index 100% rename from static/img/myinvois/guide/maintain-customer-retrieve-info.png rename to static/img/usage/myinvois/guide/maintain-customer-retrieve-info.png diff --git a/static/img/myinvois/guide/maintain-customer-submission-type.png b/static/img/usage/myinvois/guide/maintain-customer-submission-type.png similarity index 100% rename from static/img/myinvois/guide/maintain-customer-submission-type.png rename to static/img/usage/myinvois/guide/maintain-customer-submission-type.png diff --git a/static/img/myinvois/guide/maintain-customer-tax-idtype.png b/static/img/usage/myinvois/guide/maintain-customer-tax-idtype.png similarity index 100% rename from static/img/myinvois/guide/maintain-customer-tax-idtype.png rename to static/img/usage/myinvois/guide/maintain-customer-tax-idtype.png diff --git a/static/img/myinvois/guide/maintain-customer-tax-tin.png b/static/img/usage/myinvois/guide/maintain-customer-tax-tin.png similarity index 100% rename from static/img/myinvois/guide/maintain-customer-tax-tin.png rename to static/img/usage/myinvois/guide/maintain-customer-tax-tin.png diff --git a/static/img/myinvois/guide/maintain-customer-tax.png b/static/img/usage/myinvois/guide/maintain-customer-tax.png similarity index 100% rename from static/img/myinvois/guide/maintain-customer-tax.png rename to static/img/usage/myinvois/guide/maintain-customer-tax.png diff --git a/static/img/myinvois/guide/maintain-stock-classification.png b/static/img/usage/myinvois/guide/maintain-stock-classification.png similarity index 100% rename from static/img/myinvois/guide/maintain-stock-classification.png rename to static/img/usage/myinvois/guide/maintain-stock-classification.png diff --git a/static/img/myinvois/guide/maintain-supplier-classification.png b/static/img/usage/myinvois/guide/maintain-supplier-classification.png similarity index 100% rename from static/img/myinvois/guide/maintain-supplier-classification.png rename to static/img/usage/myinvois/guide/maintain-supplier-classification.png diff --git a/static/img/myinvois/guide/maintain-supplier-general.png b/static/img/usage/myinvois/guide/maintain-supplier-general.png similarity index 100% rename from static/img/myinvois/guide/maintain-supplier-general.png rename to static/img/usage/myinvois/guide/maintain-supplier-general.png diff --git a/static/img/myinvois/guide/maintain-supplier-submission-type.png b/static/img/usage/myinvois/guide/maintain-supplier-submission-type.png similarity index 100% rename from static/img/myinvois/guide/maintain-supplier-submission-type.png rename to static/img/usage/myinvois/guide/maintain-supplier-submission-type.png diff --git a/static/img/myinvois/guide/retrieve-info.png b/static/img/usage/myinvois/guide/retrieve-info.png similarity index 100% rename from static/img/myinvois/guide/retrieve-info.png rename to static/img/usage/myinvois/guide/retrieve-info.png diff --git a/static/img/myinvois/guide/sales-invoice-classification.png b/static/img/usage/myinvois/guide/sales-invoice-classification.png similarity index 100% rename from static/img/myinvois/guide/sales-invoice-classification.png rename to static/img/usage/myinvois/guide/sales-invoice-classification.png diff --git a/static/img/myinvois/onboarding/company-profile-country.png b/static/img/usage/myinvois/onboarding/company-profile-country.png similarity index 100% rename from static/img/myinvois/onboarding/company-profile-country.png rename to static/img/usage/myinvois/onboarding/company-profile-country.png diff --git a/static/img/myinvois/onboarding/company-profile-myinvois-1.png b/static/img/usage/myinvois/onboarding/company-profile-myinvois-1.png similarity index 100% rename from static/img/myinvois/onboarding/company-profile-myinvois-1.png rename to static/img/usage/myinvois/onboarding/company-profile-myinvois-1.png diff --git a/static/img/myinvois/onboarding/company-profile-myinvois-2.png b/static/img/usage/myinvois/onboarding/company-profile-myinvois-2.png similarity index 100% rename from static/img/myinvois/onboarding/company-profile-myinvois-2.png rename to static/img/usage/myinvois/onboarding/company-profile-myinvois-2.png diff --git a/static/img/myinvois/onboarding/company-profile-myinvois-connect.png b/static/img/usage/myinvois/onboarding/company-profile-myinvois-connect.png similarity index 100% rename from static/img/myinvois/onboarding/company-profile-myinvois-connect.png rename to static/img/usage/myinvois/onboarding/company-profile-myinvois-connect.png diff --git a/static/img/myinvois/onboarding/myinvois-production-add-erp-1.png b/static/img/usage/myinvois/onboarding/myinvois-production-add-erp-1.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-add-erp-1.png rename to static/img/usage/myinvois/onboarding/myinvois-production-add-erp-1.png diff --git a/static/img/myinvois/onboarding/myinvois-production-add-erp-2.png b/static/img/usage/myinvois/onboarding/myinvois-production-add-erp-2.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-add-erp-2.png rename to static/img/usage/myinvois/onboarding/myinvois-production-add-erp-2.png diff --git a/static/img/myinvois/onboarding/myinvois-production-add-erp-3.png b/static/img/usage/myinvois/onboarding/myinvois-production-add-erp-3.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-add-erp-3.png rename to static/img/usage/myinvois/onboarding/myinvois-production-add-erp-3.png diff --git a/static/img/myinvois/onboarding/myinvois-production-add-intermediary-1.png b/static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-1.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-add-intermediary-1.png rename to static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-1.png diff --git a/static/img/myinvois/onboarding/myinvois-production-add-intermediary-2.png b/static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-2.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-add-intermediary-2.png rename to static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-2.png diff --git a/static/img/myinvois/onboarding/myinvois-production-add-intermediary-3.png b/static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-3.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-add-intermediary-3.png rename to static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-3.png diff --git a/static/img/myinvois/onboarding/myinvois-production-add-intermediary-4.png b/static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-4.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-add-intermediary-4.png rename to static/img/usage/myinvois/onboarding/myinvois-production-add-intermediary-4.png diff --git a/static/img/myinvois/onboarding/myinvois-production-login.png b/static/img/usage/myinvois/onboarding/myinvois-production-login.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-login.png rename to static/img/usage/myinvois/onboarding/myinvois-production-login.png diff --git a/static/img/myinvois/onboarding/myinvois-production-mytax.png b/static/img/usage/myinvois/onboarding/myinvois-production-mytax.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-mytax.png rename to static/img/usage/myinvois/onboarding/myinvois-production-mytax.png diff --git a/static/img/myinvois/onboarding/myinvois-production-view-taxpayer-profile.png b/static/img/usage/myinvois/onboarding/myinvois-production-view-taxpayer-profile.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-production-view-taxpayer-profile.png rename to static/img/usage/myinvois/onboarding/myinvois-production-view-taxpayer-profile.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-add-erp-1.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-add-erp-1.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-add-erp-1.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-add-erp-1.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-add-erp-2.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-add-erp-2.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-add-erp-2.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-add-erp-2.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-add-erp-3.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-add-erp-3.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-add-erp-3.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-add-erp-3.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-1.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-1.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-1.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-1.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-2.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-2.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-2.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-2.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-3.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-3.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-3.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-3.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-4.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-4.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-add-intermediary-4.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-add-intermediary-4.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-login.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-login.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-login.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-login.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-mytax.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-mytax.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-mytax.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-mytax.png diff --git a/static/img/myinvois/onboarding/myinvois-sandbox-view-taxpayer-profile.png b/static/img/usage/myinvois/onboarding/myinvois-sandbox-view-taxpayer-profile.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-sandbox-view-taxpayer-profile.png rename to static/img/usage/myinvois/onboarding/myinvois-sandbox-view-taxpayer-profile.png diff --git a/static/img/myinvois/onboarding/myinvois-start-date.png b/static/img/usage/myinvois/onboarding/myinvois-start-date.png similarity index 100% rename from static/img/myinvois/onboarding/myinvois-start-date.png rename to static/img/usage/myinvois/onboarding/myinvois-start-date.png diff --git a/static/img/usage/production/guide/assign-item-with-bom-item.png b/static/img/usage/production/guide/assign-item-with-bom-item.png new file mode 100644 index 00000000..9dc8b229 Binary files /dev/null and b/static/img/usage/production/guide/assign-item-with-bom-item.png differ diff --git a/static/img/usage/production/guide/batch-in-iv.png b/static/img/usage/production/guide/batch-in-iv.png new file mode 100644 index 00000000..925aa5ac Binary files /dev/null and b/static/img/usage/production/guide/batch-in-iv.png differ diff --git a/static/img/usage/production/guide/batch-in-pi.png b/static/img/usage/production/guide/batch-in-pi.png new file mode 100644 index 00000000..d8e5ea86 Binary files /dev/null and b/static/img/usage/production/guide/batch-in-pi.png differ diff --git a/static/img/usage/production/guide/batch-update-unit-cost.png b/static/img/usage/production/guide/batch-update-unit-cost.png new file mode 100644 index 00000000..d2acac9a Binary files /dev/null and b/static/img/usage/production/guide/batch-update-unit-cost.png differ diff --git a/static/img/usage/production/guide/bom-components.png b/static/img/usage/production/guide/bom-components.png new file mode 100644 index 00000000..24a0cb46 Binary files /dev/null and b/static/img/usage/production/guide/bom-components.png differ diff --git a/static/img/usage/production/guide/car-available-balance.png b/static/img/usage/production/guide/car-available-balance.png new file mode 100644 index 00000000..f3e133bb Binary files /dev/null and b/static/img/usage/production/guide/car-available-balance.png differ diff --git a/static/img/usage/production/guide/click-bom-tree-entry.png b/static/img/usage/production/guide/click-bom-tree-entry.png new file mode 100644 index 00000000..47d463c4 Binary files /dev/null and b/static/img/usage/production/guide/click-bom-tree-entry.png differ diff --git a/static/img/usage/production/guide/click-show-multilevel-bom-in-flat-mode.png b/static/img/usage/production/guide/click-show-multilevel-bom-in-flat-mode.png new file mode 100644 index 00000000..7aa4bb9a Binary files /dev/null and b/static/img/usage/production/guide/click-show-multilevel-bom-in-flat-mode.png differ diff --git a/static/img/usage/production/guide/confirm-operation.png b/static/img/usage/production/guide/confirm-operation.png new file mode 100644 index 00000000..3f0086d3 Binary files /dev/null and b/static/img/usage/production/guide/confirm-operation.png differ diff --git a/static/img/usage/production/guide/confirm-stock-batch-update-unit-cost-2.png b/static/img/usage/production/guide/confirm-stock-batch-update-unit-cost-2.png new file mode 100644 index 00000000..ad018237 Binary files /dev/null and b/static/img/usage/production/guide/confirm-stock-batch-update-unit-cost-2.png differ diff --git a/static/img/usage/production/guide/confirm-stock-batch-update-unit-cost.png b/static/img/usage/production/guide/confirm-stock-batch-update-unit-cost.png new file mode 100644 index 00000000..36733c8a Binary files /dev/null and b/static/img/usage/production/guide/confirm-stock-batch-update-unit-cost.png differ diff --git a/static/img/usage/production/guide/create-gl-account-finished-goods.png b/static/img/usage/production/guide/create-gl-account-finished-goods.png new file mode 100644 index 00000000..904a0743 Binary files /dev/null and b/static/img/usage/production/guide/create-gl-account-finished-goods.png differ diff --git a/static/img/usage/production/guide/create-gl-account.png b/static/img/usage/production/guide/create-gl-account.png new file mode 100644 index 00000000..36577778 Binary files /dev/null and b/static/img/usage/production/guide/create-gl-account.png differ diff --git a/static/img/usage/production/guide/create-raw-materials-stock-item.png b/static/img/usage/production/guide/create-raw-materials-stock-item.png new file mode 100644 index 00000000..5b6616f5 Binary files /dev/null and b/static/img/usage/production/guide/create-raw-materials-stock-item.png differ diff --git a/static/img/usage/production/guide/create-stock-group-finished-goods.png b/static/img/usage/production/guide/create-stock-group-finished-goods.png new file mode 100644 index 00000000..3ce7d42a Binary files /dev/null and b/static/img/usage/production/guide/create-stock-group-finished-goods.png differ diff --git a/static/img/usage/production/guide/create-stock-group-raw-material.png b/static/img/usage/production/guide/create-stock-group-raw-material.png new file mode 100644 index 00000000..00581109 Binary files /dev/null and b/static/img/usage/production/guide/create-stock-group-raw-material.png differ diff --git a/static/img/usage/production/guide/create-stock-group-water.png b/static/img/usage/production/guide/create-stock-group-water.png new file mode 100644 index 00000000..2101c501 Binary files /dev/null and b/static/img/usage/production/guide/create-stock-group-water.png differ diff --git a/static/img/usage/production/guide/document-transfer.png b/static/img/usage/production/guide/document-transfer.png new file mode 100644 index 00000000..11d0a258 Binary files /dev/null and b/static/img/usage/production/guide/document-transfer.png differ diff --git a/static/img/usage/production/guide/engine-available-balance-2.png b/static/img/usage/production/guide/engine-available-balance-2.png new file mode 100644 index 00000000..dec3dfe2 Binary files /dev/null and b/static/img/usage/production/guide/engine-available-balance-2.png differ diff --git a/static/img/usage/production/guide/engine-available-balance.png b/static/img/usage/production/guide/engine-available-balance.png new file mode 100644 index 00000000..7281d5bb Binary files /dev/null and b/static/img/usage/production/guide/engine-available-balance.png differ diff --git a/static/img/usage/production/guide/frame-available-balance-2.png b/static/img/usage/production/guide/frame-available-balance-2.png new file mode 100644 index 00000000..2f952947 Binary files /dev/null and b/static/img/usage/production/guide/frame-available-balance-2.png differ diff --git a/static/img/usage/production/guide/frame-available-balance.png b/static/img/usage/production/guide/frame-available-balance.png new file mode 100644 index 00000000..24a3df05 Binary files /dev/null and b/static/img/usage/production/guide/frame-available-balance.png differ diff --git a/static/img/usage/production/guide/highlight-cost-of-goods-sold.png b/static/img/usage/production/guide/highlight-cost-of-goods-sold.png new file mode 100644 index 00000000..0fe32fc0 Binary files /dev/null and b/static/img/usage/production/guide/highlight-cost-of-goods-sold.png differ diff --git a/static/img/usage/production/guide/item-assembly-save.png b/static/img/usage/production/guide/item-assembly-save.png new file mode 100644 index 00000000..bda3fc94 Binary files /dev/null and b/static/img/usage/production/guide/item-assembly-save.png differ diff --git a/static/img/usage/production/guide/item-assembly-transfer-from.png b/static/img/usage/production/guide/item-assembly-transfer-from.png new file mode 100644 index 00000000..671207d0 Binary files /dev/null and b/static/img/usage/production/guide/item-assembly-transfer-from.png differ diff --git a/static/img/usage/production/guide/item-disassembly-new.png b/static/img/usage/production/guide/item-disassembly-new.png new file mode 100644 index 00000000..f33aa697 Binary files /dev/null and b/static/img/usage/production/guide/item-disassembly-new.png differ diff --git a/static/img/usage/production/guide/item-disassembly-save.png b/static/img/usage/production/guide/item-disassembly-save.png new file mode 100644 index 00000000..3554b94a Binary files /dev/null and b/static/img/usage/production/guide/item-disassembly-save.png differ diff --git a/static/img/usage/production/guide/job-order-save.png b/static/img/usage/production/guide/job-order-save.png new file mode 100644 index 00000000..42236772 Binary files /dev/null and b/static/img/usage/production/guide/job-order-save.png differ diff --git a/static/img/usage/production/guide/job-order-transfer-from.png b/static/img/usage/production/guide/job-order-transfer-from.png new file mode 100644 index 00000000..89905787 Binary files /dev/null and b/static/img/usage/production/guide/job-order-transfer-from.png differ diff --git a/static/img/usage/production/guide/list-of-gl-account-stock-account-created.png b/static/img/usage/production/guide/list-of-gl-account-stock-account-created.png new file mode 100644 index 00000000..9d408a9d Binary files /dev/null and b/static/img/usage/production/guide/list-of-gl-account-stock-account-created.png differ diff --git a/static/img/usage/production/guide/new-job-order.png b/static/img/usage/production/guide/new-job-order.png new file mode 100644 index 00000000..e002ea3b Binary files /dev/null and b/static/img/usage/production/guide/new-job-order.png differ diff --git a/static/img/usage/production/guide/offset-qty-so.png b/static/img/usage/production/guide/offset-qty-so.png new file mode 100644 index 00000000..d6788416 Binary files /dev/null and b/static/img/usage/production/guide/offset-qty-so.png differ diff --git a/static/img/usage/production/guide/overview-of-manufacturing-business-flow.png b/static/img/usage/production/guide/overview-of-manufacturing-business-flow.png new file mode 100644 index 00000000..6eb24fd2 Binary files /dev/null and b/static/img/usage/production/guide/overview-of-manufacturing-business-flow.png differ diff --git a/static/img/usage/production/guide/overview-workflow-so-jo.png b/static/img/usage/production/guide/overview-workflow-so-jo.png new file mode 100644 index 00000000..6b39b920 Binary files /dev/null and b/static/img/usage/production/guide/overview-workflow-so-jo.png differ diff --git a/static/img/usage/production/guide/overview-workflow-warehouse.png b/static/img/usage/production/guide/overview-workflow-warehouse.png new file mode 100644 index 00000000..9418af74 Binary files /dev/null and b/static/img/usage/production/guide/overview-workflow-warehouse.png differ diff --git a/static/img/usage/production/guide/print-stock-batch-expiry.png b/static/img/usage/production/guide/print-stock-batch-expiry.png new file mode 100644 index 00000000..3af6c843 Binary files /dev/null and b/static/img/usage/production/guide/print-stock-batch-expiry.png differ diff --git a/static/img/usage/production/guide/production-document-transfer-2.png b/static/img/usage/production/guide/production-document-transfer-2.png new file mode 100644 index 00000000..fd3a3178 Binary files /dev/null and b/static/img/usage/production/guide/production-document-transfer-2.png differ diff --git a/static/img/usage/production/guide/production-document-transfer.png b/static/img/usage/production/guide/production-document-transfer.png new file mode 100644 index 00000000..93f57622 Binary files /dev/null and b/static/img/usage/production/guide/production-document-transfer.png differ diff --git a/static/img/usage/production/guide/purchase-order-new.png b/static/img/usage/production/guide/purchase-order-new.png new file mode 100644 index 00000000..4476932c Binary files /dev/null and b/static/img/usage/production/guide/purchase-order-new.png differ diff --git a/static/img/usage/production/guide/purchase-order-save.png b/static/img/usage/production/guide/purchase-order-save.png new file mode 100644 index 00000000..c2b44431 Binary files /dev/null and b/static/img/usage/production/guide/purchase-order-save.png differ diff --git a/static/img/usage/production/guide/purchase-order-transfer-from.png b/static/img/usage/production/guide/purchase-order-transfer-from.png new file mode 100644 index 00000000..c15c80af Binary files /dev/null and b/static/img/usage/production/guide/purchase-order-transfer-from.png differ diff --git a/static/img/usage/production/guide/sales-order.png b/static/img/usage/production/guide/sales-order.png new file mode 100644 index 00000000..36de0455 Binary files /dev/null and b/static/img/usage/production/guide/sales-order.png differ diff --git a/static/img/usage/production/guide/select-disassembly-code.png b/static/img/usage/production/guide/select-disassembly-code.png new file mode 100644 index 00000000..8435d09d Binary files /dev/null and b/static/img/usage/production/guide/select-disassembly-code.png differ diff --git a/static/img/usage/production/guide/select-disassembly-qty.png b/static/img/usage/production/guide/select-disassembly-qty.png new file mode 100644 index 00000000..bca32876 Binary files /dev/null and b/static/img/usage/production/guide/select-disassembly-qty.png differ diff --git a/static/img/usage/production/guide/split-to-x-process.png b/static/img/usage/production/guide/split-to-x-process.png new file mode 100644 index 00000000..68fbeeb3 Binary files /dev/null and b/static/img/usage/production/guide/split-to-x-process.png differ diff --git a/static/img/usage/production/guide/stock-batch-update-unit-cost.png b/static/img/usage/production/guide/stock-batch-update-unit-cost.png new file mode 100644 index 00000000..888381e3 Binary files /dev/null and b/static/img/usage/production/guide/stock-batch-update-unit-cost.png differ diff --git a/static/img/usage/production/guide/stock-batch.png b/static/img/usage/production/guide/stock-batch.png new file mode 100644 index 00000000..9ef2f941 Binary files /dev/null and b/static/img/usage/production/guide/stock-batch.png differ diff --git a/static/img/usage/production/guide/stock-bom-tree-entry.png b/static/img/usage/production/guide/stock-bom-tree-entry.png new file mode 100644 index 00000000..b4b8428c Binary files /dev/null and b/static/img/usage/production/guide/stock-bom-tree-entry.png differ diff --git a/static/img/usage/production/guide/stock-item-assembly.png b/static/img/usage/production/guide/stock-item-assembly.png new file mode 100644 index 00000000..9a1faca6 Binary files /dev/null and b/static/img/usage/production/guide/stock-item-assembly.png differ diff --git a/static/img/usage/production/guide/wheel-available-balance-2.png b/static/img/usage/production/guide/wheel-available-balance-2.png new file mode 100644 index 00000000..98ba75ff Binary files /dev/null and b/static/img/usage/production/guide/wheel-available-balance-2.png differ diff --git a/static/img/usage/production/guide/wheel-available-balance-3.png b/static/img/usage/production/guide/wheel-available-balance-3.png new file mode 100644 index 00000000..0eabd6c8 Binary files /dev/null and b/static/img/usage/production/guide/wheel-available-balance-3.png differ diff --git a/static/img/usage/production/guide/wheel-available-balance-after-save.png b/static/img/usage/production/guide/wheel-available-balance-after-save.png new file mode 100644 index 00000000..70555894 Binary files /dev/null and b/static/img/usage/production/guide/wheel-available-balance-after-save.png differ diff --git a/static/img/usage/production/guide/wheel-available-balance.png b/static/img/usage/production/guide/wheel-available-balance.png new file mode 100644 index 00000000..5e817560 Binary files /dev/null and b/static/img/usage/production/guide/wheel-available-balance.png differ diff --git a/static/img/usage/production/report/bom-listing-browse.png b/static/img/usage/production/report/bom-listing-browse.png new file mode 100644 index 00000000..1da838bf Binary files /dev/null and b/static/img/usage/production/report/bom-listing-browse.png differ diff --git a/static/img/usage/production/report/bom-listing-document-type.png b/static/img/usage/production/report/bom-listing-document-type.png new file mode 100644 index 00000000..9d9cace5 Binary files /dev/null and b/static/img/usage/production/report/bom-listing-document-type.png differ diff --git a/static/img/usage/production/report/bom-listing-example.png b/static/img/usage/production/report/bom-listing-example.png new file mode 100644 index 00000000..e671408d Binary files /dev/null and b/static/img/usage/production/report/bom-listing-example.png differ diff --git a/static/img/usage/production/report/bom-listing-filter.png b/static/img/usage/production/report/bom-listing-filter.png new file mode 100644 index 00000000..4a1f158b Binary files /dev/null and b/static/img/usage/production/report/bom-listing-filter.png differ diff --git a/static/img/usage/production/report/bom-listing-print-document-style.png b/static/img/usage/production/report/bom-listing-print-document-style.png new file mode 100644 index 00000000..7446c160 Binary files /dev/null and b/static/img/usage/production/report/bom-listing-print-document-style.png differ diff --git a/static/img/usage/production/report/bom-material-usage-apply.png b/static/img/usage/production/report/bom-material-usage-apply.png new file mode 100644 index 00000000..6e0821ad Binary files /dev/null and b/static/img/usage/production/report/bom-material-usage-apply.png differ diff --git a/static/img/usage/production/report/bom-material-usage-example.png b/static/img/usage/production/report/bom-material-usage-example.png new file mode 100644 index 00000000..bc892f36 Binary files /dev/null and b/static/img/usage/production/report/bom-material-usage-example.png differ diff --git a/static/img/usage/production/report/bom-material-usage-filter.png b/static/img/usage/production/report/bom-material-usage-filter.png new file mode 100644 index 00000000..0b5a0ded Binary files /dev/null and b/static/img/usage/production/report/bom-material-usage-filter.png differ diff --git a/static/img/usage/production/report/bom-planner-example.png b/static/img/usage/production/report/bom-planner-example.png new file mode 100644 index 00000000..9594c8b3 Binary files /dev/null and b/static/img/usage/production/report/bom-planner-example.png differ diff --git a/static/img/usage/production/report/bom-planner-filter.png b/static/img/usage/production/report/bom-planner-filter.png new file mode 100644 index 00000000..730fd6f3 Binary files /dev/null and b/static/img/usage/production/report/bom-planner-filter.png differ diff --git a/static/img/usage/production/report/bom-planner.png b/static/img/usage/production/report/bom-planner.png new file mode 100644 index 00000000..9fe146cc Binary files /dev/null and b/static/img/usage/production/report/bom-planner.png differ diff --git a/static/img/usage/production/report/bom-relation-click-apply.png b/static/img/usage/production/report/bom-relation-click-apply.png new file mode 100644 index 00000000..7fcd9c15 Binary files /dev/null and b/static/img/usage/production/report/bom-relation-click-apply.png differ diff --git a/static/img/usage/production/report/bom-relation-example.png b/static/img/usage/production/report/bom-relation-example.png new file mode 100644 index 00000000..d06cd6a9 Binary files /dev/null and b/static/img/usage/production/report/bom-relation-example.png differ diff --git a/static/img/usage/production/report/bom-relation-select-item.png b/static/img/usage/production/report/bom-relation-select-item.png new file mode 100644 index 00000000..6f6e1df4 Binary files /dev/null and b/static/img/usage/production/report/bom-relation-select-item.png differ diff --git a/static/img/usage/production/report/bom-wastage-example.png b/static/img/usage/production/report/bom-wastage-example.png new file mode 100644 index 00000000..f164eefe Binary files /dev/null and b/static/img/usage/production/report/bom-wastage-example.png differ diff --git a/static/img/usage/production/report/bom-wastage-filter.png b/static/img/usage/production/report/bom-wastage-filter.png new file mode 100644 index 00000000..56df5ecd Binary files /dev/null and b/static/img/usage/production/report/bom-wastage-filter.png differ diff --git a/static/img/usage/production/report/bom-wastage-select-date-range.png b/static/img/usage/production/report/bom-wastage-select-date-range.png new file mode 100644 index 00000000..48051d6f Binary files /dev/null and b/static/img/usage/production/report/bom-wastage-select-date-range.png differ diff --git a/static/img/usage/production/report/bom-wastage.png b/static/img/usage/production/report/bom-wastage.png new file mode 100644 index 00000000..3ce3884e Binary files /dev/null and b/static/img/usage/production/report/bom-wastage.png differ diff --git a/static/img/usage/production/report/job-order-listing-document-details.png b/static/img/usage/production/report/job-order-listing-document-details.png new file mode 100644 index 00000000..2837e23d Binary files /dev/null and b/static/img/usage/production/report/job-order-listing-document-details.png differ diff --git a/static/img/usage/production/report/job-order-listing-example.png b/static/img/usage/production/report/job-order-listing-example.png new file mode 100644 index 00000000..978d969e Binary files /dev/null and b/static/img/usage/production/report/job-order-listing-example.png differ diff --git a/static/img/usage/production/report/job-order-listing-master-details.png b/static/img/usage/production/report/job-order-listing-master-details.png new file mode 100644 index 00000000..9f56442f Binary files /dev/null and b/static/img/usage/production/report/job-order-listing-master-details.png differ diff --git a/static/img/usage/production/report/job-order-listing-print-document-style.png b/static/img/usage/production/report/job-order-listing-print-document-style.png new file mode 100644 index 00000000..cf054d36 Binary files /dev/null and b/static/img/usage/production/report/job-order-listing-print-document-style.png differ diff --git a/static/img/usage/production/report/navigate-bom-listing.png b/static/img/usage/production/report/navigate-bom-listing.png new file mode 100644 index 00000000..e7c2d7bb Binary files /dev/null and b/static/img/usage/production/report/navigate-bom-listing.png differ diff --git a/static/img/usage/production/report/navigate-bom-material-usage.png b/static/img/usage/production/report/navigate-bom-material-usage.png new file mode 100644 index 00000000..8b1f0b81 Binary files /dev/null and b/static/img/usage/production/report/navigate-bom-material-usage.png differ diff --git a/static/img/usage/production/report/navigate-bom-planner.png b/static/img/usage/production/report/navigate-bom-planner.png new file mode 100644 index 00000000..02390780 Binary files /dev/null and b/static/img/usage/production/report/navigate-bom-planner.png differ diff --git a/static/img/usage/production/report/navigate-bom-relation.png b/static/img/usage/production/report/navigate-bom-relation.png new file mode 100644 index 00000000..5db114eb Binary files /dev/null and b/static/img/usage/production/report/navigate-bom-relation.png differ diff --git a/static/img/usage/production/report/navigate-bom-wastage.png b/static/img/usage/production/report/navigate-bom-wastage.png new file mode 100644 index 00000000..b6ce3205 Binary files /dev/null and b/static/img/usage/production/report/navigate-bom-wastage.png differ diff --git a/static/img/usage/production/report/navigate-job-order-listing.png b/static/img/usage/production/report/navigate-job-order-listing.png new file mode 100644 index 00000000..c59b06aa Binary files /dev/null and b/static/img/usage/production/report/navigate-job-order-listing.png differ diff --git a/static/img/usage/production/report/navigate-outstanding-production-document-listing.png b/static/img/usage/production/report/navigate-outstanding-production-document-listing.png new file mode 100644 index 00000000..85443eb0 Binary files /dev/null and b/static/img/usage/production/report/navigate-outstanding-production-document-listing.png differ diff --git a/static/img/usage/production/report/outstanding-job-order-listing-report.png b/static/img/usage/production/report/outstanding-job-order-listing-report.png new file mode 100644 index 00000000..37f1d00c Binary files /dev/null and b/static/img/usage/production/report/outstanding-job-order-listing-report.png differ diff --git a/static/img/usage/production/report/outstanding-production-document-listing-filter.png b/static/img/usage/production/report/outstanding-production-document-listing-filter.png new file mode 100644 index 00000000..bef94a9f Binary files /dev/null and b/static/img/usage/production/report/outstanding-production-document-listing-filter.png differ diff --git a/static/img/usage/production/report/outstanding-production-document-listing-report-type.png b/static/img/usage/production/report/outstanding-production-document-listing-report-type.png new file mode 100644 index 00000000..1f7eaeb2 Binary files /dev/null and b/static/img/usage/production/report/outstanding-production-document-listing-report-type.png differ diff --git a/static/img/usage/production/report/outstanding-sales-order-listing-report.png b/static/img/usage/production/report/outstanding-sales-order-listing-report.png new file mode 100644 index 00000000..ee717ea2 Binary files /dev/null and b/static/img/usage/production/report/outstanding-sales-order-listing-report.png differ diff --git a/static/img/usage/purchase/faq/default-layout.png b/static/img/usage/purchase/faq/default-layout.png new file mode 100644 index 00000000..2a88db47 Binary files /dev/null and b/static/img/usage/purchase/faq/default-layout.png differ diff --git a/static/img/usage/purchase/faq/grid-load-layout.png b/static/img/usage/purchase/faq/grid-load-layout.png new file mode 100644 index 00000000..7fc9880f Binary files /dev/null and b/static/img/usage/purchase/faq/grid-load-layout.png differ diff --git a/static/img/usage/purchase/faq/missing-column.png b/static/img/usage/purchase/faq/missing-column.png new file mode 100644 index 00000000..c2109272 Binary files /dev/null and b/static/img/usage/purchase/faq/missing-column.png differ diff --git a/static/img/usage/purchase/faq/reset-layout.png b/static/img/usage/purchase/faq/reset-layout.png new file mode 100644 index 00000000..25612007 Binary files /dev/null and b/static/img/usage/purchase/faq/reset-layout.png differ diff --git a/static/img/usage/purchase/faq/right-click-detail-grid-columns.png b/static/img/usage/purchase/faq/right-click-detail-grid-columns.png new file mode 100644 index 00000000..88cdcd90 Binary files /dev/null and b/static/img/usage/purchase/faq/right-click-detail-grid-columns.png differ diff --git a/static/img/usage/purchase/guide/attachment.png b/static/img/usage/purchase/guide/attachment.png new file mode 100644 index 00000000..217d24c0 Binary files /dev/null and b/static/img/usage/purchase/guide/attachment.png differ diff --git a/static/img/usage/purchase/guide/cash-purchase-data-entry.png b/static/img/usage/purchase/guide/cash-purchase-data-entry.png new file mode 100644 index 00000000..b47dc4bf Binary files /dev/null and b/static/img/usage/purchase/guide/cash-purchase-data-entry.png differ diff --git a/static/img/usage/purchase/guide/cash-purchase-example-entry.png b/static/img/usage/purchase/guide/cash-purchase-example-entry.png new file mode 100644 index 00000000..844713d3 Binary files /dev/null and b/static/img/usage/purchase/guide/cash-purchase-example-entry.png differ diff --git a/static/img/usage/purchase/guide/cash-purchase-generate-pv-number.png b/static/img/usage/purchase/guide/cash-purchase-generate-pv-number.png new file mode 100644 index 00000000..9bb513d1 Binary files /dev/null and b/static/img/usage/purchase/guide/cash-purchase-generate-pv-number.png differ diff --git a/static/img/usage/purchase/guide/cash-purchase-payment-paid-details.png b/static/img/usage/purchase/guide/cash-purchase-payment-paid-details.png new file mode 100644 index 00000000..812a1d2a Binary files /dev/null and b/static/img/usage/purchase/guide/cash-purchase-payment-paid-details.png differ diff --git a/static/img/usage/purchase/guide/cash-purchase-payment-paid-payment-by.png b/static/img/usage/purchase/guide/cash-purchase-payment-paid-payment-by.png new file mode 100644 index 00000000..071a5b3b Binary files /dev/null and b/static/img/usage/purchase/guide/cash-purchase-payment-paid-payment-by.png differ diff --git a/static/img/usage/purchase/guide/cash-purchase-transfer-from.png b/static/img/usage/purchase/guide/cash-purchase-transfer-from.png new file mode 100644 index 00000000..da743bb5 Binary files /dev/null and b/static/img/usage/purchase/guide/cash-purchase-transfer-from.png differ diff --git a/static/img/usage/purchase/guide/cash-purchase.png b/static/img/usage/purchase/guide/cash-purchase.png new file mode 100644 index 00000000..0eb60c0a Binary files /dev/null and b/static/img/usage/purchase/guide/cash-purchase.png differ diff --git a/static/img/usage/purchase/guide/cost-allocated-by-quantity.png b/static/img/usage/purchase/guide/cost-allocated-by-quantity.png new file mode 100644 index 00000000..445a8a3f Binary files /dev/null and b/static/img/usage/purchase/guide/cost-allocated-by-quantity.png differ diff --git a/static/img/usage/purchase/guide/cost-allocated-by-smallest-quantity.png b/static/img/usage/purchase/guide/cost-allocated-by-smallest-quantity.png new file mode 100644 index 00000000..9edb8764 Binary files /dev/null and b/static/img/usage/purchase/guide/cost-allocated-by-smallest-quantity.png differ diff --git a/static/img/usage/purchase/guide/cost-allocated-by-subtotal.png b/static/img/usage/purchase/guide/cost-allocated-by-subtotal.png new file mode 100644 index 00000000..b0c09873 Binary files /dev/null and b/static/img/usage/purchase/guide/cost-allocated-by-subtotal.png differ diff --git a/static/img/usage/purchase/guide/detail-project.png b/static/img/usage/purchase/guide/detail-project.png new file mode 100644 index 00000000..69720c3c Binary files /dev/null and b/static/img/usage/purchase/guide/detail-project.png differ diff --git a/static/img/usage/purchase/guide/extra-goods-received-data-entry.png b/static/img/usage/purchase/guide/extra-goods-received-data-entry.png new file mode 100644 index 00000000..d447143d Binary files /dev/null and b/static/img/usage/purchase/guide/extra-goods-received-data-entry.png differ diff --git a/static/img/usage/purchase/guide/extra-goods-received-transfer-from.png b/static/img/usage/purchase/guide/extra-goods-received-transfer-from.png new file mode 100644 index 00000000..9263a550 Binary files /dev/null and b/static/img/usage/purchase/guide/extra-goods-received-transfer-from.png differ diff --git a/static/img/usage/purchase/guide/formula-quantity.png b/static/img/usage/purchase/guide/formula-quantity.png new file mode 100644 index 00000000..fbf5bd8f Binary files /dev/null and b/static/img/usage/purchase/guide/formula-quantity.png differ diff --git a/static/img/usage/purchase/guide/formula-smallest-quantity.png b/static/img/usage/purchase/guide/formula-smallest-quantity.png new file mode 100644 index 00000000..4806f08d Binary files /dev/null and b/static/img/usage/purchase/guide/formula-smallest-quantity.png differ diff --git a/static/img/usage/purchase/guide/formula-subtotal.png b/static/img/usage/purchase/guide/formula-subtotal.png new file mode 100644 index 00000000..1b276ad9 Binary files /dev/null and b/static/img/usage/purchase/guide/formula-subtotal.png differ diff --git a/static/img/usage/purchase/guide/goods-received-data-entry.png b/static/img/usage/purchase/guide/goods-received-data-entry.png new file mode 100644 index 00000000..e3793f3a Binary files /dev/null and b/static/img/usage/purchase/guide/goods-received-data-entry.png differ diff --git a/static/img/usage/purchase/guide/goods-received-details.png b/static/img/usage/purchase/guide/goods-received-details.png new file mode 100644 index 00000000..5284ae60 Binary files /dev/null and b/static/img/usage/purchase/guide/goods-received-details.png differ diff --git a/static/img/usage/purchase/guide/goods-received-example-entry.png b/static/img/usage/purchase/guide/goods-received-example-entry.png new file mode 100644 index 00000000..5284ae60 Binary files /dev/null and b/static/img/usage/purchase/guide/goods-received-example-entry.png differ diff --git a/static/img/usage/purchase/guide/goods-received-transfer-from-po.png b/static/img/usage/purchase/guide/goods-received-transfer-from-po.png new file mode 100644 index 00000000..610363ce Binary files /dev/null and b/static/img/usage/purchase/guide/goods-received-transfer-from-po.png differ diff --git a/static/img/usage/purchase/guide/goods-received.png b/static/img/usage/purchase/guide/goods-received.png new file mode 100644 index 00000000..5d03bf4b Binary files /dev/null and b/static/img/usage/purchase/guide/goods-received.png differ diff --git a/static/img/usage/purchase/guide/landing-cost-1.png b/static/img/usage/purchase/guide/landing-cost-1.png new file mode 100644 index 00000000..312aef02 Binary files /dev/null and b/static/img/usage/purchase/guide/landing-cost-1.png differ diff --git a/static/img/usage/purchase/guide/landing-cost-2.png b/static/img/usage/purchase/guide/landing-cost-2.png new file mode 100644 index 00000000..e089b96c Binary files /dev/null and b/static/img/usage/purchase/guide/landing-cost-2.png differ diff --git a/static/img/usage/purchase/guide/navigate-extra-goods-received.png b/static/img/usage/purchase/guide/navigate-extra-goods-received.png new file mode 100644 index 00000000..23e45bb0 Binary files /dev/null and b/static/img/usage/purchase/guide/navigate-extra-goods-received.png differ diff --git a/static/img/usage/purchase/guide/note.png b/static/img/usage/purchase/guide/note.png new file mode 100644 index 00000000..237e08cf Binary files /dev/null and b/static/img/usage/purchase/guide/note.png differ diff --git a/static/img/usage/purchase/guide/purchase-cancelled-note-data-entry.png b/static/img/usage/purchase/guide/purchase-cancelled-note-data-entry.png new file mode 100644 index 00000000..2365bd85 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-cancelled-note-data-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-cancelled-note-transfer-from.png b/static/img/usage/purchase/guide/purchase-cancelled-note-transfer-from.png new file mode 100644 index 00000000..2171e51d Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-cancelled-note-transfer-from.png differ diff --git a/static/img/usage/purchase/guide/purchase-cancelled-note.png b/static/img/usage/purchase/guide/purchase-cancelled-note.png new file mode 100644 index 00000000..6540c4e5 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-cancelled-note.png differ diff --git a/static/img/usage/purchase/guide/purchase-debit-note-data-entry.png b/static/img/usage/purchase/guide/purchase-debit-note-data-entry.png new file mode 100644 index 00000000..2789eee2 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-debit-note-data-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-debit-note-example-entry.png b/static/img/usage/purchase/guide/purchase-debit-note-example-entry.png new file mode 100644 index 00000000..00c8e33b Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-debit-note-example-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-debit-note-transfer-from.png b/static/img/usage/purchase/guide/purchase-debit-note-transfer-from.png new file mode 100644 index 00000000..bfc7b95a Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-debit-note-transfer-from.png differ diff --git a/static/img/usage/purchase/guide/purchase-debit-note.png b/static/img/usage/purchase/guide/purchase-debit-note.png new file mode 100644 index 00000000..7a4d30c1 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-debit-note.png differ diff --git a/static/img/usage/purchase/guide/purchase-invoice-data-entry.png b/static/img/usage/purchase/guide/purchase-invoice-data-entry.png new file mode 100644 index 00000000..1f5148b7 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-invoice-data-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-invoice-transfer-from-do.png b/static/img/usage/purchase/guide/purchase-invoice-transfer-from-do.png new file mode 100644 index 00000000..d2c66d10 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-invoice-transfer-from-do.png differ diff --git a/static/img/usage/purchase/guide/purchase-invoice.png b/static/img/usage/purchase/guide/purchase-invoice.png new file mode 100644 index 00000000..1c601c40 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-invoice.png differ diff --git a/static/img/usage/purchase/guide/purchase-order-data-entry.png b/static/img/usage/purchase/guide/purchase-order-data-entry.png new file mode 100644 index 00000000..696e2c3e Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-order-data-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-order-details.png b/static/img/usage/purchase/guide/purchase-order-details.png new file mode 100644 index 00000000..a6747580 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-order-details.png differ diff --git a/static/img/usage/purchase/guide/purchase-order-example-entry.png b/static/img/usage/purchase/guide/purchase-order-example-entry.png new file mode 100644 index 00000000..a6747580 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-order-example-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-order.png b/static/img/usage/purchase/guide/purchase-order.png new file mode 100644 index 00000000..f5daa694 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-order.png differ diff --git a/static/img/usage/purchase/guide/purchase-request-data-entry.png b/static/img/usage/purchase/guide/purchase-request-data-entry.png new file mode 100644 index 00000000..3551982d Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-request-data-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-request-details.png b/static/img/usage/purchase/guide/purchase-request-details.png new file mode 100644 index 00000000..b3d50e1c Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-request-details.png differ diff --git a/static/img/usage/purchase/guide/purchase-request-example-entry.png b/static/img/usage/purchase/guide/purchase-request-example-entry.png new file mode 100644 index 00000000..b3d50e1c Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-request-example-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-request.png b/static/img/usage/purchase/guide/purchase-request.png new file mode 100644 index 00000000..6209aedf Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-request.png differ diff --git a/static/img/usage/purchase/guide/purchase-returned-data-entry.png b/static/img/usage/purchase/guide/purchase-returned-data-entry.png new file mode 100644 index 00000000..eafee54c Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-returned-data-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-returned-example-entry.png b/static/img/usage/purchase/guide/purchase-returned-example-entry.png new file mode 100644 index 00000000..27e59913 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-returned-example-entry.png differ diff --git a/static/img/usage/purchase/guide/purchase-returned-transfer-from.png b/static/img/usage/purchase/guide/purchase-returned-transfer-from.png new file mode 100644 index 00000000..a740a005 Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-returned-transfer-from.png differ diff --git a/static/img/usage/purchase/guide/purchase-returned.png b/static/img/usage/purchase/guide/purchase-returned.png new file mode 100644 index 00000000..1b83784a Binary files /dev/null and b/static/img/usage/purchase/guide/purchase-returned.png differ diff --git a/static/img/usage/purchase/guide/sales-process-workflow.png b/static/img/usage/purchase/guide/sales-process-workflow.png new file mode 100644 index 00000000..2a2fac6d Binary files /dev/null and b/static/img/usage/purchase/guide/sales-process-workflow.png differ diff --git a/static/img/usage/purchase/guide/search-supplier-column-2.png b/static/img/usage/purchase/guide/search-supplier-column-2.png new file mode 100644 index 00000000..b9a317bc Binary files /dev/null and b/static/img/usage/purchase/guide/search-supplier-column-2.png differ diff --git a/static/img/usage/purchase/guide/search-supplier-column.png b/static/img/usage/purchase/guide/search-supplier-column.png new file mode 100644 index 00000000..dea81d44 Binary files /dev/null and b/static/img/usage/purchase/guide/search-supplier-column.png differ diff --git a/static/img/usage/purchase/guide/select-report.png b/static/img/usage/purchase/guide/select-report.png new file mode 100644 index 00000000..a153e20a Binary files /dev/null and b/static/img/usage/purchase/guide/select-report.png differ diff --git a/static/img/usage/purchase/guide/send-report-via-whatsapp.png b/static/img/usage/purchase/guide/send-report-via-whatsapp.png new file mode 100644 index 00000000..c4d5c12f Binary files /dev/null and b/static/img/usage/purchase/guide/send-report-via-whatsapp.png differ diff --git a/static/img/usage/purchase/guide/stock-card-check-cost.png b/static/img/usage/purchase/guide/stock-card-check-cost.png new file mode 100644 index 00000000..7cd2465d Binary files /dev/null and b/static/img/usage/purchase/guide/stock-card-check-cost.png differ diff --git a/static/img/usage/purchase/report/navigate-outstanding-purchase-document-listing.png b/static/img/usage/purchase/report/navigate-outstanding-purchase-document-listing.png new file mode 100644 index 00000000..cdfaa669 Binary files /dev/null and b/static/img/usage/purchase/report/navigate-outstanding-purchase-document-listing.png differ diff --git a/static/img/usage/purchase/report/navigate-purchase-analysis-by-document.png b/static/img/usage/purchase/report/navigate-purchase-analysis-by-document.png new file mode 100644 index 00000000..979c785a Binary files /dev/null and b/static/img/usage/purchase/report/navigate-purchase-analysis-by-document.png differ diff --git a/static/img/usage/purchase/report/navigate-purchase-document-listing.png b/static/img/usage/purchase/report/navigate-purchase-document-listing.png new file mode 100644 index 00000000..ed6a9546 Binary files /dev/null and b/static/img/usage/purchase/report/navigate-purchase-document-listing.png differ diff --git a/static/img/usage/purchase/report/navigate-purchase-price-history.png b/static/img/usage/purchase/report/navigate-purchase-price-history.png new file mode 100644 index 00000000..0b99500c Binary files /dev/null and b/static/img/usage/purchase/report/navigate-purchase-price-history.png differ diff --git a/static/img/usage/purchase/report/navigate-yearly-purchase-analysis.png b/static/img/usage/purchase/report/navigate-yearly-purchase-analysis.png new file mode 100644 index 00000000..82964c46 Binary files /dev/null and b/static/img/usage/purchase/report/navigate-yearly-purchase-analysis.png differ diff --git a/static/img/usage/purchase/report/outstanding-purchase-document-listing-apply.png b/static/img/usage/purchase/report/outstanding-purchase-document-listing-apply.png new file mode 100644 index 00000000..5ac07b4f Binary files /dev/null and b/static/img/usage/purchase/report/outstanding-purchase-document-listing-apply.png differ diff --git a/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-2.png b/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-2.png new file mode 100644 index 00000000..b6c0452d Binary files /dev/null and b/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-2.png differ diff --git a/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-report.png b/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-report.png new file mode 100644 index 00000000..e096266a Binary files /dev/null and b/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-report.png differ diff --git a/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-select-report.png b/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-select-report.png new file mode 100644 index 00000000..4c8a7b06 Binary files /dev/null and b/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by-select-report.png differ diff --git a/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by.png b/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by.png new file mode 100644 index 00000000..0a12996c Binary files /dev/null and b/static/img/usage/purchase/report/outstanding-purchase-document-listing-group-sort-by.png differ diff --git a/static/img/usage/purchase/report/outstanding-purchase-document-listing-print-outstanding-item-fulfilled-item.png b/static/img/usage/purchase/report/outstanding-purchase-document-listing-print-outstanding-item-fulfilled-item.png new file mode 100644 index 00000000..d08445ad Binary files /dev/null and b/static/img/usage/purchase/report/outstanding-purchase-document-listing-print-outstanding-item-fulfilled-item.png differ diff --git a/static/img/usage/purchase/report/outstanding-purchase-document-listing-report.png b/static/img/usage/purchase/report/outstanding-purchase-document-listing-report.png new file mode 100644 index 00000000..e096266a Binary files /dev/null and b/static/img/usage/purchase/report/outstanding-purchase-document-listing-report.png differ diff --git a/static/img/usage/purchase/report/outstanding-purchase-document-listing-select-report.png b/static/img/usage/purchase/report/outstanding-purchase-document-listing-select-report.png new file mode 100644 index 00000000..4c8a7b06 Binary files /dev/null and b/static/img/usage/purchase/report/outstanding-purchase-document-listing-select-report.png differ diff --git a/static/img/usage/purchase/report/outstanding-purchase-document-listing.png b/static/img/usage/purchase/report/outstanding-purchase-document-listing.png new file mode 100644 index 00000000..89476c6f Binary files /dev/null and b/static/img/usage/purchase/report/outstanding-purchase-document-listing.png differ diff --git a/static/img/usage/purchase/report/purchase-analysis-by-document-apply.png b/static/img/usage/purchase/report/purchase-analysis-by-document-apply.png new file mode 100644 index 00000000..e3346829 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-analysis-by-document-apply.png differ diff --git a/static/img/usage/purchase/report/purchase-analysis-by-document-filter.png b/static/img/usage/purchase/report/purchase-analysis-by-document-filter.png new file mode 100644 index 00000000..74ca4d49 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-analysis-by-document-filter.png differ diff --git a/static/img/usage/purchase/report/purchase-analysis-by-document-group-sort-by.png b/static/img/usage/purchase/report/purchase-analysis-by-document-group-sort-by.png new file mode 100644 index 00000000..cd7b7571 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-analysis-by-document-group-sort-by.png differ diff --git a/static/img/usage/purchase/report/purchase-analysis-by-document-report.png b/static/img/usage/purchase/report/purchase-analysis-by-document-report.png new file mode 100644 index 00000000..91081537 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-analysis-by-document-report.png differ diff --git a/static/img/usage/purchase/report/purchase-analysis-by-document-select-document.png b/static/img/usage/purchase/report/purchase-analysis-by-document-select-document.png new file mode 100644 index 00000000..2ac4e260 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-analysis-by-document-select-document.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing-apply.png b/static/img/usage/purchase/report/purchase-document-listing-apply.png new file mode 100644 index 00000000..c9576891 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing-apply.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing-group-sort-by-2.png b/static/img/usage/purchase/report/purchase-document-listing-group-sort-by-2.png new file mode 100644 index 00000000..c4299cdb Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing-group-sort-by-2.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing-group-sort-by-report.png b/static/img/usage/purchase/report/purchase-document-listing-group-sort-by-report.png new file mode 100644 index 00000000..fa112d83 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing-group-sort-by-report.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing-group-sort-by-select-report.png b/static/img/usage/purchase/report/purchase-document-listing-group-sort-by-select-report.png new file mode 100644 index 00000000..7133b0f6 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing-group-sort-by-select-report.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing-group-sort-by.png b/static/img/usage/purchase/report/purchase-document-listing-group-sort-by.png new file mode 100644 index 00000000..b6602d5f Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing-group-sort-by.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing-print-document-style-2.png b/static/img/usage/purchase/report/purchase-document-listing-print-document-style-2.png new file mode 100644 index 00000000..56261602 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing-print-document-style-2.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing-print-document-style.png b/static/img/usage/purchase/report/purchase-document-listing-print-document-style.png new file mode 100644 index 00000000..ddb9d782 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing-print-document-style.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing-report.png b/static/img/usage/purchase/report/purchase-document-listing-report.png new file mode 100644 index 00000000..0c252c72 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing-report.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing-select-report.png b/static/img/usage/purchase/report/purchase-document-listing-select-report.png new file mode 100644 index 00000000..14495b2f Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing-select-report.png differ diff --git a/static/img/usage/purchase/report/purchase-document-listing.png b/static/img/usage/purchase/report/purchase-document-listing.png new file mode 100644 index 00000000..2380add3 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-document-listing.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-apply.png b/static/img/usage/purchase/report/purchase-price-history-apply.png new file mode 100644 index 00000000..51a4227a Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-apply.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-example.png b/static/img/usage/purchase/report/purchase-price-history-example.png new file mode 100644 index 00000000..34612a9c Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-example.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-group-sort-by-report.png b/static/img/usage/purchase/report/purchase-price-history-group-sort-by-report.png new file mode 100644 index 00000000..8425a7dc Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-group-sort-by-report.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-group-sort-by-select-report.png b/static/img/usage/purchase/report/purchase-price-history-group-sort-by-select-report.png new file mode 100644 index 00000000..657904ef Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-group-sort-by-select-report.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-group-sort-by.png b/static/img/usage/purchase/report/purchase-price-history-group-sort-by.png new file mode 100644 index 00000000..ce5e8a31 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-group-sort-by.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-price-book.png b/static/img/usage/purchase/report/purchase-price-history-price-book.png new file mode 100644 index 00000000..adbbee1d Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-price-book.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-price-movement.png b/static/img/usage/purchase/report/purchase-price-history-price-movement.png new file mode 100644 index 00000000..1de81470 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-price-movement.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-price-qty-breakdown.png b/static/img/usage/purchase/report/purchase-price-history-price-qty-breakdown.png new file mode 100644 index 00000000..0a913f13 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-price-qty-breakdown.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-report.png b/static/img/usage/purchase/report/purchase-price-history-report.png new file mode 100644 index 00000000..a253dfc1 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-report.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-select-report.png b/static/img/usage/purchase/report/purchase-price-history-select-report.png new file mode 100644 index 00000000..dd2affcc Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-select-report.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history-set-records-number.png b/static/img/usage/purchase/report/purchase-price-history-set-records-number.png new file mode 100644 index 00000000..250ebe13 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history-set-records-number.png differ diff --git a/static/img/usage/purchase/report/purchase-price-history.png b/static/img/usage/purchase/report/purchase-price-history.png new file mode 100644 index 00000000..cb30a656 Binary files /dev/null and b/static/img/usage/purchase/report/purchase-price-history.png differ diff --git a/static/img/usage/purchase/report/yearly-purchase-analysis-amount-quantity.png b/static/img/usage/purchase/report/yearly-purchase-analysis-amount-quantity.png new file mode 100644 index 00000000..8e513ac1 Binary files /dev/null and b/static/img/usage/purchase/report/yearly-purchase-analysis-amount-quantity.png differ diff --git a/static/img/usage/purchase/report/yearly-purchase-analysis-amount-report.png b/static/img/usage/purchase/report/yearly-purchase-analysis-amount-report.png new file mode 100644 index 00000000..cdd14f5c Binary files /dev/null and b/static/img/usage/purchase/report/yearly-purchase-analysis-amount-report.png differ diff --git a/static/img/usage/purchase/report/yearly-purchase-analysis-apply.png b/static/img/usage/purchase/report/yearly-purchase-analysis-apply.png new file mode 100644 index 00000000..1eb202dc Binary files /dev/null and b/static/img/usage/purchase/report/yearly-purchase-analysis-apply.png differ diff --git a/static/img/usage/purchase/report/yearly-purchase-analysis-filter.png b/static/img/usage/purchase/report/yearly-purchase-analysis-filter.png new file mode 100644 index 00000000..4ecab0c9 Binary files /dev/null and b/static/img/usage/purchase/report/yearly-purchase-analysis-filter.png differ diff --git a/static/img/usage/purchase/report/yearly-purchase-analysis-qty-report.png b/static/img/usage/purchase/report/yearly-purchase-analysis-qty-report.png new file mode 100644 index 00000000..b8bf19be Binary files /dev/null and b/static/img/usage/purchase/report/yearly-purchase-analysis-qty-report.png differ diff --git a/static/img/usage/purchase/report/yearly-purchase-analysis-sort-group-by.png b/static/img/usage/purchase/report/yearly-purchase-analysis-sort-group-by.png new file mode 100644 index 00000000..bedaed7f Binary files /dev/null and b/static/img/usage/purchase/report/yearly-purchase-analysis-sort-group-by.png differ diff --git a/static/img/sales/cash-drawer-kick-out/1.png b/static/img/usage/sales/sales-faq/cash-drawer-kick-out/barcode-direct-kick-out.png similarity index 100% rename from static/img/sales/cash-drawer-kick-out/1.png rename to static/img/usage/sales/sales-faq/cash-drawer-kick-out/barcode-direct-kick-out.png diff --git a/static/img/sales/cash-drawer-kick-out/2.png b/static/img/usage/sales/sales-faq/cash-drawer-kick-out/barcode-printer-kick-out.png similarity index 100% rename from static/img/sales/cash-drawer-kick-out/2.png rename to static/img/usage/sales/sales-faq/cash-drawer-kick-out/barcode-printer-kick-out.png diff --git a/static/img/usage/sales/sales-faq/error-msg-sales-price-history/sales-price-history-issue.jpg b/static/img/usage/sales/sales-faq/error-msg-sales-price-history/sales-price-history-issue.jpg new file mode 100644 index 00000000..2b794a21 Binary files /dev/null and b/static/img/usage/sales/sales-faq/error-msg-sales-price-history/sales-price-history-issue.jpg differ diff --git a/static/img/usage/sales/sales-faq/error-msg-sales-price-history/sales-price-history-solution.jpg b/static/img/usage/sales/sales-faq/error-msg-sales-price-history/sales-price-history-solution.jpg new file mode 100644 index 00000000..c1e6e5ca Binary files /dev/null and b/static/img/usage/sales/sales-faq/error-msg-sales-price-history/sales-price-history-solution.jpg differ diff --git a/static/img/getting-started/user-guide/38.png b/static/img/usage/sales/sales-guide/cash-sales-1.png similarity index 100% rename from static/img/getting-started/user-guide/38.png rename to static/img/usage/sales/sales-guide/cash-sales-1.png diff --git a/static/img/getting-started/user-guide/35.png b/static/img/usage/sales/sales-guide/document-transfer.png similarity index 100% rename from static/img/getting-started/user-guide/35.png rename to static/img/usage/sales/sales-guide/document-transfer.png diff --git a/static/img/getting-started/user-guide/39.png b/static/img/usage/sales/sales-guide/payment-received.png similarity index 100% rename from static/img/getting-started/user-guide/39.png rename to static/img/usage/sales/sales-guide/payment-received.png diff --git a/static/img/getting-started/user-guide/34.png b/static/img/usage/sales/sales-guide/preview-export.png similarity index 100% rename from static/img/getting-started/user-guide/34.png rename to static/img/usage/sales/sales-guide/preview-export.png diff --git a/static/img/getting-started/user-guide/33.png b/static/img/usage/sales/sales-guide/profit-estimator.png similarity index 100% rename from static/img/getting-started/user-guide/33.png rename to static/img/usage/sales/sales-guide/profit-estimator.png diff --git a/static/img/usage/sales/sales-guide/quotation-attachment.png b/static/img/usage/sales/sales-guide/quotation-attachment.png new file mode 100644 index 00000000..a629cfc2 Binary files /dev/null and b/static/img/usage/sales/sales-guide/quotation-attachment.png differ diff --git a/static/img/usage/sales/sales-guide/quotation-note.png b/static/img/usage/sales/sales-guide/quotation-note.png new file mode 100644 index 00000000..95f1badd Binary files /dev/null and b/static/img/usage/sales/sales-guide/quotation-note.png differ diff --git a/static/img/usage/sales/sales-guide/quotation-project.png b/static/img/usage/sales/sales-guide/quotation-project.png new file mode 100644 index 00000000..a435b4d4 Binary files /dev/null and b/static/img/usage/sales/sales-guide/quotation-project.png differ diff --git a/static/img/getting-started/user-guide/41.png b/static/img/usage/sales/sales-guide/sales-cancelled-note-1.png similarity index 100% rename from static/img/getting-started/user-guide/41.png rename to static/img/usage/sales/sales-guide/sales-cancelled-note-1.png diff --git a/static/img/getting-started/user-guide/41b.png b/static/img/usage/sales/sales-guide/sales-cancelled-note-2.png similarity index 100% rename from static/img/getting-started/user-guide/41b.png rename to static/img/usage/sales/sales-guide/sales-cancelled-note-2.png diff --git a/static/img/getting-started/user-guide/40.png b/static/img/usage/sales/sales-guide/sales-credit-note.png similarity index 100% rename from static/img/getting-started/user-guide/40.png rename to static/img/usage/sales/sales-guide/sales-credit-note.png diff --git a/static/img/getting-started/user-guide/32.png b/static/img/usage/sales/sales-guide/sales-work-flow.png similarity index 100% rename from static/img/getting-started/user-guide/32.png rename to static/img/usage/sales/sales-guide/sales-work-flow.png diff --git a/static/img/getting-started/user-guide/36.png b/static/img/usage/sales/sales-guide/show-double-entry-1.png similarity index 100% rename from static/img/getting-started/user-guide/36.png rename to static/img/usage/sales/sales-guide/show-double-entry-1.png diff --git a/static/img/getting-started/user-guide/37.png b/static/img/usage/sales/sales-guide/show-double-entry-2.png similarity index 100% rename from static/img/getting-started/user-guide/37.png rename to static/img/usage/sales/sales-guide/show-double-entry-2.png diff --git a/static/img/getting-started/user-guide/88.png b/static/img/usage/sales/sales-reports/batch-printing-invoices.png similarity index 100% rename from static/img/getting-started/user-guide/88.png rename to static/img/usage/sales/sales-reports/batch-printing-invoices.png diff --git a/static/img/getting-started/user-guide/87.png b/static/img/usage/sales/sales-reports/export-report-into-excel.png similarity index 100% rename from static/img/getting-started/user-guide/87.png rename to static/img/usage/sales/sales-reports/export-report-into-excel.png diff --git a/static/img/getting-started/user-guide/90.png b/static/img/usage/sales/sales-reports/outstanding-sales-doc-listing-preview.png similarity index 100% rename from static/img/getting-started/user-guide/90.png rename to static/img/usage/sales/sales-reports/outstanding-sales-doc-listing-preview.png diff --git a/static/img/getting-started/user-guide/89.png b/static/img/usage/sales/sales-reports/outstanding-sales-doc-listing.png similarity index 100% rename from static/img/getting-started/user-guide/89.png rename to static/img/usage/sales/sales-reports/outstanding-sales-doc-listing.png diff --git a/static/img/getting-started/user-guide/86.png b/static/img/usage/sales/sales-reports/sales-document-listing.png similarity index 100% rename from static/img/getting-started/user-guide/86.png rename to static/img/usage/sales/sales-reports/sales-document-listing.png diff --git a/static/img/usage/stock/stock-faq/barcode/barcode-printer-setting.png b/static/img/usage/stock/stock-faq/barcode/barcode-printer-setting.png new file mode 100644 index 00000000..4501d6b6 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/barcode-printer-setting.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/barcode-printer-setting1.png b/static/img/usage/stock/stock-faq/barcode/barcode-printer-setting1.png new file mode 100644 index 00000000..5ff3899a Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/barcode-printer-setting1.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/barcode-setting.png b/static/img/usage/stock/stock-faq/barcode/barcode-setting.png new file mode 100644 index 00000000..daf3aba0 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/barcode-setting.png differ diff --git a/static/img/stock/barcode/1.png b/static/img/usage/stock/stock-faq/barcode/barcode-setup.png similarity index 100% rename from static/img/stock/barcode/1.png rename to static/img/usage/stock/stock-faq/barcode/barcode-setup.png diff --git a/static/img/stock/barcode/2.png b/static/img/usage/stock/stock-faq/barcode/barcode-setup1.png similarity index 100% rename from static/img/stock/barcode/2.png rename to static/img/usage/stock/stock-faq/barcode/barcode-setup1.png diff --git a/static/img/stock/barcode/3.png b/static/img/usage/stock/stock-faq/barcode/barcode-setup2.png similarity index 100% rename from static/img/stock/barcode/3.png rename to static/img/usage/stock/stock-faq/barcode/barcode-setup2.png diff --git a/static/img/stock/barcode/4.png b/static/img/usage/stock/stock-faq/barcode/barcode-setup3.png similarity index 100% rename from static/img/stock/barcode/4.png rename to static/img/usage/stock/stock-faq/barcode/barcode-setup3.png diff --git a/static/img/stock/barcode/5.png b/static/img/usage/stock/stock-faq/barcode/barcode-setup4.png similarity index 100% rename from static/img/stock/barcode/5.png rename to static/img/usage/stock/stock-faq/barcode/barcode-setup4.png diff --git a/static/img/stock/barcode/6.png b/static/img/usage/stock/stock-faq/barcode/barcode-setup5.png similarity index 100% rename from static/img/stock/barcode/6.png rename to static/img/usage/stock/stock-faq/barcode/barcode-setup5.png diff --git a/static/img/usage/stock/stock-faq/barcode/cash-drawer.png b/static/img/usage/stock/stock-faq/barcode/cash-drawer.png new file mode 100644 index 00000000..9ea88069 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/cash-drawer.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/item-barcode-listing.png b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing.png new file mode 100644 index 00000000..e2f898db Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/item-barcode-listing1.png b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing1.png new file mode 100644 index 00000000..83466b48 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing1.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/item-barcode-listing2.png b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing2.png new file mode 100644 index 00000000..3ef4b7a0 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing2.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/item-barcode-listing3.png b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing3.png new file mode 100644 index 00000000..2ad5ac01 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing3.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/item-barcode-listing4.png b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing4.png new file mode 100644 index 00000000..96630233 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing4.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/item-barcode-listing5.png b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing5.png new file mode 100644 index 00000000..4e6206eb Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing5.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/item-barcode-listing6.png b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing6.png new file mode 100644 index 00000000..8aca24c4 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing6.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/item-barcode-listing7.png b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing7.png new file mode 100644 index 00000000..82dd0109 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/item-barcode-listing7.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/preview-barcode-label.png b/static/img/usage/stock/stock-faq/barcode/preview-barcode-label.png new file mode 100644 index 00000000..82dd0109 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/preview-barcode-label.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/print-barcode-label.png b/static/img/usage/stock/stock-faq/barcode/print-barcode-label.png new file mode 100644 index 00000000..d45b8755 Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/print-barcode-label.png differ diff --git a/static/img/usage/stock/stock-faq/barcode/windows-printer.png b/static/img/usage/stock/stock-faq/barcode/windows-printer.png new file mode 100644 index 00000000..ab5f289b Binary files /dev/null and b/static/img/usage/stock/stock-faq/barcode/windows-printer.png differ diff --git a/static/img/stock/batch-edit-value-stock-item/1.png b/static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value.png similarity index 100% rename from static/img/stock/batch-edit-value-stock-item/1.png rename to static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value.png diff --git a/static/img/stock/batch-edit-value-stock-item/2.png b/static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value1.png similarity index 100% rename from static/img/stock/batch-edit-value-stock-item/2.png rename to static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value1.png diff --git a/static/img/stock/batch-edit-value-stock-item/3.png b/static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value2.png similarity index 100% rename from static/img/stock/batch-edit-value-stock-item/3.png rename to static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value2.png diff --git a/static/img/stock/batch-edit-value-stock-item/4.png b/static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value3.png similarity index 100% rename from static/img/stock/batch-edit-value-stock-item/4.png rename to static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value3.png diff --git a/static/img/stock/batch-edit-value-stock-item/5.png b/static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value4.png similarity index 100% rename from static/img/stock/batch-edit-value-stock-item/5.png rename to static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value4.png diff --git a/static/img/stock/batch-edit-value-stock-item/6.png b/static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value5.png similarity index 100% rename from static/img/stock/batch-edit-value-stock-item/6.png rename to static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value5.png diff --git a/static/img/stock/batch-edit-value-stock-item/7.png b/static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value6.png similarity index 100% rename from static/img/stock/batch-edit-value-stock-item/7.png rename to static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value6.png diff --git a/static/img/stock/batch-edit-value-stock-item/8.png b/static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value7.png similarity index 100% rename from static/img/stock/batch-edit-value-stock-item/8.png rename to static/img/usage/stock/stock-faq/batch-edit-value-stock-item/batch-edit-value7.png diff --git a/static/img/stock/change-barcode-label-size/10.png b/static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size.png similarity index 100% rename from static/img/stock/change-barcode-label-size/10.png rename to static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size.png diff --git a/static/img/stock/change-barcode-label-size/11.png b/static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size1.png similarity index 100% rename from static/img/stock/change-barcode-label-size/11.png rename to static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size1.png diff --git a/static/img/stock/change-barcode-label-size/12.png b/static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size2.png similarity index 100% rename from static/img/stock/change-barcode-label-size/12.png rename to static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size2.png diff --git a/static/img/stock/change-barcode-label-size/13.png b/static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size3.png similarity index 100% rename from static/img/stock/change-barcode-label-size/13.png rename to static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size3.png diff --git a/static/img/stock/change-barcode-label-size/14.png b/static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size4.png similarity index 100% rename from static/img/stock/change-barcode-label-size/14.png rename to static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size4.png diff --git a/static/img/stock/change-barcode-label-size/15.png b/static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size5.png similarity index 100% rename from static/img/stock/change-barcode-label-size/15.png rename to static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size5.png diff --git a/static/img/stock/change-barcode-label-size/16.png b/static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size6.png similarity index 100% rename from static/img/stock/change-barcode-label-size/16.png rename to static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size6.png diff --git a/static/img/stock/change-barcode-label-size/17.png b/static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size7.png similarity index 100% rename from static/img/stock/change-barcode-label-size/17.png rename to static/img/usage/stock/stock-faq/change-barcode-label-size/barcode-laebl-size7.png diff --git a/static/img/stock/costing-method/1.png b/static/img/usage/stock/stock-faq/costing-method/costing-method-setup.png similarity index 100% rename from static/img/stock/costing-method/1.png rename to static/img/usage/stock/stock-faq/costing-method/costing-method-setup.png diff --git a/static/img/stock/costing-method/2.png b/static/img/usage/stock/stock-faq/costing-method/costing-method-setup1.png similarity index 100% rename from static/img/stock/costing-method/2.png rename to static/img/usage/stock/stock-faq/costing-method/costing-method-setup1.png diff --git a/static/img/stock/multi-location/4.png b/static/img/usage/stock/stock-faq/multi-location/consignment.png similarity index 100% rename from static/img/stock/multi-location/4.png rename to static/img/usage/stock/stock-faq/multi-location/consignment.png diff --git a/static/img/stock/multi-location/5.png b/static/img/usage/stock/stock-faq/multi-location/consignment1.png similarity index 100% rename from static/img/stock/multi-location/5.png rename to static/img/usage/stock/stock-faq/multi-location/consignment1.png diff --git a/static/img/stock/multi-location/6.png b/static/img/usage/stock/stock-faq/multi-location/consignment2.png similarity index 100% rename from static/img/stock/multi-location/6.png rename to static/img/usage/stock/stock-faq/multi-location/consignment2.png diff --git a/static/img/stock/multi-location/1.png b/static/img/usage/stock/stock-faq/multi-location/multiple-warehouse.png similarity index 100% rename from static/img/stock/multi-location/1.png rename to static/img/usage/stock/stock-faq/multi-location/multiple-warehouse.png diff --git a/static/img/stock/multi-location/2.png b/static/img/usage/stock/stock-faq/multi-location/multiple-warehouse1.png similarity index 100% rename from static/img/stock/multi-location/2.png rename to static/img/usage/stock/stock-faq/multi-location/multiple-warehouse1.png diff --git a/static/img/stock/multi-location/3.png b/static/img/usage/stock/stock-faq/multi-location/multiple-warehouse2.png similarity index 100% rename from static/img/stock/multi-location/3.png rename to static/img/usage/stock/stock-faq/multi-location/multiple-warehouse2.png diff --git a/static/img/stock/stock-adjustment-take/1.png b/static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take.png similarity index 100% rename from static/img/stock/stock-adjustment-take/1.png rename to static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take.png diff --git a/static/img/stock/stock-adjustment-take/2.png b/static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take1.png similarity index 100% rename from static/img/stock/stock-adjustment-take/2.png rename to static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take1.png diff --git a/static/img/stock/stock-adjustment-take/3.png b/static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take2.png similarity index 100% rename from static/img/stock/stock-adjustment-take/3.png rename to static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take2.png diff --git a/static/img/stock/stock-adjustment-take/4.png b/static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take3.png similarity index 100% rename from static/img/stock/stock-adjustment-take/4.png rename to static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take3.png diff --git a/static/img/stock/stock-adjustment-take/5.png b/static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take4.png similarity index 100% rename from static/img/stock/stock-adjustment-take/5.png rename to static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take4.png diff --git a/static/img/stock/stock-adjustment-take/6.png b/static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take5.png similarity index 100% rename from static/img/stock/stock-adjustment-take/6.png rename to static/img/usage/stock/stock-faq/stock-adjustment-take/stoke-take5.png diff --git a/static/img/stock/stock-global-price-change/1.png b/static/img/usage/stock/stock-faq/stock-global-price-change/1.png similarity index 100% rename from static/img/stock/stock-global-price-change/1.png rename to static/img/usage/stock/stock-faq/stock-global-price-change/1.png diff --git a/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb.png b/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb.png new file mode 100644 index 00000000..04ce16db Binary files /dev/null and b/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb.png differ diff --git a/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb1.png b/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb1.png new file mode 100644 index 00000000..6cadb6f7 Binary files /dev/null and b/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb1.png differ diff --git a/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb2.png b/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb2.png new file mode 100644 index 00000000..0aa04e53 Binary files /dev/null and b/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb2.png differ diff --git a/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb3.png b/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb3.png new file mode 100644 index 00000000..a2af28aa Binary files /dev/null and b/static/img/usage/stock/stock-faq/stock-month-end-balance/update-gl-stock-value-smeb3.png differ diff --git a/static/img/stock/stock-price-tag/1.png b/static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup.png similarity index 100% rename from static/img/stock/stock-price-tag/1.png rename to static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup.png diff --git a/static/img/stock/stock-price-tag/2.png b/static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup1.png similarity index 100% rename from static/img/stock/stock-price-tag/2.png rename to static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup1.png diff --git a/static/img/stock/stock-price-tag/3.png b/static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup2.png similarity index 100% rename from static/img/stock/stock-price-tag/3.png rename to static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup2.png diff --git a/static/img/stock/stock-price-tag/4.png b/static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup3.png similarity index 100% rename from static/img/stock/stock-price-tag/4.png rename to static/img/usage/stock/stock-faq/stock-price-tag/price-tag-setup3.png diff --git a/static/img/stock/stock-reorder/3.png b/static/img/usage/stock/stock-faq/stock-reorder/check-reorder-lvl.png similarity index 100% rename from static/img/stock/stock-reorder/3.png rename to static/img/usage/stock/stock-faq/stock-reorder/check-reorder-lvl.png diff --git a/static/img/stock/stock-reorder/4.png b/static/img/usage/stock/stock-faq/stock-reorder/check-reorder-lvl1.png similarity index 100% rename from static/img/stock/stock-reorder/4.png rename to static/img/usage/stock/stock-faq/stock-reorder/check-reorder-lvl1.png diff --git a/static/img/stock/stock-reorder/1.png b/static/img/usage/stock/stock-faq/stock-reorder/reorder-lvl-qty.png similarity index 100% rename from static/img/stock/stock-reorder/1.png rename to static/img/usage/stock/stock-faq/stock-reorder/reorder-lvl-qty.png diff --git a/static/img/stock/stock-reorder/2.png b/static/img/usage/stock/stock-faq/stock-reorder/set-reorder-lvl.png similarity index 100% rename from static/img/stock/stock-reorder/2.png rename to static/img/usage/stock/stock-faq/stock-reorder/set-reorder-lvl.png diff --git a/static/img/stock/stock-serial-no/1.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup.png similarity index 100% rename from static/img/stock/stock-serial-no/1.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup.png diff --git a/static/img/stock/stock-serial-no/2.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup1.png similarity index 100% rename from static/img/stock/stock-serial-no/2.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup1.png diff --git a/static/img/stock/stock-serial-no/11.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup10.png similarity index 100% rename from static/img/stock/stock-serial-no/11.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup10.png diff --git a/static/img/stock/stock-serial-no/3.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup2.png similarity index 100% rename from static/img/stock/stock-serial-no/3.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup2.png diff --git a/static/img/stock/stock-serial-no/4.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup3.png similarity index 100% rename from static/img/stock/stock-serial-no/4.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup3.png diff --git a/static/img/stock/stock-serial-no/5.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup4.png similarity index 100% rename from static/img/stock/stock-serial-no/5.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup4.png diff --git a/static/img/stock/stock-serial-no/6.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup5.png similarity index 100% rename from static/img/stock/stock-serial-no/6.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup5.png diff --git a/static/img/stock/stock-serial-no/7.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup6.png similarity index 100% rename from static/img/stock/stock-serial-no/7.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup6.png diff --git a/static/img/stock/stock-serial-no/8.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup7.png similarity index 100% rename from static/img/stock/stock-serial-no/8.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup7.png diff --git a/static/img/stock/stock-serial-no/9.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup8.png similarity index 100% rename from static/img/stock/stock-serial-no/9.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup8.png diff --git a/static/img/stock/stock-serial-no/10.png b/static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup9.png similarity index 100% rename from static/img/stock/stock-serial-no/10.png rename to static/img/usage/stock/stock-faq/stock-serial-no/serial-number-setup9.png diff --git a/static/img/usage/stock/stock-guide/mtn-batch.png b/static/img/usage/stock/stock-guide/mtn-batch.png new file mode 100644 index 00000000..ee33c21d Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-batch.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-batch1.png b/static/img/usage/stock/stock-guide/mtn-batch1.png new file mode 100644 index 00000000..4ba36d7a Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-batch1.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-batch2.png b/static/img/usage/stock/stock-guide/mtn-batch2.png new file mode 100644 index 00000000..c6db6da7 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-batch2.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-batch3.png b/static/img/usage/stock/stock-guide/mtn-batch3.png new file mode 100644 index 00000000..7537a219 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-batch3.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-batch4.png b/static/img/usage/stock/stock-guide/mtn-batch4.png new file mode 100644 index 00000000..02432507 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-batch4.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-batch5.png b/static/img/usage/stock/stock-guide/mtn-batch5.png new file mode 100644 index 00000000..02fe62fd Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-batch5.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-batch6.png b/static/img/usage/stock/stock-guide/mtn-batch6.png new file mode 100644 index 00000000..7537a219 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-batch6.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-batch7.png b/static/img/usage/stock/stock-guide/mtn-batch7.png new file mode 100644 index 00000000..02432507 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-batch7.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-batch8.png b/static/img/usage/stock/stock-guide/mtn-batch8.png new file mode 100644 index 00000000..65afd93e Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-batch8.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-matrix-profile.png b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile.png new file mode 100644 index 00000000..a0055f4c Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-matrix-profile1.png b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile1.png new file mode 100644 index 00000000..5eb60bd1 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile1.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-matrix-profile2.png b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile2.png new file mode 100644 index 00000000..7068d418 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile2.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-matrix-profile3.png b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile3.png new file mode 100644 index 00000000..cdf06cbe Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile3.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-matrix-profile4.png b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile4.png new file mode 100644 index 00000000..7b05342a Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile4.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-matrix-profile5.png b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile5.png new file mode 100644 index 00000000..e6ed41a8 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile5.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-matrix-profile6.png b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile6.png new file mode 100644 index 00000000..92fcd987 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile6.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-matrix-profile7.png b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile7.png new file mode 100644 index 00000000..63ef0d42 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-matrix-profile7.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-template.png b/static/img/usage/stock/stock-guide/mtn-item-template.png new file mode 100644 index 00000000..e69c5830 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-template.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-template1.png b/static/img/usage/stock/stock-guide/mtn-item-template1.png new file mode 100644 index 00000000..35fcbbff Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-template1.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-template2.png b/static/img/usage/stock/stock-guide/mtn-item-template2.png new file mode 100644 index 00000000..ba568699 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-template2.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-item-template3.png b/static/img/usage/stock/stock-guide/mtn-item-template3.png new file mode 100644 index 00000000..f830443b Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-item-template3.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-location.png b/static/img/usage/stock/stock-guide/mtn-location.png new file mode 100644 index 00000000..b05b67ef Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-location.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-location1.png b/static/img/usage/stock/stock-guide/mtn-location1.png new file mode 100644 index 00000000..33a67980 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-location1.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-category-template.png b/static/img/usage/stock/stock-guide/mtn-stock-category-template.png new file mode 100644 index 00000000..4e681031 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-category-template.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-category-template1.png b/static/img/usage/stock/stock-guide/mtn-stock-category-template1.png new file mode 100644 index 00000000..2c9424a3 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-category-template1.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-category-template2.png b/static/img/usage/stock/stock-guide/mtn-stock-category-template2.png new file mode 100644 index 00000000..6c003fc6 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-category-template2.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-category-template3.png b/static/img/usage/stock/stock-guide/mtn-stock-category-template3.png new file mode 100644 index 00000000..8e2fba7b Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-category-template3.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-category-template4.png b/static/img/usage/stock/stock-guide/mtn-stock-category-template4.png new file mode 100644 index 00000000..8e2fba7b Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-category-template4.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-category-template5.png b/static/img/usage/stock/stock-guide/mtn-stock-category-template5.png new file mode 100644 index 00000000..1b321bd2 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-category-template5.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-category-template6.png b/static/img/usage/stock/stock-guide/mtn-stock-category-template6.png new file mode 100644 index 00000000..bffaf69c Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-category-template6.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-category.png b/static/img/usage/stock/stock-guide/mtn-stock-category.png new file mode 100644 index 00000000..e73dba3f Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-category.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-category1.png b/static/img/usage/stock/stock-guide/mtn-stock-category1.png new file mode 100644 index 00000000..db9e2161 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-category1.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-grp-list.png b/static/img/usage/stock/stock-guide/mtn-stock-grp-list.png new file mode 100644 index 00000000..687573d3 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-grp-list.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-grp.png b/static/img/usage/stock/stock-guide/mtn-stock-grp.png new file mode 100644 index 00000000..6fad5db4 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-grp.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-alternative.png b/static/img/usage/stock/stock-guide/mtn-stock-item-alternative.png new file mode 100644 index 00000000..fde3c11f Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-alternative.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-barcode.png b/static/img/usage/stock/stock-guide/mtn-stock-item-barcode.png new file mode 100644 index 00000000..4b2258fd Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-barcode.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-bom.png b/static/img/usage/stock/stock-guide/mtn-stock-item-bom.png new file mode 100644 index 00000000..58a31fd9 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-bom.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-category.png b/static/img/usage/stock/stock-guide/mtn-stock-item-category.png new file mode 100644 index 00000000..673fc60e Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-category.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-cust-item.png b/static/img/usage/stock/stock-guide/mtn-stock-item-cust-item.png new file mode 100644 index 00000000..39d5a4fc Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-cust-item.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-cust-price.png b/static/img/usage/stock/stock-guide/mtn-stock-item-cust-price.png new file mode 100644 index 00000000..4d8cecba Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-cust-price.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-list.png b/static/img/usage/stock/stock-guide/mtn-stock-item-list.png new file mode 100644 index 00000000..f1ad6793 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-list.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-main-header.png b/static/img/usage/stock/stock-guide/mtn-stock-item-main-header.png new file mode 100644 index 00000000..dde0737c Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-main-header.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-more-desc.png b/static/img/usage/stock/stock-guide/mtn-stock-item-more-desc.png new file mode 100644 index 00000000..ec208640 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-more-desc.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-more-desc1.png b/static/img/usage/stock/stock-guide/mtn-stock-item-more-desc1.png new file mode 100644 index 00000000..54751e88 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-more-desc1.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-note.png b/static/img/usage/stock/stock-guide/mtn-stock-item-note.png new file mode 100644 index 00000000..a963232e Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-note.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-opn-bal.png b/static/img/usage/stock/stock-guide/mtn-stock-item-opn-bal.png new file mode 100644 index 00000000..ce8a6a4d Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-opn-bal.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-supp-item.png b/static/img/usage/stock/stock-guide/mtn-stock-item-supp-item.png new file mode 100644 index 00000000..5beafb11 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-supp-item.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-supp-price.png b/static/img/usage/stock/stock-guide/mtn-stock-item-supp-price.png new file mode 100644 index 00000000..7caa1516 Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-supp-price.png differ diff --git a/static/img/usage/stock/stock-guide/mtn-stock-item-uom.png b/static/img/usage/stock/stock-guide/mtn-stock-item-uom.png new file mode 100644 index 00000000..d65f4e9b Binary files /dev/null and b/static/img/usage/stock/stock-guide/mtn-stock-item-uom.png differ diff --git a/static/img/usage/stock/stock-guide/stock-adjustment.png b/static/img/usage/stock/stock-guide/stock-adjustment.png new file mode 100644 index 00000000..3cf1fabd Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-adjustment.png differ diff --git a/static/img/usage/stock/stock-guide/stock-adjustment1.png b/static/img/usage/stock/stock-guide/stock-adjustment1.png new file mode 100644 index 00000000..7ef0bdeb Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-adjustment1.png differ diff --git a/static/img/usage/stock/stock-guide/stock-adjustment2.png b/static/img/usage/stock/stock-guide/stock-adjustment2.png new file mode 100644 index 00000000..b004875f Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-adjustment2.png differ diff --git a/static/img/usage/stock/stock-guide/stock-adjustment3.png b/static/img/usage/stock/stock-guide/stock-adjustment3.png new file mode 100644 index 00000000..b0624f27 Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-adjustment3.png differ diff --git a/static/img/usage/stock/stock-guide/stock-adjustment4.png b/static/img/usage/stock/stock-guide/stock-adjustment4.png new file mode 100644 index 00000000..4c37382c Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-adjustment4.png differ diff --git a/static/img/usage/stock/stock-guide/stock-adjustment5.png b/static/img/usage/stock/stock-guide/stock-adjustment5.png new file mode 100644 index 00000000..748e8873 Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-adjustment5.png differ diff --git a/static/img/usage/stock/stock-guide/stock-issue.png b/static/img/usage/stock/stock-guide/stock-issue.png new file mode 100644 index 00000000..a308be50 Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-issue.png differ diff --git a/static/img/usage/stock/stock-guide/stock-received.png b/static/img/usage/stock/stock-guide/stock-received.png new file mode 100644 index 00000000..69583413 Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-received.png differ diff --git a/static/img/usage/stock/stock-guide/stock-transfer.png b/static/img/usage/stock/stock-guide/stock-transfer.png new file mode 100644 index 00000000..c25ed4f3 Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-transfer.png differ diff --git a/static/img/usage/stock/stock-guide/stock-transfer1.png b/static/img/usage/stock/stock-guide/stock-transfer1.png new file mode 100644 index 00000000..9396170c Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-transfer1.png differ diff --git a/static/img/usage/stock/stock-guide/stock-transfer2.png b/static/img/usage/stock/stock-guide/stock-transfer2.png new file mode 100644 index 00000000..f6322fbf Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-transfer2.png differ diff --git a/static/img/usage/stock/stock-guide/stock-transfer3.png b/static/img/usage/stock/stock-guide/stock-transfer3.png new file mode 100644 index 00000000..e3cc2a28 Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-transfer3.png differ diff --git a/static/img/usage/stock/stock-guide/stock-transfer4.png b/static/img/usage/stock/stock-guide/stock-transfer4.png new file mode 100644 index 00000000..e3cc2a28 Binary files /dev/null and b/static/img/usage/stock/stock-guide/stock-transfer4.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-aging.png b/static/img/usage/stock/stock-report/print-stock-aging.png new file mode 100644 index 00000000..3e3361aa Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-aging.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-aging1.png b/static/img/usage/stock/stock-report/print-stock-aging1.png new file mode 100644 index 00000000..78478ae4 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-aging1.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-aging2.png b/static/img/usage/stock/stock-report/print-stock-aging2.png new file mode 100644 index 00000000..ba472ae3 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-aging2.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-aging3.png b/static/img/usage/stock/stock-report/print-stock-aging3.png new file mode 100644 index 00000000..cf5df5e9 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-aging3.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-aging4.png b/static/img/usage/stock/stock-report/print-stock-aging4.png new file mode 100644 index 00000000..92c079d4 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-aging4.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-aging5.png b/static/img/usage/stock/stock-report/print-stock-aging5.png new file mode 100644 index 00000000..45186929 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-aging5.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-analysis-by-document.png b/static/img/usage/stock/stock-report/print-stock-analysis-by-document.png new file mode 100644 index 00000000..f2597b49 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-analysis-by-document.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-analysis-by-document1.png b/static/img/usage/stock/stock-report/print-stock-analysis-by-document1.png new file mode 100644 index 00000000..b23908b9 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-analysis-by-document1.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-analysis-by-document2.png b/static/img/usage/stock/stock-report/print-stock-analysis-by-document2.png new file mode 100644 index 00000000..945dd4b1 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-analysis-by-document2.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-batch-expiry.png b/static/img/usage/stock/stock-report/print-stock-batch-expiry.png new file mode 100644 index 00000000..89b3bdd4 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-batch-expiry.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-batch-expiry1.png b/static/img/usage/stock/stock-report/print-stock-batch-expiry1.png new file mode 100644 index 00000000..90fce804 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-batch-expiry1.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-batch-expiry2.png b/static/img/usage/stock/stock-report/print-stock-batch-expiry2.png new file mode 100644 index 00000000..f147b652 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-batch-expiry2.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-batch-expiry3.png b/static/img/usage/stock/stock-report/print-stock-batch-expiry3.png new file mode 100644 index 00000000..7827962c Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-batch-expiry3.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-batch-expiry4.png b/static/img/usage/stock/stock-report/print-stock-batch-expiry4.png new file mode 100644 index 00000000..50389134 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-batch-expiry4.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-card.png b/static/img/usage/stock/stock-report/print-stock-card.png new file mode 100644 index 00000000..66e0ea13 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-card.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-card1.png b/static/img/usage/stock/stock-report/print-stock-card1.png new file mode 100644 index 00000000..707723bb Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-card1.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-card2.png b/static/img/usage/stock/stock-report/print-stock-card2.png new file mode 100644 index 00000000..2f93a61c Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-card2.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-document-listing.png b/static/img/usage/stock/stock-report/print-stock-document-listing.png new file mode 100644 index 00000000..e2dc6767 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-document-listing.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-document-listing1.png b/static/img/usage/stock/stock-report/print-stock-document-listing1.png new file mode 100644 index 00000000..500a5d10 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-document-listing1.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-document-listing2.png b/static/img/usage/stock/stock-report/print-stock-document-listing2.png new file mode 100644 index 00000000..a56bd319 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-document-listing2.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-document-listing3.png b/static/img/usage/stock/stock-report/print-stock-document-listing3.png new file mode 100644 index 00000000..ede5dfed Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-document-listing3.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-document-listing4.png b/static/img/usage/stock/stock-report/print-stock-document-listing4.png new file mode 100644 index 00000000..f218e773 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-document-listing4.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-document-listing5.png b/static/img/usage/stock/stock-report/print-stock-document-listing5.png new file mode 100644 index 00000000..748d68b6 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-document-listing5.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-document-listing6.png b/static/img/usage/stock/stock-report/print-stock-document-listing6.png new file mode 100644 index 00000000..07a52027 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-document-listing6.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-document-listing7.png b/static/img/usage/stock/stock-report/print-stock-document-listing7.png new file mode 100644 index 00000000..b96bbd06 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-document-listing7.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-document-listing8.png b/static/img/usage/stock/stock-report/print-stock-document-listing8.png new file mode 100644 index 00000000..216a66e3 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-document-listing8.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-month-end-balance.png b/static/img/usage/stock/stock-report/print-stock-month-end-balance.png new file mode 100644 index 00000000..3797e6ce Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-month-end-balance.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-month-end-balance1.png b/static/img/usage/stock/stock-report/print-stock-month-end-balance1.png new file mode 100644 index 00000000..e30c2f17 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-month-end-balance1.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-month-end-balance2.png b/static/img/usage/stock/stock-report/print-stock-month-end-balance2.png new file mode 100644 index 00000000..c56e6f39 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-month-end-balance2.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-month-end-balance3.png b/static/img/usage/stock/stock-report/print-stock-month-end-balance3.png new file mode 100644 index 00000000..31e178fa Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-month-end-balance3.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-reorder-advice.png b/static/img/usage/stock/stock-report/print-stock-reorder-advice.png new file mode 100644 index 00000000..25c10843 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-reorder-advice.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-reorder-advice1.png b/static/img/usage/stock/stock-report/print-stock-reorder-advice1.png new file mode 100644 index 00000000..d19255ab Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-reorder-advice1.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-reorder-advice2.png b/static/img/usage/stock/stock-report/print-stock-reorder-advice2.png new file mode 100644 index 00000000..1379ce61 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-reorder-advice2.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-reorder-advice3.png b/static/img/usage/stock/stock-report/print-stock-reorder-advice3.png new file mode 100644 index 00000000..9a67a77d Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-reorder-advice3.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-reorder-advice4.png b/static/img/usage/stock/stock-report/print-stock-reorder-advice4.png new file mode 100644 index 00000000..09e87423 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-reorder-advice4.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-reorder-advice5.png b/static/img/usage/stock/stock-report/print-stock-reorder-advice5.png new file mode 100644 index 00000000..fd7a9e3d Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-reorder-advice5.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-reorder-advice6.png b/static/img/usage/stock/stock-report/print-stock-reorder-advice6.png new file mode 100644 index 00000000..17446272 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-reorder-advice6.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-conflict.png b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict.png new file mode 100644 index 00000000..f53a726a Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-conflict1.png b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict1.png new file mode 100644 index 00000000..7a6dfa91 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict1.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-conflict2.png b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict2.png new file mode 100644 index 00000000..39807264 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict2.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-conflict3.png b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict3.png new file mode 100644 index 00000000..a2294ff3 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict3.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-conflict4.png b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict4.png new file mode 100644 index 00000000..873bb502 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict4.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-conflict5.png b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict5.png new file mode 100644 index 00000000..109d3646 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict5.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-conflict6.png b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict6.png new file mode 100644 index 00000000..4b2fc768 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict6.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-conflict7.png b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict7.png new file mode 100644 index 00000000..c2adb5ba Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict7.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-conflict8.png b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict8.png new file mode 100644 index 00000000..44562699 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-conflict8.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding.png b/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding.png new file mode 100644 index 00000000..2045d768 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding1.png b/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding1.png new file mode 100644 index 00000000..c6892c3c Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding1.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding2.png b/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding2.png new file mode 100644 index 00000000..adf65bb1 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding2.png differ diff --git a/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding3.png b/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding3.png new file mode 100644 index 00000000..0f655035 Binary files /dev/null and b/static/img/usage/stock/stock-report/print-stock-serial-number-outstanding3.png differ diff --git a/static/img/usage/stock/stock-report/stock-physical-worksheet.png b/static/img/usage/stock/stock-report/stock-physical-worksheet.png new file mode 100644 index 00000000..3cf1fabd Binary files /dev/null and b/static/img/usage/stock/stock-report/stock-physical-worksheet.png differ diff --git a/static/img/usage/stock/stock-report/stock-physical-worksheet1.png b/static/img/usage/stock/stock-report/stock-physical-worksheet1.png new file mode 100644 index 00000000..7ef0bdeb Binary files /dev/null and b/static/img/usage/stock/stock-report/stock-physical-worksheet1.png differ diff --git a/static/img/usage/stock/stock-report/stock-physical-worksheet2.png b/static/img/usage/stock/stock-report/stock-physical-worksheet2.png new file mode 100644 index 00000000..b004875f Binary files /dev/null and b/static/img/usage/stock/stock-report/stock-physical-worksheet2.png differ diff --git a/static/img/usage/stock/stock-report/stock-physical-worksheet3.png b/static/img/usage/stock/stock-report/stock-physical-worksheet3.png new file mode 100644 index 00000000..b0624f27 Binary files /dev/null and b/static/img/usage/stock/stock-report/stock-physical-worksheet3.png differ diff --git a/static/img/usage/stock/stock-report/stock-physical-worksheet4.png b/static/img/usage/stock/stock-report/stock-physical-worksheet4.png new file mode 100644 index 00000000..4c37382c Binary files /dev/null and b/static/img/usage/stock/stock-report/stock-physical-worksheet4.png differ diff --git a/static/img/usage/stock/stock-report/stock-physical-worksheet5.png b/static/img/usage/stock/stock-report/stock-physical-worksheet5.png new file mode 100644 index 00000000..748e8873 Binary files /dev/null and b/static/img/usage/stock/stock-report/stock-physical-worksheet5.png differ diff --git a/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-1.jpg b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-1.jpg new file mode 100644 index 00000000..19945a79 Binary files /dev/null and b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-1.jpg differ diff --git a/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-2.jpg b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-2.jpg new file mode 100644 index 00000000..196335c8 Binary files /dev/null and b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-2.jpg differ diff --git a/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-3.jpg b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-3.jpg new file mode 100644 index 00000000..44727877 Binary files /dev/null and b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-3.jpg differ diff --git a/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-4.jpg b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-4.jpg new file mode 100644 index 00000000..95523705 Binary files /dev/null and b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-4.jpg differ diff --git a/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-5.jpg b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-5.jpg new file mode 100644 index 00000000..85a6390d Binary files /dev/null and b/static/img/usage/supplier/supplier-faq-images/supplier-faq-add-ref2-5.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-bank-file-format.png b/static/img/usage/supplier/supplier-guide-images/giro-bank-file-format.png new file mode 100644 index 00000000..865e89bb Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-bank-file-format.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-payment-method-1.png b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-1.png new file mode 100644 index 00000000..d579a887 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-1.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-payment-method-2.png b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-2.png new file mode 100644 index 00000000..60e5b2ea Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-2.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-payment-method-3.png b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-3.png new file mode 100644 index 00000000..a1893499 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-3.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-payment-method-4.png b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-4.png new file mode 100644 index 00000000..c451c041 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-4.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-payment-method-5.png b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-5.png new file mode 100644 index 00000000..f6a54707 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-payment-method-5.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-print-supplier-document-listing-1.png b/static/img/usage/supplier/supplier-guide-images/giro-print-supplier-document-listing-1.png new file mode 100644 index 00000000..c4a02d58 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-print-supplier-document-listing-1.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-print-supplier-document-listing-2.png b/static/img/usage/supplier/supplier-guide-images/giro-print-supplier-document-listing-2.png new file mode 100644 index 00000000..70ad98d9 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-print-supplier-document-listing-2.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-supplier-bank-account-1.png b/static/img/usage/supplier/supplier-guide-images/giro-supplier-bank-account-1.png new file mode 100644 index 00000000..4c803bbb Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-supplier-bank-account-1.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-supplier-payment-method-1.png b/static/img/usage/supplier/supplier-guide-images/giro-supplier-payment-method-1.png new file mode 100644 index 00000000..420e7b59 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-supplier-payment-method-1.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/giro-supplier-payment-method-2.png b/static/img/usage/supplier/supplier-guide-images/giro-supplier-payment-method-2.png new file mode 100644 index 00000000..008c91d1 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/giro-supplier-payment-method-2.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/interbank-giro-requirement.png b/static/img/usage/supplier/supplier-guide-images/interbank-giro-requirement.png new file mode 100644 index 00000000..1497672c Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/interbank-giro-requirement.png differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-1.jpg new file mode 100644 index 00000000..a5e86dbe Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-bank-account-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-bank-account-1.jpg new file mode 100644 index 00000000..491ac3f3 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-bank-account-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-delete-supplier-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-delete-supplier-1.jpg new file mode 100644 index 00000000..f8dae673 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-delete-supplier-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-edit-supplier-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-edit-supplier-1.jpg new file mode 100644 index 00000000..b024fe7b Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-edit-supplier-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-general-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-general-1.jpg new file mode 100644 index 00000000..e6107bb3 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-general-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-new-supplier-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-new-supplier-1.jpg new file mode 100644 index 00000000..389e0b48 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-new-supplier-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-new-supplier-2.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-new-supplier-2.jpg new file mode 100644 index 00000000..068ffc0b Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-new-supplier-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-note-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-note-1.jpg new file mode 100644 index 00000000..5de48c1d Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-note-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-save-supplier-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-save-supplier-1.jpg new file mode 100644 index 00000000..b7c27da0 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-save-supplier-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-1.jpg new file mode 100644 index 00000000..0b5670fa Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-2.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-2.jpg new file mode 100644 index 00000000..61b64aba Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-3.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-3.jpg new file mode 100644 index 00000000..7916cf83 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-supplier-code-format-3.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/maintain-supplier-tax-1.jpg b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-tax-1.jpg new file mode 100644 index 00000000..85633403 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/maintain-supplier-tax-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-1.jpg new file mode 100644 index 00000000..3a9e041d Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-attachment-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-attachment-1.jpg new file mode 100644 index 00000000..a1c7b650 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-attachment-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-attachment-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-attachment-2.jpg new file mode 100644 index 00000000..b81ef503 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-attachment-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-contra-account-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-contra-account-1.jpg new file mode 100644 index 00000000..86917736 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-contra-account-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-description-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-description-1.jpg new file mode 100644 index 00000000..da0ebb83 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-description-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-description-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-description-2.jpg new file mode 100644 index 00000000..e5c13380 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-description-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-document-knockoff-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-document-knockoff-1.jpg new file mode 100644 index 00000000..99dae463 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-document-knockoff-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-entry-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-entry-1.jpg new file mode 100644 index 00000000..81fadccf Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-entry-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-entry-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-entry-2.jpg new file mode 100644 index 00000000..7a77ef9e Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-entry-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-note-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-note-1.jpg new file mode 100644 index 00000000..953fa86f Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-note-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-note-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-note-2.jpg new file mode 100644 index 00000000..1abb7f87 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-note-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-note-3.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-note-3.jpg new file mode 100644 index 00000000..c1af5929 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-note-3.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-partial-knockoff-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-partial-knockoff-1.jpg new file mode 100644 index 00000000..1c2cca4f Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-partial-knockoff-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-contra-random-knockoff-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-contra-random-knockoff-1.jpg new file mode 100644 index 00000000..6995efd0 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-contra-random-knockoff-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-1.jpg new file mode 100644 index 00000000..2177fbf3 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-attachment-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-attachment-1.jpg new file mode 100644 index 00000000..bce168fd Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-attachment-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-attachment-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-attachment-2.jpg new file mode 100644 index 00000000..58ce3961 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-attachment-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-cn-description-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-cn-description-1.jpg new file mode 100644 index 00000000..1637d37a Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-cn-description-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-cn-description-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-cn-description-2.jpg new file mode 100644 index 00000000..6dae2f6f Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-cn-description-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-entry-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-entry-1.jpg new file mode 100644 index 00000000..a9ee9af1 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-entry-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-entry-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-entry-2.jpg new file mode 100644 index 00000000..a3cb674d Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-entry-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-gainloss-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-gainloss-1.jpg new file mode 100644 index 00000000..a4340fc9 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-gainloss-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-knockoff-outstanding-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-knockoff-outstanding-1.jpg new file mode 100644 index 00000000..571327af Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-knockoff-outstanding-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-note-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-note-1.jpg new file mode 100644 index 00000000..9b61a273 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-note-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-note-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-note-2.jpg new file mode 100644 index 00000000..c1af5929 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-note-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-project-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-project-1.jpg new file mode 100644 index 00000000..44bbc310 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-project-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-unapplied-amount-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-unapplied-amount-1.jpg new file mode 100644 index 00000000..7093892b Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-credit-note-unapplied-amount-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-1.jpg new file mode 100644 index 00000000..769c04fc Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-attachment-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-attachment-1.jpg new file mode 100644 index 00000000..1a291cde Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-attachment-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-attachment-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-attachment-2.jpg new file mode 100644 index 00000000..51af0cf1 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-attachment-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-dn-description-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-dn-description-1.jpg new file mode 100644 index 00000000..6155960b Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-dn-description-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-dn-description-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-dn-description-2.jpg new file mode 100644 index 00000000..aeb03317 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-dn-description-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-entry-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-entry-1.jpg new file mode 100644 index 00000000..3746ef6d Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-entry-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-entry-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-entry-2.jpg new file mode 100644 index 00000000..bd712f1c Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-entry-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-note-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-note-1.jpg new file mode 100644 index 00000000..8dd758bf Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-note-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-note-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-note-2.jpg new file mode 100644 index 00000000..c1af5929 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-note-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-project-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-project-1.jpg new file mode 100644 index 00000000..1e211471 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-debit-note-project-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-1.jpg new file mode 100644 index 00000000..40358329 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-attachment-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-attachment-1.jpg new file mode 100644 index 00000000..af5c6813 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-attachment-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-attachment-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-attachment-2.jpg new file mode 100644 index 00000000..bc917104 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-attachment-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-entry-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-entry-1.jpg new file mode 100644 index 00000000..2e379435 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-entry-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-entry-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-entry-2.jpg new file mode 100644 index 00000000..77dceca6 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-entry-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-invoice-description-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-invoice-description-1.jpg new file mode 100644 index 00000000..a5cc3e79 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-invoice-description-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-invoice-description-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-invoice-description-2.jpg new file mode 100644 index 00000000..a39cec17 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-invoice-description-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-note-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-note-1.jpg new file mode 100644 index 00000000..b44696a1 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-note-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-note-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-note-2.jpg new file mode 100644 index 00000000..c1af5929 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-note-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-invoice-project-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-project-1.jpg new file mode 100644 index 00000000..7a6e0a95 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-invoice-project-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-1.jpg new file mode 100644 index 00000000..cbe466e4 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-attachment-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-attachment-1.jpg new file mode 100644 index 00000000..6eede249 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-attachment-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-attachment-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-attachment-2.jpg new file mode 100644 index 00000000..41f8b743 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-attachment-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-description-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-description-1.jpg new file mode 100644 index 00000000..b023ef4f Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-description-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-description-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-description-2.jpg new file mode 100644 index 00000000..7a7af131 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-description-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-document-knockoff-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-document-knockoff-1.jpg new file mode 100644 index 00000000..292aab34 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-document-knockoff-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-1.jpg new file mode 100644 index 00000000..c5eb22fb Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-2.jpg new file mode 100644 index 00000000..e706a07a Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-3.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-3.jpg new file mode 100644 index 00000000..c1ea8717 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-3.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-4.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-4.jpg new file mode 100644 index 00000000..9d3d1e0a Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-entry-4.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-note-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-note-1.jpg new file mode 100644 index 00000000..7d2137e9 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-note-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-note-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-note-2.jpg new file mode 100644 index 00000000..0c07316a Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-note-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-note-3.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-note-3.jpg new file mode 100644 index 00000000..c1af5929 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-note-3.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-partial-knockoff-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-partial-knockoff-1.jpg new file mode 100644 index 00000000..36d984d9 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-partial-knockoff-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-payment-random-knockoff-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-payment-random-knockoff-1.jpg new file mode 100644 index 00000000..4bd78ad7 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-payment-random-knockoff-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-1.jpg new file mode 100644 index 00000000..92c47c5a Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-attachment-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-attachment-1.jpg new file mode 100644 index 00000000..b55970d4 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-attachment-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-attachment-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-attachment-2.jpg new file mode 100644 index 00000000..1e91f472 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-attachment-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-description-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-description-1.jpg new file mode 100644 index 00000000..df7e7b3a Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-description-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-description-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-description-2.jpg new file mode 100644 index 00000000..afa5239d Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-description-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-document-knockoff-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-document-knockoff-1.jpg new file mode 100644 index 00000000..7cdb888b Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-document-knockoff-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-1.jpg new file mode 100644 index 00000000..e9285d3f Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-2.jpg new file mode 100644 index 00000000..18ebed88 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-3.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-3.jpg new file mode 100644 index 00000000..f393eae7 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-3.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-4.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-4.jpg new file mode 100644 index 00000000..6c7d4ad2 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-entry-4.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-note-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-note-1.jpg new file mode 100644 index 00000000..1945f672 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-note-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-note-2.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-note-2.jpg new file mode 100644 index 00000000..05bd7e48 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-note-2.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-note-3.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-note-3.jpg new file mode 100644 index 00000000..c1af5929 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-note-3.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-partial-knockoff-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-partial-knockoff-1.jpg new file mode 100644 index 00000000..6c9dbb99 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-partial-knockoff-1.jpg differ diff --git a/static/img/usage/supplier/supplier-guide-images/supplier-refund-random-knockoff-1.jpg b/static/img/usage/supplier/supplier-guide-images/supplier-refund-random-knockoff-1.jpg new file mode 100644 index 00000000..38d85937 Binary files /dev/null and b/static/img/usage/supplier/supplier-guide-images/supplier-refund-random-knockoff-1.jpg differ diff --git a/static/img/usage/supplier/supplier-reports-images/post-dated-checque-listing-how-to-set1.png b/static/img/usage/supplier/supplier-reports-images/post-dated-checque-listing-how-to-set1.png new file mode 100644 index 00000000..794f51bd Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/post-dated-checque-listing-how-to-set1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/post-dated-checque-listing-how-to-set2.png b/static/img/usage/supplier/supplier-reports-images/post-dated-checque-listing-how-to-set2.png new file mode 100644 index 00000000..9105cb45 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/post-dated-checque-listing-how-to-set2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-document-listing-step1.png b/static/img/usage/supplier/supplier-reports-images/print-document-listing-step1.png new file mode 100644 index 00000000..183c3fdb Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-document-listing-step1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-document-listing-step2.png b/static/img/usage/supplier/supplier-reports-images/print-document-listing-step2.png new file mode 100644 index 00000000..44fcab28 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-document-listing-step2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-document-listing-step3.png b/static/img/usage/supplier/supplier-reports-images/print-document-listing-step3.png new file mode 100644 index 00000000..fd095f3f Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-document-listing-step3.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-document-style-1.png b/static/img/usage/supplier/supplier-reports-images/print-document-style-1.png new file mode 100644 index 00000000..c1daf9d5 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-document-style-1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-document-style-2.png b/static/img/usage/supplier/supplier-reports-images/print-document-style-2.png new file mode 100644 index 00000000..03cd6d94 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-document-style-2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-document-style-example1.png b/static/img/usage/supplier/supplier-reports-images/print-document-style-example1.png new file mode 100644 index 00000000..1d1f1e1e Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-document-style-example1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-document-style-filter1.png b/static/img/usage/supplier/supplier-reports-images/print-document-style-filter1.png new file mode 100644 index 00000000..2cc0a6e4 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-document-style-filter1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-document-style-group-sort1.png b/static/img/usage/supplier/supplier-reports-images/print-document-style-group-sort1.png new file mode 100644 index 00000000..4be29228 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-document-style-group-sort1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-document-style-group-sort2.png b/static/img/usage/supplier/supplier-reports-images/print-document-style-group-sort2.png new file mode 100644 index 00000000..84a09223 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-document-style-group-sort2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step1.png b/static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step1.png new file mode 100644 index 00000000..eb558c18 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step2.png b/static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step2.png new file mode 100644 index 00000000..8f9ee550 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step3.png b/static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step3.png new file mode 100644 index 00000000..4d459f3b Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-suppier-analysis-by-document-step3.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step1.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step1.png new file mode 100644 index 00000000..1e42b645 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step2.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step2.png new file mode 100644 index 00000000..81043a76 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step3.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step3.png new file mode 100644 index 00000000..a79cb0f1 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step3.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step4.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step4.png new file mode 100644 index 00000000..0666664b Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-aging-report-step4.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step1.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step1.png new file mode 100644 index 00000000..be38a81c Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step2.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step2.png new file mode 100644 index 00000000..0f572b67 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step3.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step3.png new file mode 100644 index 00000000..d5bfd103 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step3.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step4.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step4.png new file mode 100644 index 00000000..fb4a022b Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-due-document-step4.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step1.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step1.png new file mode 100644 index 00000000..48adea19 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step2.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step2.png new file mode 100644 index 00000000..c97eed4d Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step3.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step3.png new file mode 100644 index 00000000..6e3b4be6 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step3.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step4.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step4.png new file mode 100644 index 00000000..d56a902e Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step4.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step5.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step5.png new file mode 100644 index 00000000..8a4d894d Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step5.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step6.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step6.png new file mode 100644 index 00000000..63cc6e88 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-lisiting-step6.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step1.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step1.png new file mode 100644 index 00000000..f3fc4f70 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step2.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step2.png new file mode 100644 index 00000000..2f4549e4 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step3.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step3.png new file mode 100644 index 00000000..89f7d7c2 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-post-dated-checque-listing-step3.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step1.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step1.png new file mode 100644 index 00000000..54e40091 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step2.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step2.png new file mode 100644 index 00000000..d0ff6088 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step3.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step3.png new file mode 100644 index 00000000..6242318d Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step3.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step4.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step4.png new file mode 100644 index 00000000..edd3525e Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-purchase-and-payment-analysis-step4.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-example1.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-example1.png new file mode 100644 index 00000000..89224854 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-example1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-step1.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-step1.png new file mode 100644 index 00000000..c6e13cbb Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-step1.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-step2.png b/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-step2.png new file mode 100644 index 00000000..e62adf76 Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-step2.png differ diff --git a/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-style1.jpg b/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-style1.jpg new file mode 100644 index 00000000..30a6dbfe Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/print-supplier-statement-style1.jpg differ diff --git a/static/img/usage/supplier/supplier-reports-images/set-aging1.png b/static/img/usage/supplier/supplier-reports-images/set-aging1.png new file mode 100644 index 00000000..bba227dc Binary files /dev/null and b/static/img/usage/supplier/supplier-reports-images/set-aging1.png differ diff --git a/static/img/report/fastReport-basicGuide/45.png b/static/img/usage/tools/fast-report-faq/0-foc-insert-code-memo.png similarity index 100% rename from static/img/report/fastReport-basicGuide/45.png rename to static/img/usage/tools/fast-report-faq/0-foc-insert-code-memo.png diff --git a/static/img/report/fastReport-taxShwA/1.png b/static/img/usage/tools/fast-report-faq/1.png similarity index 100% rename from static/img/report/fastReport-taxShwA/1.png rename to static/img/usage/tools/fast-report-faq/1.png diff --git a/static/img/report/fastReport-taxShwA/10.png b/static/img/usage/tools/fast-report-faq/10.png similarity index 100% rename from static/img/report/fastReport-taxShwA/10.png rename to static/img/usage/tools/fast-report-faq/10.png diff --git a/static/img/report/fastReport-taxShwA/11.png b/static/img/usage/tools/fast-report-faq/11.png similarity index 100% rename from static/img/report/fastReport-taxShwA/11.png rename to static/img/usage/tools/fast-report-faq/11.png diff --git a/static/img/report/fastReport-taxShwA/12.png b/static/img/usage/tools/fast-report-faq/12.png similarity index 100% rename from static/img/report/fastReport-taxShwA/12.png rename to static/img/usage/tools/fast-report-faq/12.png diff --git a/static/img/report/fastReport-taxShwA/13.png b/static/img/usage/tools/fast-report-faq/13.png similarity index 100% rename from static/img/report/fastReport-taxShwA/13.png rename to static/img/usage/tools/fast-report-faq/13.png diff --git a/static/img/report/fastReport-taxShwA/14.png b/static/img/usage/tools/fast-report-faq/14.png similarity index 100% rename from static/img/report/fastReport-taxShwA/14.png rename to static/img/usage/tools/fast-report-faq/14.png diff --git a/static/img/report/fastReport-taxShwA/15.png b/static/img/usage/tools/fast-report-faq/15.png similarity index 100% rename from static/img/report/fastReport-taxShwA/15.png rename to static/img/usage/tools/fast-report-faq/15.png diff --git a/static/img/report/fastReport-taxShwA/16.png b/static/img/usage/tools/fast-report-faq/16.png similarity index 100% rename from static/img/report/fastReport-taxShwA/16.png rename to static/img/usage/tools/fast-report-faq/16.png diff --git a/static/img/report/fastReport-taxShwA/17.png b/static/img/usage/tools/fast-report-faq/17.png similarity index 100% rename from static/img/report/fastReport-taxShwA/17.png rename to static/img/usage/tools/fast-report-faq/17.png diff --git a/static/img/report/fastReport-taxShwA/18.png b/static/img/usage/tools/fast-report-faq/18.png similarity index 100% rename from static/img/report/fastReport-taxShwA/18.png rename to static/img/usage/tools/fast-report-faq/18.png diff --git a/static/img/report/fastReport-taxShwA/2.png b/static/img/usage/tools/fast-report-faq/2.png similarity index 100% rename from static/img/report/fastReport-taxShwA/2.png rename to static/img/usage/tools/fast-report-faq/2.png diff --git a/static/img/report/fastReport-taxShwA/3.png b/static/img/usage/tools/fast-report-faq/3.png similarity index 100% rename from static/img/report/fastReport-taxShwA/3.png rename to static/img/usage/tools/fast-report-faq/3.png diff --git a/static/img/report/fastReport-taxShwA/4.png b/static/img/usage/tools/fast-report-faq/4.png similarity index 100% rename from static/img/report/fastReport-taxShwA/4.png rename to static/img/usage/tools/fast-report-faq/4.png diff --git a/static/img/report/fastReport-basicGuide/46.png b/static/img/usage/tools/fast-report-faq/46.png similarity index 100% rename from static/img/report/fastReport-basicGuide/46.png rename to static/img/usage/tools/fast-report-faq/46.png diff --git a/static/img/report/fastReport-basicGuide/47.png b/static/img/usage/tools/fast-report-faq/47.png similarity index 100% rename from static/img/report/fastReport-basicGuide/47.png rename to static/img/usage/tools/fast-report-faq/47.png diff --git a/static/img/report/fastReport-basicGuide/48.png b/static/img/usage/tools/fast-report-faq/48.png similarity index 100% rename from static/img/report/fastReport-basicGuide/48.png rename to static/img/usage/tools/fast-report-faq/48.png diff --git a/static/img/report/fastReport-basicGuide/49.png b/static/img/usage/tools/fast-report-faq/49.png similarity index 100% rename from static/img/report/fastReport-basicGuide/49.png rename to static/img/usage/tools/fast-report-faq/49.png diff --git a/static/img/report/fastReport-taxShwA/5.png b/static/img/usage/tools/fast-report-faq/5.png similarity index 100% rename from static/img/report/fastReport-taxShwA/5.png rename to static/img/usage/tools/fast-report-faq/5.png diff --git a/static/img/report/fastReport-basicGuide/50.png b/static/img/usage/tools/fast-report-faq/50.png similarity index 100% rename from static/img/report/fastReport-basicGuide/50.png rename to static/img/usage/tools/fast-report-faq/50.png diff --git a/static/img/report/fastReport-basicGuide/51.png b/static/img/usage/tools/fast-report-faq/51.png similarity index 100% rename from static/img/report/fastReport-basicGuide/51.png rename to static/img/usage/tools/fast-report-faq/51.png diff --git a/static/img/report/fastReport-basicGuide/52.png b/static/img/usage/tools/fast-report-faq/52.png similarity index 100% rename from static/img/report/fastReport-basicGuide/52.png rename to static/img/usage/tools/fast-report-faq/52.png diff --git a/static/img/report/fastReport-basicGuide/53.png b/static/img/usage/tools/fast-report-faq/53.png similarity index 100% rename from static/img/report/fastReport-basicGuide/53.png rename to static/img/usage/tools/fast-report-faq/53.png diff --git a/static/img/report/fastReport-basicGuide/54.png b/static/img/usage/tools/fast-report-faq/54.png similarity index 100% rename from static/img/report/fastReport-basicGuide/54.png rename to static/img/usage/tools/fast-report-faq/54.png diff --git a/static/img/report/fastReport-basicGuide/55.png b/static/img/usage/tools/fast-report-faq/55.png similarity index 100% rename from static/img/report/fastReport-basicGuide/55.png rename to static/img/usage/tools/fast-report-faq/55.png diff --git a/static/img/report/fastReport-basicGuide/56.png b/static/img/usage/tools/fast-report-faq/56.png similarity index 100% rename from static/img/report/fastReport-basicGuide/56.png rename to static/img/usage/tools/fast-report-faq/56.png diff --git a/static/img/report/fastReport-basicGuide/57.png b/static/img/usage/tools/fast-report-faq/57.png similarity index 100% rename from static/img/report/fastReport-basicGuide/57.png rename to static/img/usage/tools/fast-report-faq/57.png diff --git a/static/img/report/fastReport-basicGuide/58.png b/static/img/usage/tools/fast-report-faq/58.png similarity index 100% rename from static/img/report/fastReport-basicGuide/58.png rename to static/img/usage/tools/fast-report-faq/58.png diff --git a/static/img/report/fastReport-basicGuide/59.png b/static/img/usage/tools/fast-report-faq/59.png similarity index 100% rename from static/img/report/fastReport-basicGuide/59.png rename to static/img/usage/tools/fast-report-faq/59.png diff --git a/static/img/report/fastReport-taxShwA/6.png b/static/img/usage/tools/fast-report-faq/6.png similarity index 100% rename from static/img/report/fastReport-taxShwA/6.png rename to static/img/usage/tools/fast-report-faq/6.png diff --git a/static/img/report/fastReport-basicGuide/60.png b/static/img/usage/tools/fast-report-faq/60.png similarity index 100% rename from static/img/report/fastReport-basicGuide/60.png rename to static/img/usage/tools/fast-report-faq/60.png diff --git a/static/img/report/fastReport-basicGuide/61.png b/static/img/usage/tools/fast-report-faq/61.png similarity index 100% rename from static/img/report/fastReport-basicGuide/61.png rename to static/img/usage/tools/fast-report-faq/61.png diff --git a/static/img/report/fastReport-basicGuide/62.png b/static/img/usage/tools/fast-report-faq/62.png similarity index 100% rename from static/img/report/fastReport-basicGuide/62.png rename to static/img/usage/tools/fast-report-faq/62.png diff --git a/static/img/report/fastReport-basicGuide/63.png b/static/img/usage/tools/fast-report-faq/63.png similarity index 100% rename from static/img/report/fastReport-basicGuide/63.png rename to static/img/usage/tools/fast-report-faq/63.png diff --git a/static/img/report/fastReport-basicGuide/64.png b/static/img/usage/tools/fast-report-faq/64.png similarity index 100% rename from static/img/report/fastReport-basicGuide/64.png rename to static/img/usage/tools/fast-report-faq/64.png diff --git a/static/img/report/fastReport-taxShwA/7.png b/static/img/usage/tools/fast-report-faq/7.png similarity index 100% rename from static/img/report/fastReport-taxShwA/7.png rename to static/img/usage/tools/fast-report-faq/7.png diff --git a/static/img/report/fastReport-taxShwA/8.png b/static/img/usage/tools/fast-report-faq/8.png similarity index 100% rename from static/img/report/fastReport-taxShwA/8.png rename to static/img/usage/tools/fast-report-faq/8.png diff --git a/static/img/report/fastReport-taxShwA/9.png b/static/img/usage/tools/fast-report-faq/9.png similarity index 100% rename from static/img/report/fastReport-taxShwA/9.png rename to static/img/usage/tools/fast-report-faq/9.png diff --git a/static/img/usage/tools/fast-report-faq/add-child-band-right-click.jpg b/static/img/usage/tools/fast-report-faq/add-child-band-right-click.jpg new file mode 100644 index 00000000..1d025e61 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/add-child-band-right-click.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/add-child-band.jpg b/static/img/usage/tools/fast-report-faq/add-child-band.jpg new file mode 100644 index 00000000..1d025e61 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/add-child-band.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/align-to-grid.jpg b/static/img/usage/tools/fast-report-faq/align-to-grid.jpg new file mode 100644 index 00000000..7005bd19 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/align-to-grid.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/barcode-editor.jpg b/static/img/usage/tools/fast-report-faq/barcode-editor.jpg new file mode 100644 index 00000000..ebf455a2 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/barcode-editor.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/barcode-qrcode.jpg b/static/img/usage/tools/fast-report-faq/barcode-qrcode.jpg new file mode 100644 index 00000000..4e0ef499 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/barcode-qrcode.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/change-onbeforeprint-values.jpg b/static/img/usage/tools/fast-report-faq/change-onbeforeprint-values.jpg new file mode 100644 index 00000000..b84cbe40 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/change-onbeforeprint-values.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/comment-if-tfrxdetaildata.jpg b/static/img/usage/tools/fast-report-faq/comment-if-tfrxdetaildata.jpg new file mode 100644 index 00000000..a574f919 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/comment-if-tfrxdetaildata.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/dclick-onbeforeprint-settings.jpg b/static/img/usage/tools/fast-report-faq/dclick-onbeforeprint-settings.jpg new file mode 100644 index 00000000..0f611a2b Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/dclick-onbeforeprint-settings.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/dclick-onbeforeprint.jpg b/static/img/usage/tools/fast-report-faq/dclick-onbeforeprint.jpg new file mode 100644 index 00000000..bfef335f Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/dclick-onbeforeprint.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/diagonal-false.jpg b/static/img/usage/tools/fast-report-faq/diagonal-false.jpg new file mode 100644 index 00000000..9fe84deb Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/diagonal-false.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/disable-code-using-curlybracket.jpg b/static/img/usage/tools/fast-report-faq/disable-code-using-curlybracket.jpg new file mode 100644 index 00000000..d08269b0 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/disable-code-using-curlybracket.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/draw-line-output.jpg b/static/img/usage/tools/fast-report-faq/draw-line-output.jpg new file mode 100644 index 00000000..f86e577a Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/draw-line-output.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/draw-line.jpg b/static/img/usage/tools/fast-report-faq/draw-line.jpg new file mode 100644 index 00000000..3ffb9a2d Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/draw-line.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/error-assertion-failure.jpg b/static/img/usage/tools/fast-report-faq/error-assertion-failure.jpg new file mode 100644 index 00000000..56e346a1 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/error-assertion-failure.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/even-row-with-color-insert-code.jpg b/static/img/usage/tools/fast-report-faq/even-row-with-color-insert-code.jpg new file mode 100644 index 00000000..e92b1272 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/even-row-with-color-insert-code.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/grp-footer-issue.jpg b/static/img/usage/tools/fast-report-faq/grp-footer-issue.jpg new file mode 100644 index 00000000..015b072f Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/grp-footer-issue.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/less-column-usage-1.jpg b/static/img/usage/tools/fast-report-faq/less-column-usage-1.jpg new file mode 100644 index 00000000..5d85794a Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/less-column-usage-1.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/microsoft-yahei-font.jpg b/static/img/usage/tools/fast-report-faq/microsoft-yahei-font.jpg new file mode 100644 index 00000000..2f5b3f11 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/microsoft-yahei-font.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/navigate-to-onaftercalcheight.jpg b/static/img/usage/tools/fast-report-faq/navigate-to-onaftercalcheight.jpg new file mode 100644 index 00000000..90109030 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/navigate-to-onaftercalcheight.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/on-before-print-remove-height-60.jpg b/static/img/usage/tools/fast-report-faq/on-before-print-remove-height-60.jpg new file mode 100644 index 00000000..bd5d9a81 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/on-before-print-remove-height-60.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/print-2page-in-a4.jpg b/static/img/usage/tools/fast-report-faq/print-2page-in-a4.jpg new file mode 100644 index 00000000..235743ec Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/print-2page-in-a4.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/qrcode-insert-code.jpg b/static/img/usage/tools/fast-report-faq/qrcode-insert-code.jpg new file mode 100644 index 00000000..b964478d Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/qrcode-insert-code.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/rename-memo.jpg b/static/img/usage/tools/fast-report-faq/rename-memo.jpg new file mode 100644 index 00000000..232871be Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/rename-memo.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/right-click-allow-split.jpg b/static/img/usage/tools/fast-report-faq/right-click-allow-split.jpg new file mode 100644 index 00000000..1ac57ace Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/right-click-allow-split.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/right-click-untick-shift.jpg b/static/img/usage/tools/fast-report-faq/right-click-untick-shift.jpg new file mode 100644 index 00000000..18aa1022 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/right-click-untick-shift.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/show-note-at-header.jpg b/static/img/usage/tools/fast-report-faq/show-note-at-header.jpg new file mode 100644 index 00000000..4d999707 Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/show-note-at-header.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/spacing-2reports-height.jpg b/static/img/usage/tools/fast-report-faq/spacing-2reports-height.jpg new file mode 100644 index 00000000..cf05d22a Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/spacing-2reports-height.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/stacked-content-when-preview.jpg b/static/img/usage/tools/fast-report-faq/stacked-content-when-preview.jpg new file mode 100644 index 00000000..34c1934b Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/stacked-content-when-preview.jpg differ diff --git a/static/img/usage/tools/fast-report-faq/untick-auto-size.jpg b/static/img/usage/tools/fast-report-faq/untick-auto-size.jpg new file mode 100644 index 00000000..9c20c12a Binary files /dev/null and b/static/img/usage/tools/fast-report-faq/untick-auto-size.jpg differ diff --git a/static/img/report/fastReport-basicGuide/1.png b/static/img/usage/tools/fastReport-basicGuide/1.png similarity index 100% rename from static/img/report/fastReport-basicGuide/1.png rename to static/img/usage/tools/fastReport-basicGuide/1.png diff --git a/static/img/report/fastReport-basicGuide/10.png b/static/img/usage/tools/fastReport-basicGuide/10.png similarity index 100% rename from static/img/report/fastReport-basicGuide/10.png rename to static/img/usage/tools/fastReport-basicGuide/10.png diff --git a/static/img/report/fastReport-basicGuide/11.png b/static/img/usage/tools/fastReport-basicGuide/11.png similarity index 100% rename from static/img/report/fastReport-basicGuide/11.png rename to static/img/usage/tools/fastReport-basicGuide/11.png diff --git a/static/img/report/fastReport-basicGuide/12.png b/static/img/usage/tools/fastReport-basicGuide/12.png similarity index 100% rename from static/img/report/fastReport-basicGuide/12.png rename to static/img/usage/tools/fastReport-basicGuide/12.png diff --git a/static/img/report/fastReport-basicGuide/13.png b/static/img/usage/tools/fastReport-basicGuide/13.png similarity index 100% rename from static/img/report/fastReport-basicGuide/13.png rename to static/img/usage/tools/fastReport-basicGuide/13.png diff --git a/static/img/report/fastReport-basicGuide/14.png b/static/img/usage/tools/fastReport-basicGuide/14.png similarity index 100% rename from static/img/report/fastReport-basicGuide/14.png rename to static/img/usage/tools/fastReport-basicGuide/14.png diff --git a/static/img/report/fastReport-basicGuide/15.png b/static/img/usage/tools/fastReport-basicGuide/15.png similarity index 100% rename from static/img/report/fastReport-basicGuide/15.png rename to static/img/usage/tools/fastReport-basicGuide/15.png diff --git a/static/img/report/fastReport-basicGuide/16.png b/static/img/usage/tools/fastReport-basicGuide/16.png similarity index 100% rename from static/img/report/fastReport-basicGuide/16.png rename to static/img/usage/tools/fastReport-basicGuide/16.png diff --git a/static/img/report/fastReport-basicGuide/17.png b/static/img/usage/tools/fastReport-basicGuide/17.png similarity index 100% rename from static/img/report/fastReport-basicGuide/17.png rename to static/img/usage/tools/fastReport-basicGuide/17.png diff --git a/static/img/report/fastReport-basicGuide/18.png b/static/img/usage/tools/fastReport-basicGuide/18.png similarity index 100% rename from static/img/report/fastReport-basicGuide/18.png rename to static/img/usage/tools/fastReport-basicGuide/18.png diff --git a/static/img/report/fastReport-basicGuide/19.png b/static/img/usage/tools/fastReport-basicGuide/19.png similarity index 100% rename from static/img/report/fastReport-basicGuide/19.png rename to static/img/usage/tools/fastReport-basicGuide/19.png diff --git a/static/img/report/fastReport-basicGuide/2.png b/static/img/usage/tools/fastReport-basicGuide/2.png similarity index 100% rename from static/img/report/fastReport-basicGuide/2.png rename to static/img/usage/tools/fastReport-basicGuide/2.png diff --git a/static/img/report/fastReport-basicGuide/20.png b/static/img/usage/tools/fastReport-basicGuide/20.png similarity index 100% rename from static/img/report/fastReport-basicGuide/20.png rename to static/img/usage/tools/fastReport-basicGuide/20.png diff --git a/static/img/report/fastReport-basicGuide/21.png b/static/img/usage/tools/fastReport-basicGuide/21.png similarity index 100% rename from static/img/report/fastReport-basicGuide/21.png rename to static/img/usage/tools/fastReport-basicGuide/21.png diff --git a/static/img/report/fastReport-basicGuide/22.png b/static/img/usage/tools/fastReport-basicGuide/22.png similarity index 100% rename from static/img/report/fastReport-basicGuide/22.png rename to static/img/usage/tools/fastReport-basicGuide/22.png diff --git a/static/img/report/fastReport-basicGuide/23.png b/static/img/usage/tools/fastReport-basicGuide/23.png similarity index 100% rename from static/img/report/fastReport-basicGuide/23.png rename to static/img/usage/tools/fastReport-basicGuide/23.png diff --git a/static/img/report/fastReport-basicGuide/24.png b/static/img/usage/tools/fastReport-basicGuide/24.png similarity index 100% rename from static/img/report/fastReport-basicGuide/24.png rename to static/img/usage/tools/fastReport-basicGuide/24.png diff --git a/static/img/report/fastReport-basicGuide/25.png b/static/img/usage/tools/fastReport-basicGuide/25.png similarity index 100% rename from static/img/report/fastReport-basicGuide/25.png rename to static/img/usage/tools/fastReport-basicGuide/25.png diff --git a/static/img/report/fastReport-basicGuide/26.png b/static/img/usage/tools/fastReport-basicGuide/26.png similarity index 100% rename from static/img/report/fastReport-basicGuide/26.png rename to static/img/usage/tools/fastReport-basicGuide/26.png diff --git a/static/img/report/fastReport-basicGuide/27.png b/static/img/usage/tools/fastReport-basicGuide/27.png similarity index 100% rename from static/img/report/fastReport-basicGuide/27.png rename to static/img/usage/tools/fastReport-basicGuide/27.png diff --git a/static/img/report/fastReport-basicGuide/28.png b/static/img/usage/tools/fastReport-basicGuide/28.png similarity index 100% rename from static/img/report/fastReport-basicGuide/28.png rename to static/img/usage/tools/fastReport-basicGuide/28.png diff --git a/static/img/report/fastReport-basicGuide/29.png b/static/img/usage/tools/fastReport-basicGuide/29.png similarity index 100% rename from static/img/report/fastReport-basicGuide/29.png rename to static/img/usage/tools/fastReport-basicGuide/29.png diff --git a/static/img/report/fastReport-basicGuide/3.png b/static/img/usage/tools/fastReport-basicGuide/3.png similarity index 100% rename from static/img/report/fastReport-basicGuide/3.png rename to static/img/usage/tools/fastReport-basicGuide/3.png diff --git a/static/img/report/fastReport-basicGuide/30.png b/static/img/usage/tools/fastReport-basicGuide/30.png similarity index 100% rename from static/img/report/fastReport-basicGuide/30.png rename to static/img/usage/tools/fastReport-basicGuide/30.png diff --git a/static/img/report/fastReport-basicGuide/31.png b/static/img/usage/tools/fastReport-basicGuide/31.png similarity index 100% rename from static/img/report/fastReport-basicGuide/31.png rename to static/img/usage/tools/fastReport-basicGuide/31.png diff --git a/static/img/report/fastReport-basicGuide/32.png b/static/img/usage/tools/fastReport-basicGuide/32.png similarity index 100% rename from static/img/report/fastReport-basicGuide/32.png rename to static/img/usage/tools/fastReport-basicGuide/32.png diff --git a/static/img/report/fastReport-basicGuide/33.png b/static/img/usage/tools/fastReport-basicGuide/33.png similarity index 100% rename from static/img/report/fastReport-basicGuide/33.png rename to static/img/usage/tools/fastReport-basicGuide/33.png diff --git a/static/img/report/fastReport-basicGuide/34.png b/static/img/usage/tools/fastReport-basicGuide/34.png similarity index 100% rename from static/img/report/fastReport-basicGuide/34.png rename to static/img/usage/tools/fastReport-basicGuide/34.png diff --git a/static/img/report/fastReport-basicGuide/35.png b/static/img/usage/tools/fastReport-basicGuide/35.png similarity index 100% rename from static/img/report/fastReport-basicGuide/35.png rename to static/img/usage/tools/fastReport-basicGuide/35.png diff --git a/static/img/report/fastReport-basicGuide/36.png b/static/img/usage/tools/fastReport-basicGuide/36.png similarity index 100% rename from static/img/report/fastReport-basicGuide/36.png rename to static/img/usage/tools/fastReport-basicGuide/36.png diff --git a/static/img/report/fastReport-basicGuide/37.png b/static/img/usage/tools/fastReport-basicGuide/37.png similarity index 100% rename from static/img/report/fastReport-basicGuide/37.png rename to static/img/usage/tools/fastReport-basicGuide/37.png diff --git a/static/img/report/fastReport-basicGuide/38.png b/static/img/usage/tools/fastReport-basicGuide/38.png similarity index 100% rename from static/img/report/fastReport-basicGuide/38.png rename to static/img/usage/tools/fastReport-basicGuide/38.png diff --git a/static/img/report/fastReport-basicGuide/39.png b/static/img/usage/tools/fastReport-basicGuide/39.png similarity index 100% rename from static/img/report/fastReport-basicGuide/39.png rename to static/img/usage/tools/fastReport-basicGuide/39.png diff --git a/static/img/report/fastReport-basicGuide/4.png b/static/img/usage/tools/fastReport-basicGuide/4.png similarity index 100% rename from static/img/report/fastReport-basicGuide/4.png rename to static/img/usage/tools/fastReport-basicGuide/4.png diff --git a/static/img/report/fastReport-basicGuide/40.png b/static/img/usage/tools/fastReport-basicGuide/40.png similarity index 100% rename from static/img/report/fastReport-basicGuide/40.png rename to static/img/usage/tools/fastReport-basicGuide/40.png diff --git a/static/img/report/fastReport-basicGuide/41.png b/static/img/usage/tools/fastReport-basicGuide/41.png similarity index 100% rename from static/img/report/fastReport-basicGuide/41.png rename to static/img/usage/tools/fastReport-basicGuide/41.png diff --git a/static/img/report/fastReport-basicGuide/42.png b/static/img/usage/tools/fastReport-basicGuide/42.png similarity index 100% rename from static/img/report/fastReport-basicGuide/42.png rename to static/img/usage/tools/fastReport-basicGuide/42.png diff --git a/static/img/report/fastReport-basicGuide/43.png b/static/img/usage/tools/fastReport-basicGuide/43.png similarity index 100% rename from static/img/report/fastReport-basicGuide/43.png rename to static/img/usage/tools/fastReport-basicGuide/43.png diff --git a/static/img/report/fastReport-basicGuide/44.png b/static/img/usage/tools/fastReport-basicGuide/44.png similarity index 100% rename from static/img/report/fastReport-basicGuide/44.png rename to static/img/usage/tools/fastReport-basicGuide/44.png diff --git a/static/img/report/fastReport-basicGuide/5.png b/static/img/usage/tools/fastReport-basicGuide/5.png similarity index 100% rename from static/img/report/fastReport-basicGuide/5.png rename to static/img/usage/tools/fastReport-basicGuide/5.png diff --git a/static/img/report/fastReport-basicGuide/6.png b/static/img/usage/tools/fastReport-basicGuide/6.png similarity index 100% rename from static/img/report/fastReport-basicGuide/6.png rename to static/img/usage/tools/fastReport-basicGuide/6.png diff --git a/static/img/report/fastReport-basicGuide/7.png b/static/img/usage/tools/fastReport-basicGuide/7.png similarity index 100% rename from static/img/report/fastReport-basicGuide/7.png rename to static/img/usage/tools/fastReport-basicGuide/7.png diff --git a/static/img/report/fastReport-basicGuide/8.png b/static/img/usage/tools/fastReport-basicGuide/8.png similarity index 100% rename from static/img/report/fastReport-basicGuide/8.png rename to static/img/usage/tools/fastReport-basicGuide/8.png diff --git a/static/img/report/fastReport-basicGuide/9.png b/static/img/usage/tools/fastReport-basicGuide/9.png similarity index 100% rename from static/img/report/fastReport-basicGuide/9.png rename to static/img/usage/tools/fastReport-basicGuide/9.png diff --git a/static/img/report/fastReport-basicGuide/A.png b/static/img/usage/tools/fastReport-basicGuide/A.png similarity index 100% rename from static/img/report/fastReport-basicGuide/A.png rename to static/img/usage/tools/fastReport-basicGuide/A.png diff --git a/static/img/usage/tools/fastReport-basicGuide/TfrxRich-view-empty.jpg b/static/img/usage/tools/fastReport-basicGuide/TfrxRich-view-empty.jpg new file mode 100644 index 00000000..b756f9e4 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/TfrxRich-view-empty.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/a-icon.jpg b/static/img/usage/tools/fastReport-basicGuide/a-icon.jpg new file mode 100644 index 00000000..541b4db6 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/a-icon.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/aggregate-value.jpg b/static/img/usage/tools/fastReport-basicGuide/aggregate-value.jpg new file mode 100644 index 00000000..20953f5d Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/aggregate-value.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/batch-email-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/batch-email-insert-code.jpg new file mode 100644 index 00000000..e559f562 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/batch-email-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/batch-email-paste-employee.jpg b/static/img/usage/tools/fastReport-basicGuide/batch-email-paste-employee.jpg new file mode 100644 index 00000000..55ae5e7e Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/batch-email-paste-employee.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/batch-email-paste-quotation.jpg b/static/img/usage/tools/fastReport-basicGuide/batch-email-paste-quotation.jpg new file mode 100644 index 00000000..16a98267 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/batch-email-paste-quotation.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/batch-email.jpg b/static/img/usage/tools/fastReport-basicGuide/batch-email.jpg new file mode 100644 index 00000000..b7a73807 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/batch-email.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/compenent-overlap.jpg b/static/img/usage/tools/fastReport-basicGuide/compenent-overlap.jpg new file mode 100644 index 00000000..07b87641 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/compenent-overlap.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/component-width.jpg b/static/img/usage/tools/fastReport-basicGuide/component-width.jpg new file mode 100644 index 00000000..1530961e Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/component-width.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/continous-grp-header.jpg b/static/img/usage/tools/fastReport-basicGuide/continous-grp-header.jpg new file mode 100644 index 00000000..4692e53a Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/continous-grp-header.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/continous-grp-header2.jpg b/static/img/usage/tools/fastReport-basicGuide/continous-grp-header2.jpg new file mode 100644 index 00000000..26edb47b Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/continous-grp-header2.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/data-set&data-field-selection.jpg b/static/img/usage/tools/fastReport-basicGuide/data-set&data-field-selection.jpg new file mode 100644 index 00000000..bed6f491 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/data-set&data-field-selection.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/display-format-gst-summary.jpg b/static/img/usage/tools/fastReport-basicGuide/display-format-gst-summary.jpg new file mode 100644 index 00000000..11c2013f Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/display-format-gst-summary.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/display-format-options-gst-summary.jpg b/static/img/usage/tools/fastReport-basicGuide/display-format-options-gst-summary.jpg new file mode 100644 index 00000000..10c6a295 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/display-format-options-gst-summary.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/document-detail-expression.jpg b/static/img/usage/tools/fastReport-basicGuide/document-detail-expression.jpg new file mode 100644 index 00000000..44116530 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/document-detail-expression.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/empty-space-right-click.jpg b/static/img/usage/tools/fastReport-basicGuide/empty-space-right-click.jpg new file mode 100644 index 00000000..848cd577 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/empty-space-right-click.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/empty-spaceright-click.jpg b/static/img/usage/tools/fastReport-basicGuide/empty-spaceright-click.jpg new file mode 100644 index 00000000..848cd577 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/empty-spaceright-click.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/example-gl-official-receipt.jpg b/static/img/usage/tools/fastReport-basicGuide/example-gl-official-receipt.jpg new file mode 100644 index 00000000..a4fdec45 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/example-gl-official-receipt.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/example-gl-official-receipt2.jpg b/static/img/usage/tools/fastReport-basicGuide/example-gl-official-receipt2.jpg new file mode 100644 index 00000000..4e9dad18 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/example-gl-official-receipt2.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/example-sales-cash-sales.jpg b/static/img/usage/tools/fastReport-basicGuide/example-sales-cash-sales.jpg new file mode 100644 index 00000000..6d062089 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/example-sales-cash-sales.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/export-to-email.jpg b/static/img/usage/tools/fastReport-basicGuide/export-to-email.jpg new file mode 100644 index 00000000..10e31786 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/export-to-email.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/footer-continue-next-page.jpg b/static/img/usage/tools/fastReport-basicGuide/footer-continue-next-page.jpg new file mode 100644 index 00000000..a0f314ea Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/footer-continue-next-page.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/footer-continue-next-page2.jpg b/static/img/usage/tools/fastReport-basicGuide/footer-continue-next-page2.jpg new file mode 100644 index 00000000..337a4839 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/footer-continue-next-page2.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/fr3-get-shelf-field.jpg b/static/img/usage/tools/fastReport-basicGuide/fr3-get-shelf-field.jpg new file mode 100644 index 00000000..06e79978 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/fr3-get-shelf-field.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/fr3-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/fr3-insert-code.jpg new file mode 100644 index 00000000..9f92d1ed Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/fr3-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/fr3-insert-code2.jpg b/static/img/usage/tools/fastReport-basicGuide/fr3-insert-code2.jpg new file mode 100644 index 00000000..e9eadf70 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/fr3-insert-code2.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/gap-y-0.jpg b/static/img/usage/tools/fastReport-basicGuide/gap-y-0.jpg new file mode 100644 index 00000000..c3b88414 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/gap-y-0.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/gapY-0.jpg b/static/img/usage/tools/fastReport-basicGuide/gapY-0.jpg new file mode 100644 index 00000000..c3b88414 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/gapY-0.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/getidinfo-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/getidinfo-insert-code.jpg new file mode 100644 index 00000000..ebdbef04 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/getidinfo-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/grp-overtime-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/grp-overtime-insert-code.jpg new file mode 100644 index 00000000..00f2a5d6 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/grp-overtime-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/gst-amount.jpg b/static/img/usage/tools/fastReport-basicGuide/gst-amount.jpg new file mode 100644 index 00000000..d7033a21 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/gst-amount.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/gst-amt-options.jpg b/static/img/usage/tools/fastReport-basicGuide/gst-amt-options.jpg new file mode 100644 index 00000000..1ab35cad Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/gst-amt-options.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/gst-summary-insert-code-memo.jpg b/static/img/usage/tools/fastReport-basicGuide/gst-summary-insert-code-memo.jpg new file mode 100644 index 00000000..e4225a33 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/gst-summary-insert-code-memo.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/icons.jpg b/static/img/usage/tools/fastReport-basicGuide/icons.jpg new file mode 100644 index 00000000..634890dd Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/icons.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/insert-band-master-data.jpg b/static/img/usage/tools/fastReport-basicGuide/insert-band-master-data.jpg new file mode 100644 index 00000000..f99f488e Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/insert-band-master-data.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/maintain-batch-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/maintain-batch-insert-code.jpg new file mode 100644 index 00000000..24e5adb8 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/maintain-batch-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/maintain-batch-options.jpg b/static/img/usage/tools/fastReport-basicGuide/maintain-batch-options.jpg new file mode 100644 index 00000000..439da006 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/maintain-batch-options.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/memo-abc.jpg b/static/img/usage/tools/fastReport-basicGuide/memo-abc.jpg new file mode 100644 index 00000000..3d2c5871 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/memo-abc.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/memo-format&category.jpg b/static/img/usage/tools/fastReport-basicGuide/memo-format&category.jpg new file mode 100644 index 00000000..af6742bc Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/memo-format&category.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/memo-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/memo-insert-code.jpg new file mode 100644 index 00000000..cd9120da Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/memo-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/net-unit-price.jpg b/static/img/usage/tools/fastReport-basicGuide/net-unit-price.jpg new file mode 100644 index 00000000..ee58dc67 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/net-unit-price.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/new-employee-batch-email.jpg b/static/img/usage/tools/fastReport-basicGuide/new-employee-batch-email.jpg new file mode 100644 index 00000000..403d7f50 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/new-employee-batch-email.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/paste-components.jpg b/static/img/usage/tools/fastReport-basicGuide/paste-components.jpg new file mode 100644 index 00000000..1f61f25b Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/paste-components.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/picture-field-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/picture-field-insert-code.jpg new file mode 100644 index 00000000..30ea7714 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/picture-field-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/picture-field-insert-code2.jpg b/static/img/usage/tools/fastReport-basicGuide/picture-field-insert-code2.jpg new file mode 100644 index 00000000..d20a4a92 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/picture-field-insert-code2.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/picture-field.jpg b/static/img/usage/tools/fastReport-basicGuide/picture-field.jpg new file mode 100644 index 00000000..20eaf659 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/picture-field.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/quot-no-whatsapp.jpg b/static/img/usage/tools/fastReport-basicGuide/quot-no-whatsapp.jpg new file mode 100644 index 00000000..578b5c15 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/quot-no-whatsapp.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/right-click-memo.jpg b/static/img/usage/tools/fastReport-basicGuide/right-click-memo.jpg new file mode 100644 index 00000000..6498bdec Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/right-click-memo.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/sales-invoice-insert-code-procedure-setup.jpg b/static/img/usage/tools/fastReport-basicGuide/sales-invoice-insert-code-procedure-setup.jpg new file mode 100644 index 00000000..61f32cd2 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/sales-invoice-insert-code-procedure-setup.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/sales-invoice-strfloatdef-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/sales-invoice-strfloatdef-insert-code.jpg new file mode 100644 index 00000000..84e26ef4 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/sales-invoice-strfloatdef-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/select-data-field.jpg b/static/img/usage/tools/fastReport-basicGuide/select-data-field.jpg new file mode 100644 index 00000000..a60a64aa Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/select-data-field.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/shift-when-overlapped.jpg b/static/img/usage/tools/fastReport-basicGuide/shift-when-overlapped.jpg new file mode 100644 index 00000000..05579997 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/shift-when-overlapped.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/show-gst-summary-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/show-gst-summary-insert-code.jpg new file mode 100644 index 00000000..1405d534 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/show-gst-summary-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/subreport-icon-subreport.jpg b/static/img/usage/tools/fastReport-basicGuide/subreport-icon-subreport.jpg new file mode 100644 index 00000000..19df42d7 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/subreport-icon-subreport.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/supplier-bank-insert-code-memo.jpg b/static/img/usage/tools/fastReport-basicGuide/supplier-bank-insert-code-memo.jpg new file mode 100644 index 00000000..fa7e5b2f Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/supplier-bank-insert-code-memo.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/supplier-bank-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/supplier-bank-insert-code.jpg new file mode 100644 index 00000000..719abd37 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/supplier-bank-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/supplier-bank-options.jpg b/static/img/usage/tools/fastReport-basicGuide/supplier-bank-options.jpg new file mode 100644 index 00000000..74dd3ce5 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/supplier-bank-options.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/tick-stretch.jpg b/static/img/usage/tools/fastReport-basicGuide/tick-stretch.jpg new file mode 100644 index 00000000..8011acdd Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/tick-stretch.jpg differ diff --git a/static/img/report/fastReport-basicGuide/tick.png b/static/img/usage/tools/fastReport-basicGuide/tick.png similarity index 100% rename from static/img/report/fastReport-basicGuide/tick.png rename to static/img/usage/tools/fastReport-basicGuide/tick.png diff --git a/static/img/usage/tools/fastReport-basicGuide/total-sve-insert-code.jpg b/static/img/usage/tools/fastReport-basicGuide/total-sve-insert-code.jpg new file mode 100644 index 00000000..f4fe09dc Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/total-sve-insert-code.jpg differ diff --git a/static/img/usage/tools/fastReport-basicGuide/whatsapp-messages-testing.jpg b/static/img/usage/tools/fastReport-basicGuide/whatsapp-messages-testing.jpg new file mode 100644 index 00000000..4a190676 Binary files /dev/null and b/static/img/usage/tools/fastReport-basicGuide/whatsapp-messages-testing.jpg differ diff --git a/static/img/report/loadRptTemplate/1.png b/static/img/usage/tools/rtm-basic-guide/1.png similarity index 100% rename from static/img/report/loadRptTemplate/1.png rename to static/img/usage/tools/rtm-basic-guide/1.png diff --git a/static/img/report/loadRptTemplate/2.png b/static/img/usage/tools/rtm-basic-guide/2.png similarity index 100% rename from static/img/report/loadRptTemplate/2.png rename to static/img/usage/tools/rtm-basic-guide/2.png diff --git a/static/img/report/loadRptTemplate/3.png b/static/img/usage/tools/rtm-basic-guide/3.png similarity index 100% rename from static/img/report/loadRptTemplate/3.png rename to static/img/usage/tools/rtm-basic-guide/3.png diff --git a/static/img/usage/tools/rtm-basic-guide/calc-tab-insert-code.jpg b/static/img/usage/tools/rtm-basic-guide/calc-tab-insert-code.jpg new file mode 100644 index 00000000..296bf6ff Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/calc-tab-insert-code.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/calctab-module-insert-variable.jpg b/static/img/usage/tools/rtm-basic-guide/calctab-module-insert-variable.jpg new file mode 100644 index 00000000..2d58f896 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/calctab-module-insert-variable.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/event-oncreate-insert-code-datafrom-available-pipeline.jpg b/static/img/usage/tools/rtm-basic-guide/event-oncreate-insert-code-datafrom-available-pipeline.jpg new file mode 100644 index 00000000..0b39772c Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/event-oncreate-insert-code-datafrom-available-pipeline.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/event-oncreate-insert-code.jpg b/static/img/usage/tools/rtm-basic-guide/event-oncreate-insert-code.jpg new file mode 100644 index 00000000..3d8d82c5 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/event-oncreate-insert-code.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/insert-code-in-oncalc-singlefield.jpg b/static/img/usage/tools/rtm-basic-guide/insert-code-in-oncalc-singlefield.jpg new file mode 100644 index 00000000..0ae201a4 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/insert-code-in-oncalc-singlefield.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/insert-code-in-oncalc.jpg b/static/img/usage/tools/rtm-basic-guide/insert-code-in-oncalc.jpg new file mode 100644 index 00000000..0ae201a4 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/insert-code-in-oncalc.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/output-type.jpg b/static/img/usage/tools/rtm-basic-guide/output-type.jpg new file mode 100644 index 00000000..350ce6b9 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/output-type.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/parentwidth-subreport-rightclick.jpg b/static/img/usage/tools/rtm-basic-guide/parentwidth-subreport-rightclick.jpg new file mode 100644 index 00000000..ce4fa4dc Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/parentwidth-subreport-rightclick.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/pipeline-and-expdate.jpg b/static/img/usage/tools/rtm-basic-guide/pipeline-and-expdate.jpg new file mode 100644 index 00000000..3960830d Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/pipeline-and-expdate.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/pipeline-field-place.jpg b/static/img/usage/tools/rtm-basic-guide/pipeline-field-place.jpg new file mode 100644 index 00000000..e31fa090 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/pipeline-field-place.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/procedure-before-print-insert-code.jpg b/static/img/usage/tools/rtm-basic-guide/procedure-before-print-insert-code.jpg new file mode 100644 index 00000000..808f57ff Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/procedure-before-print-insert-code.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/program-function-insert-code.jpg b/static/img/usage/tools/rtm-basic-guide/program-function-insert-code.jpg new file mode 100644 index 00000000..7f4ce797 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/program-function-insert-code.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/report-settings.jpg b/static/img/usage/tools/rtm-basic-guide/report-settings.jpg new file mode 100644 index 00000000..bd7bb654 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/report-settings.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/subreport-place.jpg b/static/img/usage/tools/rtm-basic-guide/subreport-place.jpg new file mode 100644 index 00000000..72ac1dd8 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/subreport-place.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/variable-insert-code-right-click.jpg b/static/img/usage/tools/rtm-basic-guide/variable-insert-code-right-click.jpg new file mode 100644 index 00000000..206b9729 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/variable-insert-code-right-click.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/variable-to-double.jpg b/static/img/usage/tools/rtm-basic-guide/variable-to-double.jpg new file mode 100644 index 00000000..9a310372 Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/variable-to-double.jpg differ diff --git a/static/img/usage/tools/rtm-basic-guide/variables-place.jpg b/static/img/usage/tools/rtm-basic-guide/variables-place.jpg new file mode 100644 index 00000000..b7c17fae Binary files /dev/null and b/static/img/usage/tools/rtm-basic-guide/variables-place.jpg differ diff --git a/static/img/report/add-fromDocNo-fromDocDate/1.png b/static/img/usage/tools/rtm-faq/1.png similarity index 100% rename from static/img/report/add-fromDocNo-fromDocDate/1.png rename to static/img/usage/tools/rtm-faq/1.png diff --git a/static/img/report/roundingRpt/10.png b/static/img/usage/tools/rtm-faq/10a.png similarity index 100% rename from static/img/report/roundingRpt/10.png rename to static/img/usage/tools/rtm-faq/10a.png diff --git a/static/img/report/crtSUMforTaxCol/1.png b/static/img/usage/tools/rtm-faq/11.png similarity index 100% rename from static/img/report/crtSUMforTaxCol/1.png rename to static/img/usage/tools/rtm-faq/11.png diff --git a/static/img/report/disbQryinRpt/1.png b/static/img/usage/tools/rtm-faq/111.png similarity index 100% rename from static/img/report/disbQryinRpt/1.png rename to static/img/usage/tools/rtm-faq/111.png diff --git a/static/img/report/displayExmpNoExpDateInv/1.png b/static/img/usage/tools/rtm-faq/1111.png similarity index 100% rename from static/img/report/displayExmpNoExpDateInv/1.png rename to static/img/usage/tools/rtm-faq/1111.png diff --git a/static/img/report/ORSetKnockOffGridToShwFullWidth/1.png b/static/img/usage/tools/rtm-faq/11111.png similarity index 100% rename from static/img/report/ORSetKnockOffGridToShwFullWidth/1.png rename to static/img/usage/tools/rtm-faq/11111.png diff --git a/static/img/report/roundingRpt/11.png b/static/img/usage/tools/rtm-faq/11a.png similarity index 100% rename from static/img/report/roundingRpt/11.png rename to static/img/usage/tools/rtm-faq/11a.png diff --git a/static/img/report/dragXMLRpt/1.png b/static/img/usage/tools/rtm-faq/12.png similarity index 100% rename from static/img/report/dragXMLRpt/1.png rename to static/img/usage/tools/rtm-faq/12.png diff --git a/static/img/report/roundingRpt/12.png b/static/img/usage/tools/rtm-faq/12a.png similarity index 100% rename from static/img/report/roundingRpt/12.png rename to static/img/usage/tools/rtm-faq/12a.png diff --git a/static/img/report/roundingRpt/13.png b/static/img/usage/tools/rtm-faq/13a.png similarity index 100% rename from static/img/report/roundingRpt/13.png rename to static/img/usage/tools/rtm-faq/13a.png diff --git a/static/img/report/roundingRpt/14.png b/static/img/usage/tools/rtm-faq/14a.png similarity index 100% rename from static/img/report/roundingRpt/14.png rename to static/img/usage/tools/rtm-faq/14a.png diff --git a/static/img/report/roundingRpt/15.png b/static/img/usage/tools/rtm-faq/15a.png similarity index 100% rename from static/img/report/roundingRpt/15.png rename to static/img/usage/tools/rtm-faq/15a.png diff --git a/static/img/report/roundingRpt/16.png b/static/img/usage/tools/rtm-faq/16a.png similarity index 100% rename from static/img/report/roundingRpt/16.png rename to static/img/usage/tools/rtm-faq/16a.png diff --git a/static/img/report/roundingRpt/17.png b/static/img/usage/tools/rtm-faq/17a.png similarity index 100% rename from static/img/report/roundingRpt/17.png rename to static/img/usage/tools/rtm-faq/17a.png diff --git a/static/img/report/roundingRpt/18.png b/static/img/usage/tools/rtm-faq/18a.png similarity index 100% rename from static/img/report/roundingRpt/18.png rename to static/img/usage/tools/rtm-faq/18a.png diff --git a/static/img/report/roundingRpt/19.png b/static/img/usage/tools/rtm-faq/19a.png similarity index 100% rename from static/img/report/roundingRpt/19.png rename to static/img/usage/tools/rtm-faq/19a.png diff --git a/static/img/report/roundingRpt/1.png b/static/img/usage/tools/rtm-faq/1a.png similarity index 100% rename from static/img/report/roundingRpt/1.png rename to static/img/usage/tools/rtm-faq/1a.png diff --git a/static/img/report/RTM-6to0/1.png b/static/img/usage/tools/rtm-faq/1b.png similarity index 100% rename from static/img/report/RTM-6to0/1.png rename to static/img/usage/tools/rtm-faq/1b.png diff --git a/static/img/report/add-fromDocNo-fromDocDate/2.png b/static/img/usage/tools/rtm-faq/2.png similarity index 100% rename from static/img/report/add-fromDocNo-fromDocDate/2.png rename to static/img/usage/tools/rtm-faq/2.png diff --git a/static/img/report/roundingRpt/20.png b/static/img/usage/tools/rtm-faq/20a.png similarity index 100% rename from static/img/report/roundingRpt/20.png rename to static/img/usage/tools/rtm-faq/20a.png diff --git a/static/img/report/dragXMLRpt/2.png b/static/img/usage/tools/rtm-faq/21.png similarity index 100% rename from static/img/report/dragXMLRpt/2.png rename to static/img/usage/tools/rtm-faq/21.png diff --git a/static/img/report/roundingRpt/21.png b/static/img/usage/tools/rtm-faq/21a.png similarity index 100% rename from static/img/report/roundingRpt/21.png rename to static/img/usage/tools/rtm-faq/21a.png diff --git a/static/img/report/disbQryinRpt/2.png b/static/img/usage/tools/rtm-faq/22.png similarity index 100% rename from static/img/report/disbQryinRpt/2.png rename to static/img/usage/tools/rtm-faq/22.png diff --git a/static/img/report/displayExmpNoExpDateInv/2.png b/static/img/usage/tools/rtm-faq/2222.png similarity index 100% rename from static/img/report/displayExmpNoExpDateInv/2.png rename to static/img/usage/tools/rtm-faq/2222.png diff --git a/static/img/report/ORSetKnockOffGridToShwFullWidth/2.png b/static/img/usage/tools/rtm-faq/22222.png similarity index 100% rename from static/img/report/ORSetKnockOffGridToShwFullWidth/2.png rename to static/img/usage/tools/rtm-faq/22222.png diff --git a/static/img/report/roundingRpt/22.png b/static/img/usage/tools/rtm-faq/22a.png similarity index 100% rename from static/img/report/roundingRpt/22.png rename to static/img/usage/tools/rtm-faq/22a.png diff --git a/static/img/report/roundingRpt/2.png b/static/img/usage/tools/rtm-faq/2a.png similarity index 100% rename from static/img/report/roundingRpt/2.png rename to static/img/usage/tools/rtm-faq/2a.png diff --git a/static/img/report/RTM-6to0/2.png b/static/img/usage/tools/rtm-faq/2b.png similarity index 100% rename from static/img/report/RTM-6to0/2.png rename to static/img/usage/tools/rtm-faq/2b.png diff --git a/static/img/report/add-fromDocNo-fromDocDate/3.png b/static/img/usage/tools/rtm-faq/3.png similarity index 100% rename from static/img/report/add-fromDocNo-fromDocDate/3.png rename to static/img/usage/tools/rtm-faq/3.png diff --git a/static/img/report/disbQryinRpt/3.png b/static/img/usage/tools/rtm-faq/33.png similarity index 100% rename from static/img/report/disbQryinRpt/3.png rename to static/img/usage/tools/rtm-faq/33.png diff --git a/static/img/report/displayExmpNoExpDateInv/3.png b/static/img/usage/tools/rtm-faq/3333.png similarity index 100% rename from static/img/report/displayExmpNoExpDateInv/3.png rename to static/img/usage/tools/rtm-faq/3333.png diff --git a/static/img/report/ORSetKnockOffGridToShwFullWidth/3.png b/static/img/usage/tools/rtm-faq/33333.png similarity index 100% rename from static/img/report/ORSetKnockOffGridToShwFullWidth/3.png rename to static/img/usage/tools/rtm-faq/33333.png diff --git a/static/img/report/roundingRpt/3.png b/static/img/usage/tools/rtm-faq/3a.png similarity index 100% rename from static/img/report/roundingRpt/3.png rename to static/img/usage/tools/rtm-faq/3a.png diff --git a/static/img/report/RTM-6to0/3.png b/static/img/usage/tools/rtm-faq/3b.png similarity index 100% rename from static/img/report/RTM-6to0/3.png rename to static/img/usage/tools/rtm-faq/3b.png diff --git a/static/img/report/add-fromDocNo-fromDocDate/4.png b/static/img/usage/tools/rtm-faq/4.png similarity index 100% rename from static/img/report/add-fromDocNo-fromDocDate/4.png rename to static/img/usage/tools/rtm-faq/4.png diff --git a/static/img/report/disbQryinRpt/4.png b/static/img/usage/tools/rtm-faq/44.png similarity index 100% rename from static/img/report/disbQryinRpt/4.png rename to static/img/usage/tools/rtm-faq/44.png diff --git a/static/img/report/displayExmpNoExpDateInv/4.png b/static/img/usage/tools/rtm-faq/4444.png similarity index 100% rename from static/img/report/displayExmpNoExpDateInv/4.png rename to static/img/usage/tools/rtm-faq/4444.png diff --git a/static/img/report/ORSetKnockOffGridToShwFullWidth/4.png b/static/img/usage/tools/rtm-faq/44444.png similarity index 100% rename from static/img/report/ORSetKnockOffGridToShwFullWidth/4.png rename to static/img/usage/tools/rtm-faq/44444.png diff --git a/static/img/report/roundingRpt/4.png b/static/img/usage/tools/rtm-faq/4a.png similarity index 100% rename from static/img/report/roundingRpt/4.png rename to static/img/usage/tools/rtm-faq/4a.png diff --git a/static/img/report/RTM-6to0/4.png b/static/img/usage/tools/rtm-faq/4b.png similarity index 100% rename from static/img/report/RTM-6to0/4.png rename to static/img/usage/tools/rtm-faq/4b.png diff --git a/static/img/report/disbQryinRpt/5.png b/static/img/usage/tools/rtm-faq/5.png similarity index 100% rename from static/img/report/disbQryinRpt/5.png rename to static/img/usage/tools/rtm-faq/5.png diff --git a/static/img/report/displayExmpNoExpDateInv/5.png b/static/img/usage/tools/rtm-faq/5555.png similarity index 100% rename from static/img/report/displayExmpNoExpDateInv/5.png rename to static/img/usage/tools/rtm-faq/5555.png diff --git a/static/img/report/ORSetKnockOffGridToShwFullWidth/5.png b/static/img/usage/tools/rtm-faq/55555.png similarity index 100% rename from static/img/report/ORSetKnockOffGridToShwFullWidth/5.png rename to static/img/usage/tools/rtm-faq/55555.png diff --git a/static/img/report/roundingRpt/5.png b/static/img/usage/tools/rtm-faq/5a.png similarity index 100% rename from static/img/report/roundingRpt/5.png rename to static/img/usage/tools/rtm-faq/5a.png diff --git a/static/img/report/RTM-6to0/5.png b/static/img/usage/tools/rtm-faq/5b.png similarity index 100% rename from static/img/report/RTM-6to0/5.png rename to static/img/usage/tools/rtm-faq/5b.png diff --git a/static/img/report/disbQryinRpt/6.png b/static/img/usage/tools/rtm-faq/6.png similarity index 100% rename from static/img/report/disbQryinRpt/6.png rename to static/img/usage/tools/rtm-faq/6.png diff --git a/static/img/report/displayExmpNoExpDateInv/6.png b/static/img/usage/tools/rtm-faq/6666.png similarity index 100% rename from static/img/report/displayExmpNoExpDateInv/6.png rename to static/img/usage/tools/rtm-faq/6666.png diff --git a/static/img/report/ORSetKnockOffGridToShwFullWidth/6.png b/static/img/usage/tools/rtm-faq/66666.png similarity index 100% rename from static/img/report/ORSetKnockOffGridToShwFullWidth/6.png rename to static/img/usage/tools/rtm-faq/66666.png diff --git a/static/img/report/roundingRpt/6.png b/static/img/usage/tools/rtm-faq/6a.png similarity index 100% rename from static/img/report/roundingRpt/6.png rename to static/img/usage/tools/rtm-faq/6a.png diff --git a/static/img/report/RTM-6to0/6.png b/static/img/usage/tools/rtm-faq/6b.png similarity index 100% rename from static/img/report/RTM-6to0/6.png rename to static/img/usage/tools/rtm-faq/6b.png diff --git a/static/img/report/disbQryinRpt/7.png b/static/img/usage/tools/rtm-faq/7.png similarity index 100% rename from static/img/report/disbQryinRpt/7.png rename to static/img/usage/tools/rtm-faq/7.png diff --git a/static/img/report/displayExmpNoExpDateInv/7.png b/static/img/usage/tools/rtm-faq/7777.png similarity index 100% rename from static/img/report/displayExmpNoExpDateInv/7.png rename to static/img/usage/tools/rtm-faq/7777.png diff --git a/static/img/report/roundingRpt/7.png b/static/img/usage/tools/rtm-faq/7a.png similarity index 100% rename from static/img/report/roundingRpt/7.png rename to static/img/usage/tools/rtm-faq/7a.png diff --git a/static/img/report/displayExmpNoExpDateInv/8.png b/static/img/usage/tools/rtm-faq/8888.png similarity index 100% rename from static/img/report/displayExmpNoExpDateInv/8.png rename to static/img/usage/tools/rtm-faq/8888.png diff --git a/static/img/report/roundingRpt/8.png b/static/img/usage/tools/rtm-faq/8a.png similarity index 100% rename from static/img/report/roundingRpt/8.png rename to static/img/usage/tools/rtm-faq/8a.png diff --git a/static/img/report/displayExmpNoExpDateInv/9.png b/static/img/usage/tools/rtm-faq/9999.png similarity index 100% rename from static/img/report/displayExmpNoExpDateInv/9.png rename to static/img/usage/tools/rtm-faq/9999.png diff --git a/static/img/report/roundingRpt/9.png b/static/img/usage/tools/rtm-faq/9a.png similarity index 100% rename from static/img/report/roundingRpt/9.png rename to static/img/usage/tools/rtm-faq/9a.png diff --git a/static/img/usage/tools/rtm-faq/compression-level-clmax.jpg b/static/img/usage/tools/rtm-faq/compression-level-clmax.jpg new file mode 100644 index 00000000..58e6c146 Binary files /dev/null and b/static/img/usage/tools/rtm-faq/compression-level-clmax.jpg differ diff --git a/static/img/usage/tools/rtm-faq/image-compression-level-1.jpg b/static/img/usage/tools/rtm-faq/image-compression-level-1.jpg new file mode 100644 index 00000000..a00a3b5e Binary files /dev/null and b/static/img/usage/tools/rtm-faq/image-compression-level-1.jpg differ diff --git a/static/img/usage/tools/rtm-faq/qrcode-autosize.jpg b/static/img/usage/tools/rtm-faq/qrcode-autosize.jpg new file mode 100644 index 00000000..8ac33adf Binary files /dev/null and b/static/img/usage/tools/rtm-faq/qrcode-autosize.jpg differ diff --git a/static/img/usage/tools/rtm-faq/qrcode-settings.jpg b/static/img/usage/tools/rtm-faq/qrcode-settings.jpg new file mode 100644 index 00000000..98126e89 Binary files /dev/null and b/static/img/usage/tools/rtm-faq/qrcode-settings.jpg differ diff --git a/static/img/usage/tools/rtm-faq/rename-component.jpg b/static/img/usage/tools/rtm-faq/rename-component.jpg new file mode 100644 index 00000000..0168e102 Binary files /dev/null and b/static/img/usage/tools/rtm-faq/rename-component.jpg differ diff --git a/static/img/tools/acceptable-transaction-date/1.png b/static/img/usage/tools/tools-basic-guide/1.png similarity index 100% rename from static/img/tools/acceptable-transaction-date/1.png rename to static/img/usage/tools/tools-basic-guide/1.png diff --git a/static/img/sales/start-online-mobile-approval/10.png b/static/img/usage/tools/tools-basic-guide/10.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/10.png rename to static/img/usage/tools/tools-basic-guide/10.png diff --git a/static/img/sales/start-online-mobile-approval/11.png b/static/img/usage/tools/tools-basic-guide/11.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/11.png rename to static/img/usage/tools/tools-basic-guide/11.png diff --git a/static/img/getting-started/user-guide/110.png b/static/img/usage/tools/tools-basic-guide/110.png similarity index 100% rename from static/img/getting-started/user-guide/110.png rename to static/img/usage/tools/tools-basic-guide/110.png diff --git a/static/img/getting-started/user-guide/111.png b/static/img/usage/tools/tools-basic-guide/111.png similarity index 100% rename from static/img/getting-started/user-guide/111.png rename to static/img/usage/tools/tools-basic-guide/111.png diff --git a/static/img/getting-started/user-guide/111a.png b/static/img/usage/tools/tools-basic-guide/111a.png similarity index 100% rename from static/img/getting-started/user-guide/111a.png rename to static/img/usage/tools/tools-basic-guide/111a.png diff --git a/static/img/sales/start-online-mobile-approval/1.png b/static/img/usage/tools/tools-basic-guide/111c.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/1.png rename to static/img/usage/tools/tools-basic-guide/111c.png diff --git a/static/img/getting-started/user-guide/112.png b/static/img/usage/tools/tools-basic-guide/112.png similarity index 100% rename from static/img/getting-started/user-guide/112.png rename to static/img/usage/tools/tools-basic-guide/112.png diff --git a/static/img/getting-started/user-guide/114.png b/static/img/usage/tools/tools-basic-guide/114.png similarity index 100% rename from static/img/getting-started/user-guide/114.png rename to static/img/usage/tools/tools-basic-guide/114.png diff --git a/static/img/getting-started/user-guide/115.png b/static/img/usage/tools/tools-basic-guide/115.png similarity index 100% rename from static/img/getting-started/user-guide/115.png rename to static/img/usage/tools/tools-basic-guide/115.png diff --git a/static/img/getting-started/user-guide/116.png b/static/img/usage/tools/tools-basic-guide/116.png similarity index 100% rename from static/img/getting-started/user-guide/116.png rename to static/img/usage/tools/tools-basic-guide/116.png diff --git a/static/img/getting-started/user-guide/117.png b/static/img/usage/tools/tools-basic-guide/117.png similarity index 100% rename from static/img/getting-started/user-guide/117.png rename to static/img/usage/tools/tools-basic-guide/117.png diff --git a/static/img/getting-started/user-guide/118.png b/static/img/usage/tools/tools-basic-guide/118.png similarity index 100% rename from static/img/getting-started/user-guide/118.png rename to static/img/usage/tools/tools-basic-guide/118.png diff --git a/static/img/getting-started/user-guide/119.png b/static/img/usage/tools/tools-basic-guide/119.png similarity index 100% rename from static/img/getting-started/user-guide/119.png rename to static/img/usage/tools/tools-basic-guide/119.png diff --git a/static/img/sales/start-online-mobile-approval/12.png b/static/img/usage/tools/tools-basic-guide/12.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/12.png rename to static/img/usage/tools/tools-basic-guide/12.png diff --git a/static/img/getting-started/user-guide/120.png b/static/img/usage/tools/tools-basic-guide/120.png similarity index 100% rename from static/img/getting-started/user-guide/120.png rename to static/img/usage/tools/tools-basic-guide/120.png diff --git a/static/img/getting-started/user-guide/121.png b/static/img/usage/tools/tools-basic-guide/121.png similarity index 100% rename from static/img/getting-started/user-guide/121.png rename to static/img/usage/tools/tools-basic-guide/121.png diff --git a/static/img/getting-started/user-guide/122.png b/static/img/usage/tools/tools-basic-guide/122.png similarity index 100% rename from static/img/getting-started/user-guide/122.png rename to static/img/usage/tools/tools-basic-guide/122.png diff --git a/static/img/getting-started/user-guide/123.png b/static/img/usage/tools/tools-basic-guide/123.png similarity index 100% rename from static/img/getting-started/user-guide/123.png rename to static/img/usage/tools/tools-basic-guide/123.png diff --git a/static/img/getting-started/user-guide/124.png b/static/img/usage/tools/tools-basic-guide/124.png similarity index 100% rename from static/img/getting-started/user-guide/124.png rename to static/img/usage/tools/tools-basic-guide/124.png diff --git a/static/img/getting-started/user-guide/125.png b/static/img/usage/tools/tools-basic-guide/125.png similarity index 100% rename from static/img/getting-started/user-guide/125.png rename to static/img/usage/tools/tools-basic-guide/125.png diff --git a/static/img/getting-started/user-guide/126.png b/static/img/usage/tools/tools-basic-guide/126.png similarity index 100% rename from static/img/getting-started/user-guide/126.png rename to static/img/usage/tools/tools-basic-guide/126.png diff --git a/static/img/getting-started/user-guide/127.png b/static/img/usage/tools/tools-basic-guide/127.png similarity index 100% rename from static/img/getting-started/user-guide/127.png rename to static/img/usage/tools/tools-basic-guide/127.png diff --git a/static/img/getting-started/user-guide/128.png b/static/img/usage/tools/tools-basic-guide/128.png similarity index 100% rename from static/img/getting-started/user-guide/128.png rename to static/img/usage/tools/tools-basic-guide/128.png diff --git a/static/img/getting-started/user-guide/129.png b/static/img/usage/tools/tools-basic-guide/129.png similarity index 100% rename from static/img/getting-started/user-guide/129.png rename to static/img/usage/tools/tools-basic-guide/129.png diff --git a/static/img/sales/start-online-mobile-approval/13.png b/static/img/usage/tools/tools-basic-guide/13.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/13.png rename to static/img/usage/tools/tools-basic-guide/13.png diff --git a/static/img/getting-started/user-guide/130.png b/static/img/usage/tools/tools-basic-guide/130.png similarity index 100% rename from static/img/getting-started/user-guide/130.png rename to static/img/usage/tools/tools-basic-guide/130.png diff --git a/static/img/getting-started/user-guide/131.png b/static/img/usage/tools/tools-basic-guide/131.png similarity index 100% rename from static/img/getting-started/user-guide/131.png rename to static/img/usage/tools/tools-basic-guide/131.png diff --git a/static/img/getting-started/user-guide/132.png b/static/img/usage/tools/tools-basic-guide/132.png similarity index 100% rename from static/img/getting-started/user-guide/132.png rename to static/img/usage/tools/tools-basic-guide/132.png diff --git a/static/img/getting-started/user-guide/133.png b/static/img/usage/tools/tools-basic-guide/133.png similarity index 100% rename from static/img/getting-started/user-guide/133.png rename to static/img/usage/tools/tools-basic-guide/133.png diff --git a/static/img/getting-started/user-guide/134.png b/static/img/usage/tools/tools-basic-guide/134.png similarity index 100% rename from static/img/getting-started/user-guide/134.png rename to static/img/usage/tools/tools-basic-guide/134.png diff --git a/static/img/getting-started/user-guide/135.png b/static/img/usage/tools/tools-basic-guide/135.png similarity index 100% rename from static/img/getting-started/user-guide/135.png rename to static/img/usage/tools/tools-basic-guide/135.png diff --git a/static/img/getting-started/user-guide/136.png b/static/img/usage/tools/tools-basic-guide/136.png similarity index 100% rename from static/img/getting-started/user-guide/136.png rename to static/img/usage/tools/tools-basic-guide/136.png diff --git a/static/img/getting-started/user-guide/137.png b/static/img/usage/tools/tools-basic-guide/137.png similarity index 100% rename from static/img/getting-started/user-guide/137.png rename to static/img/usage/tools/tools-basic-guide/137.png diff --git a/static/img/getting-started/user-guide/138.png b/static/img/usage/tools/tools-basic-guide/138.png similarity index 100% rename from static/img/getting-started/user-guide/138.png rename to static/img/usage/tools/tools-basic-guide/138.png diff --git a/static/img/getting-started/user-guide/139.png b/static/img/usage/tools/tools-basic-guide/139.png similarity index 100% rename from static/img/getting-started/user-guide/139.png rename to static/img/usage/tools/tools-basic-guide/139.png diff --git a/static/img/sales/start-online-mobile-approval/14.png b/static/img/usage/tools/tools-basic-guide/14.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/14.png rename to static/img/usage/tools/tools-basic-guide/14.png diff --git a/static/img/getting-started/user-guide/140.png b/static/img/usage/tools/tools-basic-guide/140.png similarity index 100% rename from static/img/getting-started/user-guide/140.png rename to static/img/usage/tools/tools-basic-guide/140.png diff --git a/static/img/getting-started/user-guide/141.png b/static/img/usage/tools/tools-basic-guide/141.png similarity index 100% rename from static/img/getting-started/user-guide/141.png rename to static/img/usage/tools/tools-basic-guide/141.png diff --git a/static/img/getting-started/user-guide/142.png b/static/img/usage/tools/tools-basic-guide/142.png similarity index 100% rename from static/img/getting-started/user-guide/142.png rename to static/img/usage/tools/tools-basic-guide/142.png diff --git a/static/img/getting-started/user-guide/143.png b/static/img/usage/tools/tools-basic-guide/143.png similarity index 100% rename from static/img/getting-started/user-guide/143.png rename to static/img/usage/tools/tools-basic-guide/143.png diff --git a/static/img/getting-started/user-guide/144.png b/static/img/usage/tools/tools-basic-guide/144.png similarity index 100% rename from static/img/getting-started/user-guide/144.png rename to static/img/usage/tools/tools-basic-guide/144.png diff --git a/static/img/getting-started/user-guide/145.png b/static/img/usage/tools/tools-basic-guide/145.png similarity index 100% rename from static/img/getting-started/user-guide/145.png rename to static/img/usage/tools/tools-basic-guide/145.png diff --git a/static/img/getting-started/user-guide/146.png b/static/img/usage/tools/tools-basic-guide/146.png similarity index 100% rename from static/img/getting-started/user-guide/146.png rename to static/img/usage/tools/tools-basic-guide/146.png diff --git a/static/img/getting-started/user-guide/147.png b/static/img/usage/tools/tools-basic-guide/147.png similarity index 100% rename from static/img/getting-started/user-guide/147.png rename to static/img/usage/tools/tools-basic-guide/147.png diff --git a/static/img/getting-started/user-guide/148.png b/static/img/usage/tools/tools-basic-guide/148.png similarity index 100% rename from static/img/getting-started/user-guide/148.png rename to static/img/usage/tools/tools-basic-guide/148.png diff --git a/static/img/sales/start-online-mobile-approval/15.png b/static/img/usage/tools/tools-basic-guide/15.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/15.png rename to static/img/usage/tools/tools-basic-guide/15.png diff --git a/static/img/sales/start-online-mobile-approval/16.png b/static/img/usage/tools/tools-basic-guide/16.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/16.png rename to static/img/usage/tools/tools-basic-guide/16.png diff --git a/static/img/sales/start-online-mobile-approval/17.png b/static/img/usage/tools/tools-basic-guide/17.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/17.png rename to static/img/usage/tools/tools-basic-guide/17.png diff --git a/static/img/sales/start-online-mobile-approval/18.png b/static/img/usage/tools/tools-basic-guide/18.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/18.png rename to static/img/usage/tools/tools-basic-guide/18.png diff --git a/static/img/sales/start-online-mobile-approval/19.png b/static/img/usage/tools/tools-basic-guide/19.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/19.png rename to static/img/usage/tools/tools-basic-guide/19.png diff --git a/static/img/tools/acceptable-transaction-date/2.png b/static/img/usage/tools/tools-basic-guide/2.png similarity index 100% rename from static/img/tools/acceptable-transaction-date/2.png rename to static/img/usage/tools/tools-basic-guide/2.png diff --git a/static/img/sales/start-online-mobile-approval/2.png b/static/img/usage/tools/tools-basic-guide/21.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/2.png rename to static/img/usage/tools/tools-basic-guide/21.png diff --git a/static/img/tools/acceptable-transaction-date/3.png b/static/img/usage/tools/tools-basic-guide/3.png similarity index 100% rename from static/img/tools/acceptable-transaction-date/3.png rename to static/img/usage/tools/tools-basic-guide/3.png diff --git a/static/img/sales/start-online-mobile-approval/3.png b/static/img/usage/tools/tools-basic-guide/31.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/3.png rename to static/img/usage/tools/tools-basic-guide/31.png diff --git a/static/img/tools/global-price-change/3.png b/static/img/usage/tools/tools-basic-guide/3b.png similarity index 100% rename from static/img/tools/global-price-change/3.png rename to static/img/usage/tools/tools-basic-guide/3b.png diff --git a/static/img/tools/acceptable-transaction-date/4.png b/static/img/usage/tools/tools-basic-guide/4.png similarity index 100% rename from static/img/tools/acceptable-transaction-date/4.png rename to static/img/usage/tools/tools-basic-guide/4.png diff --git a/static/img/sales/start-online-mobile-approval/4.png b/static/img/usage/tools/tools-basic-guide/41.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/4.png rename to static/img/usage/tools/tools-basic-guide/41.png diff --git a/static/img/tools/global-price-change/4.png b/static/img/usage/tools/tools-basic-guide/4b.png similarity index 100% rename from static/img/tools/global-price-change/4.png rename to static/img/usage/tools/tools-basic-guide/4b.png diff --git a/static/img/tools/acceptable-transaction-date/5.png b/static/img/usage/tools/tools-basic-guide/5.png similarity index 100% rename from static/img/tools/acceptable-transaction-date/5.png rename to static/img/usage/tools/tools-basic-guide/5.png diff --git a/static/img/sales/start-online-mobile-approval/5.png b/static/img/usage/tools/tools-basic-guide/51.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/5.png rename to static/img/usage/tools/tools-basic-guide/51.png diff --git a/static/img/tools/global-price-change/5.png b/static/img/usage/tools/tools-basic-guide/5b.png similarity index 100% rename from static/img/tools/global-price-change/5.png rename to static/img/usage/tools/tools-basic-guide/5b.png diff --git a/static/img/tools/acceptable-transaction-date/6.png b/static/img/usage/tools/tools-basic-guide/6.png similarity index 100% rename from static/img/tools/acceptable-transaction-date/6.png rename to static/img/usage/tools/tools-basic-guide/6.png diff --git a/static/img/sales/start-online-mobile-approval/6.png b/static/img/usage/tools/tools-basic-guide/61.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/6.png rename to static/img/usage/tools/tools-basic-guide/61.png diff --git a/static/img/tools/global-price-change/6.png b/static/img/usage/tools/tools-basic-guide/6b.png similarity index 100% rename from static/img/tools/global-price-change/6.png rename to static/img/usage/tools/tools-basic-guide/6b.png diff --git a/static/img/tools/acceptable-transaction-date/7.png b/static/img/usage/tools/tools-basic-guide/7.png similarity index 100% rename from static/img/tools/acceptable-transaction-date/7.png rename to static/img/usage/tools/tools-basic-guide/7.png diff --git a/static/img/sales/start-online-mobile-approval/7.png b/static/img/usage/tools/tools-basic-guide/71.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/7.png rename to static/img/usage/tools/tools-basic-guide/71.png diff --git a/static/img/tools/global-price-change/7.png b/static/img/usage/tools/tools-basic-guide/7b.png similarity index 100% rename from static/img/tools/global-price-change/7.png rename to static/img/usage/tools/tools-basic-guide/7b.png diff --git a/static/img/sales/start-online-mobile-approval/8.png b/static/img/usage/tools/tools-basic-guide/8.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/8.png rename to static/img/usage/tools/tools-basic-guide/8.png diff --git a/static/img/tools/global-price-change/8.png b/static/img/usage/tools/tools-basic-guide/8b.png similarity index 100% rename from static/img/tools/global-price-change/8.png rename to static/img/usage/tools/tools-basic-guide/8b.png diff --git a/static/img/sales/start-online-mobile-approval/9.png b/static/img/usage/tools/tools-basic-guide/9.png similarity index 100% rename from static/img/sales/start-online-mobile-approval/9.png rename to static/img/usage/tools/tools-basic-guide/9.png diff --git a/static/img/usage/tools/tools-basic-guide/acc-name.jpg b/static/img/usage/tools/tools-basic-guide/acc-name.jpg new file mode 100644 index 00000000..d6ff5757 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/acc-name.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/access-id.jpg b/static/img/usage/tools/tools-basic-guide/access-id.jpg new file mode 100644 index 00000000..8d86bb0b Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/access-id.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/adjust-cash-sales-amt.jpg b/static/img/usage/tools/tools-basic-guide/adjust-cash-sales-amt.jpg new file mode 100644 index 00000000..0a73d584 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/adjust-cash-sales-amt.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-complete-message.jpg b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-complete-message.jpg new file mode 100644 index 00000000..46415592 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-complete-message.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-log-detail.jpg b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-log-detail.jpg new file mode 100644 index 00000000..1be84e56 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-log-detail.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-log-paste-notepad.jpg b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-log-paste-notepad.jpg new file mode 100644 index 00000000..dda7e59a Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-log-paste-notepad.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-start.jpg b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-start.jpg new file mode 100644 index 00000000..5cc9e7b8 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity-start.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/analyse-data-integrity.jpg b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity.jpg new file mode 100644 index 00000000..9e3800b1 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/analyse-data-integrity.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/audit-sales-and-purchase.jpg b/static/img/usage/tools/tools-basic-guide/audit-sales-and-purchase.jpg new file mode 100644 index 00000000..aebaed63 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/audit-sales-and-purchase.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/audit-trail.jpg b/static/img/usage/tools/tools-basic-guide/audit-trail.jpg new file mode 100644 index 00000000..70e47dd5 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/audit-trail.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/authenticator.jpg b/static/img/usage/tools/tools-basic-guide/authenticator.jpg new file mode 100644 index 00000000..2fc837aa Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/authenticator.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/bar-code-same-as-in-item.jpg b/static/img/usage/tools/tools-basic-guide/bar-code-same-as-in-item.jpg new file mode 100644 index 00000000..b74e36df Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/bar-code-same-as-in-item.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/bar-code.jpg b/static/img/usage/tools/tools-basic-guide/bar-code.jpg new file mode 100644 index 00000000..fe474d73 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/bar-code.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/bar-navigator.jpg b/static/img/usage/tools/tools-basic-guide/bar-navigator.jpg new file mode 100644 index 00000000..69691a25 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/bar-navigator.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/cabinet-button-bar-code.jpg b/static/img/usage/tools/tools-basic-guide/cabinet-button-bar-code.jpg new file mode 100644 index 00000000..68cb3bff Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/cabinet-button-bar-code.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/calc-field-select.jpg b/static/img/usage/tools/tools-basic-guide/calc-field-select.jpg new file mode 100644 index 00000000..cde90338 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/calc-field-select.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/calc-field.jpg b/static/img/usage/tools/tools-basic-guide/calc-field.jpg new file mode 100644 index 00000000..a647783b Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/calc-field.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/caption-and-font.jpg b/static/img/usage/tools/tools-basic-guide/caption-and-font.jpg new file mode 100644 index 00000000..870adf62 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/caption-and-font.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/click-report-name.jpg b/static/img/usage/tools/tools-basic-guide/click-report-name.jpg new file mode 100644 index 00000000..fd71de79 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/click-report-name.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/confirmation-message.jpg b/static/img/usage/tools/tools-basic-guide/confirmation-message.jpg new file mode 100644 index 00000000..c8e773ec Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/confirmation-message.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/container-num.jpg b/static/img/usage/tools/tools-basic-guide/container-num.jpg new file mode 100644 index 00000000..e69e4ecb Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/container-num.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/cp-num-same-as-voucher-num.jpg b/static/img/usage/tools/tools-basic-guide/cp-num-same-as-voucher-num.jpg new file mode 100644 index 00000000..8727033f Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/cp-num-same-as-voucher-num.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/cust-aging-report.jpg b/static/img/usage/tools/tools-basic-guide/cust-aging-report.jpg new file mode 100644 index 00000000..d1f3e235 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/cust-aging-report.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/cust-cate-supp-cate.jpg b/static/img/usage/tools/tools-basic-guide/cust-cate-supp-cate.jpg new file mode 100644 index 00000000..66dc4f48 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/cust-cate-supp-cate.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/cust-code-format-entry.jpg b/static/img/usage/tools/tools-basic-guide/cust-code-format-entry.jpg new file mode 100644 index 00000000..79431da8 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/cust-code-format-entry.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/cust-code-format.jpg b/static/img/usage/tools/tools-basic-guide/cust-code-format.jpg new file mode 100644 index 00000000..314b7ac2 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/cust-code-format.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/customise-commands-barnavigator.jpg b/static/img/usage/tools/tools-basic-guide/customise-commands-barnavigator.jpg new file mode 100644 index 00000000..beae314e Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/customise-commands-barnavigator.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/customise-commands.jpg b/static/img/usage/tools/tools-basic-guide/customise-commands.jpg new file mode 100644 index 00000000..93704e5d Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/customise-commands.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/customise-toolbars.jpg b/static/img/usage/tools/tools-basic-guide/customise-toolbars.jpg new file mode 100644 index 00000000..2528bd8e Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/customise-toolbars.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/customise.jpg b/static/img/usage/tools/tools-basic-guide/customise.jpg new file mode 100644 index 00000000..5c2cc88a Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/customise.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/data-controls.jpg b/static/img/usage/tools/tools-basic-guide/data-controls.jpg new file mode 100644 index 00000000..5a667409 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/data-controls.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/datafield-font-size.jpg b/static/img/usage/tools/tools-basic-guide/datafield-font-size.jpg new file mode 100644 index 00000000..4c4fb5ce Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/datafield-font-size.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/def-supp-aging-format.jpg b/static/img/usage/tools/tools-basic-guide/def-supp-aging-format.jpg new file mode 100644 index 00000000..21cbbdc0 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/def-supp-aging-format.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/default-cust-aging-format.jpg b/static/img/usage/tools/tools-basic-guide/default-cust-aging-format.jpg new file mode 100644 index 00000000..c137c58f Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/default-cust-aging-format.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/delivery-order.jpg b/static/img/usage/tools/tools-basic-guide/delivery-order.jpg new file mode 100644 index 00000000..823ebe40 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/delivery-order.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/detail-position.jpg b/static/img/usage/tools/tools-basic-guide/detail-position.jpg new file mode 100644 index 00000000..ec564c3e Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/detail-position.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/device.jpg b/static/img/usage/tools/tools-basic-guide/device.jpg new file mode 100644 index 00000000..4128e906 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/device.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/display-format.jpg b/static/img/usage/tools/tools-basic-guide/display-format.jpg new file mode 100644 index 00000000..763a38a9 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/display-format.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/diy-field-template.jpg b/static/img/usage/tools/tools-basic-guide/diy-field-template.jpg new file mode 100644 index 00000000..98d5139e Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/diy-field-template.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/diy-script-stkphyworksheet.jpg b/static/img/usage/tools/tools-basic-guide/diy-script-stkphyworksheet.jpg new file mode 100644 index 00000000..6444322c Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/diy-script-stkphyworksheet.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/diy-script-stockphysicalworksheet.jpg b/static/img/usage/tools/tools-basic-guide/diy-script-stockphysicalworksheet.jpg new file mode 100644 index 00000000..21da0887 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/diy-script-stockphysicalworksheet.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/diy-script-template.jpg b/static/img/usage/tools/tools-basic-guide/diy-script-template.jpg new file mode 100644 index 00000000..96b0db2d Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/diy-script-template.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/document-project.jpg b/static/img/usage/tools/tools-basic-guide/document-project.jpg new file mode 100644 index 00000000..1984d4ff Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/document-project.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/duplicate-cheque-num.jpg b/static/img/usage/tools/tools-basic-guide/duplicate-cheque-num.jpg new file mode 100644 index 00000000..732c0119 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/duplicate-cheque-num.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/enter-verification-code.jpg b/static/img/usage/tools/tools-basic-guide/enter-verification-code.jpg new file mode 100644 index 00000000..3a1b6cdb Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/enter-verification-code.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/event-onapply.jpg b/static/img/usage/tools/tools-basic-guide/event-onapply.jpg new file mode 100644 index 00000000..f9fd39fa Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/event-onapply.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/field-and-quick-form.jpg b/static/img/usage/tools/tools-basic-guide/field-and-quick-form.jpg new file mode 100644 index 00000000..5c99478d Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/field-and-quick-form.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/file-pagesetup.jpg b/static/img/usage/tools/tools-basic-guide/file-pagesetup.jpg new file mode 100644 index 00000000..88837d45 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/file-pagesetup.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/invoice-with-style.jpg b/static/img/usage/tools/tools-basic-guide/invoice-with-style.jpg new file mode 100644 index 00000000..9ef91a0c Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/invoice-with-style.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/job-title.jpg b/static/img/usage/tools/tools-basic-guide/job-title.jpg new file mode 100644 index 00000000..bdd0f823 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/job-title.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/journal-of-trans-list-journal.jpg b/static/img/usage/tools/tools-basic-guide/journal-of-trans-list-journal.jpg new file mode 100644 index 00000000..d1e28c24 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/journal-of-trans-list-journal.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/load-success.jpg b/static/img/usage/tools/tools-basic-guide/load-success.jpg new file mode 100644 index 00000000..0fe51418 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/load-success.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-agent-entry.jpg b/static/img/usage/tools/tools-basic-guide/maintain-agent-entry.jpg new file mode 100644 index 00000000..027775df Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-agent-entry.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-agent.png b/static/img/usage/tools/tools-basic-guide/maintain-agent.png new file mode 100644 index 00000000..384c69ee Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-agent.png differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-area-entry.jpg b/static/img/usage/tools/tools-basic-guide/maintain-area-entry.jpg new file mode 100644 index 00000000..6e1a2b59 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-area-entry.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-area.jpg b/static/img/usage/tools/tools-basic-guide/maintain-area.jpg new file mode 100644 index 00000000..2f61e178 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-area.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-comission-scripts.png b/static/img/usage/tools/tools-basic-guide/maintain-comission-scripts.png new file mode 100644 index 00000000..843b6bdf Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-comission-scripts.png differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-company-category-entry.jpg b/static/img/usage/tools/tools-basic-guide/maintain-company-category-entry.jpg new file mode 100644 index 00000000..24a3abba Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-company-category-entry.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-company-category.jpg b/static/img/usage/tools/tools-basic-guide/maintain-company-category.jpg new file mode 100644 index 00000000..63cc1566 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-company-category.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-diy.jpg b/static/img/usage/tools/tools-basic-guide/maintain-diy.jpg new file mode 100644 index 00000000..30a2a359 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-diy.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-journal-entry.jpg b/static/img/usage/tools/tools-basic-guide/maintain-journal-entry.jpg new file mode 100644 index 00000000..3f95effe Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-journal-entry.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-journal-sales-dn.jpg b/static/img/usage/tools/tools-basic-guide/maintain-journal-sales-dn.jpg new file mode 100644 index 00000000..44ba6853 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-journal-sales-dn.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-journal.png b/static/img/usage/tools/tools-basic-guide/maintain-journal.png new file mode 100644 index 00000000..419939f5 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-journal.png differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-scripts-entry.jpg b/static/img/usage/tools/tools-basic-guide/maintain-scripts-entry.jpg new file mode 100644 index 00000000..11f512ba Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-scripts-entry.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-scripts.jpg b/static/img/usage/tools/tools-basic-guide/maintain-scripts.jpg new file mode 100644 index 00000000..6afee23f Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-scripts.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-style-entry.png b/static/img/usage/tools/tools-basic-guide/maintain-style-entry.png new file mode 100644 index 00000000..862a1822 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-style-entry.png differ diff --git a/static/img/usage/tools/tools-basic-guide/maintain-style.png b/static/img/usage/tools/tools-basic-guide/maintain-style.png new file mode 100644 index 00000000..f0d93541 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/maintain-style.png differ diff --git a/static/img/usage/tools/tools-basic-guide/merge-itemcode.jpg b/static/img/usage/tools/tools-basic-guide/merge-itemcode.jpg new file mode 100644 index 00000000..af328f53 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/merge-itemcode.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/name-freight-info.jpg b/static/img/usage/tools/tools-basic-guide/name-freight-info.jpg new file mode 100644 index 00000000..2211625e Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/name-freight-info.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/navigator-vs-user.jpg b/static/img/usage/tools/tools-basic-guide/navigator-vs-user.jpg new file mode 100644 index 00000000..9a5b41ab Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/navigator-vs-user.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/new-adv-form-design.jpg b/static/img/usage/tools/tools-basic-guide/new-adv-form-design.jpg new file mode 100644 index 00000000..db42011a Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/new-adv-form-design.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/new-event-.jpg b/static/img/usage/tools/tools-basic-guide/new-event-.jpg new file mode 100644 index 00000000..5247ba32 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/new-event-.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/new-field.jpg b/static/img/usage/tools/tools-basic-guide/new-field.jpg new file mode 100644 index 00000000..d439fa0b Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/new-field.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/new-script.jpg b/static/img/usage/tools/tools-basic-guide/new-script.jpg new file mode 100644 index 00000000..1868bd91 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/new-script.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/newquick-form-info-freight.jpg b/static/img/usage/tools/tools-basic-guide/newquick-form-info-freight.jpg new file mode 100644 index 00000000..79947560 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/newquick-form-info-freight.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/operation.jpg b/static/img/usage/tools/tools-basic-guide/operation.jpg new file mode 100644 index 00000000..ba90fe39 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/operation.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-barcode-barcodes.jpg b/static/img/usage/tools/tools-basic-guide/options-barcode-barcodes.jpg new file mode 100644 index 00000000..052957df Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-barcode-barcodes.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-barcode-cashdrawer.jpg b/static/img/usage/tools/tools-basic-guide/options-barcode-cashdrawer.jpg new file mode 100644 index 00000000..a698df8e Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-barcode-cashdrawer.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-cust-def-cont-acc.jpg b/static/img/usage/tools/tools-basic-guide/options-cust-def-cont-acc.jpg new file mode 100644 index 00000000..66f9f061 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-cust-def-cont-acc.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-cust-def-cred-limits.jpg b/static/img/usage/tools/tools-basic-guide/options-cust-def-cred-limits.jpg new file mode 100644 index 00000000..e15937c9 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-cust-def-cred-limits.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-cust-def-cred-terms.jpg b/static/img/usage/tools/tools-basic-guide/options-cust-def-cred-terms.jpg new file mode 100644 index 00000000..26addd17 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-cust-def-cred-terms.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-cust-def-output-tax.jpg b/static/img/usage/tools/tools-basic-guide/options-cust-def-output-tax.jpg new file mode 100644 index 00000000..7bcce9d0 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-cust-def-output-tax.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-cust.jpg b/static/img/usage/tools/tools-basic-guide/options-cust.jpg new file mode 100644 index 00000000..52301733 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-cust.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-default-general.jpg b/static/img/usage/tools/tools-basic-guide/options-default-general.jpg new file mode 100644 index 00000000..f28468f0 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-default-general.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-general.jpg b/static/img/usage/tools/tools-basic-guide/options-general.jpg new file mode 100644 index 00000000..d01e8b5b Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-general.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-gl-cust-dn.jpg b/static/img/usage/tools/tools-basic-guide/options-gl-cust-dn.jpg new file mode 100644 index 00000000..659ce175 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-gl-cust-dn.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-gl.jpg b/static/img/usage/tools/tools-basic-guide/options-gl.jpg new file mode 100644 index 00000000..f3663371 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-gl.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-mis-default-uom.jpg b/static/img/usage/tools/tools-basic-guide/options-mis-default-uom.jpg new file mode 100644 index 00000000..fd945ac2 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-mis-default-uom.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-miscellaneous-.jpg b/static/img/usage/tools/tools-basic-guide/options-miscellaneous-.jpg new file mode 100644 index 00000000..a5376479 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-miscellaneous-.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-miscellaneous.jpg b/static/img/usage/tools/tools-basic-guide/options-miscellaneous.jpg new file mode 100644 index 00000000..ae1abbb9 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-miscellaneous.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-limit.jpg b/static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-limit.jpg new file mode 100644 index 00000000..6660fff1 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-limit.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-limits.jpg b/static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-limits.jpg new file mode 100644 index 00000000..6660fff1 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-limits.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-terms.jpg b/static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-terms.jpg new file mode 100644 index 00000000..b625d658 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-supplier-def-cred-terms.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-supplier-def-input-tax.jpg b/static/img/usage/tools/tools-basic-guide/options-supplier-def-input-tax.jpg new file mode 100644 index 00000000..f79b1668 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-supplier-def-input-tax.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-supplier-def-supp-acc.jpg b/static/img/usage/tools/tools-basic-guide/options-supplier-def-supp-acc.jpg new file mode 100644 index 00000000..60694df3 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-supplier-def-supp-acc.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-supplier.jpg b/static/img/usage/tools/tools-basic-guide/options-supplier.jpg new file mode 100644 index 00000000..35a728be Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-supplier.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-unitprice-cash-purcahse.jpg b/static/img/usage/tools/tools-basic-guide/options-unitprice-cash-purcahse.jpg new file mode 100644 index 00000000..9b51e62d Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-unitprice-cash-purcahse.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-unitprice-cash-sales.jpg b/static/img/usage/tools/tools-basic-guide/options-unitprice-cash-sales.jpg new file mode 100644 index 00000000..a955f766 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-unitprice-cash-sales.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-unitprice-purchase.jpg b/static/img/usage/tools/tools-basic-guide/options-unitprice-purchase.jpg new file mode 100644 index 00000000..7f145fe8 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-unitprice-purchase.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-unitprice-sales.jpg b/static/img/usage/tools/tools-basic-guide/options-unitprice-sales.jpg new file mode 100644 index 00000000..7548aa4f Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-unitprice-sales.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/options-unitprice-stock.jpg b/static/img/usage/tools/tools-basic-guide/options-unitprice-stock.jpg new file mode 100644 index 00000000..a12a1548 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/options-unitprice-stock.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/page-setup-layout-tab.jpg b/static/img/usage/tools/tools-basic-guide/page-setup-layout-tab.jpg new file mode 100644 index 00000000..a4be0bb2 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/page-setup-layout-tab.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/page-setup-margin-tab.jpg b/static/img/usage/tools/tools-basic-guide/page-setup-margin-tab.jpg new file mode 100644 index 00000000..5000ff6d Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/page-setup-margin-tab.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/paper-size.jpg b/static/img/usage/tools/tools-basic-guide/paper-size.jpg new file mode 100644 index 00000000..3f441e11 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/paper-size.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/plus-button-bar-code.jpg b/static/img/usage/tools/tools-basic-guide/plus-button-bar-code.jpg new file mode 100644 index 00000000..75f77e46 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/plus-button-bar-code.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/position-print-count.jpg b/static/img/usage/tools/tools-basic-guide/position-print-count.jpg new file mode 100644 index 00000000..f6466182 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/position-print-count.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/preview-button.jpg b/static/img/usage/tools/tools-basic-guide/preview-button.jpg new file mode 100644 index 00000000..7760d84e Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/preview-button.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/print-journal-of-trans-list.png b/static/img/usage/tools/tools-basic-guide/print-journal-of-trans-list.png new file mode 100644 index 00000000..1bc84762 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/print-journal-of-trans-list.png differ diff --git a/static/img/usage/tools/tools-basic-guide/print-label-print-to.jpg b/static/img/usage/tools/tools-basic-guide/print-label-print-to.jpg new file mode 100644 index 00000000..c236c643 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/print-label-print-to.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/print-label-template-settings.jpg b/static/img/usage/tools/tools-basic-guide/print-label-template-settings.jpg new file mode 100644 index 00000000..1fb51f66 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/print-label-template-settings.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/print-label.jpg b/static/img/usage/tools/tools-basic-guide/print-label.jpg new file mode 100644 index 00000000..897304e1 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/print-label.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/protection-removed.jpg b/static/img/usage/tools/tools-basic-guide/protection-removed.jpg new file mode 100644 index 00000000..befb362c Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/protection-removed.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/quickform-template.jpg b/static/img/usage/tools/tools-basic-guide/quickform-template.jpg new file mode 100644 index 00000000..d71973e8 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/quickform-template.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/report-unit-mm.jpg b/static/img/usage/tools/tools-basic-guide/report-unit-mm.jpg new file mode 100644 index 00000000..fa653730 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/report-unit-mm.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/right-click-descrp-field.jpg b/static/img/usage/tools/tools-basic-guide/right-click-descrp-field.jpg new file mode 100644 index 00000000..d955109d Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/right-click-descrp-field.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/rounding.jpg b/static/img/usage/tools/tools-basic-guide/rounding.jpg new file mode 100644 index 00000000..bfd80384 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/rounding.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/sales-invoice-new-field.jpg b/static/img/usage/tools/tools-basic-guide/sales-invoice-new-field.jpg new file mode 100644 index 00000000..1c5e84c5 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/sales-invoice-new-field.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/sales-report-by-shipper.jpg b/static/img/usage/tools/tools-basic-guide/sales-report-by-shipper.jpg new file mode 100644 index 00000000..f618e149 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/sales-report-by-shipper.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/same-doc-no-cash-sales-offic-receipt.jpg b/static/img/usage/tools/tools-basic-guide/same-doc-no-cash-sales-offic-receipt.jpg new file mode 100644 index 00000000..4dea1fa3 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/same-doc-no-cash-sales-offic-receipt.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/save-bar-code.jpg b/static/img/usage/tools/tools-basic-guide/save-bar-code.jpg new file mode 100644 index 00000000..f17be434 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/save-bar-code.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/save-button-bar-code.jpg b/static/img/usage/tools/tools-basic-guide/save-button-bar-code.jpg new file mode 100644 index 00000000..bf4d8cd8 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/save-button-bar-code.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/script-select-stkphyworksheet.jpg b/static/img/usage/tools/tools-basic-guide/script-select-stkphyworksheet.jpg new file mode 100644 index 00000000..777e8206 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/script-select-stkphyworksheet.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/script-stock-phy-worksheet.jpg b/static/img/usage/tools/tools-basic-guide/script-stock-phy-worksheet.jpg new file mode 100644 index 00000000..6b33cb42 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/script-stock-phy-worksheet.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/script.jpg b/static/img/usage/tools/tools-basic-guide/script.jpg new file mode 100644 index 00000000..853da1b6 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/script.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/shipper-entry.jpg b/static/img/usage/tools/tools-basic-guide/shipper-entry.jpg new file mode 100644 index 00000000..a800bb2c Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/shipper-entry.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/shipper.jpg b/static/img/usage/tools/tools-basic-guide/shipper.jpg new file mode 100644 index 00000000..512e33ed Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/shipper.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/standard.jpg b/static/img/usage/tools/tools-basic-guide/standard.jpg new file mode 100644 index 00000000..86b97897 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/standard.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/stock-issue.jpg b/static/img/usage/tools/tools-basic-guide/stock-issue.jpg new file mode 100644 index 00000000..dc616aff Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/stock-issue.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/stock-physical-worksheet.jpg b/static/img/usage/tools/tools-basic-guide/stock-physical-worksheet.jpg new file mode 100644 index 00000000..08cad285 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/stock-physical-worksheet.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/stock-quantity-control.jpg b/static/img/usage/tools/tools-basic-guide/stock-quantity-control.jpg new file mode 100644 index 00000000..8eb82bda Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/stock-quantity-control.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/supp-code-format-entry.jpg b/static/img/usage/tools/tools-basic-guide/supp-code-format-entry.jpg new file mode 100644 index 00000000..29983bfa Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/supp-code-format-entry.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/supp-code-format.jpg b/static/img/usage/tools/tools-basic-guide/supp-code-format.jpg new file mode 100644 index 00000000..1c566670 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/supp-code-format.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/table-sl-qt.jpg b/static/img/usage/tools/tools-basic-guide/table-sl-qt.jpg new file mode 100644 index 00000000..18c02817 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/table-sl-qt.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/tariff.jpg b/static/img/usage/tools/tools-basic-guide/tariff.jpg new file mode 100644 index 00000000..6aa8662e Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/tariff.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/tools-options.png b/static/img/usage/tools/tools-basic-guide/tools-options.png new file mode 100644 index 00000000..eec6617a Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/tools-options.png differ diff --git a/static/img/usage/tools/tools-basic-guide/trans-date-out.jpg b/static/img/usage/tools/tools-basic-guide/trans-date-out.jpg new file mode 100644 index 00000000..2b43befb Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/trans-date-out.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/user-entry.jpg b/static/img/usage/tools/tools-basic-guide/user-entry.jpg new file mode 100644 index 00000000..f6b838e5 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/user-entry.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/user.jpg b/static/img/usage/tools/tools-basic-guide/user.jpg new file mode 100644 index 00000000..158d7e24 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/user.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/verification-code.jpg b/static/img/usage/tools/tools-basic-guide/verification-code.jpg new file mode 100644 index 00000000..6e051350 Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/verification-code.jpg differ diff --git a/static/img/usage/tools/tools-basic-guide/withholding-tax.jpg b/static/img/usage/tools/tools-basic-guide/withholding-tax.jpg new file mode 100644 index 00000000..0c149f5c Binary files /dev/null and b/static/img/usage/tools/tools-basic-guide/withholding-tax.jpg differ diff --git a/static/img/tools/first-year-acc-more-than-12/1.png b/static/img/usage/tools/tools-faq/1.png similarity index 100% rename from static/img/tools/first-year-acc-more-than-12/1.png rename to static/img/usage/tools/tools-faq/1.png diff --git a/static/img/tools/advance-currency/1.png b/static/img/usage/tools/tools-faq/1a.png similarity index 100% rename from static/img/tools/advance-currency/1.png rename to static/img/usage/tools/tools-faq/1a.png diff --git a/static/img/tools/one-cent-rounding/1.png b/static/img/usage/tools/tools-faq/1c.png similarity index 100% rename from static/img/tools/one-cent-rounding/1.png rename to static/img/usage/tools/tools-faq/1c.png diff --git a/static/img/tools/pw-policy-2step-verify/1.png b/static/img/usage/tools/tools-faq/1d.png similarity index 100% rename from static/img/tools/pw-policy-2step-verify/1.png rename to static/img/usage/tools/tools-faq/1d.png diff --git a/static/img/tools/running-no-date-year-format/1.png b/static/img/usage/tools/tools-faq/1e.png similarity index 100% rename from static/img/tools/running-no-date-year-format/1.png rename to static/img/usage/tools/tools-faq/1e.png diff --git a/static/img/tools/first-year-acc-more-than-12/2.png b/static/img/usage/tools/tools-faq/2.png similarity index 100% rename from static/img/tools/first-year-acc-more-than-12/2.png rename to static/img/usage/tools/tools-faq/2.png diff --git a/static/img/tools/advance-currency/2.png b/static/img/usage/tools/tools-faq/2a.png similarity index 100% rename from static/img/tools/advance-currency/2.png rename to static/img/usage/tools/tools-faq/2a.png diff --git a/static/img/tools/one-cent-rounding/2.png b/static/img/usage/tools/tools-faq/2c.png similarity index 100% rename from static/img/tools/one-cent-rounding/2.png rename to static/img/usage/tools/tools-faq/2c.png diff --git a/static/img/tools/pw-policy-2step-verify/2.png b/static/img/usage/tools/tools-faq/2d.png similarity index 100% rename from static/img/tools/pw-policy-2step-verify/2.png rename to static/img/usage/tools/tools-faq/2d.png diff --git a/static/img/tools/running-no-date-year-format/2.png b/static/img/usage/tools/tools-faq/2e.png similarity index 100% rename from static/img/tools/running-no-date-year-format/2.png rename to static/img/usage/tools/tools-faq/2e.png diff --git a/static/img/tools/first-year-acc-more-than-12/3.png b/static/img/usage/tools/tools-faq/3.png similarity index 100% rename from static/img/tools/first-year-acc-more-than-12/3.png rename to static/img/usage/tools/tools-faq/3.png diff --git a/static/img/tools/advance-currency/3.png b/static/img/usage/tools/tools-faq/3a.png similarity index 100% rename from static/img/tools/advance-currency/3.png rename to static/img/usage/tools/tools-faq/3a.png diff --git a/static/img/tools/one-cent-rounding/3.png b/static/img/usage/tools/tools-faq/3c.png similarity index 100% rename from static/img/tools/one-cent-rounding/3.png rename to static/img/usage/tools/tools-faq/3c.png diff --git a/static/img/tools/pw-policy-2step-verify/3.png b/static/img/usage/tools/tools-faq/3d.png similarity index 100% rename from static/img/tools/pw-policy-2step-verify/3.png rename to static/img/usage/tools/tools-faq/3d.png diff --git a/static/img/tools/running-no-date-year-format/3.png b/static/img/usage/tools/tools-faq/3e.png similarity index 100% rename from static/img/tools/running-no-date-year-format/3.png rename to static/img/usage/tools/tools-faq/3e.png diff --git a/static/img/tools/first-year-acc-more-than-12/4.png b/static/img/usage/tools/tools-faq/4.png similarity index 100% rename from static/img/tools/first-year-acc-more-than-12/4.png rename to static/img/usage/tools/tools-faq/4.png diff --git a/static/img/tools/pw-policy-2step-verify/4.png b/static/img/usage/tools/tools-faq/4d.png similarity index 100% rename from static/img/tools/pw-policy-2step-verify/4.png rename to static/img/usage/tools/tools-faq/4d.png diff --git a/static/img/tools/running-no-date-year-format/4.png b/static/img/usage/tools/tools-faq/4e.png similarity index 100% rename from static/img/tools/running-no-date-year-format/4.png rename to static/img/usage/tools/tools-faq/4e.png diff --git a/static/img/tools/pw-policy-2step-verify/5.png b/static/img/usage/tools/tools-faq/5d.png similarity index 100% rename from static/img/tools/pw-policy-2step-verify/5.png rename to static/img/usage/tools/tools-faq/5d.png diff --git a/static/img/tools/running-no-date-year-format/5.png b/static/img/usage/tools/tools-faq/5e.png similarity index 100% rename from static/img/tools/running-no-date-year-format/5.png rename to static/img/usage/tools/tools-faq/5e.png diff --git a/static/img/tools/pw-policy-2step-verify/6.png b/static/img/usage/tools/tools-faq/6d.png similarity index 100% rename from static/img/tools/pw-policy-2step-verify/6.png rename to static/img/usage/tools/tools-faq/6d.png diff --git a/static/img/usage/tools/tools-faq/componentpalette-datacontrols.jpg b/static/img/usage/tools/tools-faq/componentpalette-datacontrols.jpg new file mode 100644 index 00000000..13d22e2d Binary files /dev/null and b/static/img/usage/tools/tools-faq/componentpalette-datacontrols.jpg differ diff --git a/static/img/usage/tools/tools-faq/main-form.jpg b/static/img/usage/tools/tools-faq/main-form.jpg new file mode 100644 index 00000000..064500c4 Binary files /dev/null and b/static/img/usage/tools/tools-faq/main-form.jpg differ