Программирование - это просто
Advertisement
Главная arrow Уроки Delphi arrow Delphi - это просто! arrow Delphi - это просто. Урок 8.11.2:  Программируем печать накладных. Часть 2. (where, SQL, TTable)
19.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Delphi - это просто. Урок 8.11.2:  Программируем печать накладных. Часть 2. (where, SQL, TTable) Печать E-mail
Автор megabax   
07.09.2010 г.
Базы данных

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

 Часть 2. Редактирование накладной (where, SQL, TTable, TQuery, TDBLabel, TDBEdit).

Исходники к уроку вы можете скачать здесь.

Мы уже написали журнал накладных. Пока он отображает только список накладных, введенных в качестве демо примера. Сегодня мы начнем писать механизм редактирования этих документов. И так, снова войдем в Database Desctop, и создадим таблицу "Tableparts" вот с такой структурой*:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

Прежде чем мы сделаем еще один тестовый пример, я расскажу о назначении полей:

  • Doc - номер документа из таблицы Docs (поле ID).
  • Ware - код товара из таблицы wares (поле ID).
  • Quantity - количество товара.
  • Price - цена товара в накладной.
  • Summ - стоимость товара в накладной.

А вот теперь наберем тестовый пример*:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

Следующий шаг - создаем форму редактирования документа. Если забыли как создавать новую форму, напомню: меню "File" -> "New" -> "Form"*

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

Сохраним созданный файл под именем DOCUnit, форму назовем TfrmDoc. Положим на форму компонент TQuery (tbHeap) и TTable (qTab), два TDataSource (dsHeap и dsTab), так же положим компонент TDBGrid, который назовем dbgTabl. Еще нам понадобиться объект типа TDBLabel (lbdbDocNum) и  TDBEdit (lbEdDate), их  можно найти на закладке Data control*:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

кроме того, для того что бы сделать поясняющие надписи, добавим к форме два  обычных TLabel. Затем еще добавим две кнопочки TBitBtn: Ok и Cancel. Вот что в итоге должно получиться*:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

Изменить цвет и размер шрифта метки (в том числе и TDBLabel) можно через Object Inspector, свойство Font*:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

При этом откроется такой диалог*:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

Теперь займемся связыванием компонентов. tbHeap свяжем с dsHeap, установив у последнего свойство DataSet в tbHeap*:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

К метки lbdbDocNum и поля ввода базы данных lbEdDate свойство DataSource делаем равным dsHeap. Так же свяжем dsTab, qTab и dbgTabl. Теперь заполним значение свойства SQL объекта qTab:

select
    wares.name as name,
    tablparts.QUANTITY as QUANTITY,
    tablparts.Price as Price,
    tablparts.Summ as Summ
from tablparts as tablparts
   left join wares as wares on tablparts.ware=wares.id
where tablparts.doc=#docid#

На этот раз у компонента TQuery (qTab) свойство Active мы оставляем false, так как запрос еще не до конца сформирован, мы его будем доформировывать программно. Точно так же оставляем active=false у tbHeap.

Данный запрос выбирает строки из таблицы tablparts, присоединяет к ней таблицу товаров по связке полей ware <--> id. Для отбора строк, соответствующих заданному документу используется конструкция:

where tablparts.doc=#docid#

где #docid# программно заменятся на номер открываемого документа, например:

where tablparts.doc=1

Теперь напишем у класса формы TfrmDoc публичный метод OpenDoc:

function TfrmDoc.OpenDoc(Docid:integer):integer;
begin
    qTab.SQL.Text:=StringReplace(qTab.SQL.Text,'#docid#',IntToStr(Docid),[rfReplaceAll]);
    qTab.Active:=true;
    tbHeap.Filter:='id='+IntToStr(Docid);
    tbHeap.Filtered:=true;
    tbHeap.Active:=true;
    lbdbDocNum.DataField:='ID';
    lbEdDate.DataField:='DocDate';
    result:=ShowModal;
end;

строкой

qTab.SQL.Text:=StringReplace(qTab.SQL.Text,'#docid#',IntToStr(Docid),[rfReplaceAll]);

мы как раз делаем замену #docid# на номер выбранного документа. После этого компонент TQuery можно сделать активным.

Затем мы устанавливаем фильтр у TTable:

    tbHeap.Filter:='id='+IntToStr(Docid);
    tbHeap.Filtered:=true;
    tbHeap.Active:=true;
 

Ну, и наконец устанавливаем имена полей у метки и поля ввода (TDBLabel и TDBEdit):

   lbdbDocNum.DataField:='ID';
    lbEdDate.DataField:='DocDate';

последняя строка у нас запускает окно редактирования документа в модальном режиме:

result:=ShowModal;


Теперь нам еще нужно сохранить изменения в журнале документов, если пользователь изменил дату документа и нажал ОК. Для этого реализуем обработчик OnClick кнопочки OK:

procedure TfrmDoc.btnOkClick(Sender: TObject);
begin
     tbHeap.Post;
end;

Метод Post класса TTable сохраняет изменения в базу данных.

Ну, и наконец, последний штрих: кнопочка "Редактировать" в журнале документов. И так, открываем форму frmDocs*:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

И кладем на форму еще одну кнопочку и обзываем ее btnEdit*:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

Пишем обработчик OnCliek:

procedure TfrmDocs.btnEditClick(Sender: TObject);
var frm:TfrmDoc; id:integer;
begin
    id:=qDocs.FieldByName('DocNum').Value;
    frm:=TfrmDoc.Create(self);
    if frm.OpenDoc(id)=mrOK then
    begin
       qDocs.Active:=false;
       qDocs.Active:=true;
    end;
end;

Что делает наша процедура? Получаем текущее значение номера документа:

id:=qDocs.FieldByName('DocNum').Value;

Затем создаем форму и вызываем у нее написанный нами ранее метод OpenDoc, в качестве параметра передав ему полученный номер документа.

Все, запускаем программу на тестирование:

Delphi - это просто. Урок 8.11.2:  Программируем печать накладных.

Мы написали форму редактирования документов. На следующем уроке мы доведем ее "до ума":  добавим поле для выбора склада, реализуем возможность менять строки, русифицируем заголовки. В дальнейшем научим нашу программу печатать накладные через систему компонентов Free report.

Исходники к уроку вы можете скачать здесь.


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями  в соответствии со ст. 1274 ГК РФ программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation, (a Micro Focus Company). 


 

 

Последнее обновление ( 06.11.2011 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги