产品生成器学习笔记---产品模型
在AX中产品模型用来决定在产品配置窗体中可用的选项和在配置产品的过程中需要执行的计算。
本章讨论模型的创建过程,包括
1.本地规则
2.添加变量和变量组
3.产生物料编号和(或)维度ID
4.价格组合
5.图形
产品模型是产品生成器的核心,它使产品可配置并且决定配置过程。
产品模型
产品模型的创建跟标准BOM和工艺路线完全一样,这里不再赘述。
在创建产品模型的时候可以采用产品模型向导,操作路径如下:
产品生成器->产品模型->设置->选项,选中创建时使用向导,每次创建产品模型时就会出现一个产品模型的向导,去掉该选项就不会有向导提示了。
与BOM和工艺路线有所不同的地方是,每次修改产品模型都需要重新编译产品模型,操作路径如下:
产品生成器->产品模型->功能->编译产品模型
只有当产品模型对应的代码保存和规则检查正确性都显示绿色的对号时才表示该产品模型可以用了。如果其中的任何一个是红色的叉叉,在使用该产品模型时都会显示该产品包含错误的提示。
如上图所示,建模变量卡可以将建模变量添加到该产品模型中。系统,简单,数据类型,表,类等选项卡产品模型的计算类型的变量可以添加到其中。
下面的部分,树由各种类型的节点组成,这些节点用来处理计算变量和对应于特定变量值的操作,BOM,工艺路线,消息和其他。在代码中可以看到建模树对应的X++代码,可以直接修改X++代码。
变量组
在上图中的上半部分有个变量组,可以将产品模型的某个变量放到组里面,这样可以将某个模型变量分配到不同的组中。在产品配置窗体上在同一个组的变量被归类的一个group中。
在建模变量部分,我们已经介绍了创建变量组,要将一个变量组关联到产品模型中,必须点击右边的分组按钮,在出现的窗体中可以将某个变量组关联到产品模型中,还可以实现树状结构,即将一个组放到另一个组的下面。一个变量组只能在产品模型中出现一次。
按照教程的说法,可以用上移或者下移来实现组的层级结构,不过我反复测试,感觉这个不可用,建议在树上采取拖拽的方式实现。下图显示的是关联到某个产品模型的变量组
然后可以在产品模型界面将一些变量关联到组中。
在产品模型配置窗体有两种显示方式,普通和树状结构。
在普通方式下,上面例子中的测量将作为一个TabPage,但这时有个问题,测量这个组在该产品模型中必须包含至少一个变量,否则就会报错了,从本质来说,对于这种两层或两层以上的结构,用普通方式是没办法运行的。只能采取树状结构。
普通方式和树状结构的切换通过 产品生成器->设置->参数设置->用户对话框->将用户对话框显示为树状结构
看一下两种方式显示的效果就一目了然了。
普通方式
树状结构
不过上一篇提到过这个问题,树状显示的时候用户配置文件不会生效。看来要很好地解决这个问题,只能自己动手改代码了。
优先级
第二个字段是优先级,这个字段指定的是属于某个变量组的变量在组中的显示顺序,如果没有填写该字段则按照添加到模型组的顺序显示。理论上需要填写1,2,3...不过实际上不需要从1开始的顺序号,只要各个优先级的大小符合你的要求就可以了。
数组和最大值
这些值只能在变量所属的变量组中设定,在建立组的时候选中数组和最大值。数组的意思是,所有属于该组的建模变量都是Grid中的一列,最大值的意思是该组的行数。
看图吧。
变量测试数组 所属的组 测量 为数组类型,其最大值为3,在图中显示为Grid有三行。
继承和返回值
这两个字段都与继承有关系,一个决定是否从父产品模型中继承值,另一个决定是否将值返回父产品模型。无论是继承的还是返回的值变量名必须相同。
由于到目前为止教程中都没介绍一个产品类型如何从另一个产品模型中继承,这里也不再推测,看教程后面有没有介绍(貌似没有)。
包括
指示该字段在搜索可重用的配置时是否使用。该字段只有在选择了 产品生成器->设置->参数设置->审核->重复使用配置 提示或者始终 时 才会出现,选择从不 是不会出现的。
到目前为止教程还没介绍如何搜索可重用的配置,在后面如有介绍再详细探讨。
计算变量的设置
跟建模变量不同,计算变量在产品配置窗体中看不到,计算变量用于在产品模型中处理各种各样的中间计算或者从系统的其他部分取数据。比如有些计算必须在生产模块中执行(比如计算BOM行的物料消耗)或者有些数据必须从其他表中抓取,就可以使用计算变量,计算变量可以在产品模型定义的上半部分定义,可以定义的值包括系统,简单,数据类型,表,类。
下面逐一介绍:
系统
可以定义如下系统变量:
转移变量
物料清单标识
工艺路线标识
批次ID
物料编号
配置
数量
除转移变量外,其余变量只能定义一个。
转移类型的变量可以用于在父子产品模型之间传递数据。批次ID,物料编号和配置类型在将信息从订单行和报价单行传递到当前物料配置时非常有用。
转移变量是唯一一个需要在产品模型中为其指定值的系统变量,其他的系统变量可以在产品配置的时候会自动根据配置行的相关信息得到。
简单
在简单变量中可以定义文本,枚举文本,整数,实数等四种类型的变量,简单变量没有特殊的功能,只是用来存放计算数据。
数据类型
用EDT类型定义的变量,比如AccountNum用来存放客户代码。简单和数据类型两种类型变量是在构建产品模型的逻辑条件中除建模变量外用的最多的变量类型。
表
如果在X++代码中需要用到表类型的变量,可以在这里定义。
类
如果在X++代码总需要用到AX中的系统类处理某些需求时,可以在这里定义。之所以定义表和类这两个类型的变量,是为了能在建模数中使用它们。
上面的这些类型将在PBII中详细介绍,这里先大体了解一下。
在创建建模树和使用产品配置窗体之前,可以测试一下产品模型。有两个操作路径
产品生成器->产品模型->功能->测试模型
产品生成器->产品模型->产品模型->测试模型
新的物料编号和(或者)维度
可以指定一个新的编号来取代原始用于配置的物料,这个很正常的,因为原来跟产品模型关联用来配置的原始物料是没有指定任何属性的,所以在配置以后设定根据某个规则生成新的物料编号,然后正式发货的时候按照新的物料编号和(或者)维度发送是正确的思路。
通过产品生成器->产品模型->设置->生成物料和维度 可以设定生成的物料和(或者)维度的编码规则。可以将产品模型关联包含的变量作为生成的物料或者维度的编码规则的一部分,如果不指定变量作为其编码规则的一部分,则会按照在产品生成器参数设置的地方设置的编码规则生成相应的编码。
为了避免不同的产品配置使用相同的编码,在产品生成器参数配置的地方指定一个编码规则。
价格组合
配置出来的产品可以通过价格组合功能算出其销售价,当然通过标准的BOM计算也可以得到它的价格,那么如何在这两个功能之间切换那?
产品生成器->设置->参数设置->销售价计算 如果选中该选项,则按照标准的BOM计算其价格,如果不选中该选项则按照价格组合的配置计算其销售价格。
销售组合的价格基于产品的销售价(来源于产品窗体或者贸易协定),然后根据在产品生成器配置窗体用户的选择调整价格。
有三种类型的价格调整方式:金额,百分比和已计算。
金额调整方式:调整后的价格等于产品的标准销售价格加上在价格调整字段填写的金额;
百分比调整方式:调整后的价格等于调整前的价格加上价格调整栏位填写的调整百分比,该调整方式的基价格是通过金额调整方式调整后的价格。
已计算调整方式:可以通过价格/折扣设置设定公式计算调整金额。
价格组合窗体有两个按钮:
按货币的价格调整:这个按钮只有在金额调整方式时才有作用;
价格/折扣设置:在金额调整方式和百分比调整方式时,该按钮对应窗体内设置的公式决定金额和百分比调整方式是否生效;在已计算调整方式时该按钮对应窗体内设置的公式的计算结果为调整金额。可以通过X++代码设定验证规则和计算公司。
价格调整字段只有在金额调整方式和百分比调整方式时才可用,已计算方式通过价格/折扣设置窗体中设置的公式计算得到结果。
产品图形
使用产品图形,可以以图片的形式反映用户在产品配置窗体中的选择,如果给产品模型配置了图形,将会在产品配置窗体用一个单独的Tab页用来显示图片,并可以在被配置行处打印图片。
另外这个产品图形并不是会根据用户选择的值自动生成一个图片,毕竟AX不是CAD软件,这个功能只是将用户事先制作好的图片放在某个文件夹下,AX自动将其与配置行进行关联,用户在选择完相关的变量后,可以看到相应的图片比较直观,如此而已。
配置产品图形的操作路径如下:
产品生成器->产品模型->设置->图形参数。
在设置图片的时候,用户可以选择将产品模型中的哪些变量反映在图片中,用来反映各种用户选择的变量值的组合所对应图片必须首先创建好,并放在指定的文件夹中。当用户选择的值改变时,将根据文件名从指定的文件夹中找到该图片显示在图片选项卡中。
在文件格式中填入诸如%1...%n之类的值,这些值将由用户选择的实际值所取代。
本例中%1将会被用户实际输入的某个值替代,由于Size是文本类型,这样用户输入的值可能会很长,所以可以通过长度字段截取其输入的一部分作为文件名的组成部分。
如果用户没有做任何选择,或者在指定的文件夹中没有找到相应的图片,图片选项卡将会显示在默认图形处指定的图片。当然这个图片也必须是事先准备好的,并且放在了指定的文件夹中。
当用户最终确认了配置时,相应的图片会被拷贝到AX的文档处理系统中,并与配置行关联。保存在AX文档处理系统中的文档格式,可以在产品生成器->设置->参数设置->用户对话框->生成图形文档类型中设定。
有时候会出现很多配置对应一张图片的情况,也就是说一个变量可能会有很多种可取值范围,比如人的身高,从0.5M到3.0M都有可能出现,在这种情况下,如果每一CM都画一张图片与用户的选择相匹配是不太现实的,只能设定一个范围,在该范围内对应一张图片,比如0.5M--1.0M这个范围内的变量对应一张图片,这样在用户输入该范围的值都会对应同一张图片。
AX为了处理这种情况采用了 间隔 的方式,注意间隔只能用在 数值类型的变量上。
另外产品生成器的图片处理在中文环境下也是有问题的,这个单独写一篇文章解释一下。