开发用于为AWP KBR / AWP KBR-SPFS创建财务消息的模块

哈Ha!



这是我的第一篇关于金融程序小型开发的小文章,请不要严格判断。



由于并非所有的国有公司都已通过俄罗斯联邦中央银行的财务消息传递系统实现了财务消息交换,因此我想自行分解并创建一个小型的工作原型。



俄罗斯银行金融消息系统(SPFS)是金融交易中电子消息传输的替代渠道。 SPFS保证在国内不间断地传输财务消息。



信贷机构及其客户-法人实体在技术上准备就绪并与俄罗斯银行建立合同关系后,便会立即与SPFS建立联系。程序方面由俄罗斯银行的一项单独规定决定。



要开发网络交互方案,必须遵循以下文档的指导:



  1. CBRF.61209-049301“信息安全准则”;
  2. CBRF.61209-049201“俄罗斯银行客户的自动化工作站。用户手册”;
  3. CBRF.61209-049202“俄罗斯银行客户的自动化工作站。管理员指南”;
  4. VAMB.00106-019301“ SCAD”签名“版本5”。签名客户端“版本5。信息安全管理员指南”。


要将财务消息发送到SPFS电路,有一个软件AWK KBR / AWP KBR-N / AWP KBR SPFS。



AWS KBR / AWP KBR SPFS是一款专用软件,适用于银行或大型政府组织的员工,用于准备金融消息并将其发送到中央银行的支付电路。该软件使您可以对财务文件进行电子签名,检查和解密从俄罗斯银行收到的电子消息。 AWP KBR / AWP KBR SPFS在其工作中使用UEFBS财务文件的格式。消息的类型既包括支付消息,也包括信息性消息(创建测试消息,请求技术信息等)。



为了进行处理,电子邮件必须在AWS KBR上转换为UEFBS或转换为客户端的ABS并发送到AWS KBR。



图片



在手动模式下工作时,电子邮件将放置在AWS KBD目录c中:// uarm3 / exg / cli。内置组件“传入控制”分析传入的ES。如果消息已成功通过验证,则转到“已输入”选项卡,如果消息尚未验证,则转到“已拒绝”选项卡。在自动模式下工作时,消息将转到输出文件夹。



图片



作为开发的一部分,实现了以下功能:



  1. 以UEFBS ED101格式创建财务消息;
  2. 以UEFBS ED501格式创建财务消息;
  3. 以SWIFT MT101格式创建财务消息;
  4. 将财务消息存储在MS SQL数据库中;
  5. 以pdf格式卸载付款单;
  6. 处理收到的传入消息;


要保存付款单,有必要开发一个配置菜单(选择服务器,数据库,用户名,密码)。



图片



我将在app.config文件中设置全局数据库连接设置。通过ConfigurationManager可以访问全局设置,并调用ReadSetting函数,并通过AddUpdateAppSettings函数进行更新。



也将通过全局设置来设置工作日(当日)期间的消息计数器(ed501,ed101):



add key="currentday" value="20200416"
add key="EDNo" value="2″ 
add key="MessageName» value="10836708462"
add key="MessageIDED501" value="2"
add key="MessageIDED501_full" value="10836708462_pain_MSG_20200416_00000002"


如果当前工作日已更改,则将重置计数器,并为第一个ES分配编号1。



将通过TCP连接和端口1433与数据库进行连接。若要使用MS SQL,我将使用Microsoft SQL Server Management Studio2018。



图片



要显示当天/全天创建和接收的电子邮件,您需要创建一个显示表单(DataGrid)。



图片



表单1将在Form1.cs类中生成。要以专用格式保存付款单,必须开发全局保存设置。保存设置将在settings.cs类中生成。



图片



创建付款订单(根据俄罗斯银行日期为2012年6月19日的条例383-P“关于转帐规则”附录2的表格0401060(由俄罗斯银行于2013年7月15日的日期为3025-U的指令修订,日期为2014年4月29日) 3248-U,日期为2015年5月19日,编号为3641-U,日期为2015年11月6日,编号为3844-U,日期为2017年7月5日,编号为4449-U,日期为2018年10月11日,编号为4930-U)))有必要开发特殊的用户界面和自动生成机制一些领域。



表格#0401060的用户界面如下所示:



图片



该表格是系统的主要功能,创建付款订单后,其详细信息可以传输到数据库,生成PDF文档,发送以打印,以适当的格式(ed101,ed501,MT101)保存。该表单是在Form2.cs类中生成的,并使用pp.cs类创建CreatePP类的新实例,该字段值将通过get和set访问修饰符填充。对于每个PP字段,对应的名称是带有公共访问修饰符的P1-P110和带有私有访问修饰符的p1-110变量。



该代码段如下所示:



private string p1;
private string p0;
private int p2;
private int p3;
private string p4;
private string p5;
public string P0
        {
            get { return p0; }
            set { p0 = value; }
        }
        public int P20
        {
            get { return p20; }
            set { p20 = value; }
        }
        public string Status
        {
            get { return status; }
            set { status = «»; }
        }
        public string P1
        {
           get { return p1; }
            set { p1 = « »; }
        }
       public string Date_pp()
        {
            DateTime dt = DateTime.Now;
            string curDate = dt.ToShortDateString();
            return curDate;
        }


如果在保存过程中未填写所有字段,程序将以红色突出显示空白字段。



用于检查字段的代码片段:



if (textBox10.Text == «»)
{
textBox10.BackColor = Color.Fuchsia;
}


图片



调用``create_pdf''函数后,将生成一个具有填充字段的pdf文档。



图片



在``create_pdf''函数中,将使用字段将字段值作为参数传递。这些值将被SetField插入PDF文档中。



该代码段如下所示:



public string Pdf(string p0, string p4, string p6, string p60, string p102, int p7, string p8, string p9, string p10, string p11, string p12, int p101, string p13, string p14, string p15, string p17, string p18, string p61, string p103, string p16, int p21, string p24, string p5, string p22, string p104, string p105, string p106, string p107, string p108, string p109, string p110)
        {  string pathsafe = settings.safepathpdf + p4 + «_» + p0 + «.pdf»;
            string pathsafetemplatefont = settings.safepath + «\\Template\\Tahoma.ttf»;
            BaseFont baseFont = BaseFont.CreateFont(pathsafetemplatefont, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            PdfReader template = new PdfReader(settings.safepathetemplate);
            PdfStamper stamper = new PdfStamper(template, new FileStream(pathsafe, FileMode.Create));
            AcroFields fields = stamper.AcroFields;
            fields.AddSubstitutionFont(baseFont);
            fields.SetField(«p4», p4);
            fields.SetField(«p3», p0);
            fields.SetField(«p6», p6);


大多数字段是自动的,不需要用户输入。



酒水消费量是自动生成的(根据中央银行的要求),付款人银行,付款人,收款人,收款人的银行会被提取。 TIN,KPP均标有组织名称; BIK,代理帐户位于银行名称下。



图片



形成文件ED101



图片



形成文件ED501



图片



我们通过AWS CBD / AWP CBD SPFS将生成的消息发送到俄罗斯联邦中央银行的支付电路。



发送ES ED101 / ED501后,我收到了俄罗斯联邦中央银行关于以下状态的回执:



<?xml version=»1.0″ encoding=»utf-8″?><soapenv:Envelope xmlns:soapenv=»http://www.w3.org/2003/05/soap-envelope»><soapenv:Header><props:MessageInfo xmlns:props=»urn:cbr-ru:msg:props:v1.3″><props:To>uic:452500055555</props:To><props:From>uic:KBRGATE</props:From><props:MessageID>KBRGATE_guid:786df05a239943f3bc9eca41a6fc430a</props:MessageID><props:CorrelationMessageID>guid:786df05a239943f3bc9eca41a6fc430a</props:CorrelationMessageID><props:MessageType>3</props:MessageType><props:Priority>5</props:Priority><props:CreateTime>2019-08-06T07:46:04Z</props:CreateTime><props:SendTime>2019-08-06T07:46:04Z</props:SendTime></props:MessageInfo><props:AcknowledgementInfo xmlns:props=»urn:cbr-ru:msg:props:v1.3″><props:AcknowledgementType>2</props:AcknowledgementType><props:ResultCode>0000</props:ResultCode><props:ResultText>    :uic:777777700011.    :  : ED997_06104603.dat.    :   : uic:452500055555,   : uic:777777700011.   : 2019-08-06 07:46:04</props:ResultText>

</props:AcknowledgementInfo></soapenv:Header><soapenv:Body></soapenv:Body></soapenv:Envelope>


这些字段具有以下解密:



CorrelationMessageID-AWS KBR生成的原始消息;

ResultCode-状态码(

000-成功,001-不成功),ResultText-ES状态本身(TS成功接收,处理,执行)。



链接到开发https://businessarchitecture.ru/test-spfs/



All Articles