Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Вниз

Одинаковое значение свойств у всех Edit-ов   Найти похожие ветки 

 
Сергей М. ©   (2008-05-30 22:21) [40]


> Таблицу запихать туда и всё! А потом по ячейкам шагать


В сад.


 
nimble_   (2008-05-30 22:38) [41]

> В сад.
Хря! © Боря Моисеев

Да простит меня В. Корняков :)

procedure TForm1.Button11Click(Sender: TObject);
var table_:variant;
Row_,Column_:integer;
begin
// Создаеем новый документ по шаблону
W.documents.Add(ExtractFileDir(Application.ExeName)+"\Шаблон счета-фактуры.dot");

messagebox(handle,"Шаблон создан! Переходим к заполнению.","Внимание!",0);

// Подставляем тектс в заголовок документа
FindAndInsert("###НОМЕР&","1");
FindAndInsert("###Дата&",datetostr(date));
FindAndInsert("###ПРОДАВЕЦ&","ЗАО Сокол");
FindAndInsert("###АДРЕС_ПРОДАВЦА&","г. Санкт-Петербург, ул. Кузнечная 5");
FindAndInsert("###ИНН_ПРОДАВЦА&","1234567890");
FindAndInsert("###ГРУЗООТПРАВИТЕЛЬ&","ЗАО Сокол");
FindAndInsert("###ГРУЗОПОЛУЧАТЕЛЬ&","ЗАО Селена");
FindAndInsert("###ДОКУМЕНТ&","1");
FindAndInsert("###ДАТА_ДОКУМЕНТА&",datetostr(date));
FindAndInsert("###ПОКУПАТЕЛЬ&","ЗАО Селена");
FindAndInsert("###АДРЕС_ПОКУПАТЕЛЯ&","г. Москва, ул. Комаровского 41");
FindAndInsert("###ИНН_ПОКУПАТЕЛЯ&","0987654321");

// Если нашлли текстовую константу, то переходим к формированию табличной части
if FindRowColumnInTable("###ТАБЛИЦА&",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:="1";
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:="20,00";
table_.Cell(Row_,Column_+7).Range.Text:="68,40";
table_.Cell(Row_,Column_+8).Range.Text:="410,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:="309,08";
table_.Cell(Row_,Column_+4).Range.Text:="618,16";
table_.Cell(Row_,Column_+6).Range.Text:="20,00";
table_.Cell(Row_,Column_+7).Range.Text:="123,63";
table_.Cell(Row_,Column_+8).Range.Text:="741,79";

// Формируем подпись табличной части документа
if FindRowColumnInTable("###ИТОГ&",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;
// Заполняем текст в окончании документа
FindAndInsert("###ВСЕГО_К_ОПЛАТЕ&","Одна тысяча сто пятьдесят два  рубля 19 копеек");
end;

// Функция находит текстовую константу и подставляет на ее место текст
Function FindAndInsert(FindText,ReplacementText:string):boolean;
const wdReplaceAll=2;
begin
Form1.W.Selection.Find.Text:=FindText;
Form1.W.Selection.Find.Replacement.Text:=ReplacementText;
FindAndInsert:=Form1.W.Selection.Find.Execute(Replace:=wdReplaceAll);
End;

// Функция находит текстовую константу и возвращает таблицу, а также номер строки и столбца
// где находится эта константа
Function FindRowColumnInTable(FindText:string;var tab:variant; var Row,Column:integer):boolean;
begin
FindRowColumnInTable:=false;
try
Form1.W.Selection.Find.Text:=FindText;
if Form1.W.Selection.Find.Execute then begin
  Column:=Form1.W.Selection.Cells.Item(1).ColumnIndex;
  Row:=Form1.W.Selection.Cells.Item(1).RowIndex;
  tab:=Form1.W.Selection.Tables.Item(1);
  FindRowColumnInTable:=true;
end;
except
FindRowColumnInTable:=false;
end;
End;


 
nimble_   (2008-05-30 22:39) [42]

Вышибло:
 public
   { Public declarations }
 W:variant;
 end;


В юзисах ничего не надо делать.


 
Сергей М. ©   (2008-05-30 22:49) [43]


> nimble_   (30.05.08 22:38) [41]


Ну и к чему это "кодоблудие" ?)
И где здесь какие-то там "координаты" ? Особливо применительно к конкретному принт-дивайсу, которому не посчастливится это "кодоблудие" печатать ?


 
nimble_   (2008-05-30 22:58) [44]

> Ну и к чему это "кодоблудие" ?)
> И где здесь какие-то там "координаты" ?

Что теперь не так?

Вот что хотел автор:
Как вы поняли 23 едита это есть места для набора текста. на самом деле, надо не только "попасть" чтобы координаты на форме, соответствовали бы на бумажке. Код поучился достаточно большим, так как кроме "попадания",нужно ещё облегчить труд а не усложнять.
Там есть пару полей для ввода имен, всёго имен 15, это наши производители, я сделал так от 1-15  набираем и автоматически кэпшну присваивается соот. цифре имя, это ещё цветочки


Итак. что мы делаем?
1) Сканируем "бумажку" и забиваем изображение с пустыми полями в Word ЛИБО открываем в ворде документ-бумажку (электронный вариант).
2) Для скана: Поверх "нарисованных полей" натягиваем таблицу, либо "Надписи" (на панельке рисование). Для документа вообще ещё меньше работы, там уже есть готовые поля, где текст надо списывать (ну а если всё-таки их нет, то также натягиваем на них)
3) Забиваем в поля текст-шаьлон (например. в поле ФИО забиваем ###ФИО&)
4) Сохраняем документ
5) Открываем его в проге, программно забиваем поля нужными данными, сохраняем как, закрываем, открываем снова и т.д.

В итоге всю адскую работу выполняем за 5-10 минут (около 150-500 экземпляров)


 
Сергей М. ©   (2008-05-30 23:05) [45]


> nimble_   (30.05.08 22:58) [44]


Автор не говорил, что ему нужно "попасть в поля готового бланка".

А если и нужно, и тем более бланки на вес золота, то НИ В КОЕМ СЛУЧАЕ нельзя полагаться на предложенную тобой технологию.


 
nimble_   (2008-05-30 23:13) [46]

> то НИ В КОЕМ СЛУЧАЕ нельзя полагаться на предложенную тобой
> технологию.

Реально? Что самое интересное, этот способ помог мне выполнить титаническую работу.
Было штук 250 грамот. Уже с отпечатанными _____ (предназначались для ручного заполнения)
Мне нужно было написать ФИО, номинацию и ещё подпись поставить (в смысле не саму подпись, а только расшифровку подписи, буквами. Подпись ставилась вручную :)

Вот именно, что я растянул поверх этих полей объекты "Надпись" в ворде. Правда, на основе нескольких бланков пришлось вычислить среднее арифметическое расположение текста в строчке (вертикальное)

Забил фамилии в стринггрид, номинации туда же. Запустил программку. За 20 минут управился (с паузами, ибо страшновато было, что получится). В итоге, испортились только два бланка: один зажевал принтер, а на другом строчки были криво отпечатаны, и мой текст не вписался в них. Остальные 248 грамот успешно напечатались с первого раза!

Ну, грамоты запасные были, те две допечатали потом. Так что не знаю, можно или нет полагаться, но она РАБОТАЕТ


 
programmer90   (2008-05-30 23:21) [47]

procedure TForm1.Button11Click(Sender: TObject);
var table_:variant;
Row_,Column_:integer;
begin
// Создаеем новый документ по шаблону
W.documents.Add(ExtractFileDir(Application.ExeName)+"\Шаблон счета-фактуры.dot");

messagebox(handle,"Шаблон создан! Переходим к заполнению.","Внимание!",0);

// Подставляем тектс в заголовок документа
FindAndInsert("###НОМЕР&","1");
FindAndInsert("###Дата&",datetostr(date));
FindAndInsert("###ПРОДАВЕЦ&","ЗАО Сокол");
FindAndInsert("###АДРЕС_ПРОДАВЦА&","г. Санкт-Петербург, ул. Кузнечная 5");
FindAndInsert("###ИНН_ПРОДАВЦА&","1234567890");
FindAndInsert("###ГРУЗООТПРАВИТЕЛЬ&","ЗАО Сокол");
FindAndInsert("###ГРУЗОПОЛУЧАТЕЛЬ&","ЗАО Селена");
FindAndInsert("###ДОКУМЕНТ&","1");
FindAndInsert("###ДАТА_ДОКУМЕНТА&",datetostr(date));
FindAndInsert("###ПОКУПАТЕЛЬ&","ЗАО Селена");
FindAndInsert("###АДРЕС_ПОКУПАТЕЛЯ&","г. Москва, ул. Комаровского 41");
FindAndInsert("###ИНН_ПОКУПАТЕЛЯ&","0987654321");

// Если нашлли текстовую константу, то переходим к формированию табличной части
if FindRowColumnInTable("###ТАБЛИЦА&",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:="1";
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:="20,00";
table_.Cell(Row_,Column_+7).Range.Text:="68,40";
table_.Cell(Row_,Column_+8).Range.Text:="410,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:="309,08";
table_.Cell(Row_,Column_+4).Range.Text:="618,16";
table_.Cell(Row_,Column_+6).Range.Text:="20,00";
table_.Cell(Row_,Column_+7).Range.Text:="123,63";
table_.Cell(Row_,Column_+8).Range.Text:="741,79";

// Формируем подпись табличной части документа
if FindRowColumnInTable("###ИТОГ&",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;
// Заполняем текст в окончании документа
FindAndInsert("###ВСЕГО_К_ОПЛАТЕ&","Одна тысяча сто пятьдесят два  рубля 19 копеек");
end;

// Функция находит текстовую константу и подставляет на ее место текст
Function FindAndInsert(FindText,ReplacementText:string):boolean;
const wdReplaceAll=2;
begin
Form1.W.Selection.Find.Text:=FindText;
Form1.W.Selection.Find.Replacement.Text:=ReplacementText;
FindAndInsert:=Form1.W.Selection.Find.Execute(Replace:=wdReplaceAll);
End;

// Функция находит текстовую константу и возвращает таблицу, а также номер строки и столбца
// где находится эта константа
Function FindRowColumnInTable(FindText:string;var tab:variant; var Row,Column:integer):boolean;
begin
FindRowColumnInTable:=false;
try
Form1.W.Selection.Find.Text:=FindText;
if Form1.W.Selection.Find.Execute then begin
 Column:=Form1.W.Selection.Cells.Item(1).ColumnIndex;
 Row:=Form1.W.Selection.Cells.Item(1).RowIndex;
 tab:=Form1.W.Selection.Tables.Item(1);
 FindRowColumnInTable:=true;
end;
except
FindRowColumnInTable:=false;
end;
End;-nimble_   это  скопипейстил , а потом что?


 
Сергей М. ©   (2008-05-30 23:24) [48]


> скопипейстил , а потом что?



> nimble_   (30.05.08 23:13) [46]


Вот тебе и результат)


 
nimble_   (2008-05-30 23:32) [49]

> скопипейстил , а потом что?

Я нажимал F9)



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.043 c
15-1211204540
LightRipple
2008-05-19 17:42
2008.06.29
Блокировка логических дисков


2-1212319062
Kiril
2008-06-01 15:17
2008.06.29
Сколько пользователей "потянет" Delphi (ADO) + Access?


3-1201091924
homm
2008-01-23 15:38
2008.06.29
SQL. Надо обрезать символы пробельной группы


2-1212128719
snake-as
2008-05-30 10:25
2008.06.29
Работа с TreeView


2-1212146748
chargos
2008-05-30 15:25
2008.06.29
Обновление данных на форме





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский