Програмное обеспечение

Руководство программиста
  1. Програмном обеспечении (подсистема "Производство")
  2. Назначение програмного обеспечения
  3. Технология разработки ПО
  4. Установка програмного обеспечения
  5. Расположение исходных текстов ПО и дистрибутивов в директориях
  6. Работа с проектом
  7. Порядок выполнения программ при запуске приложения
  8. Интерфейс приложения
  9. Дерево типовых программных классов
  10. Создание форм на основе дерева классов
  11. Создание контрольно-технических (параметрических) отчетов

 

 

1. Программном обеспечении (подсистема "Производство")

1.1. Программное обеспечение подсистемы “Производство” корпоративной компьютерной системы “Русский Сахар” разработано собственным коллективом программистов на Visual FoxPro 5.0. Внимательное изучение Российского опыта (в т.ч. и опыта реальной работы с ведущими зарубежными системами SAP R/3, SunSystems, Scala, Platinum) показало, что стандартных решений, которые мы могли бы прямо использовать у себя, нет. Комплексная настройка такой системы (во многих случаях это фактически разработка новых модулей) технически сложна и дорога.

1.2. При ведении данного внутрифирменного програмного продукта документально оформляются все этапы создания програмного обеспечения. На данном этапе подсистема более года находится в опытной эксплуатации, в ходе которой было внесено более 1000 доработок и исправлений, перечень которых приведен в приложении 2. Эти исправления в основном связаны с учётом неочевидных вначале деталей бизнес - процессов “Русского Сахара” и с добавлением полезных дополнительных возможностей. Степень отлаженности и завершённости созданных программ позволяет перейти к их промышленной эксплуатации.

1.3. Постоянная доработка програмного обеспечения в процессе опытной эксплуатацией позволило не только систематизировать детали бизнес процессов фирмы “Русский сахар”, но и постоянно уточнять сами решаемые подсистемой задачи. Эксплуатация програмного обеспечения еще в процессе создания позволило раньше начать окупать затраты. Так как программы тестировались администраторами баз данных и пользователями на реальных данных в реальных условиях применения, исключается несоответствие результата разработки действительным условиям работы. Все проектные решения постоянно документировались вначале в виде рабочих материалов, а затем в виде окончательных документов.

1.4. ***. С разработкой специального програмного обеспечения, отражающего специфику бизнеса, связана опасность стать заложником такой фирмы поставщика программных средств. После создания и ввода в эксплуатацию прикладная программная система становится неотъемлемой частью повседневной коммерческой работы, что, например, позволяет поставщикам программных средств требовать завышенной оплаты своих услуг по сопровождению и развитию системы. Разработка специальных программных средств управленческого учета, отражающих содержательную сторону коммерческой деятельности фирмы требует осмысления и аккумулирования в программном продукте заметной части “Ноу-Хау” сотрудников фирмы. Это способствует обобществлению знаний о корпоративном бизнесе, систематическому накоплению их в формальном виде. Но в случае выполнения работ внешними исполнителями происходит передача этих ценных знаний фирме - разработчику специальных программных средств и создаются условия для тиражирования их в среде конкурентов.

 

 

2. Назначение програмного обеспечения

Комплекс программ “Производство” корпоративной компьютерной системы “Русский Сахар” служит для обеспечения эффективной работы с базами данных операторов, менеджеров и администраторов баз данных фирм холдинга “Русский Сахар”. Комплекс программ обеспечивающий работу пользователей, включает следующие функции:

  1. удобный ввод информации о деятельности фирм холдинга, разбитый на типовые операции ввода данных;
  2. получение оперативно-аналитических отчетов, предоставляемых руководству, содержащих сводную информацию по деятельности фирм холдинга;
  3. получение контрольно-технических отчетов, предназначенных для контроля за правильностью ведения информации;
  4. необходимую защиту данных;
  5. резервное копирование данных.

 

 

3. Технология разработки ПО

Для создания программного обеспечения, включающего системы управления базами данных, был использован продукт фирмы Microsoft “Visual FoxPro 5.0”. Система управления состоит из исполняемых программных модулей - файлов с расширением exe. Один программный модуль соответствует одному рабочему месту. Такой файл можно получить компилированием файла контейнера проекта с подключенными к нему файлами исходных текстов. Виды используемых файлов исходных текстов, подключаемых к файлу проекта, приведены в таб. 1.

Файл исходного текста
Формат
Файл
Кол-во файлов
Редакти-руемый файл
Подключа-емый файл
Отчет

внутренний FoxPro

таблица FoxPro

2
frx, frt
frx, frt
Форма

внутренний FoxPro

таблица FoxPro

2
scx, sct
scx, sct
Классы

внутренний FoxPro

таблица FoxPro

2
vcx, vct
vcx, vct
Программы

текст на языке FoxPro

текст

2
prg
fxp
Меню

внутренний FoxPro

таблица FoxPro

4
mnx, mnt
mpx
Рисунки и иконки

рисунок bmp, иконка ico

рисунок bmp, иконка ico

1
bmp
bmp

Таб. 1.

 

 

4. Установка програмного обеспечения

4.1. Для установки исходных текстов програмного обеспечения. на компьютер разработчика необходим компакт-диск с исходными текстами системы управления и лицензионная версия программы Microsoft Visual FoxPro 5.0. На компьютере должна быть установлена операционная система Windows версии не ниже 95. Предварительно следует установить шрифты из поддиректории ********\*****\******\** или ********\*****\******\** сервера в зависимости от версии операционной системы.

В начале надо установить программу Microsoft Visual FoxPro 5.0. Потом скопировать поддиректорию ******** директории ******* с компакт-диска на локальный диск компьютера. Полученная таким образом директория станет основной директорией проекта.

Перед началом работы с проектом следует у всех файлов основной директории и поддиректорий снять статус “только для чтения”.

4.2. Для установки програмного обеспечения на компьютер (рабочую станцию) пользователя на нем предварительно должна быть установлена операционная система Windows версии не ниже 95 с доступом к корпоративной локальной компьютерной сети. Перед установкой рабочего места необходимо разрешить доступ с рабочей станции на чтение-запись к директории ******** диска *** сервера ***. На рабочей станции диск *** должен иметь название *:.

В начале следует установить библиотеки времени выполнения для Microsoft Visual FoxPro 5.0. Для этого следует запустить программу Setup из поддиректории *:\********\********. После выполнения установки библиотек следует удалить временную директорию *:\********, которую создала программа Setup на локальном диске.

На рабочем столе Windows следует установить ярлык нужного рабочего места со ссылкой на исполняемый файл в директории *:\********. В свойствах ярлыка следует указать “Развернутое во весь экран”.

 

 

5. Расположение исходных текстов ПО и дистрибутивов в директориях.

Исходные тексты располагаются на локальном диске разработчика (обычно C:) в поддиректориях внутри основной директории разработчика - Sugain01. Также в поддиректориях хранятся вспомогательные таблицы и файлы. Разработчик тестирует разрабатываемую подсистему, используя копии реальной базы данных. Копия базы данных и получаемые компилированием исполняемые файлы рабочих мест располагаются в основной директории разработчика. Список поддиректорий расположенных внутри основной директории приведен в таб. 2. Дерево основной директории разработчика изображено на рис. 1.

директории програмного обеспечения

Рис. 1. Структура основного каталога разработчика задачи. РАЗВЕРНУТЬ РИСУНОК

 

Директория
Назначение
Исход-ные тексты
Вспомога-тельные файлы
****** Оригиналы вспомогательных файлов системы управления предназначенные для копирования  
+
**** Коды программ
+
 
***** Экспериментальное изучение возможностей использования накопленной информации или возможностей среды FoxPro    
***** Формы ввода, формы настройки отчетов
+
 
**** Библиотеки классов
+
 
******** Рабочее место менеджера ********* отдела
+
+
***** Рисунки, дополнительные файлы  
+
****** Маски отчетов
+
+
******** Рабочее место администратора баз данных
+
+
******** Рабочее место ************** отдела
+
+
******** Рабочее место ***************** отдела
+
+
******** Рабочее место ************* отдела
+
+
***** Вспомогательные файлы  
+

Таб. 2.

 

 

6. Работа с проектом.

Часть программ и форм, подключенных к файлу-контейнеру проекта, являются специальными инструментами разработчика. Они используются для нужд разработчика, например для настроек среды FoxPro, планирования проекта или для экспериментов по изучению возможностей использования накопленной в базах данных информации. В контейнере проекта такие файлы помечены значком f, и при компилировании к исполняемому модулю рабочего места такие файлы подключены не будут. К таким файлам относятся программ config1, config_debug.

Config1 - Основная рабочая настроечная программа. Config1 настраивает среду FoxPro и среду проекта. Эту программу следует запускать при каждом открытии проекта или запуске среды FoxPro. При первом ее запуске будут настроены все пути к директориям, используемым файлом проекта. После этого проект в среде FoxPro будет закрыт и его надо будет запустить еще раз. Затем следует запустить программу config1 повторно. При этом будут настроены прочие параметры среды и проекта. После завершения настройки надо сохранить параметры FoxPro как параметры по умолчанию, тогда при последующих запусках проекта не потребуется запускать программу config1 дважды.

Config_debug - устанавливает для среды проекта отладочный режим. В этом режиме разработчик при запуске различных модулей проекта (форм, программ) сможет получать дополнительные сообщения и информацию полезную для отладки программ. Например, в качестве стандарта в программах и формах введен порядок закрытия промежуточных курсоров при помощи специальной процедуры close_cursor(). При нормальном режиме эта процедура закрывает указанную открытую таблицу или курсор. В отладочном режиме процедура выдает сообщение о закрытии курсора, но сам курсор не закрывает, и после завершения работы с модулем разработчик может просмотреть полученные при работе промежуточные данные в незакрытых курсорах.

 

 

7. Порядок выполнения программ при запуске приложения.

7.1. При запуске откомпилированного файла системы управления с рабочего места оператора, управление прежде всего передается программе main. Эта программа является головной программой проекта. В окне проекта ее наименование выделено жирным шрифтом. Программа main обеспечивает выполнение следующей последовательности действий:

7.2. Головная программа запускает меню модуля рабочего места. Каждое рабочее место имеет свое меню. Оно располагается в директории рабочего места. Эта директория имеет название Su_AAAAA, где AAAAA - код модуля подсистемы. Соответствие кода и подсистемы определяется таблицей cura_con основной базы данных.

Код
Рабочее место
- фрагмент вырезан
- -
- -
- -
- -
- -

Таб. 3. Распечатка данных из таблицы cura_con базы данных.

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

7.3. Настройка окна рабочего места начинается с вывода в заголовок окна названия модуля подсистемы (например для модуля "Производство" - ""Русский Сахар" Оперативный учет производственных операций"). После выполнения этой команды управление передается подпрограмме config.

Для того, чтобы пользователь имел возможность закрыть приложение, подпрограмма config настраивает событие, происходящее при нажатии кнопки C в правом верхнем углу окна приложения.

7.4. Подпрограмма config осуществляет настройку среды FoxPro. Она настраивает текущую и рабочие директории, режимы работы команд FoxPro с данными, стандартный вид даты, времени, денежных единиц, определяет порядок сортировки согласно русскому алфавиту.

7.5. Программа config подключает базовые процедуры и функции из файлов ProcMain - основные процедуры и функции общего пользования и ProcFilt - функции создания фильтров. Список базовых процедур и функций приведен в табл. 4.

Файл prg
Процедура Функция
Краткое описание
ProcMain SessiSet

Установки для новой сессии данных открываемой для каждой формы ввода данных

DatePer

Номер периода по дате

Variabl

Загрузка и сохранение глобальных переменных и настроек системы управления

For_Developer

Информационное сообщение под грифом "ОБРАТИТЕСЬ К РАЗРАБОТЧИКУ"

For_Admin

Информационное сообщение под грифом "АДМИНИСТРАТОРУ"

From_Developer

Информационное сообщение под грифом "СООБЩЕНИЕ РАЗРАБОТЧИКА"

From_BD

Информационное сообщение под грифом "СООБЩЕНИЕ БАЗЫ ДАННЫХ"

From_Sys

Информационное сообщение под грифом "СООБЩЕНИЕ СИСТЕМЫ УПРАВЛЕНИЯ"

Stop_Sys

Запрещающее сообщение под грифом "СООБЩЕНИЕ СИСТЕМЫ УПРАВЛЕНИЯ"

Stop_BD

Запрещающее сообщение под грифом "СООБЩЕНИЕ БАЗЫ ДАННЫХ"

Call_To_Admin

Информационное сообщение под грифом "ОБРАТИТЕСЬ К АДМИНИСТРАТОРУ"

Yes_No_Sys

Сообщение с вопросом под грифом "СООБЩЕНИЕ СИСТЕМЫ УПРАВЛЕНИЯ"

Copy_File

Проверка наличия файла и его копирование

Suppl_Dir_Controle

Контроль наличия вспомогательной директории на компьютере пользователя и входящих в нее вспомогательных фалов

Err_Analis

Анализ ожидаемых ошибок не связанных с нарушением работы системы управления

Wait_Mess

Вывод сообщения при ожидании

Wait_Mess_Clear

Окончание ожидания выполнения операций с данными - закрытие сообщения ожидания

Close_Cursor

Закрытие курсора или таблицы

Debug_Mess

Сообщение в отладочном режиме

Cut_Legal_Form

Обрезание в юридическом названии фирмы юридической формы - при этом остается только само название фирмы (для отчетов)

Use_Exclusiv

Попытка открытия многопользовательской таблицы в режиме исключительного доступа

Fam_I_O

Получение строки "Фамилия И.О." из фамилии, имени и отчества

Begin_End_Memo

Строка содежащая первую и последнюю строчку мемо поля

Word_End

Формирование окончания для слов в сочетанием с количественным числительным

Nul_Cut

Обрезание в числовой строке лишних нулей спереди и сзади

Del_Space

Удаление лишних пробелов внутри строки

ProcFilt Alltrim_Filter

Обрезание лишних разделителей слева и справа списка фильтра

Quantity

Количество элементов в списке фильтра

Sub_List

Вычитание списков фильтра

Len_El_1_List

Определение длинны первого элемента в списке фильтра

El_1_List

Первый элемент в списке фильтра

Sub_El_1

Список фильтра без первого элемента

Cond_Cond

Соединение двух условий фильтра

Txt_Cond

Создание условия фильтра сравнения с текстовой строкой

Txt_Cond1

То же, но с учетом длинны строки

Cond_St

Создание любого условия фильтра

BCond_Bcond

Объединение двух фильтров

Date_Cond

Создание условия фильтра - сравнение с датой

Date_Diapason

Создания условия фильтра по диапазону дат

DTOC_

Перевод даты в формат для условия фильтра

String_List

Создание строки фильтра по таблице

Mix_List

Создание строки фильтра по таблице из двух полей

Colon1_List

Выделение из двухколончатой строки списка первой колонки

FilSet

Суммарный фильтр из двух строк (для совместимости с предыдущими версиями)

LocSet

Поиск первой записи по условию из двух строк (для совместимости с предыдущими версиями)

Таб. 4. Основные процедуры и функции.

7.6. Подпрограмма config подключает базовые библиотеки классов интерфейса. Подключается библиотека sup_tm, которая содержит набор классов форм, представляющих собой стандартные инструменты используемые в формах ввода и в формах настройки отчетов. Список классов библиотеки sup_tm приведен в таб. 5.

Название класса
Назначение класса

Expert_Openion

Форма настройки одного параметра. Название параметра и его наименование передаются в форму при ее вызове

FiltForm

Форма стандартного фильтра. Список полей форма берет из таблицы FieldNam

GridForm

Стандартная форма просмотра таблицы в виде списка. Список выводимых полей настраивается в вызывающей форме в виде свойств

More_Info_Redact

Форма редактирование дополнительных текстовых неразмерных мемо полей. Название поля и его наименование передаются при вызове

Таб. 5. Классы универсальной библиотеки sup_tm.

7.7. Для настройки рабочего места подпрограмма config передает управление индивидуальной подпрограмме настройки рабочего места work_sta, которая хранится в директории рабочего места. Подпрограмма work_sta присваивает переменной JOBPLA код рабочего места. В последствии, во время работы приложения, в соответствии со значением этой переменной одни и те же формы и подпрограммы могут работать по-разному для разных рабочих мест.

Далее подпрограмма work_sta подключает индивидуальные подпрограммы и библиотеки классов рабочего места, после чего возвращает управление подпрограмме config.

7.8. Затем подпрограмма config загружает переменные обращаясь к процедуре variabl с параметром "Load". Процедура variabl в зависимости от параметра осуществляет загрузку или сохранение глобальных переменных и настроек. Список переменных и их значений хранится в таблице Config. Отчет системы управления о настройках, доступных администратору баз данных для изменения, приведен на рис. 2,3. Подпрограмма variabl загружает в начале общие переменные по коду "SESSI", а затем переменные рабочего места по коду рабочего места из переменной JOBPLA.

отчет о настройках

Рис. 2,3. Отчет програмного обеспечения о настроечных параметрах.

7.9. Для проверки наличия вспомогательных файлов подпрограмма config обращается к процедуре suppl_dir_controle. Процедура проверяет наличие вспомогательной директории C:\Suga_Sup на локальном диске пользователя, и, в случае отсутствия, создает ее. Далее процедура suppl_dir_controle проверяет наличие файлов вспомогательных таблиц по списку в таблице Copy_Fil для текущего рабочего места в соответствии с его кодом. В случае отсутствия какого-либо из файлов в директории, программа копирует его во вспомогательную директорию из поддиректории C_Suppl основной директории.

После выполнения проверки вспомогательных файлов подпрограмма config возвращает управление программе main.

7.10. После выполнения всех настроек среды FoxPro и рабочего места программа main переводит систему управления в режим ожидания событий (действий пользователя).

 

 

8. Интерфейс програмного обеспечения.

8.1. Интерфейс програмного обеспечения представляет собой меню, которое запускает экранные формы ввода, а также формы настройки и запуска отчетов. Меню - это отдельная программа для каждого рабочего места. Формы работы с базами данных разделяются на формы ввода и коррекции данных в таблицах и формы настройки и запуска отчетов. Все формы системы управления и все элементы в них используемые строятся на основе дерева стандартизованных классов.

структура интерфейса програмного обеспечения

Рис. 4. Типы форм интерфейса системы управления базами данных.

8.2. Вид меню на разных рабочих местах стандартизован. В первых режимах меню сгруппированы функции для запуска форм ввода и редактирования информации в справочных таблицах (справочниках). Далее идут режимы которые содержат функции, запускающие формы ввода оперативных данных и формы контрольно-технических отчетов. Затем режимы которые открывают функции для запуска форм оперативно-аналитических отчетов. Предпоследний режим “Опции” предназначен для поддержки стандартных команд работы со строкой в среде Windows. Последний режим “Выход” осуществляет завершение работы пользователя с системой управления и закрытие приложения. Пункт “Опции” не работает в модальных формах, и для поддержки команд работы со строкой в таких формах используется стандартная программа контекстного меню option.

8.3. Пользователь может завершить работу с системой управления, используя пункт меню “Выход” или крестик C в правом верхнем углу окна приложения. При этом управление передается программе exit_app. Эта программа выполняет сохранение переменных и настроек в соответствии со значением поля SAVE таблицы Config (например, это могут быть числовые экспертные оценки каких-либо параметров). Далее программа закрывает все таблицы, базы данных, формы, удаляет все переменные из оперативной памяти. После этого программа закрывает само приложение.

 

 

9. Дерево типовых программных классов.

9.1. Построение красивого и удобного графического интерфейса дело очень трудоемкое. Каждая экранная форма, которых в модуле много (в модуле “Производство” порядка 60 форм), набирается из полусотни элементов, в каждом из которых следует настроить порядка ста параметров (свойств), и кодировать сравнимое количество подпрограмм (методов). Значительно сократить работу по созданию экранных форм со множеством встроенных функций позволило разумное использование механизма многоуровневого дерева классов, эффективно реализованного в Visual FoxPro. Такое сокращение возможно за счет стандартизации и вынесения функционально-однотипных программ и функций интерфейса на нижние уровни дерева классов. Такая технология позволяет также эффективно использовать принцип “отложенного программирования” (когда часть функций, предусмотренных техническим заданием вводится уже после начала тестирования и использования программного средства), который значительно упрощает работу в условиях ограниченного ресурса времени на кодирование программ, при необходимости быстрого ввода в эксплуатацию новых модулей.

Библиотеки классов програмного обеспечения

Рис. 5. Распределение классов по библиотекам. РАЗВЕРНУТЬ РИСУНОК

Инструментальное дерево классов иерархически разбито на несколько уровней по степени абстракции собранных в них классов - элементов. Базовый вариант библиотеки классов, интенсивно используемый при создании всех прикладных программ, может пополняться и совершенствоваться на разных уровнях. При этом используется основное свойство классов - наследование: все классы, построенные на основе класса-родителя наследуют все настройки, кроме указанных, которые определяют специфику класса или элемента потомка. Так, класс верхнего уровня, представляющий из себя полноценную экранную форму ввода данных, использует описания типовых кнопок, рамок, способов перемещения по массиву данных, описания которых содержатся на более низких уровнях. Такой механизм позволяет улучшать функциональные возможности элементов, используемых в экранных формах ввода, не внося изменения в сами формы. Улучшение функций одного класса приводит к улучшению работы всех форм, где используются элементы на основе этого класса. Важно, чтобы при внесении изменений в классы сохранялись их стандартизованные характеристики. В таблице 6 приведен полный список стандартизованных классов по каждому базовому классу, разрешенному в Visual FoxPro 5.0.

Наименование класса, положении в системе
Библи-отека
Краткое описание
FormBa
vis_el
Экранная форма
frm_Field
com_OB
для обновления необязательных полей
More_Info_Redact
Sup_tm
мемо полей
frmTable
com_OB
ввода данных (типовая)
frmTa_Main главные формы
Centr_Cost
templ
ЦЕНТРЫ ЗАТРАТ
Dicti_Form редактирование словарей
Contr_Form работа со табл. Юр. Отдела
Firms ФИРМЫ
Prod_Form
tm_PROD
для модуля Производство
Trans_Form
tm_TRANS
для модуля Транспортного отдела
RelForm
com_OB
дополнительные формы
ListForm
com_CO
словари
Typ_Cont
Sup_tm
ТИПЫ ДОГОВОРОВ
frmOther
com_OB
другие формы
FiltForm
Sup_tm
СТАНДАРТНЫЙ ФИЛЬТР
GridForm СПИСОК ВЫБОРА
FFBa
com_OB
фильтры
frm_Save_Revert
FUN_cont
форма с кнопками СОХРАНИТЬ/ОТМЕНИТЬ
List_Redact
tm_REP
РЕДАКТОР СПИСКОВ
Tune_Parameter
FUN_cont
ИЗМЕНЕНИЕ ПАРАМЕТРА
Expert_Opinion
Sup_tm
ЭКСПЕРТНАЯ ОЦЕНКА
frmOt_Main
com_OB
другие главные формы
Report_Modul
tm_REP
формы отчета
Report_Groupping с группировкой
Rep_Group_Filter и фильтрацией
ContainBa
vis_el
Контейнер (может содержать любые классы)
LefRig_Btns
com_BU
Кнопки ЛЕВО, ПРАВО (редактирование формы со списками)
SavBac_Btns Кнопки СОХРАНИТЬ, ОТМЕНИТЬ
txtBtns кнопки управления (стандартный инструмент форм ввода)
Basi_Btns типовой
Dict_Btns для словарей
cntBasic
com_OB
типовой контейнер
Date_Interval
FUN_cont
диапазон дат
Date_Interval_Filter для форм фильтра
Dubl_Date дублирование даты в текстовое поле
Note ПРИМЕЧАНИЕ
Note_Memo ДЛЯ МЕМО ПОЛЕЙ
Weight ВЕС
Big_Filter_Parameter
tm_REP
кнопка запуска формы редактирования фильтров (для форм отчетов)
rel_Tabl3
com_OB
поле связанной таблицы
rel_Tabl2 поле связанной таблицы с доп. текстом
rel_Tabl1 поле связанной таблицы с темя доп. текстами
Button
vis_el
Экранные кнопки
Butt
com_BU
с текстом
Clear_Butt ОЧИСТИТЬ
Count_Butt ПОСЧИТАТЬ
cmdAddi ДОБАВИТЬ
cmdDele УДАЛИТЬ
cmdEdit РЕДАКТИРОВАТЬ
cmdInse ВСТАВИТЬ
PicButt графическая
Help_Butt ПОМОЩЬ
Revert_Butt ОТМЕНА
Print_Butt ПЕЧАТЬ
Plus_Butt +
Minus_Butt -
Exit_Butt ВЫХОД
Filter_Butt ФИЛЬТР
Find_butt ПОИСК
List_Butt СПИСОК (запустить форму)
Parameter_Butt редактировать параметр
CheBox
vis_el
Флажок
ChkBox
com_EL
типовой
Chk_Butt
com_BU
в виде кнопки
Chk_Invisible
fun_EL
невидимый
ChkFind
com_EL
для форм поиска
Spec_Cond
fun_EL
специальное условия для форм фильтра
Detay ДЕТАЛИ (в отчетах)
ComBox
vis_el
Список
cboBox
com_EL
типовой
cboFind для форм поиска
EdBox
vis_el
Поле (memo)
EditBox
com_EL
типовое
Big_Memo
fun_EL
большое для мемо в форме
LineBa
vis_el
Линия
ShapeBa
vis_el
Рамка
shpRam
com_EL
типовая
String
vis_el
Поле (обычное)
Txt_String
com_EL
типовое
text_Comment нередактируемое
text_Date для ввода даты
text_Updat ДАТА ПОСЛЕДНЕГО ОБНОВЛЕНИЯ
Avto_Space_Num с авто добавлением пробелов и символов
Big_String длинной строки
Pur100 проценты
String_Invisible невидимое
Txt_Find
com_EL
не связанное с полем таблицы (непосредственно)
txt_Count_Red связанное формулой
Text
vis_el
Текст в форме
LblText
com_EL
типовой
Info_From_Bd скрытый, осуществляющий выборку из базы данных
lblCapt подзаголовок группы
Logic
fun_EL
КРЕСТИК ФИЛЬТРА
lblPopup
com_EL
дополнительные всплывающее сообщение в форме
lblBasic основной
Var_Caption
fun_EL
заголовок изменяемый для форм
Label_Note ПРИМЕЧАНИЕ
txt_Centr центрированный
Copy_To_Add_Table
com_EL
используется как модуль осуществляющий авто. копирование в дополнительные таблицы

Таб. 6. Базовые классы - инструментарий разработчика.

Для примера рассмотрим построение функционального класса выбора из списка связанной таблицы Rel_Tabl2 рис. 6. Первый уровень дерева классов - базовые классы проекта. В них настраивается типовой внешний вид: шрифты, цветовая палитра, типовые размеры и прочее. Второй уровень дерева классов - основные классы. На этом уровне настраиваются свойства, влияющие на функциональное использование классов контейнеров и элементов. Здесь также добавляются новые свойства и фрагменты программного кода, придающие классам дополнительные функциональные возможности. Третий уровень - классы-заготовки. Сюда входят как заготовки форм, так и заготовки комплексных элементов.

По библиотекам классы разбиты по критерию удобства использования при кодировании экранных форм. Схема разбиения класса на библиотеки приведена на рис. 5.

Создание объекта на основе классов

Рис. 6. Схема создания комплексных элементов типовых полей связанных таблиц. РАЗВЕРНУТЬ РИСУНОК

 

 

10. Создания форм на основе дерева классов

10.1. При создании форм используется стандартизованный класс формы, в который добавляются элементы простые и комплексные стандартизованных классов. При создании комплексных элементов была использована возможность вставлять в класс-контейнер в качестве элемента другой класс-контейнер с уже добавленными в него элементами. Это дало возможность создать большое количество типовых заготовок, из которых собираются формы. В экранных формах ввода данных в различные таблицы используются одинаковые поля (рис. 7). Для таких полей на базе класса Rel_Tabl3 были созданы типовые классы-контейнеры, которые хранятся в библиотеках com_co и ju_comco, с элементом выбора из списка и другими необходимыми элементами с настроенными в элементах свойствами. Аналогичным образом были созданы и другие заготовки из основных элементов, связанных классом-контейнером, для фильтров экранных форм и для форм подготовки отчетов (для облегчения создания форм подготовки отчетов была создана специальная инструкция, которая приведена в приложении 1), например: диапазон дат, функция подготовки фильтра и др. Таким образом, в примененной схеме каждый типовой элемент подготавливается только один раз, а затем много раз вставляется в заготовки, варианты форм и сами формы.

На рис. 8. показана типичная схема создания конкретной экранной формы для прикладной программы на базе созданных библиотечных классов - “инструментов” и “заготовок”.

10.2.1. Формы ввода данных в таблицы создаются с использование стандартного инструментария на основе класса FrmTable библиотеки com_ob и его потомках, в котором уже предусмотрено поле для автоматического заполнения стандартного поля, присутствующего во всех таблицах - date_updat (дата и время последнего обновления записи). Инструментарий позволяет создать полноценную форму ввода данных с возможностью просмотра таблицы, изменения сортировки по ключу, наложения фильтра без особых трудозатрат. Достаточно добавить нужные поля и настроить несколько свойств. Это значительно ускоряет работу по созданию полноценного приложения по учету коммерческих и производственных операций.

связанные базы данных

Рис. 7. Использование одинаковых полей из связанных таблиц в базах данных по движению товара. РАЗВЕРНУТЬ РИСУНОК

10.2.2. Форма ввода информации в оперативную таблицу строится на основе класса формы рабочего места, потомка класса FrmTa_Main. Например, для рабочего места производственного отдела - это класс Prod_form, а транспортного отдела Trans_Form.

программирование формы на основе классов

Рис. 8. Схема программирования форм на основе дерева классов.

Первым делом в форму необходимо добавить группу кнопок Basi_Btns библиотеки com_bu, и присвоить ему имя Btns. Весь необходимый инструментарий уже предусмотрен в этой группе, которую следует расположить в нижней части формы. Далее в форму следует добавить редактируемые поля таблицы. Это могут быть как обычные поля на основе классов библиотек com_el и fun_cont, так и типовые поля на основе классов библиотек com_co и ju_comco. Для добавляемых полей можно настроить логические свойства: Primery - обязательное к заполнению, Not_Redact - запрещено редактировать. Также рекомендуется настроить свойство Field_Full_Name - смысловое название поля (по-русски).

В основу построения приложения был положен принцип “типовой операции”. Этот принцип предусматривает создание форм, максимально удобных пользователю при выполнении различных, часто повторяющихся, операций ввода данных. Для этого в классах форм и полей проекта заранее предусмотрено несколько дополнительных возможностей.

Если для выполнения типовой операции нужно, чтобы пользователь, работая с формой, видел не все записи, а только их часть, удовлетворяющую каким-либо определенным условиям (например, в форме “Отгрузка вагонов” пользователь видит только записи таблицы ОТГРУЗКИ о неотгруженных вагонах), следует указать это условие в свойстве FilDev формы. В случае, если нужно, чтобы при добавлении записи значение части полей копировалось из предыдущей записи во вновь созданную, следует свойству Carry формы присвоить значение .T.. При этом в новую запись будут копироваться все поля, если при добавлении они не имеют значение .NULL..

В инструментарии, заложенном в стандартном наборе кнопок, есть следующие функции: движение по таблице, просмотр таблицы, фильтр/поиск записи, добавление/сохранение записи, редактирование/отмена изменений, печать отчета по справочной таблице и выход из формы. Функции: движение по таблице, добавление/сохранение записи, редактирование/отмена изменений и выход из формы задействованы сразу после добавления набора кнопок и не требуют дополнительных настроек. Список свойств, которые надо настроить, что бы задействовать функцию просмотра таблицы в форме приведен в таб. 7.

Свойство
Описание и содержание
Grsou

название главного курсора по которому будет вестись просмотр

NuCol

количество колонок, которое будет в списке просмотра таблицы (от 1 до 4)

CCapt1, CCapt2, CCapt3, CCapt4

заголовки колонок с 1 по 4

СSou1, СSou2, СSou3, СSou4

поля, которые будут отображаться во всех четырех колонках.

CTag1, CTag2, CTag3, CTag4

ключи индексов, по которым будет сортироваться таблица при нажатии мышкой на заголовке каждой колонке

CWid1, CWid2, CWid3, CWid4

ширина каждой колонки (суммарная ширина всех колонок должна быть не больше 479 пикселей)

Таб. 7.

Для настройки функции фильтр/поиск следует создать класс формы фильтра, и поместить его название в свойство ClsFilt.

10.2.3. Класс формы фильтра создается на основе класса FFBa библиотеки com_ob. В него добавляются необходимые поля таблицы, по которым будет осуществляться фильтрация и поиск. Это могут быть как обычные поля на основе классов библиотеки com_el, так и типовые поля на основе классов библиотеки com_co. Для этих полей должно быть настроено свойство Field_Name - содержащее имя поля таблицы, по которому строится выражение фильтра.

10.2.4. Форма ввода информации в справочную таблицу строится аналогично форме ввода оперативных данных, но на основе класса ListForm. В этом классе уже заранее предусмотрен стандартный набор кнопок Btns и два поля, которые обязательно содержатся во всех справочных таблицах: учетное название и описание. Можно изменить размеры формы, чтобы добавить другие поля, которые есть в справочнике. Важно не забыть настроить свойство Tag_Name - первичный ключ справочника, тогда эта форма может быть вызвана из оперативных форм для внесения изменений в справочную таблицу в процессе заполнения оперативных данных.

 

 

11. Создание контрольно-технического (параметрического) отчета.

11.1. Параметрический отчет состоит из формы настройки параметров и одного или нескольких файлов масок отчетов. Если создается отчет, который позволяет пользователю группировать информацию различными способами, то инструментарий предусматривает наличие управляющих записей о различных вариантах группировки в свободной таблице Param_R. Общая схема создания отчета предусматривает следующие пункты:

11.2.1 Форма редактирования параметров отчета может быть создана на основе классов приведенных в таб. 8. После ее создания в среду данных формы добавляются таблицы, из которых будут выбираться данные для отчета. Далее следует заполнить следующие свойства формы: Report_Name - базовое название файла отчета (первые шесть или меньше букв названия, одинаковые для всех файлов - масок отчета, используемых формой); Cursor_Name (необязательное) - наименование курсора или таблицы в котором будет находится результат произведенной выборки, показываемый в отчете; To_Table (необязательное) - да, если свойство содержит Cursor_Name наименование таблицы; Not_Groupping (необязательное) - номер ячейки в элементе OptionsGroup формы, соответствующей варианту отчета, в котором отсутствует группировка.

Название класса
Описание
Report_Modul базовый класс отчетной формы
Report_Groupping

базовый класс отчетной формы с возможностью изменения способа группировки отчетных данных

Report_Group_Filter

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

Таб. 8. Базовые классы форм параметрических отчетов.

На следующем этапе создания параметрического отчета в форму добавляются нужные элементы. При расположении добавляемых элементов в форме нужно в правом нижнем углу формы оставить место для кнопок запуска отчета и выхода из формы. Эти кнопки будут перемещены в правый нижний угол формы с учетом возможного изменения ее размеров. Это перемещение заложено в событии Init формы.

10.2.2. В форму настройки контрольно-технического отчета добавляются как стандартные элементы библиотек com_el, com_ob, fun_el, и fun_cont, так и элементы специально разработанные для форм отчетов из библиотек tm_rep и rep_co. Для настройки различных параметров отчета были разработаны элементы: группировки отчета, полного фильтра по одному полю, диапазона дат, детализации.

10.2.3. Если в форме необходим элемент вариантов группировки, то ее следует создавать на основе класса формы Report_Groupping или на основе класса формы Report_Group_Filter. В этих классах форм уже предусмотрен объект-контейнер Grouppng на основе базового класса OptionsGroup.

Для объектов Option1, Option2, … находящихся внутри контейнера Grouppng настраивается свойство Caption - название варианта группировки. Для объекта Option1 могут быть также настроены свойства: Left, Top, Height, Width - отвечающие за размеры элемента и его расположение относительно краев контейнера. Эти свойства автоматически будут перенесены в другие элементы в группе при запуске формы в методе Init. Для контейнера Grouppng настраиваются свойства: ButtonCount - количество вариантов (возможных способов) группировки информации; Width - ширина контейнера в соответствии с максимальной длинной названия способа группировки в свойстве Caption элементов контейнера; Height - высота контейнера (в соответствии с количеством и высотой элементов контейнера). Для настройки последнего предусмотрена специальная процедура: в свойство контейнера Info ставится значение 1, тогда при запуске формы вы получите сообщение о требуемой высоте контейнера в пикселях, после чего вы сможете настроить свойство Height.

10.2.4. Составной элемент фильтра по одному полю таблицы представляет собой контейнер, созданный на основе класса Big_Filter_Parameter. Этот класс включает в себя кнопку и надпись, использующуюся в качестве значка, который показывает, - установлен ли фильтр. Кнопка будет вызывать форму выбора одного или нескольких значений для фильтруемого поля из списка возможных. Форму, включающую такие фильтры, следует создавать на основе класса Report_Group_Filter. Один полный фильтр в этом классе уже предусмотрен. В зависимости от того, какое поле нужно фильтровать и из какой таблицы берется список вариантов возможных значений, настраиваются свойства контейнера. Alias - содержит название курсора (таблицы), из которой берется полный список возможных значений поля. Этот курсор должен быть обязательно включен в среду данных формы. Field1 - содержит имя поля курсора, по которому создается список. Field2 (заполнять необязательно) - содержит имя второго поля курсора, по которому создается список выбора значений, в случае если он будет содержать две колонки (в этом случае обычно первое поле содержит полное название или расшифровку второго). Nsym (заполнять необязательно) - содержит ширину первой колонки для списка из двух колонок. В соответствии с этой шириной значение списка, полученное из поля Field1, будет обрезаться. F_Var_Name - содержит название текстовой переменной, которая будет создана в событии Init контейнера и в которой будет храниться список выбранных значений. Значения будут разделены разделителем LIST_SEPARAT. В случае, если фильтр не наложен, переменная будет содержать пустую строку. Filter_Name - содержит заголовок, который будет высвечиваться в форме выбора значений из списка. Обычно это русское название фильтруемого поля во множественном числе. Следует также настроить свойство Caption кнопки контейнера, в которое вноситься название фильтра (обычно это то же значение, что и в свойстве Filter_Name контейнера, но в винительном падеже множественного числа).

Для ряда типовых полей уже существуют заранее подготовленные классы в библиотеке rep_co с уже настроенными свойствами.

10.2.5. Элемент диапазона дат добавляется из класса Date_Interval. Форма может содержать только один такой элемент. В событии Init он создает две переменные DATE_LOWER, DATE_UPPER, которые содержат диапазон дат выбранный пользователем. В свойствах Low_Init_Value и Up_Init_Value можно указать нижнее и верхнее значение диапазона дат соответственно, по умолчанию (которое отобразится в форме при загрузке).

10.2.6. Элемент детализации отчета добавляется из класса Detay. Форма может иметь только один такой элемент. Он позволяет пользователю выводить группированный отчет в двух видах - с детализацией и без детализации. С точки зрения файла маски отчета это будут два разных файла. Для этого элемента следует свойству Name установить значение Detay.

10.2.7. На следующем этапе создания отчета следует кодировать саму программу выборки отчетной информации из баз данных. Специально для этой программы в класс формы отчета встроено два метода, которым передается управление при выполнении команды на запуск отчета - Select и Pre_Select. Дело в том, что часто программа выборки данных для отчета может быть сложной и содержать много операторов. Такая выборка может выполняться в течение нескольких минут (в зависимости как от самой программы, так и от быстродействия компьютера или скорости сети). По этой причине было принято решение разнести программу выборки данных на две части. Программа в методе Pre_Select выполняет предварительную выборку, т.е. самую первую выборку всей программы по которой можно заранее сказать - найдена ли хотя бы одна запись, с учетом наложенных фильтров, и если найдена, то на какую дату приходится первая из найденных (минимальная дата по группе выборки должна находиться в поле MAIN_DATE). Предварительная выборка вызывается функцией “найти первую” элемента диапазона дат. Если в форме элемент диапазон дат отсутствует, то метод Pre_Select можно не использовать. Выборка метода отсеивает лишнюю информацию с учетом всех наложенных пользователем и условиями отчета фильтров. Метод Select формы содержит основную программу выборки. Если форма отчета позволяет группировать информацию (содержит элемент группировки), то этот метод должен содержать следующие команды:

DODEFAULT()
* Обращение к подпрограмме предыдущего уровня, которая находит
* нужную (в соответствии с выбранным пунктом в элементе группировки,)
* запись в таблице Param_R и настраивает по ней переменные отчета.
* После чего запускает метод Pre_Select.

SELECT ...
WAIT_MESS(“Сообщение в режиме ожидания выполнения выборки”)
SELECT ...

* Выборка с учетом любых возможных вариантов группировки
WAIT_MESS(“Следующее сообщение в режиме ожидания выполнения выборки”)
SELECT &REPORT_GROUP AS Groupping, SPEC_FIELD AS Group_Name, другие поля
FROM ... ;
INTO CURSOR Selected ;
ORDER BY &SORT_STRING ;
WHERE ...

Где: REPORT_GROUP - название поля, по которому группируется выбранная информация; SPEC_FIELD - название поля или группы полей, которые будут выводиться в названии группы (например, если данные группируются по месяцу, то REPORT_GROUP будет содержать номер месяца, а SPEC_FIELD - его название); SORT_STRING - порядок сортировки выходных данных отчета.

10.3. Для отчета с возможностью различной группировки данных следует создать записи в таблице Param_R, которая находится в поддиректории Suppl сервера. В этой таблице запись соответствует одному варианту отчета по группировке и детализации (например, если в отчете 3 варианта группировки и есть элемент детализации, то следует создать 6 записей). Следует заполнить следующие поля:

REPORT - базовое название файла отчета. По этому полю фильтруются все записи, относящиеся к данному отчету. У всех записей относящихся к одному параметрическому отчету это поле будет иметь одинаковое значение.

NAME - название отчета. Содержит название варианта отчета, соответствующего выбранному способу группировки и детализации. Значение этого поля попадает в переменную REPORT_NAME, которую следует использовать в маске отчета в качестве его подзаголовка.

NUM - номер выбранного варианта группировки данных в отчете.

FLAG - вид отчета. Определяет, какой из файлов отчета будет запущен. В этом поле первый символ определяет режим детализации. Он должен иметь значение “ ” для варианта отчета без детализации данных (или при отсутствии элемента детализации), или значение “1” с детализацией. Второй символ обычно имеет пустое значение, и только для варианта отчета без группировки данных имеет значение “2”.

GROUP_F - список полей группировки отчета. Значение этого поля попадает в переменную REPORT_GROUP.

GROUP_ NAME - дополнительное. Его значение попадает в переменную GROUP_TITLE.

GROUP_ST (необязательное)- cписок полей группировки запроса. Его значение попадает в переменную SELECT_GROUP.

SORT_ST (необязательное) - список полей сортировки записей. Его значение попадает в переменную SORT_STRING.

FIELD_SPEC - дополнительное. Его значение попадает в переменную SPEC_FIELD.

 

10.4. На следующем этапе следует создать, средствами FoxPro, маски выводимых на печатающее устройство отчетов. Основным достоинством используемого метода можно считать то, что для получения большого числа вариантов отчета понадобится всего два-три файла маски отчета.

Первый файл соответствует любому отчету без деталей. Его название соответствует базовому названию файла отчета. Второй файл соответствует любому отчету с детализацией. Его название состоит из базового с добавлением символа “1”. Третий файл соответствует варианту отчета без группировки. Его название состоит из базового с добавление символа “2”.

В форме отчет запускается автоматически и выполняется по таблице или курсору, название которого содержится в свойстве формы CursorName.

В маске в качестве подзаголовка отчета следует использовать переменную REPORT_NAME. Подзаголовок отчета, соответствующий режиму группировки отчета. Отчет следует группировать по полю GROUPING.

Directrix.ru - рейтинг, каталог сайтов