SetRetail10 ◾️ FAQ по весовому модулю и скрипты проверки

Публичное пространство

SetRetail10 ◾️ FAQ по весовому модулю и скрипты проверки

Проверка загруженных товаров на весы

SELECT v.number, v.model, v.addressing, sum(v.PLU_NEW) as PLU_NEW, sum(v.PLU_LOAD) as PLU_LOAD, sum(v.PLU_LOADED) as PLU_LOADED, sum(v.PLU_ERROR) as PLU_ERROR, sum(v.OFFLINE_ERROR) as OFFLINE_ERROR, v.name, v.plu_generation_method from ( select distinct s.number, s.code, s.model, s.addressing, case l0.status when 0 then 1 else 0 end as PLU_NEW, case l1.status when 1 then 1 else 0 end as PLU_LOAD, case l2.status when 2 then 1 else 0 end as PLU_LOADED, case l3.status when 3 then 1 else 0 end as PLU_ERROR, case l3_p.status when 3 then 1 else 0 end as OFFLINE_ERROR, l0.id, l1.id, l2.id, l3.id, l3_p.id, t.name, t.plu_generation_method from scales_scales s join scales_template t on t.id = s.scales_template_id join scales_plues p on 1=1 left join scales_linktoplu l1 on l1.scales_code = s.code and p.id = l1.id_plu and l1.status = 1 left join scales_linktoplu l2 on l2.scales_code = s.code and p.id = l2.id_plu and l2.status = 2 left join scales_linktoplu l3 on l3.scales_code = s.code and p.id = l3.id_plu and l3.status = 3 and l3.lasterrorcode <> 'PORT-ERROR' left join scales_linktoplu l3_p on l3_p.scales_code = s.code and p.id = l3_p.id_plu and l3_p.status = 3 and l3_p.lasterrorcode = 'PORT-ERROR' left join scales_linktoplu l0 on l0.scales_code = s.code and p.id = l0.id_plu and l0.status = 0 where s.deleted = false ) v group by number, model, addressing, name, plu_generation_method order by number

Как добавить весы DIGI через QLoad?

При добавлении весов DIGI через QLOAD есть возможность указать IP-адрес, последний октет которого будет добавляться в имя выгруженного файла.

Для этого в визуализации сервера в настройках весов DIGI через QLOAD в поле "Адресация" укажите адрес в форме, например:

  • Локальный диск ОС Windows C:\DIGI\==<IP-адрес>

  • Сетевой ресурс ОС Windows \\<IP-адрес>==<IP-адрес>

  • Локальный ресурс ОС Линукс /var/lib/jboss/<папка для экспорта>==<IP-адрес>

Два знака равно - это разделитель между каталогом выгрузки и IP-адресом.

Пример указания папки на диске C:\ на локальном сервере ОС Windows.

Пример указания папки на сетевом ресурсе ОС Windows:

Пример указания папки на сетевом ресурсе ОС Linux:

Не генерируется PLU на товар (повторно создать задания на отправку товаров для весов)

Проверка:

  1. Проверьте правила генерации PLU в типе весового товара Справочники → Типы товаров → Вкладка ВЕСОВОЙ ТОВАР → Способ генерации PLU.

  2. Есть ли в импортируемом пустой PLU?

3.1. Для версий ниже 10.4.16.0:

В базе данных set в таблице un_cg_price проверьте поле senttoscales у товара, если FALSE, значит товар не отправлен.

3.2. Для версий выше 10.4.16.0:

В базе данных set в таблице un_cg_product_to_scales проверьте наличие товара в очереди, если он есть, но в time_for_loading время ещё не наступило, изменения по товару будут отправлены на весы позже, согласно указанному времени.

Если товара в очереди un_cg_product_to_scales нет, необходимо проверить его наличие в таблице scales_productentity и сравнить значение в поле import_time, соответствует ли оно времени последней загрузки товара в Set10.

  1. Проверьте в базе данных set добавляется ли товар в таблицу scales_plues.



Выполните скрипты для повторного формирования заданий для загрузки в базе данных 

set:

1.  Очистите каскадно таблицу 

scales_productentity.

TRUNCATE scales_productentity CASCADE;

 

2. Выполните один из скриптов в зависимости от типа товара и версии SetRetail10.

До версии 10.4.16.0:

Весовые товары

UPDATE un_cg_price SET senttoscales = FALSE WHERE product_marking IN (SELECT markingofthegood FROM un_cg_product_weight) AND (enddate IS null OR enddate > now());

 

Штучно-весовые товары

UPDATE un_cg_price SET senttoscales = FALSE WHERE product_marking IN (SELECT markingofthegood FROM un_cg_product WHERE plugin_class_name = 'ru.crystals.pos.catalog.billets.ProductPieceWeightEntityBillet' AND status = '99') AND (enddate IS null OR enddate > now());


3. Дождитесь, когда сгенерируются новые PLU. Весовой модуль забирает для себя новые цены с периодичностью 200 цен/3мин.

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

SELECT distinct ucp.product_marking, ucp.*, ucl.* FROM un_cg_price ucp join un_cg_barcode ucb on ucb.product_marking = ucp.product_marking left join un_cg_likond ucl on substring(ucp.product_marking from 1 for 6) = ucl.marking where ucp.begindate < now() and ucp.enddate > now() and ucp.senttoscales = false and ucp.product_status = 99 and ucp.product_marking in (SELECT markingofthegood from un_cg_product_weight) and ((ucl.begin_date < (now()-'10 minutes'::interval) and ucl.end_date > now()) or ucl.marking is null)

Нужно заново сгенерировать PLU на весовые товары

1. Каскадно очистите таблицу scales_productentity

TRUNCATE scales_productentity CASCADE;

 

2. Выполнить скрипт по БД set

До версии 10.4.16.0:

Для весовых товаров:

UPDATE un_cg_price SET senttoscales = FALSE WHERE product_marking IN (SELECT markingofthegood FROM un_cg_product_weight) AND ( enddate IS NULL OR enddate > Now() );


Для штучно-весовых товаров:

UPDATE un_cg_price SET senttoscales = FALSE WHERE product_marking IN (SELECT markingofthegood FROM un_cg_product WHERE plugin_class_name = 'ru.crystals.pos.catalog.billets.ProductPieceWeightEntityBillet' AND status = '99') AND ( enddate IS NULL OR enddate > Now() );

 

Начиная с версии 10.4.16.0:

WITH prices AS ( SELECT DISTINCT ucp.product_marking, begindate, enddate FROM un_cg_price ucp JOIN un_cg_product p ON ucp.product_marking = p.markingofthegood AND ucp.product_status = p.status LEFT JOIN un_cg_likond likond ON likond.marking = p.erpcode WHERE (ucp.enddate IS NULL OR ucp.enddate > NOW()) -- Активная цена AND ucp.product_status = '99' -- Товар на 99-й полке AND p.plugin_class_name IN ( -- Весовой или штучно-весовой товар 'ru.crystals.pos.catalog.billets.ProductWeightEntityBillet', 'ru.crystals.pos.catalog.billets.ProductPieceWeightEntityBillet') AND p.status = '99' -- Утверждённый статус AND p.deleted = false -- Товар не удалён AND (likond.marking IS NULL OR ( -- Условия для likond (likond.begin_date IS NULL OR likond.begin_date < NOW()) AND (likond.end_date IS NULL OR likond.end_date > NOW()) )) -- Есть активная первая цена AND EXISTS ( SELECT 1 FROM un_cg_price p1 WHERE p1.product_marking = ucp.product_marking AND p1.product_status = '99' AND p1.price_number = '1' AND (p1.enddate IS NULL OR p1.enddate > NOW()) ) ) INSERT INTO un_cg_product_to_scales (marking, time_for_loading) SELECT product_marking, begindate FROM prices UNION ALL SELECT product_marking, enddate FROM prices WHERE enddate IS NOT NULL ON CONFLICT (marking, time_for_loading) DO NOTHING;

 

3. Ожидайте, когда сгенерируются новые plu. Весовой модуль забирает для себя новые цены с периодичностью 200 цен/3мин.

Периодически выполняйте скрипт, который отслеживает количество цен для перевыгрузки в весовой модуль. В результате загрузки цен, скрипт должен вернуть пустые значения.

До версии 10.4.16.0:

SELECT distinct ucp.product_marking, ucp.*, ucl.* FROM un_cg_price ucp join un_cg_barcode ucb on ucb.product_marking = ucp.product_marking left join un_cg_likond ucl on substring(ucp.product_marking from 1 for 6) = ucl.marking where ucp.begindate < now() and (ucp.enddate is null or ucp.enddate > now()) and ucp.senttoscales = false and ucp.product_status = 99 and ucp.product_marking in ( SELECT markingofthegood from un_cg_product_weight ) and ( ( ucl.begin_date < (now()-'10 minutes'::interval) and ucl.end_date > now()) or ucl.marking is null)

 

Начиная с версии 10.4.16.0:

SELECT ups.marking, ups.create_dt, ups.time_for_loading, ucp.price_number, ucp.begindate, ucp.enddate, likond.marking as likond_marking, likond.begin_date as likond_begin, likond.end_date as likond_end FROM un_cg_product_to_scales ups JOIN un_cg_price ucp ON ups.marking = ucp.product_marking JOIN un_cg_product p ON ucp.product_marking = p.markingofthegood AND ucp.product_status = p.status LEFT JOIN un_cg_likond likond ON likond.marking = p.erpcode WHERE (ucp.enddate IS NULL OR ucp.enddate > NOW()) -- Активная цена AND ucp.product_status = '99' -- Товар на 99-й полке AND p.plugin_class_name IN ( -- Весовой/штучно-весовой 'ru.crystals.pos.catalog.billets.ProductWeightEntityBillet', 'ru.crystals.pos.catalog.billets.ProductPieceWeightEntityBillet') AND p.status = '99' -- Утверждённый статус AND p.deleted = false -- Товар не удалён AND (likond.marking IS NULL OR ( -- Условия для likond (likond.begin_date IS NULL OR likond.begin_date < NOW()) AND (likond.end_date IS NULL OR likond.end_date > NOW()) )) -- Проверяем активные цены AND EXISTS ( SELECT 1 FROM un_cg_price p1 WHERE p1.product_marking = ucp.product_marking AND p1.product_status = '99' AND p1.price_number = '1' AND (p1.enddate IS NULL OR p1.enddate > NOW())) AND ups.create_dt BETWEEN NOW() - INTERVAL '60 minute' AND NOW() -- Только задания, созданные за последний час, чтобы отсеять неактуальные задания и задания на будущее ORDER BY ups.time_for_loading ASC;

Не уходит товар на весы

© 1994-2026, ООО «Кристалл Сервис Интеграция».
Все права защищены.

Политика обработки персональных данных