Author: Exson Qu

开发—架构

此页主要是为希望掌握系统及各个脚本的功能的研发者而准备的。

销售订单

销售订单的发起是用如下的脚本：

SelectOrderItems.php

此脚本包含了为订单选择顾客及订购的商品的功能。

此订单的处理逻辑是围绕一个称作Items的购物车对象，它被声明为一个会话变量。它包含了一个LineItem对象组成的数组，每个订单行的商品包含了订单行的所有信息-我希望是可预测的！Items会话变量也包含订单抬头数据例如：顾客，货币，销售类型等等。整张订单因此暂存到了会话变量中。内存中的销售订单只是在用户明确地提交了更改才会更新数据库。这个是由脚本DeliveryDetails.php完成的。

脚本SelectOrderItems.php允许对于存在的订单修改，只要从数据库中取出数据，填满Items会话对象和商品LineItems数组即可。需要做检查来确保改变是合理的。

脚本使用两种方法将商品加到订单中：

1.选择存货分类（物料组）或者代码或者描述的一部分。用户必须点击查询按钮来开始一个搜索。系统会显示符合条件的商品以供选择。

2.通过直接输入部品代码和数量。若用户熟悉了库存商品代码，这允许迅速输入销售订单。用户必须点击快速输入按钮以进入快速输入页面进行输入。

定价

此脚本根据顾客的货币和销售类型查询定价。可以设置任意多的销售类型及对应的价格表。如果没有设置对应顾客的销售类型和货币，那就没有商品可以加到订单里。

可以输入套装商品-这些在库存商品设置的阶段就定义了-他们被拆分成对应的部品，直接可以在订单中修改。他们是一个快捷键，用来选择每个单独的部品，当只有一个部品发生了更改时。例如，一台电脑有xyz主板，机箱，键盘，鼠标，256M内存等等。套装商品将所有这些输入订单，但是允许删除256M内存，而使用512M内存取代或者您要求的更改。

组装部品也可以输入，它代表它下层的部品但是以组装的整体计价。在输入订单时，组装部品不会像套装件那样分解成它的部品。它存在于订单和销售分析记录中，但是不会维护库存数据，尽管会记录变化情况以及部品的变化情况。

交付及运输费用

选择了顾客和订单每行的商品后，需要输入付运的细节。根据logicworks.ini的输入，运费是被计算出来的。有一个选项：当订单的总价值超过指定值时，不计算运费。运费计算是基于不同的承运商，指定的库存地点和要运抵的城市而计算出来的。如果在付运地址的第二行或者第三行找不到城市，脚本会报错。如果系统发现有几个承运商，那么会选择根据订单的体积或重量计算出来的最低运费的供应商。运费计算是另外一个文件FreightCalc.php中的一个函数，需要传递相关的参数，付运地址，发货地点，订单的体积和重量。函数返回一个数组，包含最佳承运商BestShipper和运费FreightCost.文件FreightCalc被包含进脚本DeliveryDetails.php脚本。因此如果使用这个函数的话，就要求维护用立方米计算的体积和用kgs计算的重量，以及运费规模。

如果使用这个函数要采集的数据不胜负荷，可以在logicworks.ini中关闭运费选项。（在目前的系统中，即计算运费选项）

一旦订单交付细节都被输入到DeliveryDetails.php脚本。那么这个订单就可以提交到数据库里了。这时它全部缓存在Items会话变量里，只有订单下了或者变更被提交时，session变量才被清理，数据库被更新。

查找销售订单

使用脚本SelectSalesOrders.php可以查找订单：

此脚本允许使用用几种方法查找一个未完成订单

1.根据顾客-从SelectCustomer.php脚本可以选择一个顾客，仅仅显示此顾客的未完成订单。

2.根据商品-选择商品被集成到脚本中去。纯粹的做法是SelectProduct功能分到一个单独的脚本。但是我觉得这种方法对于顾客而言更加直观。

3.可以直接输入订单号。

SelectSalesOrders.php 选择销售订单脚本

在返回的订单中有链接允许对订单进行修改或者开发票。

此脚本也提供对订单行的修改......SelectOrderItems.php,但是如果有部分商品已经开发票，它不能将订单行的数量变得低于已开发票的数量，也无法删除已经开发票的订单行。

开发票
开发票的条件：必须首先选择将要开发票的物料写入订单。然后订单可以开发票。
给订单开发票的链接来自于SelectOutstandingOrders.php脚本，它显示了还没有开发票订单的所有订单行。这里有机会让用户去改变要开发票的数量，但是无法改变价格和折扣。这里也提供了手动输入运费和税收的选择。
脚本ConfirmDispatch_Invoice.php实际上在处理发票的过程中，在数据库里创建了DebtorTrans记录，SalesAnalysis记录和库存移动记录，更新了仓库的库存记录和销售订单付运细节。
要查看一个完成订单的细节，使用这个脚本：SelectCompletedOrder.php 它提供与未完成销售订单查找类似的工具。这个页面也显示订单上已经付运且开发票的数量。
SelectCompletedOrder.php 选择已完成的订单脚本
提供与查找未完成销售订单类似的选择工具。此页面也显示订单中已经开发票
和付运的数量。
应收账户/客户账户
顾客账户包含主记录？分公司记录依照主记录设置，所有交易需要一个分公司记录来开发票和红字发票，但是不会对收款要求分公司记录。账户余额并不是按照主记录保存，除了从交易中累积的尚未清算的金额。发票(SysTyeps_TypeID=10)等费用记录被在DebtorTrans表中记录为正而红字发票(SysTypes_TypeID=11)以及收款(SysTypes_TypeID=12)被记录为负。

应收账款收款
由于有很多原因收入现金，最普通的是为发票付款，收款表单允许输入总帐项目和收到顾客付款。总金额可能需要与银行核对。收款的核销是下面所述的另外一个程序。在收款被完全接受之前，收款脚本创建了一个类来保存收款的所有信息。如果应收的链接被启用，数据库会更新必须的记录及记录收款及总帐变化。

应收帐核销（分配）

系统经过设计，因此核销只能选择收款或者红字发票以及现有的待核销的发票。金额可以被输入到对应的发票直到整笔收款或者红字发票被分配。更新选项允许将待核销的金额重新计算，包含已输入到相关发票的部分。
注意，由于没有使用java或者客户端的脚本，无法动态跟踪有多少需要去分配。
核销脚本可以通过下列方式调用：
1)在没有参数的情况下，会返回所有尚有余额分配到发票的收款和红字发票。
2)顾客代码--所有此顾客的尚未完全分配的红字发票和收款会显示出来。
3)交易类型(11或者12)以及交易代码，这将会显示交易及先前分配的部分及发票以及尚未分配的发票。已经存在的清算可以随意更改，并且可以进行新的清算。

Sales Analysis 销售分析
所有的发票和红字发票创建或者更新销售分析记录。销售分析记录进行至部件层面。通过维护一个分开的销售分析表，会产生一些重复数据。此程序的逻辑在于：

- 在需要进行销售分析时，改善需要查询的简化程度，因此提供创建报告的速度

- 允许对于销售分析中所分析的普通字段进行索引以进一步提供销售分析查询的表现

- 消除数据表之间的依赖。如果库存变化被删除，这将给销售分析带来问题。

销售分析报告可以被设计为最多四层的分类。报告生成器力求简单，但是提供了极大的灵活性。报告的设计可以保存下来供以后使用。可以运行报告产生pdf文件供直接打印或者保存在本地以供电邮或者存档。还有一个选择就是可以运行报告而生成.csv文件供大多数电子表格程序分析或者导入其他的数据库例如Borand's Paradox或者Microsoft Access.

报告栏的定义允许显示期间范围以及显示的信息类型例如GP（毛利）, 成本，价值，数量。期间是月度，它由系统维护对用户不可见。此期间仅被用于总帐报告和销售分析。报告栏定义页面让此报告的查询页面可以很容易地指向需要的日期。

Purchase Orders 采购订单
采购订单具有和销售订单相似的选择工具，它使用的脚本是 POSelectOrders.php
此脚本显示所有的未完成订单，它们尚有虽已付运但未收到的（货物）。可以选择指定的供应商或者部品，以仅仅显示满足所选条件的采购订单。
此脚本也显示连接到：
1. 在某种限度内（例如不能将订单行的数量减少到低于已经收货数量）更改订单。
2. 打印采购订单。如果此采购订单已经打印，此链接为不可用。订单可以被重新打印但是webERP会显示一个警告显示此订单已经被打印过，因此不会有误重复打印并重复发订单给供应商的问题。
3. 订单收货。
Inventory 库存

每次产品被开发票或者红字发票，webERP都会根据库存商品的种类创建库存变化。如果商品（物料）被开红字发票或者注销（例如运输过程中损坏），那么会创建两种库存变化：
1. 将库存商品退回库存，然后记录对顾客的欠款。
2. 从所选的总账账户中注销此商品（物料）
当收到一个采购订单的商品时，也会创建库存变化。
每次库存变化被输入时，改仓库的库存数量被更新。
库存因此完全与销售和采购整合。涉及直接输入的库存交易是：
1. 仓库间的库存转移
2. 库存数量调整
上述两种类型的交易无法适用于虚拟，组装或者套装料，因为这几种部品没有库存变化或者库存数量存在。

Stock Inquiries 库存查询

选择一个产品显示所有可以对此部品操作的选项。
l 仓库别的库存用量
l 库存状态显示在手数量，订单上的数量，需求数量和再订购数量。
l 定义日期范围的库存变化
l 未完成的销售订单
所有的查询遵循一个相似的格式，那就是允许熟悉库存代码的用户直接输入代码。另一个选择即是，查询脚本可以从SelectProduct.php脚本调用，它有所有的工具可以用来选择需要的部品。
Accounts Payable 应付账款

使用脚本SuppInvoice.php输入供应商发票.
此脚本必须从SelectSupplier.php页面使用SupplierID调用。一旦一个供应商被传递给此页面，webERP会创建一个新的SuppTrans对象来保存（缓存）关于此发票的所有信息。SuppTrans类有三个数组，一个用于总账分析，一个用来保存运输费用（例如船运费，装卸费以及关税），第三个用来保存收到的货物，将开发票的GRN,这些也可以是运输的商品。
如果在公司里设置了GL总账连接（整合）到供应商为启用。此脚本允许GLCodes数组的成员。此页面允许熟悉GLCode的用户直接输入GLCode或者从选择框里选择一个代码。并且有大量空间供填写摘要。
从脚本SupplierInvoice.php到脚本SuppInvGRNItems.php的链接允许选择已从供应商收到的尚未开发票的货物来开发票。每个部品显示已收到的数量及已经开发票的数量。正开发票的数量默认为已经收到数量减去任何已经开发票的数量。这个可以变更，如果可以改变价格一样。在logicworks.ini中有三个参数影响此脚本的行为。如果设置了检查超量交付的参数，那么另外两个参数被用来检查此订单被超量开发票的比例，根据相关开发票的数量和收费价格。
正开发票的收到货物的所有行被累加。如果GL到供应商的链接为启用，那么订单行和总账行被累加起来来得打发票的总的货币金额。如果此链接没有启用，此货币金额必须被手动输入，但是金额必须比正开发票的收到的货物多。
应用此供应商定义的条款后，供应商发票的到期日默认为发票输入的日期。有一个选项直接从创建发票创建付款。创建的付款记录将会是点个发票的总和。
Supplier Payments 供应商付款

使用手动付款输入或者使用执行付款两种方法之一可以创建所有到期的金额的记录。
执行付款为已到指定日期，符合指定货币，指定汇率以及指定的银行账户。需要的发票记录也由此过程产生。执行付款计算每张已经核销发票的汇率差异并且更新此发票的分配金额，如果供应商连接为激活的话，会生成总账交易。银行对账用途的银行付款记录也被创建。
可以通过选择供应商然后手动付款连接来进行手动输入供应商付款。供应商的货币为自动使用默认货币。然而汇率必须被输入，一起输入的还有金额及任何摘要。
手动付款界面在不用SupplierID调用时也允许输入总账分析的付款。