Проектирование реализации операций бизнес-процесса
Содержание:
ВВЕДЕНИЕ
Для эффективного управления персоналом организация нуждается в целостной системе, позволяющей управлять работниками от момента приема на работу до завершения карьеры. Цели и задачи управления персоналом осуществляются через кадровую политику, включающую систему правил, в соответствии с которыми ведет себя система в целом и по которым действуют люди, входящие в эту систему.
Управление персоналом состоит в целенаправленном воздействии на работников для рациональной организации их труда и знаний.
Развитие способностей человека связано с наличием определённых задатков, из которых при благоприятных общественных условиях могут развиться способности, проявляющиеся в умениях и навыках. Благодаря приобретению опыта, развитию способностей, повышению квалификации происходит карьерное развитие работника, увеличивается вознаграждение, происходит самовыражение, повышается удовлетворённость трудом, что обеспечивает эффективность результатов работы организации.
Современные информационные технологии позволяют использования автоматические средства, позволяющие эффективно хранить, обрабатывать и распределять накопленные данные.
Широкое внедрение автоматизированных систем обработки информации и управления в организациях позволяет повысить эффективность и качество.
Цель работы – спроектировать автоматизированную систему для управления персоналом.
Для достижения поставленной цели необходимо выполнить следующие задачи:
- дать характеристику предметной области;
- выбрать задачи для автоматизации;
- описать бизнес-процессы;
- выбрать информационное и программное обеспечение;
- построить информационную модель;
- описать входную, справочную и результатную информацию;
- построить дерево функций;
- разработать базу данных;
- описать программные модули;
- привести контрольный пример реализации проекта.
1. АНАЛИТИЧЕСКАЯ ЧАСТЬ
1.1. Выбор комплекса задач автоматизации
Компания «Энергострой» разрабатывает качественные проекты энергоснабжения, которые учитывают все государственные нормы и стандарты. Также выполняются электротехнические работы на основании готового проекта.
За короткий период в компании разрабатывают такие части проекта, как наружные сети, внутреннее электроснабжение, электроосвещение.
На этапе непосредственной реализации проекта (этап проведения электромонтажных работ) специалисты выполняют все необходимые демонтажные, пусконаладочные и сопроводительные работы.
ООО «Энергострой» имеет следующую организационную структуру (рисунок 1.1):
Рис.1.1. Организационная структура ООО «Энергострой»
Представим систему управления персоналом в виде функциональной модели, построенной с помощью BPWin (рис.1.2). Данная модель, описывающая процесс деятельности предприятия, состоит из нескольких диаграмм, позволяющих понять, на основании каких функций работают отделы, кто их формирует, а также под чьим руководством, ясно увидеть результат работы. Методология IDEF0 позволяет выявить формальные недостатки бизнес-процессов, что существенно облегчает анализ деятельности рассматриваемой компании.
Рис.1.2. Контекстная диаграмма
Декомпозиция контекстной диаграммы представлена на рисунке 1.3.
Рис.1.3. IDEF0 Управление персоналом
Рис.1.4. Организация работы сотрудников
В данном пункте нами были выделены задачи для автоматизации:
прием на работу и уволнение;
повышение квалификации;
оформление отпусков, командировочных и т.д.
1.2. Характеристика существующих бизнес-процессов
Процесс оценки потенциала работника на входе получает упражнения, моделирующие ключевые моменты деятельности оцениваемого. В зависимости от результатов оценки сотрудник может быть перемещен в другое структурное подразделение, отправлен на повышение квалификации. Данная оценка также помогает менеджеру составить план обучения и развития, а также методические пособия и инструкции.
Процесс квалификационных испытаний на входе имеет оценку независимого эксперта, а на выходе тоже, что и у предыдущего процесса, единственное отличие – результаты данного процесса влияют на оклад/премию сотрудника, при отрицательных результатах сотрудник может быть уволен.
Процесс аттестации на предприятии осуществляется на основании таких документов, как:
- приказ о проведении аттестации
- бланк самооценки
- бланк предварительной оценки
- аттестационный лист
- лист оценки стажера (для стажеров).
На выходе имеем все те же документы. Но в виду того, что предыдущие процессы не относятся к стажерам (в отличии от аттестации), на выходе появляется еще один документ – направление для прохождения стажировки.
При подборе кадров данные о сотрудниках и кандидатах поступают из справочников, когда процесс подбора завершен стартует процесс отбора персонала, где на входе поступают результаты анализа, полученные на предыдущем этапе, а также рекомендации на кандидатов на вакантную должность. Далее идет процесс найма, на выходе которого, получаем приказ о приеме на работу, либо приказ о кадровом перемещении (в зависимости от того, какой вид найма использовался: внешний или внутренний). Эти данные фиксируются в соответствующих справочниках. Процесс адаптации следует после найма сотрудника. Если на входе список нарушений, то происходит высвобождение сотрудника с соответствующим оформлением – приказ об увольнении, данный факт также фиксируется в справочнике.
На рисунках 1.5 и 1.6 детально приведены модели существующих бизнес-процессов приема на работу и увольнения.
Рис.1.5. Модель бизнес-процесса «Прием на работу»
Рис.1.6. Модель бизнес-процесса «Увольнение»
Процесс определения неудовлетворенных потребностей в кадрах осуществляется путем анализа штатного расписания, если таковая потребность имеет место, то происходит процесс разработки требований к идеальному для данного места работнику. Результатом данного процесса является должностная инструкция. После разработки требований необходимо определить источник найма: внешний либо внутренний.
На рисунке 1.7 показан процесс отбора кандидатов по двум направлениям, в зависимости от выбранного вида найма.
Рис.1.7. IDEF3 Отбор персонала
Непосредственно сам процесс найма представляет собой документально оформление отношений работодателя и работника, опираясь на ТЗ РФ. После того, как все документы оформлены, происходит адаптация сотрудника, когда осуществлялся внешний наем и вторичная – если имело место кадровое перемещение.
Как видно из представленных диаграмм, в существующей системе управления персоналом множество входных и выходных документов, которые в настоящее время заполняются вручную. Поэтому для совершенствования процессов управления персоналом было решено разработать автоматизированную систему.
1.3. Характеристика документооборота, возникающего при решении задачи
Автоматизированная система управления персоналом необходима менеджеру по персоналу для оперативной обработки информации о вакантных местах, кандидатах и сотрудниках компании.
Внедрение АС не потребует дополнительных технических ресурсов, так как все рабочие места оснащены компьютерной техникой.
Цели, критерии и ограничения создаваемой АС:
- обеспечение полной и достоверной информацией, необходимой для кадрового учета;
- обеспечение данными по обучению персонала и сдаче экзаменов;
- своевременное оформление всей первичной документации;
- повышение надежности и безопасности обработки информации.
Функции и задачи создаваемой АС:
Ожидаемые технико-экономические результаты создания АС:
- снижение затрат времени на поиск резюме;
- снижение затрат времени на подведение итогов сдачи экзаменов и последующее повышение оклада сотрудника;
- повышение точности данных.
Затраты на создание и эксплуатацию АС будут невелики, так как все рабочие места отдела персонала оснащены необходимой техникой.
1.4. Обоснование проектных решений по информационному обеспечению
Информационное обеспечение (ИО) системы управления персоналом представляет собой информационную модель работы сотрудников предприятия. Различают внемашинное и внутримашинное обеспечение.
Информационное обеспечение включает в себя: систему классификации и кодирования; систему унифицированной документации, используемой в ИО, информационную базу, т.е. информацию из всех информационных массивов.
Входными документами в системе являются:
личные дела сотрудников;
трудовые книжки.
К внутримашинному информационному обеспечению относится описание экранных форм.
При разработке системы использовалась реляционная модель базы данных. Реляционная модель данных некоторой предметной области представляет собой набор отношений изменяющихся во времени. При создании информационной системы совокупность отношений позволяет хранить данные об объектах предметной области, моделировать связи между ними. При этом сами данные хранятся в таблицах [6]. Для удобства идентификации каждая таблица созданной базы данных обладает уникальным кодом.
К информационному обеспечению в рамках данного проекта относятся:
- база данных;
- экранные формы для ввода первичных данных в ЭВМ;
- экранные формы для вывода результирующей информации.
Выходная информация – трудовой договор, приказы о приеме на работу, об увольнении и т.д.
Все указанные элементы совокупно составляют информационное обеспечение проекта. Данные, внесенные в форму ввода первичных данных, попадают в базу данных, а затем данная информация может быть выведена (по запросу) в форму для вывода результирующей информации.
1.5. Обоснование проектных решений по программному обеспечению
В ООО «Энергострой» на рабочих станциях пользователей системы установлена ОС линейки Microsoft Windows, это является оптимальным выбором, т.к. ОС семейства Windows наиболее распространённые на сегодняшний день, поэтому с приходом нового сотрудника не придётся его переобучать. На приобретаемый сервер с целью совместимости всех компонентов системы рекомендуется установить последнюю версию серверной операционной системы Microsoft Windows 2008 Server.
Реализация приложения проводится в среде программирования Borland Delphi 7.0, располагающей широкими возможностями по созданию приложений баз данных. Delphi 7.0 является средой быстрой разработки приложений (RAD), полностью поддерживающей все ведущие индустриальные стандарты: XML, SOAP, WSDL и XSL, а также появляющиеся платформы – Microsoft .NET и BizTalk, Sun Microsystems ONE, обеспечивая необходимую гибкость, надежность и масштабируемость.
Среди большого разнообразия продуктов для разработки приложений Delphi занимает одно из ведущих мест. С помощью Delphi написано колоссальное количество приложений, десятки фирм и тысячи программистов-одиночек разрабатывают для Delphi дополнительные компоненты.
В основе такой общепризнанной популярности лежит тот факт, что Delphi, как никакая другая система программирования, удовлетворяет изложенным выше требованиям. Действительно, приложения с помощью Delphi разрабатываются быстро, причем взаимодействие разработчика с интерактивной средой Delphi не вызывает внутреннего отторжения, а наоборот, оставляет ощущение комфорта. Delphi-приложения эффективны, если разработчик соблюдает определенные правила (и часто - если не соблюдает). Эти приложения надежны и при эксплуатации обладают предсказуемым поведением.
Delphi служит средством для быстрого создания широкого класса Windows - приложений. Она учитывает многие новейшие достижения в программировании и практике создания приложений и предназначена для визуального программирования, когда разработчик видит большую часть результатов непосредственно на экране монитора уже в процессе своей работы по созданию программы. Визуальное программирование позволяет быстрее создать интерфейс программы, сделать его более качественным за счет наилучшего расположения информации окна экране монитора, избежать многих ошибок уже на экране проектирования.
В качестве создания базы данных была выбрана СУБД Microsoft Access.
На сегодняшний день MS Access является наиболее популярной СУБД, используемой для разработки настольных баз данных (БД). Богатый набор мастеров и построителей позволяет полностью автоматизировать создание пользовательского интерфейса, а множество удобных средств разработки помогает сократить время создания законченного приложения. Полная интеграция с другими приложениями MS Office (Word, Excel, Outlook) — также большой плюс Access. Встроенный язык Visual Basic for Application (VBA) позволяет выполнять нестандартные задачи.
Популярность СУБД Microsoft Access обусловлена следующими причинами:
- Access является одной из самых легкодоступных и понятных систем как для профессионалов, так и для начинающих пользователей, позволяющая быстро освоить основные принципы работы с базами данных;
- система имеет полностью русифицированную версию;
- полнаяинтегрированностьспакетами Microsoft Office: Word, Excel, Power Point, Mail;
- идеология Windows позволяет представлять информацию красочно и наглядно;
- возможность использования OLE технологии, что позволяет установить связь с объектами другого приложения или внедрить какие-либо объекты в базу данных Access;
- технология WYSIWIG позволяет пользователю постоянно видеть все результаты своих действий;
- широко и наглядно представлена справочная система;
- существует набор “мастеров” по разработке объектов, облегчающий создание таблиц, форм и отчетов.
Access специально спроектирован для создания многопользовательских приложений, где файлы базы данных являются разделяемыми ресурсами в сети. В Microsoft Access реализована надёжная система защиты от несанкционированного доступа к файлам.
Все эти преимущества обусловили выбор именно этой СУБД.
2. ПРОЕКТНАЯ ЧАСТЬ
2.1. Информационная модель и её описание
Информационная модель представляет собой схему движения входных, промежуточных и результативных потоков и функций предметной области. Кроме того, она объясняет, на основе каких входных документов и какой нормативно-справочной информации происходит выполнение функций по обработке данных и формирование конкретных выходных документов. Информационная модель представлена на рис. 2.1.
Информационная система работает со справочниками Отделы, Сотрудники, Контрагенты, Типы и Категории документов, Клиенты, экранными формами ввода документов. Информационная система формирует выборки по типам и категориям документов.
В соответствии с приведенной информационной моделью, работа системы осуществляется следующим образом.
Администратор системы регистрирует сотрудников, изменяя содержимое таблицы «Сотрудники». Также он изменяет содержимое данной таблицы, редактируя данные для доступа к системе каждого сотрудника.
Сотрудник регистрирует документы, используя документ и справочники Типы документов, Категории документов, Контрагенты и Клиенты и изменяя содержимое таблицы Документы.
Рис.2.1. Информационная модель
2.2. Характеристика нормативно-справочной, входной и оперативной информации
В качестве входной информации используются следующие документы:
- трудовая книжка;
- штатное расписание;
- документ.
Трудовая книжка сотрудника используется при регистрации его в системе. Источником получения данного документа является отдел кадров. При этом из нее используются следующие реквизиты:
- фамилия, имя, отчество;
- дата рождения;
- наименование должности;
- наименование отдела.
Частота возникновения данного документа – по мере регистрации новых сотрудников, объем – около 10 строк.
Штатное расписание используется при формировании справочника Отделы, при этом используется только такой реквизит, как наименование отдела. Источником получения данного документа также является отдел кадров, объем – 15 строк.
Документ является основным входным документом. При регистрации документа в системе задействуются следующие реквизиты:
- наименование;
- тип документа;
- дата подготовки или поступления;
- количество страниц;
- описание документа;
- электронная копия документа.
Источниками получения документов являются как другие организации, так и отделы самого общества. Объем документов колеблется в очень широком диапазоне.
В системе используются справочники, приведенные в таблице 2.1.
Таблица 2.1
Перечень используемых справочников
№ пп |
Название справочника |
Ответственный за ведение |
Средний объём справочника в записях |
Средняя частота актуализации |
Средний объем актуализации, % |
1 |
Отделы |
Администратор |
45 |
1 раз в месяц |
10 |
2 |
Документы |
Администратор |
10 |
1 раз в год |
10 |
3 |
Клиенты |
Администратор |
2000 |
1 раз в год |
10 |
4 |
Типы документов |
Администратор |
50 |
1 раз в месяц |
25 |
5 |
Категории документов |
Администратор |
20 |
1 раз в месяц |
25 |
6 |
Сотрудники |
Администратор |
20 |
1 раз в месяц |
25 |
Справочник Отделы имеет следующие реквизиты:
- код отдела;
- полное наименование отдела;
- сокращенное наименование отдела.
Справочник Сотрудники имеет следующие реквизиты:
- фамилия;
- имя;
- отчество;
- дата рождения
- пароль
- логин
- дата регистрации
Справочник Типы документов включает в себя наименование типа документа и код категории.
Справочник Категории содержит наименования категорий документов.
Указанные справочники содержат входную и справочную информацию, необходимую для разрабатываемой системы.
2.3. Характеристика результатной информации
Результатной информацией для задачи автоматизации управления персоналом являются следующие документы:
- список сотрудников;
- список документов по категориям и типам;
- список контрагентов;
- список клиентов.
В списке сотрудников имеются следующие реквизиты:
- фамилия, имя, отчество сотрудников;
- дата регистрации;
- должность;
- отдел;
- дата рождения;
- логин и пароль для доступа в систему.
Данный документ формируется на основе справочников Отделы и Сотрудники.
Списки документов имеют следующие реквизиты:
- наименование документа;
- дата регистрации;
- краткое описание;
- количество страниц;
- адресат;
- ссылка на электронную версию документа;
- тип документа;
- категория документа.
2.4. Общие положения (дерево функций и сценарий диалога)
Состав и классификация функций разрабатываемого программного продукта представлены в виде дерева функций (рис. 2.2).
Рис. 2.2. Дерево функций ИС
В связи с тем, что при решении задачи используется технология обработки информации в режиме диалога, взаимодействие пользователя с программой можно представить в виде схемы диалога (рис.2.3).
Диалог, реализованный в программе относится к типу менюориентированных диалогов. Схема диалога представляет собой общую конструкцию диалога, т.е. требуемую последовательность обмена данными между пользователем и системой. В верхнем уровне схемы располагается главное меню, инициирующее задачу, затем происходит разветвление различной степени в зависимости от числа вариантов ответа пользователя на запрос ЭВМ или возможных реакций ЭВМ на конкретные сообщения.
При запуске системы открывается окно ввода логина и пароля. После успешной авторизации система автоматически определяет права пользователя и направляет его в то меню, которое ему доступно.
Рис. 2.3. Дерево сценариев диалога
Разработанный сценарий диалога будет реализован в информационной ситеме, более подробно описанной в контрольном примере.
2.5. Характеристика базы данных
Перечень сущностей и их соответствие информационной модели приведено в таблице 2.2.
Таблица 2.2
Перечень сущностей и их соответствие информационной модели
№ |
Название сущности в информационной модели |
Идентификатор таблицы |
---|---|---|
Справочник «Отделы» |
Otdel |
|
Справочник «Сотрудники» |
Sotr |
|
Справочник «Типы документов» |
Tipi |
|
Справочник «Категории документов» |
Kategorii |
|
Таблица «Документы» |
Dok |
Характеристика каждой таблицы базы данных приведена ниже, в таблицах 2.3-2.9.
Таблица 2.3
Таблица Документы
Идентификатор |
Тип данных |
Примечание |
idd |
int(11) |
Код документа |
ids |
int(5) |
Код сотрудника |
named |
varchar(45) |
Наименование |
idkd |
int(5) |
Код типа |
datepod |
varchar(45) |
Дата подготовки |
datez |
timestamp |
Дата и время регистрации |
kolvostr |
varchar(45) |
Количество страниц |
prim |
varchar(45) |
Примечание |
otkuda |
varchar(45) |
Адресат |
link |
text |
Ссылка на документ |
status |
int(1) |
Статус |
archiv |
int(1) |
Флаг помещения в архив |
rnp |
int(1) |
Флаг резолюции начальника отдела |
Таблица 2.4
Таблица Отделы
Идентификатор |
Тип данных |
Примечание |
idOtd |
int(11) |
Код отдела |
nameOtd |
varchar(100) |
Наименование отдела |
KrNameOtd |
varchar(10) |
Краткое наименование отдела |
Таблица 2.5
Таблица Сотрудники
Идентификатор |
Тип данных |
Примечание |
idsotr |
int(11) |
Код сотрудника |
name |
varchar(45) |
Фамилия |
dolg |
int(2) |
Код должности |
login |
varchar(10) |
Логин |
parol |
varchar(10) |
Пароль |
dates |
timestamp |
Дата регистрации |
surname |
varchar(45) |
Имя и отчество |
datebor |
varchar(14) |
Дата рождения |
udal |
int(1) |
Отметка об удалении |
Таблица 2.6
Таблица Типы документов
Идентификатор |
Тип данных |
Примечание |
idtip |
int(11) |
Код типа документа |
namet |
varchar(10) |
Наименование типа документа |
idkat_tip |
int(11) |
Код категории документов |
Таблица 2.71
Таблица Категории документов
Идентификатор |
Тип данных |
Примечание |
idkat |
int(11) |
Код категории документа |
namekat |
text |
Наименование категории документа |
Приведенные таблицы являются основой реляционной базы данных.
2.6. Структурная схема пакета (дерево вызова программных модулей)
Структурная схема пакета представлена на рисунке 2.4.
Рис.2.4. Структурная схема пакета
2.7. Описание программных модулей
Описание программных модулей приведено в таблице 2.8.
Таблица 2.8
Описание функций модулей
Наименование модуля |
Функции модуля |
---|---|
Модуль безопасности |
Содержит процедуры и функции, обеспечивающие ввод и проверку пароля, вход пользователей в систему, автоматический выход из системы через определенный промежуток времени |
Модуль инициализации программы |
После успешного входа в систему, запускает программу, используя настройки прав доступа для учетной записи пользователя |
Модуль взаимодействия с базой данных |
Содержит процедуры и функции, используемые для установления соединения с базой данных ИС, а также управляющие операциями чтения, записи и редактирования данных |
Модуль справочной системы |
Содержит процедуры и функции, необходимые для отображения справочной информации |
Модуль главного меню |
Содержит главное меню, из которого осуществляется вызов остальных экранных форм |
Модуль «Отчеты» |
Содержит процедуры и функции для ввода параметров запроса, просмотра и печати отчетов |
Модуль «Справочники» |
Содержит процедуры функции, позволяющие просматривать содержимое справочников системы, и редактировать их (если позволяют права доступа) |
Модуль «Пользователи» |
Содержит процедуры функции, позволяющие управлять списками пользователей (если позволяют права доступа) |
Модуль «Регистрация» |
Содержит процедуры и функции, позволяющие регистрировать документы |
2.8. Контрольный пример реализации проекта и его описание
При открытии программы появляется окно вида (рис.2.5).
Рис.2.5. Главное окно программы
Рассмотрим справочники, представленные в системе (рис.2.6-2.9).
Рис.2.6. Справочник «Отделы»
Рис.2.7. Справочник «Должности»
Рис.2.8. Справочник «Виды отпуска»
Рис.2.9. Реквизиты
Во всех приведенных формах справочников есть кнопки для добавления, удаления, перемещения записи, а также кнопки «Печать» и «Выход».
Рассмотрим штатное расписание (рис.2.10 -2.13).
Рис.2.10. Штатное расписание
Рис.2.11. Штатное расписание
Рис.2.12. Штатное расписание
Рис.2.13. Штатное расписание
Как видно из рисунков 2.10-2.13, в штатном расписании представлены сотрудники по каждому отделу, их количество, ставка, оклад, а также количество вакансий.
При добавлении нового сотрудника в тот или иной отдел, нужно заполнить карточку сотрудника (рис.2.14).
Рис.2.14. Карточка сотрудника
Рассмотрим, например, как формируется приказ о направлении на командировку.
Для этого нужно выбрать сотрудника, выбрать Командировки работника (рис.2.15).
Рис.2.15. Карточка сотрудника
В появившемся окне нажать «+». Откроется форма для добавления командировки (рис.2.16).
Рис.2.16. Добавление командировки
После заполнения все полей нужно выбрать «Приказ», далее откроется заполненный бланк Приказа в формате Excel (рис.2.17).
Рис.2.17. Приказ о направлении на командировку
На основе данных скриншотов можно увидеть, что программа работоспособна и выполняются все необходимые функции по управлению персоналом.
ЗАКЛЮЧЕНИЕ
В данном проекте рассмотрены проблемы автоматизации управления персоналом.
В работе разработано информационное обеспечение системы: информационная модель, система классификации и кодирования, состав справочников, исходных и результатных документов. Приведены экраны ввода первичной и условно-постоянной информации, формы результатных документов.
Разработано программное обеспечение: описана его архитектура, структура меню, структура базы данных.
Разработанная система полностью удовлетворяет потребностям ООО «Энергострой».
СПИСОК ЛИТЕРАТУРЫ
- ГОСТ 34.602-89 «Техническое задание на создание автоматизированной системы»
- Белов Е.Б, Лось В.П. и др. Основы информационной безопасности. - М.: Горячая линя - Телеком, 2010. – 544 с.
- Вигерс К. Разработка требований к программному обеспечению, пер, с англ. - Москва.: «Русская Редакция», 2010. – 576 с.
- Гвоздева Т.В. Проектирование информационных систем. – Ростов-на-Дону: Феникс, 2009. – 512 с.
- Грекул В.И. Проектирование информационных систем. – Москва.: Интуит, 2008. – 304 с.
- Диго С.М. Базы данных: проектирование и использование: Учебник. – Москва.: Финансы и статистика, 2007. – 592 с.
- Додонова И.В., Кабанова О.В. Автоматизированная обработка банковской информации. – Москва.: КноРус, 2008. – 176 с.
- Елиферов В.Г., Репин В.В. Бизнес-процессы. Регламентация и управление. – Москва.: Инфра-М, 2009. – 320 с.
- Емельянова Н.З. Проектирование информационных систем. – Москва.: Форум, 2009. – 432 с.
- Керри Н., Майкл Р. Access 2003 - Библия пользователя, Москва.:Диалектика, 2009 - 391 с.
- Козлов А.С. Проектирование и исследование бизнес-процессов. – Москва.: Флинта, 2007. – 272 с.
- Меняев М.Ф, Информационные технологии управления: Книга 3: Системы управления организацией, Москва.: Омега-Л, 2008. - 464 с.
- Мещеряков С.В., Иванов В.М. Эффективные технологии создания информационных систем. – Москва.: Политехника, 2009. – 309 с.
- Мишенин А.И. Теория экономических информационных систем. – Москва.: Финансы и статистика, 2010. – 240 с.
- Овчинников, В.Г. Методология проектирования автоматизированных информационных систем. Основы системного подхода. – Москва.: Компания Спутник+, 2009. – 286 с.
- Орлик С., Булуй Ю, Введение в программную инженерию и управление жизненным циклом ПО Программная инженерия. Программные требования
- Пестриков, В. М. Delphi на примерах / В. М. Пестриков, А. Н. Маслобоев. — СПб. : БХВ-Петербург, 2008. — 496 с.
- Петров В. Н. Информационные системы, СПб.: Питер, 2002. - 688 стр;
- Реляционные базы данных: практические приемы оптимальных решений. – СПб.: БХВ-Петербург, 2010. – 400стр.
- Репин В.В. Бизнес-процессы компании. Построение, анализ, регламентация. – Москва.: Стандарты и качество, 2009. – 240 с.
- Рудаков А.В. Технология разработки программных продуктов. - Москва.: Академия, 2008. – 208 с.
- Титоренко Г.А. Автоматизированные информационные технологии в экономике: Учебник. – Москва.: ЮНИТИ, 2009. – 399с.
- Шандров Б.В., Чудаков А.Д. Технические средства автоматизации. – Москва.: Академия, 2007. – 368 с.
Приложение
Листинг программы
programPersonnel;
uses
Forms,
uMain in 'uMain.pas' {fmMain},
uDM in 'uDM.pas' {DM: TDataModule},
uDepartments in 'uDepartments.pas' {fmDepartments},
uRep in 'uRep.pas',
uPosts in 'uPosts.pas' {fmPosts},
uVacationTypes in 'uVacationTypes.pas' {fmVacationTypes},
uRequisite in 'uRequisite.pas' {fmRequisite},
uStaff in 'uStaff.pas' {fmStaff},
uEmpCard in 'uEmpCard.pas' {fmEmpCard},
uMission in 'uMission.pas' {fmMission},
uVacation in 'uVacation.pas' {fmVacation},
uVacancyList in 'uVacancyList.pas' {fmVacancyList};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TfmMain, fmMain);
Application.CreateForm(TDM, DM);
Application.CreateForm(TfmDepartments, fmDepartments);
Application.CreateForm(TfmPosts, fmPosts);
Application.CreateForm(TfmVacationTypes, fmVacationTypes);
Application.CreateForm(TfmRequisite, fmRequisite);
Application.CreateForm(TfmStaff, fmStaff);
Application.CreateForm(TfmEmpCard, fmEmpCard);
Application.CreateForm(TfmMission, fmMission);
Application.CreateForm(TfmVacation, fmVacation);
Application.CreateForm(TfmVacancyList, fmVacancyList);
Application.Run;
end.
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActnList, StdActns, ActnMan, StdCtrls, Buttons, ActnCtrls,
Grids, DBGrids, DBCtrls, ExtCtrls, ComCtrls, ToolWin, ActnMenus, ImgList;
type
TfmMain = class(TForm)
ActionManager1: TActionManager;
acSpravDep: TAction;
acSpravPosts: TAction;
acSpravVacationTypes: TAction;
acSpravRequisite: TAction;
Splitter1: TSplitter;
TreeView1: TTreeView;
Panel1: TPanel;
bbtExit: TBitBtn;
DBNavigator1: TDBNavigator;
DBGrid1: TDBGrid;
ActionToolBar1: TActionToolBar;
ImageList1: TImageList;
acEmpStuff: TAction;
acEmpAdd: TAction;
acEmpEdit: TAction;
acDocReceive: TAction;
acDocRelease: TAction;
acDocEmpCard: TAction;
acEmpVacation: TAction;
acDocContract: TAction;
acEmpMissions: TAction;
acDocInsurance: TAction;
acDocPFR: TAction;
chbDismiss: TCheckBox;
acDocEmpList: TAction;
acEmpVacancyList: TAction;
ActionMainMenuBar1: TActionMainMenuBar;
acFileExit: TFileExit;
procedure acSpravDepExecute(Sender: TObject);
procedure acSpravPostsExecute(Sender: TObject);
procedure acSpravVacationTypesExecute(Sender: TObject);
procedure acSpravRequisiteExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure acEmpStuffExecute(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure acEmpAddExecute(Sender: TObject);
procedure acEmpEditExecute(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
procedure acDocReceiveExecute(Sender: TObject);
procedure acDocReleaseExecute(Sender: TObject);
procedure acDocEmpCardExecute(Sender: TObject);
procedure acEmpVacationExecute(Sender: TObject);
procedure acDocContractExecute(Sender: TObject);
procedure acEmpMissionsExecute(Sender: TObject);
procedure acDocInsuranceExecute(Sender: TObject);
procedure acDocPFRExecute(Sender: TObject);
procedure chbDismissClick(Sender: TObject);
procedure acDocEmpListExecute(Sender: TObject);
procedure acEmpVacancyListExecute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmMain: TfmMain;
implementation
uses uRep, uDepartments, uPosts, uVacationTypes, uRequisite, uDM, DB,
uStaff, uEmpCard, uVacation, uMission, uVacancyList;
{$R *.dfm}
procedure TfmMain.acSpravDepExecute(Sender: TObject);
begin
fmDepartments.ShowModal;
FormShow(Self);
end;
procedure TfmMain.acSpravPostsExecute(Sender: TObject);
begin
fmPosts.Show;
end;
procedure TfmMain.acSpravVacationTypesExecute(Sender: TObject);
begin
fmVacationTypes.Show;
end;
procedure TfmMain.acSpravRequisiteExecute(Sender: TObject);
begin
fmRequisite.Show;
end;
procedure TfmMain.FormShow(Sender: TObject);
var
CategTreeNode: TTreeNode;
begin
TreeView1.Items.Clear;
DM.dstDepartments.Open;
DM.dstDepartments.Sort := 'Отдел';
DM.dstDepartments.First;
while not DM.dstDepartments.Eof do
begin
//Добавлениевершины - подразделения:
CategTreeNode := TreeView1.Items.Add(nil, DM.dstDepartments.FieldByName('Отдел').AsString);
//Data указывает на ID подразделения:
CategTreeNode.Data := Pointer(DM.dstDepartments.FieldByName('ID').AsInteger);
CategTreeNode.ImageIndex := 1;
DM.dstDepartments.Next;
end;
DM.dstDepartments.Close;
DM.dstEmployee.Open;
end;
procedure TfmMain.acEmpStuffExecute(Sender: TObject);
begin
fmStaff.ShowModal;
end;
//Отображение списка сотрудников в выбранном отделе:
procedure TfmMain.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
DM.dstEmployeeByDep.Close;
DM.dstEmployeeByDep.Parameters.ParamByName('pDismiss').DataType := ftInteger;
DM.dstEmployeeByDep.Parameters.ParamByName('pDepID').Value := Integer(Node.Data);
DM.dstEmployeeByDep.Parameters.ParamByName('pDismiss').DataType := ftBoolean;
DM.dstEmployeeByDep.Parameters.ParamByName('pDismiss').Value := chbDismiss.Checked;
DM.dstEmployeeByDep.Open;
//Часть функций меню доступны только если выбран работник:
acEmpEdit.Enabled := DM.dstEmployeeByDep.RecordCount > 0;
acEmpVacation.Enabled := DM.dstEmployeeByDep.RecordCount > 0;
acEmpMissions.Enabled := DM.dstEmployeeByDep.RecordCount > 0;
acDocEmpCard.Enabled := DM.dstEmployeeByDep.RecordCount > 0;
acDocRelease.Enabled := DM.dstEmployeeByDep.RecordCount > 0;
acDocReceive.Enabled := DM.dstEmployeeByDep.RecordCount > 0;
acDocContract.Enabled := DM.dstEmployeeByDep.RecordCount > 0;
acDocInsurance.Enabled := DM.dstEmployeeByDep.RecordCount > 0;
end;
procedure TfmMain.acEmpAddExecute(Sender: TObject);
begin
DM.dstEmployee.Insert;
fmEmpCard.ShowModal;
TreeView1Change(Self, TreeView1.Selected);
end;
procedure TfmMain.acEmpEditExecute(Sender: TObject);
begin
fmEmpCard.ShowModal;
TreeView1Change(Self, TreeView1.Selected);
end;
procedure TfmMain.DBGrid1DblClick(Sender: TObject);
begin
acEmpEditExecute(Self);
end;
procedure TfmMain.acDocReceiveExecute(Sender: TObject);
begin
Rep_Receive;
end;
procedure TfmMain.acDocReleaseExecute(Sender: TObject);
begin
Rep_Release;
end;
procedure TfmMain.acDocEmpCardExecute(Sender: TObject);
begin
Rep_Card;
end;
//Список отпусков работника:
procedure TfmMain.acEmpVacationExecute(Sender: TObject);
begin
fmVacation.Caption := 'Отпуска ' + DM.dstEmployee.FieldByName('Фамилия').AsString + ' ' +
DM.dstEmployee.FieldByName('Имя').AsString + ' ' + DM.dstEmployee.FieldByName('Отчество').AsString;
fmVacation.Show;
end;
procedure TfmMain.acDocContractExecute(Sender: TObject);
begin
Rep_Contract;
end;
//Список командировок работника:
procedure TfmMain.acEmpMissionsExecute(Sender: TObject);
begin
fmMission.Caption := 'Командировки ' + DM.dstEmployee.FieldByName('Фамилия').AsString + ' ' +
DM.dstEmployee.FieldByName('Имя').AsString + ' ' + DM.dstEmployee.FieldByName('Отчество').AsString;
fmMission.Show;
end;
procedure TfmMain.acDocInsuranceExecute(Sender: TObject);
begin
Rep_Insurance;
end;
procedure TfmMain.acDocPFRExecute(Sender: TObject);
begin
Rep_DocumentsPFR;
end;
procedure TfmMain.chbDismissClick(Sender: TObject);
begin
TreeView1Change(Self, TreeView1.Selected);
end;
procedure TfmMain.acDocEmpListExecute(Sender: TObject);
begin
Rep_EmpList;
TreeView1Change(Self, TreeView1.Selected);
end;
procedure TfmMain.acEmpVacancyListExecute(Sender: TObject);
begin
fmVacancyList.Show;
end;
end.
unit uDepartments;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmDepartments = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
bbtPrint: TBitBtn;
BitBtn1: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure bbtPrintClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmDepartments: TfmDepartments;
implementation
uses uDM, uRep;
{$R *.dfm}
procedure TfmDepartments.FormShow(Sender: TObject);
begin
DM.dstDepartments.Open;
DM.dstDepartments.Sort := 'Отдел';
end;
procedure TfmDepartments.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstDepartments.Close;
end;
procedure TfmDepartments.bbtPrintClick(Sender: TObject);
begin
Rep_Universal(DBGrid1, 1, 'Отделы');
end;
end.
unit uDM;
interface
uses
SysUtils, Classes, DB, ADODB;
type
TDM = class(TDataModule)
ADOConnection1: TADOConnection;
dstDepartments: TADODataSet;
dsDepartments: TDataSource;
dstPosts: TADODataSet;
dsPosts: TDataSource;
dstVacationTypes: TADODataSet;
dsVacationTypes: TDataSource;
dstFamilyStatus: TADODataSet;
dsFamilyStatus: TDataSource;
dstEducation: TADODataSet;
dsEducation: TDataSource;
dstDocTypes: TADODataSet;
dsDocTypes: TDataSource;
dstJobTypes: TADODataSet;
dsJobTypes: TDataSource;
dstRequisite: TADODataSet;
dsRequisite: TDataSource;
dstRequisiteDSDesigner: TWideStringField;
dstRequisiteDSDesigner2: TWideStringField;
dstRequisiteDSDesigner3: TWideStringField;
dstRequisiteDSDesigner4: TWideStringField;
dstRequisiteDSDesigner5: TWideStringField;
dstRequisiteDSDesigner6: TWideStringField;
dstRequisiteDSDesigner7: TWideStringField;
dstRequisiteDSDesigner8: TWideStringField;
dstRequisiteDSDesigner9: TWideStringField;
dstRequisiteDSDesigner10: TWideStringField;
dstStaff: TADODataSet;
dsStaff: TDataSource;
dstStaffID: TAutoIncField;
dstStaffID2: TIntegerField;
dstStaffID3: TIntegerField;
dstStaffDSDesigner: TWordField;
dstStaffDSDesigner2: TFloatField;
dstStaffDSDesigner3: TBCDField;
dstStaffDSDesigner4: TBCDField;
dstStaffField: TStringField;
dstStaffField2: TStringField;
dstEmployee: TADODataSet;
dsEmployee: TDataSource;
dstEmployeeN: TAutoIncField;
dstEmployeeDSDesigner: TWideStringField;
dstEmployeeDSDesigner2: TWideStringField;
dstEmployeeDSDesigner3: TWideStringField;
dstEmployeeDSDesigner4: TBooleanField;
dstEmployeeDSDesigner5: TDateTimeField;
dstEmployeeDSDesigner6: TWideStringField;
dstEmployeeDSDesigner7: TWideStringField;
dstEmployeeDSDesigner8: TWideStringField;
dstEmployeeDSDesigner9: TWideStringField;
dstEmployeeID: TIntegerField;
dstEmployeeID2: TIntegerField;
dstEmployeeDSDesigner1ID: TIntegerField;
dstEmployeeDSDesigner2ID: TIntegerField;
dstEmployeeID3: TIntegerField;
dstEmployeeDSDesigner10: TWideStringField;
dstEmployeeDSDesigner11: TWideStringField;
dstEmployeeDSDesigner12: TDateTimeField;
dstEmployeeDSDesigner13: TWideStringField;
dstEmployeeDSDesigner14: TWideStringField;
dstEmployeeDSDesigner15: TWideStringField;
dstEmployeeDSDesigner16: TWideStringField;
dstEmployeeDSDesigner17: TWideStringField;
dstEmployeeDSDesigner18: TWideStringField;
dstEmployeeDSDesigner19: TWideStringField;
dstEmployeeDSDesigner20: TWideStringField;
dstEmployeeDSDesigner21: TWideStringField;
dstEmployeeDSDesigner22: TBlobField;
dstEmployeeIntegerField: TStringField;
dstEmployeeIntegerField2: TStringField;
dstEmployeeIntegerField1: TStringField;
dstEmployeeIntegerField22: TStringField;
dstEmployeeIntegerField3: TStringField;
dstFamily: TADODataSet;
dsFamily: TDataSource;
dstFamilyID: TIntegerField;
dstFamilyDSDesigner: TWideStringField;
dstFamilyDSDesigner2: TWideStringField;
dstFamilyDSDesigner3: TDateTimeField;
dstFamilyDSDesigner4: TWideStringField;
dstFamilyDSDesigner5: TWideStringField;
dstEmpPosts: TADODataSet;
dsEmpPosts: TDataSource;
dstEmpPostsID2: TIntegerField;
dstEmpPostsID3: TIntegerField;
dstEmpPostsDSDesigner: TFloatField;
dstEmpPostsDSDesigner2: TBCDField;
dstEmpPostsDSDesigner3: TBCDField;
dstEmpPostsDSDesigner4: TDateTimeField;
dstEmpPostsDSDesigner5: TDateTimeField;
dstEmpPostsID4: TIntegerField;
dstEmpPostsN: TWideStringField;
dstEmpPostsDSDesigner6: TDateTimeField;
dstEmpPostsDSDesigner7: TWideStringField;
dstEmpPostsDSDesigner8: TBooleanField;
dstEmpPostsID5: TIntegerField;
dstEmpPostsID6: TIntegerField;
dstEmpPostsStringField: TStringField;
dstEmpPostsField: TStringField;
dstEmpPostsIntegerField: TStringField;
dstEmployeeByDep: TADODataSet;
AutoIncField1: TAutoIncField;
IntegerField1: TIntegerField;
IntegerField2: TIntegerField;
WideStringField18: TWideStringField;
StringField1: TStringField;
StringField2: TStringField;
dsEmployeeByDep: TDataSource;
dstVacancy: TADODataSet;
dstStaffField3: TIntegerField;
dstVacation: TADODataSet;
dsVacation: TDataSource;
dstVacationID: TIntegerField;
dstVacationDSDesigner: TDateTimeField;
dstVacationDSDesigner2: TDateTimeField;
dstVacationDSDesigner3: TWordField;
dstVacationDSDesigner4: TDateTimeField;
dstVacationDSDesigner5: TDateTimeField;
dstVacationID2: TIntegerField;
dstVacationDSDesigner6: TWideStringField;
dstVacationStringField: TStringField;
dstMission: TADODataSet;
dsMission: TDataSource;
dstMissionID: TIntegerField;
dstMissionDSDesigner: TDateTimeField;
dstMissionDSDesigner2: TWideStringField;
dstMissionDSDesigner3: TDateTimeField;
dstMissionDSDesigner4: TWideStringField;
dstMissionDSDesigner5: TWideStringField;
dstEmpPostsField2: TCurrencyField;
dstEmployeeByDepDSDesigner: TWideStringField;
dstEmployeeByDepDSDesigner2: TWideStringField;
dstVacancyList: TADODataSet;
dsVacancyList: TDataSource;
dstVacancyListDSDesigner: TWideStringField;
dstVacancyListDSDesigner2: TWideStringField;
dstVacancyListDSDesigner3: TWordField;
dstVacancyListDSDesigner4: TFloatField;
dstVacancyListDSDesigner5: TBCDField;
dstVacancyListDSDesigner6: TBCDField;
dstVacancyListDSDesigner7: TIntegerField;
dstVacancyListDSDesigner8: TIntegerField;
procedure DataModuleDestroy(Sender: TObject);
procedure dstEmployeeByDepAfterScroll(DataSet: TDataSet);
procedure dstStaffCalcFields(DataSet: TDataSet);
procedure dstEmpPostsCalcFields(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DM: TDM;
implementation
{$R *.dfm}
procedure TDM.DataModuleDestroy(Sender: TObject);
begin
ADOConnection1.Close;
end;
//Синхронизация наборов данных для выбранного на главной форме работника:
procedure TDM.dstEmployeeByDepAfterScroll(DataSet: TDataSet);
begin
dstEmployee.Locate('ТабN', dstEmployeeByDep.FieldByName('ТабN').AsInteger, []);
end;
//Расчет кол-ва вакансий для текущей позиции в штатном расписании:
procedure TDM.dstStaffCalcFields(DataSet: TDataSet);
var
Num: Integer;
begin
dstVacancy.Parameters.ParamByName('pStaffID').Value := DataSet.FieldByName('ID').Value;
dstVacancy.Open;
if dstVacancy.FieldByName('Колво').IsNull then
Num := 0
else
Num := dstVacancy.FieldByName('Колво').Value;
DataSet.FieldByName('Вакансий').Value := DataSet.FieldByName('ШтатныхЕд').Value - Num;
dstVacancy.Close;
end;
//Расчет зарплаты работника:
procedure TDM.dstEmpPostsCalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('Зарплата').AsCurrency := DataSet.FieldByName('Оклад').AsCurrency *
DataSet.FieldByName('Ставка').AsFloat + DataSet.FieldByName('Надбавка').AsCurrency;
end;
end.
unit uEmpCard;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtDlgs, StdCtrls, DBCtrls, Mask, ExtCtrls, Grids,
DBGrids, Buttons;
type
TfmEmpCard = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
DBImage1: TDBImage;
btFoto: TButton;
OpenPictureDialog1: TOpenPictureDialog;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
DBEdit4: TDBEdit;
Label5: TLabel;
DBEdit5: TDBEdit;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
GroupBox1: TGroupBox;
DBEdit9: TDBEdit;
Label9: TLabel;
DBEdit8: TDBEdit;
Label8: TLabel;
DBEdit7: TDBEdit;
Label7: TLabel;
DBEdit6: TDBEdit;
Label6: TLabel;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
DBLookupComboBox3: TDBLookupComboBox;
DBLookupComboBox4: TDBLookupComboBox;
Label15: TLabel;
Label16: TLabel;
DBEdit11: TDBEdit;
Label17: TLabel;
DBEdit12: TDBEdit;
Label18: TLabel;
DBEdit13: TDBEdit;
Label19: TLabel;
DBEdit14: TDBEdit;
Label20: TLabel;
DBEdit15: TDBEdit;
Label21: TLabel;
DBEdit16: TDBEdit;
Label22: TLabel;
DBEdit17: TDBEdit;
DBLookupComboBox5: TDBLookupComboBox;
GroupBox2: TGroupBox;
Label23: TLabel;
DBEdit18: TDBEdit;
Label24: TLabel;
DBEdit19: TDBEdit;
GroupBox3: TGroupBox;
Label28: TLabel;
Label29: TLabel;
DBEdit10: TDBEdit;
DBEdit23: TDBEdit;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
TabSheet4: TTabSheet;
Label25: TLabel;
Label26: TLabel;
DBEdit21: TDBEdit;
Label30: TLabel;
DBEdit24: TDBEdit;
Label31: TLabel;
DBEdit25: TDBEdit;
Label32: TLabel;
DBEdit26: TDBEdit;
Label33: TLabel;
DBEdit27: TDBEdit;
Label34: TLabel;
Label35: TLabel;
DBEdit29: TDBEdit;
Label36: TLabel;
DBEdit30: TDBEdit;
Label37: TLabel;
DBEdit31: TDBEdit;
DBCheckBox1: TDBCheckBox;
DBLookupComboBox6: TDBLookupComboBox;
DBLookupComboBox7: TDBLookupComboBox;
Label27: TLabel;
DBEdit22: TDBEdit;
DBNavigator2: TDBNavigator;
bbtOK: TBitBtn;
bbtCancel: TBitBtn;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
Label38: TLabel;
Label39: TLabel;
Label40: TLabel;
DBEdit20: TDBEdit;
Label41: TLabel;
BitBtn5: TBitBtn;
procedure btFotoClick(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure DBLookupComboBox6Click(Sender: TObject);
procedure bbtCancelClick(Sender: TObject);
procedure bbtOKClick(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmEmpCard: TfmEmpCard;
implementation
uses uDM, DB, uMain;
{$R *.dfm}
procedure TfmEmpCard.btFotoClick(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
procedure TfmEmpCard.RadioButton1Click(Sender: TObject);
begin
if not (DM.dstEmployee.State in [dsEdit, dsInsert]) then
DM.dstEmployee.Edit;
DM.dstEmployee.FieldByName('Пол').Value := RadioButton1.Checked
end;
procedure TfmEmpCard.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if DM.dstEmployee.State = dsInsert then
DM.dstEmployee.Cancel;
if DM.dstEmpPosts.RecordCount = 0 then
begin
Application.MessageBox('Не указана должность работника!',
'Ошибка сохранения', MB_OK + MB_ICONERROR);
Abort;
end
else
begin
DM.dstFamily.Close;
DM.dstEmpPosts.Close;
DM.dstStaff.Close;
DM.dstJobTypes.Close;
end;
end;
procedure TfmEmpCard.FormShow(Sender: TObject);
begin
DM.dstFamily.Open;
DM.dstEmpPosts.Open;
DM.dstStaff.Open;
DM.dstJobTypes.Open;
//Определениеполаработника:
if DM.dstEmployee.FieldByName('Пол').Value <> Null then
begin
RadioButton1.Checked := DM.dstEmployee.FieldByName('Пол').Value;
RadioButton2.Checked := not DM.dstEmployee.FieldByName('Пол').Value;
end
else
RadioButton1.Checked := False;
end;
//При выборе штатной должности автоматически подставляются данные по зарплате:
procedure TfmEmpCard.DBLookupComboBox6Click(Sender: TObject);
begin
DM.dstEmpPosts.FieldByName('Ставка').Value := DM.dstStaff.FieldByName('Ставка').Value;
DM.dstEmpPosts.FieldByName('Оклад').Value := DM.dstStaff.FieldByName('Оклад').Value;
DM.dstEmpPosts.FieldByName('Надбавка').Value := DM.dstStaff.FieldByName('Надбавка').Value;
end;
procedure TfmEmpCard.bbtCancelClick(Sender: TObject);
begin
if DM.dstEmployee.State = dsInsert then
DM.dstEmployee.Cancel
else
Application.MessageBox('Отменаневозможна! Данные были сохранены ранее.',
'Информация', MB_OK + MB_ICONINFORMATION);
Close;
end;
//Сохранениезаписи:
procedure TfmEmpCard.bbtOKClick(Sender: TObject);
begin
if DM.dstEmpPosts.RecordCount = 0 then
Application.MessageBox('Не указана должность работника!',
'Ошибка сохранения', MB_OK + MB_ICONERROR)
else
begin
try
if DM.dstEmployee.State in [dsEdit, dsInsert] then
DM.dstEmployee.Post;
except
Application.MessageBox('Незаданывсенеобходимыеданные!',
'Ошибкасохранения', MB_OK + MB_ICONERROR);
end;
Close;
end;
end;
//Перед вводом данных о семье и должности, запись о работнике сохраняется:
procedure TfmEmpCard.PageControl1Change(Sender: TObject);
begin
if PageControl1.ActivePageIndex in [2,3] then
try
if DM.dstEmployee.State in [dsEdit, dsInsert] then
DM.dstEmployee.Post;
except
Application.MessageBox('Незаданывсенеобходимыеданные!',
'Ошибкасохранения', MB_OK + MB_ICONERROR);
end;
end;
end.
unit uFamily;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmFamily = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
BitBtn1: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmFamily: TfmFamily;
implementation
uses uDM, uRep;
{$R *.dfm}
procedure TfmFamily.FormShow(Sender: TObject);
begin
DM.dstDepartments.Open;
end;
procedure TfmFamily.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstDepartments.Close;
end;
end.
unit uMission;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmMission = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
bbtPrint: TBitBtn;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure bbtPrintClick(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmMission: TfmMission;
implementation
uses uDM, uRep;
{$R *.dfm}
procedure TfmMission.FormShow(Sender: TObject);
begin
DM.dstMission.Open;
end;
procedure TfmMission.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstMission.Close;
end;
procedure TfmMission.bbtPrintClick(Sender: TObject);
begin
Rep_Universal(DBGrid1, 5, fmMission.Caption);
end;
procedure TfmMission.BitBtn2Click(Sender: TObject);
begin
Rep_Mission;
end;
end.
unit uPosts;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmPosts = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
bbtPrint: TBitBtn;
BitBtn1: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure bbtPrintClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmPosts: TfmPosts;
implementation
uses uDM, uRep, uEmpCard, uStaff;
{$R *.dfm}
procedure TfmPosts.FormShow(Sender: TObject);
begin
DM.dstPosts.Open;
DM.dstPosts.Sort := 'Должность';
end;
procedure TfmPosts.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not (fmStaff.Showing or fmEmpCard.Showing) then
DM.dstPosts.Close;
end;
procedure TfmPosts.bbtPrintClick(Sender: TObject);
begin
Rep_Universal(DBGrid1, 1, 'Справочникпрофессий');
end;
end.
unituRep;
//Модуль для формирования отчетов и документов
interface
uses
Windows, SysUtils, Classes, ComObj, DB, Controls, Forms, ADODB, Math, DBGrids;
procedure Rep_Universal(ADBGrid: TDBGrid; NumCol: Integer; ACaption: string);
procedure Rep_Receive;
procedure Rep_Release;
procedure Rep_Staff;
procedure Rep_Card;
procedure Rep_Vacation;
procedure Rep_Contract;
procedure Rep_Mission;
procedure Rep_Insurance;
procedure Rep_DocumentsPFR;
procedure Rep_EmpList;
function GetRightDate(ADate: TDateTime): string;
implementation
uses
uDM, DateUtils, Dialogs, uEmpCard;
//Функция возвращает дату формата "xx месяца xxxx г."
function GetRightDate(ADate: TDateTime): string;
var
Month: string;
begin
case MonthOf(ADate) of
1: Month := 'января';
2: Month := 'февраля';
3: Month := 'марта';
4: Month := 'апреля';
5: Month := 'мая';
6: Month := 'июня';
7: Month := 'июля';
8: Month := 'августа';
9: Month := 'сентября';
10: Month := 'октября';
11: Month := 'ноября';
12: Month := 'декабря';
end;
Result := FormatDateTime('dd ' + Month + ' yyyy г.', ADate);
end;
//Формирование отчета по выбранному набору данных (вывод заголовков видимых
//полейиихзначений):
procedure Rep_Universal(ADBGrid: TDBGrid; NumCol: Integer; ACaption: string);
var
Excel: Variant;
i, j, Width: Integer;
begin
Excel := CreateOleObject('Excel.Application');
Screen.Cursor := crHourGlass;
try
try
Excel.Application.EnableEvents := False;
Excel.Workbooks.Add;
for i:=0 to NumCol-1 do
begin
//Вывод в шапку таблицы названий полей из DBGrid'а:
Excel.Cells[5,i+1] := ADBGrid.Columns[i].Title.Caption;
//Форматированиезаголовка:
Width := Min(30, Trunc(ADBGrid.Columns[i].Width * 0.2));
Excel.Cells[5,i+1].ColumnWidth := Width;
Excel.Cells[5,i+1].Font.Bold := True;
end;
Excel.Cells[1,1] := Date;
Excel.Cells[3,1] := ACaption;
Excel.Cells[3,1].Font.Bold := True;
Excel.Cells[3,1].Font.Size := 12;
i := 5;
//Экспорт данных из таблиц БД:
with ADBGrid.DataSource.DataSet do
begin
DisableControls; //Отключаем сетку на время формирования отчета
First;
while not Eof do
begin
Inc(i);
//Выводятся NumCol первых полей таблицы, отображенных в DBGrid'е:
for j:=0 to NumCol-1 do
Excel.Cells[i,j+1] := FieldByName(ADBGrid.Columns[j].FieldName).AsString;
Next;
end;
end; //with
Excel.Application.EnableEvents := True;
Excel.Visible := True;
except
Excel.Quit;
end;
finally
ADBGrid.DataSource.DataSet.EnableControls;
Screen.Cursor := crDefault;
ADBGrid.Enabled := True;
end;
end;
//Формирование приказа о приеме на работу для текущей выбранной должности
//работника (если у него несколько должностей):
procedure Rep_Receive;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Приказоприеме.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Выводреквизитов:
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[41,5] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[41,10] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[13,10] := Date;
Excel.Cells[44,10] := GetRightDate(Date);
Excel.Cells[13,8] := dstEmployee.FieldByName('ТабN').AsString + '1';
Excel.Cells[17,9] := dstEmpPosts.FieldByName('ПринятС').AsString;
Excel.Cells[21,2] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString + ' ' +
dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[21,10] := FormatFloat('0000', dstEmployee.FieldByName('ТабN').AsInteger);
if dstDepartments.Locate('ID', dstEmpPosts.FieldByName('ОтделID').AsInteger, []) then
Excel.Cells[23,3] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[25,2] := dstEmpPosts.FieldByName('Должность').AsString;
Excel.Cells[28,2] := dstEmpPosts.FieldByName('ХарактерРаботы').AsString;
Excel.Cells[31,5] := dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsFloat;
Excel.Cells[32,5] := dstEmpPosts.FieldByName('Надбавка').AsString;
Excel.Cells[36,5] := dstEmpPosts.FieldByName('Основание').AsString;
Excel.Cells[37,5] := dstEmpPosts.FieldByName('ДоговорДата').AsString;
Excel.Cells[37,8] := dstEmpPosts.FieldByName('ДоговорN').AsString;
dstRequisite.Close;
dstDepartments.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование приказа об увольнении:
procedureRep_Release;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Приказобувольнении.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблиц БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Выводреквизитов:
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[40,5] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[40,11] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[15,10] := Date;
Excel.Cells[42,11] := GetRightDate(Date);
Excel.Cells[15,9] := dstEmployee.FieldByName('ТабN').AsString + '2';
Excel.Cells[18,6] := dstEmpPosts.FieldByName('ДоговорДата').AsString;
Excel.Cells[18,8] := dstEmpPosts.FieldByName('ДоговорN').AsString;
Excel.Cells[10,12] := dstEmpPosts.FieldByName('ДоговорN').AsString;
Excel.Cells[11,12] := dstEmpPosts.FieldByName('ДоговорДата').AsString;
Excel.Cells[19,6] := dstEmpPosts.FieldByName('ПринятПо').AsString;
Excel.Cells[21,2] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString + ' ' +
dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[21,12] := FormatFloat('0000', dstEmployee.FieldByName('ТабN').AsInteger);
if dstDepartments.Locate('ID', dstEmpPosts.FieldByName('ОтделID').AsInteger, []) then
Excel.Cells[23,2] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[25,2] := dstEmpPosts.FieldByName('Должность').AsString;
dstRequisite.Close;
dstDepartments.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование штатного расписания:
procedureRep_Staff;
var
Excel: Variant;
WorkbookName: string;
i, PosInc, Count: Integer;
Pay1, Pay2: Currency;
begin
//Шаблон хранится в папке Шаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\Штатное расписание.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
Excel.Cells[12,12] := 1;
Excel.Cells[12,13] := Date;
Excel.Cells[12,4] := Date;
Excel.Cells[12,7] := IncYear(Date);
//Экспорт данных из таблицы БД:
with DM do
begin
dstDepartments.Open;
//Формирование таблицы:
i := 0;
PosInc := 20;
Count := 0;
Pay1 := 0;
Pay2 := 0;
dstDepartments.First;
//Циклпоотделам:
while not dstDepartments.Eof do
begin
DM.dstStaff.Filter := 'ОтделID = ' + dstDepartments.FieldByName('ID').AsString;
//Цикл по должностям в отделе:
dstStaff.First;
while not dstStaff.Eof do
begin
//Добавление новой строки:
ifi<> 0 then
begin
Excel.Rows.Item[PosInc+i].Select;
Excel.Selection.Insert;
Excel.Rows.Item[PosInc].Select;
Excel.Selection.Copy;
Excel.Rows.Item[PosInc+i].Select;
Excel.ActiveSheet.Paste;
Excel.Application.CutCopyMode := False;
end;
Excel.Cells[i+PosInc,2] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[i+PosInc,5] := dstStaff.FieldByName('Должность').AsString;
Excel.Cells[i+PosInc,8] := dstStaff.FieldByName('ШтатныхЕд').AsInteger;
Excel.Cells[i+PosInc,9] :=
dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsFloat;
Excel.Cells[i+PosInc,12] := dstStaff.FieldByName('Надбавка').AsFloat;
Excel.Cells[i+PosInc,16] := dstStaff.FieldByName('Надбавка').AsFloat +
dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsFloat;
Inc(Count, dstStaff.FieldByName('ШтатныхЕд').AsInteger);
Pay1 := Pay1 + dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsCurrency;
Pay2 := Pay2 + dstStaff.FieldByName('Надбавка').AsInteger;
dstStaff.Next;
Inc(i);
end;
dstDepartments.Next;
end;
//Выводреквизитов:
dstRequisite.Open;
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[i+27,15] := dstRequisite.FieldByName('ГлБухФИО').AsString;
dstRequisite.Close;
dstDepartments.Close;
end; //with
Excel.Cells[i+20,8] := Count; //Кол-вочеловеквштате
Excel.Cells[i+20,9] := Pay1;
Excel.Cells[i+20,12] := Pay2;
Excel.Cells[i+20,16] := Pay1 + Pay2;
Excel.Cells[13,16] := Count; //Кол-во человек в штате
Excel.Visible := True;
except
Excel.Quit;
end;
end;
procedure Rep_Card;
var
Excel: Variant;
WorkbookName: string;
i: Integer;
PlaceOfBirth: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Личнаякарточка.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблиц БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Лист 1------------------------------------------------------------------
Excel.Worksheets[1].Activate;
//Выводреквизитов:
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[13,2] := Date;
Excel.Cells[13,3] := FormatFloat('0000', dstEmployee.FieldByName('ТабN').AsInteger);
Excel.Cells[13,4] := dstEmployee.FieldByName('ИНН').AsString;
Excel.Cells[13,5] := dstEmployee.FieldByName('ПенсСвид').AsString;
Excel.Cells[13,7] := dstEmpPosts.FieldByName('ХарактерРаботы').AsString;
Excel.Cells[13,9] := dstEmployee.FieldByName('Пол').AsString;
Excel.Cells[18,8] := dstEmpPosts.FieldByName('ДоговорN').AsString;
Excel.Cells[19,8] := dstEmpPosts.FieldByName('ДоговорДата').AsString;
Excel.Cells[20,3] := dstEmployee.FieldByName('Фамилия').AsString;
Excel.Cells[20,6] := dstEmployee.FieldByName('Имя').AsString;
Excel.Cells[20,9] := dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[21,4] := dstEmployee.FieldByName('ДатаРождения').AsString;
//Формирование строки места рождения:
PlaceOfBirth := '';
if (not dstEmployee.FieldByName('РождСтрана').IsNull) and
(dstEmployee.FieldByName('РождСтрана').AsString <> 'Россия') then
PlaceOfBirth := dstEmployee.FieldByName('РождСтрана').AsString;
if (not dstEmployee.FieldByName('РождОбласть').IsNull) and
(dstEmployee.FieldByName('РождОбласть').AsString <> '') then
begin
if PlaceOfBirth <> '' then
PlaceOfBirth := PlaceOfBirth + ', ';
PlaceOfBirth := PlaceOfBirth + dstEmployee.FieldByName('РождОбласть').AsString;
end;
if (not dstEmployee.FieldByName('РождРайон').IsNull) and
(dstEmployee.FieldByName('РождРайон').AsString <> '') then
begin
if PlaceOfBirth <> '' then
PlaceOfBirth := PlaceOfBirth + ', ';
PlaceOfBirth := PlaceOfBirth + dstEmployee.FieldByName('РождРайон').AsString;
end;
if (not dstEmployee.FieldByName('РождГород').IsNull) and
(dstEmployee.FieldByName('РождГород').AsString <> '') then
begin
if PlaceOfBirth <> '' then
PlaceOfBirth := PlaceOfBirth + ', ';
PlaceOfBirth := PlaceOfBirth + dstEmployee.FieldByName('РождГород').AsString;
end;
Excel.Cells[23,4] := PlaceOfBirth;
Excel.Cells[29,4] := dstEmployee.FieldByName('Образование').AsString;
//Лист 2------------------------------------------------------------------
Excel.Worksheets[2].Activate;
Excel.Cells[4,5] := Date;
Excel.Cells[10,5] := dstEmployee.FieldByName('СемПоложение').AsString;
//Списокродственников:
dstFamily.Open;
dstFamily.First;
i := 15;
while not dstFamily.Eof do
begin
Excel.Cells[i,2] := dstFamily.FieldByName('Родство').AsString;
Excel.Cells[i,5] := dstFamily.FieldByName('ФИО').AsString;
Excel.Cells[i,9] := YearOf(dstFamily.FieldByName('ДатаРождения').AsDateTime);
Inc(i);
dstFamily.Next;
end;
dstFamily.Close;
Excel.Cells[20,4] := dstEmployee.FieldByName('ДокументСерия').AsString
+ ' ' + dstEmployee.FieldByName('ДокументНомер').AsString;
Excel.Cells[20,9] := dstEmployee.FieldByName('ДокументДата').AsString;
Excel.Cells[21,3] := dstEmployee.FieldByName('ДокументВыдан').AsString;
Excel.Cells[33,4] := dstEmployee.FieldByName('Телефон').AsString;
//Лист 3------------------------------------------------------------------
Excel.Worksheets[3].Activate;
//Список занимаемых должностей:
dstEmpPosts.First;
i := 9;
while not dstEmpPosts.Eof do
begin
Excel.Cells[i,2] := dstEmpPosts.FieldByName('ПринятС').AsString;
Excel.Cells[i,3] := dstEmpPosts.FieldByName('Отдел').AsString;
Excel.Cells[i,5] := dstEmpPosts.FieldByName('Должность').AsString;
Excel.Cells[i,7] := dstEmpPosts.FieldByName('Надбавка').AsFloat +
dstEmpPosts.FieldByName('Ставка').AsFloat * dstEmpPosts.FieldByName('Оклад').AsFloat;
Excel.Cells[i,9] := dstEmpPosts.FieldByName('Основание').AsString;
Inc(i);
dstEmpPosts.Next;
end;
//Лист 4------------------------------------------------------------------
Excel.Worksheets[4].Activate;
//Списокотпусков:
dstVacation.Open;
dstVacation.First;
i := 21;
while not dstVacation.Eof do
begin
Excel.Cells[i,2] := dstVacation.FieldByName('ВидОтпуска').AsString;
Excel.Cells[i,4] := dstVacation.FieldByName('ПериодС').AsString;
Excel.Cells[i,6] := dstVacation.FieldByName('ПериодПо').AsString;
Excel.Cells[i,7] := dstVacation.FieldByName('Дней').AsString;
Excel.Cells[i,8] := dstVacation.FieldByName('ДатаС').AsString;
Excel.Cells[i,9] := dstVacation.FieldByName('ДатаПо').AsString;
Excel.Cells[i,10] := dstVacation.FieldByName('Основание').AsString;
Inc(i);
dstVacation.Next;
end;
dstVacation.Close;
dstRequisite.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование приказа о предоставлении отпуска:
procedure Rep_Vacation;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Приказоботпуске.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Выводреквизитов:
Excel.Cells[10,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[46,11] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[46,25] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[16,25] := Date;
Excel.Cells[50,22] := GetRightDate(Date);
Excel.Cells[16,21] := dstEmployee.FieldByName('ТабN').AsString + '3';
Excel.Cells[21,2] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString + ' ' +
dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[21,28] := FormatFloat('0000', dstEmployee.FieldByName('ТабN').AsInteger);
if dstDepartments.Locate('ID', dstEmpPosts.FieldByName('ОтделID').AsInteger, []) then
Excel.Cells[23,2] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[25,2] := dstEmpPosts.FieldByName('Должность').AsString;
Excel.Cells[29,8] := GetRightDate(dstVacation.FieldByName('ПериодС').AsDateTime) +
' по ' + GetRightDate(dstVacation.FieldByName('ПериодПо').AsDateTime);
if dstVacation.FieldByName('ВидОтпуска').AsString = 'Ежегодныйотпуск' then
begin
Excel.Cells[31,18] := dstVacation.FieldByName('Дней').AsString;
Excel.Cells[32,3] := GetRightDate(dstVacation.FieldByName('ДатаС').AsDateTime) +
' по ' + GetRightDate(dstVacation.FieldByName('ДатаПо').AsDateTime);
end
else
begin
Excel.Cells[35,2] := dstVacation.FieldByName('ВидОтпуска').AsString;
Excel.Cells[37,3] := dstVacation.FieldByName('Дней').AsString;
Excel.Cells[38,3] := GetRightDate(dstVacation.FieldByName('ДатаС').AsDateTime) +
' по ' + GetRightDate(dstVacation.FieldByName('ДатаПо').AsDateTime);
end;
Excel.Cells[40,9] := dstVacation.FieldByName('Дней').AsString;
Excel.Cells[41,3] := GetRightDate(dstVacation.FieldByName('ДатаС').AsDateTime) +
' по ' + GetRightDate(dstVacation.FieldByName('ДатаПо').AsDateTime);
dstRequisite.Close;
dstDepartments.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование трудового договора:
procedureRep_Contract;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Трудовойдоговор.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Лист 1------------------------------------------------------------------
Excel.Worksheets[1].Activate;
//Выводреквизитов:
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[15,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[17,3] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[17,8] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[13,8] := dstEmployee.FieldByName('ТабN').AsString + '4';
Excel.Cells[13,9] := Date;
Excel.Cells[20,2] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString + ' ' +
dstEmployee.FieldByName('Отчество').AsString;
if dstDepartments.Locate('ID', dstEmpPosts.FieldByName('ОтделID').AsInteger, []) then
Excel.Cells[31,3] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[26,5] := dstEmpPosts.FieldByName('Должность').AsString;
Excel.Cells[46,7] := dstEmpPosts.FieldByName('ПринятС').AsString;
Excel.Cells[47,7] := dstEmpPosts.FieldByName('ПринятПо').AsString;
//Лист 3------------------------------------------------------------------
Excel.Worksheets[3].Activate;
Excel.Cells[46,2] := 'Оклад';
Excel.Cells[46,9] := dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsCurrency;
Excel.Cells[47,2] := 'Надбавка';
Excel.Cells[47,9] := dstEmpPosts.FieldByName('Надбавка').AsString;
Excel.Cells[54,9] := dstEmpPosts.FieldByName('Надбавка').AsCurrency +
dstStaff.FieldByName('Ставка').AsFloat * dstStaff.FieldByName('Оклад').AsCurrency;
//Лист 4------------------------------------------------------------------
Excel.Worksheets[4].Activate;
//Выводреквизитов:
Excel.Cells[37,2] := dstRequisite.FieldByName('ЮрАдрес').AsString;
Excel.Cells[48,2] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[51,2] := dstRequisite.FieldByName('РукФИО').AsString;
//Выводреквизитов:
Excel.Cells[37,7] := dstEmployee.FieldByName('АдресРегистр').AsString;
Excel.Cells[41,7] := dstEmployee.FieldByName('Телефон').AsString;
Excel.Cells[43,8] := dstEmployee.FieldByName('ИНН').AsString;
Excel.Cells[44,8] := dstEmployee.FieldByName('ПенсСвид').AsString;
Excel.Cells[46,8] := dstEmployee.FieldByName('ДокументСерия').AsString +
' ' + dstEmployee.FieldByName('ДокументНомер').AsString;
Excel.Cells[48,9] := dstEmployee.FieldByName('ДокументДата').AsString;
Excel.Cells[51,7] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString[1] + '. ' +
dstEmployee.FieldByName('Отчество').AsString[1] + '. ';
dstRequisite.Close;
dstDepartments.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование приказа о командировке:
procedureRep_Mission;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Приказокомандировке.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
dstRequisite.Open;
dstEmpPosts.Open;
dstDepartments.Open;
//Выводреквизитов:
Excel.Cells[9,2] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[38,5] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[38,12] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[12,13] := Date;
Excel.Cells[41,12] := GetRightDate(Date);
Excel.Cells[12,12] := dstEmployee.FieldByName('ТабN').AsString + '5';
Excel.Cells[17,2] := dstEmployee.FieldByName('Фамилия').AsString + ' ' +
dstEmployee.FieldByName('Имя').AsString + ' ' +
dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[17,14] := FormatFloat('0000', dstEmployee.FieldByName('ТабN').AsInteger);
if dstDepartments.Locate('ID', dstEmpPosts.FieldByName('ОтделID').AsInteger, []) then
Excel.Cells[19,2] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[21,2] := dstEmpPosts.FieldByName('Должность').AsString;
Excel.Cells[23,2] := dstMission.FieldByName('МестоНазначения').AsString;
Excel.Cells[28,3] := DaysBetween(dstMission.FieldByName('ДатаС').AsDateTime,
dstMission.FieldByName('ДатаПо').AsDateTime);
Excel.Cells[29,3] := GetRightDate(dstMission.FieldByName('ДатаС').AsDateTime) +
' по ' + GetRightDate(dstMission.FieldByName('ДатаПо').AsDateTime);
Excel.Cells[30,3] := dstMission.FieldByName('Цель').AsString;
dstRequisite.Close;
dstDepartments.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование анкеты застрахованного лица:
procedureRep_Insurance;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'Анкетазастрахованноголица.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
dstEmpPosts.Open;
dstDepartments.Open;
Excel.Cells[9,7] := dstEmployee.FieldByName('Фамилия').AsString;
Excel.Cells[10,7] := dstEmployee.FieldByName('Имя').AsString;
Excel.Cells[11,7] := dstEmployee.FieldByName('Отчество').AsString;
Excel.Cells[12,7] := dstEmployee.FieldByName('Пол').AsString[1];
Excel.Cells[13,9] := GetRightDate(dstEmployee.FieldByName('ДатаРождения').AsDateTime);
Excel.Cells[15,12] := dstEmployee.FieldByName('РождГород').AsString;
Excel.Cells[16,12] := dstEmployee.FieldByName('РождРайон').AsString;
Excel.Cells[17,12] := dstEmployee.FieldByName('РождОбласть').AsString;
Excel.Cells[18,12] := dstEmployee.FieldByName('РождСтрана').AsString;
Excel.Cells[21,15] := dstEmployee.FieldByName('АдресРегистрИндекс').AsString;
Excel.Cells[21,21] := dstEmployee.FieldByName('АдресРегистр').AsString;
if dstEmployee.FieldByName('АдресРегистр').AsString <>
dstEmployee.FieldByName('АдресФакт').AsString then
begin
Excel.Cells[24,15] := dstEmployee.FieldByName('АдресФактИндекс').AsString;
Excel.Cells[24,21] := dstEmployee.FieldByName('АдресФакт').AsString;
end;
Excel.Cells[33,12] := dstEmployee.FieldByName('ВидДокумента').AsString;
Excel.Cells[35,12] := dstEmployee.FieldByName('ДокументСерия').AsString +
' ' + dstEmployee.FieldByName('ДокументНомер').AsString;
Excel.Cells[36,12] := dstEmployee.FieldByName('ДокументДата').AsString;
Excel.Cells[37,12] := dstEmployee.FieldByName('ДокументВыдан').AsString;
dstDepartments.Close;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
dstEmpPosts.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Формирование описи документов в ПФР:
procedure Rep_DocumentsPFR;
var
Excel: Variant;
WorkbookName: string;
begin
//ШаблонхранитсявпапкеШаблоны:
WorkbookName := GetCurrentDir + '\Шаблоны\' + 'ОписьдокументоввПФР.xlt';
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Open(WorkbookName);
//Экспорт данных из таблицы БД:
with DM do
begin
dstRequisite.Open;
//Выводреквизитов:
Excel.Cells[5,10] := dstRequisite.FieldByName('РегНомерПФР').AsString;
Excel.Cells[6,3] := dstRequisite.FieldByName('ИНН').AsString;
Excel.Cells[6,14] := dstRequisite.FieldByName('КПП').AsString;
Excel.Cells[7,12] := dstRequisite.FieldByName('НаименованиеОрг').AsString;
Excel.Cells[47,2] := dstRequisite.FieldByName('РукДолжн').AsString;
Excel.Cells[47,23] := dstRequisite.FieldByName('РукФИО').AsString;
Excel.Cells[49,2] := Date;
dstRequisite.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
//Список сотрудников по отделам:
procedureRep_EmpList;
var
Excel: Variant;
i: Integer;
begin
//Шаблон хранится в папке Шаблоны:
Excel := CreateOleObject('Excel.Application');
try
Excel.Workbooks.Add;
Excel.Cells[1,1] := Date;
Excel.Cells[3,1] := 'Список сотрудников по отделам';
Excel.Cells[3,1].Font.Bold := True;
Excel.Cells[3,1].Font.Size := 12;
//Экспорт данных из таблицы БД:
with DM do
begin
dstEmployeeByDep.DisableControls;
dstDepartments.Open;
//Формирование таблицы:
i := 6;
dstEmployeeByDep.Close;
dstEmployeeByDep.Parameters.ParamByName('pDismiss').DataType := ftBoolean;
dstEmployeeByDep.Parameters.ParamByName('pDismiss').Value := False;
dstDepartments.First;
//Циклпоотделам:
while not dstDepartments.Eof do
begin
dstEmployeeByDep.Close;
dstEmployeeByDep.Parameters.ParamByName('pDismiss').DataType := ftInteger;
dstEmployeeByDep.Parameters.ParamByName('pDepID').Value := dstDepartments.FieldByName('ID').AsInteger;
dstEmployeeByDep.Open;
Excel.Cells[i,1] := dstDepartments.FieldByName('Отдел').AsString;
Excel.Cells[i,1].Font.Bold := True;
Excel.Cells[i,1].Font.Size := 11;
Inc(i);
if dstEmployeeByDep.RecordCount > 0 then
begin
//Заголовкистолбцов:
Excel.Cells[i,1] := 'ФИО';
Excel.Cells[i,1].ColumnWidth := 40;
Excel.Cells[i,1].Font.Bold := True;
Excel.Cells[i,2] := 'Должность';
Excel.Cells[i,2].ColumnWidth := 40;
Excel.Cells[i,2].Font.Bold := True;
Inc(i);
end;
//Цикл по работникам в отделе:
dstEmployeeByDep.First;
while not dstEmployeeByDep.Eof do
begin
Excel.Cells[i,1] := dstEmployeeByDep.FieldByName('ФИО').AsString;
Excel.Cells[i,2] := dstEmployeeByDep.FieldByName('Должность').AsString;
dstEmployeeByDep.Next;
Inc(i);
end;
Inc(i);
dstDepartments.Next;
end;
dstDepartments.Close;
end; //with
Excel.Visible := True;
except
Excel.Quit;
end;
end;
end.
unit uRequisite;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, Buttons;
type
TfmRequisite = class(TForm)
Label1: TLabel;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
DBEdit4: TDBEdit;
Label5: TLabel;
DBEdit5: TDBEdit;
Label6: TLabel;
DBEdit6: TDBEdit;
Label7: TLabel;
DBEdit7: TDBEdit;
Label8: TLabel;
DBEdit8: TDBEdit;
Label9: TLabel;
DBEdit9: TDBEdit;
Label10: TLabel;
DBEdit10: TDBEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
DBMemo1: TDBMemo;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmRequisite: TfmRequisite;
implementation
uses uDM, DB;
{$R *.dfm}
procedure TfmRequisite.FormShow(Sender: TObject);
begin
DM.dstRequisite.Open;
end;
procedure TfmRequisite.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
DM.dstRequisite.Close;
end;
procedure TfmRequisite.BitBtn1Click(Sender: TObject);
begin
if DM.dstRequisite.State = dsEdit then
DM.dstRequisite.Post;
Close;
end;
procedure TfmRequisite.BitBtn2Click(Sender: TObject);
begin
DM.dstRequisite.Cancel;
Close;
end;
end.
unit uStaff;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons, ComCtrls;
type
TfmStaff = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
bbtPrint: TBitBtn;
BitBtn1: TBitBtn;
TreeView1: TTreeView;
Splitter1: TSplitter;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure bbtPrintClick(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmStaff: TfmStaff;
implementation
uses uDM, uRep, uMain, uEmpCard;
{$R *.dfm}
procedure TfmStaff.FormShow(Sender: TObject);
var
CategTreeNode: TTreeNode;
begin
TreeView1.Items.Clear;
DM.dstStaff.Open;
DM.dstStaff.Filtered := True;
DM.dstDepartments.Open;
DM.dstDepartments.Sort := 'Отдел';
DM.dstDepartments.First;
while not DM.dstDepartments.Eof do
begin
//Добавлениевершины - подразделения:
CategTreeNode := TreeView1.Items.Add(nil, DM.dstDepartments.FieldByName('Отдел').AsString);
//Data указывает на ID подразделения:
CategTreeNode.Data := Pointer(DM.dstDepartments.FieldByName('ID').AsInteger);
CategTreeNode.ImageIndex := 1;
DM.dstDepartments.Next;
end;
TreeView1.Items[0].Selected := True;
DM.dstPosts.Sort := 'Должность';
end;
procedure TfmStaff.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstStaff.Filtered := False;
//Набор данных закрываем только если нет других открытых форм, связанных с данным набором:
if not fmEmpCard.Showing then
DM.dstStaff.Close;
end;
procedure TfmStaff.bbtPrintClick(Sender: TObject);
begin
Rep_Staff;
end;
//Отображение списка штатных единиц в выбранном отделе:
procedure TfmStaff.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
DM.dstStaff.Filter := 'ОтделID = ' + IntToStr(Integer(Node.Data));
end;
//Колонка "Вакансий" выделяется цветом, если вакансии есть:
procedure TfmStaff.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.FieldName = 'Вакансий' then
if DM.dstStaff.FieldByName(Column.FieldName).AsInteger > 0 then
begin
DBGrid1.Canvas.Brush.Color := clMoneyGreen;
DBGrid1.Canvas.Font.Color := clRed;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end.
unit uVacancyList;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmVacancyList = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
bbtPrint: TBitBtn;
BitBtn1: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure bbtPrintClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmVacancyList: TfmVacancyList;
implementation
uses uDM, uRep;
{$R *.dfm}
procedure TfmVacancyList.FormShow(Sender: TObject);
begin
DM.dstVacancyList.Open;
DM.dstVacancyList.Filter := 'Вакансий> 0';
DM.dstVacancyList.Filtered := True;
end;
procedure TfmVacancyList.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstVacancyList.Close;
end;
procedure TfmVacancyList.bbtPrintClick(Sender: TObject);
begin
Rep_Universal(DBGrid1, 7, fmVacancyList.Caption);
end;
end.
unit uVacation;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmVacation = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
bbtPrint: TBitBtn;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure bbtPrintClick(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmVacation: TfmVacation;
implementation
uses uDM, uRep;
{$R *.dfm}
procedure TfmVacation.FormShow(Sender: TObject);
begin
DM.dstVacation.Open;
end;
procedure TfmVacation.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstVacation.Close;
end;
procedure TfmVacation.bbtPrintClick(Sender: TObject);
begin
Rep_Universal(DBGrid1, 6, fmVacation.Caption);
end;
procedure TfmVacation.BitBtn2Click(Sender: TObject);
begin
Rep_Vacation;
end;
end.
unit uVacationTypes;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons;
type
TfmVacationTypes = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
BitBtn1: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmVacationTypes: TfmVacationTypes;
implementation
uses uDM, uRep;
{$R *.dfm}
procedure TfmVacationTypes.FormShow(Sender: TObject);
begin
DM.dstVacationTypes.Open;
end;
procedure TfmVacationTypes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM.dstVacationTypes.Close;
end;
end.
- Современные языки программирования(Характеристика систем программирования )
- Управление рисками в проектной среде (Определение понятия проект и проектная среда)
- Проектирование реализации операций бизнес-процесса «Планирование закупок и размещение заказов поставщикам» .
- Анализ структуры торгового ассортимента (ООО «Лента»)
- Система управления персоналом в современной организации (на примере ресторана «Арнау»)
- «Коммерческая деятельность розничного торгового предприятия и ее совершенствование (на примере ТОО «Ата-Су Спецтехника»)
- Понятие ценных бумаг, их виды.
- Виндикационный, негаторный иски
- Кадровое обеспечение органов местного самоуправления: состояние и пути оптимизации
- "Индивидуальное предпринимательство"
- Особенности защиты чести, достоинства и деловой репутации по гражданскому законодательству Российской Федерации
- Аналитический обзор современного программного обеспечения персонального компьютера