Печать QR кодов для 1С:Бухгалтерия 2.0 для платежек Сбербанка

30.03.17

Разработка - Универсальные функции

Печать QR кодов оффлайн в 1С:Бухгалтерия 2.0 с помощью бесплатной ActiveX компоненты для платежек Сбербанка

Понадобилось выводить на печатную форму QR-код в 1С:Бухгалтерии 2.0 для квитанций, чтобы люди могли в Сбербанке эти квитанции оплачивать.

В Сбербанке формат строки, закодированной в QR, взяли не с потолка, формат данной строки регламентируется "Стандартами финансовых операций" — ГОСТ Р 56042-2014. Почитать можно тут.

Но, к моему величайшему сожалению, я не нашел простого и удобного способа это реализовать.

Гугление дало следующие варианты:

  1. с помощью компоненты "1С Печать Штрих-кодов" QR коды выводить нельзя, как и с помощью ActiveBarcode v3.5 - к тому же она не free :(
  2. есть вариант (подсказан на infostart) с помощью API товарищей из Google, но: во-первых, зачем себе создавать зависимость от интернета для печати штрих-кодов, а, во-вторых, некрасиво это как-то. Я уж молчу про то, что в один прекрасный момент Google может изменить свой API. Плюс нужно морочиться с сохранением картинки в файл, что мне тоже не нравится;
  3. есть платные варианты. Не хочу;
  4. есть предложения поднять свой веб-сервер. Веб-сервер, для печати штрихкодов? Неужели, настолько всё сложно?
  5. использовать библиотеку zint для генерации файла с QR кодом. Не совсем удобно, хотя как вариант;
  6. наконец-то, нашел Ocvita Barcode ActiveX!!! Справедливости рад, стоит сказать о том, что эта компонента создана на основе библиотеки zint, но ребята вне всякого сомнения молодцы!

Скачиваем, устанавливаем.

Вставляем в макет "Таблица" - "Рисунки" - "Вставить объект" - "Элемент управления" - "Ocvita Barcode". Называем этот объект именем Штрихкод.

Процедура Печать()
    Т = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    Макет.Рисунки.Штрихкод.Объект.symbology = 58; // тип = QR
    Макет.Рисунки.Штрихкод.Объект.barcode = ВернутьСтрокуДляКодирования(); 
    Т.Вывести(Макет); 
    Т.ТолькоПросмотр = Истина; 
    Т.Показать();

КонецПроцедуры

// Опишем вспомогательную функцию для преобразования в UTF8

Функция UTF8(Ст)
    НоваяСт = "";
    Для i=1 по СтрДлина(Ст) Цикл
        Символ = Сред(Ст,i,1);
        КодСимвола = КодСимвола(Символ);
        Если (КодСимвола > 191) и (КодСимвола < 224) Тогда// А - Я
 
            НоваяСт = НоваяСт + Символ(208)+Символ(КодСимвола-48);
        ИначеЕсли (КодСимвола > 223) и (КодСимвола < 240) Тогда// а - п
 
            НоваяСт = НоваяСт + Символ(208)+Символ(КодСимвола-48);
        ИначеЕсли (КодСимвола > 239) и (КодСимвола < 256) Тогда// р - я
 
            НоваяСт = НоваяСт + Символ(209)+Символ(КодСимвола-112);
        ИначеЕсли (Символ = "ё") или (Символ = "Ё") Тогда
            НоваяСт = НоваяСт + Символ(208)+Символ(КодСимвола-39);
        ИначеЕсли (Символ = "№") Тогда
            НоваяСт = НоваяСт + Символ(226)+Символ(132)+Символ(150);
        Иначе
            НоваяСт = НоваяСт + Символ;
        КонецЕсли;
    КонецЦикла;
    Возврат НоваяСт;
КонецФункции

//Текст для кодирования выглядит примерно так

Функция ВернутьСтрокуДляКодирования()
	SFormat = "ST";
	CodeVersion = "0001";
	Символ_ = "|";
	
	CodePage = 2; //UTF
	
	Name = "Name=" + НашаФирма;
	PersonalAcc ="PersonalAcc=" + НашРасчетныйСчет;
	BankName = "BankName=" + НазваниеНашегоБанка;
	BIC = "BIC=" + БИК;
	CorrespAcc = "CorrespAcc=" + КорСчет;
	Sum = "Sum=" + СуммаВКопейках; //в копейках, т.е не 100,52, а 10052
	PayeeINN = "PayeeINN=" + НашИНН;
	LastName = "LastName=" + ФамилияПлательшика;
	FirstName = "FirstName=" + ИмяПлательщика;
	MiddleName = "MiddleName=" + ОтчествоПлательщика;
	payerAddress ="payerAddress=" + АдресПлательщика;
	PersAcc = "PersAcc="+ НомерДоговораСПлательщиком;
	PaymPeriod = "PaymPeriod="+РасчПериод // расчетный период вида ММГГ;
	
	Рез = SFormat + CodeVersion + CodePage + Символ_ +
		  Name + Символ_ +
		  PersonalAcc + Символ_ +
		  BankName + Символ_ +
		  BIC + Символ_ +
		  CorrespAcc + Символ_ +
		  Sum + Символ_ +
		  PayeeINN + Символ_ +
		  LastName +  Символ_ +
		  FirstName +  Символ_ +
		  MiddleName +  Символ_ +
		  payerAddress +  Символ_ +
		  PersAcc +  Символ_ +
		  PaymPeriod;

	
	Возврат UTF8(Рез);
КонецФункции

Кстати, можно будет проверить QR-код для квитанции Сбербанка - правильно или нет он сгенерирован - с помощью сайта http://sbqr.ru/validator/index.html

P.S.: Если кто-то знает способ проще - прошу в комменты!

Вступайте в нашу телеграмм-группу Инфостарт

QR Сбербанк Бухгалтерия 2.0

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5393    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46272    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6831    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57322    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8597    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22750    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cdb 26 01.04.17 09:19 Сейчас в теме
Пытаюсь использовать Ocvita Barcode ActiveX на платформе 8.3.8.2054 на управляемых формах.
Вставляю элемент управления ActiveX в Макет, он корректно отображается, выставляю Вид кода 58 (QR Code).
При попытке Задать текст
ТабДок = Новый ТабличныйДокумент;
	Макет = ПолучитьМакет("Макет");
	Макет.Рисунки.Штрихкод.Объект.barcode = "Тест передачи информации через 2D штрих код";
	ТабДок.Вывести(Макет);

система выводит сообщение "Значение не является значением объектного типа".
При отладке обнаружил что значение Макет.Рисунки.Штрихкод.Объект - Неопределено.
При этом в 8.2 всё корректно работает.
Подскажите, пожалуйста, в чём шибка?
16. Гобсек 24 09.07.17 15:47 Сейчас в теме
(1)Столкнулся с аналогичной проблемой. Если запустить толстый клиент (управляемое приложение), то печатная форма формируется.
При этом кодировка UTF-8 отображается корректно, а WIN1251 - нет. Та же проблема, что и у фирменной компоненты КомпонентаПечатиQRКода от 1С
Но КомпонентаПечатиQRКода от 1С хотя бы не подвисает.
18. Гобсек 24 10.07.17 06:48 Сейчас в теме
(16) + Добавил строку
ОбластьШапка1.Рисунки.КартинкаШК.Объект.code_page = 1251;
И все заработало!
Сайт http://sbqr.ru/validator/index.html признал QR код корректным.
Если работа идет на управляемых формах, то в настройках запуска к конфигурации указываем - "Толстый клиент".
Если найду способ запустить под тонким клиентом, то отпишусь.
2. Chaotic 42 01.04.17 12:37 Сейчас в теме
С управляемыми формами по-другому... К сожалению. Какая у Вас конфигурация?
3. cdb 26 01.04.17 18:22 Сейчас в теме
Посмотрев тестовые обработки от Ocvita Barcode ActiveX для 8.2 ставил опыты на самонаписанной конфигурации под 8.3.
Обработки под 8.2 написаны без привязки к какой либо конфигурации.
4. Chaotic 42 01.04.17 22:12 Сейчас в теме
Если не ошибаюсь, в новых версиях на УФ многие ВК перестали работать, я с этим столкнулся, когда писать вывод ШК для Розницы 2
5. morohon 12.04.17 13:18 Сейчас в теме
Столкнулся с тем, что техподдержка сбербанка говорит что штрихкод валидный, а терминалы видят кракозябру.
Также проблема была в том, что сбербанк требовал служебные символы в виде ST00011, а 1С (бухгалтерия 2.0) выдавала только ST00012. Пришлось перебирать строку.

Даже на партнерке писал про эту проблему.
Почему-то банкоматы все равно как-то косячно воспринимают qr, хотя обычным сканером штрихкодов (приложение на планшете) все прекрасно считывается.
7. _Z1 38 12.04.17 21:15 Сейчас в теме
(5) Скажите у Вас получилось победить сберовские терминалы чтобы они воспринимали qr код ?
9. morohon 13.04.17 11:27 Сейчас в теме
(7) К сожалению пока нет. Общаюсь с техподдержкой сбербанка.
10. morohon 18.04.17 09:23 Сейчас в теме
(7) Отправил им в utf кодировке. Стандартный вывод того, что дает метод УправлениеПечатью.ФорматнаяСтрокаУФЭБС . Сбербанк долго упирался, что они принимают только в win1251. Но когда я таки отправил клиента к терминалу с qr-кодом - все прочиталось прекрасно
11. _Z1 38 19.04.17 23:10 Сейчас в теме
(10) Скажите а Вы не пробовали такой вариант
если qr для оплаты передать в виде файла на смарфон
открыть на смартфоне этот фай
Будет ли сканер терминалаСбербанка распознавать
qr код с экрана смартфона ?
12. _Z1 38 28.04.17 10:20 Сейчас в теме
(11) Сам себе отвечаю да работает

Вариант 1
т.е. можно или файл со штрихкодом отправить по e-mail
на смартфон. Далее открыть в смартфоне картинку со штрихкодом и терминал успешно распознает qr код

Вариант 2
т.е. можно с экрана компьютера сфотографировать qr код
передать картинку на нужный смартфон
Далее открыть в смартфоне картинку со штрихкодом и терминал успешно распознает qr код


Вариант 1 более предпочтительный так как меньше искажений информации.
6. morohon 12.04.17 13:24 Сейчас в теме
И да, для получения строки можно использовать метод: УправлениеПечатью.ФорматнаяСтрокаУФЭБС
И потом просто перебрать начальные 7 символов с указанием кодировки и перевести в utf
8. _Z1 38 12.04.17 21:21 Сейчас в теме
Написал на v8 - работает.

И еще вопрос как все то же самое сделать на v77.
Английский текст все ок.

Вместо русского текста появляются
крыкообразки.
13. _Z1 38 11.05.17 14:08 Сейчас в теме
.....а может кто знает есть ли какая возможность по чеку
сбербанк онлайн ( но до прихода денег на счет )
определить что чек подлиный и что платеж от ЧЛ был произведен ?
14. Stim087 7 20.06.17 17:50 Сейчас в теме
Работает только с английским текстом, возможно сделать на кириллице?
15. Infector 192 20.06.17 17:58 Сейчас в теме
А чем, собственно, не устраивает эта штука:

My Webpage

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

Прошу прощения, невнимательно прочитал пост. Ссылка касается платежных поручений, а не абонентских квитанций.
17. Xershi 1531 09.07.17 15:52 Сейчас в теме
Из перечисленных методов только про гугл читал, как вы гуглили http://infostart.ru/public/510646/ загадка)
19. madonov 267 02.08.17 03:15 Сейчас в теме
Как муторно всё =((.

Выбрал UTF-8, официальный сервис сбербанка читает правильно, ошибок нет. Но банкомат не распознает.

Попробовал 1251 (ST00011; Объект.code_page = 1251; ) - оф сервис сбера распознает только числовые параметры, строковые кракозябрами. Расшифровал кракозябры декодером от Лебедева, декодер опознал исходную кодировку как 1252.
Пробовал принудительно конвертнуть в 1251:
Текст = Новый ТекстовыйДокумент;        
Текст.УстановитьТипФайла("windows-1251");   
Текст.УстановитьТекст(Рез);
Возврат Текст.ПолучитьТекст();

Никакого результата.


Что примечательно, приложение сбербанк-онлайн в обоих случаях распознает ШК неправильно - не заполняет ФИО, адрес и назначение платежа, хотя эти реквизиты ШК содержит.
20. madonov 267 02.08.17 12:33 Сейчас в теме
Терминал упорно пишет "по заданным реквизитам не найден поставщик услуг".

Странно это. Получается, что сами реквизиты он из штрихкода считывает...
А какого поставщика услуг он пытается найти? Это ведь оплата по произвольным реквизитам...

При этом мобильное приложение Сбера считывает все кроме ФИО, адреса и назначения платежа.

В любых сервисах проверки штрихкода все проходит успешно.
21. madonov 267 03.08.17 06:35 Сейчас в теме
А ларчик просто открывался.
Платежи по произвольным реквизитам в терминале оплаты разрешены только "авторизованным" пользователям. Пока карту не вставишь - квитанцию с произвольными реквизитами не оплатить. Вставил карту - все заработало.

Правда "ФИО, Адрес, Назначение платежа" - все равно заставляет заполнять руками. Похоже, что сбер убрал автозаполнение этих полей намерено.
22. MakarkinPRO 30.10.17 21:08 Сейчас в теме
а в каком онлайн сервисе, можно ручками создать платежку для сбербанка?
23. Valery_t 49 11.02.18 07:06 Сейчас в теме
Здравствуйте.
Использую Ocvita Barcode ActiveX под Server 2012. Регистрация проходит успешно. В 1С (платформа 8.3.10.2580, НЕ управляемые формы) при добавлении на макет рисунка "Элемент управления" - "Ocvita Barcode" - присутствует. Но в свойствах созданного рисунка нет строки Ocvita Barcode, и в строке Макет.Рисунки.QRКод.Объект.symbology = 58 выдает ошибку "Значение не является значением объектного типа". Если кто встречал подобную проблему, помогите пожалуйста.
Прикрепленные файлы:
24. Chaotic 42 11.02.18 20:19 Сейчас в теме
а при нажатии на Properties что открывается?
Насколько я вижу по рисунку, у Вас уже QR код установлен
25. Valery_t 49 16.02.18 06:30 Сейчас в теме
Нет. На рисунке как раз то, что я ожидал бы увидеть. Что-то в Server "недоустановлено".
26. user948046 05.04.18 16:42 Сейчас в теме
1С Бухгалтерия 3.0 умеет делать QR-Code. Можно просто перетащить макет с генерацией QR-Code в Бухгалтерию 2.0 маленько переписать
функции и все должно работать. Ищем в конфигурации Бухгалтерии 3.0 по ключевому слову Qr находим для себя все примеры и делаем свой вариант. И не нужны дополнительные компоненты.
27. Valery_t 49 09.04.18 07:21 Сейчас в теме
(26) Спасибо. Буду попробовать.
28. ira_p 18.04.18 12:33 Сейчас в теме
Добрый день! подскажите, пожалуйста, будут ли считывать qr код другие банки такие как Тинькофф, Альфа и т.д ?
29. Chaotic 42 25.04.18 15:16 Сейчас в теме
(28) добрый! вряд ли. по идее, чтобы оплачивать через Сбербанк, например, нужно заключить со Сбербанком договор. По поводу остальных банков - лучше у них уточнять
30. HIVvich 01.06.18 09:18 Сейчас в теме
Напишу сюда, может кто подскажет. Самописная конфа (8.3.8, управл.формы), на документах печать QR-кодов с помощью этой утилиты, ТОЛСТЫЙ клиент, dll зарегистрирована успешно и лежит там где надо. Конфа у меня - код распечатывается, выложили на сервер - пишет, что объект не обнаружен и код не печатается. На сервере dll зарегистрировала успешно, под толстым клиентом, не работает. Ну как это побороть?
31. HIVvich 01.06.18 13:50 Сейчас в теме
Напишу, может кому пригодиться. Решение своей проблемы нашла только в этом, скопировала блоки из Розницы, модуль: МенеджерОборудованияСерверПовтИсп, в нем нужны только 2 функции: Функция ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер) Экспорт, Функция КомпонентаФормированияQRКода(Отказ).
В модуле документа:
КурТекст = "Type=2" + ";" + "Number=" + НомерДокумента + ";" + "Date=" + ДатаДокумента;;
		
		ДанныеКода = МенеджерОборудованияСерверПовтИсп.ДанныеQRКода(КурТекст, 0, 120);
		КартинкаQRКода = Новый Картинка(ДанныеКода);
   		ОбластьМакета.Рисунки.Штрихкод.Картинка = КартинкаQRКода;

		ТабличныйДокумент.Вывести(ОбластьМакета);

В макете разместила обычную картинку с именем Штрихкод.
MAIKL1C; user635629_exter; Емельянов Алексей; ZeroDM; +4 Ответить
33. ZeroDM 14 21.03.19 10:43 Сейчас в теме
(31) HIVvich Спасибо за идею, свою задачу я решил. Правдо в ERP эти процедуры лежать в общем модуле УправлениеПечатью, но суть таже. В целом использование типовых примеров считаю более эффективным, чем написанных "на коленках".
Емельянов Алексей; +1 Ответить
32. Zlak 17.07.18 14:38 Сейчас в теме
Скажите есть решение - в 1с отсканировать qr код и на его основе создать платежку?
34. RustIG 1931 22.10.19 18:29 Сейчас в теме
(0)спасибо! разобрались сами - просветили других!
Для отправки сообщения требуется регистрация/авторизация