Разработка модуля поддержки процессов организации повышения квалификации преподавателей в рамках АСУ МИИТ

 

Аннотация


Данный дипломный проект посвящен разработке модуля поддержки процессов организации повышения квалификации преподавателей в рамках АСУ МИИТ.

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

В ходе работы дипломного проекта разрабатывается приложение, автоматизирующее технологию организации повышения квалификации. Данное приложение интегрировано в существующую корпоративную систему АСУ МИИТа.

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

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

Кроме того, в дипломном проекте освещаются вопросы человеко-машинного взаимодействия.

приложение архитектура данный пользователь

Содержание


Аннотация

Введение

Обозначения и сокращения

. Анализ существующей технологии организации повышения квалификации преподавателей. Обоснование целесообразности

.1 Цель проектирования

.2 Постановка задачи

.3 Анализ существующей технологии организации повышения квалификации преподавателей

.3.1 Описание предметной области

.3.2 Описание процесса организации повышения квалификации преподавателей в МИИТе

.3.3 Анализ существующей технологии организации повышения квалификации преподавателей в МИИТе

.4 Обоснование целесообразности разработки

.5 Требования к разрабатываемому приложению

.5.1 Требования к архитектуре

.5.2 Требования ко времени выполнения запросов

.5.3 Требования к функциям программного обеспечения

.5.4 Требования к защите информации от несанкционированного доступа

.5.5 Требования к программному и аппаратному обеспечению

.5.6 Анализ исходных данных

. Разработка задачи организации повышения квалификации преподавателей

.1 Архитектура создаваемого приложения

.2 Моделирование предметной области

.3 Разработка модели данных

.4 Разграничение прав доступа

.5 Разработка структуры ПО

.5.1 Описание основных модулей, используемых в приложении

.5.2 Описание основных SQL-запросов, используемых в приложении

.6 Инструкция пользователя

.6.1 Общие сведения

.6.2 Начало работы

.6.2.1 Пользователь и пароль

.6.2.2 Подключение к тестовой базе данных

.6.3 Справочники

.6.3.1 Программы обучения

.6.3.2 Организаторы обучения

.6.4 Содержание программ

.6.5 Мероприятия

.6.5.1 Планирование мероприятий

.6.5.2 Проведение обучения

.6.6 О программе

.6.6.1 Текущий пользователь

.6.6.2 Изменение пароля

.6.7 Сохранение параметров

. Системотехнические расчеты

.1 Расчет времени реакции системы

.1.1 Обоснование расчета времени реакции

.1.2 Описание технологии передачи работы системы

.1.3 Переход к модели в терминах СМО

.1.4 Исходные данные для расчета времени реакции

.1.5 Расчет среднего времени реакции системы

.2 Вывод

. Человеко-машинное взаимодействие

.1 Профессиограмма - «Инспектор факультета повышения квалификации преподавателей»

.2 Вывод

Экономическая часть

.1 Постановка экономической задачи

.2. Расчет затрат, связанных с разработкой проекта автоматизации

.2.1 Расчет затрат на техническое обеспечение

.2.2 Затраты на создание программных комплексов

.2.3 Затраты на приобретение аппаратных комплексов

.2.4 Затраты на создание информационного и организационного обеспечения

.2.5 Суммарные капитальные затраты на разработку и внедрение проекта

.2.6 Текущие затраты на эксплуатацию внедряемых систем

.3 Расчет экономической эффективности

Заключение

Список литературы

Приложение

Приложение А. Описание ER-модели

Приложение Б. Код программы

Приложение В. Текст запросов

Приложение Г. Образцы документов



Введение


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

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

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

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

Обозначения и сокращения


ФПКП - факультет повышения квалификации преподавателей

УФБУ - управление финансового и бухгалтерского учета

ЕСН - Единый Социальный Налог

УК - управление кадровСУ МИИТ - автоматизированная система управления Московского государственного университета путей сообщения


1. Анализ существующей технологии организации повышения квалификации преподавателей. Обоснование целесообразности


.1 Цель проектирования


Данная разработка предназначена для совершенствования работы факультета повышения квалификации преподавателей (ФПКП), управления финансов и бухгалтерского учета (УФБУ), управления кадров (УК), а также ряда подразделений/филиалов, которые участвуют в организации повышения квалификации преподавателей.

Конечной целью является:

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

интеграция приложения в существующую корпоративную систему АСУ МИИТа.

Основными результатами автоматизации технологии организации повышения квалификации преподавателей являются:

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

соответствие требованиям к времени выполнения запросов, что существенно ускорит процесс формирования документов;

реализация заявленного в требованиях функционала;

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


1.2 Постановка задачи


Необходимо улучшить организацию работы и повысить эффективность деятельности факультета повышения квалификации преподавателей (ФПКП), управления финансов и бухгалтерского учета (УФБУ), управления кадров (УК), а также ряда подразделений/филиалов, которые участвуют в организации повышения квалификации преподавателей.

При этом необходимо учитывать следующие данные:

архитектуру АСУ МИИТ;

существующую технологию организации повышения квалификации преподавателей;

количество пользователей около 42 человек;

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

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

анализ технологии организации повышения квалификации преподавателей в рамках АСУ МИИТ;

анализ исходных данных;

моделирование соответствующей предметной области;

разработка модели данных;

определение функциональных, аппаратных и программных требований к разрабатываемому приложению с учетом существующей корпоративной системы АСУ МИИТ;

разработка приложения.

Основным результатом внедрения приложения должны стать:

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

удобство интерфейса и простота использования;

согласованность работы факультета повышения квалификации преподавателей (ФПКП), управления финансов и бухгалтерского учета (УФБУ), а также ряда подразделений/филиалов, которые участвуют организации повышения квалификации преподавателей.


.3 Анализ существующей технологии организации повышения квалификации преподавателей


.3.1 Описание предметной области

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

Согласно Федерального закона «О высшем и послевузовском профессиональном образовании» от 22 августа 1996 г. № 125-ФЗ (Глава III. Статья 21) государство гарантирует создание необходимых условий для повышения квалификации (не реже одного раза в пять лет) научно-педагогических работников государственных высших учебных заведений и научно-педагогических работников государственных научных учреждений и организаций, действующих в системе высшего и послевузовского профессионального образования, выделяя на эти цели необходимые средства за счет федерального бюджета [1].

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

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

краткосрочное (не менее 72 часов);

тематические и проблемные семинары (от 72 до 100 часов);

длительное (свыше 100 часов);

стажировка;

профессиональная переподготовка;

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

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

удостоверение о краткосрочном повышении квалификации - слушателям, прошедшим краткосрочное обучение или участвовавшим в работе тематических и проблемных семинаров по программе в объеме от 72 до 100 часов;

свидетельство о повышении квалификации - слушателям, прошедшим обучение по программе в объеме от 100 часов до 500 часов;

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

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

При направлении работников для повышения квалификации с отрывом от работы за ними сохраняется место работы (должность) и производятся выплаты, предусмотренные законодательством [ст.112 КЗоТ]. Так, за работниками организаций независимо от форм собственности, направленным на курсы повышения квалификации с отрывом от работы, сохраняется средняя заработная плата по основному месту работы на время их обучения. Иногородним слушателям, направленным на обучение с отрывом от работы, сохраняется средняя заработная плата по основному месту работы и выплачиваются в течение первых 2 месяцев суточные по нормам, установленным при командировках на территории РФ, а в последующий период - стипендии в размере минимальной оплаты труда, утвержденной в установленном порядке, если иная оплата не предусмотрена договором между руководителем организации и лицом, направленным на обучение. На время обучения слушатели обеспечиваются общежитием гостиничного типа с оплатой расходов за счет направляющей стороны.

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


.3.2 Описание процесса организации повышения квалификации преподавателей в МИИТе

Планирование повышения квалификации преподавателей осуществляется на основании:

заявки от подразделения (организации) на проведение повышение квалификации со списком сотрудников;

норм прохождения повышения квалификации преподавателей, установленных Министерством образования и науки РФ.

Составляются план повышения квалификации преподавателей на год и нормативный план.

План повышения квалификации преподавателей на год содержит:

тип обучения (краткосрочное, длительное и т.д.);

наименование учебной программы;

объем часов;

форму обучения;

ориентировочные сроки проведения;

кафедру-организатора.

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

Нормативный план содержит:

наименование подразделения;

количество человек (всего);

количество человек, которые должны пройти повышение квалификации.

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

Далее начинается процесс проведения мероприятий: заключаются договора между МИИТом и какой-либо организацией на проведение повышения квалификации, выписываются направления на оплату. После оплаты квитанций формируются приказы о зачислении слушателей в определенные учебные группы. Списки зачисленных слушателей передаются в управление финансов и бухгалтерского учета (УФБУ).

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

Структурный анализ процесса организации повышения квалификации преподавателей в МИИТе показан на Рис. 1.1 и Рис. 1.2.


Рис.1.1 Контекстная диаграмма


Рис.1.2 DFD-диаграмма, описывающая процесс организации повышения квалификации преподавателей



1.3.3 Анализ существующей технологии организации повышения квалификации преподавателей в МИИТе

Процессом организации повышения квалификации преподавателей в МИИТе занимается факультет повышения квалификации преподавателей (ФПКП). До 2009 года этот процесс производился ручным набором документов в Microsoft Word/Microsoft Excel.

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

К преимуществам можно отнести:

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

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

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

Основными недостатками являются:

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

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

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

Пример взаимодействия локальных систем университета приведен на Рис. 1.3.


Рис. 1.3 Взаимодействие локальных информационных систем в университете


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


.4 Обоснование целесообразности разработки


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

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

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


.5 Требования к разрабатываемому приложению


.5.1 Требования к архитектуре

Приложение должно функционировать в рамках корпоративной системы Университета и опираться на ее архитектуру.


.5.2 Требования ко времени выполнения запросов

Требования к времени выполнения запросов приведены в таблице 1.1.



Таблица 1.1 Требования к времени выполнения запросов

ОперацияСреднее время реакции, сек.Оперативный запрос1Составление отчетов5Аналитический запрос10

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

Аналитическими запросами к базе данных принято называть запросы, сводные (агрегатные) результаты которых вычисляются над детальными данными, хранящимися в таблицах базы данных. В этом смысле любой запрос на языке SQL, результат которого основан на вычислении агрегатных функций, можно назвать аналитическим. Характерная особенность аналитических запросов состоит в том, что, как правило, они применяются к большим по объему базам данных, и выполнение таких запросов вызывает существенные накладные расходы СУБД [2].

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

Требования к допустимому времени выполнения запросов сделаны на основе результатов тестирования пользователей, полученных Якобом Нильсеном [3].


.5.3 Требования к функциям программного обеспечения

Функции, которые должно выполнять разработанное приложение:

сбор данных для организации повышения квалификации преподавателей;

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

зачисление слушателей в учебные группы повышения квалификации;

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

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

создание и формирование следующей документации:

план повышения квалификации на год;

договор;

акт;

заявление на оплату;

список зачисленных слушателей;

список слушателей, прошедших повышение квалификации;

приказ о зачислении;

приказ об отчислении;

сертификат о прохождении повышения квалификации;

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

просмотр и отправка на печать документации;

просмотр анкеты слушателя: личные данные, документы, контакты, адреса, трудовая деятельность и т.д.;

просмотр списка приказов на слушателя, формирование выбранного приказа;

просмотр статистики по преподавателям, прошедшим повышение квалификации.



1.5.4 Требования к защите информации от несанкционированного доступа

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


.5.5 Требования к программному и аппаратному обеспечению

.5.5.1 Аппаратные:

Серверные (используются аппаратные средства КИС АСУ МИИТ):

сервер базы данных (для хранения информации);

сервер приложений (для выполнения SQL-запросов и формирования отчетов).

Клиентские:Клиентские аппаратные требования приведены в таблице 1.2.


Таблица 1.2 Клиентские аппаратные требования

№ п/пХарактеристикаМинимальные параметрыРекомендуемые параметры1.CPUне ниже P4 - 1,6 ГГцCore 2 Duo - 1,6 ГГц2.RAMне менее 512 МБ2048 МБ3.HDDне менее 80 ГБ160 ГБ4.Сетевая платаналичие обязательноналичие обязательно5.Экран1024х768, 17''1280х1024, 19''

.5.5.2 Программные (используются программные средства КИС АСУ МИИТ):

серверные:

операционная система на сервере приложений: Windows 2003 и старше, на сервере БД: Red Hat Enterprise Linux 5.4;

СУБД - Oracle Database 11g Release 2;

клиентские:

операционная система - Windows XP и старше;

средства разработки:RAD Studio Delphi 2010;Express VCL Products;/SQL Developer 7.1;

CA Erwin Data Modeler 7.3.


.5.6 Анализ исходных данных

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

данные о специальностях и дисциплинах;

данные о преподавателях;

данные о сертификатах и документах;

данные о договорах;

данные о подразделениях;

данные об учебных группах;

данные о бумагах и приказах;

данные о пользователях системы.

В качестве основных источников данных выступают:

существующая информационная инфраструктура;

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

нормативные документы:

положение о повышении квалификации;

законодательство РФ;

положение о платной образовательной деятельности МИИТа.

2 Разработка задачи организации повышения квалификации преподавателей


.1 Архитектура создаваемого приложения


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


Рис. 2.1 Многоуровневая архитектура корпоративной системы АСУ МИИТ


Учитывая конкретные особенности функционирования АСУ МИИТ, а также необходимость масштабируемости, архитектура корпоративной системы АСУ МИИТ выполняет следующие требования:

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

обеспечивает стандартные способы взаимодействия с внешними системами;

позволяет рационально использовать имеющиеся вычислительные ресурсы;

обеспечивает простоту настройки и администрирования системы;

обеспечивает прозрачность и независимость расположения информации;

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

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

Наиболее эффективным способом эти уровни могут быть представлены в виде объектов, а механизм их разработки и взаимодействия - в виде стандартных решений DCOM\ СОМ+ \ (.NET) или CORBA.

В АСУ МИИТ объекты (системные и прикладные службы) с необходимыми методами - это типовые процессы.

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

Сервер приложений связан с БД, данные записываются в БД, там хранятся, вызываются при необходимости с помощью запросов. Взаимодействие между ними происходит за счет протокола SQL*net.

Связь между пользователем с Сервером приложений осуществляется с помощью протокола DCOM.

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

Обмен информацией происходит через Internet-провайдера.

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

Основными целями стандартизации являются:

упорядочение документооборота;

упорядочение технологии обработки данных;

замена неэффективных существующих процессов на новые;

повышение взаимозаменяемости сотрудников;

внедрение наукоемких инновационных технологий как средства повышения производительности и эффективности деятельности университета.

.2 Моделирование предметной области


На диаграмме (Рис. 2.2) отображены основные функции, которые должно выполнять разрабатываемое приложение. Рассмотрим некоторые из них подробнее.


Рис. 2.2 Диаграмма вариантов использования приложения, автоматизирующего технологию организации повышения квалификации


Прецедент «Планирование» включает в себя создание проекта плана, работу с его позициями (добавление, удаление, изменение), а также согласование плана с подразделением и подписание его руководством университета.

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

На Рис. 2.3 и Рис. 2.4 показан процесс формирования плана повышения квалификации преподавателей в виде диаграммы последовательности и диаграммы кооперации.


Рис. 2.3 Диаграмма последовательности формирования плана повышения квалификации


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


Рис. 2.4 Диаграмма кооперации формирования плана повышения квалификации


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

Жизненный цикл документа в АСУ МИИТ можно показать с помощью диаграммы состояний (Рис. 2.5).


Рис.2.5. Диаграмма состояний, описывающая последовательность состояний ЖЦ документа в АСУ МИИТ


Прецедент «Ведение справочников» включает в себя работу (добавление, удаление, редактирование) со списками учебных программ, учебных групп, организаторов обучения, а также с содержанием методического комплекса.

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

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

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

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

Прецедент «Проведение мероприятий» включает в себя работу с преподавателями, которые проходят обучение, а также с учебными группами повышения квалификации.

При работе с группами задается наименование группы и точные сроки проведения обучения, а также выбирается куратор группы.

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

зачисление/отчисление слушателей, формирование приказов о/об зачислении/отчислении, которые подписываются управлением кадров;

работу с договорами и всем, что с ними связано: создание/редактирование договоров, актов, создание счетов на оплату и т.д.;

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


.3 Разработка модели данных


Разработанная ER-модель создана посредством пакета CA Erwin Data Modeler 7.3 и отражает нотацию IDEF1X. Приведенная модель нормализована в соответствии с требованиями реляционной концепции построения баз данных [4].

Для наглядности логически связанные данные объединены в области, выделенные общим цветом:


Таблица 2.1 Описание модели данных

ОбластьНазваниеОписаниеДанные о повышении квалификации преподавателейИнформация, связанная непосредственно с процессом повышения квалификации преподавателей: планы повышения квалификации, группы повышения квалификации и т.д.Данные о сертификатах и документахИнформация, связанная с сертификатами, выданными преподавателям, прошедшим курс повышения квалификации, а также с прочими документамиДанные о специальностях и дисциплинахИнформация, касающаяся различных специальностей, дисциплин, учебных программ и т.д., связанных с процессом повышения квалификации преподавателейДанные о студентахСведения о преподавателях, участвующих в процессе повышения квалификацииДанные о сотрудникахИнформация о сотрудниках университета и филиаловДанные об учебных группахСведения об учебных группах повышения квалификации преподавателейДанные о подразделенияхСправочник подразделений университетаДанные о пользователяхСведения о пользователях АСУ МИИТ и программных ролях системыДанные о договорах Информация о договорах и обо всем, что с ними связано: источники финансирования, акты, начисления и т.д.Данные о бумагах и приказахИнформация обо всех документах, участвующих в процессе повышения квалификации преподавателей: приказы, рапорта, планы и т.д.

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

Разработанная ER-модель представлена на Рис. 2.6.


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


В таблице План повышения квалификации содержится информация о планируемых мероприятиях по повышению квалификации преподавателей. Опишем некоторые поля.

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

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

Методический комплекс состоит из дисциплины, по которой проводится обучение (ID дисциплины) и подразделения, в котором проводится обучение - кафедры (ID подразделения).

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

В общем случае специальность включает в себя несколько дисциплин, но в случае повышения квалификации специальность имеет лишь одну дисциплину, поэтому, можно считать, что дисциплина и специальность - это одно и то же.

В таблице Сотрудники и связанной с ней областью хранятся данные обо всех сотрудниках МИИТа и его филиалов.

В таблицах Сертификаты и Документы содержится информация о сертификатах, выданных преподавателям после прохождения курса повышения квалификации.

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

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

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

Описание стандартными средствами CA Erwin Data Modeler 7.3 представлено в Приложении А.


.4 Разграничение прав доступа


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

Кроме того, каждую выданную роль можно ограничить привилегиями (так называемое «горизонтальное» разделение прав) для ограничения области действия этой роли, если такое разделение подразумевает эта роль. Например, программную роль подписи приказа можно ограничить по конкретным видам приказов.

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

В модуле администратора определены следующие программные роли, разделяющие работу всех пользователей с ним (Таблица 2.2):


Таблица 2.2 Роли пользователей

КодНаименование ролиОписание ролиТип привилегии1400Модуль повышения квалификацииДает полный доступ к модулюПодразделение1401Программы обученияПозволяет редактировать программы обученияНет1402Планирование мероприятийПозволяет редактировать учебные группы по программам обучения и сроки их проведенияПодразделение1403Просмотр мероприятийДает доступ ко всему модулю без возможности редактированияПодразделение1404Проведение мероприятийПозволяет проводить мероприятия по повышению квалификацииПодразделение

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

В соответствии с требованиями к защите информации от несанкционированного доступа реализована иерархия пользователей ФПКП с описанием доступного им функционала и номерами выданных ролей, представленная на Рис. 2.7.


Рис. 2.7 Иерархия ролей пользователей



Декан ФПКП имеет полные права на доступ к модулю.

При использовании модуля в филиалах МИИТа права буду раздаваться по тем же шаблонам, которые представлены на Рис. 2.7.

Список возможных ролей и видов привилегий при назначении системных прав сотрудников для разграничения доступа к информации при работе с модулем «Повышение квалификации преподавателей» АСУ МИИТ приведен в Таблице 2.3.


Таблица 2.3 Матрица доступа

Наименование таблицыСотрудник отдела планирования ФПКПСотрудник отдела проведения ФПКПДекан ФПКПДокументыNARWRWСтудентыRRRСотрудникиRRRСертификатNARWRWДоговораNARWRWКуратор группыRWRRWКто есть ктоNANANAМетодический комплексRWRRWПодразделенияRRRУчебная нагрузка умкRWRRWПлан повышения квалификацииRWRRWСпециальности комплексаRWRRWПараграфыRWRWRWГруппы повышения квалификацииRWRRWУчебная группаRWRRWБумагиRWRWRWПримечание:- нет никакого доступа;- только чтение;- только запись;- чтение и запись.


2.5 Разработка структуры ПО


.5.1 Описание основных модулей, используемых в приложении

В Таблице 2.4 описаны основные модули, используемые в приложении.


Таблица 2.4. Описание модулей приложения

Название модуляОписаниеОписываемая модулем формаФункциональное предназначениеPK_PPSФайл проектаИнициализация приложения, авторизация пользователя, создание основной формыMainГлавный модульMain_FormПроверка прав пользователя, создание остальных формDictionariesФорма работы со справочникамиForm_DictionatiesСоздание, редактирование и удаление записей в списках учебных групп, учебных программ, организаторов обученияPlanФорма работы с содержание методического комплексаForm_PlanСоздание, редактирование и удаление записей в списке специальностей методического комплексаEventФорма работы с планирование и проведением мероприятий по повышению квалификацииForm_EventСоздание, редактирование и удаление плана повышения квалификации и его позиций, задание сроков проведение, кураторов групп, зачисление/отчисление слушателей, работа с договорами и т.д.GridEditClassМодуль, описывающий процедуры и функции для работы с компонентом cxGridОписывает процедуры и функции для стандартного описания компонента cxGrid, процедуры добавления, обновления, удаления данных из cxGridLP_u_CX_toolsСодержит набор общих процедур для стандартных действий и описание общих компонентовОписание стандартных кнопок диалога, их событий, описание создания и вызова динамической модальной формыLP_u_MA_InterfaceОписание интерфейса доступа к серверу приложенийОписание интерфейса доступа к серверу приложений, описание действий, выполняемых в навигации (выбор, удалить бумагу, создание бумаги, просмотр или изменение свойств, отправка на подпись, подписание, возвращение на доработку, передача бумаги другому пользователю)Standart_NewМодуль, описывающий процедуры и функции для работы с компонентом cxTreeListОбновление дерева строк, добавление в cxTreeList, поиск строки с заданным значением, описывает свойства стандартного контекстного менюSqlStringListМодуль, описывающий обертки к компоненту cxGridTableViewОрганизация оберток к cxGridTableView, модуль реализует чтение из базы методом SelectData по GUID_SelectWrappersМодуль, описывающий стандартные несписковые сx-компонентыРасширяет возможности стандартных несписковых компонентов (cxTextEdit, cxPopupEdit, cxButtonEdit, cxSpinEdit, cxDateEdit и др.), с целью организации их индивидуального и группового поведения, ориентированного на работу с учетом особенностей корпоративной системыRegServiceМодуль, описывающий процедуры и функции для работы с реестромПозволяет при завершении работы с приложением сохранять текущие параметры компонентов в реестр (размер формы, ее положение, размер панелей, положение сплитеров, размер всех cx-компонентов) и при запуске приложения читать эти параметры из реестраFind_OrgМодуль, описывающий компоненты для поиска организацииForm_Find_OrgПозволяет находить организацию по маске поискаForm_AboutМодуль с информацией о приложенииForm_AboutПоказывает информацию о модулей, текущем пользователе, список ролей и т.д.Form_SEМодуль поиска сотрудникаForm_SEПозволяет найти сотрудника в базе по заданным параметрамForm_DocumentМодуль работы с документамиForm_DocumentПозволяет производить работу с различными документамиUnivQuestionareМодуль анкетаFUnivQuestionareПозволяет просматривать и редактировать данные о выбранном человеке

Рассмотрим взаимодействие программных модулей на диаграмме классов (Рис. 2.8).

Классы связаны между собой отношениями ассоциации, которые отражают структурные отношения между объектами. Кратность, указанная на одном конце ассоциации, говорит о том, сколько объектов должно соответствовать каждому объекту на другом конце [6].

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

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


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

.5.2 Описание основных SQL-запросов, используемых в приложении

В корпоративной системе АСУ МИИТ запросы хранятся в редакторе хранилищ Editor AS. Редактор хранилищ - специально разработанное приложение, которое служит для связывания данных из БД с приложением, разработанным в Delphi. Редактор хранилищ позволяет передавать параметры, задаваемые пользователем в шаблоны SQL-запросов. Шаблоны SQL-запросов представляют собой SQL-запросы с параметрами. В зависимости от передаваемых параметров будут меняться данные, возвращаемые SQL-запросом. Каждый SQL-запрос в редакторе хранилищ имеет идентификатор - TGUID. В таблице 2.5 представлены основные SQL-запросы, используемые в приложении, автоматизирующем технологию организации повышения квалификации преподавателей.

Полный список использованных в ходе разработки приложения SQL-запросов приведен в приложении В.



Таблица 2.5 Основные SQL-запросы

№Название запросаGUIDОписание запросаПараметры1R_C_Groups{5E30FFBA-B616-4850-A7E4-C5F69A7BD61A}Список группы ПК для выбранного плана ПК%p1[i]% - ID Плана ПК2Add_Com_Spec{9342C728-4700-4D8A-AE36-CC7F69ED905D}Добавление специальности методического комплекса%p1[i]% - ID Дисциплины %p2[i]% - ID Специальности подразделения %p3[i]% - ID Параграфа %p4[i]% - ID Вида обучения %p5[i]% - Количество часов %p6[i]% - ID Вида дисциплины %p7[i]% - Количество часов самостоятельной работы3Met_Complex{0793BD99-678C-4E5A-99E3-F51F5227A816}Методические комплексы выбранной специальности подразделения%p1[i]% - ID Специальности подразделения4Get_Data_For_Plan{4E97B054-EE9C-4449-A155-5B834991F360}Формирование плана повышения квалификации%p1[i]% - ID Параграфа Плана ПК5R_C_Plan{01A115AA-8C51-4430-A175-E78BCE51FFDE}Список позиций (программ обучения с предварительными сроками проведения) плана повышения квалификации на заданный документ%p1[i]% - ID Параграфа плана6Get_List_Spec_By_Params{5F33C483-BA63-4F6C-A11D-28639EA7581B}По заданным параметрам возвращает список программ обучения%p1[i]% - уровень специальности %p2[i]% - ID подразделения-организатора7Orders{C67E9825-6FE4-4461-83E9-1A5225B7F0CE}Все приказы на данного человека%p1[i]% - ID Человека.8Listeners{39FD4EC1-0E3B-4913-BDD1-0FBAD73E2C9E}Участники выбранного плана ПК%p1[i]% - ID Плана ПК9Delete_Student{10AB233D-23D2-405C-B4A4-97531EA9D56A}Удаляет информацию о студенте (студента, договор с начислениями (если есть), приказы)%p1[i]% - ID Договора %p2[i]% - ID Студента10 Make_New_Cert_By_Params{055DE14D-CF20-44BA-8893-E85527F8BC7E}Выдача сертификатаПо заданному id_student = p1, id_paragraph = p2 журнала выдачи дипломов выдаёт сертификат с рег. номером p3, видом документа p4 и номером p5, p6 - количество фактических часов.11Autorepr{1CFCDE6B-464C-4D9C-B933-245FFC48CFEA}Добавляет представителя МИИТа в заданный договор%p1[i]% - ID договора12Add_Contract{2DF7D738-A733-4AE6-A137-E32E7DCF882B}Добавление договора%p1[i]% - ID Человека %p2[i]% - ID Контрагента организации %p3[d]% - Дата начала %p4[d]% - Дата окончания %p5[i]% - ID Параграфа (для договора) %p6[i]% - ID Источника финансирования %p7[i]% - ID Специальности подразделения %p8[i]% - ID Учебной группы %p9[i]% - ID Вида основания зачисления %p10[i]% - ID Приказа о зачислении (id_paragraph) %p11[s]% - Сумма %p12[s]% - если <> '', то добавить ссылку на договор студента (ID Параграфа договора)


.6 Инструкция пользователя


.6.1 Общие сведения

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

Модуль включает в себя следующие функциональные блоки:

Справочники - работа с перечнем программ и организаторами обучения;

Содержание программ - работа с программами обучения;

Мероприятия - формирование плана проведения обучения и проведение мероприятий по обучению.

Работа осуществляется с использованием стандартных элементов управления, используемых во всех модуля Системы: группируемые списки, навигация, обмен сообщениями и т.д.


.6.2 Начало работы

Запуск приложения осуществляется после ввода имени пользователя и пароля (авторизации). Без авторизации работа с Системой невозможна.


.6.2.1 Пользователь и пароль

Доступ к Системе осуществляется на основе принципа авторизации. Для этого необходимо ввести имя пользователя в базе данных (далее - БД) и пароль. При вводе этих данных учитывается регистр букв и язык. Значение вводимого пароля отображается на экране в виде «*» для предотвращения возможности его разглашения (Рис. 2.9).

Рис. 2.9 Вход в систему


Имя пользователя соответствует имени последнего подключения к Системе с данного компьютера. Здесь же указывается время его подключения.

Сменить текущего пользователя (подключиться под другим именем) можно с помощью основного пункта меню «Сменить пользователя» (Рис. 2.10):


Рис. 2.10 Смена пользователя


При этом откроется стандартное окно подключения (Рис. 2.9). Если попытки подключения под новым пользователем не было, то окно можно закрыть и продолжать работу под старым именем, в противном случае необходимо ввести старое имя и его пароль. Если имя и пароль введены неверно, то при закрытии окна работа приложения завершится, т.к. старый сеанс работы с БД уже завершен.


2.6.2.2 Подключение к тестовой базе данных

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

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

Идея и смысл работы в тестовой БД - обучить новых сотрудников выполнять свою ежедневную работу в Системе. В таком режиме работы отсутствует риск потери данных или внесения ошибок в реальные данные корпоративной БД.

Для подключения к тестовой БД необходимо получить логин и пароль, а при вводе имени пользователя указать в квадратных скобках имя тестовой БД (в данном примере имя тестовой БД «test»), а затем сразу (без пробелов и без каких-либо других символов разделения) логин в ней (Рис. 2.11):


Рис. 2.11 Подключение к тестовой БД


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

.6.3 Справочники

Работа с модулем начинается с подготовки справочников. К справочникам, относящимся к модулю, относятся списки программ обучения и организаторов обучения.

Доступ к форме работы со справочниками осуществляется с помощью пункта основного меню «Справочники» (Рис. 2.12):


Рис. 2.12 Справочники


В открывшейся форме осуществляется работа со списком программ обучения и организаторов обучения. Форма разделена на 2 страницы, на которых размещены соответствующие списки (Рис. 2.13):


Рис. 2.13 Форма справочников


.6.3.1 Программы обучения

На странице «Программы обучения» формы «Справочники» осуществляется работа со списком программ обучения. Если у Пользователя достаточно прав (см. п. 2.4), то список можно редактировать (добавлять, изменять и удалять записи).

С помощью контекстного меню списка осуществляется доступ к вводу нового значения, удалению выделенных значений, обновлению данных (перечитывание списка из БД), а также к настройкам вида отображения списка (Рис. 2.14):


Рис. 2.14 Контекстное меню программ обучения


При вводе новой программы обучения необходимо ввести ее наименование и номер (если он есть):


Рис. 2.15 Ввод новой программы обучения


Для добавления новой программы обучения следует нажать на кнопку «Принять» или клавишу [Enter]. Добавленное значение отразится в списке программ обучения.

Редактирование и удаление данных осуществляется стандартным способом.


.6.3.2 Организаторы обучения

На странице «Организаторы обучения» формы «Справочники» осуществляется работа со списком организаторов обучения по программам обучения и учебными группами по каждой из позиций списка. Если у Пользователя достаточно прав (см. п. 2.4), то списки можно редактировать (добавлять, изменять и удалять записи).

Под списком программ расположен список учебных групп текущей (выбранной) программы. Выбор текущей программы осуществляется щелчком мыши или клавишей [Enter] на интересующей позиции списка (Рис. 2.16):


Рис. 2.16 Организаторы обучения


С помощью контекстных меню списков осуществляется доступ к добавлению нового значения в список, удалению выделенных записей в списке, обновлению данных (перечитывание списка из БД), а также к настройкам вида отображения списка (Рис. 2.17):


Рис. 2.17 Контекстное меню организаторов обучения


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

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


Рис. 2.18 Ввод нового организатора обучения


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

Для добавления новой программы обучения следует нажать на кнопку «Принять» или клавишу [Enter]. Добавленное значение отразится в списке организаторов обучения.

Редактирование и удаление данных осуществляется стандартным способом.

При вводе новой учебной группы текущей (выбранной в списке) позиции организатора обучения необходимо ввести ее номер и период действия (Рис. 2.19):


Рис. 2.19 Ввод новой учебной группы


Для добавления новой группы обучения следует нажать на кнопку «Принять» или клавишу [Enter]. Добавленное значение отразится в списке учебных групп по текущей позиции в списке организаторов обучения.

Редактирование и удаление данных осуществляется стандартным способом.


.6.4 Содержание программ

Описание программ обучения осуществляется в одноименной форме. Доступ к этой форме осуществляется с помощью пункта основного меню «Содержание программ» (Рис. 2.20):


Рис. 2.20 Содержание программ


В открывшейся форме осуществляется работа по описанию программ обучения по всем формам и организаторам обучения, предварительно введенных в справочниках (см. п. 2.6.3). Если у Пользователя достаточно прав (см. п. 2.4), то введенные описания можно редактировать (добавлять, изменять и удалять записи).

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

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


Рис. 2.21 Содержание методического комплекса


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

При добавлении нового описания программы обучения необходимо выбрать организатора обучения из списка, задать документ и общее количество часов обучения по этой программе (Рис. 2.22):


Рис. 2.22 Ввод нового описания программы обучения


Для добавления нового описания программы обучения следует нажать на кнопку «Принять» или клавишу [Enter]. Добавленное значение отразится в списке.

Редактирование и удаление данных осуществляется стандартным способом.


.6.5 Мероприятия

Основная работа по планированию и проведению мероприятий по обучению осуществляется в форме «Мероприятия». Доступ к этой форме осуществляется с помощью пункта основного меню «Мероприятия» (Рис. 2.23):


Рис. 2.23 Мероприятия


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

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


Рис. 2.24 Форма мероприятий


2.6.5.1 Планирование мероприятий

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

Формирование плана проведения повышения квалификации осуществляется с помощью списка позиций плана. Если у Пользователя достаточно прав (см. п. 2.6.2.3), то этот список можно редактировать (добавлять, изменять и удалять записи):


Рис. 2.25 Позиции плана повышения квалификации


Над списком размещена панель фильтрации списка по году и приказу утверждения плана. Если в ней задан конкретный план, то будут заполнены поля с названием и аннотацией плана (Рис. 2.26):


Рис. 2.26 План повышения квалификации

При внесении изменений в поля названия и аннотации станут доступны кнопки применения и отклонения внесенных изменений:


Рис. 2.27 Изменение плана повышения квалификации


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

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


Рис. 2.28 Добавление позиции плана повышения квалификации


Для добавления новой позиции в проект приказа следует нажать на кнопку «Принять» или клавишу [Enter]. Добавленное значение отразится в списке.

Редактирование и удаление данных осуществляется стандартным способом.

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

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


.6.5.2 Проведение обучения

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

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

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


.6.5.2.1 Сроки обучения

Сроки проведения фактического обучения по текущей позиции плана повышения квалификации задаются на странице «Сроки проведения». Для этого необходимо найти интересующую позицию в списке плана и выбрать ее щелчком мыши или клавишей [Enter] на ней (Рис. 2.29):



Рис. 2.29 Сроки проведения


Если у Пользователя достаточно прав (см. п. 2.6.2.3), то список можно редактировать (добавлять, изменять и удалять записи).

С помощью контекстного меню списка осуществляется доступ к вводу нового значения, удалению выделенных значений, обновлению данных (перечитывание списка из БД), а также к настройкам вида отображения списка (Рис. 2.30):


Рис. 2.30 Контекстное меню сроков проведения


При вводе нового фактического срока проведения обучения по текущей программе необходимо выбрать учебную группы, программу обучения и задать сроки его проведения (Рис. 2.31):



Рис. 2.31 Добавление группы повышения квалификации


Список учебных групп по текущей программе задается в разделе «Справочники» (см. п. 2.6.3.2). Список описаний программ с количеством часов задается в разделе «Содержание программ» (см. п. 2.6.4).

Для добавления нового срока обучения следует нажать на кнопку «Принять» или клавишу [Enter]. Добавленное значение отразится в списке фактических сроков обучения.

Редактирование и удаление данных осуществляется стандартным способом.

Под списком сроков проведения расположен список кураторов текущей учебной группы.

Если у Пользователя достаточно прав (см. п. 2.4), то список можно редактировать (добавлять, изменять и удалять записи).

С помощью контекстного меню списка осуществляется доступ к вводу нового значения, удалению выделенных значений, обновлению данных (перечитывание списка из БД), а также к настройкам вида отображения списка (Рис. 2.32):



Рис. 2.32 Контекстное меню кураторов текущей группы


При вводе нового куратора текущей учебной группы (выбранной в списке фактических сроков проведения обучения) необходимо найти куратора с помощью стандартной формы поиска человека и задать дату его назначения куратором группы (Рис. 2.33):


Рис. 2.33 Добавление нового куратора группы


Список анкет формируется в модуле кадрового учета Системы.

Для добавления нового куратора следует нажать на кнопку «Принять» или клавишу [Enter]. Добавленное значение отразится в списке кураторов текущей учебной группы.

Редактирование и удаление данных осуществляется стандартным способом.


.6.5.2.2 Список слушателей

Работа со списками слушателей текущей позиции плана повышения квалификации осуществляется на странице «Участники». Для этого необходимо найти интересующую позицию в списке плана и выбрать ее щелчком мыши или клавишей [Enter] на ней (Рис. 2.34):


Рис. 2.34 Участники


Если у Пользователя достаточно прав (см. п. 2.4), то список можно редактировать (добавлять, изменять и удалять записи).

С помощью контекстного меню списка осуществляется доступ к вводу нового значения, удалению выделенных значений, работе с договором, обновлению данных (перечитывание списка из БД), а также к настройкам вида отображения списка (Рис. 2.35):


Рис. 2.35 Контекстное меню участников


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


Рис. 2.36 Добавление нового участника


Если у слушателя уже есть договор на обучение в этой группе, то его можно указать в поле «Ссылка на договор» (в этом случае параметры договора станут недоступными).

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

После заполнения всех обязательных полей (они подсвечиваются цветом) станет доступна кнопка «Принять», нажатием на которую новый слушатель добавляется в список участников обучения.

Редактирование и удаление данных осуществляется стандартным способом. При необходимости внесения изменений в договорные отношения с текущим участником (добавить или удалить договор) Вы можете воспользоваться контекстным меню списка участников обучения.

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


Рис. 2.37 Анкета


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


.6.5.2.3 Окончание обучения

По окончании обучения Пользователь может сформировать приказ об окончании обучения (при успешном окончании обучения) или об исключении из числа слушателей (при досрочном или неуспешном окончании обучения). Для этого нужно выделить участников в списке и воспользоваться пунктом «Окончание обучения» контекстного меню списка участников (Рис. 2.38):


Рис. 2.38 Окончание обучения в контекстном меню участников


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


Рис. 2.39 Окончание обучения


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


Рис. 2.40 Запрос на подтверждения окончания обучения


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


.6.6 О программе

Доступ к этой форме осуществляется через пункт основного меню «О программе» или по клавише [F11] (Рис. 2.41):


Рис. 2.41 О программе


.6.6.1 Текущий пользователь

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


.6.6.2 Изменение пароля

Пользователь может изменить свой пароль с помощью кнопки «Пароль», при нажатии на которую открывается модальное окно ввода нового пароля (Рис. 2.42):


Рис. 2.42 Форма изменение пароля


Сначала необходимо ввести текущий пароль, с помощью которого пользователь получил доступ к Системе, а затем 2 раза новый пароль (в соответствующих полях). После правильного ввода старого пароля станут доступны поля для ввода нового пароля, а после ввода нового пароля и его подтверждения станет доступна кнопка «Принять». Чтобы задать новый пароль необходимо нажать на кнопку «Принять» или клавишу [Enter] в любом поле, а для отмены указанного действия клавишу [Esc], кнопку «Отмена» или закрыть форму (Рис. 2.43):


Рис. 2.43 Смена пароля



2.6.7 Сохранение параметров

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

Имя раздела в реестре Windows:

«HKEY_CURRENT_USER\Software\AS Pilot group\Parameters\ПК ППС».



3. Системотехнические расчеты


.1 Расчет времени реакции системы


.1.1 Обоснование расчета времени реакции

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

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

В данном случае под временем реакции будем подразумевать время получения ответа на SQL-запросы различного типа.


.1.2 Описание технологии передачи работы системы

Если пользователь хочет получить данные на SQL-запрос, то в системе происходят следующие действия. Машина пользователя (клиентская машина) порождает сообщение (запрос), которое отправляется по сети на сервер приложений. На сервере приложений сообщение распознается как SQL-запрос и вызывается метод обработки этого запроса. Дальше сообщение поступает на сервер БД, где извлекаются данные, удовлетворяющие запросу. Полученные данные поступают в виде сообщения ответа на сервер приложений. Сервер приложений отправляет сообщение (данные) клиенту.

Рис. 3.1 Архитектура работы системы


.1.3 Переход к модели в терминах СМО

Система АСУ МИИТа является информационной системой коллективного использования, поэтому ее можно описать в терминах систем массового обслуживания (СМО).

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

Клиентская машина, на которой установлено приложение, автоматизирующее организацию повышения квалификации (АРМ) формирует сообщение с интенсивностью ? (СМО1, интенсивность обработки - µ1). При этом пользователь не дожидается ответа для дальнейшей своей работы. Сообщение поступает на сервер приложений (СМО2), помимо этих сообщений на сервер приложений поступают сообщения от других источников с интенсивностью ?d. Полученные сообщения обрабатываются сервером приложений с интенсивностью µ2. Сервер приложений передает сообщение серверу БД (СМО3), который обрабатывает его с интенсивностью µ3 и, после обработки, отправляет результат серверу приложений, который отправляет ответ обратно клиенту.

Для расчета введем следующие допущения:

поток запросов - простейший;

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

время обработки запроса распределено по экспоненциальному закону;

очередь для поступающих запросов не ограничена;

интенсивность поступления запросов постоянна;

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

время передачи сообщений по сети пренебрежимо мало и рассматриваться не будет;

каждый запрос пользователя в АРМ порождает одно сообщения, направляемое на обработку серверам, и одно сообщение от серверов в АРМ;

оперативный, аналитический запросы и запрос на выполнения отчета различаются лишь своей сложностью, т.е. разным временем обработки на сервере БД, остальные же параметры остаются неизменными.

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

формирование запроса клиентской машиной и передача сформированного сообщения серверу приложений;

прием и обработка запроса сервером приложений, его передача серверу БД;

прием и обработка запроса сервером БД, передача ответа обратно серверу приложений;

прием сообщения (ответа) сервером приложений, и его передача клиенту;

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

Схему такой системы можно представить в виде пяти последовательно включенных одноканальных СМО с неограниченной очередью, каждая из которых соответствует одной из вышеперечисленных операций (рис. 3.2).



Рис. 3.2 Система обработки запросов в терминах СМО

- интенсивность сообщений в АРМ.

- интенсивность поступления сообщений на сервера от других источников.

- интенсивность обработки запросов в АРМ.

- интенсивность обработки запросов на сервере приложений.

- интенсивность обработки запросов на сервере БД.- число клиентских машин, на которых установлен АРМ.


.1.4 Исходные данные, необходимые для расчета времени реакции

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

= 20 сек-1 (данные сетевого отдела АСУ МИИТа).

Один пользователь может отправлять в подсистему максимум 10 заявок в минуту (из наихудших условий).

Таким образом, интенсивность потока заявок в АРМ составляет:

= 10 / 60 с ? 0,17 сек-1.

Время обработки сообщения на клиентской машине равно 0,1 сек., следовательно, интенсивность равна:

µ1 = 1/0,1=10 сек-1.

Прием и обработка входного сообщения на сервере приложений состоит из последовательно выполняемых действий:

принятие сервером входного сообщения, распознавание SQL-запроса;

отправка сообщения (SQL-запрос) на сервер БД.

Выполнение всех этих операций составляет приблизительно:= 0,015 сек.

Интенсивность обработки поступающих сообщений составляет:

µ2 = 1/ mc2 = 1/0,015 сек ? 66,7 сек-1.

Прием и обработка входного сообщения на сервере БД состоит из последовательно выполняемых действий:

принятие сервером входного сообщения, извлечение необходимых данных;

отправка ответа (данные) на сервер приложений.

Прием и обработка полученных от сервера БД данных обрабатывается сервером приложений приблизительно столько же, сколько и при приеме входного сообщения от клиентской машины. Поэтому расчет для СМО2 и СМО4 будет одинаковым.

Аналогично одинаковым будет расчет для СМО1 и СМО5.

Максимальное количество пользователей, которые могут использовать приложение, автоматизирующее технологию организации повышения квалификации, равно 42.= 42.


.1.5 Расчет среднего времени реакции системы

Среднее время пребывания (реакции) сообщения в подсистеме рассчитаем по следующей формуле:

Т = mТ1 + mТ2 + mТ3 + mТ2 + mТ1Т = 2mТ1 + 2mТ2 + mТ3Т =



Найдем зависимость среднего времени реакции системы от среднего времени обработки одной заявки на сервере БД (см. Таблицу 3.1).


Таблица 3.1 Зависимость среднего времени реакции системы от среднего времени обработки одной заявки на сервере БД

Среднее время обработки одной заявки на сервере БД, mc2, сек.Интенсивность обработки заявок на сервере БД, µ3, 1/сек.Среднее время реакции системы, mТ, сек.0,00110000,26970,0025000,27080,003333,330,27200,0042500,27340,0052000,27470,006166,70,27630,007142,860,27790,0081250,28000,009111,110,28170,011000,28390,01190,910,28640,01283,330,28910,01376,920,29220,01471,428570,29560,01566,70,29950,01662,50,30410,01758,820,30940,01855,560,31570,01952,630,32320,02500,33230,02147,620,34360,02245,450,35820,02343,480,37740,02441,670,40410,025400,44350,02638,460,50780,02737,040,63140,02835,710,96590,02934,485,2010,0333,3312,7687

График, построенный на основе Таблицы 3.1, приведен на Рис. 3.2.

Рис. 3.2 Зависимость среднего времени реакции системы от среднего времени обработки одной заявки на сервере БД


.2 Вывод


Исходя из расчетных данных, можно сделать выводы:

Требования к среднему времени выполнения оперативного запроса (1 сек.) выполняются при среднем времени обработки одной заявки на сервере БД, меньшем 0,028 сек.;

Требования к среднему времени составления отчетов (5 сек.) выполняются при среднем времени обработки одной заявки на сервере БД, меньшем 0,029 сек.;

Требования к среднему времени выполнения аналитического запроса (10 сек.) выполняются при среднем времени обработки одной заявки на сервере БД, меньшем 0,03 сек.



4. Человеко-машинное взаимодействие


В данном разделе описаны особенности такой профессии как «Инспектор факультета повышения квалификации преподавателей», раскрывается специфика труда и требований, которые могут предъявляться к специалисту.


.1 Профессиограмма - «Инспектор факультета повышения квалификации преподавателей»


Название должности - инспектор.

Место в административной иерархии

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

.2 Инспектор подконтролен непосредственно декану факультета повышения квалификации преподавателей.

.3 Инспектор подотчетен старшему инспектору факультета повышения квалификации преподавателей.

Функциональные обязанности

Инспектор факультета повышения квалификации преподавателей:

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

.2 Производит планирование процесса повышения квалификации преподавателей.

.2 Производит поддержку процесса проведения мероприятий по повышению квалификации преподавателей.

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

Примечание:

Фактически в данной профессии переплетаются несколько функций: управленческая (управление процессами планирования и проведения мероприятий по повышению квалификации преподавателей) и юридическая (работа с законодательными актами и положениями о платной образовательной деятельности МИИТа).

Обеспечение (работник)

.1 Квалификационная готовность

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

.1.2 На должность Инспектора назначается лицо, имеющее среднее образование.

Образованность можно проверить различными методами (см. пункт 5.1).

Интеллект кандидата можно проверить с помощью теста IQ (см. пункт 5.3.) или теста Равена (см. пункт 5.6). Достаточным уровнем можно считать коэффициент IQ, равный 90, или средний уровень развития интеллекта по тесту Равена.

.1.3 Инспектор должен владеть компьютером на пользовательском уровне: уметь пользоваться основными функциями подготовки текста в офисных программных средствах (типа Word и Excel), электронной почтой, браузерами, архиваторами, уметь вести БД при готовых интерфейсах [8].

Более подробно требования описаны в пункте 5.2.

.1.4 Инспектор должен уметь разбираться в юридических вопросах, таких как:

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

.1.4.2 Законодательство о труде;

.1.4.3 Правила внутреннего трудового распорядка;

.1.4.4 Правила и нормы охраны труда;

.1.4.5 Правила техники безопасности, производственной санитарии и гигиены, противопожарной безопасности, гражданской обороны.

Юридическая грамотность кандидата также проверяется путем собеседования.

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

.2 Физиологические и личностные особенности.

.2.1 Динамичность мышления.

Динамичность мышления - умение быстро, творчески ориентироваться в деле.

Одним из возможных способов проверки может быть тест IQ (см. пункт 5.3.). Как уже было отмечено выше, достаточным можно считать коэффициент IQ, равный 90.

.2.2 Инспектор должен обладать следующими личностными качествами:

.2.2.1 Внимательность (особая внимательность требуется при создании договоров, актов и квитанций об оплате). Одним из возможных способов проверки может быть метод «красно-черная таблица» (см. пункт 5.4).

.2.3.2 Устойчивость, умение заниматься монотонной работой. Методом оценки может выступать иллюзия Китаока (см. пункт 5.7.).

.2.2.3 Ответственность.

.3 Противопоказания

.3.1 Неспособность к работе, требующей повышенного внимания.

Обеспечение (работодатель)

.1 Работодатель должен предоставить работнику персональное рабочее место в соответствии с ГОСТ 12.2.032-78. ("Система стандартов безопасности труда. Рабочее место при выполнении работ сидя. Общие эргономические требования")

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

.3 Работодатель обязан оплачивать труд работника в соответствии с трудовым договором и ТК РФ при выполнении работником всех своих обязанностей. Способ оплаты устанавливается в трудовом договоре.

.4 Работодатель должен предоставить работнику безопасное помещение для ведения трудовой деятельности, оборудованное противопожарной сигнализацией и средствами тушения пожара.

.5. Работодатель должен обеспечить безопасность работника в соответствии с СанПиН 2.2.2.542-96 ("Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работы"), который был разработан на основе ГОСТ Р. 50948-96.

.6 Работодатель должен проинформировать работника о действии в нештатных ситуациях и дать список контактов, к которым работник должен обращаться при возникновении нештатной ситуации.

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

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

.1 Для проверки письменной грамотности можно предложить кандидату на должность написать диктант среднего уровня сложности.

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

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

.2 Работа в MS Office:

работа с документами в редакторе MS Word: ввод, редактирование, форматирование и печать текстовых документов, включающих таблицы, списки, колонки, рисунки;

работа в электронной таблице MS Excel: работа с «книгами», «листами». Вычислительные операции с ячейками электронной таблицы. Работа с формулами, построение диаграмм и графиков;

работа с презентациями в MS PowerPoint: работа со слайдами презентаций. Шаблоны презентаций, работа с текстом. Просмотр и произвольная демонстрация.

Проверка данного навыка осуществляется выполнением примерного задания в MS Office.

.3 Тест IQ (англ. Intellectual quotent), показатель умственного развития, уровня имеющихся знаний и осведомленности, получаемый на основе различных тестовых методик.

Идея количественного определения уровня интеллектуального развития (IQ) детей с помощью системы тестов впервые была разработана французским психологом А. Бине (1905).

Задания в шкалах Бине были сгруппированы по возрастам (от 3 до 13 лет). Для каждого возраста подбирались определенные тесты.

Они считались соответствующими данной возрастной ступени, если их решало большинство детей данного возраста (80-90%). Детям до 6 лет предлагалось по 4 задания, а детям старше 6 лет - 6 заданий. Задания подбирались путем исследования большой группы детей (300 чел.).

Показателем интеллекта в шкалах Бине был умственный возраст, который мог расходиться с хронологическим. Умственный возраст определялся по успешности выполнения тестовых заданий. Испытание начиналось с предъявления тестовых заданий, соответствующих хронологическому возрасту ребенка. Если он справлялся со всеми заданиями, ему предлагались задания более старшей возрастной группы. Если он решал не все, а некоторые из них, испытание прекращалось. Если же ребенок не справлялся со всеми заданиями своей возрастной группы, ему давались задания, предназначенные для более младшего возраста Испытания проводились до тех пор, пока не выявлялся возраст, все задания которого решались испытуемым. Максимальный возраст, все задания которого решаются испытуемым, называют базовым умственным возрастом.

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

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

Коэффициент IQ был предложен В. Штерном, считавшим существенным недостатком показателя умственного возраста то, что одна и та же разность между умственным и хронологическим возрастом для различных возрастных ступеней имеет неодинаковое значение. Чтобы устранить этот недостаток, Штерн предложил определять частное, получаемое при делении умственного возраста на хронологический. Этот показатель, умноженный на 100, он и назвал коэффициентом интеллектуальности. Используя этот показатель, можно классифицировать нормальных детей по степени умственного развития [7].

С помощью теста на IQ в США, например, проводится отбор в армию, оценивается степень подготовленности учащихся, проводятся социолого-психологические обследования. Данная методика была откалибрована для призыва призывников. Позже выяснилась ее переносимость на менеджеров. Насчет переноса на другие специальности прямых доказательств нет. В настоящее время тесты IQ стали распространенными без достаточного научного основания.

.4 «Красно-черная таблица».

Назначение теста: оценка переключения и распределения внимания.

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

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

Первые два задания выполняются с использованием одного бланка, третье задание - на другом бланке.


Рис. 4.1. Красно-черная таблица


.5 Тестирование на знание Гражданского кодекса РФ, Федерального закона ФЗ-125, нормативных актов в сфере платной образовательной деятельности и сфере повышения квалификации. Можно провести в виде собеседования с кандидатом.

.6 Тест Равена - тест, предназначенный для дифференцировки лиц по уровню их интеллектуального развития. Авторы теста Джон Равен и Л. Пенроуз. Предложен в 1936 году.

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

Другое название этого теста «Прогрессивные матрицы Равена» указывает на то, что задачи теста упорядочены по признаку возрастания трудности их решения. То есть, в каждой из пяти серий (в серии по 12 задач), каждая последующая задача серии относительно сложней предыдущей. На решение задач теста вводится временное ограничение - подсчитывается количество правильно решенных за 20 минут задач. Возможен вариант, когда время на решение всех 60 задач не ограничено. В этом случае результат корректируется по специальной таблице.

По результатам тестирования испытуемый получает несколько оценок:

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

б) по 19-балльной, учитывающей количество и трудность решенных задач;

в) по привычной пятибалльной (школьной, но с «плюсами» и «минусами»).

И, наконец, четвертая, качественная, оценка. Если испытуемый решил все задачи теста, но многие, в том числе и легкие, задачи решил неверно, его можно отнести к категории «скоростников». Если же испытуемый решил мало задач (например, около половины задач теста), но, без единой ошибки, его можно отнести к категории «точняков», или тугодумов.

При интерпретации результата теста «Прогрессивные матрицы Равена» выделяют следующие пять уровней развития интеллекта:

-й уровень (результат более 95 %) - особо высокий интеллект;

-й уровень (результат 75-94 %) - интеллект выше среднего;

-й уровень (результат 25-74 %) - средний интеллект;

-й уровень (результат 5-24 %) - интеллект ниже среднего;

-й уровень (результат ниже 5 %) - дефект интеллекта.


Рис. 4.2 Тест Равена


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


5.7 Тестирование разработано на основе оптических иллюзий движения Акиеши Китаока.


Рис. 4.3 Интерфейс программы с иллюзией


.2 Вывод


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

Также, на основе представленных требований к кандидатам на должность Инспектора факультета повышения квалификации преподавателей и требований к интерфейсу модулей АСУ МИИТ был создан пользовательский интерфейс, который соответствует компетенции сотрудников.


Рис. 4.4 Пользовательский интерфейс

5. Экономическая часть


.1 Постановка экономической задачи


В дипломной работе решается задача организации повышения квалификации преподавателей в рамках АСУ МИИТ.

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

Реализация проекта предполагает достижение следующих результатов:

снижение трудоемкости и повышение качества организации повышения квалификации преподавателей в рамках АСУ МИИТ;

повышение согласованности работы структурных подразделений: факультета повышения квалификации преподавателей (ФПКП), управления финансов и бухгалтерского учета (УФБУ) и других подразделений МИИТа, которые участвуют организации повышения квалификации преподавателей;

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

повышение качества обработки информации.

Областью формирования результатов проекта является:

автоматизация организации повышения квалификации преподавателей в рамках АСУ МИИТ;

совершенствование организационной структуры организации повышения квалификации преподавателей в рамках АСУ МИИТ;

кадровый потенциал;

программно - информационное обеспечение.

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

Для обоснования целесообразности разработки задачи организации повышения квалификации преподавателей в рамках АСУ МИИТ следует рассчитать показатели, относящиеся к двум видам эффективности:

коммерческая;

социальная.

Показателями коммерческой эффективности являются:

сокращение затрат на выполнение процессов организации повышения квалификации преподавателей;

снижение затрат на создание, передачу и обработку и хранение информации, используя базу АСУ МИИТа.

Показателями социальной эффективности являются:

удобство проведения организации повышения квалификации преподавателей;

повышение уровня производительности труда работников ФПКП, УФБУ и других подразделений/филиалов МИИТа.


.2. Расчет затрат, связанных с разработкой проекта автоматизации


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


.2.1 Расчет затрат на техническое обеспечение

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

Куд = Ц*t/T,


где: Ц - стоимость первоначальная, используемого оборудования;- время, в течение года, когда проект автоматизации занимает имеющееся оборудование;

Т - временной ресурс имеющегося оборудования.

Перечень работ, выполненных в ходе задачи организации повышения квалификации преподавателей в рамках АСУ МИИТ, приведен в таблице 5.1.


Таблица 5.1 Работы, выполненные при разработке задачи организации повышения квалификации преподавателей

№ п/пЭтап проектированияДлительность1Получение задания на проектирование12Изучение задания23Сбор и изучение научно-технической литературы74Анализ существующей системы105Обоснование целесообразности решения поставленной задачи26Формулировка требований к поставленной задаче17Выбор средств разработки28Моделирование предметной области79Разработка модели данных610Разработка структуры ПО411Разработка ПО3212Тестирование ПО213Корректировка ПО414Системотехнические и экономические расчеты415Составление пояснительной записки4 Итого:88

Для оценки стоимости ПО или затрат на разработку в денежном выражении возможно составить таблицу следующего вида:


Таблица 5.2

Этап проект-ированияТрудоемкость в ч/часахЗП + ЕСН (228,4 руб./час)Эл.энерго и амортизация в час (3,9 + 27,98)Накладные расходы (8,5 руб./ч)?затраты (руб.)181827,2255,04682150,242163654,4510,081364300,4835612790,41785,2847615051,68480182722550,468021502,45163654,4510,081364300,48681827,2255,04682150,247163654,4510,081364300,4885612790,41785,2847615051,6894810963,21530,2440812901,4410327308,81020,162728600,961125658470,48161,28217668807,6812163654,4510,081364300,4813327308,81020,162728600,9614327308,81020,162728600,9615327308,81020,162728600,96Итого:189221,12

Стоимость часа оплаты труда разработчика с единым социальным налогом (0,34 от зарплаты) рассчитывается по формуле:


,


где: Оклад (оклад i-го разработчика) = 30000 руб.;

ЕСН (ставка единого социального налога) = 0,34 от зарплаты;

Стоимость часа оплаты труда разработчика:

30000*1*(1+0,34)/176 = 228,4 руб./час

Затраты на электроэнергию, потребляемой в час, рассчитываются по формуле:


,

где: Mj - потребляемая мощность j-го оборудования, используемого в работе;рс - количество единиц оборудования, используемого в работе;

Сэч - стоимость 1 кВт/час.

Стоимость 1 кВт/час для различного оборудования приведена в таблице 5.3.


Таблица 5.3

ОборудованиеMj () KрсСэч ()Компьютер0,611,5Сервер121,5

Зэ = (0,6*1*1,5) + (1*2*1,5) = 3,9 руб./ч


Часовая амортизация зависит от цены компьютера и режима его работы.

Стоимость оборудования, необходимого для задачи организации повышения квалификации преподавателей в рамках АСУ МИИТ, представлена в таблице 5.4.


Таблица 5.4 Стоимость оборудования для разработки задачи организации повышения квалификации преподавателей в рамках АСУ МИИТ

Наименование оборудованияКоличество единиц оборудованияЦена, руб.? Цена, руб.Системный блок12000020000Монитор11000010000Клавиатура123001500Мышь11700700Принтер170007000Сервер базы данных1350000350000Сервер приложений1148000148000Итого:537200

Для режима работы ПК, соответствующего наличию выходных и праздничных дней, и 8-ми часовому рабочему дню, можно считать часовую амортизацию по формуле:


,


где: Ц - цена ЭВМ;

,11- норма амортизации в год;

- норма работы часов в месяц.


За = (537200*0,11)/(12*176) = 27,98 руб./ч


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

Расчет накладных расходов:

Кн - накладные расходы за период создания проекта

Знр - накладные расходы в час

Кн = 6000 руб.

Тпроект = 88*8 = 704 ч

Знр = Кн / Тпроект

Знр = 6000 / 704 = 8,5 руб./ч


.2.2 Затраты на создание программных комплексов

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

Если лицензионное ПО используется в нескольких проектах, то затраты, относимые на данный проект принимаются в зависимости от использования ресурса как удельные затраты на лицензионное программное обеспечение (Куд), используемое в проекте.


Куд = Ц*t/(T*т) (руб.),


где: Ц - лицензионная стоимость, используемых программных средств;- период проектирования ИнП;- временной ресурс лицензионного ПО;

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

Если в лицензии не указан срок ее действия, для целей бухгалтерского учета он принимается на уровне 20 лет, для целей налогообложения - 10 лет (но в обоих случаях не более срока деятельности организации).


Таблица 5.5 Стоимость программного обеспечения

Наименование элемента ПОКол-воНазначениеЦена, (руб.)Oracle DB1Система управления базой данных25873825Delphi1Среда разработки приложения72 708PL/SQL Developer1Среда написания SQL-запросов1050Итого:25947583

Куд (Oracle DB) = (25873825*88)/(10*365*30) = 20793,58 руб.

Куд (Delphi) = (72708*88)/(10*365*30) = 58,43 руб.

Куд (PL/SQL Developer) = (1050*88)/(10*365*30) = 0,84 руб.

Куд = Куд (Oracle DB) + Куд (Delphi) + Куд (PL/SQL Developer) =

= 20793,58 + 58,43 + 0,84 = 20852,85 руб.

Рассчитаем затраты на разработку и приобретение программных комплексов:

Зпр =( ЗПч+ Зэ+ За+ З пп +Знр)* Тпроект = 189221,12 руб.

Кр = Зпр + Куд = 189221,12 + 20852,85 = 210073,97 руб.


.2.3 Затраты на приобретение аппаратных комплексов

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


,


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

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

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

тсу = Kто* t/(T*т) (руб.),


где: Kто - стоимость имеющегося аппаратного комплекса, руб.;- время (в течение года) использования имеющегося комплекса;

Т - временной ресурс имеющегося комплекса.

т - потенциальное количество проектов, использующих данное оборудование.

Для эксплуатации проекта необходимо следующее оборудование: 5 компьютеров и 1 принтер для факультета повышения квалификации преподавателей (ФПКП), 37 компьютеров и 19 принтеров для остальных филиалов МИИТа, осуществляющих повышение квалификации преподавателей.

Таблица 5.6 Стоимость оборудования для эксплуатации проекта

Наименование оборудованияКоличество единиц оборудованияЦена, руб.? Цена, руб.Системный блок4215000630000Монитор428000336000Клавиатура4270029400Мышь4230012600Принтер20300060000Сервер базы данных1350000350000Сервер приложений1148000148000Итого:1566000

Предполагается, что временной ресурс имеющегося оборудования:

серверов - 5 лет;

компьютера - 3 года;

принтера - 3 года;

Примем во внимание, что на каждом компьютере работает в среднем 4 приложения, следовательно т = 4.

Получаем:

Кто уд (Сервер БД,сервер приложений)= (498000*22*12)/(5*22*12*30)=

= 3320 руб.

Кто уд (Компьютер,принтер)= =((630000+336000+29400+12600+60000)*22*12) /(3*22*12*4)=

= 89000 руб.

Кто уд = Кто уд (Сервер БД,сервер приложений) +

+ Кто уд (Компьютер, принтер)= 3320 + 89000 = 92320 руб.

Стоимость оргтехники равна затратам на 40 картриджей для принтера (700 руб.).

Следовательно, удельные капитальные вложения на приобретение аппаратного комплекса будут равны:ак = Kтсу = Кто уд + Корг = 92320 + (40 * 700) = 120320 руб.

.2.4 Затраты на создание информационного и организационного обеспечения

Капитальные вложения в создание информационного и организационного обеспечения могут быть определены по формуле:


КО = КИО + КОО,


где: KИО - затраты на создание информационного обеспечения, руб.;ОО - затраты на создание организационного обеспечения, руб.

Затраты на информационное обеспечение рассчитываются аналогично затратам на ПО по фактически выполненному перечню работ. Работы, выполненные по информационному обеспечению, представлены в таблице 5.7.


Таблица 5.7 Работы, выполненные по информационному обеспечению

№ п/пЭтап проектированияДлительность1Получение задания на проектирование12Изучение задания23Сбор и изучение научно-технической литературы74Анализ существующей системы105Обоснование целесообразности решения поставленной задачи2 Итого:22Оценка затрат на информационное обеспечение в денежном выражении по каждому этапу проектирования представлена в таблице 5.8.


Таблица 5.8 Затраты на информационное обеспечение

Этап проект-ированияТрудоемкость в ч/часахЗП + ЕСН (228,4 руб./час)Эл.энерго и амортизация в час (3,9 + 27,98)Накладные расходы (8,5 руб./ч)? Затраты (руб.)181827,2255,04682150,242163654,4510,081364300,4835612790,41785,2847615051,68480182722550,468021502,45163654,4510,08684300,48Итого:47305,28ИО = 47305,28 руб.

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

Работы, выполненные по организационному обеспечению, представлены в таблице 5.9.


Таблица 5.9 Работы, выполненные по организационному обеспечению

Этап проектированияРаботыКол-во дней 15Составление пояснительной записки4Итого:4

Оценка затрат на составление пояснительной записки в денежном выражении представлена в таблице 5.10.


Таблица 5.10 Затраты на составление инструкции

Этап проект-ированияТрудоемкость в ч/часахЗП + ЕСН (228,4 руб./час)Эл.энерго и амортизация в час (3,9 + 27,98)Накладные расходы (8,5 руб./ч)?затраты (руб.)15327308,81020,162728600,96Итого:8600,96си = 8600,96 руб.

Затраты на обучение могут быть рассчитаны с учетом двух моделей обучения:

обучение силами разработчиков;

обучение в лицензированных учебных центрах.

Рассчитаем затраты на обучение силами разработчиков:

Заработная плата на период обучения:

,


где: - оклад разработчика ИП;

- оклад обучаемого;

- количество участников соответствующей категории;- количество рабочих дней в месяце;- количество дней обучения.

Ор = 30000 руб.

Ооб = 10000 руб.

Мк = 42= 22= 5

ЗПоб = (30000 +10000 * 42 )*5/22 = 102272,72 руб.

Заработная плата с ЕСН:


,


где: ЗПоб - оклад разработчика ИП;

Кс - коэффициент с учетом ЕСН.

ЗПесн = 102272,72 * 0,34 = 34772,72 руб.

Амортизация оборудования:


,


где: - стоимость оборудования;

На - норма амортизации в год; - количество дней обучения.

Цоб = 537200 руб.

На = 0,11= 5

Аоб = (537200*0.11/365)*5 = 809,5 руб.

Амортизация программного обеспечения:



где: Цпо - стоимость ПО;

На - норма амортизации в год; - количество дней обучения.

Апо = (25947583*0.11/365)*5 = 39099 руб.

Расходы на электроэнергию:


,


где: - мощность потребляемая оборудованием;

- количество дней обучения;

- стоимость 1 квт*ч.лампочек = 0,02 кВт/ч * 8шткомпьютера = 0,6 кВт /чсерверов = 1 кВт /ч*2шт= 5

Цквт*ч = 1,5 руб/кВтэл.эн. = (0,02 * 8 +0,6 + 1*2)*5*8*1,5 = 252 руб.

Материалы на организацию и сопровождение процесса обучения:



где: Рм - расход материала;

Цм - цена материала.

Для проведения обучения необходимо закупить 1 пачку бумаги ценой 70 руб. и 3 упаковки ручек ценой 100 руб.бум = 1

Цбум = 70 руб.руч = 3

Цруч = 100 руб.

Моб = (1*70) + (3*100) = 370 руб.

Эксплуатация помещений:



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

- нормативная площадь для оборудования и обучения.

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


=0


Следовательно, основные прямые затраты:


=


=102272,72+34772,72+809,5+39099+ 252+370 = 177575,94 руб.

Прочие прямые затраты составляют 30% прямых затрат:

= * 0,3

= 177575,94 * 0,3 = 53272,78 руб.

Итого прямых затрат на обучение:

Зпр_об=+

Зпр_об =177575,94 +53272,78 =230848,72 руб.

Рассчитаем накладные расходы по формуле:

где: - норма накладных расходов;

- прямая заработная плата

=85%

=102272,72

Всего:

Теперь можно рассчитать КО:

КО= КИО + КОО = КИО + Кси+Коб

КО = 47305,28 + 8600,96 + 317780,53 = 373686,77 руб.

.2.5 Суммарные капитальные затраты на разработку и внедрение проекта

Капитальные затраты на разработку и внедрение проекта будут равны:

К = Кр + Как+ КО = 210073,97 + 120320 + 373686,77 = 704080,74 руб.


.2.6 Текущие затраты на эксплуатацию внедряемых систем

Годовые текущие затраты определяются как:

З = З1 + З2 + З3 + З4 + З5 + З6 + З7 + З8 + З9

где З1 - основная и дополнительная заработная плата;

З2 - ЕСН;

З3 - расходы на командировки;

З4 - расходы на содержание легкового транспорта (ремонт и амортизация);

З5 - канцелярские и типографские расходы;

З6 - почтово-телеграфные и телефонные расходы;

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

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

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

Годовая заработная плата сотрудника факультета повышения квалификации преподаваталей (ФПКП) равна:

Количество сотрудников, использующих проект равно 42.

Сумма годовых отчислений на ЕСН составит:

Расходы на командировки, содержание легкового транспорта, почтово-телеграфные и телефонные расходы считаем равными нулю.

З3 = 0

З4 = 0

З6 = 0

Канцелярские и типографские расходы:

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

Будем считать, что на человека приходится 4 м2.

Расходы на содержание и эксплуатацию зданий, помещений и инвентаря будем рассчитывать как коммунальные платежи для помещения площадью (4 * 42) = 168 м2.

Оплата 1 м2 составляет 33 руб.

Годовые расходы на содержание и эксплуатацию аппаратного и программного комплекса будут включать годовые затраты на амортизацию программного комплекса (Запр), годовые затраты на амортизацию аппаратного комплекса (Заап) и годовую стоимость электроэнергии (Зэ):

Годовые затраты на амортизацию программного комплекса будут складываться из удельной стоимости лицензионного ПО и затрат на создание программного комплекса. Норма амортизации принимается равной 20%:

Запр = Кр * 0,2 = 210073,97 * 0,2 = 42014,79 руб.

Годовые затраты на амортизацию аппаратного комплекса будут равны:

Заап = Кто уд * 0,11 = 92320 * 0,11 = 10155,2 руб.

Годовая стоимость потребляемой электроэнергии составит:

Следовательно, годовые расходы на содержание и эксплуатацию аппаратного и программного комплекса будут равны:

З8 = 42014,79 + 10155,2 + 8236,8 = 60406,79 руб.

Прочие расходы будем считать равными нулю.

З9 = 0

В итоге получаем, что годовые текущие затраты, связанные с проектом, равны:

З = З1 + З2 + З5 + З7 +З8 = 12600000 + 102000 + 12000 + 66528 + +60406,79 = 12840934,79 руб.



5.3 Расчет экономической эффективности


Подсчитаем годовые затраты на организацию процесса повышения квалификации преподавателей до внедрения проекта. Затраты на приобретение аппаратного и лицензионного программного обеспечения (кроме PL/SQL Developer и Delphi, так как - это средства разработки) останутся прежними, потому что до внедрения проекта использовались те же программные и аппаратные средства (использовались другие приложения, для поддержания которых необходимы были те же программные и аппаратные средства).

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

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


, где


Зм - месячная заработная плата приведенного выше сотрудника МИИТа на работу в локальной системе;

Т - число рабочих часов в месяц;

ЕСН - ставка единого социального налога.

Зм=25000 руб.

ЕСН = 0,34

Получаем:

Сч = 25000*(1+0,34)/60 =190,34 руб./час

Учитывая, что в МИИТе с разрабатываемым приложением должно работать около 42 сотрудников, экономию от сокращения затрат на работу в локальной системе:


РР = Сч * ?t * n * N,


где: Сч - стоимостная оценка потерь времени сотрудника МИИТа;

?t - среднее значение разницы во времени (в существующей и создаваемой системах), затрачиваемом на выполнение работы по организации повышения квалификации преподавателей (4 час);- количество сотрудников, работающих с приложением;- среднее число документов (планов, отчетов) на каждого сотрудника МИИТа в год (50).

Получаем:

РР = 190,34 * 4 * 42 * 50 = 1598856 руб./год

Здо_внедрения = З1 + З2 + З3 + З4 + З5 + З6 + З7 + З8 + З9 + РР

Все значения З останутся прежними, кроме З8

Не учитываем PL/SQL Developer и Delphi:

Запр = (Зпр + Куд(Oracle)*0,2) =(189221,12 + 20793,58) * 0,2 = 42002,94

З8 = 42002,94 + 10155,2 + 8236,8 = 60394,94 руб.

Здо_внедрения = 12600000 + 102000 + 12000 + 66528 +60394,94 + 1598856 = = 14439778,94 руб.

Зпосле_внедрения = 12840934,79 руб.

Экономическая эффективность равна:

Э = 14439778,94 - 12840934,79 = 1598844,15 руб./год

Капитальные затраты на разработку и внедрение проекта будут равны:

К = 704080,74 руб.

Так как Э > K, то можно сделать вывод о целесообразности разработки и применения приложения, автоматизирующего технологию организации повышения квалификации преподавателей в рамках АСУ МИИТ.




Заключение


При разработке дипломного проекта было разработано приложение, автоматизирующее технологию организации повышения квалификации преподавателей в рамках АСУ МИИТ.

Созданное приложение отвечает всем основным поставленным требованиям:

интеграция с корпоративной системой университета (АСУ МИИТ);

реализация всего требуемого функционала;

заполнение и корректировка содержимого документов, используя данные БД АСУ МИИТ;

просмотр и отправка на печать сформированных документов;

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

организация разграничения доступа на уровне СУБД (объектные привилегии) и на уровне приложения (программные роли).

Список литературы


#"justify">М.Р. Когаловский. Энциклопедия технологий баз данных. М. Финансы и статистика, 2002Engineering, Jakob Nielsen San Francisco, 1993

Проектирование информационных систем на железнодорожном транспорте. Э.К. Лецкий, З.А. Крепкая. И.В. МарковаРуководство пользователя. Грейди Буч, Джеймс Рамбо Айвар Джекобсон

Программирование в Delphi 6, Архангельский А.А.

Психологическая диагностика, Учебное пособие / Под П 86 ред. К.М. Гуревича и Е.М. Борисовой. - М.: Изд-во УРАО, 1997 г.

Человеко-машинное взаимодействие, Методические указания к дипломному проектированию, Дружинин Ю.Г.://ru.wikipedia.org

Качество информации, Дружинин Г.В., Сергеева И.В. - М.: Радио и связь, 1990 г.

Приложение А


Описание ER-модели

EntityEntityNameDefinitionБумагиСведения о документахГруппы повышения квалификацииГруппы повышения квалификацииДоговораСведения о договорахДокументыСодержит документы, удостоверяющие личность сотрудников (паспорт, военный билет).Кто есть ктоСведения о пользователях системыКуратор группыКуратор группыМетодический комплексМетодический комплексПараграфыСведения о параграфахПлан повышения квалификацииПлан повышения квалификацииПодразделенияСведения о подразделенияхСертификатСодержит информацию о документах, подтверждающих полученное образование (вуз, ФПК, аспирантура, докторантура и т.д.).СотрудникиСодержит список сотрудников Специальности комплексаСпециальности комплексаСтудентыСведения о студентахУчебная группаСписок учебных группУчебная нагрузка умкУчебная нагрузка в рамках умк

Attribute(s) of "Бумаги" EntityNameDefinitionID бумагиВнутрисистемный номер бумагиID вида бумагиВнутрисистемный номер вида бумагиномер бумагиНомер бумагиID периода нумерацииВнутрисистемный номер периода нумерации бумагиID серии бумагВнутрисистемный номер серии бумагидатаДатавременный номерВременный номер бумагиоснованиеОснованиеаннотацияАннотацияпримечаниеПримечаниеготов?Признак готовности документапошел?Признак того, что документ ушел на подписьдата созданияДата создания бумагидата измененияДата внесения изменений в документID пользователя системыID Пользователя системы, создавшего этот документ

Attribute(s) of "Группы повышения квалификации" EntityNameDefinitionID группы пкВнутрисистемный номер группы повышения квалификацииID плана пкВнутрисистемный номер плана повышения квалификацииID учебной группыВнутрисистемный номер учебного группыID методического комплексаВнутрисистемный номер методического комплексадата началаПланируемая дата начала обучениядата окончанияПланируемая дата окончания обучения

Attribute(s) of "Договора" EntityNameDefinitionID договораВнутрисистемный номер договораID ктоВнутрисистемный номер организации, которая заключает договорID с кемВнутрисистемный номер организации, с которой заключается договордата началаДата начала действия договорадата оконч планПланируемая дата окончания договорадата окончанияДата окончания договораID параграфаВнутрисистемный номер параграфапредметПредмет договораID источника финВнутрисистемный номер источника финансированияID счетаВнутрисистемный номер счетав рамкахВнутрисистемный номер договора

Attribute(s) of "Документы" EntityNameDefinitionID документаВнутрисистемный номер документаID вида документаВнутрисистемный номер вида документакогда выданКогда выдансерияСерияномерНомеркто выдалКто выдалID сотрудникаВнутрисистемный номер сотрудникадата окончанияОкончание действия

Attribute(s) of "Кто есть кто" EntityNameDefinitionID пользователя системыВнутрисистемный номер пользователя системыID сотрудникаВнутрисистемный номер сотрудникаID пользователяВнутрисистемный номер пользователядата началаДата начала действиядата окончанияДата окончания действиялогинЛогин пользователяпримечаниеОписание пользователялогин в ОСИмя пользователя в операционной системеID сервера приложенийВнутрисистемный номер сервера приложенийID подразделенияВнутрисистемный номер подразделения, (укрупненно) к которому относится пользователь

Attribute(s) of "Куратор группы" EntityNameDefinitionID учебной группыВнутрисистемный номер учебного группыID сотрудникаВнутрисистемный номер сотрудникадата началаДата начала действиядата окончанияДата окончания действия

Attribute(s) of "Методический комплекс" EntityNameDefinitionID методического комплексаВнутрисистемный номер методического комплексаID подразделенияВнутрисистемный номер кафедрыID дисциплиныВнутрисистемный номер дисциплины

Attribute(s) of "Параграфы" EntityNameDefinitionID параграфаВнутрисистемный номер параграфаID вида бумагиВнутрисистемный вида бумагиID бумагиВнутрисистемный номер бумагипорядокПорядокотменаОтмена документа

Attribute(s) of "План повышения квалификации" EntityNameDefinitionID плана пкВнутрисистемный номер плана повышения квалификацииID параграфаВнутрисистемный номер параграфаID обучаемой спецВнутрисистемный номер обучаемой специальностидата началаДата начала действиядата окончанияДата окончания действия

Attribute(s) of "Подразделения" EntityNameDefinitionID подразделенияВнутрисистемный номер подразделенияID метатерминаВнутрисистемный номер метатерминаID контрагентаВнутрисистемный номер контрагента

Attribute(s) of "Сертификат" EntityNameDefinitionID сертификатаВнутрисистемный номер сертификатаID вида уровня образованияВнутрисистемный номер вида образованиядата началаДата начала обучениядата окончанияДата окончания обученияпримечаниеПримечаниеID специальностиВнутрисистемный номер специальностиID квалификацииВнутрисистемный номер квалификациипризнак отличияПризнак отличия: 1 - золотой медалист, 2 - серебрянный и др.ID документаВнутрисистемный номер документаоценок 5число оценок 5оценок 4число оценок 4оценок 3число оценок 3ID вида уч заведенияВнутрисистемный номер вида учебного заведенияпрослушано часовКоличество прослушанных часов

Attribute(s) of "Сотрудники" EntityNameDefinitionID сотрудникаВнутрисистемный номер сотрудникаID контрагентаВнутрисистемный номер контрагента сотрудникафамилияФамилия сотрудникаID склонения фВнутрисистемный номер склонения фамилииимяИмя сотрудникаID склонения иВнутрисистемный номер склонения имениотчествоОтчество сотрудникаID склонения отВнутрисистемный номер склонения отчестваполПолдата рожненияДата рождениядата окончанияДата окончания действияИНННомер ИННномер пенс страхНомер пенсионного свидетельстваID национальностиВнутрисистемный номер национальностиID метатерминаВнутрисистемный номер метатермина

Attribute(s) of "Специальности комплекса" EntityNameDefinitionID методического комплексаВнутрисистемный номер методического комплексаID обучаемой спецВнутрисистемный номер обучаемой специальностиID параграфа программыВнутрисистемный номер параметра программыID вида дисциплиныВнутрисистемный номер вида дисциплиныID типа дисциплиныВнутрисистемный номер типа дисциплиныID параграфа кафедрыВнутрисистемный номер протокола заседания кафедрыID параграфа умоВнутрисистемный номер параграфа протокола заседания учебно-методического совета

Attribute(s) of "Студенты" EntityNameDefinitionID студентаВнутрисистемный номер студентаID сотрудникаВнутрисистемный номер сотрудникаID учебной группыВнутрисистемный номер учебного группыID вида зачисленияВнутрисистемный номер вида зачисленияID приказа о зачВнутрисистемный номер приказа о зачислениидата началаДата начала действияокончание плановоеПланируемая дата окончанияID договораВнутрисистемный номер договораID документаВнутрисистемный номер бумагиID вида программыВнутрисистемный номер вида программы, по которой обучается студент (ускоренная, сокращенная и др.)условный срокДата условного перевода. заполняется в случае если человек при переводе имеет задолжности и должен их ликвидировать к этой датеID учебного планаВнутрисистемный номер учебного плана

Attribute(s) of "Учебная группа" EntityNameDefinitionID учебной группыВнутрисистемный номер учебного группыID обучаемой спецВнутрисистемный номер обучаемой специальностинаименованиеНаименование учебного группыуровень группы0 - группы не учитываемые в учебном отделе 1 - курс 2 - поток 3 - группадата началаДата начала действиядата окончанияДата окончания действиявходитВходитмаксимальный размерРекомендуемое число участников в группеID вида группыВнутрисистемный номер вида группыкурсКурс обученияаббревиатураАббревиатура, если не указана, то берется аббревиатура специальности

Attribute(s) of "Учебная нагрузка умк" EntityNameDefinitionID учебной нагрузки умкВнутрисистемный номер учебной нагрузки УМКID методического комплексаВнутрисистемный номер методического комплексаID вида обученияВнутрисистемный номер вида обученияID вида нагрузкиВнутрисистемный номер вида нагрузкисеместрСеместр (1..12)часыКоличество часов

TableTableNameCertificateComplex_specialitiesContractsCurator_groupDivisionDocumentsEducational_groupEducational_load_umkEmployeesMethodical_complexOrdersParagraphsRefresher_course_groupRefresher_course_planStudentsWho_Is_Who

Column(s) of "Certificate" TableNameDatatypeIs PKIs FKID_certificateNUMBER(10)YesNoIDk_level_formationNUMBER(10)NoNod_startDATENoNod_endDATENoNonoteVARCHAR2(500)NoNoID_specialityNUMBER(10)NoNoID_qualificationNUMBER(10)NoNoattribute_differenceINTEGERNoNoID_docNUMBER(10)NoYesestimations_5INTEGERNoNoestimations_4INTEGERNoNoestimations_3INTEGERNoNoIDk_ed_institutionNUMBER(10)NoNoheard_hoursFLOATNoNo

Column(s) of "Complex_specialities" TableNameDatatypeIs PKIs FKID_p_dpNUMBER(10)NoYesIDt_disciplineNUMBER(10)NoNoIDk_disciplineNUMBER(10)NoNoID_d_specialitieNUMBER(10)NoNoID_methodical_complexINTEGERNoYesID_p_kNUMBER(10)NoYesID_p_umoNUMBER(10)NoYes

Column(s) of "Contracts" TableNameDatatypeIs PKIs FKID_contractNUMBER(10)YesNoID_whoNUMBER(10)NoNoID_with_whomNUMBER(10)NoNod_startDATENoNodp_endDATENoNod_endDATENoNoID_paragraphNUMBER(10)NoYessubjectVARCHAR2(500)NoNoID_sourceNUMBER(10)NoNoID_accountNUMBER(10)NoNoID_contract_mainNUMBER(10)NoYes

Column(s) of "Curator_group" TableNameDatatypeIs PKIs FKID_ed_groupNUMBER(10)YesYesID_eNUMBER(10)YesYesd_startDATEYesNod_endDATENoNo

Column(s) of "Division" TableNameDatatypeIs PKIs FKID_dNUMBER(10)YesNoID_metatermNUMBER(10)NoNoID_contractorNUMBER(10)NoNo

Column(s) of "Documents" TableNameDatatypeIs PKIs FKID_docNUMBER(10)YesNoIDk_docNUMBER(10)NoNowhen_givenDATENoNoseriesVARCHAR2(20)NoNoidentifierVARCHAR2(30)NoNowho_givenVARCHAR2(500)NoNoID_eNUMBER(10)NoYesd_endDATENoNo

Column(s) of "Educational_group" TableNameDatatypeIs PKIs FKID_ed_groupNUMBER(10)YesNoID_d_specialitieNUMBER(10)NoNonameVARCHAR2(100)NoNolevel_groupINTEGERNoNod_startDATENoNod_endDATENoNoID_ed_group_mainNUMBER(10)NoYesmaximal_sizeINTEGERNoNoIDk_groupNUMBER(10)NoNocourseINTEGERNoNoabbreviationVARCHAR2(20)NoNo

Column(s) of "Educational_load_umk" TableNameDatatypeIs PKIs FKID_educational_load_umkINTEGERYesNoID_methodical_complexINTEGERNoYesIDk_trainingNUMBER(10)NoNoIDk_lessonNUMBER(10)NoNosemesterINTEGERNoNohoursFLOATNoNo

Column(s) of "Employees" TableNameDatatypeIs PKIs FKID_eNUMBER(10)YesNoID_contractorNUMBER(10)NoNosurnameVARCHAR2(60)NoNoID_declination_sNUMBER(10)NoNonameVARCHAR2(50)NoNoID_declination_nNUMBER(10)NoNopatronymicVARCHAR2(50)NoNoID_declination_pNUMBER(10)NoNosexNUMBER(1)NoNodate_of_birthDATENoNod_endDATENoNoINNVARCHAR2(30)NoNoinsurance_pensionVARCHAR2(30)NoNoID_nationalityNUMBER(10)NoNoID_metatermNUMBER(10)NoNo

Column(s) of "Methodical_complex" TableNameDatatypeIs PKIs FKID_methodical_complexINTEGERYesNoID_dNUMBER(10)NoYesID_disciplineNUMBER(10)NoNo

Column(s) of "Orders" TableNameDatatypeIs PKIs FKID_orderNUMBER(10)YesNoIDk_orderNUMBER(10)NoNonumber_paperINTEGERNoNoID_period_numberingNUMBER(10)NoNoID_series_paperNUMBER(10)NoNohisdateDATENoNotemp_identifierNUMBER(10)NoNobasisVARCHAR2(800)NoNosummaryVARCHAR2(500)NoNonoteVARCHAR2(800)NoNoIf_readySMALLINTNoNoif_goneSMALLINTNoNod_creationDATENoNod_modificationDATENoNoID_ERP_userNUMBER(10)NoYes

Column(s) of "Paragraphs" TableNameDatatypeIs PKIs FKID_paragraphNUMBER(10)YesNoIDk_orderNUMBER(10)NoNoID_orderNUMBER(10)NoYesindex_pINTEGERNoNocancellationNUMBER(10)NoYes

Column(s) of "Refresher_course_group" TableNameDatatypeIs PKIs FKID_rc_groupINTEGERYesNoID_refresher_course_planINTEGERNoYesID_ed_groupNUMBER(10)NoYesID_methodical_complexINTEGERNoYesd_startDATENoNod_endDATENoNo

Column(s) of "Refresher_course_plan" TableNameDatatypeIs PKIs FKID_refresher_course_planINTEGERYesNoID_paragraphNUMBER(10)NoYesID_d_specialitieNUMBER(10)NoNod_startDATENoNod_endDATENoNo

Column(s) of "Students" TableNameDatatypeIs PKIs FKID_studentNUMBER(10)YesNoID_eNUMBER(10)NoYesID_ed_groupNUMBER(10)NoYesIDkba_transferNUMBER(10)NoNoID_order_startNUMBER(10)NoYesd_startDATENoNodp_endDATENoNoID_order_contractNUMBER(10)NoYesID_docNUMBER(10)NoYesIDk_programNUMBER(10)NoNod_trialDATENoNoID_educational_planNUMBER(10)NoNo

Column(s) of "Who_Is_Who" TableNameDatatypeIs PKIs FKID_ERP_userNUMBER(10)YesNoID_eNUMBER(10)NoYesID_userNUMBER(10)NoNod_startDATENoNod_endDATENoNologinVARCHAR2(20)NoNonoteVARCHAR2(200)NoNologin_OSVARCHAR2(30)NoNoID_asNUMBER(10)NoNoID_dNUMBER(10)NoYes

Приложение Б. Код программы


program pk,,,in 'модули\Главная\Main.pas' {Form_Main},_cx in 'общие модули\Формы\О программе\About_cx.pas' {Form_About},in 'общие модули\System\SysServices.pas',in 'общие модули\System\wrappers.pas',in 'общие модули\System\GridEditClass.pas',_u_CX_tools in 'общие модули\System\LP_u_CX_tools.pas',_u_MA_Interface in 'общие модули\System\LP_u_MA_Interface.pas',_new in 'общие модули\System\Standart_new.pas',in 'общие модули\System\SqlStringList.pas',_Admin_Data in 'общие модули\SQL_Data\Get_Admin_Data.pas',_Single_Data in 'общие модули\SQL_Data\Get_Single_Data.pas',_PK_PPS_Data in 'общие модули\SQL_Data\Get_PK_PPS_Data.pas',in 'общие модули\System\uListener.pas',in 'модули\Мероприятия\Event.pas' {Form_Event},

SE in 'общие модули\Формы\Поиск\SE.pas' {Form_SE},_Org in 'общие модули\Формы\Организации\Find_Org.pas' {Form_Find_Org},in 'общие модули\Формы\Анкета\UnivQuestionnaire.pas' {FUnivQuestionare},_U in 'общие модули\Формы\фото\photo_U.pas' {fPhoto},

New_For_All in 'общие модули\Формы\Ввод новых значений\New_For_All.pas' {Form_New_For_All},_U in 'общие модули\Формы\адреса\address_U.pas' {fAddr},in 'общие модули\Формы\Документы\UnitDocuments.pas' {FormDocuments},in 'общие модули\System\RegService.pas',in 'общие модули\Формы\фото\WebCam.pas' {WebCamera},in 'модули\Справочники\Dictionaries.pas' {Form_Dictionaries},in 'модули\Планирование\Plan.pas' {Form_Plan},in 'общие модули\System\SysEnvironment.pas';

{$R *.res}_LANG_RUSSIAN = (SUBLANG_DEFAULT shl 10) or LANG_RUSSIAN;not MSystemServices.Connect(True, True)Exit;System.DebugHook >0MSystemServices.IsDebugMode:=True;

// Включим по-умолчанию русский язык!(PChar(IntToHex(KB_LANG_RUSSIAN, 8)), KLF_ACTIVATE);.Initialize;

//локализация DevExpress;.RefreshLoginInfo;.RefreshRolesInfo;(Application.Handle, SW_HIDE);.Title := 'Повышение квалификации';.CreateForm(TForm_Main, Form_Main);.Run;.Main, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, dxBar, dxBarExtItems, cxClasses, ActnList, ImgList,, About_cx, Plan, Event, Dictionaries;

const

{ Путь для сохранения в реестре }

Reg_Path = '\Software\AS Pilot group\Parameters\Модуль повышения квалификации';_Main = class(TForm): TcxPropertiesStore;: TcxPropertiesStore;_Aple: TImageList;: TImageList;: TActionList;_Plan: TAction;_Exit: TAction;: TActionList;_Options: TAction;: TdxBarManager;Bar1: TdxBar;: TdxBarSubItem;: TdxBarLargeButton;: TdxBarSubItem;: TdxBarLargeButton;: TdxBarLargeButton;: TdxBarLargeButton;_Main: TPanel;: TPanel;_Message: TAction;: TdxBarButton;_Change_User: TAction;_Refresh_Roles: TAction;: TdxBarButton;: TdxBarLargeButton;_Event: TAction;: TdxBarLargeButton;_Dictionaries: TAction;Action_MessageExecute(Sender: TObject);Action_Change_UserExecute(Sender: TObject);Action_Refresh_RolesExecute(Sender: TObject);Action_ExitExecute(Sender: TObject);Action_AboutExecute(Sender: TObject);Action_PlanExecute(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);FormCreate(Sender: TObject);Action_EventExecute(Sender: TObject);FormShow(Sender: TObject);Action_DictionariesExecute(Sender: TObject);

{ Private declarations }

{ Форма "О программе" }

F_About: TForm_About;

{ Форма "Планирование" }_Plan: TForm_Plan;

{ Форма "Мероприятия" }_Event: TForm_Event;

{ Форма "Справочники" }

F_Disctionaries: TForm_Dictionaries;

{ Public declarations }_NAME: string;

{ Обновить роли }Refresh_Roles;

{ Скрыть все }Hide_All;;_Main: TForm_Main;

{$R *.dfm}SysServices, LP_u_MA_Interface, grideditclass, standart_new, Get_PK_PPS_Data;

{ Обмен сообщениями }TForm_Main.Action_MessageExecute(Sender: TObject);

(vnListAgent as IvnMessageAgent).MA_MessageWindow;;

{ Изменить текущего пользователя }TForm_Main.Action_Change_UserExecute(Sender: TObject);not MSystemServices.Connect(True)

then Close

{ Обновить роли нового пользователя }

else Action_Refresh_Roles.Execute;;

{ Справочники }TForm_Main.Action_DictionariesExecute(Sender: TObject);

begin

{ Скрываем все }_All;

{ Если формы нет, создаем ее, инициализируем, проверяем роли и встраиваем }

if F_Disctionaries = nilbegin_Disctionaries := TForm_Dictionaries.Create(Self);_Disctionaries.Init(Reg_Path+'\Справочники');_Disctionaries.Refresh_Roles;_Disctionaries.ManualDock(Panel1, nil, alClient);;

{ Показываем форму }_Disctionaries.Realign;_Disctionaries.PageControl_Main.Realign;_Disctionaries.Panel_Main.Realign;_Disctionaries.Panel_Filter.Realign;_Disctionaries.PopupEdit_Filter_Org.Realign;Self.Caption <> ''Self.Caption := Self.Caption + '. ' + F_Disctionaries.CaptionSelf.Caption := F_Disctionaries.Caption;.Title := Self.Caption;_Disctionaries.Show;;

{ Скрыть все формы }TForm_Main.Hide_All;F_Plan <> nilF_Plan.VisibleF_Plan.Hide;F_Event <> nilF_Event.VisibleF_Event.Hide;

//Self.Caption := My_Get_Version('InternalName');.Caption := ERP_NAME;.Title := Self.Caption;;

{ Обновить роли пользователя }TForm_Main.Refresh_Roles;data: olevariant; i: integer;:= MSystemServices.SelectData(Get_Params_Module, CreateVarAr(['2000']), i

, 'Не смогли прочитать настройку модуля');

if VarIsArray(data)ERP_NAME := VarToStr(data[0][0])ERP_NAME := '';:= MSystemServices.SelectData(Get_Params_Module, CreateVarAr(['2014']), i

, 'Не смогли прочитать настройку модуля');

if VarIsArray(data)ERP_NAME <> ''ERP_NAME := ERP_NAME + '. ';_NAME := ERP_NAME + VarToStr(data[0][0]);;.Caption := ERP_NAME;

{ Проверка доступности показа формы планирования }

Action_Plan.Enabled := TForm_Plan.IsRoleAccessible;(F_Plan <> nil)beginF_Plan.Visible and not Action_Plan.EnabledHide_AllF_Plan.Refresh_Roles;F_Plan.Visibleif Self.Caption <> ''Self.Caption := Self.Caption + '. ' + F_Plan.CaptionSelf.Caption := F_Plan.Caption;

end;

{ Проверка доступности показа формы мероприятий }

Action_Event.Enabled := TForm_Event.IsRoleAccessible;(F_Event <> nil)beginF_Event.Visible and not Action_Event.EnabledHide_AllF_Event.Refresh_Roles;F_Event.VisibleSelf.Caption <> ''Self.Caption := Self.Caption + '. ' + F_Event.CaptionSelf.Caption := F_Event.Caption;;_Dictionaries.Enabled := TForm_Dictionaries.IsRoleAccessible;(F_Disctionaries <> nil)beginF_Disctionaries.Visible and not Action_Event.EnabledHide_AllF_Disctionaries.Refresh_Roles;F_Disctionaries.VisibleSelf.Caption <> ''Self.Caption := Self.Caption + '. ' + F_Disctionaries.CaptionSelf.Caption := F_Disctionaries.Caption;;.Title := Self.Caption;

end;

{ Перечитать роли текущего юзверя }

procedure TForm_Main.Action_Refresh_RolesExecute(Sender: TObject);

begin

{ Если создана форма, то и там обновим роли }

if F_About <> nilGet_SqlData_cxGrid(F_About.Tree_Roles_User).Read_Data

{ Иначе - сами их прочтем и определим доступность }

else begin.RefreshLoginInfo;.RefreshRolesInfo;_Roles;;;

{ Проведение мероприятий }TForm_Main.Action_EventExecute(Sender: TObject);

begin

{ Скрываем все }_All;

{ Если формы нет, создаем ее, инициализируем, проверяем роли и встраиваем }

if F_Event = nilbegin_Event := TForm_Event.Create(Self);_Event.Init(Reg_Path+'\Мероприятия');_Event.Refresh_Roles;_Event.ManualDock(Panel1, nil, alClient);;

{ Показываем форму }_Event.Realign;_Event.PageControl_Main.Realign;_Event.Panel_Main.Realign;Self.Caption <> ''Self.Caption := Self.Caption + '. ' + F_Event.CaptionSelf.Caption := F_Event.Caption;.Title := Self.Caption;_Event.Show;;

{ Выход из программы }TForm_Main.Action_ExitExecute(Sender: TObject);

begin;;

{ Открыть форму о программе }

procedure TForm_Main.Action_AboutExecute(Sender: TObject);

begin

{ Если формы нет, создаем ее и инициализируем }

if F_About = nilbegin_About := TForm_About.Create(Self);_About.Refresh_Roles := Refresh_Roles;_About.Init(Reg_Path+'\О программе');

end;

{ Показываем форму в модальном окне }_About.ShowModal;;

{ Планирование обучения }

procedure TForm_Main.Action_PlanExecute(Sender: TObject);

begin

{ Скрываем все }_All;

{ Если формы нет, создаем ее, инициализируем, проверяем роли и встраиваем }

if F_Plan = nilbegin_Plan := TForm_Plan.Create(Self);_Plan.Init(Reg_Path+'\Планирование');_Plan.Refresh_Roles;_Plan.ManualDock(Panel1, nil, alClient);;

{ Показываем форму }_Plan.Realign;_Plan.PageControl_Main.Realign;_Plan.Panel_Main.Realign;_Plan.Panel_Filter.Realign;_Plan.PopupEdit_Filter_Org.Realign;Self.Caption <> ''Self.Caption := Self.Caption + '. ' + F_Plan.CaptionSelf.Caption := F_Plan.Caption;

F_Plan.Show;;

{ Сохраним параметры окна }

procedure TForm_Main.FormClose(Sender: TObject; var Action: TCloseAction);.SaveToRegistry(Reg_Path+'\Главное окно\Меню');

cxPropertiesStore1.StoreTo(False);

{ При свернутости и распахнутости окна размеры не сохранять! }

if WindowState = wsNormalcxPropertiesStore2.StoreTo(False);;

{ Инициализация }TForm_Main.FormCreate(Sender: TObject);

begin

{ Загружаем параметры из реестра }

cxPropertiesStore1.StorageName:=Reg_Path+'\Главное окно';.StorageName:=Reg_Path+'\Главное окно\Размеры';:=poDesigned;.RestoreFrom;.RestoreFrom;.LoadFromRegistry(Reg_Path+'\Главное окно\Меню');;TForm_Main.FormShow(Sender: TObject);_Roles;

{ Скроем все }_All;;.Dictionaries, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, cxPC, cxControls, cxSplitter, cxStyles, cxCustomData,, cxFilter, cxData, cxDataStorage, cxEdit, cxGridLevel,, cxGridTableView, cxGridBandedTableView,, cxGrid, cxEditRepositoryItems, cxClasses, cxTL,, cxPropertiesStore, cxTextEdit, cxMaskEdit, cxDropDownEdit,,wrappers, ActnList, cxLookAndFeels, cxLookAndFeelPainters, cxSpinEdit,, GridEditClass, cxButtonEdit, cxTimeEdit, SE;

const

{ Роль на редактирование специальностей, организаторов обучения }

Action_Q_Edit_Spec = '1401';

{ Роль на редактирование учебных групп }

Action_Q_Edit_Groups = '1402';

{ Вид уровня специальности "Повышение квалификации" }_Level_Spec = '70';

{ Вид дисциплины "Повышение квалификации }_Discipline = '59454';

{ Вид уровня образования "Повышение квалификации" }_Level_Formation = '70508';

{ Путь для сохранения в реестре }

Reg_Path = '\Software\AS Pilot group\Parameters\Модуль повышения квалификации\Справочники';

{ Путь для сохранения списков }_Path = '\Параметры списков\';

{ Путь для добавления }_Path = 'Модуль повышения квалификации\Справочники\Добавление\';

type_Dictionaries = class(TForm)_Main: TPanel;: TcxEditStyleController;: TcxStyleRepository;_Group: TcxStyle;_s_ContentEVEN: TcxStyle;_Filter_Box: TcxStyle;_Footer: TcxStyle;_Inactive: TcxStyle;_Indicator: TcxStyle;_Preview: TcxStyle;_Selection: TcxStyle;_ContentOdd: TcxStyle;_Content_TEXT: TcxStyle;_Content_POPUP: TcxStyle;_Content_DATE: TcxStyle;_Content_QUALIFIER: TcxStyle;_Footer_Column: TcxStyle;_Content_ID: TcxStyle;_Content_Memo: TcxStyle;_Content_Project: TcxStyle;_Content_Cancel: TcxStyle;_Content_ProjectSend: TcxStyle;_Content_Owner: TcxStyle;_Content_NotOwner: TcxStyle;_Content_Hot_Track: TcxStyle;_Inc_Search: TcxStyle;_Group_By_Box: TcxStyle;_Header: TcxStyle;_Style_1: TcxTreeListStyleSheet;_Style_1: TcxGridBandedTableViewStyleSheet;: TcxEditRepository;_Date_None_Blank: TcxEditRepositoryDateItem;_Date_With_Blank: TcxEditRepositoryDateItem;_Spin_ID: TcxEditRepositorySpinItem;_Text_RO: TcxEditRepositoryTextItem;_Memo_RO: TcxEditRepositoryMemoItem;_Date_RO: TcxEditRepositoryDateItem;: TcxPropertiesStore;_Filter: TPanel;: TcxSplitter;: TcxLabel;_Filter_Org: TcxPopupEdit;_Text: TcxEditRepositoryTextItem;: TActionList;_Insert_Spec_Div: TAction;_Insert_Spec: TAction;_tv_spec: TAction;_tv_spec_div: TAction;_tv_intitutes: TAction;_tv_kind_training: TAction;_tv_k_l_f: TAction;_tv_org_div: TAction;_tv_source_finansing: TAction;_Insert_Ed_Group: TAction;_Main: TcxPageControl;_Spec: TcxTabSheet;_Spec: TcxGrid;_Spec: TcxGridBandedTableView;_Spec_Name: TcxGridBandedColumn;_Spec_Q: TcxGridBandedColumn;_Spec_ID: TcxGridBandedColumn;_Spec_IDK_Level_Spec: TcxGridBandedColumn;_Spec_id_discipline: TcxGridBandedColumn;_Spec_idk_discipline: TcxGridBandedColumn;_Spec_Level1: TcxGridLevel;_Org: TcxTabSheet;_Spec_Div: TcxGrid;_spec_div: TcxGridBandedTableView;_spec_div_name_spec: TcxGridBandedColumn;_spec_div_name_div: TcxGridBandedColumn;_spec_div_kind_training: TcxGridBandedColumn;_spec_div_institute: TcxGridBandedColumn;_spec_div_source: TcxGridBandedColumn;_spec_div_d_start: TcxGridBandedColumn;_spec_div_d_end: TcxGridBandedColumn;_spec_div_id_spec_div: TcxGridBandedColumn;_spec_div_id_spec: TcxGridBandedColumn;_spec_div_id_d: TcxGridBandedColumn;_spec_div_idk_training: TcxGridBandedColumn;_spec_div_id_d_institute: TcxGridBandedColumn;_spec_div_id_source: TcxGridBandedColumn;_spec_div_idk_level_formation: TcxGridBandedColumn;: TcxGridLevel;_Ed_Group: TcxGrid;_ed_group: TcxGridBandedTableView;_ed_group_name: TcxGridBandedColumn;_ed_group_kind_group: TcxGridBandedColumn;_ed_group_d_start: TcxGridBandedColumn;_ed_group_d_end: TcxGridBandedColumn;_ed_group_id_ed_group: TcxGridBandedColumn;_ed_group_id_spec_div: TcxGridBandedColumn;_ed_group_idk_group: TcxGridBandedColumn;_ed_group_level_group: TcxGridBandedColumn;: TcxGridLevel;: TcxSplitter;_Editing: TcxTabSheet;: TcxPageControl;_Division: TcxTabSheet;_Org_Division: TcxGrid;_Org_Division: TcxGridBandedTableView;_Org_Division_Abbr: TcxGridBandedColumn;_Org_Division_Name: TcxGridBandedColumn;_Org_Division_ID: TcxGridBandedColumn;_Org_Division_Level1: TcxGridLevel;_Institutes: TcxTabSheet;_Institutes: TcxGrid;_institutes: TcxGridBandedTableView;_institutes_Abbr: TcxGridBandedColumn;_institutes_Name: TcxGridBandedColumn;_institutes_ID: TcxGridBandedColumn;: TcxGridLevel;_Kind_Training: TcxTabSheet;_Kind_Training: TcxGrid;_Kind_Training: TcxGridBandedTableView;_Kind_Training_Name: TcxGridBandedColumn;_Kind_Training_IDK_TRAINING: TcxGridBandedColumn;: TcxGridLevel;_K_L_F: TcxTabSheet;_K_L_F: TcxGrid;_klf: TcxGridBandedTableView;_klf_idk_lf: TcxGridBandedColumn;_klf_name: TcxGridBandedColumn;_klf_qualifer: TcxGridBandedColumn;: TcxGridLevel;_SF: TcxTabSheet;_Source_Financing: TcxGrid;_Source_Financing: TcxGridBandedTableView;_Source_Financing_Abbreviation: TcxGridBandedColumn;_Source_Financing_Name: TcxGridBandedColumn;_Source_Financing_Abbr_Div: TcxGridBandedColumn;_Source_Financing_Division: TcxGridBandedColumn;_Source_Financing_Kind_Source: TcxGridBandedColumn;_Source_Financing_Activity: TcxGridBandedColumn;_Source_Financing_Date_Close: TcxGridBandedColumn;_Source_Financing_ID: TcxGridBandedColumn;_Source_Financing_ID_D: TcxGridBandedColumn;_Source_Financing_ID_Kind_Source: TcxGridBandedColumn;_Source_Financing_ID_Activity: TcxGridBandedColumn;: TcxGridLevel;_Add: TcxTabSheet;: TcxPageControl;_Add_Spec: TcxTabSheet;_New_Spec: TPanel;: TcxLabel;_Spec_Name: TcxTextEdit;_Spec_Quality: TcxTextEdit;: TcxLabel;_New_Spec_Div: TcxTabSheet;_New_Spec_Div: TPanel;: TcxLabel;: TcxLabel;: TcxLabel;: TcxLabel;: TcxLabel;_Spec_Div_D_Start: TcxDateEdit;_Spec_Div_D_End: TcxDateEdit;_Spec_Div_Institute: TcxPopupEdit;: TcxLabel;_Spec_Div_Div: TcxPopupEdit;_Spec_Div_Spec: TcxPopupEdit;_Spec_Div_KT: TcxPopupEdit;: TcxLabel;_Spec_Div_SF: TcxPopupEdit;_Ed_Group: TcxTabSheet;_New_Ed_Group: TPanel;: TcxLabel;_New_Ed_Group_Name: TcxTextEdit;: TcxLabel;_New_Ed_Group_D_End: TcxDateEdit;_New_Ed_Group_D_Start: TcxDateEdit;: TcxLabel;_SD_Params: TPanel;: TcxPageControl;: TcxTabSheet;: TcxTabSheet;_Commission: TcxGrid;_Commission: TcxGridBandedTableView;_Commission_Order: TcxGridBandedColumn;_Commission_Kind: TcxGridBandedColumn;_Commission_Start: TcxGridBandedColumn;_Commission_End: TcxGridBandedColumn;_Commission_ID_Paragraph: TcxGridBandedColumn;_Commission_ID_Spec: TcxGridBandedColumn;_Commission_ID_D: TcxGridBandedColumn;_Commission_ID_Order: TcxGridBandedColumn;_Commission_Level5: TcxGridLevel;_New_Sommission: TcxTabSheet;_New_Commission: TPanel;: TcxLabel;: TcxLabel;_New_Commission_End: TcxDateEdit;_New_Commission_Start: TcxDateEdit;: TcxLabel;_New_Commission: TcxButtonEdit;_Commission_IDK_Order: TcxGridBandedColumn;_Commission_Status_Order: TcxGridBandedColumn;_Commission_ID_MT: TcxGridBandedColumn;_Commission_ID_MO: TcxGridBandedColumn;_Commission_ID_ERP: TcxGridBandedColumn;_Commission_User: TcxGridBandedColumn;_New_Commission: TAction;_Insert_New_Commission: TAction;_Commission_ID: TcxGridBandedColumn;_Commission_ID_Kind: TcxGridBandedColumn;_Members: TcxGrid;_Members: TcxGridBandedTableView;_Members_Order: TcxGridBandedColumn;_Members_Kind: TcxGridBandedColumn;_Members_Start: TcxGridBandedColumn;_Members_End: TcxGridBandedColumn;_Members_User: TcxGridBandedColumn;_Members_ID_Paragraph: TcxGridBandedColumn;_Members_ID_Order: TcxGridBandedColumn;_Members_IDK_Order: TcxGridBandedColumn;_Members_Status_Order: TcxGridBandedColumn;_Members_ID_MT: TcxGridBandedColumn;_Members_ID_MO: TcxGridBandedColumn;_Members_ID_ERP: TcxGridBandedColumn;_Members_ID_Commission: TcxGridBandedColumn;_Members_Level1: TcxGridLevel;_Members_Post: TcxGridBandedColumn;_Members_FIO: TcxGridBandedColumn;_Members_ID_Post: TcxGridBandedColumn;_Members_ID_E: TcxGridBandedColumn;: TcxSplitter;_New_Member: TcxTabSheet;_New_Member: TPanel;: TcxLabel;: TcxLabel;_New_Member_End: TcxDateEdit;_New_Member_Start: TcxDateEdit;: TcxLabel;_New_Member: TcxButtonEdit;: TcxLabel;_Post: TcxGrid;_Post: TcxGridBandedTableView;_Post_Name: TcxGridBandedColumn;_Post_ID: TcxGridBandedColumn;_Post_Level1: TcxGridLevel;_New_Member_Post: TcxPopupEdit;_New_Member: TAction;_Members_ID: TcxGridBandedColumn;: TcxLabel;_New_Member_FIO: TcxPopupEdit;_Insert_New_Member: TAction;FormDestroy(Sender: TObject);Action_Insert_Spec_DivExecute(Sender: TObject);Action_Insert_SpecExecute(Sender: TObject);Fill_tv_specExecute(Sender: TObject);PageControl_MainPageChanging(Sender: TObject;: TcxTabSheet; var AllowChange: Boolean);Fill_tv_spec_divExecute(Sender: TObject);Fill_tv_intitutesExecute(Sender: TObject);Fill_tv_kind_trainingExecute(Sender: TObject);Fill_tv_k_l_fExecute(Sender: TObject);Fill_tv_org_divExecute(Sender: TObject);Fill_tv_source_finansingExecute(Sender: TObject);tv_spec_div_institutePropertiesInitPopup(Sender: TObject);tv_spec_div_name_divPropertiesInitPopup(Sender: TObject);tv_spec_div_name_specPropertiesInitPopup(Sender: TObject);tv_spec_div_kind_trainingPropertiesInitPopup(Sender: TObject);tv_spec_div_sourcePropertiesInitPopup(Sender: TObject);PopupEdit_Filter_OrgPropertiesInitPopup(Sender: TObject);cxPopupEditNew_Spec_Div_DivPropertiesInitPopup(Sender: TObject);cxPopupEditNew_Spec_Div_SpecPropertiesInitPopup(Sender: TObject);cxPopupEditNew_Spec_Div_KTPropertiesInitPopup(Sender: TObject);cxPopupEditNew_Spec_Div_SFPropertiesInitPopup(Sender: TObject);Action_Insert_Ed_GroupExecute(Sender: TObject);cxPopupEditNew_Spec_Div_InstitutePropertiesInitPopup(: TObject);tv_SpecSelectionChanged(Sender: TcxCustomGridTableView);tv_SpecEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);tv_spec_divSelectionChanged(Sender: TcxCustomGridTableView);tv_spec_divEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);tv_ed_groupSelectionChanged(Sender: TcxCustomGridTableView);tv_ed_groupEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);FormShow(Sender: TObject);tv_SpecMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);tv_SpecKeyDown(Sender: TObject; var Key: Word;: TShiftState);tv_ed_groupKeyDown(Sender: TObject; var Key: Word;: TShiftState);tv_ed_groupMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);tv_spec_divKeyDown(Sender: TObject; var Key: Word;: TShiftState);tv_spec_divMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);PopupEdit_Filter_OrgPropertiesEditValueChanged(Sender: TObject);Action_New_CommissionExecute(Sender: TObject);cxPageControl3Change(Sender: TObject);Action_Insert_New_CommissionExecute(Sender: TObject);Action_New_MemberExecute(Sender: TObject);Action_Insert_New_MemberExecute(Sender: TObject);

private

{ Private declarations }

{ Доступность редактирования специальностей мет. комплекса, специальностей и организаторов обучения }_Spec: boolean;

{ Доступность редактирования учебных групп, сроков проведения и плана ПК }_Groups: boolean;

{ Объект для работы со списками }_TableView: TSqlData_cxGridTableView;

{ Путь реестра (для загрузки/сохранения параметров) }

Curr_Reg_Path: String;

{ Контейнеры оберток }_Institute_Filter, cW_New_Spec, cW_New_Ed_Group, cW_New_Spec_Div

, cW_New_Commission, cw_New_Member: TContainerWrappers;

{ Форма поиска человека }_Form_SE: TForm_SE;

{ Обработчики событий изменения в контейнерах оберток }

procedure DoChanged_cW_New_Spec(AWrapper: TCustomEditWrapper);DoChanged_cW_New_Spec_Div(AWrapper: TCustomEditWrapper);DoChanged_cW_Intitute_Filter(AWrapper: TCustomEditWrapper);DoChanged_cW_New_Ed_Group(AWrapper: TCustomEditWrapper);Before_Delete_Exchange(Sender: TSqlData_cxGridTableView;: Integer; var ExchangeParameters: OleVariant);

{ Смена записи в tv_spec_div }

procedure OnChoiceGridRecord_tv_spec_div(Sender: TSqlData_cxGridTableView; AGridRecord: TcxGridDataRow);

{ Установка доступности добавления }Allow_Insert(TV: TcxCustomGridTableView; Roles: array of boolean);

{ Установка доступности редактирования таблицы (с документом) }

function Allow_Editing(TV: TcxCustomGridTableView; Status_Column: TcxGridColumn;_ERP_Column: TcxGridColumn; Roles: array of boolean): boolean; overload;

{ Установка доступности редактирования таблицы (без документа) }

function Allow_Editing(TV: TcxCustomGridTableView; Roles: array of boolean): boolean; overload;

{ Установка доступности удаления из таблицы (с документом) }

procedure Allow_Delete(TV: TcxCustomGridTableView; Status_Column: TcxGridColumn;_ERP_Column: TcxGridColumn; Roles: array of boolean); overload;

{ Установка доступности удаления из таблицы (без документа) }

procedure Allow_Delete(TV: TcxCustomGridTableView; Roles: array of boolean); overload;

{ Сохранение/восстановление параметров списков }Save_Restore_Params(RReg_Path: String = Reg_Path; PIs_Load: Boolean = True);

{ Public declarations }

{ Инициализация формы }Init(AReg_Path: String = Reg_Path; AForm_SE: TForm_SE = nil);

{ Обновить роли }Refresh_Roles;

{ Проверка доступности ко всей форме без создания ее самой }

class function IsRoleAccessible: Boolean;;_Dictionaries: TForm_Dictionaries;

{$R *.dfm}SysServices, Get_PK_PPS_Data, standart_new, get_single_data, LP_u_CX_tools;

{ Сохранение/восстановление параметров списков }TForm_Dictionaries.Save_Restore_Params(RReg_Path: String = Reg_Path; PIs_Load: Boolean = True);.StorageName:=RReg_Path+'\Общие параметры';

if PIs_Load

{ Восстановление параметров }begin // 1

{ Восстановим общие параметры }.RestoreFrom;

{ Восстановим значения фильтра по институтам }

if PopupEdit_Filter_Org.Tag <> 0begin // 2_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value := IntToStr(PopupEdit_Filter_Org.Tag);_Institute_Filter.Wrappers[PopupEdit_Filter_Org].ValueDisplay := PopupEdit_Filter_Org.Text;// 2begin // 3_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value := '';_Institute_Filter.Wrappers[PopupEdit_Filter_Org].ValueDisplay := '';

end; // 3// 1

{ Сохранение параметров }begin // 4

{ Сохраним значения фильтра по институтам }

if VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value) <> ''begin // 5_Filter_Org.Tag := StrToInt(VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value));_Filter_Org.Text := VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].ValueDisplay);// 5begin // 6_Filter_Org.Tag := 0;_Filter_Org.Text := '';; // 6

{ Сохраним общие параметры }.StoreTo(True);

end; // 4

{ Сохранение или загрузки параметров списков (в зависимости от параметра PIs_Load) }

Restore_cxGridTableView(tv_spec, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_spec).Table_Name);_cxGridTableView(tv_spec_div, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_spec_div).Table_Name);_cxGridTableView(tv_ed_group, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_ed_group).Table_Name);_cxGridTableView(tv_Org_Division, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_Org_Division).Table_Name);_cxGridTableView(tv_institutes, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_institutes).Table_Name);_cxGridTableView(tv_Kind_Training, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_Kind_Training).Table_Name);_cxGridTableView(tv_klf, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_klf).Table_Name);_cxGridTableView(tv_Source_Financing, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_Source_Financing).Table_Name);_cxGridTableView(TTree_Commission, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(TTree_Commission).Table_Name);

end;

{ Проверка доступности ко всей форме без создания ее самой! }

class function TForm_Dictionaries.IsRoleAccessible: Boolean;:= vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Spec)vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Groups)vnSessionAgent.IsDBA;;

{ Проверка прав }TForm_Dictionaries.Refresh_Roles;DBA: boolean;

{ Проверка наличия ролей }:= vnSessionAgent.IsDBA;_Spec := vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Spec) or DBA;_Groups := vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Groups) or DBA;PageControl_Main.ActivePageIndex = 1cxPageControl3Change(cxPageControl3);;

{ Установка доступности добавления }TForm_Dictionaries.Allow_Insert(TV: TcxCustomGridTableView; Roles: array of boolean);i: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1not FSqlData_TableView.IsFirstReadbegin // 2:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];_TableView.ActionInsert.Enabled := Allow;// 2FSqlData_TableView.ActionInsert.Enabled := False;

end; // 1;

{ Установка доступности редактирования таблицы (с документом) }

function TForm_Dictionaries.Allow_Editing(TV: TcxCustomGridTableView; Status_Column: TcxGridColumn;_ERP_Column: TcxGridColumn; Roles: array of boolean): boolean;status, id_erp: string;: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1(TV.DataController.FocusedRecordIndex <> -1)begin // 2:= VarToStr(TV.DataController.Values[TV.DataController.FocusedRecordIndex

,Status_Column.Index]);_erp := VarToStr(TV.DataController.Values[TV.DataController.FocusedRecordIndex

,ID_ERP_Column.Index]);:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];:= (status = '2') and (id_erp = vnSessionAgent.ID_ERP_User) and Allow;// 2Result := False;; // 1

end;

{ Установка доступности редактирования таблицы (без документа) }

function TForm_Dictionaries.Allow_Editing(TV: TcxCustomGridTableView; Roles: array of boolean): boolean;i: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];:= (TV.DataController.FocusedRecordIndex <> -1) and Allow;// 1Result := False;;

{ Установка доступности удаления из таблицы (с документом) }

procedure TForm_Dictionaries.Allow_Delete(TV: TcxCustomGridTableView; Status_Column: TcxGridColumn;_ERP_Column: TcxGridColumn; Roles: array of boolean);i: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];_TableView.ActionDelete.Enabled := Is_Value(Status_Column, '2', false)Is_Value(ID_ERP_Column, vnSessionAgent.ID_ERP_User, false)(TV.Controller.SelectedRecordCount > 0) and Allow;

end; // 1;

{ Установка доступности удаления из таблицы (без документа) }

procedure TForm_Dictionaries.Allow_Delete(TV: TcxCustomGridTableView; Roles: array of boolean);i: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];_TableView.ActionDelete.Enabled := (TV.Controller.SelectedRecordCount > 0)Allow;; // 1;TForm_Dictionaries.Before_Delete_Exchange(Sender: TSqlData_cxGridTableView;: Integer; var ExchangeParameters: OleVariant);Sender.GridTableView = tv_specwith Sender.GridTableView.DataController do:= CreateVarAr([Values[FocusedRecordIndex, tv_Spec_ID.Index]]);;TForm_Dictionaries.tv_ed_groupEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);_Editing(Sender, [REdit_Groups]);;TForm_Dictionaries.tv_ed_groupKeyDown(Sender: TObject; var Key: Word;: TShiftState);Key = VK_INSERTAllow_Insert(tv_ed_group, [REdit_Groups]);;TForm_Dictionaries.tv_ed_groupMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Button = mbRightAllow_Insert(tv_ed_group, [REdit_Groups]);;TForm_Dictionaries.tv_ed_groupSelectionChanged(: TcxCustomGridTableView);Sender = TTree_Commissionwith TTree_Commission.Controller do_SqlData_cxGrid(TTree_Commission).ActionDelete.Enabled :=

(SelectedRowCount > 0)Get_SqlData_cxGrid(TTree_Commission).ActionInsert.EnabledIs_Value(Tree_Commission_Status_Order, '2', False)(vnSessionAgent.IsDBA or vnSessionAgent.IsRoleAccessible('', '', '902'

, [VarToStr(SelectedRows[0].Values[Tree_Commission_ID_MT.Index])]

, [VarToStr(SelectedRows[0].Values[Tree_Commission_ID_MO.Index])]

, [VarToStr(SelectedRows[0].Values[Tree_Commission_ID_ERP.Index])]))Sender = TTree_Memberswith TTree_Members.Controller do_SqlData_cxGrid(TTree_Members).ActionDelete.Enabled :=

(SelectedRowCount > 0)Get_SqlData_cxGrid(TTree_Members).ActionInsert.EnabledIs_Value(Tree_Members_Start, '2', False)(vnSessionAgent.IsDBA or vnSessionAgent.IsRoleAccessible('', '', '902'

, [VarToStr(SelectedRows[0].Values[Tree_Members_ID_MT.Index])]

, [VarToStr(SelectedRows[0].Values[Tree_Members_ID_MO.Index])]

, [VarToStr(SelectedRows[0].Values[Tree_Members_ID_ERP.Index])]))Allow_Delete(Sender, [REdit_Groups]);;TForm_Dictionaries.tv_SpecEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);_Editing(Sender,[REdit_Spec]);;TForm_Dictionaries.tv_SpecKeyDown(Sender: TObject; var Key: Word;: TShiftState);Key = VK_INSERTAllow_Insert(tv_spec, [REdit_Spec]);;TForm_Dictionaries.tv_SpecMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Button = mbRightAllow_Insert(tv_spec, [REdit_Spec]);;TForm_Dictionaries.tv_SpecSelectionChanged(Sender: TcxCustomGridTableView);_Delete(Sender, [REdit_Spec]);;TForm_Dictionaries.tv_spec_divEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);_Editing(Sender, [REdit_Spec]);;TForm_Dictionaries.tv_spec_divKeyDown(Sender: TObject; var Key: Word;: TShiftState);Key = VK_INSERTAllow_Insert(tv_spec_div, [REdit_Spec]);;TForm_Dictionaries.tv_spec_divMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Button = mbRightAllow_Insert(tv_spec_div, [REdit_Spec]);;TForm_Dictionaries.tv_spec_divSelectionChanged(: TcxCustomGridTableView);_Delete(Sender, [REdit_Spec]);;TForm_Dictionaries.tv_spec_div_institutePropertiesInitPopup(Sender: TObject);_tv_intitutesExecute(self);;TForm_Dictionaries.tv_spec_div_kind_trainingPropertiesInitPopup(: TObject);_tv_kind_trainingExecute(self);;TForm_Dictionaries.tv_spec_div_name_divPropertiesInitPopup(Sender: TObject);_tv_org_divExecute(self);;TForm_Dictionaries.tv_spec_div_name_specPropertiesInitPopup(Sender: TObject);_tv_specExecute(self);;TForm_Dictionaries.tv_spec_div_sourcePropertiesInitPopup(Sender: TObject);_tv_source_finansingExecute(self);;

{ Настройка списков }TForm_Dictionaries.Init(AReg_Path: String = Reg_Path; AForm_SE: TForm_SE = nil);_New_Commission_Start.Date := Date;_New_Member_Start.Date := Date;AForm_SE <> nil then_Form_SE := AForm_SE;not assigned(Current_Form_SE) then_Form_SE := TForm_SE.Create(self);_Reg_Path := AReg_Path;

{ Описание для различных оберток }

// *****************************************************************************_Institute_Filter := TContainerWrappers.Create;_Institute_Filter.AddPopupEdit(PopupEdit_Filter_Org, false, false, cxGrid_Institutes,_institutes ,tv_institutes_ID, [tv_institutes_Abbr, tv_institutes_Name], '');_Institute_Filter.OnChangedValueWrapper := DoChanged_cW_Intitute_Filter;;

// *****************************************************************************

// *****************************************************************************_New_Spec := TContainerWrappers.Create;_New_Spec.AddCustomEdit(cxTextEditNew_Spec_Name, true, false, '');_New_Spec.AddCustomEdit(cxTextEditNew_Spec_Quality, false, false, '');_New_Spec.OnChangeWrapper := DoChanged_cW_New_Spec;

// *****************************************************************************

// *****************************************************************************_New_Ed_Group := TContainerWrappers.Create;_New_Ed_Group.AddCustomEdit(cxTextEdit_New_Ed_Group_Name, true, false, '');_New_Ed_Group.AddCustomEdit(cxDateEdit_New_Ed_Group_D_Start, true, false, '');_New_Ed_Group.AddCustomEdit(cxDateEdit_New_Ed_Group_D_End, false, false, '');_New_Ed_Group.OnChangeWrapper := DoChanged_cW_New_Ed_Group;

// *****************************************************************************

// *****************************************************************************_New_Spec_Div := TContainerWrappers.Create;_New_Spec_Div.AddPopupEdit(cxPopupEditNew_Spec_Div_Institute, true, false, cxGrid_Institutes,_institutes, tv_institutes_ID, [tv_institutes_Abbr, tv_institutes_Name], '');_New_Spec_Div.AddPopupEdit(cxPopupEditNew_Spec_Div_Div, true, false, cxGrid_Org_Division,_Org_Division, tv_Org_Division_ID, [tv_Org_Division_Abbr, tv_Org_Division_Name], '');_New_Spec_Div.AddPopupEdit(cxPopupEditNew_Spec_Div_Spec, true, false, cxGrid_Spec,_spec, tv_Spec_ID, [tv_Spec_Name], '');_New_Spec_Div.AddPopupEdit(cxPopupEditNew_Spec_Div_KT, true, false, cxGrid_Kind_Training,_Kind_Training, tv_Kind_Training_IDK_TRAINING, [tv_Kind_Training_Name], '');_New_Spec_Div.AddCustomEdit(cxDateEditNew_Spec_Div_D_Start, true, false, '');_New_Spec_Div.AddCustomEdit(cxDateEditNew_Spec_Div_D_End, false, false, '');_New_Spec_Div.AddPopupEdit(cxPopupEditNew_Spec_Div_SF, false, false, cxGrid_Source_Financing,_Source_Financing, tv_Source_Financing_ID, [tv_Source_Financing_Name], '');_New_Spec_Div.OnChangeWrapper := DoChanged_cW_New_Spec_Div;

// *****************************************************************************

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

// добавление подразделение-организаторов обучения

// ---------------------------------------------Get_SqlData_cxGrid(tv_Org_Division) = nil

then with TSqlData_cxGridTableView.Create(tv_Org_Division)begin_Name := 'Организаторы обучения';:= false;_Select := Get_List_Divisions;:= True;:= CreateVarAr([IDK_Level_Spec]);_Columns.Add(tv_Org_Division_Abbr);_Columns.Add(tv_Org_Division_Name);_Columns.Add(tv_Org_Division_ID);_Columns.Add(tv_Org_Division_ID);_Column := tv_Org_Division_Abbr;.Add(tv_Org_Division_Abbr);.Add(tv_Org_Division_Name);;

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

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

// добавление институтов

// ---------------------------------------------Get_SqlData_cxGrid(tv_institutes) = nilwith TSqlData_cxGridTableView.Create(tv_institutes)begin:= false;_Name := 'Институты';_Select := Get_List_Institutes;:= True;:= CreateVarAr([IDK_Level_Spec]);_Columns.Add(tv_institutes_Abbr);_Columns.Add(tv_institutes_Name);_Columns.Add(tv_institutes_ID);_Columns.Add(tv_institutes_ID);_Column := tv_institutes_Abbr;.Add(tv_institutes_Abbr);.Add(tv_institutes_Name);;

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

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

// добавление специальностей

// ---------------------------------------------Get_SqlData_cxGrid(tv_Spec) = nilwith TSqlData_cxGridTableView.Create(tv_Spec)begin:= true;_Name := 'Специальности';_Select := Get_List_Spec_By_Params;_Update := d_P_SPECIALITY;_Delete := Delete_Spec;:= True;_Delete_Exchange := Before_Delete_Exchange;:= CreateVarAr([IDK_Level_Spec,'']);_Columns.Add(tv_Spec_Name, 2);_Columns.Add(tv_Spec_Q, 1);_Columns.Add(tv_Spec_ID, 0);_Columns.Add(tv_Spec_IDK_Level_Spec, 6);_Columns.Add(tv_Spec_id_discipline);_Columns.Add(tv_Spec_idk_discipline);_Columns.Add(tv_Spec_ID, 0);_Column := tv_Spec_Name;.Add(tv_Spec_Name);.OnExecute := Action_Insert_Spec.OnExecute;

end;

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

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

// ---------------------------------------------Get_SqlData_cxGrid(tv_spec_div) = nilwith TSqlData_cxGridTableView.Create(tv_spec_div)begin:= true;:= false;_Name := 'Специальности подразделений';_Select := Spec_div;_Update := d_P_SPECIALITIES_DIVISION;:= True;:= CreateVarAr([IDK_Level_Spec,'']);_Column := tv_spec_div_institute;:= tv_spec_div_institute;Select_Columnsbegin(tv_spec_div_name_spec,1);(tv_spec_div_name_div,2);(tv_spec_div_kind_training,3);(tv_spec_div_institute,6);(tv_spec_div_source,12);(tv_spec_div_d_start,4);(tv_spec_div_d_end,5);(tv_spec_div_id_spec_div,0);(tv_spec_div_id_spec,1);(tv_spec_div_id_d,2);(tv_spec_div_idk_training,3);(tv_spec_div_id_d_institute,6);(tv_spec_div_id_source,12);(tv_spec_div_idk_level_formation,8);;_Columns.Add(tv_spec_div_id_spec_div,0);_Columns.Add(tv_spec_div_source,12);PopupColumnsList.Add(tv_spec_div_institute)begin:= tv_spec_div_id_d_institute;:= tv_institutes_ID;:= tv_institutes_Name;;PopupColumnsList.Add(tv_spec_div_name_div)begin:= tv_spec_div_id_d;:= tv_Org_Division_ID;:= tv_Org_Division_Name;;PopupColumnsList.Add(tv_spec_div_name_spec)begin:= tv_spec_div_id_spec;:= tv_Spec_ID;:= tv_Spec_Name;;PopupColumnsList.Add(tv_spec_div_kind_training)begin:= tv_spec_div_idk_training;:= tv_Kind_Training_IDK_TRAINING;:= tv_Kind_Training_Name;;PopupColumnsList.Add(tv_spec_div_source)begin:= tv_spec_div_id_source;:= tv_Source_Financing_ID;:= tv_Source_Financing_Name;;Insert_Columnsbegin(tv_spec_div_id_spec,1);(tv_spec_div_id_d,2);(tv_spec_div_idk_training,3);(tv_spec_div_d_start,4);(tv_spec_div_d_end,5);(tv_spec_div_id_d_institute,6);(tv_spec_div_idk_level_formation,8);(tv_spec_div_id_source,12);;.Visible := True;.OnExecute := Action_Insert_Spec_Div.OnExecute;.Add(ActionInsert);.Add(ActionDelete);.Add(nil);.Add(Clear_Columns.ClearActions[tv_spec_div_source]);.Add(nil);.Add(ActionUpdate);:= lmLastChoice;:= OnChoiceGridRecord_tv_spec_div;;

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

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

//Вид обученияTSqlData_cxGridTableView.Create(tv_Kind_Training)begin:=False;_Name:='Виды обучения';_Select:=Kind_Training;:= True;:=False;Select_Columnsbegin(tv_Kind_Training_IDK_TRAINING);(tv_Kind_Training_Name);;_Columns.Add(tv_Kind_Training_IDK_TRAINING);_Column:=tv_Kind_Training_Name;:=tv_Kind_Training_Name;;

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

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

//Вид уровня образованияTSqlData_cxGridTableView.Create(tv_klf)begin:=False;_Name:='Виды уровня образования';_Select:=K_L_F;:= True;:=False;Select_Columnsbegin(tv_klf_name);(tv_klf_idk_lf);(tv_klf_qualifer);;_Columns.Add(tv_klf_idk_lf);_Column := tv_klf_name;:= tv_klf_name;;

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

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

//Источник финансированияGet_SqlData_cxGrid(tv_Source_Financing) = nilwith TSqlData_cxGridTableView.Create(tv_Source_Financing)

do begin_Name:='Источники финансирования';

GUID_Select:=S_F;:= True;:= false;:= 1;_Columns.Add(tv_Source_Financing_Abbreviation);_Columns.Add(tv_Source_Financing_Name);_Columns.Add(tv_Source_Financing_Abbr_Div);_Columns.Add(tv_Source_Financing_Division);_Columns.Add(tv_Source_Financing_Kind_Source);_Columns.Add(tv_Source_Financing_Activity);_Columns.Add(tv_Source_Financing_Date_Close);_Columns.Add(tv_Source_Financing_ID);_Columns.Add(tv_Source_Financing_ID_D);_Columns.Add(tv_Source_Financing_ID_Kind_Source);_Columns.Add(tv_Source_Financing_ID_Activity);_Columns.Add(tv_Source_Financing_ID);.Add(ActionUpdate);_Column:=tv_Source_Financing_Abbreviation;:=tv_Source_Financing_Name;;

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

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

//Учебные группыTSqlData_cxGridTableView.Create(tv_ed_group)begin:=True;_Name:='Учебные группы';:= CreateVarAr(['']);_Select := Ed_Groups;_Update := d_P_EDUCATIONAL_GROUP;:= True;:=False;Select_Columnsbegin(tv_ed_group_name,1);(tv_ed_group_kind_group,8);(tv_ed_group_d_start,4);(tv_ed_group_d_end,5);(tv_ed_group_id_ed_group,0);(tv_ed_group_id_spec_div,2);(tv_ed_group_idk_group,8);(tv_ed_group_level_group,3);;Insert_Columnsbegin(tv_ed_group_name,1);(tv_ed_group_id_spec_div,2);(tv_ed_group_level_group,3);(tv_ed_group_d_start,4);(tv_ed_group_d_end,5);(tv_ed_group_idk_group,8);;_Columns.Add(tv_ed_group_id_ed_group,0);.OnExecute := Action_Insert_Ed_Group.OnExecute;.Add(ActionInsert);.Add(ActionDelete);.Add(nil);.Add(ActionUpdate);_Column := tv_ed_group_name;:= tv_ed_group_name;;

// КомиссииGet_SqlData_cxGrid(TTree_Commission) = nilwith TSqlData_cxGridTableView.Create(TTree_Commission)begin_Name := TTree_Commission.Bands.Items[0].Caption;_Select := Get_List_Commissions_By_ID_D_And_ID_Spec;_Update := d_P_COMMISSION;:= True;:= lmLastChoice;:= OnChoiceGridRecord_tv_spec_div;:= 2;.Add([1, 2]);_Columns.Add(Tree_Commission_Order);_Columns.Add(Tree_Commission_Kind);_Columns.Add(Tree_Commission_User);_Columns.Add(Tree_Commission_Start, 4);_Columns.Add(Tree_Commission_End, 5);_Columns.Add(Tree_Commission_ID_Paragraph, 2);_Columns.Add(Tree_Commission_ID_Order, 2);_Columns.Add(Tree_Commission_IDK_Order, 2);_Columns.Add(Tree_Commission_Status_Order, 2);_Columns.Add(Tree_Commission_ID_ERP, 2);_Columns.Add(Tree_Commission_ID_MT, 2);_Columns.Add(Tree_Commission_ID_MO, 2);_Columns.Add(Tree_Commission_ID_Spec, 8);_Columns.Add(Tree_Commission_ID_D, 9);_Columns.Add(Tree_Commission_ID, 1);_Columns.Add(Tree_Commission_ID_Kind, 3);_Columns.Add(Tree_Commission_ID, 1);_Columns.Add(Tree_Commission_ID_Paragraph, 2);_Columns.Add(Tree_Commission_ID_Spec, 8);_Columns.Add(Tree_Commission_ID_D, 9);_Columns.Add(Tree_Commission_ID_Kind, 3);_Columns.Add(Tree_Commission_Start, 4);_Columns.Add(Tree_Commission_End, 5);.Column_ID_order := Tree_Commission_ID_Order;.Column_ID_paragraph := Tree_Commission_ID_Paragraph;.Column_IDk_order := Tree_Commission_IDK_Order;.Column_ID_erp_user := Tree_Commission_ID_ERP;.Column_Status_Order := Tree_Commission_Status_Order;.Column_User_Name := Tree_Commission_User;.Column_Status_Text := Tree_Commission_Order;.Column_name_Kind_paragraph := Tree_Commission_Kind;.Add(ActionInsert);.Add(ActionDelete);.Add(nil);.Add(OptionsOrder.ActionNavigate);.Add(OptionsOrder.ActionPreview);.Add(nil);.Add(ActionUpdate);_Column := Tree_Commission_Order;:= Tree_Commission_Order;.OnExecute := Action_New_Commission.OnExecute;_New_Commission := TContainerWrappers.Create;_New_Commission.AddButtonOrderEdit(ButtonEdit_New_Commission, True, False, ''

, ['306']

, [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW]

, [nil, nil, nil, nil]);_New_Commission.AddCustomEdit(DateEdit_New_Commission_Start, true, false, '');_New_Commission.AddCustomEdit(DateEdit_New_Commission_End, false, false, '');_New_Commission.ActionEnter := Action_Insert_New_Commission;;

// Должности в комиссияхGet_SqlData_cxGrid(TTree_Post) = nilwith TSqlData_cxGridTableView.Create(TTree_Post)begin_Name := TTree_Post.Bands.Items[0].Caption;_Select := Get_Posts_For_Members;:= True;:= false;_Columns.Add(Tree_Post_Name);_Columns.Add(Tree_Post_ID);_Columns.Add(Tree_Post_ID);.Add(ActionUpdate);_Column := Tree_Post_Name;:= Tree_Post_Name;;

// Члены КомиссииGet_SqlData_cxGrid(TTree_Members) = nilwith TSqlData_cxGridTableView.Create(TTree_Members)begin_Name := TTree_Members.Bands.Items[0].Caption;_Select := Get_Members_Commission_By_ID;_Update := d_P_COMMISSION_MEMBERS;:= True;:= 1;.Add([1]);_Columns.Add(Tree_Members_Order);_Columns.Add(Tree_Members_Kind);_Columns.Add(Tree_Members_Post, 7);_Columns.Add(Tree_Members_FIO, 1);_Columns.Add(Tree_Members_User, 3);_Columns.Add(Tree_Members_Start, 4);_Columns.Add(Tree_Members_End, 6);_Columns.Add(Tree_Members_ID_Paragraph, 3);_Columns.Add(Tree_Members_ID_Order, 3);_Columns.Add(Tree_Members_IDK_Order, 3);_Columns.Add(Tree_Members_Status_Order, 3);_Columns.Add(Tree_Members_ID_ERP, 3);_Columns.Add(Tree_Members_ID_MT, 3);_Columns.Add(Tree_Members_ID_MO, 3);_Columns.Add(Tree_Members_ID_Post, 7);_Columns.Add(Tree_Members_ID_Commission, 2);_Columns.Add(Tree_Members_ID_E, 1);_Columns.Add(Tree_Members_ID, 0);_Columns.Add(Tree_Members_ID, 0);_Columns.Add(Tree_Members_ID_Paragraph, 3);_Columns.Add(Tree_Members_ID_Commission, 2);_Columns.Add(Tree_Members_ID_Post, 7);_Columns.Add(Tree_Members_ID_E, 1);_Columns.Add(Tree_Members_Start, 4);_Columns.Add(Tree_Members_End, 6);.Column_ID_order := Tree_Members_ID_Order;.Column_ID_paragraph := Tree_Members_ID_Paragraph;.Column_IDk_order := Tree_Members_IDK_Order;.Column_ID_erp_user := Tree_Members_ID_ERP;.Column_Status_Order := Tree_Members_Status_Order;.Column_User_Name := Tree_Members_User;.Column_Status_Text := Tree_Members_Order;.Column_name_Kind_paragraph := Tree_Members_Kind;.Add(ActionInsert);.Add(ActionDelete);.Add(nil);.Add(OptionsOrder.ActionNavigate);.Add(OptionsOrder.ActionPreview);.Add(nil);.Add(ActionUpdate);PopupColumnsList.Add(Tree_Members_Post) do:= Tree_Members_ID_Post;:= Tree_Post_ID;:= Tree_Post_Name;;PopupColumnsList.Add(Tree_Members_FIO) do:= Tree_Members_ID_E;:= Current_Form_SE.cxGrid_FIO_ID_E;:= Current_Form_SE.cxGrid_FIO_Full;;_Column := Tree_Members_Post;.OnExecute := Action_New_Member.OnExecute;(Tree_Members_FIO.Properties).PopupControl :=_Form_SE;_New_Member_FIO.Properties.PopupControl := Current_Form_SE;_New_Member := TContainerWrappers.Create;_New_Member.AddButtonOrderEdit(ButtonEdit_New_Member, True, False, ''

, ['306']

, [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW]

, [nil, nil, nil, nil]);_New_Member.AddPopupEdit(PopupEdit_New_Member_FIO, True, False

, Current_Form_SE.cxGrid1, Current_Form_SE.cxGrid_FIO

, Current_Form_SE.cxGrid_FIO_ID_E, [Current_Form_SE.cxGrid_FIO_Full], '');_New_Member.AddPopupEdit(PopupEdit_New_Member_Post, True, False

, nil, nil, Tree_Post_ID, [Tree_Post_Name], '');_New_Member.AddCustomEdit(DateEdit_New_Member_Start, true, false, '');_New_Member.AddCustomEdit(DateEdit_New_Member_End, false, false, '');_New_Member.ActionEnter := Action_Insert_New_Member;;

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

{ Cкрываем ненужные страницы }_Editing.TabVisible := False;_Add.TabVisible := False;

{ Прочитаем параметры из реестра }_Restore_Params(Curr_Reg_Path, True);;TForm_Dictionaries.Action_Insert_Ed_GroupExecute(Sender: TObject);

//const Name = 'Учебные группы';: TSForm;// 1:= CreateSForm(self, 'fNew_Ed_Group'

, cxTabSheet_Ed_Group.Caption

, Add_Path + cxTabSheet_Ed_Group.Caption, Panel_New_Ed_Group, tdb_Apply);VarToStr(cW_New_Ed_Group.Wrappers[cxDateEdit_New_Ed_Group_D_Start].Value) = ''cW_New_Ed_Group.Wrappers[cxDateEdit_New_Ed_Group_D_Start].Value :=(Date);_New_Ed_Group.OnChangeWrapper(nil);.Position := poScreenCenter;mf.ShowModal = mrOkbegin // 2_TableView := Get_SqlData_cxGrid(tv_ed_group);FSqlData_TableView <> nilbegin // 3_TableView.Insert_New(([_New_Ed_Group.Wrappers[cxTextEdit_New_Ed_Group_Name].Value

,tv_spec_div.DataController.Values[tv_spec_div.DataController.FocusedRecordIndex

,tv_spec_div_id_spec_div.Index]

,'1'

,cW_New_Ed_Group.Wrappers[cxDateEdit_New_Ed_Group_D_Start].Value

,cW_New_Ed_Group.Wrappers[cxDateEdit_New_Ed_Group_D_End].Value

,'5'

])); // 3; // 2// 1assigned(mf)FreeAndNil(mf);; // 1;

{ Добавить новую комиссию}TForm_Dictionaries.Action_Insert_New_CommissionExecute(: TObject);_New_Commission.ChangesAcceptWrappers;cW_New_Commission, Get_SqlData_cxGrid(TTree_Commission) doInsert_New(CreateVarAr([VarToStr(Wrappers[ButtonEdit_New_Commission].Value)

, VarToStr(Parameters[2])

, VarToStr(Parameters[1])

, '3'

, VarToStr(Wrappers[DateEdit_New_Commission_Start].Value)

, VarToStr(Wrappers[DateEdit_New_Commission_End].Value)]))(Panel_New_Commission).ModalResult := mrok;(cW_New_Commission.Wrappers[ButtonEdit_New_Commission]).IsEmpty := False;

Read_Data;;;

{ Добавить члена комиссии}

procedure TForm_Dictionaries.Action_Insert_New_MemberExecute(Sender: TObject);_New_Member.ChangesAcceptWrappers;cw_New_Member, Get_SqlData_cxGrid(TTree_Members) doInsert_New(CreateVarAr([VarToStr(Wrappers[ButtonEdit_New_Member].Value)

, VarToStr(Parameters[1])

, VarToStr(Wrappers[PopupEdit_New_Member_Post].Value)

, VarToStr(Wrappers[PopupEdit_New_Member_FIO].Value)

, VarToStr(Wrappers[DateEdit_New_Member_Start].Value)

, VarToStr(Wrappers[DateEdit_New_Member_End].Value)]))(Panel_New_Member).ModalResult := mrok;(cw_New_Member.Wrappers[ButtonEdit_New_Member]).IsEmpty := False;_Data;;;TForm_Dictionaries.Action_Insert_SpecExecute(Sender: TObject);

//const Name = 'Программа обучения';: TSForm;// 1:= CreateSForm(self, 'fNew_Spec', cxTabSheet_Add_Spec.Caption

, Add_Path + cxTabSheet_Add_Spec.Caption, Panel_New_Spec, tdb_Apply);_New_Spec.OnChangeWrapper(nil);.Position := poScreenCenter;mf.ShowModal = mrOkbegin // 2_TableView := Get_SqlData_cxGrid(tv_Spec);FSqlData_TableView <> nilbegin // 3MSystemServices.ExchangeData(Add_Spec,([cW_New_Spec.Wrappers[cxTextEditNew_Spec_Name].Value

,cW_New_Spec.Wrappers[cxTextEditNew_Spec_Quality].Value

,IDK_Level_Spec

,IDK_Discipline

])

,'Добавление программы обучения.')begin // 4_TableView.Read_Data;(tv_spec,[tv_Spec_Name,tv_Spec_Q]

,VarArrayOf([cW_New_Spec.Wrappers[cxTextEditNew_Spec_Name].Value

,cW_New_Spec.Wrappers[cxTextEditNew_Spec_Quality].Value])

,true);; // 4; // 3; // 2// 1assigned(mf)FreeAndNil(mf);; // 1;TForm_Dictionaries.Action_Insert_Spec_DivExecute(Sender: TObject);

//const Name = 'Организаторы обучения';: TSForm;// 1:= CreateSForm(self, 'fNew_Spec_Div'

, cxTabSheet_New_Spec_Div.Caption

, Add_Path + cxTabSheet_New_Spec_Div.Caption, Panel_New_Spec_Div, tdb_Apply);VarToStr(cW_New_Spec_Div.Wrappers[cxDateEditNew_Spec_Div_D_Start].Value) = ''cW_New_Spec_Div.Wrappers[cxDateEditNew_Spec_Div_D_Start].Value := DateToStr(Date);_New_Spec_Div.OnChangeWrapper(nil);.Position := poScreenCenter;mf.ShowModal = mrOkbegin // 2_TableView := Get_SqlData_cxGrid(tv_spec_div);FSqlData_TableView <> nilbegin // 3_TableView.Insert_New(([_New_Spec_Div.Wrappers[cxPopupEditNew_Spec_Div_Spec].Value

,cW_New_Spec_Div.Wrappers[cxPopupEditNew_Spec_Div_Div].Value

,cW_New_Spec_Div.Wrappers[cxPopupEditNew_Spec_Div_KT].Value

,cW_New_Spec_Div.Wrappers[cxDateEditNew_Spec_Div_D_Start].Value

,cW_New_Spec_Div.Wrappers[cxDateEditNew_Spec_Div_D_End].Value

,cW_New_Spec_Div.Wrappers[cxPopupEditNew_Spec_Div_Institute].Value

,IDK_Level_Formation

,cW_New_Spec_Div.Wrappers[cxPopupEditNew_Spec_Div_SF].Value

])); // 3; // 2// 1assigned(mf)FreeAndNil(mf);; // 1;

{ Добавление новой комиссии}TForm_Dictionaries.Action_New_CommissionExecute(Sender: TObject);new_form: TSForm;// 1_form := CreateSForm(self, 'fNew_Commission'

, cxTabSheet_New_Sommission.Caption

, Add_Path + cxTabSheet_New_Sommission.Caption, Panel_New_Commission, tdb_Apply);_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := cW_New_Commission.ActionEnter;_form.ShowModal;// 1assigned(new_form)FreeAndNil(new_form);; // 1;

{ Добавление члена комиссии}TForm_Dictionaries.Action_New_MemberExecute(Sender: TObject);new_form: TSForm;// 1_form := CreateSForm(self, 'fNew_Member'

, cxTabSheet_New_Member.Caption

, Add_Path + cxTabSheet_New_Member.Caption, Panel_New_Member, tdb_Apply);_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := cw_New_Member.ActionEnter;_form.ShowModal;// 1assigned(new_form)FreeAndNil(new_form);; // 1;

{ Обновим нужные данные}TForm_Dictionaries.cxPageControl3Change(Sender: TObject);Get_SqlData_cxGrid(tv_ed_group) <> nilSender = cxPageControl3cxPageControl3.ActivePageIndex = 0Get_SqlData_cxGrid(tv_ed_group).Read_Data_FirstGet_SqlData_cxGrid(TTree_Commission).Read_Data_First;;TForm_Dictionaries.cxPopupEditNew_Spec_Div_DivPropertiesInitPopup(: TObject);_tv_org_divExecute(self);;TForm_Dictionaries.cxPopupEditNew_Spec_Div_InstitutePropertiesInitPopup(: TObject);_tv_intitutesExecute(self);;TForm_Dictionaries.cxPopupEditNew_Spec_Div_KTPropertiesInitPopup(: TObject);_tv_kind_trainingExecute(self);;TForm_Dictionaries.cxPopupEditNew_Spec_Div_SFPropertiesInitPopup(: TObject);_tv_source_finansingExecute(self);;TForm_Dictionaries.cxPopupEditNew_Spec_Div_SpecPropertiesInitPopup(: TObject);_tv_specExecute(self);;TForm_Dictionaries.Fill_tv_intitutesExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_institutes);(FSqlData_TableView <> nil) and FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_First;;TForm_Dictionaries.Fill_tv_kind_trainingExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_Kind_Training);(FSqlData_TableView <> nil) and FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_First;;TForm_Dictionaries.Fill_tv_k_l_fExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_klf);(FSqlData_TableView <> nil) and FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_First;;TForm_Dictionaries.Fill_tv_org_divExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_Org_Division);(FSqlData_TableView <> nil) and FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_First;;TForm_Dictionaries.Fill_tv_source_finansingExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_Source_Financing);(FSqlData_TableView <> nil) and FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_First;;TForm_Dictionaries.Fill_tv_specExecute(Sender: TObject);Param1: string;_TableView := Get_SqlData_cxGrid(tv_Spec);(FSqlData_TableView <> nil)begin // 1:= VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value);VarToStr(FSqlData_TableView.Params[1]) <> Param1begin // 2_TableView.Params[1] := Param1;_TableView.Read_Data;// 2FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_First;; // 1;TForm_Dictionaries.Fill_tv_spec_divExecute(Sender: TObject);Param1: string;_TableView := Get_SqlData_cxGrid(tv_spec_div);(FSqlData_TableView <> nil)begin // 1:= VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value);VarToStr(FSqlData_TableView.Params[1]) <> Param1begin // 2_TableView.Params[1] := Param1;_TableView.Read_Data;// 2FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_First;; // 1;TForm_Dictionaries.FormDestroy(Sender: TObject);

begin

{ Сохраним параметры в реестр }

Save_Restore_Params(Curr_Reg_Path, False);;TForm_Dictionaries.FormShow(Sender: TObject);

{ Перечитываем списки }PageControl_Main.ActivePage = cxTabSheet_SpecFill_tv_specExecute(self);PageControl_Main.ActivePage = cxTabSheet_OrgFill_tv_spec_divExecute(self);;

{ Изменили фильтр!}TForm_Dictionaries.PageControl_MainPageChanging(Sender: TObject;: TcxTabSheet; var AllowChange: Boolean);NewPage = cxTabSheet_SpecFill_tv_specExecute(self);NewPage = cxTabSheet_OrgFill_tv_spec_divExecute(self);;

{ Подразделение}TForm_Dictionaries.PopupEdit_Filter_OrgPropertiesEditValueChanged(: TObject);cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org] <> nil thenGet_SqlData_cxGrid(tv_Source_Financing).Parameters[1]

<> VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value)_SqlData_cxGrid(tv_Source_Financing).Parameters[1] :=(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value);_SqlData_cxGrid(tv_Source_Financing).IsFirstRead := True;;;TForm_Dictionaries.PopupEdit_Filter_OrgPropertiesInitPopup(Sender: TObject);_tv_intitutesExecute(self);;TForm_Dictionaries.DoChanged_cW_New_Spec(AWrapper: TCustomEditWrapper);_OkButton(Panel_New_Spec, cW_New_Spec.IsNotEmptyMandatory);;TForm_Dictionaries.DoChanged_cW_New_Spec_Div(AWrapper: TCustomEditWrapper);_OkButton(Panel_New_Spec_Div, cW_New_Spec_Div.IsNotEmptyMandatory);;TForm_Dictionaries.DoChanged_cW_New_Ed_Group(AWrapper: TCustomEditWrapper);_OkButton(Panel_New_Ed_Group, cW_New_Ed_Group.IsNotEmptyMandatory);;TForm_Dictionaries.DoChanged_cW_Intitute_Filter(AWrapper: TCustomEditWrapper);PageControl_Main.ActivePage = cxTabSheet_SpecFill_tv_specExecute(self);PageControl_Main.ActivePage = cxTabSheet_OrgFill_tv_spec_divExecute(self);

end;

{ Выбрали новую специальность подразделения}

procedure TForm_Dictionaries.OnChoiceGridRecord_tv_spec_div(Sender: TSqlData_cxGridTableView; AGridRecord: TcxGridDataRow);_TableView := Get_SqlData_cxGrid(tv_ed_group);(FSqlData_TableView <> nil) and (Sender <> nil)Sender.GridTableView = tv_spec_divSender, GridTableView.DataController do(LastChoiceIndex >= 0)(LastChoiceIndex < GridTableView.DataController.RecordCount)// 1_TableView.Params[0] :=(Values[Sender.LastChoiceIndex, tv_spec_div_id_spec_div.Index]);_TableView.IsFirstRead := True;_TableView.ActionInsert.Enabled := Sender.ActionDelete.Enabled;_SqlData_cxGrid(TTree_Commission).ActionInsert.Enabled := Sender.ActionDelete.Enabled;_SqlData_cxGrid(TTree_Commission).Parameters[1] :=(Values[Sender.LastChoiceIndex, tv_spec_div_id_d_institute.Index]);Get_SqlData_cxGrid(TTree_Commission).Parameters[2] <>(Values[Sender.LastChoiceIndex, tv_spec_div_id_spec.Index])_SqlData_cxGrid(TTree_Commission).Parameters[2] :=(Values[Sender.LastChoiceIndex, tv_spec_div_id_spec.Index]);_SqlData_cxGrid(TTree_Commission).IsFirstRead := True;;// 1_TableView.Params[0] := '';_TableView.ClearData;_TableView.ActionInsert.Enabled := False;_SqlData_cxGrid(TTree_Commission).Parameters[1] := '';_SqlData_cxGrid(TTree_Commission).Parameters[2] := '';_SqlData_cxGrid(TTree_Commission).ClearData;_SqlData_cxGrid(TTree_Commission).ActionInsert.Enabled := False;;Change(cxPageControl3);Sender.GridTableView = TTree_CommissionSender.GridTableView.DataController do(Sender.LastChoiceIndex >= 0)(Sender.LastChoiceIndex < RecordCount)_SqlData_cxGrid(TTree_Members).ActionInsert.Enabled := Sender.ActionDelete.Enabled;Get_SqlData_cxGrid(TTree_Members).Parameters[1] <>(Values[Sender.LastChoiceIndex, Tree_Commission_ID.Index])_SqlData_cxGrid(TTree_Members).Parameters[1] :=(Values[Sender.LastChoiceIndex, Tree_Commission_ID.Index]);_SqlData_cxGrid(TTree_Members).Read_Data;Get_SqlData_cxGrid(TTree_Members).Read_Data_First_SqlData_cxGrid(TTree_Members).Parameters[1] := '';_SqlData_cxGrid(TTree_Members).ClearData;_SqlData_cxGrid(TTree_Members).ActionInsert.Enabled := False;;;;.Plan, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, cxPC, cxControls, cxSplitter, cxStyles, cxCustomData,, cxFilter, cxData, cxDataStorage, cxEdit, cxGridLevel,, cxGridTableView, cxGridBandedTableView,, cxGrid, cxEditRepositoryItems, cxClasses, cxTL,, cxPropertiesStore, cxTextEdit, cxMaskEdit, cxDropDownEdit,,wrappers, ActnList, cxLookAndFeels, cxLookAndFeelPainters, cxSpinEdit,, GridEditClass,cxButtonEdit, cxTimeEdit;

{ Роль на редактирование специальностей мет. комплекса, специальностей,

организаторов обучения }_Q_Edit_Spec = '1401';

{ Роль на редактирование учебных групп, сроков проведения и плана ПК }

Action_Q_Edit_Groups = '1402';

{ Вид уровня специальности "Повышение квалификации" }_Level_Spec = '70';

{ Вид дисциплины "Повышение квалификации }_Discipline = '59454';

{ Вид уровня образования "Повышение квалификации" }_Level_Formation = '70508';

{ Путь для сохранения в реестре }_Path = '\Software\AS Pilot group\Parameters\Модуль повышения квалификации\Планирование';

{ Путь для сохранения списков }_Path = '\Параметры списков\';

{ Путь для добавления }_Path= 'Модуль повышения квалификации\Планирование\Добавление\';

type_Plan = class(TForm)_Main: TPanel;_Main: TcxPageControl;: TcxEditStyleController;: TcxStyleRepository;_Group: TcxStyle;_s_ContentEVEN: TcxStyle;_Filter_Box: TcxStyle;_Footer: TcxStyle;_Inactive: TcxStyle;_Indicator: TcxStyle;_Preview: TcxStyle;_Selection: TcxStyle;_ContentOdd: TcxStyle;_Content_TEXT: TcxStyle;_Content_POPUP: TcxStyle;_Content_DATE: TcxStyle;_Content_QUALIFIER: TcxStyle;_Footer_Column: TcxStyle;_Content_ID: TcxStyle;_Content_Memo: TcxStyle;_Content_Project: TcxStyle;_Content_Cancel: TcxStyle;_Content_ProjectSend: TcxStyle;_Content_Owner: TcxStyle;_Content_NotOwner: TcxStyle;_Content_Hot_Track: TcxStyle;_Inc_Search: TcxStyle;_Group_By_Box: TcxStyle;_Header: TcxStyle;_Style_1: TcxTreeListStyleSheet;_Style_1: TcxGridBandedTableViewStyleSheet;: TcxEditRepository;_Date_None_Blank: TcxEditRepositoryDateItem;_Date_With_Blank: TcxEditRepositoryDateItem;_Spin_ID: TcxEditRepositorySpinItem;_Text_RO: TcxEditRepositoryTextItem;_Memo_RO: TcxEditRepositoryMemoItem;_Date_RO: TcxEditRepositoryDateItem;: TcxPropertiesStore;_Filter: TPanel;: TcxLabel;_Filter_Org: TcxPopupEdit;_Text: TcxEditRepositoryTextItem;: TActionList;_Editing: TcxTabSheet;: TcxPageControl;_Institutes: TcxTabSheet;_Institutes: TcxGrid;_institutes: TcxGridBandedTableView;_institutes_Abbr: TcxGridBandedColumn;_institutes_Name: TcxGridBandedColumn;_institutes_ID: TcxGridBandedColumn;: TcxGridLevel;_Add: TcxTabSheet;: TcxPageControl;_tv_intitutes: TAction;_Com_Spec: TcxGrid;_com_spec: TcxGridBandedTableView;_com_spec_name_spec: TcxGridBandedColumn;_com_spec_name_div: TcxGridBandedColumn;_com_spec_kind_training: TcxGridBandedColumn;_com_spec_id_spec_div: TcxGridBandedColumn;_com_spec_id_spec: TcxGridBandedColumn;_com_spec_id_d_spec_div: TcxGridBandedColumn;_com_spec_idk_training: TcxGridBandedColumn;: TcxGridLevel;_com_spec_id_p_dp: TcxGridBandedColumn;_com_spec_id_order: TcxGridBandedColumn;_com_spec_idk_order: TcxGridBandedColumn;_com_spec_status_text: TcxGridBandedColumn;_com_spec_status_order: TcxGridBandedColumn;_com_spec_id_met_complex: TcxGridBandedColumn;_tv_com_spec: TAction;_Insert_Com_Spec: TAction;_New_Com_Spec: TcxTabSheet;_New_Com_Spec: TPanel;: TcxLabel;: TcxLabel;: TcxLabel;: TcxLabel;_New_Com_Spec: TcxPopupEdit;: TcxLabel;_New_Com_Spec_Kind_Training: TcxPopupEdit;_New_Com_Spec_Div: TcxPopupEdit;_New_Com_Spec_Paragraph: TcxButtonEdit;_New_Com_Spec_Hours: TcxSpinEdit;_com_spec_hours: TcxGridBandedColumn;_com_spec_id_e_l_umk: TcxGridBandedColumn;_Spec_Div: TcxTabSheet;_Spec_Div_Popup: TcxGrid;_spec_div_popup: TcxGridBandedTableView;_spec_div_popup_name_spec: TcxGridBandedColumn;_spec_div_popup_name_div: TcxGridBandedColumn;_spec_div_popup_kind_training: TcxGridBandedColumn;_spec_div_popup_institute: TcxGridBandedColumn;_spec_div_popup_source: TcxGridBandedColumn;_spec_div_popup_d_start: TcxGridBandedColumn;_spec_div_popup_d_end: TcxGridBandedColumn;_spec_div_popup_id_spec_div: TcxGridBandedColumn;_spec_div_popup_id_spec: TcxGridBandedColumn;_spec_div_popup_id_d: TcxGridBandedColumn;_spec_div_popup_idk_training: TcxGridBandedColumn;_spec_div_popup_id_d_institute: TcxGridBandedColumn;_spec_div_popup_id_source: TcxGridBandedColumn;_spec_div_popup_idk_level_formation: TcxGridBandedColumn;: TcxGridLevel;_tv_spec_div: TAction;_com_spec_id_erp_user: TcxGridBandedColumn;: TcxLabel;_New_Com_Spec_Hours_SR: TcxSpinEdit;FormDestroy(Sender: TObject);Fill_tv_intitutesExecute(Sender: TObject);Fill_tv_com_specExecute(Sender: TObject);Action_Insert_Com_SpecExecute(Sender: TObject);tv_com_specEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);tv_com_specSelectionChanged(Sender: TcxCustomGridTableView);FormShow(Sender: TObject);tv_com_specKeyDown(Sender: TObject; var Key: Word;: TShiftState);tv_com_specMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Fill_tv_spec_divExecute(Sender: TObject);PopupEdit_Filter_OrgPropertiesInitPopup(Sender: TObject);cxPopupEdit_New_Com_SpecPropertiesInitPopup(Sender: TObject);

private

{ Private declarations }

{ Доступность редактирования специальностей мет. комплекса, специальностей и организаторов обучения }_Spec: boolean;

{ Доступность редактирования учебных групп, сроков проведения и плана ПК }_Groups: boolean;

{ Объект для работы со списками }_TableView: TSqlData_cxGridTableView;

{ Путь реестра (для загрузки/сохранения параметров) }

Curr_Reg_Path: String;

{ Контейнеры оберток }_Institute_Filter: TContainerWrappers;_New_Com_Spec: TContainerWrappers;

{ Обработчики событий изменения в контейнерах оберток }

procedure DoChanged_cW_Intitute_Filter(AWrapper: TCustomEditWrapper);DoChanged_cW_New_Com_Spec(AWrapper: TCustomEditWrapper);Before_Delete_Exchange(Sender: TSqlData_cxGridTableView;: Integer; var ExchangeParameters: OleVariant);

{ Действие перед изменением данных в tv_com_spec }

procedure Before_Update_Exchange(Sender: TSqlData_cxGridTableView;: Variant; AItem: TcxCustomGridTableItem; ARecordIndex: Integer;ExchangeParameters: OleVariant; var Allow: Boolean);

{ Установка доступности добавления }Allow_Insert(TV: TcxCustomGridTableView; Roles: array of boolean);

{ Установка доступности редактирования таблицы (с документом) }

function Allow_Editing(TV: TcxCustomGridTableView; Status_Column: TcxGridColumn;_ERP_Column: TcxGridColumn; Roles: array of boolean): boolean; overload;

{ Установка доступности редактирования таблицы (без документа) }

function Allow_Editing(TV: TcxCustomGridTableView; Roles: array of boolean): boolean; overload;

{ Установка доступности удаления из таблицы (с документом) }

procedure Allow_Delete(TV: TcxCustomGridTableView; Status_Column: TcxGridColumn;_ERP_Column: TcxGridColumn; Roles: array of boolean); overload;

{ Установка доступности удаления из таблицы (без документа) }

procedure Allow_Delete(TV: TcxCustomGridTableView; Roles: array of boolean); overload;

{ Сохранение/восстановление параметров списков }Save_Restore_Params(RReg_Path: String = Reg_Path; PIs_Load: Boolean = True);

{ Public declarations }

{ Инициализация формы }Init(AReg_Path: String = Reg_Path);

{ Обновить роли }Refresh_Roles;

{ Проверка доступности ко всей форме без создания ее самой }

class function IsRoleAccessible: Boolean;;_Plan: TForm_Plan;

{$R *.dfm}SysServices, Get_PK_PPS_Data, standart_new, get_single_data, LP_u_CX_tools;

{ Сохранение/восстановление параметров списков }TForm_Plan.Save_Restore_Params(RReg_Path: String = Reg_Path; PIs_Load: Boolean = True);.StorageName:=RReg_Path+'\Общие параметры';

if PIs_Load

{ Восстановление параметров }begin // 1

{ Восстановим общие параметры }.RestoreFrom;

{ Восстановим значения фильтра по институтам }

if PopupEdit_Filter_Org.Tag <> 0begin // 2_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value := IntToStr(PopupEdit_Filter_Org.Tag);_Institute_Filter.Wrappers[PopupEdit_Filter_Org].ValueDisplay := PopupEdit_Filter_Org.Text;// 2begin // 3_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value := '';_Institute_Filter.Wrappers[PopupEdit_Filter_Org].ValueDisplay := '';

end; // 3// 1

{ Сохранение параметров }begin // 4

{ Сохраним значения фильтра по институтам }

if VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value) <> ''begin // 5_Filter_Org.Tag := StrToInt(VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value));_Filter_Org.Text := VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].ValueDisplay);// 5begin // 6_Filter_Org.Tag := 0;_Filter_Org.Text := '';; // 6

{ Сохраним общие параметры }.StoreTo(True);

end; // 4

{ Сохранение или загрузки параметров списков (в зависимости от параметра PIs_Load) }

Restore_cxGridTableView(tv_com_spec, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_com_spec).Table_Name);_cxGridTableView(tv_spec_div_popup, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_spec_div_popup).Table_Name);_cxGridTableView(tv_institutes, PIs_Load, RReg_Path+Grid_Path+Get_SqlData_cxGrid(tv_institutes).Table_Name);

end;

{ Проверка доступности ко всей форме без создания ее самой! }

class function TForm_Plan.IsRoleAccessible: Boolean;:= vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Spec)vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Groups)vnSessionAgent.IsDBA;;TForm_Plan.PopupEdit_Filter_OrgPropertiesInitPopup(Sender: TObject);_tv_intitutesExecute(self);;

{ Проверка прав }TForm_Plan.Refresh_Roles;DBA: boolean;

{ Проверка наличия ролей }:= vnSessionAgent.IsDBA;_Spec := vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Spec) or DBA;_Groups := vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Groups) or DBA;;

{ Установка доступности добавления }TForm_Plan.Allow_Insert(TV: TcxCustomGridTableView; Roles: array of boolean);i: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1not FSqlData_TableView.IsFirstReadbegin // 2:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];_TableView.ActionInsert.Enabled := Allow;// 2FSqlData_TableView.ActionInsert.Enabled := False;

end; // 1;

{ Установка доступности редактирования таблицы (с документом) }

function TForm_Plan.Allow_Editing(TV: TcxCustomGridTableView; Status_Column: TcxGridColumn;_ERP_Column: TcxGridColumn; Roles: array of boolean): boolean;status, id_erp: string;: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1(TV.DataController.FocusedRecordIndex <> -1)begin // 2:= VarToStr(TV.DataController.Values[TV.DataController.FocusedRecordIndex

,Status_Column.Index]);_erp := VarToStr(TV.DataController.Values[TV.DataController.FocusedRecordIndex

,ID_ERP_Column.Index]);:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];:= (status = '2') and (id_erp = vnSessionAgent.ID_ERP_User) and Allow;// 2Result := False;; // 1

end;

{ Установка доступности редактирования таблицы (без документа) }

function TForm_Plan.Allow_Editing(TV: TcxCustomGridTableView; Roles: array of boolean): boolean;i: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];:= (TV.DataController.FocusedRecordIndex <> -1) and Allow;// 1Result := False;;

{ Установка доступности удаления из таблицы (с документом) }

procedure TForm_Plan.Allow_Delete(TV: TcxCustomGridTableView; Status_Column: TcxGridColumn;_ERP_Column: TcxGridColumn; Roles: array of boolean);i: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];_TableView.ActionDelete.Enabled := Is_Value(Status_Column, '2', false)Is_Value(ID_ERP_Column, vnSessionAgent.ID_ERP_User, false)(TV.Controller.SelectedRecordCount > 0) and Allow;

end; // 1;

{ Установка доступности удаления из таблицы (без документа) }

procedure TForm_Plan.Allow_Delete(TV: TcxCustomGridTableView; Roles: array of boolean);i: integer;: boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0)begin // 1:= False;i := 0 to Length(Roles) - 1Allow := Allow or Roles[i];_TableView.ActionDelete.Enabled := (TV.Controller.SelectedRecordCount > 0) and Allow;; // 1;TForm_Plan.tv_com_specEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);_Editing(Sender, tv_com_spec_status_order, tv_com_spec_id_erp_user, [REdit_Spec]);;TForm_Plan.tv_com_specKeyDown(Sender: TObject; var Key: Word;: TShiftState);Key = VK_INSERTAllow_Insert(tv_com_spec, [REdit_Spec]);;TForm_Plan.tv_com_specMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Button = mbRightAllow_Insert(tv_com_spec, [REdit_Spec]);;TForm_Plan.tv_com_specSelectionChanged(: TcxCustomGridTableView);_Delete(Sender, tv_com_spec_status_order, tv_com_spec_id_erp_user, [REdit_Spec]);;

{ Настройка списков }TForm_Plan.Init(AReg_Path: String = Reg_Path);_Reg_Path := AReg_Path;

{ Описание для различных оберток }

// *****************************************************************************_Institute_Filter := TContainerWrappers.Create;_Institute_Filter.AddPopupEdit(PopupEdit_Filter_Org, false, false, cxGrid_Institutes,_institutes ,tv_institutes_ID, [tv_institutes_Abbr, tv_institutes_Name], '');_Institute_Filter.OnChangedValueWrapper := DoChanged_cW_Intitute_Filter;;

// *****************************************************************************

// *****************************************************************************_New_Com_Spec := TContainerWrappers.Create;_New_Com_Spec.AddPopupEdit(cxPopupEdit_New_Com_Spec, true, false, cxGrid_Spec_Div_Popup,_spec_div_popup, tv_spec_div_popup_id_spec_div, [tv_spec_div_popup_name_spec, tv_spec_div_popup_name_div, tv_spec_div_popup_kind_training], '');_New_Com_Spec.AddButtonOrderEdit(cxButtonEdit_New_Com_Spec_Paragraph, True,, '', ['901'],[OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW], [nil,nil,nil,nil]);_New_Com_Spec.AddCustomEdit(cxSpinEdit_New_Com_Spec_Hours, true, false, '');_New_Com_Spec.AddCustomEdit(cxSpinEdit_New_Com_Spec_Hours_SR, true, false, '');_New_Com_Spec.AddPopupEdit(cxPopupEdit_New_Com_Spec_Div, true, false, cxGrid_Spec_Div_Popup, tv_spec_div_popup, tv_spec_div_popup_id_d, [tv_spec_div_popup_name_div], '');_New_Com_Spec.AddPopupEdit(cxPopupEdit_New_Com_Spec_Kind_Training, true, false, cxGrid_Spec_Div_Popup, tv_spec_div_popup, tv_spec_div_popup_idk_training, [tv_spec_div_popup_kind_training], '');_New_Com_Spec.OnChangeWrapper := DoChanged_cW_New_Com_Spec;

// *****************************************************************************

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

// добавление институтов

// ---------------------------------------------Get_SqlData_cxGrid(tv_institutes) = nilwith TSqlData_cxGridTableView.Create(tv_institutes)begin:= false;_Name := 'Институты';_Select := Get_List_Institutes;:= True;:= CreateVarAr([IDK_Level_Spec]);_Columns.Add(tv_institutes_Abbr);_Columns.Add(tv_institutes_Name);_Columns.Add(tv_institutes_ID);_Columns.Add(tv_institutes_ID);_Column := tv_institutes_Abbr;.Add(tv_institutes_Abbr);.Add(tv_institutes_Name);

end;

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

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

// добавление обучаемых специальностей (специальности подразделений)

// ---------------------------------------------Get_SqlData_cxGrid(tv_spec_div_popup) = nilwith TSqlData_cxGridTableView.Create(tv_spec_div_popup)begin:= false;:= false;_Name := 'Обучаемые специальности';_Select := Spec_div;:= True;:= CreateVarAr([IDK_Level_Spec,'']);_Column := tv_spec_div_popup_institute;:= tv_spec_div_popup_institute;Select_Columnsbegin(tv_spec_div_popup_name_spec,1);(tv_spec_div_popup_name_div,2);(tv_spec_div_popup_kind_training,3);(tv_spec_div_popup_institute,6);(tv_spec_div_popup_source,12);(tv_spec_div_popup_d_start,4);(tv_spec_div_popup_d_end,5);(tv_spec_div_popup_id_spec_div,0);(tv_spec_div_popup_id_spec,1);(tv_spec_div_popup_id_d,2);(tv_spec_div_popup_idk_training,3);(tv_spec_div_popup_id_d_institute,6);(tv_spec_div_popup_id_source,12);(tv_spec_div_popup_idk_level_formation,8);;_Columns.Add(tv_spec_div_popup_id_spec_div,0);

PopupActions.Add(ActionUpdate);;

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

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

// добавление специальностей комплекса

// ---------------------------------------------Get_SqlData_cxGrid(tv_com_spec) = nilwith TSqlData_cxGridTableView.Create(tv_com_spec)begin:= true;:= false;_Name := 'Специальности комплекса';_Select := Com_Spec;_Delete := Delete_Com_Spec;_Update_Exchange := Update_Com_Spec;:= True;:= CreateVarAr(['']);_Column := tv_com_spec_name_div;:= tv_com_spec_name_div;_Delete_Exchange := Before_Delete_Exchange;_Update_Exchange := Before_Update_Exchange;Select_Columnsbegin(tv_com_spec_name_spec);(tv_com_spec_name_div);(tv_com_spec_kind_training);(tv_com_spec_status_text);(tv_com_spec_hours,5);(tv_com_spec_id_spec_div);(tv_com_spec_id_spec);(tv_com_spec_id_d_spec_div);(tv_com_spec_idk_training);(tv_com_spec_status_order);(tv_com_spec_id_p_dp);(tv_com_spec_id_order);(tv_com_spec_idk_order);(tv_com_spec_id_met_complex);(tv_com_spec_id_e_l_umk);(tv_com_spec_id_erp_user);;IndividualEditInfoList.Addbegin_Update := d_P_EDUCATIONAL_LOAD_UMK;.Add(tv_com_spec_id_met_complex,1);.Add(tv_com_spec_hours,5);;PopupColumnsList.Add(tv_com_spec_name_spec)begin:= tv_com_spec_id_spec_div;:= tv_spec_div_popup_id_spec_div;:= tv_spec_div_popup_name_spec;;PopupColumnsList.Add(tv_com_spec_name_div)begin:= tv_com_spec_id_spec_div;:= tv_spec_div_popup_id_spec_div;:= tv_spec_div_popup_name_div;;PopupColumnsList.Add(tv_com_spec_kind_training)begin:= tv_com_spec_id_spec_div;:= tv_spec_div_popup_id_spec_div;:= tv_spec_div_popup_kind_training;;.Column_Status_Text := tv_com_spec_status_text;.Column_ID_order := tv_com_spec_id_order;.Column_ID_paragraph := tv_com_spec_id_p_dp;.Column_IDk_order := tv_com_spec_idk_order;.Visible:=True;.OnExecute:=Action_Insert_Com_Spec.OnExecute;.Add(ActionInsert);.Add(ActionDelete);.Add(nil);.Add(OptionsOrder.ActionPreview);.Add(OptionsOrder.ActionNavigate);.Add(nil);.Add(ActionUpdate);;

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

{ Cкрываем ненужные страницы }_Editing.TabVisible := False;_Add.TabVisible := False;

{ Прочитаем параметры из реестра }_Restore_Params(Curr_Reg_Path, True);;TForm_Plan.Action_Insert_Com_SpecExecute(Sender: TObject);

//const Name = 'Содержание методического комплекса';

var: TSForm;// 1:= CreateSForm(self, 'fNew_Com_Spec'

, cxTabSheet_New_Com_Spec.Caption

, Add_Path + cxTabSheet_New_Com_Spec.Caption

, Panel_New_Com_Spec, tdb_Apply);_New_Com_Spec.OnChangeWrapper(nil);.Position := poScreenCenter;mf.ShowModal = mrOkbegin // 2_TableView := Get_SqlData_cxGrid(tv_com_spec);FSqlData_TableView <> nilbegin // 3MSystemServices.ExchangeData(Add_Com_Spec,([_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Div].Value

,cW_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec].Value

,cW_New_Com_Spec.Wrappers[cxButtonEdit_New_Com_Spec_Paragraph].Value

,cW_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Kind_Training].Value

,cW_New_Com_Spec.Wrappers[cxSpinEdit_New_Com_Spec_Hours].Value

,IDK_Discipline

,cW_New_Com_Spec.Wrappers[cxSpinEdit_New_Com_Spec_Hours_SR].Value

])

,'Добавление программы методического комплекса.')

then begin // 4(cW_New_Com_Spec.Wrappers[cxButtonEdit_New_Com_Spec_Paragraph]).IsEmpty := false;_TableView.Read_Data;(tv_com_spec, [tv_com_spec_id_spec_div, tv_com_spec_id_p_dp],([cW_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec].Value,_New_Com_Spec.Wrappers[cxButtonEdit_New_Com_Spec_Paragraph].Value]), true);; // 4; // 3; // 2// 1assigned(mf)FreeAndNil(mf);; // 1;TForm_Plan.Fill_tv_com_specExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_com_spec);(FSqlData_TableView <> nil)begin // 1PopupEdit_Filter_Org.Text <> ''Get_SqlData_cxGrid(tv_com_spec).Params[0] :=(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value)Get_SqlData_cxGrid(tv_com_spec).Params[0] := '';FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_FirstFSqlData_TableView.Read_Data;; // 1;TForm_Plan.Fill_tv_intitutesExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_institutes);(FSqlData_TableView <> nil) and FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_First;;TForm_Plan.Fill_tv_spec_divExecute(Sender: TObject);Param1: string;_TableView := Get_SqlData_cxGrid(tv_spec_div_popup);(FSqlData_TableView <> nil)begin // 1:= VarToStr(cW_Institute_Filter.Wrappers[PopupEdit_Filter_Org].Value);VarToStr(FSqlData_TableView.Params[1]) <> Param1begin // 2_TableView.Params[1] := Param1;_TableView.Read_Data;// 2FSqlData_TableView.IsFirstReadFSqlData_TableView.Read_Data_First;; // 1;TForm_Plan.FormDestroy(Sender: TObject);

begin

{ Сохраним параметры в реестр }

Save_Restore_Params(Curr_Reg_Path, False);;TForm_Plan.FormShow(Sender: TObject);

{ Перечитываем списки }_tv_com_specExecute(self);;TForm_Plan.DoChanged_cW_New_Com_Spec(AWrapper: TCustomEditWrapper);AWrapper = cW_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec]begin // 1not cW_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec].IsClearbegin // 2_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Kind_Training].Value :=(tv_spec_div_popup.DataController.Values[tv_spec_div_popup.DataController.FocusedRecordIndex

,tv_spec_div_popup_idk_training.Index]);_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Kind_Training].ValueDisplay :=(tv_spec_div_popup.DataController.Values[tv_spec_div_popup.DataController.FocusedRecordIndex

,tv_spec_div_popup_kind_training.Index]);_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Div].Value :=(tv_spec_div_popup.DataController.Values[tv_spec_div_popup.DataController.FocusedRecordIndex

,tv_spec_div_popup_id_d.Index]);_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Div].ValueDisplay :=(tv_spec_div_popup.DataController.Values[tv_spec_div_popup.DataController.FocusedRecordIndex

,tv_spec_div_popup_name_div.Index]);// 2begin // 3_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Div].Value := '';_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Div].ValueDisplay := '';_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Kind_Training].Value := '';_New_Com_Spec.Wrappers[cxPopupEdit_New_Com_Spec_Kind_Training].ValueDisplay := '';; // 3; // 1_OkButton(Panel_New_Com_Spec, cW_New_Com_Spec.IsNotEmptyMandatory);;TForm_Plan.DoChanged_cW_Intitute_Filter(AWrapper: TCustomEditWrapper);_tv_com_specExecute(self);;TForm_Plan.Before_Delete_Exchange(Sender: TSqlData_cxGridTableView; ARecordIndex: Integer; var ExchangeParameters: OleVariant);Sender.GridTableView = tv_com_specwith Sender.GridTableView.DataController do:= CreateVarAr([Values[FocusedRecordIndex, tv_com_spec_id_met_complex.Index]

,Values[FocusedRecordIndex, tv_com_spec_id_spec_div.Index]

,Values[FocusedRecordIndex, tv_com_spec_id_p_dp.Index]

]);;TForm_Plan.Before_Update_Exchange(Sender: TSqlData_cxGridTableView;: Variant; AItem: TcxCustomGridTableItem; ARecordIndex: Integer;ExchangeParameters: OleVariant; var Allow: Boolean);(Sender.GridTableView = tv_com_spec)(Sender.GridTableView.Controller.FocusedColumn <> tv_com_spec_hours)with Sender.GridTableView.DataController do:=([Values[FocusedRecordIndex, tv_com_spec_id_met_complex.Index]

,Values[FocusedRecordIndex, tv_com_spec_id_spec_div.Index]

,Values[FocusedRecordIndex, tv_com_spec_id_p_dp.Index]

,tv_spec_div_popup.DataController.Values[tv_spec_div_popup.DataController.FocusedRecordIndex

,tv_spec_div_popup_id_spec_div.Index]

,tv_spec_div_popup.DataController.Values[tv_spec_div_popup.DataController.FocusedRecordIndex

,tv_spec_div_popup_idk_training.Index]

,tv_spec_div_popup.DataController.Values[tv_spec_div_popup.DataController.FocusedRecordIndex

,tv_spec_div_popup_id_d.Index]

]);;TForm_Plan.cxPopupEdit_New_Com_SpecPropertiesInitPopup(: TObject);_tv_spec_divExecute(self);;Event, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, cxPC, cxControls, cxSplitter, cxStyles, cxCustomData,, cxFilter, cxData, cxDataStorage, cxEdit, cxGridLevel,, cxGridTableView, cxGridBandedTableView,, cxGrid, cxEditRepositoryItems, cxClasses, cxTL,, cxPropertiesStore, cxTextEdit, cxMaskEdit, cxDropDownEdit,, wrappers, ActnList, cxLookAndFeels, cxLookAndFeelPainters,,, GridEditClass, cxButtonEdit, SE, cxGroupBox, Find_Org,_u_MA_Interface,, Menus, StdCtrls, cxButtons, cxCurrencyEdit, DateUtils,, OleServer, Excel2000, cxProgressBar, cxCheckBox, cxRadioGroup;

const

{ Роль на редактирование учебных групп, сроков проведения и плана ПК }

Action_Q_Edit_Groups = '1402';

{ Роль на просмотр мероприятий }_Q_View_Event = '1403';

{ Полный доступ к мероприятиям }_Q_Edit_Event = '1404';

{ Вид уровня специальности "Повышение квалификации" }

IDK_Level_Spec = '70';_Discipline = '59454';

{ Путь для сохранения в реестре }

Reg_Path = '\Software\AS Pilot group\Parameters\Модуль повышения квалификации\Мероприятия';

{ Путь для сохранения списков }_Path = '\Параметры списков\';

{ Путь для добавления }_Path = 'Модуль повышения квалификации\Мероприятия\Добавление\';

// Выбор участника_Listener = 'Участник не выбран';

// Печать сертификата_Cert: TGUID = '{5F2398A1-75FE-4E65-B294-4F1A47315662}';_Event = class(TForm)_Main: TPanel;: TcxSplitter;_Main: TcxPageControl;_R_C_Groups: TcxTabSheet;: TcxEditStyleController;: TcxStyleRepository;_Group: TcxStyle;_s_ContentEVEN: TcxStyle;_Filter_Box: TcxStyle;_Footer: TcxStyle;_Inactive: TcxStyle;_Indicator: TcxStyle;_Preview: TcxStyle;_Selection: TcxStyle;_ContentOdd: TcxStyle;_Content_TEXT: TcxStyle;_Content_POPUP: TcxStyle;_Content_DATE: TcxStyle;_Content_QUALIFIER: TcxStyle;_Footer_Column: TcxStyle;_Content_ID: TcxStyle;_Content_Memo: TcxStyle;_Content_Project: TcxStyle;_Content_Cancel: TcxStyle;_Content_ProjectSend: TcxStyle;_Content_Owner: TcxStyle;_Content_NotOwner: TcxStyle;_Content_Hot_Track: TcxStyle;_Inc_Search: TcxStyle;_Group_By_Box: TcxStyle;_Header: TcxStyle;_Style_1: TcxTreeListStyleSheet;_Style_1: TcxGridBandedTableViewStyleSheet;: TcxEditRepository;_Date_None_Blank: TcxEditRepositoryDateItem;_Date_With_Blank: TcxEditRepositoryDateItem;_Spin_ID: TcxEditRepositorySpinItem;_Text_RO: TcxEditRepositoryTextItem;_Memo_RO: TcxEditRepositoryMemoItem;_Date_RO: TcxEditRepositoryDateItem;: TcxPropertiesStore;_Text: TcxEditRepositoryTextItem;_R_C_Plan: TcxGrid;_r_c_plan: TcxGridBandedTableView;_R_C_Plan_Level1: TcxGridLevel;_r_c_plan_name_spec: TcxGridBandedColumn;_r_c_plan_institute: TcxGridBandedColumn;_r_c_plan_division: TcxGridBandedColumn;_r_c_plan_kind_training: TcxGridBandedColumn;_r_c_plan_d_start: TcxGridBandedColumn;_r_c_plan_d_end: TcxGridBandedColumn;_r_c_plan_status_text: TcxGridBandedColumn;_r_c_plan_id_r_c_plan: TcxGridBandedColumn;_r_c_plan_id_spec_div: TcxGridBandedColumn;_r_c_plan_id_spec: TcxGridBandedColumn;_r_c_plan_id_institute: TcxGridBandedColumn;_r_c_plan_id_d: TcxGridBandedColumn;_r_c_plan_idk_training: TcxGridBandedColumn;_r_c_plan_id_paragraph: TcxGridBandedColumn;_r_c_plan_id_order: TcxGridBandedColumn;_r_c_plan_idk_order: TcxGridBandedColumn;_r_c_plan_status_order: TcxGridBandedColumn;_R_C_Groups: TcxGrid;_r_c_groups: TcxGridBandedTableView;_R_C_Groups_Level1: TcxGridLevel;: TActionList;_Insert_tv_r_c_plan: TAction;_Add: TcxTabSheet;_Editing: TcxTabSheet;: TcxPageControl;: TcxTabSheet;_New_R_C_Plan: TPanel;: TcxLabel;: TcxLabel;_New_R_C_Plan_Spec_Div: TcxPopupEdit;_New_R_C_Plan_Paragraph: TcxButtonEdit;: TcxLabel;_New_R_C_Plan_D_Start: TcxDateEdit;_New_R_C_Plan_D_End: TcxDateEdit;: TcxLabel;: TcxPageControl;: TcxTabSheet;_Spec_Div_PopUp: TcxGrid;_spec_div_popup: TcxGridBandedTableView;_spec_div_popup_name_spec: TcxGridBandedColumn;_spec_div_popup_name_div: TcxGridBandedColumn;_spec_div_popup_kind_training: TcxGridBandedColumn;_spec_div_popup_institute: TcxGridBandedColumn;_spec_div_popup_source: TcxGridBandedColumn;_spec_div_popup_d_start: TcxGridBandedColumn;_spec_div_popup_d_end: TcxGridBandedColumn;_spec_div_popup_id_spec_div: TcxGridBandedColumn;_spec_div_popup_id_spec: TcxGridBandedColumn;_spec_div_popup_id_d: TcxGridBandedColumn;_spec_div_popup_idk_training: TcxGridBandedColumn;_spec_div_popup_id_d_institute: TcxGridBandedColumn;_spec_div_popup_id_source: TcxGridBandedColumn;_spec_div_popup_idk_level_formation: TcxGridBandedColumn;: TcxGridLevel;_tv_spec_div_popup: TAction;_r_c_groups_name: TcxGridBandedColumn;_r_c_groups_d_start: TcxGridBandedColumn;_r_c_groups_d_end: TcxGridBandedColumn;_r_c_groups_status_text: TcxGridBandedColumn;_r_c_groups_id_rc_group: TcxGridBandedColumn;_r_c_groups_id_ed_group: TcxGridBandedColumn;_r_c_groups_id_met_complex: TcxGridBandedColumn;_r_c_groups_id_paragraph: TcxGridBandedColumn;_r_c_groups_id_order: TcxGridBandedColumn;_r_c_groups_idk_order: TcxGridBandedColumn;_r_c_groups_status_order: TcxGridBandedColumn;: TcxTabSheet;_r_c_groups_id_r_c_plan: TcxGridBandedColumn;_Insert_tv_r_c_group: TAction;: TcxTabSheet;_Ed_Group: TcxGrid;_ed_group: TcxGridBandedTableView;_ed_group_name: TcxGridBandedColumn;_ed_group_kind_group: TcxGridBandedColumn;_ed_group_d_start: TcxGridBandedColumn;_ed_group_d_end: TcxGridBandedColumn;_ed_group_id_ed_group: TcxGridBandedColumn;_ed_group_id_spec_div: TcxGridBandedColumn;_ed_group_idk_group: TcxGridBandedColumn;_ed_group_level_group: TcxGridBandedColumn;: TcxGridLevel;_New_R_C_Group: TPanel;: TcxLabel;: TcxLabel;_New_R_C_Group_Ed_Group: TcxPopupEdit;: TcxLabel;_New_R_C_Group_D_Start: TcxDateEdit;_New_R_C_Group_D_End: TcxDateEdit;: TcxLabel;_New_R_C_Group_Met_Complex: TcxPopupEdit;: TcxTabSheet;_Com_Spec: TcxGrid;_com_spec: TcxGridBandedTableView;_com_spec_name_spec: TcxGridBandedColumn;_com_spec_name_div: TcxGridBandedColumn;_com_spec_kind_training: TcxGridBandedColumn;_com_spec_status_text: TcxGridBandedColumn;_com_spec_hours: TcxGridBandedColumn;_com_spec_status_order: TcxGridBandedColumn;_com_spec_id_spec_div: TcxGridBandedColumn;_com_spec_id_spec: TcxGridBandedColumn;_com_spec_id_d_spec_div: TcxGridBandedColumn;_com_spec_idk_training: TcxGridBandedColumn;_com_spec_id_p_dp: TcxGridBandedColumn;_com_spec_id_order: TcxGridBandedColumn;_com_spec_idk_order: TcxGridBandedColumn;_com_spec_id_met_complex: TcxGridBandedColumn;_com_spec_id_e_l_umk: TcxGridBandedColumn;: TcxGridLevel;_tv_com_spec: TAction;_com_spec_institute: TcxGridBandedColumn;_com_spec_id_institute: TcxGridBandedColumn;_tv_ed_group: TAction;_tv_r_c_plan: TAction;_Listeners: TcxTabSheet;_Listeners: TcxGrid;_listeners: TcxGridBandedTableView;: TcxGridLevel;_listeners_fio: TcxGridBandedColumn;_listeners_ed_group: TcxGridBandedColumn;_listeners_d_start: TcxGridBandedColumn;_listeners_d_end: TcxGridBandedColumn;_listeners_kind_basis_action: TcxGridBandedColumn;_listeners_status_text_order_start: TcxGridBandedColumn;_listeners_id_e: TcxGridBandedColumn;_listeners_id_ed_group: TcxGridBandedColumn;_listeners_id_paragraph_start: TcxGridBandedColumn;_listeners_id_order_start: TcxGridBandedColumn;_listeners_idk_order_start: TcxGridBandedColumn;_listeners_status_order_start: TcxGridBandedColumn;_listeners_id_student: TcxGridBandedColumn;_listeners_idkba_transfer: TcxGridBandedColumn;: TcxTabSheet;_New_Listener: TPanel;: TcxLabel;: TcxLabel;_New_Listener_FIO: TcxPopupEdit;_New_Listener_Order_Start: TcxButtonEdit;: TcxLabel;_New_Listener_D_Start: TcxDateEdit;_New_Listener_D_End: TcxDateEdit;_New_Listener_Ed_Group: TcxPopupEdit;: TcxLabel;: TcxLabel;: TcxLabel;_New_Listener_Kind_Basis_Action: TcxPopupEdit;: TcxTabSheet;_KBA_Start: TcxGrid;_kba_start: TcxGridBandedTableView;: TcxGridLevel;_kba_start_name: TcxGridBandedColumn;_kba_start_id: TcxGridBandedColumn;_tv_r_c_groups: TAction;_tv_listeners: TAction;_Insert_tv_listeners: TAction;_tv_kba_start: TAction;_New_Listener_Contract_Params: TcxGroupBox;: TcxLabel;_New_Listener_Kind_Order: TcxPopupEdit;: TcxLabel;_New_Listener_Order: TcxPopupEdit;: TcxLabel;_New_Listener_Contract_D_Start: TcxDateEdit;: TcxLabel;_New_Listener_Contract_D_End: TcxDateEdit;: TcxLabel;_New_Listener_Contract_Organization: TcxPopupEdit;: TcxLabel;: TcxLabel;_New_Listener_Contract_Source_Finansing: TcxPopupEdit;: TcxTabSheet;_Kind_Order: TcxGrid;_kind_order: TcxGridBandedTableView;_kind_order_name: TcxGridBandedColumn;_kind_order_id: TcxGridBandedColumn;: TcxGridLevel;: TcxTabSheet;_Contracts: TcxGrid;_contracts: TcxGridBandedTableView;: TcxGridLevel;_contracts_contract: TcxGridBandedColumn;_contracts_d_start: TcxGridBandedColumn;_contracts_d_end: TcxGridBandedColumn;_contracts_kind_order: TcxGridBandedColumn;_contracts_id_contract: TcxGridBandedColumn;_contracts_id_paragraph: TcxGridBandedColumn;_contracts_id_order: TcxGridBandedColumn;_contracts_idk_order: TcxGridBandedColumn;_contracts_status_order: TcxGridBandedColumn;: TcxTabSheet;_Source_Financing: TcxGrid;_Source_Financing: TcxGridBandedTableView;_Source_Financing_Abbreviation: TcxGridBandedColumn;_Source_Financing_Name: TcxGridBandedColumn;_Source_Financing_Abbr_Div: TcxGridBandedColumn;_Source_Financing_Division: TcxGridBandedColumn;_Source_Financing_Kind_Source: TcxGridBandedColumn;_Source_Financing_Activity: TcxGridBandedColumn;_Source_Financing_Date_Close: TcxGridBandedColumn;_Source_Financing_ID: TcxGridBandedColumn;_Source_Financing_ID_D: TcxGridBandedColumn;_Source_Financing_ID_Kind_Source: TcxGridBandedColumn;_Source_Financing_ID_Activity: TcxGridBandedColumn;: TcxGridLevel;_tv_kind_order: TAction;_tv_contracts: TAction;_tv_source_finansing: TAction;_listeners_org: TcxGridBandedColumn;_listeners_money: TcxGridBandedColumn;_listeners_status_text_contract: TcxGridBandedColumn;_listeners_status_text_order_end: TcxGridBandedColumn;_listeners_id_contract: TcxGridBandedColumn;_tv_listeners: TAction;_Student: TcxPageControl;: TcxSplitter;_Orders: TcxTabSheet;_Orders: TcxGrid;_orders: TcxGridBandedTableView;: TcxGridLevel;_orders_id_order: TcxGridBandedColumn;_orders_kind_paragraph: TcxGridBandedColumn;_orders_status_text: TcxGridBandedColumn;_orders_id_paragraph: TcxGridBandedColumn;_orders_d_creation: TcxGridBandedColumn;_orders_d_modification: TcxGridBandedColumn;_orders_idk_order: TcxGridBandedColumn;_orders_status_order: TcxGridBandedColumn;_tv_orders: TAction;_listeners_id_paragraph_contract: TcxGridBandedColumn;_r_c_plan_id_erp_user: TcxGridBandedColumn;_r_c_groups_id_erp_user: TcxGridBandedColumn;_listeners_id_erp_user: TcxGridBandedColumn;_orders_ed_group: TcxGridBandedColumn;_orders_spec: TcxGridBandedColumn;_orders_d_start: TcxGridBandedColumn;_orders_kind_training: TcxGridBandedColumn;_orders_institute: TcxGridBandedColumn;_orders_status_order_contract: TcxGridBandedColumn;_orders_kind_paragraph_contract: TcxGridBandedColumn;_Anketa: TcxTabSheet;_listeners_id_contractor: TcxGridBandedColumn;_Anketa: TPanel;_Anketa: TAction;_r_c_groups_hours: TcxGridBandedColumn;_listeners_hours: TcxGridBandedColumn;_Contracts: TcxTabSheet;_FIO: TPanel;_FIO: TcxLabel;_r_c_plan_id_source: TcxGridBandedColumn;_r_c_plan_source: TcxGridBandedColumn;_Contract_Params: TcxGroupBox;: TcxLabel;_PC_D_Start: TcxDateEdit;: TcxLabel;_PC_D_End: TcxDateEdit;: TcxLabel;_PC_Org: TcxPopupEdit;: TcxLabel;: TcxLabel;_PC_SF: TcxPopupEdit;: TcxLabel;_PC_Contract: TcxButtonEdit;: TcxLabel;_PC_Kind_Order: TcxPopupEdit;: TcxLabel;_PC_Create_Direction: TcxButtonEdit;_PC_Direction: TcxButtonEdit;: TcxLabel;_PC_Kind_Direction: TcxPopupEdit;_Contract_Params: TAction;: TcxTabSheet;_New_Direction: TPanel;: TcxLabel;_New_Direction: TcxPopupEdit;_Contract: TAction;: TcxTabSheet;_Kind_Direction: TcxGrid;_kind_direction: TcxGridBandedTableView;_kind_direction_name: TcxGridBandedColumn;_kind_direction_id: TcxGridBandedColumn;: TcxGridLevel;_PC_Apply: TcxButton;_PC_Refuse: TcxButton;_PC_Autorepresentative: TcxButton;_Apply: TAction;_Refuse: TAction;_Autorepresentative: TAction;_tv_kind_direction: TAction;_Insert_New_Direction: TAction;_Add_Contract: TAction;_Delete_Contract: TAction;_End_Education: TAction;: TcxTabSheet;_Kba_End: TcxGrid;_kba_end: TcxGridBandedTableView;_kba_end_name: TcxGridBandedColumn;_kba_end_id: TcxGridBandedColumn;: TcxGridLevel;_tv_kba_end: TAction;: TcxTabSheet;_End_Education: TPanel;: TcxLabel;: TcxLabel;_KBA_End: TcxPopupEdit;_End_Education: TcxButtonEdit;: TcxLabel;_End_Education: TcxDateEdit;_listeners_d_end_plan: TcxGridBandedColumn;_PC_Money: TcxCurrencyEdit;_New_Listener_Contract_Money: TcxCurrencyEdit;_listeners_hours_plan: TcxGridBandedColumn;_r_c_plan_money: TcxGridBandedColumn;_listeners_certificate: TcxGridBandedColumn;_PC_Representative: TcxGroupBox;: TcxLabel;_PC_Basis: TcxTextEdit;: TcxLabel;: TcxLabel;: TcxLabel;_PC_FIO: TcxTextEdit;_PC_FIO_R: TcxTextEdit;_PC_Post: TcxPopupEdit;: TcxTabSheet;_Posts: TcxGrid;_posts: TcxGridBandedTableView;_posts_name: TcxGridBandedColumn;_posts_id: TcxGridBandedColumn;: TcxGridLevel;_tv_posts: TAction;_New_Listener_Representative: TcxGroupBox;: TcxLabel;_New_Listener_Basis: TcxTextEdit;: TcxLabel;: TcxLabel;: TcxLabel;_New_Listener_FIO: TcxTextEdit;_New_Listener_FIO_R: TcxTextEdit;_New_Listener_Post: TcxPopupEdit;_listeners_last_date: TcxGridBandedColumn;_Plan: TcxGroupBox;_Plan_Filters_Year: TcxSpinEdit;: TcxLabel;: TcxLabel;: TcxLabel;: TcxLabel;_Plan_Filters_Note: TcxTextEdit;_Plan_Filters_Summary: TcxTextEdit;_Plan_Filters_Apply: TcxButton;_Plan_Filters_Refuse: TcxButton;_Plan_Filters_Plan: TcxPopupEdit;: TcxTabSheet;_Plan: TcxGrid;_plan: TcxGridBandedTableView;: TcxGridLevel;_plan_note: TcxGridBandedColumn;_plan_summary: TcxGridBandedColumn;_plan_status_text: TcxGridBandedColumn;_plan_hisdate: TcxGridBandedColumn;_plan_d_creation: TcxGridBandedColumn;_plan_d_modification: TcxGridBandedColumn;_plan_id_paragraph: TcxGridBandedColumn;_plan_id_order: TcxGridBandedColumn;_plan_idk_order: TcxGridBandedColumn;_plan_status_order: TcxGridBandedColumn;_plan_id_erp_user: TcxGridBandedColumn;_tv_plan: TAction;_Apply: TAction;_Refuse: TAction;_Curator: TPanel;: TcxSplitter;_Curator: TcxGrid;_Curator: TcxGridBandedTableView;_Curator_Start: TcxGridBandedColumn;_Curator_End: TcxGridBandedColumn;_Curator_ID_EG: TcxGridBandedColumn;_Curator_ID_E: TcxGridBandedColumn;_Curator_Level1: TcxGridLevel;_Curator_FIO: TcxGridBandedColumn;_Insert_Curator: TAction;_New_Curator: TAction;_New_Curator: TcxTabSheet;_New_Curator: TPanel;: TcxLabel;_New_Curator_FIO: TcxPopupEdit;: TcxLabel;_New_Curator: TcxDateEdit;_listeners_Main_Contract: TcxGridBandedColumn;_listeners_ID_Contract_Main: TcxGridBandedColumn;_listeners_Org_Contract_Main: TcxGridBandedColumn;_Main_Contract: TAction;_Set_Main_Contract: TcxTabSheet;_Set_Main_Contract: TPanel;: TcxLabel;_Set_Main_Contract: TcxPopupEdit;: TcxLabel;_Set_Main_Contract_Find: TcxDateEdit;_Go_Set_Main_Contract: TAction;_Main_Contracts: TcxGrid;_Main_Contracts: TcxGridBandedTableView;_Main_Contracts_Contract: TcxGridBandedColumn;_Main_Contracts_Level14: TcxGridLevel;_Main_Contracts_Org_Name: TcxGridBandedColumn;_Main_Contracts_ID_Contract: TcxGridBandedColumn;_Main_Contracts_Number: TcxGridBandedColumn;_Import: TAction;_Import: TcxTabSheet;_Import: TPanel;: TcxLabel;_Import_Plan: TcxPopupEdit;: TcxLabel;_Import_Start: TcxDateEdit;_File: TOpenDialog;: TcxLabel;: TcxLabel;: TcxLabel;_Import_Plan: TcxButtonEdit;_Import_Spec: TcxPopupEdit;_Import_Spec: TcxButtonEdit;_Import_Spec_Div: TcxPopupEdit;_Import_Spec_Div: TcxButtonEdit;_Import_UMK: TcxPopupEdit;_Import_UMK: TcxButtonEdit;_Go_Import: TAction;_Spec: TcxGrid;_Spec: TcxGridBandedTableView;_Spec_Name: TcxGridBandedColumn;_Spec_Q: TcxGridBandedColumn;_Spec_ID: TcxGridBandedColumn;_Spec_IDK_Level_Spec: TcxGridBandedColumn;_Spec_id_discipline: TcxGridBandedColumn;_Spec_idk_discipline: TcxGridBandedColumn;_Spec_Level1: TcxGridLevel;_New_Spec: TcxTabSheet;_New_Spec: TPanel;: TcxLabel;_Spec_Name: TcxTextEdit;_Spec_Quality: TcxTextEdit;: TcxLabel;_Import_End: TcxDateEdit;_New_Spec_Div: TcxTabSheet;_New_Spec_Div: TPanel;: TcxLabel;: TcxLabel;: TcxLabel;: TcxLabel;_Spec_Div_D_Start: TcxDateEdit;_Spec_Div_Institute: TcxPopupEdit;: TcxLabel;_Spec_Div_Div: TcxPopupEdit;_Spec_Div_Spec: TcxPopupEdit;_Spec_Div_KT: TcxPopupEdit;: TcxLabel;_Spec_Div_SF: TcxPopupEdit;_Org_Division: TcxGrid;_Org_Division: TcxGridBandedTableView;_Org_Division_Abbr: TcxGridBandedColumn;_Org_Division_Name: TcxGridBandedColumn;_Org_Division_ID: TcxGridBandedColumn;_Org_Division_Level1: TcxGridLevel;_Kind_Training: TcxGrid;_Kind_Training: TcxGridBandedTableView;_Kind_Training_Name: TcxGridBandedColumn;_Kind_Training_IDK_TRAINING: TcxGridBandedColumn;: TcxGridLevel;: TcxLabel;_Import_EG: TcxPopupEdit;_Import_EG: TcxButtonEdit;_New_UMK: TcxTabSheet;_New_UMK: TPanel;: TcxLabel;_New_UMK_Hours: TcxSpinEdit;_After_Show_New_Anketa: TAction;_New_SE: TAction;: TcxLabel;_Import_Order: TcxButtonEdit;_New_Contract_Main: TcxTabSheet;_New_Contract_Main: TPanel;: TcxLabel;_New_Contract_Main: TcxPopupEdit;: TcxLabel;_New_Contract_Main: TcxButtonEdit;: TcxLabel;_New_Contract_Main: TcxTextEdit;: TcxLabel;_New_Contract_Main_Start: TcxDateEdit;_New_Contract_Main_End: TcxDateEdit;_New_Contract_Main: TAction;_Insert_Contract_Main: TAction;_Money: TcxEditRepositoryCurrencyItem;: TcxLabel;_Import_Money: TcxCurrencyEdit;: TcxLabel;_Import_NDS: TcxCurrencyEdit;: TcxLabel;_Import_Start_Otrjv: TcxDateEdit;_Import_End_Otrjv: TcxDateEdit;: TcxLabel;_Import_Nach: TcxButtonEdit;_Import: TcxProgressBar;: TcxLabel;_Import_Reference: TcxDateEdit;_Stages: TcxTabSheet;_Nach: TcxGrid;_Nach: TcxGridBandedTableView;_Nach_D_Start: TcxGridBandedColumn;_Nach_D_End: TcxGridBandedColumn;_Nach_ID_Stage: TcxGridBandedColumn;_Nach_ID_Account_Contract: TcxGridBandedColumn;_Nach_Document: TcxGridBandedColumn;_Nach_Level1: TcxGridLevel;_Nach_Status: TcxGridBandedColumn;_Nach_Sum: TcxGridBandedColumn;_Nach_ID_Basis_Salary: TcxGridBandedColumn;_Nach_ID_SF: TcxGridBandedColumn;_Nach_IDK_Order: TcxGridBandedColumn;_Nach_ID_Paragraph: TcxGridBandedColumn;_Nach_ID_Order: TcxGridBandedColumn;_Nach_ID_ERP: TcxGridBandedColumn;_Nach_User: TcxGridBandedColumn;_Create_Nach: TAction;_New_Nach: TcxTabSheet;_Nach_Kind_Order: TcxGridBandedColumn;_listeners_NDS: TcxGridBandedColumn;_New_Nach: TPanel;: TcxLabel;_New_Nach: TcxButtonEdit;: TcxLabel;_New_Nach: TcxDateEdit;_Go_New_Nach: TAction;_Go_Nach_All: TAction;_Create_Nach_All: TAction;_Create_Nach_All: TcxTabSheet;_Create_Nach_All: TPanel;: TcxLabel;_Create_Nach_All: TcxButtonEdit;: TcxLabel;_Create_Nach_All: TcxDateEdit;_PC_NDS: TcxCheckBox;: TcxLabel;_PC_D_Start_Otrjv: TcxDateEdit;: TcxLabel;_PC_D_End_Otrjv: TcxDateEdit;_listeners_ID_ERP_End: TcxGridBandedColumn;_listeners_ID_Status_End: TcxGridBandedColumn;_listeners_ID_Paragraph_End: TcxGridBandedColumn;_Delete_Order_End: TAction;: TcxLabel;_Import_Curator: TcxPopupEdit;_Stat: TcxTabSheet;: TcxGroupBox;: TcxLabel;_Stat_Begin: TcxDateEdit;: TcxLabel;_Stat_End: TcxDateEdit;: TcxButton;_Read_Stat: TAction;_Stat: TcxGrid;_Stat: TcxGridBandedTableView;_Stat_FIO: TcxGridBandedColumn;_Stat_EG: TcxGridBandedColumn;_Stat_D_Start: TcxGridBandedColumn;_Stat_D_End: TcxGridBandedColumn;_Stat_Order_Start: TcxGridBandedColumn;_Stat_Order_End: TcxGridBandedColumn;_Stat_Contract: TcxGridBandedColumn;_Stat_Org: TcxGridBandedColumn;_Stat_Money: TcxGridBandedColumn;_Stat_Cert: TcxGridBandedColumn;_Stat_Hours_Fact: TcxGridBandedColumn;_Stat_Hours_Plan: TcxGridBandedColumn;_Stat_Last_Date: TcxGridBandedColumn;_Stat_ID_Student: TcxGridBandedColumn;_Stat_ID_E: TcxGridBandedColumn;_Stat_ID_EG: TcxGridBandedColumn;_Stat_ID_C: TcxGridBandedColumn;_Stat_Contract_Main: TcxGridBandedColumn;_Stat_Org_Main: TcxGridBandedColumn;_Stat_Money_NDS: TcxGridBandedColumn;_Stat_Level15: TcxGridLevel;_Stat_Spec_Name: TcxGridBandedColumn;: TcxLabel;_New_UMK_Hours_SR: TcxSpinEdit;_Make_Certificate: TAction;_listeners_Reg_Number: TcxGridBandedColumn;_New_Cert: TcxTabSheet;_New_Cert: TPanel;: TcxLabel;_New_Cert: TcxButtonEdit;: TcxLabel;_New_Cert_Reg: TcxSpinEdit;_Spin_Integer: TcxEditRepositorySpinItem;: TcxLabel;_New_Cert_Number: TcxSpinEdit;: TcxLabel;_New_Cert_Kind_Doc: TcxPopupEdit;_Go_New_Cert: TAction;_Kind_Doc_Cert: TcxGrid;_Kind_Doc_Cert: TcxGridBandedTableView;_Kind_Doc_Cert_Name: TcxGridBandedColumn;_Kind_Doc_Cert_ID: TcxGridBandedColumn;_Kind_Doc_Cert_Level15: TcxGridLevel;_listeners_Kind_Cert: TcxGridBandedColumn;_listeners_ID_Kind_Cert: TcxGridBandedColumn;: TcxLabel;_New_Cert_Hours: TcxSpinEdit;_Import_Mode: TcxRadioGroup;_Stat_Inst: TcxGridBandedColumn;_View_Certificate: TAction;_listeners_ID_Certificate: TcxGridBandedColumn;_listeners_ID_Doc_Cert: TcxGridBandedColumn;_listeners_Cert_Date: TcxGridBandedColumn;_listeners_ID_Reg: TcxGridBandedColumn;_Delete_Certificate: TAction;_MC: TcxTabSheet;: TcxGroupBox;: TcxLabel;_Filter_Start: TcxDateEdit;: TcxLabel;_Filter_End: TcxDateEdit;: TcxLabel;_Filter_Org: TcxPopupEdit;_MC: TcxGrid;_MC: TcxGridBandedTableView;_MC_Org: TcxGridBandedColumn;_MC_ID_Contract: TcxGridBandedColumn;_MC_Level15: TcxGridLevel;_MC_ID_CA: TcxGridBandedColumn;_MC_Start: TcxGridBandedColumn;_MC_End: TcxGridBandedColumn;_MC_Number: TcxGridBandedColumn;_MC_Old_Number: TcxGridBandedColumn;_MC_Kind: TcxGridBandedColumn;_MC_IDK_Order: TcxGridBandedColumn;_MC_ID_MT: TcxGridBandedColumn;_MC_ID_MO: TcxGridBandedColumn;_MC_ID_Paragraph: TcxGridBandedColumn;_MC_ID_Order: TcxGridBandedColumn;_MC_ID_ERP: TcxGridBandedColumn;_MC_ID_Status: TcxGridBandedColumn;_MC_User: TcxGridBandedColumn;_MC_Hisdate: TcxGridBandedColumn;_MC_Count: TcxGridBandedColumn;_MC_Order: TcxGridBandedColumn;_New_MC: TAction;_Insert_MC: TAction;_com_spec_sam: TcxGridBandedColumn;_Delete_Nach: TAction;_New_Money: TcxTabSheet;_New_Money: TPanel;_New_Money: TcxCurrencyEdit;: TcxLabel;_New_Money: TAction;_Go_New_Money: TAction;Action_Insert_tv_r_c_planExecute(Sender: TObject);Fill_tv_spec_div_popupExecute(Sender: TObject);tv_r_c_plan_name_specPropertiesInitPopup(Sender: TObject);cxPopupEdit_New_R_C_Plan_Spec_DivPropertiesInitPopup

(Sender: TObject);Action_Insert_tv_r_c_groupExecute(Sender: TObject);Fill_tv_com_specExecute(Sender: TObject);Fill_tv_ed_groupExecute(Sender: TObject);cxPopupEdit_New_R_C_Group_Met_ComplexPropertiesInitPopup

(Sender: TObject);Fill_tv_r_c_planExecute(Sender: TObject);cxPopupEdit_New_R_C_Group_Ed_GroupPropertiesInitPopup

(Sender: TObject);tv_r_c_groups_namePropertiesInitPopup(Sender: TObject);Fill_tv_r_c_groupsExecute(Sender: TObject);Fill_tv_listenersExecute(Sender: TObject);PageControl_MainPageChanging(Sender: TObject;: TcxTabSheet; var AllowChange: Boolean);Action_Insert_tv_listenersExecute(Sender: TObject);cxPopupEdit_New_Listener_Ed_GroupPropertiesEditValueChanged

(Sender: TObject);cxPopupEdit_New_Listener_Ed_GroupPropertiesInitPopup

(Sender: TObject);Fill_tv_kba_startExecute(Sender: TObject);cxPopupEdit_New_Listener_Kind_Basis_ActionPropertiesInitPopup

(Sender: TObject);Fill_tv_kind_orderExecute(Sender: TObject);cxPopupEdit_New_Listener_Kind_OrderPropertiesInitPopup

(Sender: TObject);Fill_tv_contractsExecute(Sender: TObject);cxPopupEdit_New_Listener_OrderPropertiesInitPopup

(Sender: TObject);Fill_tv_source_finansingExecute(Sender: TObject);_New_Listener_Contract_Source_FinansingPropertiesInitPopup

(Sender: TObject);cxDateEdit_New_Listener_D_StartPropertiesEditValueChanged

(Sender: TObject);cxDateEdit_New_Listener_D_EndPropertiesEditValueChanged

(Sender: TObject);cxDateEdit_New_Listener_Contract_D_StartPropertiesEditValueChanged

(Sender: TObject);cxDateEdit_New_Listener_Contract_D_EndPropertiesEditValueChanged

(Sender: TObject);tv_listeners_ed_groupPropertiesInitPopup(Sender: TObject);tv_listeners_kind_basis_actionPropertiesInitPopup

(Sender: TObject);Delete_tv_listenersExecute(Sender: TObject);Fill_tv_ordersExecute(Sender: TObject);tv_listenersEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);tv_r_c_groupsEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);tv_listenersSelectionChanged(Sender: TcxCustomGridTableView);tv_r_c_planSelectionChanged(Sender: TcxCustomGridTableView);tv_r_c_groupsSelectionChanged(Sender: TcxCustomGridTableView);Fill_AnketaExecute(Sender: TObject);cxPageControl_StudentPageChanging(Sender: TObject;: TcxTabSheet; var AllowChange: Boolean);Fill_Contract_ParamsExecute(Sender: TObject);Clear_ContractExecute(Sender: TObject);PC_ApplyExecute(Sender: TObject);PC_RefuseExecute(Sender: TObject);PC_AutorepresentativeExecute(Sender: TObject);Fill_tv_kind_directionExecute(Sender: TObject);cxPopupEdit_PC_Kind_DirectionPropertiesInitPopup(Sender: TObject);Action_Insert_New_DirectionExecute(Sender: TObject);cxButtonEdit_PC_Create_DirectionClick(Sender: TObject);tv_listeners_d_startPropertiesEditValueChanged(Sender: TObject);Action_Delete_ContractExecute(Sender: TObject);Action_Add_ContractExecute(Sender: TObject);cxPopupEdit_New_DirectionPropertiesInitPopup(Sender: TObject);cxPopupEdit_New_Listener_OrderPropertiesEditValueChanged

(Sender: TObject);Fill_tv_kba_endExecute(Sender: TObject);cxPopupEdit_KBA_EndPropertiesInitPopup(Sender: TObject);Action_End_EducationExecute(Sender: TObject);tv_r_c_planKeyDown(Sender: TObject; var Key: Word;: TShiftState);tv_r_c_planMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);tv_r_c_groupsKeyDown(Sender: TObject; var Key: Word;: TShiftState);tv_r_c_groupsMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);tv_listenersKeyDown(Sender: TObject; var Key: Word;: TShiftState);tv_listenersMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);FormDestroy(Sender: TObject);FormShow(Sender: TObject);Fill_tv_postsExecute(Sender: TObject);cxPopupEdit_PC_PostPropertiesInitPopup(Sender: TObject);tv_r_c_planEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);Fill_tv_planExecute(Sender: TObject);cxPopupEdit_Plan_Filters_PlanPropertiesInitPopup(Sender: TObject);Plan_ApplyExecute(Sender: TObject);Plan_RefuseExecute(Sender: TObject);Action_New_CuratorExecute(Sender: TObject);Action_Insert_CuratorExecute(Sender: TObject);Action_Main_ContractExecute(Sender: TObject);DateEdit_Set_Main_Contract_FindPropertiesEditValueChanged

(Sender: TObject);Action_Go_Set_Main_ContractExecute(Sender: TObject);Action_ImportExecute(Sender: TObject);PopupEdit_Import_SpecPropertiesEditValueChanged(Sender: TObject);ButtonEdit_Import_SpecClick(Sender: TObject);ButtonEdit_Import_Spec_DivClick(Sender: TObject);ButtonEdit_Import_UMKClick(Sender: TObject);ButtonEdit_Import_PlanClick(Sender: TObject);ButtonEdit_Import_EGClick(Sender: TObject);Action_After_Show_New_AnketaExecute(Sender: TObject);Action_New_SEExecute(Sender: TObject);Action_New_Contract_MainExecute(Sender: TObject);Action_Insert_Contract_MainExecute(Sender: TObject);Action_Create_NachExecute(Sender: TObject);Action_Go_New_NachExecute(Sender: TObject);Action_Go_Nach_AllExecute(Sender: TObject);Action_Create_Nach_AllExecute(Sender: TObject);Action_Delete_Order_EndExecute(Sender: TObject);Action_Read_StatExecute(Sender: TObject);Action_Make_CertificateExecute(Sender: TObject);Action_Go_New_CertExecute(Sender: TObject);ButtonEdit_New_CertPropertiesEditValueChanged(Sender: TObject);Action_View_CertificateExecute(Sender: TObject);Action_Delete_CertificateExecute(Sender: TObject);Filter_MC_Changed(Sender: TObject);Action_New_MCExecute(Sender: TObject);Action_Delete_NachExecute(Sender: TObject);Action_New_MoneyExecute(Sender: TObject);Action_Go_New_MoneyExecute(Sender: TObject);ButtonEdit_Import_OrderPropertiesEditValueChanged(: TObject);

{ Private declarations }: Excel2000.TExcelApplication;

ew: _Workbook;: _Worksheet;

{ Доступность редактирования учебных групп, сроков проведения и плана ПК }_Groups: Boolean;

{ Доступность просмотра мероприятий }_Event: Boolean;

{ Доступность всех действий с мероприятиями }_Event: Boolean;

{ Объект для работы со списками }_TableView: TSqlData_cxGridTableView;

{ Путь реестра (для загрузки/сохранения параметров) }_Reg_Path: String;

// Название программы и код подразделения при импорте

Import_Name_Spec, id_d_import, Import_Hours, Import_ID_EG, Import_EG_Name

,Import_FIO_Curator, Import_Hours_SR, id_d_kaf, idk_training: String;

{ Форма поиска человека }_Form_SE: TForm_SE;

{ Форма поиска организации }_Form_Find_Org: TForm_Find_Org;

{ Форма анкета }_Form_Anketa, Form_Anketa_For_New: TFUnivQuestionare;

// Текущие значения из файла импорта_sex, curr_surname, curr_name, curr_patronymic, curr_birthday

, curr_email, curr_phone: string;

{ Контейнеры оберток }_New_R_C_Plan: TContainerWrappers;_New_R_C_Group: TContainerWrappers;_New_Listener: TContainerWrappers;_Contract_Params: TContainerWrappers;_New_Direction: TContainerWrappers;_End_Education: TContainerWrappers;_Plan_Filters: TContainerWrappers;_New_Curator: TContainerWrappers;_Set_Main_Contract, cw_Filter_Contracts_Main: TContainerWrappers;_Import, cW_New_Spec, cW_New_Spec_Div, cw_New_UMK

, cw_New_Contract_Main, Cont_New_Nach, Cont_New_Nach_All

, Cont_Stat, Cont_Make_Cert, New_MC, cw_New_Money: TContainerWrappers;

{ Обработчики событий изменения в контейнерах оберток }

procedure DoChanged_cW_New_R_C_Plan(AWrapper: TCustomEditWrapper);DoChanged_cW_New_R_C_Group(AWrapper: TCustomEditWrapper);DoChanged_cW_New_Listener(AWrapper: TCustomEditWrapper);DoChanged_cW_Contract_Params(AWrapper: TCustomEditWrapper);DoChanged_cW_New_Direction(AWrapper: TCustomEditWrapper);DoChanged_cW_End_Education(AWrapper: TCustomEditWrapper);DoChanged_cW_Plan_Filters(AWrapper: TCustomEditWrapper);

{ Смена записи в tv_r_c_plan }

procedure ChoiceGridRecord(Sender: TSqlData_cxGridTableView;: TcxGridDataRow);

{ Смена записи в tv_listeners }OnChoiceGridRecord_tv_listeners(Sender: TSqlData_cxGridTableView;: TcxGridDataRow);

{ Действие перед изменением данных в tv_listeners }Before_Update_Exchange_tv_listeners

(Sender: TSqlData_cxGridTableView; UpdateValue: Variant;: TcxCustomGridTableItem; ARecordIndex: Integer;ExchangeParameters: OleVariant; var Allow: Boolean);

{ Установка доступности добавления }Allow_Insert(TV: TcxCustomGridTableView; Roles: array of Boolean);

{ Установка доступности редактирования таблицы (с документом) }

function Allow_Editing(TV: TcxCustomGridTableView;_Column: TcxGridColumn; ID_ERP_Column: TcxGridColumn;: array of Boolean): Boolean; overload;

{ Установка доступности редактирования таблицы (без документа) }

function Allow_Editing(TV: TcxCustomGridTableView;: array of Boolean): Boolean; overload;

{ Установка доступности удаления из таблицы (с документом) }

procedure Allow_Delete(TV: TcxCustomGridTableView;_Column: TcxGridColumn; ID_ERP_Column: TcxGridColumn;: array of Boolean); overload;

{ Установка доступности удаления из таблицы (без документа) }

procedure Allow_Delete(TV: TcxCustomGridTableView;: array of Boolean); overload;

{ Обработчик события после чтения в tv_listeners }

procedure After_Read_tv_listeners(Sender: TSqlData_cxGridTableView);

{ Включить/выключить параметры договора }ContractParamsEnabled(GB: TcxGroupBox; Enabled: Boolean);

{ Включить/выключить элементы для добавления студента/договора }

procedure StudentElementsEnabled(Enabled: Boolean);

{ Сохранение/восстановление параметров списков }Save_Restore_Params(RReg_Path: String = Reg_Path;_Load: Boolean = True);DoChanged_cW_Spec_Div(AWrapper: TCustomEditWrapper);

// Добавить-таки человека!OkNewEmp;

// Выбрать старого!}OkOldEmp;

// После удаления

procedure After_Delete(Sender: TSqlData_cxGridTableView);

// Параметры удаленияDelete_Main_Contract(Sender: TSqlData_cxGridTableView; ARecordIndex: Integer;ExchangeParameters: OleVariant);

{ Public declarations }

// Настройка списковInit(AReg_Path: String = Reg_Path; AForm_SE: TForm_SE = nil;_Find_Org: TForm_Find_Org = nil;_Anketa: TFUnivQuestionare = nil;_Anketa_For_New: TFUnivQuestionare = nil);

// Обновить ролиRefresh_Roles;

// Проверка доступности ко всей форме без создания ее самой!!!

class function IsRoleAccessible: Boolean;;_Event: TForm_Event;

{$R *.dfm}SysServices, Get_PK_PPS_Data, standart_new, get_single_data, LP_u_CX_tools;

{ Сохранение/восстановление параметров списков }TForm_Event.Save_Restore_Params(RReg_Path: String = Reg_Path;_Load: Boolean = True);.StorageName := RReg_Path + '\Общие параметры';PIs_Load then.RestoreFrom;VarToStr(cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].Value) <> ''cxPopupEdit_Plan_Filters_Plan.Tag := cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].Value;

cxPropertiesStore1.StoreTo(True);

{ Сохранение или загрузки параметров списков (в зависимости от параметра PIs_Load) }

Restore_cxGridTableView(tv_r_c_plan, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_r_c_plan).Table_Name);_cxGridTableView(tv_r_c_groups, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_r_c_groups).Table_Name);_cxGridTableView(tv_listeners, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_listeners).Table_Name);_cxGridTableView(tv_orders, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_orders).Table_Name);_cxGridTableView(tv_spec_div_popup, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_spec_div_popup).Table_Name);_cxGridTableView(tv_ed_group, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_ed_group).Table_Name);_cxGridTableView(tv_com_spec, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_com_spec).Table_Name);_cxGridTableView(tv_kba_start, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_kba_start).Table_Name);_cxGridTableView(tv_kind_order, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_kind_order).Table_Name);_cxGridTableView(tv_contracts, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_contracts).Table_Name);_cxGridTableView(tv_Source_Financing, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_Source_Financing)

.Table_Name);_cxGridTableView(tv_kind_direction, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_kind_direction).Table_Name);_cxGridTableView(tv_kba_end, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_kba_end).Table_Name);_cxGridTableView(tv_posts, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_posts).Table_Name);_cxGridTableView(tv_plan, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(tv_plan).Table_Name);_cxGridTableView(TTree_Curator, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(TTree_Curator).Table_Name);_cxGridTableView(TTree_Main_Contracts, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(TTree_Main_Contracts).Table_Name);_cxGridTableView(TTree_Nach, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(TTree_Nach).Table_Name);_cxGridTableView(TTree_Stat, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(TTree_Stat).Table_Name);_cxGridTableView(TTree_Kind_Doc_Cert, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(TTree_Kind_Doc_Cert).Table_Name);_cxGridTableView(TTree_MC, PIs_Load,_Path + Grid_Path + Get_SqlData_cxGrid(TTree_MC).Table_Name);

end;

{ Проверка доступности ко всей форме без создания ее самой! }

class function TForm_Event.IsRoleAccessible: Boolean;:= vnSessionAgent.IsRoleSomehowAccessible('', '',_Q_Edit_Groups) or vnSessionAgent.IsRoleSomehowAccessible('', '',_Q_Edit_Event) or vnSessionAgent.IsRoleSomehowAccessible('', '',_Q_View_Event) or vnSessionAgent.IsDBA;;

{ Проверка прав }TForm_Event.Refresh_Roles;: Boolean;

{ Проверка наличия ролей }:= vnSessionAgent.IsDBA;_Groups := DBA or vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Groups);_Event := DBA or vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Event);_Import.Enabled := DBA or vnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Event);

{ Проверка ролей для анкеты }_Form_Anketa.RefreshRoles(False);_New_SE.Enabled := DBAvnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Event);_SqlData_cxGrid(Current_Form_SE.cxGrid_FIO).ActionInsert.Enabled := Action_New_SE.Enabled;

{ Проверка доступности параметров договора }_cW_Contract_Params(cW_Contract_Params.wrappers

[cxButtonEdit_PC_Contract]);_r_c_planSelectionChanged(tv_r_c_plan);

// Доступность добавления рамочного договора_New_MC.Enabled := vnSessionAgent.IsDBAvnSessionAgent.IsRoleSomehowAccessible('', '', Action_Q_Edit_Event);;

{ Установка доступности добавления }TForm_Event.Allow_Insert(TV: TcxCustomGridTableView;: array of Boolean);: Integer;: Boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0) then// 1not FSqlData_TableView.IsFirstRead then// 2:= False;i := 0 to Length(Roles) - 1 do:= Allow or Roles[i];_TableView.ActionInsert.Enabled := Allow;// 2_TableView.ActionInsert.Enabled := False;

end; // 1;

{ Установка доступности редактирования таблицы (с документом) }

function TForm_Event.Allow_Editing(TV: TcxCustomGridTableView;_Column: TcxGridColumn; ID_ERP_Column: TcxGridColumn;: array of Boolean): Boolean;, id_erp: string;: Integer;: Boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0) then// 1(TV.DataController.FocusedRecordIndex <> -1) then// 2:= VarToStr(TV.DataController.Values

[TV.DataController.FocusedRecordIndex, Status_Column.Index]);_erp := VarToStr(TV.DataController.Values

[TV.DataController.FocusedRecordIndex, ID_ERP_Column.Index]);:= False;i := 0 to Length(Roles) - 1 do:= Allow or Roles[i];:= (status = '2') and (id_erp = vnSessionAgent.ID_ERP_User)Allow;// 2:= False;

end; // 1;

{ Установка доступности редактирования таблицы (без документа) }

function TForm_Event.Allow_Editing(TV: TcxCustomGridTableView;: array of Boolean): Boolean;: Integer;: Boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0) then// 1:= False;i := 0 to Length(Roles) - 1 do:= Allow or Roles[i];:= (TV.DataController.FocusedRecordIndex <> -1) and Allow;// 1:= False;;

{ Установка доступности удаления из таблицы (с документом) }

procedure TForm_Event.Allow_Delete(TV: TcxCustomGridTableView;_Column: TcxGridColumn; ID_ERP_Column: TcxGridColumn;: array of Boolean);: Integer;: Boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0) then// 1:= False;i := 0 to Length(Roles) - 1 do:= Allow or Roles[i];_TableView.ActionDelete.Enabled := Is_Value(Status_Column, '2',) and Is_Value(ID_ERP_Column, vnSessionAgent.ID_ERP_User, False) and

(TV.Controller.SelectedRecordCount > 0) and Allow;

end; // 1;

{ Установка доступности удаления из таблицы (без документа) }

procedure TForm_Event.Allow_Delete(TV: TcxCustomGridTableView;: array of Boolean);: Integer;: Boolean;_TableView := Get_SqlData_cxGrid(TV);(FSqlData_TableView <> nil) and (Length(Roles) > 0) then// 1:= False;i := 0 to Length(Roles) - 1 do:= Allow or Roles[i];_TableView.ActionDelete.Enabled :=

(TV.Controller.SelectedRecordCount > 0) and Allow;

end; // 1;

{ Включить/выключить параметры договора }

procedure TForm_Event.Clear_ContractExecute(Sender: TObject);_Contract_Params.ClearWrappers;;TForm_Event.ContractParamsEnabled(GB: TcxGroupBox; Enabled: Boolean);: Integer;.Enabled := Enabled;i := 0 to GB.ControlCount - 1 doGB.Controls[i] is TcxLabel then (GB.Controls[i] as TcxLabel)

.Enabled := Enabled;GB.Controls[i] is TcxDateEdit then (GB.Controls[i] as TcxDateEdit)

.Enabled := Enabled;GB.Controls[i] is TcxPopupEdit then (GB.Controls[i] as TcxPopupEdit)

.Enabled := Enabled;GB.Controls[i] is TcxSpinEdit then (GB.Controls[i] as TcxSpinEdit)

.Enabled := Enabled;GB.Controls[i] is TcxButtonEdit then (GB.Controls[i] as TcxButtonEdit)

.Enabled := Enabled;GB.Controls[i] is TcxCurrencyEdit then

(GB.Controls[i] as TcxCurrencyEdit)

.Enabled := Enabled;GB.Controls[i] is TcxTextEdit then (GB.Controls[i] as TcxTextEdit)

.Enabled := Enabled;;;TForm_Event.StudentElementsEnabled(Enabled: Boolean);.Enabled := Enabled;.Enabled := Enabled;.Enabled := Enabled;.Enabled := Enabled;.Enabled := Enabled;.Enabled := Enabled;_New_Listener_FIO.Enabled := Enabled;_New_Listener_Ed_Group.Enabled := Enabled;_New_Listener_D_Start.Enabled := Enabled;_New_Listener_D_End.Enabled := Enabled;_New_Listener_Kind_Basis_Action.Enabled := Enabled;_New_Listener_Order_Start.Enabled := Enabled;;TForm_Event.tv_listenersEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);, id_erp: string;

begin

{ Доступность редактирования столбцов: ФИО, Учебная группа, Дата начала,

Основание зачисления }(AItem = tv_listeners_fio) or (AItem = tv_listeners_ed_group) or

(AItem = tv_listeners_d_start) or (AItem = tv_listeners_kind_basis_action)// 1:= VarToStr(Sender.DataController.Values

[Sender.DataController.FocusedRecordIndex, tv_listeners_status_order_start.Index]);_erp := VarToStr(Sender.DataController.Values

[Sender.DataController.FocusedRecordIndex, tv_listeners_id_erp_user.Index]);:= (status = '2') and (id_erp = vnSessionAgent.ID_ERP_User)REdit_Event;// 1

{ Доступность сертификата}((AItem = tv_listeners_certificate) or (AItem = tv_listeners_hours)(AItem = tv_listeners_Reg_Number) or (AItem = tv_listeners_Kind_Cert)(AItem = tv_listeners_Cert_Date))AAllow := not VarIsNull(tv_listeners.DataController.Values

[Sender.DataController.FocusedRecordIndex, tv_listeners_certificate.Index])

and REdit_Event

{ Доступность редактирования Даты окончания }

if (AItem = tv_listeners_d_end)AAllow := not VarIsNull(tv_listeners.DataController.Values

[Sender.DataController.FocusedRecordIndex, tv_listeners_status_text_order_end.Index])REdit_EventAAllow := False;;TForm_Event.tv_listenersKeyDown(Sender: TObject; var Key: Word;: TShiftState);Key = VK_INSERT then_Insert(tv_listeners, [REdit_Event])if Key = VK_DELETE then_Delete(tv_listeners, tv_listeners_status_order_start,_listeners_id_erp_user, [REdit_Event]);;TForm_Event.tv_listenersMouseDown(Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);Button = mbRight then// 1_Insert(tv_listeners, [REdit_Event]);_listenersSelectionChanged(tv_listeners);; // 1

end;

{ Доступность действий на выделении}

procedure TForm_Event.tv_listenersSelectionChanged

(Sender: TcxCustomGridTableView);L: TIntegerList; i: integer;

begin

{ Установим доступность удаления студентов }

Allow_Delete(Sender, tv_listeners_status_order_start,_listeners_id_erp_user, [REdit_Event]);(Sender.Controller.SelectedRecordCount > 0) then// 1

{ Установим доступность добавления договора }_Add_Contract.Enabled := VarIsNull

(Sender.DataController.Values

[Sender.DataController.FocusedRecordIndex,_listeners_id_contract.Index]) and REdit_Event;

{ Установим доступность удаления договоров }_Delete_Contract.Enabled := (not Is_Value(tv_listeners_id_contract,

'', True)) and REdit_Event;

// Рамочный договор_Main_Contract.Enabled := Action_Delete_Contract.Enabled;

{ Установим доступность действия окончания обучения }

Action_End_Education.Enabled := Is_Value

(tv_listeners_status_text_order_end, '', False) and REdit_Event;

{ Установим доступность удаления окончания обучения }

Action_Delete_Order_End.Enabled := not Is_Value

(tv_listeners_status_text_order_end, '', True) and REdit_Event;

{ Установим доступность добавления удостоверения}_Make_Certificate.Enabled := Is_Value(tv_listeners_certificate, '', True)(not Is_Value(tv_listeners_status_text_order_end, '', False))REdit_Event;_View_Certificate.Enabled := not Is_Value(tv_listeners_certificate, '', True);

{ Установим доступность удаления удостоверения}_Delete_Certificate.Enabled := not Is_Value(tv_listeners_certificate, '', True)

and REdit_Event;

{ Установим доступность выставления начислений}

Action_Create_Nach_All.Enabled := REdit_EventAction_Delete_Contract.Enabled;

{ Установим доступность изменения стоимости договоров}

Action_New_Money.Enabled := Action_Create_Nach_All.Enabled;

{ Установим доступность удаления начислений}_Delete_Nach.Enabled := REdit_EventAction_Delete_Contract.Enabled;

{ Установим доступность удаления приказа об окончании}

if Action_Delete_Order_End.Enabledwith Sender.DataController do_SqlData_cxGrid(tv_listeners).GetSelectedRecordIndexList(L);i := 0 to L.Count - 1 do_Delete_Order_End.Enabled := Action_Delete_Order_End.Enabled(VarToStr(Values[L.Items[i], tv_listeners_ID_Status_End.Index]) = '2')(vnSessionAgent.IsDBA(VarToStr(Values[L.Items[i], tv_listeners_ID_ERP_End.Index]) = vnSessionAgent.ID_ERP_User));;// 2_Add_Contract.Enabled := False;_Delete_Contract.Enabled := False;_End_Education.Enabled := False;_Delete_Order_End.Enabled := False;_Make_Certificate.Enabled := False;_View_Certificate.Enabled := False;_Main_Contract.Enabled := False;_Delete_Certificate.Enabled := False;; // 2;TForm_Event.tv_listeners_d_startPropertiesEditValueChanged

(Sender: TObject);_Contract_Params.wrappers[cxDateEdit_PC_D_Start].Value := VarToStr

(tv_listeners.DataController.Values

[tv_listeners.DataController.FocusedRecordIndex,_listeners_d_start.Index]);;TForm_Event.tv_listeners_ed_groupPropertiesInitPopup(Sender: TObject);_tv_r_c_groupsExecute(self);;TForm_Event.tv_listeners_kind_basis_actionPropertiesInitPopup

(Sender: TObject);_tv_kba_startExecute(self);;TForm_Event.tv_r_c_groupsEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);:= Allow_Editing(Sender, [REdit_Groups, REdit_Event]);;TForm_Event.tv_r_c_groupsKeyDown(Sender: TObject; var Key: Word;: TShiftState);Key = VK_INSERT then_Insert(tv_r_c_groups, [REdit_Groups, REdit_Event]);;TForm_Event.tv_r_c_groupsMouseDown(Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);Button = mbRight then_Insert(tv_r_c_groups, [REdit_Groups, REdit_Event]);;TForm_Event.tv_r_c_groupsSelectionChanged

(Sender: TcxCustomGridTableView);Sender = TTree_MCwith TTree_MC.Controller do_SqlData_cxGrid(TTree_MC).ActionDelete.Enabled :=

(SelectedRowCount > 0)Get_SqlData_cxGrid(TTree_MC).ActionInsert.EnabledIs_Value(Tree_MC_ID_Status, '2', False)(vnSessionAgent.IsDBA or vnSessionAgent.IsRoleAccessible('', '', '902'

, [VarToStr(SelectedRows[0].Values[Tree_MC_ID_MT.Index])]

, [VarToStr(SelectedRows[0].Values[Tree_MC_ID_MO.Index])]

, [VarToStr(SelectedRows[0].Values[Tree_MC_ID_ERP.Index])]))Allow_Delete(Sender, [REdit_Groups, REdit_Event]);;TForm_Event.tv_r_c_groups_namePropertiesInitPopup(Sender: TObject);_tv_ed_groupExecute(self);;TForm_Event.tv_r_c_planEditing(Sender: TcxCustomGridTableView;: TcxCustomGridTableItem; var AAllow: Boolean);:= Allow_Editing(Sender, tv_r_c_plan_status_order,_r_c_plan_id_erp_user, [REdit_Groups, REdit_Event]);;TForm_Event.tv_r_c_planKeyDown(Sender: TObject; var Key: Word;: TShiftState);Key = VK_INSERT then_Insert(tv_r_c_plan, [REdit_Groups, REdit_Event]);;TForm_Event.tv_r_c_planMouseDown(Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);Button = mbRight then_Insert(tv_r_c_plan, [REdit_Groups, REdit_Event]);;TForm_Event.tv_r_c_planSelectionChanged

(Sender: TcxCustomGridTableView);_Delete(Sender, tv_r_c_plan_status_order, tv_r_c_plan_id_erp_user,

[REdit_Groups, REdit_Event]);;TForm_Event.tv_r_c_plan_name_specPropertiesInitPopup(Sender: TObject);_tv_spec_div_popupExecute(self);;

{ Добавить-таки человека!}TForm_Event.OkNewEmp;db: variant;Form_Anketa_For_New.DATE_OF_BIRTH.text = ''dB := NULLdB := StrToDate(Form_Anketa_For_New.DATE_OF_BIRTH.text);_Form_SE.SetNewFIO(1, VarArrayOf([StrToInt(Form_Anketa_For_New.ID_E)

, Form_Anketa_For_New.SURNAME.Text

, Form_Anketa_For_New.ENAME.Text

, Form_Anketa_For_New.PATRONYMIC.Text

, dB

, StrToInt(Form_Anketa_For_New.ID_CONTRACTOR)]));;

{ Выбрать старого!}TForm_Event.OkOldEmp;db: variant;{Cont_New_PA_Single,} Form_Anketa_For_New, cxTableViewSimilar.DataController doVarToStr(Values[FocusedRecordIndex, cxTableViewSimilarDATEOFBIRTH.index]) = ''dB := NULLdB := Values[FocusedRecordIndex, cxTableViewSimilarDATEOFBIRTH.index];_Form_SE.SetNewFIO(1, VarArrayOf([[FocusedRecordIndex, Form_Anketa_For_New.cxTableViewSimilarID_E.index]

, Values[FocusedRecordIndex, Form_Anketa_For_New.cxTableViewSimilarSurname.index]

, Values[FocusedRecordIndex, Form_Anketa_For_New.cxTableViewSimilarName.index]

, Values[FocusedRecordIndex, Form_Anketa_For_New.cxTableViewSimilarPatronymic.index]

, dB

, Values[FocusedRecordIndex, Form_Anketa_For_New.cxTableViewSimilarIDContractor.index]]));;;

{ После удаления}TForm_Event.After_Delete(Sender: TSqlData_cxGridTableView);Sender.GridTableView = TTree_NachSender.Read_Data;;

{ Параметры удаления}TForm_Event.Delete_Main_Contract(Sender: TSqlData_cxGridTableView; ARecordIndex: Integer;ExchangeParameters: OleVariant);Sender.GridTableView = TTree_MC thenTTree_MC.DataController do:= CreateVarAr([VarToStr(Values[ARecordIndex, Tree_MC_ID_Contract.Index])]);

end;

{ Импорт участников из внешнего файла }

procedure TForm_Event.Action_ImportExecute(Sender: TObject);, j, k, LCID, res: Integer;_id_e, curr_id_contractor, last_dog, curr_day: String;: OleVariant;_form: TSForm;_find: boolean;

// Если открыли файлImport_File.Execute then:= TExcelApplication.Create(self);.ConnectKind := ckNewInstance;.Connect;:= ea.Workbooks.Open(Import_File.FileName, EmptyParam, EmptyParam,, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,, EmptyParam, EmptyParam, EmptyParam, LCID);:= ew.Worksheets.Item[1] as _Worksheet;:= 1;VarToStr(wsh.Cells.Item[i, 1]) = '' do:= i + 1;;_d_import := '';_d_kaf := '';_training := '';_EG_Name := VarToStr(wsh.Cells.Item[i + 4, 2]);_FIO_Curator := VarToStr(wsh.Cells.Item[i + 4, 4]);:= MSystemServices.SelectData(Get_ID_Spec_By_Name,([VarToStr(wsh.Cells.Item[i + 1, 2])

, VarToStr(wsh.Cells.Item[i, 2])

, VarToStr(wsh.Cells.Item[i + 2, 2])

, VarToStr(wsh.Cells.Item[i + 2, 3])

, VarToStr(wsh.Cells.Item[i + 5, 2])

, Import_EG_Name

, Import_FIO_Curator

, VarToStr(wsh.Cells.Item[i + 5, 4])

, VarToStr(wsh.Cells.Item[i, 4])])

, j, 'Не смогли найти программу');

// Если нет еще контейнера - создадим!

if cW_Import = nil then_Import := TContainerWrappers.Create;_Import.AddCustomEdit(DateEdit_Import_Start, True, False, '');_Import.AddCustomEdit(DateEdit_Import_End, True, False, '');_Import.AddCustomEdit(DateEdit_Import_Start_Otrjv, False, False, '');_Import.AddCustomEdit(DateEdit_Import_End_Otrjv, False, False, '');_Import.AddCustomEdit(CurrencyEdit_Import_Money, False, False, '');_Import.AddCustomEdit(CurrencyEdit_Import_NDS, False, False, '');_Import.AddCustomEdit(DateEdit_Import_Reference, True, False, '');_Import.AddPopupEdit(PopupEdit_Import_Spec, True, False, nil, nil,_Spec_ID, [tv_Spec_Name], '');_Import.AddPopupEdit(PopupEdit_Import_Spec_Div, True, False, nil, nil

, tv_spec_div_popup_id_spec_div

, [tv_spec_div_popup_institute, tv_spec_div_popup_name_div, tv_spec_div_popup_name_spec, tv_spec_div_popup_kind_training], '');_Import.AddPopupEdit(PopupEdit_Import_UMK, True, False

, cxGrid_Com_Spec, tv_com_spec, tv_com_spec_id_met_complex

, [tv_com_spec_hours, tv_com_spec_sam, tv_com_spec_name_spec, tv_com_spec_name_div, tv_com_spec_kind_training], '');_Import.AddPopupEdit(PopupEdit_Import_Plan, True, False

, cxGrid_R_C_Plan, tv_r_c_plan, tv_r_c_plan_id_r_c_plan

, [tv_r_c_plan_institute, tv_r_c_plan_name_spec, tv_r_c_plan_kind_training], '');_Import.AddPopupEdit(PopupEdit_Import_EG, True, False

, cxGrid_Ed_Group, tv_ed_group, tv_ed_group_id_ed_group, [tv_ed_group_name], '');_Import_Curator.Properties.PopupControl := Current_Form_SE;_Import.AddPopupEdit(PopupEdit_Import_Curator, False, False,_Form_SE.cxGrid1, Current_Form_SE.cxGrid_FIO,_Form_SE.cxGrid_FIO_ID_E, [Current_Form_SE.cxGrid_FIO_Full], '');_Import.AddButtonOrderEdit(ButtonEdit_Import_Order, True, False, ''

, ['200']

, [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW]

, [nil, nil, nil, nil]);_Import.AddButtonOrderEdit(ButtonEdit_Import_Nach, True, False, ''

, ['436']

, [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW]

, [nil, nil, nil, nil]);

//cW_Import.ActionEnter := Action_Go_Import;;_Import.ClearWrappers;_Import.Wrappers[DateEdit_Import_Reference].Value := DateToStr(Date);

// Нашли программу?VarIsArray(data) then_Import.wrappers[DateEdit_Import_Start].Value := VarToStr(data[0][0]);_Import.wrappers[DateEdit_Import_End].Value := VarToStr(data[0][1]);_Import.Wrappers[DateEdit_Import_Start_Otrjv].Value := VarToStr(wsh.Cells.Item[i + 3, 2]);_Import.Wrappers[DateEdit_Import_End_Otrjv].Value := VarToStr(wsh.Cells.Item[i + 3, 3]);_Import.Wrappers[CurrencyEdit_Import_Money].Value := VarToStr(wsh.Cells.Item[i + 6, 2]);_Import.Wrappers[CurrencyEdit_Import_NDS].Value := VarToStr(wsh.Cells.Item[i + 7, 2]);VarToStr(data[0][3]) <> ''_Import.wrappers[PopupEdit_Import_Spec].Value := VarToStr(data[0][3]);_Import.wrappers[PopupEdit_Import_Spec].ValueDisplay := VarToStr(data[0][2]);

end;

// Специальность подразделения (Организатор)VarToStr(data[0][5]) <> ''

then_Import.wrappers[PopupEdit_Import_Spec_Div].Value := VarToStr(data[0][5]);

// А если он пустой еще?

Get_SqlData_cxGrid(tv_spec_div_popup).Read_Data_First;:= FindGridRecordIndex(tv_spec_div_popup, [tv_spec_div_popup_id_spec_div]

, CreateVarAr([VarToStr(data[0][5])]));i >= 0cW_Import.wrappers[PopupEdit_Import_Spec_Div].ValueDisplay :=(tv_spec_div_popup.DataController.Values[i, tv_spec_div_popup_institute.Index])

+ ', ' + VarToStr(tv_spec_div_popup.DataController.Values[i, tv_spec_div_popup_name_div.Index])

+ ', ' + VarToStr(tv_spec_div_popup.DataController.Values[i, tv_spec_div_popup_name_spec.Index])

+ ', ' + VarToStr(tv_spec_div_popup.DataController.Values[i, tv_spec_div_popup_kind_training.Index]);;

// ПланVarToStr(data[0][6]) <> ''_Import.wrappers[PopupEdit_Import_Plan].Value := VarToStr(data[0][6]);_Import.wrappers[PopupEdit_Import_Plan].ValueDisplay :=_Import.wrappers[PopupEdit_Import_Spec_Div].ValueDisplay;

end

// Нет плана - заполним поля для добавления!

else begin_Import.Wrappers[PopupEdit_Import_Plan].Clear;_New_R_C_Plan.Wrappers[cxPopupEdit_New_R_C_Plan_Spec_Div].Value :=_Import.Wrappers[PopupEdit_Import_Spec_Div].Value;_New_R_C_Plan.Wrappers[cxPopupEdit_New_R_C_Plan_Spec_Div].ValueDisplay :=_Import.Wrappers[PopupEdit_Import_Spec_Div].ValueDisplay;_New_R_C_Plan.Wrappers[cxDateEdit_New_R_C_Plan_D_Start].ValueDisplay :=_Import.Wrappers[DateEdit_Import_Start].ValueDisplay;_New_R_C_Plan.Wrappers[cxDateEdit_New_R_C_Plan_D_End].ValueDisplay :=_Import.Wrappers[DateEdit_Import_End].ValueDisplay;VarToStr(data[0][10]) <> ''begin_New_R_C_Plan.Wrappers[cxButtonEdit_New_R_C_Plan_Paragraph].Value := VarToStr(data[0][10]);_New_R_C_Plan.Wrappers[cxButtonEdit_New_R_C_Plan_Paragraph].ValueDisplay := VarToStr(data[0][11]);;;

// УМКVarToStr(data[0][8]) <> ''_Import.wrappers[PopupEdit_Import_UMK].Value := VarToStr(data[0][8]);:= FindGridRecordIndex(tv_com_spec, [tv_com_spec_id_met_complex]

, CreateVarAr([VarToStr(data[0][8])]));i >= 0cW_Import.wrappers[PopupEdit_Import_UMK].ValueDisplay :=(tv_com_spec.DataController.Values[i, tv_com_spec_hours.Index])

+ ', ' + VarToStr(VarToStr(tv_com_spec.DataController.Values[i, tv_com_spec_sam.Index])

+ ', ' + VarToStr(tv_com_spec.DataController.Values[i, tv_com_spec_name_spec.Index])

+ ', ' + tv_com_spec.DataController.Values[i, tv_com_spec_name_div.Index])

+ ', ' + VarToStr(tv_com_spec.DataController.Values[i, tv_com_spec_kind_training.Index]);;

// Учебная группаVarToStr(data[0][12]) <> ''_Import.wrappers[PopupEdit_Import_EG].Value := VarToStr(data[0][12]);_Import.wrappers[PopupEdit_Import_EG].ValueDisplay := Import_EG_Name;cW_Import.Wrappers[PopupEdit_Import_EG].Clear;

// КураторVarToStr(data[0][14]) <> ''_Import.wrappers[PopupEdit_Import_Curator].Value := VarToStr(data[0][14]);_Import.wrappers[PopupEdit_Import_Curator].ValueDisplay := Import_FIO_Curator;cW_Import.Wrappers[PopupEdit_Import_Curator].Clear;_Name_Spec := VarToStr(data[0][2]);_d_import := VarToStr(data[0][7]);_Hours := VarToStr(data[0][9]);_Hours_SR := VarToStr(data[0][15]);_ID_EG := VarToStr(data[0][13]);_d_kaf := VarToStr(data[0][16]);

//id_d_import := VarToStr(data[0][17]);_Import.ClearWrappers;_Import.wrappers[DateEdit_Import_Start].Value := VarToStr

(wsh.Cells.Item[i + 2, 2]);_Import.wrappers[DateEdit_Import_End].Value := VarToStr

(wsh.Cells.Item[i + 2, 3]);_Name_Spec := VarToStr(wsh.Cells.Item[i + 1, 2]);;_form := CreateSForm(self, 'fImport', TabSheet_Import.Caption,_Path + TabSheet_Import.Caption, Panel_Import, tdb_Apply);_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := cW_Import.ActionEnter;_form.ShowModal;

{ Импортируем наконец-то...}.Enabled := False;new_form.ModalResult = mrok then

begin

// Поиск договоров:= 10;:= 0;

last_dog := '';(VarToStr(wsh.Cells.Item[i, 2]) <> '') do

begin

// А зачем проверять его еще раз?

if ((last_dog = '') or (last_dog <> VarToStr(wsh.Cells.Item[i, 7])))(VarToStr(wsh.Cells.Item[i, 7]) <> '')_dog := VarToStr(wsh.Cells.Item[i, 7]);:= MSystemServices.SelectData(Find_Contract_By_Number

, CreateVarAr([VarToStr(wsh.Cells.Item[i, 7])

, VarToStr(cW_Import.Wrappers[DateEdit_Import_Start].Value)])

, j);

// Нет такого договора - создадим!

if not VarIsArray(data) then_New_Contract_Main.ClearWrappers;_New_Contract_Main.Wrappers[TextEdit_New_Contract_Main].Value

:= VarToStr(wsh.Cells.Item[i, 7]);_New_Contract_Main.Wrappers[DateEdit_New_Contract_Main_Start].Value

:= '01.01.' + VarToStr(YearOf(StrToDate(VarToStr(cW_Import.Wrappers[DateEdit_Import_Start].Value))));_New_Contract_Main.Wrappers[DateEdit_New_Contract_Main_End].Value

:= '31.12.' + VarToStr(YearOf(StrToDate(VarToStr(cW_Import.Wrappers[DateEdit_Import_End].Value))));

// Добавить договор_New_Contract_Main.Execute;;;:= i + 1;;_Import.Properties.Min := 1;_Import.Properties.Max := i - 10;_Import.Visible := True;_Import.Position := 0;:= 10;VarToStr(wsh.Cells.Item[i, 2]) <> '' do_Import.Position := i - 9;_Import.Refresh;Trim(VarToStr(wsh.Cells.Item[i, 6])) = '31.12.1899'curr_day := '01.01.1900'curr_day := Trim(VarToStr(wsh.Cells.Item[i, 6]));

{j := ord(Copy(VarToStr(wsh.Cells.Item[i, 3]), 10, 1));.ShowVNDialog(vnd_Information

, IntToStr(ord(Copy(VarToStr(wsh.Cells.Item[i, 2]), 8, 1)))

, IntToStr(j));}_FIO.Caption := //IntToStr(ord(Copy(VarToStr(wsh.Cells.Item[i, 3]), 10, 1)))

//+(VarToStr(wsh.Cells.Item[i, 2]))

+ ' ' + Trim(VarToStr(wsh.Cells.Item[i, 3]))

+ ' ' + Trim(VarToStr(wsh.Cells.Item[i, 4]))

+ ', ' + Trim(VarToStr(wsh.Cells.Item[i, 5]))

+ ', ' + curr_day;_FIO.Refresh;.ProcessMessages;_id_e := '';_id_contractor := '';_find := RadioGroup_Import_Mode.ItemIndex <> 2;not need_find_find := not (FindGridRecord(tv_listeners, [tv_listeners_fio]

, CreateVarAr([VarToStr(Trim(VarToStr(wsh.Cells.Item[i, 2])))

+ ' ' + Trim(VarToStr(wsh.Cells.Item[i, 3]))

+ ' ' + Trim(VarToStr(wsh.Cells.Item[i, 4]))])) <> nil);

end;

// А надо ли искать человека?need_find then

// Сначала поищем человека скрытно

with Get_SqlData_cxGrid(Form_Anketa_For_New.cxTableViewSimilar),.DataController do[1] := Trim(VarToStr(wsh.Cells.Item[i, 2]));[2] := Trim(VarToStr(wsh.Cells.Item[i, 3]));[3] := Trim(VarToStr(wsh.Cells.Item[i, 4]));[4] := '';_Data;RecordCount > 0begink := 0 to RecordCount - 1 do

// 100% совпадение(VarToStr(Values[k, Form_Anketa_For_New.cxTableViewSimilarSimDegree.Index]) = '100')

// вплоть до дня рождения(StrToDate(VarToStr(Values[k, Form_Anketa_For_New.cxTableViewSimilarDATEOFBIRTH.Index]))

= (StrToDate(curr_day)))begin_id_e := VarToStr(Values[k, Form_Anketa_For_New.cxTableViewSimilarID_E.Index]);_id_contractor := VarToStr(Values[k, Form_Anketa_For_New.cxTableViewSimilarIDContractor.Index]);

end;;

// Все-таки не нашли однозначное соответствие, моделируем ввод новой анкеты!

if (curr_id_e = '') and (RadioGroup_Import_Mode.ItemIndex <> 1)_Anketa_For_New.ClearForm;_Anketa_For_New.ModalResult := 0;(trim(VarToStr(wsh.Cells.Item[i, 5])) = 'ж')(trim(VarToStr(wsh.Cells.Item[i, 5])) = 'Ж')curr_sex := '2'curr_sex := '1';_surname := Trim(VarToStr(wsh.Cells.Item[i, 2]));_name := Trim(VarToStr(wsh.Cells.Item[i, 3]));_patronymic := Trim(VarToStr(wsh.Cells.Item[i, 4]));_birthday := curr_day;_email := VarToStr(wsh.Cells.Item[i, 12]);_phone := VarToStr(wsh.Cells.Item[i, 13]);

// Заполним поля - там откроется поиск, если надо с выбором

Action_After_Show_New_Anketa.Execute;

// Откроем поиск подобных без самой анкеты!

//curr_id_e := Form_Anketa_For_New.ShowSimilaryDialog(1, False);Form_Anketa_For_New.id_e <> ''with Form_Anketa_For_New.cxTableViewSimilar.DataController do_id_e := VarToStr(Values[FocusedRecordIndex, Form_Anketa_For_New.cxTableViewSimilarID_E.Index]);_id_contractor := VarToStr(Values[FocusedRecordIndex, Form_Anketa_For_New.cxTableViewSimilarIDContractor.Index]);

end

// Если никого не выбрали, то откроем окно ввода нового человека

begin_Anketa_For_New.Not_Clear_On_Show := True;Form_Anketa_For_New.ShowNewEmpForm of:_id_e := Form_Anketa_For_New.ID_E;_id_contractor := Form_Anketa_For_New.ID_CONTRACTOR;;: with Form_Anketa_For_New.cxTableViewSimilar.DataController do_id_e := VarToStr(Values[FocusedRecordIndex

, Form_Anketa_For_New.cxTableViewSimilarID_E.Index]);_id_contractor := VarToStr(Values[FocusedRecordIndex

, Form_Anketa_For_New.cxTableViewSimilarIDContractor.Index]);;;_Anketa_For_New.Not_Clear_On_Show := False;

end;;

// Есть человек - Добавим все необходимое для слушателя!

if curr_id_e <> ''with cW_Import do

begin

// Сначала проверим наличие этого слушателя в группе

data := MSystemServices.SelectData(Get_ID_Student_By_ID_E_ID_EG

, CreateVarAr([curr_id_e

, VarToStr(cW_Import.Wrappers[PopupEdit_Import_EG].Value)

, VarToStr(cW_Import.Wrappers[DateEdit_Import_Start].Value)])

, j, 'Не смогли найти слушателя в группе');

// Нет слушателя - добавим!not VarIsArray(data)MSystemServices.ExchangeData(Create_Slushatel

, CreateVarAr([curr_id_e

, VarToStr(cW_Import.Wrappers[PopupEdit_Import_Spec_Div].Value)

, VarToStr(wsh.Cells.Item[i, 7])

, VarToStr(cW_Import.Wrappers[DateEdit_Import_Start].Value)

, VarToStr(cW_Import.Wrappers[DateEdit_Import_End].Value)

, VarToStr(cW_Import.Wrappers[ButtonEdit_Import_Order].Value)

, VarToStr(cW_Import.Wrappers[PopupEdit_Import_EG].Value)

, VarToStr(wsh.Cells.Item[i, 11])

, VarToStr(wsh.Cells.Item[i, 9])

, VarToStr(wsh.Cells.Item[i, 10])

, VarToStr(wsh.Cells.Item[i, 8])

, VarToStr(cW_Import.Wrappers[DateEdit_Import_Start_Otrjv].Value)

, VarToStr(cW_Import.Wrappers[DateEdit_Import_End_Otrjv].Value)

, VarToStr(cW_Import.Wrappers[CurrencyEdit_Import_Money].Value)

, VarToStr(cW_Import.Wrappers[CurrencyEdit_Import_NDS].Value)

, VarToStr(cW_Import.Wrappers[ButtonEdit_Import_Nach].Value)

, VarToStr(cW_Import.Wrappers[DateEdit_Import_Reference].Value)

, VarToStr(cW_Import.Wrappers[PopupEdit_Import_Curator].Value)]))

then:= res + 1;

// Обновим им данные, пусть порадуются, что ли?

Get_SqlData_cxGrid(tv_listeners).Read_Data;_Listeners.Refresh;(cW_Import.Wrappers[ButtonEdit_Import_Order]).IsEmpty := False;(cW_Import.Wrappers[ButtonEdit_Import_Nach]).IsEmpty := False;;; // Надо искать?

i := i + 1;; // Цикл по людям в файле.ShowVNDialog(vnd_Information, 'Результат обработки файла'

, 'Добавлено слушателей: ' + IntToStr(res));

if res > 0Get_SqlData_cxGrid(tv_listeners).Read_Data;tv_listeners.Controller.FocusedRecord <> nilOnChoiceGridRecord_tv_listeners(Get_SqlData_cxGrid(tv_listeners)

, TcxGridDataRow(tv_listeners.Controller.FocusedRecord))OnChoiceGridRecord_tv_listeners(Get_SqlData_cxGrid(tv_listeners)

, nil);; // Закрыли окно импорта

if assigned(new_form)FreeAndNil(new_form);_Import.Visible := False;.Enabled := True;;.Close(False, EmptyParam, EmptyParam, LCID);.Disconnect;.Free;_tv_listenersExecute(self);_Import.Visible := False;;;

{ Добавить новый договор }TForm_Event.Action_Insert_Contract_MainExecute(Sender: TObject);_New_Contract_Main.ChangesAcceptWrappers;cw_New_Contract_Main doMSystemServices.ExchangeData(Create_New_Contract_Main

, CreateVarAr([VarToStr(Wrappers[ButtonEdit_New_Contract_Main].Value)

, VarToStr(Wrappers[PopupEdit_New_Contract_Main].Value)

, VarToStr(Wrappers[DateEdit_New_Contract_Main_Start].Value)

, VarToStr(Wrappers[DateEdit_New_Contract_Main_End].Value)]))(cw_New_Contract_Main.Wrappers[ButtonEdit_New_Contract_Main]).IsEmpty := False;_New_Contract_Main.Wrappers[ButtonEdit_New_Contract_Main].Clear;_SqlData_cxGrid(TTree_Main_Contracts).IsFirstRead := True;(Panel_New_Contract_Main).ModalResult := mrok;

end;;

{ Добавление куратора в БД }

procedure TForm_Event.Action_Insert_CuratorExecute(Sender: TObject);_New_Curator.ChangesAcceptWrappers;Get_SqlData_cxGrid(TTree_Curator).Insert_New

(CreateVarAr([VarToStr(cW_New_Curator.wrappers[DateEdit_New_Curator]

.Value),(cW_New_Curator.wrappers[PopupEdit_New_Curator_FIO].Value),(Get_SqlData_cxGrid(TTree_Curator).Parameters[1])])) then(Panel_New_Curator).ModalResult := mrok;(GetParentForm(Panel_Import).Handle);;;TForm_Event.Action_Insert_New_DirectionExecute(Sender: TObject);

const= 'Направление на оплату';

var: TSForm;: Boolean;_o, id_p, def_Ann, def_Basis, def_Note, def_Ass, NewContextIndex, IDk_List,_List_Name, ko_ID_Metaterm, kind_order, def_Ident, def_IdenDate,_Period_Nubbering, id_NewSeries, NewSeries: WideString;: TStringList;// 1:= CreateSForm(self, 'fNew_Direction', Name, Add_Path + Name,_New_Direction, tdb_Apply);_New_Direction.OnChangeWrapper(nil);mf.ShowModal = mrok then// 2_order := VarToStr

(cW_New_Direction.wrappers

[cxPopupEdit_New_Direction].Value);:= TStringList.Create;.Add(kind_order);_o := vnListAgent.LA_CreateList(ks, def_Ann, def_Basis, def_Note,_Ass, NewContextIndex, IDk_List, k_List_Name, ko_ID_Metaterm, '',);id_o = EmptyWideStr then// 3.Free;;; // 3_p := vnListAgent.LA_CreateList(ks, def_Ann, def_Basis, def_Note,_Ass, NewContextIndex, IDk_List, k_List_Name, ko_ID_Metaterm, id_o,);.Free;id_p = EmptyWideStr then;

// отправить на подпись..LA_Send_Signature(id_o, '', datetostr(now), True);.LA_SetIdentifier(id_o, def_Ident, ID_Period_Nubbering,_NewSeries, NewSeries, def_IdenDate, True, False,

'Регистрация направления.');

// добавить направление:= MSystemServices.ExchangeData(Add_Direction,([id_p,(tv_listeners.DataController.Values

[tv_listeners.DataController.FocusedRecordIndex,_listeners_id_contract.Index])

]));ok then_Contract_ParamsExecute(self);; // 2// 1assigned(mf) then(mf);; // 1;TForm_Event.Action_Insert_tv_listenersExecute(Sender: TObject);= 'Участники';: TSForm;_o, id_p, def_Ann, def_Basis, def_Note, def_Ass, NewContextIndex, IDk_List,_List_Name, ko_ID_Metaterm, kind_order, def_Ident, def_IdenDate,_Period_Nubbering, id_NewSeries, NewSeries: WideString;: TStringList;: Boolean;:= False;// 1:= CreateSForm(self, 'fNew_Listeners', Name, Add_Path + Name,_New_Listener, tdb_Apply);_New_Listener.wrappers[cxPopupEdit_New_Listener_Contract_Source_Finansing]

.Value := VarToStr(tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_id_source.Index]);_New_Listener.wrappers[cxPopupEdit_New_Listener_Contract_Source_Finansing]

.ValueDisplay := VarToStr(tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_source.Index]);_New_Listener.wrappers[cxCurrencyEdit_New_Listener_Contract_Money]

.Value := VarToStr(tv_r_c_plan.DataController.GetValue

(tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_money.Index));_New_Listener.wrappers[cxCurrencyEdit_New_Listener_Contract_Money]

.ValueDisplay := tv_r_c_plan.DataController.GetDisplayText

(tv_r_c_plan.DataController.FocusedRecordIndex, tv_r_c_plan_money.Index);_New_Listener.OnChangeWrapper(nil);mf.ShowModal = mrok then// 2_TableView := Get_SqlData_cxGrid(tv_listeners);((FSqlData_TableView <> nil) and (VarToStr(cW_New_Listener.wrappers

[cxPopupEdit_New_Listener_Kind_Order].Value) <> '') and

(cxPopupEdit_New_Listener_Order.Enabled) and

(VarToStr(cW_New_Listener.wrappers[cxPopupEdit_New_Listener_Order]

.Value) = '')) then// 3_order := VarToStr(cW_New_Listener.wrappers

[cxPopupEdit_New_Listener_Kind_Order].Value);:= TStringList.Create;.Add(kind_order);_o := vnListAgent.LA_CreateList(ks, def_Ann, def_Basis, def_Note,_Ass, NewContextIndex, IDk_List, k_List_Name, ko_ID_Metaterm, '',);id_o = EmptyWideStr then// 4.Free;;; // 4_p := vnListAgent.LA_CreateList(ks, def_Ann, def_Basis, def_Note,_Ass, NewContextIndex, IDk_List, k_List_Name, ko_ID_Metaterm,_o, False);.Free;id_p = EmptyWideStr then;

// отправить на подпись..LA_Send_Signature(id_o, '', datetostr(now), True);.LA_SetIdentifier(id_o, def_Ident, ID_Period_Nubbering,_NewSeries, NewSeries, def_IdenDate, True, False,

'Регистрация договора');_New_Listener_Contract_Money.Properties.EditFormat :=

'0.00';_New_Listener_Contract_Money.Properties.:= False;:= MSystemServices.ExchangeData(Add_Contract,([cW_New_Listener.wrappers[cxPopupEdit_New_Listener_FIO]

.Value, cW_New_Listener.wrappers[_New_Listener_Contract_Organization].Value,_New_Listener.wrappers[cxDateEdit_New_Listener_D_Start].Value,_New_Listener.wrappers[cxDateEdit_New_Listener_D_End].Value,_p, cW_New_Listener.wrappers[_New_Listener_Contract_Source_Finansing].Value,(tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_id_spec_div.Index]),_New_Listener.wrappers[cxPopupEdit_New_Listener_Ed_Group].Value,_New_Listener.wrappers[cxPopupEdit_New_Listener_Kind_Basis_Action]

.Value, cW_New_Listener.wrappers

[cxButtonEdit_New_Listener_Order_Start].Value,(cxCurrencyEdit_New_Listener_Contract_Money.EditValue),

'', cW_New_Listener.wrappers[cxTextEdit_New_Listener_Basis].Value,_New_Listener.wrappers[cxTextEdit_New_Listener_FIO].Value,_New_Listener.wrappers[cxTextEdit_New_Listener_FIO_R].Value,_New_Listener.wrappers[cxPopupEdit_New_Listener_Post].Value]));_New_Listener_Contract_Money.Properties.EditFormat :=

',0.00';_New_Listener_Contract_Money.Properties.:= True;ok then:= FSqlData_TableView.Insert_New

(CreateVarAr

([cW_New_Listener.wrappers

[cxPopupEdit_New_Listener_FIO].Value,_New_Listener.wrappers[cxPopupEdit_New_Listener_Ed_Group]

.Value, cW_New_Listener.wrappers

[cxPopupEdit_New_Listener_Kind_Basis_Action].Value,_New_Listener.wrappers[cxButtonEdit_New_Listener_Order_Start]

.Value, cW_New_Listener.wrappers

[cxDateEdit_New_Listener_D_Start].Value, id_p]));// 3// 5:= FSqlData_TableView.Insert_New

(CreateVarAr([cW_New_Listener.wrappers[cxPopupEdit_New_Listener_FIO]

.Value, cW_New_Listener.wrappers

[cxPopupEdit_New_Listener_Ed_Group].Value,_New_Listener.wrappers

[cxPopupEdit_New_Listener_Kind_Basis_Action]

.Value,_New_Listener.wrappers

[cxButtonEdit_New_Listener_Order_Start].Value,_New_Listener.wrappers[cxDateEdit_New_Listener_D_Start].Value,_New_Listener.wrappers[cxPopupEdit_New_Listener_Order].Value]));; // 5ok then// 6_TableView.Read_Data;(cW_New_Listener.wrappers

[cxButtonEdit_New_Listener_Order_Start]).IsEmpty := False;cxPageControl_Student.ActivePage = cxTabSheet_Contracts then_Contract_ParamsExecute(self);; // 6; // 2// 1assigned(mf) then(mf);; // 1;TForm_Event.Action_Insert_tv_r_c_groupExecute(Sender: TObject);

const= 'Группы повышения квалификации';

var: TSForm;// 1:= CreateSForm(self, 'fNew_R_C_Groups', Name, Add_Path + Name,_New_R_C_Group, tdb_Apply);_New_R_C_Group.OnChangeWrapper(nil);mf.ShowModal = mrok then// 2_TableView := Get_SqlData_cxGrid(tv_r_c_groups);FSqlData_TableView <> nil then// 3FSqlData_TableView.Insert_New(CreateVarAr

([cW_New_R_C_Group.wrappers[cxDateEdit_New_R_C_Group_D_End].Value,_New_R_C_Group.wrappers[cxDateEdit_New_R_C_Group_D_Start].Value,_New_R_C_Group.wrappers[cxPopupEdit_New_R_C_Group_Ed_Group]

.Value, cW_New_R_C_Group.wrappers

[cxPopupEdit_New_R_C_Group_Met_Complex].Value,_TableView.Params[0]

{tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_id_r_c_plan.Index]}])) then_TableView.Read_Data;; // 3; // 2// 1assigned(mf) then(mf);; // 1;TForm_Event.Action_Insert_tv_r_c_planExecute(Sender: TObject);

const= 'План повышения квалификации';

var: TSForm;: Integer;// 1:= CreateSForm(self, 'fNew_R_C_Plan', Name, Add_Path + Name,_New_R_C_Plan, tdb_Apply);

{ Устанавливаем значение по умолчанию }VarToStr(cW_New_R_C_Plan.wrappers[cxDateEdit_New_R_C_Plan_D_Start]

.Value) = '' then_New_R_C_Plan.wrappers[cxDateEdit_New_R_C_Plan_D_Start].Value :=(Date);_Plan_Filters_PlanPropertiesInitPopup(cxPopupEdit_Plan_Filters_Plan);((VarToStr(cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan]

.Value) <> '') and

(tv_plan.DataController.FocusedRecordIndex <> -1)) then// 5:= tv_plan.DataController.FocusedRecordIndex;(cW_New_R_C_Plan.wrappers

[cxButtonEdit_New_R_C_Plan_Paragraph]).SetListProperties

(VarToStr(tv_plan.DataController.Values[FRI, tv_plan_id_paragraph.Index]),(tv_plan.DataController.Values[FRI, tv_plan_idk_order.Index]), '', '',(tv_plan.DataController.Values[FRI, tv_plan_id_order.Index]), '', '',(tv_plan.DataController.Values[FRI, tv_plan_hisdate.Index]),(tv_plan.DataController.Values[FRI, tv_plan_status_order.Index]),(tv_plan.DataController.Values[FRI, tv_plan_status_text.Index]),(tv_plan.DataController.Values[FRI, tv_plan_d_creation.Index]),(tv_plan.DataController.Values[FRI, tv_plan_id_erp_user.Index]), '');// 5_New_R_C_Plan.wrappers[cxButtonEdit_New_R_C_Plan_Paragraph].Clear;_New_R_C_Plan.OnChangeWrapper(nil);mf.ShowModal = mrok then// 2_TableView := Get_SqlData_cxGrid(tv_r_c_plan);FSqlData_TableView <> nil then// 3FSqlData_TableView.Insert_New(CreateVarAr

([cW_New_R_C_Plan.wrappers[cxDateEdit_New_R_C_Plan_D_End].Value,_New_R_C_Plan.wrappers[cxDateEdit_New_R_C_Plan_D_Start].Value,_New_R_C_Plan.wrappers[cxPopupEdit_New_R_C_Plan_Spec_Div].Value,_New_R_C_Plan.wrappers[cxButtonEdit_New_R_C_Plan_Paragraph].Value]

)) then// 4_TableView.Read_Data;(cW_New_R_C_Plan.wrappers

[cxButtonEdit_New_R_C_Plan_Paragraph]).IsEmpty := False;; // 4; // 3; // 2// 1assigned(mf) then

FreeAndNil(mf);; // 1;

{ Выбор рамочного договора }

procedure TForm_Event.Action_Main_ContractExecute(Sender: TObject);_form: TSForm;// 1_form := CreateSForm(self, 'fSet_Main_Contract',_Set_Main_Contract.Caption,_Path + TabSheet_Set_Main_Contract.Caption, Panel_Set_Main_Contract,

tdb_Apply);

{ Устанавливаем значение по умолчанию }

if VarToStr(cW_Set_Main_Contract.wrappers[DateEdit_Set_Main_Contract_Find]

.Value) = '' then_Set_Main_Contract.wrappers[DateEdit_Set_Main_Contract_Find].Value :=(Date);_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action :=_Set_Main_Contract.ActionEnter;_form.ShowModal;// 1assigned(new_form) then(new_form);; // 1;

{ Выдача удостоверений}TForm_Event.Action_Make_CertificateExecute(Sender: TObject);new_form: TSForm; i: integer; data: olevariant;// 1_form := CreateSForm(self, TabSheet_New_Cert.Name + '1'

, TabSheet_New_Cert.Caption

, Add_Path + TabSheet_New_Cert.Caption, Panel_New_Cert, tdb_Apply);

{ Устанавливаем значение по умолчанию }_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := Cont_Make_Cert.ActionEnter;tv_listeners.DataController do_Make_Cert.Wrappers[SpinEdit_New_Cert_Hours].Value :=(Values[FocusedRecordIndex, tv_listeners_hours_plan.Index]);VarToStr(Cont_Make_Cert.Wrappers[ButtonEdit_New_Cert].Value) = ''begin:= MSystemServices.SelectData(Find_Magazine_Reg_Dip

,CreateVarAr(['']), i, 'Не смогли найти журнал выдачи.');

if VarIsArray(data)begin(Cont_Make_Cert.Wrappers[ButtonEdit_New_Cert]).(VarToStr(data[0][0])

, VarToStr(data[0][1])

, VarToStr(data[0][2])

, VarToStr(data[0][3])

, VarToStr(data[0][4])

, VarToStr(data[0][5])

, VarToStr(data[0][6])

, VarToStr(data[0][7])

, VarToStr(data[0][8])

, VarToStr(data[0][9])

, VarToStr(data[0][10])

, VarToStr(data[0][11])

, VarToStr(data[0][12]));_Make_Cert.Wrappers[ButtonEdit_New_Cert].Value := data[0][0];

//Cont_Make_Cert.Wrappers[ButtonEdit_New_Cert].ValueDisplay := data[0][1];

end;

// Обновим начальные цифры в журнале

else ButtonEdit_New_CertPropertiesEditValueChanged(ButtonEdit_New_Cert);_form.ShowModal;// 1assigned(new_form)FreeAndNil(new_form);; // 1

end;

{ Ввод нового рамочного договора }

procedure TForm_Event.Action_New_Contract_MainExecute(Sender: TObject);_form: TSForm;// 1_form := CreateSForm(self, 'fNew_Contract_Main', TabSheet_New_Contract_Main.Caption,_Path + TabSheet_New_Contract_Main.Caption, Panel_New_Contract_Main, tdb_Apply);_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := cw_New_Contract_Main.ActionEnter;_form.ShowModal;// 1assigned(new_form) then(new_form);; // 1;

{ Выберите рамочный договор }TForm_Event.Action_New_CuratorExecute(Sender: TObject);_form: TSForm;// 1_form := CreateSForm(self, 'fNew_Curator', TabSheet_New_Curator.Caption,_Path + TabSheet_New_Curator.Caption, Panel_New_Curator, tdb_Apply);

{ Устанавливаем значение по умолчанию }VarToStr(cW_New_Curator.wrappers[DateEdit_New_Curator].Value) = '' then_New_Curator.wrappers[DateEdit_New_Curator].Value := datetostr(Date);_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := cW_New_Curator.ActionEnter;_form.ShowModal;// 1assigned(new_form) then(new_form);; // 1;

{ Ввод нового рамочного договора}TForm_Event.Action_New_MCExecute(Sender: TObject);_form: TSForm;// 1_form := CreateSForm(self, 'fNew_MC', TabSheet_New_Contract_Main.Caption,_Path + TabSheet_New_Contract_Main.Caption, Panel_New_Contract_Main, tdb_Apply);_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := cw_New_Contract_Main.ActionEnter;_form.ShowModal;new_form.ModalResult = mrokGet_SqlData_cxGrid(ttree_mc).Read_Data;// 1assigned(new_form) then(new_form);; // 1;

{ Задайте новую стоимость договора}TForm_Event.Action_New_MoneyExecute(Sender: TObject);new_form: TSForm;// 1_form := CreateSForm(self, 'fNew_Money', TabSheet_New_Money.Caption,_Path + TabSheet_New_Money.Caption, Panel_New_Money, tdb_Apply);_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := cw_New_Money.ActionEnter;_form.ShowModal;new_form.ModalResult = mrokGet_SqlData_cxGrid(tv_listeners).Read_Data;// 1assigned(new_form) then(new_form);; // 1;

{ Добавить новую анкету человека!}TForm_Event.Action_New_SEExecute(Sender: TObject);Form_Anketa_For_New.ShowNewEmpForm of: OkNewEmp;: OkOldEmp;;;

{ Получить статистику }TForm_Event.Action_Read_StatExecute(Sender: TObject);Get_SqlData_cxGrid(TTree_Stat), Cont_Stat do[1] := VarToStr(Cont_Stat.Wrappers[DateEdit_Stat_Begin].Value);[2] := VarToStr(Cont_Stat.Wrappers[DateEdit_Stat_End].Value);_Data;;;

{ Просмотр удостоверения }TForm_Event.Action_View_CertificateExecute(Sender: TObject);L: TIntegerList;: integer;: String;Get_SqlData_cxGrid(tv_listeners) do(L);.StartSequenceActions(False, True);:= '';GridTableView.DataController doi := 0 to L.Count - 1 dos = ''s := VarToStr(Values[L.Items[i], tv_listeners_ID_Certificate.Index])s := s + ',' + VarToStr(Values[L.Items[i], tv_listeners_ID_Certificate.Index]);

// Размер сдвига по-Галиному:

{if cxSpinEdit1.Value<0 then:=vartostr(45.35+abs(cxSpinEdit1.Value))sdvig:=vartostr(45.35-cxSpinEdit1.Value);}.EndSequenceActions;.PreviePaper(MSystemServices

, View_Cert

, CreateVarAr([s])

, VarArrayOf([AWP_PageSetup_TopMargin ,VarToStr(45.35 - 0)])

, True);;;TForm_Event.Fill_AnketaExecute(Sender: TObject);: TcxGridDataController;_TableView := Get_SqlData_cxGrid(tv_listeners);FSqlData_TableView <> nil then// 1:= FSqlData_TableView.GridTableView.DataController;(FSqlData_TableView.LastChoiceIndex >= 0) and

(FSqlData_TableView.LastChoiceIndex < DC.RecordCount) then// 2_Form_Anketa.ID_CONTRACTOR := VarToStr

(DC.Values[FSqlData_TableView.LastChoiceIndex,_listeners_id_contractor.Index]);_Form_Anketa.ID_E := VarToStr

(DC.Values[FSqlData_TableView.LastChoiceIndex,_listeners_id_e.Index]);// 2// 3_Form_Anketa.ID_CONTRACTOR := '';_Form_Anketa.ID_E := '';; // 3_Form_Anketa.RefreshRoles(False);_Form_Anketa.IsEnabled := True;_Form_Anketa.Editing :=_Form_Anketa.IsEnabled and vnSessionAgent.('', '', '7001');not Current_Form_Anketa.Visible then_Form_Anketa.Show;_Anketa.Realign;_Form_Anketa.Realign;; // 1;TForm_Event.Fill_Contract_ParamsExecute(Sender: TObject);: OleVariant;: TcxDataController;_C: string;: Integer;_TableView := Get_SqlData_cxGrid(tv_listeners);:= tv_listeners.DataController;FSqlData_TableView <> nil then// 1PC_Refuse.EnabledPC_Refuse.Execute;_C := VarToStr(DC.Values[FSqlData_TableView.LastChoiceIndex,_listeners_id_contract.Index]);ID_C <> '' then// 2:= MSystemServices.SelectData(Contr_Params, VarArrayOf([ID_C]), rID);VarIsArray(data) then// 3_Contract_Params.wrappers[cxDateEdit_PC_D_Start].Value := VarToStr

(data[0][0]);_Contract_Params.wrappers[cxDateEdit_PC_D_End].Value := VarToStr

(data[0][1]);_Contract_Params.wrappers[cxPopupEdit_PC_Org].Value := VarToStr

(data[0][2]);_Contract_Params.wrappers[cxPopupEdit_PC_Org].ValueDisplay := VarToStr

(data[0][20]);_Contract_Params.wrappers[CheckBox_PC_NDS].Value := VarToStr

(data[0][21]);VarToStr(data[0][24]) = ''cW_Contract_Params.wrappers[cxCurrencyEdit_PC_Money].ClearcW_Contract_Params.wrappers[cxCurrencyEdit_PC_Money].Value :=VarToStr

(data[0][24]);

{cW_Contract_Params.wrappers[cxCurrencyEdit_PC_Money].Value := VarToStr

(DC.GetValue(DC.FocusedRecordIndex, tv_listeners_money.Index));_Contract_Params.wrappers[cxCurrencyEdit_PC_Money].ValueDisplay :=.GetDisplayText(DC.FocusedRecordIndex, tv_listeners_money.Index);}VarToStr(data[0][22]) = ''cW_Contract_Params.wrappers[cxDateEdit_PC_D_Start_Otrjv].ClearcW_Contract_Params.wrappers[cxDateEdit_PC_D_Start_Otrjv].Value :=(StrToDate(VarToStr(data[0][22])));VarToStr(data[0][22]) = ''cW_Contract_Params.wrappers[cxDateEdit_PC_D_End_Otrjv].ClearcW_Contract_Params.wrappers[cxDateEdit_PC_D_End_Otrjv].Value :=(StrToDate(VarToStr(data[0][23])));_Contract_Params.wrappers[cxPopupEdit_PC_SF].Value := VarToStr

(data[0][3]);_Contract_Params.wrappers[cxPopupEdit_PC_SF].ValueDisplay := VarToStr

(data[0][4]);(cW_Contract_Params.wrappers

[cxButtonEdit_PC_Contract]).SetListProperties

(VarToStr(DC.Values[FSqlData_TableView.LastChoiceIndex,_listeners_id_paragraph_contract.Index]), VarToStr(data[0][6]),(data[0][8]), '', VarToStr(data[0][5]), '', '', '',(data[0][7]),(DC.Values[FSqlData_TableView.LastChoiceIndex,_listeners_status_text_contract.Index]), '', '', '');_Contract_Params.wrappers[cxPopupEdit_PC_Kind_Order].Value := VarToStr

(data[0][6]);_Contract_Params.wrappers[cxPopupEdit_PC_Kind_Order].ValueDisplay :=(data[0][8]);(cW_Contract_Params.wrappers

[cxButtonEdit_PC_Direction]).SetListProperties

(VarToStr(data[0][9]), VarToStr(data[0][13]), VarToStr(data[0][14]),

'', VarToStr(data[0][10]), '', '', '', VarToStr(data[0][11]),(data[0][12]), '', '', '');_Contract_Params.wrappers[cxPopupEdit_PC_Kind_Direction].Value :=(data[0][13]);_Contract_Params.wrappers[cxPopupEdit_PC_Kind_Direction]

.ValueDisplay := VarToStr(data[0][14]);_Contract_Params.wrappers[cxTextEdit_PC_Basis].Value := VarToStr

(data[0][15]);_Contract_Params.wrappers[cxTextEdit_PC_FIO].Value := VarToStr

(data[0][16]);_Contract_Params.wrappers[cxTextEdit_PC_FIO_R].Value := VarToStr

(data[0][17]);_Contract_Params.wrappers[cxPopupEdit_PC_Post].Value := VarToStr

(data[0][18]);_Contract_Params.wrappers[cxPopupEdit_PC_Post].ValueDisplay :=(data[0][19]);// 3_Contract_Params.ClearWrappers;// 2_Contract_Params.ClearWrappers;

end; // 1;

{ Установить параметры текущего выбора и прочитать методические комплексы}

procedure TForm_Event.Fill_tv_com_specExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_com_spec);(FSqlData_TableView <> nil) then// 1Sender = PopupEdit_Import_UMK thenFSqlData_TableView.Parameters[1] <> VarToStr(cW_Import.Wrappers[PopupEdit_Import_Spec_Div].Value)begin_TableView.Parameters[1] := VarToStr(cW_Import.Wrappers[PopupEdit_Import_Spec_Div].Value);_TableView.Read_Data;FSqlData_TableView.Read_Data_First;

end

// Работа с текущим повышением плана (в редактировании грида)

beginFSqlData_TableView.Parameters[1] <> VarToStr

(tv_r_c_plan.DataController.Values[tv_r_c_plan.DataController.FocusedRecordIndex

,tv_r_c_plan_id_spec_div.Index])_TableView.Parameters[1] := VarToStr

(tv_r_c_plan.DataController.Values[tv_r_c_plan.DataController.FocusedRecordIndex

, tv_r_c_plan_id_spec_div.Index]);_TableView.Read_Data;FSqlData_TableView.Read_Data_First;;; // 1;TForm_Event.Fill_tv_contractsExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_contracts);(FSqlData_TableView <> nil) then// 1_TableView.Params[0] := cW_New_Listener.wrappers

[cxPopupEdit_New_Listener_Kind_Order].Value;_TableView.Params[1] := cW_New_Listener.wrappers

[cxPopupEdit_New_Listener_FIO].Value;FSqlData_TableView.IsFirstRead then_TableView.Read_Data_First_TableView.Read_Data;; // 1;TForm_Event.Fill_tv_ed_groupExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_ed_group);(FSqlData_TableView <> nil) then// 1_TableView.Params[0] := VarToStr

(tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_id_spec_div.Index]);FSqlData_TableView.IsFirstRead then_TableView.Read_Data_First_TableView.Read_Data;; // 1;TForm_Event.Fill_tv_kba_endExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_kba_end);(FSqlData_TableView <> nil) then// 1VarToStr(FSqlData_TableView.Params[0]) <> cW_End_Education.wrappers

[cxButtonEdit_End_Education].Value then// 2_TableView.Params[0] := cW_End_Education.wrappers

[cxButtonEdit_End_Education].Value;_TableView.Read_Data;; // 2; // 1;TForm_Event.Fill_tv_kba_startExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_kba_start);(FSqlData_TableView <> nil) thenFSqlData_TableView.IsFirstRead then_TableView.Read_Data_First;;TForm_Event.Fill_tv_kind_directionExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_kind_direction);(FSqlData_TableView <> nil) thenFSqlData_TableView.IsFirstRead then_TableView.Read_Data_First;;TForm_Event.Fill_tv_kind_orderExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_kind_order);(FSqlData_TableView <> nil) thenFSqlData_TableView.IsFirstRead then_TableView.Read_Data_First;;TForm_Event.Fill_tv_listenersExecute(Sender: TObject);_TableView2: TSqlData_cxGridTableView;: string;_TableView := Get_SqlData_cxGrid(tv_listeners);_TableView2 := Get_SqlData_cxGrid(tv_r_c_plan);(FSqlData_TableView <> nil) and (FSqlData_TableView2 <> nil) then// 1:= VarToStr(FSqlData_TableView2.GridTableView.DataController.Values

[FSqlData_TableView2.LastChoiceIndex, tv_r_c_plan_id_r_c_plan.Index]);VarToStr(FSqlData_TableView.Params[0]) <> Param0 then// 2_TableView.Params[0] := Param0;_TableView.Read_Data;FSqlData_TableView.Read_Data_First; // 2; // 1;TForm_Event.Fill_tv_ordersExecute(Sender: TObject);: string;_TableView := Get_SqlData_cxGrid(tv_orders);(FSqlData_TableView <> nil) then// 1:= VarToStr(tv_listeners.DataController.Values

[tv_listeners.DataController.FocusedRecordIndex,_listeners_id_e.Index]);VarToStr(FSqlData_TableView.Params[0]) <> Param0 then// 2_TableView.Params[0] := Param0;_TableView.Read_Data;; // 2; // 1;TForm_Event.Fill_tv_planExecute(Sender: TObject);: string;_TableView := Get_SqlData_cxGrid(tv_plan);(FSqlData_TableView <> nil) then// 1:= VarToStr(cW_Plan_Filters.wrappers[cxSpinEdit_Plan_Filters_Year]

.Value);(VarToStr(FSqlData_TableView.Params[0]) <> Param0) then// 2_TableView.Params[0] := Param0;_TableView.Read_Data;// 2FSqlData_TableView.Read_Data_First;(cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].Value) <> ''FindGridRecord(tv_plan, [tv_plan_id_paragraph]

, CreateVarAr([VarToStr(cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].Value)]));; // 1;TForm_Event.Fill_tv_postsExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_posts);(FSqlData_TableView <> nil) thenFSqlData_TableView.IsFirstRead then_TableView.Read_Data_First;;TForm_Event.Fill_tv_r_c_groupsExecute(Sender: TObject);_TableView2: TSqlData_cxGridTableView;: string;_TableView := Get_SqlData_cxGrid(tv_r_c_groups);_TableView2 := Get_SqlData_cxGrid(tv_r_c_plan);(FSqlData_TableView <> nil) and (FSqlData_TableView2 <> nil) then// 1:= VarToStr(FSqlData_TableView2.GridTableView.DataController.Values

[FSqlData_TableView2.LastChoiceIndex, tv_r_c_plan_id_r_c_plan.Index]);VarToStr(FSqlData_TableView.Params[0]) <> Param0 then// 2_TableView.Params[0] := Param0;_TableView.Read_Data;FSqlData_TableView.Read_Data_First; // 2; // 1;TForm_Event.Fill_tv_r_c_planExecute(Sender: TObject);: string;_TableView := Get_SqlData_cxGrid(tv_r_c_plan);(FSqlData_TableView <> nil) then// 1:= VarToStr(cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan]

.Value);(VarToStr(FSqlData_TableView.Params[0]) <> Param0)FSqlData_TableView.IsFirstRead then// 2_TableView.Params[0] := Param0;_TableView.Read_Data;; // 2; // 1;TForm_Event.Fill_tv_source_finansingExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_Source_Financing);(FSqlData_TableView <> nil) and FSqlData_TableView.IsFirstRead then_TableView.Read_Data_First;;TForm_Event.Fill_tv_spec_div_popupExecute(Sender: TObject);_TableView := Get_SqlData_cxGrid(tv_spec_div_popup);(FSqlData_TableView <> nil) then// 1FSqlData_TableView.IsFirstRead then_TableView.Read_Data_First;; // 1;TForm_Event.FormDestroy(Sender: TObject);

begin

{ Сохраним параметры в реестр }

Save_Restore_Params(Curr_Reg_Path, False);;TForm_Event.FormShow(Sender: TObject);

{ Читаем списки }_tv_r_c_planExecute(self);;

{ Инициализация формы }TForm_Event.Init(AReg_Path: String = Reg_Path;_SE: TForm_SE = nil; AForm_Find_Org: TForm_Find_Org = nil;_Anketa: TFUnivQuestionare = nil;_Anketa_For_New: TFUnivQuestionare = nil);_Reg_Path := AReg_Path;_Import_Reference.Date := Date;_New_Nach.Date := Date;_Create_Nach_All.Date := Date;_Stat_Begin.Date := StrToDate('01.01.' + IntToStr(YearOf(Date)));_Stat_End.Date := StrToDate('31.12.' + IntToStr(YearOf(Date)));_Filter_Start.Date := DateEdit_Stat_Begin.Date;_Filter_End.Date := DateEdit_Stat_End.Date;AForm_SE <> nil then_Form_SE := AForm_SE;not assigned(Current_Form_SE) then_Form_SE := TForm_SE.Create(self);Get_SqlData_cxGrid(Current_Form_SE.cxGrid_FIO) do.OnExecute := Action_New_SE.OnExecute;.Enabled := False;.Add(ActionInsert);.Add(nil);.Add(ActionUpdate);;AForm_Find_Org <> nil then_Form_Find_Org := AForm_Find_Org;not assigned(Current_Form_Find_Org) then_Form_Find_Org := TForm_Find_Org.Create(self);_Form_Find_Org.Init;;AForm_Anketa <> nilCurrent_Form_Anketa := AForm_Anketa;not assigned(Current_Form_Anketa) then_Form_Anketa.Init(Current_Form_Anketa, [qpers, qphoto, qcont, qdocs,, QWithTabSheet, Qworkplaces, QWeb_User], ForWorkWith, nil,_Form_SE);

//Current_Form_Anketa.FFormDocuments.TypeDoc := 3;_Form_Anketa.FFormDocuments.ReadAdditionalInfo;_Form_Anketa.IsEnabled := True;_Form_Anketa.ManualDock(Panel_Anketa, nil, alClient);_Form_Anketa.RefreshRoles(False);;AForm_Anketa_For_New <> nilForm_Anketa_For_New := AForm_Anketa_For_New;not assigned(Form_Anketa_For_New)_Anketa_For_New.Init(Form_Anketa_For_New

, [Qpers, Qdocs, QCont, QAdr]

, ForNew, nil, Current_Form_SE);_Anketa_For_New.FFormDocuments.TypeDoc := 1;

//Form_Anketa_For_New.hm := HandymanFunctions;_Anketa_For_New.SimilaryCheckModeOn := True;_Anketa_For_New.PostOnEnter := True;_Anketa_For_New.DisplayLookUps := False;;

// *****************************************************************************_New_R_C_Plan := TContainerWrappers.Create;_New_R_C_Plan.AddPopupEdit(cxPopupEdit_New_R_C_Plan_Spec_Div, True, False,_Spec_Div_PopUp, tv_spec_div_popup, tv_spec_div_popup_id_spec_div,

[tv_spec_div_popup_name_spec, tv_spec_div_popup_name_div,_spec_div_popup_kind_training], '');_New_R_C_Plan.AddButtonOrderEdit(cxButtonEdit_New_R_C_Plan_Paragraph, True,, '', ['902'], [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW],

[nil, nil, nil, nil]);_New_R_C_Plan.AddCustomEdit(cxDateEdit_New_R_C_Plan_D_Start, True, False,

'');_New_R_C_Plan.AddCustomEdit(cxDateEdit_New_R_C_Plan_D_End, False, False,

'');_New_R_C_Plan.OnChangeWrapper := DoChanged_cW_New_R_C_Plan;

// *****************************************************************************

// *****************************************************************************_New_R_C_Group := TContainerWrappers.Create;_New_R_C_Group.AddPopupEdit(cxPopupEdit_New_R_C_Group_Ed_Group, True,, cxGrid_Ed_Group, tv_ed_group, tv_ed_group_id_ed_group,

[tv_ed_group_name], '');_New_R_C_Group.AddPopupEdit(cxPopupEdit_New_R_C_Group_Met_Complex, True,, cxGrid_Com_Spec, tv_com_spec, tv_com_spec_id_met_complex,

[tv_com_spec_name_spec, tv_com_spec_status_text], '');_New_R_C_Group.AddCustomEdit(cxDateEdit_New_R_C_Group_D_Start, True, False,

'');_New_R_C_Group.AddCustomEdit(cxDateEdit_New_R_C_Group_D_End, True, False,

'');_New_R_C_Group.OnChangeWrapper := DoChanged_cW_New_R_C_Group;

// *****************************************************************************

// *****************************************************************************_New_Listener := TContainerWrappers.Create;_New_Listener.AddPopupEdit(cxPopupEdit_New_Listener_FIO, True, False,_Form_SE.cxGrid1, Current_Form_SE.cxGrid_FIO,_Form_SE.cxGrid_FIO_ID_E, [Current_Form_SE.cxGrid_FIO_Full], '');_New_Listener.AddPopupEdit(cxPopupEdit_New_Listener_Ed_Group, True, False,_R_C_Groups, tv_r_c_groups, tv_r_c_groups_id_ed_group,

[tv_r_c_groups_name], '');_New_Listener.AddCustomEdit(cxDateEdit_New_Listener_D_Start, True, False,

'');_New_Listener.AddCustomEdit(cxDateEdit_New_Listener_D_End, True, False, '');_New_Listener.AddPopupEdit(cxPopupEdit_New_Listener_Kind_Basis_Action,, False, cxGrid_KBA_Start, tv_kba_start, tv_kba_start_id,

[tv_kba_start_name], '');_New_Listener.AddButtonOrderEdit(cxButtonEdit_New_Listener_Order_Start,, False, '', ['200'], [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE,_PREVIEW], [nil, nil, nil, nil]);_New_Listener.AddPopupEdit(cxPopupEdit_New_Listener_Kind_Order, False,, cxGrid_Kind_Order, tv_kind_order, tv_kind_order_id,

[tv_kind_order_name], '');_New_Listener.AddPopupEdit(cxPopupEdit_New_Listener_Order, False, False,_Contracts, tv_contracts, tv_contracts_id_paragraph,

[tv_contracts_contract], '');_New_Listener.AddCustomEdit(cxDateEdit_New_Listener_Contract_D_Start,, False, '');_New_Listener.AddCustomEdit(cxDateEdit_New_Listener_Contract_D_End, False,, '');_New_Listener.AddPopupEdit(cxPopupEdit_New_Listener_Contract_Organization,, False, Current_Form_Find_Org.cxGrid_Org,_Form_Find_Org.TTree_Org, Current_Form_Find_Org.Tree_Org_ID_CA,

[Current_Form_Find_Org.Tree_Org_Name], '');_New_Listener.AddPopupEdit(_New_Listener_Contract_Source_Finansing, False, False,_Source_Financing, tv_Source_Financing, tv_Source_Financing_ID,

[tv_Source_Financing_Name], '');_New_Listener.AddCustomEdit(cxCurrencyEdit_New_Listener_Contract_Money,, False, '');_New_Listener.AddCustomEdit(cxTextEdit_New_Listener_Basis, False, False,

'');_New_Listener.AddCustomEdit(cxTextEdit_New_Listener_FIO, False, False, '');_New_Listener.AddCustomEdit(cxTextEdit_New_Listener_FIO_R, False, False,

'');_New_Listener.AddPopupEdit(cxPopupEdit_New_Listener_Post, False, False,_Posts, tv_posts, tv_posts_id, [tv_posts_name], '');_New_Listener.OnChangeWrapper := DoChanged_cW_New_Listener;

// *****************************************************************************

// *****************************************************************************_Contract_Params := TContainerWrappers.Create;_Contract_Params.AddCustomEdit(cxDateEdit_PC_D_Start, False, True, '');_Contract_Params.AddCustomEdit(cxDateEdit_PC_D_End, False, True, '');_Contract_Params.AddCustomEdit(cxDateEdit_PC_D_Start_Otrjv, False, True, '');_Contract_Params.AddCustomEdit(cxDateEdit_PC_D_End_Otrjv, False, True, '');_Contract_Params.AddPopupEdit(cxPopupEdit_PC_Org, False, True,_Form_Find_Org.cxGrid_Org, Current_Form_Find_Org.TTree_Org,_Form_Find_Org.Tree_Org_ID_CA,

[Current_Form_Find_Org.Tree_Org_Name], '');_Contract_Params.AddPopupEdit(cxPopupEdit_PC_SF, False, True,_Source_Financing, tv_Source_Financing, tv_Source_Financing_ID,

[tv_Source_Financing_Name], '');_Contract_Params.AddCustomEdit(cxCurrencyEdit_PC_Money, False, True, '');_Contract_Params.AddButtonOrderEdit(cxButtonEdit_PC_Contract, False, False,

'', ['68924'], [OBE_INNAVIGATE, OBE_PREVIEW], [nil, nil]);_Contract_Params.AddPopupEdit(cxPopupEdit_PC_Kind_Order, False, True,_Kind_Order, tv_kind_order, tv_kind_order_id, [tv_kind_order_name],

'');_Contract_Params.AddButtonOrderEdit(cxButtonEdit_PC_Direction, False,, '', ['431', '433', '434', '62'], [OBE_INNAVIGATE, OBE_PREVIEW],

[nil, nil]);_Contract_Params.AddPopupEdit(cxPopupEdit_PC_Kind_Direction, False, True,_Kind_Direction, tv_kind_direction, tv_kind_direction_id,

[tv_kind_direction_name], '');_Contract_Params.AddCustomEdit(cxTextEdit_PC_Basis, False, True, '');_Contract_Params.AddCustomEdit(cxTextEdit_PC_FIO, False, True, '');_Contract_Params.AddCustomEdit(cxTextEdit_PC_FIO_R, False, True, '');_Contract_Params.AddPopupEdit(cxPopupEdit_PC_Post, False, True,_Posts, tv_posts, tv_posts_id, [tv_posts_name], '');_Contract_Params.AddCustomEdit(CheckBox_PC_NDS, False, True, '');_Contract_Params.ActionApply := PC_Apply;_Contract_Params.ActionRefuse := PC_Refuse;_Contract_Params.OnChangeWrapper := DoChanged_cW_Contract_Params;

// *****************************************************************************_New_Direction := TContainerWrappers.Create;_New_Direction.AddPopupEdit(cxPopupEdit_New_Direction, True, False,_Kind_Direction, tv_kind_direction, tv_kind_direction_id,

[tv_kind_direction_name], '');_New_Direction.OnChangeWrapper := DoChanged_cW_New_Direction;_New_UMK := TContainerWrappers.Create;_New_UMK.AddCustomEdit(SpinEdit_New_UMK_Hours, True, False, '');_New_UMK.AddCustomEdit(SpinEdit_New_UMK_Hours_SR, False, False, '');

// *****************************************************************************

// *****************************************************************************_End_Education := TContainerWrappers.Create;_End_Education.AddButtonOrderEdit(cxButtonEdit_End_Education, True, False,

'', ['201', '207'], [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW],

[nil, nil, nil, nil]);_End_Education.AddPopupEdit(cxPopupEdit_KBA_End, True, False,_Kba_End, tv_kba_end, tv_kba_end_id, [tv_kba_end_name],

'');_End_Education.AddCustomEdit(cxDateEdit_End_Education, True, False, '');_End_Education.OnChangeWrapper := DoChanged_cW_End_Education;

// *****************************************************************************

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

// добавление плана повышения квалификации

// ---------------------------------------------Get_SqlData_cxGrid(tv_r_c_plan) = nil thenTSqlData_cxGridTableView.Create(tv_r_c_plan) do:= True;:= False;_Name := tv_r_c_plan.Bands.Items[0].Caption;_Select := R_C_Plan;_Update := d_P_REFRESHER_COURSE_PLAN;:= CreateVarAr(['']);:= True;_Column := tv_r_c_plan_institute;:= tv_r_c_plan_institute;Select_Columns do(tv_r_c_plan_name_spec, 2);(tv_r_c_plan_institute, 2);(tv_r_c_plan_division, 2);(tv_r_c_plan_kind_training, 2);(tv_r_c_plan_d_start, 1);(tv_r_c_plan_d_end, 0);(tv_r_c_plan_source, 2);(tv_r_c_plan_money);(tv_r_c_plan_status_text, 3);(tv_r_c_plan_id_r_c_plan, 4);(tv_r_c_plan_id_spec_div, 2);(tv_r_c_plan_id_spec, 2);(tv_r_c_plan_id_institute, 2);(tv_r_c_plan_id_d, 2);(tv_r_c_plan_idk_training, 2);(tv_r_c_plan_id_paragraph, 3);(tv_r_c_plan_id_order, 3);(tv_r_c_plan_idk_order, 3);(tv_r_c_plan_status_order, 3);(tv_r_c_plan_id_source, 2);(tv_r_c_plan_id_erp_user);;_Columns.Add(tv_r_c_plan_id_r_c_plan, 4);Insert_Columns do(tv_r_c_plan_d_end, 0);(tv_r_c_plan_d_start, 1);(tv_r_c_plan_id_spec_div, 2);(tv_r_c_plan_id_paragraph, 3);;PopupColumnsList.Add(tv_r_c_plan_name_spec) do:= tv_r_c_plan_id_spec_div;:= tv_spec_div_popup_id_spec_div;:= tv_spec_div_popup_name_spec;;PopupColumnsList.Add(tv_r_c_plan_institute) do:= tv_r_c_plan_id_spec_div;:= tv_spec_div_popup_id_spec_div;:= tv_spec_div_popup_institute;;PopupColumnsList.Add(tv_r_c_plan_division) do:= tv_r_c_plan_id_spec_div;:= tv_spec_div_popup_id_spec_div;:= tv_spec_div_popup_name_div;;PopupColumnsList.Add(tv_r_c_plan_kind_training) do:= tv_r_c_plan_id_spec_div;:= tv_spec_div_popup_id_spec_div;:= tv_spec_div_popup_kind_training;;PopupColumnsList.Add(tv_r_c_plan_source) do:= tv_r_c_plan_id_source;:= tv_Source_Financing_ID;:= tv_Source_Financing_Name;;.Column_Status_Text := tv_r_c_plan_status_text;.Column_ID_order := tv_r_c_plan_id_order;.Column_ID_paragraph := tv_r_c_plan_id_paragraph;.Column_IDk_order := tv_r_c_plan_idk_order;.Visible := True;.OnExecute := Action_Insert_tv_r_c_plan.OnExecute;.Add(ActionInsert);.Add(ActionDelete);.Add(nil);.Add(OptionsOrder.ActionPreview);.Add(OptionsOrder.ActionNavigate);.Add(nil);.Add(ActionUpdate);:= lmLastChoice;

OnChoiceGridRecord := ChoiceGridRecord;;

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

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

// добавление обучаемых специальностей (специальности подразделений)

// ---------------------------------------------Get_SqlData_cxGrid(tv_spec_div_popup) = nil thenTSqlData_cxGridTableView.Create(tv_spec_div_popup) do:= False;_Name := 'Обучаемые специальности';_Select := Spec_div;_Update := d_P_SPECIALITIES_DIVISION;:= CreateVarAr([IDK_Level_Spec, '']);_Column := tv_spec_div_popup_institute;:= tv_spec_div_popup_institute;:= True;Select_Columns do(tv_spec_div_popup_name_spec, 1);(tv_spec_div_popup_name_div, 2);(tv_spec_div_popup_kind_training, 3);(tv_spec_div_popup_institute, 6);(tv_spec_div_popup_source, 12);(tv_spec_div_popup_d_start, 4);(tv_spec_div_popup_d_end, 5);(tv_spec_div_popup_id_spec_div, 0);(tv_spec_div_popup_id_spec, 1);(tv_spec_div_popup_id_d, 2);(tv_spec_div_popup_idk_training, 3);(tv_spec_div_popup_id_d_institute, 6);(tv_spec_div_popup_id_source, 12);(tv_spec_div_popup_idk_level_formation, 8);;Insert_Columnsbegin(tv_spec_div_popup_id_spec, 1);(tv_spec_div_popup_id_d, 2);(tv_spec_div_popup_idk_training, 3);(tv_spec_div_popup_d_start, 4);(tv_spec_div_popup_id_d_institute, 6);(tv_spec_div_popup_idk_level_formation, 8);(tv_spec_div_popup_id_source, 12);;_Columns.Add(tv_spec_div_popup_id_spec_div, 0);

PopupActions.Add(ActionUpdate);;

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

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

// добавление групп повышения квалификации

// ---------------------------------------------Get_SqlData_cxGrid(tv_r_c_groups) = nil thenTSqlData_cxGridTableView.Create(tv_r_c_groups) do:= True;:= False;

Table_Name := 'Группы повышения квалификации';

GUID_Select := R_C_Groups;_Update := d_P_REFRESHER_COURSE_GROUP;:= True;:= CreateVarAr(['']);_Column := tv_r_c_groups_name;:= tv_r_c_groups_name;Select_Columns do(tv_r_c_groups_name, 2);(tv_r_c_groups_d_start, 1);(tv_r_c_groups_d_end, 0);(tv_r_c_groups_status_text, 3);(tv_r_c_groups_hours); ;(tv_r_c_groups_id_rc_group, 4);(tv_r_c_groups_id_ed_group, 2);(tv_r_c_groups_id_met_complex, 3);(tv_r_c_groups_id_paragraph, 3);(tv_r_c_groups_id_order, 3);(tv_r_c_groups_idk_order, 3);(tv_r_c_groups_status_order, 3);(tv_r_c_groups_id_r_c_plan, 5);(tv_r_c_groups_id_erp_user);;_Columns.Add(tv_r_c_groups_id_rc_group, 4);Insert_Columns do(tv_r_c_groups_d_end, 0);(tv_r_c_groups_d_start, 1);(tv_r_c_groups_id_ed_group, 2);(tv_r_c_groups_id_met_complex, 3);(tv_r_c_groups_id_r_c_plan, 5);;PopupColumnsList.Add(tv_r_c_groups_name) do:= tv_r_c_groups_id_ed_group;:= tv_ed_group_id_ed_group;:= tv_ed_group_name;;.Column_Status_Text := tv_r_c_groups_status_text;.Column_ID_order := tv_r_c_groups_id_order;.Column_ID_paragraph := tv_r_c_groups_id_paragraph;.Column_IDk_order := tv_r_c_groups_idk_order;.Visible := True;.OnExecute := Action_Insert_tv_r_c_group.OnExecute;:= lmLastChoice;:= ChoiceGridRecord;.Add(ActionInsert);.Add(ActionDelete);.Add(nil);.Add(OptionsOrder.ActionPreview);.Add(OptionsOrder.ActionNavigate);.Add(nil);.Add(ActionUpdate);;

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

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

// Учебные группыTSqlData_cxGridTableView.Create(tv_ed_group) do:= False;_Name := 'Учебные группы';:= CreateVarAr(['']);_Select := Ed_Groups;:= False;:= True;_Column := tv_ed_group_name;:= tv_ed_group_name;Select_Columns do(tv_ed_group_name, 1);(tv_ed_group_kind_group, 8);(tv_ed_group_d_start, 4);(tv_ed_group_d_end, 5);(tv_ed_group_id_ed_group, 0);(tv_ed_group_id_spec_div, 2);(tv_ed_group_idk_group, 8);(tv_ed_group_level_group, 3);;_Columns.Add(tv_ed_group_id_ed_group, 0);.Add(ActionUpdate);;

// Куратор текущей группыTSqlData_cxGridTableView.Create(TTree_Curator) do_Name := TTree_Curator.Bands.Items[0].Caption;_Select := Get_List_Curators_By_ID_EG;_Update := d_P_CURATOR_GROUP;:= 1;.Add(1);:= True;_Column := Tree_Curator_FIO;Select_Columns do(Tree_Curator_Start, 1);(Tree_Curator_End, 0);(Tree_Curator_FIO, 2);(Tree_Curator_ID_E, 2);(Tree_Curator_ID_EG, 3);;Insert_Columns do(Tree_Curator_Start, 1);(Tree_Curator_ID_E, 2);(Tree_Curator_ID_EG, 3);;PopupColumnsList.Add(Tree_Curator_FIO) do:= Tree_Curator_ID_E;:= Current_Form_SE.cxGrid_FIO_ID_E;:= Current_Form_SE.cxGrid_FIO_Full;;_Columns.Add(Tree_Curator_ID_E, 2);_Columns.Add(Tree_Curator_ID_EG, 3);_Columns.Add(Tree_Curator_Start, 1);.OnExecute := Action_New_Curator.OnExecute;(Tree_Curator_FIO.Properties).PopupControl :=_Form_SE;_New_Curator_FIO.Properties.PopupControl := Current_Form_SE;_New_Curator := TContainerWrappers.Create;_New_Curator.AddCustomEdit(DateEdit_New_Curator, True, False, '');_New_Curator.AddPopupEdit(PopupEdit_New_Curator_FIO, True, False,_Form_SE.cxGrid1, Current_Form_SE.cxGrid_FIO,_Form_SE.cxGrid_FIO_ID_E, [Current_Form_SE.cxGrid_FIO_Full], '');_New_Curator.ActionEnter := Action_Insert_Curator;;

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

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

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

// добавление специальностей комплекса

// ---------------------------------------------Get_SqlData_cxGrid(tv_com_spec) = nil thenTSqlData_cxGridTableView.Create(tv_com_spec) do:= False;:= False;_Name := 'Методический комплекс';_Select := Met_Complex;:= True;:= 1;.Add(1);_Column := tv_com_spec_institute;:= tv_com_spec_institute;Select_Columns do(tv_com_spec_name_spec);(tv_com_spec_institute);(tv_com_spec_name_div);(tv_com_spec_kind_training);(tv_com_spec_status_text);(tv_com_spec_hours);(tv_com_spec_id_spec_div);(tv_com_spec_id_spec);(tv_com_spec_id_institute);(tv_com_spec_id_d_spec_div);(tv_com_spec_idk_training);(tv_com_spec_status_order);(tv_com_spec_id_p_dp);(tv_com_spec_id_order);(tv_com_spec_idk_order);(tv_com_spec_id_met_complex);

//Add(tv_com_spec_id_e_l_umk);(tv_com_spec_sam);;.Add(ActionUpdate);;

// Рамочные договораTSqlData_cxGridTableView.Create(TTree_Main_Contracts) do:= False;_Name := TTree_Main_Contracts.Bands.Items[0].Caption;_Select := Get_List_Main_Contracts;:= True;:= 1;.Add(1);Select_Columns do(Tree_Main_Contracts_Contract);(Tree_Main_Contracts_Org_Name);(Tree_Main_Contracts_Number);(Tree_Main_Contracts_ID_Contract);;_Columns.Add(Tree_Main_Contracts_ID_Contract);.Add(ActionUpdate);_Column := Tree_Main_Contracts_Contract;:= Tree_Main_Contracts_Contract;;

// Виды сертификатовTSqlData_cxGridTableView.Create(TTree_Kind_Doc_Cert) do:= False;_Name := TTree_Kind_Doc_Cert.Bands.Items[0].Caption;_Select := Get_Kind_Documents;:= True;Select_Columns do(Tree_Kind_Doc_Cert_Name);(Tree_Kind_Doc_Cert_ID);;_Columns.Add(Tree_Kind_Doc_Cert_ID);.Add(ActionUpdate);_Column := Tree_Kind_Doc_Cert_Name;:= Tree_Kind_Doc_Cert_Name;;

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

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

// добавление участников

// ---------------------------------------------Get_SqlData_cxGrid(tv_listeners) = nil thenTSqlData_cxGridTableView.Create(tv_listeners) do:= True;:= False;_Name := 'Участники';_Select := Listeners;_Update := d_P_STUDENTS;:= True;_Read := After_Read_tv_listeners;:= CreateVarAr(['']);_Column := tv_listeners_fio;:= tv_listeners_fio;:= True;Select_Columns do(tv_listeners_fio, 1);(tv_listeners_ed_group, 7);(tv_listeners_d_start, 4);(tv_listeners_d_end);(tv_listeners_d_end_plan);(tv_listeners_kind_basis_action, 8);(tv_listeners_status_text_order_start, 3);(tv_listeners_status_text_order_end);(tv_listeners_status_text_contract);(tv_listeners_org);(tv_listeners_money);(tv_listeners_certificate, 4);(tv_listeners_hours, 20);(tv_listeners_hours_plan);(tv_listeners_last_date);(tv_listeners_id_student, 0);(tv_listeners_id_e, 1);(tv_listeners_id_ed_group, 7);(tv_listeners_idkba_transfer, 8);(tv_listeners_id_paragraph_start, 3);(tv_listeners_id_order_start, 3);(tv_listeners_idk_order_start, 3);(tv_listeners_id_contract);(tv_listeners_status_order_start, 3);(tv_listeners_id_paragraph_contract, 10);(tv_listeners_id_erp_user);(tv_listeners_id_contractor);(tv_listeners_Main_Contract);(tv_listeners_ID_Contract_Main);(tv_listeners_Org_Contract_Main);(tv_listeners_NDS);(tv_listeners_ID_Paragraph_End);(tv_listeners_ID_ERP_End);(tv_listeners_ID_Status_End);(tv_listeners_ID_Certificate, 0);(tv_listeners_ID_Doc_Cert, 0);(tv_listeners_Kind_Cert, 1);(tv_listeners_ID_Kind_Cert, 1);(tv_listeners_Cert_Date, 2);(tv_listeners_Reg_Number, 0);(tv_listeners_ID_Reg, 5);_New_Nach_All := TContainerWrappers.Create;_New_Nach_All.AddButtonOrderEdit(ButtonEdit_Create_Nach_All, True, False, ''

, ['436, 444']

, [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW]

, [nil, nil, nil, nil]);_New_Nach_All.AddCustomEdit(DateEdit_Create_Nach_All, True, False, '');_New_Nach_All.ActionEnter := Action_Go_Nach_All;;_Columns.Add(tv_listeners_id_student, 0);IndividualEditInfoList.Add do_Update_Exchange := Update_FIO;.Add(tv_listeners_fio, 1);;IndividualEditInfoList.Add do_Update_Exchange := Update_Ed_Group;.Add(tv_listeners_ed_group, 7);.Add(tv_listeners_d_start, 4);;IndividualEditInfoList.Add do_Update_Exchange := Update_End_Date;.Add(tv_listeners_d_end);;IndividualEditInfoList.Add do_Update := d_P_CERTIFICATE;.Add(tv_listeners_hours, 20);.Add(tv_listeners_ID_Certificate, 0);;IndividualEditInfoList.Add do_Update := d_P_MAGAZINE_REGISTR_DIPLOMAS;.Add(tv_listeners_Reg_Number, 0);.Add(tv_listeners_ID_Reg, 5);;IndividualEditInfoList.Add do_Update := d_P_DOCUMENTS;.Add(tv_listeners_Kind_Cert, 1);.Add(tv_listeners_Cert_Date, 2);.Add(tv_listeners_certificate, 4);.Add(tv_listeners_ID_Doc_Cert, 0);;_Update_Exchange := Before_Update_Exchange_tv_listeners;Insert_Columns do(tv_listeners_id_e, 1);(tv_listeners_id_ed_group, 7);(tv_listeners_idkba_transfer, 8);(tv_listeners_id_paragraph_start, 3);(tv_listeners_d_start, 4);(tv_listeners_id_paragraph_contract, 10);;(tv_listeners_fio.Properties).PopupControl :=_Form_SE;_New_Listener_FIO.Properties.PopupControl := Current_Form_SE;_New_Listener_Contract_Organization.Properties.PopupControl :=_Form_Find_Org;

// TcxPopupEditProperties(tv_listeners_org.Properties).PopupControl := Current_Form_Find_Org;_PC_Org.Properties.PopupControl := Current_Form_Find_Org;PopupColumnsList.Add(tv_listeners_fio) do:= tv_listeners_id_e;:= Current_Form_SE.cxGrid_FIO_ID_E;:= Current_Form_SE.cxGrid_FIO_Full;;PopupColumnsList.Add(tv_listeners_ed_group) do:= tv_listeners_id_ed_group;:= tv_r_c_groups_id_ed_group;:= tv_r_c_groups_name;;PopupColumnsList.Add(tv_listeners_d_start) do:= tv_listeners_id_ed_group;:= tv_r_c_groups_id_ed_group;:= tv_r_c_groups_d_start;;PopupColumnsList.Add(tv_listeners_kind_basis_action) do:= tv_listeners_idkba_transfer;:= tv_kba_start_id;:= tv_kba_start_name;;PopupColumnsList.Add(tv_listeners_Kind_Cert) do:= tv_listeners_ID_Kind_Cert;:= Tree_Kind_Doc_Cert_ID;:= Tree_Kind_Doc_Cert_Name;;.Column_Status_Text := tv_listeners_status_text_order_start;.Column_ID_order := tv_listeners_id_order_start;.Column_ID_paragraph := tv_listeners_id_paragraph_start;.Column_IDk_order := tv_listeners_idk_order_start;.Visible := True;.OnExecute := Action_Insert_tv_listeners.OnExecute;.OnExecute := Delete_tv_listeners.OnExecute;.Add(ActionInsert);.Add(Action_Import);.Add(ActionDelete);.Add(nil);.Add(Action_Add_Contract);.Add(Action_Main_Contract);.Add(Action_New_Money);.Add(Action_Create_Nach_All);.Add(Action_Delete_Nach);.Add(Action_Delete_Contract);.Add(nil);.Add(Action_End_Education);.Add(Action_Delete_Order_End);.Add(nil);.Add(Action_Make_Certificate);.Add(Action_View_Certificate);.Add(Action_Delete_Certificate);.Add(nil);.Add(OptionsOrder.ActionPreview);.Add(OptionsOrder.ActionNavigate);.Add(nil);.Add(ActionUpdate);:= lmLastChoice;:= OnChoiceGridRecord_tv_listeners;_Set_Main_Contract := TContainerWrappers.Create;_Set_Main_Contract.AddCustomEdit(DateEdit_Set_Main_Contract_Find, True,, '');_Set_Main_Contract.AddPopupEdit(PopupEdit_Set_Main_Contract, True,, cxGrid_Main_Contracts, TTree_Main_Contracts,_Main_Contracts_ID_Contract, [Tree_Main_Contracts_Contract], '');_Set_Main_Contract.ActionEnter := Action_Go_Set_Main_Contract;_Make_Cert := TContainerWrappers.Create;_Make_Cert.AddButtonOrderEdit(ButtonEdit_New_Cert, True, False, ''

, ['225']

, [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW]

, [nil, nil, nil, nil]);_Make_Cert.AddPopupEdit(PopupEdit_New_Cert_Kind_Doc, True, False

, nil, nil, Tree_Kind_Doc_Cert_ID, [Tree_Kind_Doc_Cert_Name]);_Make_Cert.AddCustomEdit(SpinEdit_New_Cert_Reg, True, False);_Make_Cert.AddCustomEdit(SpinEdit_New_Cert_Number, True, False);_Make_Cert.AddCustomEdit(SpinEdit_New_Cert_Hours, True, False);_Make_Cert.ActionEnter := Action_Go_New_Cert;_New_Money := TContainerWrappers.Create;_New_Money.AddCustomEdit(CurrencyEdit_New_Money, True, False);_New_Money.ActionEnter := Action_Go_New_Money;;

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

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

// Основание зачисленияTSqlData_cxGridTableView.Create(tv_kba_start) do:= False;_Name := 'Основания зачисления';_Select := Kind_Basis_Action;:= False;:= True;Select_Columns do(tv_kba_start_name);(tv_kba_start_id);;_Columns.Add(tv_kba_start_id);.Add(ActionUpdate);_Column := tv_kba_start_name;:= tv_kba_start_name;;

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

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

// Основание окончанияTSqlData_cxGridTableView.Create(tv_kba_end) do:= False;_Name := 'Основания окончания';_Select := End_Education_KBA;:= CreateVarAr(['']);:= False;:= True;_Column := tv_kba_end_name;:= tv_kba_end_name;Select_Columns do(tv_kba_end_name);(tv_kba_end_id);;_Columns.Add(tv_kba_end_id);.Add(ActionUpdate);;

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

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

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

// ДолжностиTSqlData_cxGridTableView.Create(tv_posts) do:= False;_Name := 'Должности';_Select := Posts;:= False;:= True;_Column := tv_posts_name;:= tv_posts_name;Select_Columns do(tv_posts_name);(tv_posts_id);;_Columns.Add(tv_posts_id);.Add(ActionUpdate);;

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

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

// Вид договораTSqlData_cxGridTableView.Create(tv_kind_order) do:= False;_Name := 'Виды договоров';_Select := kind_order;:= False;:= True;_Column := tv_kind_order_name;:= tv_kind_order_name;Select_Columns do(tv_kind_order_name);(tv_kind_order_id);;_Columns.Add(tv_kind_order_id);.Add(ActionUpdate);;

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

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

// Вид направленияTSqlData_cxGridTableView.Create(tv_kind_direction) do:= False;_Name := 'Виды направлений';_Select := Kind_Direction;:= False;:= True;_Column := tv_kind_direction_name;:= tv_kind_direction_name;Select_Columns do(tv_kind_direction_name);(tv_kind_direction_id);;_Columns.Add(tv_kind_direction_id);.Add(ActionUpdate);;

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

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

// Ссылка на договорTSqlData_cxGridTableView.Create(tv_contracts) do:= False;_Name := 'Ссылки на договоры';_Select := Contracts;:= False;:= True;:= CreateVarAr(['', '']);_Column := tv_contracts_contract;:= tv_contracts_contract;Select_Columns do(tv_contracts_contract);(tv_contracts_kind_order);(tv_contracts_d_start);(tv_contracts_d_end);(tv_contracts_id_contract);(tv_contracts_id_paragraph);(tv_contracts_id_order);(tv_contracts_idk_order);(tv_contracts_status_order);;_Columns.Add(tv_contracts_id_contract);.Add(ActionUpdate);;

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

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

// Источник финансированияGet_SqlData_cxGrid(tv_Source_Financing) = nil thenTSqlData_cxGridTableView.Create(tv_Source_Financing) do

begin_Name := 'Источники финансирования';

GUID_Select := S_F;:= True;:= 1;:= False;_Columns.Add(tv_Source_Financing_Abbreviation);_Columns.Add(tv_Source_Financing_Name);_Columns.Add(tv_Source_Financing_Abbr_Div);_Columns.Add(tv_Source_Financing_Division);_Columns.Add(tv_Source_Financing_Kind_Source);_Columns.Add(tv_Source_Financing_Activity);_Columns.Add(tv_Source_Financing_Date_Close);_Columns.Add(tv_Source_Financing_ID);_Columns.Add(tv_Source_Financing_ID_D);_Columns.Add(tv_Source_Financing_ID_Kind_Source);_Columns.Add(tv_Source_Financing_ID_Activity);_Columns.Add(tv_Source_Financing_ID);.Add(ActionUpdate);_Column := tv_Source_Financing_Abbreviation;:= tv_Source_Financing_Name;;

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

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

// добавление приказов человека

// ---------------------------------------------Get_SqlData_cxGrid(tv_orders) = nil thenTSqlData_cxGridTableView.Create(tv_orders) do:= False;:= False;_Name := 'Приказы человека';_Select := Orders;:= True;:= CreateVarAr(['']);_Column := tv_orders_kind_paragraph;:= tv_orders_kind_paragraph;Select_Columns do(tv_orders_kind_paragraph);(tv_orders_status_text);(tv_orders_ed_group);(tv_orders_spec);(tv_orders_d_start);(tv_orders_kind_training);(tv_orders_institute);(tv_orders_status_order_contract);(tv_orders_kind_paragraph_contract);(tv_orders_d_creation);(tv_orders_d_modification);(tv_orders_id_order);(tv_orders_id_paragraph);(tv_orders_idk_order);(tv_orders_status_order);;_Columns.Add(tv_orders_id_order);.Column_Status_Text := tv_orders_status_text;.Column_ID_order := tv_orders_id_order;.Column_ID_paragraph := tv_orders_id_paragraph;.Column_IDk_order := tv_orders_idk_order;.Visible := True;.OnExecute := Action_Insert_tv_r_c_group.OnExecute;.Add(OptionsOrder.ActionPreview);.Add(OptionsOrder.ActionNavigate);.Add(nil);.Add(ActionUpdate);;

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

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

// начисления

// ---------------------------------------------Get_SqlData_cxGrid(TTree_Nach) = nil thenTSqlData_cxGridTableView.Create(TTree_Nach) do_Name := TTree_Nach.Bands.Items[0].Caption;_Select := Get_Nach_By_ID_Dog;_Update := d_P_ACCOUNTS_CONTRACT;:= True;:= 1;.Add(1);_Column := Tree_Nach_Document;Select_Columns do(Tree_Nach_D_Start);(Tree_Nach_D_End);(Tree_Nach_Kind_Order);(Tree_Nach_Document);(Tree_Nach_Sum);(Tree_Nach_User);(Tree_Nach_Status);(Tree_Nach_ID_Stage);(Tree_Nach_ID_Account_Contract);(Tree_Nach_ID_Basis_Salary);(Tree_Nach_ID_SF);(Tree_Nach_IDK_Order);(Tree_Nach_ID_Paragraph);(Tree_Nach_ID_Order);(Tree_Nach_ID_ERP);;_Columns.Add(Tree_Nach_ID_Basis_Salary, 3);_Columns.Add(Tree_Nach_ID_Paragraph, 0);

//Key_Columns.Add(Tree_Nach_D_Start);_Delete := After_Delete;.Column_Status_Text := Tree_Nach_Document;.Column_ID_order := Tree_Nach_ID_Order;.Column_ID_paragraph := Tree_Nach_ID_Paragraph;.Column_IDk_order := Tree_Nach_IDK_Order;.Column_ID_erp_user := Tree_Nach_ID_ERP;.OnExecute := Action_Create_Nach.OnExecute;.Add(ActionInsert);.Add(ActionDelete);.Add(nil);.Add(OptionsOrder.ActionPreview);.Add(OptionsOrder.ActionNavigate);.Add(nil);.Add(ActionUpdate);_New_Nach := TContainerWrappers.Create;_New_Nach.AddButtonOrderEdit(ButtonEdit_New_Nach, True, False, ''

, ['436, 444']

, [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW]

, [nil, nil, nil, nil]);_New_Nach.AddCustomEdit(DateEdit_New_Nach, True, False, '');_New_Nach.ActionEnter := Action_Go_New_Nach;;

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

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

// добавление планов ПК

// ---------------------------------------------Get_SqlData_cxGrid(tv_plan) = nil thenTSqlData_cxGridTableView.Create(tv_plan) do:= False;:= False;_Name := 'Планы ПК';_Select := Plan_Paragraphs;:= True;:= CreateVarAr(['-1']);_Column := tv_plan_note;:= tv_plan_note;Select_Columns do(tv_plan_note);(tv_plan_summary);(tv_plan_status_text);(tv_plan_hisdate);(tv_plan_d_creation);(tv_plan_d_modification);(tv_plan_id_paragraph);(tv_plan_id_order);(tv_plan_idk_order);(tv_plan_status_order);(tv_plan_id_erp_user);;_Columns.Add(tv_plan_id_paragraph);.Column_Status_Text := tv_plan_status_text;.Column_ID_order := tv_plan_id_order;.Column_ID_paragraph := tv_plan_id_paragraph;.Column_IDk_order := tv_plan_idk_order;.Column_Status_Order := tv_plan_status_order;.Column_ID_erp_user := tv_plan_id_erp_user;.Column_hisdate := tv_plan_hisdate;.Column_summary := tv_plan_summary;.Column_note := tv_plan_note;.Column_d_creation := tv_plan_d_creation;.Add(OptionsOrder.ActionPreview);.Add(OptionsOrder.ActionNavigate);.Add(nil);.Add(ActionUpdate);;

// Программы обучения в испортеTSqlData_cxGridTableView.Create(tv_Spec) do:= False;_Name := tv_Spec.Bands.Items[0].Caption;_Select := Get_List_Spec_By_Params;:= True;:= 2;[1] := IDK_Level_Spec;Select_Columns do(tv_Spec_Name, 2);(tv_Spec_Q, 1);(tv_Spec_ID, 0);(tv_Spec_IDK_Level_Spec, 6);(tv_Spec_id_discipline);(tv_Spec_idk_discipline);;_Columns.Add(tv_Spec_ID, 0);_Column := tv_Spec_Name;.Add(tv_Spec_Name);_New_Spec := TContainerWrappers.Create;_New_Spec.AddCustomEdit(cxTextEditNew_Spec_Name, True, False, '');_New_Spec.AddCustomEdit(cxTextEditNew_Spec_Quality, False, False, '');;

// Вид обученияTSqlData_cxGridTableView.Create(tv_Kind_Training) do:= False;_Name := 'Виды обучения';_Select := Kind_Training;:= True;:= False;Select_Columns do(tv_Kind_Training_IDK_TRAINING);(tv_Kind_Training_Name);;_Columns.Add(tv_Kind_Training_IDK_TRAINING);_Column := tv_Kind_Training_Name;:= tv_Kind_Training_Name;

end;

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

// добавление подразделение-организаторов обучения

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

if Get_SqlData_cxGrid(tv_Org_Division) = nil thenTSqlData_cxGridTableView.Create(tv_Org_Division) do

begin_Name := 'Организаторы обучения';

Editing := False;_Select := Get_List_Divisions;:= True;:= CreateVarAr([IDK_Level_Spec]);_Columns.Add(tv_Org_Division_Abbr);_Columns.Add(tv_Org_Division_Name);_Columns.Add(tv_Org_Division_ID);_Columns.Add(tv_Org_Division_ID);_Column := tv_Org_Division_Abbr;.Add(tv_Org_Division_Abbr);.Add(tv_Org_Division_Name);_New_Spec_Div := TContainerWrappers.Create;_New_Spec_Div.AddCustomEdit(DateEditNew_Spec_Div_D_Start, True, False, '');_New_Spec_Div.AddPopupEdit(PopupEditNew_Spec_Div_Spec, True, False,_Spec, tv_Spec, tv_Spec_ID, [tv_Spec_Name], '');_New_Spec_Div.AddPopupEdit(PopupEditNew_Spec_Div_KT, True, False,_Kind_Training, tv_Kind_Training, tv_Kind_Training_IDK_TRAINING,

[tv_Kind_Training_Name], '');_New_Spec_Div.AddPopupEdit(PopupEditNew_Spec_Div_SF, True, False,_Source_Financing, tv_Source_Financing, tv_Source_Financing_ID,

[tv_Source_Financing_Name], '');_New_Spec_Div.AddPopupEdit(PopupEditNew_Spec_Div_Institute, True, False,_Org_Division, tv_Org_Division, tv_Org_Division_ID,

[tv_Org_Division_Abbr, tv_Org_Division_Name], '');_New_Spec_Div.AddPopupEdit(PopupEditNew_Spec_Div_Div, True, False,_Org_Division, tv_Org_Division, tv_Org_Division_ID,

[tv_Org_Division_Abbr, tv_Org_Division_Name], '');_New_Spec_Div.MakeSynchronize_Similar([PopupEditNew_Spec_Div_Institute,_Spec_Div_Institute], False);_New_Spec_Div.OnChangeWrapper := DoChanged_cW_Spec_Div;

end;

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

// добавление подразделение-организаторов обучения

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

if Get_SqlData_cxGrid(TTree_Stat) = nil thenTSqlData_cxGridTableView.Create(TTree_Stat) do_Name := TTree_Stat.Bands.Items[0].Caption;:= False;_Select := Get_Stat_Data_By_Period;:= True;:= 2;_Columns.Add(Tree_Stat_Inst);_Columns.Add(Tree_Stat_Spec_Name);_Columns.Add(Tree_Stat_FIO);_Columns.Add(Tree_Stat_EG);_Columns.Add(Tree_Stat_D_Start);_Columns.Add(Tree_Stat_D_End);_Columns.Add(Tree_Stat_Order_Start);_Columns.Add(Tree_Stat_Order_End);_Columns.Add(Tree_Stat_Contract);_Columns.Add(Tree_Stat_Org);_Columns.Add(Tree_Stat_Money);_Columns.Add(Tree_Stat_Money_NDS);_Columns.Add(Tree_Stat_Cert);_Columns.Add(Tree_Stat_Hours_Fact);_Columns.Add(Tree_Stat_Hours_Plan);_Columns.Add(Tree_Stat_Last_Date);_Columns.Add(Tree_Stat_Contract_Main);_Columns.Add(Tree_Stat_Org_Main);_Columns.Add(Tree_Stat_ID_E);_Columns.Add(Tree_Stat_ID_C);_Columns.Add(Tree_Stat_ID_Student);_Columns.Add(Tree_Stat_ID_EG);_Columns.Add(Tree_Stat_ID_E);_Columns.Add(Tree_Stat_ID_Student);_Column := Tree_Stat_FIO;.OnExecute := Action_Read_Stat.OnExecute;_Stat := TContainerWrappers.Create;_Stat.AddCustomEdit(DateEdit_Stat_Begin, False, False);_Stat.AddCustomEdit(DateEdit_Stat_End, False, False);;Get_SqlData_cxGrid(TTree_MC) = nil thenTSqlData_cxGridTableView.Create(TTree_MC) do:= False;_Name := TTree_MC.Bands.Items[0].Caption;_Name := 'рамочный договор';_Select := Get_List_MC;_Update := d_P_CONTRACTS;_Delete := GUID_Delete_Main_Contract;_Delete_Exchange := Delete_Main_Contract;:= True;:= 3;_Column := Tree_MC_Org;Select_Columns do(Tree_MC_Org, 2);(Tree_MC_Kind);(Tree_MC_Hisdate);(Tree_MC_Start, 3);(Tree_MC_End, 4);(Tree_MC_Count);(Tree_MC_Order);(Tree_MC_Number);(Tree_MC_Old_Number);(Tree_MC_User);(Tree_MC_ID_Contract, 0);(Tree_MC_ID_CA, 2);(Tree_MC_ID_MT);(Tree_MC_ID_MO);(Tree_MC_ID_Paragraph);(Tree_MC_ID_Order);(Tree_MC_IDK_Order);(Tree_MC_ID_ERP);(Tree_MC_ID_Status);;_Columns.Add(Tree_MC_ID_Contract, 0);.Column_Status_Text := Tree_MC_Order;.Column_identifier := Tree_MC_Number;.Column_ID_order := Tree_MC_ID_Order;.Column_ID_paragraph := Tree_MC_ID_Paragraph;.Column_IDk_order := Tree_MC_IDK_Order;.Column_ID_erp_user := Tree_MC_ID_ERP;.Column_User_Name := Tree_MC_User;.Visible := True;.OnExecute := Action_New_MC.OnExecute;.Add(Action_New_MC);.Add(ActionDelete);.Add(nil);.Add(OptionsOrder.ActionPreview);.Add(OptionsOrder.ActionNavigate);.Add(nil);.Add(ActionUpdate);

{cxPopupEdit_New_Listener_Contract_Organization.Properties.PopupControl :=_Form_Find_Org;}(Tree_MC_Org.Properties).PopupControl := Current_Form_Find_Org;PopupColumnsList.Add(Tree_MC_Org) do:= Tree_MC_ID_CA;:= Current_Form_Find_Org.Tree_Org_ID_CA;:= Current_Form_Find_Org.Tree_Org_Name;;_Filter_Org.Properties.PopupControl := Current_Form_Find_Org;_Filter_Contracts_Main := TContainerWrappers.Create;_Filter_Contracts_Main.AddCustomEdit(DateEdit_Filter_Start, False, False);_Filter_Contracts_Main.AddCustomEdit(DateEdit_Filter_End, False, False);_Filter_Contracts_Main.AddPopupEdit(PopupEdit_Filter_Org

, False, False, Current_Form_Find_Org.cxGrid_Org

, Current_Form_Find_Org.TTree_Org, Current_Form_Find_Org.Tree_Org_ID_CA

, [Current_Form_Find_Org.Tree_Org_Name], '');PageControl_Main.ActivePageIndex = 3Filter_MC_Changed(DateEdit_Filter_Start);;

// ---------------------------------------------_New_Contract_Main_Start.Date := Date;_New_Contract_Main_End.Date := Date;cw_New_Contract_Main = nil_New_Contract_Main.Properties.PopupControl := Current_Form_Find_Org;_New_Contract_Main := TContainerWrappers.Create;_New_Contract_Main.AddPopupEdit(PopupEdit_New_Contract_Main

, True, False

, Current_Form_Find_Org.cxGrid_Org

, Current_Form_Find_Org.TTree_Org

, Current_Form_Find_Org.Tree_Org_ID_CA

, [Current_Form_Find_Org.Tree_Org_Name], '');_New_Contract_Main.AddButtonOrderEdit(ButtonEdit_New_Contract_Main

, True, False, '', ['24790']

, [OBE_CHOOSE, OBE_NEW, OBE_INNAVIGATE, OBE_PREVIEW]

, [nil, nil, nil, nil]);_New_Contract_Main.AddCustomEdit(TextEdit_New_Contract_Main, False, False, '');_New_Contract_Main.AddCustomEdit(DateEdit_New_Contract_Main_Start, True, False, '');_New_Contract_Main.AddCustomEdit(DateEdit_New_Contract_Main_End, False, False, '');_New_Contract_Main.ActionEnter := Action_Insert_Contract_Main;;

{ Скрываем ненужные страницы }_Editing.TabVisible := False;_Add.TabVisible := False;

{ Прочитаем параметры из реестра }_Restore_Params(Curr_Reg_Path, True);

// *****************************************************************************

// *****************************************************************************_Plan_Filters := TContainerWrappers.Create;_Plan_Filters.AddCustomEdit(cxSpinEdit_Plan_Filters_Year, False, False, '');_Plan_Filters.AddPopupEdit(cxPopupEdit_Plan_Filters_Plan, False, False,_Plan, tv_plan, tv_plan_id_paragraph, [tv_plan_note], '');_Plan_Filters.AddCustomEdit(cxTextEdit_Plan_Filters_Summary, False, True,

'');_Plan_Filters.AddCustomEdit(cxTextEdit_Plan_Filters_Note, False, True, '');_Plan_Filters.ActionApply := Plan_Apply;_Plan_Filters.ActionRefuse := Plan_Refuse;_Plan_Filters.OnChangeWrapper := DoChanged_cW_Plan_Filters;

{ Устанавливаем значение фильтра }_Plan_Filters.wrappers[cxSpinEdit_Plan_Filters_Year].Value := IntToStr

(YearOf(Date));cxPopupEdit_Plan_Filters_Plan.Tag <> 0begin_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].Value :=(cxPopupEdit_Plan_Filters_Plan.Tag);_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].ValueDisplay :=(cxPopupEdit_Plan_Filters_Plan.Text);

end;;

{ Добавление организатора (специальности подразделения)}

procedure TForm_Event.ButtonEdit_Import_Spec_DivClick(Sender: TObject);: TSForm;: Integer;// 1:= CreateSForm(self, 'fNew_Spec_Div', TabSheet_New_Spec_Div.Caption,_Path + TabSheet_New_Spec_Div.Caption, Panel_New_Spec_Div, tdb_Apply);_New_Spec_Div.ClearWrappers;_New_Spec_Div.wrappers[ DateEditNew_Spec_Div_D_Start].Value :=_Import.wrappers[DateEdit_Import_Start].Value;_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Spec].Value :=_Import.wrappers[PopupEdit_Import_Spec].Value;_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Spec].ValueDisplay :=_Import.wrappers[PopupEdit_Import_Spec].ValueDisplay;

// Институтid_d_import <> ''_SqlData_cxGrid(tv_Org_Division).Read_Data_First;:= FindGridRecordIndex(tv_Org_Division, [tv_Org_Division_ID]

, CreateVarAr([id_d_import]));i >= 0_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Institute].Value :=(tv_Org_Division.DataController.Values[i, tv_Org_Division_ID.Index]);_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Institute].ValueDisplay :=(tv_Org_Division.DataController.Values[i, tv_Org_Division_Abbr.Index]);_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Div].Value :=_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Institute].Value;_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Div].ValueDisplay :=_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Institute].ValueDisplay;;Get_SqlData_cxGrid(tv_Source_Financing).Parameters[1] <> id_d_import_SqlData_cxGrid(tv_Source_Financing).Parameters[1] := id_d_import;_SqlData_cxGrid(tv_Source_Financing).Read_Data;tv_Source_Financing.DataController.RecordCount = 1_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_SF].Value :=(tv_Source_Financing.DataController.Values[0, tv_Source_Financing_ID.Index]);_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_SF].ValueDisplay :=(tv_Source_Financing.DataController.Values[0, tv_Source_Financing_Name.Index]);;;;

// Кафедраid_d_kaf <> ''_SqlData_cxGrid(tv_Org_Division).Read_Data_First;:= FindGridRecordIndex(tv_Org_Division, [tv_Org_Division_ID]

, CreateVarAr([id_d_kaf]));i >= 0_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Div].Value :=(tv_Org_Division.DataController.Values[i, tv_Org_Division_ID.Index]);_New_Spec_Div.wrappers[PopupEditNew_Spec_Div_Div].ValueDisplay :=(tv_Org_Division.DataController.Values[i, tv_Org_Division_Name.Index]);;;.Position := poScreenCenter;mf.ShowModal = mrok then// 2Get_SqlData_cxGrid(tv_spec_div_popup).Insert_New(([VarToStr(cW_New_Spec_Div.Wrappers[PopupEditNew_Spec_Div_Spec].Value)

, VarToStr(cW_New_Spec_Div.Wrappers[PopupEditNew_Spec_Div_Div].Value)

, VarToStr(cW_New_Spec_Div.Wrappers[PopupEditNew_Spec_Div_KT].Value)

, VarToStr(cW_New_Spec_Div.Wrappers[DateEditNew_Spec_Div_D_Start].Value)

, VarToStr(cW_New_Spec_Div.Wrappers[PopupEditNew_Spec_Div_Institute].Value)

, '70508' // уровень образования

, VarToStr(cW_New_Spec_Div.Wrappers[PopupEditNew_Spec_Div_SF].Value)]))// 3:= tv_spec_div_popup.DataController.Values

[tv_spec_div_popup.DataController.FocusedRecordIndex, tv_spec_div_popup_id_spec_div.Index];_SqlData_cxGrid(tv_spec_div_popup).Read_Data;:= FindGridRecordIndex(tv_spec_div_popup, [tv_spec_div_popup_id_spec_div]

, CreateVarAr([IntToStr(i)]));i >= 0_Import.wrappers[PopupEdit_Import_Spec_Div].Value := VarToStr

(tv_spec_div_popup.DataController.Values[i, tv_spec_div_popup_id_spec_div.Index]);_Import.wrappers[PopupEdit_Import_Spec_Div].ValueDisplay := VarToStr

(tv_spec_div_popup.DataController.Values[i, tv_spec_div_popup_institute.Index])

+ ', ' + VarToStr((tv_spec_div_popup.DataController.Values[i, tv_spec_div_popup_name_div.Index]))

+ ', ' + VarToStr((tv_spec_div_popup.DataController.Values[i, tv_spec_div_popup_name_spec.Index]))

+ ', ' + VarToStr((tv_spec_div_popup.DataController.Values[i, tv_spec_div_popup_kind_training.Index]));;; // 3; // 2// 1assigned(mf) then(mf);(GetParentForm(ButtonEdit_Import_Spec).Handle);Get_SqlData_cxGrid(tv_Source_Financing).Parameters[1] <> ''_SqlData_cxGrid(tv_Source_Financing).Parameters[1] := '';_SqlData_cxGrid(tv_Source_Financing).IsFirstRead := True;;; // 1;

{ Добавление УМК}TForm_Event.ButtonEdit_Import_UMKClick(Sender: TObject);: TSForm;: Integer;// 1:= CreateSForm(self, 'fNew_UMK', TabSheet_New_UMK.Caption,_Path + TabSheet_New_UMK.Caption, Panel_New_UMK, tdb_Apply);.Position := poScreenCenter;_New_UMK.Wrappers[SpinEdit_New_UMK_Hours].Value := Import_Hours;_New_UMK.Wrappers[SpinEdit_New_UMK_Hours_SR].Value := Import_Hours_SR;mf.ShowModal = mrok then// 2MSystemServices.ExchangeData(Create_UMK_By_ID_SD

,CreateVarAr([VarToStr(cW_Import.Wrappers[PopupEdit_Import_Spec_Div].Value)

, VarToStr(cw_New_UMK.Wrappers[SpinEdit_New_UMK_Hours].Value)

, VarToStr(cw_New_UMK.Wrappers[SpinEdit_New_UMK_Hours_SR].Value)])

, 'Не смогли добавить методический комплекс.')

then// 3_TableView.Read_Data;:= FindGridRecordIndex(tv_com_spec, [tv_com_spec_id_spec_div],([VarToStr(cW_Import.Wrappers[PopupEdit_Import_Spec_Div].Value)]));i >= 0 then_Import.wrappers[PopupEdit_Import_UMK].Value := VarToStr

(tv_com_spec.DataController.Values[i, tv_com_spec_id_met_complex.Index]);_Import.wrappers[PopupEdit_Import_UMK].ValueDisplay := VarToStr

(tv_com_spec.DataController.Values[i, tv_com_spec_hours.Index])

+ ', ' + VarToStr(VarToStr(tv_com_spec.DataController.Values[i, tv_com_spec_sam.Index])

+ ', ' + VarToStr(tv_com_spec.DataController.Values[i, tv_com_spec_name_spec.Index])

+ ', ' + tv_com_spec.DataController.Values[i, tv_com_spec_name_div.Index])

+ ', ' + VarToStr(tv_com_spec.DataController.Values[i, tv_com_spec_kind_training.Index]);; // 3; // 2// 1assigned(mf) then(mf);(GetParentForm(ButtonEdit_Import_Spec).Handle);

end; // 1;

{ Выбрали журнал - узнаем рег.номер}

procedure TForm_Event.ButtonEdit_New_CertPropertiesEditValueChanged(: TObject);i: integer; data: olevariant;((Sender = ButtonEdit_New_Cert) or (Sender = PopupEdit_New_Cert_Kind_Doc))(Cont_Make_Cert <> nil)(VarToStr(Cont_Make_Cert.Wrappers[ButtonEdit_New_Cert].Value) <> '')begin:= MSystemServices.SelectData(Get_Reg_Number_By_ID_Paragraph

, CreateVarAr([VarToStr(Cont_Make_Cert.Wrappers[ButtonEdit_New_Cert].Value)

, VarToStr(Cont_Make_Cert.Wrappers[PopupEdit_New_Cert_Kind_Doc].Value)])

, i, 'Не смогли узнать регистрационный номер в журнале.');

if VarIsArray(data)VarToStr(data[0][0]) = ''Cont_Make_Cert.Wrappers[SpinEdit_New_Cert_Reg].Value := 1Cont_Make_Cert.Wrappers[SpinEdit_New_Cert_Reg].Value := VarToStr(data[0][0] + 1);VarToStr(data[0][1]) = ''Cont_Make_Cert.Wrappers[SpinEdit_New_Cert_Number].Value := 1Cont_Make_Cert.Wrappers[SpinEdit_New_Cert_Number].Value := VarToStr(data[0][1] + 1);;;;TForm_Event.cxButtonEdit_PC_Create_DirectionClick(Sender: TObject);_Insert_New_DirectionExecute(self);;TForm_Event._New_Listener_Contract_D_EndPropertiesEditValueChanged

(Sender: TObject);_New_Listener.wrappers[cxDateEdit_New_Listener_D_End].Value :=_New_Listener.wrappers[cxDateEdit_New_Listener_Contract_D_End].Value;;TForm_Event._New_Listener_Contract_D_StartPropertiesEditValueChanged

(Sender: TObject);_New_Listener.wrappers[cxDateEdit_New_Listener_D_Start].Value :=_New_Listener.wrappers[cxDateEdit_New_Listener_Contract_D_Start].Value;;TForm_Event.cxDateEdit_New_Listener_D_EndPropertiesEditValueChanged

(Sender: TObject);_New_Listener.wrappers[cxDateEdit_New_Listener_Contract_D_End].Value :=_New_Listener.wrappers[cxDateEdit_New_Listener_D_End].Value;;TForm_Event.cxDateEdit_New_Listener_D_StartPropertiesEditValueChanged

(Sender: TObject);_New_Listener.wrappers[cxDateEdit_New_Listener_Contract_D_Start].Value :=_New_Listener.wrappers[cxDateEdit_New_Listener_D_Start].Value;;TForm_Event.cxPageControl_StudentPageChanging(Sender: TObject;: TcxTabSheet; var AllowChange: Boolean);NewPage = cxTabSheet_Orders then_tv_ordersExecute(self);NewPage = cxTabSheet_Anketa then_AnketaExecute(self);NewPage = cxTabSheet_Contracts then_Contract_ParamsExecute(self);NewPage = cxTabSheet_StagesGet_SqlData_cxGrid(TTree_Nach).Read_Data_First;;TForm_Event.cxPopupEdit_KBA_EndPropertiesInitPopup(Sender: TObject);_tv_kba_endExecute(self);;TForm_Event.cxPopupEdit_New_DirectionPropertiesInitPopup

(Sender: TObject);_tv_kind_directionExecute(self);;TForm_Event._New_Listener_Contract_Source_FinansingPropertiesInitPopup

(Sender: TObject);_tv_source_finansingExecute(self);;TForm_Event._New_Listener_Ed_GroupPropertiesEditValueChanged(Sender: TObject);VarToStr(cW_New_Listener.wrappers[cxPopupEdit_New_Listener_Ed_Group]

.Value) <> '' then// 1_New_Listener.wrappers[cxDateEdit_New_Listener_D_Start].Value := VarToStr

(tv_r_c_groups.DataController.Values

[tv_r_c_groups.DataController.FocusedRecordIndex,_r_c_groups_d_start.Index]);_New_Listener.wrappers[cxDateEdit_New_Listener_D_End].Value := VarToStr

(tv_r_c_groups.DataController.Values

[tv_r_c_groups.DataController.FocusedRecordIndex,_r_c_groups_d_end.Index]);_New_Listener.wrappers[cxDateEdit_New_Listener_Contract_D_Start].Value :=_New_Listener.wrappers[cxDateEdit_New_Listener_D_Start].Value;_New_Listener.wrappers[cxDateEdit_New_Listener_Contract_D_End].Value :=_New_Listener.wrappers[cxDateEdit_New_Listener_D_End].Value;// 1// 2_New_Listener.wrappers[cxDateEdit_New_Listener_D_Start].Value := '';_New_Listener.wrappers[cxDateEdit_New_Listener_D_End].Value := '';; // 2;TForm_Event.cxPopupEdit_New_Listener_Ed_GroupPropertiesInitPopup

(Sender: TObject);_tv_r_c_groupsExecute(self);;TForm_Event._New_Listener_Kind_Basis_ActionPropertiesInitPopup

(Sender: TObject);_tv_kba_startExecute(self);;TForm_Event.cxPopupEdit_New_Listener_Kind_OrderPropertiesInitPopup

(Sender: TObject);_tv_kind_orderExecute(self);;TForm_Event.cxPopupEdit_New_Listener_OrderPropertiesEditValueChanged

(Sender: TObject);not cW_New_Listener.wrappers[cxPopupEdit_New_Listener_Order].IsClear then// 1_New_Listener.wrappers[cxDateEdit_New_Listener_Contract_D_Start].Value :=(tv_contracts.DataController.Values

[tv_contracts.DataController.FocusedRecordIndex,_contracts_d_start.Index]);_New_Listener.wrappers[cxDateEdit_New_Listener_Contract_D_End].Value :=(tv_contracts.DataController.Values

[tv_contracts.DataController.FocusedRecordIndex,_contracts_d_end.Index]);; // 1;TForm_Event.cxPopupEdit_New_Listener_OrderPropertiesInitPopup

(Sender: TObject);_tv_contractsExecute(self);;TForm_Event.cxPopupEdit_New_R_C_Group_Ed_GroupPropertiesInitPopup

(Sender: TObject);_tv_ed_groupExecute(self);;TForm_Event.cxPopupEdit_New_R_C_Group_Met_ComplexPropertiesInitPopup

(Sender: TObject);_tv_com_specExecute(Sender);;TForm_Event.cxPopupEdit_New_R_C_Plan_Spec_DivPropertiesInitPopup

(Sender: TObject);_tv_spec_div_popupExecute(self);;TForm_Event.cxPopupEdit_PC_Kind_DirectionPropertiesInitPopup

(Sender: TObject);_tv_kind_directionExecute(self);;TForm_Event.cxPopupEdit_PC_PostPropertiesInitPopup(Sender: TObject);_tv_postsExecute(self);;TForm_Event.cxPopupEdit_Plan_Filters_PlanPropertiesInitPopup

(Sender: TObject);_tv_planExecute(self);;TForm_Event.DoChanged_cW_New_R_C_Plan(AWrapper: TCustomEditWrapper);_OkButton(Panel_New_R_C_Plan, cW_New_R_C_Plan.IsNotEmptyMandatory);;TForm_Event.DoChanged_cW_New_R_C_Group(AWrapper: TCustomEditWrapper);_OkButton(Panel_New_R_C_Group,_New_R_C_Group.IsNotEmptyMandatory);

end;

{ Заполнение полей ввода при импорте из файла}

procedure TForm_Event.Action_After_Show_New_AnketaExecute(Sender: TObject);Form_Anketa_For_New docurr_sex = '1'SEX.ItemIndex := 0SEX.ItemIndex := 1;.Text := curr_surname;.Text := curr_name;.Text := curr_patronymic;_.Text := curr_phone;_.Text := curr_email;_OF_BIRTH.Date := StrToDate(curr_birthday);_D_START.Date := StrToDate(curr_birthday);(DATE_OF_BIRTH);ID_E <> ''Form_Anketa_For_New.ModalResult := mryes;

end;;

{ Выставление новых начислений}

procedure TForm_Event.Action_Create_NachExecute(Sender: TObject);new_form: TSForm;// 1_form := CreateSForm(self, TabSheet_New_Nach.Name + '1'

, TabSheet_New_Nach.Caption

, Add_Path + TabSheet_New_Nach.Caption, Panel_New_Nach, tdb_Apply);

{ Устанавливаем значение по умолчанию }_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := Cont_New_Nach.ActionEnter;_form.ShowModal;// 1assigned(new_form)FreeAndNil(new_form);; // 1

end;

{ Выставление новых начислений по выделенным договорам}

procedure TForm_Event.Action_Create_Nach_AllExecute(Sender: TObject);new_form: TSForm;// 1_form := CreateSForm(self, TabSheet_New_Nach.Name + '1'

, TabSheet_Create_Nach_All.Caption

, Add_Path + TabSheet_Create_Nach_All.Caption, Panel_Create_Nach_All, tdb_Apply);

{ Устанавливаем значение по умолчанию }_form.Position := poScreenCenter;_form.PanelButtons.auto_cxOkButton.Action := Cont_New_Nach_All.ActionEnter;_form.ShowModal;// 1assigned(new_form)FreeAndNil(new_form);; // 1

end;

{ Выставление новых начислений по выделенным участникам }

procedure TForm_Event.Action_Go_Nach_AllExecute(Sender: TObject);L: TIntegerList; i: integer;Get_SqlData_cxGrid(tv_listeners), Cont_New_Nach_All do(L);.StartSequenceActions(False, True);i := 0 to L.Count - 1 do.ExchangeData(Create_New_Nach

, CreateVarAr([VarToStr(GridTableView.DataController.[L.Items[i], tv_listeners_id_contract.Index])

, VarToStr(Wrappers[DateEdit_Create_Nach_All].Value)

, VarToStr(Wrappers[ButtonEdit_Create_Nach_All].Value)]));.EndSequenceActions;_Data;.ShowVNDialog(vnd_Information, 'Результат работы', 'Начисления сформированы.');;;TForm_Event.Action_Add_ContractExecute(Sender: TObject);= 'Участники';: TSForm;_o, id_p, def_Ann, def_Basis, def_Note, def_Ass, NewContextIndex, IDk_List,_List_Name, ko_ID_Metaterm, kind_order, def_Ident, def_IdenDate,_Period_Nubbering, id_NewSeries, NewSeries: WideString;: TStringList;: Boolean;: TcxDataController;: Integer;:= False;// 1:= CreateSForm(self, 'fNew_Listeners', 'Договор', Add_Path + Name,_New_Listener, tdb_Apply);(False);_New_Listener.wrappers[cxPopupEdit_New_Listener_Contract_Source_Finansing]

.Value := VarToStr(tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_id_source.Index]);_New_Listener.wrappers[cxPopupEdit_New_Listener_Contract_Source_Finansing]

.ValueDisplay := VarToStr(tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_source.Index]);:= tv_listeners.DataController;:= tv_listeners.DataController.FocusedRecordIndex;_New_Listener.wrappers[cxPopupEdit_New_Listener_FIO].Value := VarToStr

(DC.Values[FRI, tv_listeners_id_e.Index]);_New_Listener.wrappers[cxPopupEdit_New_Listener_FIO].ValueDisplay :=(DC.Values[FRI, tv_listeners_fio.Index]);_New_Listener.wrappers[cxPopupEdit_New_Listener_Ed_Group].Value :=(DC.Values[FRI, tv_listeners_id_ed_group.Index]);_New_Listener.wrappers[cxPopupEdit_New_Listener_Ed_Group].ValueDisplay :=(DC.Values[FRI, tv_listeners_ed_group.Index]);_New_Listener.wrappers[cxDateEdit_New_Listener_D_Start].Value := VarToStr

(DC.Values[FRI, tv_listeners_d_start.Index]);_New_Listener.wrappers[cxDateEdit_New_Listener_D_End].Value := VarToStr

(DC.Values[FRI, tv_listeners_d_end_plan.Index]);_New_Listener.wrappers[cxPopupEdit_New_Listener_Kind_Basis_Action]

.Value := VarToStr(DC.Values[FRI,_listeners_idkba_transfer.Index]);_New_Listener.wrappers[cxPopupEdit_New_Listener_Kind_Basis_Action]

.ValueDisplay := VarToStr(DC.Values[FRI,_listeners_kind_basis_action.Index]);_New_Listener.wrappers[cxButtonEdit_New_Listener_Order_Start].Value :=(DC.Values[FRI, tv_listeners_id_paragraph_start.Index]);_New_Listener.wrappers[cxButtonEdit_New_Listener_Order_Start]

.ValueDisplay := VarToStr(DC.Values[FRI,_listeners_status_text_order_start.Index]);_New_Listener.wrappers[cxCurrencyEdit_New_Listener_Contract_Money]

.Value := VarToStr(tv_r_c_plan.DataController.GetValue

(tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_money.Index));_New_Listener.wrappers[cxCurrencyEdit_New_Listener_Contract_Money]

.ValueDisplay := tv_r_c_plan.DataController.GetDisplayText

(tv_r_c_plan.DataController.FocusedRecordIndex, tv_r_c_plan_money.Index);_New_Listener.OnChangeWrapper(nil);mf.ShowModal = mrok then// 2(VarToStr(cW_New_Listener.wrappers[cxPopupEdit_New_Listener_Kind_Order]

.Value) <> '') and (cxPopupEdit_New_Listener_Order.Enabled) and

(VarToStr(cW_New_Listener.wrappers[cxPopupEdit_New_Listener_Order]

.Value) = '') then// 3_order := VarToStr(cW_New_Listener.wrappers

[cxPopupEdit_New_Listener_Kind_Order].Value);:= TStringList.Create;.Add(kind_order);_o := vnListAgent.LA_CreateList(ks, def_Ann, def_Basis, def_Note,_Ass, NewContextIndex, IDk_List, k_List_Name, ko_ID_Metaterm, '',);id_o = EmptyWideStr then// 4.Free;;; // 4_p := vnListAgent.LA_CreateList(ks, def_Ann, def_Basis, def_Note,_Ass, NewContextIndex, IDk_List, k_List_Name, ko_ID_Metaterm,_o, False);.Free;id_p = EmptyWideStr then;

// отправить на подпись..LA_Send_Signature(id_o, '', datetostr(now), True);.LA_SetIdentifier(id_o, def_Ident, ID_Period_Nubbering,_NewSeries, NewSeries, def_IdenDate, True, False,

'Регистрация договора');:= MSystemServices.ExchangeData(Add_Contract,([cW_New_Listener.wrappers[cxPopupEdit_New_Listener_FIO]

.Value, cW_New_Listener.wrappers[_New_Listener_Contract_Organization].Value,_New_Listener.wrappers[cxDateEdit_New_Listener_D_Start].Value,_New_Listener.wrappers[cxDateEdit_New_Listener_D_End].Value,_p, cW_New_Listener.wrappers[_New_Listener_Contract_Source_Finansing].Value,(tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_id_spec_div.Index]),_New_Listener.wrappers[cxPopupEdit_New_Listener_Ed_Group].Value,_New_Listener.wrappers[cxPopupEdit_New_Listener_Kind_Basis_Action]

.Value, cW_New_Listener.wrappers

[cxButtonEdit_New_Listener_Order_Start].Value,(cxCurrencyEdit_New_Listener_Contract_Money.EditValue),(DC.Values[FRI, tv_listeners_id_student.Index]),_New_Listener.wrappers[cxTextEdit_New_Listener_Basis].Value,_New_Listener.wrappers[cxTextEdit_New_Listener_FIO].Value,_New_Listener.wrappers[cxTextEdit_New_Listener_FIO_R].Value,_New_Listener.wrappers[cxPopupEdit_New_Listener_Post].Value]));; // 3ok then// 6_SqlData_cxGrid(tv_listeners).Read_Data;cxPageControl_Student.ActivePage = cxTabSheet_Contracts then_Contract_ParamsExecute(self);; // 6; // 2// 1assigned(mf) then// 7(mf);(True);

end; // 7; // 1;

{ Забрать удостоверение}

procedure TForm_Event.Action_Delete_CertificateExecute(Sender: TObject);L: tintegerlist; i: integer;HandymanFunctions.ShowVNDialog(vnd_Confirmation, 'Подтверждение удаления'

, 'Удалить выделенные удостоверения ('

+ IntToStr(tv_listeners.Controller.SelectedRowCount) + ')?')with Get_SqlData_cxGrid(tv_listeners), GridTableView.DataController do(L);.StartSequenceActions(False, True);i := 0 to L.Count - 1 doMSystemServices.ExchangeData(Delete_Certificate

, CreateVarAr([VarToStr(Values[L.Items[i], tv_listeners_ID_Certificate.Index])])

, 'Не смогли удалить сертификат '

+ VarToStr(Values[L.Items[i], tv_listeners_certificate.Index]))[L.Items[i], tv_listeners_certificate.Index] := null;[L.Items[i], tv_listeners_Cert_Date.Index] := null;[L.Items[i], tv_listeners_Reg_Number.Index] := null;[L.Items[i], tv_listeners_Kind_Cert.Index] := null;[L.Items[i], tv_listeners_ID_Kind_Cert.Index] := null;[L.Items[i], tv_listeners_ID_Certificate.Index] := null;[L.Items[i], tv_listeners_ID_Doc_Cert.Index] := null;[L.Items[i], tv_listeners_ID_Reg.Index] := null;[L.Items[i], tv_listeners_hours.Index] := null;;.EndSequenceActions;;;TForm_Event.Action_Delete_ContractExecute(Sender: TObject);_C: string;: TcxDataController;: Boolean;: TIntegerList;: Integer;_SqlData_cxGrid(tv_listeners).GetSelectedRecordIndexList(List);(List.Count > 0) and HandymanFunctions.ShowVNDialog(vnd_Confirmation,

'Удаление договоров',

'Вы действительно хотите удалить договора у выбранных студентов (' +

IntToStr(List.Count) + ')?') then// 1.StartSequenceActions(False, True);:= tv_listeners.DataController;i := 0 to (List.Count - 1) do// 2_C := VarToStr(DC.Values[List.Items[i],_listeners_id_contract.Index]);:= MSystemServices.ExchangeData(Delete_Contract, VarArrayOf([ID_C]));ok then// 3.Values[List.Items[i], tv_listeners_id_contract.Index] := null;.Values[List.Items[i],_listeners_id_paragraph_contract.Index] := null;.Values[List.Items[i], tv_listeners_org.Index] := null;.Values[List.Items[i], tv_listeners_money.Index] := null;.Values[List.Items[i], tv_listeners_NDS.Index] := null;.Values[List.Items[i],_listeners_status_text_contract.Index] := null;; // 3; // 2.EndSequenceActions;ok then_Contract_Params.ClearWrappers;; // 1;

{ Удалить выставленные начисления}TForm_Event.Action_Delete_NachExecute(Sender: TObject);i: integer; L: TIntegerlist;HandymanFunctions.ShowVNDialog(vnd_Confirmation, 'Удаление начислений'

, 'Удалить выставленные начисления у выделенных договоров?')

then with Get_SqlData_cxGrid(tv_listeners), GridTableView.DataController do(L);.StartSequenceActions(False, True);i := 0 to L.Count - 1 doMSystemServices.ExchangeData(Delete_Nach_By_ID_Dog

, CreateVarAr([VarToStr(Values[L.Items[i], tv_listeners_id_contract.Index])])

, 'Не смогли удалить начисления')begin

Values[L.Items[i], tv_listeners_money.Index] := null;[L.Items[i], tv_listeners_NDS.Index] := null;;.EndSequenceActions;cxPageControl_Student.ActivePage = cxTabSheet_StagesGet_SqlData_cxGrid(TTree_Nach).Read_DataGet_SqlData_cxGrid(TTree_Nach).IsFirstRead := True;;;

{ Удалить окончание}TForm_Event.Action_Delete_Order_EndExecute(Sender: TObject);: TIntegerList;: Integer;Get_SqlData_cxGrid(tv_listeners) do(L);HandymanFunctions.ShowVNDialog(vnd_Confirmation, 'Удаление приказа об окончании'

, 'Удалить приказы об окончании у выделенных слушателей ' + '(' + IntToStr(L.Count) + ')' +'?')

then with tv_listeners.DataController do.StartSequenceActions(False, True);i := 0 to L.Count - 1 doMSystemServices.DeleteData(d_P_ORDERS_STUDENTS

, CreateVarAr(['0', '1'])

, CreateVarAr([VarToStr(Values[L.Items[i], tv_listeners_id_student.Index])

, VarToStr(Values[L.Items[i], tv_listeners_ID_Paragraph_End.Index])])

, 'Не смогли удалить приказ об окончании.')

then begin[L.Items[i], tv_listeners_ID_Paragraph_End.Index] := null;[L.Items[i], tv_listeners_ID_Status_End.Index] := null;[L.Items[i], tv_listeners_ID_ERP_End.Index] := null;[L.Items[i], tv_listeners_status_text_order_end.Index] := null;_SqlData_cxGrid(tv_listeners).IsFirstRead := True;;.EndSequenceActions;cxPageControl_Student.ActivePage = cxTabSheet_OrdersFill_tv_ordersExecute(self);;;;TForm_Event.Action_End_EducationExecute(Sender: TObject);= 'Окончание обучения';: TSForm;: Integer;: TIntegerList;: Integer;// 1:= -1;_SqlData_cxGrid(tv_listeners).GetSelectedRecordIndexList(List);:= CreateSForm(self, 'fEnd_Education', Name, Add_Path + Name,_End_Education, tdb_Apply);_End_Education.wrappers[cxDateEdit_End_Education].Value := VarToStr

(tv_listeners.DataController.Values

[tv_listeners.DataController.FocusedRecordIndex,_listeners_d_end_plan.Index]);_End_Education.OnChangeWrapper(nil);mf.ShowModal = mrok then// 2(List.Count > 0) and HandymanFunctions.ShowVNDialog(vnd_Confirmation,

'Окончание обучения',

'Вы действительно хотите закончить обучение выбранных студентов (' +

IntToStr(List.Count) + ')?') then// 3.StartSequenceActions(False, True);i := 0 to (List.Count - 1) do// 4:= MSystemServices.InsertData(d_P_ORDERS_STUDENTS,([0, 1, 2, 3]),([tv_listeners.DataController.Values[List.Items[i],_listeners_id_student.Index],_End_Education.wrappers[cxButtonEdit_End_Education].Value,_End_Education.wrappers[cxPopupEdit_KBA_End].Value,_End_Education.wrappers[cxDateEdit_End_Education].Value]),

'Окончание обучения.');id >= 0 then

begin // 5_listeners.DataController.Values[List.Items[i],_listeners_d_end.Index] := VarToStr

(cW_End_Education.wrappers[cxPopupEdit_KBA_End].Value);_listeners.DataController.Values[List.Items[i],_listeners_status_text_order_end.Index] := VarToStr

(cW_End_Education.wrappers[cxButtonEdit_End_Education]

.ValueDisplay);; // 5; // 4.EndSequenceActions;id >= 0 then(cW_End_Education.wrappers

[cxButtonEdit_End_Education]).IsEmpty := False;; // 3; // 2// 1assigned(mf) then(mf);; // 1;

{ Выдать сертификат}TForm_Event.Action_Go_New_CertExecute(Sender: TObject);i, j: integer;Get_SqlData_cxGrid(tv_listeners), GridTableView.Controller, Cont_Make_Cert do:= 0;i := 0 to SelectedRowCount - 1 doMSystemServices.ExchangeData(Make_New_Cert_By_Params

, CreateVarAr([VarToStr(SelectedRows[i].Values[tv_listeners_id_student.Index])

,VarToStr(Wrappers[ButtonEdit_New_Cert].Value)

,VarToStr(Wrappers[SpinEdit_New_Cert_Reg].Value)

,VarToStr(Wrappers[PopupEdit_New_Cert_Kind_Doc].Value)

,VarToStr(Wrappers[SpinEdit_New_Cert_Number].Value)

,VarToStr(Wrappers[SpinEdit_New_Cert_Hours].Value)])

, 'Не смогли выдать удостоверение.')

then:= j + 1;

{Values[L.Items[i], tv_listeners_Kind_Cert.Index] :=(Wrappers[PopupEdit_New_Cert_Kind_Doc].ValueDisplay);[L.Items[i], tv_listeners_ID_Kind_Cert.Index] :=(Wrappers[PopupEdit_New_Cert_Kind_Doc].Value);[L.Items[i], tv_listeners_Reg_Number.Index] :=(Wrappers[SpinEdit_New_Cert_Reg].Value);[L.Items[i], tv_listeners_certificate.Index] :=(Wrappers[SpinEdit_New_Cert_Number].Value);[L.Items[i], tv_listeners_hours.Index] :=(Wrappers[SpinEdit_New_Cert_Hours].Value);}[SpinEdit_New_Cert_Reg].Value := Wrappers[SpinEdit_New_Cert_Reg].Value + 1;[SpinEdit_New_Cert_Number].Value := Wrappers[SpinEdit_New_Cert_Number].Value + 1;

end;

// А что толку-то? Все равно id сертификатов неизвестны - придется перечитывать!

Read_Data;.ShowVNDialog(vnd_Information, 'Результат работы'

, 'Выдано удостоверений: ' + IntToStr(j));;;

{ Установить новую стоимость выделенных договоров}

procedure TForm_Event.Action_Go_New_MoneyExecute(Sender: TObject);i, j: integer; L: TIntegerlist;_New_Money.ChangesAcceptWrappers;Get_SqlData_cxGrid(tv_listeners), GridTableView.DataController do(L);.StartSequenceActions(False, True);_New_Money.Properties.EditFormat := '0.00';_New_Money.Properties.UseThousandSeparator := False;:= 0;i := 0 to L.Count - 1 doMSystemServices.ExchangeData(Update_PC

, VarArrayOf(['4'

, VarToStr(tv_listeners.DataController.Values

[L.Items[i], tv_listeners_id_contract.Index])

,''

,''

,''

,''

,''

,//VarToStr(cw_New_Money.Wrappers[CurrencyEdit_New_Money].Value) //(CurrencyEdit_New_Money.EditValue)

,''

,''

,''

,''

,''

,''

,''

,''])

, 'Не смогли изменить стоимость договора.')

then j := j + 1;_New_Money.Properties.EditFormat := ',0.00';_New_Money.Properties.UseThousandSeparator := True;.EndSequenceActions;j > 0HandymanFunctions.ShowVNDialog(vnd_Information, 'Результат операции'

, 'Стоимость изменена в ' + IntToStr(j) + 'договорах.')

else HandymanFunctions.ShowVNDialog(vnd_Error, 'Результат операции'

, 'Не смогли изменить стоимость договоров');

end;;

{ Сформировать начисления}TForm_Event.Action_Go_New_NachExecute(Sender: TObject);_New_Nach.ChangesAcceptWrappers;Cont_New_Nach, Get_SqlData_cxGrid(tv_listeners), GridTableView.DataController doMSystemServices.ExchangeData(Create_New_Nach

, CreateVarAr([VarToStr(Values[LastChoiceIndex, tv_listeners_id_contract.Index])

, VarToStr(Wrappers[DateEdit_New_Nach].Value)

, VarToStr(Wrappers[ButtonEdit_New_Nach].Value)]))_SqlData_cxGrid(TTree_Nach).Read_Data;(Panel_New_Nach).ModalResult := mrok;

end;;

{ Уcтановить рамочный договор }

procedure TForm_Event.Action_Go_Set_Main_ContractExecute(Sender: TObject);: TIntegerList;: Integer;Get_SqlData_cxGrid(tv_listeners), GridTableView.DataController do(L);.StartSequenceActions(False, True);i := 0 to L.Count - 1 doMSystemServices.UpdateData(d_P_CONTRACTS, CreateVarAr(['8']),([VarToStr(cW_Set_Main_Contract.wrappers

[PopupEdit_Set_Main_Contract].Value)]), CreateVarAr(['0']),([VarToStr(Values[L.Items[i], tv_listeners_id_contract.Index])])) then[L.Items[i], tv_listeners_ID_Contract_Main.Index] := VarToStr

(cW_Set_Main_Contract.wrappers[PopupEdit_Set_Main_Contract].Value);[L.Items[i], tv_listeners_Main_Contract.Index] := VarToStr

(cW_Set_Main_Contract.wrappers[PopupEdit_Set_Main_Contract]

.ValueDisplay);[L.Items[i], tv_listeners_Org_Contract_Main.Index] := VarToStr

(TTree_Main_Contracts.DataController.Values

[TTree_Main_Contracts.DataController.FocusedRecordIndex,_Main_Contracts_Org_Name.Index]);;.EndSequenceActions;;;

{ Дата поиска рамочных договоров }TForm_Event.Filter_MC_Changed(: TObject);(Get_SqlData_cxGrid(TTree_MC) <> nil)

//and (PageControl_Main.ActivePageIndex = 3)cw_Filter_Contracts_Main, Get_SqlData_cxGrid(TTree_MC) do(Parameters[1] <> VarToStr(Wrappers[DateEdit_Filter_Start].Value))(Parameters[2] <> VarToStr(Wrappers[DateEdit_Filter_End].Value))(Parameters[3] <> VarToStr(Wrappers[PopupEdit_Filter_Org].Value))[1] := VarToStr(Wrappers[DateEdit_Filter_Start].Value);[2] := VarToStr(Wrappers[DateEdit_Filter_End].Value);[3] := VarToStr(Wrappers[PopupEdit_Filter_Org].Value);_Data;Read_Data_First;;TForm_Event.DateEdit_Set_Main_Contract_FindPropertiesEditValueChanged

(Sender: TObject);cW_Set_Main_Contract <> nil thenGet_SqlData_cxGrid(TTree_Main_Contracts).Parameters[1] <> VarToStr

(cW_Set_Main_Contract.wrappers[DateEdit_Set_Main_Contract_Find].Value)_SqlData_cxGrid(TTree_Main_Contracts).Parameters[1] := VarToStr

(cW_Set_Main_Contract.wrappers[DateEdit_Set_Main_Contract_Find].Value);_SqlData_cxGrid(TTree_Main_Contracts).IsFirstRead := True;;;TForm_Event.Delete_tv_listenersExecute(Sender: TObject);: Boolean;: Boolean;: TIntegerList;: Integer;_SqlData_cxGrid(tv_listeners).GetSelectedRecordIndexList(List);(List.Count > 0) and HandymanFunctions.ShowVNDialog(vnd_Confirmation,

'Удаление студентов',

'Вы действительно хотите удалить выбранных студентов вместе с договором ('

+ IntToStr(List.Count) + ')?') then// 1.StartSequenceActions(False, True);i := 0 to (List.Count - 1) do// 2:= VarToStr(tv_listeners.DataController.Values[List.Items[i],_listeners_id_contract.Index]) <> '';:= MSystemServices.ExchangeData(Delete_Student,([VarToStr(tv_listeners.DataController.Values[List.Items[i],_listeners_id_contract.Index]),(tv_listeners.DataController.Values[List.Items[i],_listeners_id_student.Index])]), 'Удаление студента.');

{if ok and c then.ExchangeData(Delete_Contract,

([VarToStr(tv_listeners.DataController.Values[List.Items[i],_listeners_id_contract.Index])]), 'Удаление договора.');}; // 2.EndSequenceActions;ok then_SqlData_cxGrid(tv_listeners).Read_Data;; // 1;TForm_Event.DoChanged_cW_Contract_Params

(AWrapper: TCustomEditWrapper);, REnabled: Boolean;AWrapper = cW_Contract_Params.wrappers[cxPopupEdit_PC_Org] then// 1:= (cxPopupEdit_PC_Org.Text <> '') and REdit_Event;(cxGroupBox_PC_Representative, REnabled);; // 1AWrapper = cW_Contract_Params.wrappers[cxButtonEdit_PC_Contract] then// 2:= (cxButtonEdit_PC_Contract.Text <> '') and REdit_Event;:= PEnabled and (cxPopupEdit_PC_Org.Text <> '');(cxGroupBox_Contract_Params, PEnabled);(cxGroupBox_PC_Representative, REnabled);; // 2_PC_Autorepresentative.Enabled := cxGroupBox_Contract_Params.Enabled;AWrapper = cW_Contract_Params.wrappers[cxButtonEdit_PC_Contract] then_PC_Kind_Order.Enabled := not AWrapper.IsClear;AWrapper = cW_Contract_Params.wrappers[cxButtonEdit_PC_Direction] then_PC_Kind_Direction.Enabled := not AWrapper.IsClear;;TForm_Event.DoChanged_cW_New_Direction(AWrapper: TCustomEditWrapper);_OkButton(Panel_New_Direction,_New_Direction.IsNotEmptyMandatory);;TForm_Event.DoChanged_cW_End_Education(AWrapper: TCustomEditWrapper);_KBA_End.Enabled := not cW_End_Education.wrappers

[cxButtonEdit_End_Education].IsClear;_OkButton(Panel_End_Education,_End_Education.IsNotEmptyMandatory);;TForm_Event.DoChanged_cW_Plan_Filters(AWrapper: TCustomEditWrapper);

{ Если изменили план }AWrapper = cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan] then

begin // 1

{ Заполняем примечание и аннотацию плана }

if VarToStr(cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].Value)

<> '' then// 2_Plan_Filters.wrappers[cxTextEdit_Plan_Filters_Note].Value := VarToStr

(tv_plan.DataController.Values

[tv_plan.DataController.FocusedRecordIndex, tv_plan_note.Index]);_Plan_Filters.wrappers[cxTextEdit_Plan_Filters_Summary].Value :=(tv_plan.DataController.Values

[tv_plan.DataController.FocusedRecordIndex, tv_plan_summary.Index]);// 2// 3_Plan_Filters.wrappers[cxTextEdit_Plan_Filters_Note].Value := '';_Plan_Filters.wrappers[cxTextEdit_Plan_Filters_Summary].Value := '';

end; // 3

{ Перечитаем позиции плана (если требуется) }

Fill_tv_r_c_planExecute(self);; // 1;TForm_Event.DoChanged_cW_New_Listener(AWrapper: TCustomEditWrapper);, PE, R: Boolean;

begin

{ Ссылка на договор доступна, если введен вид договора }

c := VarToStr(cW_New_Listener.wrappers[cxPopupEdit_New_Listener_Kind_Order]

.Value) <> '';.Enabled := c;_New_Listener_Order.Enabled := c;

{ Параметры договора доступны, введен вид договора и ссылка на договор пуста }

PE := c and (VarToStr(cW_New_Listener.wrappers[cxPopupEdit_New_Listener_Order]

.Value) = '');(cxGroupBox_New_Listener_Contract_Params, PE);_New_Listener.MakeObligatory([cxDateEdit_New_Listener_Contract_D_Start,_New_Listener_Contract_D_End,_New_Listener_Contract_Source_Finansing,_New_Listener_Contract_Money], PE);

{ Представитель организации доступен, если доступны параметры договора и выбрана организация }

R := PE and (VarToStr(cW_New_Listener.wrappers[_New_Listener_Contract_Organization].Value) <> '');(cxGroupBox_New_Listener_Representative, R);_OkButton(Panel_New_Listener, cW_New_Listener.IsNotEmptyMandatory);

end;

{ Выбор записи в списке}

procedure TForm_Event.ChoiceGridRecord(Sender: TSqlData_cxGridTableView;: TcxGridDataRow);(Sender.GridTableView = tv_r_c_plan) then(Sender.LastChoiceIndex >= 0) and

(Sender.LastChoiceIndex <.GridTableView.DataController.RecordCount) then// 1

{ Сменим дату начала и дату окончания в сроках проведения }

cW_New_R_C_Group.wrappers[cxDateEdit_New_R_C_Group_D_Start].Value :=(tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_d_start.Index]);_New_R_C_Group.wrappers[cxDateEdit_New_R_C_Group_D_End].Value :=(tv_r_c_plan.DataController.Values

[tv_r_c_plan.DataController.FocusedRecordIndex,_r_c_plan_d_end.Index]);

{ Обновим списки в зависимости от активной страницы }

if PageControl_Main.ActivePage = cxTabSheet_R_C_Groups then_tv_r_c_groupsExecute(self);PageControl_Main.ActivePage = cxTabSheet_Listeners then_tv_listenersExecute(self);; // 1

// Выбор текущей учебной группы для обновления списка кураторов

if (Sender.GridTableView = tv_r_c_groups) thenGet_SqlData_cxGrid(TTree_Curator) do(Sender.LastChoiceIndex >= 0) and

(Sender.LastChoiceIndex <.GridTableView.DataController.RecordCount) then_New_Curator.Enabled := REdit_Event;Parameters[1] <> VarToStr

(Sender.GridTableView.DataController.Values[Sender.LastChoiceIndex,_r_c_groups_id_ed_group.Index]) then[1] := VarToStr

(Sender.GridTableView.DataController.Values

[Sender.LastChoiceIndex, tv_r_c_groups_id_ed_group.Index]);_Data;_Data_First;[1] := '';;_New_Curator.Enabled := False;;;TForm_Event.OnChoiceGridRecord_tv_listeners

(Sender: TSqlData_cxGridTableView; AGridRecord: TcxGridDataRow);(Sender <> nil) then(Sender.LastChoiceIndex >= 0) and

(Sender.LastChoiceIndex <.GridTableView.DataController.RecordCount)with Sender.GridTableView.DataController do// 1cxPageControl_Student.ActivePage = cxTabSheet_Orders then_tv_ordersExecute(self);cxPageControl_Student.ActivePage = cxTabSheet_Anketa then_AnketaExecute(self);cxPageControl_Student.ActivePage = cxTabSheet_Contracts then_Contract_ParamsExecute(self);Get_SqlData_cxGrid(TTree_Nach).Parameters[1] <>(Values[Sender.LastChoiceIndex, tv_listeners_id_contract.Index])begin_SqlData_cxGrid(TTree_Nach).Parameters[1] :=(Values[Sender.LastChoiceIndex, tv_listeners_id_contract.Index]);_SqlData_cxGrid(TTree_Nach).IsFirstRead := True;cxPageControl_Student.ActivePage = cxTabSheet_StagesGet_SqlData_cxGrid(TTree_Nach).Read_Data_First;;_FIO.Caption := VarToStr

(Sender.GridTableView.DataController.Values[Sender.LastChoiceIndex,_listeners_fio.Index]);// 1_FIO.Caption := Choice_Listener;cxPageControl_Student.ActivePageIndex of

:begin_SqlData_cxGrid(tv_orders).Params[0] := '';_SqlData_cxGrid(tv_orders).ClearData;;

:Current_Form_Anketa.ID_E := '';

:Clear_Contract.Execute;

:begin_SqlData_cxGrid(TTree_Nach).Parameters[1] := '';_SqlData_cxGrid(TTree_Nach).ClearData;;;;;TForm_Event.PageControl_MainPageChanging(Sender: TObject;: TcxTabSheet; var AllowChange: Boolean);NewPage = cxTabSheet_R_C_Groups then_tv_r_c_groupsExecute(self);NewPage = cxTabSheet_Listeners then_tv_listenersExecute(self);NewPage = cxTabSheet_MC then_MC_Changed(self);;TForm_Event.PC_ApplyExecute(Sender: TObject);: Integer;: TcxCustomEdit;, s: string;: Boolean;:= False;.StartSequenceActions(False, True);i := 0 to cW_Contract_Params.Count - 1 do// 1:= '-1';VarToStr((cW_Contract_Params.Items[i] as TCustomEditWrapper).EditValue)

<> VarToStr((cW_Contract_Params.Items[i] as TCustomEditWrapper).Value)// 2:= (cW_Contract_Params.Items[i] as TCustomEditWrapper).Element;CE = cxDateEdit_PC_D_Start then:= '0'if CE = cxDateEdit_PC_D_End then:= '1'if (CE = cxPopupEdit_PC_Org) or (CE = cxTextEdit_PC_Basis) or

(CE = cxTextEdit_PC_FIO) or (CE = cxTextEdit_PC_FIO_R) or

(CE = cxPopupEdit_PC_Post) then:= '2'if CE = cxPopupEdit_PC_SF then:= '3'if CE = cxCurrencyEdit_PC_Money then:= '4';_PC_Money.Properties.EditFormat := '0.00';_PC_Money.Properties.UseThousandSeparator := False;if CE = cxPopupEdit_PC_Kind_Order then:= '5'if CE = cxPopupEdit_PC_Kind_Direction then:= '6'if CE = CheckBox_PC_NDS then:= '7'if (CE = cxDateEdit_PC_D_Start_Otrjv) or (CE = cxDateEdit_PC_D_End_Otrjv):= '8';VarToStr(cW_Contract_Params.wrappers[cxDateEdit_PC_D_Start_Otrjv].EditValue) = ''s := ''s := VarToStr(cW_Contract_Params.wrappers[cxDateEdit_PC_D_Start_Otrjv].EditValue)

+ ' по ' + VarToStr(cW_Contract_Params.wrappers[cxDateEdit_PC_D_End_Otrjv].EditValue);;; // 2P <> '-1' then// 3:= MSystemServices.ExchangeData(Update_PC,([P,(tv_listeners.DataController.Values

[tv_listeners.DataController.FocusedRecordIndex,_listeners_id_contract.Index]),(cW_Contract_Params.wrappers[cxDateEdit_PC_D_Start]

.EditValue),(tv_listeners.DataController.Values

[tv_listeners.DataController.FocusedRecordIndex,_listeners_id_contractor.Index]),(cW_Contract_Params.wrappers[cxDateEdit_PC_D_End]

.EditValue),(cW_Contract_Params.wrappers[cxPopupEdit_PC_Org].EditValue),(cW_Contract_Params.wrappers[cxPopupEdit_PC_SF].EditValue),(cxCurrencyEdit_PC_Money.EditValue),(cW_Contract_Params.wrappers[cxPopupEdit_PC_Kind_Order]

.EditValue), VarToStr(cW_Contract_Params.wrappers

[cxPopupEdit_PC_Kind_Direction].EditValue),(cW_Contract_Params.wrappers[cxTextEdit_PC_Basis]

.EditValue),(cW_Contract_Params.wrappers[cxTextEdit_PC_FIO].EditValue),(cW_Contract_Params.wrappers[cxTextEdit_PC_FIO_R].EditValue),(cW_Contract_Params.wrappers[cxPopupEdit_PC_Post].EditValue),_BoolToStr(CheckBox_PC_NDS.Checked, 1, '0'),])

);ok thenStrToInt(P) of // 4

:VarToStr(cW_Contract_Params.wrappers[cxPopupEdit_PC_Org]

.EditValue) = '' then// 5_Contract_Params.wrappers[cxTextEdit_PC_Basis].Clear;_Contract_Params.wrappers[cxTextEdit_PC_FIO].Clear;_Contract_Params.wrappers[cxTextEdit_PC_FIO_R].Clear;_Contract_Params.wrappers[cxPopupEdit_PC_Post].Clear;; // 5_listeners.DataController.Values

[tv_listeners.DataController.FocusedRecordIndex,_listeners_org.Index] := VarToStr

(cW_Contract_Params.wrappers[cxPopupEdit_PC_Org]

.EditValueDisplay);;

:_listeners.DataController.Values

[tv_listeners.DataController.FocusedRecordIndex,_listeners_money.Index] := VarToStr

(cW_Contract_Params.wrappers[cxCurrencyEdit_PC_Money]

.EditValueDisplay);_PC_Money.Properties.EditFormat := ',0.00';_PC_Money.Properties.UseThousandSeparator := True;;

:_Contract_Params.wrappers[cxButtonEdit_PC_Contract]

.EditValueDisplay := TButtonOrderEditWrapper

(cW_Contract_Params.wrappers[cxButtonEdit_PC_Contract])

.L_status_text + ' (' + VarToStr

(cW_Contract_Params.wrappers[cxPopupEdit_PC_Kind_Order]

.EditValueDisplay) + ')';

:_Contract_Params.wrappers[cxButtonEdit_PC_Direction]

.EditValueDisplay := TButtonOrderEditWrapper

(cW_Contract_Params.wrappers[cxButtonEdit_PC_Direction])

.L_status_text + ' (' + VarToStr

(cW_Contract_Params.wrappers[cxPopupEdit_PC_Kind_Direction]

.EditValueDisplay) + ')';; // 4; // 3; // 1.EndSequenceActions;ok then_Contract_Params.ChangesAcceptWrappers;;TForm_Event.PC_AutorepresentativeExecute(Sender: TObject);HandymanFunctions.ShowVNDialog(vnd_Confirmation, 'Автопредставитель',

'Вы действительно хотите добавить автопредставителя?') then

begin // 1.ExchangeData(Autorepr,

([VarToStr(cW_Contract_Params.wrappers

[cxButtonEdit_PC_Contract].Value)])); // 1;TForm_Event.PC_RefuseExecute(Sender: TObject);_Contract_Params.ChangesRefuseWrappers;;TForm_Event.Plan_ApplyExecute(Sender: TObject);: Boolean;VarToStr(cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].Value)

<> '' then// 1:= MSystemServices.ExchangeData(Update_Plan,([VarToStr(cW_Plan_Filters.wrappers

[cxTextEdit_Plan_Filters_Note].EditValue),(cW_Plan_Filters.wrappers

[cxTextEdit_Plan_Filters_Summary].EditValue),(cW_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].Value)

]));ok then// 3_Plan_Filters.ChangesAcceptWrappers;_plan.DataController.Values[tv_plan.DataController.FocusedRecordIndex,_plan_note.Index] := VarToStr(cW_Plan_Filters.wrappers

[cxTextEdit_Plan_Filters_Note].EditValue);_plan.DataController.Values[tv_plan.DataController.FocusedRecordIndex,_plan_summary.Index] := VarToStr(cW_Plan_Filters.wrappers

[cxTextEdit_Plan_Filters_Summary].EditValue);_Plan_Filters.wrappers[cxPopupEdit_Plan_Filters_Plan].ValueDisplay :=(cW_Plan_Filters.wrappers[cxTextEdit_Plan_Filters_Note]

.EditValue);; // 3// 1// 2_Plan_Filters_Note.Clear;_Plan_Filters_Summary.Clear;_Plan_Filters.ChangesAcceptWrappers;; // 2;TForm_Event.Plan_RefuseExecute(Sender: TObject);_Plan_Filters.ChangesRefuseWrappers;

end;

{ Доступность создания запсией в специальности подразделения }

procedure TForm_Event.DoChanged_cW_Spec_Div(AWrapper: TCustomEditWrapper);_OkButton(Panel_New_Spec_Div, cW_New_Spec_Div.IsNotEmptyMandatory)

end;

{ Доступность создания запсией в импорте}

procedure TForm_Event.PopupEdit_Import_SpecPropertiesEditValueChanged

(Sender: TObject);i: integer;Sender = PopupEdit_Import_Spec then_Import_Spec.Enabled := VarToStr

(cW_Import.wrappers[PopupEdit_Import_Spec].Value) = '';Sender = PopupEdit_Import_Spec_Div_Import_Spec_Div.Enabled := VarToStr

(cW_Import.wrappers[PopupEdit_Import_Spec_Div].Value) = '';

// Если есть выбранная запись, обновим по ней УМК!

if not ButtonEdit_Import_Spec_Div.EnabledcxPopupEdit_New_R_C_Group_Met_ComplexPropertiesInitPopup(PopupEdit_Import_UMK)Get_SqlData_cxGrid(tv_r_c_groups).Params[0] <> VarToStr

(cW_Import.wrappers[PopupEdit_Import_Spec_Div].Value)begin_SqlData_cxGrid(tv_r_c_groups).Params[0] := VarToStr

(cW_Import.wrappers[PopupEdit_Import_Spec_Div].Value);_SqlData_cxGrid(tv_r_c_groups).Read_Data;;;;(Sender = PopupEdit_Import_UMK) or (Sender = PopupEdit_Import_Spec_Div) then_Import_UMK.Enabled := (VarToStr

(cW_Import.wrappers[PopupEdit_Import_UMK].Value) = '')

// Организатор должен быть задан!((cW_Import.wrappers[PopupEdit_Import_Spec_Div].Value) <> '');(Sender = PopupEdit_Import_Plan) or ( Sender = PopupEdit_Import_Spec_Div)_Import_Plan.Enabled := (VarToStr

(cW_Import.wrappers[PopupEdit_Import_Plan].Value) = '')

// Организатор должен быть задан!((cW_Import.wrappers[PopupEdit_Import_Spec_Div].Value) <> '');

// Если позиция плана выбрана, то поищем ее в списке и выберем!

if VarToStr(cW_Import.wrappers[PopupEdit_Import_Plan].Value) <> '':= FindGridRecordIndex(tv_r_c_plan, [tv_r_c_plan_id_r_c_plan]

, CreateVarAr([VarToStr(cW_Import.wrappers[PopupEdit_Import_Plan].Value)]));i >= 0Get_SqlData_cxGrid(tv_r_c_plan).LastChoiceIndex := i;;;(Sender = PopupEdit_Import_EG) or (Sender = PopupEdit_Import_Spec_Div)(Sender = PopupEdit_Import_UMK) then_Import_EG.Enabled := (VarToStr

(cW_Import.wrappers[PopupEdit_Import_EG].Value) = '')

// Организатор должен быть задан!((cW_Import.wrappers[PopupEdit_Import_Spec_Div].Value) <> '')

// УМК должно быть задано!((cW_Import.wrappers[PopupEdit_Import_UMK].Value) <> '');VarToStr(cW_Import.Wrappers[PopupEdit_Import_Plan].Value) <> '' thenGet_SqlData_cxGrid(tv_r_c_groups).Params[0] <> VarToStr(cW_Import.Wrappers[PopupEdit_Import_Plan].Value)_SqlData_cxGrid(tv_r_c_groups).Params[0] := VarToStr(cW_Import.Wrappers[PopupEdit_Import_Plan].Value);_SqlData_cxGrid(tv_r_c_groups).IsFirstRead := True;;VarToStr(cW_Import.Wrappers[PopupEdit_Import_Spec_Div].Value) <> '' thenGet_SqlData_cxGrid(tv_r_c_groups).Params[0] <> VarToStr(cW_Import.Wrappers[PopupEdit_Import_Spec_Div].Value)_SqlData_cxGrid(tv_ed_group).Params[0] := VarToStr(cW_Import.Wrappers[PopupEdit_Import_Spec_Div].Value);_SqlData_cxGrid(tv_ed_group).IsFirstRead := True;;;TForm_Event.Before_Update_Exchange_tv_listeners

(Sender: TSqlData_cxGridTableView; UpdateValue: Variant;: TcxCustomGridTableItem; ARecordIndex: Integer;ExchangeParameters: OleVariant; var Allow: Boolean);: TcxGridColumn;: TcxGridDataController;:= Sender.GridTableView.Controller.FocusedColumn;

{ Параметры для изменения Ф.И.О. }

if FC = tv_listeners_fio then// 1:= Current_Form_SE.cxGrid_FIO.DataController;:= CreateVarAr([DC.Values[DC.FocusedRecordIndex,_Form_SE.cxGrid_FIO_ID_E.Index],.GridTableView.DataController.Values[ARecordIndex,_listeners_id_student.Index],.GridTableView.DataController.Values[ARecordIndex,_listeners_id_contract.Index]]);

end; // 1

{ Параметры для изменения учебной группы и даты начала }

if (FC = tv_listeners_ed_group) or (FC = tv_listeners_d_start) then// 2:= tv_r_c_groups.DataController;:= CreateVarAr([DC.Values[DC.FocusedRecordIndex,_r_c_groups_d_start.Index], DC.Values[DC.FocusedRecordIndex,_r_c_groups_id_ed_group.Index],.GridTableView.DataController.Values[ARecordIndex,_listeners_id_student.Index],.GridTableView.DataController.Values[ARecordIndex,_listeners_id_contract.Index]]);

end; // 2

{ Параметры для изменения даты окончания }

if (FC = tv_listeners_d_end) then// 3:= CreateVarAr

([Sender.GridTableView.DataController.Values[ARecordIndex,_listeners_id_student.Index], VarToStr(UpdateValue)]);

end; // 3;

{ Добавление группы обучения}

procedure TForm_Event.ButtonEdit_Import_EGClick(Sender: TObject);i: integer;Import_ID_EG = '' then.InsertData(d_P_EDUCATIONAL_GROUP

, CreateVarAr(['1', '2', '3', '4'])

, CreateVarAr([Import_EG_Name

, VarToStr(cW_Import.Wrappers[PopupEdit_Import_Spec_Div].Value)

, '3' // Уровень группы

, VarToStr(cW_Import.Wrappers[DateEdit_Import_Start].Value)]));_SqlData_cxGrid(tv_ed_group).Read_Data;:= FindGridRecordIndex(tv_ed_group, [tv_ed_group_name]

, CreateVarAr([Import_EG_Name]));i >= 0 then_ID_EG := VarToStr(tv_ed_group.DataController.Values[i, tv_ed_group_id_ed_group.Index]);_New_R_C_Group.Wrappers[cxPopupEdit_New_R_C_Group_Ed_Group].Value := Import_ID_EG;_New_R_C_Group.Wrappers[cxPopupEdit_New_R_C_Group_Ed_Group].ValueDisplay := Import_EG_Name;;_New_R_C_Group.Wrappers[cxPopupEdit_New_R_C_Group_Ed_Group].Value := Import_ID_EG;_New_R_C_Group.Wrappers[cxPopupEdit_New_R_C_Group_Ed_Group].ValueDisplay := Import_EG_Name;;_New_R_C_Group.Wrappers[cxPopupEdit_New_R_C_Group_Met_Complex].Value :=_Import.Wrappers[PopupEdit_Import_UMK].Value;_New_R_C_Group.Wrappers[cxPopupEdit_New_R_C_Group_Met_Complex].ValueDisplay :=_Import.Wrappers[PopupEdit_Import_UMK].ValueDisplay;_New_R_C_Group.Wrappers[cxDateEdit_New_R_C_Group_D_Start].Value :=_Import.Wrappers[DateEdit_Import_Start].Value;_New_R_C_Group.Wrappers[cxDateEdit_New_R_C_Group_D_End].Value :=_Import.Wrappers[DateEdit_Import_End].Value;

// Откроем добавление группы обученияAction_Insert_tv_r_c_group.Execute:= FindGridRecordIndex(tv_r_c_groups, [tv_r_c_groups_name]

, CreateVarAr([Import_EG_Name]));i >= 0 then_Import.Wrappers[PopupEdit_Import_EG].Value :=(tv_r_c_groups.DataController.Values[i, tv_r_c_groups_id_ed_group.Index]);_Import.Wrappers[PopupEdit_Import_EG].ValueDisplay :=(tv_r_c_groups.DataController.Values[i, tv_r_c_groups_name.Index]);;;(GetParentForm(ButtonEdit_Import_Spec).Handle);;TForm_Event.ButtonEdit_Import_OrderPropertiesEditValueChanged(: TObject);(Sender = ButtonEdit_Import_Order)TButtonOrderEditWrapper(cW_Import.Wrappers[ButtonEdit_Import_Order]).IsEmpty := Falseif (Sender = ButtonEdit_Import_Nach)TButtonOrderEditWrapper(cW_Import.Wrappers[ButtonEdit_Import_Nach]).IsEmpty := False;

{ Добавление плана обучения}TForm_Event.ButtonEdit_Import_PlanClick(Sender: TObject);_New_R_C_Plan.Wrappers[cxPopupEdit_New_R_C_Plan_Spec_Div].Value :=_Import.Wrappers[PopupEdit_Import_Spec_Div].Value;_New_R_C_Plan.Wrappers[cxPopupEdit_New_R_C_Plan_Spec_Div].ValueDisplay :=_Import.Wrappers[PopupEdit_Import_Spec_Div].ValueDisplay;_New_R_C_Plan.Wrappers[cxDateEdit_New_R_C_Plan_D_Start].Value :=_Import.Wrappers[DateEdit_Import_Start].Value;Action_Insert_tv_r_c_plan.Executebegin_Import.Wrappers[PopupEdit_Import_Plan].Value :=(tv_r_c_plan.DataController.Values[tv_r_c_plan.DataController.FocusedRecordIndex

, tv_r_c_plan_id_r_c_plan.Index]);_Import.Wrappers[PopupEdit_Import_Plan].ValueDisplay :=_Import.wrappers[PopupEdit_Import_Spec_Div].ValueDisplay;;(GetParentForm(ButtonEdit_Import_Spec).Handle);;

{ Добавление программы (специальности)}TForm_Event.ButtonEdit_Import_SpecClick(Sender: TObject);: TSForm;: Integer;// 1:= CreateSForm(self, 'fNew_Spec', TabSheet_New_Spec.Caption,_Path + TabSheet_New_Spec.Caption, Panel_New_Spec, tdb_Apply);_New_Spec.wrappers[cxTextEditNew_Spec_Name].Value := Import_Name_Spec;.Position := poScreenCenter;mf.ShowModal = mrok then// 2_TableView := Get_SqlData_cxGrid(tv_Spec);FSqlData_TableView <> nil then// 3MSystemServices.ExchangeData(Add_Spec,([cW_New_Spec.wrappers[cxTextEditNew_Spec_Name].Value,_New_Spec.wrappers[cxTextEditNew_Spec_Quality].Value,_Level_Spec, IDK_Discipline]), 'Добавление программы обучения.')// 4_TableView.Read_Data;:= FindGridRecordIndex(tv_Spec, [tv_Spec_Name, tv_Spec_Q],([cW_New_Spec.wrappers[cxTextEditNew_Spec_Name].Value,_New_Spec.wrappers[cxTextEditNew_Spec_Quality].Value]));i >= 0 then_Import.wrappers[PopupEdit_Import_Spec].Value := VarToStr

(tv_Spec.DataController.Values[i, tv_Spec_ID.Index]);_Import.wrappers[PopupEdit_Import_Spec].ValueDisplay := VarToStr

(tv_Spec.DataController.Values[i, tv_Spec_Name.Index]);;; // 4; // 3; // 2// 1assigned(mf) then(mf);(GetParentForm(ButtonEdit_Import_Spec).Handle);; // 1;TForm_Event.After_Read_tv_listeners(Sender: TSqlData_cxGridTableView);Sender.GridTableView.DataController.RecordCount = 0 then// 1cxPageControl_Student.ActivePage = cxTabSheet_Orders then_SqlData_cxGrid(tv_orders).ClearData;cxPageControl_Student.ActivePage = cxTabSheet_Anketa then_AnketaExecute(self);cxPageControl_Student.ActivePage = cxTabSheet_Contracts then_Contract_ParamsExecute(self);_FIO.Caption := '';

end; // 1;



Приложение В


Текст запросов

Настройка модуля (Get_Params_Module )t.value_variablevalues_variables_env_rs tt.id_variable_environment = %p1[i]%Sysdate Between t.d_start And nvl(t.d_end, Sysdate)t.use_sign = 1t.id_project = 1

Вид уровня образования (K_L_F)

Select klf.Name

,klf.idk_level_formation

,klf.qualifierkind_level_formation_ klf

Группы повышения квалификации (R_C_Groups)eg.Name

,rcg.d_start

,rcg.d_end

,ps.Status_Text

,el.hours

,rcg.id_rc_group

,rcg.id_ed_group

,rcg.id_methodical_complex

,ps.id_paragraph

,ps.id_order

,ps.idk_order

,ps.Status_order

,rcg.id_refresher_course_plan

,ps.id_erp_userrefresher_course_group_ rcg

,educational_group_ eg

,complex_specialities_ cs

,paragraphs_status_ ps

,methodical_complex_ mc

,educational_load_umk_ eleg.id_ed_group = rcg.id_ed_grouprcg.id_refresher_course_plan = %p1[i]%cs.id_methodical_complex = rcg.id_methodical_complexcs.id_p_dp = ps.id_paragraphrcg.id_methodical_complex = mc.id_methodical_complexel.id_methodical_complex = mc.id_methodical_complex

Добавление спец.мет.компл. (Add_Com_Spec)

Declare_m_c Number;

Into methodical_complex_

(id_d, id_discipline)

(%p1[i]%

,(Select d.id_disciplinedisciplines_ d

,specialities_division_ sdd.Name Is Nulld.id_speciality = sd.id_specialitysd.id_d_specialitie = %p2[i]%))id_methodical_complex Into id_m_c;

Into complex_specialities_

(id_methodical_complex, id_d_specialitie, idk_discipline, id_p_dp)

(id_m_c, %p2[i]%, %p6[i]%, %p3[i]%);

Into Educational_Load_Umk_

(Id_Methodical_Complex, Idk_Training, Idk_Lesson, Semester, Hours)

(id_m_c, %p4[i]%, 1, 1, %p5[s]%);


- Самостоятельная работа%p7[i]% Is Not Null%p7[i]% > 0Into Educational_Load_Umk_

(Id_Methodical_Complex, Idk_Training, Idk_Lesson, Semester, Hours)

(id_m_c, %p4[i]%, 20, 1, %p7[i]%);

End If;;

Добавление специальности (Add_Spec)

Declare_spec Number;Into Speciality_

(Name, Qualifier, Idk_Level_Speciality)

(%p1[s]%, %p2[s]%, %p3[s]%)Id_Speciality Into id_spec;Into Disciplines_

(Name, Abbreviation, Idk_Discipline, Id_Speciality)

('', '', %p4[s]%, id_spec);;

Должности в комиссии (Get_Posts_For_Members)p.Name

,p.id_postpost_ pp.id_post In (55005, 55003)

Изменение спец.мет.компл. (Update_Com_Spec)

Begincomplex_specialities_id_d_specialitie = %p4[i]%Id_Methodical_Complex = %p1[i]%id_d_specialitie = %p2[i]%id_p_dp = %p3[i]%;

educational_load_umk_idk_training = %p5[i]%Id_Methodical_Complex = %p1[i]%;

methodical_complex_id_d = %p6[i]%Id_Methodical_Complex = %p1[i]%;

End;

Источники финансирования (S_F)

Select sf.abbreviation

,sf.Name

,ts_.Get_DivisionName(sf.id_d, Sysdate, 1, 1, 2, 2)

,ts_.Get_DivisionName(sf.id_d, Sysdate, 1, 1)

,ks.Name

,ka.Name

,sf.d_end

,sf.id_source

,sf.id_d

,sf.idk_source

,sf.idk_activitysource_financing_ sf

,attributes_divisions_ d

,kind_source_ ks

,kind_activity_ ka

,kind_activity_ kai

,kind_charges_ kc

,declination_ dc

,

- Проверим - нужны ли закрытые источники?

(Select CaseExists (Select 'x'p_roles_current_user_ ruru.qualifier = '130') Then

'1'

'0'qualifierdual) rusf.id_d = d.id_d(sf.d_end Is Null Or ru.qualifier = '1')(d.d_start = (Select Max(ad.d_start)attributes_divisions_ adad.id_d = d.id_dad.d_start <= Sysdate))sf.idk_source = ks.idk_sourcesf.idk_activity = ka.idk_activitysf.idk_activity_income = kai.idk_activity(+)sf.idk_charges = kc.idk_charges(+)sf.id_declination = dc.id_declination(+)ka.qualifier in ('2', '3')(%p1[i]% is null or sf.id_d = %p1[i]%)ks.qualifier = '2'

Комиссии (Get_List_Commissions_By_ID_D_And_ID_Spec)ps.Status_Text

,ps.name_Kind_paragraph

,eh.full_fio

,c.d_start

,c.d_end

,ps.id_paragraph

,ps.id_order

,ps.idk_order

,ps.Status_order

,ps.id_erp_user

,ps.id_metaterm

,ps.id_metaobject

,c.id_speciality

,c.id_d

,c.id_commission

,c.idk_commissioncommission_ c

,paragraphs_status_ ps

,who_is_who_ wiw

,employees_history_ ehc.id_speciality = %p2[i]%c.id_paragraph = ps.id_paragraphps.id_erp_user = wiw.id_erp_userwiw.id_e = eh.id_ec.d_start Between eh.d_start And nvl(eh.d_end, c.d_start)c.id_d = %p1[i]%

Кураторы группы (Get_List_Curators_By_ID_EG)c.d_start

,c.d_end

,e.surname || ' ' || e.Name || ' ' || e.patronymic || ', ' ||_char(e.date_of_birth) || ' г.р.'

,c.id_e

,c.id_ed_groupcurator_group_ c

,employees_ ec.id_ed_group = %p1[i]%c.id_e = e.id_e

Методический комплекс (Met_Complex)s.Name

,ts_.Get_DivisionName(sd.id_d_institute, Sysdate, 1, 1)

,ts_.Get_DivisionName(sd.id_d, Sysdate, 1, 1)

,kt.Name

,ps.Status_Text

,el.hours

,sd.id_d_specialitie

,sd.id_speciality

,sd.id_d_institute

,sd.id_d

,sd.idk_training

,ps.Status_order

,cs.id_p_dp

,ps.id_order

,ps.idk_order

,cs.id_methodical_complex

-,el.id_educational_load_umk

,el.shcomplex_specialities_ cs

,specialities_division_ sd

,speciality_ s

,paragraphs_status_ ps

,kind_training_ kt

,(Select el.id_methodical_complex

-,el.id_educational_load_umk

,Sum(el.hours) hours

,Sum(Decode(el.idk_lesson, 1, 0, el.hours)) sheducational_load_umk_ elBy el.id_methodical_complex

-,el.id_educational_load_umk

) elcs.id_d_specialitie = sd.id_d_specialitiesd.id_speciality = s.id_specialitykt.idk_training = sd.idk_training(%p1[i]% Is Null Or %p1[i]% = sd.id_d_specialitie)cs.id_p_dp = ps.id_paragraphel.id_methodical_complex = cs.id_methodical_complexsd.id_d_institute In

(

- всё, если необычный пользовательdL.id_d

From division_ dLbs_.isUnusual > 0

Union All

- по ролям, если обычный пользователь

Select dL.id_ddivision_ dLbs_.isUnusual = 0dL.id_metaterm In

(Select r.id_metatermTable(access_data_.Get_Roles('1403', 1)) r)

Union All

- по ролям, если обычный пользователь

Select dL.id_ddivision_ dLbs_.isUnusual = 0Exists (Select r.id_metatermTable(access_data_.Get_Roles('1403', 1)) rr.id_metaterm Is Null))

Организаторы обучения (Spec_div)s.Name

,ts_.Get_DivisionName(sd.id_d, Sysdate, 1, 1)

,kt.Name

,ts_.Get_DivisionName(sd.id_d_institute, Sysdate, 1, 1, 2, 2)

,sf.Name

,sd.d_start

,sd.d_end

,sd.id_d_specialitie

,sd.id_speciality

,sd.id_d

,sd.idk_training

,sd.id_d_institute

,sd.id_source

,sd.idk_level_formationspecialities_division_ sd

,speciality_ s

,kind_training_ kt

,source_financing_ sfs.idk_level_speciality = %p1[i]%sd.id_speciality = s.id_specialitykt.idk_training = sd.idk_trainingsf.id_source(+) = sd.id_source(%p2[i]% Is Null Or %p2[i]% = sd.id_d_institute)sd.id_d_institute in

(

- всё, если необычный пользовательdL.id_d from division_ dL where bs_.isUnusual > 0

union all

- по ролям, если обычный пользователь

select dL.id_d from division_ dLbs_.isUnusual = 0 and dL.id_metaterm in (select r.id_metaterm from table(access_data_.Get_Roles('1402, 1403, 1404', 0)) r )

union all

- по ролям, если обычный пользователь

select dL.id_d from division_ dLbs_.isUnusual = 0 exists (select r.id_metaterm from table(access_data_.Get_Roles('1402, 1403, 1404', 0)) r where r.id_metaterm is null)

)

План пк (отчет) (Get_Data_For_Plan)nvl(to_char(ps.hisdate, 'dd'), '___') День --1

,nvl(wordsv_.Month_Decline(extract(Month From ps.hisdate), 2, 1)

,'__________') Месяц --2

,to_char(nvl(ps.hisdate, Sysdate), 'yyyy') Год --3

,s.Name Программа --4

,el.hours Часы --5

,kt.Name Форма --6

,wordsv_.Month_Decline(extract(Month From rcp.d_start), 1, 1) || (extract(Month From rcp.d_end), extract(Month From rcp.d_start), ''

, ' - ' || wordsv_.Month_Decline(extract(Month From rcp.d_end), 1, 1)) Срок --7

,wordsv_.Month_Decline(extract(Month From rcp.d_end), 1, 1) Окончание --8

,ts_.Get_DivisionName(sd.id_d, Sysdate, 1, 1) Подразделение --9

,rcp.id_paragraph --10

,ts_.Get_DivisionName(sd.id_d_institute, Sysdate, 1, 1) Организатор --11

,extract(Year From (Select Max(pod.d_start)(Select rcp2.d_startrefresher_course_plan_ rcp2rcp2.id_paragraph = %p1[i]%) pod)) Год --12

,replace(replace(ps.summary, 'План ', ''), 'ПЛАН ', '') -- 13

refresher_course_plan_ rcp

,specialities_division_ sd

,speciality_ s

,kind_training_ kt

,paragraphs_status_ ps

,complex_specialities_ cs

,educational_load_umk_ elrcp.id_paragraph = %p1[i]%sd.id_d_specialitie = rcp.id_d_specialitiesd.id_speciality = s.id_specialitykt.idk_training = sd.idk_trainingps.id_paragraph = rcp.id_paragraphrcp.id_d_specialitie = cs.id_d_specialitieel.id_methodical_complex = cs.id_methodical_complex

Позиции плана ПК (R_C_Plan)

Select s.Name

,ts_.Get_DivisionName(sd.id_d_institute, Sysdate, 1, 1)

,ts_.Get_DivisionName(sd.id_d, Sysdate, 1, 1)

,kt.Name

,rcp.d_start

,rcp.d_end

,sf.Name

,(Select npt.moneynorms_payment_training_ nptnpt.id_d_specialitie = rcp.id_d_specialitienpt.type_value = 1npt.d_start Between sd.d_start And rcp.d_start)

,ps.Status_Text

,rcp.id_refresher_course_plan

,rcp.id_d_specialitie

,sd.id_speciality

,sd.id_d_institute

,sd.id_d

,sd.idk_training

,rcp.id_paragraph

,ps.id_order

,ps.idk_order

,ps.Status_order

,sd.id_source

,ps.id_erp_user

refresher_course_plan_ rcp

,specialities_division_ sd

,speciality_ s

,kind_training_ kt

,paragraphs_status_ ps

,source_financing_ sfrcp.id_d_specialitie = sd.id_d_specialitiesd.id_speciality = s.id_specialitykt.idk_training = sd.idk_trainingsd.id_d_institute in

(

- всё, если необычный пользовательdL.id_d from division_ dL where bs_.isUnusual > 0

union all

- по ролям, если обычный пользователь

select dL.id_d from division_ dLbs_.isUnusual = 0 and dL.id_metaterm in (select r.id_metaterm from table(access_data_.Get_Roles('1403', 1)) r )

union all

- по ролям, если обычный пользователь

select dL.id_d from division_ dLbs_.isUnusual = 0 exists (select r.id_metaterm from table(access_data_.Get_Roles('1403', 1)) r where r.id_metaterm is null)

) ps.id_paragraph = rcp.id_paragraphsd.id_source = sf.id_source(+)(rcp.id_paragraph = %p1[i]% Or

((%p1[s]% Is Null) And.id_erp_user =

(Select w.id_erp_user From who_is_who_ w Where w.login = User)))

Программы (Get_List_Spec_By_Params)res_ad as

(/*+no_merge*/.id_d(Select d.id_d(Select d.id_ddivision_ d

,Table(access_data_.Get_Roles('1401,1402,1403,1404', 0)) prpr.id_metaterm = d.id_metaterm

-- Без ограниченийd.id_d

From division_ d

,(Select 'x'dual(bs_.isUnusual > 0)(Exists (Select 'x'Table(access_data_.Get_Roles('1401,1402,1403,1404'

,0))) AndExists

(Select 'x'division_ d

,(Select id_metatermTable(access_data_.Get_Roles('1401,1402,1403,1404'

,0))) prpr.id_metaterm = d.id_metaterm)))) d) d

)


s.Name

,s.qualifier

,s.id_speciality

,s.idk_level_speciality

,di.id_discipline

,di.idk_discipline

speciality_ s

,specialities_division_ sd

,res_ad

,disciplines_ di

s.idk_level_speciality = %p1[i]% --70s.id_speciality = sd.id_speciality(+)sd.id_d_institute = res_ad.id_d(+)(sd.id_d_institute Is Null Or res_ad.id_d Is Not Null)(%p2[s]% Is Null Or %p2[s]% = sd.id_d_institute)di.id_speciality(+) = s.id_speciality

By s.Name

,s.qualifier

,s.id_speciality

,s.idk_level_speciality

,di.id_discipline

,di.idk_discipline

Специальности мет.комл. (Com_Spec)

Select s.Name

,ts_.Get_DivisionName(sd.id_d, Sysdate, 1, 1)

,kt.Name

,ps.Status_Text

,el.hours

,sd.id_d_specialitie

,sd.id_speciality

,sd.id_d

,sd.idk_training

,ps.Status_order

,cs.id_p_dp

,ps.id_order

,ps.idk_order

,cs.id_methodical_complex

,el.id_educational_load_umk

,ps.id_erp_usercomplex_specialities_ cs

,specialities_division_ sd

,speciality_ s

,paragraphs_status_ ps

,kind_training_ kt

,educational_load_umk_ elcs.id_d_specialitie = sd.id_d_specialitiesd.id_speciality = s.id_specialitykt.idk_training = sd.idk_training(%p1[i]% Is Null Or %p1[i]% = sd.id_d_institute)cs.id_p_dp = ps.id_paragraphel.id_methodical_complex = cs.id_methodical_complex

Список институтов (Get_List_Institutes)res_ad as

(/*+no_merge*/.id_d(Select d.id_d(Select d.id_ddivision_ d

,Table(access_data_.Get_Roles('1401,1402,1403,1404', 1)) prpr.id_metaterm = d.id_metaterm

-- Без ограниченийd.id_d

From division_ d

,(Select 'x'dual(bs_.isUnusual > 0)(Exists (Select 'x'Table(access_data_.Get_Roles('1401,1402,1403,1404'

,1))) AndExists

(Select 'x'division_ d

,(Select id_metatermTable(access_data_.Get_Roles('1401,1402,1403,1404'

,1))) prpr.id_metaterm = d.id_metaterm)))) d) d

)

ts_.Get_DivisionName(res.id_d, Sysdate, 1, 1, 2, 2)

,ts_.Get_DivisionName(res.id_d, Sysdate, 1, 1)

,res.id_dres_ad res%p1[i]% = %p1[i]%

Список организаторов(подр) (Get_List_Divisions)res_ad as

(/*+no_merge*/.id_d(Select d.id_d(Select d.id_ddivision_ d

/*,Table(access_data_.Get_Roles('1401,1402,1403,1404', 0)) prpr.id_metaterm = d.id_metaterm

-- Без ограниченийd.id_d

From division_ d

,(Select 'x'dual(bs_.isUnusual > 0)(Exists (Select 'x'Table(access_data_.Get_Roles('1401,1402,1403,1404'

,1))) AndExists

(Select 'x'division_ d

,(Select id_metatermTable(access_data_.Get_Roles('1401,1402,1403,1404'

,1))) prpr.id_metaterm = d.id_metaterm)))*/) d) d

)

ts_.Get_DivisionName(res.id_d, Sysdate, 1, 1, 2, 2)

,ts_.Get_DivisionName(res.id_d, Sysdate, 1, 1)

,res.id_dres_ad res%p1[i]% = %p1[i]%

Удаление спец.мет.компл. (Delete_Com_Spec)From complex_specialities_Id_Methodical_Complex = %p1[i]%id_d_specialitie = %p2[i]%id_p_dp = %p3[i]%;From educational_load_umk_ Where Id_Methodical_Complex = %p1[i%;From methodical_complex_ Where Id_Methodical_Complex = %p1[i]%;

End;

Удаление специальности (Delete_Spec)

BeginFrom Disciplines_ dd.id_speciality = %p1[i]%d.Name Is Null;From Speciality_ s Where s.id_speciality = %p1[i]%;;

Учебные группы (Ed_Groups)eg.Name

,kg.Name

,eg.d_start

,eg.d_end

,eg.id_ed_group

,eg.id_d_specialitie

,eg.idk_group

,eg.level_groupeducational_group_ eg

,kind_group_ kgeg.id_d_specialitie = %p1[i]%kg.idk_group(+) = eg.idk_group

Члены комиссии (Get_Members_Commission_By_ID)ps.Status_Text -- 1

,ps.name_Kind_paragraph -- 2

,p.name -- 3

,eh.full_fio -- 4

,ehw.full_fio -- 5

,cm.d_start -- 6

,cm.d_end -- 7

,ps.id_paragraph -- 8

,ps.id_order -- 9

,ps.idk_order -- 10

,ps.Status_order -- 11

,ps.id_erp_user -- 12

,ps.id_metaterm -- 13

,ps.id_metaobject -- 14

,cm.id_post -- 15

,cm.id_commission -- 16

,cm.id_e -- 17

,cm.id_commission_member -- 18commission_members_ cm

,paragraphs_status_ ps

,who_is_who_ wiw

,employees_history_ ehw

,employees_history_ eh

,post_ pcm.id_commission = %p1[i]%cm.id_paragraph_start = ps.id_paragraphps.id_erp_user = wiw.id_erp_userwiw.id_e = ehw.id_ecm.d_start Between ehw.d_start And nvl(ehw.d_end, cm.d_start)cm.id_post = p.id_postcm.id_e = eh.id_ecm.d_start Between eh.d_start And nvl(eh.d_end, cm.d_start)

Должности (Posts)p.Name

,p.id_postpost_ pBy p.id_post

,p.Name

Изменение группы(даты) (Update_Ed_Group)

BeginStudents_ ss.d_start = %p1[d]%, s.id_ed_group = %p2[i]%s.id_student = %p3[i]%;

contracts_ cc.d_start = %p1[d]%c.id_contract = %p4[i]%c.d_start != %p1[d]%;

stages_ ss.d_start = %p1[d]%s.id_contract = %p3[i]%s.d_start != %p1[d]%;

contract_sources_ cscs.d_start = %p1[d]%cs.id_contract = %p2[i]%cs.d_start != %p1[d]%;;

Изменение даты оконч. (Update_End_Date)orders_students_ osos.d_start = %p2[d]%os.id_paragraph =

(Select ps.id_paragraphorders_students_ os2, paragraphs_status_ psos2.id_student = %p1[i]%os2.id_paragraph = ps.id_paragraphps.idk_order In (201, 207));

End;

Изменение плана (Update_Plan)

Update orders_ oo.note = %p1[s]%, o.summary = %p2[s]%o.id_order =

(Select p.id_order From paragraphs_ p Where p.id_paragraph = %p3[i]%)

Изменение ФИО (Update_FIO)_nach Number;Min(1)is_nachdualExists (Select 'x'accounts_contract_ ac

,stages_ st

,salary_account_ sa

,paragraphs_status_ psac.id_stage = st.id_stageac.id_basis_sal = sa.id_salary_accountst.id_contract = %p3[i]%ac.id_paragraph = ps.id_paragraphps.Status_order <> 2);is_nach Is Not Null

Then_application_error(-20101

,'В договоре обнаружены подписанные проводки!');

End If;

Students_ s Set s.id_e = %p1[i]% Where s.id_student = %p2[i]%;

Contracts_ cc.id_with_whom = (Select e.id_contractoremployees_ ee.id_e = %p1[i]%)c.id_contract = %p3[i]%;

account_ aa.id_e = %p1[i]%a.id_account In (Select a.id_accountaccounts_contract_ ac

,stages_ st

,salary_account_ sa

,paragraphs_status_ ps

,account_ aac.id_stage = st.id_stageac.id_basis_sal = sa.id_salary_accountst.id_contract = %p3[i]%ac.id_paragraph = ps.id_paragraphsa.id_account = a.id_accountps.Status_order <> 2);;

Основания зачисления (Kind_Basis_Action)

Select k.Name

,k.idk_basis_actionkind_basis_action_ kk.idk_basis_action = 1700

Основания окончания (End_Education_KBA)

Select k.Name

,k.idk_basis_actionkind_basis_action_ kk.idk_b_a_main = Decode(%p1[i]%, 201, 2000, 6000)

Параграфы планов ПК (Plan_Paragraphs)

Select ps.note

,ps.summary

,ps.Status_Text

,ps.hisdate

,ps.d_creation

,ps.d_modification

,ps.id_paragraph

,ps.id_order

,ps.idk_order

,ps.Status_order

,ps.id_erp_userparagraphs_status_ psps.idk_order = 902ps.d_creation >= to_date(concat('01.01.', %p1[s]%), 'dd.mm.yyyy')ps.d_creation <= to_date(concat('31.12.', %p1[s]%), 'dd.mm.yyyy')

Приказы человека (Orders).name_kind_paragraph

,ps.Status_Text

,eg.Name

,Casesp.idk_level_speciality In (6, 24, 34) Then.Name || '. '|| sp.Name Name

,os.d_start

,kt.Name

,ts_.Get_DivisionName(sd.id_d_institute, Sysdate, 1, 1)

,ps2.Status_Text

,ps2.name_Kind_paragraph

,ps.d_creation

,ps.d_modification

,ps.id_order

,ps.id_paragraph

,ps.idk_order

,ps.status_order

students_ s

,orders_students_ os

,paragraphs_status_ ps

,paragraphs_status_ ps2

,student_groups_ eg

,speciality_ sp

,speciality_ spm

,specialities_division_ sd

,kind_training_ kt

,contracts_ cs.id_e = %p1[i]%os.id_student = s.id_studentps.id_paragraph = os.id_paragrapheg.id_ed_group = s.id_ed_groupeg.id_d_specialitie = sd.id_d_specialitiesp.id_speciality = sd.id_specialitysp.idk_level_speciality = 70kt.idk_training = sd.idk_trainingc.id_paragraph(+) = s.id_order_contractc.id_paragraph = ps2.id_paragraph(+)sp.parent_kind_speciality = spm.id_speciality(+)

.name_kind_paragraph

,ps.Status_Text

,eg.Name

,Casesp.idk_level_speciality In (6, 24, 34) Then.Name || '. '|| sp.Name Name

,s.d_start

,kt.Name

,ts_.Get_DivisionName(sd.id_d_institute, Sysdate, 1, 1)

,ps2.Status_Text

,ps2.name_Kind_paragraph

,ps.d_creation

,ps.d_modification

,ps.id_order

,ps.id_paragraph

,ps.idk_order

,ps.status_order

students_ s

,paragraphs_status_ ps

,paragraphs_status_ ps2

,student_groups_ eg

,speciality_ sp

,speciality_ spm

,specialities_division_ sd

,kind_training_ kt

,contracts_ cs.id_e = %p1[i]%ps.id_paragraph = s.id_order_starteg.id_ed_group = s.id_ed_groupeg.id_d_specialitie = sd.id_d_specialitiesp.id_speciality = sd.id_specialitysp.idk_level_speciality = 70kt.idk_training = sd.idk_trainingc.id_paragraph(+) = s.id_order_contractc.id_paragraph = ps2.id_paragraph(+)sp.parent_kind_speciality = spm.id_speciality(+)

ALLps.name_kind_paragraph

,ps.Status_Text

,null

,null

,o.d_end

,null

,null

,null

,null

,ps.d_creation

,ps.d_modification

,ps.id_order

,ps.id_paragraph

,ps.idk_order

,ps.status_orderold_surnames_ o

,paragraphs_status_ pso.id_e = %p1[i]%o.id_paragraph = ps.id_paragraph

Ссылка на договор (Contracts)ps.Status_Text

,ko.Name

,c.d_start

,c.d_end

,c.id_contract

,c.id_paragraph

,ps.id_order

,ps.idk_order

,ps.Status_order

contracts_ c

,employees_ e

,paragraphs_status_ ps

,kind_order_ koc.id_with_whom = e.id_contractorps.id_paragraph = c.id_paragraphps.idk_order = %p1[i]%ps.idk_order = ko.idk_ordere.id_e = %p2[i]%

Сформировать начисление (Create_New_Nach)Number;nvl(pay_education_.Go_Account_Contract(st.id_contract

,st.d_start

,st.d_end

,%p2[d]%

,%p3[i]%

,st.id_stage

,0

,0)

,0)istages_ stst.id_contract = %p1[i]%;;

Удаление студента (Delete_Student)_p Number;_o Number;

Begin

- Удаляем договор, если он есть

If %p1[i]% Is Not Nullc.id_paragraphid_pContracts_ cc.id_contract = %p1[i]%;p.id_order Into id_o From Paragraphs_ p Where p.id_paragraph = id_p;

From specialities_contract_ sc Where sc.id_contract = %p1[i]%;From contract_sources_ cs Where cs.id_contract = %p1[i]%;

-- Попытаемся удалить все сформированные начисления (если они не подписаны)

For cur In (Select sa.id_account

,sa.id_salary_accountsalary_account_ sa

,accounts_contract_ ac

,stages_ stsa.id_basis_sal_charge = ac.id_basis_salac.id_stage = st.id_stagest.id_contract = %p1[i]%) Loop

- Удаляем проводкиFrom spent_ ss.id_salary_account = cur.id_salary_account;

- Удаляем позицию расчётаFrom salary_account_ sasa.id_salary_account = cur.id_salary_account;

-- В расчёте может быть ещё 1 запись в позициях расчёта по НДСу

Delete From account_ aa.id_account = cur.id_accountNot Exists (Select 'x'salary_account_ sasa.id_account = cur.id_account);

End Loop;

- Теперь удаляем все направления и основания начисления!

For cur In (Select ac.id_basis_sal

,ac.id_account_contractaccounts_contract_ ac

,stages_ stst.id_contract = %p1[i]%st.id_stage = ac.id_stage) Loop

- счёт по этапу договоруFrom accounts_contract_ acac.id_account_contract = cur.id_account_contract;

- основание по этому счётуFrom basis_salary_ bsbs.id_basis_sal = cur.id_basis_sal;Loop;

- Этапы в договореFrom stages_ s Where s.id_contract = %p1[i]%;

- Представители в договореFrom representatives_ r Where r.id_paragraph = id_p;

- Наконец, сам договорFrom contracts_ c Where c.id_contract = %p1[i]%;

-- Обнуляем ссылку на договор, иначе удалить документ договора нельзя

Update Students_ s Set s.id_order_contract = null Where s.id_order_contract = id_p;From paragraphs_ p Where p.id_paragraph = id_p;From orders_ o Where o.id_order = id_o;

End If;


-Удаляем студента и все его приказы

For cur In (Select os.id_paragraph

,p.id_orderOrders_Students_ os

,paragraphs_ pos.id_student = %p2[i]%p.id_paragraph = os.id_paragraph)

From orders_students_ osos.id_paragraph = cur.id_paragraph;From paragraphs_ p Where p.id_paragraph = cur.id_paragraph;From orders_ o Where o.id_order = cur.id_order;;Loop;From students_ s Where s.id_student = %p2[i]%;

;

Участники (Listeners)e.full_fio

,eg.Name

,s.d_start

,(Select os2.d_startorders_students_ os2

,paragraphs_ pos2.id_student = s.id_studentos2.id_paragraph = p.id_paragraphp.idk_order In (201, 207))

,rcg.d_end

,kba.Name

,ps.Status_Text

,(Select ps2.Status_Textorders_students_ os2

,paragraphs_status_ ps2os2.id_student = s.id_studentos2.id_paragraph = ps2.id_paragraphps2.idk_order In (201, 207))

,psc.status_text

,(Select Max(ts_.Get_Org_Name(o.id_organization, Sysdate))representatives_ r

,organizations_ or.id_represented = c.id_with_whomr.id_representative = o.id_contractor)

,/*nvl(*/(Select Sum(sa.money)stages_ st

,accounts_contract_ ac

,salary_account_ sa

,spent_ s

,paragraphs_ pst.id_contract = c.id_contractst.id_stage = ac.id_stageac.id_basis_sal = sa.id_basis_sal_chargesa.id_salary_account = s.id_salary_accountac.id_paragraph = p.id_paragraphp.idk_order In (444, 436))

/*,(Select Sum(st.money)stages_ stst.id_contract = c.id_contract))*/

,d.series || Decode(d.series, '', '', ' ') || d.identifier

,ct.heard_hours

,rcg.hours

,(Select Max(ct2.when_given1)certificate_ ct2

,kind_level_formation_ klfct2.id_e1 = s.id_ect2.idk_level_formation = klf.idk_level_formationklf.qualifier = 96ct2.when_given1 <= s.d_start)

,s.id_student

,e.id_e

,eg.id_ed_group

,s.idkba_transfer

,s.id_order_start

,ps.id_order

,ps.idk_order

,c.id_contract

,ps.Status_order

,s.id_order_contract

,ps.id_erp_user

,e.id_contractor

- Рамочный договор

,decode(cm.id_contract

,''

,''

,nvl((Select pc.Valueparameters_contract_ pcpc.idk_parameter_contract = 4pc.id_contract = cm.id_contract)

,psm.Status_Text)) Номер_рд

,cm.id_contract

,decode(cm.id_contract

,''

,''

,(Select ts_.Get_Org_Name(o.id_organization, c.d_start)organizations_ oo.id_contractor = cm.id_with_whom))

,(Select Sum(sa.money)stages_ st

,accounts_contract_ ac

,salary_account_ sa

,spent_ s

,paragraphs_ pst.id_contract = c.id_contractst.id_stage = ac.id_stageac.id_basis_sal = sa.id_basis_sal_chargesa.id_salary_account = s.id_salary_accountac.id_paragraph = p.id_paragraphsa.id_charge = 40811 -- НДСp.idk_order In (444, 436))

,(Select ps2.id_paragraphorders_students_ os2

,paragraphs_status_ ps2os2.id_student = s.id_studentos2.id_paragraph = ps2.id_paragraphps2.idk_order In (201, 207))

,(Select ps2.id_erp_userorders_students_ os2

,paragraphs_status_ ps2os2.id_student = s.id_studentos2.id_paragraph = ps2.id_paragraphps2.idk_order In (201, 207))

,(Select ps2.Status_orderorders_students_ os2

,paragraphs_status_ ps2os2.id_student = s.id_studentos2.id_paragraph = ps2.id_paragraphps2.idk_order In (201, 207))

,ct.id_certificate

,d.id_doc

,kd.name

,kd.idk_doc

,d.when_given

,m.registration_number

,m.id_mag_r_diplom

students_ s

,employees_history_ e

,educational_group_ eg

,kind_basis_action_ kba

,paragraphs_status_ ps

,paragraphs_status_ psc

,contracts_ c

,contracts_ cm

,paragraphs_status_ psm

,magazine_registr_diplomas_ m

,documents_ d

,kind_document_ kd

,certificate_ ct

- Сроки обучения

,(Select rcg2.id_ed_group

,Min(rcg2.d_start) d_start

,Max(rcg2.d_end) d_end

,sum(elumk.hours) hoursrefresher_course_group_ rcg2

,educational_load_umk_ elumkrcg2.id_refresher_course_plan = %p1[i]%elumk.id_methodical_complex(+) = rcg2.id_methodical_complexBy rcg2.id_ed_group

-,elumk.hours

) rcg

e.id_e = s.id_es.d_start Between e.d_start And nvl(e.d_end, s.d_start)

s.id_ed_group = rcg.id_ed_groups.d_start Between rcg.d_start And nvl(rcg.d_end, s.d_start)eg.id_ed_group = s.id_ed_group

kba.idk_basis_action = s.idkba_transferps.id_paragraph = s.id_order_start

psc.id_paragraph(+) = s.id_order_contractc.id_paragraph(+) = psc.id_paragraphc.id_contract_main = cm.id_contract(+)cm.id_paragraph = psm.id_paragraph(+)

m.id_student(+) = s.id_studentm.id_certificate = ct.id_certificate(+)d.id_doc(+) = ct.id_docd.idk_doc = kd.idk_doc(+)

Виды сертификатов (Get_Kind_Documents)kd.Name

,kd.idk_dockind_document_ kdkd.idk_doc In (474151, 474152, 474153)

Выдать сертификат об окончании (Make_New_Cert_By_Params)_id_doc Number;_id_cert Number;

- Добавляем документInto documents_

(idk_doc, when_given, identifier, who_given, id_e)

(%p4[i]%

,(Select Max(os.d_start)orders_students_ osos.id_student = %p1[i]%)

,%p5[i]%

,ts_.Get_Header(13

,(Select Max(os.d_start)orders_students_ osos.id_student = %p1[i]%))

,(Select st.id_e From students_ st Where st.id_student = %p1[i]%))id_doc Into new_id_doc;

- Добавляем в него сертификатInto certificate_

(d_start

,d_end

,id_speciality

,id_doc

,idk_level_formation

,heard_hours)

((Select st.d_start From students_ st Where st.id_student = %p1[i]%)

,(Select Max(os.d_start)orders_students_ osos.id_student = %p1[i]%)

,(Select sg.id_specialitystudents_ s

,student_groups_ sgs.id_student = %p1[i]%s.id_ed_group = sg.id_ed_group)

,new_id_doc

,(Select sg.idk_level_formationstudents_ s

,student_groups_ sgs.id_student = %p1[i]%s.id_ed_group = sg.id_ed_group)

,%p6[i]%)id_certificate Into new_id_cert;

-- Теперь - регистрируем его в журнале выдачи дипломов

Insert Into magazine_registr_diplomas_

(id_paragraph_magazine

,id_certificate

,registration_number

,id_student

,id_e)

(%p2[i]%

,new_id_cert

,%p3[i]%

,%p1[i]%

,(Select st.id_e From students_ st Where st.id_student = %p1[i]%));;

Забрать сертификат (Delete_Certificate)_d Number;cr.id_docid_dcertificate_ crcr.id_certificate = %p1[i]%;From magazine_registr_diplomas_ m Where m.id_certificate = %p1[i]%;From certificate_ cr Where cr.id_certificate = %p1[i]%;From documents_ d Where d.id_doc = id_d;;

Поиск журнала (Find_Magazine_Reg_Dip)ps.id_paragraph

,ps.idk_order

,ps.name_Kind_paragraph

,ps.id_metaterm

,ps.id_order

,ps.temp_identifier

,ps.identifier

,ps.hisdate

,ps.Status_order

,ps.Status_Text

,ps.d_creation

,ps.id_erp_user

,''magazine_registr_diplomas_ m

,paragraphs_status_ ps

,students_ st

,student_groups_ egm.id_paragraph_magazine = ps.id_paragraphm.id_student = st.id_studentst.id_ed_group = eg.id_ed_groupeg.idk_level_speciality = 70rownum = 1

Регистрационный номер в журнале (Get_Reg_Number_By_ID_Paragraph)(Select Max(m.registration_number)magazine_registr_diplomas_ mm.id_paragraph_magazine = %p1[i]%)

,(Select Max(to_number(doc.identifier))magazine_registr_diplomas_ m

,students_ st

,student_groups_ eg

,certificate_ cr

,documents_ docm.id_paragraph_magazine = %p1[i]%--2434125m.id_student = st.id_studentst.id_ed_group = eg.id_ed_groupeg.idk_level_speciality = 70m.id_certificate = cr.id_certificatedoc.idk_doc = %p2[i]%--474152cr.id_doc = doc.id_doc)

From dual

Автопредставитель (Autorepr)

- Сперва удалим того представителя

delete from representatives_ r r.id_contract = %p1[i]%r.id_represented = (Select c.id_who From contracts_ c Where c.id_contract = %p1[i]%)r.d_start = (Select c.d_start From contracts_ c Where c.id_contract = %p1[i]%);

- Потом - добавим новогоinto representatives_ r

(id_contract,_represented,_representative,_start,_paragraph,_of_attorney,_post)

(select c.id_contract,.id_who,.id_contractor,.d_start,.id_paragraph,

nvl((Select 'доверенности от ' ||

to_char(doc.when_given, 'dd.mm.yyyy') || 'г. № ' ||.identifierdocuments_ doc, kind_document_ kdkd.idk_doc = doc.idk_docdoc.idk_doc = 26doc.id_e = emp.id_edoc.when_given =

(Select max(d.when_given)documents_ dd.idk_doc = doc.idk_docd.id_e = doc.id_ed.when_given <= sysdate)

and rownum = 1),

'Устава университета'),.id_post


from contracts_ c,_ p,_signed_ ws,_ st,_ emp,_staff_ us,_categories_ pc

c.id_contract = %p1[i]%c.id_paragraph = p.id_paragraphp.idk_order >= 400p.id_order = ws.id_orderws.id_staff = st.id_staffws.index_record = 1emp.id_e = st.id_est.id_units = us.id_unitsus.idg_post = pc.idg_postrownum = 1);;

Виды договоров (Kind_Order)ko.Name

,ko.idk_orderkind_order_ koko.idk_order = 68924

Виды направлений (Kind_Direction)ko.Name, ko.idk_orderkind_order_ koko.idk_order In (431, 433, 434, 62)

Добавить направление (Add_Direction)Into Accounts_Contract_

(Id_Paragraph, Id_Stage, Money, d_Start, d_End)

(Select %p1[i]%

,s.id_stage

,s.money

,s.d_start

,s.d_endStages_ ss.id_contract = %p2[i]%)

Добавление договора (Add_Contract)_c Number;

- ДоговорInto contracts_

(id_with_whom, id_who, d_start, d_end, id_paragraph, id_source)

((Select e.id_contractor From employees_ e Where e.id_e = %p1[i]%)

,(Select o.id_contractorvalues_setup_ vs

,organizations_ ovs.id_manual = 100vs.Value = o.id_organizationvs.d_start =

(Select Max(vs2.d_start)values_setup_ vs2vs2.d_start <= Sysdatevs2.id_manual = vs.id_manual))

,%p3[d]%

,%p4[d]%

,%p5[i]%

,%p6[i]%)id_contract Into id_c;


- Этап с суммойInto stages_

(id_contract, id_paragraph, d_start, d_end, d_opening, subject, money, identifier)

(id_c

,%p5[i]%

,%p3[d]%

,%p4[d]%

,%p3[d]%

,'Повышение квалификации'

,%p11[s]%

,1);

Into contract_sources_

(id_contract, id_type_value, id_source, d_start, Value)

(id_c, 2, %p6[i]%, %p3[d]%, 100);

Into specialities_contract_

(id_contract, id_d_specialitie, idk_status_trainee, d_start)

(id_c, %p7[i]%, 1, %p3[d]%);


-- Представитель студента - организация%p2[i]% is not null

ThenInto representatives_ r

(id_contract

,id_represented

,id_representative

,d_start

,id_paragraph

,r.power_of_attorney

,r.representative_organization

,r.representative_organization_r

,r.id_post)c.id_contract

,c.id_with_whom

,%p2[i]%

,%p3[d]%

,c.id_paragraph

,%p13[s]%

,%p14[s]%

,%p15[s]%

,%p16[i]%contracts_ cc.id_contract = id_c;

End If;


- Представитель МИИТа по первой подписи в договоре

Insert Into representatives_ r

(id_contract

,id_represented

,id_representative

,d_start

,id_paragraph

,power_of_attorney

,id_post)

(Select c.id_contract

,c.id_who

,emp.id_contractor

,c.d_start

,c.id_paragraph

,nvl((Select 'доверенности от ' ||_char(doc.when_given, 'dd.mm.yyyy') || 'г. № ' ||.identifierdocuments_ doc

,kind_document_ kdkd.idk_doc = doc.idk_docdoc.idk_doc = 26doc.id_e = emp.id_edoc.when_given =

(Select Max(d.when_given)documents_ dd.idk_doc = doc.idk_docd.id_e = doc.id_ed.when_given <= Sysdate)

And rownum = 1)

,'Устава университета')

,pc.id_post


From contracts_ c

,paragraphs_ p

,who_signed_ ws

,staff_ st

,employees_ emp

,units_staff_ us

,posts_categories_ pc

c.id_contract = id_cc.id_paragraph = p.id_paragraphp.idk_order >= 400p.id_order = ws.id_orderws.id_staff = st.id_staffws.index_record = 1emp.id_e = st.id_est.id_units = us.id_unitsus.idg_post = pc.idg_postrownum = 1);

%p12[s]% is not null students_ s Set s.id_order_contract = %p5[i]% Where s.id_student = %p12[s]% ;if;;

Изменение параметра (Update_PC)_st Number;

-Дата начала%p1[s]% = '0' thencontracts_ c Set c.d_start = %p3[d]% Where c.id_contract = %p2[i]%;

stages_ s Set s.d_start = %p3[d]% Where s.id_contract = %p2[i]%;

contract_sources_ cscs.d_start = %p3[d]%cs.id_contract = %p2[i]%;

representatives_ rr.d_start = %p3[d]%r.id_contract = %p2[i]%;if;


-Дата окончания%p1[s]% = '1' thencontracts_ c Set c.d_end = %p5[d]% Where c.id_contract = %p2[i]%;

stages_ s Set s.d_end = %p5[d]% Where s.id_contract = %p2[i]%;if;


-Организация%p1[s]% = '2'%p6[s]% Is Not Null ThenInto representatives_ r(Select c.id_contract id_contract

,%p4[i]% id_represented

,c.id_paragraph id_paragraph

,c.d_start d_start contracts_ cc.id_contract = %p2[i]%) c(r.id_contract = c.id_contract and r.id_represented = c.id_represented)Matched Thenr.id_representative = %p6[i]%,.power_of_attorney = %p11[s]%,.representative_organization = %p12[s]%,.representative_organization_r = %p13[s]%,.id_post = %p14[i]%r.id_contract = %p2[i]%r.id_represented = %p4[i]%Not Matched Then

(id_contract, id_represented, d_start, id_paragraph, id_representative , power_of_attorney, representative_organization, representative_organization_r, id_post)(%p2[i]%, %p4[i]%, c.d_start, c.id_paragraph, %p6[i]%, %p11[s]%, %p12[s]%, %p13[s]%, %p14[i]%);From representatives_ rr.id_contract = %p2[i]%r.id_represented = %p4[i]%;

End If;If;


-Источник финансирования

if %p1[s]% = '3' thenmin('1')is_stdualExists (Select 'x'stages_ st

,accounts_contract_ ac

,salary_account_ sast.id_contract = %p2[i]%st.id_stage = ac.id_stageac.id_basis_sal = sa.id_basis_sal_charge);is_st Is Not Null

Then_application_error(-20101

,'В договоре обнаружены сформированные начисления!');

End If;

contract_sources_ cscs.id_source = %p7[i]%cs.id_contract = %p2[i]%;if;


-Сумма%p1[s]% = '4' thenmin('1')is_stdualExists (Select 'x'stages_ st

,accounts_contract_ ac

,salary_account_ sast.id_contract = %p2[i]%st.id_stage = ac.id_stageac.id_basis_sal = sa.id_basis_sal_charge);is_st Is Not Null

Then_application_error(-20101

,'В договоре обнаружены сформированные начисления!');

End If;stages_ s Set s.money = %p8[s]% Where s.id_contract = %p2[i]%;accounts_contract_ acac.money = %p8[s]%ac.id_stage In (Select st.id_stagestages_ stst.id_contract = %p2[i]%);if;


-Вид договора%p1[s]% = '5' thenparagraphs_ pp.idk_order = %p9[s]%p.id_paragraph =

(Select c.id_paragraph From contracts_ c Where c.id_contract = %p2[i]%);if;


-Вид направления%p1[s]% = '6' thenparagraphs_ pp.idk_order = %p10[s]%p.id_paragraph =

(Select ac.id_paragraphaccounts_contract_ ac, stages_ ss.id_contract = %p2[i]%s.id_stage = ac.id_stage);if;


-НДС в договоре%p1[s]% = '7'

Then

- Наличие начисленийMin(1)

Into is_ststages_ st

,accounts_contract_ ac

,salary_account_ sa

,spent_ sst.id_contract = %p2[i]%st.id_stage = ac.id_stageac.id_basis_sal = sa.id_basis_sal_chargesa.id_salary_account = s.id_salary_account;is_st Is Not Null

Then_application_error(-20101

,'В договоре обнаружены сформированные начисления!');

End If;

%p15[s]% = '1'Into parameters_contract_ pc(Select c.id_contractcontracts_ cc.id_contract = %p2[i]%) c(pc.id_contract = c.id_contract And pc.idk_parameter_contract = 6)Matched Thenpc.Value = '1'pc.id_contract = %p2[i]%pc.idk_parameter_contract = 6Not Matched Then

(id_contract, idk_parameter_contract, Value)

(%p2[i]%, 6, '1');From parameters_contract_ pcpc.id_contract = %p2[i]%pc.idk_parameter_contract = 6;

End If;If;


-Срок отрыва от производства в договоре

If %p1[s]% = '8'%p16[s]% Is Not NullInto parameters_contract_ pc(Select c.id_contractcontracts_ cc.id_contract = %p2[i]%) c(pc.id_contract = c.id_contract And pc.idk_parameter_contract = 5)Matched Thenpc.Value = %p16[s]%pc.id_contract = %p2[i]%pc.idk_parameter_contract = 5Not Matched Then

(id_contract, idk_parameter_contract, Value)

(%p2[i]%, 5, %p16[s]%);From parameters_contract_ pcpc.id_contract = %p2[i]%pc.idk_parameter_contract = 5;If;If;

;

Параметры договора (Contr_Params)c.d_start -- 0) Дата начала

,c.d_end -- 1) Дата окончания

,r.id_representative -- 2) ID Контрагента организации-представителя

,cs.id_source -- 3) ID Источника финансирования

,sf.Name -- 4) Источник финансирования

,psc.id_order -- 5) ID Ордера договора

,psc.idk_order -- 6) ID Вида договора

,psc.Status_order -- 7) Статус договора

,koc.Name -- 8) Вид договора

,ps.id_paragraph -- 9) ID Параграфа направления

,ps.id_order -- 10) ID Ордера направления

,ps.Status_order -- 11) Статус направления

,ps.Status_text -- 12) Направление

,ps.idk_order -- 13) ID Вида направления

,ko.Name -- 14) Вид направления

,r.power_of_attorney -- 15) Основание

,r.representative_organization -- 16) ФИО представителя (им. пад.)

,r.representative_organization_r -- 17) ФИО представителя (род. пад.)

,r.id_post -- 18) ID Должности

,r.Name -- 19) Должность

,r.org_name -- 20) Организация

,CaseExists (Select 'x'parameters_contract_ pcpc.id_contract = c.id_contractpc.idk_parameter_contract = 6pc.value = '1') Then


-- 21) Наличие НДС

,(Select substr(pc.value, 1, instr(pc.value, ' по') - 1)parameters_contract_ pcpc.id_contract = c.id_contractpc.idk_parameter_contract = 5) -- 22) Начало отрыва

,(Select substr(pc.value, instr(pc.value, ' по') + 4)parameters_contract_ pcpc.id_contract = c.id_contractpc.idk_parameter_contract = 5) -- 23) Окончание отрыва

,s.money -- 24) Стоимость обучения

contracts_ c

,contract_sources_ cs

,source_financing_ sf

,paragraphs_status_ ps

,paragraphs_status_ psc

,kind_order_ koc

,kind_order_ ko

,(Select ac.*accounts_contract_ ac

,stages_ st

,paragraphs_ pst.id_contract = %p1[i]%st.id_stage = ac.id_stageac.id_paragraph = p.id_paragraphp.idk_order In (62, 431, 433, 434, 435, 445)) ac

,stages_ s

,(Select r.id_representative

,r.power_of_attorney

,r.representative_organization

,r.representative_organization_r

,r.id_post

,p.Name

,r.id_contract

,ts_.Get_Org_Name(o.id_organization, r.d_start) org_namerepresentatives_ r

,contracts_ c

,organizations_ o

,post_ pc.id_contract = %p1[i]%r.id_represented = c.id_with_whomr.id_representative = o.id_contractorr.id_contract = c.id_contractp.id_post(+) = r.id_post) r

c.id_contract = %p1[i]%c.id_contract = cs.id_contract(+)cs.id_source = sf.id_sourcec.id_paragraph = psc.id_paragraphpsc.idk_order = koc.idk_orders.id_contract(+) = c.id_contractac.id_stage(+) = s.id_stageac.id_paragraph = ps.id_paragraph(+)ko.idk_order(+) = ps.idk_orderc.id_contract = r.id_contract(+)

-And ps.idk_order in (62, 431, 433, 434, 435, 445)

Представители в договоре (Get_List_Representatives_By_ID_Contract)r.d_start

,r.d_end

,ts_.Get_Org_Name(o.id_organization, r.d_start)

,eh.full_fio

,p.Name

,r.power_of_attorney

,r.id_contract

,r.id_represented

,r.id_representative

,r.id_post

,r.id_paragraphrepresentatives_ r

,post_ p

,employees_history_ eh

,contracts_ c

,organizations_ or.id_post = p.id_postr.id_contract = %p1[i]%r.id_contract = c.id_contractr.id_represented = o.id_contractorr.id_representative = eh.id_contractorr.d_start Between eh.d_start And nvl(eh.d_end, r.d_start)

Удаление договора (Delete_Contract)_p Number;_o Number;c.id_paragraphid_pContracts_ cc.id_contract = %p1[i]%;

p.id_order Into id_o From Paragraphs_ p Where p.id_paragraph = id_p;

From specialities_contract_ sc Where sc.id_contract = %p1[i]%;From contract_sources_ cs Where cs.id_contract = %p1[i]%;From accounts_contract_ acac.id_stage In

(Select st.id_stage From stages_ st Where st.id_contract = %p1[i]%);From stages_ s Where s.id_contract = %p1[i]%;From representatives_ r Where r.id_paragraph = id_p;From contracts_ c Where c.id_contract = %p1[i]%;Students_ s Set s.id_order_contract = null Where s.id_order_contract = id_p;From paragraphs_ p Where p.id_paragraph = id_p;From orders_ o Where o.id_order = id_o;;

Прошедшее обучение (Get_Stat_Data_By_Period)res.d_name

,res.spec_name

,res.fio

,res.sg_name

,res.d_start

,res.d_end

,res.o_start

,(Select Max(os.d_end)orders_students_ os

,paragraphs_status_ psos.id_student = res.id_studentos.id_paragraph = ps.id_paragraphps.idk_order In (207)ps.Status_order <> 3) o_end

,res.o_contract

,res.org

,(Select Sum(sa.money)stages_ st

,accounts_contract_ ac

,paragraphs_ p

,salary_account_ sa

,spent_ sst.id_contract = res.id_contractst.id_stage = ac.id_stageac.id_paragraph = p.id_paragraphp.idk_order In (436, 444)ac.id_basis_sal = sa.id_basis_sal_chargesa.id_salary_account = s.id_salary_account) Sum

,(Select Sum(sa.money)stages_ st

,accounts_contract_ ac

,paragraphs_ p

,salary_account_ sa

,spent_ sst.id_contract = res.id_contractst.id_stage = ac.id_stageac.id_paragraph = p.id_paragraphp.idk_order In (436, 444)ac.id_basis_sal = sa.id_basis_sal_chargesa.id_charge = 40811sa.id_salary_account = s.id_salary_account) sum_nds

,res.cert_num

,res.heard_hours

,m.hours

,null -- Last_Date

,null -- Contract_Main

,null -- Org_Main

,res.id_e

,res.id_contractor

,res.id_student

,res.id_ed_group

(Select sc.Name spec_name

,e.surname || ' ' || e.Name || ' ' || e.patronymic || ', ' ||.date_of_birth fio

,sg.Name sg_name

,ad.abbreviation d_name

,st.d_start

,doc.series ||(doc.series

,''

,''

,Decode(doc.identifier, '', '', ' ')) ||.identifier cert_num

,cr.heard_hours

,st.id_e

,e.id_contractor

,st.id_student

,st.id_ed_group

,ps.Status_Text o_start

,(Select Max(os.d_end)orders_students_ os

,paragraphs_status_ psos.id_student = st.id_studentos.id_paragraph = ps.id_paragraphps.idk_order In (207)ps.Status_order <> 3) d_end

,psc.Status_Text o_contract

,c.d_end contract_end

,c.id_contract

,sd.id_speciality

,Decode(c.id_contract

,''

,''

,(Select ts_.Get_Org_Name(o.id_organization, r.d_start)representatives_ r

,organizations_ or.id_contract = c.id_contractst.d_start Between r.d_start And(r.d_end, st.d_start)r.id_representative = o.id_contractor)) org

From (

- всё, если необычный пользователь

Select.id_ddivision_ dL

Where bs_.isUnusual > 0All

- по ролям, если обычный пользователь

Select dL.id_ddivision_ dLbs_.isUnusual = 0dL.id_metaterm In

(Select r.id_metatermTable(access_data_.Get_Roles('1403', 1)) r)

Union All

- по ролям, если обычный пользователь

Select dL.id_ddivision_ dLbs_.isUnusual = 0Exists

(Select r.id_metatermTable(access_data_.Get_Roles('1403', 1)) rr.id_metaterm Is Null)) d

,students_ st

,paragraphs_status_ ps

,educational_group_ sg

,specialities_division_ sd

,speciality_ sc

,employees_ e

,contracts_ c

,paragraphs_status_ psc

,magazine_registr_diplomas_ m

,certificate_ cr

,documents_ doc

,attributes_divisions_ ad

st.d_start <= nvl(%p2[d]%, st.d_start)st.id_ed_group = sg.id_ed_groupst.id_e = e.id_e

sg.id_d_specialitie = sd.id_d_specialitiesd.id_speciality = sc.id_specialitysc.idk_level_speciality = 70 -- ПК

st.id_student = m.id_student(+)m.id_certificate = cr.id_certificate(+)cr.id_doc = doc.id_doc(+)

sd.id_d_institute = d.id_dd.id_d = ad.id_dst.d_start between ad.d_start and nvl(ad.d_end, st.d_start)

st.id_order_start = ps.id_paragraphst.id_order_contract = c.id_paragraph(+)c.id_paragraph = psc.id_paragraph(+)) res

-- плановые часы из методических комплексов

,(Select d.id_speciality

,Sum(e.hours) hoursmethodical_complex_ m

,disciplines_ d

,educational_load_umk_ em.id_discipline = d.id_disciplinem.id_methodical_complex = e.id_methodical_complexBy d.id_speciality) m

(res.d_start <= %p2[d]% Or %p2[d]% Is Null)(res.d_end >= %p1[d]% Or res.d_end Is Null Or %p1[d]% Is Null)res.id_speciality = m.id_speciality(+)


Приложение Г. Образцы документов


План повышения квалификации

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

"МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ПУТЕЙ СООБЩЕНИЯ"

(МИИТ)

Институт экономики и финансов


утверждаю

Первый проректор - проректор по учебной работе

________________ В.В. Виноградов


«___» __________ 2011 г.


П Л А Н

на 2011 год

№№ п/пНаименование программыОбъем часовФорма обученияОриентировочные сроки проведенияКафедра организатор1234561.Анализ результатов производственно-хозяйственной деятельности в путевом комплексе72дистанционнаяянварь - январьИнститут экономики и финансов2.Управление штатным составом структурных подразделений ЕК АСУТР72дистанционнаямарт - апрель - апрельИнститут экономики и финансов


Сертификат о прохождении повышения квалификации ВеснинойАнастасия Анатольевне21 марта 2011 Институт экономики и финансов МИИТапрограмме:«Управление штатным составом структурных подразделений ЕК АСУТР»72 часа/В.П.Чуприков//В.Г.Круглова/ Москва104001ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

"МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ПУТЕЙ СООБЩЕНИЯ"

(МИИТ)


ПРИКАЗ


2011 г.№

О зачислении на обучение по программе дополнительного профессионального образования

В соответствии с ИЭФ, утверждённым .

ПРИКАЗЫВАЮ:

. , согласно прилагаемому списку в количестве 34 человек, слушателями группы 5570/1 на период обучения с 21.03.2011 по 20.04.2011 по программе "Управление штатным составом структурных подразделений ЕК АСУТР".

. Назначить:

менеджер учебной группы Шишову Л.С.

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

Организатор обученияМенеджер учебной группы Л.С.ШишоваСПИСОК слушателей группы № 5570/1,

зачисленных на повышение квалификации в период с 21.03.2011 по 20.04.2011
по теме "Управление штатным составом структурных подразделений ЕК АСУТР"
72 учебных часа


№ п/пФамилияИмяОтчествоПредприятиеПодразделение, отделДолжность12345671.НовиковаСветланаАлександровнаДирекция тяги - структурное подразделение Забайкальской ж.д., ТЧЭ АмурскоеЗаместитель начальника депо по экономике и финансам2.ЛитовкаОльгаВладимировнаДТЭкономист 1 кат.3.СимаковаЕленаЮрьевнаДирекция тяги структурное подразделение Восточно-Сибирской ж.д., ТЧЭ -1 ТайшетНачальник финансово-экономического отдела4.СаватееваОльгаНиколаевнаДирекция тяги структурное подразделение Западно - Сибирской ж.д., ТЧЭ-10 КарасукВедущий экономист5.КрашенниковаЛарисаВикторовнаТЧЭ -2 МуромЗам. начальника депо по экономике и финансам6.МасловаСветланаВладимировнаТЧЭ -2 МуромЗам. начальника отдела7.УстиноваГалинаВикторовнаТЧЭ-16 Красноуфимск18.РуссаковаСветланаФилиповнаТЧЭ-6 Горький СортировочныйЗам. начальника депо по экономике и финансам9.КозийЕленаАнатольевнаВосточно-Сибирская железная дорога10.СилаевАлександрСергеевичДирекция тяги структурное подразделение Восточно-Сибирской ж.д., ТЧЭ -5 Иркутск-СортировочныйНачальник отдела11.НовиковаЛарисаВалерьевнаЛокомотивное эксплуатационное депо ЗимаСпециалист по управлению персоналом12.ЛеонтьеваГалинаАлександровнаВосточно-Сибирская железная дорога13.ПосвалюкТатьянаЕвгеньевнаДирекция тяги структурное подразделение Горьковской ж.д., ТЧЭ_14 ЮдиноЗам. начальника отдела14.ЛабзинаОльгаПетровнаДирекция тяги структурное подразделение Горьковской ж.д., ТЧЭ_14 ЮдиноЗам. начальника депо по экономике и финансам15.ЗудоваЕленаЕвгеньевнаДирекция тяги структурное подразделение Горьковской ж.д., ТЧЭ-15 АгрызЗам. начальника депо по экономике и финансам16.ГанееваЕвгенияВасильевнаДирекция тяги структурное подразделение Горьковской ж.д., ТЧЭ-15 АгрызВедущий экономист17.ВеснинаАнастасия АнатольевнаДирекция тяги - структурное подразделение Забайкальской ж.д., ТЧЭ ХилокНачальник сектора экономики и организации труда18.КушмановаИринаАлександровнаДирекция тяги - структурное подразделение Забайкальской ж.д., ТЧЭ БорзяЗаместитель начальника депо по экономике и финансам19.Назарчук Татьяна ИвановнаДирекция тяги - структурное подразделение Забайкальской ж.д., ТЧЭ МогочаЗаместитель начальника депо по экономике и финансам20.Епифанцева Ольга ВасильевнаДирекция тяги - структурное подразделение Забайкальской ж.д., ТЧЭ ЧернышевскНачальник отдела экономики и организации труда21.ЛадаЕленаАнатольевнаДирекция тяги - структурное подразделение Забайкальской ж.д., ТЧЭ БелогорскЗаместитель начальника депо по экономике и финансам22.РедькинаИринаНиколаевнаДирекция тяги структурное подразделение Красноярской ж.д., ТЧЭ-7 АбаканГлавный экономист23.ШадринАлексейВитальевичДирекция тяги структурное подразделение Северной ж.д., ТЧЭ-22 ПечораЭкономист24.ГайдукАннаИвановнаДирекция тяги структурное подразделение Северо-Кавказская ж.д., ТЧЭ-8 КавказскаяВедущий экономист25.ЦопановаАлександраСергеевнаДирекция тяги структурное подразделение Северо-Кавказская ж.д., ТЧЭ-14 СальскЗаместитель начальника депо по экономике и финансам26.ЛяпуноваАнжелаАлександровнаОктябрьская ДУД, Московский центр организации работы железнодорожных станций (ДС Ховрино)Ведущий инженер по организации и нормированию труда27.КормушкинаЛарисаАлександровнаГорьковская ДУД, орган управленияведущий инженер по организации и нормированию труда28.СалийНатальяПавловнаДирекция тяги структурное подразделение Горьковской ж.д., ДТНачальник отдела29.ШубинаСветланаГеннадьевнаДирекция тяги структурное подразделение Горьковской ж.д., ТЧЭ-9 ЛянгасовоЗам. начальника депо по экономике и финансам30.ЛеоноваТатьянаЕвгеньевнаДирекция тяги структурное подразделение Горьковской ж.д., ТЧЭ-9 ЛянгасовоЗам. начальника отдела31.ЗаваринаАллаНиколаевнаДирекция тяги-структурное подразделение Приволжской ж.д., ТЧЭ-9 АнисовкаНачальник сектора экономики32.БуйскихМаринаЕвгеньевнаДирекция тяги структурное подразделение Горьковской ж.д., ТЧЭ-6 Горький СортировочныйЗам. начальника отдела33.РякинаТатьянаАлександровнаДирекция тяги структурное подразделение Горьковской ж.д., ТЧЭ-8 КировЗам. начальника депо по экономике и финансам34.СычуговМихаилЮрьевичДирекция тяги структурное подразделение Восточно-Сибирской ж.д., ДТИнженер по нормированию труда I категории

Основание



Договор № _________

на оказание услуг по повышению квалификации


г. Москва «___» _________2010 года

Государственное образовательное учреждение высшего профессионального образования «Московский государственный университет путей сообщения» (МИИТ), именуемое в дальнейшем «Исполнитель», в лице первого проректора - проректора по учебной работе Виноградова Валентина Васильевича, действующего на основании доверенности от 05.03.2010 № 001/116, с одной стороны, и государственное образовательное учреждение высшего профессионального образования «Иркутский государственный университет путей сообщения», именуемый в дальнейшем «Заказчик», в лице ректора Хоменко Андрея Павловича, действующего на основании устава университета, с другой стороны, заключили настоящий договор (в дальнейшем - Договор) о нижеследующем:

. Предмет Договора

По настоящему договору Заказчик поручает, а Исполнитель оказывает услуги по повышению квалификации одного слушателя (далее - Слушатель) в рамках программы «Организация маркетинга и рекламы. Экономика предприятия» в период с 24.05.2010 по 03.06.2010, в соответствии с утвержденным учебным планом.

. Цена и порядок расчетов

.1. Стоимость услуг по настоящему договору составляет 16 000 (Шестнадцать тысяч) рублей 00 копеек. Услуги Исполнителя не облагаются НДС согласно подпункту 14 пункта 2 статьи 149 главы 21 Налогового кодекса Российской Федерации.

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

. Права и обязанности сторон

.1. Исполнитель обязан:

.1.1. Провести курс обучения Слушателя в сроки, установленные учебным планом.

.1.2. Оказать услуги в соответствии с требованиями настоящего Договора.

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

.2. Заказчик обязан:

Принять и оплатить оказанные Исполнителем услуги в установленный срок и в соответствии с условиями Договора.

.2.2. Уведомить Исполнителя в случае отказа от предоставляемых услуг не менее чем за 5 (Пять) дней до начала обучения.

.3. Заказчик имеет право:

.3.1. В случае выбытия слушателя из группы до начала обучения, Заказчик имеет право заменить его, при этом цена Договора остается неизменной.

.4. Исполнитель вправе:

.4.1. Для выполнения принятых на себя обязательств по настоящему договору привлекать третьих лиц без согласия Заказчика.

. Ответственность сторон

.1. За неисполнение или ненадлежащее исполнение обязательств по настоящему договору стороны несут ответственность в соответствии с законодательством Российской Федерации.

. С рок действия Договора

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

Договор может быть расторгнут досрочно по соглашению сторон.

. Прочие условия

.1.Слушатель обязан соблюдать требования правил учебного распорядка и техники безопасности Исполнителя.

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

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

. Адреса и банковские реквизиты сторон

Исполнитель: 127994, Россия, г. Москва, ул. Образцова, д. 9, стр. 9, МИИТ. ИНН 7715027733, КПП 771501001 УФК по г. Москве (л/сч.03731346460 МИИТ)

Банк получателя: Отделение 1 Московского ГТУ Банка России г.Москва 705.

р/сч. 40503810600001009079

БИК: 044583001.

КБК 10930201010010000130, ОКАТО 45280569000, разрешение 03 от 27.05.2009

Назначение платежа: П.1р. Оплата за обучение (повышение квалификации преподавателей).

Тел./факс (495)684-28-56, Факультет повышения квалификации. Лицензия: серия А № 283231, регистрационный № 9552 от 30.11.2007.

Заказчик: 664074, г. Иркутск, ул. Чернышевского, 15

ИНН 3812010086 КПП 381201001

УФК по Иркутской области (ИрГУПС (ИрИИТ) л/с 03341437620

р/сч. 40503810300001000001 в ГРКЦ ГУ Банка России по Иркутской области г. Иркутск

БИК 042520001

От Исполнителя: От Заказчика:

Первый проректор - Ректор

проректор по учебной работе

________ В.В. Виноградов ___________А.П. Хоменко


Акт сдачи-приемки оказанных услуг

г. Москва « » ______ 2010 года

Исполнитель - государственное образовательное учреждение высшего профессионального образования «Московский государственный университет путей сообщения» (МИИТ), в лице первого проректора - проректора по учебной работе Виноградова Валентина Васильевича, действующего на основании доверенности от 05.03.2010 № 001/116, сдает, а Заказчик, государственное образовательное учреждение высшего профессионального образования «Иркутский государственный университет путей сообщения», в лице ректора Хоменко Андрея Павловича, действующего на основании устава университета, принимает оказанные услуги по повышению квалификации одного слушателя в рамках программы «Организация маркетинга и рекламы. Экономика предприятия» в период с 24.05.2010 по 03.06.2010. Услуги оказаны в полном объеме и в срок, предусмотренный договором № _______________ на оказание услуг по повышению квалификации от "___" ______________2010 года.



От Исполнителя: От Заказчика:

Первый проректор - Ректор

проректор по учебной работе


__________ В.В. Виноградов ________ А.П. Хоменко


ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ

(МИИТ)

П Р И К А З


« » ___________________ 2010 г. № _______________

Об окончании обучения по программе

повышения квалификации


. В связи с окончанием обучения по программе «Технология создания электронных курсов в среде CourseLab» в период c 27.09.2010 по 25.10.2010 следующих преподавателей и сотрудников вузов и ссузов железнодорожного транспорта считать выполнившими учебный план в объеме 72 часов и окончившими курс обучения по указанной программе:

ГРУППА № 6027


№№ п/пФамилия, имя, отчествоДолжность, учебное учреждение1.Луковкин Константин Петрович Уральского государственного университета путей сообщения2.Матюшина Наталия Михайловнаметодист Московского государственного университета путей сообщения3.Урбанская Валентина Васильевнапреподаватель Московского государственного университета путей сообщения

2. Декану факультета повышения квалификации преподавателей Модинец В.И. обеспечить выдачу слушателям удостоверений о повышении квалификации государственного образца.


Основание: рапорт Модинец В.И.


Первый проректор - проректор по учебной работе В.В. Виноградов Начальник управления кадров В.Н. Стрижов


Аннотация Данный дипломный проект посвящен разработке модуля поддержки процессов организации повышения квалификации преподавателей в рамках АСУ МИИТ.

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ