Публичное пространство
SetRetail10 ◾️ FAQ по весовому модулю и скрипты проверки
- 1 Проверка загруженных товаров на весы
- 2 Как добавить весы DIGI через QLoad?
- 3 Не генерируется PLU на товар (повторно создать задания на отправку товаров для весов)
- 4 Нужно заново сгенерировать PLU на весовые товары
- 5 Не уходит товар на весы
- 6 Ошибка 2015 - Bizerba
- 7 Памятка очистки PLU на популярных моделях весов
- 8 На этикетке обрезается текст состава товара - Mettler Toledo Tiger P (драйвер TOLEDO версии выше 362)
Проверка загруженных товаров на весы
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 есть возможность указать IP-адрес, последний октет которого будет добавляться в имя выгруженного файла.
Для этого в визуализации сервера в настройках весов DIGI через QLOAD в поле "Адресация" укажите адрес в форме, например:
Локальный диск ОС Windows C:\DIGI\==<IP-адрес>
Сетевой ресурс ОС Windows \\<IP-адрес>==<IP-адрес>
Локальный ресурс ОС Линукс /var/lib/jboss/<папка для экспорта>==<IP-адрес>
Два знака равно - это разделитель между каталогом выгрузки и IP-адресом.
Пример указания папки на диске C:\ на локальном сервере ОС Windows.
Пример указания папки на сетевом ресурсе ОС Windows:
Пример указания папки на сетевом ресурсе ОС Linux:
Не генерируется PLU на товар (повторно создать задания на отправку товаров для весов)
Проверка:
Проверьте правила генерации PLU в типе весового товара Справочники → Типы товаров → Вкладка ВЕСОВОЙ ТОВАР → Способ генерации PLU.
Есть ли в импортируемом пустой 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.
Проверьте в базе данных 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, ООО «Кристалл Сервис Интеграция».
Все права защищены.