Как сделать квитанцию с QR-кодом по спецификации СБЕРа на Delphi и Lazarus

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

Теперь FastReport VCL позволяет Вам легко генерировать квитанции с QR code, поддерживающим единые правила использования штрихового кода как поставщиками услуг при выставлении счетов , так и принимающими платежи организациями.

Вы можете просто ввести свои реквизиты в соответствующие поля или подключить базу данных к своему шаблону отчета и сформировать квитанцию с QR-Code по спецификации СБЕРа.

Давайте сделаем шаблон отчета штрихкод Sber QR.

FastReport VCL

Здесь мы добавили обычный QR код. Чтобы превратить его в Sber QR сделайте клик по нему и в инспекторе объектов выберите TfrxSberPaymentPreset для свойства ExpressionPreset.PresetClass.

QR-код изменился. У него появилась графическая маркер нижнем правом углу.

Если Вам необходимо ее убрать используйте свойство BarProperties.GraphicMarker.ShowGraphicMarker.

После этого в ExpressionPreset.DataObject станут доступны параметры, используемые для построения Sber QR-кода.

FastReport VCL

Рассмотрим эти параметры подробнее:

SberData - Сервисные данные
IdFormat - Идентификатор формата
Version - Версия
Encoding - Признак набора кодированных знаков
Type:

  1. ec_WIN1251;
  2. ec_UTF8;
  3. ec_КОI8_R.

Separator - Разделитель.
FieldTypes - Тип полей у параметров fdExpression - использование выражений FR во всех полях, и fdStatic - статические данные во всех полях

Required Banking Details - Обязательные реквизиты
Все поля из данного раздела обязательны для заполнения.

Payee (Получатель платежа)
Name - Наименование получателя платежа Макс. 160 знаков
PersonalAcc - Номер счета получателя платежа Макс. 20 знаков
BankName - Наименование банка получателя платежа Макс. 45 знаков
BIC - БИК Макс. 9 знаков
CorrespAcc - Номер кор./сч. банка получателя платежа Макс. 20 знаков
AdditionalBankingDetails - Дополнительные реквизиты
Sum - Сумма платежа, в копейках Макс. 18 знаков
Purpose - Наименование платежа (назначение)Макс. 210 знаков
PayeeINN - ИНН получателя платежа Макс. 12 знаков
PayerINN - ИНН плательщика Макс. 12 знаков
DrawerStatus - Статус составителя платежного документа Макс. 2 знака
KPP - КПП получателя платежа Макс. 9 знаков
CBC - КБК Макс. 20 знаков
OKTMO - Общероссийский классификатор территорий муниципальных образований (ОКТМО) Макс. 11 знаков
PaytReason - Основание налогового платежа Макс. 2 знака
ТaxPeriod - Налоговый период Макс. 10 знаков
DocNo - Номер документа Макс. 15 знаков
DocDate - Дата документа Макс. 10 знаков
TaxPaytKind - Тип платежа Макс. 2 знака

OtherAdditionalBankingDetails - Прочие дополнительные реквизиты
LastName - Фамилия плательщика
FirstName - Имя плательщика
MiddleName - Отчество плательщика
PayerAddress - Адрес плательщика
PersonalAccount - Лицевой счет бюджетного получателя
DocIdx - Индекс платежного документа
PensAcc - No лицевого счета в системе персонифицированного учета в ПФР -СНИЛС
Contract - Номер договора
PersAcc - Номер лицевого счета плательщика в организации (в системе учета ПУ)
Flat - Номер квартиры
Phone - Номер телефона
PayerIdType - Вид ДУЛ плательщика
PayerIdNum - Номер ДУЛ плательщика
ChildFio - Ф.И.О. ребенка/учащегося
BirthDate - Дата рождения
PaymTerm - Срок платежа/дата выставления счета
PaymPeriod - Период оплаты
Category - Вид платежа
ServiceName - Код услуги/название прибора учета
CounterId - Номер прибора учета
CounterVal - Показание прибора учета
QuittId - Номер извещения, начисления, счета
QuittDate - Дата извещения/начисления/счета/постановления (для ГИБДД)
InstNum - Номер учреждения (образовательного, медицинского)
ClassNum - Номер группы детсада/класса школы
SpecFio - ФИО преподавателя, специалиста, оказывающего услугу
AddAmount - Сумма страховки/дополнительной услуги/Сумма пени (в копейках)
RuleId - Номер постановления(для ГИБДД)
ExecId - Номер исполнительного производства
RegType - Код вида платежа(например, для платежей в адрес Росреестра)
UIN - Уникальный идентификатор начисления
TechCode - Технический код, рекомендуемый для заполнения поставщиком услуг. Может использоваться принимающей организацией для вызова соответствующей обрабатывающей ИТ-системы. Перечень значений кода представлен в Приложении В.

Далее заполняем значения параметров. Они являются выражениями, поэтому можно либо перетащить поля из дерева данных (в версии FR VCL 6.7 добавлена такая возможность), либо ввести фиксированные данные. Обратите внимание на то что фиксированные строковые параметры должны быть заключены в кавычки (для Pascal Script это одинарные кавычки).

Если все данные заполнены правильно, то никаких предупреждающих сообщений не последует, а Sber QR-код в окне предварительного просмотра изменится.

FastReport VCL

Создаём СБЕР QR-код из кода Delphi/Lazarus 

QR-Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uses frxBarcode, frxQRCodeSberPreset
procedure TForm1.Button1Click(Sender: TObject);
var bcSBER: TfrxBarcode2DView;
begin
bcSBER := TfrxBarcode2DView(frxReport1.FindObject('Barcode2D1'));
{Устанавливаем тип штрихкода}
bcSBER.BarType := bcCodeQR;
{Устанавливаем присет для СБЕР QR-кода}
bcSBER.ExpressionPreset.PresetClass := 'TfrxSberPaymentPreset';
{Устанавливаем обязательные реквизиты}
TfrxSberPaymentPreset(bcSBER.ExpressionPreset.DataObject).RequiredBankingDetails.Payee.BankName := '<Qrsber.Purpose>';
TfrxSberPaymentPreset(bcSBER.ExpressionPreset.DataObject).RequiredBankingDetails.Payee.BIC := '<Qrsber.BIC>';
TfrxSberPaymentPreset(bcSBER.ExpressionPreset.DataObject).RequiredBankingDetails.Payee.CorrespAcc := '<Qrsber.CorrespAcc>';
TfrxSberPaymentPreset(bcSBER.ExpressionPreset.DataObject).RequiredBankingDetails.Payee.Name := '<Qrsber.Name>';
TfrxSberPaymentPreset(bcSBER.ExpressionPreset.DataObject).RequiredBankingDetails.Payee.PersonalAcc := '<Qrsber.PersonalAcc>';
{Устанавливаем дополнительные реквизиты}
TfrxSberPaymentPreset(bcSBER.ExpressionPreset.DataObject).AdditionalBankingDetails.PayerINN := '<Qrsber.PayerINN>';
TfrxSberPaymentPreset(bcSBER.ExpressionPreset.DataObject).AdditionalBankingDetails.Purpose := '<Qrsber.Purpose>';
TfrxSberPaymentPreset(bcSBER.ExpressionPreset.DataObject).AdditionalBankingDetails.Sum := '<Qrsber.Sum>';
frxReport1.ShowReport();
end;

Теперь и в FastReport VCL можно без труда создать квитанцию со СБЕР QR-код, что является еще одним поводом для апгрейда или обновления на FR VCL 6.8