Печать ценников
© 2009 Андрей Савельев
Наверное, у многих при разработке программ, связанных с товарооборотом возникает такая необходимость, что бы напечатать ценники по количеству товара. В этой статье, я покажу, как это можно сделать, используя FastReport.
Для того чтобы продемонстрировать наглядно печать ценников, создадим БД с приведенной ниже структурой.
Создадим таблицу следующей структуры
CREATE TABLE CENNIK (Добавим к полю ID_CENNIK генератор и триггер
ID_CENNIK INTEGER NOT NULL,
NAME_TOVAR VARCHAR(100),
PROIZVOD VARCHAR(30),
DATA_CENNIK DATE,
KOLVO_TOV INTEGER,
ARTIKUL VARCHAR(7),
CENA_TOV NUMERIC(15,2)
);
CREATE GENERATOR GEN_CENNIK_ID;Заполним нашу таблицу следующими позициями
SET TERM ^ ;
CREATE OR ALTER TRIGGER CENNIK_BI FOR CENNIK
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID_CENNIK IS NULL) THEN
NEW.ID_CENNIK = GEN_ID(GEN_CENNIK_ID,1);
END
^
SET TERM ; ^
INSERT INTO CENNIK (ID_CENNIK, NAME_TOVAR, PROIZVOD, DATA_CENNIK, KOLVO_TOV, ARTIKUL, CENA_TOV)
VALUES (1, 'Юбка ', 'Москва', '2009-01-25', 5, '0000001', 1500);
INSERT INTO CENNIK (ID_CENNIK, NAME_TOVAR, PROIZVOD, DATA_CENNIK, KOLVO_TOV, ARTIKUL, CENA_TOV)
VALUES (2, 'Шорты', 'Турция', '2009-01-06', 10, '0000002', 100);
INSERT INTO CENNIK (ID_CENNIK, NAME_TOVAR, PROIZVOD, DATA_CENNIK, KOLVO_TOV, ARTIKUL, CENA_TOV)
VALUES (3, 'Топ', 'Германия', '2008-12-15', 2, '0000003', 230);
Для того, что бы напечатать ценники по количеству товара, необходим некий алгоритм. Его и опишем ниже.
Необходимо создать столько позиций на выходе, сколько есть количество товара. На первый взгляд вроде бы и не понятно, что за алгоритм, смотрим далее...
Я реализовал этот алгоритм на хранимой процедуре и назвал её EOF_KOLVO. Выглядит она следующим образом
CREATE PROCEDURE EOF_KOLVO ( in_kolvo integer)
returns (res integer)
as
begin
res = 0;
while (in_kolvo > 0) do
begin
res = res + 1;
in_kolvo = in_kolvo - 1;
suspend;
end
end^
Что делает эта процедура? Процедура получает входной параметр, который равен количеству товара. Внутри процедуры выполняется цикл на уменьшение количества товара для каждого прохода. На выходе получаем количество позиций равным количеству товара одной позиции. Всё очень просто, как оказалось ![]()
В принципе, задача уже решена на 70%. Далее необходимо построить сам отчёт.
Для этого, запустим Delphi, бросим на форму frxReport, frxIBXComponents, IBDatabase, IBTransaction. Подключим БД к IBDatabase, у IBTransaction выберим DefaultDatabase равным IBDatabase. Откроем дизайнер отчетов, кликнув дважды по frxReport. На вкладке Data дизайнера отчётов расположим frxIBXQuery и назовём его Tovar, дважды кликним по нему и в редакторе SQL добавим следующий SQL запрос
selectэтот запрос и сделает всё, что для нас необходимо используя хранимую процедуру EOF_KOLVO.
c.name_tovar, c.proizvod, c.data_cennik, c.kolvo_tov, c.artikul, c.cena_tov
from
cennik c
left outer join
eof_kolvo(c.kolvo_tov) on (0=0)
Далее перейдём к моделированию отчёта. Для этого перейдём на вкладку Page1 дизайнера отчёта, положим на него бэнд MasterData1, подключим его к источнику данных Tovar. У ценников, есть определенный формат (размер). В моём случае размер ценников равен 5x4. Что бы в одной строке было несколько ценников, разделим MasterData1 на колонки, для этого выставим свойство Column равным 4. Общий вид отчёта получился, как показано ниже

Для того чтобы просмотреть конечный результат, нажмём Предварительный просмотр на панели управления или функциональные клавиши Ctrl+P.
У меня он выглядит следующим образом

Если мы посмотри заполненную таблицу CENNIK, то увидим, что у позиции Юбка количество товара равно 5 и цена её составляет 1500р, а на рисунке выше, мы видим, что ценников для этой позиции именно 5. Поставленная задача выполнена.
Желающие млогут скачать:
p.s. для работы БД необходим SQL сервер FireBird 1.5.4
Copyright© 2009 Андрей Савельев
| 2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2002 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2001 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2000 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 1999 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
- Как легально поднять уровень индекса цитирования.
- Мы реально сможем помочь вам в управлении предприятием
- Создание сайтов – популяризация вашего замысла
- Свой сайт. Управление ресурсом
- Семантическое ядро сайта или правила подбора ключевых фраз
- Инфо-Предприятие: выгоды явные и не явные
- Что следует знать про смартфон BlackBerry 8520 white, произведенный компанией RIM
- Особенности рекламы в Интернете
- Сайт визитка
- Samsung P7500 Galaxy Tab
- Программирование в среде Delphi 8 for .NET
- Практикум по Delphi для решения прикладных задач
- Фундаментальные алгоритмы и структуры данных в Delphi
- Delphi 6. Программирование на Object Pascal
- Delphi и технология COM
- Delphi в шутку и всерьез: что умеют хакеры
- Программирование в Delphi глазами хакера
- Delphi 2005. Секреты программирования
- Искусство создания компонентов Delphi
- Приемы программирования в Delphi на основе VCL
- Программирование баз данных в Delphi 7
- Программирование баз данных в Delphi
- Программирование в среде Delphi
- Программирование в Delphi 7
- Язык SQL в Delphi 5