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

Программное обеспечение базы данных “Система экологического мониторинга.




Содержание

	Содержание	1

	Введение	2

	Экологический мониторинг	5

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

	Цели  и задачи СЭМ  Минатома	9

	Состав и структура системы экологического мониторинга ситуационно кризисного центра СЭМ СКЦ	12

	Программно-техническое обеспечение СЭМ СКЦ	12

	Информационное обеспечение	12

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

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

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

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

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






Введение



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

База данных была спроектирована в рамках проекта Экологического мониторинга Министерства атомной энергии и промышленности, и входит в систему экологического мониторинга ситуационно кризисного центра Минатома.

Использование данной системы направлено на:

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

		Централизованную передачу данных ведомственной системы мониторинга в рамках Единой государственной системы экологического мониторинга;

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

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

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

		Обеспечение  информационно-аналитической поддержки руководства отрасли и предприятий, в том числе в случае ЧС с экологическими последствиями на объектах Минатома России или в регионах их размещения

		Автоматизацию деятельности специалистов по экологическому мониторингу  подразделений Минатома России.

	База данных удовлетворяет требованиям 

	1. Система должна быть полностью интегрирована с другими действующими информационными системами ИАК СКЦ Минатома России  входит в систему, как раздел “Экология”

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

	3. Состав и гриф конфиденциальности информации, размещаемой во вновь разрабатываемых структурах БД,  должны быть определены администратором.

	

	Раздел “Экология” БД СКЦ включает следующие блоки информации:

Ежегодные данные государственной статистической отчетности радиационно-опасных предприятий Минатома по формам 2-ТП воздух, водохозяйство, токсичные отходы, радиоактивность и радиоактивные отходы (пример формы радиоактивность приведен в приложении).

Обобщенные показатели по сбросам – выбросам предприятий Минатома и состояния внешней среды 

Среднегодовые данные по выбросам, сбросам и отходам в разрезе субъектов Федерации (и основных населенных пунктов) и отраслей народного хозяйства.

Среднегодовые данные по загрязнению атмосферного воздуха в районах размещения радиационно-опасных предприятий Минатома (в разрезе субъектов федераций и основных населенных пунктов).

Среднегодовые данные по загрязнению поверхностных вод в пунктах контроля в районах размещения радиационно-опасных предприятий Минатома (в разрезе субъектов Федерации и основных населенных пунктов по ОКАТО).

Необходимые справочники и классификаторы (ОКЕИ ОКОНХ и т.д.).

	

	Было также написано клиентское приложение АРМ Администратора, позволяющее редактировать записи базы данных.

Приложение “Администратор” должно обеспечить возможность ввода (загрузки), корректировки, импорта и просмотра данных

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


Экологический мониторинг



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

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

Представлялось, что организованная таким образом Система экологического мониторинга должна накапливать, систематизировать и анализировать информацию: 

о состоянии окружающей среды; 

о причинах наблюдаемых и вероятных изменений состояния (т.e., об источниках и факторах воздействия); 

о допустимости изменений и нагрузок на среду в целом; 

о существующих резервах биосферы.

Реальная ситуация оказалась намного более сложной. Зачастую не удавалось четко определить реальную причину происходящих в окружающей среде изменений. Выявление реальной причины становилось предметом серьезных исследований, а не действия системы. По этой причине формулировки определения экологического мониторинга претерпели изменения. Так, Государственный доклад "О состоянии окружающей природной среды в РФ в 1995 г." определяет экологический мониторинг в РФ следующим образом: комплекс выполняемых по научно обоснованным программам наблюдений, оценок, прогнозов и разрабатываемых на их основе рекомендаций и вариантов управленческих решений, необходимых и достаточных для обеспечения управления состоянием окружающей природной среды и экологической безопасностью. 

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

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

изучение сильных воздействий локальном масштабе, то есть когда речь идет об импактных воздействиях И);

региональный - Р); 

фоновый (в биосферных заповедниках — Ф). 

Статья 68. Задачи экологического контроля. 

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

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

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

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





           Уполномоченные федеральные органы в области охраны природы

            (по состоянию на 10 мая 2001 г.).

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



 Функции и задачи природоохранной деятельности

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

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

осуществление государственной политики и государственного контроля

межотраслевая координация 

государственная экологическая экспертиза

 формирование нормативно-правовой базы и регулирование природопользования

 мониторинг источников антропогенного воздействия на ОПС и состояния биоты (кроме лесов)

 обеспечение экологической информацией

 международные обязательства РФ

 заповедные территории.



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

ресурсов РФ

 (МПР России)

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

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

координация деятельности федеральных органов власти

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

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

охрана и восстановление водных объектов, бассейновое регулирование

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



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

 (Росгидромет)

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

мониторинг состояния и загрязнения атмосферы, поверхностных вод суши, почв, морской среды

комплексный фоновый мониторинг и космический мониторинг состояния природных объектов

 оценка климатических изменений

 исследование геофизических процессов в биосфере



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

(Минсельхозпрод)

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

мелиорация земель

 охрана, контроль и регулирование использования объектов животного мира  и среды их обитания (объекты охоты, водные биологические ресурсы в части влияния на рыбные запасы)

обеспечение плодородия земель с/х назначения

 безопасное обращение с пестицидами и ядохимикатами 

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



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

комитет РФ

(Госкомзем)

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

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

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

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



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

(Госкомрыболовство) 

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

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

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

лицензирование рыболовства и рыбоводства; 

охрана водных биоресурсов, повышение рыбопродуктивности водоемов.

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

(Рослесхоз)



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

организация и обеспечение рационального лесопользования

сохранение и усиление средообразующих, водоохранных, оздровительных и др. полезных природных свойств леса

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

охрана объектов животного мира и среды их обитания на землях лесного фонда



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

(Роскартография)

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

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

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

(ФПС России)

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

государственный контроль за соблюдением законодательства РФ в сфере охраны запасов рыб в территориальном море, исключительной экономической зоны и континентального шельфа РФ



В 1993 году было принято решение о создании Единой государственной системы экологического мониторинга (ЕГСЭМ). Однако до сих пор работы по созданию EГСЭМ находятся на стадии пилотных проектов регионального масштаба. 

Предполагалось, что ЕГСЭМ будет обеспечивать: 

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

регламентацию и контроль сбора и обработки достоверных и сопоставимых данных; 

хранение информации, ведение специальных банков данных и их гармонизацию (согласование, телекоммуникационную связь) с международными эколого-информационными системами; 

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

доступность интегрированной экологической информации широкому кругу потребителей. 

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

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





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



Перечень нормативных правовых актов высших органов государственной власти Российской Федерации по вопросам охраны окружающей среды и природопользования, принятых до 1998 г., насчитывает 316 наименований. Ниже приведены основные нормативно-правовые акты по вопросам охраны окружающей среды и природопользования:

Конституция Российской  Федерации; Законе РСФСР “Об охране окружающей природной среды” и других законодательных актах; 

Основные положения государственной стратегии Российской Федерации по охране окружающей среды и обеспечению устойчивого развития (Указ Президента Российской Федерации от 4 февраля 1994 г. № 236); 

План действий Правительства Российской Федерации в области охраны окружающей среды на 1994–1995 гг. и 1996–1997 гг. (постановления Правительства Российской Федерации от 18 мая 1994 г. № 496 и от 19 февраля 1996 г. № 155) и региональных планах действий по охране окружающей среды; 

Концепция перехода Российской Федерации к устойчивому развитию (Указ Президента Российской Федерации от 1 апреля 1996 г. № 440); 

Государственная стратегия устойчивого развития Российской Федерации, проект которой в основном одобрен Правительством 11 декабря 1997 г.; 

Национальный план действий по охране окружающей среды Российской Федерации на 1999–2001 годы 



Цели  и задачи СЭМ  Минатома

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

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

Таким образом, система экологического мониторинга СКЦ Минатома включает:

отраслевой экологический (по сути локальный) мониторинг;

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



Для достижения указанной цели необходимо решение следующих задач:

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

централизованная передача данных ведомственной системы мониторинга в рамках Единой государственной системы экологического мониторинга;

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

 учета и контроля ядерно-, радиационно- и химически опасных объектов, включая выведенные из состава ВМФ АПЛ, загрязненных в результате функционирования предприятий территорий и работ по их дезактивации и реабилитации;

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

 обеспечение  информационно-аналитической поддержки руководства отрасли и предприятий в случае ЧС (с экологическими последствиями) на объектах Минатома или в регионах их размещения.

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

Ряд из перечисленных задач может быть реализован в рамках основного режима функционирования СКЦ Минатома России – получение регулярных сообщений непосредственно с предприятий отрасли и/или уже действующих центров сбора информации (ВНИИХТ, ЦНИИАТОМИНФОРМ) на основе уже существующих и  создаваемых форм отчетности. Для этих задач необходима разработка документов, регламентирующих поступление сообщений в СКЦ и создание сопряженных с другими подсистемами СКЦ программных средств передачи и приема сообщений, их хранения, обработки и представления на технических средствах СКЦ.

Для решения задачи 2 необходимо подготовка регламентов передачи данных в рамках ЕГСЭМ и необходимых программно-технических средств.

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

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

Для решения задачи 7 необходимо не только наличие данных по исходному состоянию потенциальных источников выбросов и сбросов радиоактивных веществ и химических загрязнителей, но и средства оперативного анализа и прогнозирования обстановки и их представления на ПТК СКЦ.

Таким образом, для создания СЭМ СКЦ работы должны вестись по следующим направлениям:

Разработка регламентов передачи данных с предприятий и отраслевых информационных центров в СКЦ Минатома.

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

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

Информационно-техническое обеспечение работ экспертных групп и центров технической поддержки в случае возникновения ЧС.


Состав и структура системы экологического мониторинга ситуационно кризисного центра СЭМ СКЦ

Программно-техническое обеспечение СЭМ СКЦ



Программно-техническое обеспечение СЭМ СКЦ должна включать следующие подсистемы:

Приема и отображения данных экологического мониторинга предприятий отрасли;

Сбора и представления данных отраслевой и ведомственных систем экологического мониторинга (природоохранной отчетности) – приложение 4;

Учета радиационно- и химически-опасных объектов отрасли (в том числе выводимых из состава флота АПЛ), радиоактивно-загрязненных территорий, работ по их утилизации и реабилитации в рамках реализации отраслевых и государственных экологических программ;

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

Поддержки принятия решений при возникновении в случае ЧС на объектах Минатома или в регионах их размещения.

Представления интегральных показателей экологического мониторинга руководству отрасли и пользователям корпоративной сети Минатома

Нормативно-правовой документации по проблемам экологии



Информационное обеспечение



1. Справочная информация. К ней относятся: 

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

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

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

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

- планы мероприятий по защите персонала и населения в случае аварии на объекте;

- модели расчета распространения загрязнителя в случае аварии на объекте (модель рассеивания загрязнителя в атмосфере, модель формирования “следа” загрязнения, модели распространения загрязнителя в водоемах и водотоках, др.)

- проектные данные об авариях на объекте, данные об их последствиях. 

- нормативно-правовая документация по вопросам охраны окружающей среды (законодательство РФ, постановления КМ РФ, ведомственные нормы и правила, ГОСТ, СНиПы, отраслевые документы, приказы и распоряжения Минатома) – приложение 5.

-Справочная информация терминов и определения (глоссарий по экологическому мониторингу) накапливается, обновляется и хранится в базе данных СКЦ. 

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

2. Регламентная информация. Это информация, получаемая специализированными службами объектов (лаборатории внешней дозиметрии, отделы охраны окружающей среды) в ходе выполнения регламентных работ по контролю объекта, как источника загрязняющих веществ и контролю за содержанием загрязнителя в объектах внешней среды на территории санитарно-защитной зоны и зоны наблюдения. К регламентной информации относится также информация от сторонних организаций, предприятий, ведомств, получаемая объектами Минатома и (или) СКЦ. Примерами такой информации являются: данные территориальных СЭС, информация Росгидромета, Минприроды, ГАН, Госкомстата и др. К регламентной информации следует отнести также информацию по НИР, выполняемых для предприятий по тематике охраны окружающей среды, а также аналитическая информация, подготавливаемая специализированными учреждениями Минатома (ЦНИИАТОМИНФОРМ, ВНИИХТ и др.). Данная информация поступает с объектов Минатома в специализированные учреждения Минатома (НИИ, главки, отделы). Одним из пользователей этой информации должен стать СКЦ. Регламентная информация используется СКЦ для решения собственных задач, а также для пополнения и совершенствования справочной информации СЭМ СКЦ. 

3. Оперативная информация. К ней относится информация, получаемая СКЦ от предприятий Минатома в автоматическом режиме (пример – информация АСКРО), а также информация, получаемая в автоматическом режиме от учреждений других ведомств (пример – метеоинформация от Росгидромета). Оперативной информацией являются также данные, получаемые от объектов Минатома при возникновении от них ЧС. 

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

К аналитической информации относится также и основной продукт деятельности СКЦ – информационно-аналитические материалы, направляемые на предприятия отрасли, руководству Минатома и в сторонние учреждения, в том числе в СМИ (оформленные в установленном порядке).





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



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

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

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

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

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

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

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

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

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



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



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

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

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

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

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


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



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

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

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

по экологическим величинам

по объектам экологического мониторинга 

по организации – источнику данных



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

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

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

файл Acrobat reader atrib_uir.pdf..

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

Developer 2000



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



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





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





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



Клиентское приложение написано в среде Borlan C++ 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

Образовалось в организации, всего











Х

Х

Х


101

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



















102



















103



















200

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











Х

Х

Х


201

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



















202



















203



















300

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











Х

Х

Х


301

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













Х

Х



302













Х

Х



303













Х

Х




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

А

Б

1

2

3

4

5

6

7

8

400

Переработано в организации, всего











Х

Х

Х


401

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













Х

Х



402













Х

Х



403













Х

Х



500

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











Х

Х

Х


501

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



















502



















503



















Наличие на конец отчетного года

600

Всего











Х

Х

Х



601

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



















602



















603



















604



















605



















700

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











Х

Х

Х


701

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



















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


510

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

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






















511

в том числе:

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





















512

в санитарно-защитной зоне





















513

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






















520

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

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






















521

в том числе:

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





















522

под лесные насаждения





















523

под строительство





















524

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























530

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

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






















531

в том числе:

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





















532

в санитарно-защитной зоне





















533

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






















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

А

Б

1

2

3

4

5

6

7

8

9

10


540

Из строки 530:

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






















541

в том числе:

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






















542

из них:























543























544























545























546























551

в санитарно-защитной зоне






















552

из них:























553























554























561

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






















562

из них:























563























564























570

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






















571

в том числе:

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






















572

из них:























573























574























575























581

в санитарно-защитной зоне






















582

из них:























583























584























591

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






















592

из них:























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;



  if (!desc->accepttitle.IsEmpty()) this->Caption   = desc->accepttitle;

  if (desc->hideonaccept) this->Width = 500;

}



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

void __fastcall TfrmUniForm::FormDestroy(TObject *Sender)

{

  if (desc) delete desc;

  if (slv)  delete slv;

  if (lnk)  delete lnk;



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

    delete ((TbtnAddInfo*)(btnlst->Items[r]));

  delete btnlst;



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

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

  delete fltlst;



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

    delete ((TfieldAddInfo*)(fldlst->Items[r]));

  delete fldlst;



  if (itm) itm->Enabled = true;

}



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

void __fastcall TfrmUniForm::UseReplaces(AnsiString &title, AnsiString &filter)

{

  if (!form->tblBrowse->IsEmpty() && !form->tblBrowse->FieldByName(desc->keyfield )->IsNull)

  {

    StrRpl(title,  "%1", form->tblBrowse->FieldByName(desc->listfield)->AsString);

    StrRpl(filter, "%1", form->tblBrowse->FieldByName(desc->keyfield )->AsString);

  }



  StrRpl(filter, "<<", "|%%");

  StrRpl(filter, ">>", "%%|");



  // учтём подстановки полей вида <field>, а также их возможные NULL

  filter = TranslateString(filter, FieldValue);



  StrRpl(filter, "|%%", "<");

  StrRpl(filter, "%%|", ">");

  // учтём (ссылки на другие фильтры) подстаноки вида <<flt_value>>, а также их возможные NULL

  filter = TranslateString(filter, FilterValue);



  StrRpl(filter, "'NULL'", "NULL");

}



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

int  __fastcall TfrmUniForm::CallOtherForm(AnsiString _form, AnsiString _title, AnsiString _filter,

        bool _modal, bool _accept)

{

  UseReplaces(_title, _filter);



  int res = 0;



  try

  {

    TfrmUniForm *frm = new TfrmUniForm(((_modal)?(TForm*)Owner:(TForm*)frmMain), NULL, _form);

    frm->parentform = this;



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

    if (_accept) { frm->TuneForAccept(); frm->parentform = this; }

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

    frm->Execute();



    if (_modal)

    {

      frm->FormStyle = fsNormal;

      res = frm->ShowModal();

      retid    = frm->uid;

      rettitle = frm->rettitle;

                                                      

    } else

    {

      frm->FormStyle = fsMDIChild;

      frm->Show();

    }

  } catch (Exception &E)

  {

    ShowMessage(E.Message);

  }

  return res;

}



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

void __fastcall TfrmUniForm::formdbgBrowseDblClick(TObject *Sender)

{

  if (accept && form->btbtnOK->Visible && form->pnlLCOK->Visible)

    formbtbtnOKClick(this);

}





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

AnsiString __fastcall TfrmUniForm::FieldValue(AnsiString valname)

{

  AnsiString tmp;

  if (!form->tblBrowse->FieldByName(valname.Trim())->IsNull)

    tmp= form->tblBrowse->FieldByName(valname.Trim())->AsString;

  else

    tmp= "NULL";



  return tmp;

}



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

AnsiString __fastcall TfrmUniForm::FilterValue(AnsiString valname)

{

  AnsiString tmp;



  // выясним текущее значение указанного фильтра

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

  {

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

    if (tm->name == valname.Trim())

    {

      if (!tm->retid.IsEmpty())

        tmp= tm->retid;

      else

        tmp= "NULL";

    }

  }



  return tmp;

}



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

// ф-ция разбора строки

AnsiString __fastcall TfrmUniForm::TranslateString(AnsiString str, TGetValueEvent evt)

{

  AnsiString tmp, filter, _filter = str;



  tmp = "";

  filter = "";

  bool b = false;

  for(int r=1; r<=_filter.Length(); r++)

  {

    if (_filter[r] == '<' && !b) { b = true; tmp = ""; }

      else

    if (_filter[r] == '>' &&  b && (!tmp.Trim().IsEmpty())) { b = false; filter+=evt(tmp); }

      else

   if (_filter[r] != '<' &&  b) { tmp   += _filter[r];  }

      else

    if (!b) { filter+= _filter[r];  }

  }



  return filter;

}



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

void __fastcall TfrmUniForm::FormShow(TObject *Sender)

{

  if (accept) ReorderFilters();

}



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