это быстро и бесплатно
Оформите заказ сейчас и получите скидку 100 руб.!
ID (номер) заказа
3483745
Ознакомительный фрагмент работы:
Введение Расчет заработной платы – это сложный и постоянно изменяющийся процесс. При этом сложность его растет вместе с увеличением штата. Надбавки, премии и бонусы, безусловно, мотивируют сотрудников к трудовым подвигам. Но, с другой стороны, каждое новое начисление значительно усложняет расчет зарплаты.В данной курсовой работе будет разработана информационная система автоматизации расчета заработной платы сотрудников предприятия.Актуальность темы курсовой работы обусловлена необходимостью создания новой информационной системы для автоматизации расчета заработной платы сотрудников, так как в настоящее время для этой цели во многих организациях используется табличный редактор MS Excel. Эффективность деятельности бухгалтеров компании по расчету заработной платы сотрудников может быть увеличена за счет автоматизации. Также система позволит хранить копии документов на основе которых был произведен расчет заработной платы для будущей аудиторской проверки во избежание необходимости ручного поиска в архиве бумажных документов. Также информационная система позволит автоматически формировать платежные документы и отчеты за любой период времени.Целью курсовой работы является разработка информационной системы автоматизации расчета заработной платы сотрудников предприятия.Объектом исследования является деятельность бухгалтеров предприятия по расчету заработной платы.Предметом исследования является процесс разработки информационной системы автоматизации расчета заработной платы сотрудников предприятия.Задачи, которые необходимо решить для достижения поставленной цели:изучить предметную область;исследовать бизнес-процессы расчета заработной платы;выбрать среду разработки и систему управления базами данных для разрабатываемой автоматизированной системы;разработать логическую и физическую модели данных;создать базу данных и визуальный интерфейс информационной системы;предусмотреть защиту информации и разделение прав доступа в информационной системе.Курсовая работа состоит из введения, двух разделов, заключения и списка используемых источников.В первой главе проведено исследование предметной области. Рассмотрены бизнес и информационные процессы расчета заработной платы. Выбрана СУБД и среда разработки информационной системы. Приведены требования к разрабатываемой информационной системе.Во второй главе приведена структура базы данных. Приведена логическая и физическая модель базы данных. Описана структура информационной системы, описаны программные модули. Рассмотрено дерево функций и сценарий диалога. Приведено документационное описание информационной системы. Приведено руководство пользователя информационной системы.В заключении сделаны выводы о проделанной работе.1. Теоретическая частьОписание предметной областиПредметной областью настоящей курсовой работы является расчет заработной платы сотрудников.Размер заработной платы сотрудника зависит от нескольких параметров [20, 21]:ставка (оклад) – за календарный месяц или определенное количество нормо-часов;компенсационные и стимулирующие выплаты.Нормы рабочего времени могут составлять 20,24,25,30,36 часов в неделю или 720 часов в год [22].При повременной форме оплаты труда в качестве основного показателя учета результатов труда (критерия оценки работы) выступает отработанное рабочее время. При сдельной оплате - количество изготовленной продукции (оказанных услуг).При трудоустройстве сотрудник имеет право познакомиться с действующей системой оплаты труда и материального стимулирования, которые действуют в организации [22]. Нормативные документы, регламентирующие порядок расчета заработной платы [23]: положение о внутреннем трудовом распорядке;коллективный договор;положения о материальном стимулировании и оплате труда;положение о штатном расписании;трудовое соглашение;нормативные акты.Существуют сдельная и повременная система оплаты труда [23]:сдельная;повременная;При сдельной системе заработная плата сотрудника зависит от количества отработанных часов или выполненных работ т.д. [23].При повременной системе оплаты начисление заработной платы производится по табелю учета рабочего времени и указанному окладу в трудовом договоре [23].Также при расчете заработной платы учитываются дополнительные надбавки за стаж, достижения в работе, выработка и т.д. [23].При повременной оплате труда используется тарифная часовая ставка или месячный размер оклада [23].При расчете заработной платы при фиксированной дневной тарифной ставки, используется формула [24]:ЗП мес. = Кд х Сд, (1)где ЗП мес. – заработная плата за месяц;Кд –количество фактически отработанных дней (по табелю);Сд – размер дневной оплаты труда.При расчете заработной платы по окладу используется формула [24]: ЗП мес. = О / Нд х Фд, (2)где ЗП мес. – величина заработная плата за месяц;О – оклад, руб.;Нд – норма дней по производственному календарю;Фд – количество отработанных дней.При начислении заработной платы учитывается налог величиной 13%.Расчет среднемесячной зарплаты регламентирован Постановлением № 922, утвержденным 24.12.2017 г. [24].Среднемесячная оплаты труда рассчитывается по формуле [24]:ЗП ср = ЗП год / 12, (3)где ЗП ср – среднемесячная заработная плата;ЗП год – сумма всех начислений без социальных компенсаций и выплат;12 – число месяцев.При расчете заработной платы используются следующие первичные документы, представленные на рисунке 1 [24].Рисунок 1. Первичные документы для расчета заработной платыОсновные нормативные документы, которые используются при расчете заработной платы [24]:Трудовой Кодекс РФ.Налоговый Кодекс РФ.Федеральный закон № 82 -ФЗ от 19.06.2000 года «О минимальном размере оплаты труда».Формирование фонда заработной платы, положенного к распределению за отчетный месяц, производится экономической службой предприятия. Начисление фонда заработной платы за отработанное время осуществляется экономической службой на основании [22]:табелей учета рабочего времени;приказов (распоряжений) об установлении, отмене, изменении размера доплат и надбавок, поощрениях и санкциях;протоколов об установлении КТУ, предоставленных руководителями структурных подразделений.Основными источниками информации, которые используются для расчета заработной платы являются [20]:Плановые показатели для оценки эффективности рабочего времени.Фактические показатели для оценки эффективности рабочего времени, полученные из табелей учета рабочего времени.Должностные оклады сотрудников и условия трудового договора сотрудников.При осуществлении расчета баланса рабочего времени в необходимо использовать не только данные текущего периода, но и аналогичные данные за предшествующие периоды.Для учета рабочего времени сотрудников компании используется табель учета рабочего времени - это документ, который содержит информацию о фактически отработанном времени и количестве неявок за месяц по каждому сотруднику организации. На его основании производится расчет и начисление заработной платы [20].Табельный учет производится методом регистрации отклонений (неявок, опозданий и т.д.). В табеле отражаются: табельный номер, фамилия, имя, отчество работников и сведения в рабочем времени за каждое число месяца (количество отработанных часов, выходные дни, неявки и др.). Данные учета применяются для анализа использования рабочего времени, начисления заработной платы, составления отчетности по труду.Для ведения учета рабочего времени применяют типовую форму Т-12 [25]. Табель учета рабочего времени ведется каждый рабочий день в течение месяца, в последний день месяца подводится итоговое количество отработанных часов и неявок каждым сотрудником [25].Составляется данный документ в одном экземпляре и передается в бухгалтерию для последующего расчета оплаты труда сотрудникам компании.В конце каждого календарного месяца табельщик передает заполненную форму Т-12 в бухгалтерию для начисления заработной платы [25].Характеристика существующих бизнес – процессовРассмотрим основные бизнес-процессы по расчету заработной платы с помощью методологии IDEF0 [2, 4].На рисунке 2 представлена контекстная диаграмма «как есть» (AS-IS).В качестве входной информации выделены:сведения о сотруднике;трудовой договор;сведения для расчет сдельной заработной платы;табель учета рабочего времени.Рисунок 2. Контекстная диаграмма AS-ISВ качестве управляющих потоков выделены:должностные инструкции сотрудников компании, которые участвуют в процессе расчета заработной платы;нормативные документы – распоряжения, приказы, законы и другие документы, которые содержат нормативную информацию, необходимую для расчета заработной платы;инструкции по расчету заработной платы – набор правил и алгоритмов для расчета заработной платы по различным системам оплаты.В качестве выходной информации выделены: расчет заработной платы;журнал учета выплат;платежные документы.На рисунке 3 представлена декомпозиция контекстной диаграммы AS-IS.Рисунок 3.Декомпозиция контекстной диаграммы AS-ISДля расчета заработной платы необходимы следующие сведения:сведения о сотруднике – табельный номер сотрудника, ФИО;трудовой договор для определения оклада, других условий оплаты труда, базового оклада, системы расчета заработной платы (повременная, сдельная и т.д.);сведения для расчета заработной платы - акты выполненных работ, другие документы, подтверждающий факт выполнения работ или оказания услуг;табель рабочего времени, отражающий сведения о количестве отработанного времени в календарном месяце.После выполнения расчета заработной платы по формулам, указанным в п.1.1 настоящей работы, оформляются соответствующие платежные документы, по которым производится выплата заработной платы.На рисунке 4 представлена декомпозиция блока «Расчет заработной платы». Первоначально, определяется система оплаты труда, которая указывается в трудовом договоре. Далее в зависимости от системы оплаты труда учитывается либо отработанное время или объем оказанных услуг (выполненных работ). Результаты расчета вносятся в журнал учета выплат, на основе данных которого формируются платежные поручения для бухгалтерии и банка.Рисунок 4. Декомпозиция блока «Расчет заработной платы»В результате исследования текущей системы расчета заработной платы выявлены следующие основные проблемы:необходимость ручного расчета заработной платы сотрудников; разрозненное хранение документов, которые использованы при расчете заработной платы для последующей аудиторской проверки;отсутствие структурированного хранилища данных о сотрудниках и выплаченной заработной плате;невозможность автоматического формирования платежных документов;невозможность формирования отчетности о выплаченной заработной плате за выбранный период времени;отсутствие возможности оперативного поиска информации;отсутствие защиты от несанкционированного доступа к данным;отсутствие защиты от потери данных.Характеристика документооборота, возникающего при решении задачиНа рисунке 5 представлена схема документооборота, возникающего при решении задачи расчета заработной платы.Источниками документов являются:табельщики, ведущие учет рабочего времени;бухгалтер, рассчитывающий заработную плату;сотрудники отдела кадров, предоставляющие данные трудовых договоров, приказы о штрафах и премиях;сотрудники, предоставляющие данные, необходимые при расчете заработной платы.Основные документы: табель учета рабочего времени Т-12; трудовой договор; командировочное удостоверение; больничный лист; акты выполненных работ; платежная ведомость; приказы о штрафах и премиях; квитанция об оплате заработной платы.Рисунок 5. Схема документооборотаВыбор средств разработкиДля разработки базы данных для информационной системы автоматизации расчета заработной платы следует выбрать реляционную модель базы данных, основанную на табличном представлении данных.В настоящее время на рынке программного обеспечения присутствует большое количество реляционных СУБД. Наиболее популярные из них:MS SQL Server;MySQL;MS Access.Сравнительный анализ рассмотренных СУБД представлен в таблице 1.Таблица 1Сравнительная характеристика реляционных СУБДХарактеристикаMS SQL ServerMySQLMS AccessОфициальный сайтmssqlerver.commysql.commicrosoft.comПоследняя версия СУБД20165.7.20 (2017)2016Вид лицензии Платное ПОСвободное ПОПлатное ПО Развитость встроенного языка (в баллах от 1 до 10)1088Максимальный размер одной таблицы 4Гб64Тб 4ГБПоддержка нескольких платформДаДаНетНаличие опыта администрирования (в баллах от 1 до 10)853Поддержка нескольких процессоровДаДаДаВозможность написания хранимых процедур и триггеровДаДаНетЯзык запросовTransact-SQLTransact-SQLSQLСтоимость платной лицензии (по данным на момент написания работы)от 48 250 руб.0 руб.от 6 500 руб.В результате проведенного сравнительного анализа современных СУБД для разработки БД для информационной системы автоматизации расчета заработной платы была выбрана реляционная СУБД MS SQL Server. Основным критерием выбора данной СУБД послужила ее функциональность. Кроме того, во многих организациях уже установлена данная СУБД, следовательно, затраты на СУБД будут исключены.Разработка клиентской (интерфейсной) части приложения осуществляется в какой-либо инструментальной среде. Такая среда должна иметь в своем составе компоненты механизмов доступа к данным, в том числе ADO. Наиболее популярными средами программирования приложений, работающими с распределенными базами данных, являются современные инструментальные среды: Borland (Embarcadero) Delphi [19], Microsoft Visual Studio [9, 18].Проведем сравнительный анализ средств разработки в таблице 2. Таблица 2Сравнительная характеристика средств разработкиПараметрИнструментальная средаRAD StudioVisual Studio (С#)Фирма производитель.Embarcadero TechnologiesMicrosoftПоследняя версияRAD Studio 10Microsoft Visual Studio 2015ПоддерживаемыеОперационные системыWindows XP/Vista/8/LinuxWindows XP/Vista/8Встроенный языкObject Pascal, C++Visual C++,C#, Visual J#,Visual Basic .NETПоддержка ООП+Встроенный механизм автоматического создания объектной модели базы данныхПоддержка 32 и 64 битных платформ++Отладка «на лету»++Подсветка синтаксиса с интеллектуальным подбором-+Механизмы доступа к БДBDE,ADO, Express, dbExpressADO .NETНаличие визуальных и не визуальных компонент для работы с БД++Поддержка технологии Rapid Application Development++Средства поддержки транзакцийУправление транзакциями на уровне компонента DatabaseМеханизмуправлениятранзакциямиУтилиты для работы с БДDatabase Desktop, BDE Administrator, SQL BuilderИнтегрированная поддержка Microsoft SQL Server 2012 Сложность или простота работы с инструментальным средствомСреда позволяет быстро и удобно разрабатывать эффективные приложения.Среда ориентирована на быструю разработку качественных приложенийНа основе проведенного анализа средств разработки приложений в качестве средства для разработки интерфейса пользователя разрабатываемого приложения выбрана среда Microsoft Visual Studio, так как данная система является современным средством разработки приложений и обладает широкими возможностями разработки как средних, так и крупных систем. 2. Практическая часть2.1. Информационная модель и её описаниеВ результате исследования предметной области были выделены следующие сущности [8, 10]:сотрудник;отдел;должность;трудовой договор;система оплаты;выполненная работа (для расчет сдельной заработной платы);мотивационная выплата;вид штрафа/вычета;штраф/вычет;табель;пользователь.На рисунке 6 представлена ER-диаграмма «сущность-связь» [10].Рисунок 6. ER-диаграмма «сущность-связь»2.2. Характеристика нормативно-справочной, входной и оперативной информацииВ таблице 3 представлена структура входной оперативной информации, которая используется для решения поставленной задачи автоматизации расчета заработной платы.Таблица 3Оперативная информацияДокументРеквизитыИсточникСведения о сотрудникахТабельный номерТрудовой договорФИОАдресТелефонЭлектронная почтаДолжностьОтделДанные об условиях оплаты трудаСистема оплаты трудаОклад по выбранной системеДата начала действия договораДата окончания срока действия договораДанные о штрафах и вычетах СотрудникПриказ о взыскании штрафа/вычетаДатаСуммаВид штрафа/вычетаОснованиеДанные о выполненных работахСотрудникАкт выполненных работДатаСумма выполненных работ, количество часов или работ (в зависимости от системы оплаты)Данные о мотивационных выплатахСотрудникПриказ о мотивационных выплатахДатаСуммаОснованиеТабельный учета времениСотрудникТабель рабочего времениГодМесяцКоличество отработанных днейКоличество дней в отпуске (оплачиваемом и неоплачиваемом)Количество командировочных днейКоличество дней на больничномКоличество сверхурочных часовПостоянная информация - это информация, состав которой в процессе работы изменяется сравнительно редко [7]. В таблице 4 представлена характеристика постоянной информации, которая используется для решения поставленной задачи автоматизации расчета заработной платы.Таблица 4 Описание постоянной информацииНаименованиеРеквизитыНазначениеОтделКодХранение информации об отделах компанииНаименованиеДолжностьКодХранение информации о должностях сотрудников и базовых окладахНаименованиеОкладСистема оплатыКодХранение информации о системах оплаты труда сотрудниковНаименованиеВид штрафа/вычетаКодХранение информации о видах штрафов и вычетовНаименование2.3. Характеристика результатной информацииВыходными данными при работе программы являются данные, выводимые на экран пользователя, и текстовые документы, составленные по запросам пользователя. Язык выходных данных в приложении – русский [7].Результатная информация является важнейшей составляющей информационной системы, так как является целью ее разработки изначально [7]. В качестве результатной информации выступают выходные формы и отчеты.Разрабатываемая информационная система расчета заработной платы» позволяет строить следующие отчеты:отчет о начисленной заработной плате (по сотрудникам) за выбранный промежуток времени;отчет о начисленной заработной плате (по отделам) за выбранный промежуток времени;отчет о рабочем времени сотрудников за выбранный промежуток времени.На рисунках 7-9 представлены макеты выходных отчетов.Табельный номерФИООтделДолжностьРасчет по табелю, руб.Штрафы/ ВычетыМотивационные выплатыСдельная з/р, руб.Итого, руб.Налог (13%), руб.Всего к выплате, руб.Комментарии к расчетуРисунок 7. Макет отчета о начисленной заработной плате по сотрудникамОтделРасчет по табелю, руб.Штрафы/ ВычетыМотивационные выплатыСдельная з/р, руб.Итого, руб.Налог (13%), руб.Всего к выплате, руб.Рисунок 8. Макет отчета о начисленной заработной плате по отделамТабельный номерФИОКоличество отработанных днейКоличество выполненных работРисунок 9. Макет отчета о рабочем времени сотрудниковКроме того, информационная система автоматизации заполняет платежную ведомость по форме Т-53 [15] (рисунок 10).Рисунок 10. Платежная ведомость по форме Т-532.4. Общие положения (дерево функций и сценарий диалога)На рисунке 11 представлено дерево функций информационной системы расчета заработной платы.Рисунок 11. Дерево функцийНа рисунке 12 представлена структура диалога [1, 3] пользователя и информационной системы расчета заработной платы.Рисунок 12. Структура диалога пользователя и ИС2.5. Характеристика базы данныхДля разработки базы данных информационной системы расчета заработной платы была использована выбранная СУБД MS Access.В приложении А, в таблице А.1 представлено описание структуры базы данных.На рисунке 13 представлена даталогическая модель БД [8], созданная с помощью программы TOAD Data Modeler 5.4.Рисунок 13. Даталогическая модель БД2.6. Структурная схема пакета (дерево вызова программных модулей)В процессе разработки информационной системы расчета заработной платы сотрудников были созданы программные модули различных классов: главный модуль, модуль служебных функций, модуль обработки ввода/вывода информации [10]. Назначение представленных в программе модулей представлено в таблице 5.Таблица 5Назначение программных модулейНаименование модуляНазначение модуляForm1Главный модуль приложения, который координирует работу приложения. Обрабатывает вызов пунктов меню, перенаправляя задания другим модулям.FormAuthМодуль, авторизации в системе FormOtdeliМодуль для редактирования отделовFormDoljМодуль для редактирования должностейFormVidShtrafМодуль редактирования видов штрафов и вычетовFormSystemМодуль для просмотра существующих систем оплатыFormSotrМодуль редактирования сведений о сотрудниках FormUsersМодуль для добавления и редактирования пользователейSummaМодуль для формирования суммы прописью для вноса в платежную ведомостьClassDocsМодуль для формирования выходных документовBDDataSetМодуль доступа к базе данныхВсе модули взаимосвязаны между собой. Функции координации движения информационных потоков выполняет главный модуль программы Form1. Взаимосвязь программных модулей представлена на рисунке 14.Рисунок 14. Взаимосвязь модулей программыНа рисунке 15 представлена структурная схема интерфейса информационной системы.Информационная система расчета заработной платы работает в двух режимах:Администратор – имеет полные права доступа.Бухгалтер – не имеет возможности доступа к списку пользователей.Пользователи ИС Визуальный интерфейсОбъектная модель БДBDТехнология ADO.NetMS SQL ServerПользователи ИС Визуальный интерфейсОбъектная модель БД
BDТехнология ADO.NetMS SQL ServerПользователи ИС Визуальный интерфейсОбъектная модель БД
BDТехнология ADO.NetMS SQL ServerПользователи ИС Визуальный интерфейсОбъектная модель БД
BDТехнология ADO.NetMS SQL ServerРисунок 15. Cтруктурная схема интерфейса ИСДерево вызова процедур и программ разработанной информационной системы расчет заработной платы представлено на рисунке 16.Рисунок 16. Дерево вызова процедур и программОписание программных модулейИнформационная система для автоматизации расчета заработной платы представляет собой клиент-серверное приложение, разработанное с помощью среды разработки приложений Microsoft Visual studio 2019 на платформе .NET Framework 4.8. В качестве СУБД использована MS Access. Доступ к данным БД реализован с помощью технологии ADO.NET [9, 13].Алгоритм расчета заработной платы представлен на рисунке 17.Рисунок 17. Алгоритм расчета заработной платыПервоначально пользователь вводит логин и пароль для получения доступа к данным. Далее вводятся данные о сотрудниках, а также информация, необходимая для расчета заработной платы. После чего выполняется расчет заработной платы по каждому сотруднику и оформляется платежная ведомость.2.8. Контрольный пример реализации проекта и его описаниеПри запуске информационной системы пользователю необходимо ввести логин и пароль на форме, представленной на рисунке 18.Рисунок 18. Форма авторизацииПосле успешной авторизации пользователю будет открыта главная форма приложения, представленная на рисунке 19.На главной форме в разделе «Ввод данных» можно внести информацию для последующего расчета заработной платы.Раздел «Расчет ЗП» предназначен для расчета заработной платы сотрудников и формирования выходных документов, включая платежную ведомость.Информационная система позволяет хранить в БД подтверждающие документы по всем разделам данных, для последующей аудиторской проверки.В левой части формы находится дерево, включающее список сотрудников с разбивкой по отделам. При выборе конкретного сотрудника данные на формах ввода будет отфильтрованы для выбранного сотрудника.Рисунок 19. Главная форма приложенияВ верхней части формы находится фильтр по периоду выборки данных. Возможно отключить фильтр или использовать быстрый фильтр: прошлый/текущий месяц.На рисунке 20 представлен пример ввода данных о выполненных работах для последующего расчета сдельной заработной платы.Рисунок 20. Ввод данных о выполненных работахНа рисунке 21 представлен раздел «Штрафы/Вычеты», предназначенная для учета штрафов и вычетов.Рисунок 21. Ввод данных о штрафах и вычетахДля реализации мотивационного плана предприятия, направленного на поощрение работников за добросовестный труд предназначен раздел «Мотивационные выплаты», представленный на рисунке 22.Рисунок 22. Ввод данных о мотивационных выплатахДля каждого сотрудника ведется соответствующая запись по трудовому договору, определяющая систему оплаты труда и принятые оклады (рисунок 23).Рисунок 23. Ввод данных о трудовых договорахНа рисунке 24 представлен пример расчета заработной платы. Расчет включает следующие разделы: Табельный номер, ФИО, отдел, должность, система оплаты.Размер повременной оплаты по табелю.Сумма штрафов/вычетов.Сумма мотивационных выплат.Размер сдельной заработной платы.Итоговая сумма, с учетом налога и сумма к выплате.Подробный расчет заработной платы.Рисунок 24. Расчет заработной платы (по сотрудникам)В верхней части формы также находится суммарный расчет фонда оплаты труда (ФОТ).Расчет заработной платы проводится по следующим системам оплаты:повременная (на основе табель);сдельная по количеству отработанных часов;сдельная по количеству выполненных работ;сдельная по общей сумме работ.Также возможен расчет заработной платы по отделам. Пример такого расчета представлен на рисунке 25.Рисунок 25 – Пример расчета заработной платы по отделамНа рисунках 26 и 27 представлен пример сформированной платежной ведомости.Рисунок 26. Платежная ведомость (лист 1)Рисунок 27. Платежная ведомость (лист 2)На рисунке 28 представлена форма редактирования сведений о сотрудниках.Рисунок 28. Сведения о сотрудникахЗаключениеЦелью курсовой работы является разработка информационной системы автоматизации расчета заработной платы сотрудников предприятия.Разработанное программное обеспечение позволяет быстро и эффективно вести учет сотрудников, условий трудовых договоров, табельного учета, выполненных работ, штрафов, вычетов и мотивационных выплат для автоматического расчета заработной платы, формирования платежной ведомость и экспорта расчетов в формат MS Excel для дальнейшего использования или печати.Информационная система расчета заработной платы избавит сотрудников от рутинных работ, связанных с ручным заполнением данных в различные книги учета и проведения вычислений. Система проста в эксплуатации, удобна и эргономична, не требует особых знаний от пользователя в области программирования и теории баз данных. Для удобства работы пользователя разработано руководство оператора.Внедрение информационной системы позволит:повысить производительность труда бухгалтеров компании;экономить рабочее время сотрудников;автоматизировать процесс расчета заработной платы по различным системам оплаты;хранить документы, которые подтверждают правильность расчета заработной платы для последующей аудиторской проверки;сократить время на формирование отчетов и платежной ведомости;хранить информацию в безбумажном виде;повысить достоверность и качество хранимой информации за счет автоматической проверки вводимых данных.Все поставленные задачи выполнены в полном объеме. Цель курсовой работы достигнута.Cписок литературыАлексеев А.В. Разработка информационных систем. – Москва, 2017. – 638 с.Бабенко В. В. Практический анализ бизнес-процессов. – Сыктывкар, 2018. – 290 с.Бочаров В.В. Проектирование информационных систем. СПб.: Питер, 2018. – 256 с.Вейцман В.М. Проектирование информационных систем: Учебное пособие. – М.: МУБИНТ, 2019. – 214 c.Вигерс К. Разработка требований к программному обеспечению. СПб.:БХВ-Петерберг, 2018. – 736 с.Горностаев А.П. Case-технологии. СПб.: Питер, 2019. – 214 с.Горев А., Макашарипов С. Проектирование информационных систем. – С-Пб.: Питер, 2018. – 169 с.Гринченко Н. Н. Проектирование баз данных. Учебное пособие – СПб.: Горячая Линия – Телеком, 2017. – 296 с.Гарнаев А., Основы C#, СПб.: Питер, 2018. – 564 с.Грекул В.И., Денищенко Г.Н., Коровкина Н.Л. Проектирование информационных систем. – М: ИУИТ, 2019 – 300 с.Емельянова Н. З. Информационные системы в экономике: учеб. пособие / Н. Емельянова, Т. Л. Партыка, И. И. Попов. - М.: Форум, 2017. – 461 с.Исаев Г.А., Проектирование информационных систем. Учебное пособие, М.- Омега-Л, 2018. – 432 с.Культин К.К., Основы программирования C#, СПб.: БХВ-Петербург, 2016. – 425 с.Турецкий Э., Особенности MS Access, М.: Вильямс, 2017. – 1312 с.Ведение учета рабочего времени с помощью табеля [Электронный ресурс]. Режим доступа: http://bsnss.net/predprinimatelstvo/docs/tabel-ucheta-rabochego-vremeni.htmlОфициальный сайт MySQL [Электронный ресурс]. URL: http://mysql.comОфициальный сайт MS SQL Server [Электронный ресурс]. URL: http://mssqlserver.com.Официальный сайт MS Visual Studio [Электронный ресурс]. URL: http://msvisualstudio.ruОфициальный сайт Rad Studio [Электронный ресурс]. URL: http://embarcadero.ruРасчет заработной платы в 2018 году [Электронный ресурс], Режим доступа: https://blog.ksio.ru/sotrudniki/zarplata/rashet Общий расчет заработной платы [Электронный ресурс], Режим доступа: http://nebopro.ru/raschet-zpРасчет заработной платы. Принципы и нормативные акты. [Электронный ресурс], Режим доступа: https://www.b-kontur.ru/enquiry/186Расчет заработной платы. Выдержки из Постановления Правительства РФ от 24.12.2007 N 922 (ред. от 10.12.2016) «Об особенностях порядка исчисления средней заработной платы» [Электронный ресурс], Режим доступа: http://www.consultant.ru/document/cons_doc_LAW_73789/Расчет заработной платы. Первичная документация [Электронный ресурс], Режим доступа: http://www.klerk.ru/buh/articles/273287/Табель Т-12 [Электронный ресурс]. Режим доступа: http://www.consultant.ru/document/cons_doc_LAW_47274/69c65081afb680d362ebda8f88862049b25c898a/Приложение А. Структура таблиц БДТаблица А.1Описание структуры базы данныхТаблицаПолеТип данныхПервичный/ Внешний ключОбяза-тельное поле12345Вид штрафа/вычетаКод видаСчетчикPKДаШтраф/ВычетТекстовый (50)-ДаВыполненная работаКод работыСчетчикPKДаКод сотрудникаЧисловойFKДаДатаДата/Время-ДаВид работТекстовый (150)-ДаСуммаДенежный-НетКоличество часовЧисловой-НетКоличество работЧисловой-НетДокументOLE-НетДокумент (расширение)Текстовый (5)-НетДолжностьКод должностиСчетчикPKДаДолжностьТекстовый (50)-ДаМотивационная выплатаКод выплатыСчетчикPKДаКод сотрудникаЧисловойFKДаДатаДата/Время-ДаСуммаДенежный-ДаОснованиеТекстовый (255)-НетДокументOLE-НетДокумент (расширение)Текстовый (5)-НетОтделКод отделаСчетчикPKДаОтделТекстовый (150)-ДаСистема оплатыКод системыСчетчикPKДаНаименованиеТекстовый (50)-ДаСотрудникТабельный номерСчетчикPKДаФИОТекстовый (150)-ДаТелефонТекстовый (30)-НетЭлектронная почтаТекстовый (30)-НетАдресТекстовый (150)-НетКод должностиЧисловойFKДаКод отделаЧисловойFKДа Табельный учет Код табеляСчетчикPKДаГодЧисловой-ДаМесяцЧисловой-ДаКод сотрудникаЧисловойFKДаОтработаноЧисловой-НетОплачиваемый отпускЧисловой-НетНе оплачиваемый отпускЧисловой-НетКомандировкиЧисловой-НетБольничныеЧисловой-НетПродолжение таблицы А.112345Сверхурочные часыЧисловой-НетДокументOLE-НетДокумент (расширение)Текстовый (5)-НетТрудовой договор Код договораСчетчикPKДаНомер договораТекстовый(10)-ДаКод сотрудникаЧисловойFKДаОкладКод системы оплатыЧисловойFKДаОклад за час работыДенежный-НетОклад за количество работДенежный-НетДата началаДата/Время-ДаДата окончанияДата/Время-НетШтраф/ВычетКодСчетчикPKДаКод сотрудникаЧисловойFKДаДатаДата/Время-ДаКод видаЧисловойFKДаПричинаТекстовый (255)-НетСуммаДенежный-ДаДокументOLE-НетДокумент (расширение)Текстовый (5)-НетПользовательКод сотрудникаСчетчикPKДаЛогинТекстовый (20)-ДаПарольТекстовый (20)-ДаПриложение Б. Исходный кодusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using Microsoft.Office.Interop.Excel;using System.Runtime.InteropServices;using System.Data.OleDb;using System.IO;using System.Diagnostics;using System.Windows;namespace RaschetZP{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.Должности". При необходимости она может быть перемещена или удалена. this.должностиTableAdapter.Fill(this.bDDataSet.Должности); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.Отделы". При необходимости она может быть перемещена или удалена. this.отделыTableAdapter.Fill(this.bDDataSet.Отделы); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.ШтрафыВычеты". При необходимости она может быть перемещена или удалена. this.штрафыВычетыTableAdapter.Fill(this.bDDataSet.ШтрафыВычеты); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.ВыполненныеРаботы". При необходимости она может быть перемещена или удалена. this.выполненныеРаботыTableAdapter.Fill(this.bDDataSet.ВыполненныеРаботы); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.Сотрудники". При необходимости она может быть перемещена или удалена. this.сотрудникиTableAdapter.Fill(this.bDDataSet.Сотрудники); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.ТабельныйУчет". При необходимости она может быть перемещена или удалена. this.табельныйУчетTableAdapter.Fill(this.bDDataSet.ТабельныйУчет); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.СистемаОплаты". При необходимости она может быть перемещена или удалена. this.системаОплатыTableAdapter.Fill(this.bDDataSet.СистемаОплаты); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.ТрудовыеДоговора". При необходимости она может быть перемещена или удалена. this.трудовыеДоговораTableAdapter.Fill(this.bDDataSet.ТрудовыеДоговора); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.МотивационныеВыплаты". При необходимости она может быть перемещена или удалена. this.мотивационныеВыплатыTableAdapter.Fill(this.bDDataSet.МотивационныеВыплаты); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.ВидШтрафаВычета". При необходимости она может быть перемещена или удалена. this.видШтрафаВычетаTableAdapter.Fill(this.bDDataSet.ВидШтрафаВычета); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.ШтрафыВычеты". При необходимости она может быть перемещена или удалена. this.штрафыВычетыTableAdapter.Fill(this.bDDataSet.ШтрафыВычеты); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.ВыполненныеРаботы". При необходимости она может быть перемещена или удалена. this.выполненныеРаботыTableAdapter.Fill(this.bDDataSet.ВыполненныеРаботы); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.Сотрудники". При необходимости она может быть перемещена или удалена. this.сотрудникиTableAdapter.Fill(this.bDDataSet.Сотрудники); // TODO: данная строка кода позволяет загрузить данные в таблицу "bDDataSet.ТабельныйУчет". При необходимости она может быть перемещена или удалена. this.табельныйУчетTableAdapter.Fill(this.bDDataSet.ТабельныйУчет); FillSotr(); radioButton7.Checked = true; radioButton5.Checked = true; treeView1.SelectedNode = treeView1.Nodes[0]; } public void FillSotr() { treeView1.Nodes.Clear(); treeView1.Nodes.Add("ВСЕ СОТРУДНИКИ"); foreach (BDDataSet.ОтделыRow s in bDDataSet.Отделы) { TreeNode n = treeView1.Nodes.Add(s.КодОтдела.ToString(), s.Отдел); n.Tag = s; DataRow[] dr = bDDataSet.Сотрудники.Select("КодОтдела=" + s.КодОтдела); foreach (BDDataSet.СотрудникиRow ss in dr) { TreeNode n1 = n.Nodes.Add(ss.ТабельныйНомер.ToString(), ss.ФИО); n1.Tag = ss; } } } private void toolStripButton1_Click(object sender, EventArgs e) { this.Validate(); this.табельныйУчетBindingSource.EndEdit(); BDDataSet.ТабельныйУчетDataTable deletedOrders = (BDDataSet.ТабельныйУчетDataTable) bDDataSet.ТабельныйУчет.GetChanges(DataRowState.Deleted); BDDataSet.ТабельныйУчетDataTable newOrders = (BDDataSet.ТабельныйУчетDataTable) bDDataSet.ТабельныйУчет.GetChanges(DataRowState.Added); BDDataSet.ТабельныйУчетDataTable modifiedOrders = (BDDataSet.ТабельныйУчетDataTable) bDDataSet.ТабельныйУчет.GetChanges(DataRowState.Modified); if (deletedOrders != null) { табельныйУчетTableAdapter.Update(deletedOrders); } if (newOrders != null) { табельныйУчетTableAdapter.Update(newOrders); } if (modifiedOrders != null) { табельныйУчетTableAdapter.Update(modifiedOrders); } bDDataSet.AcceptChanges(); } private void toolStripButton8_Click(object sender, EventArgs e) { this.Validate(); this.выполненныеРаботыBindingSource.EndEdit(); BDDataSet.ВыполненныеРаботыDataTable deletedOrders = (BDDataSet.ВыполненныеРаботыDataTable) bDDataSet.ВыполненныеРаботы.GetChanges(DataRowState.Deleted); BDDataSet.ВыполненныеРаботыDataTable newOrders = (BDDataSet.ВыполненныеРаботыDataTable) bDDataSet.ВыполненныеРаботы.GetChanges(DataRowState.Added); BDDataSet.ВыполненныеРаботыDataTable modifiedOrders = (BDDataSet.ВыполненныеРаботыDataTable) bDDataSet.ВыполненныеРаботы.GetChanges(DataRowState.Modified); if (deletedOrders != null) { выполненныеРаботыTableAdapter.Update(deletedOrders); } if (newOrders != null) { выполненныеРаботыTableAdapter.Update(newOrders); } if (modifiedOrders != null) { выполненныеРаботыTableAdapter.Update(modifiedOrders); } bDDataSet.AcceptChanges(); } private void toolStripButton15_Click(object sender, EventArgs e) { this.Validate(); this.штрафыВычетыBindingSource.EndEdit(); BDDataSet.ШтрафыВычетыDataTable deletedOrders = (BDDataSet.ШтрафыВычетыDataTable) bDDataSet.ШтрафыВычеты.GetChanges(DataRowState.Deleted); BDDataSet.ШтрафыВычетыDataTable newOrders = (BDDataSet.ШтрафыВычетыDataTable) bDDataSet.ШтрафыВычеты.GetChanges(DataRowState.Added); BDDataSet.ШтрафыВычетыDataTable modifiedOrders = (BDDataSet.ШтрафыВычетыDataTable) bDDataSet.ШтрафыВычеты.GetChanges(DataRowState.Modified); if (deletedOrders != null) { штрафыВычетыTableAdapter.Update(deletedOrders); } if (newOrders != null) { штрафыВычетыTableAdapter.Update(newOrders); } if (modifiedOrders != null) { штрафыВычетыTableAdapter.Update(modifiedOrders); } bDDataSet.AcceptChanges(); } private void toolStripButton22_Click(object sender, EventArgs e) { this.Validate(); this.мотивационныеВыплатыBindingSource1.EndEdit(); BDDataSet.МотивационныеВыплатыDataTable deletedOrders = (BDDataSet.МотивационныеВыплатыDataTable) bDDataSet.МотивационныеВыплаты.GetChanges(DataRowState.Deleted); BDDataSet.МотивационныеВыплатыDataTable newOrders = (BDDataSet.МотивационныеВыплатыDataTable) bDDataSet.МотивационныеВыплаты.GetChanges(DataRowState.Added); BDDataSet.МотивационныеВыплатыDataTable modifiedOrders = (BDDataSet.МотивационныеВыплатыDataTable) bDDataSet.МотивационныеВыплаты.GetChanges(DataRowState.Modified); if (deletedOrders != null) { мотивационныеВыплатыTableAdapter.Update(deletedOrders); } if (newOrders != null) { мотивационныеВыплатыTableAdapter.Update(newOrders); } if (modifiedOrders != null) { мотивационныеВыплатыTableAdapter.Update(modifiedOrders); } bDDataSet.AcceptChanges(); } private void toolStripButton29_Click(object sender, EventArgs e) { this.Validate(); this.трудовыеДоговораBindingSource1.EndEdit(); BDDataSet.ТрудовыеДоговораDataTable deletedOrders = (BDDataSet.ТрудовыеДоговораDataTable) bDDataSet.ТрудовыеДоговора.GetChanges(DataRowState.Deleted); BDDataSet.ТрудовыеДоговораDataTable newOrders = (BDDataSet.ТрудовыеДоговораDataTable) bDDataSet.ТрудовыеДоговора.GetChanges(DataRowState.Added); BDDataSet.ТрудовыеДоговораDataTable modifiedOrders = (BDDataSet.ТрудовыеДоговораDataTable) bDDataSet.ТрудовыеДоговора.GetChanges(DataRowState.Modified); if (deletedOrders != null) { трудовыеДоговораTableAdapter.Update(deletedOrders); } if (newOrders != null) { трудовыеДоговораTableAdapter.Update(newOrders); } if (modifiedOrders != null) { трудовыеДоговораTableAdapter.Update(modifiedOrders); } bDDataSet.AcceptChanges(); } private void отделыToolStripMenuItem_Click(object sender, EventArgs e) { FormOtdel f = new FormOtdel(); f.StartPosition = FormStartPosition.CenterScreen; f.ShowDialog(); } private void должностиToolStripMenuItem_Click(object sender, EventArgs e) { FormDolj f = new FormDolj(); f.StartPosition = FormStartPosition.CenterScreen; f.ShowDialog(); } private void системыОплатыToolStripMenuItem_Click(object sender, EventArgs e) { FormSystOplata f = new FormSystOplata(); f.StartPosition = FormStartPosition.CenterScreen; f.ShowDialog(); } private void видыШтрафоввычетовToolStripMenuItem_Click(object sender, EventArgs e) { FormVidShtarafa f = new FormVidShtarafa(); f.StartPosition = FormStartPosition.CenterScreen; f.ShowDialog(); } private void radioButton1_CheckedChanged(object sender, EventArgs e) { if (radioButton1.Checked)//прошлый месяц { var yr = DateTime.Today.Year; var mth = DateTime.Today.Month; var firstDay = new DateTime(yr, mth, 1).AddMonths(-1); var lastDay = new DateTime(yr, mth, 1).AddDays(-1); dateTimePicker1.Value = firstDay; dateTimePicker2.Value = lastDay; } } private void radioButton2_CheckedChanged(object sender, EventArgs e) { if (radioButton2.Checked)//тек месяц { var yr = DateTime.Today.Year; var mth = DateTime.Today.Month; var firstDay = new DateTime(yr, mth, 1); var lastDay = new DateTime(yr, mth, 1).AddMonths(1).AddDays(-1); dateTimePicker1.Value = firstDay; dateTimePicker2.Value = lastDay; } } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (e.Node.Parent == null) { if (e.Node.Text == "ВСЕ СОТРУДНИКИ") { табельныйУчетBindingSource.Filter = ""; штрафыВычетыBindingSource.Filter = ""; мотивационныеВыплатыBindingSource1.Filter = ""; трудовыеДоговораBindingSource1.Filter = ""; выполненныеРаботыBindingSource.Filter = ""; bDDataSet.ТабельныйУчет.КодСотрудникаColumn.DefaultValue = null; bDDataSet.ШтрафыВычеты.КодСотрудникаColumn.DefaultValue = null; bDDataSet.МотивационныеВыплаты.КодСотрудникаColumn.DefaultValue = null; bDDataSet.ТрудовыеДоговора.КодСотрудникаColumn.DefaultValue = null; bDDataSet.ВыполненныеРаботы.КодСотрудникаColumn.DefaultValue = null; } else { bDDataSet.ТабельныйУчет.КодСотрудникаColumn.DefaultValue = null; bDDataSet.ШтрафыВычеты.КодСотрудникаColumn.DefaultValue = null; bDDataSet.МотивационныеВыплаты.КодСотрудникаColumn.DefaultValue = null; bDDataSet.ТрудовыеДоговора.КодСотрудникаColumn.DefaultValue = null; bDDataSet.ВыполненныеРаботы.КодСотрудникаColumn.DefaultValue = null; } } else { BDDataSet.СотрудникиRow s = (BDDataSet.СотрудникиRow)e.Node.Tag; табельныйУчетBindingSource.Filter = "КодСотрудника=" + s.ТабельныйНомер.ToString(); штрафыВычетыBindingSource.Filter = "КодСотрудника=" + s.ТабельныйНомер.ToString(); мотивационныеВыплатыBindingSource1.Filter = "КодСотрудника=" + s.ТабельныйНомер.ToString(); трудовыеДоговораBindingSource1.Filter = "КодСотрудника=" + s.ТабельныйНомер.ToString(); выполненныеРаботыBindingSource.Filter = "КодСотрудника=" + s.ТабельныйНомер.ToString(); bDDataSet.ТабельныйУчет.КодСотрудникаColumn.DefaultValue = s.ТабельныйНомер; bDDataSet.ШтрафыВычеты.КодСотрудникаColumn.DefaultValue = s.ТабельныйНомер; bDDataSet.МотивационныеВыплаты.КодСотрудникаColumn.DefaultValue = s.ТабельныйНомер; bDDataSet.ТрудовыеДоговора.КодСотрудникаColumn.DefaultValue = s.ТабельныйНомер; bDDataSet.ВыполненныеРаботы.КодСотрудникаColumn.DefaultValue = s.ТабельныйНомер; } } private void сотрудникиToolStripMenuItem_Click(object sender, EventArgs e) { FormSotrud f = new FormSotrud(); f.StartPosition = FormStartPosition.CenterScreen; f.ShowDialog(); FillSotr(); } double sumVsego = 0; private System.Data.DataTable Rashet() { int year = dateTimePicker3.Value.Year; int month = dateTimePicker3.Value.Month; sumVsego = 0; System.Data.DataTable dt = new System.Data.DataTable(); dt.Columns.Add("Табельный номер"); dt.Columns.Add("ФИО"); dt.Columns.Add("Отдел"); dt.Columns.Add("Должность"); dt.Columns.Add("Система оплаты"); dt.Columns.Add("Расчет по табелю, руб."); dt.Columns.Add("Штрафы/Вычеты, руб."); dt.Columns.Add("Мотивационные выплаты, руб."); dt.Columns.Add("Сдельная з/п"); dt.Columns.Add("Итого, руб."); dt.Columns.Add("Налог (13%)"); dt.Columns.Add("Всего к оплате, руб."); dt.Columns.Add("Комментарии, руб."); //получаем список сотрудников foreach (BDDataSet.СотрудникиRow s in bDDataSet.Сотрудники) { StringBuilder sb = new StringBuilder(); //табельный учет string dtt = DateTime.Now.Year.ToString() + "/" + DateTime.Now.Month.ToString() + "/" + DateTime.Now.Day.ToString(); DataRow[] trDogRows = bDDataSet.ТрудовыеДоговора.Select("КодСотрудника=" + s.ТабельныйНомер.ToString() + " and (ДатаОкончания is null or ДатаОкончания>#" +dtt + "#)"); if (trDogRows.Length <= 0) { //нет трудового договора sb.Append("Нет действительного договора для выполнения расчета. Внесите информацию о трудовом договоре сотрудника"); dt.Rows.Add(new object[] { s.ТабельныйНомер, s.ФИО, s.ОтделыRow.Отдел, s.ДолжностиRow.Должность, "Нет действительного договора", 0, 0, 0, 0, 0, 0, 0, sb.ToString() }); continue; } BDDataSet.ТрудовыеДоговораRow trDog = (BDDataSet.ТрудовыеДоговораRow)trDogRows[0]; //не указана система оплаты if (trDog.IsКодСистемыОплатыNull()) { //нет оклада sb.Append("Не указана система оплаты, укажите ее в трудовом договоре"); dt.Rows.Add(new object[] { s.ТабельныйНомер, s.ФИО, s.ОтделыRow.Отдел, s.ДолжностиRow.Должность, "Не указана система оплаты", 0, 0, 0, 0, 0, 0, 0, sb.ToString() }); continue; } if (trDog.КодСистемыОплаты == 1 && trDog.IsОкладNull()) { //нет оклада sb.Append("Не указан оклад сотрдуника для повременной системе оплаты, укажите ее в трудовом договоре"); dt.Rows.Add(new object[] { s.ТабельныйНомер, s.ФИО, s.ОтделыRow.Отдел, s.ДолжностиRow.Должность, "Не указан оклад по тр.договору", 0, 0, 0, 0, 0, 0, 0, sb.ToString() }); continue; } if (trDog.КодСистемыОплаты == 3 && trDog.IsОкладЧасРаботNull()) { //нет оклада sb.Append("Не указан оклад сотрдуника для сдельной почасовой системы оплаты, укажите ее в трудовом договоре"); dt.Rows.Add(new object[] { s.ТабельныйНомер, s.ФИО, s.ОтделыRow.Отдел, s.ДолжностиRow.Должность, "Не указан оклад сдельная оплата по часам", 0, 0, 0, 0, 0, 0, 0, sb.ToString() }); continue; } if (trDog.КодСистемыОплаты == 2 && trDog.IsОкладКоличествоРаботNull()) { //нет оклада sb.Append("Не указан оклад сотрдуника для сдельной системы оплаты по количеству выполненных работ, укажите ее в трудовом договоре"); dt.Rows.Add(new object[] { s.ТабельныйНомер, s.ФИО, s.ОтделыRow.Отдел, s.ДолжностиRow.Должность, "Не указан оклад сдельная оплата по количеству работ", 0, 0, 0, 0, 0, 0, 0, sb.ToString() }); continue; } double sum = 0; if (trDog.КодСистемыОплаты == 1)//повременная { //табельный учет DataRow[] rr = bDDataSet.ТабельныйУчет.Select("Год=" + year.ToString() + " and Месяц=" + month + " and КодСотрудника=" + s.ТабельныйНомер.ToString()); foreach (BDDataSet.ТабельныйУчетRow t in rr) { //больничные - стаж более 5 лет - 80%, менее 5 лет - 60% //отпускные - оклад за период отпуска *29.6/3 TimeSpan ts = (trDog.IsДатаНачалаNull() ? DateTime.Now : trDog.ДатаНачала) - DateTime.Now; int staj = ts.Days / 365; double cena1den = Convert.ToDouble(trDog.Оклад / numericUpDown1.Value); double otrab = 0; double otpusk = 0; double kom = 0; double bol = 0; double sv = 0; if (!t.IsОтработаноNull()) otrab = t.Отработано; if (!t.IsКомандировкиNull()) kom = t.Командировки; if (!t.IsБольничныеNull()) bol = t.Больничные; if (!t.IsОплачиваемыйОтпускNull()) otpusk = t.ОплачиваемыйОтпуск; if (!t.IsСверхурочныеNull()) sv = t.Сверхурочные; sb.Append("Оклад=" + trDog.Оклад.ToString() + " руб.").AppendLine(); sb.Append("Количество рабочих дней в месяце=" + numericUpDown1.Value.ToString()).AppendLine(); sb.Append("Стоимость 1 раб.дня=" + Math.Round(cena1den, 2) + " руб.").AppendLine(); sb.Append("Трудовой стаж=" + staj.ToString()).AppendLine(); sb.Append("Отработано=" + otrab.ToString() + " раб.дней").AppendLine(); sb.Append("Оплачиваемый отпуск=" + otpusk.ToString() + " раб.дней").AppendLine(); sb.Append("Командировки=" + kom.ToString() + " раб.дней").AppendLine(); sb.Append("Больничные=" + bol.ToString() + " раб.дней").AppendLine(); if (bol > 0) { if (staj >= 5) sb.Append("*Трудовой стаж более 5 лет, оплата по больничному 80%").AppendLine(); if (staj < 5) sb.Append("*Трудовой стаж менее 5 лет, оплата по больничному 60%").AppendLine(); } sb.Append("Сверхурочные=" + sv.ToString() + " часов").AppendLine(); double bolPr = (staj > 5 ? 0.8D : 0.6D); sum = (otrab + kom) * cena1den + (bol * cena1den * bolPr) + otpusk * 29.3 / 3 + sv * 2 * (cena1den/8); } } double sumSd = 0; if (trDog.КодСистемыОплаты == 3)//по часам { double sumChas = 0; DataRow[] rr = bDDataSet.ВыполненныеРаботы.Select("Дата>='" + dateTimePicker3.Value.ToString() + "' and Дата<='" + dateTimePicker4.Value.ToString() + "' and КодСотрудника=" + s.ТабельныйНомер.ToString()); foreach (BDDataSet.ВыполненныеРаботыRow t in rr) { if (t.IsКоличествоЧасовNull() || trDog.IsОкладЧасРаботNull()) continue; sumChas += t.КоличествоЧасов; sumSd += t.КоличествоЧасов * Convert.ToDouble(trDog.ОкладЧасРабот); } if (!trDog.IsОкладЧасРаботNull()) sb.Append("Оклад за 1 час. работы по договору =" + trDog.ОкладЧасРабот + " руб.").AppendLine(); sb.Append("Отработано " + sumChas.ToString() + " часов").AppendLine(); } if (trDog.КодСистемыОплаты == 2)//по количеству { double sumR = 0; DataRow[] rr1 = bDDataSet.ВыполненныеРаботы.Select("Дата>='" + dateTimePicker3.Value.ToString() + "' and Дата<='" + dateTimePicker4.Value.ToString() + "' and КодСотрудника=" + s.ТабельныйНомер.ToString()); foreach (BDDataSet.ВыполненныеРаботыRow t in rr1) { if (t.IsКоличествоРаботNull() || trDog.IsОкладКоличествоРаботNull()) continue; sumSd += t.КоличествоРабот * Convert.ToDouble(trDog.ОкладКоличествоРабот); sumR += t.КоличествоРабот; } if (!trDog.IsОкладКоличествоРаботNull()) sb.Append("Оклад за выполнение 1 работы по договору =" + trDog.ОкладКоличествоРабот + " руб.").AppendLine(); sb.Append("Выполнено " + sumR.ToString() + " работ").AppendLine(); } if (trDog.КодСистемыОплаты == 4)//по сумме { int i = 0; DataRow[] rr1 = bDDataSet.ВыполненныеРаботы.Select("Дата>='" + dateTimePicker3.Value.ToString() + "' and Дата<='" + dateTimePicker4.Value.ToString() + "' and КодСотрудника=" + s.ТабельныйНомер.ToString()); foreach (BDDataSet.ВыполненныеРаботыRow t in rr1) { if (t.IsСуммаNull()) continue; i++; sumSd += Convert.ToDouble(t.Сумма); } sb.Append("Выполнено " + i + " работ").AppendLine(); sb.Append("Общая сумма работ " + sumSd.ToString() + " руб.").AppendLine(); } //штрафы double shtraf = 0; DataRow[] sh = bDDataSet.ШтрафыВычеты.Select("Дата>='" + dateTimePicker3.Value.ToShortDateString() + "' and Дата<='" + dateTimePicker4.Value.ToShortDateString() + "' and КодСотрудника=" + s.ТабельныйНомер.ToString()); if (sh.Length > 0) { int i = 0; foreach (BDDataSet.ШтрафыВычетыRow shtrf in sh) { i++; shtraf += Convert.ToDouble(shtrf.IsСуммаNull() ? 0 : shtrf.Сумма); } sb.Append("Начислено " + i + " штрафов").AppendLine(); sb.Append("Общая сумма штрафов " + shtraf.ToString() + " руб.").AppendLine(); } //выплаты double vip = 0; DataRow[] v = bDDataSet.МотивационныеВыплаты.Select("Дата>='" + dateTimePicker3.Value.ToString() + "' and Дата<='" + dateTimePicker4.Value.ToString() + "' and КодСотрудника=" + s.ТабельныйНомер.ToString()); if (sh.Length > 0) { int i = 0; foreach (BDDataSet.МотивационныеВыплатыRow vv in v) { vip += Convert.ToDouble(vv.IsСуммаNull() ? 0 : vv.Сумма); } sb.Append("Начислено " + i + " мотивационных выплат").AppendLine(); sb.Append("Общая сумма выплат " + vip.ToString() + " руб.").AppendLine(); } double it1 = sum + sumSd - shtraf + vip; double nal = (sum + sumSd - shtraf + vip) * 0.13; double it2 = it1 - nal; dt.Rows.Add(new object[] { s.ТабельныйНомер, s.ФИО, s.ОтделыRow.Отдел, s.ДолжностиRow.Должность, trDog.СистемаОплатыRow.Наименование, Math.Round(sum, 2), Math.Round(shtraf, 2), Math.Round(vip, 2), Math.Round(sumSd, 2), Math.Round(it1, 2), Math.Round(nal, 2), Math.Round(it2, 2), sb.ToString() }); sumVsego += it2; } return dt; } private void button1_Click(object sender, EventArgs e) { button2.Enabled = true; dataGridView8.DataSource = Rashet(); numericUpDown2.Value = Convert.ToDecimal( sumVsego); } private void radioButton6_CheckedChanged(object sender, EventArgs e) { if (radioButton6.Checked)//прошлый месяц { var yr = DateTime.Today.Year; var mth = DateTime.Today.Month; var firstDay = new DateTime(yr, mth, 1).AddMonths(-1); var lastDay = new DateTime(yr, mth, 1).AddDays(-1); dateTimePicker3.Value = firstDay; dateTimePicker4.Value = lastDay; } } private void radioButton5_CheckedChanged(object sender, EventArgs e) { if (radioButton5.Checked)//тек месяц { var yr = DateTime.Today.Year; var mth = DateTime.Today.Month; var firstDay = new DateTime(yr, mth, 1); var lastDay = new DateTime(yr, mth, 1).AddMonths(1).AddDays(-1); dateTimePicker3.Value = firstDay; dateTimePicker4.Value = lastDay; } } private void dataGridView8_SelectionChanged(object sender, EventArgs e) { if (dataGridView8.CurrentRow==null) { richTextBox1.Text = ""; return; } string s= dataGridView8.CurrentRow.Cells[dataGridView8.Columns.Count - 1].Value as string; richTextBox1.Text = s; } System.Data.DataTable dtOK = new System.Data.DataTable(); private void treeView2_AfterSelect(object sender, TreeViewEventArgs e) { if (e.Node.Parent == null) { if (e.Node.Text == "ВСЕ СОТРУДНИКИ") { dataGridView8.DataSource = dtOK; } else { dataGridView8.DataSource = dtOK.Clone(); BDDataSet.ОтделыRow s = (BDDataSet.ОтделыRow)e.Node.Tag; System.Data.DataTable dt = (System.Data.DataTable)dataGridView8.DataSource; // dt = dt.Clone(); for (int i = 0; i <= dt.Rows.Count - 1; i++) { DataRow r = dt.Rows[i]; if (r[2].ToString().Equals(s.Отдел.ToString())) { } else { r.Delete(); i--; } } } } else { dataGridView8.DataSource = dtOK.Clone(); BDDataSet.СотрудникиRow s = (BDDataSet.СотрудникиRow)e.Node.Tag; System.Data.DataTable dt = (System.Data.DataTable)dataGridView8.DataSource; // dt = dt.Clone(); for (int i=0;i<=dt.Rows.Count-1;i++) { DataRow r = dt.Rows[i]; if (r[0].ToString().Equals(s.ТабельныйНомер.ToString())) { } else { r.Delete(); i--; } } } } private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex<0 || dataGridView1.Rows[e.RowIndex] == null || (DataRowView)dataGridView1.Rows[e.RowIndex].DataBoundItem == null) return; BDDataSet.ТабельныйУчетRow doc = (BDDataSet.ТабельныйУчетRow)((DataRowView)dataGridView1.Rows[e.RowIndex].DataBoundItem).Row; if (doc == null) return; //открыть if (e.ColumnIndex == 13) { string name = Path.ChangeExtension(Path.GetTempFileName(), doc.ДокументРасш); if (doc.IsДокументNull()) { MessageBox.Show("Документ не загружен", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } File.WriteAllBytes(name, doc.Документ); Process.Start(name); } if (e.ColumnIndex == 12) { //загрузить openFileDialog1.Filter = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { doc.Документ = File.ReadAllBytes(openFileDialog1.FileName); doc.ДокументРасш = Path.GetExtension(openFileDialog1.FileName); трудовыеДоговораTableAdapter.Update(doc); bDDataSet.AcceptChanges(); } } } private void dataGridView2_CellClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView2.Rows[e.RowIndex] == null || (DataRowView)dataGridView2.Rows[e.RowIndex].DataBoundItem == null) return; BDDataSet.ВыполненныеРаботыRow doc = (BDDataSet.ВыполненныеРаботыRow)((DataRowView)dataGridView2.Rows[e.RowIndex].DataBoundItem).Row; if (doc == null) return; //открыть if (e.ColumnIndex == 8) { string name = Path.ChangeExtension(Path.GetTempFileName(), doc.ДокументРасш); if (doc.IsДокументNull()) { MessageBox.Show("Документ не загружен", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } File.WriteAllBytes(name, doc.Документ); Process.Start(name); } if (e.ColumnIndex == 7) { //загрузить openFileDialog1.Filter = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { doc.Документ = File.ReadAllBytes(openFileDialog1.FileName); doc.ДокументРасш = Path.GetExtension(openFileDialog1.FileName); выполненныеРаботыTableAdapter.Update(doc); bDDataSet.AcceptChanges(); } } } private void dataGridView3_CellClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView3.Rows[e.RowIndex] == null || (DataRowView)dataGridView3.Rows[e.RowIndex].DataBoundItem == null) return; BDDataSet.ШтрафыВычетыRow doc = (BDDataSet.ШтрафыВычетыRow)((DataRowView)dataGridView3.Rows[e.RowIndex].DataBoundItem).Row; if (doc == null) return; //открыть if (e.ColumnIndex == 7) { string name = Path.ChangeExtension(Path.GetTempFileName(), doc.ДокументРасш); if (doc.IsДокументNull()) { MessageBox.Show("Документ не загружен", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } File.WriteAllBytes(name, doc.Документ); Process.Start(name); } if (e.ColumnIndex == 6) { //загрузить openFileDialog1.Filter = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { doc.Документ = File.ReadAllBytes(openFileDialog1.FileName); doc.ДокументРасш = Path.GetExtension(openFileDialog1.FileName); штрафыВычетыTableAdapter.Update(doc); bDDataSet.AcceptChanges(); } } } private void dataGridView6_CellClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView6.Rows[e.RowIndex] == null || (DataRowView)dataGridView6.Rows[e.RowIndex].DataBoundItem == null) return; BDDataSet.МотивационныеВыплатыRow doc = (BDDataSet.МотивационныеВыплатыRow)((DataRowView)dataGridView6.Rows[e.RowIndex].DataBoundItem).Row; if (doc == null) return; //открыть if (e.ColumnIndex == 6) { string name = Path.ChangeExtension(Path.GetTempFileName(), doc.ДокументРасш); if (doc.IsДокументNull()) { MessageBox.Show("Документ не загружен", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } File.WriteAllBytes(name, doc.Документ); Process.Start(name); } if (e.ColumnIndex == 5) { //загрузить openFileDialog1.Filter = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { doc.Документ = File.ReadAllBytes(openFileDialog1.FileName); doc.ДокументРасш = Path.GetExtension(openFileDialog1.FileName); мотивационныеВыплатыTableAdapter.Update(doc); bDDataSet.AcceptChanges(); } } } private void dataGridView5_CellClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView5.Rows[e.RowIndex] == null || (DataRowView)dataGridView5.Rows[e.RowIndex].DataBoundItem == null) return; BDDataSet.ТрудовыеДоговораRow doc = (BDDataSet.ТрудовыеДоговораRow)((DataRowView)dataGridView5.Rows[e.RowIndex].DataBoundItem).Row; if (doc == null) return; //открыть if (e.ColumnIndex == 11) { string name = Path.ChangeExtension(Path.GetTempFileName(), doc.ДокументРасш); if (doc.IsДокументNull()) { MessageBox.Show("Документ не загружен", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } File.WriteAllBytes(name, doc.Документ); Process.Start(name); } if (e.ColumnIndex == 10) { //загрузить openFileDialog1.Filter = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { doc.Документ = File.ReadAllBytes(openFileDialog1.FileName); doc.ДокументРасш = Path.GetExtension(openFileDialog1.FileName); трудовыеДоговораTableAdapter.Update(doc); bDDataSet.AcceptChanges(); } } } private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { if (табельныйУчетBindingSource.Filter!=null && табельныйУчетBindingSource.Filter != "" && !табельныйУчетBindingSource.Filter.Contains("Дата")) { // табельныйУчетBindingSource.Filter += " and Дата>='" + dateTimePicker1.Value.ToShortDateString() + "' and Дата<='" + dateTimePicker1.Value.ToShortDateString() + "'"; штрафыВычетыBindingSource.Filter += " and Дата>='" + dateTimePicker1.Value.ToShortDateString() + "' and Дата<='" + dateTimePicker1.Value.ToShortDateString() + "'"; мотивационныеВыплатыBindingSource1.Filter += " and Дата>='" + dateTimePicker1.Value.ToShortDateString() + "' and Дата<='" + dateTimePicker1.Value.ToShortDateString() + "'"; выполненныеРаботыBindingSource.Filter += " and Дата>='" + dateTimePicker1.Value.ToShortDateString() + "' and Дата<='" + dateTimePicker1.Value.ToShortDateString() + "'"; } else { //табельныйУчетBindingSource.Filter = "Дата>='" + dateTimePicker1.Value.ToShortDateString() + "' and Дата<='" + dateTimePicker1.Value.ToShortDateString() + "'"; штрафыВычетыBindingSource.Filter = "Дата>='" + dateTimePicker1.Value.ToShortDateString() + "' and Дата<='" + dateTimePicker1.Value.ToShortDateString() + "'"; мотивационныеВыплатыBindingSource1.Filter = "Дата>='" + dateTimePicker1.Value.ToShortDateString() + "' and Дата<='" + dateTimePicker1.Value.ToShortDateString() + "'"; выполненныеРаботыBindingSource.Filter = "Дата>='" + dateTimePicker1.Value.ToShortDateString() + "' and Дата<='" + dateTimePicker1.Value.ToShortDateString() + "'"; } } private void radioButton7_CheckedChanged(object sender, EventArgs e) { dateTimePicker1.Value = new DateTime(2021, 1, 1); dateTimePicker2.Value = new DateTime(2021, 12, 31); } /// /// Заполняем экселевский документ /// /// /// private string FillExcelDoc(string filename) { Microsoft.Office.Interop.Excel.Application ap = new Microsoft.Office.Interop.Excel.Application(); ap.Visible = false; Microsoft.Office.Interop.Excel.Workbook book = null; Microsoft.Office.Interop.Excel.Workbooks excelappworkbooks = ap.Workbooks; ap.Workbooks.Open(filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); book = excelappworkbooks[1]; //получаем список меток документа Microsoft.Office.Interop.Excel.Worksheet sheet = book.Worksheets[1]; Microsoft.Office.Interop.Excel.Worksheet sheet2 = book.Worksheets[2]; Microsoft.Office.Interop.Excel.Range rng = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[13, 3]; rng.Value2 = dateTimePicker3.Value.ToShortDateString(); rng = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[13, 29]; rng.Value2 = dateTimePicker4.Value.ToShortDateString(); rng = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[15, 6]; rng.Value2 = Sklad.Сумма.Пропись(numericUpDown2.Value, Sklad.Валюта.Рубли); rng = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[29, 30]; rng.Value2 = DateTime.Now.ToShortDateString(); rng = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[29, 41]; rng.Value2 = dateTimePicker3.Value.ToShortDateString(); rng = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[29, 51]; rng.Value2 = dateTimePicker3.Value.ToShortDateString(); // ReleaseObject(ap); int i = 0; foreach(DataGridViewRow d in dataGridView8.Rows) { if (d.Cells[dataGridView8.Columns.Count - 2].Value != null && Convert.ToDouble(d.Cells[dataGridView8.Columns.Count - 2].Value) > 0) { rng = (Microsoft.Office.Interop.Excel.Range)sheet2.Cells[7 + i, 1]; rng.Value2 = i + 1; rng = (Microsoft.Office.Interop.Excel.Range)sheet2.Cells[7 + i, 6]; rng.Value2 = d.Cells[0].Value; rng = (Microsoft.Office.Interop.Excel.Range)sheet2.Cells[7 + i, 13]; rng.Value2 = d.Cells[1].Value; rng = (Microsoft.Office.Interop.Excel.Range)sheet2.Cells[7 + i, 30]; rng.Value2 = d.Cells[dataGridView8.Columns.Count - 2].Value; i++; } } string filename1 = Environment.CurrentDirectory + @"\документы\Табель-" + DateTime.Now.ToShortDateString() + ".xls"; book.SaveAs(filename1); book.Close(); ap.Quit(); return filename1; } static object oMissing = System.Reflection.Missing.Value; public void ExportToExcel(DataGridView grid) { Microsoft.Office.Interop.Excel.Application Exl = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook wb; XlReferenceStyle RefStyle = Exl.ReferenceStyle; Exl.Visible = true; wb = Exl.Workbooks.Add(); Worksheet ws = wb.Worksheets.get_Item(1) as Worksheet; for (int j = 0; j < grid.Columns.Count; ++j) { (ws.Cells[1, j + 1] as Range).Value2 = grid.Columns[j].HeaderText; for (int i = 0; i < grid.Rows.Count; ++i) { object Val = grid.Rows[i].Cells[j].Value; if (Val != null) (ws.Cells[i + 2, j + 1] as Range).Value2 = Val.ToString(); } } ws.Columns.EntireColumn.AutoFit(); Exl.ReferenceStyle = RefStyle; Exl.Visible = true; Marshal.ReleaseComObject(Exl); //ReleaseExcel(Exl as Object); } private void button2_Click(object sender, EventArgs e) { Process.Start( FillExcelDoc(Environment.CurrentDirectory + @"\шаблоны\Т-53.xls")); } private void button3_Click(object sender, EventArgs e) { ExportToExcel(dataGridView8); } public bool isAdmin = false; private void button4_Click(object sender, EventArgs e) { button2.Enabled = false; System.Data.DataTable dt = Rashet(); System.Data.DataTable dtNew = new System.Data.DataTable(); dtNew.Columns.Add("Отдел"); dtNew.Columns.Add("Расчет по табелю, руб."); dtNew.Columns.Add("Штрафы/Вычеты, руб."); dtNew.Columns.Add("Мотивационные выплаты, руб."); dtNew.Columns.Add("Сдельная з/п"); dtNew.Columns.Add("Итого, руб."); dtNew.Columns.Add("Налог (13%)"); dtNew.Columns.Add("Всего к оплате, руб."); double sum = 0; Dictionary dict = new Dictionary(); foreach(DataRow dr in dt.Rows) { if (dict.ContainsKey(dr[2].ToString())) { object[] o = dict[dr[2].ToString()]; o[0] = Convert.ToDouble(o[0]) + Convert.ToDouble(dr[5]); o[1] = Convert.ToDouble(o[1]) + Convert.ToDouble(dr[6]); o[2] = Convert.ToDouble(o[2]) + Convert.ToDouble(dr[7]); o[3] = Convert.ToDouble(o[3]) + Convert.ToDouble(dr[8]); o[4] = Convert.ToDouble(o[4]) + Convert.ToDouble(dr[9]); o[5] = Convert.ToDouble(o[5]) + Convert.ToDouble(dr[10]); o[6] = Convert.ToDouble(o[6]) + Convert.ToDouble(dr[11]); dict[dr[2].ToString()] = o; sum += Convert.ToDouble(dr[11]); } else { object[] o = new object[7]; o[0] =Convert.ToDouble(dr[5]); o[1] = Convert.ToDouble(dr[6]); o[2] = Convert.ToDouble(dr[7]); o[3] = Convert.ToDouble(dr[8]); o[4] = Convert.ToDouble(dr[9]); o[5] = Convert.ToDouble(dr[10]); o[6] = Convert.ToDouble(dr[11]); dict[dr[2].ToString()] = o; sum += Convert.ToDouble(dr[11]); } } foreach (KeyValuePair dd in dict) { object[] d = dd.Value; dtNew.Rows.Add(dd.Key, d[0],d[1],d[2],d[3],d[4],d[5],d[6]); } numericUpDown2.Value =Convert.ToDecimal( sum); dataGridView8.DataSource = dtNew; } private void пользователиToolStripMenuItem_Click(object sender, EventArgs e) { FormUsers f = new FormUsers(); f.StartPosition = FormStartPosition.CenterScreen; f.ShowDialog(); } private void выходToolStripMenuItem_Click(object sender, EventArgs e) { System.Windows.Forms.Application.Exit(); } }}
Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников
Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.
Цены ниже, чем в агентствах и у конкурентов
Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит
Бесплатные доработки и консультации
Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки
Гарантируем возврат
Если работа вас не устроит – мы вернем 100% суммы заказа
Техподдержка 7 дней в неделю
Наши менеджеры всегда на связи и оперативно решат любую проблему
Строгий отбор экспертов
К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»
Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован
Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн
Выполнить 2 контрольные работы по Информационные технологии и сети в нефтегазовой отрасли. М-07765
Контрольная, Информационные технологии
Срок сдачи к 12 дек.
Архитектура и организация конфигурации памяти вычислительной системы
Лабораторная, Архитектура средств вычислительной техники
Срок сдачи к 12 дек.
Организации профилактики травматизма в спортивных секциях в общеобразовательной школе
Курсовая, профилактики травматизма, медицина
Срок сдачи к 5 дек.
краткая характеристика сбербанка анализ тарифов РКО
Отчет по практике, дистанционное банковское обслуживание
Срок сдачи к 5 дек.
Исследование методов получения случайных чисел с заданным законом распределения
Лабораторная, Моделирование, математика
Срок сдачи к 10 дек.
Проектирование заготовок, получаемых литьем в песчано-глинистые формы
Лабораторная, основы технологии машиностроения
Срок сдачи к 14 дек.
Вам необходимо выбрать модель медиастратегии
Другое, Медиапланирование, реклама, маркетинг
Срок сдачи к 7 дек.
Ответить на задания
Решение задач, Цифровизация процессов управления, информатика, программирование
Срок сдачи к 20 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Информационные технологии
Срок сдачи к 11 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Геология
Срок сдачи к 11 дек.
Разработка веб-информационной системы для автоматизации складских операций компании Hoff
Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления
Срок сдачи к 1 мар.
Нужно решить задание по информатике и математическому анализу (скрин...
Решение задач, Информатика
Срок сдачи к 5 дек.
Заполните форму и узнайте цену на индивидуальную работу!