Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laboratornye_raboty.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.27 Mб
Скачать

Практическая часть

На этом уроке мы поговорим о создании форм расхода продуктов на складе. Учет расхода также как и учет прихода  будет состоять из трех форм. В первой форме будем выводить номер накладной расхода, дату расхода и сумму расхода по накладной.

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

Ну и в третьей форме мы будем производить выбор продуктов для учета расхода.

Как вы видите, первые две формы учета расхода практически не отличаются от первых двух форм учета прихода за одним исключением из второй формы учета расхода убрано поле поставщик. Поэтому и создание этих форм чисто технически не отличается от создания форм прихода. Я например создал первые две формы простым копированием содержимого из форм прихода. Затем переименовал названия компонентов (точнее заменил  слово prihod в rashod_doc, а слово storage в rashod) и подключил одноименные таблицы. А затем написал процедуры обработки форм расхода аналогичные процедурам обработки форм прихода. Поэтому если вы разобрались с написанием форм прихода на предыдущих уроках, у вас не должно возникнуть проблем и с созданием первых двух форм расхода. А вот по созданию формы выбора продуктов расхода я немного поясню. Данная форма содержит: Фильтр по категории продуктов, который активируется по событию OnClick на компоненте CheckBox и выбору категории из выпадающего списка DBLookupComboBox,  подключенного к справочнику категория продуктов; Таблицу DBgrid подключенную к запросу ADOQuery_ostatki_copy (который является копией запроса ADOQuery_ostatki). В нее выводятся список остатков продуктов на складе;

Пять полей DBEdit подключенных к таблице rashod. При двойном клике на поле DBGridа данные из DBGrida (Продукт, единица измерения, средняя цена автоматически заносятся в соответствующие поля,  курсор устанавливается в поле количество). При нажатии кнопки ОК, данные заносятся в таблицу rashod базы данных после прохождения проверки корректности заполненных полей. При попытке ввести количество продуктов больше чем есть на складе, вызывается предупреждение. В случае отмены данные не сохраняются. Кроме того я добавил выделение зеленым цветом нулевых  и красным цветом отрицательных остатков. Так как это у нас уроки по базе данных, я предлагаю создать вам все три формы для учета расхода самостоятельно. Но вы всегда можете скачать готовый исходник к уроку и использовать его как шпаргалку. Если возникнут вопросы по созданию форм для данного урока, задавайте в комментариях, попробую помочь.

Вопросы для контроля

  1. Где найти компонент CheckBox и для чего он служит?

  2. Что такое DBLookupComboBox и для чего служит?

  3. Где найти компонент Table и для чего он служит?

  4. Где найти компонент Query и для чего он служит?

  5. Где найти компонент StoredProc и для чего он служит?

Литература

  1. Бобровский С.И. Delphi 7. Учебный курс. - СПб.: Питер, 2005.

  2. Кетков Ю.Л., Кетков А.Ю. Практика программирования: Visual Basic, C++ Builder, Delphi. - СПб.: БХВ - Петербург, 2005.

ЛАБОРАТОРНАЯ РАБОТА № 13

Тема: Создание модуля печати данных о приходе и расходе

Цель: Научиться создавать различные отчеты  в Excel из программ написанных на Delphi.

Оборудование и/или программное обеспечение: ПК, Delphi, Excel

Теоретическая часть

Здесь найдете информацию о том как: - Подключить и правильно отключить интерфейс Excel; - Как изменить размер, цвет и тип шрифта; - Как выделить, объединить, заполнить и размножить  диапазон ячеек; - Как повернуть и отцентрировать текст; - Как нарисовать границы ячеек; - Как ввести формулу в ячейку и многое другое... Работать будем через модуль ComObj, для этого в uses необходимо добавить модуль  ComObj и  модуль Excel_TLB (для MS Excel 2007). Uses ……, ComObj,  Excel_TLB; Модуль Excel_TLB содержит необходимые константы  для работы с Excel, его можно не подключать, но тогда придется в ручную прописывать значения всех используемых констант из этого модуля. Значения констант можно найти внутри модуля или в интернете, но для разных версий MS Excel они разные. Внимание!!!  Модуль Excel_TLB в других версиях MS Excel может называться по другому. Перед подключением модуля Excel_TLB, необходимо импортировать библиотеку Excel. Для этого выберите Component->Import Component->Import a Type Library-> находим MS Excel и следуем инструкциям.

В разделе описания переменных мы должны описать переменную типа Variant или OleVariant для подключения интерфейса Excel. Я описал переменную excel. var Form1: TForm1; excel: variant; // Переменная в которой создаётся объект EXCEL

Создание документа Внимание!!! Всегда когда создаете объект интерфейса, заключайте  процедуру создания в модуль обработки ошибок: try создаем интерфейс; формируем отчет; освобождаем интерфейс; Except обрабатываем ошибки; освобождаем интерфейс; end; Далее идет краткий справочник по основным функциям работы с EXCEL try // создаем обьект EXCEL excel := CreateOleObject('Excel.Application'); // Чтоб не задавал вопрос о сохранении документа excel.DisplayAlerts := false; // создаем новый документ рабочую книгу excel.WorkBooks.Add; // или загружаем его из директории с программой excel.WorkBooks.Open(GetCurrentDir() + '\отчет.xls'); { GetCurrentDir()- возвращает путь к директории с программой} // Делаем его видимым данную функцию после отладки и тестирования лучше использовать в конце, после сформирования отчета (это ускоряет процесс вывода данных в отчет) excel.Visible := true; //задаем тип формул в формате R1C1 excel.Application.ReferenceStyle := xlR1C1; // задаем тип формул в формате A1 excel.Application.ReferenceStyle := xlA1; // Задаем название первому и второму листу excel.WorkBooks[1].WorkSheets[1].Name := 'Отчет1'; excel.WorkBooks[1].WorkSheets[2].Name := 'Отчет2'; //задаем формат числа для первой и четвертой колонки формат числа excel.WorkBooks[1].WorkSheets[1].Columns[1].NumberFormat := '0,00'; excel.WorkBooks[1].WorkSheets[1].Columns[4].NumberFormat := '0,0'; // задаем ширину первой и второй колонки excel.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 10; excel.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 20; // задаем начертание, цвет, размер и тип шрифта для первого ряда excel.WorkBooks[1].WorkSheets[1].Rows[1].Font.Bold := True; //жирный excel.WorkBooks[1].WorkSheets[1].Rows[1].Font.Color := clRed;  // цвет красный excel.WorkBooks[1].WorkSheets[1].Rows[1].Font.Size := 12;  //размер 12 excel.WorkBooks[1].WorkSheets[1].Rows[1].Font.Name := 'Times New Roman';  //шрифт //присваиваем ячейке 1,4 и 2,4 значения (1 - ряд, 4 - колонка) excel.WorkBooks[1].WorkSheets[1].Cells[1, 4] := 'А так можно внести значение в ячейку'; excel.WorkBooks[1].WorkSheets[1].Cells[2, 4] := 'А так можно внести значение в ячейку'; //ввод в ячейку 'A12' формулы '=b5+c4' excel.WorkBooks[1].WorkSheets[1].Range['A12'].Formula:='=b5+c4'; // Выравнивам первый ряд по центру по вертикали excel.WorkBooks[1].WorkSheets[1].Rows[1].VerticalAlignment := xlCenter; // Выравнивам первый ряд по центру по горизонтали excel.WorkBooks[1].WorkSheets[1].Rows[1].HorizontalAlignment := xlCenter; // Выравнивам в ячейке по левому краю excel.WorkBooks[1].WorkSheets[1].Cells[3, 2].HorizontalAlignment := xlLeft; // Выравнивам в ячейке по правому краю excel.WorkBooks[1].WorkSheets[1].Cells[3, 4].HorizontalAlignment := xlRight; // Обьединяем ячейки 'A1:A8' excel.WorkBooks[1].WorkSheets[1].Range['A1:A8'].Merge; // Поворачиваем слова под углом 90 градусов для второго ряда excel.WorkBooks[1].WorkSheets[1].Rows[2].Orientation := 90; // Поворачиваем слова под углом 45 градусов для диапазона ячеек 'B3:D3' excel.WorkBooks[1].WorkSheets[1].Range['B3:D3'].Orientation := 45; //рисуем границы  выделенного диапазона левая excel.Selection.Borders[xlEdgeLeft].LineStyle := xlContinuous; // стиль линии сплошная excel.Selection.Borders[xlEdgeLeft].Weight := xlMedium;// толщина линии //рисуем границы  выделенного диапазона верхняя excel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous; excel.Selection.Borders[xlEdgeTop].Weight := xlMedium; //рисуем границы  выделенного диапазона нижняя excel.Selection.Borders[xlEdgeBottom].LineStyle := xlContinuous; excel.Selection.Borders[xlEdgeBottom].Weight := xlMedium; //рисуем границы  выделенного диапазона правая excel.Selection.Borders[xlEdgeRight].LineStyle := xlContinuous; excel.Selection.Borders[xlEdgeRight].Weight := xlMedium; //рисуем границы  выделенного диапазона вертикальные внутрениие excel.Selection.Borders[xlInsideVertical].LineStyle := xlContinuous; excel.Selection.Borders[xlInsideVertical].Weight := xlMedium; //рисуем границы  выделенного диапазона горизонтальные внутрениие excel.Selection.Borders[xlInsideHorizontal].LineStyle := xlContinuous; excel.Selection.Borders[xlInsideHorizontal].Weight := xlMedium; //автозаполнение выделенного диапазона //для примера заполним область ячеек 'A10:C10' словом 'привет' //и размножим его вниз еще на пять ячеек 'A10:C15' excel.WorkBooks[1].WorkSheets[1].Range['A10:C10'].Value:='привет'; //выделяем диапазон ячеек 'A10:C10' excel.WorkBooks[1].WorkSheets[1].Range['A10:C10'].Select; //автозаполняем (копируем) выделенным диапазоном область ячеек 'A10:C15' excel.selection.autofill(excel.WorkBooks[1].WorkSheets[1].Range['A10:C15'],xlFillDefault); //отключаем предупреждения, чтобы не задавал вопросов о сохранении и других excel.DisplayAlerts := False;  //сохраняем документ в формате Excel 97-2003  excel.ActiveWorkBook.Saveas(GetCurrentDir() + '\отчет.xls',xlExcel8);  //сохраняем документ в текущем формате Excel 2007  excel.ActiveWorkBook.Saveas(GetCurrentDir() + '\отчет.xlsx'); //закроем все книги excel.Workbooks.Close; //закрываем Excel excel.Application.quit; //освобождаем интерфейсы excel := Unassigned; Except //обрабатываем ошибки showmessage('Внимание! Произошла ошибка при создании MS Excel приложения'); //закроем все книги excel.Workbooks.Close; //закрываем Excel excel.Application.quit; //освобождаем интерфейсы excel := Unassigned; end; end; При работе с листом Excel мы можем использовать следующие варианты: - работать с областью Range['B3:D3']; - работать с ячейкой Cells[2, 4] где 2 - ряд, 4 - колонка; - работать с рядами Rows[1] или с диапазоном рядов Rows['1:5']; - работать с колонками Columns[1] или диапазоном колонок Columns['A:I']; Range['A1'] и Cells[1, 1] обозначают одно и тоже. После сформирования документа или возникновении ошибки вы должны правильно освободить интерфейсы. Иначе при закрытии Excel он скрывается с экрана, но если открыть диспетчер задач он продолжает там висеть и если данный процесс не завершить , то при каждом новом запуске их будет накапливаться больше и больше, пока компьютер не начнет виснуть. Поэтому обязательно необходимо освобождать все интерфейсы с вязанные с Excel с его книгами и листами. Например так: //закроем все книги excel.Workbooks.Close; //закрываем Excel excel.Application.quit; //освобождаем интерфейсы sheet:=Unassigned; //интерфейс листа если он был создан WorkBook := Unassigned;//интерфейс рабочей книги если он был создан excel := Unassigned;//интерфейс самого предложения если он был создан end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]