<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="th">
	<id>http://wiki.cuneifox.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tenko</id>
	<title>คูนิฟ็อกซ์ วิกิ - การเข้ามีส่วนร่วมของผู้ใช้ [th]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.cuneifox.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tenko"/>
	<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/wiki/%E0%B8%9E%E0%B8%B4%E0%B9%80%E0%B8%A8%E0%B8%A9:%E0%B9%80%E0%B8%A3%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99/Tenko"/>
	<updated>2026-06-15T02:28:07Z</updated>
	<subtitle>การเข้ามีส่วนร่วมของผู้ใช้</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B8%AA%E0%B8%B4%E0%B8%99%E0%B8%84%E0%B9%89%E0%B8%B2&amp;diff=4065</id>
		<title>สินค้า</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B8%AA%E0%B8%B4%E0%B8%99%E0%B8%84%E0%B9%89%E0%B8%B2&amp;diff=4065"/>
		<updated>2026-05-30T07:41:11Z</updated>

		<summary type="html">&lt;p&gt;Tenko: /* คำอธิบายช่องข้อมูล */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
{{โมดูลสินค้าคงคลัง}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ตารางรหัส&#039;&#039;&#039;สินค้า (PRODUCT)&#039;&#039;&#039; เก็บข้อมูลเฉพาะตัวของสินค้าและบริการต่างๆ เช่น รายละเอียดสินค้า, ข้อมูลเกี่ยวกับหน่วยและการแปลงหน่วย, และข้อมูลราคาสินค้า เป็นต้น&lt;br /&gt;
&lt;br /&gt;
{{module_table_leader}}&lt;br /&gt;
&lt;br /&gt;
== ตำแหน่งเมนู ==&lt;br /&gt;
&#039;&#039;&#039;[[เมนู &amp;quot;ตารางรหัส/การตั้งค่า&amp;quot;]] → [[จัดการตารางรหัส]] → สินค้า&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== คำอธิบายช่องข้อมูล ==&lt;br /&gt;
[[ไฟล์:Cuneifox iv product.png|720px|thumb|center|alt=ตารางรหัสสินค้า|ตารางรหัสสินค้า]]&lt;br /&gt;
[[ไฟล์:Cuneifox iv product fullform.png|720px|thumb|center|alt=หน้าต่างฟอร์มของตารางรหัสสินค้า|หน้าต่างฟอร์มของตารางรหัสสินค้า]]&lt;br /&gt;
&lt;br /&gt;
{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;StID&#039;&#039;&#039; || &#039;&#039;จำนวนเต็ม (*)&#039;&#039; || static ID ของสินค้า&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;รหัสสินค้า&#039;&#039;&#039; || &#039;&#039;ข้อความ (*)&#039;&#039; || –&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ชื่อเรียก&#039;&#039;&#039; || &#039;&#039;ข้อความ (*)&#039;&#039; || ชื่อที่ปรากฏบนหน้าจอต่างๆ ของโปรแกรม แนะนำให้เป็นข้อความที่กระชับและเข้าใจง่าย&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;คำอธิบายสินค้า&#039;&#039;&#039; || &#039;&#039;ข้อความหลายบรรทัด&#039;&#039; || คำอธิบายสินค้าอย่างละเอียด ข้อความนี้ปรากฏบนเอกสารที่พิมพ์ออกเป็นกระดาษหรือไฟล์ PDF&lt;br /&gt;
{{3stars}} หากเว้นว่างไว้ ระบบจะใช้ &amp;quot;ชื่อเรียก&amp;quot; ในการพิมพ์เอกสารต่างๆ แทน&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;กลุ่มสินค้า&#039;&#039;&#039; || &#039;&#039;ค้นหา (*)&#039;&#039; || [[กลุ่มสินค้า|กลุ่มทางบัญชีและภาษี]]ของสินค้ารายการนี้&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;(ภาพ)&#039;&#039;&#039; || &#039;&#039;ไฟล์ภาพ&#039;&#039; || –&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;หน่วยพื้นฐาน&#039;&#039;&#039; || &#039;&#039;ค้นหา (*)&#039;&#039; || {{3stars}} แนะนำให้ใช้เป็นหน่วยเล็กที่สุดที่จะจัดการกับสินค้านี้&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;หน่วย #2 – #10&#039;&#039;&#039; || &#039;&#039;ค้นหา&#039;&#039; || หน่วยอื่นๆ ที่จะใช้จัดการกับสินค้านี้&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;(ค่าแปลงหน่วย #2 – #10)&#039;&#039;&#039; || &#039;&#039;ค่าจำนวน&#039;&#039; || จำนวนหน่วยพื้นฐานต่อหน่วยอื่น&lt;br /&gt;
{{3stars}} เช่น หน่วยพื้นฐานเป็น &amp;quot;ชิ้น&amp;quot; และ&lt;br /&gt;
* &#039;&#039;&#039;กำหนดหน่วย #2 เป็น &amp;quot;โหล&amp;quot;:&#039;&#039;&#039; ให้ใช้ค่าแปลงหน่วย #2 &#039;&#039;&#039;เป็น 12&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;กำหนดหน่วย #3 เป็น &amp;quot;ลัง&amp;quot;:&#039;&#039;&#039; &#039;&#039;(สมมุติบรรจุลังละ 5 โหล)&#039;&#039; ให้ใช้ค่าแปลงหน่วย #3 &#039;&#039;&#039;เป็น 60&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;บาร์โค้ด #1 – #10&#039;&#039;&#039; || &#039;&#039;ข้อความ&#039;&#039; || บาร์โค้ดของสินค้าแต่ละหน่วย&lt;br /&gt;
{{3stars}} สามารถกำหนดบาร์โค้ดได้มากกว่า 1 รหัส โดยใช้เครื่องหมาย &amp;quot;;&amp;quot; คั่นระหว่างแต่ละรหัส&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;หน่วยซื้อ&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || หน่วยตั้งต้นสำหรับธุรกรรมฝั่งซื้อ&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ราคาซื้อ&#039;&#039;&#039; || &#039;&#039;มูลค่า&#039;&#039; || ราคาซื้อตั้งต้น &#039;&#039;&#039;(ต่อหน่วยซื้อ)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;(ราคาซื้อ) รวม VAT&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || ราคาซื้อที่กำหนดไว้รวมภาษีมูลค่าเพิ่มแล้ว&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;หน่วยขาย&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || หน่วยตั้งต้นสำหรับธุรกรรมฝั่งขาย&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ราคาขาย&#039;&#039;&#039; || &#039;&#039;มูลค่า&#039;&#039; || ราคาขายตั้งต้น &#039;&#039;&#039;(ต่อหน่วยขาย)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;(ราคาขาย) รวม VAT&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || ราคาขายที่กำหนดไว้รวมภาษีมูลค่าเพิ่มแล้ว&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ควบคุมหมายเลขประจำตัว&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || ต้องการเก็บประวัติหมายเลขประจำตัวของสินค้านี้&lt;br /&gt;
{{3stars}} สำหรับธุรกรรมซื้อ/ขาย/ส่งคืน/รับคืน ผู้ใช้สามารถบันทึกเลขประจำตัวของสินค้าได้ โปรแกรมจะเก็บประวัติของสินค้าแต่ละเลขเอาไว้ สำหรับให้ผู้ใช้อ้างอิงได้จาก&#039;&#039;&#039;[[หมายเลขประจำตัว|ตารางรหัส &amp;quot;หมายเลขประจำตัว&amp;quot;]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แท็ก&#039;&#039;&#039; || &#039;&#039;ข้อความหลายบรรทัด&#039;&#039; || แท็กของเจ้าหนี้/ลูกหนี้&lt;br /&gt;
{{3stars}} ใช้เครื่องหมาย &amp;quot;#&amp;quot; คั่นระหว่างแต่ละแท็ก&amp;lt;br&amp;gt;&lt;br /&gt;
{{3stars}} ดูข้อมูลเพิ่มเติมใน&#039;&#039;&#039;[[โมดูลในระบบคูนิฟ็อกซ์#แท็กรายการ|บทความ &amp;quot;โมดูลในระบบคูนิฟ็อกซ์&amp;quot;]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ข้อมูลชุดตั้งต้น ==&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;[[Media:PRODUCT.xlsx|ดาวน์โหลดข้อมูลชุดตั้งต้น]]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
{{โมดูลสินค้าคงคลัง}}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=CuneiTable&amp;diff=4064</id>
		<title>CuneiTable</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=CuneiTable&amp;diff=4064"/>
		<updated>2026-05-19T09:51:10Z</updated>

		<summary type="html">&lt;p&gt;Tenko: /* Table Object Attributes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CuneiTable is designed specifically to enable in-line data entry. Design-wise, it is more limited than CuneiForm since design flexibility is not highly expected from table-type objects. In essence, CuneiTable is a wrapper for the accompanying CuneiForm, whether that form be the in-line type or the full expansion type.&lt;br /&gt;
&lt;br /&gt;
== Define ==&lt;br /&gt;
Defining a CuneiTable is essentially declaring a CuneiForm with a few additional class variables. Below is an example of a very basic CuneiTable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
class AccCodeTable(CuneiTable):&lt;br /&gt;
    MASTER_colsizes = [10, 20, 50, 20]&lt;br /&gt;
    MASTER_colnames = [&amp;quot;StID&amp;quot;, &amp;quot;Account Code&amp;quot;, &amp;quot;Account Name&amp;quot;, &amp;quot;Account Group&amp;quot;]&lt;br /&gt;
    MASTER_coltypes = [&amp;quot;int&amp;quot;, &amp;quot;str&amp;quot;, &amp;quot;str&amp;quot;, &amp;quot;sel&amp;quot;]&lt;br /&gt;
    MASTER_choicecols = [&amp;quot;accgrp&amp;quot;]&lt;br /&gt;
    MASTER_choices = [[&lt;br /&gt;
                         (&amp;quot;1&amp;quot;, &amp;quot;Asset&amp;quot;),&lt;br /&gt;
                         (&amp;quot;2&amp;quot;, &amp;quot;Liability&amp;quot;),&lt;br /&gt;
                         (&amp;quot;3&amp;quot;, &amp;quot;Equity&amp;quot;),&lt;br /&gt;
                         (&amp;quot;4&amp;quot;, &amp;quot;Revenue&amp;quot;),&lt;br /&gt;
                         (&amp;quot;5&amp;quot;, &amp;quot;Expense&amp;quot;)&lt;br /&gt;
                     ]]&lt;br /&gt;
    MASTER_firstonly = [&amp;quot;stid&amp;quot;]&lt;br /&gt;
    class SubForm(FlaskForm, CuneiSubForm):&lt;br /&gt;
        stid = StringField(&amp;quot;StID&amp;quot;)&lt;br /&gt;
        code = StringField(&amp;quot;Code&amp;quot;, validators=[InputRequired(&amp;quot;Required!&amp;quot;)])&lt;br /&gt;
        name = StringField(&amp;quot;Name&amp;quot;, validators=[InputRequired(&amp;quot;Required!&amp;quot;)])&lt;br /&gt;
        accgrp = SelectField(&amp;quot;Group&amp;quot;, default=1)&lt;br /&gt;
        def validate_stid(self, stid):&lt;br /&gt;
            # Validation goes here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The subclass &#039;&#039;&#039;SubForm&#039;&#039;&#039; is defined like the stripped down version of [[CuneiForm]]. Only put fields and validation logics here. All other behaviours are controlled by the MASTER variables from the CuneiTable level.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE THAT&#039;&#039;&#039; neither of the &#039;&#039;&#039;[[CuneiForm#Submit-delete Field Set|Submit-delete Field Set]]&#039;&#039;&#039; (&#039;&#039;&#039;{{code|submit}}&#039;&#039;&#039;, &#039;&#039;&#039;{{code|is_del}}&#039;&#039;&#039;, and &#039;&#039;&#039;{{code|del_submit}}&#039;&#039;&#039;) is declared in the SubForm. These fields are taken care of automatically during CuneiTable initiation.&lt;br /&gt;
&lt;br /&gt;
=== The Holy Trinity of CuneiTable ===&lt;br /&gt;
The 3 MASTER variables listed below are &#039;&#039;&#039;&#039;&#039;required&#039;&#039;&#039;&#039;&#039; for all CuneiTable classes.&lt;br /&gt;
* &#039;&#039;&#039;{{code|MASTER_colnames}}&#039;&#039;&#039; &#039;&#039;([str,])&#039;&#039;: The list of column headers to appear on the page.&lt;br /&gt;
* &#039;&#039;&#039;{{code|MASTER_coltypes}}&#039;&#039;&#039; &#039;&#039;([str,])&#039;&#039;: The list of column value types. Available types include:&lt;br /&gt;
** All types listed in the main article for [[CuneiForm#Available Types|CuneiForm]].&lt;br /&gt;
** &#039;&#039;&#039;{{code|lang=python|&#039;str&#039;}}&#039;&#039;&#039;: Normal &#039;&#039;string&#039;&#039; value.&lt;br /&gt;
** &#039;&#039;&#039;{{code|lang=python|&#039;check&#039;}}&#039;&#039;&#039;: Value represented by a checkbox.&lt;br /&gt;
** &#039;&#039;&#039;{{code|lang=python|&#039;sel&#039;}}&#039;&#039;&#039;: Value with multiple choices. In other words, this is equivalent to a &#039;&#039;drop-list field&#039;&#039; in forms. In the same fashion, the displayed values for this type is not exactly the same as the values stored in the database. The raw value must pass through a map first before being displayed.&lt;br /&gt;
** &#039;&#039;&#039;{{code|lang=python|&#039;rad&#039;}}&#039;&#039;&#039;: Similar to {{code|lang=python|&#039;sel&#039;}}, but this value type is represented by &#039;&#039;radio buttons&#039;&#039; in multiple sub-columns instead.&lt;br /&gt;
** &#039;&#039;&#039;{{code|lang=python|&#039;submit&#039;}}&#039;&#039;&#039;, &#039;&#039;&#039;{{code|lang=python|&#039;del_submit&#039;}}&#039;&#039;&#039;: &#039;&#039;Submit button.&#039;&#039; &#039;&#039;(Not handled manually, they are handled automatically during initiation.)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;{{code|MASTER_colsizes}}&#039;&#039;&#039; &#039;&#039;([float/int,])&#039;&#039;: The list of relative column sizes. CuneiFox will calculate the display sizes automatically.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE #1:&#039;&#039;&#039; The member order in each of these lists follow the definition order of fields in the SubForm. &#039;&#039;&#039;DO CHECK&#039;&#039;&#039; that all of these 3 lists and the SubForm fields share the same length.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE #2:&#039;&#039;&#039; On the client-side, a radio field (&#039;&#039;&#039;{{code|lang=python|&#039;rad&#039;}}&#039;&#039;&#039;) is displayed as multiple sub-columns (one for each choice). Hence:&lt;br /&gt;
* The display headers of sub-columns are not dictated by the corresponding value in &#039;&#039;&#039;MASTER_colnames&#039;&#039;&#039;, but by the values in &#039;&#039;&#039;MASTER_radios&#039;&#039;&#039; (Detailed in [[#Choices and Radios|a sub-section below]]) instead.&lt;br /&gt;
* The corresponding member in the &#039;&#039;&#039;MASTER_colsizes&#039;&#039;&#039; list is &#039;&#039;&#039;NOT&#039;&#039;&#039; merely &#039;&#039;one numerical value&#039;&#039;, &#039;&#039;&#039;BUT&#039;&#039;&#039; a &#039;&#039;list of numerical values&#039;&#039; instead.&lt;br /&gt;
&lt;br /&gt;
=== Choices and Radios ===&lt;br /&gt;
Columns with limited choices of predesignated values should utilize &#039;choice&#039; or &#039;radio&#039; representation; especially when the stored values must be mapped to another set of more readable or localizable display values. Ideally:&lt;br /&gt;
* Columns utilizing &#039;&#039;&#039;choice&#039;&#039;&#039; representation is typed {{code|lang=python|&#039;sel&#039;}} ({{code|lang=python|1= MASTER_coltypes[i] = &#039;sel&#039;}}), and the corresponding field in the SubForm is a SelectField.&lt;br /&gt;
* Columns utilizing &#039;&#039;&#039;radio&#039;&#039;&#039; representation is typed {{code|lang=python|&#039;rad&#039;}} ({{code|lang=python|1= MASTER_coltypes[i] = &#039;rad&#039;}}), and the corresponding field in the SubForm is a RadioField.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
MASTER_choicecols = [str choice_col0, str choice_col1, ...]&lt;br /&gt;
MASTER_choices    = [&lt;br /&gt;
                        [ (str col0_choice0, str col0_display0),&lt;br /&gt;
                          (str col0_choice1, str col0_display1),&lt;br /&gt;
                          ... ],&lt;br /&gt;
                        [ (str col1_choice0, str col1_display0),&lt;br /&gt;
                          (str col1_choice1, str col1_display1),&lt;br /&gt;
                          ... ],&lt;br /&gt;
                        ...&lt;br /&gt;
                    ]&lt;br /&gt;
&lt;br /&gt;
MASTER_radiocols  = [str choice_col0, str choice_col1, ...]&lt;br /&gt;
MASTER_radios     = [&lt;br /&gt;
                        [ (str col0_choice0, str col0_display0),&lt;br /&gt;
                          (str col0_choice1, str col0_display1),&lt;br /&gt;
                          ... ],&lt;br /&gt;
                        [ (str col1_choice0, str col1_display0),&lt;br /&gt;
                          (str col1_choice1, str col1_display1),&lt;br /&gt;
                          ... ],&lt;br /&gt;
                        ...&lt;br /&gt;
                    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;An example can be seen in the code [[#Define|at the top of the article]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE #1:&#039;&#039;&#039;  Take care that &#039;&#039;&#039;MASTER_choicecols&#039;&#039;&#039; and &#039;&#039;&#039;MASTER_choices&#039;&#039;&#039; have the same length. Similarly for &#039;&#039;&#039;MASTER_radiocols&#039;&#039;&#039; and &#039;&#039;&#039;MASTER_radios&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE #2:&#039;&#039;&#039; The SelectField and RadioField defined in the SubForm &#039;&#039;&#039;DOES NOT&#039;&#039;&#039; include the choices. (Again, see example [[#Define|at the top]].)&lt;br /&gt;
&lt;br /&gt;
=== Search and Fill ===&lt;br /&gt;
Since the in-line form of a table is programmatically generated, the search-fill function cannot wait until the designing step like [[CuneiForm]]&#039;s does. The search-fill function of an in-line form is defined in this step via the variable &#039;&#039;&#039;MASTER_schfill&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
MASTER_schfill = {&lt;br /&gt;
                     str search_col0: [str search_spec0, str fill_spec0],&lt;br /&gt;
                     str search_col1: [str search_spec1, str fill_spec1],&lt;br /&gt;
                     ...&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
# Example from Bank Account table&lt;br /&gt;
MASTER_schfill = {&lt;br /&gt;
                     &amp;quot;bank_code&amp;quot;:    [&amp;quot;ModalBank:code&amp;quot;,&lt;br /&gt;
                                      &amp;quot;bank_stid:stid,bank_name:name,bank_branch:branch&amp;quot;],&lt;br /&gt;
                     &amp;quot;acccode_code&amp;quot;: [&amp;quot;ModalAccCode:code&amp;quot;,&lt;br /&gt;
                                      &amp;quot;acccode_name:name,acccode_stid:stid&amp;quot;]&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The formats of &#039;&#039;&#039;search_specX&#039;&#039;&#039; and &#039;&#039;&#039;fill_specX&#039;&#039;&#039; is similar to arguments &#039;&#039;search&#039;&#039; and &#039;&#039;fill&#039;&#039; in CuneiForm&#039;s &#039;&#039;&#039;[[CuneiForm#String &amp;amp; Text Area Fields|render_blank]]&#039;&#039;&#039; macro.&lt;br /&gt;
&lt;br /&gt;
=== Instant Calculation ===&lt;br /&gt;
Instant calculation function within in-line forms, or &#039;instacalc&#039;, allows a change in one form field to initiate a small calculation request to the server and update other affected fields based on the calculation result. It is specified in the variable {{code|MASTER_instacalc}} &#039;&#039;&#039;of the CuneiTable.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(Refer to [[CuneiForm#Instant Calculation|the dedicated sub-section in CuneiForm article]] for format and example.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Auto-numbering Function ===&lt;br /&gt;
In-line forms with auto-numbering specifications work with CuneiFox core system to serve auto running numbers in a particular format (usually for document numbers). The specifications for this feature are embedded within {{code|MASTER_autorun}} &#039;&#039;&#039;of the CuneiTable.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(Refer to [[CuneiForm#Auto-numbering Function|the dedicated sub-section in CuneiForm article]] for format and example.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Table with a Separate Form Modal ===&lt;br /&gt;
Sometimes, the entries have either too many columns or columns not suitable for display in the table format. In such cases, developers can use the &#039;&#039;&#039;full-form&#039;&#039;&#039; option. CuneiTable with an associated full-form is only defined with essential columns for a &#039;quick glance&#039; view. The full form is shown in a pop-up modal for entry addition/edit.&lt;br /&gt;
&lt;br /&gt;
A CuneiTable can be linked to a full-form via the class variable &#039;&#039;&#039;MASTER_fullform&#039;&#039;&#039; which takes the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
MASTER_fullform = [str module_code, str fullform_class_name,&lt;br /&gt;
                   str fullform_modal_header_text, str modal_size]&lt;br /&gt;
&lt;br /&gt;
# Example from Product table&lt;br /&gt;
MASTER_fullform = [&#039;cunei_iv&#039;, &#039;ProductFullForm&#039;, &#039;Product Information&#039;, &#039;xl&#039;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;size&#039;&#039;&#039; dictates the modal size displayed on the client-side. It utilizes BootStrap 4&#039;s {{code|lang=javascript|&#039;modal-&amp;lt;size&amp;gt;&#039;}} classes. Available choices are {{code|lang=python|&#039;sm&#039;}}, {{code|lang=python|&#039;md&#039;}} &#039;&#039;(corresponds to default modal size)&#039;&#039;, {{code|lang=python|&#039;lg&#039;}}, and {{code|lang=python|&#039;xl&#039;}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES&#039;&#039;&#039; on full-form class and macro:&lt;br /&gt;
* The CuneiForm class &#039;&#039;&#039;{{code|fullform_class_name}}&#039;&#039;&#039; must be found under &#039;&#039;&#039;{{code|module_code}}&#039;&#039;&#039; in the file {{code|cuneifox/&amp;lt;module_code&amp;gt;/forms.py}} or {{code|cuneifox/&amp;lt;module_code&amp;gt;/forms.pyc}}.&lt;br /&gt;
* The definition of the full-form class &#039;&#039;&#039;DOES NOT include the [[CuneiForm#Submit-delete Field Set|Submit-delete Field Set]]&#039;&#039;&#039;&lt;br /&gt;
* The Jinja2 macro for the full-form design must also be named &#039;&#039;&#039;{{code|fullform_class_name}}&#039;&#039;&#039; and must be found under &#039;&#039;&#039;{{code|module_code}}&#039;&#039;&#039; in the file {{code|cuneifox/&amp;lt;module_code&amp;gt;/template/&amp;lt;module_code&amp;gt;/form_macro.html}}.&lt;br /&gt;
* Refer to the main [[CuneiForm]] article for more details on form definition and design. For information specific the full-form macros, refer to [[#Full-form Macro|a dedicated sub-section]] below.&lt;br /&gt;
&lt;br /&gt;
=== In-line Form with Expansion ===&lt;br /&gt;
Some tables contain just a tab too many columns, but not enough to warrant a fully-fledged separate form. In this case, CuneiTable allows its in-line form to have some fields drawn separately in an expansion modal. This behaviour is controlled by the variables &#039;&#039;&#039;MASTER_expand&#039;&#039;&#039;, &#039;&#039;&#039;MASTER_tbexpand&#039;&#039;&#039;, and &#039;&#039;&#039;MASTER_manualdraw&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
MASTER_expand = {str trigger_field0: str expand_spec0,&lt;br /&gt;
                 str trigger_field1: str expand_spec1,&lt;br /&gt;
                 ...}&lt;br /&gt;
MASTER_tbexpand = str expand_spec&lt;br /&gt;
MASTER_manualdraw = [str expand_field0, str expand_field1, ...]&lt;br /&gt;
&lt;br /&gt;
# Example from the product table on the &#039;Product Delivery&#039; page&lt;br /&gt;
MASTER_expand = {&amp;quot;product_code_mock&amp;quot;:&amp;quot;BodyEx1:product_name&amp;quot;}&lt;br /&gt;
MASTER_tbexpand = &amp;quot;BodyEx1:product_name&amp;quot;&lt;br /&gt;
MASTER_manualdraw = [&amp;quot;product_code&amp;quot;, &amp;quot;product_name&amp;quot;, &amp;quot;desc&amp;quot;, &amp;quot;manage_serial&amp;quot;, &amp;quot;serial_nos&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;trigger_field&#039;&#039;&#039;: The field with an &#039;&#039;Expand&#039;&#039; button {{code|lang=javascript|&#039;&amp;lt;expand_modal_id&amp;gt;:&amp;lt;first_expand_field&amp;gt;&#039;}} attached when the form is triggered.&lt;br /&gt;
* &#039;&#039;&#039;expand_spec&#039;&#039;&#039;: The modal and field to focus on once the &#039;&#039;Expand&#039;&#039; button is presses. (Shares the format with the argument &#039;&#039;expand&#039;&#039; in CuneiForm&#039;s &#039;&#039;&#039;[[CuneiForm#String &amp;amp; Text Area Fields|render_blank]]&#039;&#039;&#039; macro.)&lt;br /&gt;
* &#039;&#039;&#039;expand_field&#039;&#039;&#039;: The field to be skipped during dynamic in-line form generation. Fields listed in &#039;&#039;&#039;MASTER_manualdraw&#039;&#039;&#039; must be put on the page manually.&lt;br /&gt;
&lt;br /&gt;
=== Injections &amp;amp; Post-submission Logics ===&lt;br /&gt;
Some columns, while not stored directly in the database, are quite essential, or at least useful, to display on the client-side table. In CuneiFox&#039;s normal operation, whether it be a data fetch request or a display table update after a database commission, the server returns (representation of) entries from within the database. This ensures the client-side is shown the most updated data, but it also means that columns not in the database do not show up by default. Variables &#039;&#039;&#039;MASTER_preserve_across&#039;&#039;&#039; and &#039;&#039;&#039;MASTER_inject_func&#039;&#039;&#039; seek to better this behaviour.&lt;br /&gt;
&lt;br /&gt;
Employing a similar routine, variable &#039;&#039;&#039;MASTER_post_submit_func&#039;&#039;&#039; allows additional logic to be run after a database commit from a CuneiTable.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;{{code|MASTER_preserve_across}}&#039;&#039;&#039;: (This feature is active &#039;&#039;AFTER SUBMISSION&#039;&#039;) A list of field names, present in the in-line form but not in the database, whose values are read from the form and reinjected into the data sent to client for table manipulation.&lt;br /&gt;
* &#039;&#039;&#039;{{code|MASTER_inject_func}}&#039;&#039;&#039;: (This feature is active &#039;&#039;ON SINGLE-ENTRY FETCH&#039;&#039;) A list of functions (and their arguments) to run just before the fetched entry is sent to the client-side.&lt;br /&gt;
* &#039;&#039;&#039;{{code|MASTER_post_submit_func}}&#039;&#039;&#039;: (This feature is active &#039;&#039;AFTER SUBMISSION&#039;&#039;) A list of functions (and their arguments) to run just after a database commit. This feature is useful both for additional logic run and to modify the returned entry (in the same vein as &#039;&#039;inject_func&#039;&#039; does for a fetch request).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
MASTER_preserve_across = [str field_name0, str field_name1, ...]&lt;br /&gt;
MASTER_inject_func =      {&#039;func&#039;: &amp;lt;function_object&amp;gt;,&lt;br /&gt;
                           &#039;args&#039;: &amp;lt;list_of_ordered_arguments&amp;gt;}&lt;br /&gt;
MASTER_post_submit_func = {&#039;func&#039;: &amp;lt;function_object&amp;gt;,&lt;br /&gt;
                           &#039;args&#039;: &amp;lt;list_of_ordered_arguments&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
# Example from (former) tax ID table&lt;br /&gt;
MASTER_preserve_across = [&amp;quot;bcount&amp;quot;]&lt;br /&gt;
# Example from product group table&lt;br /&gt;
MASTER_inject_func = {&amp;quot;func&amp;quot;:defvat_inject, &amp;quot;args&amp;quot;:[]}&lt;br /&gt;
# Example from account book table&lt;br /&gt;
MASTER_post_submit_func = {&amp;quot;func&amp;quot;:accbook_to_docseries, &amp;quot;args&amp;quot;:[]}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; NOTE #1:&#039;&#039;&#039; &#039;&#039;preserve_across&#039;&#039; feature is automatically assumed for columns covered by CuneiModel&#039;s [[CuneiModel#Cross-table references|Cross-table references]]. There is no need to list such columns in &#039;&#039;MASTER_preserve_across&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE #2:&#039;&#039;&#039; At the time of writing, CuneiTable&#039;s injections &amp;amp; post-submission logics are handled automatically only on the [[#Shortcut Route for Single-table Page &amp;amp; Search Table]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Other Table Definition Variables ===&lt;br /&gt;
Other notable MASTER variables that can be set upon form definition include:&lt;br /&gt;
* &#039;&#039;&#039;{{code|MASTER_firstonly}}&#039;&#039;&#039;: A list of field names that are only active (editable) for a new entry, but inactive (not editable) when editing an old entry.&lt;br /&gt;
* &#039;&#039;&#039;{{code|MASTER_pseudohides}}&#039;&#039;&#039;: A list of field names for which the corresponding fields are not rendered on form triggering.&lt;br /&gt;
* &#039;&#039;&#039;{{code|MASTER_delconfirm}}&#039;&#039;&#039;: The specification for the delete confirmation modal. This value shares the format with the argument &#039;&#039;confirm_first&#039;&#039; in CuneiForm&#039;s &#039;&#039;&#039;[[CuneiForm#String &amp;amp; Text Area Fields|render_blank]]&#039;&#039;&#039; macro. The default value is {{code|lang=python|[&#039;This will delete...&#039;, &#039;code&#039;]}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
MASTER_firstonly = [str field_name0, str field_name1, ...]&lt;br /&gt;
MASTER_pseudohides = [str field_name0, str field_name1, ...]&lt;br /&gt;
MASTER_delconfirm = [str confirm_modal_header, str field_name_to_confirm]&lt;br /&gt;
&lt;br /&gt;
# Example from account code table&lt;br /&gt;
MASTER_firstonly = [&amp;quot;stid&amp;quot;]&lt;br /&gt;
# Example from journal setting table&lt;br /&gt;
MASTER_pseudohides = [&amp;quot;book&amp;quot;, &amp;quot;colspec&amp;quot;]&lt;br /&gt;
# Example from Accounting Journal&#039;s VAT table&lt;br /&gt;
MASTER_delconfirm = [&amp;quot;This will delete...&amp;quot;, &amp;quot;taxdoc&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Initiate ==&lt;br /&gt;
CuneiTable class has its own {{code|__init__}} function.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;{{code|lang=python|1= __init__(self, prefix=&amp;quot;&amp;quot;, **kwargs)}}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; ||&lt;br /&gt;
* &#039;&#039;&#039;prefix&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: This value is reflected in CuneiForm&#039;s {{code|_id}} attribute during initiation. It is also used as the basis to name corresponding forms, modals, and other elements.&lt;br /&gt;
* &#039;&#039;&#039;Other keyword arguments&#039;&#039;&#039;: See notes under sections below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rough step-by-step of a CuneiTable&#039;s initiation is as follows:&lt;br /&gt;
# Assign the following MASTER variables to corresponding attributes of the CuneiTable instance (if the attributes are not specified otherwise):&lt;br /&gt;
#* [[#Search and Fill|Search and fill group]]&lt;br /&gt;
#* [[#In-line Form with Expansion|Expansion form group]]&lt;br /&gt;
#* [[#Injections &amp;amp; Post-submission Logics|Injection &amp;amp; post-submission group]]&lt;br /&gt;
#* [[#Other Table Definition Variables|Miscellaneous masters]]&lt;br /&gt;
# Modify the full-form class with [[#Standard Column Set|standard field set]], initiate the full-form, and modify the form instance&#039;s attributes (where applicable).&lt;br /&gt;
# Modify the in-line &#039;&#039;SubForm&#039;&#039; class with [[#Standard Column Set|standard field set]], initiate the in-line form, and modify the form instance&#039;s attributes.&lt;br /&gt;
# Assign the [[#Choices and Radios|choice and radio]] MASTER variables to corresponding attributes of the CuneiTable instance (if the attributes are not specified otherwise). Then, use the attributes to modify the choices of the in-line form fields.&lt;br /&gt;
# Add values corresponding to the [[#Standard Column Set|standard column set]] to the [[#The Holy Trinity of CuneiTable|3 main MASTERs]].&lt;br /&gt;
&lt;br /&gt;
=== Standard Column Set ===&lt;br /&gt;
CuneiTable requires a few standard columns in order to function properly. These columns need not be defined explicitly, but are programmatically generated and integrated into all CuneiTable instances. The 4 standard columns include:&lt;br /&gt;
* &#039;&#039;&#039;id, submit, is_del&#039;&#039;&#039;: These columns correspond to the [[#Submit-delete Field Set]] of the corresponding in-line form or full-form. Developers can also choose to explicitly define these columns in the class definition &#039;&#039;(especially the &#039;&#039;&#039;id&#039;&#039;&#039; column)&#039;&#039; if they desire.&lt;br /&gt;
* &#039;&#039;&#039;The multi-selection column&#039;&#039;&#039;: This column is only created for a table with multi-selection enabled. It is displayed as the leftmost column of the table. (See the note on &#039;&#039;&#039;multi&#039;&#039;&#039; attribute below.)&lt;br /&gt;
&lt;br /&gt;
=== Column Sizes &amp;amp; Post-init Modification ===&lt;br /&gt;
For easier development, column sizes are defined (via &#039;&#039;&#039;MASTER_colsizes&#039;&#039;&#039;) in relative sizes. However, those values are not used directly in the client-side render. They would have to converted to percentage values first via an internal function. While developers rarely need to tamper with column sizes after class definition, there are cases where tables are reused for many pages and with some columns hidden (in other words, resized to 0) in some of its incarnation.&lt;br /&gt;
&lt;br /&gt;
Column resizing, post-initiation, is done by running 2 function consecutively: {{code|assign_csize}} and {{code|tune_cols}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;{{code|lang=python|assign_csize(self, cname, csize)}}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; ||&lt;br /&gt;
* &#039;&#039;&#039;self&#039;&#039;&#039; &#039;&#039;(CuneiTable instance)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;cname&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The name of the column  to be resized.&lt;br /&gt;
* &#039;&#039;&#039;csize&#039;&#039;&#039; &#039;&#039;(int ot float)&#039;&#039;: The new relative sizes.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039; || At this stage, the CuneiTable instance have alrady gone through one round of size tuning. Hence, the value &#039;&#039;&#039;csize&#039;&#039;&#039; should be set to the new relative (100-based) basis.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;{{code|lang=python|1= tune_cols(self, skip_multicheck=False)}}&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; ||&lt;br /&gt;
* &#039;&#039;&#039;self&#039;&#039;&#039; &#039;&#039;(CuneiTable instance)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;skip_multicheck&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Whether to skip the column prepend for multi-selection. &#039;&#039;&#039;Always set to {{code|lang=python|True}} during column resizing.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Notes on Keyword Arguments ===&lt;br /&gt;
The following sub-sections introduce notable keyword arguments. Other keywords not detailed here are also welcome during CuneiTable initiation. Unless explicitly specified, all keyword arguments can be accessed post-initiation as attributes of the created CuneiTable instance.&lt;br /&gt;
&lt;br /&gt;
==== MASTER-adjacents ====&lt;br /&gt;
Back to the [[#Define]] section, we are introduced to a number of MASTER variables. Those variables set at table definition act as the default values for each table type. However, developers can feed an overriding value that applies only to the CuneiTable instance being initiated via a corresponding non-master keyword (e.g. use keyword instacalc to override the class&#039;s MASTER_instacalc).&lt;br /&gt;
&lt;br /&gt;
The option to modify object-specific values after initiation is also available. However, since value packing and manipulation occurs during initiation, some details should be noted:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;colsizes&#039;&#039;&#039;, &#039;&#039;&#039;colnames&#039;&#039;&#039;, &#039;&#039;&#039;expand&#039;&#039;&#039;, &#039;&#039;&#039;tbexpand&#039;&#039;&#039;, &#039;&#039;&#039;manualdraw&#039;&#039;&#039;, &#039;&#039;&#039;del_confirm&#039;&#039;&#039; &#039;&#039;(corresponds to MASTER_delconfirm)&#039;&#039;, &#039;&#039;&#039;preserve_across&#039;&#039;&#039;, &#039;&#039;&#039;post_submit_func&#039;&#039;&#039;, &#039;&#039;&#039;inject_func&#039;&#039;&#039;, and &#039;&#039;&#039;pseudohides&#039;&#039;&#039; are normal table attributes and directly take on the values of their MASTER counterparts. They can easily be accessed and modified.&lt;br /&gt;
* &#039;&#039;&#039;radiocols&#039;&#039;&#039; and &#039;&#039;&#039;choicecols&#039;&#039;&#039; take on the values of their MASTER counterparts. These 2 attributes work closely with the next item on this list.&lt;br /&gt;
* &#039;&#039;&#039;radios&#039;&#039;&#039; and &#039;&#039;&#039;choices&#039;&#039;&#039; take on the values of their MASTER counterparts. These attributes are used to generate a translation map on the client-side to aid value display. CuneiTable&#039;s initiation routine also includes assigning these values as the &#039;&#039;choices&#039;&#039; attributes of corresponding &#039;&#039;&#039;in-line form&#039;&#039;&#039; &#039;&#039;(including expansion)&#039;&#039; fields as well.&lt;br /&gt;
* &#039;&#039;&#039;schfill&#039;&#039;&#039; takes on the value of &#039;&#039;MASTER_schfill&#039;&#039;. This attribute applies only to &#039;&#039;&#039;in-line form&#039;&#039;&#039; &#039;&#039;(dynamically-generated)&#039;&#039; fields. Fields under &#039;&#039;manualdraw&#039;&#039; must have equivalent values specified during [[CuneiForm#String &amp;amp; Text Area Fields|the form designing phase]].&lt;br /&gt;
&lt;br /&gt;
The following attributes do not allow value feeding during initiation phase. However, they can be modified after the fact if needed, so it is fit to discuss them here. &#039;&#039;(&#039;&#039;&#039;SubForm&#039;&#039;&#039; and &#039;&#039;&#039;FullForm&#039;&#039;&#039; referenced here can be accessed via appropriate CuneiTable attributes. See [[#Form-related Attributes]] sub-section.)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SubForm.firstonly&#039;&#039;&#039; and &#039;&#039;&#039;FullForm.firstonly&#039;&#039;&#039;: For an &#039;&#039;&#039;in-line form&#039;&#039;&#039;, the form attribute is copied directly from &#039;&#039;MASTER_firstonly&#039;&#039;. For a &#039;&#039;&#039;full-form&#039;&#039;&#039;, members from &#039;&#039;MASTER_firstonly&#039;&#039; are appended to what the form originally has by itself.&lt;br /&gt;
* &#039;&#039;&#039;SubForm.autorun&#039;&#039;&#039; and &#039;&#039;&#039;FullForm.autorun&#039;&#039;&#039;: For an &#039;&#039;&#039;in-line form&#039;&#039;&#039;, the form attribute is copied directly from &#039;&#039;MASTER_autorun&#039;&#039;. For a &#039;&#039;&#039;full-form&#039;&#039;&#039;, members from &#039;&#039;MASTER_autorun&#039;&#039; are appended to what the form originally has by itself.&lt;br /&gt;
* &#039;&#039;&#039;SubForm.instacalc&#039;&#039;&#039; takes the value of &#039;&#039;MASTER_instacalc&#039;&#039;. Its post-init format can be found in the [[CuneiForm#MASTER-adjacents|CuneiForm article]]. Note that &#039;&#039;MASTER_instacalc&#039;&#039; only affect &#039;&#039;&#039;in-line form&#039;&#039;&#039; fields.&lt;br /&gt;
* &#039;&#039;&#039;SubForm.coltypes&#039;&#039;&#039; is taken (and modified to accommodate the [[#Standard Column Set|standard column set]]) from &#039;&#039;MASTER_coltypes&#039;&#039;. The initation routine also includes extracting appropriate values from this list to set the [[CuneiForm#MASTER-adjacents|&#039;&#039;&#039;special_type&#039;&#039;&#039; field attributes]] for &#039;&#039;&#039;in-line form&#039;&#039;&#039; as well.&lt;br /&gt;
&lt;br /&gt;
==== Know Thy Self ====&lt;br /&gt;
These attributes dictate the way a CuneiTable is drawn on the client-side along with ways to identify its affiliated components:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;_id&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The initiation argument &#039;prefix&#039; repacked. This value will become the HTML id of the table object. (The attribute name is underscored to avoid conflict.)&lt;br /&gt;
* &#039;&#039;&#039;in_modal&#039;&#039;&#039; &#039;&#039;(str: defaults to {{code|lang=python|False}} for stand-alone tables)&#039;&#039;: The ID of the modal with this table as the &#039;&#039;&#039;MAIN SUBMITTING COMPONENT&#039;&#039;&#039;, like the search modal affiliated with a search table, for example. (See [[CuneiModal]] for details.)&lt;br /&gt;
* &#039;&#039;&#039;bound_modal&#039;&#039;&#039; &#039;&#039;(str: defaults to {{code|lang=python|False}})&#039;&#039;: The ID of the modal in which this table is drawn but &#039;&#039;&#039;IS NOT&#039;&#039;&#039; the &#039;&#039;&#039;MAIN SUBMITTING COMPONENT&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;slim&#039;&#039;&#039; &#039;&#039;(bool: defaults to {{code|lang=python|False}})&#039;&#039;: Whether to render the &#039;&#039;in-line form&#039;&#039; in slim mode. When supplied as an init argument, it is transfered directly to &#039;&#039;&#039;SubForm.subslim&#039;&#039;&#039;. (For CuneiTable&#039;s in-line forms, the difference is less obvious than in full-blown forms. Here, slim mode only saves vertical spaces with reduced padding.)&lt;br /&gt;
* &#039;&#039;&#039;linkmode&#039;&#039;&#039; &#039;&#039;(list: defaults to {{code|lang=python|False}})&#039;&#039;: If set, the CuneiTable is not for selection. Each row of the table acts as a navigation link to another page. This attribute take the format {{code|lang=python|[&#039;&amp;lt;url_for_route_str&amp;gt;&#039;, [&#039;&amp;lt;argument_col0&amp;gt;&#039;, &#039;&amp;lt;argument_col1&amp;gt;&#039;, ...]]}}&lt;br /&gt;
* &#039;&#039;&#039;multi&#039;&#039;&#039; &#039;&#039;(bool: defaults to {{code|lang=python|False}})&#039;&#039;: Whether the table is able to make multiple selections at a time. If that is the case, a special column is automatically set up for this feature (see [[#Standard Column Set]]).&lt;br /&gt;
* &#039;&#039;&#039;searchable&#039;&#039;&#039; &#039;&#039;(bool: defaults to {{code|lang=python|True}})&#039;&#039;: Whether to draw a &#039;&#039;live-search field&#039;&#039; at the top of the table (see [[#Live Search]]).&lt;br /&gt;
&lt;br /&gt;
==== Editable or Read-only ====&lt;br /&gt;
The attribute &#039;&#039;&#039;editable&#039;&#039;&#039; &#039;&#039;(bool: defaults to {{code|lang=python|False}})&#039;&#039; dictates whether a CuneiTable is edit-able at all. However, the finer details of which actions are allowed or suppressed are more finely tuned via the following attributes:&lt;br /&gt;
* &#039;&#039;&#039;perm_bit&#039;&#039;&#039; &#039;&#039;(int: defaults to {{code|lang=python|1}})&#039;&#039;: The permission bit dictating what actions the useris allowed to do. It mimics the integer permission bits in the main CuneiFox system, namely:&lt;br /&gt;
** &#039;&#039;&#039;0&#039;&#039;&#039;: Not readable. (Usually users with this permission level should be prevented from reaching the page at all. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; rely on this permission bit as a security measure,)&lt;br /&gt;
** &#039;&#039;&#039;1&#039;&#039;&#039;: Read-only. (Even if the &#039;&#039;&#039;editable&#039;&#039;&#039; attribute is set to {{code|lang=python|True}}, the user will still find all non-read buttons dimmed out.)&lt;br /&gt;
** &#039;&#039;&#039;2&#039;&#039;&#039;: Add. (Allows &#039;add&#039; type actions: add and copy.)&lt;br /&gt;
** &#039;&#039;&#039;3&#039;&#039;&#039;: Add + Edit.&lt;br /&gt;
** &#039;&#039;&#039;≥4&#039;&#039;&#039;: Add + Edit + Delete.&lt;br /&gt;
* &#039;&#039;&#039;suppress_add&#039;&#039;&#039; &#039;&#039;(bool: defaults to {{code|lang=python|False}})&#039;&#039;: Whether to suppress the drawing of the table&#039;s Add button [[ไฟล์:Cuneifox add btn.png|25px|frameless|alt=Add button|Add button]]. (Suitalbe for cases where entries are supposed to be edit-only.)&lt;br /&gt;
* &#039;&#039;&#039;suppress_copy&#039;&#039;&#039; &#039;&#039;(bool: defaults to {{code|lang=python|True}})&#039;&#039;: Whether to suppress the drawing of the table&#039;s Copy button [[ไฟล์:Cuneifox copy btn.png|25px|frameless|alt=Copy button|Copy button]].&lt;br /&gt;
* &#039;&#039;&#039;suppress_del&#039;&#039;&#039; &#039;&#039;(bool: defaults to {{code|lang=python|False}})&#039;&#039;: Whether to suppress the drawing of the table&#039;s Delete button [[ไฟล์:Cuneifox delete btn.png|25px|frameless|alt=Delete button|Delete button]].&lt;br /&gt;
&lt;br /&gt;
==== Sequence and Columns ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;seq&#039;&#039;&#039; and &#039;&#039;&#039;cnames&#039;&#039;&#039; attributes of a CuneiTable are copied to its &#039;&#039;&#039;in-line form&#039;&#039;&#039;. These attributes do not support value feeding during initiation because they are highly involved in the process. In fact, it is &#039;&#039;&#039;NOT RECOMMENDED&#039;&#039;&#039; to trifle with them at all. Their functions can be found in [[CuneiForm#Sequence and Column Names|the corresponding section on the CuneiForm page]].&lt;br /&gt;
* &#039;&#039;&#039;content_width&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The width of the table itself (not the bounding element of the table) on the client-side display. The value can be anything interpretable as CSS size.&lt;br /&gt;
&lt;br /&gt;
==== Form-related Attributes ====&lt;br /&gt;
Before we go on and make references to the forms themselves, let us take a little detour to see how to control the appearances of table-bound forms on the client-side.&lt;br /&gt;
* An &#039;&#039;&#039;in-line form&#039;&#039;&#039; is not much of a hassle, and user only loses the ability to manipulate entries (the table becomes read-only), but not any information, when it is not drawn. So only the &#039;&#039;&#039;editable&#039;&#039;&#039; discussed above is all we need. The form is only drawn only when {{code|lang=python|1= table.editable = True}}.&lt;br /&gt;
* A &#039;&#039;&#039;full-form&#039;&#039;&#039; is more complicated. For example, it might need to be drawn even if the table is read-only because losing it at all means losing the ability to see the full entries&#039;. By default, a &#039;&#039;full-form&#039;&#039; is always drawn, the &#039;&#039;&#039;editable&#039;&#039;&#039; attribute only controls the read-only status of the form. &amp;lt;br&amp;gt;If the full-form is not wanted at all &#039;&#039;(for example, when a full-form entails too many search pop-ups that threaten to clutter the user experience)&#039;&#039;, developers have to choices to:&lt;br /&gt;
** Feed the keyword argument &#039;&#039;&#039;{{code|lang=python|1= suppress_fullform=True}}&#039;&#039;&#039; at CuneiTable initiation.&lt;br /&gt;
** Use keyword argument &#039;&#039;&#039;{{code|lang=javascript|1= skip_fullform=true}}&#039;&#039;&#039; on &#039;&#039;&#039;BOTH&#039;&#039;&#039; the &#039;&#039;&#039;general_table_block&#039;&#039;&#039; and &#039;&#039;&#039;general_table_tail&#039;&#039;&#039; macros in an HTML template.&lt;br /&gt;
&lt;br /&gt;
Another notable attribute is &#039;&#039;&#039;modal_view&#039;&#039;&#039; &#039;&#039;(int: 0, 1, or 2)&#039;&#039;. This attribute applies to a &#039;&#039;full-form&#039;&#039;. It acts as the flag to control the drawing of the full-form itself and the associated Edit [[ไฟล์:Cuneifox edit btn.png|25px|frameless|alt=Edit button|Edit button]], View [[ไฟล์:Cuneifox view btn.png|25px|frameless|alt=View button|View button]] and Delete [[ไฟล์:Cuneifox delete btn.png|25px|frameless|alt=Delete button|Delete button]] buttons. Its value is automatically interpreted during initiation and requires &#039;&#039;&#039;NO MANUAL MANIPULATION&#039;&#039;&#039;. Nevertheless, its value might be useful to developers:&lt;br /&gt;
* &#039;&#039;&#039;{{code|lang=python|0}}&#039;&#039;&#039;: The table has no &#039;&#039;full-form&#039;&#039; defined or the it is suppressed at initiation.&lt;br /&gt;
* &#039;&#039;&#039;{{code|lang=python|1}}&#039;&#039;&#039;: The table has an editable &#039;&#039;full-form&#039;&#039; and relevant buttons will be drawn. Whether the buttons are usable is determined by the table&#039;s &#039;&#039;&#039;perm_bit&#039;&#039;&#039; attribute.&lt;br /&gt;
* &#039;&#039;&#039;{{code|lang=python|2}}&#039;&#039;&#039;: The table has a read-only &#039;&#039;full-form&#039;&#039; and only the View button is drawn.&lt;br /&gt;
&lt;br /&gt;
With form-control discussed, we are now ready. The following 2 attributes refer to the forms bound to the CuneiTable. These attributes &#039;&#039;&#039;DO NOT&#039;&#039;&#039; support value feeding during initiation.&lt;br /&gt;
* &#039;&#039;&#039;form&#039;&#039;&#039; refers to the table&#039;s &#039;&#039;&#039;in-line form&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;fullform&#039;&#039;&#039; is a list of values related to the table&#039;s &#039;&#039;&#039;full-form&#039;&#039;&#039;. When applicable, the attribute reads and repackages &#039;&#039;MASTER_fullform&#039;&#039; into the format below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
table.fullform = [str fullform_modal_header,&lt;br /&gt;
                  str modal_class,  # OBSOLETE&lt;br /&gt;
                  Jinja2_Macro form_design_template,&lt;br /&gt;
                  CuneiForm fullform_instance,&lt;br /&gt;
                  str modal_size]&lt;br /&gt;
&lt;br /&gt;
# An example for full-form attribute manipulation post-initiation.&lt;br /&gt;
product_tb.fullform[3].slim = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE #1:&#039;&#039;&#039; The FullForm instance itself has a notable attribute &#039;&#039;&#039;modal_addi_btns&#039;&#039;&#039; that dictates additional buttons in the full-form modal (besides the default &#039;&#039;OK&#039;&#039; and &#039;&#039;Cancel&#039;&#039; buttons). The value is only modifiable post-initiation, as in the example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
table.fullform[3].modal_addi_btns = \&lt;br /&gt;
      [ [str btn_name0, str btn_label0, str_or_list btn_class0, str function_name0], ... ]&lt;br /&gt;
&lt;br /&gt;
# Example from withholding tax invoice table in the accounting journal page.&lt;br /&gt;
wht_tb.fullform[3].modal_addi_btns = [[&amp;quot;prn&amp;quot;, &amp;quot;Print&amp;quot;, &amp;quot;dark&amp;quot;, &amp;quot;whtprn&amp;quot;]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;btn_nameX&#039;&#039;&#039; is used to id the button element on the client-side as {{code|lang=javascript|&#039;&amp;lt;table._id&amp;gt;_FullFormModal-&amp;lt;btn_name&amp;gt;btn&#039;}}.&lt;br /&gt;
* &#039;&#039;&#039;btn_labelX&#039;&#039;&#039; is the label appearing on the button.&lt;br /&gt;
* &#039;&#039;&#039;btn_classX&#039;&#039;&#039; is the color scheme of the button. It can take the format of either the {{code|class}} or {{code|custom_color}} arguments of [[CuneiForm#Buttons &amp;amp; Submits|CuneiForm&#039;s render_btn macro]].&lt;br /&gt;
* &#039;&#039;&#039;function_nameX&#039;&#039;&#039; is the name of the JavaScript function to be called when the button is pressed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE #2:&#039;&#039;&#039; The obsolete &#039;&#039;&#039;modal_class&#039;&#039;&#039; member in the &#039;&#039;fullform&#039;&#039; attribute is a relic of the past when the table and modal headers are limited to preset colours in the BootStrap template. In the current version, the colours can be more freely set, but the full-form modal must shares the same color scheme with the parent table to emphasize their relationship.&lt;br /&gt;
&lt;br /&gt;
==== Getting Data ====&lt;br /&gt;
Under the normal work flow, CuneiFox sent only blank components to the client first to render the page. At this stage, a CuneiTable only displays as a header with a blank body. Once the page components are loaded, the elements (including CuneiTables) can then fetch data from the server, each using a separate HTML request.&lt;br /&gt;
&lt;br /&gt;
The attributes &#039;&#039;&#039;populate_route&#039;&#039;&#039;, &#039;&#039;&#039;populate_suppress&#039;&#039;&#039;, and &#039;&#039;&#039;populate_id&#039;&#039;&#039; dictate the table&#039;s behaviours regarding data request. See explanation on them in [[CuneiForm#Getting Data]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE #1:&#039;&#039;&#039; CuneiTable supports multiple fetch modes listed below:&lt;br /&gt;
* &#039;&#039;&#039;{{code|lang=python|&#039;qsch&#039;}}&#039;&#039;&#039; is for populating the entire table. If the table is a part of a [[CuneiForm#Search and Fill|search-fill routine]] of another form, the table is populated only after the &#039;&#039;quick-search&#039;&#039; fails to fetch a unique selection.&lt;br /&gt;
* &#039;&#039;&#039;{{code|lang=python|&#039;sel&#039;}}&#039;&#039;&#039; is used to fetch the full database entries for the current selection(s). This mode is triggered when the selection(s) of a search modal is properly committed.&lt;br /&gt;
* &#039;&#039;&#039;{{code|lang=python|&#039;free_grab&#039;}}&#039;&#039;&#039; fetches one active entries to populate a table&#039;s &#039;&#039;full-form&#039;&#039;. This mode is equivalent to the fetch mode &#039;&#039;&#039;{{code|lang=python|&#039;grab&#039;}}&#039;&#039;&#039; on &#039;&#039;stand-alone &#039;&#039;&#039;AND&#039;&#039;&#039; in-line forms&#039;&#039;. Details on &#039;&#039;&#039;{{code|lang=python|&#039;grab&#039;}}&#039;&#039;&#039; mode can be found under NOTES in [[CuneiForm#Getting Data]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE #2:&#039;&#039;&#039; For a CuneiTable with a full-form, the form&#039;s &#039;&#039;&#039;populate_id&#039;&#039;&#039; is automatically assumed to be similar to the table&#039;s (with &#039;&#039;change&#039;&#039; trigger if the fetch mode &#039;&#039;&#039;{{code|lang=python|&#039;free_grab&#039;}}&#039;&#039;&#039; is not suppressed) &#039;&#039;&#039;PLUS the column name {{code|lang=python|&#039;id&#039;}}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Sending Data ====&lt;br /&gt;
Both &#039;&#039;&#039;in-line form&#039;&#039;&#039; and &#039;&#039;&#039;full-form&#039;&#039;&#039; submit in a non-redirecting fashion by CuneiFox default. So, the only important attribute regarding form submission via a CuneiTable is:&lt;br /&gt;
* &#039;&#039;&#039;post_route&#039;&#039;&#039; &#039;&#039;(url_for_string: defaults to {{code|lang=python|False}})&#039;&#039;: Route to send a submit request.&lt;br /&gt;
&lt;br /&gt;
In rare cases where redirection is needed, developers can either modify the appropriate attributes of the &#039;&#039;&#039;in-line form&#039;&#039;&#039; and/or &#039;&#039;&#039;full-form&#039;&#039;&#039; &#039;&#039;(see [[CuneiForm#Sending Data]])&#039;&#039;, &#039;&#039;&#039;OR&#039;&#039;&#039; package a redirect or reload command with the submission response &#039;&#039;(see [[CuneiForm#Non-redirecting Form]])&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Pre-made Scripts ==&lt;br /&gt;
Now that a CuneiTable is defined, initiated, and sent along with a template, here comes to frontend part. CuneiFox&#039;s standard pattern for putting a table up on an HTML page includes:&lt;br /&gt;
&lt;br /&gt;
# Design a &#039;&#039;full-form macro&#039;&#039;. (Only when applicable. Done once and reuse for all repeated instances.)&lt;br /&gt;
# Initiate a {{code|lang=html|&amp;lt;table&amp;gt;}} DOM element and a Javascript table object. Both fall under the scope of the Jinja2 macro {{code|general_table_block}}.&lt;br /&gt;
# Design the pop-up modal for the extension (manually drawn) parts of the &#039;&#039;in-line form&#039;&#039;. (Only when applicable. See [[CuneiModal#Design &amp;amp; Pre-made Scripts]] for details.)&lt;br /&gt;
# Finalize the Javascript object and bind relevant events with the Jinja2 macro {{code|genetal_table_tail}}.&lt;br /&gt;
&lt;br /&gt;
One can see that, for the simplest tables, only two lines of macros is sufficient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css+jinja&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
/* Full-form macro lives elsewhere and not shown here. */&lt;br /&gt;
{{ CuneiTables.general_table_block(table, block_height, ...) }}&lt;br /&gt;
    /* If in-line form has an extension, the extension modal goes here */&lt;br /&gt;
    {{ CuneiModals.modal_upper_half(&#039;&amp;lt;ext_modal_name&amp;gt;&#039;, ...) }}&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
    {{ CuneiModals.modal_lower_half(&#039;ext_modal_name&#039;, ...) }}&lt;br /&gt;
    /* End of form extension block */&lt;br /&gt;
{{ CuneiTables.general_table_tail(table, ...) }}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Full-form Macro ===&lt;br /&gt;
&lt;br /&gt;
The macro of a CuneiTables&#039; Full Form is to be written in the file {{code|cuneifox/&amp;lt;module_code&amp;gt;/templates/&amp;lt;module_code&amp;gt;/form_macro.html}} directory. In essence, each full-form macro is merely a [[CuneiForm#Design &amp;amp; Pre-made Scripts|CuneiForm design]] with a few notable properties.&lt;br /&gt;
&lt;br /&gt;
# The Jinja2 macro for the full-form must be named after the &#039;&#039;&#039;{{code|fullform_class_name}}&#039;&#039;&#039; specified in the corresponding CuneiTable class attribute. (See [[#Table with a Separate Form Modal]] for details.)&lt;br /&gt;
# To avoid name conflicts of the form&#039;s serach modals with other modals on the page, a full-form macro is recommended to accept and work with {{code|modal_shift}} argument.&lt;br /&gt;
# To avoid having to create a full-form system for every small variation in use cases, a full-form macro is recommended to accept and work with {{code|schcol_shift}} and {{code|fillcol_shift}} arguments.&lt;br /&gt;
&lt;br /&gt;
Note that requirements 2 and 3 are not at all compulsory and can totally be ignored if there is no risk of modal name conflicts or usage variation. However, due to these requirements, the pattern of a typical full-form macro is as shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css+jinja&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{% macro &amp;lt;macro_name&amp;gt;(form, draw_submit=true, hide_submit=false, &lt;br /&gt;
                      confirm_first=[gettext(&amp;quot;This will delete...&amp;quot;), &amp;quot;code&amp;quot;],&lt;br /&gt;
                      modal_shift={}, schcol_shift={}, fillcol_shift={}) %}&lt;br /&gt;
&lt;br /&gt;
    {% set sch_modals = {&amp;quot;&amp;lt;key0&amp;gt;&amp;quot;: &amp;quot;&amp;lt;default_search_modal_name0&amp;gt;&amp;quot;, ...} %}&lt;br /&gt;
    {% set sch_cols   = {&amp;quot;&amp;lt;key0&amp;gt;&amp;quot;: &amp;quot;&amp;lt;default_search_column0&amp;gt;&amp;quot;, ...} %}&lt;br /&gt;
    {% set fill_cols  = {&amp;quot;&amp;lt;key0&amp;gt;&amp;quot;: &amp;quot;&amp;lt;default_fill_specs0&amp;gt;&amp;quot;, ...} %}&lt;br /&gt;
&lt;br /&gt;
    {% do sch_modals.update(modal_shift) %}&lt;br /&gt;
    {% do sch_cols.update(schcol_shift) %}&lt;br /&gt;
    {% do fill_cols.update(fillcol_shift) %}&lt;br /&gt;
&lt;br /&gt;
    {{ CuneiForms.general_form_head(form) }}&lt;br /&gt;
        // Put form fields here.&lt;br /&gt;
        {% if draw_submit %}&lt;br /&gt;
            {% if not(hide_submit) %}&lt;br /&gt;
                &amp;lt;div class=&amp;quot;row align-items-start&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;{{ CuneiForms.render_submit(form, form.submit) }}&amp;lt;/div&amp;gt;&lt;br /&gt;
                    {% if form.del_submit %}&lt;br /&gt;
                        &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;&lt;br /&gt;
                            {{ CuneiForms.render_submit(form, form.del_submit, class=&amp;quot;danger&amp;quot;,&lt;br /&gt;
                                                        confirm_first=confirm_first) }}&lt;br /&gt;
                        &amp;lt;/div&amp;gt;&lt;br /&gt;
                    {% endif %}&lt;br /&gt;
                    {% if form.is_del %}&lt;br /&gt;
                        &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;{{ CuneiForms.render_check(form, form.is_del) }}&amp;lt;/div&amp;gt;&lt;br /&gt;
                    {% endif %}&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
            {% else %}&lt;br /&gt;
                {{ CuneiForms.render_submit(form, form.submit, hidden=true) }}&lt;br /&gt;
                {% if form.del_submit %}&lt;br /&gt;
                    {{ CuneiForms.render_submit(form, form.del_submit, class=&amp;quot;danger&amp;quot;,&lt;br /&gt;
                                                confirm_first=confirm_first, hidden=true) }}&lt;br /&gt;
                {% endif %}&lt;br /&gt;
                {% if form.is_del %}&lt;br /&gt;
                    {{ CuneiForms.render_check(form, form.is_del, hidden=true) }}&lt;br /&gt;
                {% endif %}&lt;br /&gt;
            {% endif %}&lt;br /&gt;
        {% endif %}&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
            // Scripts are here.&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    {{ CuneiForms.general_form_tail(form, populate=false) }}&lt;br /&gt;
{% endmacro %}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this pattern, specifications of search-and-fill fields can be a little clunkier than usual. For example, where one might normally write for a free-standing form...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css+jinja&amp;quot;&amp;gt;&lt;br /&gt;
{{ CuneiForms.render_blank(form, form.x_code, &lt;br /&gt;
                           search=&amp;quot;ModalAccCode:code&amp;quot;,&lt;br /&gt;
                           fill=&amp;quot;stid:x_stid,name:x_name&amp;quot;) }}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
becomes...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css+jinja&amp;quot;&amp;gt;&lt;br /&gt;
{{ CuneiForms.render_blank(form, form.x_code,&lt;br /&gt;
                           search=sch_modals[&amp;quot;xcode&amp;quot;]+&amp;quot;:&amp;quot;+sch_cols[&amp;quot;xcode&amp;quot;],&lt;br /&gt;
                           fill=fill_cols[&amp;quot;xcode&amp;quot;]) }}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== General Table Block &amp;amp; Table Object ===&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
general_table_block(table, block_height,&lt;br /&gt;
                    block_width=null, content_width=false,&lt;br /&gt;
                    is_master=false, pad_bottom=true,&lt;br /&gt;
                    head_class=&amp;quot;dark&amp;quot;, head_bg=false,&lt;br /&gt;
                    force_head_textwhite=false, &lt;br /&gt;
                    modal_shift={}, schcol_shift={}, fillcol_shift={},&lt;br /&gt;
                    skip_fullform=false, intab=false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; || &#039;&#039;&#039;DO NOT&#039;&#039;&#039; rely on argument order farther than &#039;&#039;table&#039;&#039;, &#039;&#039;block_height&#039;&#039;, and &#039;&#039;block_width&#039;&#039;, &#039;&#039;&#039;ALWAYS PROVIDE&#039;&#039;&#039; argument keywords.&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; &#039;&#039;(CuneiTable)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;block_height&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The height of the table block. The value can be anything interpretable as CSS size.&lt;br /&gt;
* &#039;&#039;&#039;block_width&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The width of the table block. The value can be anything interpretable as CSS size. If not given, CuneiFox automatically assigns the value {{code|lang=css|&#039;85vw&#039;}}.&lt;br /&gt;
* &#039;&#039;&#039;content_width&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The width of the actual {{code|lang=html|&amp;lt;table&amp;gt;}} element (scrollable inside the table block). The value can be anything interpretable as CSS size. If not given, CuneiFox automatically assigns the same value as &#039;&#039;&#039;block_width&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;is_master&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Whether the table is the main element of the multi-component page.&lt;br /&gt;
* &#039;&#039;&#039;pad_bottom&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Whether the table block should have some padding at the bottom. Usually set to {{code|javascript|false}} when the table has some immediately related components to the bottom, e.g. a mirror table or a sum fields (defined via a separate CuneiForm).&lt;br /&gt;
* &#039;&#039;&#039;head_class&#039;&#039;&#039; and &#039;&#039;&#039;head_bg&#039;&#039;&#039; take the formats of &#039;&#039;class&#039;&#039; and &#039;&#039;custom_color&#039;&#039; arguments of CuneiForm&#039;s &#039;&#039;&#039;[[CuneiForm#Buttons &amp;amp; Submits|render_btn]]&#039;&#039;&#039; respectively. They dictates the colour of the table header as well as the color scheme of the full-form modal (when applicable). Note that, if both are given, &#039;&#039;&#039;head_bg&#039;&#039;&#039; takes precedence.&lt;br /&gt;
* &#039;&#039;&#039;force_head_textwhite&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Forces the table header text to be coloured white. &#039;&#039;(This argument is only effective when &#039;&#039;&#039;head_class&#039;&#039;&#039; is. When using &#039;&#039;&#039;head_bg&#039;&#039;&#039;, the header text colour is controlled by {{code|head_bg[1]}}.)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;modal_shift&#039;&#039;&#039;, &#039;&#039;&#039;schcol_shift&#039;&#039;&#039;, and &#039;&#039;&#039;fillcol_shift&#039;&#039;&#039; &#039;&#039;(dict)&#039;&#039; are mapping dicts for &#039;&#039;search modals&#039;&#039;, &#039;&#039;search columns&#039;&#039;, and &#039;&#039;fill specs&#039;&#039; respectively. They work to map &#039;&#039;the original values&#039;&#039; coded in the full-form macro to the &#039;&#039;practical ones&#039;&#039; to really be used on the page. Cases where these arguments prove useful include pages where there are multiple search fields referring to the same databases; for example, the Accounting Journal page where the tax ID can be searched from both the VAT table and the withholding tax table. (Refer back to [[#Full-form Macro]] if needed.)&lt;br /&gt;
* &#039;&#039;&#039;skip_fullform&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Whether the drawing of the full-form should be ignored. This is mostly done in cases where the CuneiTable itself is a few search layers in and opening more modals is more likely to cause more unpleasant experience than the convenience gained.&lt;br /&gt;
* &#039;&#039;&#039;intab&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The id of the tab holding this table. This value control the navigation to/away from the tab when the table gets or loses focus.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The Working of General Table Block ====&lt;br /&gt;
In essence, the {{code|general_table_block}} macro is responsible for the following actions:&lt;br /&gt;
&lt;br /&gt;
# Create translation maps for &#039;&#039;choices&#039;&#039; and &#039;&#039;radios&#039;&#039;.&lt;br /&gt;
# Draw the full-form and its pop-up modal (if applicable).&lt;br /&gt;
# Register the table to the {{code|all_tbfm_ids}} list for future reference.&lt;br /&gt;
# Create a {{code|table_obj}} corresponding to the table, and assign preliminary values to its many attributes.&lt;br /&gt;
# Set up handler functions for the table action &#039;&#039;add&#039;&#039;, &#039;&#039;edit&#039;&#039;, &#039;&#039;delete&#039;&#039;, &#039;&#039;copy&#039;&#039;, &#039;&#039;submit&#039;&#039;, &#039;&#039;cancel&#039;&#039;, &#039;&#039;view&#039;&#039;, &#039;&#039;select&#039;&#039;, and &#039;&#039;follow link&#039;&#039;. (Each function is only set up once and shared among all the tables on the page.)&lt;br /&gt;
# Point the &#039;&#039;main component object&#039;&#039; attribute of the &#039;&#039;modal object&#039;&#039; referenced by &#039;&#039;table.in_modal&#039;&#039; ({{code|modal_obj.main_comp_obj}}) toward the newly created {{code|table_obj}} (if applicable).&lt;br /&gt;
# Draw the table&#039;s in-line form. (Only the [[CuneiForm#General Form Head &amp;amp; Form Object|General Form Head]] and the fields are handled at this stage.)&lt;br /&gt;
# Draw the table&#039;s live search field (if applicable).&lt;br /&gt;
# Draw the table&#039;s button set (if applicable).&lt;br /&gt;
# Draw blank table header and body elements.&lt;br /&gt;
# Programmatically fill in the table header.&lt;br /&gt;
&lt;br /&gt;
==== Table Object Attributes ====&lt;br /&gt;
Below is the list of and notes on table object attributes: &lt;br /&gt;
* &#039;&#039;&#039;Basic Attributes&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;id&#039;&#039;&#039;: Takes on the value of {{code|table._id}}.&lt;br /&gt;
** &#039;&#039;&#039;self_type&#039;&#039;&#039;: Takes on value {{code|lang=javascript|&#039;table&#039;}}.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Copied Attributes&#039;&#039;&#039; (&#039;&#039;See [[#Notes on Keyword Arguments]] for details.)&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;cnames, colnames, colsizes, coltypes, editable, linkmode, modal_view, multi, perm_bit, populate_route, populate_suppress, pseudohides, searchable, seq, slim,&#039;&#039;&#039; and &#039;&#039;&#039;tbexpand&#039;&#039;&#039;: Takes on the exact value.&lt;br /&gt;
** &#039;&#039;&#039;csssizes&#039;&#039;&#039;: A list of reinterpretations of {{code|table.colsizes}} into the format ready to plug into CSS stylings. The sizes at this stage also takes into account the table block width, the table element width, and minimum column sizes.&lt;br /&gt;
** &#039;&#039;&#039;populate_id&#039;&#039;&#039;: Takes on the exact value, with all prefix {{code|#}} cut once event-binding is taken care of.&lt;br /&gt;
** &#039;&#039;&#039;in_modal&#039;&#039;&#039; and &#039;&#039;&#039;bound_modal&#039;&#039;&#039;: Point to the corresponding &#039;&#039;modal objects&#039;&#039; where applicable.&lt;br /&gt;
** &#039;&#039;&#039;intab&#039;&#039;&#039;: The id of the tab in which the {{code|lang=html|&amp;lt;table&amp;gt;}} element belongs.&lt;br /&gt;
** &#039;&#039;&#039;form&#039;&#039;&#039;: The id of the table&#039;s &#039;&#039;in-line form&#039;&#039; ({{code|table.form._id}}).&lt;br /&gt;
** &#039;&#039;&#039;fullform&#039;&#039;&#039;: The id of the table&#039;s &#039;&#039;full-form&#039;&#039; ({{code|table.fullform[3]._id}}) when applicable.&lt;br /&gt;
** &#039;&#039;&#039;choices&#039;&#039;&#039;: The value of {{code|table.choices}} with choices repacked as dict-type objects.&lt;br /&gt;
** &#039;&#039;&#039;radios&#039;&#039;&#039;: The value of {{code|table.radios}} with choices repacked as Map objects.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;References to DOM Elements &amp;amp; Objects&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;table_ele&#039;&#039;&#039;: Points to the corresponding {{code|lang=html|&amp;lt;table&amp;gt;}} DOM element.&lt;br /&gt;
** &#039;&#039;&#039;table_head_ele&#039;&#039;&#039;: Points to the corresponding {{code|lang=html|&amp;lt;thead&amp;gt;}} DOM element.&lt;br /&gt;
** &#039;&#039;&#039;table_body_ele&#039;&#039;&#039;: Points to the corresponding {{code|lang=html|&amp;lt;tbody&amp;gt;}} DOM element.&lt;br /&gt;
** &#039;&#039;&#039;progress_ele&#039;&#039;&#039;: Points to the corresponding progress bar {{code|lang=html|&amp;lt;div&amp;gt;}} element. &#039;&#039;This might have already been a relic of the past, but it is still around in case it is needed.&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;searchbox_ele&#039;&#039;&#039;: Where applicable, points to the corresponding live-search {{code|lang=html|&amp;lt;input&amp;gt;}} DOM element.&lt;br /&gt;
** &#039;&#039;&#039;haven&#039;&#039;&#039;: Points to the corresponding haven {{code|lang=html|&amp;lt;div&amp;gt;}} DOM element. The haven is where the row values live when they are switched out for in-line form fields, and where the form fields live when they are not active.&lt;br /&gt;
** &#039;&#039;&#039;btngrp_eles&#039;&#039;&#039;: An array of button-related elements for easy references. Its members are, in order:&lt;br /&gt;
**# &#039;&#039;&#039;Add&#039;&#039;&#039; {{code|lang=html|&amp;lt;button&amp;gt;}}&lt;br /&gt;
**# &#039;&#039;&#039;Copy&#039;&#039;&#039; {{code|lang=html|&amp;lt;button&amp;gt;}}&lt;br /&gt;
**# &#039;&#039;&#039;Edit&#039;&#039;&#039; {{code|lang=html|&amp;lt;button&amp;gt;}}&lt;br /&gt;
**# &#039;&#039;&#039;View&#039;&#039;&#039; {{code|lang=html|&amp;lt;button&amp;gt;}}&lt;br /&gt;
**# &#039;&#039;&#039;Expand&#039;&#039;&#039; {{code|lang=html|&amp;lt;button&amp;gt;}}&lt;br /&gt;
**# &#039;&#039;&#039;Delete&#039;&#039;&#039; {{code|lang=html|&amp;lt;button&amp;gt;}}&lt;br /&gt;
**# &#039;&#039;&#039;OK&#039;&#039;&#039; {{code|lang=html|&amp;lt;button&amp;gt;}}&lt;br /&gt;
**# &#039;&#039;&#039;Cancel&#039;&#039;&#039; {{code|lang=html|&amp;lt;button&amp;gt;}}&lt;br /&gt;
**# &#039;&#039;&#039;First Button Set&#039;&#039;&#039; {{code|lang=html|&amp;lt;div&amp;gt;}} which is the parent of member 1 through 6&lt;br /&gt;
**# &#039;&#039;&#039;Second Button Set&#039;&#039;&#039; {{code|lang=html|&amp;lt;div&amp;gt;}} which is the parent of member 7 through 8&lt;br /&gt;
** &#039;&#039;&#039;row_eles&#039;&#039;&#039;: An array of {{code|lang=html|&amp;lt;tr&amp;gt;}} elements for easy references.&lt;br /&gt;
** &#039;&#039;&#039;check_eles&#039;&#039;&#039;: An array of row-selection checkbox {{code|lang=html|&amp;lt;input&amp;gt;}} elements for each row. This attribute is only utilized in a table with multi-selection enabled.&lt;br /&gt;
** &#039;&#039;&#039;link_eles&#039;&#039;&#039;: An array of row link {{code|lang=html|&amp;lt;a&amp;gt;}} elements. This attribute is only utilized in a table whose &#039;&#039;&#039;linkmode&#039;&#039;&#039; is set.&lt;br /&gt;
** &#039;&#039;&#039;mirror_ids&#039;&#039;&#039;: An array of element ids whose x-position must be synced with this table. Use cases include the element holding the summation fields.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Status Attributes&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;progress_data&#039;&#039;&#039;: Human-readable loading status for the table. Localized strings for this element is stored in the variable {{code|tbloadstr}}.&lt;br /&gt;
** &#039;&#039;&#039;progress_num&#039;&#039;&#039;: The number of currently loaded rows.&lt;br /&gt;
** &#039;&#039;&#039;populating&#039;&#039;&#039;: Whether the table in undergoing a population cycle. This state attribute prevents other populating-based routines to run in conflict.&lt;br /&gt;
** &#039;&#039;&#039;press_down_from_head&#039;&#039;&#039;: Whether to dispatch an ArrowDown event to table head after the table finishes populating. This creates the select-first-item behaviour.&lt;br /&gt;
** &#039;&#039;&#039;addingrec&#039;&#039;&#039;: Whether the current edit operation is of add-type (&#039;&#039;add&#039;&#039; or &#039;&#039;copy&#039;&#039;).&lt;br /&gt;
** &#039;&#039;&#039;last_copy_id&#039;&#039;&#039;: The id of the latest copied entry. This value is used to re-copy a new entry once the current operation is done.&lt;br /&gt;
** &#039;&#039;&#039;current_edit_idx&#039;&#039;&#039;: The row index of the currently editing/adding entry.&lt;br /&gt;
** &#039;&#039;&#039;triggered&#039;&#039;&#039;: Whether the table is the triggered state. (Only triggered tables can have their forms triggered as well.)&lt;br /&gt;
** &#039;&#039;&#039;unlockform&#039;&#039;&#039;: Whether the table&#039;s form is triggered.&lt;br /&gt;
** &#039;&#039;&#039;prevent_rowesc&#039;&#039;&#039;: Whether the Escape key on the row is prevented. This flag prevents Escape event from propagating up from the in-line form fields to the table row itself. This attribute exists because {{code|lang=javascript|event.stopPropagation()}} fails to achieve the same effect in Firefox.&lt;br /&gt;
** &#039;&#039;&#039;total_row&#039;&#039;&#039;: Current row count of the table.&lt;br /&gt;
** &#039;&#039;&#039;max_rowidx&#039;&#039;&#039;: Max integer used in the naming of row elements. One might think that this number should be the same as &#039;&#039;&#039;total_row&#039;&#039;&#039;, but that assumption is wrong as soon as some rows disappear upon deletion. (The value is {{code|-1}} for a blank table.)&lt;br /&gt;
** &#039;&#039;&#039;counter_timeout&#039;&#039;&#039;: Timeout operation for hiding tb row counter. (The counter element slides into view when the mouse cursor is within the table&#039;s bound.)&lt;br /&gt;
** &#039;&#039;&#039;search_timeout&#039;&#039;&#039;: Timeout operation for the search operation via the search box. (The search is conducted 700ms after the search box value is last edited. This delay is enough to give the illusion of instancy while avoiding a lot of unnecessary operations.)&lt;br /&gt;
** &#039;&#039;&#039;Button Visibility Flags&#039;&#039;&#039;: Boolean flags dictating whether certain table buttons are rendered on the client-side. These attributes are interpreted from CuneiTable&#039;s own &#039;&#039;suppress_add&#039;&#039;, &#039;&#039;suppress_copy&#039;&#039;, &#039;&#039;modal_view&#039;&#039;, and &#039;&#039;perm_bit&#039;&#039;. There are 6 in total, namely &#039;&#039;&#039;addbtn_show&#039;&#039;&#039;, &#039;&#039;&#039;copybtn_show&#039;&#039;&#039;, &#039;&#039;&#039;editbtn_show&#039;&#039;&#039;, &#039;&#039;&#039;viewbtn_show&#039;&#039;&#039;, &#039;&#039;&#039;expbtn_show&#039;&#039;&#039;, &#039;&#039;&#039;delbtn_show&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Event Handlers&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;btngrp_handlers&#039;&#039;&#039;: The array of button click handler functions. Its members are, in order, the handlers for &#039;&#039;add&#039;&#039;, &#039;&#039;copy&#039;&#039;, &#039;&#039;edit&#039;&#039;, &#039;&#039;view&#039;&#039;, &#039;&#039;delete&#039;&#039;, &#039;&#039;ok&#039;&#039;, and &#039;&#039;cancel&#039;&#039;. Because these handlers either work with the table&#039;s selection routine or does not linked to any specific row at all, only one of each is needed.&lt;br /&gt;
** &#039;&#039;&#039;check_handlers&#039;&#039;&#039;: The array of select event handler for each table row.&lt;br /&gt;
** &#039;&#039;&#039;link_handlers&#039;&#039;&#039;: The array of link handler for each table row.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Table Data&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;data_raw&#039;&#039;&#039;: The raw data to be displayed in the table stored as an array or arrays. The values are those responded from the server and might not be ready in terms of human-readability, but they are great to work with programmatically.&lt;br /&gt;
** &#039;&#039;&#039;data&#039;&#039;&#039;: The &#039;&#039;&#039;data_raw&#039;&#039;&#039; in the displayed form.&lt;br /&gt;
** &#039;&#039;&#039;headrow_count&#039;&#039;&#039;: The number of row the table head has. The attribute defaults to {{code|1}}, but must be changed manually should any change is needed.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Additional Functions &amp;amp; Routines&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;post_load_cmds&#039;&#039;&#039; &#039;&#039;([function,] or {{code|lang=javascript|false}})&#039;&#039;: An array of functions to run at the end of a table-populating cycle.&lt;br /&gt;
** &#039;&#039;&#039;post_submit_cmds&#039;&#039;&#039; &#039;&#039;([function,] or {{code|lang=javascript|false}})&#039;&#039;: An array of functions to run at the end of a submission cycle.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Selection-related Attributes&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;last_select&#039;&#039;&#039; &#039;&#039;({{code|lang=javascript|[int, boolean]}}: defaults to {{code|lang=javascript|[-1, false]}})&#039;&#039;: An array of 2 members: the index of last select/deselect entries and its select/deselect state. This attribute is used to create the table&#039;s batch select/deselect behaviours (via {{key press|Shift|Click}}).&lt;br /&gt;
** &#039;&#039;&#039;selections&#039;&#039;&#039;: The array of selected row indices.&lt;br /&gt;
** &#039;&#039;&#039;selected_entries&#039;&#039;&#039;: Raw data of the tables selected entries as sent from the server (in array format). Data stored here is used, for example, by search modals to mediate the data to the requesting form.&lt;br /&gt;
** &#039;&#039;&#039;selection_trackers&#039;&#039;&#039;: The array of tracker forn field specifications. In its final form, each of its members is a 2-array: the first sub-member is the form field element itself, the second sub-member is the name of the tracked column (as appears in &#039;&#039;&#039;cnames&#039;&#039;&#039; attribute). &#039;&#039;(See [[CuneiForm|String &amp;amp; Text Area Fields]] for details on the form&#039;s side.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Form Expansion Modal ===&lt;br /&gt;
&lt;br /&gt;
This section only applies to CuneiTables with an expansion modal defined (see [[#In-line Form with Expansion]]).&lt;br /&gt;
&lt;br /&gt;
In short, this section includes the [[CuneiModal#Design &amp;amp; Pre-made Scripts|design of a CuneiModal]] with [[CuneiForm#CuneiForm Jinja2 Macro Pack|form fields]] inside. Note that the &#039;&#039;form head&#039;&#039; and &#039;&#039;form tail&#039;&#039; sections are handled by &#039;&#039;&#039;{{code|general_table_block}}&#039;&#039;&#039; and &#039;&#039;&#039;{{code|general_table_tail}}&#039;&#039;&#039; respectively and need not be repeated here.&lt;br /&gt;
&lt;br /&gt;
=== General Table Tail ===&lt;br /&gt;
&lt;br /&gt;
At this point, the {{code|table_obj}} and its corresponding {{code|form_obj}} have been initiated, all fields and relevant elements are created; this final macro is to finalize the table&#039;s attributes and link all the elements together into a coherent working system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;{{code|lang=javascript|1= general_form_tail(table, load_immediately=true, skip_fullform=false)}}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; ||&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; &#039;&#039;(CuneiTable)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;load_immediately&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Whether to send an immediate data request to the server.&lt;br /&gt;
** &#039;&#039;For search tables&#039;&#039;, the table element is nestled within its own search modal. Regardless of this argument, the table only sends data request when the module is invoked and dumps the data when the modal closes.&lt;br /&gt;
** &#039;&#039;For free-standing tables&#039;&#039;, this argument dictates whether the table sends a data request to the server on its own (once the page finishes loading). The argument should be set to {{code|lang=javascript|true}} except when the mass-populating routine (see [[Multi-component Page]]) is expected to send a collective request in the table&#039;s stead.&lt;br /&gt;
* &#039;&#039;&#039;skip_fullform&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Whether the full-form for the table is properly drawn and rendered (when applicable). This argument informs the element bindings of existing elements. It must reflect the same argument given to &#039;&#039;&#039;{{code|general_table_block}}&#039;&#039;&#039; earlier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The Working of General Table Tail ====&lt;br /&gt;
The workings of this macro can be thus summarized:&lt;br /&gt;
# &#039;&#039;&#039;Run the &#039;&#039;general_form_tail&#039;&#039; for the table&#039;s in-line form or full-form.&lt;br /&gt;
# &#039;&#039;&#039;Process the table&#039;s &#039;&#039;populate_id&#039;&#039; attribute&#039;&#039;&#039;&lt;br /&gt;
#* Interpret and repack each string value into a more easily usable format.&lt;br /&gt;
#* Where applicable, bind a &#039;&#039;change&#039;&#039; event to the referenced fields so that they trigger a form re-populating routine when changes are detected.&lt;br /&gt;
# &#039;&#039;&#039;Finalize &#039;&#039;References to DOM Elements &amp;amp; Objects&#039;&#039; attribute group and bind related events.&#039;&#039;&#039;&lt;br /&gt;
#* Bind events to show row counter element and outer glow to emphasize table&#039;s focus stage.&lt;br /&gt;
#* Add button icons to the table&#039;s button sets.&lt;br /&gt;
#* Bind keyboard shortcuts for the table&#039;s buttons.&lt;br /&gt;
# &#039;&#039;&#039;&#039;&#039;If the table is a search table&#039;&#039;, link the table&#039;s data load/unload behaviour to the corresponding search modal.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;&#039;&#039;Otherwise&#039;&#039;, link the table&#039;s data loading to the page&#039;s {{code|load}} event, unless prohibited via the argument {{code|load_immediately}}.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Mirror Table &amp;amp; Other Table Manipulations ===&lt;br /&gt;
&lt;br /&gt;
Tables prove to be one of the simplest way to arrange elements of the interface. This section deals with table-related macros and functions that look at a table as a page formatting tool.&lt;br /&gt;
&lt;br /&gt;
==== Mirror Table ====&lt;br /&gt;
&lt;br /&gt;
In cases where free standing elements need to be aligned with some columns of an existing CuneiTable, some of the easiest options starts with drawing another table with the same column sizing as the original one, or &#039;&#039;&#039;mirror tables&#039;&#039;&#039; in CuneiFox&#039;s term. A mirror table drawn using this macro:&lt;br /&gt;
* Has the same &#039;&#039;&#039;number of column&#039;&#039;&#039; as the referenced CuneiTable.&lt;br /&gt;
* Has each &#039;&#039;&#039;column&#039;s size&#039;&#039;&#039; synced with the referenced CuneiTable.&lt;br /&gt;
* Has the &#039;&#039;&#039;horizontal scroll position&#039;&#039;&#039; synced with the referenced CuneiTable.&lt;br /&gt;
* Has the ID &#039;&#039;&#039;{{code|lang=javascript|&#039;&amp;lt;id_of_ref_CuneiTable&amp;gt;_mirror&#039;}}&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Always has 1 blank header row&#039;&#039;&#039; to control the column sizing.&lt;br /&gt;
&lt;br /&gt;
To draw a mirror table, use the &#039;&#039;&#039;Jinja2 macro {{code|draw_mirror_table}}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
draw_mirror_table(table, block_width, content_width=false,&lt;br /&gt;
                  head_class=&amp;quot;dark&amp;quot;, head_bg=false, force_head_textwhite=false,&lt;br /&gt;
                  pad_bottom=false, slim=false, padx=&amp;quot;yes&amp;quot;, pady=&amp;quot;yes&amp;quot;,&lt;br /&gt;
                  row=1, head_row=0, border=false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; || &#039;&#039;&#039;DO NOT&#039;&#039;&#039; rely on argument order beyond &#039;&#039;table&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; &#039;&#039;(CuneiTable)&#039;&#039;: The CuneiTable object representing the original table.&lt;br /&gt;
* &#039;&#039;&#039;block_width&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The width of the table block. The value can be anything interpretable as CSS size.&lt;br /&gt;
* &#039;&#039;&#039;content_width&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The width of the mirror {{code|lang=html|&amp;lt;table&amp;gt;}} element (scrollable inside the table block). The value can be anything interpretable as CSS size. If not given, CuneiFox automatically assigns the same value as block_width.&lt;br /&gt;
* &#039;&#039;&#039;head_class&#039;&#039;&#039; and &#039;&#039;&#039;head_bg&#039;&#039;&#039; take the formats of &#039;&#039;class&#039;&#039; and &#039;&#039;custom_color&#039;&#039; arguments of CuneiForm&#039;s &#039;&#039;&#039;[[CuneiForm#Buttons_&amp;amp;_Submits|render_btn]]&#039;&#039;&#039; respectively. They dictates the colour of the header of the mirror table. Note that, if both are given, &#039;&#039;&#039;head_bg&#039;&#039;&#039; takes precedence.&lt;br /&gt;
* &#039;&#039;&#039;force_head_textwhite&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Forces the table header text to be coloured white. &#039;&#039;(This argument is only effective when &#039;&#039;&#039;head_class&#039;&#039;&#039; is. When using &#039;&#039;&#039;head_bg&#039;&#039;&#039;, the header text colour is controlled by {{code|head_bg[1]}}.)&lt;br /&gt;
* &#039;&#039;&#039;pad_bottom&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Whether to add a {{code|lang=css|mb-3}}bottom margin to the mirror table block.&lt;br /&gt;
* &#039;&#039;&#039;slim&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Whether to add inner padding to each cell. &#039;&#039;(This forces any form field put in the cell to assume the size of a slim form field.)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;padx&#039;&#039;&#039; and &#039;&#039;&#039;pady&#039;&#039;&#039; &#039;&#039;({{code|lang=javascript|false}} or str)&#039;&#039;: The horizontal and vertical inner padding of each cell. These 2 arguments are only active when &#039;&#039;&#039;slim&#039;&#039;&#039; is {{code|lang=javascript|false}} and default to {{code|lang=javascript|&#039;0.1rem&#039;}} if not explicitly provided.&lt;br /&gt;
* &#039;&#039;&#039;row&#039;&#039;&#039; &#039;&#039;(int)&#039;&#039;: The row count of the mirror table&#039;s body ({{code|lang=html|&amp;lt;tr&amp;gt;}} with {{code|lang=html|&amp;lt;td&amp;gt;}} children) to be created.&lt;br /&gt;
* &#039;&#039;&#039;head_row&#039;&#039;&#039; &#039;&#039;(int)&#039;&#039;: The row count of the mirror table&#039;s header ({{code|lang=html|&amp;lt;tr&amp;gt;}} with {{code|lang=html|&amp;lt;th&amp;gt;}} children) to be created.&lt;br /&gt;
* &#039;&#039;&#039;border&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Whether to draw the mirror table as bordered. &#039;&#039;(Up to this point in time, bordered table has been useful during iteration and debugging, but has not been used on any finished page.)&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Blank Table ====&lt;br /&gt;
&lt;br /&gt;
In more general cases, the table used in page formatting does not need to resemble an existing CuneiTable in any way. In such cases, a simple table can be drawn using the &#039;&#039;&#039;Jinja2 macro {{code|blank_table}}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
blank_table(table_name, block_width=&amp;quot;100%&amp;quot;,&lt;br /&gt;
            row=1, col=12, padx=&amp;quot;yes&amp;quot;, pady=&amp;quot;yes&amp;quot;,&lt;br /&gt;
            cell_height=false, border=false)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; || &#039;&#039;&#039;DO NOT&#039;&#039;&#039; rely on argument order beyond &#039;&#039;table_name&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;block_width&#039;&#039;&#039;, &#039;&#039;&#039;row&#039;&#039;&#039;, &#039;&#039;&#039;padx&#039;&#039;&#039;, &#039;&#039;&#039;pady&#039;&#039;&#039;, &#039;&#039;&#039;border&#039;&#039;&#039;: &#039;&#039;(Refer to [[CuneiTable#Mirror Table|Mirror Table]].)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;table_name&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The ID of the new table to be created.&lt;br /&gt;
* &#039;&#039;&#039;col&#039;&#039;&#039; &#039;&#039;(int)&#039;&#039;: The column count of the new table.&lt;br /&gt;
* &#039;&#039;&#039;cell_height&#039;&#039;&#039; &#039;&#039;({{code|lang=javascript|false}} or str)&#039;&#039;: The height of each cell. This value can be any string interpretable as CSS size.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Inserting Pre-drawn Elements into a Table ====&lt;br /&gt;
&lt;br /&gt;
Now that we have our blank table, we can move pre-drawn elements into it. We will start with a more specific use case of insert form fields (and their corresponding labels) into a blank table via the &#039;&#039;&#039;JavaScript function {{code|stuff_form_to_tb}}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;html+javascript&amp;quot;&amp;gt;&lt;br /&gt;
stuff_form_to_tb(form_name, table_name, stuff_arrays, is_mirror=&amp;quot;auto&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; ||&lt;br /&gt;
* &#039;&#039;&#039;form_name&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The ID of the CuneiForm which the fields belong to.&lt;br /&gt;
* &#039;&#039;&#039;table_name&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The ID of the blank table to house the form fields.&lt;br /&gt;
* &#039;&#039;&#039;stuff_arrays&#039;&#039;&#039;: The table insert specification array. Each member of the array is an array itself. Each member array has 3 or more sub-members, in order:&lt;br /&gt;
** &#039;&#039;field_name (str)&#039;&#039;: The name of the field to place in the table.&lt;br /&gt;
** &#039;&#039;target_row (int)&#039;&#039;: The row of the target cell.&lt;br /&gt;
** &#039;&#039;target_col (int)&#039;&#039;: The column of the target cell.&lt;br /&gt;
** &#039;&#039;label_target_row (int: optional)&#039;&#039;: The row of the target cell (for field label).&lt;br /&gt;
** &#039;&#039;label_target_col (int: optional)&#039;&#039;: The column of the target cell (for field label).&lt;br /&gt;
* &#039;&#039;&#039;is_mirror&#039;&#039;&#039; &#039;&#039;({{code|lang=javascript|&#039;auto&#039;}} or bool)&#039;&#039;: Whether the target table is a mirror table. If the argument is set to {{code|lang=javascript|&#039;auto&#039;}}, the function shall infer the correct value from the target table&#039;s ID. &#039;&#039;(This affects the way table rows are referenced in the function.)&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Example from Accounting Journal page (2 sum fields under the journal table.)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;div class=&amp;quot;row justify-content-center pt-2&amp;quot;&amp;gt;&lt;br /&gt;
    {{ CuneiTables.general_table_block(vouch_tb, block_width=&amp;quot;84vw&amp;quot;, ...) }}&lt;br /&gt;
    {{ CuneiTables.general_table_tail(vouch_tb, false) }}&lt;br /&gt;
    &amp;lt;div class=&amp;quot;w-100&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;d-none&amp;quot;&amp;gt;&lt;br /&gt;
        // First, draw form fields in a hidden block.&lt;br /&gt;
        {{ CuneiForms.general_form_head(vouchsum_form) }}&lt;br /&gt;
        {{ CuneiForms.render_blank(vouchsum_form, vouchsum_form.drsum, headless=true) }}&lt;br /&gt;
        {{ CuneiForms.render_blank(vouchsum_form, vouchsum_form.crsum, headless=true) }}&lt;br /&gt;
        {{ CuneiForms.general_form_tail(vouchsum_form, populate=false) }}&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    {{ CuneiTables.draw_mirror_table(vouch_tb, block_width=&amp;quot;84vw&amp;quot;, ...) }}&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        stuff_form_to_tb(&amp;quot;{{ vouchsum_form._id }}&amp;quot;, &amp;quot;{{ vouch_tb._id }}_mirror&amp;quot;,&lt;br /&gt;
                          [[&amp;quot;drsum&amp;quot;, 0, 2], [&amp;quot;crsum&amp;quot;, 0, 3]]);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While stuffing form fields and their labels into a blank table might constitute the majority of use cases, there are instances where other types of elements need to be inserted into a table. For these more general cases, we can utilize the &#039;&#039;&#039;Javascript function {{code|stuff_stuff_to_tb}}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
stuff_stuff_to_tb(stuff_ele, tb_ele, rc_array, innerOnly=false, is_mirror=&amp;quot;auto&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; ||&lt;br /&gt;
* &#039;&#039;&#039;stuff_ele&#039;&#039;&#039; &#039;&#039;(str or HTML element)&#039;&#039;: The text or element to be inserted into a table cell.&lt;br /&gt;
* &#039;&#039;&#039;tb_ele&#039;&#039;&#039; &#039;&#039;(HTML element)&#039;&#039;: The {{code|lang=html|&amp;lt;table&amp;gt;}} element.&lt;br /&gt;
* &#039;&#039;&#039;rc_array&#039;&#039;&#039; &#039;&#039;([int, int])&#039;&#039;: The &#039;&#039;&#039;row&#039;&#039;&#039; and &#039;&#039;&#039;column&#039;&#039;&#039; indices of the desired cell respectively.&lt;br /&gt;
* &#039;&#039;&#039;innerOnly&#039;&#039;&#039; &#039;&#039;(bool)&#039;&#039;: Determine the type of object to be placed in the table.&lt;br /&gt;
** If set to {{code|lang=javascript|true}}, only the {{code|lang=javascript|innerHTML}} of the element is copied into the table.&lt;br /&gt;
** If set to {{code|lang=javascript|false}}, the whole element is moved into the table.&lt;br /&gt;
* &#039;&#039;&#039;is_mirror&#039;&#039;&#039; &#039;&#039;({{code|lang=javascript|&#039;auto&#039;}} or bool)&#039;&#039;: Whether the target table is a mirror table. If the argument is set to {{code|lang=javascript|&#039;auto&#039;}}, the function shall infer the correct value from the target table&#039;s ID. &#039;&#039;(This affects the way table rows are referenced in the function.)&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Cell Merging ====&lt;br /&gt;
&lt;br /&gt;
To facilitate cell merging and to preserve CuneiFox style column sizing of the whole table, it is recommended that developers use the &#039;&#039;&#039;JavaScript function {{code|merge_cell}}&#039;&#039;&#039; to perform cell merging, especially in CuneiTable-type tables and mirror tables.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
merge_cell(table_name, merge_arrays, is_mirror=&amp;quot;auto&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; ||&lt;br /&gt;
* &#039;&#039;&#039;table_name&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The ID of the table on which to perform merging.&lt;br /&gt;
* &#039;&#039;&#039;merge_arrays&#039;&#039;&#039;: The cell merging specification array. Each member is a 4-membered array. The sub-members are, in order:&lt;br /&gt;
** &#039;&#039;start_row (int)&#039;&#039;: The row index of the top-left cell.&lt;br /&gt;
** &#039;&#039;start_col (int)&#039;&#039;: The column index of the top-left cell.&lt;br /&gt;
** &#039;&#039;row_span (int)&#039;&#039;: The number of row to merge (inclusive).&lt;br /&gt;
** &#039;&#039;col_span (int)&#039;&#039;: The number of col to merge (inclusive).&lt;br /&gt;
* &#039;&#039;&#039;is_mirror&#039;&#039;&#039; &#039;&#039;({{code|lang=javascript|&#039;auto&#039;}} or bool)&#039;&#039;: Whether the target table is a mirror table. If the argument is set to {{code|lang=javascript|&#039;auto&#039;}}, the function shall infer the correct value from the target table&#039;s ID. &#039;&#039;(This affects the way table rows are referenced in the function.)&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039; || It is highly recommended that &#039;&#039;&#039;merge_arrays&#039;&#039;&#039; be ordered right-to-left and bottom-to-top to prevent unexpected merge behaviours or uncaught errors.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Changing Cell Style ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;JavaScript function {{code|change_cell_style}}&#039;&#039;&#039; helps developers in changing the {{code|lang=html|style}} attribute of a table&#039;s cells quickly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
change_cell_style(table_name, prop_arrays, is_mirror=&amp;quot;auto&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:120px;&amp;quot; | &#039;&#039;&#039;Parameters&#039;&#039;&#039; ||&lt;br /&gt;
* &#039;&#039;&#039;table_name&#039;&#039;&#039; &#039;&#039;(str)&#039;&#039;: The ID of the table on which to perform style changes.&lt;br /&gt;
* &#039;&#039;&#039;prop_arrays&#039;&#039;&#039;: The style specification array. Each member is a 3-membered array. The sub-members are, in order:&lt;br /&gt;
** &#039;&#039;row_index (int)&#039;&#039;: The row index of the desired cell.&lt;br /&gt;
** &#039;&#039;col_index (int)&#039;&#039;: The column index of the desired cell.&lt;br /&gt;
** &#039;&#039;style_array&#039;&#039;: The array of property-value couple. Each pair is formatted as an array of 2 strings.&lt;br /&gt;
* &#039;&#039;&#039;is_mirror&#039;&#039;&#039; &#039;&#039;({{code|lang=javascript|&#039;auto&#039;}} or bool)&#039;&#039;: Whether the target table is a mirror table. If the argument is set to {{code|lang=javascript|&#039;auto&#039;}}, the function shall infer the correct value from the target table&#039;s ID. &#039;&#039;(This affects the way table rows are referenced in the function.)&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
By using all the discussed functions in combination, complex placements can be achieved. Let&#039;s take the lower portion of the &#039;&#039;Product Return Records&#039;&#039; page as an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Let&#039;s examine our need regarding the lower section of the page first:&lt;br /&gt;
* The 5 rightmost fields to be synced with the rightmost column of the table.&lt;br /&gt;
* Other elements can be more arbitrary, but an arrangement with 5 rows seems reasonable enough.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;[[ไฟล์:Cuneifox iv ret vouch page.png|720px|thumb|center|alt=&#039;&#039;Product Return Records&#039;&#039; page|&#039;&#039;Product Return Records&#039;&#039; page]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;Create 3 blank tables: &#039;&#039;&#039;Green&#039;&#039;&#039; &#039;&#039;mirror&#039;&#039; table, &#039;&#039;&#039;Red&#039;&#039;&#039; blank 5x1 table, and &#039;&#039;&#039;Orange&#039;&#039;&#039; blank 5x12 table&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Insert the 5 fields to be synced into the &#039;&#039;&#039;Red&#039;&#039;&#039; table. The rest of the elements go into the &#039;&#039;&#039;Orange&#039;&#039;&#039; table.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Put the &#039;&#039;&#039;Red&#039;&#039;&#039; table in the rightmost cell of the &#039;&#039;&#039;Green&#039;&#039;&#039; table. Now we have achieved the first item in (1).&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Put the &#039;&#039;&#039;Orange&#039;&#039;&#039; table in the leftmost cell of the &#039;&#039;&#039;Green&#039;&#039;&#039; table. Then, merge all the cells, except the rightmost one, to get the arbitrary area that we can work with.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;[[ไฟล์:Table formatting 1.png|720px|thumb|center|alt=Example of table formatting: Pre-merge|Example of table formatting: Pre-merge]]&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;[[ไฟล์:Table formatting 2.png|720px|thumb|center|alt=Example of table formatting: Merged #1|Example of table formatting: Merged #1]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;Merge several cells of the &#039;&#039;&#039;Orange&#039;&#039;&#039; table as shown.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;[[ไฟล์:Table formatting 3.png|720px|thumb|center|alt=Example of table formatting: Merged #2|Example of table formatting: Merged #2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;Apply some stylings to certain cells.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;[[ไฟล์:Table formatting 4.png|720px|thumb|center|alt=Example of table formatting: Cell styling|Example of table formatting: Cell styling]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;Turn off table border for the finished look.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;[[ไฟล์:Table formatting 5.png|720px|thumb|center|alt=Example of table formatting: Finished|Example of table formatting: Finished]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The final Jinja2 template for this particular example is as follows:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;div class=&amp;quot;d-none&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;strong id=&amp;quot;oldvat_label&amp;quot;&amp;gt;Ref. Doc. Values&amp;lt;/strong&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Draw the ORANGE table and the RED table respectively. --&amp;gt;&lt;br /&gt;
    {{ CuneiTables.blank_table(&amp;quot;LowerFormFrameTb&amp;quot;, row=5, border=false,&lt;br /&gt;
                               padx=false, pady=false, cell_height=&amp;quot;2.15rem&amp;quot;) }}&lt;br /&gt;
    {{ CuneiTables.blank_table(&amp;quot;LowerFormFrameTb2&amp;quot;, row=5, border=false, col=1,&lt;br /&gt;
                               padx=false, pady=false, cell_height=&amp;quot;2.15rem&amp;quot;) }}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Draw the lower form and its fields --&amp;gt;&lt;br /&gt;
    {{ CuneiForms.general_form_head(lower_form) }}&lt;br /&gt;
    &amp;lt;!-- Draw all lower form fields here. --&amp;gt;&lt;br /&gt;
    {{ CuneiForms.general_form_tail(lower_form, populate=false) }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- The GREEN table is a mirror table. --&amp;gt;&lt;br /&gt;
{{ CuneiTables.draw_mirror_table(body_tb, row=1, border=false, block_width=&amp;quot;85vw&amp;quot;,&lt;br /&gt;
                                 slim=true, padx=&amp;quot;0rem&amp;quot;, pady=&amp;quot;0rem&amp;quot;) }}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    // Place fields and labels in the ORANGE table.&lt;br /&gt;
    stuff_form_to_tb(&amp;quot;LowerForm&amp;quot;, &amp;quot;LowerFormFrameTb&amp;quot;,&lt;br /&gt;
                        [[&amp;quot;amt_predisc&amp;quot;, -1, -1, 0, 10], [&amp;quot;trddis_note&amp;quot;, 1, 10],&lt;br /&gt;
                         [&amp;quot;cshdis_note&amp;quot;, 2, 10], [&amp;quot;vatrate&amp;quot;, 3, 11, 3, 10],&lt;br /&gt;
                         [&amp;quot;remark&amp;quot;, 1, 0, 0, 0], [&amp;quot;orig_prevat&amp;quot;, 2, 7, 1, 7],&lt;br /&gt;
                         [&amp;quot;orig_vat&amp;quot;, 4, 7, 3, 7], [&amp;quot;net_total&amp;quot;, -1, -1, 4, 10]]);&lt;br /&gt;
    // Place the extra label in the ORANGE table.&lt;br /&gt;
    stuff_stuff_to_tb(document.getElementById(&amp;quot;oldvat_label&amp;quot;),&lt;br /&gt;
                      document.getElementById(&amp;quot;LowerFormFrameTb&amp;quot;),&lt;br /&gt;
                      [0,7]);&lt;br /&gt;
    // Place fields in the RED table.&lt;br /&gt;
    stuff_form_to_tb(&amp;quot;LowerForm&amp;quot;, &amp;quot;LowerFormFrameTb2&amp;quot;,&lt;br /&gt;
                        [[&amp;quot;amt_predisc&amp;quot;, 0, 0], [&amp;quot;trddis&amp;quot;, 1, 0], [&amp;quot;cshdis&amp;quot;, 2, 0],&lt;br /&gt;
                         [&amp;quot;vatamt&amp;quot;, 3, 0], [&amp;quot;net_total&amp;quot;, 4, 0]]);&lt;br /&gt;
    // Place the ORANGE table in the GREEN table.&lt;br /&gt;
    stuff_stuff_to_tb(document.getElementById(&amp;quot;LowerFormFrameTb&amp;quot;),&lt;br /&gt;
                      document.getElementById(&amp;quot;BodyTable_mirror&amp;quot;),&lt;br /&gt;
                      [0,0]);&lt;br /&gt;
    // Place the RED table in the GREEN table.&lt;br /&gt;
    stuff_stuff_to_tb(document.getElementById(&amp;quot;LowerFormFrameTb2&amp;quot;),&lt;br /&gt;
                      document.getElementById(&amp;quot;BodyTable_mirror&amp;quot;),&lt;br /&gt;
                      [0,6]);&lt;br /&gt;
    // Change cell styles of the ORANGE table.&lt;br /&gt;
    change_cell_style(&amp;quot;LowerFormFrameTb&amp;quot;,&lt;br /&gt;
                        [[0, 7, [[&amp;quot;border&amp;quot;, &amp;quot;1px solid var(--dark)&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;borderStyle&amp;quot;, &amp;quot;solid solid none solid&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingTop&amp;quot;, &amp;quot;0.3rem&amp;quot;]]],&lt;br /&gt;
                         [1, 7, [[&amp;quot;border&amp;quot;, &amp;quot;1px solid var(--dark)&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;borderStyle&amp;quot;, &amp;quot;none solid none solid&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingTop&amp;quot;, &amp;quot;0.3rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingLeft&amp;quot;, &amp;quot;1.5rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;textAlign&amp;quot;, &amp;quot;left&amp;quot;]]],&lt;br /&gt;
                         [2, 7, [[&amp;quot;border&amp;quot;, &amp;quot;1px solid var(--dark)&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;borderStyle&amp;quot;, &amp;quot;none solid none solid&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingLeft&amp;quot;, &amp;quot;0.7rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingRight&amp;quot;, &amp;quot;0.7rem&amp;quot;]]],&lt;br /&gt;
                         [3, 7, [[&amp;quot;border&amp;quot;, &amp;quot;1px solid var(--dark)&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;borderStyle&amp;quot;, &amp;quot;none solid none solid&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingTop&amp;quot;, &amp;quot;0.3rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingLeft&amp;quot;, &amp;quot;1.5rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;textAlign&amp;quot;, &amp;quot;left&amp;quot;]]],&lt;br /&gt;
                         [4, 7, [[&amp;quot;border&amp;quot;, &amp;quot;1px solid var(--dark)&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;borderStyle&amp;quot;, &amp;quot;none solid solid solid&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingLeft&amp;quot;, &amp;quot;0.7rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingRight&amp;quot;, &amp;quot;0.7rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingBottom&amp;quot;, &amp;quot;0.7rem&amp;quot;]]],&lt;br /&gt;
                         [0, 10,[[&amp;quot;paddingTop&amp;quot;, &amp;quot;0.3rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingLeft&amp;quot;, &amp;quot;1rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;textAlign&amp;quot;, &amp;quot;left&amp;quot;]]],&lt;br /&gt;
                         [2, 10,[[&amp;quot;paddingBottom&amp;quot;, &amp;quot;0.3rem&amp;quot;]]],&lt;br /&gt;
                         [0, 0, [[&amp;quot;paddingRight&amp;quot;, &amp;quot;2rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingLeft&amp;quot;, &amp;quot;1rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;textAlign&amp;quot;, &amp;quot;left&amp;quot;]]],&lt;br /&gt;
                         [1, 0, [[&amp;quot;paddingRight&amp;quot;, &amp;quot;1rem&amp;quot;]]],&lt;br /&gt;
                         [3, 10,[[&amp;quot;paddingTop&amp;quot;, &amp;quot;0.3rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingLeft&amp;quot;, &amp;quot;1rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;textAlign&amp;quot;, &amp;quot;left&amp;quot;]]],&lt;br /&gt;
                         [4, 10,[[&amp;quot;paddingTop&amp;quot;, &amp;quot;0.3rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;paddingLeft&amp;quot;, &amp;quot;1rem&amp;quot;],&lt;br /&gt;
                                 [&amp;quot;textAlign&amp;quot;, &amp;quot;left&amp;quot;]]], ])&lt;br /&gt;
    // Change cell styles of the RED table.&lt;br /&gt;
    change_cell_style(&amp;quot;LowerFormFrameTb2&amp;quot;,&lt;br /&gt;
                        [[0, 0, [[&amp;quot;paddingTop&amp;quot;, &amp;quot;0.3rem&amp;quot;]]],&lt;br /&gt;
                         [2, 0, [[&amp;quot;paddingBottom&amp;quot;, &amp;quot;0.3rem&amp;quot;]]],&lt;br /&gt;
                         [4, 0, [[&amp;quot;paddingBottom&amp;quot;, &amp;quot;0.7rem&amp;quot;]]], ])&lt;br /&gt;
    // Merge cells in the GREEN table.&lt;br /&gt;
    merge_cell(&amp;quot;BodyTable_mirror&amp;quot;, [[0, 0, 6, 1]]);&lt;br /&gt;
    // Merge cells in the ORANGE table.&lt;br /&gt;
    merge_cell(&amp;quot;LowerFormFrameTb&amp;quot;,&lt;br /&gt;
                        [[0, 10, 2, 1], [1, 10, 2, 1], [2, 10, 2, 1], [4, 10, 2, 1],&lt;br /&gt;
                         [0, 4, 2, 1], [0, 7, 2, 1], [1, 7, 2, 1], [2, 7, 2, 1],&lt;br /&gt;
                         [3, 7, 2, 1], [4, 7, 2, 1], [1, 0, 7, 4], ]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notable Sub-routines ==&lt;br /&gt;
This section aims to give a little insight into some CuneiTable&#039;s notable sub-routines. &lt;br /&gt;
&lt;br /&gt;
=== Live Search ===&lt;br /&gt;
Live search is among the most welcomed feature of CuneiTable. Its inner working is not too complicated, relying mainly on a brute-force approach.&lt;br /&gt;
&lt;br /&gt;
==== The Illusion of &amp;quot;Live&amp;quot; Search ====&lt;br /&gt;
Being quite resource- and time-intensive, there is a need to avoid unnecessary live-search sequences. At the time of writing, CuneiTable achieves this by putting a &#039;&#039;&#039;700ms delay&#039;&#039;&#039; between the most recent keystroke (in the table&#039;s search box) and the actual searching. This delay is likely here to stay, but the length of the time is subject to adjustment.&lt;br /&gt;
&lt;br /&gt;
==== Keyword Handling ====&lt;br /&gt;
At the time of writing, CuneiTable&#039;s live search handles keywords in the following manner:&lt;br /&gt;
* Unless enclosed within a pair of &#039;&#039;&#039;double-quotation marks (&amp;quot;)&#039;&#039;&#039;, strings separated by &#039;&#039;&#039;Spaces&#039;&#039;&#039; are treated as multiple keywords.&lt;br /&gt;
* Keywords are case-insensitive.&lt;br /&gt;
* Valid live search results are entries that contain &#039;&#039;&#039;all keywords&#039;&#039;&#039; within their &#039;&#039;&#039;visible columns&#039;&#039;&#039;, but not necessarily in any single column.&lt;br /&gt;
* Values in columns typed as {{code|int}}, {{code|acc}}, {{code|qty}}, {{code|amt}}, or {{code|pct}} are searched in their unformatted forms.&lt;br /&gt;
* &#039;&#039;(This stems from CuneiTable&#039;s lookup method)&#039;&#039; One leading space in a keyword can also be interpreted as &#039;&#039;&#039;starting-with&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;(This stems from CuneiTable&#039;s lookup method)&#039;&#039; One trailing space in a keyword can also be interpreted as &#039;&#039;&#039;ending-with&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Selection &amp;amp; Table Tracking ===&lt;br /&gt;
&lt;br /&gt;
==== As a Part of Search-and-fill Routine ====&lt;br /&gt;
During the search-and-fill routine, a CuneiTable&#039;s role is as follows:&lt;br /&gt;
# The search table population routine is triggered when the corresponding search modal is explicitly triggered or when the &#039;&#039;quick-search&#039;&#039; routine fails to retrieve exactly one entry. The search modal (a [[CuneiModal]]) is shown as a part of the table population process.&lt;br /&gt;
# The user makes the desired selection. &#039;&#039;(See the dedicated [[#Selection]] sub-section below for details.)&#039;&#039;&lt;br /&gt;
# Upon confirmation (via {{key press|Enter}} or the modal&#039;s button), the search table requests the full result from the server using the {{code|lang=javascript|&#039;sel&#039;}} fetch mode. &#039;&#039;(The table itself only holds values of the columns defined in the [[#Define|table&#039;s class]]. The full result, on the other hand, holds full information of the selected entries.)&#039;&#039;&lt;br /&gt;
# The table stores the full result in the its &#039;&#039;&#039;selected_entries&#039;&#039;&#039; attribute, then hands the control of the sequence to its modal.&lt;br /&gt;
&lt;br /&gt;
==== Selection ====&lt;br /&gt;
CuneiTables remember their selection states by storing &#039;&#039;&#039;row indices&#039;&#039;&#039; of the selected entries within their &#039;&#039;&#039;selections&#039;&#039;&#039; attribute. The list below details some notable behaviours:&lt;br /&gt;
* &#039;&#039;&#039;For single-selection tables:&#039;&#039;&#039;&lt;br /&gt;
** Navigating to an entry (via keyboard or mouse click) automatically implies its selection.&lt;br /&gt;
** The record counter shows the index of the selected entry.&lt;br /&gt;
* &#039;&#039;&#039;For multi-selection tables:&#039;&#039;&#039;&lt;br /&gt;
** Navigating to an entry via keyboard &#039;&#039;&#039;DOES NOT&#039;&#039;&#039; automatically select the entry.&lt;br /&gt;
** Clicking on an unselected entry selects it, and clicking on a selected entry deselects it.&lt;br /&gt;
** The record counter shows the number of entries being selected.&lt;br /&gt;
** It is possible to select/deselect consecutive entries. Note that this feature only works with entries actively shown (not hidden by live search). To select/deselect consecutive entries:&lt;br /&gt;
**# Click the topmost/bottommost entry to select/deselect.&lt;br /&gt;
**# Click the bottommost/topmost entry while holding {{key press|Shift}}.&lt;br /&gt;
&lt;br /&gt;
==== Table Tracking ====&lt;br /&gt;
&lt;br /&gt;
Table tracking can be seen as a fast-and-loose version of the search-and-fill routine. While forms that employ search-and-fill have access to the full entries re-retrieved from the server once the selections are confirmed, forms with table-tracking fields only have the data immediately in the table. This eliminates the need of additional requests and creates more streamlined user-experience, at the expense of up-to-date results.&lt;br /&gt;
&lt;br /&gt;
=== In-line Editing ===&lt;br /&gt;
&lt;br /&gt;
==== Form Activation ====&lt;br /&gt;
In CuneiFox, adding/editing a table entry triggers the following sequence:&lt;br /&gt;
# &#039;&#039;&#039;For add-type operations:&#039;&#039;&#039; Create a new blank row to accomodate the new entry.&lt;br /&gt;
#* If the table uses an in-line form, make a request to the server for the default value, and push that value set into &#039;&#039;&#039;data_raw&#039;&#039;&#039; attribute for now.&lt;br /&gt;
#* If the table employs a full-form, prepare the value to populate the {{code|id}} field of the form. This value is fed to the form via the function {{code|activate_tbform}} &#039;&#039;(Step 3)&#039;&#039;.&lt;br /&gt;
# Switch the table&#039;s button set from the standard &#039;&#039;&#039;&amp;quot;add-edit-delete&amp;quot;&#039;&#039;&#039; set to show the &#039;&#039;&#039;&amp;quot;OK-cancel&amp;quot;&#039;&#039;&#039; set instead.&lt;br /&gt;
# Trigger the editable state of the form.&lt;br /&gt;
# Activate the table&#039;s form.&lt;br /&gt;
#* For a table with an in-line form, populate the form with the proper data set from &#039;&#039;&#039;data_raw&#039;&#039;&#039;. Then, switch out the cell texts with form fields hidden in the table&#039;s &#039;&#039;&#039;haven&#039;&#039;&#039; element.&lt;br /&gt;
#* For a table with a full-form, fill the form&#039;s {{code|id}} field with proper value, trigger a change event on said field, then show the modal. Different values imply different operation as detailed below:&lt;br /&gt;
#** &#039;&#039;&#039;A blank string&#039;&#039;&#039; implies a totally new entry.&lt;br /&gt;
#** &#039;&#039;&#039;A positive integer&#039;&#039;&#039; implies an edit/delete operation on the entry with this ID.&lt;br /&gt;
#** &#039;&#039;&#039;A negative integer&#039;&#039;&#039; implies a copy operation on the entry whose ID is the positive value of this integer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; A delete operation follows roughly the same procedure, however, with cell-content switching (for in-line forms) and full-form modal showing (for full-forms) skipped. The delete prompt is immediately shown right after the listed steps are completed.&lt;br /&gt;
&lt;br /&gt;
==== Form Deactivation ====&lt;br /&gt;
Once the add/edit/delete operation is submitted or cancelled, the sequence detailed below is triggered.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;For successful operations:&#039;&#039;&#039; Commit the change to the CuneiTable.&lt;br /&gt;
#* For add/edit operations: Replace the cell texts (currently residing in the &#039;&#039;&#039;haven&#039;&#039;&#039; element) with the final values as confirmed by the server via &#039;&#039;&#039;{{code|data.entry}}&#039;&#039;&#039;. &#039;&#039;(See [[CuneiForm#Non-redirecting Form|Submission of Non-redirecting Form]] for details.)&#039;&#039;&lt;br /&gt;
#* For delete operations: Delete the coresponding row from the CuneiTable.&lt;br /&gt;
# Switch the table&#039;s buttons back to show the standard &#039;&#039;&#039;&amp;quot;add-edit-delete&amp;quot;&#039;&#039;&#039; set.&lt;br /&gt;
# &#039;&#039;&#039;For tables in link-mode:&#039;&#039;&#039; Reprocess and rebind the link destination of a row.&lt;br /&gt;
# Untrigger the form back to its disabled state.&lt;br /&gt;
# Clear all search modals related to the form to prevent search result retention.&lt;br /&gt;
# &#039;&#039;&#039;For a table using an in-line form:&#039;&#039;&#039; Switch out the form fields with the cell texts hidden in the table&#039;s &#039;&#039;&#039;haven&#039;&#039;&#039; element.&lt;br /&gt;
&lt;br /&gt;
== Useful Server-side Patterns ==&lt;br /&gt;
&lt;br /&gt;
=== Simple Search Table ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;python&#039; line=1&amp;gt;&lt;br /&gt;
@blueprint_name.route(&amp;quot;&amp;lt;submit_path&amp;gt;&amp;quot;, methods=[&amp;quot;POST&amp;quot;])&lt;br /&gt;
def function_name(table=None, prefix=&amp;quot;ChqSchTable&amp;quot;, *kwargs):&lt;br /&gt;
    if table is None:&lt;br /&gt;
        req_prefix = request.args.get(&amp;quot;prefix&amp;quot;, None)&lt;br /&gt;
        prefix = prefix if req_prefix is None else req_prefix&lt;br /&gt;
        table = TableClass(prefix=prefix, searchable=True, editable=False)&lt;br /&gt;
    identifier = json.loads(request.form.get(&amp;quot;sel_iden&amp;quot; if request.form.get(&amp;quot;mode&amp;quot;)==&amp;quot;sel&amp;quot; \&lt;br /&gt;
                                             else &amp;quot;identifier&amp;quot;))&lt;br /&gt;
    # Extract variables and parameters from identifier and/or request.&lt;br /&gt;
    # ...&lt;br /&gt;
    # ...&lt;br /&gt;
    if request.form.get(&amp;quot;mode&amp;quot;) == &amp;quot;sel&amp;quot;:&lt;br /&gt;
        selected_rows = request.form.get(&amp;quot;identifier&amp;quot;)&lt;br /&gt;
        try:&lt;br /&gt;
            selected_rows = json.loads(selected_rows)&lt;br /&gt;
        except (TypeError, json.decoder.JSONDecodeError):&lt;br /&gt;
            return jsonify({&amp;quot;gr_result&amp;quot;:&amp;quot;failure&amp;quot;})&lt;br /&gt;
        # Retrieve all relevant entries from a database.&lt;br /&gt;
        selected_rows = ...&lt;br /&gt;
        if len(selected_rows) == 0:&lt;br /&gt;
            return jsonify({&amp;quot;gr_result&amp;quot;:&amp;quot;failure&amp;quot;})&lt;br /&gt;
        else:&lt;br /&gt;
            # Re-format the results as a list of dict.&lt;br /&gt;
            response_data = [ {col0:row0_value0, col1:row0_value1, ...},&lt;br /&gt;
                              {col0:row1_value0, col1:row1_value1, ...},&lt;br /&gt;
                              ... ]&lt;br /&gt;
        return jsonify({&amp;quot;data&amp;quot;:response_data, &amp;quot;gr_status&amp;quot;:&amp;quot;success&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
    if request.form.get(&amp;quot;mode&amp;quot;) == &amp;quot;qsch&amp;quot; and not(table.multi):&lt;br /&gt;
        # Try fetching exactly ONE matching result from the server.&lt;br /&gt;
        # ...&lt;br /&gt;
        # If the result count is exactly ONE, the quick-search is successful.&lt;br /&gt;
        if ...:&lt;br /&gt;
            # Reformat the result as a dict.&lt;br /&gt;
            return jsonify({&amp;quot;data&amp;quot;:qsch_result, &amp;quot;qs_status&amp;quot;:&amp;quot;success&amp;quot;})&lt;br /&gt;
    # Now that the quick-search has failed, grab everything and return.&lt;br /&gt;
    # ...&lt;br /&gt;
    # Re-format the results as an array of array.&lt;br /&gt;
    # The order in each sub-array reflects the table&#039;s columns.&lt;br /&gt;
    response_data = [ [row0_value0, row0_value1, row0_value2, ...],&lt;br /&gt;
                      [row1_value0, row1_value1, row1_value2, ...],&lt;br /&gt;
                      ... ]&lt;br /&gt;
    return jsonify({&amp;quot;data&amp;quot;:response_data})&lt;br /&gt;
&lt;br /&gt;
    # NOTE THAT this is an extremely simple variation. In practical cases,&lt;br /&gt;
    # the function &#039;fetch_all&#039; can retrieve records from the database while&lt;br /&gt;
    # simultaneously applying the quick-search filter. So, the quick-search&lt;br /&gt;
    # section might get switched around a bit.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Search Table with a Stand-alone Page ===&lt;br /&gt;
&lt;br /&gt;
This example is extracted from the route that handles the [[#Shortcut]] form below. So, it can seem excessive in places. Feel free to cut and trim when adapting this pattern to your need.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;python&#039; line=1&amp;gt;&lt;br /&gt;
@blueprint_name.route(&amp;quot;path_name&amp;quot;, methods=[&amp;quot;GET&amp;quot;, &amp;quot;POST&amp;quot;])&lt;br /&gt;
def function_name(ref_tbname=None):&lt;br /&gt;
    # Handles different references to the table,&lt;br /&gt;
    # in case some pages need 5 product search modals, for example.&lt;br /&gt;
    ref_tbname = tbname if ref_tbname is None else ref_tbname&lt;br /&gt;
&lt;br /&gt;
    # Check the permission(s).&lt;br /&gt;
    table.perm_bit = ...&lt;br /&gt;
    if table.perm_bit == 0:&lt;br /&gt;
        abort(403)&lt;br /&gt;
&lt;br /&gt;
    # FETCH implies the client is merely requesting the data, not the page.&lt;br /&gt;
    fetch = True if request.args.get(&amp;quot;fetch&amp;quot;) == &amp;quot;yes&amp;quot; else False&lt;br /&gt;
    if fetch:&lt;br /&gt;
        # &#039;NCOL&#039; FETCH MODE: For new entry in a table with an in-line form.&lt;br /&gt;
        # This section can be simpler if one doesn&#039;t desire the COPY function.&lt;br /&gt;
        if request.form.get(&amp;quot;mode&amp;quot;) == &amp;quot;ncol&amp;quot;:&lt;br /&gt;
            identifiers = json.loads(request.form.get(&amp;quot;identifier&amp;quot;))&lt;br /&gt;
            copy_id = request.form.get(&amp;quot;copy_id&amp;quot;)&lt;br /&gt;
            # ...&lt;br /&gt;
            # ...&lt;br /&gt;
            # Return data in list form. Member order reflects the table&#039;s columns.&lt;br /&gt;
            return_data = [...]&lt;br /&gt;
            return jsonify({&amp;quot;data&amp;quot;:return_data})&lt;br /&gt;
        # &#039;GRAB&#039; FETCH MODE: Retrieve a full entry to populate the table&#039;s full-form.&lt;br /&gt;
        elif request.form.get(&amp;quot;mode&amp;quot;) == &amp;quot;grab&amp;quot;:&lt;br /&gt;
            identifiers = json.loads(request.form.get(&amp;quot;identifier&amp;quot;))&lt;br /&gt;
            thisid = identifiers.get(&amp;quot;id&amp;quot;, None)&lt;br /&gt;
            # ...&lt;br /&gt;
            # ...&lt;br /&gt;
            # Return data in dict form.&lt;br /&gt;
            return {...}&lt;br /&gt;
        # &#039;SEL&#039; FETCH MODE: Retrieve selection results.&lt;br /&gt;
        elif request.form.get(&amp;quot;mode&amp;quot;) == &amp;quot;sel&amp;quot;:&lt;br /&gt;
            selected_rows = request.form.get(&amp;quot;identifier&amp;quot;)&lt;br /&gt;
            try:&lt;br /&gt;
                selected_rows = json.loads(selected_rows)&lt;br /&gt;
            except (TypeError, json.decoder.JSONDecodeError):&lt;br /&gt;
                return jsonify({&amp;quot;gr_result&amp;quot;:&amp;quot;failure&amp;quot;})&lt;br /&gt;
            # Retrieve all relevant entries from a database.&lt;br /&gt;
            selected_rows = ...&lt;br /&gt;
            if len(selected_rows) == 0:&lt;br /&gt;
                return jsonify({&amp;quot;gr_result&amp;quot;:&amp;quot;failure&amp;quot;})&lt;br /&gt;
            else:&lt;br /&gt;
                # Re-format the results as a list of dict.&lt;br /&gt;
                response_data = [ {col0:row0_value0, col1:row0_value1, ...},&lt;br /&gt;
                                  {col0:row1_value0, col1:row1_value1, ...},&lt;br /&gt;
                                  ... ]&lt;br /&gt;
            return jsonify({&amp;quot;data&amp;quot;:response_data, &amp;quot;gr_status&amp;quot;:&amp;quot;success&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
        # &#039;QSCH&#039; FETCH MODE: Retrieve quick-search result OR the whole table.&lt;br /&gt;
        if request.form.get(&amp;quot;mode&amp;quot;) == &amp;quot;qsch&amp;quot; and not(table.multi):&lt;br /&gt;
            # Try fetching exactly ONE matching result from the server.&lt;br /&gt;
            # ...&lt;br /&gt;
            # If the result count is exactly ONE, the quick-search is successful.&lt;br /&gt;
            if ...:&lt;br /&gt;
                # Reformat the result as a dict.&lt;br /&gt;
                return jsonify({&amp;quot;data&amp;quot;:qsch_result, &amp;quot;qs_status&amp;quot;:&amp;quot;success&amp;quot;})&lt;br /&gt;
        # Now that the quick-search has failed, grab everything and return.&lt;br /&gt;
        # ...&lt;br /&gt;
        # Re-format the results as an array of array.&lt;br /&gt;
        # The order in each sub-array reflects the table&#039;s columns.&lt;br /&gt;
        response_data = [ [row0_value0, row0_value1, row0_value2, ...],&lt;br /&gt;
                          [row1_value0, row1_value1, row1_value2, ...],&lt;br /&gt;
                          ... ]&lt;br /&gt;
        return jsonify({&amp;quot;data&amp;quot;:response_data})&lt;br /&gt;
&lt;br /&gt;
        # NOTE THAT this is an extremely simple variation. In practical cases,&lt;br /&gt;
        # the function &#039;fetch_all&#039; can retrieve records from the database while&lt;br /&gt;
        # simultaneously applying the quick-search filter. So, the quick-search&lt;br /&gt;
        # section might get switched around a bit.&lt;br /&gt;
&lt;br /&gt;
    # POST method (after the FETCH filter) implies form submission.&lt;br /&gt;
    if request.method == &amp;quot;POST&amp;quot;:&lt;br /&gt;
        tbform = table.fullform[3] if table.fullform else table.form&lt;br /&gt;
        # When a database is involved, it is recommended to use &#039;gen_dbcommit_resp&#039;.&lt;br /&gt;
        # Many things are taken care of inside.&lt;br /&gt;
        db_mod_code, new_entry, resp_dict = gen_dbcommit_resp(dbtype, tbname, model,&lt;br /&gt;
                                                            tbform, table.perm_bit,&lt;br /&gt;
                                                            suppress_success_msg=True)&lt;br /&gt;
        if resp_dict == 403:&lt;br /&gt;
            abort(403)&lt;br /&gt;
        # If this is not a delete operation, prepare and package resp_dict[&#039;entry&#039;] too.&lt;br /&gt;
        # resp_dict[&#039;entry&#039;] is a list of values. Its order reflects the table&#039;s columns.&lt;br /&gt;
        if isinstance(db_mod_code, int) and db_mod_code &amp;lt; 4 and not(new_entry is None):&lt;br /&gt;
            # ...&lt;br /&gt;
            resp_dict[&amp;quot;entry&amp;quot;] = [...]&lt;br /&gt;
        return jsonify(resp_dict)&lt;br /&gt;
&lt;br /&gt;
    # At this point, it is clear that the client is requesting the stand-alone page.&lt;br /&gt;
    table.populate_route = url_for(&amp;quot;&amp;lt;blueprint&amp;gt;.&amp;lt;function_name&amp;gt;&amp;quot;, fetch=&amp;quot;yes&amp;quot;)&lt;br /&gt;
    if table.fullform:&lt;br /&gt;
        table.fullform[3].populate_id = [&amp;quot;id&amp;quot;]&lt;br /&gt;
        table.fullform[3].populate_route = table.populate_route&lt;br /&gt;
&lt;br /&gt;
    # The template &#039;browse_table.html&#039; is suitable for most stand-alone table page.&lt;br /&gt;
    # Using it is convenient but not necessary.&lt;br /&gt;
    return render_template(&amp;quot;browse_table.html&amp;quot;, ...)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Shortcut ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;python&#039; line=1&amp;gt;&lt;br /&gt;
@blueprint_name.route(&amp;quot;path_name&amp;quot;, methods=[&amp;quot;GET&amp;quot;, &amp;quot;POST&amp;quot;])&lt;br /&gt;
def function_name(mes_dict=None, prefix=&amp;quot;DefaultPrefix&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
    this_permission = ...&lt;br /&gt;
    import_form = StdImportForm.gen_import_form(&amp;quot;blueprint_name.function_name&amp;quot;, upload=&amp;quot;yes&amp;quot;))&lt;br /&gt;
    if request.args.get(&amp;quot;upload&amp;quot;, False) == &amp;quot;yes&amp;quot; and this_permission &amp;gt;= 5:&lt;br /&gt;
        # Do import sequence&lt;br /&gt;
        return ...&lt;br /&gt;
    if request.args.get(&amp;quot;export&amp;quot;, False) == &amp;quot;yes&amp;quot; and this_permission &amp;gt;= 1:&lt;br /&gt;
        # Do export sequence&lt;br /&gt;
        return ...&lt;br /&gt;
        &lt;br /&gt;
    real_mes = interpret_mes_request(request.args, 3) if mes_dict is None&lt;br /&gt;
               else interpret_mes_request(mes_dict, 3)&lt;br /&gt;
    req_prefix = request.args.get(&amp;quot;prefix&amp;quot;, None)&lt;br /&gt;
    prefix = prefix if req_prefix is None else req_prefix&lt;br /&gt;
    table = TableClass(prefix=prefix, suppress_copy=False, **real_mes)&lt;br /&gt;
    table.sch_tbs = []&lt;br /&gt;
    # Append search tables into table.sch_tbs&lt;br /&gt;
    # ...&lt;br /&gt;
    dbtype, tbname = &amp;quot;table&amp;quot;, &amp;quot;&amp;lt;database_file_name&amp;gt;&amp;quot;&lt;br /&gt;
    # If the table name and the database name do not match. Also do:&lt;br /&gt;
    # ref_tbname = &amp;quot;&amp;lt;table_name&amp;gt;&amp;quot;&lt;br /&gt;
    model, module = CuneiModelClass, &amp;quot;&amp;lt;module_code&amp;gt;&amp;quot;&lt;br /&gt;
    new_default = function_that_return_default_val_dict&lt;br /&gt;
    fetch_all = function_that_return_all_entries_in_the_database&lt;br /&gt;
    return single_tb_page(dbtype, tbname, model, module, table, new_default, fetch_all, request,&lt;br /&gt;
                        import_form=import_form,&lt;br /&gt;
                        export_route=url_for(&amp;quot;blueprint_name.function_name&amp;quot;, export=&amp;quot;yes&amp;quot;),&lt;br /&gt;
                        pin_args=...,&lt;br /&gt;
                        back_route=...,&lt;br /&gt;
                        ref_tbname=ref_tbname)      # If necessary.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Development ==&lt;br /&gt;
* &#039;&#039;&#039;Pagination&#039;&#039;&#039;: At the moment, CuneiTable works moderately well for entries up to several thousands (depending on the power of the client-unit). However, pagination will allow more entries to be processed and rendered in a swifter manner.&lt;br /&gt;
* &#039;&#039;&#039;Change Order-by Column(s)&#039;&#039;&#039;: In the present incarnation, the entry order of a CuneiTable is determined from the server. Allowing users to change the ordering from the client-side will definitely boost the usefulness of CuneiTables. However, details regarding entry referencing in the JavaScript code has to be considered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{The Tenko Shrine}}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4063</id>
		<title>คำนวณข้อมูลใหม่</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4063"/>
		<updated>2026-03-24T06:28:49Z</updated>

		<summary type="html">&lt;p&gt;Tenko: /* การแช่แข็ง/ผ่านบัญชี */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
&lt;br /&gt;
== ตำแหน่งเมนู ==&lt;br /&gt;
&#039;&#039;&#039;[[เมนู &amp;quot;จัดการข้อมูล&amp;quot;]] → คำนวณข้อมูลใหม่&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== การเก็บข้อมูลธุรกรรมแบบแยกเดือน ==&lt;br /&gt;
=== แนวคิดเบื้องหลัง ===&lt;br /&gt;
ระบบคูนิฟ็อกซ์ถูกออกแบบให้เก็บข้อมูลธุรกรรมแยกเป็นรายเดือน การเลือกเก็บข้อมูลในลักษณะนี้มีแนวคิดคือ:&lt;br /&gt;
* &#039;&#039;&#039;ลดความเสี่ยงและผลกระทบของความเสียหาย:&#039;&#039;&#039; ฐานข้อมูลที่ถูกเขียนข้อมูลอยู่มีความเสี่ยงต่อความเสียหายมากกว่า ดังนั้นการแยกเก็บข้อมูลจึงเป็นวิธีหนึ่งในการจำกัดความเสี่ยงและจำนวนข้อมูลที่ได้รับผลกระทบเมื่อเกิดเหตุสุดวิสัยต่างๆ&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูลและการผ่านบัญชี:&#039;&#039;&#039; ทำให้ผู้ใช้สามารถ[[#การแช่แข็ง/ผ่านบัญชี|แช่แข็งหรือปิดกั้นการแก้ไข]]ข้อมูลเป็นเดือนๆ ได้ เพื่อความสะดวกในการตรวจสอบและเก็บรักษาข้อมูล&lt;br /&gt;
* &#039;&#039;&#039;จำกัดขนาดของข้อมูลชุดทำงาน:&#039;&#039;&#039; การแยกเก็บข้อมูลจะช่วยรักษาขนาดของฐานข้อมูลชุดทำงานไม่ให้มีขนาดใหญ่เกินไป ทำให้การอ่านและเขียนข้อมูลมีความรวดเร็วสม่ำเสมอตลอดการใช้งาน&lt;br /&gt;
* &#039;&#039;&#039;ไม่จำเป็นต้องล้างข้อมูลเมื่อสิ้นปี:&#039;&#039;&#039; เมื่อฐานข้อมูลชุดทำงานไม่ได้มีขนาดใหญ่ขึ้นไปเรื่อยๆ ไม่จำกัด การล้างข้อมูลทุกสิ้นปีก็ไม่ใช่เรื่องจำเป็นอีกต่อไป ผู้ใช้สามารถเรียกดูข้อมูลดิบชุดจริงย้อนหลังได้ไม่จำกัด รวมถึงสามารถเรียกรายงานย้อนหลังต่อเนื่องได้&lt;br /&gt;
&lt;br /&gt;
วิธีการเก็บข้อมูลวิธีนี้มิได้เป็นวิธีเฉพาะตัวของคูนิฟ็อกซ์เพียงรายเดียวแต่อย่างใด อย่างไรก็ตาม เนื่องจากซอฟต์แวร์ลักษณะเดียวกับส่วนใหญ่เลือกเก็บข้อมูลเป็นฐานข้อมูลเดียว ผู้ใช้อาจพบว่าวงจรการทำงานภายใต้ระบบคูนิฟ็อกซ์แตกต่างไปจากซอฟต์แวร์อื่นที่เคยใช้บ้าง&lt;br /&gt;
&lt;br /&gt;
=== ข้อเสนอแนะในการปฏิบัติงาน ===&lt;br /&gt;
การเก็บข้อมูลแบบแยกเดือนนี้ ทำให้คูนิฟ็อกซ์มีการทำงานที่อาจต้องปรับความเคยชินเล็กน้อยอยู่ 2 ประการหลักๆ ได้แก่:&lt;br /&gt;
* &#039;&#039;&#039;คูนิฟ็อกซ์ใช้วันที่ของ session เพื่อเลือกฐานข้อมูลชุดทำงาน:&#039;&#039;&#039; คูนิฟ็อกซ์จะอ่านและเขียนข้อมูลธุรกรรมโดยจะยึดเดือนตามวันที่ของ session ดังนั้น &#039;&#039;&#039;ผู้ใช้จะมองเห็นและแก้ไขข้อมูลธุรกรรมดิบได้ทีละเดือน&#039;&#039;&#039; หากผู้ใช้ต้องการดูหรือแก้ไขข้อมูลของเดือนอื่น สามารถทำได้โดย&#039;&#039;&#039;[[กำหนดวันที่/เวลา|เปลี่ยนวันที่ของ session (คลิกที่วัน/เวลาของ session บนแถบชื่อบริษัท)]]&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;p id=&amp;quot;ผลยกยอดเบื้องต้น&amp;quot;&amp;gt;&#039;&#039;&#039;ธุรกรรมต่างๆ จะไม่ปรากฏผลข้ามเดือนจนกว่าจะมีการคำนวณข้อมูลยกยอด:&#039;&#039;&#039; เนื่องจากคูนิฟ็อกซ์เก็บข้อมูลธุรกรรมของบริษัทโดยไม่ล้างข้อมูลดิบ ชุดข้อมูลของบริษัทอาจครอบคลุมช่วงเวลาหลายปี ดังนั้นระบบคูนิฟ็อกซ์จะ&#039;&#039;&#039;ไม่คำนวณผลกระทบของธุรกรรมข้ามเดือนให้โดยอัตโนมัติ&#039;&#039;&#039;จนกว่าผู้ใช้จะสั่งคำนวณข้อมูลใหม่หรือ[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ระบบคำนวณข้อมูลใหม่โดยอัตโนมัติตามเวลาที่ตั้งไว้]]&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;อย่างไรก็ตาม ระบบคูนิฟ็อกซ์มี&#039;&#039;&#039;[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ฟังก์ชันผลยกยอดเบื้องต้น]]&#039;&#039;&#039; เพื่อคำนวณผลกระทบของธุรกรรมที่ผู้ใช้บันทึก/เปลี่ยนแปลงค่าไปยังเดือนที่เลือกไว้เพียง 1 หรือ 2 เดือนได้ เช่นนี้ ผู้ใช้ก็จะสามารถทำงานระหว่างวันได้โดยสะดวก และปล่อยให้การคำนวณข้อมูลใหม่เป็นงานสำหรับสิ้นวันเพียงครั้งเดียว&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;ตัวอย่างเช่น เมื่อต้นเดือนตุลาคม มีสินค้าในคลังทั้งหมด 100 ชิ้น บันทึกขายไป 10 ชิ้นในวันที่ 04 ตุลาคม ผู้ใช้จะเห็นจำนวนสินค้าในคลังดังนี้&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=2 style=&amp;quot;width:120px;&amp;quot; | วันที่ของ session || colspan=2 | ฟังก์ชันผลยกยอดเบื้องต้น || rowspan=2 | คำอธิบาย&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:75px;&amp;quot; | ปิด !! style=&amp;quot;width:75px;&amp;quot; | เปิด&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;ก่อนคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมที่บันทึกเห็นผลกระทบทันทีภายในเดือนเดียวกัน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน || style=&amp;quot;text-align:center;&amp;quot; | 100 ชิ้น || style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมในเดือนตุลาคมไม่ส่งผลกับเดือนอื่นๆ หากไม่เปิดใช้งานฟังก์ชันผลยกยอดเบื้องต้น&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;หลังคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 rowspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || rowspan=2 | ในการคำนวณข้อมูลใหม่ ระบบจะยกยอดสิ้นงวดเดือนตุลาคมไปเป็นยอดต้นงวดเดือนพฤศจิกายน ทำให้ธุรกรรมในเดือนตุลาคมส่งผลอย่างถูกต้องในเดือนพฤศิกายน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน&lt;br /&gt;
|}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== วัตถุประสงค์ ==&lt;br /&gt;
การคำนวณข้อมูลใหม่ในระบบคูนิฟ็อกซ์มีวัตถุประสงค์ดังต่อไปนี้:&lt;br /&gt;
* &#039;&#039;&#039;ตรวจเช็คความสมบูรณ์ของฐานข้อมูล:&#039;&#039;&#039; หากไฟล์ฐานข้อมูลหรือดรรชนีเกิดความเสียหายขึ้น ผู้ใช้จะได้ทราบและกู้คืนข้อมูลชุดล่าสุดที่ใช้งานได้&lt;br /&gt;
* &#039;&#039;&#039;สร้างรายการประวัติและบัญชีรายวันใหม่:&#039;&#039;&#039; ระบบจะอ้างอิงจากข้อมูลธุรกรรมดิบที่ผู้ใช้บันทึกเพื่อล้างรายการทดระหว่างวัน ซึ่งเกิดจากการแก้ไขหรือลบข้อมูลธุรกรรม หรือกำจัดรายการที่บันทึก/คำนวณผิดพลาดเนื่องจากสถานการณ์ไม่ปกติต่างๆ&lt;br /&gt;
** ระบบจะสร้าง&#039;&#039;&#039;รายการประวัติต่างๆ&#039;&#039;&#039; เช่น ประวัติการเข้า-ออกสินค้าคงคลัง, ประวัติเจ้าหนี้/ลูกหนี้รายตัว, ฯลฯ ใหม่ทั้งหมด&lt;br /&gt;
** สำหรับประเภทธุรกรรมที่มีการบันทึกบัญชีรายวันอัตโนมัติ &#039;&#039;(และไม่ได้ถูกล็อคโดยผู้ใช้)&#039;&#039; ระบบจะ&#039;&#039;&#039;ลงบันทึกบัญชีรายวัน&#039;&#039;&#039;ให้ใหม่ พร้อม&#039;&#039;&#039;ล้างข้อมูลบัญชีรายวันที่ไม่มีข้อมูลธุรกรรมดิบ&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;คำนวณผลลัพท์ของธุรกรรมภายในเดือน:&#039;&#039;&#039; เพื่อหายอดสิ้นงวดและยอดยกมาสำหรับเดือนถัดไป&lt;br /&gt;
&lt;br /&gt;
== การใช้งาน ==&lt;br /&gt;
[[ไฟล์:Recalc page.png|720px|thumb|center|alt=เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;|เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
# เข้าสู่&#039;&#039;&#039;เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;เลือกช่วงข้อมูลและโมดูล&#039;&#039;&#039;ที่ต้องการ&lt;br /&gt;
# คลิก&#039;&#039;&#039;ปุ่ม &amp;quot;ส่งคำขอ&amp;quot;&#039;&#039;&#039; เพื่อเริ่มดำเนินการ&lt;br /&gt;
&lt;br /&gt;
{{3stars}} &#039;&#039;&#039;โดยปกติของระบบจะข้ามการคำนวณข้อมูลสำหรับเดือนที่แช่แข็งหรือผ่านบัญชีแล้ว&#039;&#039;&#039; หากผู้ใช้ต้องการคำนวณข้อมูลใหม่ในเดือนดังกล่าว ให้ผู้ใช้ทำเครื่องหมายใน&#039;&#039;&#039;ช่อง &amp;quot;รวมในการคำนวณ (เดือนที่แช่แช็งแล้ว)&amp;quot; หรือ &amp;quot;รวมในการคำนวณ (เดือนที่ผ่านบัญชีแล้ว)&amp;quot;&#039;&#039;&#039; ตามต้องการ&lt;br /&gt;
&lt;br /&gt;
== คำอธิบายช่องข้อมูล ==&lt;br /&gt;
{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;จากเดือน... ถึงเดือน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || เดือนแรกและเดือนสุดท้ายที่จะคำนวณ&lt;br /&gt;
{{3stars}} ระบบจะนำยอดสิ้นงวดของเดือนสุดท้ายไปเขียนเป็นยอดยกมาของเดือนถัดไปด้วย&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlight2Head}} | &#039;&#039;&#039;เดือนที่แช่แข็งแล้ว&#039;&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;รวมในการคำนวณ&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || คำนวณข้อมูลสำหรับเดือนที่แช่แข็งแล้วด้วย&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || ใช้การตั้งค่าปัจจุบันแทนการตั้งค่าที่แช่แข็งไว้ &#039;&#039;(สำหรับเดือนที่ถูกแช่แข็ง)&#039;&#039; พร้อมเปลี่ยนการตั้งค่าที่แช่แข็งไว้ในเป็นเหมือนการตั้งค่าปัจจุบัน (ดูหัวข้อย่อย [[#การแช่แข็งการตั้งค่าต่างๆ|&amp;quot;การแช่แข็งการตั้งค่าต่างๆ&amp;quot;]])&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlight2Head}} | &#039;&#039;&#039;เดือนที่ผ่านบัญชีแล้ว&#039;&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;รวมในการคำนวณ&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || คำนวณข้อมูลสำหรับเดือนที่ผ่านบัญชีแล้วด้วย&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || ใช้การตั้งค่าปัจจุบันแทนการตั้งค่าที่แช่แข็งไว้ &#039;&#039;(สำหรับเดือนที่ผ่านบัญชี)&#039;&#039; พร้อมเปลี่ยนการตั้งค่าที่แช่แข็งไว้ในเป็นเหมือนการตั้งค่าปัจจุบัน (ดูหัวข้อย่อย [[#การแช่แข็งการตั้งค่าต่างๆ|&amp;quot;การแช่แข็งการตั้งค่าต่างๆ&amp;quot;]])&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แช่แข็ง/ผ่านบัญชี&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || เปลี่ยนสถานะการแช่แข็ง/ผ่านบัญชี (ดูหัวข้อย่อย [[#การแช่แข็ง/ผ่านบัญชี|&amp;quot;การแช่แข็ง/ผ่านบัญชี&amp;quot;]])&lt;br /&gt;
{{3stars}} เปลี่ยนค่าได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;แช่แข็งข้อมูล&amp;quot; และ/หรือ &amp;quot;ผ่านบัญชี&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{DangerText|&#039;&#039;&#039;&#039;&#039;{{3stars}} การแช่แข็งและการผ่านบัญชีไม่สามารถย้อนกลับได้ โปรดใช้ความระมัดระวังในการเลือก}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;เลือกโมดูล&#039;&#039;&#039; &#039;&#039;(เลือกโมดูลที่ต้องการคำนวณข้อมูลใหม่)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 style=&amp;quot;text-align:center;&amp;quot; | {{3stars}} ลำดับการทำงานของฟังก์ชันคำนวณข้อมูลใหม่จะทำย้อนลำดับโมดูลที่แสดงบนเพจ&amp;lt;br&amp;gt;เช่นในภาพ ระบบจะคำนวณโมดูลตามลำดับดังนี้&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;quot;ค่าจ้าง/เงินเดือน&amp;quot; → &amp;quot;สินทรัพย์&amp;quot; → &amp;quot;สินค้าคงคลัง&amp;quot; → &amp;quot;เจ้าหนี้/ลูกหนี้&amp;quot; → &amp;quot;บัญชีรายวัน&amp;quot; &#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== การแช่แข็ง/ผ่านบัญชี ==&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Monthlock stat.png|220px|thumb|right|alt=สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี|สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ฟังก์ชันการแช่แข็ง/ผ่านบัญชี&#039;&#039;&#039;มีไว้เพื่อความสะดวกในการตรวจสอบและการปิดกั้นการแก้ไขข้อมูล มีรายละเอียดดังนี้:&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูล:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่แช่แข็งไว้ จะ&#039;&#039;&#039;สามารถเพิ่มเติม/แก้ไข/ลบได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;แช่แข็งข้อมูล&amp;quot;&#039;&#039;&#039; เท่านั้น &#039;&#039;(หน่วยงานของผู้ใช้อาจกำหนดให้เฉพาะผู้ทำบัญชี หรือผู้ตรวจสอบบัญชีมีสิทธิ์นี้)&#039;&#039; เพื่อจำกัดการเปลี่ยนแปลงของข้อมูลให้มาจากวงแคบเท่านั้น ทำให้การตรวจสอบเป็นไปได้ง่ายและรวดเร็วขึ้น&lt;br /&gt;
* &#039;&#039;&#039;การผ่านบัญชี:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่ผ่านบัญชีแล้วจะ&#039;&#039;&#039;ไม่อนุญาตให้เพิ่มเติม/แก้ไข/ลบ&#039;&#039;&#039; หากผู้ใช้ต้องการปรับปรุงรายการในเดือนดังกล่าว ให้ผู้ใช้&#039;&#039;&#039;สร้างเอกสารปรับปรุง/เปลี่ยนแปลงในเดือนที่ยังไม่ได้ผ่านบัญชีแทน&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เมื่อวันที่ของ session ตกอยู่ในเดือนที่ถูกแช่แข็งหรือผ่านบัญชี จะปรากฏสัญลักษณ์บอกสถานะขึ้นกลางแถบชื่อบริษัทด้านบนของจอ&lt;br /&gt;
&lt;br /&gt;
=== การแช่แข็งการตั้งค่าต่างๆ ===&lt;br /&gt;
การแช่แข็งการตั้งค่าคือการคัดลอกการตั้งค่าในปัจจุบันเก็บเอาไว้ใช้สำหรับข้อมูลเฉพาะในเดือนนั้น โดยระบบจะแช่แข็งการตั้งค่าให้โดยอัตโนมัติสำหรับเดือนที่ผู้ใช้สั่งแช่แข็งหรือผ่านบัญชี ทั้งนี้ การตั้งค่าที่จะถูกแช่แข็งหมายรวมถึง &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;การตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;รูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เดือนที่มีการตั้งค่าแช่แข็งไว้จะไม่ใช้การตั้งค่าส่วนกลางของบริษัท แต่จะใช้การตั้งค่าที่แช่แข็งไว้ในการคำนวณ/จัดการข้อมูลแทน ดังนั้น ผู้ใช้สามารถเปลี่ยนการตั้งค่าของบริษัทเพื่อใช้ฟีเจอร์ใหม่ๆ ของโปรแกรมได้ โดยไม่กระทบกับวิธีการคำนวณข้อมูลเดือนก่อนๆ เช่น บริษัท A ดำเนินการมาจนถึงสิ้นเดือนธันวาคม 2024 และได้มีการเปลี่ยนแปลงรูปแบบการทำงานและรูปแบบการบันทึกบัญชี บริษัท A จะสามารถปรับการตั้งค่าของตนในระบบคูนิฟ็อกซ์ได้ดังนี้:&lt;br /&gt;
# &#039;&#039;&#039;สั่งแช่แข็ง (หรือผ่านบัญชี) ทุกๆ เดือนในอดีตจนถึงเดือนธันวาคม 2024:&#039;&#039;&#039; ระบบจะคัดลอกการตั้งค่าปัจจุบัน (ก่อนเปลี่ยนแปลง) เอาไว้ใช้ในช่วงเดือนข้อมูลดังกล่าว&lt;br /&gt;
# &#039;&#039;&#039;เปลี่ยนแปลงการตั้งค่าระบบ และรูปแบบการบันทึกบัญชี&#039;&#039;&#039;เพื่อรองรับรูปแบบการทำงานใหม่&lt;br /&gt;
# &#039;&#039;&#039;ใช้งานต่อตามปกติ:&#039;&#039;&#039;&lt;br /&gt;
#* ข้อมูลธุรกรรมใดๆ ของเดือนหลังจากธันวาคม 2024 ก็จะใช้การตั้งค่าใหม่ได้ทันที&lt;br /&gt;
#* ข้อมูลธุรกรรมที่ย้อนไปบันทึกเป็นของเดือนธันวาคม 2024 หรือก่อนหน้า (เช่นการปรับปรุงบัญชีเพื่อปิดงบ) รวมไปถึงการคำนวณข้อมูลใหม่ จะยังใช้การตั้งค่าเดิมที่แช่แข็งไว้&lt;br /&gt;
&lt;br /&gt;
==== การเปลี่ยนแปลงการตั้งค่าที่แช่แข็งไว้ ====&lt;br /&gt;
หากผู้ใช้ต้องการเปลี่ยนแปลงการตั้งค่าที่ถูกแช่แข็งไว้ สามารถทำได้ 2 วิธีดังนี้:&lt;br /&gt;
* เปลี่ยนวันที่ของ session เป็นเดือนที่ต้องการ แล้วแก้ไขการตั้งค่าผ่านเพจ &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;ตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;กำหนดรูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039; &#039;&#039;(วิธีนี้ใช้ไม่ได้สำหรับเดือนที่ผ่านบัญชีแล้ว)&#039;&#039;&lt;br /&gt;
* สั่งคำนวณข้อมูลของเดือนที่ต้องการใหม่ โดยทำเครื่องหมายที่&#039;&#039;&#039;ช่องข้อมูล &amp;quot;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4062</id>
		<title>คำนวณข้อมูลใหม่</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4062"/>
		<updated>2026-03-24T06:28:34Z</updated>

		<summary type="html">&lt;p&gt;Tenko: /* คำอธิบายช่องข้อมูล */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
&lt;br /&gt;
== ตำแหน่งเมนู ==&lt;br /&gt;
&#039;&#039;&#039;[[เมนู &amp;quot;จัดการข้อมูล&amp;quot;]] → คำนวณข้อมูลใหม่&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== การเก็บข้อมูลธุรกรรมแบบแยกเดือน ==&lt;br /&gt;
=== แนวคิดเบื้องหลัง ===&lt;br /&gt;
ระบบคูนิฟ็อกซ์ถูกออกแบบให้เก็บข้อมูลธุรกรรมแยกเป็นรายเดือน การเลือกเก็บข้อมูลในลักษณะนี้มีแนวคิดคือ:&lt;br /&gt;
* &#039;&#039;&#039;ลดความเสี่ยงและผลกระทบของความเสียหาย:&#039;&#039;&#039; ฐานข้อมูลที่ถูกเขียนข้อมูลอยู่มีความเสี่ยงต่อความเสียหายมากกว่า ดังนั้นการแยกเก็บข้อมูลจึงเป็นวิธีหนึ่งในการจำกัดความเสี่ยงและจำนวนข้อมูลที่ได้รับผลกระทบเมื่อเกิดเหตุสุดวิสัยต่างๆ&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูลและการผ่านบัญชี:&#039;&#039;&#039; ทำให้ผู้ใช้สามารถ[[#การแช่แข็ง/ผ่านบัญชี|แช่แข็งหรือปิดกั้นการแก้ไข]]ข้อมูลเป็นเดือนๆ ได้ เพื่อความสะดวกในการตรวจสอบและเก็บรักษาข้อมูล&lt;br /&gt;
* &#039;&#039;&#039;จำกัดขนาดของข้อมูลชุดทำงาน:&#039;&#039;&#039; การแยกเก็บข้อมูลจะช่วยรักษาขนาดของฐานข้อมูลชุดทำงานไม่ให้มีขนาดใหญ่เกินไป ทำให้การอ่านและเขียนข้อมูลมีความรวดเร็วสม่ำเสมอตลอดการใช้งาน&lt;br /&gt;
* &#039;&#039;&#039;ไม่จำเป็นต้องล้างข้อมูลเมื่อสิ้นปี:&#039;&#039;&#039; เมื่อฐานข้อมูลชุดทำงานไม่ได้มีขนาดใหญ่ขึ้นไปเรื่อยๆ ไม่จำกัด การล้างข้อมูลทุกสิ้นปีก็ไม่ใช่เรื่องจำเป็นอีกต่อไป ผู้ใช้สามารถเรียกดูข้อมูลดิบชุดจริงย้อนหลังได้ไม่จำกัด รวมถึงสามารถเรียกรายงานย้อนหลังต่อเนื่องได้&lt;br /&gt;
&lt;br /&gt;
วิธีการเก็บข้อมูลวิธีนี้มิได้เป็นวิธีเฉพาะตัวของคูนิฟ็อกซ์เพียงรายเดียวแต่อย่างใด อย่างไรก็ตาม เนื่องจากซอฟต์แวร์ลักษณะเดียวกับส่วนใหญ่เลือกเก็บข้อมูลเป็นฐานข้อมูลเดียว ผู้ใช้อาจพบว่าวงจรการทำงานภายใต้ระบบคูนิฟ็อกซ์แตกต่างไปจากซอฟต์แวร์อื่นที่เคยใช้บ้าง&lt;br /&gt;
&lt;br /&gt;
=== ข้อเสนอแนะในการปฏิบัติงาน ===&lt;br /&gt;
การเก็บข้อมูลแบบแยกเดือนนี้ ทำให้คูนิฟ็อกซ์มีการทำงานที่อาจต้องปรับความเคยชินเล็กน้อยอยู่ 2 ประการหลักๆ ได้แก่:&lt;br /&gt;
* &#039;&#039;&#039;คูนิฟ็อกซ์ใช้วันที่ของ session เพื่อเลือกฐานข้อมูลชุดทำงาน:&#039;&#039;&#039; คูนิฟ็อกซ์จะอ่านและเขียนข้อมูลธุรกรรมโดยจะยึดเดือนตามวันที่ของ session ดังนั้น &#039;&#039;&#039;ผู้ใช้จะมองเห็นและแก้ไขข้อมูลธุรกรรมดิบได้ทีละเดือน&#039;&#039;&#039; หากผู้ใช้ต้องการดูหรือแก้ไขข้อมูลของเดือนอื่น สามารถทำได้โดย&#039;&#039;&#039;[[กำหนดวันที่/เวลา|เปลี่ยนวันที่ของ session (คลิกที่วัน/เวลาของ session บนแถบชื่อบริษัท)]]&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;p id=&amp;quot;ผลยกยอดเบื้องต้น&amp;quot;&amp;gt;&#039;&#039;&#039;ธุรกรรมต่างๆ จะไม่ปรากฏผลข้ามเดือนจนกว่าจะมีการคำนวณข้อมูลยกยอด:&#039;&#039;&#039; เนื่องจากคูนิฟ็อกซ์เก็บข้อมูลธุรกรรมของบริษัทโดยไม่ล้างข้อมูลดิบ ชุดข้อมูลของบริษัทอาจครอบคลุมช่วงเวลาหลายปี ดังนั้นระบบคูนิฟ็อกซ์จะ&#039;&#039;&#039;ไม่คำนวณผลกระทบของธุรกรรมข้ามเดือนให้โดยอัตโนมัติ&#039;&#039;&#039;จนกว่าผู้ใช้จะสั่งคำนวณข้อมูลใหม่หรือ[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ระบบคำนวณข้อมูลใหม่โดยอัตโนมัติตามเวลาที่ตั้งไว้]]&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;อย่างไรก็ตาม ระบบคูนิฟ็อกซ์มี&#039;&#039;&#039;[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ฟังก์ชันผลยกยอดเบื้องต้น]]&#039;&#039;&#039; เพื่อคำนวณผลกระทบของธุรกรรมที่ผู้ใช้บันทึก/เปลี่ยนแปลงค่าไปยังเดือนที่เลือกไว้เพียง 1 หรือ 2 เดือนได้ เช่นนี้ ผู้ใช้ก็จะสามารถทำงานระหว่างวันได้โดยสะดวก และปล่อยให้การคำนวณข้อมูลใหม่เป็นงานสำหรับสิ้นวันเพียงครั้งเดียว&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;ตัวอย่างเช่น เมื่อต้นเดือนตุลาคม มีสินค้าในคลังทั้งหมด 100 ชิ้น บันทึกขายไป 10 ชิ้นในวันที่ 04 ตุลาคม ผู้ใช้จะเห็นจำนวนสินค้าในคลังดังนี้&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=2 style=&amp;quot;width:120px;&amp;quot; | วันที่ของ session || colspan=2 | ฟังก์ชันผลยกยอดเบื้องต้น || rowspan=2 | คำอธิบาย&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:75px;&amp;quot; | ปิด !! style=&amp;quot;width:75px;&amp;quot; | เปิด&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;ก่อนคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมที่บันทึกเห็นผลกระทบทันทีภายในเดือนเดียวกัน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน || style=&amp;quot;text-align:center;&amp;quot; | 100 ชิ้น || style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมในเดือนตุลาคมไม่ส่งผลกับเดือนอื่นๆ หากไม่เปิดใช้งานฟังก์ชันผลยกยอดเบื้องต้น&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;หลังคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 rowspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || rowspan=2 | ในการคำนวณข้อมูลใหม่ ระบบจะยกยอดสิ้นงวดเดือนตุลาคมไปเป็นยอดต้นงวดเดือนพฤศจิกายน ทำให้ธุรกรรมในเดือนตุลาคมส่งผลอย่างถูกต้องในเดือนพฤศิกายน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน&lt;br /&gt;
|}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== วัตถุประสงค์ ==&lt;br /&gt;
การคำนวณข้อมูลใหม่ในระบบคูนิฟ็อกซ์มีวัตถุประสงค์ดังต่อไปนี้:&lt;br /&gt;
* &#039;&#039;&#039;ตรวจเช็คความสมบูรณ์ของฐานข้อมูล:&#039;&#039;&#039; หากไฟล์ฐานข้อมูลหรือดรรชนีเกิดความเสียหายขึ้น ผู้ใช้จะได้ทราบและกู้คืนข้อมูลชุดล่าสุดที่ใช้งานได้&lt;br /&gt;
* &#039;&#039;&#039;สร้างรายการประวัติและบัญชีรายวันใหม่:&#039;&#039;&#039; ระบบจะอ้างอิงจากข้อมูลธุรกรรมดิบที่ผู้ใช้บันทึกเพื่อล้างรายการทดระหว่างวัน ซึ่งเกิดจากการแก้ไขหรือลบข้อมูลธุรกรรม หรือกำจัดรายการที่บันทึก/คำนวณผิดพลาดเนื่องจากสถานการณ์ไม่ปกติต่างๆ&lt;br /&gt;
** ระบบจะสร้าง&#039;&#039;&#039;รายการประวัติต่างๆ&#039;&#039;&#039; เช่น ประวัติการเข้า-ออกสินค้าคงคลัง, ประวัติเจ้าหนี้/ลูกหนี้รายตัว, ฯลฯ ใหม่ทั้งหมด&lt;br /&gt;
** สำหรับประเภทธุรกรรมที่มีการบันทึกบัญชีรายวันอัตโนมัติ &#039;&#039;(และไม่ได้ถูกล็อคโดยผู้ใช้)&#039;&#039; ระบบจะ&#039;&#039;&#039;ลงบันทึกบัญชีรายวัน&#039;&#039;&#039;ให้ใหม่ พร้อม&#039;&#039;&#039;ล้างข้อมูลบัญชีรายวันที่ไม่มีข้อมูลธุรกรรมดิบ&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;คำนวณผลลัพท์ของธุรกรรมภายในเดือน:&#039;&#039;&#039; เพื่อหายอดสิ้นงวดและยอดยกมาสำหรับเดือนถัดไป&lt;br /&gt;
&lt;br /&gt;
== การใช้งาน ==&lt;br /&gt;
[[ไฟล์:Recalc page.png|720px|thumb|center|alt=เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;|เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
# เข้าสู่&#039;&#039;&#039;เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;เลือกช่วงข้อมูลและโมดูล&#039;&#039;&#039;ที่ต้องการ&lt;br /&gt;
# คลิก&#039;&#039;&#039;ปุ่ม &amp;quot;ส่งคำขอ&amp;quot;&#039;&#039;&#039; เพื่อเริ่มดำเนินการ&lt;br /&gt;
&lt;br /&gt;
{{3stars}} &#039;&#039;&#039;โดยปกติของระบบจะข้ามการคำนวณข้อมูลสำหรับเดือนที่แช่แข็งหรือผ่านบัญชีแล้ว&#039;&#039;&#039; หากผู้ใช้ต้องการคำนวณข้อมูลใหม่ในเดือนดังกล่าว ให้ผู้ใช้ทำเครื่องหมายใน&#039;&#039;&#039;ช่อง &amp;quot;รวมในการคำนวณ (เดือนที่แช่แช็งแล้ว)&amp;quot; หรือ &amp;quot;รวมในการคำนวณ (เดือนที่ผ่านบัญชีแล้ว)&amp;quot;&#039;&#039;&#039; ตามต้องการ&lt;br /&gt;
&lt;br /&gt;
== คำอธิบายช่องข้อมูล ==&lt;br /&gt;
{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;จากเดือน... ถึงเดือน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || เดือนแรกและเดือนสุดท้ายที่จะคำนวณ&lt;br /&gt;
{{3stars}} ระบบจะนำยอดสิ้นงวดของเดือนสุดท้ายไปเขียนเป็นยอดยกมาของเดือนถัดไปด้วย&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlight2Head}} | &#039;&#039;&#039;เดือนที่แช่แข็งแล้ว&#039;&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;รวมในการคำนวณ&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || คำนวณข้อมูลสำหรับเดือนที่แช่แข็งแล้วด้วย&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || ใช้การตั้งค่าปัจจุบันแทนการตั้งค่าที่แช่แข็งไว้ &#039;&#039;(สำหรับเดือนที่ถูกแช่แข็ง)&#039;&#039; พร้อมเปลี่ยนการตั้งค่าที่แช่แข็งไว้ในเป็นเหมือนการตั้งค่าปัจจุบัน (ดูหัวข้อย่อย [[#การแช่แข็งการตั้งค่าต่างๆ|&amp;quot;การแช่แข็งการตั้งค่าต่างๆ&amp;quot;]])&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlight2Head}} | &#039;&#039;&#039;เดือนที่ผ่านบัญชีแล้ว&#039;&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;รวมในการคำนวณ&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || คำนวณข้อมูลสำหรับเดือนที่ผ่านบัญชีแล้วด้วย&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || ใช้การตั้งค่าปัจจุบันแทนการตั้งค่าที่แช่แข็งไว้ &#039;&#039;(สำหรับเดือนที่ผ่านบัญชี)&#039;&#039; พร้อมเปลี่ยนการตั้งค่าที่แช่แข็งไว้ในเป็นเหมือนการตั้งค่าปัจจุบัน (ดูหัวข้อย่อย [[#การแช่แข็งการตั้งค่าต่างๆ|&amp;quot;การแช่แข็งการตั้งค่าต่างๆ&amp;quot;]])&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แช่แข็ง/ผ่านบัญชี&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || เปลี่ยนสถานะการแช่แข็ง/ผ่านบัญชี (ดูหัวข้อย่อย [[#การแช่แข็ง/ผ่านบัญชี|&amp;quot;การแช่แข็ง/ผ่านบัญชี&amp;quot;]])&lt;br /&gt;
{{3stars}} เปลี่ยนค่าได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;แช่แข็งข้อมูล&amp;quot; และ/หรือ &amp;quot;ผ่านบัญชี&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{DangerText|&#039;&#039;&#039;&#039;&#039;{{3stars}} การแช่แข็งและการผ่านบัญชีไม่สามารถย้อนกลับได้ โปรดใช้ความระมัดระวังในการเลือก}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;เลือกโมดูล&#039;&#039;&#039; &#039;&#039;(เลือกโมดูลที่ต้องการคำนวณข้อมูลใหม่)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 style=&amp;quot;text-align:center;&amp;quot; | {{3stars}} ลำดับการทำงานของฟังก์ชันคำนวณข้อมูลใหม่จะทำย้อนลำดับโมดูลที่แสดงบนเพจ&amp;lt;br&amp;gt;เช่นในภาพ ระบบจะคำนวณโมดูลตามลำดับดังนี้&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;quot;ค่าจ้าง/เงินเดือน&amp;quot; → &amp;quot;สินทรัพย์&amp;quot; → &amp;quot;สินค้าคงคลัง&amp;quot; → &amp;quot;เจ้าหนี้/ลูกหนี้&amp;quot; → &amp;quot;บัญชีรายวัน&amp;quot; &#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== การแช่แข็ง/ผ่านบัญชี ==&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Monthlock stat.png|220px|thumb|right|alt=สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี|สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ฟังก์ชันการแช่แข็ง/ผ่านบัญชี&#039;&#039;&#039;มีไว้เพื่อความสะดวกในการตรวจสอบและการปิดกั้นการแก้ไขข้อมูล มีรายละเอียดดังนี้:&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูล:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่แช่แข็งไว้ จะ&#039;&#039;&#039;สามารถเพิ่มเติม/แก้ไข/ลบได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;ระงับการบันทึก/แก้ไขข้อมูล&amp;quot;&#039;&#039;&#039; เท่านั้น &#039;&#039;(หน่วยงานของผู้ใช้อาจกำหนดให้เฉพาะผู้ทำบัญชี หรือผู้ตรวจสอบบัญชีมีสิทธิ์นี้)&#039;&#039; เพื่อจำกัดการเปลี่ยนแปลงของข้อมูลให้มาจากวงแคบเท่านั้น ทำให้การตรวจสอบเป็นไปได้ง่ายและรวดเร็วขึ้น&lt;br /&gt;
* &#039;&#039;&#039;การผ่านบัญชี:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่ผ่านบัญชีแล้วจะ&#039;&#039;&#039;ไม่อนุญาตให้เพิ่มเติม/แก้ไข/ลบ&#039;&#039;&#039; หากผู้ใช้ต้องการปรับปรุงรายการในเดือนดังกล่าว ให้ผู้ใช้&#039;&#039;&#039;สร้างเอกสารปรับปรุง/เปลี่ยนแปลงในเดือนที่ยังไม่ได้ผ่านบัญชีแทน&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เมื่อวันที่ของ session ตกอยู่ในเดือนที่ถูกแช่แข็งหรือผ่านบัญชี จะปรากฏสัญลักษณ์บอกสถานะขึ้นกลางแถบชื่อบริษัทด้านบนของจอ&lt;br /&gt;
&lt;br /&gt;
=== การแช่แข็งการตั้งค่าต่างๆ ===&lt;br /&gt;
การแช่แข็งการตั้งค่าคือการคัดลอกการตั้งค่าในปัจจุบันเก็บเอาไว้ใช้สำหรับข้อมูลเฉพาะในเดือนนั้น โดยระบบจะแช่แข็งการตั้งค่าให้โดยอัตโนมัติสำหรับเดือนที่ผู้ใช้สั่งแช่แข็งหรือผ่านบัญชี ทั้งนี้ การตั้งค่าที่จะถูกแช่แข็งหมายรวมถึง &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;การตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;รูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เดือนที่มีการตั้งค่าแช่แข็งไว้จะไม่ใช้การตั้งค่าส่วนกลางของบริษัท แต่จะใช้การตั้งค่าที่แช่แข็งไว้ในการคำนวณ/จัดการข้อมูลแทน ดังนั้น ผู้ใช้สามารถเปลี่ยนการตั้งค่าของบริษัทเพื่อใช้ฟีเจอร์ใหม่ๆ ของโปรแกรมได้ โดยไม่กระทบกับวิธีการคำนวณข้อมูลเดือนก่อนๆ เช่น บริษัท A ดำเนินการมาจนถึงสิ้นเดือนธันวาคม 2024 และได้มีการเปลี่ยนแปลงรูปแบบการทำงานและรูปแบบการบันทึกบัญชี บริษัท A จะสามารถปรับการตั้งค่าของตนในระบบคูนิฟ็อกซ์ได้ดังนี้:&lt;br /&gt;
# &#039;&#039;&#039;สั่งแช่แข็ง (หรือผ่านบัญชี) ทุกๆ เดือนในอดีตจนถึงเดือนธันวาคม 2024:&#039;&#039;&#039; ระบบจะคัดลอกการตั้งค่าปัจจุบัน (ก่อนเปลี่ยนแปลง) เอาไว้ใช้ในช่วงเดือนข้อมูลดังกล่าว&lt;br /&gt;
# &#039;&#039;&#039;เปลี่ยนแปลงการตั้งค่าระบบ และรูปแบบการบันทึกบัญชี&#039;&#039;&#039;เพื่อรองรับรูปแบบการทำงานใหม่&lt;br /&gt;
# &#039;&#039;&#039;ใช้งานต่อตามปกติ:&#039;&#039;&#039;&lt;br /&gt;
#* ข้อมูลธุรกรรมใดๆ ของเดือนหลังจากธันวาคม 2024 ก็จะใช้การตั้งค่าใหม่ได้ทันที&lt;br /&gt;
#* ข้อมูลธุรกรรมที่ย้อนไปบันทึกเป็นของเดือนธันวาคม 2024 หรือก่อนหน้า (เช่นการปรับปรุงบัญชีเพื่อปิดงบ) รวมไปถึงการคำนวณข้อมูลใหม่ จะยังใช้การตั้งค่าเดิมที่แช่แข็งไว้&lt;br /&gt;
&lt;br /&gt;
==== การเปลี่ยนแปลงการตั้งค่าที่แช่แข็งไว้ ====&lt;br /&gt;
หากผู้ใช้ต้องการเปลี่ยนแปลงการตั้งค่าที่ถูกแช่แข็งไว้ สามารถทำได้ 2 วิธีดังนี้:&lt;br /&gt;
* เปลี่ยนวันที่ของ session เป็นเดือนที่ต้องการ แล้วแก้ไขการตั้งค่าผ่านเพจ &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;ตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;กำหนดรูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039; &#039;&#039;(วิธีนี้ใช้ไม่ได้สำหรับเดือนที่ผ่านบัญชีแล้ว)&#039;&#039;&lt;br /&gt;
* สั่งคำนวณข้อมูลของเดือนที่ต้องการใหม่ โดยทำเครื่องหมายที่&#039;&#039;&#039;ช่องข้อมูล &amp;quot;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4061</id>
		<title>คำนวณข้อมูลใหม่</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4061"/>
		<updated>2026-03-24T06:27:24Z</updated>

		<summary type="html">&lt;p&gt;Tenko: /* การเปลี่ยนแปลงการตั้งค่าที่แช่แข็งไว้ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
&lt;br /&gt;
== ตำแหน่งเมนู ==&lt;br /&gt;
&#039;&#039;&#039;[[เมนู &amp;quot;จัดการข้อมูล&amp;quot;]] → คำนวณข้อมูลใหม่&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== การเก็บข้อมูลธุรกรรมแบบแยกเดือน ==&lt;br /&gt;
=== แนวคิดเบื้องหลัง ===&lt;br /&gt;
ระบบคูนิฟ็อกซ์ถูกออกแบบให้เก็บข้อมูลธุรกรรมแยกเป็นรายเดือน การเลือกเก็บข้อมูลในลักษณะนี้มีแนวคิดคือ:&lt;br /&gt;
* &#039;&#039;&#039;ลดความเสี่ยงและผลกระทบของความเสียหาย:&#039;&#039;&#039; ฐานข้อมูลที่ถูกเขียนข้อมูลอยู่มีความเสี่ยงต่อความเสียหายมากกว่า ดังนั้นการแยกเก็บข้อมูลจึงเป็นวิธีหนึ่งในการจำกัดความเสี่ยงและจำนวนข้อมูลที่ได้รับผลกระทบเมื่อเกิดเหตุสุดวิสัยต่างๆ&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูลและการผ่านบัญชี:&#039;&#039;&#039; ทำให้ผู้ใช้สามารถ[[#การแช่แข็ง/ผ่านบัญชี|แช่แข็งหรือปิดกั้นการแก้ไข]]ข้อมูลเป็นเดือนๆ ได้ เพื่อความสะดวกในการตรวจสอบและเก็บรักษาข้อมูล&lt;br /&gt;
* &#039;&#039;&#039;จำกัดขนาดของข้อมูลชุดทำงาน:&#039;&#039;&#039; การแยกเก็บข้อมูลจะช่วยรักษาขนาดของฐานข้อมูลชุดทำงานไม่ให้มีขนาดใหญ่เกินไป ทำให้การอ่านและเขียนข้อมูลมีความรวดเร็วสม่ำเสมอตลอดการใช้งาน&lt;br /&gt;
* &#039;&#039;&#039;ไม่จำเป็นต้องล้างข้อมูลเมื่อสิ้นปี:&#039;&#039;&#039; เมื่อฐานข้อมูลชุดทำงานไม่ได้มีขนาดใหญ่ขึ้นไปเรื่อยๆ ไม่จำกัด การล้างข้อมูลทุกสิ้นปีก็ไม่ใช่เรื่องจำเป็นอีกต่อไป ผู้ใช้สามารถเรียกดูข้อมูลดิบชุดจริงย้อนหลังได้ไม่จำกัด รวมถึงสามารถเรียกรายงานย้อนหลังต่อเนื่องได้&lt;br /&gt;
&lt;br /&gt;
วิธีการเก็บข้อมูลวิธีนี้มิได้เป็นวิธีเฉพาะตัวของคูนิฟ็อกซ์เพียงรายเดียวแต่อย่างใด อย่างไรก็ตาม เนื่องจากซอฟต์แวร์ลักษณะเดียวกับส่วนใหญ่เลือกเก็บข้อมูลเป็นฐานข้อมูลเดียว ผู้ใช้อาจพบว่าวงจรการทำงานภายใต้ระบบคูนิฟ็อกซ์แตกต่างไปจากซอฟต์แวร์อื่นที่เคยใช้บ้าง&lt;br /&gt;
&lt;br /&gt;
=== ข้อเสนอแนะในการปฏิบัติงาน ===&lt;br /&gt;
การเก็บข้อมูลแบบแยกเดือนนี้ ทำให้คูนิฟ็อกซ์มีการทำงานที่อาจต้องปรับความเคยชินเล็กน้อยอยู่ 2 ประการหลักๆ ได้แก่:&lt;br /&gt;
* &#039;&#039;&#039;คูนิฟ็อกซ์ใช้วันที่ของ session เพื่อเลือกฐานข้อมูลชุดทำงาน:&#039;&#039;&#039; คูนิฟ็อกซ์จะอ่านและเขียนข้อมูลธุรกรรมโดยจะยึดเดือนตามวันที่ของ session ดังนั้น &#039;&#039;&#039;ผู้ใช้จะมองเห็นและแก้ไขข้อมูลธุรกรรมดิบได้ทีละเดือน&#039;&#039;&#039; หากผู้ใช้ต้องการดูหรือแก้ไขข้อมูลของเดือนอื่น สามารถทำได้โดย&#039;&#039;&#039;[[กำหนดวันที่/เวลา|เปลี่ยนวันที่ของ session (คลิกที่วัน/เวลาของ session บนแถบชื่อบริษัท)]]&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;p id=&amp;quot;ผลยกยอดเบื้องต้น&amp;quot;&amp;gt;&#039;&#039;&#039;ธุรกรรมต่างๆ จะไม่ปรากฏผลข้ามเดือนจนกว่าจะมีการคำนวณข้อมูลยกยอด:&#039;&#039;&#039; เนื่องจากคูนิฟ็อกซ์เก็บข้อมูลธุรกรรมของบริษัทโดยไม่ล้างข้อมูลดิบ ชุดข้อมูลของบริษัทอาจครอบคลุมช่วงเวลาหลายปี ดังนั้นระบบคูนิฟ็อกซ์จะ&#039;&#039;&#039;ไม่คำนวณผลกระทบของธุรกรรมข้ามเดือนให้โดยอัตโนมัติ&#039;&#039;&#039;จนกว่าผู้ใช้จะสั่งคำนวณข้อมูลใหม่หรือ[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ระบบคำนวณข้อมูลใหม่โดยอัตโนมัติตามเวลาที่ตั้งไว้]]&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;อย่างไรก็ตาม ระบบคูนิฟ็อกซ์มี&#039;&#039;&#039;[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ฟังก์ชันผลยกยอดเบื้องต้น]]&#039;&#039;&#039; เพื่อคำนวณผลกระทบของธุรกรรมที่ผู้ใช้บันทึก/เปลี่ยนแปลงค่าไปยังเดือนที่เลือกไว้เพียง 1 หรือ 2 เดือนได้ เช่นนี้ ผู้ใช้ก็จะสามารถทำงานระหว่างวันได้โดยสะดวก และปล่อยให้การคำนวณข้อมูลใหม่เป็นงานสำหรับสิ้นวันเพียงครั้งเดียว&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;ตัวอย่างเช่น เมื่อต้นเดือนตุลาคม มีสินค้าในคลังทั้งหมด 100 ชิ้น บันทึกขายไป 10 ชิ้นในวันที่ 04 ตุลาคม ผู้ใช้จะเห็นจำนวนสินค้าในคลังดังนี้&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=2 style=&amp;quot;width:120px;&amp;quot; | วันที่ของ session || colspan=2 | ฟังก์ชันผลยกยอดเบื้องต้น || rowspan=2 | คำอธิบาย&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:75px;&amp;quot; | ปิด !! style=&amp;quot;width:75px;&amp;quot; | เปิด&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;ก่อนคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมที่บันทึกเห็นผลกระทบทันทีภายในเดือนเดียวกัน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน || style=&amp;quot;text-align:center;&amp;quot; | 100 ชิ้น || style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมในเดือนตุลาคมไม่ส่งผลกับเดือนอื่นๆ หากไม่เปิดใช้งานฟังก์ชันผลยกยอดเบื้องต้น&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;หลังคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 rowspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || rowspan=2 | ในการคำนวณข้อมูลใหม่ ระบบจะยกยอดสิ้นงวดเดือนตุลาคมไปเป็นยอดต้นงวดเดือนพฤศจิกายน ทำให้ธุรกรรมในเดือนตุลาคมส่งผลอย่างถูกต้องในเดือนพฤศิกายน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน&lt;br /&gt;
|}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== วัตถุประสงค์ ==&lt;br /&gt;
การคำนวณข้อมูลใหม่ในระบบคูนิฟ็อกซ์มีวัตถุประสงค์ดังต่อไปนี้:&lt;br /&gt;
* &#039;&#039;&#039;ตรวจเช็คความสมบูรณ์ของฐานข้อมูล:&#039;&#039;&#039; หากไฟล์ฐานข้อมูลหรือดรรชนีเกิดความเสียหายขึ้น ผู้ใช้จะได้ทราบและกู้คืนข้อมูลชุดล่าสุดที่ใช้งานได้&lt;br /&gt;
* &#039;&#039;&#039;สร้างรายการประวัติและบัญชีรายวันใหม่:&#039;&#039;&#039; ระบบจะอ้างอิงจากข้อมูลธุรกรรมดิบที่ผู้ใช้บันทึกเพื่อล้างรายการทดระหว่างวัน ซึ่งเกิดจากการแก้ไขหรือลบข้อมูลธุรกรรม หรือกำจัดรายการที่บันทึก/คำนวณผิดพลาดเนื่องจากสถานการณ์ไม่ปกติต่างๆ&lt;br /&gt;
** ระบบจะสร้าง&#039;&#039;&#039;รายการประวัติต่างๆ&#039;&#039;&#039; เช่น ประวัติการเข้า-ออกสินค้าคงคลัง, ประวัติเจ้าหนี้/ลูกหนี้รายตัว, ฯลฯ ใหม่ทั้งหมด&lt;br /&gt;
** สำหรับประเภทธุรกรรมที่มีการบันทึกบัญชีรายวันอัตโนมัติ &#039;&#039;(และไม่ได้ถูกล็อคโดยผู้ใช้)&#039;&#039; ระบบจะ&#039;&#039;&#039;ลงบันทึกบัญชีรายวัน&#039;&#039;&#039;ให้ใหม่ พร้อม&#039;&#039;&#039;ล้างข้อมูลบัญชีรายวันที่ไม่มีข้อมูลธุรกรรมดิบ&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;คำนวณผลลัพท์ของธุรกรรมภายในเดือน:&#039;&#039;&#039; เพื่อหายอดสิ้นงวดและยอดยกมาสำหรับเดือนถัดไป&lt;br /&gt;
&lt;br /&gt;
== การใช้งาน ==&lt;br /&gt;
[[ไฟล์:Recalc page.png|720px|thumb|center|alt=เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;|เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
# เข้าสู่&#039;&#039;&#039;เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;เลือกช่วงข้อมูลและโมดูล&#039;&#039;&#039;ที่ต้องการ&lt;br /&gt;
# คลิก&#039;&#039;&#039;ปุ่ม &amp;quot;ส่งคำขอ&amp;quot;&#039;&#039;&#039; เพื่อเริ่มดำเนินการ&lt;br /&gt;
&lt;br /&gt;
{{3stars}} &#039;&#039;&#039;โดยปกติของระบบจะข้ามการคำนวณข้อมูลสำหรับเดือนที่แช่แข็งหรือผ่านบัญชีแล้ว&#039;&#039;&#039; หากผู้ใช้ต้องการคำนวณข้อมูลใหม่ในเดือนดังกล่าว ให้ผู้ใช้ทำเครื่องหมายใน&#039;&#039;&#039;ช่อง &amp;quot;รวมในการคำนวณ (เดือนที่แช่แช็งแล้ว)&amp;quot; หรือ &amp;quot;รวมในการคำนวณ (เดือนที่ผ่านบัญชีแล้ว)&amp;quot;&#039;&#039;&#039; ตามต้องการ&lt;br /&gt;
&lt;br /&gt;
== คำอธิบายช่องข้อมูล ==&lt;br /&gt;
{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;จากเดือน... ถึงเดือน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || เดือนแรกและเดือนสุดท้ายที่จะคำนวณ&lt;br /&gt;
{{3stars}} ระบบจะนำยอดสิ้นงวดของเดือนสุดท้ายไปเขียนเป็นยอดยกมาของเดือนถัดไปด้วย&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlight2Head}} | &#039;&#039;&#039;เดือนที่แช่แข็งแล้ว&#039;&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;รวมในการคำนวณ&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || คำนวณข้อมูลสำหรับเดือนที่แช่แข็งแล้วด้วย&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || ใช้การตั้งค่าปัจจุบันแทนการตั้งค่าที่แช่แข็งไว้ &#039;&#039;(สำหรับเดือนที่ถูกแช่แข็ง)&#039;&#039; พร้อมเปลี่ยนการตั้งค่าที่แช่แข็งไว้ในเป็นเหมือนการตั้งค่าปัจจุบัน (ดูหัวข้อย่อย [[#การแช่แข็งการตั้งค่าต่างๆ|&amp;quot;การแช่แข็งการตั้งค่าต่างๆ&amp;quot;]])&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlight2Head}} | &#039;&#039;&#039;เดือนที่ผ่านบัญชีแล้ว&#039;&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;รวมในการคำนวณ&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || คำนวณข้อมูลสำหรับเดือนที่ผ่านบัญชีแล้วด้วย&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || ใช้การตั้งค่าปัจจุบันแทนการตั้งค่าที่แช่แข็งไว้ &#039;&#039;(สำหรับเดือนที่ผ่านบัญชี)&#039;&#039; พร้อมเปลี่ยนการตั้งค่าที่แช่แข็งไว้ในเป็นเหมือนการตั้งค่าปัจจุบัน (ดูหัวข้อย่อย [[#การแช่แข็งการตั้งค่าต่างๆ|&amp;quot;การแช่แข็งการตั้งค่าต่างๆ&amp;quot;]])&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แช่แข็ง/ผ่านบัญชี&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || เปลี่ยนสถานะการแช่แข็ง/ผ่านบัญชี (ดูหัวข้อย่อย [[#การแช่แข็ง/ผ่านบัญชี|&amp;quot;การแช่แข็ง/ผ่านบัญชี&amp;quot;]])&lt;br /&gt;
{{3stars}} เปลี่ยนค่าได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;ระงับการบันทึก/แก้ไขข้อมูล&amp;quot; และ/หรือ &amp;quot;ผ่านบัญชี&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{DangerText|&#039;&#039;&#039;&#039;&#039;{{3stars}} การแช่แข็งและการผ่านบัญชีไม่สามารถย้อนกลับได้ โปรดใช้ความระมัดระวังในการเลือก}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;เลือกโมดูล&#039;&#039;&#039; &#039;&#039;(เลือกโมดูลที่ต้องการคำนวณข้อมูลใหม่)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 style=&amp;quot;text-align:center;&amp;quot; | {{3stars}} ลำดับการทำงานของฟังก์ชันคำนวณข้อมูลใหม่จะทำย้อนลำดับโมดูลที่แสดงบนเพจ&amp;lt;br&amp;gt;เช่นในภาพ ระบบจะคำนวณโมดูลตามลำดับดังนี้&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;quot;ค่าจ้าง/เงินเดือน&amp;quot; → &amp;quot;สินทรัพย์&amp;quot; → &amp;quot;สินค้าคงคลัง&amp;quot; → &amp;quot;เจ้าหนี้/ลูกหนี้&amp;quot; → &amp;quot;บัญชีรายวัน&amp;quot; &#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== การแช่แข็ง/ผ่านบัญชี ==&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Monthlock stat.png|220px|thumb|right|alt=สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี|สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ฟังก์ชันการแช่แข็ง/ผ่านบัญชี&#039;&#039;&#039;มีไว้เพื่อความสะดวกในการตรวจสอบและการปิดกั้นการแก้ไขข้อมูล มีรายละเอียดดังนี้:&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูล:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่แช่แข็งไว้ จะ&#039;&#039;&#039;สามารถเพิ่มเติม/แก้ไข/ลบได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;ระงับการบันทึก/แก้ไขข้อมูล&amp;quot;&#039;&#039;&#039; เท่านั้น &#039;&#039;(หน่วยงานของผู้ใช้อาจกำหนดให้เฉพาะผู้ทำบัญชี หรือผู้ตรวจสอบบัญชีมีสิทธิ์นี้)&#039;&#039; เพื่อจำกัดการเปลี่ยนแปลงของข้อมูลให้มาจากวงแคบเท่านั้น ทำให้การตรวจสอบเป็นไปได้ง่ายและรวดเร็วขึ้น&lt;br /&gt;
* &#039;&#039;&#039;การผ่านบัญชี:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่ผ่านบัญชีแล้วจะ&#039;&#039;&#039;ไม่อนุญาตให้เพิ่มเติม/แก้ไข/ลบ&#039;&#039;&#039; หากผู้ใช้ต้องการปรับปรุงรายการในเดือนดังกล่าว ให้ผู้ใช้&#039;&#039;&#039;สร้างเอกสารปรับปรุง/เปลี่ยนแปลงในเดือนที่ยังไม่ได้ผ่านบัญชีแทน&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เมื่อวันที่ของ session ตกอยู่ในเดือนที่ถูกแช่แข็งหรือผ่านบัญชี จะปรากฏสัญลักษณ์บอกสถานะขึ้นกลางแถบชื่อบริษัทด้านบนของจอ&lt;br /&gt;
&lt;br /&gt;
=== การแช่แข็งการตั้งค่าต่างๆ ===&lt;br /&gt;
การแช่แข็งการตั้งค่าคือการคัดลอกการตั้งค่าในปัจจุบันเก็บเอาไว้ใช้สำหรับข้อมูลเฉพาะในเดือนนั้น โดยระบบจะแช่แข็งการตั้งค่าให้โดยอัตโนมัติสำหรับเดือนที่ผู้ใช้สั่งแช่แข็งหรือผ่านบัญชี ทั้งนี้ การตั้งค่าที่จะถูกแช่แข็งหมายรวมถึง &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;การตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;รูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เดือนที่มีการตั้งค่าแช่แข็งไว้จะไม่ใช้การตั้งค่าส่วนกลางของบริษัท แต่จะใช้การตั้งค่าที่แช่แข็งไว้ในการคำนวณ/จัดการข้อมูลแทน ดังนั้น ผู้ใช้สามารถเปลี่ยนการตั้งค่าของบริษัทเพื่อใช้ฟีเจอร์ใหม่ๆ ของโปรแกรมได้ โดยไม่กระทบกับวิธีการคำนวณข้อมูลเดือนก่อนๆ เช่น บริษัท A ดำเนินการมาจนถึงสิ้นเดือนธันวาคม 2024 และได้มีการเปลี่ยนแปลงรูปแบบการทำงานและรูปแบบการบันทึกบัญชี บริษัท A จะสามารถปรับการตั้งค่าของตนในระบบคูนิฟ็อกซ์ได้ดังนี้:&lt;br /&gt;
# &#039;&#039;&#039;สั่งแช่แข็ง (หรือผ่านบัญชี) ทุกๆ เดือนในอดีตจนถึงเดือนธันวาคม 2024:&#039;&#039;&#039; ระบบจะคัดลอกการตั้งค่าปัจจุบัน (ก่อนเปลี่ยนแปลง) เอาไว้ใช้ในช่วงเดือนข้อมูลดังกล่าว&lt;br /&gt;
# &#039;&#039;&#039;เปลี่ยนแปลงการตั้งค่าระบบ และรูปแบบการบันทึกบัญชี&#039;&#039;&#039;เพื่อรองรับรูปแบบการทำงานใหม่&lt;br /&gt;
# &#039;&#039;&#039;ใช้งานต่อตามปกติ:&#039;&#039;&#039;&lt;br /&gt;
#* ข้อมูลธุรกรรมใดๆ ของเดือนหลังจากธันวาคม 2024 ก็จะใช้การตั้งค่าใหม่ได้ทันที&lt;br /&gt;
#* ข้อมูลธุรกรรมที่ย้อนไปบันทึกเป็นของเดือนธันวาคม 2024 หรือก่อนหน้า (เช่นการปรับปรุงบัญชีเพื่อปิดงบ) รวมไปถึงการคำนวณข้อมูลใหม่ จะยังใช้การตั้งค่าเดิมที่แช่แข็งไว้&lt;br /&gt;
&lt;br /&gt;
==== การเปลี่ยนแปลงการตั้งค่าที่แช่แข็งไว้ ====&lt;br /&gt;
หากผู้ใช้ต้องการเปลี่ยนแปลงการตั้งค่าที่ถูกแช่แข็งไว้ สามารถทำได้ 2 วิธีดังนี้:&lt;br /&gt;
* เปลี่ยนวันที่ของ session เป็นเดือนที่ต้องการ แล้วแก้ไขการตั้งค่าผ่านเพจ &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;ตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;กำหนดรูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039; &#039;&#039;(วิธีนี้ใช้ไม่ได้สำหรับเดือนที่ผ่านบัญชีแล้ว)&#039;&#039;&lt;br /&gt;
* สั่งคำนวณข้อมูลของเดือนที่ต้องการใหม่ โดยทำเครื่องหมายที่&#039;&#039;&#039;ช่องข้อมูล &amp;quot;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Recalc_page.png&amp;diff=4060</id>
		<title>ไฟล์:Recalc page.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Recalc_page.png&amp;diff=4060"/>
		<updated>2026-03-24T06:25:34Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Recalc page.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4059</id>
		<title>คำนวณข้อมูลใหม่</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4059"/>
		<updated>2026-03-24T06:24:41Z</updated>

		<summary type="html">&lt;p&gt;Tenko: /* คำอธิบายช่องข้อมูล */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
&lt;br /&gt;
== ตำแหน่งเมนู ==&lt;br /&gt;
&#039;&#039;&#039;[[เมนู &amp;quot;จัดการข้อมูล&amp;quot;]] → คำนวณข้อมูลใหม่&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== การเก็บข้อมูลธุรกรรมแบบแยกเดือน ==&lt;br /&gt;
=== แนวคิดเบื้องหลัง ===&lt;br /&gt;
ระบบคูนิฟ็อกซ์ถูกออกแบบให้เก็บข้อมูลธุรกรรมแยกเป็นรายเดือน การเลือกเก็บข้อมูลในลักษณะนี้มีแนวคิดคือ:&lt;br /&gt;
* &#039;&#039;&#039;ลดความเสี่ยงและผลกระทบของความเสียหาย:&#039;&#039;&#039; ฐานข้อมูลที่ถูกเขียนข้อมูลอยู่มีความเสี่ยงต่อความเสียหายมากกว่า ดังนั้นการแยกเก็บข้อมูลจึงเป็นวิธีหนึ่งในการจำกัดความเสี่ยงและจำนวนข้อมูลที่ได้รับผลกระทบเมื่อเกิดเหตุสุดวิสัยต่างๆ&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูลและการผ่านบัญชี:&#039;&#039;&#039; ทำให้ผู้ใช้สามารถ[[#การแช่แข็ง/ผ่านบัญชี|แช่แข็งหรือปิดกั้นการแก้ไข]]ข้อมูลเป็นเดือนๆ ได้ เพื่อความสะดวกในการตรวจสอบและเก็บรักษาข้อมูล&lt;br /&gt;
* &#039;&#039;&#039;จำกัดขนาดของข้อมูลชุดทำงาน:&#039;&#039;&#039; การแยกเก็บข้อมูลจะช่วยรักษาขนาดของฐานข้อมูลชุดทำงานไม่ให้มีขนาดใหญ่เกินไป ทำให้การอ่านและเขียนข้อมูลมีความรวดเร็วสม่ำเสมอตลอดการใช้งาน&lt;br /&gt;
* &#039;&#039;&#039;ไม่จำเป็นต้องล้างข้อมูลเมื่อสิ้นปี:&#039;&#039;&#039; เมื่อฐานข้อมูลชุดทำงานไม่ได้มีขนาดใหญ่ขึ้นไปเรื่อยๆ ไม่จำกัด การล้างข้อมูลทุกสิ้นปีก็ไม่ใช่เรื่องจำเป็นอีกต่อไป ผู้ใช้สามารถเรียกดูข้อมูลดิบชุดจริงย้อนหลังได้ไม่จำกัด รวมถึงสามารถเรียกรายงานย้อนหลังต่อเนื่องได้&lt;br /&gt;
&lt;br /&gt;
วิธีการเก็บข้อมูลวิธีนี้มิได้เป็นวิธีเฉพาะตัวของคูนิฟ็อกซ์เพียงรายเดียวแต่อย่างใด อย่างไรก็ตาม เนื่องจากซอฟต์แวร์ลักษณะเดียวกับส่วนใหญ่เลือกเก็บข้อมูลเป็นฐานข้อมูลเดียว ผู้ใช้อาจพบว่าวงจรการทำงานภายใต้ระบบคูนิฟ็อกซ์แตกต่างไปจากซอฟต์แวร์อื่นที่เคยใช้บ้าง&lt;br /&gt;
&lt;br /&gt;
=== ข้อเสนอแนะในการปฏิบัติงาน ===&lt;br /&gt;
การเก็บข้อมูลแบบแยกเดือนนี้ ทำให้คูนิฟ็อกซ์มีการทำงานที่อาจต้องปรับความเคยชินเล็กน้อยอยู่ 2 ประการหลักๆ ได้แก่:&lt;br /&gt;
* &#039;&#039;&#039;คูนิฟ็อกซ์ใช้วันที่ของ session เพื่อเลือกฐานข้อมูลชุดทำงาน:&#039;&#039;&#039; คูนิฟ็อกซ์จะอ่านและเขียนข้อมูลธุรกรรมโดยจะยึดเดือนตามวันที่ของ session ดังนั้น &#039;&#039;&#039;ผู้ใช้จะมองเห็นและแก้ไขข้อมูลธุรกรรมดิบได้ทีละเดือน&#039;&#039;&#039; หากผู้ใช้ต้องการดูหรือแก้ไขข้อมูลของเดือนอื่น สามารถทำได้โดย&#039;&#039;&#039;[[กำหนดวันที่/เวลา|เปลี่ยนวันที่ของ session (คลิกที่วัน/เวลาของ session บนแถบชื่อบริษัท)]]&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;p id=&amp;quot;ผลยกยอดเบื้องต้น&amp;quot;&amp;gt;&#039;&#039;&#039;ธุรกรรมต่างๆ จะไม่ปรากฏผลข้ามเดือนจนกว่าจะมีการคำนวณข้อมูลยกยอด:&#039;&#039;&#039; เนื่องจากคูนิฟ็อกซ์เก็บข้อมูลธุรกรรมของบริษัทโดยไม่ล้างข้อมูลดิบ ชุดข้อมูลของบริษัทอาจครอบคลุมช่วงเวลาหลายปี ดังนั้นระบบคูนิฟ็อกซ์จะ&#039;&#039;&#039;ไม่คำนวณผลกระทบของธุรกรรมข้ามเดือนให้โดยอัตโนมัติ&#039;&#039;&#039;จนกว่าผู้ใช้จะสั่งคำนวณข้อมูลใหม่หรือ[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ระบบคำนวณข้อมูลใหม่โดยอัตโนมัติตามเวลาที่ตั้งไว้]]&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;อย่างไรก็ตาม ระบบคูนิฟ็อกซ์มี&#039;&#039;&#039;[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ฟังก์ชันผลยกยอดเบื้องต้น]]&#039;&#039;&#039; เพื่อคำนวณผลกระทบของธุรกรรมที่ผู้ใช้บันทึก/เปลี่ยนแปลงค่าไปยังเดือนที่เลือกไว้เพียง 1 หรือ 2 เดือนได้ เช่นนี้ ผู้ใช้ก็จะสามารถทำงานระหว่างวันได้โดยสะดวก และปล่อยให้การคำนวณข้อมูลใหม่เป็นงานสำหรับสิ้นวันเพียงครั้งเดียว&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;ตัวอย่างเช่น เมื่อต้นเดือนตุลาคม มีสินค้าในคลังทั้งหมด 100 ชิ้น บันทึกขายไป 10 ชิ้นในวันที่ 04 ตุลาคม ผู้ใช้จะเห็นจำนวนสินค้าในคลังดังนี้&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=2 style=&amp;quot;width:120px;&amp;quot; | วันที่ของ session || colspan=2 | ฟังก์ชันผลยกยอดเบื้องต้น || rowspan=2 | คำอธิบาย&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:75px;&amp;quot; | ปิด !! style=&amp;quot;width:75px;&amp;quot; | เปิด&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;ก่อนคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมที่บันทึกเห็นผลกระทบทันทีภายในเดือนเดียวกัน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน || style=&amp;quot;text-align:center;&amp;quot; | 100 ชิ้น || style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมในเดือนตุลาคมไม่ส่งผลกับเดือนอื่นๆ หากไม่เปิดใช้งานฟังก์ชันผลยกยอดเบื้องต้น&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;หลังคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 rowspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || rowspan=2 | ในการคำนวณข้อมูลใหม่ ระบบจะยกยอดสิ้นงวดเดือนตุลาคมไปเป็นยอดต้นงวดเดือนพฤศจิกายน ทำให้ธุรกรรมในเดือนตุลาคมส่งผลอย่างถูกต้องในเดือนพฤศิกายน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน&lt;br /&gt;
|}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== วัตถุประสงค์ ==&lt;br /&gt;
การคำนวณข้อมูลใหม่ในระบบคูนิฟ็อกซ์มีวัตถุประสงค์ดังต่อไปนี้:&lt;br /&gt;
* &#039;&#039;&#039;ตรวจเช็คความสมบูรณ์ของฐานข้อมูล:&#039;&#039;&#039; หากไฟล์ฐานข้อมูลหรือดรรชนีเกิดความเสียหายขึ้น ผู้ใช้จะได้ทราบและกู้คืนข้อมูลชุดล่าสุดที่ใช้งานได้&lt;br /&gt;
* &#039;&#039;&#039;สร้างรายการประวัติและบัญชีรายวันใหม่:&#039;&#039;&#039; ระบบจะอ้างอิงจากข้อมูลธุรกรรมดิบที่ผู้ใช้บันทึกเพื่อล้างรายการทดระหว่างวัน ซึ่งเกิดจากการแก้ไขหรือลบข้อมูลธุรกรรม หรือกำจัดรายการที่บันทึก/คำนวณผิดพลาดเนื่องจากสถานการณ์ไม่ปกติต่างๆ&lt;br /&gt;
** ระบบจะสร้าง&#039;&#039;&#039;รายการประวัติต่างๆ&#039;&#039;&#039; เช่น ประวัติการเข้า-ออกสินค้าคงคลัง, ประวัติเจ้าหนี้/ลูกหนี้รายตัว, ฯลฯ ใหม่ทั้งหมด&lt;br /&gt;
** สำหรับประเภทธุรกรรมที่มีการบันทึกบัญชีรายวันอัตโนมัติ &#039;&#039;(และไม่ได้ถูกล็อคโดยผู้ใช้)&#039;&#039; ระบบจะ&#039;&#039;&#039;ลงบันทึกบัญชีรายวัน&#039;&#039;&#039;ให้ใหม่ พร้อม&#039;&#039;&#039;ล้างข้อมูลบัญชีรายวันที่ไม่มีข้อมูลธุรกรรมดิบ&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;คำนวณผลลัพท์ของธุรกรรมภายในเดือน:&#039;&#039;&#039; เพื่อหายอดสิ้นงวดและยอดยกมาสำหรับเดือนถัดไป&lt;br /&gt;
&lt;br /&gt;
== การใช้งาน ==&lt;br /&gt;
[[ไฟล์:Recalc page.png|720px|thumb|center|alt=เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;|เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
# เข้าสู่&#039;&#039;&#039;เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;เลือกช่วงข้อมูลและโมดูล&#039;&#039;&#039;ที่ต้องการ&lt;br /&gt;
# คลิก&#039;&#039;&#039;ปุ่ม &amp;quot;ส่งคำขอ&amp;quot;&#039;&#039;&#039; เพื่อเริ่มดำเนินการ&lt;br /&gt;
&lt;br /&gt;
{{3stars}} &#039;&#039;&#039;โดยปกติของระบบจะข้ามการคำนวณข้อมูลสำหรับเดือนที่แช่แข็งหรือผ่านบัญชีแล้ว&#039;&#039;&#039; หากผู้ใช้ต้องการคำนวณข้อมูลใหม่ในเดือนดังกล่าว ให้ผู้ใช้ทำเครื่องหมายใน&#039;&#039;&#039;ช่อง &amp;quot;รวมในการคำนวณ (เดือนที่แช่แช็งแล้ว)&amp;quot; หรือ &amp;quot;รวมในการคำนวณ (เดือนที่ผ่านบัญชีแล้ว)&amp;quot;&#039;&#039;&#039; ตามต้องการ&lt;br /&gt;
&lt;br /&gt;
== คำอธิบายช่องข้อมูล ==&lt;br /&gt;
{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;จากเดือน... ถึงเดือน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || เดือนแรกและเดือนสุดท้ายที่จะคำนวณ&lt;br /&gt;
{{3stars}} ระบบจะนำยอดสิ้นงวดของเดือนสุดท้ายไปเขียนเป็นยอดยกมาของเดือนถัดไปด้วย&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlight2Head}} | &#039;&#039;&#039;เดือนที่แช่แข็งแล้ว&#039;&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;รวมในการคำนวณ&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || คำนวณข้อมูลสำหรับเดือนที่แช่แข็งแล้วด้วย&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || ใช้การตั้งค่าปัจจุบันแทนการตั้งค่าที่แช่แข็งไว้ &#039;&#039;(สำหรับเดือนที่ถูกแช่แข็ง)&#039;&#039; พร้อมเปลี่ยนการตั้งค่าที่แช่แข็งไว้ในเป็นเหมือนการตั้งค่าปัจจุบัน (ดูหัวข้อย่อย [[#การแช่แข็งการตั้งค่าต่างๆ|&amp;quot;การแช่แข็งการตั้งค่าต่างๆ&amp;quot;]])&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlight2Head}} | &#039;&#039;&#039;เดือนที่ผ่านบัญชีแล้ว&#039;&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;รวมในการคำนวณ&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || คำนวณข้อมูลสำหรับเดือนที่ผ่านบัญชีแล้วด้วย&lt;br /&gt;
|- {{TableHighlight2|do_center=false}}&lt;br /&gt;
| &#039;&#039;&#039;ใช้และจัดเก็บการตั้งค่าปัจจุบัน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || ใช้การตั้งค่าปัจจุบันแทนการตั้งค่าที่แช่แข็งไว้ &#039;&#039;(สำหรับเดือนที่ผ่านบัญชี)&#039;&#039; พร้อมเปลี่ยนการตั้งค่าที่แช่แข็งไว้ในเป็นเหมือนการตั้งค่าปัจจุบัน (ดูหัวข้อย่อย [[#การแช่แข็งการตั้งค่าต่างๆ|&amp;quot;การแช่แข็งการตั้งค่าต่างๆ&amp;quot;]])&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แช่แข็ง/ผ่านบัญชี&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || เปลี่ยนสถานะการแช่แข็ง/ผ่านบัญชี (ดูหัวข้อย่อย [[#การแช่แข็ง/ผ่านบัญชี|&amp;quot;การแช่แข็ง/ผ่านบัญชี&amp;quot;]])&lt;br /&gt;
{{3stars}} เปลี่ยนค่าได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;ระงับการบันทึก/แก้ไขข้อมูล&amp;quot; และ/หรือ &amp;quot;ผ่านบัญชี&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{DangerText|&#039;&#039;&#039;&#039;&#039;{{3stars}} การแช่แข็งและการผ่านบัญชีไม่สามารถย้อนกลับได้ โปรดใช้ความระมัดระวังในการเลือก}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;เลือกโมดูล&#039;&#039;&#039; &#039;&#039;(เลือกโมดูลที่ต้องการคำนวณข้อมูลใหม่)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 style=&amp;quot;text-align:center;&amp;quot; | {{3stars}} ลำดับการทำงานของฟังก์ชันคำนวณข้อมูลใหม่จะทำย้อนลำดับโมดูลที่แสดงบนเพจ&amp;lt;br&amp;gt;เช่นในภาพ ระบบจะคำนวณโมดูลตามลำดับดังนี้&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;quot;ค่าจ้าง/เงินเดือน&amp;quot; → &amp;quot;สินทรัพย์&amp;quot; → &amp;quot;สินค้าคงคลัง&amp;quot; → &amp;quot;เจ้าหนี้/ลูกหนี้&amp;quot; → &amp;quot;บัญชีรายวัน&amp;quot; &#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== การแช่แข็ง/ผ่านบัญชี ==&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Monthlock stat.png|220px|thumb|right|alt=สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี|สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ฟังก์ชันการแช่แข็ง/ผ่านบัญชี&#039;&#039;&#039;มีไว้เพื่อความสะดวกในการตรวจสอบและการปิดกั้นการแก้ไขข้อมูล มีรายละเอียดดังนี้:&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูล:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่แช่แข็งไว้ จะ&#039;&#039;&#039;สามารถเพิ่มเติม/แก้ไข/ลบได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;ระงับการบันทึก/แก้ไขข้อมูล&amp;quot;&#039;&#039;&#039; เท่านั้น &#039;&#039;(หน่วยงานของผู้ใช้อาจกำหนดให้เฉพาะผู้ทำบัญชี หรือผู้ตรวจสอบบัญชีมีสิทธิ์นี้)&#039;&#039; เพื่อจำกัดการเปลี่ยนแปลงของข้อมูลให้มาจากวงแคบเท่านั้น ทำให้การตรวจสอบเป็นไปได้ง่ายและรวดเร็วขึ้น&lt;br /&gt;
* &#039;&#039;&#039;การผ่านบัญชี:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่ผ่านบัญชีแล้วจะ&#039;&#039;&#039;ไม่อนุญาตให้เพิ่มเติม/แก้ไข/ลบ&#039;&#039;&#039; หากผู้ใช้ต้องการปรับปรุงรายการในเดือนดังกล่าว ให้ผู้ใช้&#039;&#039;&#039;สร้างเอกสารปรับปรุง/เปลี่ยนแปลงในเดือนที่ยังไม่ได้ผ่านบัญชีแทน&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เมื่อวันที่ของ session ตกอยู่ในเดือนที่ถูกแช่แข็งหรือผ่านบัญชี จะปรากฏสัญลักษณ์บอกสถานะขึ้นกลางแถบชื่อบริษัทด้านบนของจอ&lt;br /&gt;
&lt;br /&gt;
=== การแช่แข็งการตั้งค่าต่างๆ ===&lt;br /&gt;
การแช่แข็งการตั้งค่าคือการคัดลอกการตั้งค่าในปัจจุบันเก็บเอาไว้ใช้สำหรับข้อมูลเฉพาะในเดือนนั้น โดยระบบจะแช่แข็งการตั้งค่าให้โดยอัตโนมัติสำหรับเดือนที่ผู้ใช้สั่งแช่แข็งหรือผ่านบัญชี ทั้งนี้ การตั้งค่าที่จะถูกแช่แข็งหมายรวมถึง &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;การตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;รูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เดือนที่มีการตั้งค่าแช่แข็งไว้จะไม่ใช้การตั้งค่าส่วนกลางของบริษัท แต่จะใช้การตั้งค่าที่แช่แข็งไว้ในการคำนวณ/จัดการข้อมูลแทน ดังนั้น ผู้ใช้สามารถเปลี่ยนการตั้งค่าของบริษัทเพื่อใช้ฟีเจอร์ใหม่ๆ ของโปรแกรมได้ โดยไม่กระทบกับวิธีการคำนวณข้อมูลเดือนก่อนๆ เช่น บริษัท A ดำเนินการมาจนถึงสิ้นเดือนธันวาคม 2024 และได้มีการเปลี่ยนแปลงรูปแบบการทำงานและรูปแบบการบันทึกบัญชี บริษัท A จะสามารถปรับการตั้งค่าของตนในระบบคูนิฟ็อกซ์ได้ดังนี้:&lt;br /&gt;
# &#039;&#039;&#039;สั่งแช่แข็ง (หรือผ่านบัญชี) ทุกๆ เดือนในอดีตจนถึงเดือนธันวาคม 2024:&#039;&#039;&#039; ระบบจะคัดลอกการตั้งค่าปัจจุบัน (ก่อนเปลี่ยนแปลง) เอาไว้ใช้ในช่วงเดือนข้อมูลดังกล่าว&lt;br /&gt;
# &#039;&#039;&#039;เปลี่ยนแปลงการตั้งค่าระบบ และรูปแบบการบันทึกบัญชี&#039;&#039;&#039;เพื่อรองรับรูปแบบการทำงานใหม่&lt;br /&gt;
# &#039;&#039;&#039;ใช้งานต่อตามปกติ:&#039;&#039;&#039;&lt;br /&gt;
#* ข้อมูลธุรกรรมใดๆ ของเดือนหลังจากธันวาคม 2024 ก็จะใช้การตั้งค่าใหม่ได้ทันที&lt;br /&gt;
#* ข้อมูลธุรกรรมที่ย้อนไปบันทึกเป็นของเดือนธันวาคม 2024 หรือก่อนหน้า (เช่นการปรับปรุงบัญชีเพื่อปิดงบ) รวมไปถึงการคำนวณข้อมูลใหม่ จะยังใช้การตั้งค่าเดิมที่แช่แข็งไว้&lt;br /&gt;
&lt;br /&gt;
==== การเปลี่ยนแปลงการตั้งค่าที่แช่แข็งไว้ ====&lt;br /&gt;
หากผู้ใช้ต้องการเปลี่ยนแปลงการตั้งค่าที่ถูกแช่แข็งไว้ สามารถทำได้ 2 วิธีดังนี้:&lt;br /&gt;
* เปลี่ยนวันที่ของ session เป็นเดือนที่ต้องการ แล้วแก้ไขการตั้งค่าผ่านเพจ &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;ตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;กำหนดรูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039; &#039;&#039;(วิธีนี้ใช้ไม่ได้สำหรับเดือนที่ผ่านบัญชีแล้ว)&#039;&#039;&lt;br /&gt;
* สั่งคำนวณข้อมูลของเดือนที่ต้องการใหม่ โดยทำเครื่องหมายที่&#039;&#039;&#039;ช่องข้อมูล &amp;quot;ใช้และจัดเก็บการตั้งค่าปัจจุบันสำหรับเดือนที่แช่แข็ง/ผ่านบัญชีแล้ว&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4058</id>
		<title>คำนวณข้อมูลใหม่</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B8%84%E0%B8%B3%E0%B8%99%E0%B8%A7%E0%B8%93%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88&amp;diff=4058"/>
		<updated>2026-03-24T06:18:01Z</updated>

		<summary type="html">&lt;p&gt;Tenko: /* การใช้งาน */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
&lt;br /&gt;
== ตำแหน่งเมนู ==&lt;br /&gt;
&#039;&#039;&#039;[[เมนู &amp;quot;จัดการข้อมูล&amp;quot;]] → คำนวณข้อมูลใหม่&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== การเก็บข้อมูลธุรกรรมแบบแยกเดือน ==&lt;br /&gt;
=== แนวคิดเบื้องหลัง ===&lt;br /&gt;
ระบบคูนิฟ็อกซ์ถูกออกแบบให้เก็บข้อมูลธุรกรรมแยกเป็นรายเดือน การเลือกเก็บข้อมูลในลักษณะนี้มีแนวคิดคือ:&lt;br /&gt;
* &#039;&#039;&#039;ลดความเสี่ยงและผลกระทบของความเสียหาย:&#039;&#039;&#039; ฐานข้อมูลที่ถูกเขียนข้อมูลอยู่มีความเสี่ยงต่อความเสียหายมากกว่า ดังนั้นการแยกเก็บข้อมูลจึงเป็นวิธีหนึ่งในการจำกัดความเสี่ยงและจำนวนข้อมูลที่ได้รับผลกระทบเมื่อเกิดเหตุสุดวิสัยต่างๆ&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูลและการผ่านบัญชี:&#039;&#039;&#039; ทำให้ผู้ใช้สามารถ[[#การแช่แข็ง/ผ่านบัญชี|แช่แข็งหรือปิดกั้นการแก้ไข]]ข้อมูลเป็นเดือนๆ ได้ เพื่อความสะดวกในการตรวจสอบและเก็บรักษาข้อมูล&lt;br /&gt;
* &#039;&#039;&#039;จำกัดขนาดของข้อมูลชุดทำงาน:&#039;&#039;&#039; การแยกเก็บข้อมูลจะช่วยรักษาขนาดของฐานข้อมูลชุดทำงานไม่ให้มีขนาดใหญ่เกินไป ทำให้การอ่านและเขียนข้อมูลมีความรวดเร็วสม่ำเสมอตลอดการใช้งาน&lt;br /&gt;
* &#039;&#039;&#039;ไม่จำเป็นต้องล้างข้อมูลเมื่อสิ้นปี:&#039;&#039;&#039; เมื่อฐานข้อมูลชุดทำงานไม่ได้มีขนาดใหญ่ขึ้นไปเรื่อยๆ ไม่จำกัด การล้างข้อมูลทุกสิ้นปีก็ไม่ใช่เรื่องจำเป็นอีกต่อไป ผู้ใช้สามารถเรียกดูข้อมูลดิบชุดจริงย้อนหลังได้ไม่จำกัด รวมถึงสามารถเรียกรายงานย้อนหลังต่อเนื่องได้&lt;br /&gt;
&lt;br /&gt;
วิธีการเก็บข้อมูลวิธีนี้มิได้เป็นวิธีเฉพาะตัวของคูนิฟ็อกซ์เพียงรายเดียวแต่อย่างใด อย่างไรก็ตาม เนื่องจากซอฟต์แวร์ลักษณะเดียวกับส่วนใหญ่เลือกเก็บข้อมูลเป็นฐานข้อมูลเดียว ผู้ใช้อาจพบว่าวงจรการทำงานภายใต้ระบบคูนิฟ็อกซ์แตกต่างไปจากซอฟต์แวร์อื่นที่เคยใช้บ้าง&lt;br /&gt;
&lt;br /&gt;
=== ข้อเสนอแนะในการปฏิบัติงาน ===&lt;br /&gt;
การเก็บข้อมูลแบบแยกเดือนนี้ ทำให้คูนิฟ็อกซ์มีการทำงานที่อาจต้องปรับความเคยชินเล็กน้อยอยู่ 2 ประการหลักๆ ได้แก่:&lt;br /&gt;
* &#039;&#039;&#039;คูนิฟ็อกซ์ใช้วันที่ของ session เพื่อเลือกฐานข้อมูลชุดทำงาน:&#039;&#039;&#039; คูนิฟ็อกซ์จะอ่านและเขียนข้อมูลธุรกรรมโดยจะยึดเดือนตามวันที่ของ session ดังนั้น &#039;&#039;&#039;ผู้ใช้จะมองเห็นและแก้ไขข้อมูลธุรกรรมดิบได้ทีละเดือน&#039;&#039;&#039; หากผู้ใช้ต้องการดูหรือแก้ไขข้อมูลของเดือนอื่น สามารถทำได้โดย&#039;&#039;&#039;[[กำหนดวันที่/เวลา|เปลี่ยนวันที่ของ session (คลิกที่วัน/เวลาของ session บนแถบชื่อบริษัท)]]&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;p id=&amp;quot;ผลยกยอดเบื้องต้น&amp;quot;&amp;gt;&#039;&#039;&#039;ธุรกรรมต่างๆ จะไม่ปรากฏผลข้ามเดือนจนกว่าจะมีการคำนวณข้อมูลยกยอด:&#039;&#039;&#039; เนื่องจากคูนิฟ็อกซ์เก็บข้อมูลธุรกรรมของบริษัทโดยไม่ล้างข้อมูลดิบ ชุดข้อมูลของบริษัทอาจครอบคลุมช่วงเวลาหลายปี ดังนั้นระบบคูนิฟ็อกซ์จะ&#039;&#039;&#039;ไม่คำนวณผลกระทบของธุรกรรมข้ามเดือนให้โดยอัตโนมัติ&#039;&#039;&#039;จนกว่าผู้ใช้จะสั่งคำนวณข้อมูลใหม่หรือ[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ระบบคำนวณข้อมูลใหม่โดยอัตโนมัติตามเวลาที่ตั้งไว้]]&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;อย่างไรก็ตาม ระบบคูนิฟ็อกซ์มี&#039;&#039;&#039;[[ตั้งค่าระบบ#หมวด &amp;quot;พื้นฐาน&amp;quot;|ฟังก์ชันผลยกยอดเบื้องต้น]]&#039;&#039;&#039; เพื่อคำนวณผลกระทบของธุรกรรมที่ผู้ใช้บันทึก/เปลี่ยนแปลงค่าไปยังเดือนที่เลือกไว้เพียง 1 หรือ 2 เดือนได้ เช่นนี้ ผู้ใช้ก็จะสามารถทำงานระหว่างวันได้โดยสะดวก และปล่อยให้การคำนวณข้อมูลใหม่เป็นงานสำหรับสิ้นวันเพียงครั้งเดียว&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;ตัวอย่างเช่น เมื่อต้นเดือนตุลาคม มีสินค้าในคลังทั้งหมด 100 ชิ้น บันทึกขายไป 10 ชิ้นในวันที่ 04 ตุลาคม ผู้ใช้จะเห็นจำนวนสินค้าในคลังดังนี้&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=2 style=&amp;quot;width:120px;&amp;quot; | วันที่ของ session || colspan=2 | ฟังก์ชันผลยกยอดเบื้องต้น || rowspan=2 | คำอธิบาย&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:75px;&amp;quot; | ปิด !! style=&amp;quot;width:75px;&amp;quot; | เปิด&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;ก่อนคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมที่บันทึกเห็นผลกระทบทันทีภายในเดือนเดียวกัน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน || style=&amp;quot;text-align:center;&amp;quot; | 100 ชิ้น || style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || ธุรกรรมในเดือนตุลาคมไม่ส่งผลกับเดือนอื่นๆ หากไม่เปิดใช้งานฟังก์ชันผลยกยอดเบื้องต้น&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;หลังคำนวณข้อมูลใหม่&#039;&#039;&#039; &#039;&#039;(เดือนตุลาคม - พฤศจิกายน)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 04-31 ตุลาคม || colspan=2 rowspan=2 style=&amp;quot;text-align:center;&amp;quot; | 90 ชิ้น || rowspan=2 | ในการคำนวณข้อมูลใหม่ ระบบจะยกยอดสิ้นงวดเดือนตุลาคมไปเป็นยอดต้นงวดเดือนพฤศจิกายน ทำให้ธุรกรรมในเดือนตุลาคมส่งผลอย่างถูกต้องในเดือนพฤศิกายน&lt;br /&gt;
|-&lt;br /&gt;
| 01-30 พฤศจิกายน&lt;br /&gt;
|}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== วัตถุประสงค์ ==&lt;br /&gt;
การคำนวณข้อมูลใหม่ในระบบคูนิฟ็อกซ์มีวัตถุประสงค์ดังต่อไปนี้:&lt;br /&gt;
* &#039;&#039;&#039;ตรวจเช็คความสมบูรณ์ของฐานข้อมูล:&#039;&#039;&#039; หากไฟล์ฐานข้อมูลหรือดรรชนีเกิดความเสียหายขึ้น ผู้ใช้จะได้ทราบและกู้คืนข้อมูลชุดล่าสุดที่ใช้งานได้&lt;br /&gt;
* &#039;&#039;&#039;สร้างรายการประวัติและบัญชีรายวันใหม่:&#039;&#039;&#039; ระบบจะอ้างอิงจากข้อมูลธุรกรรมดิบที่ผู้ใช้บันทึกเพื่อล้างรายการทดระหว่างวัน ซึ่งเกิดจากการแก้ไขหรือลบข้อมูลธุรกรรม หรือกำจัดรายการที่บันทึก/คำนวณผิดพลาดเนื่องจากสถานการณ์ไม่ปกติต่างๆ&lt;br /&gt;
** ระบบจะสร้าง&#039;&#039;&#039;รายการประวัติต่างๆ&#039;&#039;&#039; เช่น ประวัติการเข้า-ออกสินค้าคงคลัง, ประวัติเจ้าหนี้/ลูกหนี้รายตัว, ฯลฯ ใหม่ทั้งหมด&lt;br /&gt;
** สำหรับประเภทธุรกรรมที่มีการบันทึกบัญชีรายวันอัตโนมัติ &#039;&#039;(และไม่ได้ถูกล็อคโดยผู้ใช้)&#039;&#039; ระบบจะ&#039;&#039;&#039;ลงบันทึกบัญชีรายวัน&#039;&#039;&#039;ให้ใหม่ พร้อม&#039;&#039;&#039;ล้างข้อมูลบัญชีรายวันที่ไม่มีข้อมูลธุรกรรมดิบ&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;คำนวณผลลัพท์ของธุรกรรมภายในเดือน:&#039;&#039;&#039; เพื่อหายอดสิ้นงวดและยอดยกมาสำหรับเดือนถัดไป&lt;br /&gt;
&lt;br /&gt;
== การใช้งาน ==&lt;br /&gt;
[[ไฟล์:Recalc page.png|720px|thumb|center|alt=เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;|เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
# เข้าสู่&#039;&#039;&#039;เพจ &amp;quot;คำนวณข้อมูลใหม่&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;เลือกช่วงข้อมูลและโมดูล&#039;&#039;&#039;ที่ต้องการ&lt;br /&gt;
# คลิก&#039;&#039;&#039;ปุ่ม &amp;quot;ส่งคำขอ&amp;quot;&#039;&#039;&#039; เพื่อเริ่มดำเนินการ&lt;br /&gt;
&lt;br /&gt;
{{3stars}} &#039;&#039;&#039;โดยปกติของระบบจะข้ามการคำนวณข้อมูลสำหรับเดือนที่แช่แข็งหรือผ่านบัญชีแล้ว&#039;&#039;&#039; หากผู้ใช้ต้องการคำนวณข้อมูลใหม่ในเดือนดังกล่าว ให้ผู้ใช้ทำเครื่องหมายใน&#039;&#039;&#039;ช่อง &amp;quot;รวมในการคำนวณ (เดือนที่แช่แช็งแล้ว)&amp;quot; หรือ &amp;quot;รวมในการคำนวณ (เดือนที่ผ่านบัญชีแล้ว)&amp;quot;&#039;&#039;&#039; ตามต้องการ&lt;br /&gt;
&lt;br /&gt;
== คำอธิบายช่องข้อมูล ==&lt;br /&gt;
{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;จากเดือน... ถึงเดือน&#039;&#039;&#039; || &#039;&#039;เดือน&#039;&#039; || เดือนแรกและเดือนสุดท้ายที่จะคำนวณ&lt;br /&gt;
{{3stars}} ระบบจะนำยอดสิ้นงวดของเดือนสุดท้ายไปเขียนเป็นยอดยกมาของเดือนถัดไปด้วย&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แช่แข็ง/ผ่านบัญชี&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || เปลี่ยนสถานะการแช่แข็ง/ผ่านบัญชี (ดูหัวข้อย่อย [[#การแช่แข็ง/ผ่านบัญชี|&amp;quot;การแช่แข็ง/ผ่านบัญชี&amp;quot;]])&lt;br /&gt;
{{3stars}} เปลี่ยนค่าได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;ระงับการบันทึก/แก้ไขข้อมูล&amp;quot; และ/หรือ &amp;quot;ผ่านบัญชี&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{DangerText|&#039;&#039;&#039;&#039;&#039;{{3stars}} การแช่แข็งและการผ่านบัญชีไม่สามารถย้อนกลับได้ โปรดใช้ความระมัดระวังในการเลือก}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ใช้และจัดเก็บการตั้งค่าปัจจุบันสำหรับเดือนที่แช่แข็ง/ผ่านบัญชีแล้ว&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || ใช้การตั้งค่าปัจจุบันแทนการตั้งค่าที่แช่แข็งไว้สำหรับเดือนที่ถูกแช่แข็ง/ผ่านบัญชี พร้อมเปลี่ยนการตั้งค่าที่แช่แข็งไว้ในเป็นเหมือนการตั้งค่าปัจจุบัน (ดูหัวข้อย่อย [[#การแช่แข็งการตั้งค่าต่างๆ|&amp;quot;การแช่แข็งการตั้งค่าต่างๆ&amp;quot;]])&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;เลือกโมดูล&#039;&#039;&#039; &#039;&#039;(เลือกโมดูลที่ต้องการคำนวณข้อมูลใหม่)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 style=&amp;quot;text-align:center;&amp;quot; | {{3stars}} ลำดับการทำงานของฟังก์ชันคำนวณข้อมูลใหม่จะทำย้อนลำดับโมดูลที่แสดงบนเพจ&amp;lt;br&amp;gt;เช่นในภาพ ระบบจะคำนวณโมดูลตามลำดับดังนี้&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;quot;ค่าจ้าง/เงินเดือน&amp;quot; → &amp;quot;สินทรัพย์&amp;quot; → &amp;quot;สินค้าคงคลัง&amp;quot; → &amp;quot;เจ้าหนี้/ลูกหนี้&amp;quot; → &amp;quot;บัญชีรายวัน&amp;quot; &#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== การแช่แข็ง/ผ่านบัญชี ==&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Monthlock stat.png|220px|thumb|right|alt=สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี|สัญลักษณ์แสดงสถานะแช่แข็ง/ผ่านบัญชี]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ฟังก์ชันการแช่แข็ง/ผ่านบัญชี&#039;&#039;&#039;มีไว้เพื่อความสะดวกในการตรวจสอบและการปิดกั้นการแก้ไขข้อมูล มีรายละเอียดดังนี้:&lt;br /&gt;
* &#039;&#039;&#039;การแช่แข็งข้อมูล:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่แช่แข็งไว้ จะ&#039;&#039;&#039;สามารถเพิ่มเติม/แก้ไข/ลบได้เฉพาะผู้ใช้ที่มีสิทธิ์ &amp;quot;ระงับการบันทึก/แก้ไขข้อมูล&amp;quot;&#039;&#039;&#039; เท่านั้น &#039;&#039;(หน่วยงานของผู้ใช้อาจกำหนดให้เฉพาะผู้ทำบัญชี หรือผู้ตรวจสอบบัญชีมีสิทธิ์นี้)&#039;&#039; เพื่อจำกัดการเปลี่ยนแปลงของข้อมูลให้มาจากวงแคบเท่านั้น ทำให้การตรวจสอบเป็นไปได้ง่ายและรวดเร็วขึ้น&lt;br /&gt;
* &#039;&#039;&#039;การผ่านบัญชี:&#039;&#039;&#039; ข้อมูลธุรกรรมในเดือนที่ผ่านบัญชีแล้วจะ&#039;&#039;&#039;ไม่อนุญาตให้เพิ่มเติม/แก้ไข/ลบ&#039;&#039;&#039; หากผู้ใช้ต้องการปรับปรุงรายการในเดือนดังกล่าว ให้ผู้ใช้&#039;&#039;&#039;สร้างเอกสารปรับปรุง/เปลี่ยนแปลงในเดือนที่ยังไม่ได้ผ่านบัญชีแทน&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เมื่อวันที่ของ session ตกอยู่ในเดือนที่ถูกแช่แข็งหรือผ่านบัญชี จะปรากฏสัญลักษณ์บอกสถานะขึ้นกลางแถบชื่อบริษัทด้านบนของจอ&lt;br /&gt;
&lt;br /&gt;
=== การแช่แข็งการตั้งค่าต่างๆ ===&lt;br /&gt;
การแช่แข็งการตั้งค่าคือการคัดลอกการตั้งค่าในปัจจุบันเก็บเอาไว้ใช้สำหรับข้อมูลเฉพาะในเดือนนั้น โดยระบบจะแช่แข็งการตั้งค่าให้โดยอัตโนมัติสำหรับเดือนที่ผู้ใช้สั่งแช่แข็งหรือผ่านบัญชี ทั้งนี้ การตั้งค่าที่จะถูกแช่แข็งหมายรวมถึง &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;การตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;รูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เดือนที่มีการตั้งค่าแช่แข็งไว้จะไม่ใช้การตั้งค่าส่วนกลางของบริษัท แต่จะใช้การตั้งค่าที่แช่แข็งไว้ในการคำนวณ/จัดการข้อมูลแทน ดังนั้น ผู้ใช้สามารถเปลี่ยนการตั้งค่าของบริษัทเพื่อใช้ฟีเจอร์ใหม่ๆ ของโปรแกรมได้ โดยไม่กระทบกับวิธีการคำนวณข้อมูลเดือนก่อนๆ เช่น บริษัท A ดำเนินการมาจนถึงสิ้นเดือนธันวาคม 2024 และได้มีการเปลี่ยนแปลงรูปแบบการทำงานและรูปแบบการบันทึกบัญชี บริษัท A จะสามารถปรับการตั้งค่าของตนในระบบคูนิฟ็อกซ์ได้ดังนี้:&lt;br /&gt;
# &#039;&#039;&#039;สั่งแช่แข็ง (หรือผ่านบัญชี) ทุกๆ เดือนในอดีตจนถึงเดือนธันวาคม 2024:&#039;&#039;&#039; ระบบจะคัดลอกการตั้งค่าปัจจุบัน (ก่อนเปลี่ยนแปลง) เอาไว้ใช้ในช่วงเดือนข้อมูลดังกล่าว&lt;br /&gt;
# &#039;&#039;&#039;เปลี่ยนแปลงการตั้งค่าระบบ และรูปแบบการบันทึกบัญชี&#039;&#039;&#039;เพื่อรองรับรูปแบบการทำงานใหม่&lt;br /&gt;
# &#039;&#039;&#039;ใช้งานต่อตามปกติ:&#039;&#039;&#039;&lt;br /&gt;
#* ข้อมูลธุรกรรมใดๆ ของเดือนหลังจากธันวาคม 2024 ก็จะใช้การตั้งค่าใหม่ได้ทันที&lt;br /&gt;
#* ข้อมูลธุรกรรมที่ย้อนไปบันทึกเป็นของเดือนธันวาคม 2024 หรือก่อนหน้า (เช่นการปรับปรุงบัญชีเพื่อปิดงบ) รวมไปถึงการคำนวณข้อมูลใหม่ จะยังใช้การตั้งค่าเดิมที่แช่แข็งไว้&lt;br /&gt;
&lt;br /&gt;
==== การเปลี่ยนแปลงการตั้งค่าที่แช่แข็งไว้ ====&lt;br /&gt;
หากผู้ใช้ต้องการเปลี่ยนแปลงการตั้งค่าที่ถูกแช่แข็งไว้ สามารถทำได้ 2 วิธีดังนี้:&lt;br /&gt;
* เปลี่ยนวันที่ของ session เป็นเดือนที่ต้องการ แล้วแก้ไขการตั้งค่าผ่านเพจ &#039;&#039;&#039;[[ตั้งค่าระบบ|&amp;quot;ตั้งค่าระบบ&amp;quot;]]&#039;&#039;&#039; และ &#039;&#039;&#039;[[กำหนดรูปแบบการบันทึกบัญชี|&amp;quot;กำหนดรูปแบบการบันทึกบัญชี&amp;quot;]]&#039;&#039;&#039; &#039;&#039;(วิธีนี้ใช้ไม่ได้สำหรับเดือนที่ผ่านบัญชีแล้ว)&#039;&#039;&lt;br /&gt;
* สั่งคำนวณข้อมูลของเดือนที่ต้องการใหม่ โดยทำเครื่องหมายที่&#039;&#039;&#039;ช่องข้อมูล &amp;quot;ใช้และจัดเก็บการตั้งค่าปัจจุบันสำหรับเดือนที่แช่แข็ง/ผ่านบัญชีแล้ว&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Permissions_page_multiple.png&amp;diff=4057</id>
		<title>ไฟล์:Permissions page multiple.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Permissions_page_multiple.png&amp;diff=4057"/>
		<updated>2026-03-24T06:10:35Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Permissions page multiple.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;การแก้ไขสิทธิ์แบบหลายบริษัทหรือหลายผู้ใช้&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Permissions_page_components.png&amp;diff=4056</id>
		<title>ไฟล์:Permissions page components.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Permissions_page_components.png&amp;diff=4056"/>
		<updated>2026-03-24T06:09:33Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Permissions page components.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;องค์ประกอบของเพจกำหนดสิทธิ์ผู้ใช้งาน&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Permissions_page_copy.png&amp;diff=4055</id>
		<title>ไฟล์:Permissions page copy.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Permissions_page_copy.png&amp;diff=4055"/>
		<updated>2026-03-24T06:07:58Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Permissions page copy.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
การแก้ไขสิทธิ์โดยคัดลอกสิทธิ์จากผู้ใช้อื่น&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94%E0%B8%AA%E0%B8%B4%E0%B8%97%E0%B8%98%E0%B8%B4%E0%B9%8C%E0%B8%9C%E0%B8%B9%E0%B9%89%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99&amp;diff=4054</id>
		<title>กำหนดสิทธิ์ผู้ใช้งาน</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94%E0%B8%AA%E0%B8%B4%E0%B8%97%E0%B8%98%E0%B8%B4%E0%B9%8C%E0%B8%9C%E0%B8%B9%E0%B9%89%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99&amp;diff=4054"/>
		<updated>2026-03-24T05:59:03Z</updated>

		<summary type="html">&lt;p&gt;Tenko: /* สิทธิ์พื้นฐานในระบบงานบริษัท */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
&lt;br /&gt;
== ตำแหน่งเมนู ==&lt;br /&gt;
&#039;&#039;&#039;[[เมนู &amp;quot;การใช้งาน&amp;quot;]] → กำหนดสิทธิ์ผู้ใช้งาน&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== การใช้งาน ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#df382c;&amp;quot;&amp;gt;&#039;&#039;&#039;&#039;&#039;{{3stars}} ผู้ใช้ที่ถูกแก้ไขสิทธิ์จะถูกบังคับให้ลงชื่อเข้าใช้งานใหม่&#039;&#039;&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== การแก้ไขสิทธิ์แบบบริษัทเดียวและผู้ใช้เดียว ===&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Permissions page single.png|720px|thumb|center|alt=การแก้ไขสิทธิ์แบบบริษัทเดียวและผู้ใช้เดียว|การแก้ไขสิทธิ์แบบบริษัทเดียวและผู้ใช้เดียว]]&lt;br /&gt;
# &#039;&#039;&#039;เลือกบริษัทและผู้ใช้&#039;&#039;&#039; ต้องการตั้งค่าในช่อง&#039;&#039;&#039;รหัสบริษัท&#039;&#039;&#039;และ&#039;&#039;&#039;ชื่อผู้ใช้งาน&#039;&#039;&#039;ตามลำดับ&lt;br /&gt;
# ปรับค่าสิทธิ์ในหมวดต่างๆ ตามต้องการจนครบทุกหมวด&lt;br /&gt;
# ยืนยันการแก้ไข โดยคลิกปุ่ม &#039;&#039;&#039;&amp;quot;ตกลง&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== การตั้งสิทธิ์จากแม่แบบ หรือการคัดลอกสิทธิ์ ===&lt;br /&gt;
[[ไฟล์:Permissions page copy.png|720px|thumb|center|alt=การแก้ไขสิทธิ์โดยคัดลอกสิทธิ์จากผู้ใช้อื่น|การแก้ไขสิทธิ์โดยคัดลอกสิทธิ์จากผู้ใช้อื่น]]&lt;br /&gt;
&lt;br /&gt;
เพื่อความสะดวกในการแก้ไขสิทธิ์ผู้ใช้จำนวนมาก ผู้ใช้สามารถดึงค่าสิทธิ์ตั้งต้นจากแม่แบบหรือจากผู้ใช้อื่นที่ได้ตั้งค่าสิทธิ์ไปเรียบร้อยแล้วมาใช้งานได้ดังนี้:&lt;br /&gt;
# &#039;&#039;&#039;เลือกบริษัทและผู้ใช้&#039;&#039;&#039; ต้องการตั้งค่าในช่อง&#039;&#039;&#039;รหัสบริษัท&#039;&#039;&#039;และ&#039;&#039;&#039;ชื่อผู้ใช้งาน&#039;&#039;&#039;ตามลำดับ&lt;br /&gt;
# ในบล็อคสิทธิ์ต้นแบบ (หมายเลข 1) ผู้ใช้สามารถ:&lt;br /&gt;
#* &#039;&#039;&#039;เลือกสิทธิ์แม่แบบ&#039;&#039;&#039; &#039;&#039;(มีให้เลือก 3 ค่า ได้แก่ ผู้บริหาร, ผู้จัดการ, และพนักงาน)&#039;&#039; หรือ&lt;br /&gt;
#* &#039;&#039;&#039;เลือกคู่บริษัทและผู้ใช้ที่ต้องการใช้เป็นแม่แบบ&#039;&#039;&#039; &#039;&#039;(เช่นในภาพ ต้องการแก้ไขสิทธิ์ของผู้ใช้ {{mono|fox}} ภายใต้บริษัท {{mono|CUNEI}} โดยใช้สิทธิ์ของผู้ใช้ {{mono|cunei}} ภายใต้บริษัท {{mono|CUNEI}} เป็นแม่แบบ)&#039;&#039;&lt;br /&gt;
# ปรับค่าสิทธิ์ในหมวดต่างๆ ตามต้องการจนครบทุกหมวด&lt;br /&gt;
# ยืนยันการแก้ไข โดยคลิกปุ่ม &#039;&#039;&#039;&amp;quot;ตกลง&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== การแก้ไขสิทธิ์แบบหลายบริษัทหรือหลายผู้ใช้ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;img006&amp;quot;&amp;gt;[[ไฟล์:Permissions page multiple.png|720px|thumb|center|alt=การแก้ไขสิทธิ์แบบหลายบริษัทหรือหลายผู้ใช้|การแก้ไขสิทธิ์แบบหลายบริษัทหรือหลายผู้ใช้]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ในกรณีเลือกบริษัทมากกว่า 1 บริษัทหรือผู้ใช้มากกว่า 1 คน (ซึ่งอาจมีค่าดั้งเดิมของแต่ละคู่บริษัท-ผู้ใช้แตกต่างกัน) ระบบจะแสดงสวิตช์ทางด้านขวาของช่องข้อมูล และ&#039;&#039;&#039;จะบันทึกค่าเฉพาะในช่องที่ผู้ใช้เปิดสวิตช์ไว้เท่านั้น&#039;&#039;&#039; โดยจะแก้ไขให้ทุกคู่บริษัท-ผู้ใช้มีค่าเดียวกัน ดังตัวอย่างในตารางด้านล่าง&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;text-align:center;&amp;quot;&lt;br /&gt;
|+ ตัวอย่างการเปลี่ยนสิทธิ์ผู้ใช้หลายรายพร้อมกัน&lt;br /&gt;
|-&lt;br /&gt;
! !! fox0 !! fox1 !! fox2 !! fox3 !! fox4 !! คำอธิบาย&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | สิทธิ์ดั้งเดิมก่อนเปลี่ยนค่า&lt;br /&gt;
| ✓ || ✓ || ✓ || – || – ||&lt;br /&gt;
|-&lt;br /&gt;
| colspan=7 {{TableHighlightInfo}} | &#039;&#039;&#039;การปรับสิทธิ์&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | [[ไฟล์:Permission check on.png|20px|frameless|alt=ปุ่มปรับค่าสิทธิ์ (เปิด)|ปุ่มปรับค่าสิทธิ์ (เปิด)]] &amp;amp;nbsp; [[ไฟล์:Permission switch on.png|30px|frameless|alt=สวิตช์ปรับค่าสิทธิ์ (เปิด)|สวิตช์ปรับค่าสิทธิ์ (เปิด)]]&lt;br /&gt;
| ✓ || ✓ || ✓ || ✓ || ✓ || ปรับค่าทั้งหมดเป็น ✓&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | [[ไฟล์:Permission check off.png|20px|frameless|alt=ปุ่มปรับค่าสิทธิ์ (ปิด)|ปุ่มปรับค่าสิทธิ์ (ปิด)]] &amp;amp;nbsp; [[ไฟล์:Permission switch on.png|30px|frameless|alt=สวิตช์ปรับค่าสิทธิ์ (เปิด)|สวิตช์ปรับค่าสิทธิ์ (เปิด)]]&lt;br /&gt;
| – || – || – || – || – || ปรับค่าทั้งหมดเป็น –&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | [[ไฟล์:Permission check off.png|20px|frameless|alt=ปุ่มปรับค่าสิทธิ์ (ปิด)|ปุ่มปรับค่าสิทธิ์ (ปิด)]] &amp;amp;nbsp; [[ไฟล์:Permission switch off.png|30px|frameless|alt=สวิตช์ปรับค่าสิทธิ์ (ปิด)|สวิตช์ปรับค่าสิทธิ์ (ปิด)]]&lt;br /&gt;
| ✓ || ✓ || ✓ || – || – || คงค่าดั้งเดิมไว้&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ความหมายของค่าสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
ค่าของสิทธิ์ที่พบได้มากมีอยู่ 2 รูปแบบหลักได้แก่&lt;br /&gt;
* &amp;lt;li id=&amp;quot;perm5&amp;quot;&amp;gt;&#039;&#039;&#039;ค่าระดับปฏิบัติการ 0 – 5&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot; | &#039;&#039;ค่า&#039;&#039;&lt;br /&gt;
!! style=&amp;quot;width:18%&amp;quot; | ค้นหาและพิมพ์&lt;br /&gt;
!! style=&amp;quot;width:18%;&amp;quot; | เพิ่มรายการ&lt;br /&gt;
!! style=&amp;quot;width:18%;&amp;quot; | แก้ไขรายการ&lt;br /&gt;
!! style=&amp;quot;width:18%;&amp;quot; | ลบรายการ&lt;br /&gt;
!! style=&amp;quot;width:18%;font-weight:normal;&amp;quot; | &#039;&#039;&#039;นำเข้ารายการ&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;(เฉพาะกิจกรรมที่รองรับการนำเข้า)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 0&lt;br /&gt;
| – || – || – || – || –&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 1&lt;br /&gt;
| ✓ || – || – || – || –&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 2&lt;br /&gt;
| ✓ || ✓ || – || – || –&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3&lt;br /&gt;
| ✓ || ✓ || ✓ || – || –&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 4&lt;br /&gt;
| ✓ || ✓ || ✓ || ✓ || –&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 5&lt;br /&gt;
| ✓ || ✓ || ✓ || ✓ || ✓&lt;br /&gt;
|}&lt;br /&gt;
* &#039;&#039;&#039;ค่าประเภท &amp;quot;มี/ไม่มีสิทธิ์&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;ค่า ✓&#039;&#039;&#039; หมายถึง &#039;&#039;&#039;&amp;quot;มีสิทธิ์&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;ค่า –&#039;&#039;&#039; หมายถึง &#039;&#039;&#039;&amp;quot;ไม่มีสิทธิ์&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== หมวดของสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Permissions page components.png|720px|thumb|center|alt=องค์ประกอบของเพจกำหนดสิทธิ์ผู้ใช้งาน|องค์ประกอบของเพจกำหนดสิทธิ์ผู้ใช้งาน]]&lt;br /&gt;
&lt;br /&gt;
สิทธิ์ในการใช้งานระบบต่างๆ สามารถแบ่งเป็นหมวดหมู่ได้เป็นหมวดๆ ดังนี้&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;สิทธิ์ผู้ดูแลระบบคูนิฟ็อกซ์&#039;&#039;&#039; (หมายเลข 2): รวมสิทธิ์ของผู้ดูแลระบบ ได้แก่ การเพิ่มบริษัทใหม่, การลบบริษัท, และการเปลี่ยนแปลงสิทธิ์ผู้ดูแลระบบของผู้ใช้อื่น&lt;br /&gt;
* &#039;&#039;&#039;สิทธิ์พื้นฐานในระบบงานบริษัท&#039;&#039;&#039; (หมายเลข 3): ได้แก่สิทธิ์ในการลงชื่อเข้าใช้งาน, การแก้ไขรายละเอียดของบริษัท, การจัดการผู้ใช้อื่นในบริษัทเดียวกัน, และการจัดการข้อมูลของบริษัทโดยรวม&lt;br /&gt;
* &#039;&#039;&#039;สิทธิ์แยกแต่ละโมดูล&#039;&#039;&#039; (หมายเลข 4): แต่ละโมดูลถือเป็นหมวดแยกขาดจากกัน&lt;br /&gt;
&lt;br /&gt;
=== สิทธิ์ผู้ดูแลระบบคูนิฟ็อกซ์ ===&lt;br /&gt;
{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;การบริหารจัดการระบบ&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เพิ่มบริษัท/สาขาในทะเบียนรหัส&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถเพิ่มบริษัท/สาขาใหม่ในทะเบียนได้หรือไม่&amp;lt;br&amp;gt;&#039;&#039;(ดู[[ทะเบียนรหัสบริษัท/สาขา|เพจ &amp;quot;ทะเบียนรหัสบริษัท/สาขา&amp;quot;]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ลบบริษัท/สาขาจากทะเบียนรหัส&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถลบบริษัท/สาขาจากทะเบียนได้หรือไม่&amp;lt;br&amp;gt;&#039;&#039;(ดู[[ทะเบียนรหัสบริษัท/สาขา|เพจ &amp;quot;ทะเบียนรหัสบริษัท/สาขา&amp;quot;]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เปลี่ยนแปลงผู้ดูแลระบบคูนิฟ็อกซ์&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถแก้ไขสิทธิ์ใน&#039;&#039;&#039;หมวดผู้ดูแลระบบคูนิฟ็อกซ์&#039;&#039;&#039;ได้หรือไม่&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== สิทธิ์พื้นฐานในระบบงานบริษัท ===&lt;br /&gt;
{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;สิทธิ์การใช้งาน&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เข้าใช้งานด้วยบริษัทนี้&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถลงชื่อเข้าใช้ในบริษัทนี้ได้หรือไม่&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แก้ไขบริษัท/สาขาในทะเบียนรหัส&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้ดำเนินการต่อไปนี้ได้หรือไม่:&lt;br /&gt;
* แก้ไขข้อมูลของบริษัทนี้&#039;&#039;&#039;ยกเว้นเลขประจำตัวผู้เสียภาษี&#039;&#039;&#039; &#039;&#039;(ดู[[ทะเบียนรหัสบริษัท/สาขา|เพจ &amp;quot;ทะเบียนรหัสบริษัท/สาขา&amp;quot;]])&#039;&#039;&lt;br /&gt;
* ตั้งค่าระบบสำหรับบริษัทนี้ &#039;&#039;(ดู[[ตั้งค่าระบบ|เพจ &amp;quot;ตั้งค่าระบบ&amp;quot;]])&#039;&#039;&lt;br /&gt;
* ตั้งค่าการบันทึกบัญชีสำหรับบริษัทนี้ &#039;&#039;(ดู[[กำหนดรูปแบบการบันทึกบัญชี|เพจ &amp;quot;กำหนดรูปแบบการบันทึกบัญชี&amp;quot;]])&#039;&#039;&lt;br /&gt;
* จัดการไฟล์ต้นแบบการพิมพ์และรหัส QR &#039;&#039;(ดู[[จัดการรูปแบบการพิมพ์|เพจ &amp;quot;จัดการรูปแบบการพิมพ์&amp;quot;]] และ [[จัดการรูปแบบ QR Code|เพจ &amp;quot;จัดการรูปแบบ QR Code&amp;quot;]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แก้ไขเลขประจำตัวผู้เสียภาษีของบริษัท&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถแก้ไขเลขประจำตัวผู้เสียภาษีของบริษัทได้หรือไม่ &#039;&#039;(ดู[[ทะเบียนรหัสบริษัท/สาขา|เพจ &amp;quot;ทะเบียนรหัสบริษัท/สาขา&amp;quot;]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ระดับการเข้าถึงรายงาน&#039;&#039;&#039; || &#039;&#039;ระดับ 0-4&#039;&#039; || ระดับการเข้าถึงรายงานส่วนกลาง&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;การจัดการรายงาน&#039;&#039;&#039; || &#039;&#039;ระดับ 0-4&#039;&#039; || สิทธิ์ในการจัดการข้อมูลในรายงาน&lt;br /&gt;
* &#039;&#039;&#039;ระดับต่ำกว่า 2:&#039;&#039;&#039; สามารถดูรายงานบนเพจได้เท่านั้น&lt;br /&gt;
* &#039;&#039;&#039;ระดับ 2:&#039;&#039;&#039; สามารถพิมพ์รายงานเป็นไฟล์ PDF หรือผ่านเครื่องพิมพ์ได้&lt;br /&gt;
* &#039;&#039;&#039;ระดับ 3 ขึ้นไป:&#039;&#039;&#039; สามารถพิมพ์รายงานเป็นไฟล์ PDF หรือผ่านเครื่องพิมพ์ และส่งออกข้อมูลรายงานเป็นไฟล์กระดาษทำการ (XLSX) ได้&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;การจัดการฐานข้อมูล&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;คำนวณข้อมูลใหม่&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถสั่งคำนวณข้อมูลใหม่ได้หรือไม่&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แช่แข็งข้อมูล&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถดำเนินการต่อไปนี้ได้หรือไม่:&lt;br /&gt;
* สั่งแช่แช็งข้อมูล&lt;br /&gt;
* เพิ่ม/แก้ไข/ลบธุรกรรมในเดือนที่ถูกแช่แข็งไปแล้ว &#039;&#039;(ขึ้นกับสิทธิ์เฉพาะธุรกรรมในแต่ละโมดูลด้วย)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ผ่านบัญชี&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถสั่งผ่านบัญชีได้หรือไม่&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;สำรองข้อมูล&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถสั่งสำรองและกู้คืนข้อมูลได้หรือไม่&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;การจัดการทะเบียนรหัสผู้ใช้งาน&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;(ดู[[ทะเบียนรหัสผู้ใช้งาน|เพจ &amp;quot;ทะเบียนรหัสผู้ใช้งาน&amp;quot;]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เพิ่มรหัสผู้ใช้งานของบริษัท&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถเพิ่มผู้ใช้ใหม่ในบริษัทนี้ได้หรือไม่&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ลบรหัสผู้ใช้งานของบริษัท&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถลบผู้ใช้ของบริษัทนี้ได้หรือไม่&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เปลี่ยนแปลงข้อมูลผู้ใช้งาน&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถแก้ไขข้อมูลผู้ใช้ของบริษัทนี้ได้หรือไม่&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เปลี่ยนรหัสผ่านของผู้ใช้งาน&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถเปลี่ยนรหัสผ่านของผู้ใช้อื่น&#039;&#039;&#039;โดยไม่ต้องระบุรหัสผ่านเดิม&#039;&#039;&#039;ได้หรือไม่&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Permissions_page_single.png&amp;diff=4053</id>
		<title>ไฟล์:Permissions page single.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Permissions_page_single.png&amp;diff=4053"/>
		<updated>2026-03-24T05:58:12Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Permissions page single.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;การแก้ไขสิทธิ์แบบบริษัทเดียวและผู้ใช้เดียว&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq1_extended.png&amp;diff=4052</id>
		<title>ไฟล์:Cunei as asr vouch seq1 extended.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq1_extended.png&amp;diff=4052"/>
		<updated>2026-03-24T05:56:01Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei as asr vouch seq1 extended.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;รายการขายสินทรัพย์&amp;quot; (ขั้นตอนที่ 2: ส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq0_extended.png&amp;diff=4051</id>
		<title>ไฟล์:Cunei as asr vouch seq0 extended.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq0_extended.png&amp;diff=4051"/>
		<updated>2026-03-24T05:55:47Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei as asr vouch seq0 extended.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;รายการซื้อสินทรัพย์&amp;quot; (ขั้นตอนที่ 1: ส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq2.png&amp;diff=4050</id>
		<title>ไฟล์:Cunei as asr vouch seq2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq2.png&amp;diff=4050"/>
		<updated>2026-03-24T05:55:37Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei as asr vouch seq2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;รายการซื้อสินทรัพย์&amp;quot; (ขั้นตอนที่ 3)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq1.png&amp;diff=4049</id>
		<title>ไฟล์:Cunei as asr vouch seq1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq1.png&amp;diff=4049"/>
		<updated>2026-03-24T05:55:26Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei as asr vouch seq1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;รายการซื้อสินทรัพย์&amp;quot; (ขั้นตอนที่ 2)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq0.png&amp;diff=4048</id>
		<title>ไฟล์:Cunei as asr vouch seq0.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_seq0.png&amp;diff=4048"/>
		<updated>2026-03-24T05:55:15Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei as asr vouch seq0.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;รายการซื้อสินทรัพย์&amp;quot; (ขั้นตอนที่ 1)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_page.png&amp;diff=4047</id>
		<title>ไฟล์:Cunei as asr vouch page.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_as_asr_vouch_page.png&amp;diff=4047"/>
		<updated>2026-03-24T05:55:04Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei as asr vouch page.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;รายการซื้อสินทรัพย์&amp;quot;&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq3_extended.png&amp;diff=4046</id>
		<title>ไฟล์:Cunei iv ret vouch seq3 extended.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq3_extended.png&amp;diff=4046"/>
		<updated>2026-03-24T05:51:42Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv ret vouch seq3 extended.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot; (ขั้นตอนที่ 4: ส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq3.png&amp;diff=4045</id>
		<title>ไฟล์:Cunei iv ret vouch seq3.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq3.png&amp;diff=4045"/>
		<updated>2026-03-24T05:51:34Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv ret vouch seq3.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot; (ขั้นตอนที่ 4)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq2_extended2.png&amp;diff=4044</id>
		<title>ไฟล์:Cunei iv ret vouch seq2 extended2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq2_extended2.png&amp;diff=4044"/>
		<updated>2026-03-24T05:51:19Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv ret vouch seq2 extended2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot; (ขั้นตอนที่ 3: แท็บ &amp;quot;ข้อมูลภาษี&amp;quot; ของส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq2_extended1.png&amp;diff=4043</id>
		<title>ไฟล์:Cunei iv ret vouch seq2 extended1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq2_extended1.png&amp;diff=4043"/>
		<updated>2026-03-24T05:51:08Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv ret vouch seq2 extended1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot; (ขั้นตอนที่ 3: แท็บ &amp;quot;คำอธิบาย&amp;quot; ของส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq2.png&amp;diff=4042</id>
		<title>ไฟล์:Cunei iv ret vouch seq2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq2.png&amp;diff=4042"/>
		<updated>2026-03-24T05:50:50Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv ret vouch seq2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot; (ขั้นตอนที่ 3)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq1.png&amp;diff=4041</id>
		<title>ไฟล์:Cunei iv ret vouch seq1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq1.png&amp;diff=4041"/>
		<updated>2026-03-24T05:50:36Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv ret vouch seq1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot; (ขั้นตอนที่ 2)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_page.png&amp;diff=4040</id>
		<title>ไฟล์:Cunei iv ret vouch page.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_page.png&amp;diff=4040"/>
		<updated>2026-03-24T05:50:11Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv ret vouch page.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot;&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq0_extended.png&amp;diff=4039</id>
		<title>ไฟล์:Cunei iv ret vouch seq0 extended.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq0_extended.png&amp;diff=4039"/>
		<updated>2026-03-24T05:49:34Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv ret vouch seq0 extended.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot; (ขั้นตอนที่ 1: ส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq0.png&amp;diff=4038</id>
		<title>ไฟล์:Cunei iv ret vouch seq0.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_ret_vouch_seq0.png&amp;diff=4038"/>
		<updated>2026-03-24T05:49:22Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv ret vouch seq0.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot; (ขั้นตอนที่ 1)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%81%E0%B8%A1%E0%B9%88%E0%B9%81%E0%B8%9A%E0%B8%9A:RecPayHead_0&amp;diff=4037</id>
		<title>แม่แบบ:RecPayHead 0</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%81%E0%B8%A1%E0%B9%88%E0%B9%81%E0%B8%9A%E0%B8%9A:RecPayHead_0&amp;diff=4037"/>
		<updated>2026-03-24T05:41:37Z</updated>

		<summary type="html">&lt;p&gt;Tenko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เลขที่เอกสาร&#039;&#039;&#039; || &#039;&#039;ข้อความ (*)&#039;&#039; || &lt;br /&gt;
{{3stars}} ใช้ฟังก์ชันเลขที่เอกสารอัตโนมัติได้&lt;br /&gt;
&lt;br /&gt;
{{3stars}} ซีรีส์เอกสารที่ใช้ได้คือ&lt;br /&gt;
* กลุ่ม &#039;&#039;&#039;&amp;quot;{{{series_grp0}}}&amp;quot;&#039;&#039;&#039; &#039;&#039;(สำหรับเพจ &amp;quot;{{{page_call0}}}&amp;quot;)&#039;&#039;&lt;br /&gt;
* กลุ่ม &#039;&#039;&#039;&amp;quot;{{{series_grp1}}}&amp;quot;&#039;&#039;&#039; &#039;&#039;(สำหรับเพจ &amp;quot;{{{page_call1}}}&amp;quot;)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;วันที่เอกสาร&#039;&#039;&#039; || &#039;&#039;วันที่ (*)&#039;&#039; || {{3stars}} ต้องอยู่ในเดือนเดียวกับวันที่ของ session&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{{taxdoc_label}}}&#039;&#039;&#039; || &#039;&#039;ข้อความ&#039;&#039; || {{{taxdoc_desc}}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{{taxdate_label}}}&#039;&#039;&#039; || &#039;&#039;วันที่&#039;&#039; || {{{taxdate_desc}}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{{refdoc_label}}}&#039;&#039;&#039; || &#039;&#039;ข้อความ {{#ifeq: {{{refdoc_required|no}}} | no || (*)}}&#039;&#039; || {{{refdoc_desc}}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{{refdate_label}}}&#039;&#039;&#039; || &#039;&#039;วันที่ {{#ifeq: {{{refdoc_required|no}}} | no || (*)}}&#039;&#039; || {{{refdate_desc}}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แผนก&#039;&#039;&#039; || &#039;&#039;ค้นหา (*)&#039;&#039; || –&lt;br /&gt;
{{#ifeq: {{{doctype_desc|none}}} | none ||&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &#039;&#039;&#039;ชนิดเอกสาร&#039;&#039;&#039; {{!}}{{!}} &#039;&#039;ตัวเลือก&#039;&#039; {{!}}{{!}} เลือกจาก:&lt;br /&gt;
{{#ifeq: {{{doctype_desc|none}}} | return | &lt;br /&gt;
* ใบส่งคืนสินค้า/ใบรับคืนสินค้า&lt;br /&gt;
* ใบเพิ่มหนี้&lt;br /&gt;
* ใบลดหนี้ | &lt;br /&gt;
* ใบสั่งซื้อ/ใบสั่งขาย&lt;br /&gt;
* ใบเสนอราคา }} }}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ผู้ขาย/ลูกค้า&#039;&#039;&#039; || &#039;&#039;ค้นหา (*)&#039;&#039; || –&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlight0}} | &#039;&#039;&#039;ส่วนต่อขยายฟอร์ม&#039;&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2}}&lt;br /&gt;
| &#039;&#039;&#039;ชื่อ&#039;&#039;&#039; || &#039;&#039;ข้อความ (*)&#039;&#039; || rowspan=6 | {{3stars}} ระบบอ่านค่าจาก[[เจ้าหนี้/ผู้ขาย และ ลูกหนี้/ลูกค้า|ตารางรหัส]]ให้โดยอัตโนมัติ แต่ผู้ใช้สามารถแก้ไขข้อความเองได้&lt;br /&gt;
{{3stars}} สามารถใช้ฟังก์ชันค้นหาจากอินเทอร์เน็ตเพื่อช่วยกรอกข้อมูลได้&lt;br /&gt;
|- {{TableHighlight2}}&lt;br /&gt;
| &#039;&#039;&#039;เลขผู้เสียภาษี&#039;&#039;&#039; || &#039;&#039;ข้อความ&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2}}&lt;br /&gt;
| &#039;&#039;&#039;รหัสสาขา&#039;&#039;&#039; || &#039;&#039;ข้อความ&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2}}&lt;br /&gt;
| &#039;&#039;&#039;ชื่อสาขา&#039;&#039;&#039; || &#039;&#039;ข้อความ&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2}}&lt;br /&gt;
| &#039;&#039;&#039;ที่อยู่&#039;&#039;&#039; || &#039;&#039;ข้อความหลายบรรทัด&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2}}&lt;br /&gt;
| &#039;&#039;&#039;รหัสไปรษณีย์&#039;&#039;&#039; || &#039;&#039;ข้อความ&#039;&#039;&lt;br /&gt;
|- {{TableHighlight2}}&lt;br /&gt;
| &#039;&#039;&#039;โทรศัพท์&#039;&#039;&#039; || &#039;&#039;ข้อความ&#039;&#039; || {{3stars}} ระบบอ่านค่าจาก[[เจ้าหนี้/ผู้ขาย และ ลูกหนี้/ลูกค้า|ตารางรหัส]]ให้โดยอัตโนมัติ แต่ผู้ใช้สามารถแก้ไขข้อความเองได้&lt;br /&gt;
{{#ifeq: {{{doctype_desc|none}}} | order ||&lt;br /&gt;
{{!}}- {{TableHighlight2}}&lt;br /&gt;
{{!}} &#039;&#039;&#039;ออกเป็นใบกำกับภาษีขายอย่างย่อ&#039;&#039;&#039; {{!}}{{!}} &#039;&#039;จริง/เท็จ&#039;&#039; {{!}}{{!}} บันทึกรายการนี้เป็นใบกำกับภาษีอย่างย่อ&lt;br /&gt;
{{3stars}} แสดงเฉพาะในเพจ &#039;&#039;&#039;&amp;quot;{{{page_call1}}}&amp;quot;&#039;&#039;&#039; เท่านั้น }}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;พนักงานจัดซื้อ/พนักงานขาย&#039;&#039;&#039; || &#039;&#039;ค้นหา (*)&#039;&#039; || {{3stars}} ระบบอ่านค่าจาก[[เจ้าหนี้/ผู้ขาย และ ลูกหนี้/ลูกค้า|ตารางรหัส]]ให้โดยอัตโนมัติ แต่ผู้ใช้สามารถแก้ไขพนักงานเองได้&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{#ifeq: {{{payday_desc|normal}}} | normal | ระยะชำระหนี้ | อายุเอกสาร }}&#039;&#039;&#039; || &#039;&#039;ค่าทางบัญชี&#039;&#039; || {{#ifeq: {{{payday_desc|normal}}} | normal | ระยะชำระหนี้ | อายุเอกสาร }}ใน&#039;&#039;&#039;หน่วยวัน&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{3stars}} ดูรายละเอียดเพิ่มเติมที่[[โมดูลเจ้าหนี้/ลูกหนี้#การตั้งค่าระบบ|&#039;&#039;&#039;ช่อง &amp;quot;คำนวณวันกำหนดชำระเป็นเดือน&amp;quot;&#039;&#039;&#039; ในการตั้งค่าของโมดูลเจ้าหนี้/ลูกหนี้]]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{#ifeq: {{{payday_desc|normal}}} | normal | วันกำหนดชำระ | วันที่สิ้นอายุ }}&#039;&#039;&#039; || &#039;&#039;วันที่&#039;&#039; || {{3stars}} โปรแกรมใช้ข้อมูลในช่องวันที่นี้เป็นสำคัญ ข้อมูลจำนวนวันในช่อง &#039;&#039;&#039;&amp;quot;{{#ifeq: {{{payday_desc|normal}}} | normal | ระยะชำระหนี้ | อายุเอกสาร }}&amp;quot;&#039;&#039;&#039; ใช้เพื่อแสดงผลและคำนวณเบื้องต้นเท่านั้น&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เงื่อนไขราคา (รวม VAT)&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || ราคาสินค้าในรายการย่อยเป็นราคารวม VAT แล้วหรือไม่&lt;br /&gt;
{{#ifeq: {{{show_payment|y}}} | y |&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &#039;&#039;&#039;การชำระเงิน&#039;&#039;&#039; {{!}}{{!}} &#039;&#039;ตัวเลือก&#039;&#039; {{!}}{{!}} เลือก&#039;&#039;&#039;วิธีการชำระเงิน&#039;&#039;&#039; &#039;&#039;(กรณีซื้อ/ขายสด)&#039;&#039; หรือเลือก&#039;&#039;&#039;เครดิต&#039;&#039;&#039; &#039;&#039;(กรณีซื้อ/ขายเชื่อ หรือจ่ายด้วยเช็ค)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{3stars}} ถ้า &#039;&#039;&#039;&amp;quot;ระยะชำระหนี้&amp;quot; เป็น 0&#039;&#039;&#039; และ &#039;&#039;&#039;&amp;quot;วันที่กำหนดชำระ&amp;quot; ตรงกับวันที่เอกสาร&#039;&#039;&#039; ระบบจะเลือก &#039;&#039;&#039;&amp;quot;เงินสด&amp;quot;&#039;&#039;&#039; ให้โดยอัตโนมัติ แต่ผู้ใช้สามารถเปลี่ยนตัวเลือกได้ตามต้องการ&lt;br /&gt;
&lt;br /&gt;
{{3stars}} &#039;&#039;&#039;โมดูล &amp;quot;{{{module_name|สินค้าคงคลัง}}}&amp;quot; ไม่เกี่ยวข้องกับการรับ/จ่ายเช็ค:&#039;&#039;&#039; ดังนั้นรายการซื้อ/ขายที่ชำระด้วยเช็ค ให้ผู้ใช้เลือกตัวเลือก &amp;quot;เครดิต&amp;quot; แล้วทำ&#039;&#039;&#039;[[บันทึกการชำระเจ้าหนี้ และ บันทึกการรับชำระลูกหนี้|ธุรกรรม &amp;quot;จ่าย/รับชำระ&amp;quot;]]&#039;&#039;&#039; แยกกัน&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &#039;&#039;&#039;(รหัสบัญชีการชำระเงิน)&#039;&#039;&#039; {{!}}{{!}} &#039;&#039;ค้นหา (*)&#039;&#039; {{!}}{{!}} รหัสบัญชีที่ใช้บันทึกการชำระเงินหรือหนี้ที่เกิดจากธุรกรรมนี้&lt;br /&gt;
&lt;br /&gt;
{{3stars}} ระบบอ่านค่าจาก[[กำหนดรูปแบบการบันทึกบัญชี|รูปแบบการบันทึกบัญชี]]ให้โดยอัตโนมัติ แต่ผู้ใช้สามารถแก้ไขข้อความเองได้ &lt;br /&gt;
| }}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq3_extended.png&amp;diff=4036</id>
		<title>ไฟล์:Cunei iv pay vouch seq3 extended.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq3_extended.png&amp;diff=4036"/>
		<updated>2026-03-24T05:36:01Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv pay vouch seq3 extended.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot; (ขั้นตอนที่ 4: ส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq3.png&amp;diff=4035</id>
		<title>ไฟล์:Cunei iv pay vouch seq3.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq3.png&amp;diff=4035"/>
		<updated>2026-03-24T05:35:52Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv pay vouch seq3.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot; (ขั้นตอนที่ 4)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq2_extended2.png&amp;diff=4034</id>
		<title>ไฟล์:Cunei iv pay vouch seq2 extended2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq2_extended2.png&amp;diff=4034"/>
		<updated>2026-03-24T05:35:33Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv pay vouch seq2 extended2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot; (ขั้นตอนที่ 3: แท็บ &amp;quot;ข้อมูลภาษี&amp;quot; ของส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq2_extended1.png&amp;diff=4033</id>
		<title>ไฟล์:Cunei iv pay vouch seq2 extended1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq2_extended1.png&amp;diff=4033"/>
		<updated>2026-03-24T05:35:23Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv pay vouch seq2 extended1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot; (ขั้นตอนที่ 3: แท็บ &amp;quot;คำอธิบาย&amp;quot; ของส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq2.png&amp;diff=4032</id>
		<title>ไฟล์:Cunei iv pay vouch seq2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq2.png&amp;diff=4032"/>
		<updated>2026-03-24T05:35:01Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv pay vouch seq2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot; (ขั้นตอนที่ 3)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq1.png&amp;diff=4031</id>
		<title>ไฟล์:Cunei iv pay vouch seq1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq1.png&amp;diff=4031"/>
		<updated>2026-03-24T05:34:41Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv pay vouch seq1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot; (ขั้นตอนที่ 2)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq0_extended.png&amp;diff=4030</id>
		<title>ไฟล์:Cunei iv pay vouch seq0 extended.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq0_extended.png&amp;diff=4030"/>
		<updated>2026-03-24T05:34:17Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv pay vouch seq0 extended.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot; (ขั้นตอนที่ 1: ส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq0.png&amp;diff=4029</id>
		<title>ไฟล์:Cunei iv pay vouch seq0.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_seq0.png&amp;diff=4029"/>
		<updated>2026-03-24T05:34:02Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv pay vouch seq0.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot; (ขั้นตอนที่ 1)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_page.png&amp;diff=4028</id>
		<title>ไฟล์:Cunei iv pay vouch page.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_pay_vouch_page.png&amp;diff=4028"/>
		<updated>2026-03-24T05:33:44Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv pay vouch page.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot;&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_page_push.png&amp;diff=4027</id>
		<title>ไฟล์:Cunei iv so vouch page push.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_page_push.png&amp;diff=4027"/>
		<updated>2026-03-24T02:15:13Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch page push.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (หน้าต่าง &amp;quot;ส่งต่อรายการสั่งขายเป็นใบส่งสินค้า&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_page_pushbtn.png&amp;diff=4026</id>
		<title>ไฟล์:Cunei iv so vouch page pushbtn.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_page_pushbtn.png&amp;diff=4026"/>
		<updated>2026-03-24T02:14:44Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch page pushbtn.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (ปุ่ม &amp;quot;ส่งต่อรายการ&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq3_extended.png&amp;diff=4025</id>
		<title>ไฟล์:Cunei iv so vouch seq3 extended.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq3_extended.png&amp;diff=4025"/>
		<updated>2026-03-24T02:11:27Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch seq3 extended.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (ขั้นตอนที่ 4: ส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq2_extended2.png&amp;diff=4024</id>
		<title>ไฟล์:Cunei iv so vouch seq2 extended2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq2_extended2.png&amp;diff=4024"/>
		<updated>2026-03-24T02:11:19Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch seq2 extended2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (ขั้นตอนที่ 3: แท็บ &amp;quot;ข้อมูลภาษี&amp;quot; ของส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq2_extended1.png&amp;diff=4023</id>
		<title>ไฟล์:Cunei iv so vouch seq2 extended1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq2_extended1.png&amp;diff=4023"/>
		<updated>2026-03-24T02:11:10Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch seq2 extended1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (ขั้นตอนที่ 3: แท็บ &amp;quot;คำอธิบาย&amp;quot; ของส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq0_extended.png&amp;diff=4022</id>
		<title>ไฟล์:Cunei iv so vouch seq0 extended.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq0_extended.png&amp;diff=4022"/>
		<updated>2026-03-24T02:11:01Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch seq0 extended.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (ขั้นตอนที่ 1: ส่วนต่อขยาย)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq3.png&amp;diff=4021</id>
		<title>ไฟล์:Cunei iv so vouch seq3.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq3.png&amp;diff=4021"/>
		<updated>2026-03-24T01:50:11Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch seq3.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (ขั้นตอนที่ 4)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq2.png&amp;diff=4020</id>
		<title>ไฟล์:Cunei iv so vouch seq2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq2.png&amp;diff=4020"/>
		<updated>2026-03-24T01:50:03Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch seq2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (ขั้นตอนที่ 3)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq1.png&amp;diff=4019</id>
		<title>ไฟล์:Cunei iv so vouch seq1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq1.png&amp;diff=4019"/>
		<updated>2026-03-24T01:49:54Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch seq1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (ขั้นตอนที่ 2)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq0.png&amp;diff=4018</id>
		<title>ไฟล์:Cunei iv so vouch seq0.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_seq0.png&amp;diff=4018"/>
		<updated>2026-03-24T01:30:28Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch seq0.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot; (ขั้นตอนที่ 1)&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_page.png&amp;diff=4017</id>
		<title>ไฟล์:Cunei iv so vouch page.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C:Cunei_iv_so_vouch_page.png&amp;diff=4017"/>
		<updated>2026-03-24T01:30:13Z</updated>

		<summary type="html">&lt;p&gt;Tenko: Tenko อัปโหลดรุ่นใหม่ของ ไฟล์:Cunei iv so vouch page.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ความย่อ ==&lt;br /&gt;
เพจ &amp;quot;ใบสั่งขาย&amp;quot;&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
	<entry>
		<id>http://wiki.cuneifox.com/index.php?title=%E0%B9%82%E0%B8%A1%E0%B8%94%E0%B8%B9%E0%B8%A5%E0%B8%AA%E0%B8%B4%E0%B8%99%E0%B8%84%E0%B9%89%E0%B8%B2%E0%B8%84%E0%B8%87%E0%B8%84%E0%B8%A5%E0%B8%B1%E0%B8%87&amp;diff=4016</id>
		<title>โมดูลสินค้าคงคลัง</title>
		<link rel="alternate" type="text/html" href="http://wiki.cuneifox.com/index.php?title=%E0%B9%82%E0%B8%A1%E0%B8%94%E0%B8%B9%E0%B8%A5%E0%B8%AA%E0%B8%B4%E0%B8%99%E0%B8%84%E0%B9%89%E0%B8%B2%E0%B8%84%E0%B8%87%E0%B8%84%E0%B8%A5%E0%B8%B1%E0%B8%87&amp;diff=4016"/>
		<updated>2026-03-11T13:27:00Z</updated>

		<summary type="html">&lt;p&gt;Tenko: /* การตีความส่วนลด */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
{{โมดูลสินค้าคงคลัง}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Cuneifox iv menu.png|200px|thumb|right|alt=เมนูของโมดูล &amp;quot;สินค้าคงคลัง&amp;quot;|เมนูของโมดูล &amp;quot;สินค้าคงคลัง&amp;quot;]]&lt;br /&gt;
&#039;&#039;&#039;โมดูลสินค้าคงคลัง (CuneiFox Default IV)&#039;&#039;&#039; ดูแลกิจกรรมที่เกี่ยวข้องกับการซื้อ/ขายสินค้าและบริการ รวมไปถึงกิจกรรมการบริหารคลังสินค้า ได้แก่:&lt;br /&gt;
* &#039;&#039;&#039;กิจกรรมเกี่ยวกับการซื้อสินค้าและบริการ:&#039;&#039;&#039; การรับใบเสนอราคา, การสั่งซื้อ, การซื้อ, และการเปลี่ยนแปลงรายการซื้อ&lt;br /&gt;
* &#039;&#039;&#039;กิจกรรมเกี่ยวกับการขายสินค้าและบริการ:&#039;&#039;&#039; การเสนอราคา, การสั่งขาย, การขาย, และการเปลี่ยนแปลงรายการขาย&lt;br /&gt;
* &#039;&#039;&#039;กิจกรรมเกี่ยวกับการบริหารคลังสินค้า:&#039;&#039;&#039; การโอนย้ายสินค้า, การแปลงหน่วย, การรวม/แยกชุดสินค้า, และการปรับปรุงสินค้าคงคลัง&lt;br /&gt;
&lt;br /&gt;
เนื่องจากโมดูลนี้มี[[โมดูลเจ้าหนี้/ลูกหนี้]]เป็นโมดูลมูลฐาน โมดูลนี้จึงสามารถจัดการ&#039;&#039;&#039;ตั้งเจ้าหนี้ที่เกิดจากการซื้อ&#039;&#039;&#039; และ &#039;&#039;&#039;ตั้งลูกหนี้ที่เกิดจากการขาย&#039;&#039;&#039;ได้เองโดยอัตโนมัติ&lt;br /&gt;
&lt;br /&gt;
== ลำดับการตั้งค่าก่อนใช้งาน ==&lt;br /&gt;
&#039;&#039;ตั้งค่าและตั้งรหัสตามลำดับที่แนะนำใน&#039;&#039;&#039;[[โมดูลในระบบคูนิฟ็อกซ์#องค์ประกอบของโมดูล และลำดับการตั้งค่า|บทความ &amp;quot;โมดูลในระบบคูนิฟ็อกซ์&amp;quot;]]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== สิทธิ์ของผู้ใช้ ==&lt;br /&gt;
{{module_perm_leader}}&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Cuneifox iv permission.png|720px|thumb|center|alt=การแก้ไขสิทธิ์ผู้ใช้ของโมดูลสินค้าคงคลัง|การแก้ไขสิทธิ์ผู้ใช้ของโมดูลสินค้าคงคลัง]]&lt;br /&gt;
&lt;br /&gt;
{{FieldDescTableHead}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;การจัดการตารางรหัส&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;กลุ่มสินค้า&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;สินค้า&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;คลังสินค้า&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;หน่วยสินค้า&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;รายการวัสดุ&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;หมายเลขประจำตัว&#039;&#039;&#039; || &#039;&#039;ระดับ 0-4&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;การจัดการเอกสาร&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ใบสั่งซื้อ&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ใบซื้อ/รับสินค้า&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เปลี่ยนแปลงรายการซื้อ&#039;&#039;&#039; || &#039;&#039;ระดับ 0-4&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ใบสั่งขาย&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ใบขาย/ส่งสินค้า&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เปลี่ยนแปลงรายการขาย&#039;&#039;&#039; || &#039;&#039;ระดับ 0-4&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;โอนย้ายสินค้า / แปลงหน่วย&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;รวม/แยกชุดสินค้า&#039;&#039;&#039; || &#039;&#039;ระดับ 0-4&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ปรับปรุงสินค้าอื่น ๆ&#039;&#039;&#039; || &#039;&#039;ระดับ 0-5&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{TableHighlightInfo}} | &#039;&#039;&#039;อื่น ๆ&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ขายต่ำกว่ากำไรขั้นต่ำ&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถขายสินค้าต่ำกว่ากำไรขั้นต่ำที่ตั้งค่าไว้ได้&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;เข้าถึงคลังสินค้าทั้งหมด&#039;&#039;&#039; || &#039;&#039;มี/ไม่มีสิทธิ์&#039;&#039; || ผู้ใช้สามารถเข้าถึงคลังสินค้าของบริษัทได้ทุกคลัง&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;คลังสินค้าที่เข้าถึงได้&#039;&#039;&#039; || &#039;&#039;ค้นหา&amp;lt;br&amp;gt;(เลือกหลายรายการ)&#039;&#039; || คลังสินค้าที่ผู้ใช้เข้าถึงได้&lt;br /&gt;
{{3stars}} แสดงเฉพาะเมื่อผู้ใช้&#039;&#039;&#039;ไม่มีสิทธิ์ &amp;quot;เข้าถึงคลังสินค้าทั้งหมด&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;คลังสินค้าขาเข้า&#039;&#039;&#039; || &#039;&#039;ค้นหา&#039;&#039; || คลังสินค้าตั้งต้นสำหรับ&#039;&#039;&#039;ธุรกรรมฝั่งซื้อ&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;คลังสินค้าขาออก&#039;&#039;&#039; || &#039;&#039;ค้นหา&#039;&#039; || คลังสินค้าตั้งต้นสำหรับ&#039;&#039;&#039;ธุรกรรมฝั่งขาย&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ระดับการเข้าถึงรายงาน&#039;&#039;&#039; || &#039;&#039;ระดับ 0-4&#039;&#039; || ระดับการเข้าถึงรายงานของโมดูลสินค้าคงคลัง&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;การจัดการรายงาน&#039;&#039;&#039; || &#039;&#039;ระดับ 0-4&#039;&#039; ||สิทธิ์ในการจัดการข้อมูลในรายงาน&lt;br /&gt;
* &#039;&#039;&#039;ระดับต่ำกว่า 2:&#039;&#039;&#039; สามารถดูรายงานบนเพจได้เท่านั้น&lt;br /&gt;
* &#039;&#039;&#039;ระดับ 2:&#039;&#039;&#039; สามารถพิมพ์รายงานเป็นไฟล์ PDF หรือผ่านเครื่องพิมพ์ได้&lt;br /&gt;
* &#039;&#039;&#039;ระดับ 3 ขึ้นไป:&#039;&#039;&#039; สามารถพิมพ์รายงานเป็นไฟล์ PDF หรือผ่านเครื่องพิมพ์ และส่งออกข้อมูลรายงานเป็นไฟล์กระดาษทำการ (XLSX) ได้&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;การจัดการซีรีส์เอกสาร&#039;&#039;&#039; || &#039;&#039;ระดับ 0-4&#039;&#039; || &#039;&#039;(ดู[[กำหนดสิทธิ์ผู้ใช้งาน#perm5|ความหมายของค่าสิทธิ์]])&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== การตั้งค่าระบบ ==&lt;br /&gt;
{{module_setting_leader}}&lt;br /&gt;
&lt;br /&gt;
[[ไฟล์:Cuneifox iv setting.png|720px|thumb|center|alt=การตั้งค่าโมดูลสินค้าคงคลัง|การตั้งค่าโมดูลสินค้าคงคลัง]]&lt;br /&gt;
&lt;br /&gt;
{{SettingDescTableHead|15|15|25}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;รหัสบัญชีตั้งต้น&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ต้นทุนสินค้า&#039;&#039;&#039; || &#039;&#039;ค้นหา&#039;&#039; || 5110-00: ต้นทุนสินค้าขาย || &#039;&#039;(ใช้เป็นค่าตั้งต้นสำหรับ&#039;&#039;&#039;[[กลุ่มสินค้า]]&#039;&#039;&#039;ใหม่)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;สินค้าคงคลัง&#039;&#039;&#039; || &#039;&#039;ค้นหา&#039;&#039; || 1162-00: สินค้าคงคลัง || &#039;&#039;(ใช้เป็นค่าตั้งต้นสำหรับ&#039;&#039;&#039;[[กลุ่มสินค้า]]&#039;&#039;&#039;ใหม่)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;รายได้&#039;&#039;&#039; || &#039;&#039;ค้นหา&#039;&#039; || 4110-00: รายได้จากการขาย || &#039;&#039;(ใช้เป็นค่าตั้งต้นสำหรับ&#039;&#039;&#039;[[กลุ่มสินค้า]]&#039;&#039;&#039;ใหม่)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;การตั้งค่าการซื้อ/ขาย&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;โมดูลขายหน้าร้าน&#039;&#039;&#039; || &#039;&#039;ค้นหา&#039;&#039; || [[โมดูลสินค้าคงคลัง|cunei_iv: สินค้าคงคลัง]] || โมดูลที่บันทึกข้อมูลการขายหน้าร้าน &#039;&#039;(ค่าตั้งต้นเป็นโมดูลสินค้าคงคลังเอง หมายถึงการขายหน้าร้านบันทึกตรงใน[[ใบซื้อ/รับสินค้า และ ใบขาย/ส่งสินค้า|เพจ &amp;quot;ใบขาย/ส่งสินค้า&amp;quot;]])&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ซีรีส์ใบกำกับภาษีอย่างย่อ&#039;&#039;&#039; || &#039;&#039;ค้นหา&amp;lt;br&amp;gt;(เลือกหลายรายการ)&#039;&#039; || – || &#039;&#039;&#039;ซีรีส์เอกสาร &amp;quot;ใบขาย/ส่งสินค้า&amp;quot; และ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot;&#039;&#039;&#039; ที่ต้องการออกใบกำกับภาษีเป็นอย่างย่อโดยอัตโนมัติ &#039;&#039;(เป็นค่าตั้งต้นสำหรับธุรกรรมที่เกี่ยวข้อง ผู้ใช้สามารถปรับค่าเองในภายหลังได้)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ราคาซื้ออ้างอิง&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || &amp;quot;ตารางรหัสสินค้า&amp;quot; || ที่มาของราคาตั้งต้นสำหรับธุรกรรมฝั่งซื้อ เลือกจาก:&lt;br /&gt;
* &#039;&#039;&#039;ตารางรหัสสินค้า:&#039;&#039;&#039; ใช้ราคาในตารางรหัสสินค้าเป็นราคาตั้งต้น&lt;br /&gt;
* &#039;&#039;&#039;ประวัติราคา:&#039;&#039;&#039; ใช้ราคาซื้อล่าสุดของสินค้าที่ซื้อจากผู้ขายรายเดียวกันเป็นราคาตั้งต้น &#039;&#039;(หากไม่พบจะใช้ราคาจากตารางรหัสสินค้า)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ราคาขายอ้างอิง&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || &amp;quot;ตารางรหัสสินค้า&amp;quot; || ที่มาของราคาตั้งต้นสำหรับธุรกรรมฝั่งขาย เลือกจาก:&lt;br /&gt;
* &#039;&#039;&#039;ตารางรหัสสินค้า:&#039;&#039;&#039; ใช้ราคาในตารางรหัสสินค้าเป็นราคาตั้งต้น&lt;br /&gt;
* &#039;&#039;&#039;ประวัติราคา:&#039;&#039;&#039; ใช้ราคาขายล่าสุดของสินค้าที่ขายให้ลูกค้าเดียวกันเป็นราคาตั้งต้น &#039;&#039;(หากไม่พบจะใช้ราคาจากตารางรหัสสินค้า)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;กำไรขั้นต่ำที่ตั้งไว้&#039;&#039;&#039; || &#039;&#039;ค่าร้อยละ&#039;&#039; || 0.00% || กำไรขั้นต่ำในการขายสินค้าคิดเป็นร้อยละเทียบกับต้นทุน&lt;br /&gt;
* &#039;&#039;&#039;ถ้าผู้ใช้มี[[#สิทธิ์ของผู้ใช้|สิทธิ์ &amp;quot;ขายต่ำกว่ากำไรขั้นต่ำ&amp;quot;]]:&#039;&#039;&#039; ระบบจะแจ้งเตือนเมื่อกำหนดราคาขายต่ำเกินไป พร้อมแจ้งราคาขั้นต่ำ&lt;br /&gt;
* &#039;&#039;&#039;ถ้าผู้ใช้ไม่มี[[#สิทธิ์ของผู้ใช้|สิทธิ์ &amp;quot;ขายต่ำกว่ากำไรขั้นต่ำ&amp;quot;]]:&#039;&#039;&#039; ระบบจะไม่ยอมให้กำหนดราคาขายต่ำเกินไป พร้อมแจ้งราคาขั้นต่ำ&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ราคาสินค้ารวม VAT แล้ว&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || เท็จ || ใช้เป็นค่ากำหนดตั้งต้นของธุรกรรมซื้อ/ขาย &#039;&#039;(ผู้ใช้สามารถปรับค่าเองในแต่ละธุรกรรมได้)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;แสดงช่องบาร์โค้ด&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || เท็จ || แสดงช่องบาร์โค้ดในรายการสินค้าของธุรกรรมซื้อ/ขาย&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;การคำนวณต้นทุนสินค้า&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;วิธีคำนวณต้นทุน&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || &amp;quot;First in, first out&amp;quot; || วิธีการคำนวณต้นทุนของสินค้าที่ตัดออกจากคลัง เลือกจาก:&lt;br /&gt;
* &#039;&#039;&#039;First in, first out&#039;&#039;&#039; &#039;&#039;(เข้าก่อน ออกก่อน)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Last in, first out&#039;&#039;&#039; &#039;&#039;(เข้าหลัง ออกก่อน)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;เฉลี่ย&#039;&#039;&#039; &#039;&#039;(Average)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ใช้ต้นทุนสินค้าขาเข้าคงที่&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || เท็จ || &#039;&#039;{{3stars}} ดูหัวข้อที่เกี่ยวข้อง[[#ต้นทุนสินค้าขาเข้าคงที่|ท้ายบทความ]]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;วิธีคำนวณต้นทุนสินค้าส่งคืน&#039;&#039;&#039; || &#039;&#039;ตัวเลือก&#039;&#039; || &amp;quot;ยึดตามวิธีคำนวณต้นทุน&amp;quot; || กำหนดวิธีการรับรู้ต้นทุนของสินค้าที่ส่งคืนผู้ขาย เลือกจาก:&lt;br /&gt;
* &#039;&#039;&#039;ยึดตามวิธีคำนวณต้นทุน:&#039;&#039;&#039; ใช้วิธีการเดียวกันการรับรู้ต้นทุนสินค้าขายทั่วๆ ไป&lt;br /&gt;
* &#039;&#039;&#039;ยึดตามเอกสารอ้างอิง:&#039;&#039;&#039; ใช้ต้นทุนของสินค้าตามรายการซื้อที่เกี่ยวข้อง&lt;br /&gt;
&#039;&#039;{{3stars}} ดูหัวข้อที่เกี่ยวข้องในบทความของ[[เปลี่ยนแปลงรายการซื้อ และ เปลี่ยนแปลงรายการขาย#สินค้าคงคลัง|เพจ &amp;quot;เปลี่ยนแปลงรายการซื้อ และ เปลี่ยนแปลงรายการขาย&amp;quot;&#039;&#039;]]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ใบเพิ่ม/ลดหนี้ซื้อมีผลต่อต้นทุนสินค้าในคลัง&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || เท็จ || ปรับมูลค่าสินค้าคงคลังเมื่อบันทึกใบเพิ่ม/ลดหนี้ผ่าน&#039;&#039;&#039;[[เปลี่ยนแปลงรายการซื้อ และ เปลี่ยนแปลงรายการขาย|เพจ &amp;quot;เปลี่ยนแปลงรายการซื้อ&amp;quot;]]&#039;&#039;&#039;&lt;br /&gt;
{{3stars}} วิธีนี้มีความสมเหตุสมผลในทางบัญชี แต่มีโอกาสทำให้เกิดรายการสินค้าที่ไม่มีจำนวนแต่มีมูลค่า (เป็นบวกหรือลบ) อยู่ในคลังสินค้าได้ โดยเฉพาะในบริษัทที่บริหารจำนวนสินค้าแบบพอดีจำหน่าย&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;รวมล็อตสินค้าในงวดสิ้นปี&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || จริง || สำหรับเดือนสิ้นปีบัญชี ให้ยกยอดสินค้าคงคลังที่คงเหลือทั้งหมดไปยังปีบัญชีใหม่เป็นบรรทัดสรุปบรรทัดเดียว สำหรับแต่ละชนิด-คลัง-หน่วย&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;อนุญาตให้ตัดสต๊อกติดลบ&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || จริง || {{3stars}} มีผลต่อสินค้าในกลุ่มที่ &#039;&#039;&#039;&amp;quot;บันทึกจำนวนสินค้าเข้า/ออก&amp;quot;&#039;&#039;&#039; และ &#039;&#039;&#039;&amp;quot;ไม่อนุญาตให้ตัดสต๊อกติดลบ&amp;quot;&#039;&#039;&#039; เท่านั้น&lt;br /&gt;
|-&lt;br /&gt;
| colspan=4 {{TableHighlightInfo}} | &#039;&#039;&#039;การตั้งค่าอื่น ๆ&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;คำนวณภาษีมูลค่าเพิ่มในการโอนย้ายสินค้าระหว่างคลัง&#039;&#039;&#039; || &#039;&#039;จริง/เท็จ&#039;&#039; || เท็จ || ให้ระบบสร้างใบกำกับภาษีซื้อและขายสำหรับการโอยย้ายสินค้าด้วย สำหรับกรณีเป็นการโอนย้ายข้ามแผนก&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ภาษีซื้อเมื่อจ่ายชำระ และ ภาษีขายเมื่อรับชำระ ===&lt;br /&gt;
&#039;&#039;&#039;สำหรับธุรกรรมการซื้อ/ขายที่ยังไม่มีการชำระเงิน&#039;&#039;&#039; ผู้ใช้สามารถเลือกตั้งค่าให้ระบบบันทึกใบกำกับภาษีในทันทีหรือไม่ก็ได้ โดยตั้งค่าใน[[โมดูลเจ้าหนี้/ลูกหนี้#การตั้งค่าระบบ|&#039;&#039;&#039;หมวด &amp;quot;การตั้งค่าภาษีมูลค่าเพิ่มสำหรับโมดูลสินค้าคงคลัง&amp;quot;&#039;&#039;&#039; ของโมดูลเจ้าหนี้/ลูกหนี้]] โดยพฤติกรรมของธุรกรรมซื้อ/ขายจะเป็นดังนี้:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;กรณีไม่เปิดใช้งาน&#039;&#039;&#039; &amp;quot;ภาษีซื้อเมื่อจ่ายชำระ&amp;quot; และ/หรือ &amp;quot;ภาษีขายเมื่อรับชำระ&amp;quot; &#039;&#039;(พฤติกรรมปกติ):&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;ธุรกรรมฝั่งซื้อ&#039;&#039;&#039;จะบันทึกใบกำกับภาษีซื้อทันทีในทุกกรณี &#039;&#039;(ถ้ามี)&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;ธุรกรรมฝั่งขาย&#039;&#039;&#039;จะบันทึกใบกำกับภาษีขายทันทีในทุกกรณี&lt;br /&gt;
* &#039;&#039;&#039;กรณีเปิดใช้งาน&#039;&#039;&#039; &amp;quot;ภาษีซื้อเมื่อจ่ายชำระ&amp;quot; และ/หรือ &amp;quot;ภาษีขายเมื่อรับชำระ&amp;quot;:&lt;br /&gt;
** &#039;&#039;&#039;ธุรกรรมฝั่งซื้อเงินเชื่อ&#039;&#039;&#039; &#039;&#039;(เครดิต)&#039;&#039; จะยังไม่บันทึกใบกำกับภาษีซื้อ แต่จะชะลอไปบันทึกเมื่อมี[[บันทึกการชำระเจ้าหนี้|การจ่ายชำระ]]&lt;br /&gt;
** &#039;&#039;&#039;ธุรกรรมฝั่งซื้ออื่นๆ&#039;&#039;&#039; จะบันทึกใบกำกับภาษีซื้อทันที &#039;&#039;(ถ้ามี)&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;ธุรกรรมฝั่งขายงินเชื่อ&#039;&#039;&#039; &#039;&#039;(เครดิต)&#039;&#039; จะยังไม่บันทึกใบกำกับภาษีขาย แต่จะชะลอไปบันทึกเมื่อมี[[บันทึกการรับชำระลูกหนี้|การรับชำระ]]&lt;br /&gt;
** &#039;&#039;&#039;ธุรกรรมฝั่งขายอื่นๆ&#039;&#039;&#039; จะบันทึกใบกำกับภาษีขายทันที&lt;br /&gt;
&lt;br /&gt;
== ตารางรหัส ==&lt;br /&gt;
ตารางรหัสของโมดูลสินค้าคงคลังมีดังต่อไปนี้:&lt;br /&gt;
* [[กลุ่มสินค้า]]&lt;br /&gt;
* [[สินค้า]]&lt;br /&gt;
* [[คลังสินค้า]]&lt;br /&gt;
* [[หน่วยสินค้า]]&lt;br /&gt;
* [[รายการวัสดุ]]&lt;br /&gt;
* [[หมายเลขประจำตัว]]&lt;br /&gt;
&lt;br /&gt;
{{module_table_leader}}&lt;br /&gt;
&lt;br /&gt;
== รูปแบบการบันทึกบัญชีรายวัน ==&lt;br /&gt;
ในโมดูลนี้มีธุรกรรมที่บันทึกบัญชีรายวันอัตโนมัติดังต่อไปนี้:&lt;br /&gt;
* [[ใบซื้อ/รับสินค้า และ ใบขาย/ส่งสินค้า#ใบซื้อ/รับสินค้า|ใบซื้อ/รับสินค้า]]&lt;br /&gt;
* &amp;lt;li style=&amp;quot;padding-bottom:10px;&amp;quot;&amp;gt;[[เปลี่ยนแปลงรายการซื้อ และ เปลี่ยนแปลงรายการขาย#เปลี่ยนแปลงรายการซื้อ|เปลี่ยนแปลงรายการซื้อ]]&amp;lt;/li&amp;gt;&lt;br /&gt;
* [[ใบซื้อ/รับสินค้า และ ใบขาย/ส่งสินค้า#ใบขาย/ส่งสินค้า|ใบขาย/ส่งสินค้า]]&lt;br /&gt;
* &amp;lt;li style=&amp;quot;padding-bottom:10px;&amp;quot;&amp;gt;[[เปลี่ยนแปลงรายการซื้อ และ เปลี่ยนแปลงรายการขาย#เปลี่ยนแปลงรายการขาย|เปลี่ยนแปลงรายการขาย]]&amp;lt;/li&amp;gt;&lt;br /&gt;
* [[โอนย้ายสินค้า / แปลงหน่วยนับ#รูปแบบการบันทึกบัญชีรายวัน|โอนย้ายสินค้า / แปลงหน่วยนับ]]&lt;br /&gt;
* [[รวม/แยกชุดสินค้า#รูปแบบการบันทึกบัญชีรายวัน|รวม/แยกชุดสินค้า]]&lt;br /&gt;
* [[ปรับปรุงสินค้าอื่น ๆ#รูปแบบการบันทึกบัญชีรายวัน|ปรับปรุงสินค้าอื่น ๆ]]&lt;br /&gt;
&lt;br /&gt;
== ซีรีส์เอกสารตั้งต้น ==&lt;br /&gt;
{{DocSeriesTableHead}}&lt;br /&gt;
{{DocSeriesTableRow| ใบสั่งซื้อ | ✓ | POR | ใบสั่งซื้อ}}&lt;br /&gt;
{{DocSeriesTableRow| ใบซื้อ/รับสินค้า | ✓ | IVR | ใบซื้อ/รับสินค้า | highlight=yes}}&lt;br /&gt;
{{DocSeriesTableRow| เปลี่ยนแปลงรายการซื้อ | – | CCN | รายการลดหนี้ (ซื้อ)}}&lt;br /&gt;
{{DocSeriesTableRow| เปลี่ยนแปลงรายการซื้อ | – | CDN | รายการเพิ่มหนี้ (ซื้อ)}}&lt;br /&gt;
{{DocSeriesTableRow| เปลี่ยนแปลงรายการซื้อ | ✓ | IVC | ใบส่งคืนสินค้า}}&lt;br /&gt;
{{DocSeriesTableRow| ใบสั่งขาย | ✓ | SOR | ใบสั่งขาย | highlight=yes}}&lt;br /&gt;
{{DocSeriesTableRow| ใบขาย/ส่งสินค้า | ✓ | IVP | ใบขาย/ส่งสินค้า}}&lt;br /&gt;
{{DocSeriesTableRow| เปลี่ยนแปลงรายการขาย | ✓ | IVT | ใบรับคืนสินค้า | highlight=yes}}&lt;br /&gt;
{{DocSeriesTableRow| เปลี่ยนแปลงรายการขาย | – | RCN | รายการลดหนี้ (ขาย) | highlight=yes}}&lt;br /&gt;
{{DocSeriesTableRow| เปลี่ยนแปลงรายการขาย | – | RDN | รายการเพิ่มหนี้ (ขาย) | highlight=yes}}&lt;br /&gt;
{{DocSeriesTableRow| โอนย้ายสินค้า / แปลงหน่วยนับ | ✓ | MVE | โอนย้ายสินค้า / แปลงหน่วยนับ}}&lt;br /&gt;
{{DocSeriesTableRow| รวม/แยกชุดสินค้า | ✓ | BOM | รวม/แยกชุดสินค้า | highlight=yes}}&lt;br /&gt;
{{DocSeriesTableRow| ปรับปรุงสินค้าอื่น ๆ | ✓ | CHN | ปรับปรุงสินค้าอื่น ๆ}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ข้อมูลธุรกรรมและเมนูอื่นๆ ==&lt;br /&gt;
* [[ใบสั่งซื้อ และ ใบสั่งขาย|ใบสั่งซื้อ]]&lt;br /&gt;
* [[ใบซื้อ/รับสินค้า และ ใบขาย/ส่งสินค้า|ใบซื้อ/รับสินค้า]]&lt;br /&gt;
* &amp;lt;li style=&amp;quot;padding-bottom:10px;&amp;quot;&amp;gt;[[เปลี่ยนแปลงรายการซื้อ และ เปลี่ยนแปลงรายการขาย|เปลี่ยนแปลงรายการซื้อ]]&amp;lt;/li&amp;gt;&lt;br /&gt;
* [[ใบสั่งซื้อ และ ใบสั่งขาย|ใบสั่งขาย]]&lt;br /&gt;
* [[ใบซื้อ/รับสินค้า และ ใบขาย/ส่งสินค้า|ใบขาย/ส่งสินค้า]]&lt;br /&gt;
* &amp;lt;li style=&amp;quot;padding-bottom:10px;&amp;quot;&amp;gt;[[เปลี่ยนแปลงรายการซื้อ และ เปลี่ยนแปลงรายการขาย|เปลี่ยนแปลงรายการขาย]]&amp;lt;/li&amp;gt;&lt;br /&gt;
* [[โอนย้ายสินค้า / แปลงหน่วยนับ|โอนย้ายสินค้า / แปลงหน่วยนับ]]&lt;br /&gt;
* [[รวม/แยกชุดสินค้า|รวม/แยกชุดสินค้า]]&lt;br /&gt;
* &amp;lt;li style=&amp;quot;padding-bottom:10px;&amp;quot;&amp;gt;[[ปรับปรุงสินค้าอื่น ๆ|ปรับปรุงสินค้าอื่น ๆ]]&amp;lt;/li&amp;gt;&lt;br /&gt;
* [[สถานะสินค้าคงคลังปัจจุบัน|สถานะสินค้าคงคลังปัจจุบัน]]&lt;br /&gt;
&lt;br /&gt;
== รายการประวัติต่างๆ ==&lt;br /&gt;
=== สินค้าคงคลัง ===&lt;br /&gt;
&#039;&#039;&#039;ประวัติสินค้าคงคลัง (IVH)&#039;&#039;&#039; บันทึกรายการสินค้าเข้า/ออก และรายการปรับปรุงมูลค่า โดยเก็บรายละเอียดต่างๆ ดังนี้:&lt;br /&gt;
* &#039;&#039;&#039;สินค้า / คลังสินค้า / หน่วยสินค้า&#039;&#039;&#039;ที่มีการเคลื่อนไหว&lt;br /&gt;
* ข้อมูลและวันที่&#039;&#039;&#039;เอกสารธุรกรรม&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;(สำหรับ[[เปลี่ยนแปลงรายการซื้อ และ เปลี่ยนแปลงรายการขาย|ธุรกรรม &amp;quot;เปลี่ยนแปลงรายการซื้อ&amp;quot; และ &amp;quot;เปลี่ยนแปลงรายการขาย&amp;quot;]])&#039;&#039; ข้อมูลและวันที่&#039;&#039;&#039;เอกสารอ้างอิง&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;จำนวนเคลื่อนไหว&#039;&#039;&#039;ในธุรกรรมนั้นๆ (ค่าบวกแสดงสินค้าเข้า, ค่าลบแสดงสินค้าออก)&lt;br /&gt;
* &#039;&#039;&#039;มูลค่าต้นทุน&#039;&#039;&#039; โดยบันทึกเป็นต้นทุนรวมของรายการทั้งบรรทัด &#039;&#039;(ไม่บันทึกเป็นต้นทุนต่อหน่วย)&#039;&#039; เพื่อลดความคลาดเคลื่อนจากการปัดเศษทศนิยม&lt;br /&gt;
* &#039;&#039;(สำหรับธุรกรรมขาเข้า)&#039;&#039; &#039;&#039;&#039;จำนวนคงเหลือ&#039;&#039;&#039;ประจำล็อต ณ ต้นเดือน และจำนวนคงเหลือจากการตัดล็อตภายในเดือน&lt;br /&gt;
* &#039;&#039;(สำหรับธุรกรรมขาเข้า)&#039;&#039; &#039;&#039;&#039;รายการของจำนวนและมูลค่าสินค้าที่ตัดออกจากล็อตนี้ไป&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;(สำหรับธุรกรรมขาออก)&#039;&#039; &#039;&#039;&#039;รายการของจำนวนและมูลค่าของล็อตสินค้าที่ใช้ตัดสินค้าออก&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{3stars}} ระบบคูนิฟ็อกซ์คำนวณต้นทุนสินค้าแยกกันสำหรับแต่ละ&#039;&#039;&#039;สินค้า-คลัง-หน่วย (product-warehouse-unit: PWU)&#039;&#039;&#039; โดยการย้ายสินค้าข้ามคลังและการแปลงหน่วยจะกระทำก็ต่อเมื่อผู้ใช้สั่งการให้ทำผ่าน&#039;&#039;&#039;[[โอนย้ายสินค้า / แปลงหน่วยนับ|ธุรกรรม &amp;quot;โอนย้ายสินค้า / แปลงหน่วยนับ&amp;quot;]]&#039;&#039;&#039; เท่านั้น&lt;br /&gt;
&lt;br /&gt;
{{3stars}} ในธุรกรรมเดียวกัน ระบบจะบันทึกรวบประวัติสินค้าคงคลังของแต่ละ&#039;&#039;&#039;สินค้า-คลัง-หน่วย-ขาเข้า/ออก&#039;&#039;&#039;เป็น 1 รายการประวัติ เช่น:&lt;br /&gt;
* &#039;&#039;&#039;รายการซื้อสินค้า:&#039;&#039;&#039; ซื้อสินค้า A จำนวน &#039;&#039;&#039;10 ชิ้น&#039;&#039;&#039; &#039;&#039;(ราคาชิ้นละ 100 บาท)&#039;&#039; &#039;&#039;&#039;แถม 1 ชิ้น&#039;&#039;&#039; จะบันทึกเป็น&#039;&#039;&#039;ประวัติสินค้าเข้า 11 ชิ้นที่ต้นทุนรวม 1,000 บาท&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;รายการรวม/แยกชุดสินค้า:&#039;&#039;&#039; แยกชิ้นส่วนสินค้าสำเร็จรูป A &#039;&#039;&#039;ได้อะไหล่ C มา 20 ชิ้น&#039;&#039;&#039; พร้อมกับประกอบสินค้าสำเร็จรูป B ต้อง&#039;&#039;&#039;ใช้อะไหล่ C จำนวน 15 ชิ้น&#039;&#039;&#039; จะบันทึกประวัติของอะไหล่ C เป็น &#039;&#039;&#039;2 บรรทัด&#039;&#039;&#039; คือ &#039;&#039;&#039;เข้า 20 ชิ้น&#039;&#039;&#039; และ&#039;&#039;&#039;ออก 15 ชิ้น&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ธุรกรรมที่เกี่ยวข้อง ====&lt;br /&gt;
* &#039;&#039;&#039;รายการสินค้าเข้า:&#039;&#039;&#039; [[ใบซื้อ/รับสินค้า]] และ [[เปลี่ยนแปลงรายการซื้อ|รับคืนสินค้า]]&lt;br /&gt;
* &#039;&#039;&#039;รายการสินค้าออก:&#039;&#039;&#039; [[ใบขาย/ส่งสินค้า]] และ [[เปลี่ยนแปลงรายการขาย|ส่งคืนสินค้า]]&lt;br /&gt;
* &#039;&#039;&#039;ธุรกรรมที่มีรายการสินค้าเข้าและออก&#039;&#039;&#039; &#039;&#039;โดยโปรแกรมคำนวณมูลค่าขาเข้าจากต้นทุนสินค้าออกให้โดยอัตโนมัติ:&#039;&#039; [[โอนย้ายสินค้า / แปลงหน่วยนับ]] และ [[รวม/แยกชุดสินค้า]]&lt;br /&gt;
* &#039;&#039;&#039;ธุรกรรมที่อาจมีรายการสินค้าเข้า, ออก, หรือปรับมูลค่า:&#039;&#039;&#039; [[ปรับปรุงสินค้าอื่น ๆ]]&lt;br /&gt;
&lt;br /&gt;
=== สินค้าค้างรับ/ค้างส่ง ===&lt;br /&gt;
&#039;&#039;&#039;ประวัติสินค้าค้างรับ (POH)&#039;&#039;&#039; และ &#039;&#039;&#039;ประวัติสินค้าค้างส่ง (SOH)&#039;&#039;&#039; บันทึกรายการสินค้าตามใบสั่งซื้อหักรายการที่รับเข้าแล้ว และ ใบสั่งขายหักรายการที่จัดส่งแล้วตามลำดับ รายละเอียดที่บันทึกได้แก่:&lt;br /&gt;
* &#039;&#039;&#039;สินค้า / คลังสินค้า / หน่วยสินค้า&#039;&#039;&#039;&lt;br /&gt;
* ข้อมูลและวันที่&#039;&#039;&#039;ใบสั่งซื้อ&#039;&#039;&#039; หรือ &#039;&#039;&#039;ใบสั่งขาย&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;(สำหรับธุรกรรมซื้อ/ขาย)&#039;&#039; ข้อมูลและวันที่&#039;&#039;&#039;ใบซื้อ/รับสินค้า&#039;&#039;&#039; หรือ &#039;&#039;&#039;ใบขาย/ส่งสินค้า&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;จำนวน&#039;&#039;&#039; (ค่าบวกแสดงรายการสั่งซื้อ/สั่งขาย, ค่าลบแสดงรายการรับ/ส่งสินค้า)&lt;br /&gt;
&lt;br /&gt;
==== ธุรกรรมที่เกี่ยวข้อง ====&lt;br /&gt;
* &#039;&#039;&#039;ประวัติสินค้าค้างรับ:&#039;&#039;&#039; [[ใบสั่งซื้อ]] และ [[ใบซื้อ/รับสินค้า]]&lt;br /&gt;
* &#039;&#039;&#039;ประวัติสินค้าค้างส่ง:&#039;&#039;&#039; [[ใบสั่งขาย]] และ [[ใบขาย/ส่งสินค้า]]&lt;br /&gt;
&lt;br /&gt;
=== ประวัติราคาซื้อ/ขาย ===&lt;br /&gt;
&#039;&#039;&#039;ประวัติราคาซื้อ/ขาย (PriceHistory)&#039;&#039;&#039; บันทึกราคาล่าสุดที่ซื้อและขายสินค้าแต่ละหน่วย โดยบันทึกแยกกันสำหรับผู้ขาย/ลูกค้าแต่ละราย รายละเอียดที่บันทึกได้แก่:&lt;br /&gt;
* &#039;&#039;&#039;ผู้ขาย หรือ ลูกค้า&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;สินค้า / หน่วยสินค้า&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;วันที่ของธุรกรรมที่ใช้ราคานี้&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;ราคา และส่วนลดล่าสุด&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;สถานะรวม VAT ของราคาล่าสุด&#039;&#039;&#039; &#039;&#039;(ใช้ร่วมกับสถานะรวม VAT ของธุรกรรม เพื่อให้สามารถแสดงราคาซื้อ/ขายตั้งต้นได้อย่างถูกต้อง)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ธุรกรรมที่เกี่ยวข้อง ====&lt;br /&gt;
* &#039;&#039;&#039;ประวัติราคาซื้อ:&#039;&#039;&#039; [[ใบสั่งซื้อ]] และ [[ใบซื้อ/รับสินค้า]]&lt;br /&gt;
* &#039;&#039;&#039;ประวัติราคาขาย:&#039;&#039;&#039; [[ใบสั่งขาย]] และ [[ใบขาย/ส่งสินค้า]]&lt;br /&gt;
&lt;br /&gt;
{{3stars}} ระบบจะบันทึกประวัติราคาก็ต่อเมื่อ:&lt;br /&gt;
* ผู้ใช้เพิ่มหรือแก้ไขรายการสินค้าในธุรกรรมโดยตรง หรือนำเข้าธุรกรรมเท่านั้น &#039;&#039;&#039;และ&#039;&#039;&#039;&lt;br /&gt;
* วันที่ของธุรกรรมนั้นอยู่หลังวันที่ที่อยู่ในประวัติราคา&lt;br /&gt;
&lt;br /&gt;
== หัวข้ออื่นๆ ที่น่าสนใจ ==&lt;br /&gt;
=== ต้นทุนสินค้าขาเข้าคงที่ ===&lt;br /&gt;
การคำนวณต้นทุนแบบ FIFO และ LIFO ใช้มูลค่าต่อหน่วยของแต่ละล็อตมาคำนวณเป็นต้นทุนเมื่อมีการตัดล็อตสินค้านั้นๆ โดยทั่วไป มูลค่าต่อหน่วยของสินค้าในล็อตเดียวกันควรจะมีค่าเท่ากันเสมอ &#039;&#039;(ต้นทุนสินค้าขาเข้ามีค่าคงที่ในล็อต)&#039;&#039; อย่างไรก็ตาม การใช้ค่าเฉลี่ยค่าเดียวในการตัดมูลค่าสินค้าทั้งล็อต&#039;&#039;&#039;อาจทำให้มีมูลค่าตกค้างหรือสูญหายจากบัญชีสินค้าคงคลังได้&#039;&#039;&#039; เนื่องจากผลสะสมของการปัดเศษทศนิยม&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;หากผู้ใช้ปิดการตั้งค่า &amp;quot;ต้นทุนสินค้าขาเข้าคงที่&amp;quot;&#039;&#039;&#039; ระบบคูนิฟ็อกซ์จะแก้ปัญหานี้โดย&#039;&#039;&#039;นำจำนวนและมูลค่าคงเหลือของล็อต ณ ขณะนั้น มาเฉลี่ยมูลค่าใหม่ทุกครั้งที่จะตัดล็อต&#039;&#039;&#039; &#039;&#039;(แทนวิธีการแบบดั้งเดิม ซึ่งใช้ค่าเฉลี่ยค่าเดียวสำหรับทั้งล็อต)&#039;&#039; ทำให้สามารถแก้ปัญหามูลค่าตกค้างในบัญชีสินค้าคงคลังได้ แต่&#039;&#039;&#039;อาจทำให้มูลค่าของสินค้าที่ตัดจากล็อตเดียวกันแตกต่างกันไปเล็กน้อย&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
เพื่อเป็นตัวอย่างประกอบการพิจารณาตั้งค่า และให้เห็นความแตกต่างระหว่างวิธีการคำนวณทั้งสองวิธี สมมุติว่า&#039;&#039;&#039;ซื้อสินค้า A มาจำนวน 1 ลัง (บรรจุ 7 ชิ้น) ในราคา 120.00 บาท แล้วแยกขายหน้าร้านทีละชิ้น&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! style=&amp;quot;min-width:140px;&amp;quot; | เหตุการณ์ !! style=&amp;quot;min-width:300px;&amp;quot; | ใช้ &amp;quot;ต้นทุนสินค้าขาเข้าคงที่&amp;quot; !! style=&amp;quot;min-width:340px;&amp;quot; | ไม่ใช้ &amp;quot;ต้นทุนสินค้าขาเข้าคงที่&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ซื้อสินค้าเข้า 7 ชิ้น&amp;lt;br&amp;gt;ราคารวม 120.00 บาท&lt;br /&gt;
| บันทึกสินค้าเข้า 7 ชิ้น มูลค่ารวม 120.00 บาท&amp;lt;br&amp;gt;&#039;&#039;(ต้นทุนเฉลี่ยต่อชิ้น 17.14 บาท)&#039;&#039; || บันทึกสินค้าเข้า 7 ชิ้น มูลค่ารวม 120.00 บาท&lt;br /&gt;
|-&lt;br /&gt;
! ขายสินค้า 1 ชิ้น&lt;br /&gt;
| บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 6 ชิ้น รวมมูลค่า 102.86 บาท)&#039;&#039; || บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน &amp;lt;math&amp;gt;1 \times \frac{120.00}{7}&amp;lt;/math&amp;gt; = 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 6 ชิ้น รวมมูลค่า 102.86 บาท)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! ขายสินค้า 1 ชิ้น&lt;br /&gt;
| บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 5 ชิ้น รวมมูลค่า 85.72 บาท)&#039;&#039; || บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน &amp;lt;math&amp;gt;1 \times \frac{102.86}{6}&amp;lt;/math&amp;gt; = 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 5 ชิ้น รวมมูลค่า 85.72 บาท)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! ขายสินค้า 1 ชิ้น&lt;br /&gt;
| บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 4 ชิ้น รวมมูลค่า 68.58 บาท)&#039;&#039; || บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน &amp;lt;math&amp;gt;1 \times \frac{85.72}{5}&amp;lt;/math&amp;gt; = 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 4 ชิ้น รวมมูลค่า 68.58 บาท)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! ขายสินค้า 1 ชิ้น&lt;br /&gt;
| บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 3 ชิ้น รวมมูลค่า 51.44 บาท)&#039;&#039; || บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน &amp;lt;math&amp;gt;1 \times \frac{68.58}{4}&amp;lt;/math&amp;gt; = &#039;&#039;&#039;17.15 บาท&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 3 ชิ้น รวมมูลค่า 51.43 บาท)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! ขายสินค้า 1 ชิ้น&lt;br /&gt;
| บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 2 ชิ้น รวมมูลค่า 34.30 บาท)&#039;&#039; || บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน &amp;lt;math&amp;gt;1 \times \frac{51.43}{3}&amp;lt;/math&amp;gt; = 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 2 ชิ้น รวมมูลค่า 34.29 บาท)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! ขายสินค้า 1 ชิ้น&lt;br /&gt;
| บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 1 ชิ้น รวมมูลค่า 17.16 บาท)&#039;&#039; || บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน &amp;lt;math&amp;gt;1 \times \frac{34.29}{2}&amp;lt;/math&amp;gt; = &#039;&#039;&#039;17.15 บาท&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 1 ชิ้น รวมมูลค่า 17.14 บาท)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! ขายสินค้า 1 ชิ้น&lt;br /&gt;
| บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 0 ชิ้น รวมมูลค่า 0.02 บาท)&#039;&#039; || บันทึกสินค้าออก 1 ชิ้นที่ต้นทุน &amp;lt;math&amp;gt;1 \times \frac{17.14}{1}&amp;lt;/math&amp;gt; = 17.14 บาท&amp;lt;br&amp;gt;&#039;&#039;(คงเหลือสินค้าในล็อต 0 ชิ้น รวมมูลค่า 0.00 บาท)&#039;&#039;&lt;br /&gt;
|- {{TableHighlightInfo|do_center=no}}&lt;br /&gt;
! {{TableHighlightInfo}} | ข้อสังเกต&lt;br /&gt;
| บัญชีสินค้าคงคลังมี&#039;&#039;&#039;ยอด 0.02 บาทที่ไม่มีตัวตนสินค้าอยู่ จะต้องปรับปรุงออกเมื่อสิ้นงวด&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(ระบบคูนิฟ็อกซ์จะแจ้งยอดในลักษณะนี้ให้ผู้ใช้ทราบ เมื่อสั่ง[[คำนวณข้อมูลใหม่]]ในเดือนสิ้นปีบัญชี)&#039;&#039;&lt;br /&gt;
|| บัญชีสินค้าคงคลัง&#039;&#039;&#039;ไม่มียอดตกค้าง&#039;&#039;&#039; แต่จะเห็นว่าสินค้าในล็อตเดียวกันอาจ&#039;&#039;&#039;มีต้นทุน 17.14 – 17.15 บาทขึ้นกับการตัดล็อต&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== การใช้งานฟีเจอร์บาร์โค้ด ===&lt;br /&gt;
ในธุรกรรมต่างๆ ผู้ใช้สามารถใช้งานช่องข้อมูลบาร์โค้ดได้ดังนี้:&lt;br /&gt;
# ระบุข้อความที่ต้องการค้นหา ซึ่งอาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้:&lt;br /&gt;
#* &#039;&#039;&#039;บาร์โค้ดที่ต้องการค้นหา เช่น {{mono|1234567890128}}:&#039;&#039;&#039; ระบบจะตีความจำนวนสินค้าเป็น 1 ให้โดยอัตโนมัติ&lt;br /&gt;
#* &#039;&#039;&#039;ตัวเลข ตามด้วย &#039;เครื่องหมาย *&#039; ตามด้วยบาร์โค้ด:&#039;&#039;&#039; ระบบจะตีความผลคูณของตัวเลขหน้าบาร์โค้ดเป็นจำนวน เช่น:&lt;br /&gt;
#** {{mono|5*1234567890128}} &#039;&#039;(ตีความจำนวนเป็น 5)&#039;&#039;&lt;br /&gt;
#** {{mono|5*10*1234567890128}} &#039;&#039;(ตีความจำนวนเป็น 50)&#039;&#039;&lt;br /&gt;
#** {{mono|*1234567890128}} &#039;&#039;(กรณีไม่มีตัวเลขจะตีความจำนวนเป็น 1)&#039;&#039;&lt;br /&gt;
# กดปุ่ม {{key_press|Enter}}, {{key_press|Tab}}, {{key_press|;}}, หรือใช้เมาส์คลิกที่ช่องข้อมูลอื่น เพื่อให้ระบบกรอกข้อมูลสินค้า, หน่วย, และจำนวนให้โดยอัตโนมัติ (กรณีพบบาร์โค้ดในฐานข้อมูล)&lt;br /&gt;
&lt;br /&gt;
==== การแฝงข้อมูลจำนวนอยู่ในบาร์โค้ด ====&lt;br /&gt;
หากผู้ใช้เลือกใช้บาร์โค้ดแบบ CODE128 ผู้ใช้สามารถแฝงข้อมูลจำนวนลงในบาร์โค้ดได้โดยตรง เช่น สินค้า A มีบาร์โค้ดรายชิ้นเป็น {{mono|1234567890128}} แต่บริษัทของผู้ใช้ไม่จำหน่ายแยกชิ้น ต้องการขายรวมทีละ 100 ชิ้นเท่านั้น ก็สามารถทำบาร์โค้ดพิเศษ {{mono|100*1234567890128}} ขึ้นใช้ในร้านได้เพื่อความสะดวก&lt;br /&gt;
&lt;br /&gt;
==== การตั้งค่าอุปกรณ์อ่านบาร์โค้ดที่แนะนำ ====&lt;br /&gt;
อุปกรณ์อ่านบาร์โค้ดส่วนมากรองรับการตั้งค่าอักขระก่อนและหลังบาร์โค้ด ผู้ใช้สามารถตั้งค่าเป็นแบบใดแบบหนึ่งต่อไปนี้ เพื่อให้สามารถทำงานได้สะดวกรวดเร็วขึ้น:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! การตั้งค่า !! การใช้งาน&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;{{key_press|*}} + บาร์โค้ด + {{key_press|Enter}}&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{key_press|*}} + บาร์โค้ด + {{key_press|Tab}}&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{key_press|*}} + บาร์โค้ด + {{key_press|;}}&#039;&#039;&#039;&lt;br /&gt;
|| ใช้งานได้สะดวกที่สุด ผู้ใช้สามารถ:&lt;br /&gt;
* อ่านบาร์โค้ดโดยตรง&lt;br /&gt;
* คีย์จำนวนที่ต้องการแล้วอ่านบาร์โค้ด&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;บาร์โค้ด + {{key_press|Enter}}&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;บาร์โค้ด + {{key_press|Tab}}&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;บาร์โค้ด + {{key_press|;}}&#039;&#039;&#039;&lt;br /&gt;
|| ผู้ใช้สามารถ:&lt;br /&gt;
* อ่านบาร์โค้ดโดยตรง&lt;br /&gt;
* คีย์จำนวนที่ต้องการ ตามด้วย &#039;เครื่องหมาย *&#039; แล้วอ่านบาร์โค้ด&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;บาร์โค้ด&#039;&#039;&#039;&lt;br /&gt;
|| ผู้ใช้สามารถ:&lt;br /&gt;
* อ่านบาร์โค้ดโดยตรง แล้วกด {{key_press|Enter}}, {{key_press|Tab}}, หรือ {{key_press|;}}&lt;br /&gt;
* คีย์จำนวนที่ต้องการ ตามด้วย &#039;เครื่องหมาย *&#039; แล้วอ่านบาร์โค้ด จากนั้นกด {{key_press|Enter}}, {{key_press|Tab}}, หรือ {{key_press|;}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== การตีความส่วนลด ===&lt;br /&gt;
ระบบคูนิฟ็อกซ์รองรับส่วนลดหลายขั้น ที่มีทั้งส่วนลดแบบร้อยละและแบบยอดเงินผสมกัน มีหลักการตีความส่วนลดดังนี้:&lt;br /&gt;
# พิจารณาส่วนลดที่ผู้ใช้กรอกเข้ามาทีละตัวอักษร&lt;br /&gt;
# กรณีพบ&#039;&#039;&#039;ตัวเลขหรือเครื่องหมาย &#039;จุด&#039; (.)&#039;&#039;&#039; ให้ตีความเป็นจำนวนพักเอาไว้&lt;br /&gt;
# เมื่อพบอักขระที่ไม่ใช่ตัวเลข ให้นำจำนวนที่พักเอาไว้มาพิจารณาดังนี้:&lt;br /&gt;
#* หากพบ &#039;&#039;&#039;&#039;เครื่องหมายเปอร์เซ็นต์&#039; (%):&#039;&#039;&#039; จะตีความว่าลดเป็นร้อยละเท่ากับจำนวนที่พักไว้&lt;br /&gt;
#* หากพบ&#039;&#039;&#039;อักขระอื่นๆ (รวมถึงการเว้นวรรค):&#039;&#039;&#039; จะตีความว่าลดราคาเท่ากับจำนวนที่พักไว้โดยตรง&lt;br /&gt;
&lt;br /&gt;
ตัวอย่างการตีความส่วนลด เช่น:&lt;br /&gt;
* &#039;&#039;&#039;&amp;quot;20%5%400&amp;quot;&#039;&#039;&#039; คือ ลด 20% ก่อน แล้วลดตามอีก 5% จากนั้นลดอีก 400 บาท&lt;br /&gt;
* &#039;&#039;&#039;&amp;quot;70.50 10% 2.10&amp;quot;&#039;&#039;&#039; คือ ลดไป 70.50 บาท แล้วลดตามอีก 10% จากนั้นจึงลดอีก 2.10 บาท&lt;br /&gt;
&lt;br /&gt;
=== ราคาตั้งต้น ===&lt;br /&gt;
สำหรับธุรกรรม[[ใบสั่งซื้อ และ ใบสั่งขาย#รายการสินค้า|ใบสั่งซื้อ, ใบสั่งขาย]], [[ใบซื้อ/รับสินค้า และ ใบขาย/ส่งสินค้า#รายการสินค้า|ใบซื้อ/รับสินค้า, และ ใบขาย/ส่งสินค้า]] ระบบจะแสดงราคาตั้งต้นของสินค้าให้เมื่อผู้ใช้เพิ่มรายการสินค้าใหม่ในเอกสาร โดยระบบจะอ่านค่าต่อไปนี้ตามลำดับและแสดงค่าแรกที่พบ:&lt;br /&gt;
* &#039;&#039;(กรณี[[#การตั้งค่าระบบ|ตั้งค่า &amp;quot;ราคาซื้อ/ขายอ้างอิง&amp;quot; เป็น &#039;ประวัติราคา&#039;]])&#039;&#039; ประวัติราคาซื้อ/ขายสำหรับผู้ขาย/ลูกค้ารายนั้น&lt;br /&gt;
* ราคาซื้อ/ขายใน[[สินค้า|ตารางรหัส &amp;quot;สินค้า&amp;quot;]]&lt;br /&gt;
* 0.00&lt;br /&gt;
&lt;br /&gt;
{{3stars}} ระบบจะแปลงราคาที่อ่านค่ามาให้มีสถานะรวม/แยก VAT ที่เหมาะสมตามเอกสารที่ผู้ใช้กำลังเพิ่ม/แก้ไขอยู่โดยอัตโนมัติ&lt;br /&gt;
&lt;br /&gt;
== โมดูลมูลฐาน ==&lt;br /&gt;
* [[โมดูลบัญชีรายวัน|โมดูลบัญชีรายวัน]]&lt;br /&gt;
* [[โมดูลเจ้าหนี้/ลูกหนี้|โมดูลเจ้าหนี้/ลูกหนี้]]&lt;br /&gt;
* [[โมดูลค่าจ้าง/เงินเดือน|โมดูลค่าจ้าง/เงินเดือน]]&lt;br /&gt;
&lt;br /&gt;
{{คู่มือการใช้โปรแกรมคูนิฟ็อกซ์}}&lt;br /&gt;
{{โมดูลสินค้าคงคลัง}}&lt;/div&gt;</summary>
		<author><name>Tenko</name></author>
	</entry>
</feed>