Песочница

Сайт для Таро услуг

За январские праздники начал разработку/прототипирование сайта для консультаций и обучения по Таро картам .

Карты Таро – уникальный эзотерический инструмент, с помощью которого таролог погружается в информационный поток и формулирует предсказание на основе посыла карт.

Колода Райдера Уэйта состоит из 78 карт: 22 аркана – старшие и 56 – младшие. Каждая карта обладает своим уникальным названием. В том или ином сочетании посыл каждой может быть усилен или нивелирован. В отличие от высших арканов, младшие делятся на 4 масти, на каждой из которых есть либо числовое обозначение, либо портретное. В зависимости от того, какое количество карт той или иной масти или старшинства выпало в раскладе, предсказание может меняться.

Функционал сайта для консультаций и обучения по Таро картам следующий:

  • можно добавлять свои курсы
  • регистрироваться и в перспективе оплачивать услуги
  • раскладывать онлайн расклады
  • записываться на курсы
  • читать материалы по Арканам (Старшим и младшим)
  • редактировать информацию по Арканам
  • у каждого зарегистрированного пользователя доступен личный кабинет с доступом к определенному курсу и тд
  • редактировать мета теги страниц/ настройки сайта/пользователей и тд

Язык разработки Python, Mysql — база данных

Сайт/платформу можно купить, базовая стоимость 30.000 рублей

andrey@businessarchitecture.ru, телефон 89309468161

    

Получение курсов криптовалют

Используем сайт https://coinmarketcap.com/all/views/all/

Код на python

import requests
from bs4 import BeautifulSoup

def main():
link = «https://coinmarketcap.com/all/views/all/»
links = get_urls(get_html(link))
for lin in links:
data = get_price(lin)
print (data[‘name’], data[‘cast’])

def get_price(lin):
data = requests.get(lin)
soup = BeautifulSoup(data.text,’lxml’)
name = soup.find(‘h2’).text.strip()
cast = soup.find(‘div’, class_=»priceValue»).text.strip()

data = {«name»: name, «cast»: cast}
return data

def get_html(url):
r = requests.get(url)
return r.text

def get_urls(html):
links = []
soup = BeautifulSoup(html,’lxml’)
tds = soup.find(‘tbody’).find_all(‘div’,class_=’cmc-table__column-name—narrow-layout’)
for td in tds:
a = td.find(‘a’).get(‘href’)
links.append(‘https://coinmarketcap.com’+a)
return links

if __name__==’__main__’:
main()

Результат

Автоматизированная система для создания акта выполненных работ

акт выполненных работ

Создание новой заявки-нового объекта и создание для данного объекта акта выполненных строительных работ, печать акта выполненных строительных работ и предоставление его клиенту. Список работ грузится на сайт в Excel формате, дополнительные работы инженер может указать или переименовать уже существующие работы, новая заявка сохраняется в базу данных и инженер/клиент может иметь к ней постоянный доступ.

Проект готов на 90 процентов

Есть возможность предоставить (продать) полностью исходный код или выделить ежемесячный доступ на компанию/работника

Бек: Python, Flask, Mysql база данных, SQLAchemy
Фронт: Html, Javascript

Наши контакты
Моб: 89309468161 (Андрей)
https://businessarchitecture.ru/

Форма авторизации

Создание новой заявки — новый клиент

Список пользователей

Мониторинг активности пользователей портала

Список заявок с актами

Формирование нового акта

Дашборд

Скрипт архивирования на bat

Batch является языком программирования, используется для создания файлов сценарий которые можно выполнять на операционной системе Windows, обычно эти файлы имею окончание *.bat или *.cmd. При выполнении они открывают окно «Command Prompt», обычно это окно имеет черный фон, белый шрифт.
Файлы batch (*.bat, *.cmd) называются файлами сценарий (script file), они могут содержать команды вмешивающиеся в операционную систему.

@echo off
SetLocal EnableDelayedExpansion
set now=%DATE: =0% %TIME: =0%

set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%

rem ~0,2% для времени меньше 10 часов вместо ведущего нуля выводит пробел

if %d:~0,1%==0 set d=%d:~1%
if %m:~0,1%==0 set m=%m:~1%

set /a feb=y%%4
if %feb%==0 (set feb=29) else (set feb=28)

rem самописная функция для нахождения предыдущего дня
set /a tok=m-1
if %tok%==0 set tok=12
for /f «tokens=%tok%» %%i in («31 %feb% 31 30 31 30 31 31 30 31 30 31») do (
set /a d-=1
if !d!==0 (
set d=%%i
set m=%tok%
if !m!==12 set /a y-=1
)
)

set d=0%d%
set m=0%m%
set yesterday=%y%_%m:~-2%_%d:~-2%
set yesterdaylog=%d:~-2%_%m:~-2%_%y%

echo «delete and arhiving for yesterday = » %yesterday%
echo «delete and arhiving path log for yesterday = » %yesterdaylog%

rem считаем и удаляем каталог с бакапом созданный неделю назад
set T_Date=%date%
IF %T_DATE:~0,1%==0 (
set /A T_DAY=%T_DATE:~1,1%) else (
set /A T_DAY=%T_DATE:~0,2%)

IF %T_DATE:~3,1%==0 (
set /A T_MONTH=%T_DATE:~4,1%) else (
set /A T_MONTH=%T_DATE:~3,2%)
set /A T_YEAR=%T_DATE:~6,4%

rem за сколько дней удалять бакап (до 28 дней, т.к. скрипт, при «отрицательном» дне всегда делает — 1 месяц)
rem ************************
set back_day=28
rem ************************
set /A T_DAY=%T_DAY%-%back_day%

IF %T_DAY% LEQ 0 SET /A T_MONTH=%T_MONTH%-1
IF %T_MONTH%== 0 SET /A T_YEAR=%T_YEAR%-1
IF %T_MONTH%== 0 SET /A T_MONTH=12
IF %T_MONTH%==1 Set /A DIM=31
IF %T_MONTH%==2 Set /A DIM=28
IF %T_MONTH%==3 Set /A DIM=31
IF %T_MONTH%==4 Set /A DIM=30
IF %T_MONTH%==5 Set /A DIM=31
IF %T_MONTH%==6 Set /A DIM=30
IF %T_MONTH%==7 Set /A DIM=31
IF %T_MONTH%==8 Set /A DIM=31
IF %T_MONTH%==9 Set /A DIM=30
IF %T_MONTH%==10 Set /A DIM=31
IF %T_MONTH%==11 Set /A DIM=30
IF %T_MONTH%==12 Set /A DIM=31
IF %T_DAY% LEQ 0 SET /A T_DAY=%T_DAY%+%DIM%
IF %T_DAY% LSS 10 SET T_DAY=0%T_DAY%
IF %T_MONTH% LSS 10 SET T_MONTH=0%T_MONTH%

set DateArchive=%T_YEAR%_%T_MONTH%_%T_DAY%

rem Устанавливаем пути рабочей директории и директории для хранения архивов ConnectUPSH
set WorkDirConnectUPSH=»C:\SBBOL_20180216\ConnectUPSH»
set LogDirConnectUPSH=»C:\SBBOL_20180216\ARCHIVE\log_ConnectUPSH»

rem Устанавливаем пути рабочей директории и директории для хранения архивов DataToReturn
set WorkDirDataToReturn=»C:\SBBOL_20180216\dataToReturn»
set LogDirDataToReturn=»C:\SBBOL_20180216\ARCHIVE\log_DataToReturn»

rem Устанавливаем пути рабочей директории и директории для хранения архивов Exceptions
set WorkDirExceptions=»C:\SBBOL_20180216\Exceptions»
set LogDirExceptions=»C:\SBBOL_20180216\ARCHIVE\log_Exceptions»

rem Устанавливаем пути рабочей директории и директории для хранения архивов IncomingData
set WorkDirIncomingData=»C:\SBBOL_20180216\incomingData»
set LogDirIncomingData=»C\ARCHIVE\log_IncomingData»

rem Устанавливаем пути рабочей директории и директории для хранения архивов SendedToSbbol
set WorkDirSendedToSbbol=»C:\SBBOL_20180216\SendedToSbbol»
set LogDirSendedToSbbol=»C:\SBBOL_20180216\ARCHIVE\log_SendedToSbbol»

rem Устанавливаем пути рабочей директории и директории для хранения архивов log
set WorkDirlog=»C:\SBBOL_20180216\log»
set LogDirlog=»C:\SBBOL_20180216\ARCHIVE\Log»

if exist «%WorkDirConnectUPSH%\connectUPSH_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirConnectUPSH%\connectUPSH_%yesterday% %WorkDirConnectUPSH%\connectUPSH_%yesterday%.txt
if exist «%WorkDirConnectUPSH%\connectUPSH_%yesterday%.txt» del %WorkDirConnectUPSH%\connectUPSH_%yesterday%.txt

if exist «%WorkDirDataToReturn%\dataToReturn_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirDataToReturn%\dataToReturn_%yesterday% %WorkDirDataToReturn%\dataToReturn_%yesterday%.txt)
if exist «%WorkDirDataToReturn%\dataToReturn_%yesterday%.txt» del %WorkDirDataToReturn%\dataToReturn_%yesterday%.txt

if exist «%WorkDirExceptions%\error_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirExceptions%\error_%yesterday% %WorkDirExceptions%\error_%yesterday%.txt
if exist «%WorkDirExceptions%\error_%yesterday%.txt» %WorkDirExceptions%\error_%yesterday%.txt

if exist «%WorkDirIncomingData%\incommingData_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirIncomingData%\incommingData_%yesterday% %WorkDirIncomingData%\incommingData_%yesterday%.txt
if exist «%WorkDirIncomingData%\incommingData_%yesterday%.txt» del %WorkDirIncomingData%\incommingData_%yesterday%.txt

if exist «%WorkDirSendedToSbbol%\SendedToSbbol_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirSendedToSbbol%\SendedToSbbol_%yesterday% %WorkDirSendedToSbbol%\SendedToSbbol_%yesterday%.txt
if exist «%WorkDirSendedToSbbol%\SendedToSbbol_%yesterday%.txt» %WorkDirSendedToSbbol%\SendedToSbbol_%yesterday%.txt

echo %yesterdaylog%
if exist «%WorkDirlog%\%yesterdaylog%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirlog%\Log_%yesterdaylog% %WorkDirlog%\%yesterdaylog%.txt
if exist «%WorkDirlog%\%yesterdaylog%.txt» del %WorkDirlog%\%yesterdaylog%.txt

rem удаление файлов за back_day
if exist «%LogDirConnectUPSH%\connectUPSH_%DateArchive%.7z» del %LogDirConnectUPSH%\connectUPSH_%DateArchive%.7z
if exist «%LogDirDataToReturn%\dataToReturn_%DateArchive%.7z» del %LogDirDataToReturn%\dataToReturn_%DateArchive%.7z
if exist «%LogDirExceptions%\error_%DateArchive%.7z» del %LogDirExceptions%\error_%DateArchive%.7z
if exist «%LogDirIncomingData%\incommingData_%DateArchive%.7z» del %LogDirIncomingData%\incommingData_%DateArchive%.7z
if exist «%LogDirSendedToSbbol%\SendedToSbbol_%DateArchive%.7z» del %LogDirSendedToSbbol%\SendedToSbbol_%DateArchive%.7z
if exist «%LogDirlog%\%DateArchive%.7z» del %LogDirlog%\%DateArchive%.7z

удаление файлов c начала года
set /a ArchiveMonth=%T_MONTH% + 1
echo «Delete old file»
for /L %%B in (1,1,%ArchiveMonth%) do (
for /L %%C in (1,1,31) do (
IF %%B LSS %T_MONTH% if exist «%LogDirConnectUPSH%\connectUPSH_%T_YEAR%_%%B_%%C.7z» start ( del %LogDirConnectUPSH%\connectUPSH_%T_YEAR%_%%B_%%C.7z)
IF %%B LSS %T_MONTH% if exist «%LogDirDataToReturn%\dataToReturn_%T_YEAR%_%%B_%%C.7z» start (del %LogDirDataToReturn%\dataToReturn_%T_YEAR%_%%B_%%C.7z)
IF %%B LSS %T_MONTH% if exist «%LogDirExceptions%\error_%T_YEAR%_%%B_%%C.7z» start (del %LogDirExceptions%\error_%T_YEAR%_%%B_%%C.7z)
IF %%B LSS %T_MONTH% if exist «%LogDirIncomingData%\incommingData_%T_YEAR%_%%B_%%C.7z» start (del %LogDirIncomingData%\incommingData_%T_YEAR%_%%B_%%C.7z)
IF %%B LSS %T_MONTH% if exist «%LogDirSendedToSbbol%\SendedToSbbol_%T_YEAR%_%%B_%%C.7z» start (del %LogDirSendedToSbbol%\SendedToSbbol_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirConnectUPSH%\connectUPSH_%T_YEAR%_%%B_%%C.7z» start (del %LogDirConnectUPSH%\connectUPSH_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirDataToReturn%\dataToReturn_%DateArchive%.7z» start (del %LogDirDataToReturn%\dataToReturn_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirDataToReturn%\dataToReturn_%T_YEAR%_%%B_%%C.7z» start del (%LogDirExceptions%\error_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirIncomingData%\incommingData_%T_YEAR%_%%B_%%C.7z» start (del %LogDirIncomingData%\incommingData_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirSendedToSbbol%\SendedToSbbol_%T_YEAR%_%%B_%%C.7z» start (del %LogDirSendedToSbbol%\SendedToSbbol_%T_YEAR%_%%B_%%C.7z)
)
)

Разработка сайта для учета спортивных достижений

Идея: есть СДЮШ и есть дети, которые участвуют в соревнованиях районного/окружного/городского уровня. Логично внедрить сайт/программу для отслеживания результатов каждого конкретного спортсмена.
Функционал: регистрируется родитель и указывает своего ребенка, дальше программа находит результаты соревнований по конкретному ребенку и выдает результат родителю, дополнительно программа строит дашборды и выдает рекомендации.

Начал писать на Python/Flask/Bootstrap/Html

Виджет «Карта судьбы или Психоматрица»

На днях сделали виджет «Карта судьбы или Психоматрица» для коммерческого сайта. Использовали чистый javascript, html

Первый вариант виджета

Итоговый вариант для клиента

Виджет успешно встроен на сайт https://taplink.cc/e.a.chepik

Передатчик ПС БР версия 1.0.1

Система обмена финансовыми документами

В рамках программного модуля «Передатчик ПС БР» реализован следующий функционал:

  • создание финансовых сообщений в формате УФЭБС ED101;
  • создание финансовых сообщений в формате УФЭБС ED501;
  • создание финансовых сообщений в формате SWIFT MT101;
  • хранение финансовых сообщений в базе данных;
  • выгрузка платёжных поручений в pdf формате;
  • обработка принятых входящих сообщений;

Данный модуль можно считать практически полноценной АБС.  Сформированные в АБС реестры будут отправляться в АРМ КБР (автоматизированное рабочее место клиента Банка России) — специальный компьютер в банке в отдельном защищённом контуре, с которого уходят платежи в ЦБ РФ. 

В версии 1.0.1 появился новый функционал:

Формат авторизации с матрицей ролей

Старая форма

Форма атворизации

Новая форма

Логирование действий пользователей

Логирование пользователей

Обработка файлов формата 1С

Новые формы для пользователей

Ссылка на разработку https://businessarchitecture.ru/test-spfs
Клиент-серверное приложение, язык разработки C#, база данных MS SQL
Скачать программу можно по ссылке

E-mail для связи: andrey@businessarchitecture.ru,
Телефон: +7 (930) 946-81-61 (Андрей)

Конвертация выписки банка 1CClientBankExchange в собственный формат

Для централизации финансовой деятельности необходимо обработать выписки формата 1CClientBankExchange в формат собственной банковской системы (например записать в базу данных MS SQL или Oracle ). В частности подобные файлы обрабатываются в крупных корпорациях и финансовых организациях.

Первоначально мы имеем сетевую файловую структуру следующего вида

В папку «IN» поступают банковские выписки и после обработки попадают в папку «Archive».

Дополнительно необходимо предусмотреть папку «Error» для ошибочных файлов и папку «Log», где будут вестись логи обработки.

Программа будет написана на языке C#.

Кодировка исходных файлов — Windows-1251. Обработка файла выполняется следующем образом. Мы анализируем каталог, получаем общее количество файлов, потом возвращаемся к первому файлу, разбиваем строку на массив элементов по разделителю «=». После обработки файла он перемещается в архив, исходный файл удаляется.

public static bool ReadFile(string filename)
{
var srcEncoding = Encoding.GetEncoding(1251);
var dstEncoding = Encoding.UTF8;
bool success = false;
try
{
using (StreamReader sr = new StreamReader(filename, encoding: srcEncoding))
{
string headers = sr.ReadLine();
int count = System.IO.File.ReadAllLines(filename).Length;
int i = 0;
logger.Debug("Чтение данных");
PaymentP paymentP = new PaymentP();
while (i < count)
{
string onedouble = sr.ReadLine();
if (Check(onedouble) == true)
{
string[] lines = Regex.Split(onedouble, "[=]");
if (lines[0] != null)
                        {
                            if (lines[1] != null)
                            {
                                logger.Debug($"{lines[0]} {lines[1]}");
                                paymentP.TranslateToexport(lines[0], lines[1]);
                                i++;
                                success = true;
                            }
                            if (lines[1] == null)
                            {
                                logger.Debug($"{lines[0]}");
                                i++;
                                success = true;
                            }
                        }
                    }
                    else
                    {
                        i++;
                        success = true;
                    }
                }
                Export(paymentP);
                paymentP=null;

            }
        }
        catch
        {
            logger.Debug("Ошибка чтения файла");
        }
        return success;

После обработки данные записываются в структуру

public class PaymentP
{
public string Otpravitel;
public string Poluchatel;
public DateTime DataSozdaniya;
public DateTime VremyaSozdaniya;
public string RaschSchet;
public string Dokument;
public string Nomer;
public DateTime Data;
public string Summa;
public string PlatelshchikSchet;
public string PlatelshchikINN;
public string PlatelshchikKPP;
public string Platelshchik1;
public string PlatelshchikRaschSchet;
public string PlatelshchikBank1;
public string PlatelshchikBank2;
public string PlatelshchikBIK;
public string PlatelshchikKorschet;
public string PoluchatelSchet;
public string PoluchatelINN;
public string Poluchatel1;
public string PoluchatelRaschSchet;
public string PoluchatelBank1;
public string PoluchatelBank2;
public string PoluchatelBIK;
public string PoluchatelKorschet;
public string VidPlatezha;
public int VidOplaty;
public int Ocherednost;
public string NaznacheniePlatezha;

И обращаемся к конкретному полю ( реализация вывода выполнена в ознакомительных целях).

Настройки корневого пути файлов мы будем хранить в реестре операционной системы.

Обработанные поля в консоль выводятся следующем образом (для проверки).

Скачать приложение http://developcbs.ru/downloads/1C_Analizy.7z

Ознакомиться с проектом https://github.com/aovakur/Read1C_financial_doc

E-mail для связи: andrey@businessarchitecture.ru,

Телефон: +7 (930) 946-81-61 (Андрей)

Разработка модуля создания финансовых сообщений «Передатчик ПС БР»

В рамках программного модуля «Передатчик ПС БР» предполагается реализовать следующий функционал:

  • создание финансовых сообщений в формате УФЭБС ED101;
  • создание финансовых сообщений в формате УФЭБС ED501;
  • создание финансовых сообщений в формате SWIFT MT101;
  • хранение финансовых сообщений в базе данных;
  • выгрузка платёжных поручений в pdf формате;
  • обработка принятых входящих сообщений;

Данный модуль можно считать практически полноценной АБС.  Сформированные в АБС реестры будут отправляться в АРМ КБР (автоматизированное рабочее место клиента Банка России) — специальный компьютер в банке в отдельном защищённом контуре, с которого уходят платежи в ЦБ РФ. 

Высокие функциональные требования к современным АБС обусловлены сложностью интеграции программного продукта, необходимостью решения широкого спектра клиентских задач, в связи с этим мой модуль должен иметь следующие критерии:

  • комплексное обеспечение банковской деятельности (единство документооборота, отчётности, пакетная обработка данных);
  • лёгкость интеграции, возможность простого модульного расширения функциональности;
  • защищённость, безопасность;
  • достоверность данных, оперативное обновление информации, учёт специфики работы коммерческой структуры.

Разработка приложения будет осуществляться в Visual Studio 2017. В качестве хранилища данных будет использоваться MS SQL Server 2019.

Версии программы будут храниться в системе хранения версий – GitHub, репозиторий https://github.com/aovakur/Peredatchik_PSBR. Количество веток – две (master и release). В ветку мастер я буду выкладывать доработанные формы и функции, в ветку релиз буду выкладывать собранный релиз со всеми библиотеками и необходимыми таблицами. 

Для сохранения платёжных поручений необходимо разработать меню конфигурации (выбор сервера, базы данных, имя пользователя, пароль).

Разработанное подключение к БД представлено на рисунке 3.3. Имя и пароль пользователя будет скрыто от пользователя. По умолчанию имя пользователя – adminkbr, пароль aA12345678.

Данные для подключения будут храниться в классе DBUtils.cs, инициализация подключения будет происходить в классе DBSQLServerUtils.cs.

Глобальные настройки подключения к БД я установлю в файле app.config.

Доступ к глобальным настройкам будет происходить через СonfigurationManager и вызов функции 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″ />

 Если текущий операционной день поменялся, то происходит обнуление счётчика и первому ЭС присваивается номер 1.

Для разработки и тестирования программы я буду использовать локальный Microsoft SQL Server 2019, в будущем таблицу можно будет перенести на облачный сервер или сервер БД в организации.

Подключение к БД будет осуществлять по TCP соединению и 1433 порту. Для работы с MS SQL я буду использовать Microsoft SQL Server Management studio 2018.

Для отображения созданных и принятых электронных сообщений необходимо создать экранную форму (DataGrid).

Форма 1 будет формироваться в классе Form1.cs. Для сохранения платёжного поручения в специализированный формат необходимо разработать глобальные настройки сохранения. Настройки сохранения будут формироваться в классе settings.cs.

Для создания платёжного поручения (форма 0401060 согласно Приложению 2 Положения Банка России от 19 июня 2012 года № 383-П «О правилах осуществления перевода денежных средств» (в редакции Указаний Банка России от 15.07.2013 № 3025-У, от 29.04.2014 № 3248-У, от 19.05.2015 № 3641-У, от 06.11.2015 N 3844-У, от 05.07.2017 N 4449-У и от 11.10.2018 N 4930-У)) необходимо разработать специальный пользовательский интерфейс и механизм автоматического формирования некоторых полей.

Пользовательский интерфейс формы №0401060 представлен ниже

Данная форма является основным функционалом системы, после создания платёжного поручения его реквизиты можно передать в БД, сформировать PDF документ, отправить на печать, сохранить в соответствующий формат (ed101, ed501, MT101). Форма формируется в классе Form2.cs и используя класс pp.cs для создания нового экземпляра класса CreatePP, значения полей будет заполняться через модификатор доступа get и set. Для каждого поля ПП присвоен соответствующее название P1-P110 c модификатором доступа public и переменные p1-110 с модификатором доступа private.

Фрагмент кода приведён ниже:  

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» в качестве параметров будут передаваться значения полей, c помощью fields. 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);

Большинство полей автоматизированы и не требуют участие пользователя.

Автоматически формируется сумма пропью (согласно требованиям ЦБ), подтягивается банк плательщик, плательщик, получатель, банк получателя. По наименованию организации проставляется ИНН, КПП; по наименованию банка проставляется БИК, корреспондентский счёт.

Производим установку и запуск программы «Передатчик ПС БР» от имени пользователя. Заполняем поля платёжного поручения

Формируем документ ED101 и анализируем результат сохранения

C помощью XMLPAD проводим сопоставление нашего файла ED101 и его XSD схемы.

Наш созданный файл ED101 не имеет логических ошибок и может быть успешно перенесён в АРМ КБР (АРМ КБР СПФС) для отправки в ЦБ РФ.

Провести проверку созданного ED501 невозможно из-за отсутствия стандартизированной схемы, атрибутивный состав каждый банк выбирает самостоятельно.

следующем образом:

<?xml version=»1.0″ encoding=»WINDOWS-1251″?>

<ED501 xmlns=»urn:cbr-ru:ed:v2.0″ EDAuthor=»3510108000″ EDDate=»2014-09-22″ EDNo=»900004″ ActualReceiver =»3510106000″>

<ProprietoryDocument >QT4+MUk1PTg1IDcwOj40OEA+MjA9PT41ICAyIGJhc2U2NA==</ProprietoryDocument></ED501>

где ProprietoryDocument – подписанный документ.

Осуществляем отправку сформированного сообщения через АРМ КБР/ АРМ КБР СПФС в платёжный контур ЦБ РФ.

После отправки ЭС 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 – исходное сообщение, сформированное АРМ КБР;
  • ResultCode – код статуса (000 – успешно, 001 — неуспешно),
  • ResultText – сам статус ЭС (успешно поступило в ТШ, обработано, исполнено).

Ссылка на разработку https://businessarchitecture.ru/test-spfs

Клиент-серверное приложение, язык разработки C#, база данных MS SQL

Скачать программу можно по ссылке https://sourceforge.net/projects/peredatchikpsbr/

Тестовая база данных http://developcbs.ru/downloads/ps_bankrussia_test.bak

Скачать дистрибутив http://developcbs.ru/downloads/Setup.msi
E-mail для связи: andrey@businessarchitecture.ru,

Телефон: +7 (930) 946-81-61 (Андрей)