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
Создание новой заявки-нового объекта и создание для данного объекта акта выполненных строительных работ, печать акта выполненных строительных работ и предоставление его клиенту. Список работ грузится на сайт в Excel формате, дополнительные работы инженер может указать или переименовать уже существующие работы, новая заявка сохраняется в базу данных и инженер/клиент может иметь к ней постоянный доступ.
Проект готов на 90 процентов
Есть возможность предоставить (продать) полностью исходный код или выделить ежемесячный доступ на компанию/работника
Бек: Python, Flask, Mysql база данных, SQLAchemy
Фронт: Html, Javascript
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)
)
)
Идея: есть СДЮШ и есть дети, которые участвуют в соревнованиях районного/окружного/городского уровня. Логично внедрить сайт/программу для отслеживания результатов каждого конкретного спортсмена. Функционал: регистрируется родитель и указывает своего ребенка, дальше программа находит результаты соревнований по конкретному ребенку и выдает результат родителю, дополнительно программа строит дашборды и выдает рекомендации.
В рамках программного модуля «Передатчик ПС БР» реализован следующий функционал:
создание финансовых сообщений в формате УФЭБС ED101;
создание финансовых сообщений в формате УФЭБС ED501;
создание финансовых сообщений в формате SWIFT MT101;
хранение финансовых сообщений в базе данных;
выгрузка платёжных поручений в pdf формате;
обработка принятых входящих сообщений;
Данный модуль можно считать практически полноценной АБС. Сформированные в АБС реестры будут отправляться в АРМ КБР (автоматизированное рабочее место клиента Банка России) — специальный компьютер в банке в отдельном защищённом контуре, с которого уходят платежи в ЦБ РФ.
Для централизации финансовой деятельности необходимо обработать выписки формата 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;
И обращаемся к конкретному полю ( реализация вывода выполнена в ознакомительных целях).
Настройки корневого пути файлов мы будем хранить в реестре операционной системы.
Обработанные поля в консоль выводятся следующем образом (для проверки).
В рамках программного модуля «Передатчик ПС БР» предполагается реализовать следующий функционал:
создание финансовых сообщений в формате УФЭБС 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) в течение операционного дня (текущего дня) также будет задан через глобальные настройки:
Если текущий операционной день поменялся, то происходит обнуление счётчика и первому ЭС присваивается номер 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 документ.
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 невозможно из-за отсутствия стандартизированной схемы, атрибутивный состав каждый банк выбирает самостоятельно.
Осуществляем отправку сформированного сообщения через АРМ КБР/ АРМ КБР СПФС в платёжный контур ЦБ РФ.
После отправки ЭС 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>
Для передатчика платежной системы Банка России (собственного приложения) создаю веб сайт.
Использую существующую архитектура desktop приложения (MSSQL база данных), использую Entity Framework для формирования таблицы, добавляю ограничения по правам пользователей. Дополнительно будут созданы дашборды.
Возможно скоро проект превратится в полноценную АБС