Навигация
Главная
Поиск
Форум
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
Создание отчето... 64176
Модуль Forms 63889
Пример работы с... 60835
ТЕХНОЛОГИИ ДОСТ... 60766
Имитационное мо... 56301
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

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

Моделирование станции технического обслуживания на GPSS + Отчет
Компьютерный магазин на Turbo Pascal (База данных) + Пояснительная записка
База данных междугородних телефонных разговоров на Delphi

Реклама



Подписывайся на 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 Комментариев · 8520 Прочтений · Для печати

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


Комментарии
! 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...
Шаблон для новост...

Случайные загрузки
MxProtector
Х. М. Дейтел, П. ...
С# для профессион...
Разработка распре...
Tetris 2002
Flash MP3 Player ...
Microsoft SQL Ser...
Динамические за...
API (Применение A...
Программа предназ...
Мод "проверочный ...
Ehlib
Animation Effect ...
Text effect
C# в кратком изло...
FileFind
Borland Delphi 6....
StartMark
Самоучитель PHP 5...
Иллюстрированный ...

Топ загрузок
Приложение Клие... 100455
Delphi 7 Enterp... 86145
Converter AMR<-... 20071
GPSS World Stud... 12523
Borland C++Buil... 11611
Borland Delphi ... 8524
Turbo Pascal fo... 7035
Visual Studio 2... 4992
Калькулятор [Ис... 4744
FreeSMS v1.3.1 3539
Случайные статьи
Выполнение функции...
3.4. ДОПУСТИМЫЕ СП...
Создание и конфигу...
Взлом Хотмыла
Размеры динамическ...
Расширенный монито...
Настраиваемые инте...
Стремитесь к нетра...
Программная выписк...
обслуживания конкр...
От автора
Фирма Adobe
Закрепление материала
Perl и работа с со...
Указатель this
Процедуры и функции
Works
Аппаратура
TMemoryStream
Возможность подклю...
Акселерометры и ор...
Управление надстро...
Дырки в безопаснос...
Полезная информаци...
Этапы сборки
Статистика



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


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