正如上一教程建立销售订单介绍,当您确认一个销售订单,ERP5系统就会自动生存一个“销售装箱单”。因此,您就可以随时追踪与该订单相关的货物运送情况。
该教材旨在介绍如何管理销售装箱单,从而运送和交付货品。
这是一个两步骤流程:首先;将订单货品发送出去,其次,当货品顺利到达客户仓库时,将装箱单状态改为“已交付”。
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span> | ||
openAndWait | ${base_url}/Zuite_createFunctionalTestUser | |
verifyTextPresent | Done. | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
openAndWait | ${base_url}/Zuite_setUpSaleOrderTest | |
verifyTextPresent | Init Ok | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
openAndWait | ${base_url}/Zuite_setUpSalePackingListTest | |
verifyTextPresent | Init Ok | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span> |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/invoke_simulation_alarms"> Invoke simulation alarms </span> | ||
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> |
如图所示,管理装箱单的不同步骤可以和实际的公司员工联系起来。
基于工作流程的系统这项原则就在这里表现出来。实际上,当销售经理输入并确认了一个销售订单,仓库员工就会根据系统由已确认销售订单自动生成的销售装箱单来准备货物。基于系统工作流程,当仓库员工准备好货物之后,销售经理就会被告知货物已就绪待运,于是他就可以给予指令“运送”这批货物。一旦客户接收到这批货物,查看无误并反馈给发货公司,该销售经理就可以将装箱单状态改为“已交付”。
这样,基于ERP5,您就可以追踪完整的货运流程。
从上一节教程“建立销售订单”,您已经学会如何通过确认销售订单自动生成销售装箱单,然后通过“跳至”菜单进入该新建装箱单。
现在您已经进入该销售订单相关的销售装箱单的初始页面,“概览”“详细信息”“支付”“简介”标签页的大部分信息已根据销售订单自动填充,因此您并没有非常多的信息需要补充。这就是为何我们建议在建立装箱单之前先详细填写订单文件。现在您就可以开始填写缺失信息。
openAndWait | ${base_url} | |
selectAndWait | //select[@name="select_module"] | Sale Packing Lists |
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=(['title', 'ZUITE-TEST-SALEORDER-PRODUCT-001'],), enter_object=True)"/> | ||
verifyText | //div[@id="breadcrumb"]/a[2] | Sale Packing Lists |
verifyText | //div[@id="breadcrumb"]/a[3] | ZUITE-TEST-SALEORDER-PRODUCT-001 |
type | //textarea[@name="field_my_comment"] | Delivery by the test. |
clickAndWait | //button[@name="Base_edit:method"] | |
verifyValue | //input[@name="field_my_title"] | ZUITE-TEST-SALEORDER-PRODUCT-001 |
verifyValue | //input[@name="field_my_source_section_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-001 |
verifyValue | //input[@name="field_my_source_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-001 |
verifyValue | //input[@name="field_my_source_administration_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-001 |
verifyValue | //input[@name="field_my_destination_section_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-002 |
verifyValue | //input[@name="field_my_destination_section_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-002 |
verifyValue | //input[@name="field_my_destination_administration_title"] | ZUITE-TEST-SALEORDER USER-001 |
verifyValue | //input[@name="field_my_specialise_title"] | General Sale Trade Condition |
verifyTextPresent | 1 records | |
verifyValue | //tr[@class='listbox-data-line-0 DataA']/td[6]/input | 100 000.0 |
当销售经理确认了销售订单,仓库员工就会准备发货。如果发货信息和销售装箱单信息相符,您就需要告知ERP5已发货。
请打开“操作”菜单,点击“运送装箱单”,这将销售装箱单的状态由“已确认”(系统由已确认销售订单自动生成销售装箱单的默认状态)变成“已运送”,如下图所示。
下一步就是在客户声明已接受货物后将装箱单设为“已交付”。
selectAndWait | //select[@name="select_action"] | Ship Packing List |
clickAndWait | //button[@id="dialog_submit_button"] | |
verifyText | //label[normalize-space(text())='State']/../div | Shipped |
storeAttribute | //div[@id="breadcrumb"]/a[3]@href | wait |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
open | ${wait} |
当客户收到货物并核对无误后,您就可以将装箱单设为“已交付”。
打开“操作”菜单点击“交付装箱单”。这将使该销售装箱单的状态由“以运送”变为“已交付”,并同时自动生成销售装箱单的相关发票,如下图所示。
selectAndWait | //select[@name="select_action"] | Deliver Packing List |
clickAndWait | //button[@id="dialog_submit_button"] | |
verifyText | //label[normalize-space(text())='State']/../div | Delivered |
storeAttribute | //div[@id="breadcrumb"]/a[3]@href | spl |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> |
当装箱单处于“已交付”状态,您就可以通过点击“跳至”菜单中“相关销售发票交易”进入该销售装箱单的相连发票。
现在您可以浏览一下系统由已交付的销售装箱单自动生成的销售发票交易文件。如果您需要返回起始销售订单或者销售装箱单,请点击“跳至”菜单的相应项目,或者通过ERP5系统页面上方的“模块”菜单中销售订单和销售装箱单模块在文件列表中搜索。
下节教程,您将学习如何管理发票。
销售装箱单可以为相关交易事项自动生成发票,您只需点击“运送装箱单”这一简单操作即可,前提是发货数量(即所运送的销售装箱单中的货物数量)同客户订购数量(即销售订单中的货物数量)一致。在这种情况下,“运送”装箱单后,您不需进行其他操作,系统就会为该已运送的装箱单自动生成一个发票。
同“相关销售装箱单”一样,您可以通过“跳至”菜单的“相关销售发票交易”进入发票文件页面
当然,ERP5还可以处理订购数量与发货数量之间的差异。
例如,客户向您订购1000件产品,当销售经理在系统中输入销售订单信息并确认订单后,仓库员工却发现库存仅有900件产品,原因是生产工人罢工,这就影响您及时交付货物。
负责准备货物,验证销售装箱单以及发货的仓库经理决定将这900件产品装箱,于是他修改了销售装箱单的货物数量。从技术上讲,这就表明订单和发货数量不一致,因为客户订购1000件产品,而只有900件被运出。基于这个原因,装箱单的运送和相关发票的生成就必须由销售经理来决定。如果他/她允许发货,就要首先“拆分和推迟”原始销售装箱单,这将生成另一个销售装箱单,它包含剩余货物数量并等待之后运送。仓库员工于是按照指令“运送”并最终“交付”第一批装箱单。一旦第二批货物准备就绪,仓库员工就可以“运送”并“交付”剩下的装箱单,从而将所有订购的货物运送至客户。以该方式我们就能解决不一致的装箱单问题。
注意:一旦您“运送”装箱单,系统就会以更新装箱单的发货数量为该装箱单自动生成相应发票。因此您最终将得到两个销售发票,它们和各自的销售装箱单相联系。
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/invoke_simulation_alarms"> Invoke simulation alarms </span> | ||
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
open | ${spl} | |
selectAndWait | //select[@name="select_jump"] | Related Sale Invoice Transaction |
verifyText | //div[@id="breadcrumb"]/a[1] | ERP5 |
verifyText | //div[@id="breadcrumb"]/a[2] | Accounting |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span> | ||
open | ${base_url}/Zuite_tearDownSaleOrderTest | |
verifyTextPresent | Clean Ok | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> |
For more information, please contact Jean-Paul, CEO of Nexedi (+33 629 02 44 25).