生猪养殖生产系统对接SAP的研究与实现

2022-02-19 01:33王文宇吕成军
养殖与饲料 2022年1期
关键词:出库猪只调用

仇 燕 童 锐,2 王文宇,2 吕成军 黄 旭

1.安徽工业大学信息技术研究院,安徽马鞍山 243002;2.安徽工业大学计算机科学与技术学院,安徽马鞍山 243032;3.天邦食品股份有限公司,上海 200233;4.武汉中畜智联科技有限公司,武汉 430000

近年来,随着生猪养殖业的快速发展,生猪养殖业的规模化、集约化程度较高,越来越多的企业都想将产业链上下游打通,建立愈发完整的集养殖、生产、采购、销售于一体的经营模式[1-2]。传统的生猪养殖生产系统控制着公司生产、采购、销售、库存、饲料、质检等过程的运作,同时配备专业的集团企业财务管理与控制系统,生产系统为公司提供了该财务系统所需要的接口,以便于将系统中的数据传输到财务系统中。这样的养殖生产系统在使用中有它自身的优势:业务之间交互性强、界面操作简单、功能简单实用。但是却存在着没有实现完整集成的一体化管理、成本分析与控制不精细化、业务数据与实际数据脱节等问题。尤其在生产和物料仓储方面,养殖成本无法做出准确丈量,导致生产成本与实际账面不符,且对于生猪养殖所需的饲料、疫苗、兽药器械等原材料无法仔细衡量库存。与传统的财务系统相比,SAP 系统的引进与应用能够更加精细化地管理猪只生产过程,通过详尽的数据分析对养殖生产起到指导性作用[3-4]。由于实际工作量巨大,限于篇幅,本文仅针对生产计划(production planning,PP)模块和物料管理(material management,MM)模块展开研究并实现了数据对接。在对接接口的技术方面,根据SAP 系统与养殖生产系统之间的信息通信状况,提出了Webservice 接口技术,为此查阅了Webservice 技术方案和实施的具体步骤的参考文献,并深入分析了Webservice 应用技术与连接。在系统间数据实施对接的过程中,对接口技术实现的方案及接口对接所涉及的业务流程设计做了详细的阐述。

生产计划模块(PP)主要专注于生产相关功能、报表,根据原料、产能对饲养、屠宰、运输、销售等环节进行自动运算并制定生产和销售计划,并通过生产计划和生产数据报表层面为整个生产业务提供具有指导性的意见。针对目前生产业务流程,提出优化。优化方案设计:生产计划是结合客户订单和当前库存来制定的,准确核算出各生产流程中猪的重量与数量、消耗的物料来避免库存堆积和生产少料的风险;而原材料的需求计划是依据猪只实际消耗流水、物料采购订单并结合当前库存制定的,所以需要详细记录各生产流程物料需求量、实时地更新库存,在此基础上制定需求计划。

物料管理模块(MM)涉及流程中物料管理的全过程,与其他模块包括财务、生产、销售等均有密切的联系。目前物料的采购和库存管理,主要就是将猪只饲料、疫苗、兽药兽械的消耗情况按照传统方式传递给财务系统。存在的问题是物料模块与其他模块脱节,没有办法对物料实施精细化管理。所以,需要使物资采购与生产之间保持紧密联系,让采购计划在物资类型、数量和采购时间上更符合生产计划的需求,采购订单的生成、采购信息的录入、入库信息的产生、盘点等涉及物料库存的改变都要直接反映到财务凭证上,采购计划的变更要做好记录,财务信息根据业务信息的录入依次记录下来。

1 生猪养殖生产系统与SAP 对接需求

1.1 业务需求分析

养殖生产系统整体业务,主要涵盖了仔猪、种猪、育肥猪、后备猪、精液等业务以及饲料的生产供应业务。虽然育肥猪、仔猪实现了批次管理,种猪实现了耳号管理,但是在养殖成本核算颗粒度上没有细化,并且后备猪、精液管理不规范。所以,对于仔猪、育肥猪、后备猪、种猪等均要实现生产与成本核算批次的双维度;生产过程全面批次管理及核算,可追溯,有助于质量管理,提升成本核算精细化。

当前养殖生产系统虽然在财务系统实现了记账,但是更多的是在线下通过手工的方式进行传递,最后在财务系统中进行记账,如精液销售、猪只销售等更多的还是事后记账,没有形成完全的事前计划,事中掌控,事后分析,没有形成即时的业务与财务集成。未来在生产业务与销售出库业务交互时要进行有效的集成管控,销售出库时要确认销售订单数量是否超出库存,并将销售凭证按一定的规则传给财务系统进行记录。通过使用销售凭证和库存结合,提升数据的准确性、及时性。

养殖的生产业务流程中涉及的物料管理主要包括饲料、疫苗、兽药兽械的耗用,形成了一定的交易记账协同,但是还没有完全形成事前的计划协同,如没有对采购价格进行统一管理,导致财务记账混乱;采购需求计划也不明确,导致并不知道实际猪的生产过程中会消耗多少物料,造成资源浪费。所以,在物料管理模块应该推进计划协同,在系统中支持采购计划-需求计划-饲喂计划等的集成计划体系,实现饲料、疫苗、兽药兽械等采购需求计划的统一。

1.2 业务功能设计

规模化的养殖生产业务主要分为仔猪、批次猪、后备猪、种猪、精液、物料板块。下面就养殖生产各业务板块进行详述。

1)仔猪(落地、断奶仔猪)生产业务。一般养殖场仔猪无分批,因为同一栋舍、单元内同时会有不同日龄段猪只,所有饲料和动保无法精确区分,但是现在栋舍、单元的猪只在SAP 里严格进行批次成本核算。要求在生产养殖系统中按周(最多不得超过15 d)对仔猪创建批次,批次数据传入SAP,SAP依据其创建生产订单。生产订单创建好后,对母猪场母猪开启分娩,分娩后产出的落地仔猪,按照相应的批次传入SAP 中,SAP 对落地仔猪进行生产入库。落地仔猪在母猪喂养结束后转化为断奶仔猪,由SAP 对断奶仔猪批次订单进行生产投料。生产系统收到SAP 回传的批次生产订单配料量,及时进行报工和原料发料。这样可以将饲料、疫苗、兽药兽械的耗用具体到每个批次,可以精确地进行生产成本核算。

断奶仔猪在饲养过程中,养殖系统根据仔猪建批时间,接下来每次月末对批次进行估重,并将估重数据传入SAP,记录好各批次的重量变化。养殖系统根据SAP 回传来的各批次仔猪重量对比可以看出仔猪的质量是否合格,从而判断仔猪是否进行调拨出库、销售出库还是死亡出库。无论哪项操作,都要按照批次将要处理的仔猪批次数据传入SAP,在SAP 中首先对各批次猪只库存数量做出调整,确认好调拨订单(销售订单)量和死亡猪只量,再创建好订单,最后进行调拨出库(销售出库或者死亡出库)。养殖系统根据SAP 回传的数据来关联仔猪的数量变化,这样可以对后续的仔猪生产计划做出指导,如优化仔猪的饲喂标准和免疫程序,让仔猪的质量更佳。

2)批次猪(育肥猪、培育猪)生产业务。养殖生产系统中育肥猪、培育猪均按批次管理,批次建立原则为7 d,不得超过15 d。批次建立之后,将批次数据传入SAP 系统中,SAP 按批创建生产订单,一个批次对应一个生产订单。批次猪不论来源于集团内部彼此相互调拨入库或者集团外部的采购入库,养殖生产系统都要将批次猪调拨、采购入库的数量传入SAP,在SAP 端进行入库,并分别进入所对应的批次生产订单,由SAP 指导各批次的生产投料。养殖生产系统收到SAP 回传的物料配料数据,下达发料通知,方便后续精确计算养殖成本。批次猪养殖过程中,每次月末按批进行估重,估重数据传入SAP,回传各批次猪只重量变化数据到养殖系统后,依据其对各批次里的猪只进行批次猪转生产、销售出库、调拨出库、批次猪转批、批次猪死亡自宰操作。对于这些操作,每项操作养殖系统都要将批次变化数据按批传入SAP,在SAP 端调整库存数量。但对于批次猪销售出库,新增了猪只牌价管理和销售确认功能。

批次猪销售时,首先,采集市面上不同品种的猪只牌价,单独在养殖生产系统开发一个页面将牌价发布在上面,接着,在批次猪销售发起报批申请时,将猪只牌价作为参考。在猪只销售前,进行客户预付款确认。先在养殖生产系统页面登记客户信息,并将信息传入SAP,SAP 收到客户信息解析后获取不同客户的账户余额。养殖生产系统收到SAP 回传的客户名单数据,进行销售确认,在装车出库时,增加装运车辆皮重校验,与销售报批的批次猪重量核对,最后上传销售凭证,完成销售出库操作。销售模块的改进,一方面可以依据销售价格、重量对猪只销售行为提前报批,加强了生产过程管理,有助于提升生产效益;另一方面,销售预付款的确认使得销售流程能够快速执行,通过车辆皮重核对销售报批重量,实现了猪只销售透明化管理。

3)后备猪(公猪、母猪)种猪生产业务。公猪场内后备公猪、母猪场内后备母猪暂无分批,和仔猪、批次猪一样,必须创建批次,并由SAP 根据批次创建生产订单,在对其按照批次依次进行生产投料、月末估重。各批次估重数据传入SAP,养殖生产系统收到SAP 回传的各批次猪只重量变化数据,对其做出死亡、自宰、销售、调拨出库等操作并将猪只变化数据传入SAP,在SAP 端调整库存数量。

当后备猪饲养成熟后,进行后备转生产操作,后备猪转为种猪,即后备猪转为成熟资产,一只猪对应一张资产卡片,卡片上自动生成资产号。养殖生产系统向SAP 系统传入各批次的后备转生产的猪只数量变化数据和资产卡片数据,SAP 收到后,对批次库存进行调整,并通过资产卡片信息单独保存种猪资产信息。养殖生产系统依据每头猪的资产号来修改原来的猪耳号,再将相应的修改数据传入SAP 系统。这样便于养殖生产系统直接按照资产号来管理种猪。种猪的死亡、自宰、销售出库通过养殖生产系统将出库数据传入SAP,在SAP 端标记为资产减少。对于集团内部彼此相互的种猪调拨入库,SAP 端收到数据变化时,要重新创建资产卡片来接收集团各养殖部门增加的种猪资产,并把原种猪所在的养殖部门的资产卡片消除,再将最新的种猪资产分配情况传给养殖系统,养殖生产系统可以依此来更加精细化地管控公司及各养殖部门的种猪资产。

4)饲料、疫苗、兽药兽械供需平衡。仔猪、批次猪、后备猪、种猪在养殖生产系统中都是按批次管理,由SAP 按批计算物料需求进行生产投料,养殖生产系统收到批次配料具体数据时,养殖生产部门通过程序自动计算,按历史实际发生数据调整计算系数,并结合现有的物料库存,生成饲喂需求计划、免疫需求计划、兽药兽械需求计划,提高饲料、疫苗、兽药兽械需求的准确性。养殖系统将这些物料需求计划传入SAP 系统,SAP 生成饲料、疫苗、兽药兽械采购订单回传过去,养殖生产系统根据采购订单上的饲料、疫苗、兽药兽械需求量结合以往的采购价格分别确定好各自的价格,再对其依次开展过磅处理,确定每种物料的重量,用重量乘以单价,得出每项物料的最终采购总价,并将总价传入SAP,在SAP 端记录好,再回传至养殖生产系统。养殖生产系统增加采购价格维护流程,采购价格统一维护在系统上,价格规范,降低账务核算物料成本时出错的概率。

5)精液生产、销售业务。养殖生产系统在原精登记的时候,记录好公猪站公猪产精信息登记,原精与公猪耳号形成对应关系,将登记信息传入SAP系统,在SAP 先创建原精生产订单,生产订单属性包括公猪耳号和原精数量,再进行原精入库。原精入库执行后,养殖生产系统对其增加了检测管理和稀释管理,检测管理:统计合格与不合格数量,如果原精质量不合格,则直接废弃,并将废弃的原精数量反馈给SAP,由SAP 调整一下生产订单上的原精库存;稀释管理:原精稀释成精液,精液按照包装规格分为鲜精50 mL、鲜精80 mL、冻精45 mL。原精经过检测与稀释后,养殖系统将其处理过的具体数据传入SAP,SAP 创建精液生产订单,确认不同包装规格的精液数量。这样可以加强精液的精细化管理,实现了精液的销售生产仓储质量的业务协同,提高了数据的及时性。

精液销售时,首先在养殖生产系统分别记录好鲜精50 mL、鲜精80 mL、冻精45 mL 的需求量,如鲜精50 mL 规格需精液800 L,冻精45 mL 规格需精液900 L 等,根据其需求量不同构建好不同销售订单信息,再传输到SAP,SAP 依据销售订单创建好不同的精液批次,通过精液生产订单上的精液库存给其分配好具体的精液数量,并利用生产订单上的公猪耳号属性,将精液批次里的不同规格的精液来源,即哪头公猪的产能,记录下来。最后确定好销售订单上的精液出库量,进行出库,再调整好精液库存,如果销售订单上需求量大于精液实际库存,及时反馈到养殖生产系统,对销售订单做出修改。精液销售订单与生产联动,既可以利用精液批次和公猪耳号对应关系,便于质量追溯;又能依据销售订单量维护各个公猪站的精液产能,实现了产能与销售平衡。

2 养殖生产系统与SAP 接口设计

养殖生产系统对接SAP 系统采用的是Webservice 的WSDL 方式[5-7],而Webservice 是主要的接口应用技术,技术原理如图1所示。

图1 Webservice 接口应用技术原理

2.1 Webservice 技术简介

Webservice 也叫XML Web Service,WebService 是一种可以接收从Internet 或者Intranet 上的其他系统中传递过来的请求,是一种跨语言和跨平台的远程调用技术,Web 基于开放标准技术(Http,Xml,Soap)使其特别适合于异构平台的多样性和可扩展性,是通过SOAP 在Web 上提供的软件服务,使用WSDL 文件进行说明。WSDL 是一个用于精确描述Web 服务的文档,WSDL 文档是一个遵循WSDL XML 模式的XML 文档。WSDL 文档将Web服务定义为一个服务访问点或端口的集合。客户端可以通过它来访问包含面向文档信息的服务或面向过程调用(与远程过程调用相似)。使用了WSDL,就可以通过这种跨平台和跨语言的方法使Web Service 代理的产生自动化,向这种Web Service 的提供商和用户推出方便的协调工作的方法。SOAP是实现在Webservice 组件之间底层的通信协议。SOAP 是指简单对象访问协议,是一个基于XML 的协议交换消息,可以使用HTTP 来传输这些信息。事实上HTTP 是SOAP 消息的最常见的传输工具。SOAP 将信息进行XML 的序列化后,再用HTTP 协议的方式再打包进行传送,传送的方式是tcp 或者udp 即soap 信息可以通过HTTP 协议包装后通过tcp 或udp 传输。Webservice 原理:Web Service 就是一个应用程序,它向外界暴露出一个能够通过Web调用的API。Web Service 是一种基于Web 的中间件技术。用户通过把应用程序的一部分包装成Web服务的形式,将自己的应用程序功能提供给别人,实现应用程序之间的接口。Webservice 可用于多个系统和SAP 系统之间的传输,比较灵活。根据外部系统提供的Webservice 的WSDL 地址,在SAP 系统创建Webservice consumer 时候输入该URL。使用SOAMANAGER 创建逻辑端口,封装函数,在函数里指定端口,并调用类的方法,反之,创建Webservice provider,生成WSDL 供外部调用。

2.2 SAP 接口对接实现

1)养殖生产系统如何请求SAP 接口。养殖生产系统采用的是C#语言连接SAP 技术,连接的前提是:SAP 系统要存在RFC 远程调用函数,即RFC 是一种机制,允许业务应用程序与其他系统进行通信和交换信息(以预定义的格式)。建立连接的步骤:在已有的养殖生产项目BMS 中创建一个类库BMS.ServiceAPI,系统会自动生成一个组件Connected Services,右击这个组件,选择添加引用,在地址栏输入SAP 系统提供的WSDL 地址,例如:url/wsdl?p=ic/9dd2eef66791353dbfcf0ce5111f0b71 点击转到,这时我们可以获取位于该地址上的所有服务引用,一般一个地址对应一个服务,找到我们需要的服务引用,再点击命名空间按照预定义好的格式进行命名,最后点击确定。这样下来在养殖生产系统里就添加了这个服务应用,添加应用的同时会自动生产一些配置文件。例如,添加精液领用出库SAP 接口,养殖生产系统在app.config 自动生成的配置文件。但是根据这样的代码来编译接口,会导致编译错误,所以我们需要自己去重新配置接口的服务文件,以此来请求接口函数。首先,将security 的mode元素属性改为TransportCredentialOnly,用来提供基于http 的客户端身份验证。其次,增加transport 的clientCredentialType 属性:指定执行使用HTTP 身份验证的客户端身份验证时要使用的凭据类型;proxyCredentialType 属性:指定使用代理通过HTTP 在域中执行客户端身份验证时使用的凭据类型(只有当mode 元素的security 属性位Transport或TransportCredentialsOnly 时,此属性才适用);realm 属性:一个字符串,指定摘要式或基本身份验证的HTTP 身份验证方案所使用的领域。接着,增加message 的clientCredentialType 属性:指定要在使用基于消息的安全性执行客户端身份验证时使用的凭据类型(默认值为UserName);algorithmSuite属性:设置消息加密和密钥包装算法,此属性类型为SecurityAlgorithmSuite,用于指定算法和密钥大小。最后,对于endpoint 终结点的选择,只需要留下一组就可访问SAP 接口了。

2)养殖生产系统如何调用SAP 接口。同步调用模式:在同步调用模式下,接口的调用方会一直等待被调用方返回执行结果,除非调用超时。养殖生产系统在连接好SAP 服务后,右击已经创建好的类库文件添加调用接口里的函数,运用同步调用接口的模式调用SAP 接口。具体调用过程:首先在项目里创建一个类文件,在这个类文件里面,编译代码来调用SAP 对应的接口函数来请求SAP 服务,再通过该函数来进行客户端请求账号密码,最后将养殖生产系统编译好的报文发送至SAP 端,SAP 端接收后返回给养殖生产系统报文,养殖生产系统再等待SAP 的报文返回消息并作出解析来判断是否调用接口成功以及具体的失败错误后,再执行养殖生产系统的后续操作。同步调用接口的优缺点显而易见,同步流程对结果处理相对简单,可以就近处理,对结果的处理始终和前文保持在一个上下文。但是,同步调用是以一种阻塞式调用,无论当前任务如何,调用接口失败与否,反正要一个返回结果,在没有得到这个结果之前,只能继续等待,这种单线的执行会造成执行效率低,耗费时间与资源和用户体验感不好等问题。整个过程如图2所示。

图2 同步调用接口结构

异步调用模式:一个可以无需等待被调用函数的返回值就让操作继续进行的方法。异步调用时,调用方不等被调方返回结果就转身离去,因此必须有一种机制让被调方有了结果时能通知调用方。在同一进程中有很多手段可以利用,常用的手段是回调、互斥对象和消息。养殖系统中使用的异步实现方式是消息队列。消息队列是在消息的传输过程中保存消息的容器:创建一条独立线程,可以把需要异步处理的逻辑作为一条消息发送到独立线程,发送完立即返回继续运行,独立线程取消息队列中的消息进行逻辑处理。在消息队列中,通常有生产者和消费者2 个角色。生产者只负责发送数据到消息队列,消费者只负责从消息队列中取出数据处理。通过安装RabbitMQ 来实现不同系统间的消息异步传递,用于养殖生产系统与SAP 系统间的数据交流和传递。养殖生产系统作为生产者,创建消息写入到RabbitMQ 消息队列中,然后返回养殖生产系统调用成功。SAP 系统作为订阅者,订阅养殖系统写入的消息,消费该消息,再返回结果给RabbitMQ 消费者,判断正确与否。具体调用过程:在养殖生产系统创建好类文件后,编译代码调用SAP 接口函数来请求SAP 服务,并在养殖生产系统里面构建好SAP接口报文,再将报文作为生产消息发布到RabbitMQ代理服务器中,养殖生产系统再编写一个程序文件来作为消费者订阅队列、接受消息队列中的消息以及调用SAP 接口,向其传入编译好的接口报文。在消费者传入SAP 接口消息时需要注意,养殖生产系统接口报文传到SAP 系统之后,SAP 系统会返回成功与否的消息。如果传入接口报文返回失败,则立即反馈给消费者,消费者会重新发送接口报文消息给SAP 接口,但是若消费者发送同一消息至SAP 系统次数大于3 次,则作为异常记录,存入异常记录表中,由SAP 系统运维人员手动处理。如果传入接口报文返回成功,便将返回结果传给消费者。这里根据接口的类型不同来判断是否需要向养殖生产系统里面写入数据,如果不需要,消费者直接确认返回结果并将确认消息发送到RabbitMQ 中,让RabbitMQ 删除这条消息;如果需要,则判断养殖生产系统是否回写数据成功:回写失败则继续让消费者发送消息调用SAP 接口,回写成功则消费者将确认消息发送到RabbitMQ 中,让RabbitMQ 删除这条消息。整个过程如图3所示。

图3 异步调用接口结构

3)接口详细设计方案。养殖生产系统对接SAP系统的接口众多,本文只挑选其中一个接口来详细说明一下。由于未来的仔猪、育肥猪、培育猪、后备猪、种猪、精液等均实现生产批次管理,故在这里详细说明一下批次创建接口的设计与实现。

批次创建接口传送字段及返回消息如表1所示。

表1 接口传送字段及返回消息

养殖生产系统在进行猪只批次创建时需要将上述字段按照预定义格式传给SAP 系统。例如,创建落地仔猪批次,养殖批次编码创建好后,需要根据SAP 批次创建规则生成10 位的SAP 批次编码,编码由6 位年月日(年份取后2 位)和4 位流水号组成,如:20201120 第一批为:2011200001。并在养殖生产系统找到该落地仔猪批的猪只类型编码、来源部门、来源养殖场(即供应商字段)、出生日期、养殖批次编码等有效信息一起传入SAP 系统。这里所传送的来源部门字段需要符合SAP 系统里部门字段的编写规则,所以,需要事先建好一张养殖生产系统与SAP 系统的部门对照表,表中数据包括养殖系统部门ID(即SAP 系统部门ID),SAP 系统部门编码、部门名称,依据部门ID 查询SAP 部门编码和部门名称。如:落地仔猪批的来源部门,意为,首先在养殖生产系统找到创建批次的猪只所属的养殖部门,获取到部门ID,再根据其去养殖生产系统与SAP 系统的部门对照表查询到SAP 部门编码(即工厂字段)和部门名称。

SAP 系统接收到养殖生产系统传来的接口报文后,依据SAP 批次编码来创建生产订单,即一个批次对应一个生产订单。SAP 在生产订单里记录好各批次猪只的类型、来源部门、来源养殖场、出生日期等信息,再回传生产订单号给养殖生产系统。这样后续在养殖生产系统对各批次猪只进行生产入库时,直接根据生产订单号将入库数量依次传入SAP 系统,提高了批次数据的准确性。

3 结语

随着信息全球化的发展,企业对信息化的管理系统更加关注,信息化的建设能够帮助企业实现更好的运营。SAP 系统是一套企业资源管理软件系统,具有现代化、信息化、智能化的应用优势,能够为企业管理问题的解决提供参考意见,同时可以为企业发展做出系统规划,其在现代化商业发展中的应用也开始受到了诸多企业用户的青睐,其在企业信息化建设中的应用,更是能够简化企业管理流程,节约企业建设资源。采用SAP 系统后,与原有的传统财务管理模式相比,企业的财务管理机制得到了创新与提升,对财务管理部门工作人员的专业能力也提出了新的标准与要求,SAP 系统的核算难度高、应用范围广,只有财务人员不断提高自身专业素养及工作能力,才能发挥出SAP 系统在财务管理工作中的应用优势,降低和防范财务风险。

猜你喜欢
出库猪只调用
猪气喘病的防治措施分析
深度学习在猪只饲养过程的应用研究进展
基于姿态与时序特征的猪只行为识别方法
猪打架的防治以及养殖技术
汽车配件的出库、盘点与库存控制
优化拍卖出库流程控制防范拍卖出库环节财务风险
报文数据分析法在立体库故障分析中的应用
基于Android Broadcast的短信安全监听系统的设计和实现
利用RFC技术实现SAP系统接口通信
C++语言中函数参数传递方式剖析