СТАРООСКОЛЬСКИЙ ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ
(ФИЛИАЛ) ФЕДЕРАЛЬНОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ СТАЛИ И СПЛАВОВ
(ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ)»
Факультет автоматизации и информационных технологий
Кафедра автоматики и промышленной электроники
Специальность 080801 "Прикладная информатика в сфере сервиса"
Выпускная квалификационная работа
на тему: «Автоматизация учета товаров на АГЗС «Северного объединения по эксплуатации газового хозяйства»
Старый Оскол июнь 2009 год
Аннотация
Объектом исследования дипломного проекта является АГЗС города Губкина – структурного подразделения «Северное объединение по эксплуатации газового хозяйства» Основной вид деятельности АГЗС – оказание услуг по заправке автомобилей сжиженным углеводородным газом.
Целью дипломного проекта является разработка системы автоматизации учета товаров на АГЗС.
В аналитической части произведен анализ процесса работы АГЗС и отдела ОМТС, построены информационные потоки, поставлена главная задача проектирования и разбита на подзадачи.
Для практической реализации поставленной задачи были разработаны базы данных АГЗС и отдела ОМТС синхронизирующиеся между собой для контроля всех пяти АГЗС из главного офиса (ОМТС). Был произведен выбор системного обеспечения: ОС рабочей станции – Windows XP Professional, использовалась база данных MS Access – которая включает весь необходимый перечень функций для проектируемой информационной системы и имеет богатый набор визуальных средств, в качестве ПО для сервера был выбран MS SQL-Server. В проекте было произведено обоснование выбора технических средств, необходимых для работы системы.
Внедрение разрабатываемой системы позволит сократить время, затрачиваемое на обработку данных, автоматизирует обмен информацией между АГЗС и главным офисом.
В экономической части рассчитана экономическая эффективность внедрения проекта и срок окупаемости проекта.
В разделе «Защита информации» были проанализированы средства обеспечения защиты информации хранящейся в БД.
Пояснительная записка дипломного проекта содержит 94 листа, 32 рисунка, 24 таблицы, 2 приложения. Графическая часть проекта состоит из 9 листов формата А1.
Список сокращений
АГЗС | - | Автогазозаправочная станция |
АДС | - | Аварийно-диспетчерская служба |
АХО | - | Административно-хозяйственный отдел |
БД | - | Базы данных |
ГРЭГС | - | Губкинская районо-эксплуатационная газовая служба |
ИО | - | Информационное обеспечение |
ИС | - | Информационная система |
ИТ | - | Информационные технологии |
КРЭГС | - | Красненская районо-эксплуатационная газовая служба |
КС | - | Корпоративная сеть |
НОРЭГС | - | Новоскольская районо-эксплуатационная газовая служба |
ОГМ | - | Отдел главного механика |
ОК | - | Отдел кадров |
ОКО | - | Отдел компьютерного обеспечения |
ОМТС | - | Отдел материально-технического снабжения |
ОРГ | - | Отдел режимов газоснабжения |
ОУП | - | Отдел управления персоналом |
ПО | - | Программное обеспечение |
ПТО | - | Производственно-технический отдел |
ПЭО | - | Планово-экономический отдел |
СОРЭГС | - | Старооскольская районо-эксплуатационная газовая служба |
СУБД | - | Система управления базами данных |
СУГ | - | сжиженный углеводородный газ |
УВДГО | - | Участок внутридомового газового оборудования |
ЦАДС | - | Центральная аварийно-диспетчерская служба |
ЧРЭГС | - | Чернянская районо-эксплуатационная газовая служба |
Содержание
Введение. 6
1. Аналитическая часть. 8
1.1 Описание предметной области. 8
1.1.1 Описание вида деятельности. 8
1.1.2 Организационная структура и объект управления. 9
1.2 Описание существующего уровня автоматизации. 15
1.2.1 Структура сети и ее характеристика. 15
1.2.2 Конфигурации рабочих мест. 16
1.2.3 Описание существующей информационной системы.. 17
1.2.4 Описание работы автогазозаправочной станции. 18
1.3 Сущность информационного комплекса и информационных задач. 19
1.3.1 Постановка задач на проектирование. 21
1.3.2 Обоснование выбора задач, входящих в комплекс. 22
1.3.3 Проблемы разработки информационной системы.. 23
1.3.4 Декомпозиция задач. 24
1.3.5 Требования, предъявляемые к разрабатываемой ИС.. 24
1.4. Обзор современных ИС.. 26
1.4.1 Обоснование проектных решений по программному обеспечению комплекса задач 28
2. Проектная часть. 30
2.1 Информационное обеспечение комплекса задач. 30
2.1.1 Обоснование информационного обеспечения. 32
2.1.2 Внемашинное информационное обеспечение. 32
2.1.2.1 Инфологическая модель данных и ее описание. 32
2.1.2.2 Характеристика входной информации. 35
2.1.3 Выбор клиентской системы управления баз данных. 36
2.1.4 Выбор серверной системы управления баз данных. 40
2.1.5 Внутримашинная реализация данных. 43
2.1.6 Алгоритмы и технология решения задач. 48
2.2 Формализация расчетов (математическая модель) 50
2.2.1 Модель управления запасами без дефицита. 50
2.3 Описание экранных форм. 54
2.3.1 Приложение на АГЗС.. 54
2.3.2 Приложение в главном офисе. 60
2.4 Обоснование выбора системного обеспечения. 64
2.5 Обоснование выбора программного обеспечения. 66
2.6 Обоснование выбора технического обеспечения ИС.. 67
2.7 Разработка организационного обеспечения. 68
3. Расчет экономической эффективности. 70
3.1 График основных этапов проведения НИР и расчет затрат. 71
3.2 Определение капитальных затрат для нового варианта. 77
3.3 Определение эксплуатационных затрат для нового варианта. 78
3.4 Определение экономического эффекта. 79
4. Информационная безопасность и защита информации. 81
4.1 Корпоративные компьютерные системы.. 81
4.2 Обеспечение безопасности в корпоративных сетях. 83
4.3 Защита данных в Access. 88
4.4 Защита данных в SQL Server 89
Заключение. 92
Список источников информации. 94
Приложение 1: 96
Приложение 2: 122
Введение
В настоящее время невозможно представить процесс управления производством, выполняемый без участия информационных систем, которые облегчают и улучшают технологические процессы и качество обработки информации.
Информационная система представляет собой систему, реализующую автоматизированный сбор, обработку и манипулирование данными и включающая технические средства обработки данных, программное обеспечение и обслуживающий персонал.
Разработка собственной информационной системы - это действительно проблема, которую приходится решать многим современным предприятиям, независимо от рода их бизнеса. Термин «информационная система» относится к классу программных продуктов, облегчающих или «автоматизирующих» ведение бизнеса.
Грамотно обработанная и систематизированная информация является в определенной степени гарантией эффективного управления производством. Напротив, отсутствие оперативных и достоверных данных может привести к неверному управленческому решению и, как следствие, к серьезным убыткам.
В данной работе рассматривается деятельность пяти АГЗС и их главного офиса «Северного объединения по эксплуатации газового хозяйства».
Для того чтобы эффективность и производительность работы «Северного объединения по эксплуатации газового хозяйства» были высокими необходима чёткая и отлаженная работа всех подразделений предприятия, в том числе и АГЗС. Но без внедрения информационной системы такую работу обеспечить очень сложно и практически невозможно, поскольку постоянно увеличиваются информационные потоки и повышаются требования к скорости обработки данных, выполнение большого количества операций невозможно осуществить вручную. Для полноценного учета информации без применения ЭВМ необходим достаточно большой штат сотрудников, который должен своевременно отслеживать информационные потоки, изменения данных и остатки и фиксировать их на бумажных носителях, которые также требуют кропотливого труда и внимания. Все это ведет к экономически неоправданному расширению штата кадровых служащих на предприятии и снижению оперативности получения информации. Внедрение ИС значительно облегчает данную работу, поскольку создаются две базы данных, обменивающихся информацией между собой через сеть интернет, что позволяет оперативно отражать информацию. Также значительно облегчается сам процесс изменения и ведения бумажной документации, поскольку основные элементы операций автоматизированы и выполняются по достаточно несложному алгоритму. В результате чего экономится время, человеческие ресурсы, оперативно поступает информация и повышается качество работы в целом.
В качестве объекта управления разрабатываемой ИС является учет товаров на АГЗС.
Разработанная ИС позволила добиться следующих результатов:
· усовершенствована работа оператора на АГЗС;
· снижен объем бумажных документов;
· связаны информационные потоки главного офиса и пяти отдельных АГЗС в единую информационную сеть;
· создала базы данных с разграничением прав доступа на пяти АГЗС и в главном офисе;
· автоматизирована система учета товаров;
· автоматизирован обмен информацией между АГЗС и главного офиса;
· в главном офисе оперативно отслеживаются должники-контрагенты по оплате за товары.
Аналитическая часть
Описание предметной области
Описание вида деятельности
«Северное объединение по эксплуатации газового хозяйства» находится в городе Старый Оскол и объединяет 5 районов: Красненский, Новооскольский, Чернянский, Губкинский и собственно Старооскольский.
Основными видами деятельности объединения являются:
· осуществление комплекса мер по контролю за рациональным использованием газообразного топлива на газопотребляющих объектах;
· осуществление контроля за сохранностью систем газоснабжения, при производстве строительных работ вблизи действующих газопроводов;
· изготовление запасных частей для газового оборудования, механизмов, приборов;
· организация пропаганды безопасного пользования газом в быту;
· обучение населения правилам пользования газовыми приборами;
· организация работы по противопожарной защите газопроводов от электрохимической коррозии;
· рассмотрение причин аварий, несчастных случаев и принятие мер по их предотвращению;
· разработка мероприятий по охране труда и технике безопасности и обеспечение их выполнения так же является задачей «Северного объединения по эксплуатации газового хозяйства»;
· подготовка кадров, своевременная аттестация, повышение квалификации руководителей, специалистов, рабочих;
· оказание организационно-технической и методической помощи газовым хозяйствам других министерств и ведомств, находящихся в зоне обслуживания филиала;
· осуществление коммерческой деятельности и любые другие виды деятельности, не запрещенных законодательством.
В 2000 году начала производиться заправка автомобилей собственного автотранспорта на складе города Старый Оскол, где была установлена колонка для заправки автомобилей.
В 2001 году были построены и пущены в эксплуатацию АГЗС в районах (см. таблица 1.1.):
Таблица 1.1.
Название населенного пункта | Фактическая производительность т/год | Занимаемая площадь |
г. Губкин, ул. Белгородская | 1500 | 684 |
г. Старый Оскол, ул. Ватутина, 209 | 902 | 640 |
г. Новый Оскол, р-н Лесопитомника | 246,9 | 630 |
с. Красное, р-н Асфальтобетонного завода | 223,4 | 580 |
п. Чернянка, пер. Литвинова, 3 | 384 | 600 |
Конфигурации рабочих мест
Аппаратная конфигурация рабочих мест в главном управлении представлена в таблице 1.2. Так как компьютеров в объединении много, то и конфигурация не однородна.
Таблица 1.2.
Платформа | AMD Sempron A-XP-2800+ 256кб |
ОЗУ | От 256 до 1024 Гб |
Жесткий диск | От 20 до 260 Гб |
Сетевая карта | NVIDIA nForce MCP Networking Controller |
Видео карта | NVIDIA GeForce4 64 Мб |
На Рабочих станциях установлена многопользовательская операционная система Windows ХР Professional, обеспечивающая защиту файлов от проникновения извне.
Декомпозиция задач
Под декомпозицией задач, подразумевается разбиение общей задачи на подзадачи.
Основная задача: создание информационной системы автоматизации учета товаров на АГЗС.
Подзадача:
· Создание двух БД для АГЗС и главного офиса по технологии «клиент – сервер»;
· Формирование оборотно-сальдовой ведомости;
· Учет должников-контрагентов по оплате за товары;
· Формирование остатков товара;
· Формирование сменного отчета, прихода, расхода;
· Учет количества смен, отработанных сотрудниками;
· Контроль над остатками и поставкой газа
Требования, предъявляемые к разрабатываемой ИС
Из одного центра сложно контролировать работу сети филиалов АГЗС, так как приходится обрабатывать большое количество документов. Существующий процесс занимает значительное время, и влечет за собой не своевременность поступления информации, что недопустимо в современном процессе информатизации общества, где необходимо принимать эффективные решения на основе оперативной информации.
Проектируемая ИС должна: автоматически синхронизировать данные между БД АГЗС и главного офиса по технологии «клиент – сервер»; автоматизировать учет товаров на АГЗС; создавать БД с разграничением прав доступа на пяти АГЗС и в главном офисе; автоматически отправлять данные о реализации товара в конце каждой смены в главный офис; самостоятельно отслеживать должников-контрагентов по оплате за товары.
Требования к структуре и функционированию системы:
· интерфейс системы должен быть лёгким и понятным, даже неподготовленному пользователю;
· иметь разные уровни доступа в клиентской БД у пользователей АГЗС;
· серверная БД должна храниться на серверной СУБД, для защиты данных;
· оперативно отражать информацию о товаре;
· обеспечивать настройку параметров;
· устойчивость к сбоям связи;
· легко адаптироваться к постоянно меняющимся параметрам.
Требования к эргономике:
· экранная форма системы должна быть оформлена в спокойных цветах;
· все экранные формы выдержаны в одной гамме цветов и одной стилистике.
· все надписи легко читаемы.
Требования к технической эстетике:
· защита рабочих мест в соответствии с нормами охраны труда: защитные экраны или мониторы со встроенными защитными экранами; правильное производственное освещение, исключающее повышенную яркость, блёсткость, ослеплённость, тени и т. п.;
· предоставление мер по безопасности труда.
Требования к защите информации от несанкционированного доступа.
· должно быть предусмотрено ограничение прав доступа, то есть у всех сотрудников должны быть собственные права доступа к системе, а именно уникальный пароль и имя входа;
· иметь разные права доступа к одинаковым объектам БД на АГЗС и главном офисе.
Обзор современных ИС
Любая информационная система может содержать элементы каждой из приведенных ниже категорий, но большинство из них имеют конкретную ориентацию в одной из областей, связанную в первую очередь с позиционированием продукта.
Развитие рынка компьютерных систем, способных обеспечить эффективное управление организацией, связано с системами двух классов:
· системы, ориентированные на автоматизацию отдельных функций управления;
· интегрированные системы управления.
На рынке представлены как российские, так и зарубежные системы различного назначения. Если говорить о реальном секторе экономики, то для него на рынке имеются системы двух классов:
· финансово – управленческие системы;
· производственные системы.
Финансово – управленческие системы: локальные и малые интегрированные. Применяются для ведения учета по одному или нескольким направлениям (бухгалтерия, сбыт, склады, учет кадров и т.д.), управление финансовыми потоками.
Свойства финансово – управленческих систем:
· универсальность;
· небольшой цикл внедрения;
· имеются коробочные варианты;
· гибкость в адаптации к нуждам конкретного предприятия;
· способность работать на ПК в обычных сетях передачи данных NovellNetware или WindowsNT;
· использование простых средств разработки (Clipper , FoxPro , dBase , Paradox);
· снижение уровня эффективности при работе на сложных конфигурациях сети и при увеличении объемов обрабатываемых данных;
Производственные системы: средние и крупные интегрированные. Применяются для управления и планирование производственного процесса. Учетные функции глубоко проработаны и выполняют вспомогательную роль.
Свойства производственных систем:
· более сложны в установке (цикл внедрения от 6-9 месяцев до 1-2 и более лет);
· часто ориентированы на одну или несколько отраслей и /или типов производства;
· специализация отражается в наборе функций системы;
· наличие встроенных бизнес - моделей производства;
· производственные системы по многим параметрам значительно более жесткие, чем финансово управленческие;
· основными механизмами управления являются планирование и оптимальное управление производственным процессом;
· охватывают планирование, закупки, производство, запасы, продажи, финансовые потоки и многие другие аспекты;
· при увеличении сложности и широты охвата функций предприятия системой возрастают требования к технической инфраструктуре и компьютерной платформе;
· разработаны с помощью промышленных баз данных;
· в большинстве случаев используется технология «клиент-сервер».
Классификация рынка ИС представлена в таблице 1.3.
Таблица 1.3.
Представители групп | Локальные системы | Малые интегрированные системы | Средне интегрированные системы | Крупные интегрированные системы |
- Искра - Звезда - АГЗС-АСИ - Gazkit - и т.д. | - Concorde XAL - Exact - NS-2000 - Platinum - PRO/MIS - Scala - SunSystems - БОСС-Корпорация - Галактика/ Парус - Эталон | - JD Edwards (Robertson & Blums) - MFG-Pro (QAD/BMS) - SyteLine (COKAП/SYMIX) | - SAP/R3 (SAP AG) - Baan (Baan) - BPCS (ITS/SSA) - Oracle Applications (Oracle) |
Проектная часть
Описание экранных форм
Приложение на АГЗС
При входе в программу оператору необходимо выбрать свою фамилию и ввести пароль (см. рисунок 2.7.).
Рис. 2.7. Форма авторизация
При успешно пройденной авторизации открывается главная форма Продажа (см. рисунок 2.8.), с которой оператор работает всю смену. Здесь фиксируются факты продажи товара. Из списка выбираются номенклатура и контрагент. Расчет можно осуществлять как по количеству, так и по сумме. Для сохранения операции нужно нажать на кнопку «Сохранить запись», для удаления нужно нажать «Удалить запись», для добавления новой – нажать кнопку «Добавить запись» Данную форму невозможно не закрыть, не свернуть, порка не будет нажата кнопка «Закрыть смену».
Рис. 2.8. Форма Продажа
Для фиксации прохода товара используется форма Приход (см. рисунок 2.9.). Дата ставится автоматически, необходимо лишь выбрать вид товара и вписать количество
Рис. 2.9. Форма Приход
Существует 3 справочника – Сотрудники (см. рисунок 2.10.), Номенклатура (см. рисунок 2.11.) и Контрагенты (см. рисунок 2.12.). В них хранится краткая справочная информация, доступная только для чтения.
Рис. 2.10. Форма Сотрудники
Рис. 2.11. Форма Номенклатура
Рис. 2.12. Форма Контрагенты
Для формирования отчета оператору необходимо выбрать или номер смены(см. рисунок 2.13.) или временной период (см. рисунок 2.17. и 2.19.).
Рис. 2.13. Форма выбор смены
Отчет Реализация газа (см. рисунок 2.14.) показывает приход и расход газа за смену.
Отчет Сменный отчет (см. рисунок 2.15.) дает подробную детализацию: сколько и кому товара было продано за смену и, какая выручка.
Отчет о Состоянии склада (см. рисунок 2.16.) показывает сколько товара в наличии находится и на какую сумму.
Рис. 2.14. Отчет реализация газа
Рис. 2.15. Сменный отчет
Рис. 2.16. Отчет о состоянии склада
Рис. 2.17. Форма выбора периода
Отчет с разбивкой по клиентам (см. рисунок 2.18.) показывает какой контрагент сколько раз заправлялся и на какую сумму.
Отчет Продажа Операторами (см. рисунок 2.20.) можно формировать по трем категориям: по газу, по баллонам и техническому освидетельству. Он показывает кокой оператор в какие дни работал и что продавал.
Рис. 2.18. Отчет реализация газа с разбивкой по клиентам
Рис. 2.19. Форма продажа операторами
При закрытии смены или в процессе работы, когда запасов газа остается меньше, чем среднее потребление выводится окно управления запасами (см. рисунок 2.21.)
Рис. 2.21. Окно управления запасами
Рис. 2.20. Отчет продажа операторами
Приложение в главном офисе
Главная форма (см. рисунок 2.21.)состоит из пяти частей. Для удобства работы все необходимые данные расположены на экране. Поэтому не приходится подолгу искать нужную информацию. Здесь отображается информация о контрагентах, номенклатуре, должниках-контрагентах и на диаграмме наглядно показываются остатки всех АГЗС.
В форму Оплаты контрагентов (см. рисунок 2.22.) заносятся данные о перечислении средств контрагентами на счет предприятия.
Рис. 2.21. Форма Главная
Рис. 2.22. Форма оплаты контрагентов
Для формирования Оборотно-сальдовой ведомости (см. рисунок 2.24.) необходимо сначала выбрать дату формирования (см. рисунок 2.23.). В этом отчете отображается на какую суммы каждый контрагент заправился в течение месяца, какую сумму внес на счет предприятия и имеет ли долги.
Рис. 2.23. Форма выбор месяца Оборотно-сальдовая ведомость
Рис. 2.24. Отчет ОСВ
Можно посмотреть сколько товара в любой момент времени (см. рисунок 2.25.) находится на АГЗС. Как в форме отчета (см. рисунок 2.26.), так и в виде диаграммы (см. рисунок 2.27.).
Рис. 2.25. Форма выбор периода
Рис. 2.26. Отчет остатки номенклатуры
Рис. 2.27. Отчет диаграмма по остаткам номенклатуры
Отчет Должники (см. рисунок 2.29.) показывает контрагентов, которые потребляли товары в кредит. Отчет можно составить на любую дату (см. рисунок 2.28.).
Рис. 2.28. Форма выбор даты по должникам
Рис. 2.29. Отчет должники
Таблица 3.1
№ этапа | ai | bi | mi | Ti | Di |
1 | 10 | 21 | 16 | 16 | 20,17 |
2 | 7 | 14 | 10 | 10 | 8,17 |
3 | 30 | 50 | 40 | 40 | 66,67 |
4 | 10 | 30 | 20 | 20 | 66,67 |
5 | 20 | 35 | 25 | 26 | 37,5 |
Таблица 3.2
Наименование этапа | Дата начала | Длительность, дней |
1. Подготовительный (подбор, изучение литературы, анализ состояния вопроса, составление технического задания) | 26.01.2009 | 16 |
2. Теоретическая разработка (проектирование схем, разработка теоретических обоснований) | 12.02.2009 | 10 |
3. Проектирование и выполнение технического задания на ЭВМ | 25.02.2009 | 40 |
4. Консультации с руководителем проекта | 01.02.2009 | 20 |
5. Машинные расчёты и отчёт в электронном виде | 12.02.2009 | 25 |
Рабочий день специалистов 8 часов. Тарифная ставка инженера-исследователя Ср= 85 р/час, Ср = 85*8 = 680 р/день. Тарифная ставка инженера-руководителя Ср= 100 р/час, Ср = 100*8 = 800 р/день.
Количество рабочих дней в планируемом году - D =365, число смен работы ЭВМ n=2, средняя продолжительность смены 12 часов, планируемый процент потерь времени на профилактику и ремонт Кп = 5%.
Действительный годовой фонд времени работы ЭВМ:
=365*2*12*(1-0,01*0,05)=8756 ч/год
Начальная стоимость ЭВМ, принтера и модема P = 38000 руб. Затраты на текущий ремонт
Срем = 38000*5%=1900руб
Затраты на эксплуатационные материалы, необходимые для нормального функционирования технических средств (бумага, картридж принтер и др) Смат = 5400 руб/год.
Стоимость 1 кВт/ч электроэнергии Цэ = 2,20 р, мощность ЭВМ в кВт/ч электроэнергии М =2 кВт/ч.
Расчет амортизационных отчислений производится по формуле:
р/год
Затраты на электроэнергию можно рассчитать по следующей формуле:
.р/год
Годовые эксплуатационные расходы:
Сэкс = Срем + Смат + Сэл + Сам =1900+5400+38526+7600=53426 руб,
Стоимость машинного часа:
руб.
Расчет затрат НИР:
1. Затраты на теоретическую часть и работу с литературой:
Зт = Ср * Тт*1,262 (3.4)
где Ср - тарифная ставка инженера-исследователя;
Тт - время, затраченное на работу с литературой и теоретический
анализ;
Зт = 680*16*1,262 = 13731 руб
2. Затраты на теоретические разработки:
Зрс = Ср * Тр*1,262 (3.5)
где Тр - время, затраченное на теоретические разработки.
Зрс = 680*10*1,262 = 8581,6 руб
3. Затраты на проектирование и выполнение технического задания на ЭВМ
Зп = Ср* Тп*1,262 (3.6)
где Тп - время, затраченное на проектирование и выполнение технического задания на ЭВМ.
Зп = 680* 40*1,262 = 34326 руб
4. Затраты на оплату машинного времени
Зм = См * Тм (3.7)
где См - стоимость одного часа машинного времени;
Тм - время использования машины.
Зм = 6,1*24*365=53436 р/год
5. Затраты на консультацию с руководителем
Зкп = Скр * Ткп*1,262 (3.8)
где Скр - тарифная ставка ведущего инженера;
Ткп – время консультаций с руководителем.
Зкп = 800*20*1,262 = 20192 руб
6. Полные затраты при использовании ЭВМ для расчетов и составления отчета
Зсум = Зт + Зтр + Зп + Зм + Зкп (3.9)
Зсум = 13731+8581,6+34326+53436+20192 = 439176,6
Значение составляющих затрат заносим в итоговую таблицу 3.3, где в последнем столбце указано их относительное значение в процентах к полным затратам.
Консультации с руководителем проходят на протяжении всего дипломного проектирования. Количество дней и затрат на консультацию с руководителем равномерно распределим на все этапы проведения дипломного проекта. Следовательно, количество дней каждого этапа увеличится на 5 дней (20/4=5) и затраты каждого из этапов увеличатся на 32566,65 руб (130266,6/4 = 32566,65).
Таблица 3.3
Наименование затрат
Обозначение
Сумма
График основных затрат этапов проведения дипломного проекта представлен на рис. 3.1.
Рис. 3.1. График затрат на проведение дипломного проекта
3.2 Определение капитальных затрат для нового варианта.
Проведем анализ расходов по введению прогнозирования и планирования на предприятие. Определим капитальные затраты, т.е. те вложения которые производятся один раз при введении нового варианта. К таким затратам будут относиться затраты на программное обеспечение, на настойку соответствующего программного обеспечения и на обучение персонала.
Таблица 3.4. Капитальные затраты
Капитальные затраты | Стоимость, руб |
Стоимость программного обеспечения | 45 000 |
Настройка ПО | 6000 |
Обучение персонала | 5000 |
Итого | 56000 |
3.3 Определение эксплуатационных затрат для нового варианта
В состав текущих затрат на эксплуатацию электрооборудования входят:
1. Годовые затраты на обслуживание и текущий ремонт Сро;
2. Годовые амортизационные отчисления Са.
Таблица 3.5. Постоянные затраты
Затраты, руб | Периоды | ||||
1 год | 2 год | 3 год | 4 год | 5 год | |
Затраты на обслуживание и текущий ремонт | 1900 | 1900 | 1900 | 1900 | 1900 |
Амортизационные отчисления | 7600 | 7600 | 7600 | 7600 | 7600 |
Итого | 9500 | 9500 | 9500 | 9500 | 9500 |
Экономия от предлагаемого варианта представлена в таблице 3.6.
Таблица 3.6. Экономия
Экономия | Периоды | ||||
1 год | 2 год | 3 год | 4 год | 5 год | |
Автоматизация учета товаров, руб | 93600 | 93600 | 93600 | 93600 | 93600 |
На данный момент при отсутствии информационной системы учета товаров работа по обработке информации ведется вручную. То есть каждую смену оператор должен заполнять множество бумажных журналов, на что тратится 2 часа. Тарифная ставка оператора Ср= 65 р/час. Общая сумма затрат предприятия на обработку документов в месяц составит:
65(руб)*2(часа)*2(смены)*30(дни)=7800 руб/месяц.
В год, таким образом, эта сумма составит: 7800*12=93600 руб.
Таблица 3.7
| Периоды | ||||
1 год | 2 год | 3 год | 4 год | 5 год | |
Инвестиции | 99918 | 0 | 0 | 0 | 0 |
Экономия | 93600 | 93600 | 93600 | 93600 | 93600 |
Расходы | 9500 | 9500 | 9500 | 9500 | 9500 |
1/(1+α)t | 0,99773 | 0,99547 | 0,99321 | 0,99096 | 0,98871 |
Текущий эффект | -15818 | 84100 | 84100 | 84100 | 84100 |
Дисконтированный эффект | -15782 | 83719 | 83529 | 83339,736 | 83150,5 |
Сальдо, нарастающим итогом (ЧДД нарастающим итогом) | -62476 | 21243 | 104772 | 188111,724 | 271262 |
Из рис. 3.2. видно, что срок окупаемости проекта равен 1 год и 7 месяцев. Чистый дисконтированный доход к пятому году реализации проекта составит 271262 рубля.
Рис 3.2. График окупаемости проекта
Таблица 4.1
Продукт | Результат | Оценка |
Comodo Firewall Pro 2.4.16.174 | 9475 | Отлично |
Jetico Personal Firewall 2.0.0.16 beta | 9125 | Отлично |
ZoneAlarm PRO 7.0.302.000 | 8850 | Очень хорошо |
Kaspersky Internet Security 6.0.2.614 | 7950 | Очень хорошо |
Privatefirewall 5.0.8.11 | 7625 | Очень хорошо |
Trend Micro PC-cillin Internet Security 2007 | 7500 | Очень хорошо |
F-Secure Internet Security 2007 7.01.128 | 6625 | Хорошо |
Outpost Firewall PRO 4.0 (1007.591.145) | 6550 | Хорошо |
Lavasoft Personal Firewall 1.0.543.5722 (433) | 6500 | Хорошо |
BlackICE PC Protection 3.6.cpv | 5750 | Удовлетворительно |
Sunbelt Kerio Personal Firewall 4.3.268 | 4825 | Удовлетворительно |
Look 'n' Stop 2.05p2 | 4800 | Удовлетворительно |
Norton Personal Firewall 2006 9.1.0.33 | 4600 | Удовлетворительно |
Safety.Net 3.61.0002 | 4000 | Удовлетворительно |
Avira Premium Security Suite 7 build 98 | 2450 | Неудовлетворительно |
Sygate Personal Firewall 5.6.2808 | 2350 | Неудовлетворительно |
McAfee Internet Security Suite 2006 8.0 | 2325 | Неудовлетворительно |
CA Personal Firewall 2007 3.0.0.196 | 1000 | Очень плохо |
BitDefender Internet Security 10.108 | 750 | Очень плохо |
Panda Antivirus + Firewall 2007 6.00.00 | 650 | Очень плохо |
AVG Anti-Virus plus Firewall 7.5.431 | 500 | Очень плохо |
Ashampoo FireWall Pro 1.14 | 500 | Очень плохо |
Filseclab Personal Firewall 3.0.0.8686 | 500 | Очень плохо |
Windows Firewall XP SP2 | 0 | Очень плохо |
Из результатов тестирования видно, что одним из лучших сетевых экранов является Comodo Firewall Pro.
Так согласно классификации средств криптографической защиты информационных ресурсов в корпоративных они делятся на:
1. Криптосистемы с одним ключом, их часто называют традиционной, симметричной или с одним ключом. Пользователь создает открытое сообщение, элементами которого являются символы конечного алфавита. Для шифрования открытого сообщения генерируется ключ шифрования. С помощью алгоритма шифрования формируется шифрованное сообщение
Приведенная модель предусматривает, что ключ шифрования генерируется там же, где само сообщение. Однако, возможно и другое решение создания ключа – ключ шифрования создается третьей стороной (центром распределения ключей), которой доверяют оба пользователя. В данном случае за доставку ключа обоим пользователям ответственность несет третья сторона. Вообще говоря, данное решение противоречит самой сущности криптографии – обеспечение секретности передаваемой информации пользователей.
Криптосистемы с одним ключом используют принципы подстановки (замены), перестановки (транспозиции) и композиции. При подстановке отдельные символы открытого сообщения заменяются другими символами. Шифрование с применением принципа перестановки подразумевает изменение порядка следования символов в открытом сообщении. С целью повышения надежности шифрования шифрованное сообщение, полученное применением некоторого шифра, может быть еще раз зашифровано с помощью другого шифра. Говорят, что в данном случае применен композиционный подход. Следовательно, симметричные криптосистемы (с одним ключом) можно классифицировать на системы, которые используют шифры подстановки, перестановки и композиции.
2. Криптосистема с открытым ключом. Она имеет место только еесли пользователи при шифровании и дешифровании используют разные ключи KО и KЗ. Эту криптосистему называют асимметричной, с двумя ключами или с открытым ключом.
Получатель сообщения (пользователь 2) генерирует связанную пару ключей:
KО – открытый ключ, который публично доступен и, таким образом, оказывается доступным отправителю сообщения (пользователь 1);
Kз – секретный, личный ключ, который остается известным только получателю сообщения (пользователь 1).
Пользователь 1, имея ключ шифрования KО, с помощью определенного алгоритма шифрования формирует шифрованный текст.
Пользователь 2, владея секретным ключом Kс, имеет возможность выполнить обратное действие.
В этом случае пользователь 1 готовит сообщение пользователю 2 и перед отправлением шифрует это сообщение с помощью личного ключа Kз. Пользователь 2 может дешифрировать это сообщение, используя открытый ключ Kо. Так как, сообщение было зашифровано личным ключом отправителя, то оно может выступать в качестве цифровой подписи. Кроме того, в данном случае невозможно изменить сообщение без доступа к личному ключу пользователя 1, поэтому сообщение решает так же задачи идентификации отправителя и целостности данных.
Напоследок хотелось бы сказать, что посредством установки криптографических средств защиты можно достаточно надежно защитить рабочее место сотрудника организации, который непосредственно работает с информацией, имеющей особое значение для существования этой организации, от несанкционированного доступа.
Защита данных в Access
Средства защиты БД, реализованные в Access, позволяют предотвратить умышленные или случайные просмотр, изменение и удаление информации лицами, которые не имеют ответствующих прав доступа. Эти средства особенно важны при функционировании БД в сети.
В Access предусмотрены различные уровни защиты данных и администрирования доступа к ним. Возможности Access позволяют обеспечить безопасность, как самого приложения, так и файла БД. Простейшим средством защиты БД от несанкционированного доступа является пароль.
После того как пароль установлен, при каждом открытии БД будет появляться диалоговое окно, в которое требуется ввести пароль. Пользователи смогут открыть БД, только после ввода правильного пароля. Этот способ достаточно надежен, поскольку Access шифрует пароль, так что к нему нет прямого доступа при чтении файла БД. Недостаток такого способа защиты в том, что он применяется только при открытии БД. После открытия БД все объекты становятся доступными для пользователя (если не определена защита на уровне пользователей). Для БД, которая совместно используется небольшой группой пользователей или на автономном компьютере, установка пароля обычно оказывается достаточной.
Усовершенствовать защиту позволяют средства поддержки рабочих групп, ведения учетных (регистрационных) записей, задания прав владения и прав доступа. С помощью средств защиты можно указать, какие операции по обработке объектов БД разрешается выполнять пользователю или группе пользователей. О каждом пользователе или группе ведутся учетные записи с указанием прав доступа.
Защита данных в SQL Server
SQL Server 2005 имеет улучшенные в модели безопасности платформы базы данных, с намерением предоставить более точный и гибкий контроль для обеспечения безопасности данных. Значительные вложения были сделаны в большое количество функций для обеспечения высокого уровня безопасности данных вашего предприятия, включая:
· Применение политик для паролей учётных записей SQL Server в области аутентификации
· Обеспечение большей модульности дл указания разрешений на различных уровнях в области авторизации
· Разделение владельца и схемы в области управления безопасностью.
Авторизация
Новая модель безопасности SQL Server 2005 позволяет администраторам управлять разрешениями на модульном уровне и в указанной области, делая управление разрешениями проще, а также обеспечивает выполнения принципа наименьших привилегий. SQL Server 2005 позволяет указать контекст, в котором будут выполняться операторы модуля. Эта функция также работает как отличный механизм для модульного управления разрешениями.
Аутентификация
Кластеры SQL Server 2005 поддерживают аутентификацию Kerberos для виртуальных серверов SQL Server 2005. Администраторы могут указать политики типа Windows для стандартных учётных записей, так что единообразная политика применяется ко всем учётным записям домена.
Встроенное шифрование
SQL Server 2005 поддерживает шифрование внутри базы данных, полностью интегрированное с инфраструктурой управления ключами. По умолчанию, коммуникации между клиентом и сервером шифруются. Для того, чтобы концентрировать гарантии безопасности, может быть определена серверная политика, которая будет отвергать незашифрованные коммуникации.
SQL и Trustworthy Computing
Инициатива Trustworthy Computing описывает структуру, которая определяет шаги, необходимые для поддержки безопасных вычислений, также как и меры, которые помогают развертывать и поддерживать безопасную среду. Эти шаги помогают защитить конфиденциальность, целостность и доступность данных и систем в каждой фазе жизни программного продукта - от разработки до поставки и сопровождения. Для поддержки четырёх принципов инициативы Trustworthy Computing, Microsoft и команда SQL Server предприняли следующие шаги:
· Безопасный изначально. Команда разработчиков SQL Server провела несколько аудитов в области безопасности и потратила более двух месяцев на изучение компонентов SQL Server и взаимодействия между ними. Для каждой потенциальной угрозы безопасности команда провела анализ для оценки проблемы и выполнила дополнительную проектную и тестовую работу для устранения потенциальных угроз безопасности. В результате этих усилий SQL Server 2005 содержит множество новых функций безопасности сервера.
· Безопасный по умолчанию. После установки SQL Server 2005 выбирает правильный набор конфигурационных значений для всех установочных опций, гарантируя, что после установки новой системы она будет в безопасном состоянии по умолчанию.
· Безопасный в развёртывании. Microsoft подготовила материалы, помогающие организациям развёртывать SQL Server, используя правильные учётные записи и полностью понимать шаги и разрешения, требуемые для этого. Инструменты развёртывания SQL Server предоставляют информацию, необходимую для понимания решений, принимаемых во время развертывания. Обновления безопасности легко найти и установить - и, если выбрать соответствующую опцию, эти обновления будут устанавливаться автоматически. Существуют инструменты для оценки и управления рисками безопасности в рамках организации.
·
Заключение
Квалификационная работа была разработана в соответствии с техническим заданием. При разработке была проанализирована работа отдела материально-технического снабжения и АГЗС «Северного объединения по эксплуатации газового хозяйства», в результате которого была поставлена задача разработки информационной системы учета товаров на примере АГЗС «Северного объединения по эксплуатации газового хозяйства» и выбраны комплекс технических средств, пакет программ, посредствам которых была реализована данная задача.
Для достижения этой задачи были проведены: сбор и предварительная обработка необходимых статистических и технико-экономических данных, связанных с деятельностью предприятия, сбор и анализ информации по теме дипломного проекта, также был проведён обзор рынка существующих информационных систем, решающих задачи автоматизации предприятия.
Результатом данной квалификационной работы является разработка информационной системы учета товаров на примере АГЗС «Северного объединения по эксплуатации газового хозяйства». В процессе выполнения работы были составлены алгоритмы, необходимые для работы системы, был осуществлен выбор необходимых технических средств.
В процессе разработки программы выполнены требования к функциональным характеристикам, условия эксплуатации и требования к операционной и программной совместимости. Разработка информационной системы учета товаров на примере АГЗС «Северного объединения по эксплуатации газового хозяйства» и ее внедрение позволяет связать информационные потоки АГЗС и отдела ОМТС главного офиса, сократить затраты рабочего времени оператора АГЗС, затрачиваемого на заполнение бумажной отчетности, повысить точность и оперативность обмена информацией между АГЗС и главным офисом.
В разделе «Экономическая эффективность» была рассчитана оптимальность проекта.
В разделе «информационная безопасность» были рассмотрены системы защиты информации, представленные на рынке ИТ, и произведен их анализ.
Таким образом, исходя из вышесказанного, можно сделать вывод о том, что информационная система, разработанная в ходе проведения проектной части может использоваться с целью облегчения учета товаров на любой АГЗС.
Приложение 1
Программный код:
Клиентское приложение на АГЗС:
Главный модуль :
'Dim Nempl As Integer
'Public Function Ndep_()
' MsgBox (Ndep)
' Ndep_ = Ndep
'End Function
' Возвращает название серверной базы
Public Function SDB()
SDB = rz("select Сервер from Константы") '"[\\C:\gaz\gazserver.mdb]."
End Function
' Возвращает код этой заправки
Public Function KZ()
KZ = rz("select КодЗаправки from Константы")
End Function
' Посылает на сервер остатки
Public Function SendOstatki()
DoCmd.RunSQL "insert into " & SDB & "Остатки(КодЗаправки, КодНоменклатуры, Количество, Дата) select ЗапросОстатки.K1,ЗапросОстатки.N,ЗапросОстатки.s,ЗапросОстатки.d from ЗапросОстатки"
End Function
' Посылает на сервер обороты
Public Function SendOboroti()
' Записываем обороты в локальную таблицу
DoCmd.RunSQL "INSERT INTO Обороты ( Дата, КодНоменклатуры, КодКонтрагента, Количество, Сумма, КодЗаправки )" & _
"SELECT DateValue(Продажа.Дата) AS Выражение1, Продажа.КодНоменклатуры, Продажа.КодКонтрагента, Sum(Продажа.Количество) AS [Sum-Количество], Sum(Продажа.Стоимость) AS [Sum-Стоимость], Константы.КодЗаправки " & _
"FROM Продажа, Константы " & _
"WHERE (((Продажа.Дата)> all(select max(Начало) from Смены)))" & _
"GROUP BY DateValue(Продажа.Дата), Продажа.КодНоменклатуры, Продажа.КодКонтрагента, Константы.КодЗаправки"
' Записываем обороты в таблицу сервера
DoCmd.RunSQL "INSERT INTO " & SDB() & "Обороты ( Дата, КодНоменклатуры, КодКонтрагента, Количество, Сумма, КодЗаправки )" & _
"SELECT DateValue(Продажа.Дата) AS Выражение1, Продажа.КодНоменклатуры, Продажа.КодКонтрагента, Sum(Продажа.Количество) AS [Sum-Количество], Sum(Продажа.Стоимость) AS [Sum-Стоимость], Константы.КодЗаправки " & _
"FROM Продажа, Константы " & _
"WHERE (((Продажа.Дата)> all(select max(Начало) from Смены)))" & _
"GROUP BY DateValue(Продажа.Дата), Продажа.КодНоменклатуры, Продажа.КодКонтрагента, Константы.КодЗаправки"
' Записываем обороты по клиенту на сервер
DoCmd.RunSQL "INSERT INTO " & SDB() & "РасчетыКонтрагенты ( Дата, КодКонтрагента, Сумма, КодРайона )" & _
"SELECT DateValue(Продажа.Дата) AS Выражение1, Продажа.КодКонтрагента, Sum(Продажа.Стоимость)*(-1) AS [Sum-Стоимость], Константы.КодЗаправки " & _
"FROM Продажа, Константы " & _
"WHERE (((Продажа.Дата)> all(select max(Начало) from Смены)))" & _
"GROUP BY DateValue(Продажа.Дата), Продажа.КодКонтрагента, Константы.КодЗаправки"
End Function
' Посылает на сервер все обороты
Public Function SendAllOboroti()
' Удаляем все обороты из локальной таблицы
DoCmd.RunSQL "Delete from Обороты"
' Записываем все обороты в локальную таблицу
DoCmd.RunSQL "INSERT INTO Обороты ( Дата, КодНоменклатуры, КодКонтрагента, Количество, Сумма, КодЗаправки )" & _
"SELECT DateValue(Продажа.Дата) AS Выражение1, Продажа.КодНоменклатуры, Продажа.КодКонтрагента, Sum(Продажа.Количество) AS [Sum-Количество], Sum(Продажа.Стоимость) AS [Sum-Стоимость], Константы.КодЗаправки " & _
"FROM Продажа , Константы " & _
"GROUP BY DateValue(Продажа.Дата), Продажа.КодНоменклатуры, Продажа.КодКонтрагента, Константы.КодЗаправки"
' Удаляем все обороты из таблицы сервера по этой заправке
DoCmd.RunSQL "Delete * from " & SDB() & "Обороты where КодЗаправки=" & KZ()
' Записываем все обороты в таблицу сервера
DoCmd.RunSQL "INSERT INTO " & SDB() & "Обороты ( Дата, КодНоменклатуры, КодКонтрагента, Количество, Сумма, КодЗаправки )" & _
"SELECT DateValue(Продажа.Дата) AS Выражение1, Продажа.КодНоменклатуры, Продажа.КодКонтрагента, Sum(Продажа.Количество) AS [Sum-Количество], Sum(Продажа.Стоимость) AS [Sum-Стоимость], Константы.КодЗаправки " & _
"FROM Продажа, Константы " & _
"GROUP BY DateValue(Продажа.Дата), Продажа.КодНоменклатуры, Продажа.КодКонтрагента, Константы.КодЗаправки"
End Function
' Универсальная функция: возращает результат работы запроса (первое поле, первая запись)
Public Function rz(strSQL As String)
Dim rstData As DAO.Recordset
Set db = CurrentDb
' открываем рекордсет
Set rstData = db.OpenRecordset(strSQL)
' определяем количество записей в рекордсете
rstData.MoveLast ' перемещение в конец рекордсета
rstData.MoveFirst ' перемещение в начало рекордсета
rz = rstData.Fields(0)
rstData.Close
End Function
'Получает справочники номенклатура и контрагенты
Public Function GetInfo()
' Удаляем всю номенклатуру
DoCmd.RunSQL "Delete from Номенклатура"
' Записываем номенклатуру
DoCmd.RunSQL "INSERT INTO Номенклатура Select * from " & SDB() & "Номенклатура"
' Удаляем всех Контрагентов
DoCmd.RunSQL "Delete from Контрагенты"
' Записываем Контрагентов
DoCmd.RunSQL "INSERT INTO Контрагенты Select * from " & SDB() & "Контрагенты"
End Function
'Проверяет необходимость заказа газа
Public Function Proverka()
Dim pr As Variant
' вычисляем продажи газа в среднем за посленюю неделю
pr = rz("SELECT Sum(Продажа.Количество)/7 AS [SumK] FROM Продажа WHERE (((Продажа.Дата)>=Date()-7)) and (((Продажа.КодНоменклатуры)=1))")
' если продаж нет, то присваиваем 0
If (IsNull(pr)) Then
pr = 0
End If
' вычисляем остатки газа
Ost = rz(" SELECT sum(s1) FROM (SELECT sum(Приход.Количество) as s1 FROM Приход WHERE (((Приход.КодНоменклатуры)=1)) union" & _
" SELECT sum(Количество)*-1 as s1 FROM Продажа WHERE (((КодНоменклатуры)=1)) ) AS [Alias1]")
' формируем строку сообщения
Str1 = "Продажи за день в среднем: " & Round(pr, 2) & vbCrLf & "Остаток на данный момент: " & Round(Ost, 2) & vbCrLf
' если остатки меньше средей продажи то выдаем предупреждение
If (pr > Ost) Then
MsgBox Str1 & "Внимание! Необходимо пополнить запасы"
Else
MsgBox Str1 & "У Вас достаточно запасов"
End If
End Function
Форма авторизация
Нажатие кнопки вход
Private Sub Кнопка4_Click()
Dim db As Database
Dim rstData As DAO.Recordset
Dim strSQL As String
' Находим имя и пароль в таблице
x = DLookup("КодСотрудника", "Сотрудники", "(Фамилия=forms![Авторизация]!Поле1)and(Пароль=forms![Авторизация]!Поле2)")
If (x > 0) Then
Nempl = x
DoCmd.OpenForm "Продажа", , , ""
DoCmd.GoToRecord , , acNewRec
Forms!Продажа!КодСотрудника.DefaultValue = x
' Добавляем новую смену
DoCmd.RunSQL "insert into смены(КодСотрудника,Начало) values(" & x & ",'" & Now() & "')"
Set db = CurrentDb
' задаем текст запроса
strSQL = "SELECT max(КодСмены) from Смены"
' открываем рекордсет
Set rstData = db.OpenRecordset(strSQL)
' определяем количество записей в рекордсете
rstData.MoveLast
rstData.MoveFirst
y = rstData.Fields(0)
rstData.Close
Forms!Продажа!КодСмены.DefaultValue = y
DoCmd.Close acForm, "Авторизация", acSaveYes
Else
MsgBox ("Ошибка авторизации!Повторите ввод имени и пароля")
End If
End Sub
Форма календарь
Option Compare Database
' переменная для ссылки на активное поле ввода
Private objActive As Control
Private Sub Form_Load()
' сохранить ссылку на активное поле
Set objActive = Screen.ActiveControl
End Sub
Private Sub Form_Unload(Cancel As Integer)
' при выгрузке форму уничтожить ссылку
Set objActive = Nothing
End Sub
Private Sub Кнопка1_Click()
If Not objActive Is Nothing Then
' передать значение указанному полю ввода
objActive = Calendar0
End If
DoCmd.Close
End Sub
Форма материальный отчет
Option Compare Database
Private Sub Кнопка7_Click()
On Error GoTo Err_Кнопка7_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(67) & ChrW(1056) & ChrW(1072) & ChrW(1079) & ChrW(1073) & ChrW(1080) & ChrW(1074) & ChrW(1082) & ChrW(1086) & ChrW(1081) & ChrW(1055) & ChrW(1086) & ChrW(1050) & ChrW(1083) & ChrW(1080) & ChrW(1077) & ChrW(1085) & ChrW(1090) & ChrW(1072) & ChrW(1084)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка7_Click:
Exit Sub
Err_Кнопка7_Click:
MsgBox Err.Description
Resume Exit_Кнопка7_Click
End Sub
Private Sub Кнопка12_Click()
On Error GoTo Err_Кнопка12_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(1055) & ChrW(1088) & ChrW(1086) & ChrW(1076) & ChrW(1072) & ChrW(1078) & ChrW(1072) & ChrW(1054) & ChrW(1087) & ChrW(1077) & ChrW(1088) & ChrW(1072) & ChrW(1090) & ChrW(1086) & ChrW(1088) & ChrW(1072) & ChrW(1084) & ChrW(1080)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка12_Click:
Exit Sub
Err_Кнопка12_Click:
MsgBox Err.Description
Resume Exit_Кнопка12_Click
End Sub
Private Sub Кнопка10_Click()
' сделать активным поле, в которое нужно ввести дату
Поле1.SetFocus
' открыть форму ввода даты
DoCmd.OpenForm "Календарь"
End Sub
Private Sub Кнопка13_Click()
On Error GoTo Err_Кнопка13_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(1052) & ChrW(1072) & ChrW(1090) & ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка13_Click:
Exit Sub
Err_Кнопка13_Click:
MsgBox Err.Description
Resume Exit_Кнопка13_Click
End Sub
Private Sub Кнопка14_Click()
' сделать активным поле, в которое нужно ввести дату
Поле2.SetFocus
' открыть форму ввода даты
DoCmd.OpenForm "Календарь"
End Sub
Форма продажа
Option Compare Database
' Закрытие смены и отправка информации на сервер
Private Sub Кнопка16_Click()
DoCmd.RunSQL "Update Смены set Окончание = '" & Now() & "' where КодСмены = (select max(КодСмены) from Смены)"
' Посылаем остатки на этот день
Module1.SendOstatki
' Записываем и посылаем обороты
Module1.SendOboroti
' Закрываем текущую форму
Proverka ' проверяем запасы
DoCmd.Close acForm, "Продажа", acSaveYes
End Sub
Private Sub Кнопка20_Click()
Стоимость = [Количество] * [Поле18]
End Sub
Private Sub Кнопка26_Click()
On Error GoTo Err_Кнопка26_Click
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Exit_Кнопка26_Click:
Exit Sub
Err_Кнопка26_Click:
MsgBox Err.Description
Resume Exit_Кнопка26_Click
End Sub
Private Sub Кнопка38_Click()
[Количество] = [Стоимость] / [Поле18]
End Sub
' устанавливает поле Безнал в соответствии со значением контрагента
Private Sub ПолеСоСписком14_AfterUpdate()
[Безнал] = [КодКонтрагента] <> 1
End Sub
Private Sub Кнопка39_Click()
On Error GoTo Err_Кнопка39_Click
DoCmd.GoToRecord , , acNewRec
Exit_Кнопка39_Click:
Exit Sub
Err_Кнопка39_Click:
MsgBox Err.Description
Resume Exit_Кнопка39_Click
End Sub
Private Sub Кнопка40_Click()
On Error GoTo Err_Кнопка40_Click
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
Exit_Кнопка40_Click:
Exit Sub
Err_Кнопка40_Click:
MsgBox Err.Description
Resume Exit_Кнопка40_Click
End Sub
Форма Продажа операторами
Option Compare Database
Private Sub Кнопка7_Click()
On Error GoTo Err_Кнопка7_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(67) & ChrW(1056) & ChrW(1072) & ChrW(1079) & ChrW(1073) & ChrW(1080) & ChrW(1074) & ChrW(1082) & ChrW(1086) & ChrW(1081) & ChrW(1055) & ChrW(1086) & ChrW(1050) & ChrW(1083) & ChrW(1080) & ChrW(1077) & ChrW(1085) & ChrW(1090) & ChrW(1072) & ChrW(1084)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка7_Click:
Exit Sub
Err_Кнопка7_Click:
MsgBox Err.Description
Resume Exit_Кнопка7_Click
End Sub
Private Sub Кнопка10_Click()
' сделать активным поле, в которое нужно ввести дату
Поле1.SetFocus
' открыть форму ввода даты
DoCmd.OpenForm "Календарь"
End Sub
Private Sub Кнопка12_Click()
On Error GoTo Err_Кнопка12_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(1055) & ChrW(1088) & ChrW(1086) & ChrW(1076) & ChrW(1072) & ChrW(1078) & ChrW(1072) & ChrW(1054) & ChrW(1087) & ChrW(1077) & ChrW(1088) & ChrW(1072) & ChrW(1090) & ChrW(1086) & ChrW(1088) & ChrW(1072) & ChrW(1084) & ChrW(1080)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка12_Click:
Exit Sub
Err_Кнопка12_Click:
MsgBox Err.Description
Resume Exit_Кнопка12_Click
End Sub
Private Sub Кнопка13_Click()
' сделать активным поле, в которое нужно ввести дату
Поле2.SetFocus
' открыть форму ввода даты
DoCmd.OpenForm "Календарь"
End Sub
Форма реализация газа
Option Compare Database
Private Sub Кнопка2_Click()
On Error GoTo Err_Кнопка2_Click
Dim stDocName As String
stDocName = ChrW(1047) & ChrW(1072) & ChrW(1087) & ChrW(1088) & ChrW(1086) & ChrW(1089) & ChrW(1057) & ChrW(1084) & ChrW(1077) & ChrW(1085) & ChrW(1085) & ChrW(1099) & ChrW(1081) & ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(50)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка2_Click:
Exit Sub
Err_Кнопка2_Click:
MsgBox Err.Description
Resume Exit_Кнопка2_Click
End Sub
Private Sub Кнопка3_Click()
On Error GoTo Err_Кнопка3_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(1056) & ChrW(1077) & ChrW(1072) & ChrW(1083) & ChrW(1080) & ChrW(1079) & ChrW(1072) & ChrW(1094) & ChrW(1080) & ChrW(1103) & ChrW(1043) & ChrW(1072) & ChrW(1079) & ChrW(1072) & ChrW(1054) & ChrW(1073) & ChrW(1097) & ChrW(1080) & ChrW(1081)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка3_Click:
Exit Sub
Err_Кнопка3_Click:
MsgBox Err.Description
Resume Exit_Кнопка3_Click
End Sub
Private Sub Кнопка4_Click()
On Error GoTo Err_Кнопка4_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(1056) & ChrW(1077) & ChrW(1083) & ChrW(1080) & ChrW(1079) & ChrW(1072) & ChrW(1094) & ChrW(1080) & ChrW(1103) & ChrW(1043) & ChrW(1072) & ChrW(1079) & ChrW(1072)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка4_Click:
Exit Sub
Err_Кнопка4_Click:
MsgBox Err.Description
Resume Exit_Кнопка4_Click
End Sub
Форма сменный отчет
Option Compare Database
Private Sub Кнопка2_Click()
On Error GoTo Err_Кнопка2_Click
Dim stDocName As String
stDocName = ChrW(1047) & ChrW(1072) & ChrW(1087) & ChrW(1088) & ChrW(1086) & ChrW(1089) & ChrW(1057) & ChrW(1084) & ChrW(1077) & ChrW(1085) & ChrW(1085) & ChrW(1099) & ChrW(1081) & ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(50)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка2_Click:
Exit Sub
Err_Кнопка2_Click:
MsgBox Err.Description
Resume Exit_Кнопка2_Click
End Sub
Состояние склада
Option Compare Database
Private Sub Кнопка7_Click()
On Error GoTo Err_Кнопка7_Click
Dim stDocName As String
DoCmd.OpenReport [ОтчетСостояниеСклада], acPreview
Exit_Кнопка7_Click:
Exit Sub
Err_Кнопка7_Click:
MsgBox Err.Description
Resume Exit_Кнопка7_Click
End Sub
Private Sub Кнопка10_Click()
' сделать активным поле, в которое нужно ввести дату
Поле1.SetFocus
' открыть форму ввода даты
DoCmd.OpenForm "Календарь"
End Sub
Private Sub Кнопка8_Click()
On Error GoTo Err_Кнопка8_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(1057) & ChrW(1086) & ChrW(1089) & ChrW(1090) & ChrW(1086) & ChrW(1103) & ChrW(1085) & ChrW(1080) & ChrW(1077) & ChrW(1057) & ChrW(1082) & ChrW(1083) & ChrW(1072) & ChrW(1076) & ChrW(1072)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка8_Click:
Exit Sub
Err_Кнопка8_Click:
MsgBox Err.Description
Resume Exit_Кнопка8_Click
End Sub
Серверное приложение главного офиса:
Главная форма :
Option Compare Database
Private Sub Кнопка0_Click()
On Error GoTo Err_Кнопка0_Click
DoCmd.RunSQL "insert"
Exit_Кнопка0_Click:
Exit Sub
Err_Кнопка0_Click:
MsgBox Err.Description
Resume Exit_Кнопка0_Click
End Sub
Private Sub Кнопка13_Click()
On Error GoTo Err_Кнопка13_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1054) & ChrW(1089) & ChrW(1090) & ChrW(1072) & ChrW(1090) & ChrW(1082) & ChrW(1080)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка13_Click:
Exit Sub
Err_Кнопка13_Click:
MsgBox Err.Description
Resume Exit_Кнопка13_Click
End Sub
Private Sub Кнопка14_Click()
On Error GoTo Err_Кнопка14_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1044) & ChrW(1086) & ChrW(1083) & ChrW(1078) & ChrW(1085) & ChrW(1080) & ChrW(1082) & ChrW(1080)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка14_Click:
Exit Sub
Err_Кнопка14_Click:
MsgBox Err.Description
Resume Exit_Кнопка14_Click
End Sub
Private Sub Кнопка15_Click()
On Error GoTo Err_Кнопка15_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1054) & ChrW(1057) & ChrW(1042)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка15_Click:
Exit Sub
Err_Кнопка15_Click:
MsgBox Err.Description
Resume Exit_Кнопка15_Click
End Sub
Private Sub Кнопка20_Click()
On Error GoTo Err_Кнопка20_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1054) & ChrW(1089) & ChrW(1090) & ChrW(1072) & ChrW(1090) & ChrW(1082) & ChrW(1080)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка20_Click:
Exit Sub
Err_Кнопка20_Click:
MsgBox Err.Description
Resume Exit_Кнопка20_Click
End Sub
Private Sub Кнопка21_Click()
On Error GoTo Err_Кнопка21_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1044) & ChrW(1086) & ChrW(1083) & ChrW(1078) & ChrW(1085) & ChrW(1080) & ChrW(1082) & ChrW(1080)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка21_Click:
Exit Sub
Err_Кнопка21_Click:
MsgBox Err.Description
Resume Exit_Кнопка21_Click
End Sub
Private Sub Кнопка22_Click()
On Error GoTo Err_Кнопка22_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1054) & ChrW(1057) & ChrW(1042)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка22_Click:
Exit Sub
Err_Кнопка22_Click:
MsgBox Err.Description
Resume Exit_Кнопка22_Click
End Sub
Private Sub Кнопка28_Click()
On Error GoTo Err_Кнопка28_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1054) & ChrW(1089) & ChrW(1090) & ChrW(1072) & ChrW(1090) & ChrW(1082) & ChrW(1080)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка28_Click:
Exit Sub
Err_Кнопка28_Click:
MsgBox Err.Description
Resume Exit_Кнопка28_Click
End Sub
Private Sub Кнопка29_Click()
On Error GoTo Err_Кнопка29_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1054) & ChrW(1087) & ChrW(1083) & ChrW(1072) & ChrW(1090) & ChrW(1099) & ChrW(32) & ChrW(1082) & ChrW(1086) & ChrW(1085) & ChrW(1090) & ChrW(1088) & ChrW(1072) & ChrW(1075) & ChrW(1077) & ChrW(1085) & ChrW(1090) & ChrW(1086) & ChrW(1074)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка29_Click:
Exit Sub
Err_Кнопка29_Click:
MsgBox Err.Description
Resume Exit_Кнопка29_Click
End Sub
Private Sub Кнопка34_Click()
On Error GoTo Err_Кнопка34_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1044) & ChrW(1086) & ChrW(1083) & ChrW(1078) & ChrW(1085) & ChrW(1080) & ChrW(1082) & ChrW(1080)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка34_Click:
Exit Sub
Err_Кнопка34_Click:
MsgBox Err.Description
Resume Exit_Кнопка34_Click
End Sub
Private Sub Кнопка35_Click()
On Error GoTo Err_Кнопка35_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = ChrW(1054) & ChrW(1057) & ChrW(1042)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка35_Click:
Exit Sub
Err_Кнопка35_Click:
MsgBox Err.Description
Resume Exit_Кнопка35_Click
End Sub
Форма должники :
Option Compare Database
Private Sub Кнопка7_Click()
On Error GoTo Err_Кнопка7_Click
Dim stDocName As String
DoCmd.OpenReport [ОтчетСостояниеСклада], acPreview
Exit_Кнопка7_Click:
Exit Sub
Err_Кнопка7_Click:
MsgBox Err.Description
Resume Exit_Кнопка7_Click
End Sub
Private Sub Кнопка8_Click()
On Error GoTo Err_Кнопка8_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(1057) & ChrW(1086) & ChrW(1089) & ChrW(1090) & ChrW(1086) & ChrW(1103) & ChrW(1085) & ChrW(1080) & ChrW(1077) & ChrW(1057) & ChrW(1082) & ChrW(1083) & ChrW(1072) & ChrW(1076) & ChrW(1072)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка8_Click:
Exit Sub
Err_Кнопка8_Click:
MsgBox Err.Description
Resume Exit_Кнопка8_Click
End Sub
Private Sub Кнопка5_Click()
' сделать активным поле, в которое нужно ввести дату
Поле1.SetFocus
' открыть форму ввода даты
DoCmd.OpenForm "Календарь"
End Sub
Private Sub Кнопка9_Click()
On Error GoTo Err_Кнопка9_Click
Dim stDocName As String
stDocName = ChrW(1047) & ChrW(1072) & ChrW(1087) & ChrW(1088) & ChrW(1086) & ChrW(1089) & ChrW(1044) & ChrW(1086) & ChrW(1083) & ChrW(1078) & ChrW(1085) & ChrW(1080) & ChrW(1082) & ChrW(1080)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка9_Click:
Exit Sub
Err_Кнопка9_Click:
MsgBox Err.Description
Resume Exit_Кнопка9_Click
End Sub
Форма ОСВ
Option Compare Database
Private Sub Calendar4_Updated(Code As Integer)
MsgBox Format(Calendar4.Object.Value, "dd/mm/yy")
ДатаОСВ = Format(Calendar4.Object.Value, "dd/mm/yy")
End Sub
' Изменяет формат отображения даты
Private Sub Form_Open(Cancel As Integer)
Form_ОСВ!ДатаОСВ.Format = "mmmm yyyy"
End Sub
Private Sub Кнопка3_Click()
On Error GoTo Err_Кнопка3_Click
Dim stDocName As String
stDocName = ChrW(1079) & ChrW(1072) & ChrW(1087) & ChrW(1088) & ChrW(1086) & ChrW(1089) & ChrW(1054) & ChrW(1057) & ChrW(1042) & ChrW(95) & ChrW(1087) & ChrW(1077) & ChrW(1088) & ChrW(1077) & ChrW(1082) & ChrW(1088) & ChrW(1077) & ChrW(1089) & ChrW(1090) & ChrW(1085) & ChrW(1099) & ChrW(1081)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка3_Click:
Exit Sub
Err_Кнопка3_Click:
MsgBox Err.Description
Resume Exit_Кнопка3_Click
End Sub
' кнопка вызова формы с календарём
Private Sub Кнопка5_Click()
' сделать активным поле, в которое нужно ввести дату
ДатаОСВ.SetFocus
' открыть форму ввода даты
DoCmd.OpenForm "Календарь"
End Sub
Форма остатки
Option Compare Database
Private Sub Кнопка7_Click()
On Error GoTo Err_Кнопка7_Click
Dim stDocName As String
DoCmd.OpenReport [ОтчетСостояниеСклада], acPreview
Exit_Кнопка7_Click:
Exit Sub
Err_Кнопка7_Click:
MsgBox Err.Description
Resume Exit_Кнопка7_Click
End Sub
Private Sub Кнопка8_Click()
On Error GoTo Err_Кнопка8_Click
Dim stDocName As String
stDocName = ChrW(1054) & ChrW(1090) & ChrW(1095) & ChrW(1077) & ChrW(1090) & ChrW(1057) & ChrW(1086) & ChrW(1089) & ChrW(1090) & ChrW(1086) & ChrW(1103) & ChrW(1085) & ChrW(1080) & ChrW(1077) & ChrW(1057) & ChrW(1082) & ChrW(1083) & ChrW(1072) & ChrW(1076) & ChrW(1072)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка8_Click:
Exit Sub
Err_Кнопка8_Click:
MsgBox Err.Description
Resume Exit_Кнопка8_Click
End Sub
Private Sub Кнопка10_Click()
On Error GoTo Err_Кнопка10_Click
Dim stDocName As String
stDocName = [ЗапросОстатки]
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка10_Click:
Exit Sub
Err_Кнопка10_Click:
MsgBox Err.Description
Resume Exit_Кнопка10_Click
End Sub
Private Sub Кнопка11_Click()
On Error GoTo Err_Кнопка11_Click
Dim stDocName As String
stDocName = ChrW(1047) & ChrW(1072) & ChrW(1087) & ChrW(1088) & ChrW(1086) & ChrW(1089) & ChrW(1054) & ChrW(1089) & ChrW(1090) & ChrW(1072) & ChrW(1090) & ChrW(1082) & ChrW(1080)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка11_Click:
Exit Sub
Err_Кнопка11_Click:
MsgBox Err.Description
Resume Exit_Кнопка11_Click
End Sub
Private Sub Кнопка12_Click()
On Error GoTo Err_Кнопка12_Click
Dim stDocName As String
stDocName = ChrW(1044) & ChrW(1080) & ChrW(1072) & ChrW(1075) & ChrW(1088) & ChrW(1072) & ChrW(1084) & ChrW(1084) & ChrW(1072) & ChrW(1054) & ChrW(1089) & ChrW(1090) & ChrW(1072) & ChrW(1090) & ChrW(1082) & ChrW(1080)
DoCmd.OpenReport stDocName, acPreview
Exit_Кнопка12_Click:
Exit Sub
Err_Кнопка12_Click:
MsgBox Err.Description
Resume Exit_Кнопка12_Click
End Sub
Private Sub Кнопка5_Click()
' сделать активным поле, в которое нужно ввести дату
Поле1.SetFocus
' открыть форму ввода даты
DoCmd.OpenForm "Календарь"
End Sub
Приложение 2
Запросы:
Клиентское приложение:
Выручка за смену по товарам:
SELECT DateValue(Продажа.Дата) AS Выражение1, Продажа.КодНоменклатуры, Sum(Продажа.Количество) AS [Sum-Количество], Sum(Продажа.Стоимость) AS [Sum-Стоимость], Константы.КодЗаправки
FROM Продажа, Константы
WHERE (((Продажа.Дата)>All (select Начало from Смены Order by Начало desc)))
GROUP BY DateValue(Продажа.Дата), Продажа.КодНоменклатуры, Константы.КодЗаправки;
Выручка по дням по товарам:
SELECT DateValue(Продажа.Дата) AS Выражение1, Номенклатура.Наименование, Sum(Продажа.Количество) AS [Sum-Количество], Sum(Продажа.Стоимость) AS [Sum-Стоимость]
FROM Номенклатура INNER JOIN Продажа ON Номенклатура.КодНоменклатуры=Продажа.КодНоменклатуры
GROUP BY DateValue(Продажа.Дата), Номенклатура.Наименование;
Запрос с разбивкой поклиентам:
SELECT Контрагенты.Наименование, Sum(Продажа.Количество) AS Доза, Sum(Продажа.Стоимость) AS Сумма, Count(Продажа.КодКонтрагента) AS [Кол-во]
FROM Номенклатура INNER JOIN (Контрагенты INNER JOIN Продажа ON Контрагенты.КодКонтрагента = Продажа.КодКонтрагента) ON Номенклатура.КодНоменклатуры = Продажа.КодНоменклатуры
WHERE (((Продажа.Дата)>[Forms]![РеализацияГазаСРазбивкойПоКлиентам]![Поле1] And (Продажа.Дата)<[Forms]![РеализацияГазаСРазбивкойПоКлиентам]![Поле2]) AND ((Продажа.КодНоменклатуры)=1))
GROUP BY Контрагенты.Наименование;
МатОтчет:
SELECT ЗапросМатОтчетОстатокНач.Наименование, ЗапросМатОтчетОстатокНач.[Остаток(нач)], ЗапросМатОтчетПриход.ПриходОб, ЗапросМатОтчетПродажа.ПродажаОб, ЗапросМатОтчетКон.[Остаток(кон)]
FROM ((ЗапросМатОтчетПриход RIGHT JOIN ЗапросМатОтчетОстатокНач ON ЗапросМатОтчетПриход.Наименование = ЗапросМатОтчетОстатокНач.Наименование) LEFT JOIN ЗапросМатОтчетПродажа ON ЗапросМатОтчетОстатокНач.Наименование = ЗапросМатОтчетПродажа.Наименование) LEFT JOIN ЗапросМатОтчетКон ON ЗапросМатОтчетОстатокНач.Наименование = ЗапросМатОтчетКон.Наименование;
МатОтчет1:
SELECT Номенклатура.Наименование, Sum(Приход.Количество) AS нач
FROM Номенклатура LEFT JOIN Приход ON Номенклатура.КодНоменклатуры=Приход.КодНоменклатуры
WHERE (((Приход.ДатаПрихода)<Forms!МатериальныйОтчет!Поле1))
GROUP BY Номенклатура.Наименование;
МатОтчет2:
SELECT Номенклатура.Наименование, Sum(Продажа.Количество)*(-1) AS нач
FROM Номенклатура LEFT JOIN Продажа ON Номенклатура.КодНоменклатуры=Продажа.КодНоменклатуры
WHERE (((Продажа.Дата)<Forms!МатериальныйОтчет!Поле1))
GROUP BY Номенклатура.Наименование;
МатОтчет3:
SELECT Номенклатура.Наименование, Sum(Приход.Количество) AS [Приход(кон)]
FROM Номенклатура LEFT JOIN Приход ON Номенклатура.КодНоменклатуры = Приход.КодНоменклатуры
WHERE (((Приход.ДатаПрихода)<=[Forms]![МатериальныйОтчет]![Поле2]))
GROUP BY Номенклатура.Наименование;
МатОтчет4:
SELECT Номенклатура.Наименование, Sum(Продажа.Количество)*(-1) AS [Расход(кон)]
FROM Номенклатура INNER JOIN Продажа ON Номенклатура.КодНоменклатуры = Продажа.КодНоменклатуры
WHERE (((Продажа.Дата)<=[Forms]![МатериальныйОтчет]![Поле2]))
GROUP BY Номенклатура.Наименование;
МатОтчет контрагенты:
SELECT ЗапросМатОтчет3.Наименование, (ЗапросМатОтчет3.[Приход(кон)]+ЗапросМатОтчет4.[Расход(кон)]) AS [Остаток(кон)]
FROM ЗапросМатОтчет3 INNER JOIN ЗапросМатОтчет4 ON ЗапросМатОтчет3.Наименование=ЗапросМатОтчет4.Наименование;
МатОтчет остаток начальный:
SELECT ЗапросМатОтчет1.Наименование, Sum(ЗапросМатОтчет1.нач+ЗапросМатОтчет2.нач) AS [Остаток(нач)]
FROM ЗапросМатОтчет1 LEFT JOIN ЗапросМатОтчет2 ON ЗапросМатОтчет1.Наименование = ЗапросМатОтчет2.Наименование
GROUP BY ЗапросМатОтчет1.Наименование;
МатОтчет приход:
SELECT Номенклатура.Наименование, Sum(Приход.Количество) AS ПриходОб
FROM Номенклатура LEFT JOIN Приход ON Номенклатура.КодНоменклатуры=Приход.КодНоменклатуры
WHERE (((Приход.ДатаПрихода)>=Forms!МатериальныйОтчет!Поле1) And ((Приход.ДатаПрихода)<=Forms!МатериальныйОтчет!Поле2))
GROUP BY Номенклатура.Наименование;
МатОтчет продажа:
SELECT Номенклатура.Наименование, Sum(Продажа.Количество) AS ПродажаОб
FROM Номенклатура INNER JOIN Продажа ON Номенклатура.КодНоменклатуры=Продажа.КодНоменклатуры
WHERE (((Продажа.Дата)>=Forms!МатериальныйОтчет!Поле1) And ((Продажа.Дата)<=Forms!МатериальныйОтчет!Поле2))
GROUP BY Номенклатура.Наименование;
Остатки:
SELECT КодЗаправки AS K1, Alias.кодНоменклатуры AS N, now() AS D, Sum(K) AS S
FROM Константы, [SELECT приход.кодНоменклатуры , sum(количество) as K
from (приход INNER JOIN Номенклатура on приход.КодНоменклатуры=Номенклатура.КодНоменклатуры)
where Номенклатура.Товар=True
group by приход.кодНоменклатуры
union (SELECT продажа.кодНоменклатуры , sum(количество)*(-1) as K from (продажа INNER JOIN Номенклатура on продажа.КодНоменклатуры=Номенклатура.КодНоменклатуры)
where Номенклатура.Товар=True
group by продажа.кодНоменклатуры) ]. AS Alias
GROUP BY КодЗаправки, Alias.кодНоменклатуры;
Продажа операторами:
SELECT Сотрудники.Фамилия, DateValue(Продажа.Дата) AS Выражение1, Sum(Продажа.Количество) AS [Количество номен-ры], Count(Продажа.Количество) AS Количество
FROM Сотрудники INNER JOIN (Номенклатура INNER JOIN Продажа ON Номенклатура.КодНоменклатуры=Продажа.КодНоменклатуры) ON Сотрудники.КодСотрудника=Продажа.КодСотрудника
WHERE (Forms!ПродажаОператорами!ПолеСоСписком10=Номенклатура.КодНоменклатуры) And (((Продажа.Дата)>Forms!ПродажаОператорами!Поле1 And (Продажа.Дата)<Forms!ПродажаОператорами!Поле2))
GROUP BY Сотрудники.Фамилия, DateValue(Продажа.Дата);
Реализация газа общий:
SELECT ЗапросРеализацияГазаПриход.Приход AS [Приход газа], ЗапросРеализацияГазаПродажа.Продажа AS [Продажа газа], РГКС.[Кон остаток], РГНС.[Нач остаток]
FROM ЗапросРеализацияГазаПриход, ЗапросРеализацияГазаПродажа, РГКС, РГНС;
Реализация газа приход:
SELECT iif((Sum(количество)>0),Sum(количество),0) AS Приход
FROM Номенклатура INNER JOIN приход ON Номенклатура.КодНоменклатуры=приход.КодНоменклатуры
WHERE (((приход.ДатаПрихода)>=(SELECT Смены.Начало FROM Смены WHERE (((Смены.КодСмены)=[Forms]![РеализацияГаза]![ПолеСоСписком0])) ) And (приход.ДатаПрихода)<=(SELECT Смены.Окончание FROM Смены WHERE (((Смены.КодСмены)=[Forms]![РеализацияГаза]![ПолеСоСписком0])) )) AND ((Номенклатура.Наименование)="Газ"));
Реализация газа продажа:
SELECT Iif((Sum(количество)>0),Sum(количество),0) AS Продажа
FROM Номенклатура INNER JOIN продажа ON Номенклатура.КодНоменклатуры=продажа.КодНоменклатуры
WHERE (((продажа.Дата)>=(SELECT Смены.Начало FROM Смены WHERE (((Смены.КодСмены)=[Forms]![РеализацияГаза]![ПолеСоСписком0])) ) And (продажа.Дата)<=(SELECT Смены.Окончание FROM Смены WHERE (((Смены.КодСмены)=[Forms]![РеализацияГаза]![ПолеСоСписком0])) )) AND ((Номенклатура.Наименование)="Газ"));
Реализация газа:
SELECT Switch(Продажа.Безнал=0,"НАЛИЧНЫЕ",Продажа.Безнал=-1,"БЕЗНАЛ") AS Оплата, Номенклатура.Цена, Sum(Продажа.Количество) AS [Sum-Количество], Sum(Продажа.Стоимость) AS [Sum-Стоимость], Count(Продажа.Количество) AS [Count-Количество]
FROM Номенклатура LEFT JOIN Продажа ON Номенклатура.КодНоменклатуры=Продажа.КодНоменклатуры
WHERE (((Номенклатура.Наименование)="Газ") And ((Продажа.КодСмены)=Forms!РеализацияГаза!ПолеСоСписком0))
GROUP BY Номенклатура.Цена, Продажа.Безнал, Продажа.КодСмены;
Сменный отчет:
SELECT Номенклатура.Наименование, Sum(Продажа.Количество) AS [Сум-Количество], Sum(Продажа.Стоимость) AS [Сум-Стоимость]
FROM Номенклатура INNER JOIN Продажа ON Номенклатура.КодНоменклатуры=Продажа.КодНоменклатуры
WHERE (((Продажа.Дата)>(select max(Начало)from Смены)))
GROUP BY Номенклатура.Наименование;
Сменный отчет1:
SELECT Смены.Начало, Смены.Окончание, Сотрудники.Фамилия, Номенклатура.Наименование, Контрагенты.Безнал, Контрагенты.Наименование, Sum(Продажа.Количество) AS [Sum-Количество], Sum(Продажа.Стоимость) AS [Sum-Стоимость]
FROM Сотрудники INNER JOIN ((Контрагенты INNER JOIN (Номенклатура INNER JOIN Продажа ON Номенклатура.КодНоменклатуры = Продажа.КодНоменклатуры) ON Контрагенты.КодКонтрагента = Продажа.КодКонтрагента) INNER JOIN Смены ON Продажа.КодСмены = Смены.КодСмены) ON Сотрудники.КодСотрудника = Смены.КодСотрудника
WHERE (((Продажа.КодСмены)=[Forms]![СменныйОтчет]![ПолеСоСписком0]))
GROUP BY Смены.Начало, Смены.Окончание, Сотрудники.Фамилия, Номенклатура.Наименование, Контрагенты.Безнал, Контрагенты.Наименование;
Состояние склада:
SELECT Номенклатура.Наименование AS Наименование, Номенклатура.Цена AS Цена, Sum([Кол-во]) AS Склад, Номенклатура.Цена*Sum([Кол-во]) AS Сумма
FROM [SELECT Номенклатура.Наименование, Номенклатура.Цена, sum(Приход.Количество) as [Кол-во]
FROM (Номенклатура INNER JOIN Приход ON Номенклатура.КодНоменклатуры = Приход.КодНоменклатуры)
WHERE (((Номенклатура.Товар)=Yes)) and (Приход.ДатаПрихода<=[Forms]![СостояниеСклада]![Поле1])
group by Номенклатура.Наименование, Номенклатура.Цена
UNION SELECT Номенклатура.Наименование, Номенклатура.Цена, sum(Продажа.Количество)*(-1) as [Кол-во]
FROM (Номенклатура INNER JOIN Продажа ON Номенклатура.КодНоменклатуры = Продажа.КодНоменклатуры)
WHERE (((Номенклатура.Товар)=Yes)) and (Продажа.Дата<=[Forms]![СостояниеСклада]![Поле1])
group by Номенклатура.Наименование, Номенклатура.Цена]. AS Alias
GROUP BY Номенклатура.Наименование, Номенклатура.Цена;
Последняя смена:
SELECT Max(Смены.Начало) AS [Max-Начало], Сотрудники.Фамилия
FROM Сотрудники INNER JOIN Смены ON Сотрудники.КодСотрудника = Смены.КодСотрудника
GROUP BY Сотрудники.Фамилия;
РГНС:
SELECT Sum([Нач смены]) AS [Нач остаток]
FROM [SELECT Sum(Приход.Количество) AS [Нач смены]
FROM Номенклатура INNER JOIN Приход ON Номенклатура.КодНоменклатуры = Приход.КодНоменклатуры
where (((Номенклатура.Наименование)="Газ") AND ((Приход.ДатаПрихода)<(select начало from смены where кодсмены=[Forms]![РеализацияГаза]![ПолеСоСписком0])))
union
SELECT Sum(Продажа.Количество)*(-1) AS [Нач смены]
FROM Номенклатура INNER JOIN Продажа ON Номенклатура.КодНоменклатуры = Продажа.КодНоменклатуры
where (((Номенклатура.Наименование)="Газ") AND ((Продажа.Дата)<(select начало from смены where кодсмены=[Forms]![РеализацияГаза]![ПолеСоСписком0])))
]. AS Aias1;
РГКС:
SELECT Sum([%$##@_Alias].[Нач смены]) AS [Кон остаток]
FROM [SELECT Sum(Приход.Количество) AS [Нач смены]
FROM Номенклатура INNER JOIN Приход ON Номенклатура.КодНоменклатуры = Приход.КодНоменклатуры
where (((Номенклатура.Наименование)="Газ") AND ((Приход.ДатаПрихода)<(select окончание from смены where кодсмены=[Forms]![РеализацияГаза]![ПолеСоСписком0])))
UNION SELECT Sum(Продажа.Количество)*(-1) AS [Нач смены]
FROM Номенклатура INNER JOIN Продажа ON Номенклатура.КодНоменклатуры = Продажа.КодНоменклатуры
where (((Номенклатура.Наименование)="Газ") AND ((Продажа.Дата)<(select окончание from смены where кодсмены=[Forms]![РеализацияГаза]![ПолеСоСписком0])))
]. AS [%$##@_Alias];
Цена номенклатуры:
SELECT Номенклатура.Цена
FROM Номенклатура
WHERE (((Номенклатура.КодНоменклатуры)=[Forms]![Продажа]![ПолеСоСписком12]));
Серверное приложение:
Должники:
SELECT Контрагенты.Наименование, Sum(РасчетыКонтрагенты.Сумма)*(-1) AS [Сумма долга]
FROM Контрагенты INNER JOIN РасчетыКонтрагенты ON Контрагенты.КодКонтрагента = РасчетыКонтрагенты.КодКонтрагента
WHERE (((РасчетыКонтрагенты.Дата)<=([Forms]![Должники]![Поле1])+1))
GROUP BY Контрагенты.Наименование
HAVING (((Sum(РасчетыКонтрагенты.Сумма))<0));
Должники текущие:
SELECT Контрагенты.Наименование, Sum(РасчетыКонтрагенты.Сумма)*(-1) AS [Сумма долга]
FROM Контрагенты INNER JOIN РасчетыКонтрагенты ON Контрагенты.КодКонтрагента = РасчетыКонтрагенты.КодКонтрагента
GROUP BY Контрагенты.Наименование
HAVING (((Sum(РасчетыКонтрагенты.Сумма))<0));
ОСВ :
PARAMETERS FORMS![ОСВ]![ДАТАОСВ] DateTime;
SELECT Контрагенты.Наименование,sum( РасчетыКонтрагенты.Сумма), "3Обороты Дт"
FROM РасчетыКонтрагенты inner join Контрагенты on РасчетыКонтрагенты.КодКонтрагента=Контрагенты.КодКонтрагента
where (Дата>=DateSerial(year(FORMS![ОСВ]![ДАТАОСВ]), month(FORMS![ОСВ]![ДАТАОСВ]), 1)) and (Дата<DateSerial(year(FORMS![ОСВ]![ДАТАОСВ]), month(FORMS![ОСВ]![ДАТАОСВ])+1,1 ))
group by Контрагенты.Наименование
having sum(РасчетыКонтрагенты.Сумма)>=0
union
SELECT Контрагенты.Наименование,sum( РасчетыКонтрагенты.Сумма)*(-1),"4Обороты Кт"
FROM РасчетыКонтрагенты inner join Контрагенты on РасчетыКонтрагенты.КодКонтрагента=Контрагенты.КодКонтрагента
where (Дата>=DateSerial(year(FORMS![ОСВ]![ДАТАОСВ]), month(FORMS![ОСВ]![ДАТАОСВ]), 1)) and (Дата<DateSerial(year(FORMS![ОСВ]![ДАТАОСВ]), month(FORMS![ОСВ]![ДАТАОСВ])+1,1 ))
group by Контрагенты.Наименование
having sum(РасчетыКонтрагенты.Сумма)<=0
union
SELECT Контрагенты.Наименование,sum( РасчетыКонтрагенты.Сумма), "1Начало Дт"
FROM РасчетыКонтрагенты inner join Контрагенты on РасчетыКонтрагенты.КодКонтрагента=Контрагенты.КодКонтрагента
where (Дата<DateSerial(year(FORMS![ОСВ]![ДАТАОСВ]), month(FORMS![ОСВ]![ДАТАОСВ]), 1))
group by Контрагенты.Наименование
having sum(РасчетыКонтрагенты.Сумма)>=0
union
SELECT Контрагенты.Наименование,sum( РасчетыКонтрагенты.Сумма)*(-1),"2Начало Кт"
FROM РасчетыКонтрагенты inner join Контрагенты on РасчетыКонтрагенты.КодКонтрагента=Контрагенты.КодКонтрагента
where (Дата<DateSerial(year(FORMS![ОСВ]![ДАТАОСВ]), month(FORMS![ОСВ]![ДАТАОСВ]), 1))
group by Контрагенты.Наименование
having sum(РасчетыКонтрагенты.Сумма)<=0
union
SELECT Контрагенты.Наименование,sum( РасчетыКонтрагенты.Сумма), "5Конец Дт"
FROM РасчетыКонтрагенты inner join Контрагенты on РасчетыКонтрагенты.КодКонтрагента=Контрагенты.КодКонтрагента
where (Дата<DateSerial(year(FORMS![ОСВ]![ДАТАОСВ]), month(FORMS![ОСВ]![ДАТАОСВ])+1, 1))
group by Контрагенты.Наименование
having sum(РасчетыКонтрагенты.Сумма)>=0
UNION SELECT Контрагенты.Наименование,sum( РасчетыКонтрагенты.Сумма)*(-1),"6Конец Кт"
FROM РасчетыКонтрагенты inner join Контрагенты on РасчетыКонтрагенты.КодКонтрагента=Контрагенты.КодКонтрагента
where (Дата<DateSerial(year(FORMS![ОСВ]![ДАТАОСВ]), month(FORMS![ОСВ]![ДАТАОСВ])+1, 1))
group by Контрагенты.Наименование
having sum(РасчетыКонтрагенты.Сумма)<=0;
ОСВ перекрестный :
TRANSFORM Sum(запросОСВ.Expr1001) AS [Sum-Expr1001]
SELECT запросОСВ.Наименование AS Контрагенты
FROM запросОСВ
GROUP BY запросОСВ.НАименование
PIVOT запросОСВ.Expr1002;
Остатки:
SELECT Районы.Название, Номенклатура.Наименование, Остатки.Количество, Остатки.Дата
FROM Районы INNER JOIN (Номенклатура INNER JOIN (запрОстатки2 INNER JOIN Остатки ON (запрОстатки2.[Max-Дата] = Остатки.Дата) AND (запрОстатки2.КодЗаправки = Остатки.КодЗаправки) AND (запрОстатки2.КодНоменклатуры = Остатки.КодНоменклатуры)) ON Номенклатура.КодНоменклатуры = Остатки.КодНоменклатуры) ON Районы.КодРайона = Остатки.КодЗаправки;
Остатки1:
SELECT Районы.Название, Номенклатура.Наименование, Остатки.Количество, Остатки.Дата
FROM Районы INNER JOIN (Номенклатура INNER JOIN (запрОстатки3 INNER JOIN Остатки ON (запрОстатки3.[Max-Дата] = Остатки.Дата) AND (запрОстатки3.КодЗаправки = Остатки.КодЗаправки) AND (запрОстатки3.КодНоменклатуры = Остатки.КодНоменклатуры)) ON Номенклатура.КодНоменклатуры = Остатки.КодНоменклатуры) ON Районы.КодРайона = Остатки.КодЗаправки
WHERE (((Номенклатура.Наименование) Like "Г*"));
Остатки 2:
PARAMETERS [Forms]![Остатки]![Поле1] DateTime;
SELECT Остатки.КодНоменклатуры, Остатки.КодЗаправки, Max(Остатки.Дата) AS [Max-Дата]
FROM Остатки
WHERE (((Остатки.Дата)<=[Forms]![Остатки]![Поле1]))
GROUP BY Остатки.КодНоменклатуры, Остатки.КодЗаправки;
Остатки3:
SELECT Остатки.КодНоменклатуры, Остатки.КодЗаправки, Max(Остатки.Дата) AS [Max-Дата]
FROM Остатки
WHERE (((Остатки.Дата)<=now()))
GROUP BY Остатки.КодНоменклатуры, Остатки.КодЗаправки;
Расчеты контрагенты:
TRANSFORM Sum(РасчетыКонтрагенты.Сумма) AS [Sum-Сумма]
SELECT РасчетыКонтрагенты.КодКонтрагента, Sum(РасчетыКонтрагенты.Сумма) AS [Итоговое значение Сумма]
FROM РасчетыКонтрагенты
GROUP BY РасчетыКонтрагенты.КодКонтрагента
PIVOT Format([Дата],"mmm");
СТАРООСКОЛЬСКИЙ ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ
(ФИЛИАЛ) ФЕДЕРАЛЬНОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ СТАЛИ И СПЛАВОВ
(ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ)»
Факультет автоматизации и информационных технологий
Кафедра автоматики и промышленной электроники
Специальность 080801 "Прикладная информатика в сфере сервиса"
Дата: 2019-07-30, просмотров: 178.