Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 63545
Модуль Forms 63381
ТЕХНОЛОГИИ ДОСТ... 60140
Пример работы с... 59225
Имитационное мо... 55597
Реклама
Сейчас на сайте
Гостей: 16
На сайте нет зарегистрированных пользователей

Пользователей: 13,077
новичок: radikrr
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование интернет магазина (Apache, Php, Html) на GPSS + Блок схема
Моделирование работы класса персональных компьютеров на GPSS + Отчет + Б...
Изменения контуров и сортировка в двумерном массиве чисел на Turbo Pasca...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Разработка табличного документа — бланк счета-фактуры



Печатная форма счета-фактуры состоит из трех частей. Первая часть пред-
ставляет собой заголовок формы, количество записей и размеры которой
постоянны. Вторая часть представляет собой таблицу, состоящую из заго-

Рис. 7.13. Устанавливаем направление шрифта для текста ячейки

ловка, табличной части и оконечной части, которая содержит итоговые
суммы. Третья часть формы счета-фактуры представляет собой записи, ко-
личество которых является константой, а расположение определяется раз-
мерами табличной части документа.
Для формирования документа будем использовать его шаблон, который
создадим и сохраним в формате шаблона документа Word. Данный шаблон,
как и шаблон простого (без таблиц) документа, должен содержать постоян-
ный текст, который не будет меняться при формировании новых докумен-
тов, и текстовые константы, служащие для подстановки реального текста
при формировании документа. Кроме этого в шаблоне счета-фактуры
должна присутствовать табличная часть, ячейки которой содержат как по-
стоянные записи, так и текстовые константы для заполнения из программы.
Дополнительно табличная часть должна иметь строки, по подобию которых
будут добавляться новые строки в таблицу.
Внешний вид возможного шаблона документа бланка счета-фактуры пред-
ставлен на рис. 7.14.
Для формирования выходного документа будем использовать методы поиска
фрагмента текста в документе, поиска и замены фрагмента текста на задан-

Рис. 7.14. Шаблон документа бланка счета-фактуры

ный текст. Для работы с табличной частью документа нам придется исполь-
зовать свойства и методы для обеспечения перехода к заданной ячейке,
определения текущей таблицы и положения в ней ячейки, записи текста в
ячейку. Рассмотрим фрагменты исходного текста:
Формирование табличного документа с использованием шаблона документа
// Функция FindAndlnsert находит текстовую константу и подставляет
// на ее место текст
function FindAndlnsert(FindText,ReplacementText:string):boolean;
const wdReplaceAll=2;
begin
Form!.W.Selection.Find.Text:=FindText;
Forml.W.Selection.Find.Replacement.Text:=ReplacementText;
FindAndlnsert:=Forml.W.Selection.Find.Execute(Replace:=wdReplaceAll);
end;
// Функция FindRowColumnlnTable находит текстовую константу и возвращает
// таблицу, а также номер строки и столбца, где находится эта константа
Function FindRowColumnlnTable(FindText:string;var tab:variant; var
Row,Column:integer):boolean;
begin
FindRowColumnlnTable:=false;
try
Forml.W.Selection.Find.Text:=FindText;
if Forml.W.Selection.Find.Execute then begin
Column:=Forml.W.Selection.Cells.Item(l).Columnlndex;
Row:=Forml.W.Selection.Cells.Item(l).Rowlndex;
tab:=Forml.W.Selection.Tables.Item(1);
FindRowColumnlnTable:=true;
end;
except
FindRowColumnlnTable:=false;
end;
end;
// Данная процедура формирует документ счет-фактуру
procedure TForml.ButtonllCllck(Sender: TObject);
var table_:variant;
Row_,Column_:integer;
begin
// Создаем новый документ по шаблону
W.documents.Add(ExtractFileDir(Application.ExeName)+
'\Шаблон счета-фактуры.dot');
// Подставляем текст в заголовок документа
FindAndlnsert('###НОМЕР&',Ч');
FindAndlnsert(•###Дата&',datetostr(date));
FindAndlnsert('###ПРОДАВЕЦ&','ЗАО Сокол');
FindAndlnsert('###АДРЕС_ПРОДАВЦА&',
'г. Санкт-Петербург, ул. Кузнечная 5');
FindAndlnsert('###ИНН_ПРОДАВЦА&', 4234567890') ;
FindAndlnsert('###ГРУ300ТПРАВИТЕЛЬ&','ЗАО Сокол');
FindAndlnsert('###ГРУ30П0ЛУЧАТЕЛЬ&','ЗАО Селена');
FindAndlnsert('###ДОКУМЕНТ&','1');
FindAndlnsert('###ДАТА_ДОКУМЕНТА&',datetostr(date));
FindAndlnsert('###ПОКУПАТЕЛЬ&','ЗАО Селена');
FindAndlnsert('###АДРЕС_ПОКУПАТЕЛЯ&','г. Москва, ул. Комаровского 41');
FindAndlnsert('###ИНН_ПОКУПАТЕЛЯ&','0987654321');
// Если нашли текстовую константу, то переходим к формированию табличной
// части.
if FindRowColumnlnTable('###ТАЕЛИЦА&',table_,Row_,Column_)then begin
// Перед началом формирования курсор находится в таблице table_
// в ячейке Cell(Row_,Column_). Добавляем в таблицу необходимое
// количество строк, уменьшенное на 1 (поскольку одна строка
/ / в шаблоне уже есть).
W.Selection.InsertRows(2-1);
// Формируем первую строку табличной части документа.
table_.Cell(Row_,Column_+0).Range.Text:='KOVRIC TRIVEL RUG';
table_.Cell(Row_,Column_+1).Range.Text:='шт';
table_.Cell(Row_,Column_+2).Range.Text:='l';
table_.Cell(Row_,Column_+3).Range.Text:='342,00';
table_.Cell(Row_,Column_+4).Range.Text: = '342, 00' ;
table_.Cell(Row_,Column_+ 6).Range.Text: =' 2 0, 0 0 ';
table_. Cell (Row_, Coluntn_+7) .Range.Text: =' 68, 40 ' ;
table .Cell(Row_,Column +8).Range.Text:='41O,40';
// Формируем вторую строку табличной части документа.
Inc(Row_);
table_.Cell(Row_,Column_+0).Range.Text:=
'НИТЬ Climax Braided 100m 0,16mm';
table_.Cell(Row_,Column_+1).Range.Text:='шт';
table_.Cell(Row_,Column_+2).Range.Text: ='2' ;
table_.Cell(Row_,Column_+3).Range.Text: = '3O9, 08' ;
table_.Cell(Row_,Column_+4).Range.Text: ='618,16' ;
table_.Cell(Row_,Column_+6).Range.Text:='2O,00';
table_.Cell(Row_,Column_+7).Range.Text:='123,63';
table_.Cell(Row_,Column_+8).Range.Text: = '741, 79' ;
// Формируем подпись табличной части документа.
if FindRowColumnInTable('###MTOr&',table_,Row_,Column_)then begin
table_.Cell(Row_,Column_+0).Range.Text:='960,16';
table_.Cell(Row_,Column_+1).Range.Text: ='192, 03';
table_.Cell(Row_,Column_+2).Range.Text:='1152,19';
end;
end; // Заполняем текст в окончании документа.
FindAndlnsert('###ВСЕГО_К_ОПЛАТЕ&',
'Одна тысяча сто пятьдесят два рубля 19 копеек');
end;




Результат выполнения процедуры представлен на рис. 7.15.
Если доработать представленный фрагмент программы так, чтобы вносить
данные из таблицы базы данных, то разработчики Delphi смогут с успехом
использовать его в своих проектах не только для формирования счетов-
фактур.

РИС. 7.15. Сформированный бланк счета-фактуры
Как известно, документы Word наряду с текстом и таблицами могут содер-
жать рисунки, надписи, линии, геометрические фигуры и другие графиче-
ские объекты. Возможно, вы захотите украсить документ логотипом своей
фирмы. О том, как использовать эти возможности Word в программах
Delphi, читайте в следующей главе. Там же вы найдете информацию о том,
как подготовить документ для печати и выполнить печать.
Опубликовал Kest September 23 2009 10:58:40 · 1 Комментариев · 8437 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
! November 09 2011 17:31:18
Пасиба народ!smiley
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
XPmenu
Архив значков
Синтаксический ан...
Дешифратор содерж...
Report
Allsubmitter 4.7 ...
Domen Name IP
Голосование для ...
CwstatusBar
Панель случайной ...
База для Allsubmi...
BIOS
WebReg v1.3
SynEdit
PHP, MySQL и Drea...
Assistant
Delphix Sample [И...
Медиа комбайн
Task Shedule
EditNew

Топ загрузок
Приложение Клие... 100443
Delphi 7 Enterp... 85602
Converter AMR<-... 20065
GPSS World Stud... 12461
Borland C++Buil... 11524
Borland Delphi ... 8478
Turbo Pascal fo... 7020
Visual Studio 2... 4987
Калькулятор [Ис... 4722
FreeSMS v1.3.1 3533
Случайные статьи
Memory reference e...
метод DelOrders
Ваша цель — опреде...
Наследование конк...
Система оптимизаци...
Стандартные исключ...
Коррекция результа...
Программирование: ...
MixColumn
Размеры блока
Задачи
Хватит ли вам синт...
Ввод-вывод и драйв...
Результаты работы...
Моделирование случ...
Метаданные
Программа вычитает...
Язык С: алгоритмы ...
Неподвижная точка
Пересылка данных
Лазерный термоядер...
Что подразумевает ...
Адреса DNS-серверов
MATCH (СИНХРОНИЗИР...
Объяснение решения
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?