Веб-сервис REST для печати ценников через подстановки своих значений из ERP или ТСД

Публичный ресурс

Веб-сервис REST для печати ценников через подстановки своих значений из ERP или ТСД

https://crystals.atlassian.net/browse/SRTS-1787

https://crystals.atlassian.net/browse/CR-9221

10.3.26.0

Описание

Веб-сервис позволяет печатать ценники на товар по веб-запросу, например ТСД или принтеры магазина, при этом подставлять значения из ERP, игнорируя подстановки из SetRetail10

Такая возможность  позволяет редактировать и печатать уценоцные стикеры через модуль печати SetRetail10, чтобы сократить время на оформление уценки товаров.

Метод веб-сервиса для задания на печать ценника с входными данными для подстановок

Формирование задания на печать этикеток по параметрам указанным в запросе

Метод

print

URL

http://IP-адрес сервера SetRetail10:8090/SET-PrintPriceTags-REST/v1/pricetags/print

Тип запроса

POST

Комментарий

Создать задание на печать ценников по параметрам указанным в запросе.

 

Входящие параметры метода (JSON)

 

Параметр

Тип данных

Обязательное

Пример

Описание

Название подстановки в редакторе шаблонов ценников

Параметр

Тип данных

Обязательное

Пример

Описание

Название подстановки в редакторе шаблонов ценников

Параметры печати

*- не обязательны для метода, но обязательны, если будут печататься на уценочном стикере

barcode

string

Да

4600001000007

ШК товара

Штрих-код (цифры)

Штрих-код для поиска товара, на уценочном стикере будет напечатан штрих-код товара по умолчанию, а не тот, который был передан в этой подстановке. Влияет на товары, у которых несколько штрих-кодов.

amount

Integer

Да

2

Количество копий

-

templateCode

string

Нет*

23

Код шаблона ценника

-

printerName

string

Нет*

HP Color LaserJet M552 PCL 6

Название принтера из SetRetail10

-

Подстановки для ценника \ стикера

*- не обязательны для метода, но обязательны, если будут печататься на уценочном стикере

NAME

string

Нет

Новое наименование товара!

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

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

FULL_NAME

 

string

Нет

Новое наименование товара! Полное

Полное наименование товара

Полное название

PERCENT_DISCOUNT_FOR_RA

string

Нет*

25

Процент скидки

Процент скидки по акции

EXPIRATION_DATE_LENTA

string

Нет*

231114

Дата окончания СГ

Срок годности (для клиентов CSI (уточните у менеджера)

EXPIRATION_DATE_ONLY

string

Нет*

231114

Дата окончания СГ для GS1 секция 17

Дата окончания СГ (GS1 секция 17)

ERP_CODE

string

Нет

123123

ERP-код товара

ERP-код товара

EMPLOYEE_NUMBER

string

Нет*

123123

Табельный номер

Табельный номер 

WEIGHT

string

Нет*

001500

Вес продукции (для весового товара)

Вес

SHOP_NUMBER

string

Нет*

34

Номер ТК

Номер ТК

PRICE_RUB

string

Нет*

217

Цена за единицу товара, руб

Только часть, которая в рублях!

Цена за единицу товара, руб

 

PRICE_COP

string

Нет*

99

Цена за единицу товара, коп

Только часть, которая в копейках!

Цена за единицу товара, коп

BARCODE

https://crystals.atlassian.net/browse/SRTS-2748

https://crystals.atlassian.net/browse/CR-11581

10.4.4.0

Пример запроса.

string

Нет

2601208

Штрих-код печати

Штрих-код для печати

Штрих-код, который будет напечатан на самом уценочном стикере, вне зависимости от наличия флага по умолчанию.

CUSTOM_SUBSTITUTION1

https://crystals.atlassian.net/browse/CR-11864

https://crystals.atlassian.net/browse/SRTS-3070

10.4.7.0

Пример запроса

string

Нет

Произвольный текст

Поле для произвольного текста 1

Произвольная подстановка 1

CUSTOM_SUBSTITUTION2

https://crystals.atlassian.net/browse/CR-11864

https://crystals.atlassian.net/browse/SRTS-3070

10.4.7.0

Пример запроса

string

Нет

Произвольный текст

Поле для произвольного текста 2

Произвольная подстановка 2

CUSTOM_SUBSTITUTION3

https://crystals.atlassian.net/browse/CR-11864

https://crystals.atlassian.net/browse/SRTS-3070

10.4.7.0

Пример запроса

string

Нет

Произвольный текст

Поле для произвольного текста 3

Произвольная подстановка 3

CUSTOM_SUBSTITUTION4

https://crystals.atlassian.net/browse/CR-11864

https://crystals.atlassian.net/browse/SRTS-3070

10.4.7.0

Пример запроса

string

Нет

Произвольный текст

Поле для произвольного текста 4

Произвольная подстановка 4

CUSTOM_SUBSTITUTION5

https://crystals.atlassian.net/browse/CR-11864

https://crystals.atlassian.net/browse/SRTS-3070

10.4.7.0

Пример запроса

string

Нет

Произвольный текст

Поле для произвольного текста 5

Произвольная подстановка 5

Разделение заданий на печать ценников (пример печати с подстановкой CUSTOM_SUBSTITUTION3)

https://crystals.atlassian.net/browse/SRTS-4337

https://crystals.atlassian.net/browse/CR-9221

10.4.23.0 10.4.22.1

Начиная с версии 10.4.23.0 добавлена настройка print.price.tags.separately для разделения заданий на печать ценников, чтобы избежать проблемы с перезаписыванием параметров для каждого задания.

Пример: в торговой сети требуется напечатать 3 уценочных стикера на 3 одинаковых товара с 3-я разными купонами в поле CUSTOM_SUBSTITUTION3.

  • До версии 10.4.23.0 печатались 3 уценочных стикера на 3 одинаковых товара с 3-я ОДИНАКОВЫМИ купонами CUSTOM_SUBSTITUTION3.

  • При включенной настройке, начиная с версии: печатаются 3 уценочных стикера на 3 одинаковых товара с 3-я разными купонами CUSTOM_SUBSTITUTION3.

Для включения настройки выполните скрипт в базе данных set сервера SetCentrum/SetRetail10 → перезапустите службу сервера.

UPDATE sales_management_properties SET property_value='true' WHERE property_key='print.price.tags.separately';

 

Особенности печати ценников с корректной генерацией GS1 DataMatrix

https://crystals.atlassian.net/browse/CR-15806

https://crystals.atlassian.net/browse/SRTS-4676

Описание

10.4.26.0

Начиная с версии 10.4.26.0 добавлен признак \u00E8 для формирования GS1.

Пример запроса в CUSTOM_SUBSTITUTION2:

[ { "printerName": "ppp", "substitutions": { "ERP_CODE": null, "FULL_NAME": null, "PRICE_RUB": 100, "PRICE_COP": 10, "SHOP_NUMBER": null, "EMPLOYEE_NUMBER": null, "EXPIRATION_DATE_ONLY": null, "PERCENT_DISCOUNT_FOR_RA": null, "WEIGHT": "300 грамм", "CUSTOM_SUBSTITUTION1": null, "CUSTOM_SUBSTITUTION2": "\u00E80104968814901189", "CUSTOM_SUBSTITUTION3": "215KkSgKTFBww%/91F\u001DFD092dGVzdInzniHKxdt8RvDh9AfnjzgqtKHfIy28hJnFtzo=", "CUSTOM_SUBSTITUTION4": null, "CUSTOM_SUBSTITUTION5": null }, "barcode": "4600123000008", "amount": 1, "templateCode": "777" } ]

 

image-20260409-110845.png

 

image-20260409-111151.png

 

Включение и настройка

  • Назначение \u00E8 — включение GS1-режима с автоматическим добавлением FNC1 (код 232) для прохождения проверки в «Честный ЗНАК»

  • Где добавлять символ — в маске баркода или в подстановках CUSTOM_SUBSTITUTION

  • Структура данных: 01 + 14 цифр GTIN, 17 + дата (фикс. длина), \u001D — разделитель перед AI переменной длины, 21 + серийный номер

  • Наглядный пример формирования строки с переменными: "\u00E8010496881490118917" + expirationDate + "\u001D21" + serialNumber

 

Ограничения

  1. \u00E8 должен быть первым символом в данных, иначе код не пройдёт проверку в ЧЗ.

  2. Нельзя передавать текст «FNC1» или символ 232 как обычный текст — будет ошибка.

  3. Разделитель \u001D работает только внутри GS1-режима (в обычном DataMatrix отображается как <gs>).

  4. Обратная совместимость: старые маски без \u00E8 работают без изменений.

  5. Если в данных встречается символ с кодом 29 (\u001D), он интерпретируется как разделитель полей и кодироваться согласно стандарту GS1

 

Логика взаимодействия запроса на печать

 

Алгоритм работы метода

  1. Пользователь сканирует/вводит на ТСД или через ERP параметры, которые необходимы для печати/

  2. ТСД/ERP вызывает метод API по печати ценников в модуле печати SetRetail10 с нужными для печати параметрами/

  3. Модуль печати принимает эти данные

    • Находит товар по ШК.

    • Находит шаблон стикера по коду шаблона.

    • Формирует стикер, заполняя подстановки, полученными данными.

      • Шаблон формируется в SET по аналогии с обычным ценником.

      • Если в SET есть значение для подстановки и для нее же пришло значение из ТСД/ERP, то значение из ТСД/ERP будет приоритетней (к примеру подстановка % скидки, которая может быть как рассчитана, так и передана с ТСД)

    • Находит принтер по полученному названию.

    • Отправляет стикер на найденный принтер.

    • Возвращает в ответ результат выполнения метода.

Ограничения

  • Входные параметры работают только для подстановок, описанных выше.

  • Для того, чтобы цена на стикере и на кассе были равны, необходимо завести рекламную акцию на скидку и на товар с истекающим сроком годности.

  • Данное решение не предусматривает возможности печатать на стикере GS1 databar без дополнительных доработок.

  • На стороне SetRetail10 не проводится валидация полученных в запросе значений!

Пример запросов

[{ "barcode": "4607141310331", "amount": 1, "templateCode": "34453", "printerName": "MyPrint", "substitutions": { "SHOP_NUMBER": "329847", "EMPLOYEE_NUMBER": "070757" } }]
[{ "barcode": "4606068478339", "amount": 1, "templateCode": "333", "printerName": "StorePrinter", "substitutions": { "EXPIRATION_DATE_ONLY": "241201", "PRICE_RUB": "222", "PRICE_COP": "33", "SHOP_NUMBER": "1235", "ERP_CODE": "test_erp_code", "EMPLOYEE_NUMBER": "test_emp_number", "WEIGHT": "199.99", "EXPIRATION_DATE_LENTA": "test dt", "NAME": "Имя товара", "FULL_NAME": "Полное имя товара", "PERCENT_DISCOUNT_FOR_RA": "12" } }]

Статусы ответов

Печать произведена успешно.

Пример ответа, когда ценник успешно напечатан
{ "result": "Печать запустилась." }

Ценник не напечатан из-за ошибки входных параметров:

Возможные причины:

  • неверно указан штрих-код товара;

  • не привязан шаблон к принтеру;

  • расхождение размеров ценника и размеров бумаги принтера.

  • любые другие ошибки, которые влияют на печать ценника или отсутствие данных по товару на сервере.

Пример ответа, когда ценник не напечатан из-за ошибки входных параметров
{ "result": "Произошла ошибка во время печати. Один или несколько ценников не напечатались." }

Пример печати с Postman

На вкладке запроса выберите POST → введите адрес следующего формата для генерации изображения ценников http://IP-адрес сервера SetRetail:8090/SET-PrintPriceTags-REST/v1/pricetags/print → вставьте JSON-запрос для формирования ценника → кликните SEND → появится ответ от сервера со ссылкой на изображение ценника.

В данном примере, настроена печать на PNG-принтер, распечатанные ценники будут находится в папке на сервере.

Дополнительная информация

Папка рисунков PNG-принтера на сервере nginx

Все сохраненные изображения согласно настройке хранения изображений в папке сервера nginx:

  • Windows: {Disk}:\Папка SetRetail10\nginx\html\image-printer-output

  • Linux: /var/lib/jboss/nginx/html/image-printer-output