На рассмотрении

Как передать номенклатуру без 1С и CSV файлов на ТСД?

numelion 7 лет назад обновлен Михаил Пузырев (Разработчик) 7 лет назад 14

Допустим что нет 1С и нет возможности использовать файл Номенклатура.csv для обмена данными с сервера "Магазин 15" на ТСД и обратно. А есть инет-магазин и к примеру приходит машина на склад и с ней 100 товаров. Нужно из админки магазина передать на ТСД по WiFi список товаров, находящихся в машине для сканирования оных в целях инвентаризации. 


Как я себе это представляю: есть в локальной сети установленный сервис Mobile SMARTS или же БД Магазина 15, который работает на определенном порту, у него есть REST API или SOAP с авторизацией OAuth2 к примеру и есть набор методов для работы с ним, которые используют утилиты, предоставленные в пакете установки. И все желающие общаются с этим сервером API, выполняя стандартные задачи. 

Таким образом можно было бы передать список справочников, номенклатуру на ТСД и получить в дальнейшем с него результат инвентаризации совершенного не подходя к серверу, а работая лишь по https протоколу с ним.


Такое возможно или же есть альтернатива?

На рассмотрении

Добрый день,

Для реализации потребуется платформа Mobile SMARTS http://www.cleverence.ru/software/mobile-smarts/MS-CLIENT/ и нужно будет писать коннектор для обращения к базе товаров. Справочник разработчика http://www.cleverence.ru/devlib/comconnector_v3/index.html

Работать с СОМ из PHP да еще и из под Windows  - совсем не хорошо. Неужели сложно реализовать универсальный веб-интерфейс посредством JSON API для работы в http(s) окружении с любыми платформами и языками программирования? Стандарт COM мог бы быть универсальным и платформо-независимым, но закрепился в основном на операционных системах семейства Microsoft Windows. А подавляющее большинство веб-сервисов работает под Linux системами. 

Mobile SMART - очень хорошая задумка и крайне узкоориентированная платформа, подходящая для решения большого спектра требуемых задач, НО предоставляющая лишь один интерфейс взаимодействия с ней - весьма специфичный СОМ.

REST API в настоящее время разрабатывается, готово должно быть до конца года. Есть бета-версия, можем дать для теста.

Давайте конечно! Можете на почту моего акка прислать информацию

Некоторые методы GET для получения списков сущностей требуют какой то ключ "key" - что это такое и какое значение необходимо?

Методы 

  • GET /api/v1/Docs/SborShK
  • GET /api/v1/Docs/Postuplenie
  • GET /api/v1/Docs/Inventarizaciya

Это идентификатор документа (Document.Id):

Т.е. чтобы получить список поступлений, мне нужно указать какой то ID? 

Я же получаю список инвентаризации, поступления, зачем что то еще указывать?

И что за "relatedKey" при получении конкрентной сущности  

GET /api/v1/Docs/Inventarizaciya('{id}')?

Это swagger видимо мудрит, не дает выполнить запрос через "Try it out!" требуя параметр "key" и "relatedKey", а запрос напрямую через браузер http://abc:9006/MobileSMARTS/api/v1/Docs/Inventarizaciya прекрасно все выводит. Для удобства было хорошо бы убрать такое ограничение из swagger...

Для файлового обмена с ТСД есть утилита XlsCsv, она позволяет из папки "На терминал" загрузить файлы в формате XLS или CSV. Есть ли аналогичные команды в JSON API, которые позволят загрузить на ТСД например "Цены.csv" и "Номенклатура.csv". И как после или во время создания сущности "Поступление" добавить к ней товары?

И еще вопросы


1. как осуществлять реализацию (списание) товара под клиента?
2. Большинство документов состоит из набора записей (напр-р, инвентаризация включает в себя список товаров, числящихся по базе). каким образом операции с ними происходят? Например, этим методом GET /api/v1/Docs/Inventarizaciya('{id}') можно будет получить список товаров с количеством помимо информации по самой инвентаризации? Аналогично POST /api/v1/Docs/Inventarizaciya, предусмотрена ли отправка списка товаров. Или все это делается какими-то отдельными методами?

Новая тестовая сборка: https://www.dropbox.com/s/abe053xnfs6p69l/MobileSMARTS.msi?dl=0

Для обмена через Csv методов в API нет, для этого можно использовать Excel/Csv коннектор, см. http://www.cleverence.ru/support/31121/ (на примере Mobile SMARTS:Курьер,  использовать можно с любыми нашими продуктами). Коннектор работает под управлением сервера Mobile SMARTS и следит за изменениями файлов в папке, при наличии изменений конвертирует номенклатуру и документы.

Получение строк документа: /api/v1/Docs/Inventarizaciya('{id документа}')?$expand=declaredItems($count=true)

Для строк факт - currentItems. Выгрузка строк - POST на адрес api/v1/Docs/Zakaz('{ид документа}')/DeclaredItems, в POST передается DocumentItem. Для массовой выгрузки можно формировать batch-запросы.

Для реализации в Магазин 15 можно использовать, например, тип документа ПодборЗаказа (PodborZakaza).

>Для обмена через Csv методов в API нет


Мне и не нужен обмен через Csv, мне нужно понять как продублировать подобный обмен через методы АПИ. В частности загрузить на ТСД инвентаризацию со списком товаров через АПИ, отсканировать штрих-коды на нем и получить обратно через АПИ.

Сначала нужно выгрузить справочник номенклатуры, это можно сделать с помощью POST на адрес /MobileSMARTS/api/v1/ProductBook('<id товара>'), так выгрузится один товар, пример:

{"id":"1234","name":"Adidas","unitId":null,"unitConvertionRate":0.0,"barcode":"","basePackingId":"\u0448\u0442","marking":"79052","versionNumber":0,"classificatorIds":[],"packings":[{"name":"\u0448\u0442","selfWeight":0.0,"selfVolume":0.0,"unitsQuantity":1.0,"barcode":"4602827790520","barcodes":["4602827790520"],"id":"\u0448\u0442","marking":"","price":191.00}]}

Поля id, name, packings и др. соответствуют полям объекта Cleverence.Warehouse.Product,  price -доп. поле, заданное в конфигурацсм. http://www.cleverence.ru/devlib/comconnector_v3/index.html

Для выгрузки списка товаров POST на  /MobileSMARTS/api/v1/ProductBook

{"value":[{"id": .... },{"id":....}]}

Для выгрузки документа Инвентаризация вызовите POST /api/v1/docs('<id документа>')?$expand=declaredItems

{"id":"21","name":"Invent 21","appointment":"5fbf8cb1-99c1-4190-93a0-98bb5d08ccae","userId":"","userName":"","lastChangeDate":"2017-10-25T11:47:45.7239656+03:00","createDate":"2017-10-25T11:47:14.8960846+03:00","documentTypeName":"\u0417\u0430\u043a\u0430\u0437","modified":false,"inProcess":false,"finished":false,"warehouseId":"1","barcode":null,"priority":0,"description":null,"distributeByBarcode":false,"autoAppointed":true,"serverHosted":false,"deviceId":"","deviceName":"","deviceIP":"10.0.0.202","licenseStatus":0,"notOpenedYet":false,"adres":"\u0446\u0443\u043a\u0446\u0443\u043a\u0446\u0443\u043a\u0446\u0443\u043a","telefon1":"3333","predpSposobOplaty":"\u041d\u0430\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u0443\u0440\u044c\u0435\u0440\u0443","summaDokumenta":"1499","lift":"3333","orderID":"21","states":[],"declaredItems":[{"uid":"ab858c0e-2814-41ad-b5f2-7eb5f635a912","createdBy":"Unknown","productId":"1234","declaredQuantity":1,"currentQuantity":1,"currentQuantityWithBinding":1,"firstCellId":null,"firstStorageBarcode":null,"packingId":"\u0448\u0442","sscc":null,"registeredDate":"0001-01-01T00:00:00Z","registrationDate":"0001-01-01T00:00:00Z","index":1,"expiredDate":"0001-01-01T00:00:00Z","secondCellId":null,"secondStorageBarcode":null,"bindedLineUid":null,"productName":"\u0414\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u0422\u0430\u043f\u043e\u0447\u043a\u0438 \u041b\u044e\u0431\u0438\u043c\u044b\u0439 \u0421\u043f\u043e\u0440\u0442","productMarking":"","productBarcode":"","packingName":"\u0448\u0442","packingUnitsQuantity":1.0,"price":999,"packing":{"name":"\u0448\u0442","selfWeight":0.0,"selfVolume":0.0,"unitsQuantity":1.0,"barcode":"","barcodes":[],"id":"\u0448\u0442","marking":"","price":999}},{"uid":"b24828e2-1e39-413c-8167-ae36d6f44ac2","createdBy":"Unknown","productId":"delivery","declaredQuantity":1,"currentQuantity":1,"currentQuantityWithBinding":1,"firstCellId":null,"firstStorageBarcode":null,"packingId":"\u0448\u0442","sscc":null,"registeredDate":"0001-01-01T00:00:00Z","registrationDate":"0001-01-01T00:00:00Z","index":2,"expiredDate":"0001-01-01T00:00:00Z","secondCellId":null,"secondStorageBarcode":null,"bindedLineUid":null,"productName":"\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430","productMarking":"","productBarcode":"","packingName":"\u0448\u0442","packingUnitsQuantity":1.0,"price":500,"packing":{"name":"\u0448\u0442","selfWeight":0.0,"selfVolume":0.0,"unitsQuantity":1.0,"barcode":"","barcodes":[],"id":"\u0448\u0442","marking":"","price":500}}]}

поля соответствуют полям объекта Cleverence.Warehouse.Document, документ содержит шапку, две коллекции строк DeclaredItems и CurrentItems, для работы на ТСД выгружается DeclaredItems, объект строки документа Cleverence.Warehouse.Document, ProductId - ид. товара, должен соответствовать ид. товара из справочника номенклатуры, PackingId - ид. упаковки данного товара, DeclaredQuantity - плановое количество.  


Сервис поддержки клиентов работает на платформе UserEcho