Помогите, пожалуйста, новичку

отредактировано 23:45 Раздел: FastReport 3.0
Есть отчет на один лист, с компонентами штрих код и picture. На листе 4 штрих кода. Если мне надо напечатать 16 штрих кодов, стало быть надо напечатать 4 листа. Как это грамотнее реализовать.

Комментарии

  • отредактировано 23:45
    Например в диалоге печати укажите 4 копии
  • отредактировано 23:45
    Не то, каждый штрихкод уникальный.
  • gpigpi
    отредактировано 23:45
    Насколько я понял, данные печатаются не из БД. Тогда используй frxUserDataset, а штрих код и picture располагай на бэнде Masterdata.
    Данные можно выводить и в несколько колонок
  • отредактировано 23:45
    Огромное спасибо за столь скорую помощь. У меня уже стало вырисовываться, что-то похожее на то, что нужно. Только вот столкнулся я с новой проблемой. Элемент штрихкод я расположил внутри бэнда masterdata. Размер у бэнда такой, какой необходим, что бы на лист помещалось 4 штрихкода. И вот вопрос.

    А каким способом мне можно задать необходимое местоположение, например, у второго штрихкода (отличное от местоположения первого шк)????????. ;) Естественно это все в масштабе одного листа. Остальные листы должны быть как первый.
  • gpigpi
    отредактировано 23:45
    Высота masterdata должна быть такой, чтобы на нём разместился один штрихкод. Если по ширине страницы располагаются два штрихкода, то у masterdata нужно задать два столбца masterdata.columns=2, masterdata.colunngap=..., masterdata.columnwidth=...
    В frxUserDataset должно быть столько записей, сколько штрихкодов нужно распечатать
  • отредактировано 23:45
    Это я понял. Ну а если второй штрихкод на листе должен быть смещен вправо относительно первого на несколько миллиметров? Как в этом случае поступить? ;) Причем все четыре штрихкода размещаются в одну колонку.
  • gpigpi
    отредактировано January 2006
    Т.е. штрихкоды расположены друг под другом, но со смещением. Тогда в событии MasterData1OnBeforePrint написать
    BarCode.Left:=LeftPos+Offset*(<Line>-1-Trunc((<Line>-1)/4)*4), где LeftPos - начальная позиция, Offset - величина смещения
    To FR Team: пожалуйста, добавьте функции div и mod в стандартные функции FR.
    Добавлено:
    Уже не надо. Я их уже нашёл ;)
  • отредактировано 23:45
    Чувствую мозговое истощение ввиду полного непонимания ;) . Закрыв глаза, вставил вышеуказанную строчку из буфера. Кажись работает. Но получается, что каждый последующий шк смещен относительно предыдущего, и так до тех пор, пока шк не скрывается за границами листа. А мне хочется, что бы например: 2 относительно 1 был смещен левее, 3 относительно 2 правее, 4 относительно 1 по центру.
  • gpigpi
    отредактировано January 2006
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    var i,LeftPos,Offset: integer;
    begin
         LeftPos:=20;
         Offset:=20;
         i:=<Line>-1-Trunc((<Line>-1)/3)*3;{i:=(<line>-1) mod 3}                          
         case i of
          0: BarCode1.Left:=LeftPos;
          1: BarCode1.Left:=LeftPos-Offset;
          2: BarCode1.Left:=LeftPos+Offset;
         end;
    end;
    
  • отредактировано 23:45
    LeftPos:=20;

    20 это в чем, в пикселях или мм?

    И еще может быть есть способ сократить врея формирования отчета. Уж очень болго формируется один лист с 4 штрих кодами и 4 фоновыми фотографиями(разрешение 300 dpi)?
  • gpigpi
    отредактировано 23:45
    написал:
    20 это в чем, в пикселях или мм?
    в пикселях
    написал:
    Уж очень долго формируется один лист с 4 штрих кодами и 4 фоновыми фотографиями(разрешение 300 dpi)
    Это из-за изображений. Если можно, то понизить разрешение
  • отредактировано 23:45
    Что-то получается, НО не получается. Расставил необходимые offset'ы. Первый лист предел мечтаний, а второй, третий, ит.д. идут без указанных оффсетов?
  • gpigpi
    отредактировано 23:45
    Выложи отчёт на webfile.ru или slil.ru
  • отредактировано 23:45
    webfile.ru/776591
  • gpigpi
    отредактировано 23:45
    Я не правильно понял фразу 4 относительно 1 по центру, подумав что 4 по расположению совпадает с 1, из-за чего и дал пример для трёх положений
    Для четырёх позиций нужно так:
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    var i,TopPos,Offset: integer;
    begin
        TopPos:=11;
        //Offset:=1;
        i:=(<line>-1) mod 4;
        case i of
         0: Picture2.Top:=TopPos;
         1: Picture2.Top:=TopPos-2;
         2: Picture2.Top:=TopPos+5;
         3: Picture2.Top:=TopPos+1;
        end;
    end;
    
    Да, кстати, оказалось, что в Fast Script уже есть операторы div и mod, а меня носом так никто и не ткнул... ;)
    Теперь по поводу самого отчёта. Зачем ты сделал фоновый рисунок? Насколько я понял, ты пытался перемещением фоновой картинки на оверлее совместить изображения. На первой странице, похоже, печатается ещё не смещённый оверлей. Что происходит дальше, можно только догадываться...
    Гораздо проще сделать с помощью Shape-объектов: скруглённый прямоугольник, стрелки нарисовать линиями или вставить небольшие рисунки. Если нужно выводить штрихкоды по четыре, то можно разместить на бэнде MasterData сразу четыре штрихкода, т.е. MasterData на всю страницу
  • отредактировано 23:45
    Когда я добавляю еще один штрих код на MasterData. У меня получается два абсолютно одинаковых штрих кода. Правда им передается значение из Element, может в этом поблема?

    А насщет фона, просто есть готовый макет в кореле на котором печатаю пластиковые карты, он и есть фон. Градиент это предпологаемая карта. Мне надо просто совместить будущие pIture с фоном. Но вообщемн то можно попробовать и твой вариант. Будет быстрее загружаться. Но пока мне не удается сделать самое главное это не столь принципиально. ;)
  • gpigpi
    отредактировано January 2006
    В любом случае, лучше уйти от оверлея, разместив макет на MasterData целиком. Штрихкоды передавать через Element0, Element1, Element2, Element3
    А наличие стрелок, синих прямоугольников обязательно? Если нет, то достаточно разместить на MasterData шаблон для одной карточки. И не пудет никаких проблем с совмещением
  • отредактировано 23:45
    Стрелочки обязательны. Что бы передать через element1...3, нужно несколько несколько UserDataSet'ов?
  • gpigpi
    отредактировано 23:45
    написал:
    Что бы передать через element1...3, нужно несколько несколько UserDataSet'ов?
    Нет, в событии frxUserDataSet1Next передавай значения сразу четырём переменным, т.е. для 16 карточек в frxUserDataSet1 должно быть 4 записи.
  • отредактировано 23:45
    GPI, огроменное человеческое спасибо, за оперативную помощь.

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

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