Весь цикл приемки и отгрузки проходит следующие этапы:
- Создание ТТН Егаис в 1С
- Выгрузка ТТН в ТСД
- Сканирование акцизных марок в документ (и вот тут возникают трудности)
- Отправка данных в 1С.
EGAIS Scan, установленный на ТСД, обладает следующими достоинствами:
- Информирование об ошибках наборщика в процессе сканирования марок
- Контроль остатков марок
- Сканирование АМ, коробов, паллет
- Есть дорогие решения, которые не удовлетворяют полностью запросов пользователей и сложны в интеграции с 1С. За счет простоты EGAIS Scan достигнута надежность работы приложения.
- Связь с 1С без сторонних программ, посредством http-сервиса.
- Простота настройки программы. На ТСД достаточно установить приложение. Вся настройка ведется на стороне 1С.
- Сканирование как новых, так и старых акцизных марок.
Требования к ТСД минимальны, а именно наличие 2d сканера и Android версии 4.0 и выше. Протестировано на модельном ряде Urovo, но возможна работа и на других моделях.
Ну и немного о минусах… Требуется доработка 1С в части настройки http-сервиса.
Описание формата обмена EGAIS Scan
1. В 1с необходимо описать всего 3 HTTP - метода:
/getdocument/* - запрос списка документов. Метод запроса GET без параметров. Метод должен возвращать список документов в формате JSON
/getMarkInfo/* - запрос информации по марке, коробке, паллете. Метод запроса GET. Метод должен возвращать информацию по марке в формате JSON
/setmark/ - установка марок в документ. Метод запроса POST. Метод принимает JSON с марками
2. Настройка HTTP сервера (пример можно посмотреть тут //infostart.ru/public/842751/)
Упрощенный вариант метода getMarkInfo
Функция GetMarkInfoSend(Запрос)
СтрНомер = Запрос.ПараметрыЗапроса.Получить("number");
СтрМарка = Запрос.ПараметрыЗапроса.Получить("mark");
КодТовара = Запрос.ПараметрыЗапроса.Получить("tovarId");
ДокТТН = Документы.ТТН.НайтиПоНомеру(СтрНомер, ТекущаяДата());
Если ДокТТН.Пустая() Тогда
Ответ = Новый HTTPСервисОтвет(404);
Ответ.УстановитьТелоИзСтроки("Не найден документ №" + СтрНомер);
Возврат Ответ;
КонецЕсли;
СпрТовар = Справочники.НоменклатураЕГАИС.НайтиПоКоду(КодТовара);
Если СпрТовар.Пустая() Тогда
Ответ = Новый HTTPСервисОтвет(404);
Ответ.УстановитьТелоИзСтроки("Не найдена номенклатура Егаис с кодом " + КодТовара);
Возврат Ответ;
КонецЕсли;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
Если (СтрДлина(СтрМарка) = 150) или (СтрДлина(СтрМарка) = 68) Тогда
Марка = Справочники.МаркиЕГАИС.НайтиПоНаименованию(СтрМарка);
Если Марка.Пустая() Тогда
Ответ = Новый HTTPСервисОтвет(404);
Ответ.УстановитьТелоИзСтроки("Не найдена данная марка");
Возврат Ответ;
КонецЕсли;
//Проверка остатка по марке.
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("Stamp");
ЗаписьJSON.ЗаписатьЗначение(Марка.Наименование);
ЗаписьJSON.ЗаписатьИмяСвойства("Count");
ЗаписьJSON.ЗаписатьЗначение("1");
ЗаписьJSON.ЗаписатьКонецОбъекта();
Иначе
//Проверка остатков коробок паллет.
КонецЕсли;
ТекстОтвета = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-type", "application/json; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(ТекстОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
КонецФункции
3. Публикуем HTTP сервис
4. В настройках приложения указываем адрес HTTP сервиса и учетные данные 1с на подключение.
5. Тестируем работу приложения.
Мобильное приложение распространяется через Google Play Market.
В ограниченной версии доступно сканирование марок через REST API для тестирования интеграции с учетной системой.
Готов обсудить вопросы по развитию и доработкам. Комментарии приветствуются.