Спасибо, что был предоставлен алгоритм расчета контрольной цифры.
В общем после долгих мучений у меня получилось сделать вам готовое решение через Nice Label.
Выкладываю файл с этикеткой (на этикетке один штрихкод), если вам необходимо скопируйте куда угодно. В функция найдете vbскрипт Barcode.Также используются две переменные - запросы из Innova:
pack.material.barcode - этот берет данные из Продукты - Штрих код (Barcode), штрих код должен быть из 6 цифр!
pack.nominal;Dbc5,2;DecimalBarcodeFormatter - этот берет данные из таблицы Спецификации содержимого - Fixed Weight
Единственное, я не проверил все варианты с различными значениями, так что это за вами :)
Если кому надо, вот код скрипта для Nice Label:
dim two, plus5, minus5, weight(4), znach, res, dif, res2, i
two = array(0,2,4,6,8,9,1,3,5,7) 'создаем массивы с исходными данными
plus5 = array(0,5,1,6,2,7,3,8,4,9)
minus5 = array(0,5,9,4,8,3,7,2,6,1)
for i = 1 to 5 'посимвольно записываем значение веса в массив, чтобы работать с каждым символом отдельно
weight(i-1) = Mid([pack.nominal;Dbc5,2;DecimalBarcodeFormatter],i,1)
next
znach = 0
'проверяем не пустой ли символ в массиве и потом в переменную znach складываем все значения из массивов
'в соответствии с алгоритмом
if weight(0) <> "" then znach = znach + plus5(cint(weight(0)))
if weight(1) <> "" then znach = znach + two(cint(weight(1)))
if weight(2) <> "" then znach = znach + minus5(cint(weight(2)))
if weight(3) <> "" then znach = znach + plus5(cint(weight(3)))
if weight(4) <> "" then znach = znach + two(cint(weight(4)))
' теперь определяем к какому десятку относится сумма
res = 0
dif = 0
if znach < 51 then res = 50
if znach < 41 then res = 40
if znach < 31 then res = 30
if znach < 21 then res = 20
if znach < 11 then res = 10
dif = res - znach ' разница между суммой и этим же десятком
' теперь ищем какому значению соответствует разница в массиве minus5
for i = 0 to 9
if dif = minus5(i) then
res2 = i
exit for
end if
next
Result = [pack.material.barcode] & cstr(res2) & [pack.nominal;Dbc5,2;DecimalBarcodeFormatter]