一张单据包括台头数据和明细数据,如下图一张销售单的结构:

其中上下两部分红色边框里用户输入的数据为销售单的台头数据,蓝色边框里的数据为明细数据。
明细数据,也称为项目、行项目数据,数量是不定的,一般存储在动态数组里面,在一个特定的单据里,比如销售单、采购单,行项目的结构都是一样的,但是不同的单据,其项目结构可能有差异,为了避免定义太多的数据结构,用一个通用的键值对来存储每一个项目数据,类名为CItemData,也就是说,每一行数据都是一个CItemData的对象,这些对象存储在一个动态数组里。
并不是看到的所有数据都存储在CItemData对象中,一般只存储数据库表的主键信息,因为这些信息才需要提交到服务器,按照关系数据库的范式规则,一个表引用另一个表,只需要引用关键字,以下面这行数据举例:
商品信息只需要存储货号,颜色需要存储编码 01而不是存储 黑色。所以在该行项目数据对象的键值对里,数据可能是如下存储的
| 键 | 值 | 说明 |
| modnr | 10774210 | modnr是商品数据库表格的货号字段 |
| crnmr | 01 | crnmr是颜色数据库表格的颜色编码字段 |
| netpr | 225 | 价格 |
| ... | ... |
项目数据的动态属性
服装行业比较特殊,一个颜色可能有多个码数,比如 S、M、L、XL等等,这些码数也是用户自定义的,不能假设最多有多少个,所以也是动态的,也就说,一个项目数据里,也会有动态属性数据,为此,在CItemData的属性中,增加了一个CNSParameters类型的属性itemData,也是一个键值对,如下图:
,在这一行的itemData中,存储的数据是这样的:
| 键 | 值 | 说明 |
| 01 | 3 | 01是S码的编码 |
| 02 | 3 | 02是M码的编码 |
| 03 | 3 | 03是L码的编码 |
| 04 | 3 | 04是XL码的编码 |