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
Наименование затрат Обозначение Сумма
в рублях в %
1. Работа с литературой и теоретическая часть Зт 13731 13
2. Теоретические разработки Зтр 8581,6 10
3. Проектирование и выполнение технического задания на ЭВМ Зп 343236 50
4. Оплата машинного времени Зм 53436 7
5. Консультация с руководителем Зкп 20192 20
ИТОГО Зсум 439176,6 100%

График основных затрат этапов проведения дипломного проекта представлен на рис. 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.4 Определение экономического эффекта

Расчет экономического эффекта произведен на основании чистого дисконтированного дохода (ЧДД), определенного как сумма текущих эффектов за весь расчетный период, приведенная к начальному шагу.

 норма дисконта (принимается в размере ставки рефинансирования ЦБ РФ).

прогнозируемый уровень инфляции на 2009 г.;

(3.10)

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

К0 = Зсум + К (руб./год), (3.11)

где Зсум – затраты на основные этапы проектирования, руб./год;

К- капитальные вложения, руб./год;

Сумма инвестиций в данный проект будет равна:

К0=439176,6+56000=99917,6 руб.

Норма дисконта α = =0,0023.

Экономические показатели эффективности разрабатываемого проекта представлены в таблице 3.7.

 


Таблица 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. Информационная безопасность и защита информации   4.1 Корпоративные компьютерные системы

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

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

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

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

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

Подключение корпоративной сети к Internet оправдано, если вам нужен доступ к соответствующим услугам. Использовать Internet как среду передачи данных стоит только тогда, когда другие способы недоступны и финансовые соображения перевешивают требования надежности и безопасности. Если вы будете использовать Internet только в качестве источника информации, лучше пользоваться технологией "соединение по запросу" (dial-on-demand), т.е. таким способом подключения, когда соединение с узлом Internet устанавливается только по вашей инициативе и на нужное вам время. Это резко снижает риск несанкционированного проникновения в вашу сеть извне.

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

  4.2 Обеспечение безопасности в корпоративных сетях

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

·      организация сети организации

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

·      организация хранения информации в ИС;

·      организация обработки информации;

·      регламентация допуска персонала к той или иной информации;

·      ответственность персонала за обеспечение безопасности.

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

·     Защита от несанкционированного проникновения в корпоративную сеть и возможности утечки информации по каналам связи.

·     Разграничение потоков информации между сегментами сети.

·     Защита критичных ресурсов сети.

·     Криптографическая защита информационных ресурсов.

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

Различают три типа брандмауэров:

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

2.  Фильтрирующий маршрутизатор. Фильтрующий маршрутизатор. Точнее это маршрутизатор, в дополнительные функции которого входит фильтрование пакетов (packet-filtering router). Используется на сетях с коммутацией пакетов в режиме дейтаграмм. То есть, в тех технологиях передачи информации на сетях связи, в которых плоскость сигнализации (предварительного установления соединения между УИ и УП) отсутствует (например, IP V 4). В данном случае принятие решения о передаче по сети поступившего пакета данных основывается на значениях его полей заголовка транспортного уровня. Поэтому брандмауэры такого типа обычно реализуются в виде списка правил, применяемых к значениям полей заголовка транспортного уровня.

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

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

Для защиты информации в корпоративной сети «Северного объединения по эксплуатации газового хозяйства» разработана система паролей и ограничений доступа пользователей к информации.

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

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

Основные требования к средствам защиты информации:

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

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

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

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

- защита должна иметь точную информацию о состоянии и конфигурации компьютера.

В таблице 4.1 представлены результаты тестирования самых известных программ Firewall а также их общая оценка.

 

Таблица 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, поэтому сообщение решает так же задачи идентификации отправителя и целостности данных.

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

  4.3 Защита данных в Access

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

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

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

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

  4.4 Защита данных в 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.            Введение в практическую эргономику. Учебное пособие. Под ред. Зинченко В.П., Моргунова Е.Б., изд. МИРЭА, 1990 г

2.            Гамбург К.С. Методическое пособие по оформлению пояснительной записки и графического материала дипломных и курсовых проектов и работ. – СТИ МИСиС, 2007 г.

3.            Глушаков С.В., Ломотько Д.В. Базы данных. Учебный курс. – М.: ООО «Издательство АТС», 2001 г.-504с

4.            Информатика и математика для юристов. Под. ред. Х.А. Андриашина, С. Я. Казанцева. – М.: ЮНИТИ-ДАНА, Закон и право, 2001. – 308 с.

5.            И. Б. Львов, Г. Г. Казеева, И. А. Морев Информатика. Владивосток. 1999-2001 гг. – 260 с.

6.            Исследование операций в экономике. Под ред. проф. Н.Ш. Кремера. – М.: Банки и биржи, ЮНИТИ, 1999. – 407 с.

7.            Колесник А.П. Компьютерные системы в управлении финансами. - М.: «Финансы и статистика»,2002 г.

8.            Кузнецов С.Д. СУБД (системы управления базами данных) и файловые системы.- М: Майор, 2001 г.

9.            Левин В.К. Защита информации в информационно-вычислительных cистемах и сетях // Программирование. – 2001 г. - N5. –354 с.

10.       Проектирование баз данных СУБД Microsoft Access: Учеб. пособие для вузов / Гринченко Н. Н., Гусев Е. В., Макаров Н. П. и др. — М.: Горячая линия-Телеком, 2004. — 240 с.

11.       С.Н. Новиков. Защита информации в сетях связи с гарантированным качеством обслуживания. Новосибирск. 2003. – 480 с.

12.       www.citforum.ru/database/mssql/overview/

13.       www.citforum.ru/operating_systems/windows.shtml

14.       www.kunegin.narod.ru/ref6/lan/4.htm

15.       www.la2-ua.clan.su/forum/11-22-1

16.       www.netnsk.ru/publica/inet/mbr_05.htm

17.       www.opersys.ru

18.       www.referatzakaz.ru/Predmet/informatika/9.htm

19.       www.sider.home.nov.ru/book/side3

20.       www.windxp.com.ru


Приложение 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 Кнопка10_Click()

' сделать активным поле, в которое нужно ввести дату

Поле1.SetFocus

' открыть форму ввода даты

DoCmd.OpenForm "Календарь"

End Sub

Private Sub Кнопка13_Click()

' сделать активным поле, в которое нужно ввести дату

Поле2.SetFocus

' открыть форму ввода даты

DoCmd.OpenForm "Календарь"

End Sub

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

Форма сменный отчет

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


Информация о работе «Автоматизация учета товаров на АГЗС "Северного объединения по эксплуатации газового хозяйства"»
Раздел: Информатика, программирование
Количество знаков с пробелами: 154811
Количество таблиц: 25
Количество изображений: 43

0 комментариев


Наверх