Delphi - это просто. Урок 8.11.4: Программируем печать накладных. Часть 4. Редактируем стр. накл. |
Автор megabax | |||||||||||||||||||||||||||||||||||||||
17.01.2011 г. | |||||||||||||||||||||||||||||||||||||||
Delphi - это просто. Урок 8.11.4: Программируем печать накладных.Часть 4. Редактируем строку накладной (SQL-запрос, фильтр).Исходники к уроку вы можете скачать здесь. Сегодня мы добавим в нашу программу складского учета модуль редактирования табличной части накладной. Сам процесс редактирования у нас будет происходить следующим образом: пользователь встает на нужную строчку и нажимает кнопочку "Редактировать". После этого у него открывается окно, где он может выбрать товар, цену и количество, а сумма посчитается сама. Откроем проект, который мы создали на предыдущем уроке (там же есть ссылка на скачивание исходников). Создаем в нем новую форму*: Сохраним модуль созданной формы под именем RowDocEdit, а саму форму назовем frmRowDocEdit. Сразу же подключим к этому модулю StoreTypes, так как нам потребуется объявленные в нем типы для перевода английский названий полей в русские:
Теперь накидаем на форму компонентов согласно приведенной ниже таблицы:
Добавим кнопочки и метки*: Кнопочки мы назовем btnOK и btnCancel. Теперь займемся реализацией класса окна. В секцию Public добавим следующее:
Реализуем процедуру SetupFilter:
В ней мы устанавливаем фильтр см. урок 8.8 "Использование фильтрации записей в компонентах TTable и TQuery (TPanel, Filter)", для того, что бы было легче искать в списке нужный товар. Для организации открытия списка товаров реализуем функцию OpenRow:
В этой процедуре, как вы уже поняли, мы открываем таблицу товаров и устанавливаем у нее колонки с русскими заголовками. Обратите внимание на строку:
Заметили новое слово Locate? Это процедура, которая осуществляет поиск по ключу. В данном случае по коду товара. Таким образом, при открытии формы тот товар, который в данный момент хранится в редактируемой строке, будет автоматически выбран. При клике на строке таблицы товаров нам надо установить цену в поле редактирования цены (Событие OnCellClick):
Так же нам надо устанавливать фильтр каждый раз, когда пользователь изменяет флажок фильтрации или сам фильтр, а посему, создадим соответсвующие обработчики событий у флажка и поля фильтрации.
С формой редактирования строки закончили. Теперь перейдем к модулю DocUnit (форма frmDoc). Перво наперво, нам надо подключить к нему созданный нами модуль RowDocEdit и добавить кнопочку "Редактировать" (btnEdit)* Еще нам надо добавить сюда таблицу (TTable) с именем tbTabl, она будет служить у нас для того, что бы записать результаты редактирования строк табличной части накладной. Связанная с этим компонентом таблица - "Tablparts.db" Поехали дальше. В таблицу Tablparts.db добавим поле ID с типов Autoincrement. Это можно сделать, например, при помощи программы Database Desctop см. Delphi. Урок 8.1. Программирование баз данных в Delphi 7 (Database Desktop, компоненты):* Изменим SQL-запрос в qTab:
В нем добавились поля WareId - код товара и Id - уникальный код строки. Первый нужен для того, что бы при открытии таблицы товаров стразу же позиционироваться на нужную строку (на тот товар, который у нас уже выбран), а уникальный номер строки что бы потом после редактирования мы могли изменить в базе именно эту, а не какую то другую строку. Теперь у нас на очереди реализация функции открытия формы редактирования строки:
Как и во всех аналогичных случаях, сначала мы создаем форму, затем устанавливаем ее реквизиты, после этого открываем форму в модальном режиме. Если редактирование завершилось нажатием кнопки "ОК", то перезаписываем строку в базе данных. Для этого устанавливаем фильтр по Id, так как Id уникальный то это будет одна единственная строка, которую мы открываем на редактирование методом Edit, устанавливаем поля и подтверждаем изменения командой Post. Затем закрываем и снова открываем запрос qTab, что бы обновить на экране таблицу строк накладной. А да, там еще есть такая процедура как SetupColumns - она переводить имена колонок на русский язык и скрывает лишние колонки. Ее надо вызывать каждый раз при обновлении запроса, а так же при первом открытии, поэтому нам еще придется переделать процедуру TfrmDoc.OpenDoc:
а теперь, последний штрих - SetupColumns собственной персоной:
Да, и не забудьте объявить этот метод в секции private класса TfrmDoc:
Все, теперь можно тестировать нашу программу: А вот так работает фильтр: Исходники к уроку вы можете скачать здесь.
Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями в соответствии со ст. 1274 ГК РФ программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation").
|
|||||||||||||||||||||||||||||||||||||||
Последнее обновление ( 06.11.2011 г. ) |
« След. | Пред. » |
---|