Инструментальные средства системы Miracle,
рабочее место разработчика. (часть III)
Генератор приложений

Назначение данной программы

  Генератор приложений предназначен для создания конечных решений (Miracle-программ), на основе подготовленных компонентов, таких как:

  • оконные формы,
  • математические алгоритмы,
  • отчеты,
  • объекты БД.

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

  • распределенными;
  • общедоступными.

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

Запуск генератора приложений

  Запуск генератора приложений осуществляется под управлением CерверА управления, через список доступных "инструментов разработки приложений Miracle". Если вам эта программа не доступна, обратитесь к администратору информационной системы.

Важные действия в программе

Действие Аналог в меню Горячие клавиши
Создать новое приложениеПриложение|НовоеCtrl+N
Открыть существующее приложениеПриложение|ОткрытьCtrl+O
Закрыть приложениеПриложение|ЗакрытьCtrl+F4
Сохранить приложениеПриложение|СохранитьCtrl+S
Запуск приложенияПриложение|ВыполнитьCtrl+R
Вкл/Выкл окна с отладочной информацииПриложение|ОтладкаCtrl+D
ЛистингПриложение|ЛистингCtrl+L
Источник-ОкнаИсточник|ОкнаF2
Источник-База данныхИсточник|База данныхF3
Источник-АлгоритмыИсточник|АлгоритмыF4
Источник-СпецобъектовИсточник|СпецобъектовF5
Приемник-ОкнаПриемник|ОкнаF6
Приемник-База данныхПриемник|База данныхF7
Приемник-АлгоритмыПриемник|АлгоритмыF8
Приемник-СпецобъектовПриемник|СпецобъектовF9
Выход из программы генератор приложенийФайл|ВыходAlt+F4

Методика
Описание методов программирования

  Язык системы Miracle может быть использован для разработки различных приложений (программ) по управлению и обработке информации хранящейся в базе данных. Компонентный метод программирования приложений основан на организации отношений между необходимыми компонентами. Т.е. проектирование отношений к событию на реакцию возникающую в системе.

Компоненты системы Miracle

  Компоненты системы Miracle, это “неизменяемые” программные блоки предназначенные для различных целей. При выполнении действий компоненты генерируют соответствующие события в систему, на выполняющие команды (реакции).

Рисунок 1. Схема компонента системы Miracle

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

  1. Объекты БД;
  2. Алгоритмы;
  3. Специализированные;
  4. Оконные (экранные).

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

4 вида компонентов
Объекты базы данных Объекты алгоритмов Специализированные объекты Оконные объекты
навигатор   выборка и поиск окно
число генератор уникальной строки неизменяемый текст
строка запуск задачи и модуля кнопка
дата информационное окно редактируемый текст
большой двоичный объект календарь горизонтальная линия
связь с другим объектом базы данных логический аккумулятор вертикальная линия
древовидная связь логический анализатор блок проверки
  маршрутизатор радио кнопка
массив оформление - часы
меню текстовый редактор (RTF формат)
обмен сообщениями по сети объект преобразования данных
объект взаимодействия списочный вывод данных
очистка очереди сообщений График
переключатель Имидж
персональная настройка Процесс индикатор
печать отчета Группа
разделитель Фигурная кнопка
системная информация Семафор
таймер Диаграмма
условие Путь
фильтр - дата  
фильтр - преобразователь
фильтр - число
фонограф
форматированный файл
аккумулятор
эхо
Доступ к базам данных через ODBC32
Объект доступа к DBF файлам
Текстовый шаблон с поддержкой SQL
Работа с текстовым файлом
Файл формата .CSV
Форматированный вывод в файл
CRC
Телетайп
SMTP (отправка e-mail)
Взаимодействие с Web Server
Взаимодействие с Web Server – картинка
Взаимодействие с Web Server – публикация
Взаимодействие с Web Server (простая версия)
Доступ к WWW файлам
Сравнение с нулем
Арифметическая операция
Управление отладкой Генератора Приложений
Атом
Объект взаимодействия c 1C бухгалтерией
Буфер обмена
Консоль
Контейнер
Ожидание очистки очереди сообщений
Синтезатор голоса
Клавиатура
Встроенный алгоритм
Работа с файлами

Особенности программирования для операционной системы Windows

  Одним из главных препятствий при разработке прикладных программ (приложений) для ОС Windows является необходимость в обработке большого количества обращений, различных объектов системы, друг с другом. Предлагаемый метод проектирования взаимоотношений объектов, в системе Miracle, позволяет в значительной степени упростить задачу и успешно создавать оптимальные и эффективные решения.

Основы программирования событийно - управляемой системы

  Разработчик, ведущий проектирование приложений инструментальными средствами системы Miracle, должен ориентироваться в следующих вопросах:

  • проектирования приложения через механизм событий;
  • проектирование решений, где одновременно происходят несколько цепочек событий;
  • понимание концепции управления СУБД;
  • управление графическим выводом данных, с использованием визуальных компонентов системы.

  Рассмотрим проблемы, с которыми сталкивается разработчик, начинающий проектировать в Miracle и не имеющий опыта работы с объектно-ориентированными языками программирования.

Особенности разработки приложений (программы) управляемой сообщениями

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

Что такое сообщение?

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

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

  Если вы привыкли к программам с заданной последовательностью, то проектирование решения на сообщениях, может показаться хаотичным, не плановым и т.д. Возможно, что такое ощущение породит осторожное отношение к сообщениям, которые возникают когда попало, где попало и т.д. Чтобы помочь понять природу сообщений, предлагаем рассмотреть работу одной из программ.
  Рассматриваемая нами программа представлять собой окно (пользовательский интерфейс), в рамках которого располагаются различные элементы интерфейса. Для того чтобы понять, каким образом сообщения системы могут быть обработаны, рассмотрим один из аспектов работы этой программы. Например, для организации прекращения работы с приложением программист может использовать несколько различных способов. Один из них - это специализированная кнопка, по нажатию которой необходимо будет организовать прекращение работы программы. Также, это должно быть организовано через элементы меню, выбором специализированного пункта. Например, “выход из программы”.
  Как вы видите, оба эти элемента могут быть использованы пользователем для прекращения работы с программой. При этом, момент когда это произойдет, будет определен только тогда, когда пользователь активизирует пункт меню “выход из программы”, либо нажмет кнопку. До этого момента, т.е. до момента пока не была выбрана ни одна из этих двух возможностей, пользователь будет продолжать работу в приложении. И только после активизации одного из этих элементов, произойдет активизация команды прекращения программы. Т.е. в момент активизации компонента посылается соответствующее сообщение. До этого события, этих сообщений в системе нет.
  В управляемой событиями операционной системе Windows высокий приоритет имеет возможность вмешательство со стороны пользователя в любую точку процесса. В свою очередь в программах с заданной последовательностью, высокий приоритет имеет принудительно заданный порядок выполнения действий. Что не позволяет задавать произвольные правила выполнения порядка тех или иных шагов приложения.
  Программа, управляемая событиями, базируется на использовании сообщений, которые могут посылать все элементы, в рамках операционной системы. ОС Windows является многозадачной системой. Это дает пользователю возможность работать одновременно с несколькими программами. Конечно, в единицу времени выполняется только одна программа, а для поддержки выполнения других активных решений производится по очередное переключение с одной программы на другую. Система Windows не диспетчиризирует время выполнения каждой программы, это делает пользователь. Именно он производит выбор, с какой именно программой он работает в данный момент времени, через выбор необходимого окна - программы, курсором мыши или клавиатурой. Каждое из этих действий вызывает передачу сообщений. Именно от обработки сообщения от каждого компонента в решении, и зависит выполнение заложенной в ней логики.

Событие→реакция

  Компоненты системы Miracle так же посылают сообщения в систему, о своих действиях. Использовав сообщения от различных объектов, возможно, строить цепочки событиереакция, где реакция является тем действием (командой) в выбранном объекте, которое необходимо произвести при возникновении задействованного сообщения.

Рисунок 2 Схема отношений компонентов

  Такая цепочка является элементарным звеном в логике решения и активизация, которой осуществляется, только при возникновении задействованного сообщения. Тем самым, логика выполнения разрабатываемого приложения, зависит не от последовательного выполнения описанных процедур (режимов), а от компонентов, активизация которых осуществлена.

Выполнение команд в компонентах будут активизироваться, только при возникновении задействованных сообщений в цепочке“событие→реакция”.

  Например, необходимо организовать “закрытие окна” при нажатии кнопки. Логическая цепочка для достижения данного результата будут выглядеть следующим образом:
при генерации сообщения, компонентом “кнопка” - “нажатие кнопки”, компонент “окно” - должно активизировать ответную реакцию - “уничтожить окно”.
Естественно, что данное сообщение может возникнуть только тогда, когда пользователь выберет “кнопку” и произведет ее "нажатие".

Рисунок 3 Демонстрация механизма"событие→реакция"

  Механизм“событие→реакция” является основным методом проектирования управляющей логики решения в системе Miracle. При этом следует помнить, что все используемые компоненты системы имеют постоянный список событий и реакций, которые они могут производить. Установка отношений между компонентами называется - “связь по действиям (событиям)“.
  Вторым механизмом организующим передачу данных (информации) между компонентами в разрабатываемом решении, является “связь по данным”. Все компоненты используемые в приложении могут быть использованы не только для описания поведения системы (“связь по действиям”), но и использоваться для работы с данными (информацией).
  Так например, компонент - редактируемый текст, может быть использован не только для ввода информации с клавиатуры, но и для отображения и редактирования значений хранимых в объекте базы данных. Достигнуть это возможно, через установку связи по данным между двумя этими компонентами. Т.е. необходимо организовать информационный поток от объекта базы данных, а точнее от одной из характеристик этого объекта, к визуальному компоненту - редактируемый_текст.

Рисунок 4 Демонстрация установки "информационного канала"

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

Рисунок 5 Демонстрация получения данных по "информационному каналу", в определенный момент

  Программирование решений в системе Miracle, основано на использовании двух механизмов отношений между компонентами приложения:

  • Связь по действиям (событиям),“событие→реакция”.
  • Связь по данным, т.е. установление информационных каналов между компонентами.

  Следует отметить что оба эти механизма являются самостоятельными и не зависимыми, что является одной из уникальных особенностью проектирования приложения в системе Miracle. Метод обработки данных и метод их получения организовывается двумя совершенно независимыми методами.

Проблема графического вывода

  Все механизмы вывода информации используемые в приложениях системы Miracle, являются графическими. Программисты привыкшим к текстовым способам вывода информации обнаружат, что графический вывод предоставляет им возможность размещать информацию, и иные графические элементы одновременно. Следует заметить, что текст, также является графическим элементом, и могут иметь различное начертание, цвет и размер. Весь вывод организован через визуальные компоненты. Программистам занимающимся разработкой пользовательского интерфейса, не придется выполнять какие либо дополнительные шаги по его организации, как то программирование размещения, размеров и иных свойств.
  Организация интерфейса основана на размещении, в рамках проекта оконной формы, необходимых визуальных элементов. Законченный пользовательский интерфейс, представлен в виде оконного компонента, с заданными свойствами.
  Система Miracle обеспечивает поддержку свойств компонентов пользовательского интерфейса. Встроенная поддержка означает, что затраты на создание и организацию этих компонентов с вашей стороны будут минимальны. Чтобы воспользоваться всеми преимуществами компонентов пользовательского интерфейса, вы должны руководствоваться списком сообщений и командами выполняемыми ими.
  Среди всех компонентов интерфейса наиболее важными являются - "окно". Любое решение, должно иметь окно, поскольку именно в окне могут быть размещены необходимые визуальные компоненты.

Методика проектирования

  Разрабатываемое вами приложение будет содержать в себе необходимое количество цепочек“событие→реакция”, выполнение которых и будет приводить к необходимому результату.
  Поэтому, приступая к программированию компонента приложения (решения), вы должны решить какие компоненты и их свойства вам понадобятся для выполнения поставленной задачи. В принципе - решение может состоять из одного объекта - оконной формы и не использовать объекты базы данных, алгоритмы или специализированные компоненты. Объем компонентов в решении зависит от решаемой задачи и при этом может быть со временем изменен.

Каждое решение должно содержать как минимум одну экранную форму.

  Т.е. приложения системы Miracle не является “законченным”, “неизменяемым”. При необходимости вы можете добавлять новые свойства в уже работающие приложения, в любой момент времени. Эта возможность качественно отличает информационную систему, разработанную в Miracle от других. Следует отметить, что управляющая логика приложения является “законченной”, только на определенный момент времени. Имея гибкий механизм модификации всех компонентов вашей ИС, вы можете оперативно реагировать на любые требования к приложениям. Чаще всего, это не будет требовать видоизменений всей системы, или больших ее частей. Как правило, все изменения могут быть произведены с минимальными затратами, без реорганизации всей ИС.
  Например, решение для выполнения математических расчетов использует алгоритм. Внесение изменений в работу алгоритма может пройти "не замечено" для приложения его использующего. Просто при новой активизации решения будет получен результат по новой методике.

Структура проекта приложения

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

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

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

  1. Список компонентов, например окон, объектов БД, алгоритмов, специализированных объектов;
  2. Список компонентов, например визуальные элементы окон или характеристики объекта БД;
  3. Список событий/реакций по выбранному компоненту.

Таблица видов компонентов и список частей в области генераторов и приемников
Части проекта приложения

  Структура приложения может включать в себя:

1Интерфейсная часть Список окон содержащие визуальные компоненты. При этом, сам элемент – окно, является таким же элементом, как и другие компоненты.
2Объекты базы данных Список всех имеющихся объектов БД. Используемые компоненты выделены цветом. Приложение может не использовать в своей работе объекты БД.
3 Математические алгоритмы Список используемых алгоритмов. Список отражает связь с алгоритмами, хранящимися на Сервере управления. Однако алгоритм может быть использован в одном приложении несколько раз. Приложение может не использовать в своей работе алгоритмов.
4Специализированные объекты Список используемых специализированных объектов. Спец. объекты объединены в библиотеку, которую возможно пополнять собственными компонентами. В одном приложении, возможно, использовать несколько копий одного специализированного объекта.

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

Окно

ГенераторПриемник
  1. Список окон (экранных форм)
  2. Список визуальных компонентов в выбранном - окне
Список событий по выбранному компоненту Список реакций по выбранному компоненту

Объекты базы данных

ГенераторПриемник
  1. Список доступных объектов базы данных
  2. Список характеристик в выбранном объекте базы данных из имеющегося списка
Список событий по выбранной характеристике или заголовку объекта БД Список реакций по выбранной характеристике или заголовку объекта БД

Объекты алгоритмы

ГенераторПриемник
  1. Список включенных в приложение алгоритмов
Список событий по выбранному алгоритму Список реакций по выбранному алгоритму

Специализированные объекты

ГенераторПриемник
  1. Список включенных в решение специализированных объектов
Список событий по выбранному спец. объекту Список реакций по выбранному спец. объекту

Очередь

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

Моделирование действий и реакций системы

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

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

Понятие приложения (решения)

  Приложение - это законченное пользовательское решение, которое содержать в себе одну или более оконных форм, (окна - интерфейс пользователя). А, так же, может содержать в себе математические алгоритмы, доступ к объектам базы данных и специализированным объектам. Взаимодействия между объектами описывают управляющую логику работы решения.
  Взаимодействие компонентов приложения основано на механизме “реакциясобытие”. При этом, если на одно сообщение задействовано несколько событий, то порядок их выполнения определяется очередью. Порядок возникновения сообщений обусловлен работой компонентов, и не описывается какими либо правилами. Логика работы приложения выражает поведение элементов, по принципу "исполню, как только произойдет событие". Информация циркулирует между компонентами согласно установленным связям по данным. Приложение (Miracle программа) - это законченное пользовательское решение.

Список возможных действий

Создание нового файла (компонента приложения) Приложение|Новое
Открытие имеющегося файла (компонента приложения) Приложение|Открыть
Закрытие файла (компонента приложения) Приложение|Закрыть 
Регистрация приложения в качестве ресурса ИС Приложение|Передать серверу
Получение приложения с Сервера управления Приложение|Взять у сервера
Сохраняет текущее приложение Приложение|Сохранить 
Запоминает связь между указанными объектами в шаблон Приложение|Запомнить шаблон 
Устанавливает связи из шаблона Приложение|Применить шаблон 
Сохранение приложения в виде файла с другим именем Приложение|Сохранить как... 
Активизация приложение, его выполнение Приложение|Выполнить
Активизировать/Убрать окно отлаженной информации Приложение|Отладка 
Получение листинга приложенияПриложение|Листинг 
Создание описания приложения Приложение|Описание 
Показывает статистическую информацию по приложению Приложение|Статистика 
Создать отчет по используемым таблицам БД в приложении Приложение|Структура БД 
Создать отчет по используемым таблицам БД в формате CDM Приложение|Структура БД в формате CDM 
Сбросить фильтры Приложение|Сбросить фильтры 
Очистить метки Приложение|Очистить метки 
Создать отчет структуры выбранных компонентов в формате PAM Приложение|Анализ связей в формате PAM 
Выход из программы Приложение|Выход
ГЕНЕРАТОРГенератор|Окна
Генератор|База данных
Генератор|Алгоритмы
Генератор |Спец объекты
ПРИЕМНИК Приемники|Окна
Приемники|База данных
Приемники|Алгоритмы
Приемники|Спец объекты
Управление окнами приложений Окна|Каскад  
Окна|Черепица  
Окна|Горизонтальная черепица  
Окна|Выровнять пиктограммки  
Окна|Закрыть все окна  

Предыдущий раздел На начал документауции На оглавление Следующий раздел

©1995,1997,2000 НПФ ”И.В.А.”. Все права сохранены.
Название фирм и торговых марок используются только в качестве пояснения.