Генерация Code 128b

отредактировано March 2014 Раздел: FastReport 4.0
Добрый день.

Необходимо сформировать штрих-код Code 128B в FR 4.1 вида (2508058565L110-006-002P201402S443.43) для квитанций за месяц.
Есть следущие идентификаторы:
ИНН - 2105085815 (формат число, значение является статичным т.е. не меняется и вводится вручную)
Перед лицевым счётом нужен знак (L - латинская заглавная буква)
Лицевой счёт - 110-006-002 (формат текст, передаётся из таблицы *.DBF в виде подключаемой реальной переменной frDSet."nls", для каждой квитанции свой уникальный)
Перед периодом нужен знак (P - латинская заглавная буква)
Период - 201402 (формат целое число, виртуальная переменная @period@, для каждой квитанции своя уникальная)
Перед суммой нужен знак (S - латинская заглавная буква)
Сумма - 443.43 (формат число с дробной частью, передаётся из таблицы *.DBF в виде подключаемой реальной переменной frDSet."sal_mes", для каждой квитанции свой уникальный)

При использовании объекта "Штрихкод" прописываем в expression строку вида '2508058565LfrDSet."nls"P@period@SfrDSet."sal_mes"' получаем:
1f263fe86be1.jpg
При этом отдельно блоки он понимает:
'2508058565L'
b767d8f3e932.jpg
frDSet."nls"
b341b7f85006.jpg
@period@
6eefaf7006fb.jpg
frDSet."sal_mes" аналогично лицевому счёту.
Не могу сообразить как объединить так, чтобы он понимал все переменные и при этом формировал один общий штрих-код

Комментарии

  • pkapka
    отредактировано 17:17
    Здравствуйте.
    Maiory написал: »
    Период - 201402 (формат целое число, передаётся из таблицы *.DBF в виде подключаемой виртуальной переменной @period@, для каждой квитанции свой уникальный)
    А кто такая "виртуальная переменная"?
    Maiory написал: »
    При использовании объекта "Штрихкод" прописываем в expression строку вида '2508058565LfrDSet."nls"P@period@SfrDSet."sal_mes"' ...

    Попробуйте:

    '2508058565L'+<frDSet."nls">+'P'+@period@+'S'+<frDSet."sal_mes">
    Что сделать c @period@ я к сожалению не знаю...
    Если бы это была переменная отчета, то <period>. т.е. '2508058565L'+<frDSet."nls">+'P'+<period>+'S'+<frDSet."sal_mes">
  • отредактировано March 2014
    Виртуальная переменна - генерируется непосредственно при формировании печатной формы квитанции, выше я ввёл в заблуждение она не хранится в файлах *.dbf.
    На вариант '2508058565L'+<frDSet."nls">+'P'+@period@+'S'+<frDSet."sal_mes"> выдаёт ошибку синтаксиса как я понял:
    64766ccd5d80.jpg
    На вариант '2508058565L'+<frDSet."nls">+'P'+<period>+'S'+<frDSet."sal_mes"> выдаёт ошибку:
    4ab2c5c7176c.jpg

    Попробовал исправить 1 вариант с ошибкой синтаксиса, попрежнему не видит переменные, символы <> можно опусть получится тоже что на скрине только без них.
    '2508058565'+'L'+'<frDSet."nls">'+'P'+'@period@'+'S'+'<frDSet."sal_mes">' выдаёт штрих-код вида:
    363f1a47bba2.jpg
  • отредактировано 17:17
    Квадратные скобки [] попробуйте поставить в начале и конце выражения
  • pkapka
    отредактировано March 2014
    Maiory написал: »
    На вариант '2508058565L'+<frDSet."nls">+'P'+<period>+'S'+<frDSet."sal_mes"> выдаёт ошибку:
    4ab2c5c7176c.jpg

    А если исключить period? или привести его к переменной отчета?
  • отредактировано March 2014
    Nightmareterrible написал: »
    Квадратные скобки [] попробуйте поставить в начале и конце выражения
    Если вы имели в виду так:

    то выдаёт ошибку:
    fe1d88d00c6e.jpg
    Nightmareterrible написал: »
    А если исключить period? или привести его к переменной отчета?
    '2508058565L'+<frDSet."nls">+'S'+<frDSet."sal_mes">
    Получаем следущее:
    672181eaa137.jpg

    Не совсем понял что значит привести к переменной отчёта (они все переменные отчёта просто разные по типу и способу подключения), подозреваю что вы имели ввиду, что проблема с переменной @period@. Попробовал сократить вырожение до вида '2508058565'+'L'+<frDSet."nls">
    Получилось, однако, следущее:
    db90bc149894.jpg
    Продолжаю дальше добовлять переменные '2508058565'+'L'+<frDSet."nls">+'S' работает проблем нет, а вот добавление второй подключаемой переменной '2508058565'+'L'+<frDSet."nls">+'S'+<frDSet."sal_mes"> приводит к ошибке:
    672181eaa137.jpg
    Как я понял жалуется на дублирование значений.
  • pkapka
    отредактировано 17:17
    Maiory написал: »
    Продолжаю дальше добовлять переменные '2508058565'+'L'+<frDSet."nls">+'S' работает проблем нет, а вот добавление второй подключаемой переменной '2508058565'+'L'+<frDSet."nls">+'S'+<frDSet."sal_mes"> приводит к ошибке:
    672181eaa137.jpg
    Как я понял жалуется на дублирование значений.

    Нет, жалуется на приведение типов, .
    в frDSet."sal_mes" число, попробуйте floattostr(<frDSet."sal_mes">).
  • отредактировано March 2014
    pka написал: »
    Нет, жалуется на приведение типов, .
    в frDSet."sal_mes" число, попробуйте floattostr(<frDSet."sal_mes">).

    Получили следущее '2508058565'+'L'+<frDSet."nls">+'S'+floattostr(<frDSet."sal_mes">) действительно помогло и это радует - благодарю.
    21a9bde86371.jpg
    Вопрос - откуда вы взяли floattostr(), при поиске на эту тему вобще ничего похожего не встречал. И ещё при попытке привести к типу string (если я правильно понял) переменную frDSet."nls" выдаёт ошибку:
    c30eb4fb2ce1.jpg
    Cначало думал что тип переменных должен совподать, а выходит наоборот, если так то не подскажете к каким типам можно ещё привести (ради эксперемента floatTo***):

    Теперь осталось разобраться с периодом, переменая имеет вид @period@ и при вставке в объект "Штрихкод" отображается правильно
    6eefaf7006fb.jpg
    но если попробовать привести к типу string, строка вида:
    '2508058565'+'L'+<frDSet."nls">+'P'+floattostr(@period@)+'S'+floattostr(<frDSet."sal_mes">) выдаёт ошибку:
    396e6a5b4df9.jpg
  • gpigpi
    отредактировано 17:17
    написал:
    Вопрос - откуда вы взяли floattostr(),
    В дизайнере есть список функций
    написал:
    при поиске на эту тему вобще ничего похожего не встречал
    По Sin и Cos тоже ничего не найдёте
    написал:
    И ещё при попытке привести к типу string (если я правильно понял) переменную frDSet."nls" выдаёт ошибку:
    Вероятно, поле frDSet."nls" уже и так строковое и его не нужно преобразовывать
  • gpigpi
    отредактировано 17:17
    написал:
    но если попробовать привести к типу string, строка вида:
    '2508058565'+'L'+<frDSet."nls">+'P'+floattostr(@period@)+'S'+floattostr(<frDSet."sal_mes">) выдаёт ошибку:
    Попробуйте '2508058565'+'L'+<frDSet."nls">+'P'+floattostr(<@period@>;)+'S'+floattostr(<frDSet."sal_mes">)
  • отредактировано March 2014
    Получилось, но пришлось переделать переменную @period@ в frDSet."periods", т.е. сделать её реальной (объявить в таблице расчёта, а не пересылать с прошлой таблицы, без объявления)
    '2508058565'+'L'+<frDSet."nls">+'P'+floattostr(<frDSet."periods">)+'S'+floattostr(<frDSet."sal_mes">)

    2508058565L110-006-002P201402S443.43
    Благодарю за помощ.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.