Главная      Учебники - Экология     Лекции по экологии - часть 4

 

поиск по сайту            

 

 

 

 

 

 

 

 

 

содержание   ..  610  611  612   ..

 

 

Программное обеспечение базы данный Экологический мониторинг

Программное обеспечение базы данный Экологический мониторинг

Введение

Нормативно-правовое обеспечение в области охраны окружающей среды.

Основные направления создания СЭМ СКЦ

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

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

- мониторинг источников;

- мониторинг факторов миграции;

- мониторинг состояния объектов окружающей среды.

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

1. Службы самого предприятия. К ним относятся: лаборатория (отдел) внешней дозиметрии, ведущая радиационный контроль за состоянием объектов окружающей среды в санитарно-защитной зоне и зоне наблюдения предприятия, службы цехов(отделов) предприятий (контроль за сбросами-выбросами радиоактивных веществ - лаборатории РБ отделов радиационной безопасности, за сбросом-выбросом химических загрязнителей – лаборатории химических цехов, тепла – турбинный цех, гидроцех; органических и химических веществ с КОС – лаборатории КОС).

2. Территориальные органы ведомств, уполномоченных в проведении работ в области охраны природы и здоровья человека. К ним относятся: ПСЛ (промышленно-санитарные лаборатории) объектовых СЭС Госсанэпиднадзора (контроль сбросов-выбросов, контроль продуктов питания в СЗЗ и ЗН, воды источников питьевого водоснабжения и др.), лаборатории и метеостанции Росгидромета (мониторинг состояния и загрязнения атмосферы, поверхностных вод, почв), лаборатории бассейновых управлений Министерства природных ресурсов (мониторинг за состоянием поверхностных вод, в том числе и биообъекты гидросферы, мониторинг недр), а также территориальные органы Минэкологии, Минсельхозпрода, Госкомзема, Госкомрыболовства, Рослесхоза.

В СЭМ СКЦ в основном используется информация, получаемая этими службами и организациями, которая, в принципе, охватывает все виды мониторинга, хотя в отдельных случаях СКЦ должен инициировать проведение специальных работ, необходимых для получения информации, требуемой СКЦ для решения стоящих перед ним задач.

Требования к информации и техническим средствам СЭМ СКЦ

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

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

3. СЭМ должна быть полностью интегрирована с информационно-справочной системой и системой радиационного мониторинга СКЦ. Она должна использовать единый банк данных атрибутивной и картографической информации. При создании и подключении новых разделов банка данных должны учитываться существующие принципы и подходы к организации информационного обеспечения СКЦ.

4. Вновь разрабатываемое программное обеспечение должно максимально использовать существующие программные приложения. СЭМ разрабатывается на существующей технической базе СКЦ и функционирует с использованием существующего общесистемного программного обеспечения.

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


Описание структуры базы данных.

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

На основании задач экологического мониторинга была построена модель базы данных, позволяющая хранить данные экологического мониторинга в различных разрезах.

Данные разделяются на разрезы:

  1. по экологическим величинам
  2. по объектам экологического мониторинга
  3. по организации – источнику данных

На рисунке 1 приведена схема логической модели базы данных “Экологический мониторинг”.

Отчет определение сущностей с описанием сущностей и связей между ними приведено в приложении файл Acrobatreaderent_uir.pdf.

Отчет сущности и их атрибуты об атрибутах сущностей с указанием названия, типа, описания возможных значений и комментарии

файл Acrobat reader atrib_uir.pdf..

Для их построения использованы модифицированные отчеты среды построения отчетов ReportBuilder входящей в комплект

Developer 2000

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

В приложении приведены коды генерации базы данных в репозитарий Oracle.


Рисунок 1. Логическая модель базы данных.


Описание клиентского приложения

Клиентское приложение написано в среде BorlanC++ Builder 5.0

Подключение к базе данных контролируется не средствами приложения, а самой СУБД, что упрощает взаимодействие системы с информацией базы данных.

В СУБД задается уровень доступа пользователя в соответствии с его ролью назначенной ему администратором. Реализован поиск по базе данных.

позволяет заполнять различные справочники

В дальнейшем планируется написание АРМ Эколога. Которое будет позволять на основе базы данных “Экологический мониторинг” рассчитывать риски для населения, проживающего на территории мониторинга.


Приложение 1. Форма государственной статистической отчетности 2-тп радиоактивность

Министерство, ведомство

Функции и задачи природоохранной деятельности
Государственный комитет РФ по охране окружающей среды (Госкомэкология)

В сфере охраны окружающей среды, обеспечения экологической безопасности и сохранения биологического разнообразия:

Министерство природных

В сфере изучения, воспроизводства, использования и охраны природных ресурсов:

Федеральная служба России по гидрометеорологии и мониторингу окружающей среды

В области мониторинга состояния и загрязнения окружающей природной среды:

Министерство сельского хозяйства и продовольствия РФ

В области охраны окружающей среды:

Государственный земельный

В области контроля за использованием и охраной земель:

Государственный комитет РФ по рыболовству

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

Федеральная служба лесного хозяйства РФ

В области охраны, защиты, использования и воспроизводства лесов и ведения лесного хозяйства:

Федеральная служба геодезии и картографии РФ

В области охраны окружающей среды:

Федеральная пограничная служба РФ

В области охраны водных биологических ресурсов:

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ СТАТИСТИЧЕСКОЕ НАБЛЮДЕНИЕ
КОНФИДЕНЦИАЛЬНОСТЬ ГАРАНТИРУЕТСЯ ПОЛУЧАТЕЛЕМ ИНФОРМАЦИИ
Непредставление или нарушение сроков представления информации, а также ее искажение влечет ответственность, установленную Законом Российской Федерации “Об ответственности за нарушение порядка представления государственной статистической отчетности” от 13.05.92 г. № 2761-1

СВЕДЕНИЯ О РАДИОАКТИВНЫХ ОТХОДАХ, ПОСТУПЛЕНИИ РАДИОНУКЛИДОВ
В ОКРУЖАЮЩУЮ СРЕДУ И ЗАГРЯЗНЕННЫХ ИМИ ТЕРРИТОРИЯХ

з а __________ год

Представляют: Сроки представления Форма № 2-тп(радиоактивность)

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

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

региональные и ведомственные информационно-аналитические центры учета и контроля радиоактивных веществ и радиоактивных отходов:

- центральному информационно-аналитическому центру учета и контроля
радиоактивных веществ и радиоактивных отходов Минатома России

Минатом России

- Госкомстату России (по согласованной программе)

25 января

1 марта

30 марта

Утверждена

постановлением

Госкомстата России

от 10.08.2000 № 73

Годовая

Наименование отчитывающейся организации ______________________________________________________________________________________________
Почтовый адрес _________________________________________________________________________________________________________________________
Код Код (проставляет отчитывающаяся организация)

формы

по ОКУД

отчитывающейся организации

по ОКПО

вида деятельности по ОКДП отрасли по ОКОНХ территории по ОКАТО министерства (ведомства), органа управле-ния по ОКОГУ организационно-правовой формы по ОКОПФ формы собственности по ОКФС
1 2 3 4 5 6 7 8 9
0609027

1. Радиоактивные отходы, отработавшее ядерное топливо

Разрешение на размещение РАО № __________ от __ ____ _________г. Срок действия разрешения с __ ____ _________г. до __ ____ _________ г.

Наименование государственного органа, выдавшего разрешение _____________________________________________________________________

Разрешение на размещение ОЯТ № __________ от __ ____ _________г. Срок действия разрешения с __ ____ _________г. до __ ____ _________ г.

Наименование государственного органа, выдавшего разрешение _____________________________________________________________________

Код по ОКЕИ: м3 – 113; т – 168; шт. – 796; Бк - 323

№ стро-ки Наименование показателя, код РАО, ОЯТ 1) Количество РАО, ОЯТ 2) Суммарная активность, Бк Пункт хранения, захоронения Основные радионуклиды
м3 т шт. альфа-нуклидов бета-нуклидов код 1) наименование, номер
А Б 1 2 3 4 5 6 7 8
Образование, поступление, передача, переработка РАО, ОЯТ за отчетный год
100 Образовалось в организации, всего Х Х Х

в том числе по кодам:

102
103
200 Поступило от сторонних организаций, всего Х Х Х

в том числе по кодам:

202
203
300 Передано сторонним организациям, всего Х Х Х

в том числе по кодам:

Х Х
302 Х Х
303 Х Х

Продолжение таблицы 1

А Б 1 2 3 4 5 6 7 8
400 Переработано в организации, всего Х Х Х

в том числе по кодам:

Х Х
402 Х Х
403 Х Х
500 Образовалось вторично после переработки, всего Х Х Х

в том числе по кодам:

502
503
Наличие на конец отчетного года
600 Всего Х Х Х

601

в том числе по кодам:

602
603
604
605
700 Количество РАО, ОЯТ, разрешенное к размещению Х Х Х

в том числе по кодам:

702
703

Примечание:

1) Коды РАО, ОЯТ, а также пунктов их хранения, захоронения приведены в инструкции по заполнению.

2) Количество жидких радиоактивных отходов указывается в м3 (гр.1), количество твердых радиоактивных отходов – в тоннах (гр.2), количество отработавших закрытых радионуклидных источников – в штуках (гр.3). Для ОЯТ указывается количество тонн облученного урана (гр.2) и количество ОТВС в штуках (гр.3).


2. Поступление радионуклидов в атмосферный воздух

Разрешение на допустимые пределы выброса радионуклидов в атмосферу № __________ от __ ____ _________

Наименование государственного органа, выдавшего разрешение _________________________________________________________

Срок действия разрешения с __ ____ _________ до __ ____ _________

Код по ОКЕИ: Бк - 323

№ строки Наименование радионуклида Разрешенный выброс радионуклида в атмосферу за год, Бк Фактически выброшено радионуклида в атмосферу, Бк
за отчетный год за предыдущий год
А В 1 2 3
201
202
203
204
205
206
207
208
209
210

3. Сброс сточных вод, содержащих радионуклиды

Разрешение на сброс радионуклидов в водные объекты и на рельеф местности № __________ от __ ____ _________

Наименование государственного органа, выдавшего разрешение _________________________________________________________

Срок действия разрешения с __ ____ _________ до __ ____ _________

Код по ОКЕИ: тыс.м3 –114; Бк - 323

№ строки № (наименование) выпуска сточных вод Наименование приемника сточных вод Отведено сточных вод, со-держащих радионук-лиды, тыс.м3 Сброс радионуклидов со сточными водами за отчетный год, Бк
_________________ 1) _________________ _________________ _________________ _________________
разрешен-ный фактичес-ки разрешен-ный фактичес-ки разрешен-ный фактичес-ки разрешен-ный фактичес-ки разрешен-ный фактичес-ки
А Б В 1 2 3 4 5 6 7 8 9 10 11
300 Х Х
301
302
303
304

Примечание:

1) Здесь и далее указывается наименование радионуклида.

4. Превышение значений уровня вмешательства в подземных водах

Количество наблюдательных скважин, находящихся на балансе предприятия: _________ шт.

Код по ОКЕИ: шт –796; км - 008

№ строки № наблюда-тельной скважины Наименование зоны контроля 1) Источник поступления радионуклидов в подземные воды Расстояние от источника до наблюдательной скважины, км Среднегодовое содержание радионуклидов в подземных водах в наблюдательных скважинах с превышением УВ вода , Бк/кг
___________ 2) _____________ _____________ _____________ _____________
А Б В Г 1 2 3 4 5 6
401
402
403
404

Примечание:

1) В графе В проставляются следующие обозначения: “ПП” (промплощадка); “СЗЗ” (санитарно-защитная зона); “ЗН” (зона наблюдения).

2) Здесь и далее указывается наименование радионуклида.


5. Территории, загрязненные радионуклидами, и их реабилитация

Код по ОКЕИ: тыс.м2 –058

№ стро-ки Наименование показателя Площадь загрязненных и реабилитированных территорий, тыс.м2 Радионуклиды, определяющие загрязнение
Всего с мощностью дозы гамма-излучения мкГр/час с плотностью загрязнения, Бк/м2 альфа-активными нуклидами
стронций - 90 цезий - 137
до 0,5 от 0,5 до 2 более 2 до 5*104 более 5*104 до 5*105 более 5*105
А Б 1 2 3 4 5 6 7 8 9 10

ЗА ОТЧЕТНЫЙ ГОД

Загрязнено, выявлено загрязненных территорий, всего (511+512+513)

в том числе:

на промплощадке

512 в санитарно-защитной зоне
513 в зоне наблюдения

ЗА ОТЧЕТНЫЙ ГОД

Реабилитировано территорий, всего (521+522+523+524)

в том числе:

под сельскохозяйственные угодья

522 под лесные насаждения
523 под строительство
524 для санитарно-гигиенического использования

НАЛИЧИЕ НА КОНЕЦ ОТЧЕТНОГО ГОДА

Загрязненных территорий, всего (531+532+533)

в том числе:

на промплощадке

532 в санитарно-защитной зоне
533 в зоне наблюдения

Продолжение таблицы 5

А Б 1 2 3 4 5 6 7 8 9 10

Из строки 530:

Загрязненные земли, всего (541+551+561)

в том числе:

на промплощадке

из них:

543
544
545
546
551 в санитарно-защитной зоне

из них:

553
554
561 в зоне наблюдения

из них:

563
564
570 Загрязненные водоемы, всего (571+581+591)

в том числе:

на промплощадке

из них:

573
574
575
581 в санитарно-защитной зоне

из них:

583
584
591 в зоне наблюдения

из них:

593
594

6. Выполнение мероприятий по снижению радиационного воздействия на окружающую среду

Код по ОКЕИ: млн.руб. – 385; м3 – 113; тыс.м2 – 114; т – 168; Бк - 323

№ строки Мероприятия, выполнение которых предусмотрено в отчетном году Сроки выполнения (начало - окончание) Использовано (освоено) средств на проведение мероприятий (за счет всех источников финансирования) - млн.руб. Природоохранный эффект мероприятия
Код при-родоох-ранного эффекта 1) Сокращение количества РАО, объема сбросов (выбросов); площадь тер-риторий со снижением уровня загрязнения Наименование радионуклида, по которому происходит снижение воздействия на окружающую среду Величина предотвращенного сброса (выброса) радионуклида, уменьшение количества РАО (Бк); снижение уровня загрязнения территорий, (Бк/м2 , мкГр/час)
Всего за отчетный год в том числе средств из федерального бюджета единица из-мерения 2) всего за отчетный год единица из-мерения 3) Фактичес-кая за от-четный год расчетная годовая
А Б 1 2 3 4 5 6 7 8 9 10
601
602
603
604
605

Примечание:

1) В графе 4 проставляются следующие коды:

01 – обезвреживание и сокращение радиоактивных отходов; 02 – сокращение выбросов радионуклидов;
03 – сокращение сброса радионуклидов; 04 – снижение поступления радионуклидов в подземные воды;
05 – уменьшение площади загрязненных территорий; 06 – прочие природоохранные эффекты.

2) Единицы измерения: м3 ; тыс.м2 ; т; Бк.

3) Единицы измерения: Бк; Бк/м2 ; мкГр/час.

Руководитель
организации (Ф.И.О.) (подпись)
Должностное лицо,
ответственное за
составление формы (должность) (Ф.И.О.) (подпись)
“____” _________20__ год
(номер контактного телефона)

(дата составления

документа)


Приложение 2. Коды генерации базы данных в репозитарий

-- c:\temp\uir.tab

--

-- Generated for Oracle 8 on Tue Dec 25 16:29:20 2001 by Server Generator 6.0.3.3.0

PROMPT Creating Table 'OTCHETNOST'

CREATE TABLE OTCHETNOST

(CODE NUMBER(6) NOT NULL

,ПЕРИОДИЧН_CODE VARCHAR2(240) NOT NULL

,PARAM_CODE NUMBER(6) NOT NULL

,НОРМАТИВ_CODE NUMBER(6) NOT NULL

,НОРМАТИВ_CODE_ЯВЛЯЕТСЯ NUMBER(6) NOT NULL

,UNI1_UNITMEAS VARCHAR2(20)

,ОБЪЕКТ_ЭМ_CODE NUMBER(6) NOT NULL

)

/

COMMENT ON COLUMN OTCHETNOST.CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN OTCHETNOST.ПЕРИОДИЧН_CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN OTCHETNOST.PARAM_CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN OTCHETNOST.НОРМАТИВ_CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN OTCHETNOST.НОРМАТИВ_CODE_ЯВЛЯЕТСЯ IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN OTCHETNOST.ОБЪЕКТ_ЭМ_CODE IS 'Уникальный идентификатор'

/

PROMPT Creating Table 'ORGANIZATION'

CREATE TABLE ORGANIZATION

(CODE NUMBER(6,0) NOT NULL

,NAME VARCHAR2(200) NOT NULL

,SHORTNAME VARCHAR2(50)

,ORG_TYPE VARCHAR2(50) NOT NULL

,ADDRESS VARCHAR2(200)

,SERVICE VARCHAR2(2000)

,TELEPHONE VARCHAR2(200)

,REKV VARCHAR2(200)

,STATUS VARCHAR2(1) DEFAULT '(''н'')'

,SGYK NUMBER(1,0) DEFAULT 0

,EXPORG NUMBER(1,0) DEFAULT 0

,LAWSTATUS VARCHAR2(50)

,POWERORG NUMBER(1,0) DEFAULT 0

,INFEXCH VARCHAR2(3)

,ORG_CODE NUMBER(6,0)

,ПОДОТЧЕТНА_ОРГ NUMBER(6,0)

)

/

PROMPT Creating Table 'FORMA_OTCHETNOSTI'

CREATE TABLE FORMA_OTCHETNOSTI

(CODE NUMBER(6) NOT NULL

,POST VARCHAR2(240)

,NAME VARCHAR2(240)

,DATA VARCHAR2(240)

,DATA2 VARCHAR2(4)

,DATA3 VARCHAR2(240)

,ORG_CODE NUMBER(6,0) NOT NULL

,ORG_CODE_УТВЕРЖДЕНА NUMBER(6,0) NOT NULL

,ПЕРИОДИЧН_CODE VARCHAR2(240) NOT NULL

,ФОРМА_CODE NUMBER(6)

)

/

COMMENT ON COLUMN FORMA_OTCHETNOSTI.CODE IS 'Уникльный идентификатор'

/

COMMENT ON COLUMN FORMA_OTCHETNOSTI.POST IS 'Должность лица ответственного за заполнение формы'

/

COMMENT ON COLUMN FORMA_OTCHETNOSTI.NAME IS 'ФИО лица ответственного за заполнение формы'

/

COMMENT ON COLUMN FORMA_OTCHETNOSTI.DATA IS 'дата составления документа'

/

COMMENT ON COLUMN FORMA_OTCHETNOSTI.DATA2 IS 'дата получения документа'

/

COMMENT ON COLUMN FORMA_OTCHETNOSTI.DATA3 IS 'дата введения формы отчнтности'

/

COMMENT ON COLUMN FORMA_OTCHETNOSTI.ПЕРИОДИЧН_CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN FORMA_OTCHETNOSTI.ФОРМА_CODE IS 'Уникльный идентификатор'

/

PROMPT Creating Table 'SUBSTANCE'

CREATE TABLE SUBSTANCE

(CODE NUMBER(6) NOT NULL

,FULLNAME VARCHAR2(50) NOT NULL

,SHORTNAME VARCHAR2(20) NOT NULL

,CEMICALNAME VARCHAR2(30)

,DESCR VARCHAR2(1000)

)

/

COMMENT ON COLUMN SUBSTANCE.CODE IS 'Уникальный идентификатор'

/

COMMENT ON COLUMN SUBSTANCE.FULLNAME IS 'В соответствии с реестром'

/

COMMENT ON COLUMN SUBSTANCE.SHORTNAME IS 'В соответствии с реестром'

/

COMMENT ON COLUMN SUBSTANCE.CEMICALNAME IS 'Химическая формула (название)'

/

COMMENT ON COLUMN SUBSTANCE.DESCR IS 'воздействует на ...'

/

PROMPT Creating Table 'PERIOD'

CREATE TABLE PERIOD

(CODE VARCHAR2(240) NOT NULL

,NAME VARCHAR2(240) NOT NULL

)

/

COMMENT ON COLUMN PERIOD.CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN PERIOD.NAME IS 'Наименование периода отчетности'

/

PROMPT Creating Table 'ECOLOGY_NUMBER'

CREATE TABLE ECOLOGY_NUMBER

(CODE NUMBER(6) NOT NULL

,FULLNAME VARCHAR2(50)

,SHORTNAME VARCHAR2(20)

,FLAG VARCHAR2(1) NOT NULL

,DESCR VARCHAR2(100)

,ГРУППА_ПАР_CODE NUMBER(6) NOT NULL

,UNI1_UNITMEAS VARCHAR2(20)

,ТИП_ЭВ_CODE NUMBER(6) NOT NULL

)

/

COMMENT ON COLUMN ECOLOGY_NUMBER.CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN ECOLOGY_NUMBER.FULLNAME IS 'Наименование полное'

/

COMMENT ON COLUMN ECOLOGY_NUMBER.SHORTNAME IS 'Наименование краткое'

/

COMMENT ON COLUMN ECOLOGY_NUMBER.FLAG IS 'указатель на тип значения (числовое, текстовое)'

/

COMMENT ON COLUMN ECOLOGY_NUMBER.DESCR IS 'Описание'

/

COMMENT ON COLUMN ECOLOGY_NUMBER.ГРУППА_ПАР_CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN ECOLOGY_NUMBER.ТИП_ЭВ_CODE IS 'Уникальный идентификатор'

/

PROMPT Creating Table 'GROUP_PARAMETR'

CREATE TABLE GROUP_PARAMETR

(CODE NUMBER(6) NOT NULL

,NAME VARCHAR2(240) NOT NULL

,ГРУППА_ПАР NUMBER(6)

)

/

COMMENT ON COLUMN GROUP_PARAMETR.CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN GROUP_PARAMETR.NAME IS 'Наименование группы параметров'

/

COMMENT ON COLUMN GROUP_PARAMETR.ГРУППА_ПАР IS 'Уникальный идентификатор сущности'

/

PROMPT Creating Table 'TYPE_ECOLOGY_NUMBER'

CREATE TABLE TYPE_ECOLOGY_NUMBER

(CODE NUMBER(6) NOT NULL

,NAME VARCHAR2(240) NOT NULL

,ТИП_ЭВ NUMBER(6)

)

/

COMMENT ON COLUMN TYPE_ECOLOGY_NUMBER.CODE IS 'Уникальный идентификатор'

/

COMMENT ON COLUMN TYPE_ECOLOGY_NUMBER.NAME IS 'Наименование типа параметра'

/

COMMENT ON COLUMN TYPE_ECOLOGY_NUMBER.ТИП_ЭВ IS 'Уникальный идентификатор'

/

PROMPT Creating Table 'ZAGRAZN_VV'

CREATE TABLE ZAGRAZN_VV

(CODE NUMBER(6) NOT NULL

,СМЕСИ_CODE NUMBER(6)

,ISO_SHORTNAME VARCHAR2(10)

,SUBSTANCE_CODE NUMBER(6)

)

/

COMMENT ON COLUMN ZAGRAZN_VV.CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN ZAGRAZN_VV.СМЕСИ_CODE IS 'Уникальный идетификатор сущности'

/

COMMENT ON COLUMN ZAGRAZN_VV.SUBSTANCE_CODE IS 'Уникальный идентификатор'

/

PROMPT Creating Table 'SMES'

CREATE TABLE SMES

(CODE NUMBER(6) NOT NULL

,FULLNAME VARCHAR2(200) NOT NULL

,SHORTNAME VARCHAR2(20)

)

/

COMMENT ON COLUMN SMES.CODE IS 'Уникальный идетификатор сущности'

/

COMMENT ON COLUMN SMES.FULLNAME IS 'Полное наименование смеси веществ'

/

COMMENT ON COLUMN SMES.SHORTNAME IS 'Краткое наименование смеси веществ'

/

PROMPT Creating Table 'ECOLOGY_PARAM'

CREATE TABLE ECOLOGY_PARAM

(CODE NUMBER(6) NOT NULL

,DATA_B DATE NOT NULL

,DATA_E DATE

,TYPE_PARAMETR VARCHAR2(240) NOT NULL

,TYPE_ZNACH VARCHAR2(240) NOT NULL

,DESCR VARCHAR2(100)

,UNI1_UNITMEAS VARCHAR2(20)

,ЭКОЛОГ_CODE NUMBER(6) NOT NULL

,ЗАГР_ВВ_CODE NUMBER(6)

,НОРМАТИВ_CODE NUMBER(6) NOT NULL

,НОРМАТИВ_CODE_ИМЕЕТ NUMBER(6) NOT NULL

,ФОРМА_CODE NUMBER(6)

,ПЕРИОДИЧН_CODE VARCHAR2(240) NOT NULL

)

/

COMMENT ON COLUMN ECOLOGY_PARAM.CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN ECOLOGY_PARAM.DATA_B IS 'Дата ввода в действие параметра'

/

COMMENT ON COLUMN ECOLOGY_PARAM.DATA_E IS 'Дата завершения действия параметра'

/

COMMENT ON COLUMN ECOLOGY_PARAM.TYPE_PARAMETR IS 'Тип параметра (фактический, согласованный, норматив)'

/

COMMENT ON COLUMN ECOLOGY_PARAM.TYPE_ZNACH IS 'Тип значения (расчетное, исходное)'

/

COMMENT ON COLUMN ECOLOGY_PARAM.DESCR IS 'Комментарий'

/

COMMENT ON COLUMN ECOLOGY_PARAM.ЭКОЛОГ_CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN ECOLOGY_PARAM.ЗАГР_ВВ_CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN ECOLOGY_PARAM.НОРМАТИВ_CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN ECOLOGY_PARAM.НОРМАТИВ_CODE_ИМЕЕТ IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN ECOLOGY_PARAM.ФОРМА_CODE IS 'Уникльный идентификатор'

/

COMMENT ON COLUMN ECOLOGY_PARAM.ПЕРИОДИЧН_CODE IS 'Уникальный идентификатор сущности'

/

PROMPT Creating Table 'NORMATIV_PARAM'

CREATE TABLE NORMATIV_PARAM

(CODE NUMBER(6) NOT NULL

,НОРМАТИВ_TYPE VARCHAR2(240)

)

/

COMMENT ON COLUMN NORMATIV_PARAM.CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN NORMATIV_PARAM.НОРМАТИВ_TYPE IS 'Тип норматива'

/

PROMPT Creating Table 'TERRITORIES'

CREATE TABLE TERRITORIES

(CODE NUMBER NOT NULL

,KINDT NUMBER(2,0) NOT NULL

,NAME VARCHAR2(200) NOT NULL

,DESCR VARCHAR2(4000)

,SQUARE NUMBER

,GRIF NUMBER(2,0) DEFAULT 0 NOT NULL

)

/

PROMPT Creating Table 'OBJECT_EM'

CREATE TABLE OBJECT_EM

(CODE NUMBER(6) NOT NULL

,TYPE_OBJ VARCHAR2(240)

,CODE_OBJ VARCHAR2(240)

,CLASS VARCHAR2(240)

,DET_STRUCT VARCHAR2(240)

,DET_TER VARCHAR2(240)

)

/

COMMENT ON COLUMN OBJECT_EM.CODE IS 'Уникальный идентификатор'

/

COMMENT ON COLUMN OBJECT_EM.TYPE_OBJ IS 'Тип объекта мониторинга'

/

COMMENT ON COLUMN OBJECT_EM.CODE_OBJ IS 'код объекта мониторинга'

/

COMMENT ON COLUMN OBJECT_EM.CLASS IS 'класс объекта (население территория объект)'

/

COMMENT ON COLUMN OBJECT_EM.DET_STRUCT IS 'детализация структуры'

/

COMMENT ON COLUMN OBJECT_EM.DET_TER IS 'детализация по местонахождению'

/

PROMPT Creating Table 'UNITMEASURE'

CREATE TABLE UNITMEASURE

(UNITMEAS VARCHAR2(20) NOT NULL

,MEASSYST VARCHAR2(15) NOT NULL

,FACTOR NUMBER

,CODE NUMBER(4,0)

,DISPLAY_FORMAT VARCHAR2(20)

)

/

COMMENT ON COLUMN UNITMEASURE.FACTOR IS 'Коэффициент перевода единиц измерения (1-для основного)'

/

COMMENT ON COLUMN UNITMEASURE.CODE IS 'Уникальный код'

/

COMMENT ON COLUMN UNITMEASURE.DISPLAY_FORMAT IS 'Форматная маска'

/

PROMPT Creating Table 'VALUE'

CREATE TABLE VALUE

(CODE NUMBER(6) NOT NULL

,DATA_START DATE NOT NULL

,DATA_STOP DATE NOT NULL

,VALUE_NUMBER NUMBER

,VALUE_TEXT VARCHAR2(240)

,DESCR VARCHAR2(240)

,PARAM_CODE NUMBER(6) NOT NULL

,ORG_CODE NUMBER(6,0) NOT NULL

,ОТЧЕТНОСТЬ_CODE NUMBER(6) NOT NULL

)

/

COMMENT ON COLUMN VALUE.CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN VALUE.DATA_START IS 'Дата начала усреднения параметра'

/

COMMENT ON COLUMN VALUE.DATA_STOP IS 'Дата окончания усреднения'

/

COMMENT ON COLUMN VALUE.VALUE_NUMBER IS 'Численное значение величины'

/

COMMENT ON COLUMN VALUE.VALUE_TEXT IS 'Текстовое значение величины'

/

COMMENT ON COLUMN VALUE.DESCR IS 'Комментарии'

/

COMMENT ON COLUMN VALUE.PARAM_CODE IS 'Уникальный идентификатор сущности'

/

COMMENT ON COLUMN VALUE.ОТЧЕТНОСТЬ_CODE IS 'Уникальный идентификатор сущности'

/

PROMPT Creating Table 'ISOTOPE'

CREATE TABLE ISOTOPE

(SHORTNAME VARCHAR2(10) NOT NULL

,FULLNAME VARCHAR2(50) NOT NULL

)

/

-- c:\temp\uir.con

--

-- Generated for Oracle 8 on Tue Dec 25 16:29:20 2001 by Server Generator 6.0.3.3.0

PROMPT Creating Primary Key on 'OTCHETNOST'

ALTER TABLE OTCHETNOST

ADD CONSTRAINT ОТЧЕТНОСТЬ_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'ORGANIZATION'

ALTER TABLE ORGANIZATION

ADD CONSTRAINT ORG_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'FORMA_OTCHETNOSTI'

ALTER TABLE FORMA_OTCHETNOSTI

ADD CONSTRAINT ФОРМА_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'SUBSTANCE'

ALTER TABLE SUBSTANCE

ADD CONSTRAINT SUBSTANCE_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'PERIOD'

ALTER TABLE PERIOD

ADD CONSTRAINT ПЕРИОДИЧН_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'ECOLOGY_NUMBER'

ALTER TABLE ECOLOGY_NUMBER

ADD CONSTRAINT ЭКОЛОГ_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'GROUP_PARAMETR'

ALTER TABLE GROUP_PARAMETR

ADD CONSTRAINT ГРУППА_ПАР_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'TYPE_ECOLOGY_NUMBER'

ALTER TABLE TYPE_ECOLOGY_NUMBER

ADD CONSTRAINT ТИП_ЭВ_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'ZAGRAZN_VV'

ALTER TABLE ZAGRAZN_VV

ADD CONSTRAINT ЗАГР_ВВ_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'SMES'

ALTER TABLE SMES

ADD CONSTRAINT СМЕСИ_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'ECOLOGY_PARAM'

ALTER TABLE ECOLOGY_PARAM

ADD CONSTRAINT PARAM_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'NORMATIV_PARAM'

ALTER TABLE NORMATIV_PARAM

ADD CONSTRAINT НОРМАТИВ_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'TERRITORIES'

ALTER TABLE TERRITORIES

ADD CONSTRAINT TER3_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'OBJECT_EM'

ALTER TABLE OBJECT_EM

ADD CONSTRAINT ОБЪЕКТ_ЭМ_PK PRIMARY KEY

(CODE)

/

PROMPT Creating Primary Key on 'UNITMEASURE'

ALTER TABLE UNITMEASURE

ADD CONSTRAINT UNI1_PK PRIMARY KEY

(UNITMEAS)

/

PROMPT Creating Primary Key on 'ISOTOPE'

ALTER TABLE ISOTOPE

ADD CONSTRAINT ISO_PK PRIMARY KEY

(SHORTNAME)

/

PROMPT Creating Unique Keys on 'ORGANIZATION'

ALTER TABLE ORGANIZATION

ADD ( CONSTRAINT ORG_SYS_C002890_UK UNIQUE

(NAME))

ADD ( CONSTRAINT ORG_SYS_C002891_UK UNIQUE

(SHORTNAME))

/

PROMPT Creating Unique Keys on 'TERRITORIES'

ALTER TABLE TERRITORIES

ADD ( CONSTRAINT TER3_SYS_C0027487_UK UNIQUE

(NAME))

/

PROMPT Creating Foreign Keys on 'OTCHETNOST'

ALTER TABLE OTCHETNOST ADD CONSTRAINT

ОТЧЕТНОСТЬ_ПЕРИОДИЧН_FK FOREIGN KEY

(ПЕРИОДИЧН_CODE) REFERENCES PERIOD

(CODE) ADD CONSTRAINT

ОТЧЕТНОСТЬ_PARAM_FK FOREIGN KEY

(PARAM_CODE) REFERENCES ECOLOGY_PARAM

(CODE) ADD CONSTRAINT

ОТЧЕТНОСТЬ_НОРМАТИВ_FK FOREIGN KEY

(НОРМАТИВ_CODE) REFERENCES NORMATIV_PARAM

(CODE) ADD CONSTRAINT

ОТЧЕТНОСТЬ_НОРМАТИВ_ЯВЛЯЕТС_FK FOREIGN KEY

(НОРМАТИВ_CODE_ЯВЛЯЕТСЯ) REFERENCES NORMATIV_PARAM

(CODE) ADD CONSTRAINT

ОТЧЕТНОСТЬ_UNI1_FK FOREIGN KEY

(UNI1_UNITMEAS) REFERENCES UNITMEASURE

(UNITMEAS) ADD CONSTRAINT

ОТЧЕТНОСТЬ_ОБЪЕКТ_ЭМ_FK FOREIGN KEY

(ОБЪЕКТ_ЭМ_CODE) REFERENCES OBJECT_EM

(CODE)

/

PROMPT Creating Foreign Keys on 'FORMA_OTCHETNOSTI'

ALTER TABLE FORMA_OTCHETNOSTI ADD CONSTRAINT

ФОРМА_ФОРМА_FK FOREIGN KEY

(ФОРМА_CODE) REFERENCES FORMA_OTCHETNOSTI

(CODE) ADD CONSTRAINT

ФОРМА_ORG_УТВЕРЖДЕНА_FK FOREIGN KEY

(ORG_CODE_УТВЕРЖДЕНА) REFERENCES ORGANIZATION

(CODE) ADD CONSTRAINT

ФОРМА_ПЕРИОДИЧН_FK FOREIGN KEY

(ПЕРИОДИЧН_CODE) REFERENCES PERIOD

(CODE)

/

PROMPT Creating Foreign Keys on 'ECOLOGY_NUMBER'

ALTER TABLE ECOLOGY_NUMBER ADD CONSTRAINT

ЭКОЛОГ_UNI1_FK FOREIGN KEY

(UNI1_UNITMEAS) REFERENCES UNITMEASURE

(UNITMEAS) ADD CONSTRAINT

ЭКОЛОГ_ТИП_ЭВ_FK FOREIGN KEY

(ТИП_ЭВ_CODE) REFERENCES TYPE_ECOLOGY_NUMBER

(CODE) ADD CONSTRAINT

ЭКОЛОГ_ГРУППА_ПАР_FK FOREIGN KEY

(ГРУППА_ПАР_CODE) REFERENCES GROUP_PARAMETR

(CODE)

/

PROMPT Creating Foreign Keys on 'GROUP_PARAMETR'

ALTER TABLE GROUP_PARAMETR ADD CONSTRAINT

ГРУППА_ПАР_ГРУППА_ПАР_FK FOREIGN KEY

(ГРУППА_ПАР) REFERENCES GROUP_PARAMETR

(CODE)

/

PROMPT Creating Foreign Keys on 'TYPE_ECOLOGY_NUMBER'

ALTER TABLE TYPE_ECOLOGY_NUMBER ADD CONSTRAINT

ТИП_ЭВ_FK FOREIGN KEY

(ТИП_ЭВ) REFERENCES TYPE_ECOLOGY_NUMBER

(CODE)

/

PROMPT Creating Foreign Keys on 'ZAGRAZN_VV'

ALTER TABLE ZAGRAZN_VV ADD CONSTRAINT

ЗАГР_ВВ_СМЕСИ_FK FOREIGN KEY

(СМЕСИ_CODE) REFERENCES SMES

(CODE) ADD CONSTRAINT

ЗАГР_ВВ_ISO_FK FOREIGN KEY

(ISO_SHORTNAME) REFERENCES ISOTOPE

(SHORTNAME) ADD CONSTRAINT

ЗАГР_ВВ_SUBSTANCE_FK FOREIGN KEY

(SUBSTANCE_CODE) REFERENCES SUBSTANCE

(CODE)

/

PROMPT Creating Foreign Keys on 'ECOLOGY_PARAM'

ALTER TABLE ECOLOGY_PARAM ADD CONSTRAINT

PARAM_UNI1_FK FOREIGN KEY

(UNI1_UNITMEAS) REFERENCES UNITMEASURE

(UNITMEAS) ADD CONSTRAINT

PARAM_ЭКОЛОГ_FK FOREIGN KEY

(ЭКОЛОГ_CODE) REFERENCES ECOLOGY_NUMBER

(CODE) ADD CONSTRAINT

PARAM_ЗАГР_ВВ_FK FOREIGN KEY

(ЗАГР_ВВ_CODE) REFERENCES ZAGRAZN_VV

(CODE) ADD CONSTRAINT

PARAM_ФОРМА_FK FOREIGN KEY

(ФОРМА_CODE) REFERENCES FORMA_OTCHETNOSTI

(CODE) ADD CONSTRAINT

PARAM_ПЕРИОДИЧН_FK FOREIGN KEY

(ПЕРИОДИЧН_CODE) REFERENCES PERIOD

(CODE)

/

PROMPT Creating Foreign Keys on 'VALUE'

ALTER TABLE VALUE ADD CONSTRAINT

VALUE_ORG_FK FOREIGN KEY

(ORG_CODE) REFERENCES ORGANIZATION

(CODE) ADD CONSTRAINT

VALUE_ОТЧЕТНОСТЬ_FK FOREIGN KEY

(ОТЧЕТНОСТЬ_CODE) REFERENCES OTCHETNOST

(CODE)

/

Приложение 3. Пример текста программы.

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "main.h"

#include "basic.h"

#include "unislct.h"

#include "filter.h"

#include "fieldsN.h"

#include "fieldText.h"

#include "fieldList.h"

#include "fieldValue.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "tbltmpl"

#pragma resource "*.dfm"

void __fastcall UploadMetaInfo(TformDescription *t_desc, AnsiString formname)

{

TADOQuery *mrT = new TADOQuery(NULL);

try

{

mrT->Connection = frmMain->cnncMetaInfo;

t_desc->formname = formname;

if (SELECT(mrT, "select * from forms where name = '" + t_desc->formname + "'"))

{

t_desc->title = mrT->FieldByName("title")->AsString;

t_desc->edittitle = mrT->FieldByName("edittitle")->AsString;

t_desc->accepttitle = mrT->FieldByName("accepttitle")->AsString;

t_desc->table = mrT->FieldByName("table")->AsString;

t_desc->keyfield = mrT->FieldByName("keyfield")->AsString;

t_desc->namefield = mrT->FieldByName("namefield")->AsString;

t_desc->listfield = mrT->FieldByName("listfield")->AsString;

t_desc->shortnamefield = mrT->FieldByName("shortnamefield")->AsString;

t_desc->sortfield = mrT->FieldByName("sortfield")->AsString;

t_desc->sequencename = mrT->FieldByName("sequencename")->AsString;

t_desc->readonly = mrT->FieldByName("readonly")->AsBoolean;

t_desc->takefieldsfrom = mrT->FieldByName("takefieldsfrom")->AsString;

t_desc->type = mrT->FieldByName("type")->AsString;

t_desc->hideonaccept = mrT->FieldByName("hideonaccept")->AsBoolean;

t_desc->parentfield = mrT->FieldByName("parentfield")->AsString;

} else

{

throw Exception("Ошибка: Форма {" + t_desc->formname + "} отсутствует");

}

} __finally

{

delete mrT;

}

}

//---------------------------------------------------------------------------

__fastcall TfrmUniForm::TfrmUniForm(TComponent* Owner, TMenuItem* itm, AnsiString formname)

: TForm(Owner)

{

this->itm = itm;

uid = "";

link = false;

desc = new TformDescription();

slv = NULL; lnk = NULL;

desc->formname = formname;

form->dsc = desc;

parentform = NULL;

if (itm) itm->Enabled = false;

accept = false;

btnlst = new TList();

fltlst = new TList();

fldlst = new TList();

UploadInfo();

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::UploadInfo()

{

UploadMetaInfo(desc, desc->formname);

this->Caption = desc->title;

form->editpanel->Caption = desc->edittitle;

form->dbgBrowse->Columns->Items[0]->FieldName = desc->listfield;

form->dbgBrowse->Columns->Items[0]->Title->Caption = "Название";

if (desc->readonly) { form->tblBrowse->ReadOnly = true; }

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::ReorderFilters()

{

for (int r=0; r<fltlst->Count; r++)

{

TfrmFilter* fr = ((TfrmFilter*)((TfltAddInfo*)fltlst->Items[r])->pntr);

fr->Align = alNone;

fr->Visible = false;

}

for (int r=0; r<fltlst->Count; r++)

{

TfrmFilter* fr = ((TfrmFilter*)((TfltAddInfo*)fltlst->Items[r])->pntr);

fr->Visible = true;

fr->Align = alTop;

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::Execute()

{

if (link)

{

form->Go();

// запомним мета-информацию по полям

int cnt = form->tblBrowse->Fields->Count;

TField **flms = new TField*[cnt];

for(int i = 0; i < cnt; i++)

{

TFieldType dtype = form->tblBrowse->Fields->Fields[i]->DataType;

if (dtype == ftInteger) flms[i] = new TIntegerField(this);

if (dtype == ftString) flms[i] = new TStringField(this);

if (dtype == ftFloat) flms[i] = new TFloatField(this);

if (dtype == ftDate) flms[i] = new TDateField(this);

if (dtype == ftDateTime) flms[i] = new TDateTimeField(this);

if (dtype == ftTime) flms[i] = new TTimeField(this);

flms[i]->Required = form->tblBrowse->Fields->Fields[i]->Required;

flms[i]->ReadOnly = form->tblBrowse->Fields->Fields[i]->ReadOnly;

flms[i]->FieldName = form->tblBrowse->Fields->Fields[i]->FieldName;

flms[i]->Size = form->tblBrowse->Fields->Fields[i]->Size;

flms[i]->Tag = (int)dtype;

}

form->tblBrowse->Close();

for(int i = 0; i < cnt; i++) flms[i]->DataSet = form->tblBrowse;

// добавим lookup-поле

TStringField *fld = new TStringField(form->tblBrowse);

fld->ReadOnly = true;

fld->FieldName = desc->listfield;

fld->FieldKind = fkLookup;

AnsiString tmp;

tmp = lnk->linktofield; StrRpl(tmp, ",", ";");

fld->KeyFields = tmp;

tmp = slv->keyfield; StrRpl(tmp, ",", ";");

fld->LookupKeyFields = tmp;

fld->LookupDataSet = form->tblAdd;

fld->LookupResultField = slv->listfield;

fld->Lookup = true;

if (form->tblAdd->Active)

fld->Size = form->tblAdd->FieldByName(slv->listfield)->Size;

fld->DataSet = form->tblBrowse;

form->dbgBrowse->Columns->Items[0]->FieldName = fld->FieldName;

form->dbgBrowse->Columns->Items[0]->Title->Caption = "Название";

}

AnsiString strw;

if (!accept || !desc->hideonaccept)

{

strw = "select * from buttons where parentform = '" + desc->formname + "' ";

if (!desc->takefieldsfrom.IsEmpty()) strw += "or parentform = '" + desc->takefieldsfrom + "' ";

strw += "order by sortorder desc";

if (SELECT(mqrA, strw))

{

do

{

TToolButton* btn = form->AddLinkBtn(mqrA->FieldByName("title")->AsString, CommonButtonClick);

TbtnAddInfo *inf = new TbtnAddInfo();

inf->childform = mqrA->FieldByName("childform")->AsString;

inf->childtitle = mqrA->FieldByName("childtitle")->AsString;

inf->linkform = mqrA->FieldByName("linkform")->AsString;

inf->linktofield = mqrA->FieldByName("linktofield")->AsString;

inf->linkfromfield = mqrA->FieldByName("linkfromfield")->AsString;

inf->type = mqrA->FieldByName("type")->AsString;

inf->sql = mqrA->FieldByName("sql")->AsString;

btn->Tag = btnlst->Add(inf);

mqrA->Next();

} while (!mqrA->Eof);

}

}

strw = "select * from filters where parentform = '" + desc->formname + "' ";

if (!desc->takefieldsfrom.IsEmpty()) strw += "or parentform = '" + desc->takefieldsfrom + "' ";

strw += "order by sortorder desc";

if (SELECT(mqrA, strw))

{

do

{

TfrmFilter* flt = form->AddFilter(mqrA->FieldByName("title")->AsString, CommonFilterChange, CommonFilterClear);

TfltAddInfo *inf = new TfltAddInfo();

inf->childform = mqrA->FieldByName("childform")->AsString;

inf->filtersql = mqrA->FieldByName("filtersql")->AsString;

inf->sql = mqrA->FieldByName("sql")->AsString;

inf->type = mqrA->FieldByName("type")->AsString;

inf->name = mqrA->FieldByName("name")->AsString;

inf->code = mqrA->FieldByName("code")->AsInteger;

inf->logic = mqrA->FieldByName("logic")->AsInteger;

inf->pntr = flt;

inf->retid = "";

if (inf->logic == 1) form->FilterBy("a" + IntToStr(inf->code), "(1=0)");

if (lnk)

if (inf->childform == lnk->parentform)

{

inf->retid = lnk->linkvalue;

inf->rettitle = lnk->linktitle;

flt->edt->Text = lnk->linktitle;

// в uid возвращается выбранный код

AnsiString str = inf->filtersql;

if (retid.IsEmpty()) str="";

else StrRpl(str, "%1", lnk->linkvalue);

form->FilterBy("a" + IntToStr(inf->code), str);

flt->btn->Enabled = false;

flt->btnclr->Enabled = false;

flt->Enabled = false;

}

flt->Tag = fltlst->Add(inf);

mqrA->Next();

} while (!mqrA->Eof);

}

if (!accept || !desc->hideonaccept)

{

// подгрузка полей БД из имеющейся метаинформации

strw = "select * from fields where parentform = '" + desc->formname + "' ";

if (!desc->takefieldsfrom.IsEmpty()) strw += "or parentform = '" + desc->takefieldsfrom + "' ";

strw += "order by sortorder";

if (SELECT(mqrA, strw))

{

do

{

// сразу создадим все формы полей, инициализируем их, а также оставим ВСЮ семантику в этих формах

TfieldAddInfo *inf = new TfieldAddInfo();

inf->fieldname = mqrA->FieldByName("fieldname")->AsString;

inf->title = mqrA->FieldByName("title")->AsString;

inf->type = mqrA->FieldByName("type")->AsString;

inf->childform = mqrA->FieldByName("childform")->AsString;

inf->sql = mqrA->FieldByName("sql")->AsString;

inf->ReadOnly = mqrA->FieldByName("readonly")->AsBoolean;

inf->isqbe = mqrA->FieldByName("isqbe")->AsBoolean;

inf->value = mqrA->FieldByName("value")->AsString.Trim();

inf->code = mqrA->FieldByName("code")->AsInteger;

if (inf->type == (AnsiString)"T")

{

TfrmeFT *fr = new TfrmeFT(this, form->dsrcBrowse, inf);

fr->Parent = form->editarea; fr->Name = ""; fr->Align = alTop; inf->form = fr;

}

if ((inf->type == (AnsiString)"I") || (inf->type == (AnsiString)"S"))

{

TfrmeFV *fr = new TfrmeFV(this, form->dsrcBrowse, inf);

fr->Parent = form->editarea; fr->Name = ""; fr->Align = alTop; inf->form = fr;

}

if (inf->type == (AnsiString)"C")

{

TfrmeFieldsN *fr = new TfrmeFieldsN(this, form->dsrcBrowse, inf);

fr->Parent = form->editarea; fr->Name = ""; fr->Align = alTop; inf->form = fr;

}

if (inf->type == (AnsiString)"F") // поле интерпетируется на этапе подстановки при New,

{ // а также для фильтрации (т.е. используется для

// реализации ограниченных наборов)

form->FilterBy("flt_" + inf->fieldname, inf->sql);

}

if (inf->type == (AnsiString)"L")

{

TfrmeList *fr = new TfrmeList(this, form->dsrcBrowse, inf);

if (SELECT(mqrB, "select * from fieldelements where parentfield = " +

mqrA->FieldByName("code")->AsString + " order by sortorder"))

{

do

{

fr->AddElement(mqrB->FieldByName("title")->AsString, mqrB->FieldByName("value")->AsString);

mqrB->Next();

} while (!mqrB->Eof);

fr->Go();

mqrB->Close();

}

fr->Parent = form->editarea; fr->Name = ""; fr->Align = alTop; inf->form = fr;

}

fldlst->Add(inf);

mqrA->Next();

} while (!mqrA->Eof);

}

mqrA->Close();

}

bool f = ((desc->type == (AnsiString)"T") && (!desc->parentfield.Trim().IsEmpty()));

form->spbTree->Visible = f;

form->dbnPlus->Visible = f;

form->SetTreeMode(f);

TuneFilters();

form->Go();

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::TuneFromBtn(TbtnAddInfo *lnkinfo, AnsiString linkvalue, AnsiString linktitle, AnsiString parentform)

{

if (!lnk) lnk = new TlnkFromBtn();

form->lnkb = lnk;

lnk->linkform = lnkinfo->linkform;

lnk->linktofield = lnkinfo->linktofield;

lnk->linkfromfield = lnkinfo->linkfromfield;

lnk->linkvalue = linkvalue;

lnk->linktitle = linktitle;

lnk->parentform = parentform;

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::TuneForLink()

{

link = true;

slv = new TformDescription();

UploadMetaInfo(slv, lnk->linkform);

form->slv = slv;

form->link = link;

desc->listfield = "add_lnkform_nam";

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::InitTblAdd()

{

// инициализация tblAdd

AnsiString str;

str = "select " + slv->listfield + ", " + slv->keyfield + " from " + slv->table;

form->tblAdd->SQL->Clear();

form->tblAdd->SQL->Add(str);

try

{

form->tblAdd->Close();

form->tblAdd->Open();

} catch(EOracleError &E)

{

ShowMessage(E.Message + ", запрос: '" + str + "'");

return;

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::TuneFilters()

{

if (!parentform) return;

TList* patfrm_fltlst = ((TfrmUniForm*)parentform)->fltlst;

TList* patfrm_fldlst = ((TfrmUniForm*)parentform)->fldlst;

if (patfrm_fltlst)

{

for (int r=0; r<fltlst->Count; r++)

for (int i=0; i<patfrm_fltlst->Count; i++)

{

TfltAddInfo* tm_r = ((TfltAddInfo*)(fltlst->Items[r]));

TfltAddInfo* tm_i = ((TfltAddInfo*)(patfrm_fltlst->Items[i]));

if (tm_r->name == tm_i->name)

{

tm_r->retid = tm_i->retid;

tm_r->rettitle = tm_i->rettitle;

TfrmFilter* src = ((TfrmFilter*)tm_r->pntr);

src->edt->Text = tm_i->rettitle;

// в uid возвращается выбранный код

AnsiString str = tm_r->filtersql;

if (retid.IsEmpty()) str="";

else StrRpl(str, "%1", retid);

form->FilterBy("a" + IntToStr(tm_r->code), str);

}

}

}

if (accept && patfrm_fldlst)

{

TfrmUniForm* uni = ((TfrmUniForm*)parentform);

if (!uni->form->tblBrowse->IsEmpty())

{

for (int r=0; r<patfrm_fldlst->Count; r++)

for (int i=0; i<fltlst->Count; i++)

{

TfieldAddInfo *fl = ((TfieldAddInfo*)patfrm_fldlst->Items[r]);

TfrmeFieldsN *tm_i = ((TfrmeFieldsN*)(fl->form));

TfltAddInfo *tm_r = ((TfltAddInfo*)(fltlst->Items[i]));

if ((fl->type == (AnsiString)"C") && (fl->fieldname == tm_r->name))

if (!uni->form->tblBrowse->FieldByName(fl->fieldname)->IsNull)

{

tm_r->retid = uni->form->tblBrowse->FieldByName(fl->fieldname)->AsString;

tm_r->rettitle = tm_i->name->Text;

TfrmFilter* src = ((TfrmFilter*)tm_r->pntr);

src->edt->Text = tm_i->name->Text;

// в uid возвращается выбранный код

AnsiString str = tm_r->filtersql;

if (retid.IsEmpty()) str="";

else StrRpl(str, "%1", retid);

form->FilterBy("a" + IntToStr(tm_r->code), str);

}

}

}

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::CommonButtonClick(TObject *Sender)

{

TbtnAddInfo* tm = ((TbtnAddInfo*)btnlst->Items[((TToolButton*)Sender)->Tag]);

if (form->tblBrowse->IsEmpty()) return;

// обработка настройки дочерней формы по нажатию кнопки контекстного перехода

AnsiString _title = tm->childtitle, _filter = tm->sql;

UseReplaces(_title, _filter);

bool s = (tm->type == (AnsiString)"S"), l = (tm->type == (AnsiString)"L");

if (!s && !l) return;

try

{

TfrmUniForm *frm = new TfrmUniForm(frmMain, NULL, tm->childform);

frm->parentform = this;

if (!_filter.Trim().IsEmpty()) frm->form->FilterBy("parent", _filter);

if (!_title.Trim().IsEmpty()) frm->Caption = _title;

if (s || l) frm->TuneFromBtn(tm, form->tblBrowse->FieldByName(desc->keyfield)->AsString, form->tblBrowse->FieldByName(desc->listfield)->AsString, desc->formname);

if (l) frm->TuneForLink();

if (l) frm->InitTblAdd();

frm->Execute();

frm->FormStyle = fsMDIChild;

frm->Show();

} catch (Exception &E)

{

ShowMessage(E.Message);

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::CommonFilterChange(TObject *Sender)

{

// обработка вызова дочерней формы по нажатию кнопки фильтра

TfrmFilter* src = ((TfrmFilter*)Sender);

TfltAddInfo* tm = ((TfltAddInfo*)fltlst->Items[src->Tag]);

int i = CallOtherForm(tm->childform, "", tm->sql, true, true);

if (i == mrOk)

{

tm->retid = retid;

tm->rettitle = rettitle;

src->edt->Text = rettitle;

// в uid возвращается выбранный код

AnsiString str = tm->filtersql;

if (retid.IsEmpty()) { CommonFilterClear(Sender); return; }

else StrRpl(str, "%1", retid);

form->FilterBy("a" + IntToStr(tm->code), str);

form->Go();

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::CommonFilterClear(TObject *Sender)

{

// обработка вызова дочерней формы по нажатию кнопки фильтра

TfrmFilter* src = ((TfrmFilter*)Sender);

TfltAddInfo* tm = ((TfltAddInfo*)fltlst->Items[src->Tag]);

tm->retid = "";

src->edt->Text = "";

AnsiString str = "";

if (tm->logic == 1) str = "(1=0)";

form->FilterBy("a" + IntToStr(tm->code), str);

form->Go();

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::CommonFltSlctChange(TObject *Sender)

{

// обработка вызова дочерней формы по выбору из списка

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::FormClose(TObject *Sender,

TCloseAction &Action)

{

Action = caFree;

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::formbtbtnCancelClick(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::formbtbtnOKClick(TObject *Sender)

{

if (!form->tblBrowse->IsEmpty())

{

this->uid = form->tblBrowse->FieldByName(desc->keyfield)->AsString;

this->rettitle = form->tblBrowse->FieldByName(desc->listfield)->AsString;

this->ModalResult = mrOk;

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::TuneForAccept()

{

if (form) form->TuneForAccept();

accept = true;

 

 

 

 

 

 

 

содержание   ..  610  611  612   ..