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

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    3,38 Мб
  • Опубликовано:
    2013-07-27
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

Аннотация

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

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

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

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

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

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

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

Содержание

Аннотация

Введение

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

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

.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 Матрица доступа

Наименование таблицы

Сотрудник отдела планирования ФПКП

Сотрудник отдела проведения ФПКП

Декан ФПКП

Документы

NA

RW

RW

Студенты

R

R

R

Сотрудники

R

R

R

Сертификат

NA

RW

RW

Договора

NA

RW

RW

Куратор группы

RW

R

RW

Кто есть кто

NA

NA

NA

Методический комплекс

RW

R

RW

Подразделения

R

R

R

Учебная нагрузка умк

RW

R

RW

План повышения квалификации

RW

R

RW

Специальности комплекса

RW

R

RW

Параграфы

RW

RW

RW

Группы повышения квалификации

RW

R

RW

Учебная группа

RW

R

RW

Бумаги

RW

RW

RW

Примечание:- нет никакого доступа;- только чтение;- только запись;- чтение и запись.

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, процедуры добавления, обновления, удаления данных из cxGrid

LP_u_CX_tools

Содержит набор общих процедур для стандартных действий и описание общих компонентов


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

LP_u_MA_Interface

Описание интерфейса доступа к серверу приложений


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

Standart_New

Модуль, описывающий процедуры и функции для работы с компонентом cxTreeList


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

SqlStringList

Модуль, описывающий обертки к компоненту cxGridTableView


Организация оберток к cxGridTableView, модуль реализует чтение из базы методом SelectData по GUID_Select

Wrappers

Модуль, описывающий стандартные несписковые с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

Описание запроса

Параметры

1

R_C_Groups

{5E30FFBA-B616-4850-A7E4-C5F69A7BD61A}

Список группы ПК для выбранного плана ПК

%p1[i]% - ID Плана ПК

2

Add_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]% - Количество часов самостоятельной работы

3

Met_Complex

{0793BD99-678C-4E5A-99E3-F51F5227A816}

Методические комплексы выбранной специальности подразделения

%p1[i]% - ID Специальности подразделения

4

Get_Data_For_Plan

{4E97B054-EE9C-4449-A155-5B834991F360}

Формирование плана повышения квалификации

%p1[i]% - ID Параграфа Плана ПК

5

R_C_Plan

{01A115AA-8C51-4430-A175-E78BCE51FFDE}

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

%p1[i]% - ID Параграфа плана

6

Get_List_Spec_By_Params

{5F33C483-BA63-4F6C-A11D-28639EA7581B}

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

%p1[i]% - уровень специальности %p2[i]% - ID подразделения-организатора

7

Orders

{C67E9825-6FE4-4461-83E9-1A5225B7F0CE}

Все приказы на данного человека

%p1[i]% - ID Человека.

8

Listeners

{39FD4EC1-0E3B-4913-BDD1-0FBAD73E2C9E}

Участники выбранного плана ПК

%p1[i]% - ID Плана ПК

9

Delete_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 - количество фактических часов.

11

Autorepr

{1CFCDE6B-464C-4D9C-B933-245FFC48CFEA}

Добавляет представителя МИИТа в заданный договор

%p1[i]% - ID договора

12

Add_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 Ввод нового описания программы обучения

Для добавления нового описания программы обучения следует нажать на кнопку «Принять» или клавишу [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,001

1000

0,2697

0,002

500

0,2708

0,003

333,33

0,2720

0,004

250

0,2734

0,005

200

0,2747

0,006

166,7

0,2763

0,007

142,86

0,2779

0,008

125

0,2800

0,009

111,11

0,2817

0,01

100

0,2839

0,011

90,91

0,2864

0,012

83,33

0,2891

0,013

76,92

0,2922

0,014

71,42857

0,2956

0,015

66,7

0,2995

0,016

62,5

0,3041

0,017

58,82

0,3094

0,018

55,56

0,3157

0,019

52,63

0,3232

0,02

50

0,3323

0,021

47,62

0,3436

0,022

45,45

0,3582

0,023

43,48

0,3774

0,024

41,67

0,4041

0,025

40

0,4435

0,026

38,46

0,5078

0,027

37,04

0,6314

0,028

35,71

0,9659

0,029

34,48

5,201

0,03

33,33

12,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

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

1

2

Изучение задания

2

3

Сбор и изучение научно-технической литературы

7

4

Анализ существующей системы

10

5

Обоснование целесообразности решения поставленной задачи

2

6

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

1

7

Выбор средств разработки

2

8

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

7

9

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

6

10

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

4

11

Разработка ПО

32

12

Тестирование ПО

2

13

Корректировка ПО

4

14

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

4

15

Составление пояснительной записки

4

 

Итого:

88


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

Таблица 5.2

Этап  проект-ирования

Трудоемкость  в ч/часах

ЗП + ЕСН (228,4 руб./час)

Эл.энерго и амортизация в час (3,9 + 27,98)

Накладные расходы  (8,5 руб./ч)

∑затраты (руб.)

1

8

1827,2

255,04

68

2150,24

2

16

3654,4

510,08

136

4300,48

3

56

12790,4

1785,28

476

15051,68

4

80

18272

2550,4

680

21502,4

5

16

3654,4

510,08

136

4300,48

6

8

1827,2

255,04

68

2150,24

7

16

3654,4

510,08

136

4300,48

8

56

12790,4

1785,28

476

15051,68

9

48

10963,2

1530,24

408

12901,44

10

32

7308,8

1020,16

272

8600,96

11

256

58470,4

8161,28

2176

68807,68

12

16

3654,4

510,08

136

4300,48

13

32

7308,8

1020,16

272

8600,96

14

32

7308,8

1020,16

272

8600,96

15

32

7308,8

1020,16

272

8600,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,6

1

1,5

Сервер

1

2

1,5


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

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

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

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

Наименование оборудования

Количество единиц оборудования

Цена, руб.

Σ Цена, руб.

Системный блок

1

20000

20000

Монитор

1

10000

10000

Клавиатура

1

2300

1500

Мышь

1

1700

700

Принтер

1

7000

7000

Сервер базы данных

1

350000

350000

Сервер приложений

1

148000

148000

Итого:



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 DB

1

Система управления базой данных

25873825

Delphi

1

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

72 708

PL/SQL Developer

1

Среда написания 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 Стоимость оборудования для эксплуатации проекта

Наименование оборудования

Количество единиц оборудования

Цена, руб.

Σ Цена, руб.

Системный блок

42

15000

630000

Монитор

42

8000

336000

Клавиатура

42

700

29400

Мышь

42

300

12600

Принтер

20

3000

Сервер базы данных

1

350000

350000

Сервер приложений

1

148000

148000

Итого:



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

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

1

2

Изучение задания

2

3

Сбор и изучение научно-технической литературы

7

4

Анализ существующей системы

10

5

Обоснование целесообразности решения поставленной задачи

2

 

Итого:

22

Оценка затрат на информационное обеспечение в денежном выражении по каждому этапу проектирования представлена в таблице 5.8.

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

Этап проект-ирования

Трудоемкость в ч/часах

ЗП + ЕСН (228,4 руб./час)

Эл.энерго и амортизация в час (3,9 + 27,98)

Накладные расходы (8,5 руб./ч)

∑ Затраты (руб.)

1

8

1827,2

255,04

68

2150,24

2

16

3654,4

510,08

136

4300,48

3

56

12790,4

1785,28

476

15051,68

4

80

18272

2550,4

680

21502,4

5

16

3654,4

510,08

68

4300,48

Итого:





47305,28

ИО = 47305,28 руб.

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

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

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

Этап проектирования

Работы

Кол-во дней

15

Составление пояснительной записки

4

Итого:


4


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

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

Этап  проект-ирования

Трудоемкость  в ч/часах

ЗП + ЕСН (228,4 руб./час)

Эл.энерго и амортизация в час (3,9 + 27,98)

Накладные расходы  (8,5 руб./ч)

∑затраты (руб.)

15

32

7308,8

1020,16

272

8600,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, то можно сделать вывод о целесообразности разработки и применения приложения, автоматизирующего технологию организации повышения квалификации преподавателей в рамках АСУ МИИТ.


Заключение

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

Созданное приложение отвечает всем основным поставленным требованиям:

интеграция с корпоративной системой университета (АСУ МИИТ);

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

заполнение и корректировка содержимого документов, используя данные БД АСУ МИИТ;

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

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

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

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

http://mvf.klerk.ru/zakon/125fz.htm (полный текст ФЗ 125)

М.Р. Когаловский. Энциклопедия технологий баз данных. М. Финансы и статистика, 2002Engineering, Jakob Nielsen San Francisco, 1993

Проектирование информационных систем на железнодорожном транспорте. Э.К. Лецкий, З.А. Крепкая. И.В. МарковаРуководство пользователя. Грейди Буч, Джеймс Рамбо Айвар Джекобсон

Программирование в Delphi 6, Архангельский А.А.

Психологическая диагностика, Учебное пособие / Под П 86 ред. К.М. Гуревича и Е.М. Борисовой. - М.: Изд-во УРАО, 1997 г.

Человеко-машинное взаимодействие, Методические указания к дипломному проектированию, Дружинин Ю.Г.://ru.wikipedia.org

Качество информации, Дружинин Г.В., Сергеева И.В. - М.: Радио и связь, 1990 г.

Приложение А

Описание ER-модели

Entity

 

Entity

Name

Definition

Бумаги

Сведения о документах

Группы повышения квалификации

Группы повышения квалификации

Договора

Сведения о договорах

Документы

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

Кто есть кто

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

Куратор группы

Куратор группы

Методический комплекс

Методический комплекс

Параграфы

Сведения о параграфах

План повышения квалификации

План повышения квалификации

Подразделения

Сведения о подразделениях

Сертификат

Содержит информацию о документах, подтверждающих полученное образование (вуз, ФПК, аспирантура, докторантура и т.д.).

Сотрудники

Содержит список сотрудников

Специальности комплекса

Специальности комплекса

Студенты

Сведения о студентах

Учебная группа

Список учебных групп

Учебная нагрузка умк

Учебная нагрузка в рамках умк


Attribute(s) of "Бумаги" Entity

Name

Definition

ID бумаги

Внутрисистемный номер бумаги

ID вида бумаги

Внутрисистемный номер вида бумаги

номер бумаги

Номер бумаги

ID периода нумерации

Внутрисистемный номер периода нумерации бумаги

ID серии бумаг

Внутрисистемный номер серии бумаги

дата

Дата

временный номер

Временный номер бумаги

основание

Основание

аннотация

Аннотация

примечание

Примечание

готов?

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

пошел?

Признак того, что документ ушел на подпись

Дата создания бумаги

дата изменения

Дата внесения изменений в документ

ID пользователя системы

ID Пользователя системы, создавшего этот документ


Attribute(s) of "Группы повышения квалификации" Entity

Name

Definition

ID группы пк

Внутрисистемный номер группы повышения квалификации

ID плана пк

Внутрисистемный номер плана повышения квалификации

ID учебной группы

Внутрисистемный номер учебного группы

ID методического комплекса

Внутрисистемный номер методического комплекса

дата начала

Планируемая дата начала обучения

дата окончания

Планируемая дата окончания обучения


Attribute(s) of "Договора" Entity

Name

Definition

ID договора

Внутрисистемный номер договора

ID кто

Внутрисистемный номер организации, которая заключает договор

ID с кем

Внутрисистемный номер организации, с которой заключается договор

дата начала

Дата начала действия договора

дата оконч план

Планируемая дата окончания договора

дата окончания

Дата окончания договора

ID параграфа

Внутрисистемный номер параграфа

предмет

Предмет договора

ID источника фин

Внутрисистемный номер источника финансирования

ID счета

Внутрисистемный номер счета

в рамках

Внутрисистемный номер договора


Attribute(s) of "Документы" Entity

Name

Definition

ID документа

Внутрисистемный номер документа

ID вида документа

Внутрисистемный номер вида документа

когда выдан

Когда выдан

серия

Серия

номер

Номер

кто выдал

Кто выдал

ID сотрудника

Внутрисистемный номер сотрудника

дата окончания

Окончание действия


Attribute(s) of "Кто есть кто" Entity

Name

Definition

ID пользователя системы

Внутрисистемный номер пользователя системы

ID сотрудника

Внутрисистемный номер сотрудника

ID пользователя

Внутрисистемный номер пользователя

дата начала

Дата начала действия

дата окончания

Дата окончания действия

логин

Логин пользователя

примечание

Описание пользователя

логин в ОС

Имя пользователя в операционной системе

ID сервера приложений

Внутрисистемный номер сервера приложений

ID подразделения

Внутрисистемный номер подразделения, (укрупненно) к которому относится пользователь


Attribute(s) of "Куратор группы" Entity

Name

Definition

ID учебной группы

Внутрисистемный номер учебного группы

ID сотрудника

Внутрисистемный номер сотрудника

дата начала

Дата начала действия

дата окончания

Дата окончания действия


Attribute(s) of "Методический комплекс" Entity

Name

Definition

ID методического комплекса

Внутрисистемный номер методического комплекса

ID подразделения

Внутрисистемный номер кафедры

ID дисциплины

Внутрисистемный номер дисциплины


Attribute(s) of "Параграфы" Entity

Name

Definition

ID параграфа

Внутрисистемный номер параграфа

ID вида бумаги

Внутрисистемный вида бумаги

ID бумаги

Внутрисистемный номер бумаги

порядок

Порядок

отмена

Отмена документа


Attribute(s) of "План повышения квалификации" Entity

Name

Definition

ID плана пк

Внутрисистемный номер плана повышения квалификации

ID параграфа

Внутрисистемный номер параграфа

ID обучаемой спец

Внутрисистемный номер обучаемой специальности

дата начала

Дата начала действия

дата окончания

Дата окончания действия


Attribute(s) of "Подразделения" Entity

Name

Definition

ID подразделения

Внутрисистемный номер подразделения

ID метатермина

Внутрисистемный номер метатермина

ID контрагента

Внутрисистемный номер контрагента


Attribute(s) of "Сертификат" Entity

Name

Definition

ID сертификата

Внутрисистемный номер сертификата

ID вида уровня образования

Внутрисистемный номер вида образования

дата начала

Дата начала обучения

дата окончания

Дата окончания обучения

примечание

Примечание

ID специальности

Внутрисистемный номер специальности

ID квалификации

Внутрисистемный номер квалификации

признак отличия

Признак отличия: 1 - золотой медалист, 2 - серебрянный и др.

ID документа

Внутрисистемный номер документа

оценок 5

число оценок 5

оценок 4

число оценок 4

оценок 3

число оценок 3

ID вида уч заведения

Внутрисистемный номер вида учебного заведения

прослушано часов

Количество прослушанных часов


Attribute(s) of "Сотрудники" Entity

 

Name

Definition

ID сотрудника

Внутрисистемный номер сотрудника

ID контрагента

Внутрисистемный номер контрагента сотрудника

фамилия

Фамилия сотрудника

ID склонения ф

Внутрисистемный номер склонения фамилии

имя

Имя сотрудника

ID склонения и

Внутрисистемный номер склонения имени

отчество

Отчество сотрудника

ID склонения от

Внутрисистемный номер склонения отчества

пол

Пол

дата рожнения

Дата рождения

дата окончания

Дата окончания действия

ИНН

Номер ИНН

номер пенс страх

Номер пенсионного свидетельства

ID национальности

Внутрисистемный номер национальности

ID метатермина

Внутрисистемный номер метатермина


Attribute(s) of "Специальности комплекса" Entity

Name

Definition

ID методического комплекса

Внутрисистемный номер методического комплекса

ID обучаемой спец

Внутрисистемный номер обучаемой специальности

ID параграфа программы

Внутрисистемный номер параметра программы

ID вида дисциплины

Внутрисистемный номер вида дисциплины

ID типа дисциплины

Внутрисистемный номер типа дисциплины

ID параграфа кафедры

Внутрисистемный номер протокола заседания кафедры

ID параграфа умо

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


Attribute(s) of "Студенты" Entity

Name

Definition

ID студента

Внутрисистемный номер студента

ID сотрудника

Внутрисистемный номер сотрудника

ID учебной группы

Внутрисистемный номер учебного группы

ID вида зачисления

Внутрисистемный номер вида зачисления

ID приказа о зач

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

дата начала

Дата начала действия

окончание плановое

Планируемая дата окончания

ID договора

Внутрисистемный номер договора

ID документа

Внутрисистемный номер бумаги

ID вида программы

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

условный срок

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

ID учебного плана

Внутрисистемный номер учебного плана


Attribute(s) of "Учебная группа" Entity

Name

Definition

ID учебной группы

Внутрисистемный номер учебного группы

ID обучаемой спец

Внутрисистемный номер обучаемой специальности

наименование

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

уровень группы

0 - группы не учитываемые в учебном отделе 1 - курс 2 - поток 3 - группа

дата начала

Дата начала действия

дата окончания

Дата окончания действия

входит

Входит

максимальный размер

Рекомендуемое число участников в группе

ID вида группы

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

курс

Курс обучения

аббревиатура

Аббревиатура, если не указана, то берется аббревиатура специальности


Attribute(s) of "Учебная нагрузка умк" Entity

Name

Definition

ID учебной нагрузки умк

Внутрисистемный номер учебной нагрузки УМК

ID методического комплекса

Внутрисистемный номер методического комплекса

ID вида обучения

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

ID вида нагрузки

Внутрисистемный номер вида нагрузки

семестр

Семестр (1..12)

часы

Количество часов


Table

Table

Name

Certificate

Complex_specialities

Contracts

Curator_group

Division

Documents

Educational_group

Educational_load_umk

Employees

Methodical_complex

Orders

Paragraphs

Refresher_course_group

Refresher_course_plan

Students

Who_Is_Who


Column(s) of "Certificate" Table

Name

Datatype

Is PK

Is FK

ID_certificate

NUMBER(10)

Yes

No

IDk_level_formation

NUMBER(10)

No

No

d_start

DATE

No

No

d_end

DATE

No

No

note

VARCHAR2(500)

No

No

ID_speciality

NUMBER(10)

No

No

ID_qualification

NUMBER(10)

No

No

attribute_difference

INTEGER

No

No

ID_doc

NUMBER(10)

No

Yes

INTEGER

No

No

estimations_4

INTEGER

No

No

estimations_3

INTEGER

No

No

IDk_ed_institution

NUMBER(10)

No

No

heard_hours

FLOAT

No

No


Column(s) of "Complex_specialities" Table

Name

Datatype

Is PK

Is FK

ID_p_dp

NUMBER(10)

No

Yes

IDt_discipline

NUMBER(10)

No

No

IDk_discipline

NUMBER(10)

No

No

ID_d_specialitie

NUMBER(10)

No

No

ID_methodical_complex

INTEGER

No

Yes

ID_p_k

NUMBER(10)

No

Yes

ID_p_umo

NUMBER(10)

No

Yes


Column(s) of "Contracts" Table

Name

Datatype

Is PK

Is FK

ID_contract

NUMBER(10)

Yes

No

ID_who

NUMBER(10)

No

No

ID_with_whom

NUMBER(10)

No

No

d_start

DATE

No

No

dp_end

DATE

No

No

d_end

DATE

No

No

ID_paragraph

NUMBER(10)

No

Yes

subject

VARCHAR2(500)

No

No

ID_source

NUMBER(10)

No

No

ID_account

NUMBER(10)

No

No

ID_contract_main

NUMBER(10)

No

Yes


Column(s) of "Curator_group" Table

Name

Datatype

Is PK

Is FK

ID_ed_group

NUMBER(10)

Yes

Yes

ID_e

NUMBER(10)

Yes

Yes

d_start

DATE

Yes

No

d_end

DATE

No

No


Column(s) of "Division" Table

Name

Datatype

Is PK

Is FK

ID_d

NUMBER(10)

Yes

No

ID_metaterm

NUMBER(10)

No

No

ID_contractor

NUMBER(10)

No

No


Column(s) of "Documents" Table

Name

Datatype

Is PK

Is FK

ID_doc

NUMBER(10)

Yes

No

IDk_doc

NUMBER(10)

No

No

when_given

DATE

No

No

series

VARCHAR2(20)

No

No

identifier

VARCHAR2(30)

No

No

who_given

VARCHAR2(500)

No

No

ID_e

NUMBER(10)

No

Yes

d_end

DATE

No

No


Column(s) of "Educational_group" Table

Name

Datatype

Is PK

Is FK

ID_ed_group

NUMBER(10)

Yes

No

ID_d_specialitie

NUMBER(10)

No

No

name

VARCHAR2(100)

No

No

level_group

INTEGER

No

No

d_start

DATE

No

No

d_end

DATE

No

No

ID_ed_group_main

NUMBER(10)

No

Yes

maximal_size

INTEGER

No

No

IDk_group

NUMBER(10)

No

No

course

INTEGER

No

No

abbreviation

VARCHAR2(20)

No

No


Column(s) of "Educational_load_umk" Table

Name

Datatype

Is PK

Is FK

ID_educational_load_umk

INTEGER

Yes

No

ID_methodical_complex

INTEGER

No

Yes

IDk_training

NUMBER(10)

No

No

IDk_lesson

NUMBER(10)

No

No

semester

INTEGER

No

No

hours

FLOAT

No

No


Column(s) of "Employees" Table

Name

Datatype

Is PK

Is FK

ID_e

NUMBER(10)

Yes

No

ID_contractor

NUMBER(10)

No

No

surname

VARCHAR2(60)

No

No

ID_declination_s

NUMBER(10)

No

No

name

VARCHAR2(50)

No

No

ID_declination_n

NUMBER(10)

No

No

patronymic

VARCHAR2(50)

No

No

ID_declination_p

NUMBER(10)

No

No

sex

NUMBER(1)

No

No

date_of_birth

DATE

No

No

d_end

DATE

No

No

INN

VARCHAR2(30)

No

No

insurance_pension

VARCHAR2(30)

No

No

ID_nationality

NUMBER(10)

No

No

ID_metaterm

NUMBER(10)

No

No


Column(s) of "Methodical_complex" Table

Name

Datatype

Is PK

Is FK

ID_methodical_complex

INTEGER

Yes

No

ID_d

NUMBER(10)

No

Yes

ID_discipline

NUMBER(10)

No

No


Column(s) of "Orders" Table

Name

Datatype

Is PK

Is FK

ID_order

NUMBER(10)

Yes

No

IDk_order

NUMBER(10)

No

No

number_paper

No

No

ID_period_numbering

NUMBER(10)

No

No

ID_series_paper

NUMBER(10)

No

No

hisdate

DATE

No

No

temp_identifier

NUMBER(10)

No

No

basis

VARCHAR2(800)

No

No

summary

VARCHAR2(500)

No

No

note

VARCHAR2(800)

No

No

If_ready

SMALLINT

No

No

if_gone

SMALLINT

No

No

d_creation

DATE

No

No

d_modification

DATE

No

No

ID_ERP_user

NUMBER(10)

No

Yes


Column(s) of "Paragraphs" Table

Name

Datatype

Is PK

Is FK

ID_paragraph

NUMBER(10)

Yes

No

IDk_order

NUMBER(10)

No

No

ID_order

NUMBER(10)

No

Yes

index_p

INTEGER

No

No

cancellation

NUMBER(10)

No

Yes


Column(s) of "Refresher_course_group" Table

Name

Datatype

Is PK

Is FK

ID_rc_group

INTEGER

Yes

No

ID_refresher_course_plan

INTEGER

No

Yes

ID_ed_group

NUMBER(10)

No

Yes

ID_methodical_complex

INTEGER

No

Yes

d_start

DATE

No

No

d_end

DATE

No

No


Column(s) of "Refresher_course_plan" Table

Name

Datatype

Is PK

Is FK

ID_refresher_course_plan

INTEGER

Yes

No

ID_paragraph

NUMBER(10)

No

Yes

ID_d_specialitie

NUMBER(10)

No

No

d_start

DATE

No

No

d_end

DATE

No

No


Column(s) of "Students" Table

Name

Datatype

Is PK

Is FK

ID_student

NUMBER(10)

Yes

No

ID_e

NUMBER(10)

No

Yes

ID_ed_group

NUMBER(10)

No

Yes

IDkba_transfer

NUMBER(10)

No

No

ID_order_start

NUMBER(10)

No

Yes

d_start

DATE

No

No

dp_end

DATE

No

No

ID_order_contract

NUMBER(10)

No

Yes

ID_doc

NUMBER(10)

No

Yes

IDk_program

NUMBER(10)

No

No

d_trial

DATE

No

No

ID_educational_plan

NUMBER(10)

No

No


Column(s) of "Who_Is_Who" Table

Name

Datatype

Is PK

Is FK

ID_ERP_user

NUMBER(10)

Yes

No

ID_e

NUMBER(10)

No

Yes

ID_user

NUMBER(10)

No

No

d_start

DATE

No

No

d_end

DATE

No

No

login

VARCHAR2(20)

No

No

note

VARCHAR2(200)

No

No

login_OS

VARCHAR2(30)

No

No

ID_as

NUMBER(10)

No

No

ID_d

NUMBER(10)

No

Yes


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

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);

{ Инициализация формы }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, 'Не смогли найти журнал выдачи.');

, 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

,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

Сформировать начисление (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.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 год

№№ п/п

Наименование программы

Объем часов

Форма обучения

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

Кафедра организатор

1

2

3

4

5

6

1.

Анализ результатов производственно-хозяйственной деятельности в путевом комплексе

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 учебных часа

№ п/п

Фамилия

Имя

Отчество

Предприятие

Подразделение, отдел

Должность

1

2

3

4

5

6

7

1.

Новикова

Светлана

Александровна


Дирекция тяги - структурное подразделение Забайкальской ж.д., ТЧЭ Амурское

Заместитель начальника депо по экономике и финансам

2.

Литовка

Ольга

Владимировна


ДТ

Экономист 1 кат.

3.

Симакова

Елена

Юрьевна


Дирекция тяги структурное подразделение Восточно-Сибирской ж.д., ТЧЭ -1 Тайшет

Начальник финансово-экономического отдела

4.

Саватеева

Ольга

Николаевна


Дирекция тяги структурное подразделение Западно - Сибирской ж.д., ТЧЭ-10 Карасук

Ведущий экономист

5.

Крашенникова

Лариса

Викторовна


ТЧЭ -2 Муром

Зам. начальника депо по экономике и финансам

6.

Маслова

Светлана

Владимировна


ТЧЭ -2 Муром

Зам. начальника отдела

7.

Устинова

Галина

Викторовна


ТЧЭ-16 Красноуфимск

1

8.

Руссакова

Светлана

Филиповна


ТЧЭ-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. Декану факультета повышения квалификации преподавателей Модинец В.И. обеспечить выдачу слушателям удостоверений о повышении квалификации государственного образца.

Основание: рапорт Модинец В.И.

Первый проректор - проректор по учебной работе  

 В.В. Виноградов

Начальник управления кадров  В.Н. Стрижов



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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!