Мобильное приложение 1С: Список покупок и анализ расходов

06.06.19

Функциональные - Бюджетирование и планирование

В публикации рассмотрено небольшое домашнее мобильное приложение для составления списка покупок и анализа расходов. В приложении реализованы: работа с штрихкодами (сканирование встроенной камерой), поиск наименования товара по штрихкоду из интернета, загрузка чеков из ФНС по QR-коду, вывод QR-кода ранее загруженного чека и др.

Скачать файлы

Наименование Файл Версия Размер
Мобильное приложение
.cf 477,56Kb
23
.cf 477,56Kb 23 Скачать
Центральная база
.cf 475,87Kb
22
.cf 475,87Kb 22 Скачать
Мобильное приложение для Android
.apk 35,60Mb
9
.apk 35,60Mb 9 Скачать

В мобильном приложении всего один документ Заказ, зато реализованы следующие механизмы:
- обмен с центральной базой (подробно описано здесь http://its.1c.ru/db/pubintromobile);
- отправка PUSH-уведомлений (подробно описано здесь http://its.1c.ru/db/pubintromobile);
- сканирование штрихкодов встроенной камерой;
- загрузка наименования товара по штрихкоду из интернета при создании товара (описание сервиса здесь https://barcodes.olegon.ru/);
- получение чека из ФНС по QR-коду (API здесь https://habr.com/ru/post/358966/);
- вывод QR-кода уже загруженных чеков для возможности получить чек на другом устройстве.

Кому интересно, выкладываю куски кода некоторых механизмов.

 

Сканирование штрихкодов встроенной камерой смартфона (объект СредстваМультимедиа)

Модуль формы документа или справочника, где нужно сканировать штрихкод:

// Кнопка Сканировать на форме
&НаКлиенте
Процедура Сканировать(Команда)
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("Форма", ЭтотОбъект);
	ДополнительныеПараметры.Вставить("ИмяОбработчикаЗакрытияСканирования", "ОбработкаЗакрытияСканирования");
	ПодключаемоеОборудованиеКлиент.ПолучитьШтрихкод(ДополнительныеПараметры);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаЗакрытияСканирования(ДополнительныеПараметры) Экспорт
	Возврат;
КонецПроцедуры

// Здесь обрабатываем полученный штрихкод, QR-код и т.п.
&НаКлиенте
Процедура ОбработатьПолученныйШтрихкод(ПолученныйШтрихкод, Параметры) Экспорт
	Сообщить(ПолученныйШтрихкод);
КонецПроцедуры

Общий модуль ПодключаемоеОборудованиеКлиент:

Процедура ПолучитьШтрихкод(ДополнительныеПараметры) Экспорт
	ЗаголовокСканирования = НСтр("ru = 'Считайте штрихкод'");
	Если ДополнительныеПараметры.Свойство("ЗаголовокСканирования") Тогда
		ЗаголовокСканирования = ДополнительныеПараметры.ЗаголовокСканирования;
	КонецЕсли;
	#Если МобильноеПриложениеКлиент Тогда
		ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ПодключаемоеОборудованиеКлиент, ДополнительныеПараметры);
		ОбработчикЗакрытияСканирования = Новый ОписаниеОповещения(ДополнительныеПараметры.ИмяОбработчикаЗакрытияСканирования, 
			ДополнительныеПараметры.Форма, ДополнительныеПараметры);
		СредстваМультимедиа.ПоказатьСканированиеШтрихКодов(ЗаголовокСканирования, ОбработчикСканирования, ОбработчикЗакрытияСканирования);
	#КонецЕсли
КонецПроцедуры

Процедура ОбработкаСканирования(Штрихкод, Результат, Сообщение, ДополнительныеПараметры) Экспорт
	Если НЕ ДополнительныеПараметры.Свойство("ПотоковоеСканирование") Тогда
	#Если МобильноеПриложениеКлиент Тогда
		СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов();
	#КонецЕсли
	КонецЕсли;
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ДополнительныеПараметры.Форма.ОбработатьПолученныйШтрихкод(Штрихкод, ДополнительныеПараметры);
КонецПроцедуры

 

Загрузка наименования товара по штрихкоду из интернета

Поиск наименований товара по штрихкоду реализован через сервис https://barcodes.olegon.ru/. Сервис возвращает массив имен, я беру первое имя ТекМассив.names[0]. Модуль формы элемента справочника товаров:

&НаКлиенте
Процедура ОбработатьПолученныйШтрихкод(ПолученныйШтрихкод, Параметры) Экспорт
	Объект.Штрихкод = СокрЛП(ПолученныйШтрихкод);
	ssl4 = Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено );
	HTTPСоединение = Новый HTTPСоединение("barcodes.olegon.ru", 443,,,,,ssl4,); 
	HTTPЗапрос = Новый HTTPЗапрос("/api/card/name/" + Объект.Штрихкод + "/B644542640852064273024635143606"); 
	Результат =  HTTPСоединение.Получить(HTTPЗапрос);
	Если Результат.КодСостояния = 200 Тогда 
		СтрокаРезультат = Результат.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(СтрокаРезультат);
		ТекМассив = ПрочитатьJSON(ЧтениеJSON);
		ЧтениеJSON.Закрыть();
		Если СтрДлина(Объект.Наименование) = 0 Тогда
			Объект.Наименование = ТекМассив.names[0];
		КонецЕсли;	
	Иначе
		Сообщить("Статус ответа:" + Результат.КодСостояния);
	КонецЕсли;
КонецПроцедуры

 

Получение чека из ФНС по QR-коду

QR-код чека является строкой вида t=20190602T2026&s=1854.00&fn=9282000100073930&i=74555&fp=3968601409&n=1, содержащей дату, сумму, номер фискального накопителя, номер чека, фискальный признак и вид операции. Используя эти данные можно получить сам чек из ФНС. Для получения чека в заголовке HTTP-запроса необходимо указать номер телефона и пароль, которые можно получить при регистрации в мобильном приложении Проверка кассового чека https://play.google.com/store/apps/details?id=ru.fns.billchecker&hl=ru.

&НаКлиенте
Процедура ЗагрузитьЧек(Команда)
	ВидЧека = "1";
	ДатаВремя = "20190602T1150";
	Сумма = "299.00";
	ФН = "8710000101180608";
	ФД = "98325";
	ФП = "309098793";
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Authorization", "Basic " + ЗашифроватьBase64("+79637413216:702187", "US-ASCII"));
	Заголовки.Вставить("Device-Id", "Android");
	Заголовки.Вставить("Device-OS", "Android");
	HTTPСоединение = Новый HTTPСоединение("proverkacheka.nalog.ru", 8888);
	HTTPЗапрос = Новый HTTPЗапрос("/v1/ofds/*/inns/*/fss/" + СокрЛП(ФН) + "/operations/" + СокрЛП(ВидЧека) + "/tickets/" + СокрЛП(ФД) + "?fiscalSign=" + СокрЛП(ФП) + "&date=" + СокрЛП(ДатаВремя) + "&sum=" + СокрЛП(СтрЗаменить(Сумма,".","")), Заголовки); 
	Ответ = HTTPСоединение.Получить(HTTPЗапрос);   
	Если Ответ.КодСостояния = 204 Тогда
		//Сообщить("Чек корректен");
	    ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
		HTTPЗапрос = Новый HTTPЗапрос("/v1/inns/*/kkts/*/fss/" + СокрЛП(ФН) + "/tickets/" + СокрЛП(ФД) + "?fiscalSign=" + СокрЛП(ФП) + "&sendToEmail=no", Заголовки); 
		Ответ = HTTPСоединение.Получить(HTTPЗапрос, ИмяВременногоФайла);
		Если Ответ.КодСостояния = 200 Тогда
			//Сообщить("Чек получен");
			Форма = ПолучитьФорму("Документ.Заказ.Форма.ФормаДокумента");
			ДанныеФормы = Форма.Объект;
			ОбработатьФайлОтвета(ИмяВременногоФайла, ДанныеФормы);
			КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); 
			Форма.Открыть();
		Иначе
			Сообщить("Получение чека: " + Ответ.КодСостояния);
		КонецЕсли;
	Иначе
		Сообщить("Проверка корректности: " + Ответ.КодСостояния);
	КонецЕсли; 
КонецПроцедуры

&НаСервере
Функция ЗашифроватьBase64(Строка, Кодировка) Экспорт
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
	ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, Кодировка);
    ЗаписьТекста.Записать(Строка);
    ЗаписьТекста.Закрыть();
    Двоичные = Новый ДвоичныеДанные(ИмяВременногоФайла);
    Результат = Base64Строка(Двоичные);
	Если Лев(Результат, 4) = "77u/" Тогда
		Результат = Сред(Результат, 5);
	КонецЕсли; 
	Результат = СтрЗаменить(Результат, Символы.ПС, "");
    УдалитьФайлы(ИмяВременногоФайла);
    Возврат Результат;
КонецФункции

&НаСервере
Процедура ОбработатьФайлОтвета(ИмяФайла, ДанныеФормы)
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8");
	Результат = ПрочитатьJSON(ЧтениеJSON,,"dateTime");
	Организация = Результат.document.receipt.user;
	ИНН = Результат.document.receipt.userInn;
	СтрокиТовары = Результат.document.receipt.items;
		Для каждого СтрокаТовар Из СтрокиТовары Цикл
			Сообщить(СтрокаТовар.name);
			Сообщить(СтрокаТовар.price / 100);
			Сообщить(СтрокаТовар.quantity);
			Сообщить(СтрокаТовар.sum / 100);
		КонецЦикла; 
КонецПроцедуры

 

Вывод QR-кода

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

&НаСервере
Функция ПолучитьКартинкуQR(QRКод)
	Макет = ПолучитьОбщийМакет("КомпонентаПечатиQRКода");
	Адрес = ПоместитьВоВременноеХранилище(Макет);
	
	КодВозврата = ПодключитьВнешнююКомпоненту(Адрес, "QRCodeExtensionSymbolicName");
	Если Не КодВозврата Тогда
		Сообщить("Проблема подключения внешней компоненты!");
	КонецЕсли;
	ГенераторQRКода = Новый("AddIn.QRCodeExtensionSymbolicName.QRCodeExtension");	

	ДанныеQRКода = ГенераторQRКода.GenerateQRCode(QRКод, 1, 190);
	
	Если ДанныеQRКода = Неопределено Тогда
		КартинкаQRКода = Новый Картинка();
	Иначе
		КартинкаQRКода = Новый Картинка(ДанныеQRКода);
	КонецЕсли;
	
	Макет = ПолучитьОбщийМакет("Макет");
	Макет.Рисунки.ШК.Картинка = КартинкаQRКода;
	ТабДок = Новый ТабличныйДокумент;
	ТабДок.Вывести(Макет);
	Возврат ТабДок;	
КонецФункции

 

О мобильном приложении

Центральную базу необходимо опубликовать на web-сервере, например http://192.168.103.28/BuyCentr. В центральной базе заполнить узлы плана обмена Мобильные устройства (предопределенный Ц - Центральный, второй К - Константин, третий Н - Николай и т.п.) и константу Ключ доступа отправителя PUSH, например PUSH_SRV_API_KEY_F55C7685_602D_4F06_BD4B_727CFBFAA85F (можно получить здесь https://pushnotifications.1c.com/). Также через консоль заданий можно настроить расписание регламентного задания, которое оповещает сколько денег потрачено сегодня.

Мобильное приложение необходимо собрать в Сборщике приложений, запустить на телефоне, заполнить узлы плана обмена (предопределенный К - Константин, второй  Ц - Центр), константу Адрес центральной базы, например http://192.168.103.28/BuyCentr, константу Код центральной базы - Ц, Номер проекта мобильного приложения, например 797785657074 (можно получить здесь https://pushnotifications.1c.com/), Номер и пароль для проверки чеков, например +79637413216 и 702187 (можно получить зарегистрировавшись в мобильном приложении ФНС https://play.google.com/store/apps/details?id=ru.fns.billchecker&hl=ru).

Проверялось на платформе 1С версии 8.3.14.1630 и мобильной платформе 1С версии 8.3.14.53.

мобильное приложение android список покупок анализ расходов сканирование штрихкодов встроенной камерой загрузка чеков ФНС Налоговая наименование товара по штрихкоду PUSH

См. также

SALE! 20%

Автоматический заказ поставщику в 1С: загрузка прайсов и анализ цен поставщиков для УТ 10.3, УТ 11, КА2, УНФ, УПП, ERP, Розница 2

Бюджетирование и планирование Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Платформа 1С v7.7 Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Система управления запасами для 1С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом.

28500 22800 руб.

21.04.2017    90212    105    39    

191

ФинОфис - контроль и управление финансами

Бюджетирование и планирование Управляемые формы Конфигурации 1cv8 Россия Управленческий учет Платные (руб)

«ФинОфис» - программный продукт для автоматизации бюджетирования, казначейства, консолидации данных и настройки бизнес-процессов в 1С.

20000 руб.

20.12.2017    49539    14    7    

85

"Штрихкод-информер" - мобильный ТСД и прайс-чекер в смартфоне

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

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн. Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

2880 руб.

03.12.2018    54637    137    102    

161

ФинОфис (модуль Казначей)

Бюджетирование и планирование Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

25000 руб.

10.04.2020    21190    10    12    

35

ФинОфис (модуль Табула)

Бюджетирование и планирование Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Табула – это табличный редактор с формулами, разработанный на платформе 1С. Табула обеспечивает простоту создания таблиц, ранее доступную лишь в Excel.

25000 руб.

26.02.2019    97023    85    106    

217

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    33320    80    157    

174

ФинОфис (модуль Консолидатор)

Бюджетирование и планирование Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

25000 руб.

19.11.2019    25357    16    2    

38
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. capitan 2466 06.06.19 17:37 Сейчас в теме
2. coollerinc 185 11.06.19 21:52 Сейчас в теме
3. coollerinc 185 12.06.19 19:32 Сейчас в теме
Частенько веб сервис валится в 202 ошибку, да и сканер на моем телефоне как то сложно распознает на реальных мятых чеках штрихкод. Даже поэксперементировал с стророниим сканером, чуть лучше, но все равно долго.
4. user_gea 14.06.19 11:28 Сейчас в теме
Спасибо за фрагменты кода! Взяты на заметку !
5. Derushev 10 10.04.20 13:52 Сейчас в теме
Спасибо! Но пуши не доходят. Вываливается ошибка: gcm has been deactivated and remove from google api
UPD: Простите, увидел. https://forum.infostart.ru/forum92/topic223641/
6. 1cspec 116 14.02.21 14:55 Сейчас в теме
А сервис "Загрузка наименования товара по штрихкоду из интернета https://barcodes.olegon.ru/" больше не работает?
Оставьте свое сообщение