Есть отчет на один лист, с компонентами штрих код и picture. На листе 4 штрих кода. Если мне надо напечатать 16 штрих кодов, стало быть надо напечатать 4 листа. Как это грамотнее реализовать.
Насколько я понял, данные печатаются не из БД. Тогда используй frxUserDataset, а штрих код и picture располагай на бэнде Masterdata.
Данные можно выводить и в несколько колонок
Огромное спасибо за столь скорую помощь. У меня уже стало вырисовываться, что-то похожее на то, что нужно. Только вот столкнулся я с новой проблемой. Элемент штрихкод я расположил внутри бэнда masterdata. Размер у бэнда такой, какой необходим, что бы на лист помещалось 4 штрихкода. И вот вопрос.
А каким способом мне можно задать необходимое местоположение, например, у второго штрихкода (отличное от местоположения первого шк)????????. Естественно это все в масштабе одного листа. Остальные листы должны быть как первый.
Высота masterdata должна быть такой, чтобы на нём разместился один штрихкод. Если по ширине страницы располагаются два штрихкода, то у masterdata нужно задать два столбца masterdata.columns=2, masterdata.colunngap=..., masterdata.columnwidth=...
В frxUserDataset должно быть столько записей, сколько штрихкодов нужно распечатать
Это я понял. Ну а если второй штрихкод на листе должен быть смещен вправо относительно первого на несколько миллиметров? Как в этом случае поступить? Причем все четыре штрихкода размещаются в одну колонку.
Т.е. штрихкоды расположены друг под другом, но со смещением. Тогда в событии MasterData1OnBeforePrint написать
BarCode.Left:=LeftPos+Offset*(<Line>-1-Trunc((<Line>-1)/4)*4), где LeftPos - начальная позиция, Offset - величина смещения
To FR Team: пожалуйста, добавьте функции div и mod в стандартные функции FR. Добавлено:
Уже не надо. Я их уже нашёл
Чувствую мозговое истощение ввиду полного непонимания . Закрыв глаза, вставил вышеуказанную строчку из буфера. Кажись работает. Но получается, что каждый последующий шк смещен относительно предыдущего, и так до тех пор, пока шк не скрывается за границами листа. А мне хочется, что бы например: 2 относительно 1 был смещен левее, 3 относительно 2 правее, 4 относительно 1 по центру.
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;
И еще может быть есть способ сократить врея формирования отчета. Уж очень болго формируется один лист с 4 штрих кодами и 4 фоновыми фотографиями(разрешение 300 dpi)?
Я не правильно понял фразу 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 на всю страницу
Когда я добавляю еще один штрих код на MasterData. У меня получается два абсолютно одинаковых штрих кода. Правда им передается значение из Element, может в этом поблема?
А насщет фона, просто есть готовый макет в кореле на котором печатаю пластиковые карты, он и есть фон. Градиент это предпологаемая карта. Мне надо просто совместить будущие pIture с фоном. Но вообщемн то можно попробовать и твой вариант. Будет быстрее загружаться. Но пока мне не удается сделать самое главное это не столь принципиально.
В любом случае, лучше уйти от оверлея, разместив макет на MasterData целиком. Штрихкоды передавать через Element0, Element1, Element2, Element3
А наличие стрелок, синих прямоугольников обязательно? Если нет, то достаточно разместить на MasterData шаблон для одной карточки. И не пудет никаких проблем с совмещением
Комментарии
Данные можно выводить и в несколько колонок
А каким способом мне можно задать необходимое местоположение, например, у второго штрихкода (отличное от местоположения первого шк)????????. Естественно это все в масштабе одного листа. Остальные листы должны быть как первый.
В frxUserDataset должно быть столько записей, сколько штрихкодов нужно распечатать
BarCode.Left:=LeftPos+Offset*(<Line>-1-Trunc((<Line>-1)/4)*4), где LeftPos - начальная позиция, Offset - величина смещения
To FR Team: пожалуйста, добавьте функции div и mod в стандартные функции FR.
Добавлено:
Уже не надо. Я их уже нашёл
20 это в чем, в пикселях или мм?
И еще может быть есть способ сократить врея формирования отчета. Уж очень болго формируется один лист с 4 штрих кодами и 4 фоновыми фотографиями(разрешение 300 dpi)?
Для четырёх позиций нужно так: Да, кстати, оказалось, что в Fast Script уже есть операторы div и mod, а меня носом так никто и не ткнул...
Теперь по поводу самого отчёта. Зачем ты сделал фоновый рисунок? Насколько я понял, ты пытался перемещением фоновой картинки на оверлее совместить изображения. На первой странице, похоже, печатается ещё не смещённый оверлей. Что происходит дальше, можно только догадываться...
Гораздо проще сделать с помощью Shape-объектов: скруглённый прямоугольник, стрелки нарисовать линиями или вставить небольшие рисунки. Если нужно выводить штрихкоды по четыре, то можно разместить на бэнде MasterData сразу четыре штрихкода, т.е. MasterData на всю страницу
А насщет фона, просто есть готовый макет в кореле на котором печатаю пластиковые карты, он и есть фон. Градиент это предпологаемая карта. Мне надо просто совместить будущие pIture с фоном. Но вообщемн то можно попробовать и твой вариант. Будет быстрее загружаться. Но пока мне не удается сделать самое главное это не столь принципиально.
А наличие стрелок, синих прямоугольников обязательно? Если нет, то достаточно разместить на MasterData шаблон для одной карточки. И не пудет никаких проблем с совмещением