Печать 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С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    17283    dimanich70    81    

135

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    3843    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    14388    atdonya    23    

56

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    5245    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    13658    YA_418728146    7    

165

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3318    52    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18105    160    sapervodichka    112    

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

система выводит сообщение "Значение не является значением объектного типа".
При отладке обнаружил что значение Макет.Рисунки.Штрихкод.Объект - Неопределено.
При этом в 8.2 всё корректно работает.
Подскажите, пожалуйста, в чём шибка?
16. Гобсек 23 09.07.17 15:47 Сейчас в теме
(1)Столкнулся с аналогичной проблемой. Если запустить толстый клиент (управляемое приложение), то печатная форма формируется.
При этом кодировка UTF-8 отображается корректно, а WIN1251 - нет. Та же проблема, что и у фирменной компоненты КомпонентаПечатиQRКода от 1С
Но КомпонентаПечатиQRКода от 1С хотя бы не подвисает.
18. Гобсек 23 10.07.17 06:48 Сейчас в теме
(16) + Добавил строку
ОбластьШапка1.Рисунки.КартинкаШК.Объект.code_page = 1251;
И все заработало!
Сайт http://sbqr.ru/validator/index.html признал QR код корректным.
Если работа идет на управляемых формах, то в настройках запуска к конфигурации указываем - "Толстый клиент".
Если найду способ запустить под тонким клиентом, то отпишусь.
2. Chaotic 41 01.04.17 12:37 Сейчас в теме
С управляемыми формами по-другому... К сожалению. Какая у Вас конфигурация?
3. cdb 26 01.04.17 18:22 Сейчас в теме
Посмотрев тестовые обработки от Ocvita Barcode ActiveX для 8.2 ставил опыты на самонаписанной конфигурации под 8.3.
Обработки под 8.2 написаны без привязки к какой либо конфигурации.
4. Chaotic 41 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 201 20.06.17 17:58 Сейчас в теме
А чем, собственно, не устраивает эта штука:

My Webpage

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

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

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

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

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


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

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

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

В любых сервисах проверки штрихкода все проходит успешно.
21. madonov 257 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 41 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 41 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 1729 22.10.19 18:29 Сейчас в теме
(0)спасибо! разобрались сами - просветили других!
Оставьте свое сообщение