98317

Баланс и анализ распределительной сети для предприятия «Витебскэнерго»

Дипломная

Энергетика

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

Русский

2015-11-02

3.01 MB

0 чел.

ВВЕДЕНИЕ

Электроэнергетика — отрасль энергетики,  включающая в себя производство, передачу и сбыт электроэнергии.  Электроэнергетика является наиболее важной отраслью энергетики,  что объясняется такими преимуществами электроэнергии перед энергией других видов, как относительная лёгкость передачи на большие расстояния, распределения между потребителями, а также преобразования в другие виды энергии (механическую, тепловую, химическую, световую и др.).  Отличительной чертой электрической энергии является практическая одновременность её генерирования и потребления, так как электрический ток распространяется по сетям со скоростью, близкой к скорости света.

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

Мировая практика подтверждает, что после выхода из кризиса и стабилизации

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

Мой дипломный проект: «Баланс и анализ распределительной сети»,  разрабатывается для предприятия «Витебскэнерго». Основной  его целью является - определения суммарного потребление электрической энергии по точкам учёта потребителей (юридических лиц, населения) в разрезе РЭСов, подстанций, фидеров, номеров ТП, КТП и расчёта небаланса по РЭСу, ПС, фидеру,  № ТП (КТП)


РАЗДЕЛ 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ

  1.   Назначение и область применения программного продукта

Программный продукт предназначен для :

  •   автоматизации процессов, связанных с сопоставлением величины электрической энергии, поступившей в конкретный фидер (КВЛ) 6/10 кВ отходящий от подстанции (ПС) и измеренной контрольным счетчиком, установленным на данном фидере, с суммарным потреблением по точкам учета потребителей, для выявления небаланса по фидеру.
  •  определения суммарного потребление электрической энергии по точкам учёта потребителей (юридических лиц, населения) в разрезе РЭСов, подстанций, фидеров, номеров ТП, КТП, номеров линий;
  •  импортирования информации электросетей расхода электроэнергии по вводу 10 кВ ПС, фидеру, номеру ТП (КТП);
  •  расчета  небаланса по РЭСу, ПС, фидеру,  № ТП (КТП).

1.2. Основания для разработки программного продукта

Данный программный продукт разработан на  основании задания на дипломное проектирование для учреждения образования Республики Беларусь «Витебский государственный политехнический колледж». Тема разработки: «Баланс и Анализ Распределительной Сети».

1.3. Источники входной информации

           Источниками входной информации являются входные данные:

  •  оплата бытовых и юридических лиц
  •  условный норматив
  •  контроьные показания, установленные на ТП

 1.4. Выходная информация

Выходные данные представлены в виде:

  •  сообщение о программе (выводиться при выборе пункта меню Справка);
  •  информация, выводимая на печать (Отчёт)(1.1,1.2);
  •  cообщения, выводимые во время работы с программой (1.3,1.4,1.5,1.6)


Таблица 1.1. « Отчет рейдовой бригады, Форма 1»

№ п/п

Название ПС

Σ расход эл.энергии по вводам 10кВ. ПС

Σ расхода эл. Энергии по фидерам 10кВ. ПС

Σ потребление эл.энергии по точкам учёта потребителей

Условный норматив

Небаланс

Небаланс по ПС

кВт*ч

кВт*ч

юр (кВт*ч)

быт (кВт*ч)

кВт*ч

%

кВт*ч

%

кВт*ч

%

Таблица 1.2. « Отчет рейдовой бригады, Форма 2»

№ п/п

Фидера 10кВ Название ПС

Σ потребление эл.энергии по точкам учёта быт потребителями

Σ потребление эл.энергии по точкам учёта юр. потребителями

Условный норматив

Небаланс

№ счётчика

Расчетный коэффициент

Расход электроэнергии

кВт*ч

кВт*ч

кВт*ч

кВт*ч

%

кВт*ч

%

Рисунок 1.3 – Сообщение при выборе номера лицевого абонента из диапозона

Рисунок 1.4 – Сообщение при выборе номера лицевого абонента из диапозона


Рисунок 1.5 – Сообщение, выводимое , если не указан год

Рисунок 1.6 – Сообщение, выводимое , если не указан месяц

1.5. Методы решения задачи

1.5.1. Методы поиска информации, применяемые для разрабатываемого программного продукта

         

           Поиск информации должен осуществляться по первому совпадению информации с последующим отсеиванием

Данные для расчёта берутся исходя из установленной предприятием стоимости продукции.


1.5.2. Расчётные формулы для получения промежуточных результатов

1.5.2.1 Расчет суммы потребление электроэнергии по точкам учёта юридическими и бытовыми абонентами по фидеру, ТП,РЭС,ПС:

SUMP= S1+S2+…+ Sn,                                  (1)

где SUMP - сумма оплаты абонентами

S – оплата абонентом электроэнергии

1.5.2.2 Расчета  небаланса по РЭСу, ПС, фидеру,  № ТП (КТП):

  SUMN= SUMP - (U+B),                                  (2)

где SUM– небаланс

R-расход электроэнергии

U- потребление электроэнергии по точкам учёта бытовыми потребителями,

B- потребление электроэнергии по точкам учёта юридическими потребителями .

1.5.2.3 Расчёт процента небаланса по РЭСу, ПС, фидеру, № ТП (КТП):

P=(SUMN/ SUMP)х100       (3)

где P– процент небаланса

SUM-небаланс

S- сумма расхода электроэнергии по фидерам


1.5.3. Описание методики решения задачи

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

Существует различные методы разработки программных продуктов:

  •  метод нисходящего проектирования;
  •  метод восходящего проектирования;
  •  метод расширения ядра;
  •  методика Джексона.

1.5.2.1. Метод нисходящего проектирования

Разработка программы методом нисходящего проектирования (функциональной декомпозиции), основана на двух стратегиях: пошаговом уточнении, анализе сообщений. Эти стратегии отличаются способами определения начальных спецификаций и методами, используемыми при разбиении задачи на части. При разработке нисходящим методом система рассматривается как древовидная структура, составленная из программных модулей. Модуль, расположенный наверху, содержит логику управления и решения самого высокого уровня. Ликвидируется отдельный этап интеграции — стыковки системы, т.к. отдельные части системы интегрируются постоянно. Модули более высоких уровней постоянно используются для кодирования модулей более низких уровней. В результате - критические модули оттестированы. Таким образом, нисходящий способ разработки позволяет получать программы, обладающие свойствами модульности и структурированности. Однако недостатком данного метода можно считать многократные корректировки модулей самого низкого уровня в связи с уточнениями, вносимыми в модули самого высокого уровня. Т.е. состав и способ решения поставленной задачи определяется модулями самого высокого уровня.

 

1.5.2.2. Метод восходящего проектирования

При разработке программ первыми пишутся программы обработки самого низкого уровня, а затем они отлаживаются и подготавливаются к стыковке. На этапе стыковки задачи определения данных возникают снова: стыковка задерживается до тех пор, пока не принимаются правильные определения данных и интерфейсы, после чего в свете внесённых изменений перерабатываются программы обработки с выполнением повторной отладки. К достоинствам данного метода можно отнести исправление недостатка нисходящего проектирования: модули самого низкого уровня проектируются самыми первыми  и, как правило, несут на себе решение специфической отдельной задачи, не зависящей от других модулей. Модули же более высокого уровня в идеале собираются из модулей более низкого уровня подобно конструктору. Серьезным недостатком является необходимость определения всех необходимых для работы программы модулей самого низкого уровня. Такой подход хорош при проектировании сравнительно небольших программ, либо программ со стабильным техническим заданием (если заказчик захочет изменить или дополнить техническое задание в процессе разработки программного продукта, то многие модули самого низкого уровня окажутся либо ненужными, либо недостаточно функциональными).

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

1.5.2.3. Метод расширения ядра

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

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

1.5.2.4. Методика Джексона

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

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

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


1.6. Требования к программному продукту

Данная программа будет выполнять функции генерацию отчетов по базе данных, предоставлять достоверную информацию пользователю, а именно:

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

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

1.6.1. Требования к конфигурации электронно-вычислительных средств

Все поиски, различные обработки информации должны выполняться оперативно.

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

Программное обеспечение – Windows XP

Монитор с разрешением 1280x1024.

Установлен Delphi 7

Установлен Microsoft Offise (Microsoft Access)

Манипулятор типа мышь

Процессор – Intel Pentium 433 и выше.

          1.6.2. Требования к операционной системе

Программное обеспечение – Windows XP

Процессор – Intel Pentium 433 и выше.

Видеоадаптер – SVGA и лучше.

Свободное место на жестком диске – не менее 16 Мб.

Оперативная память - 512 Мб и выше.

Монитор с разрешением 1280x1024.


1.6.3. Требования к языку программирования

Язык программирования Delphi 7 – объектно-ориентированный язык программирования под операционную систему Windows, построенный на основе языка Pascal. Delphi имеет развитую интегрированную среду разработчика, процесс создания программного продукта в которой строиться на основе набора компонентов (объектов).

В сравнении с другими языками программирования язык Delphi 7 имеет следующие отличия:

  •  в Delphi 7 можно разрабатывать библиотеки .DLL для компонентов, форм, функций;
  •  возможность работы с локальными и удаленными данными любых типов (InterBase,      Sybase, Microsoft SQL, dBase, Paradox и другие).

Достоинства языка программирования Delphi 7:

  •  высокопроизводительный компилятор в машинный код;
  •  объектно-ориентированная модель компонент;
  •  Delphi 7 – система программирования, ориентированная на «быструю разработку». В основе этой системы (RAD-системы) лежит технология визуального проектирования и событийного программирования;
  •  масштабируемые средства для построения баз данных.

          

Недостатки языка программирования Delphi 7:

  •  большой объем получаемых исполняемых файлов;
  •  для работы необходим большой объем оперативной памяти (~70 Мб).

2. РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА

2.1. Постановка задачи

2.1.1. Разработка структуры входных данных

Таблица 2.1 -  «res»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Название

name

Текстовый

30

Таблица 2.2 -  «Station»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Код РЭС

indexRES

Числовой

Длинное целое

Название

name

Текстовый

30

Таблица 2.3 -  «fider»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Код ПС

indexPS

Числовой

Длинное целое

Название

name

Текстовый

25

Таблица 2.4 -  «tp»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Код фидера

indexFider

Числовой

Длинное целое

Название

name

Текстовый

25


Таблица 2.5 -  «
abons»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Код сектора

indexSector

Числовой

Длинное целое

Код ТП

indexTP

Числовой

Длинное целое

Название

name

Текстовый

30

Лицевой номер

abonBegin

Текстовый

7

Лицевой номер

abonEnd

Текстовый

7

Таблица 2.6  -  «controlData»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Код ТП

indexConnect

Числовой

Длинное целое

Дата

interval

Текстовый

6

Потреблено электроэнергии абонентом

data

Числовой

30

Лицевой счёт

NumCounter

Текстовый

16

Расчётный  коэффициент

rCoefficient

Числовой

7


Таблица 2.7 -  «Ur»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Код ТП

indexConnect

Числовой

Длинное целое

Код абонента

indexARM

Числовой

Длинное целое

Маска

mask

Числовой

Длинное целое

Номер абонента

nom

Текстовый

8

Точка

point

Текстовый

47

Адрес абонента

adres

Текстовый

47

Лицевой счёт абонента

numShet

Текстовый

16

Расчётный коэффициент

rKoff

Числовой

Длинное целое

Таблица 2.8 -  «SaleAbonOtdel»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Номер абонента

abon

Текстовый

9

Дата

data

Дата/время

Маска

mask

Числовой

Длинное целое

Потреблено электроэнергии абонентом

sale

Числовой

Длинное целое

Код сектора

indexSector

Числовой

Длинное целое

Таблица 2.9 -  «SaleAbonSector»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Номер абонента

abon

Текстовый

9

Дата

data

Дата/время

Маска

mask

Числовой

Длинное целое

Потреблено электроэнергии абонентом

sale

Числовой

Длинное целое

Таблица 2.10 -  «SaleUrAbons»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Код абонента

indexAbons

Числовой

Длинное целое

Потреблено электроэнергии абонентом

saleAbon

Числовой

Длинное целое

Дата

period

Текстовый

8

Маска оплаты

maskSale

Числовой

Длинное целое

Таблица 2.11 -  «Sector»

Наименование реквизита

Код реквизита

Тип данных

Размерность

1

2

3

4

Код

index

Числовой

Длинное целое

Название сектора

name

Текстовый

35


. 2.1.2.  Разработка диаграмм

В соответствие с методом разработки данного программного продукта и классом, к которому относится решаемая задача, были построены диаграммы классов, вариантов использования,  последовательности.

Диаграмма классов наиболее полно отражает схему работы приложения, так как программный продукт был разработан в среде объектно-ориентированного программирования. Диаграмма классов, разработанная в среде Rational Rose, представлена на рисунке 2.2,  диаграмма вариантов использования – на рисунке 2.1 а диаграмма последовательности – на рисунке 2.3.

Рисунок 2.1 – Диаграмма вариантов использования

Рисунок 2.2 – Диаграмма классов

Рисунок 2.3 – Диаграмма последовательности


Рисунок 2.4 – Диаграмма компонентов

Рисунок 2.5 - Диаграмма развертывания 


2.1.3. Построение связей между объектами

Рисунок 2.6 -  Связи модулей программы

  1.  Создание программных модулей

 Delphi поддерживает разделение программы на модули, причем допускается вложенное включение модулей вплоть до бесконечного порядка. Преимущество модульного подхода имеет тот же плюс, что и технология объектно-ориентированного подхода – инкапсуляция (скрытие) данных. Неважно, как модуль выполняет поставленную задачу – важно знать, какие методы (процедуры) необходимо вызвать для работы модуля.

Модули программы:

Loadмодуль осуществляет выбора загрузки пользователем.

Menu – модуль, содержащий главную форму программы.

ReportRBrigad (Отчёты) - модуль предназначенный для создания отчёта для баланса для рейдовых бригад.

ReportUR (Отчёты) -  модуль предназначен для создания отчёта потребления электроэнегрии юридическими лицами.

SearchPR (Сервис) -  модуль предназначенный для поиска привязки фидеров и ТП к РЭС.

PreviewOplata (Сервис) - модуль предназначенный для просмотра оплаты абонентами.

Logs (Администрирование) - модуль предназначенный для просмотра лог файла.

Information (Сервис) – модуль предназначенный для изменения данных об организации занимающейся продажей продукции.

Справка– модуль предназначенный для запуска справки.

  1.  Пример контрольного теста

Для того, чтобы запустить программу необходимо двойным щелчком левой кнопка мыши щелкнуть по файлу BARS.exe. Появляется  окно входа в программу (рис 2.7):

Рисунок 2.7 – Окно входа в программу


Далее появляется главное меню программы (
рис 2.8):

Рисунок 2.8 – Главное меню программы

Форма просмотра оплаты электроэнергии абонентами (рис 2.9):

Рисунок 2.9 – Форма просмотра оплаты


Чтобы просмотреть оплату юридических абонентов за необходимый период, необходимо перейти на форму «Выбор потребления юридических лиц»
(рис 2.10):

Рисунок 2.10 – Форма просмотра оплаты юридических абонентов

Чтобы просмотреть небаланс оплаты электроэнергии по РЭСу, фидеру , ПС и ТП за необходимый период, необходимо перейти на форму «Баланс для рейдовых бригад» (рис 2.11):

Рисунок 2.11 – Форма расчёта небаланса


Для просмотра оплаты электроэнергии бытовыми абонентами  по участку за необходимый период, необходимо перейти на форму «Баланс для участка по фидеру»
(рис 2.12):

Рисунок 2.12 – Форма просмотра оплаты электроэнергии бытовыми абонентами  

Чтобы просмотреть контрольные показания зарегистрированные на ПС или фидере необходимо перейти на форму «Контрольные показания» (рис 2.13):

Рисунок 2.13 – Контрольные показания по фидеру, ПС


Также есть возможность поиска бытовых абонентов по номеру лицевого счёта и юрид
ический – по номеру договора (рис. 2.14):

Рисунок 2.14 – Форма поиска


3. ЭКОНОМИЧЕСКАЯ ЧАСТЬ

3.1. Обоснование себестоимости программного обеспечения (ПО) «Баланс и анализ распределительной сети»  филиала  «Энергосбыт».

Расчет произведен по данным на 30 апреля 2013 года.

3.1.1 Определение трудоемкости разработки ПО.

Определение трудоёмкости разработки ПО ведется следующим образом: на основании опытно-статистического (суммарного) метода, в целом на всю разработку, исходя из того, что ее выполнит один программист 2-ой категории. Распределение трудоемкости по стадиям разработка ведется в соответствии с ГОСТ 19.102-77 «Стадии разработки» исходя из ориентировочного распределения затрат времени в таблице 3.1.

Таблица 3.1 – Ориентировочное распределение затрат времени

Вид работ

Процент от трудоёмкости

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

Всего

Машинное время

Техническое задание, эскизный проект

10

45

Технический проект

20

90

Рабочий проект

(машинное время)

60

270

270

Внедрение в т. ч.−

машинное время−

немашинное время

10

5

5

45

22,50

22,50

22,50

Итого:

100

450

292,50

Примечание: рабочий проект – машинное время является перекрываемым, то есть учитывается и в немашинном времени для расчета оплаты труда программиста.

Данные о трудоёмкости разработки, определенные опытно-статистическим путём подтверждаю.

Общий объём программного обеспечения – количество команд (VkПО) –2150

Руководитель дипломного проекта _________________________ С.А.Шеварёва

                  (подпись)


3.1.2.  Определение стоимости машинного времени

3.1.2.1.  Исходная информация

Исходная информация для расчета экономической части получена в РУП «Витебскэнерго» филиал «Энергосбыт».

Таблица 3.2 – Исходная информация

Показатель

Условное обозначение

Единицы измерения

Значение

Балансовая стоимость компьютера

БК

Рублей

4323303

Мощность, потребляемая компьютером

МК

кВт

0,30

Полезный фонд времени работы компьютера за год

Час

2016

Балансовая стоимость принтера

БП

Рублей

861181

Мощность, потребляемая принтером

МП

кВт

0,33

Полезный фонд времени работы принтера за год

Час

126

Стоимость 1 кВт/час

С

Рублей

1247,7

Площадь на 1 рабочее место

Sрм

м2

6

Стоимость 1 м2 производственной площади

Спл

Рублей

1697173

Норма амортизации для оборудования

Нао

Проценты

20

Норма амортизации для зданий

Напл

Проценты

2,366304

Отчисления на текущий ремонт оборудования (в процентах от балансовой стоимости)

РО

Проценты

2,14

Часовая тарифная ставка 13 разряда

ЧТС13

Рублей

9085

Данные подтверждаю

Начальник отдела ИТ

филиала «Энергосбыт» РУП Витебскэнерго»

Пашкевич Д.П.                                                                                _____________

                                                                                                       (печать, подпись)


3.2.2.  Определение стоимости потребляемой электроэнергии, руб.:

Сэл = (МК × FK + МП × FП) × С × Kвр × Кс                              (3.1)

           где Kвр – коэффициент, учитывающий использование по времени (Kвр = 0,8);
           Кс – коэффициент, учитывающий потери в сети (Кс =1,05).

Сэл = (0,30 ×  2016 + 0,33 × 126) × 1247,7 × 0,8 × 1,05 = 677450,19

3.2.3.  Определение суммы амортизационных отчислений, руб.:

Сао =   +                        (3.2)

Сао = ((4323303+861181)×20)/100 + (6×1697173×2,366304)/100 = 1277858,44

3.2.4.  Определяем затраты на текущий ремонт оборудования, руб.:

             ЗР= (БК +БП) × РО/ 100                                           (3.3)

ЗР = (4323303+861181)×2,14/100 = 110947,96

Результаты расчетов сведены в таблицу 3.3.

3.2.5. Расчет затрат на один машино-час.

Таблица 3.3 – Результаты затрат на один машино-час

Показатель

Условное обозначение

Значение, рублей

За год

(ЗМг)

На 1 машино-час (СМч)

Стоимость потребляемой электроэнергии

Сэл

677450,19

336,04

Сумма ежегодных амортизационных отчислений

Сао

1277858,44

633,86

Затраты на текущий ремонт оборудования

ЗР

110947,96

55,03

   Итого:

2066256,59

1024,93


Затраты на один машино-час, руб.:

             

СМр =                                                            (3.4)

СМр = 677450,19/ 2016 = 336,04

   СМр = 1277858,44/ 2016  = 633,86

                                                СМр = 110947,96/ 2016  = 55,03

   СМр = 2066256,59 / 2016 =1024,93

 

3.2.6.  Расчет стоимости машинного времени, руб.:

 

     СМвр = Тм × Смч                  ( 3.5)

где Тм – машинное время работы компьютера в расчёте на программу, час;

Смчстоимость одного машино-часа, руб.

СМвр = 292,50× 1024,93= 299792,03

 

3.3. Определение себестоимости программного обеспечения, как базы для формирования цены

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

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

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

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

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

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

На основании сметы затрат рассчитывается себестоимость и отпускная цена ПО.

3.3.1. Расчет затрат на материалы

По статье «Материалы» отражаются расходы на магнитные носители, бумагу, красящие ленты и другие материалы, необходимые для разработки ПО.

Расчет затрат на материалы (М), необходимые для разработки программного обеспечения (ПО) осуществляется по нормативу (Нр) на 100 команд (принимаем равным 4000 руб.), с учетом общего объема команд (VкПО ) (берется учащимся по факту, исходя из полученного им количества команд при разработке ПО).

Расчет осуществляется по формуле, в рублях:

     М = Vk ПО ×  НР / 100                    (3.6)

М = 2150× 4000 / 100 = 86000

3.3.2.  Расчет затрат на оплату труда

Расчёт основной заработной платы ведётся по видам работ в таблице 3.4.

  Зпр = Т × ЧТСi                    (3.6.а)


Таблица 3.4 – Расчет основной заработной платы

Вид работ

Трудоемкость (Ti), час

Квалификационный разряд

Часовая тарифная ставка (ЧТСi), руб.

Зарплата прямая, руб.

Техническое задание, эскизный проект

45

13

9085

408825

Технический проект

90

13

9085

817650

Рабочий проект

270

13

9085

2452950

Внедрение в т. ч.

-немашинное время

- машинное время

         

22,50

22,50

13

13

9085

9085

204412,50

204412,50

Итого прямая заработная плата (ЗПР)

4088250

Премии (30% от прямой заработной  платы) (Пр)

1226475

Итого, основная заработная плата (ЗПР + Пр)

5314725

Примечание: инженер-программист II категории – 13 разряд.  

             

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

       Зд = Зос × Нд / 100                                                 (3.7)

где Зососновная заработная плата;

Зд – дополнительная заработная плата на конкретное ПО в руб.;

Нд – норматив дополнительной заработной платы принимается 10% от основной.

Зд = 5314725 × 10 / 100 = 531472,5


3.3.3.  Расчет себестоимости программного обеспечения ведется в таблице 3.5.

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

Зсз = (Зос + Зд) × Нсз / 100                                        (3.8)

где Нсз - норматив отчислений в фонд социальной защиты населения (%).

Зсз = (5314725 + 531472,5) × 34/100=1987707,15

Обязательное страхование от несчастных случаев на производстве и профессиональных заболеваний (Зстр) берется по нормативу, установленному в целом по организации (Нстр – 0,69 %), в рублях:

         Зстр = (Зос + Зд) × Нстр / 100                                    (3.9)

Зстр = (5314725 + 531472,5) × 0,69 / 100 = 40338,76

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

           Пз = Зос × Нпз / 100                                                (3.10)

Пз = 5314725 × 98/100 = 5208430,50

   

Общая сумма всех расходов по статьям сметы рассчитывается в таблице 1.5.

Кроме того, организация-разработчик осуществляет затраты на сопровождение и адаптацию ПО (Рса), которые определяются по нормативу Нрса (принимаем 4%):

           Рса = С × Нрса / 100                                                (3.11)

где С – полная себестоимость ПО без учета расходов по сопровождению и адаптацию, руб.    

  

Рса = 13468465,94× 4 / 100=538738,64

          Общая сумма расходов на разработку (с затратами на сопровождение и адаптацию) (Спл) определяется по формуле:

             Спл = C +  Pca                          (3.12)                                                                                                                                 

Спл = 13468465,94+ 538738,64= 14007204,58


Результаты всех расчетов сведены в таблицу 3.5.

Таблица 3.5 – Стоимость программного обеспечения

Наименование стадий затрат

Сумма, руб.

Обоснование расчета

1.Затраты на материалы

86000,00

Раздел 3.3.1

2.Стоимость машинного времени

299792,03

Раздел 3.2.6

3.Основная заработная плата

5314725,00

Таблица 3.4

4.Дополнительная заработная плата

   531472,50

10% от п.3

5.Итого фонд оплаты труда (ФОТ)

 5846197,50

п.3+п.4

6.Отчисления в фонд социальной защиты населения

 1987707,15

34% от п.3.5

7.Обязательное страхование от несчастных случаев на производстве и профессиональных заболеваний

40338,76

0,69% от п.3.5

8.Итого: отчисления на социальные нужды

 2028045,91

п.6+п.7

9.Прочие расходы (арендная плата, услуги связи, коммунальные услуги и др.)

 5208430,50

98% от п.3.3

10.Полная себестоимость без учета расходов на сопровождение и адаптацию

13468465,94

п.3.1+п.3.2+п.3.5+п.3.8+п.3.9

11.Расходы на сопровождение и адаптацию

   538738,64

4% от п.3.10

12.Полная себестоимость с учетом расходов на сопровождение и адаптацию

14007204,58

п.10+п.11


ЗАКЛЮЧЕНИЕ

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

Программа «Баланс и Анализ Распределительной Сети»  соответствует исходному техническому заданию. На основе выполненных тестов можно сделать вывод: отвечает  эксплуатационным, экономическим и технологическим требованиям. Обладает высокой надёжностью, наглядностью и универсальностью.


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1.  ГОСТ 19.101-77. Единая система программной документации. Программа и методика испытаний. – Введ. 01.01. 1981 г. – Москва : Изд-во стандартов, 2001.
  2.  ГОСТ 19.102-77. Единая система программной документации. Стадии разработки. – Введ. 81-07-01. – Москва : Изд-во стандартов, 2001.
  3.  ГОСТ 19.104-78. Единая система программной документации. Основные надписи. – Введ. 81-07-01. – Москва : Изд-во стандартов, 2001.
  4.  ГОСТ 19.106-78. Единая система программной документации. Требования к программным документам, выполненным печатным способом. – Введ 81-07-01. – Москва : Изд-во стандартов, 2001.
  5.  ГОСТ 19.201-78. Единая система программной документации. Техническое задание. Требования к содержанию и оформлению. – Введ. 81-07-01. – Москва : Изд-во стандартов, 2001.
  6.  ГОСТ 19.103-80. Единая система программной документации. Схемы алгоритмов и программ. Обозначение условные графические. – Введ. 81-07-01. – Москва : Изд-во стандартов, 2001.
  7.  ГОСТ 19.701-80. Единая система программной документации. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. – Введ 81-07-01 – Москва: Изд-во стандартов, 2001.
  8.  ГОСТ 7.1-2003. Единая система программной документации.  Библиографическая запись. Библиографическое описание. Общие требования и правила составления. – Взамен      ГОСТ 7.1-84, ГОСТ 7.16-79, ГОСТ 7.18-79, ГОСТ 7.34-81, ГОСТ 7.40-82.; Введ. 2004-10-01. – Минск : Госстандарт Республики Беларусь, 2004. –  47 с.
  9.  Фаронов В.В. Система программирования    DELPHI/ В.В. Фаронов. – СПб. : БХВ-Петербург, 2004. – 320 с.: ил.
  10.  Дарахвелидзе П.Г. Программирование в Delphi 7/ П.Г. Дарахвелидзе, Е.П. Макров. – СПб. : БХВ-Петербург, 2003. – 784 с: ил.
  11.  Архангельский А.Я. Программирование в Delphi. Учебник по классическим версиям Delphi/ А.Я. Архангельский. – М. : ООО «Бином-Пресс», 2006. – 1152 с.: ил.


ПРИЛОЖЕНИЕ 1

Исходный текст программы

unit ReportRBrigad;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, sButton, sLabel, DBCtrls, sDBLookupComboBox,

 sCheckBox, sComboBox, sEdit, DB, ADODB,ComObj, Grids, DBGrids, acDBGrid,

 ComCtrls;

type

 TForm10 = class(TForm)

   sEdit1: TsEdit;

   sEdit2: TsEdit;

   sComboBox1: TsComboBox;

   sCheckBox1: TsCheckBox;

   sDBLookupComboBox1: TsDBLookupComboBox;

   sDBLookupComboBox2: TsDBLookupComboBox;

   sDBLookupComboBox3: TsDBLookupComboBox;

   sDBLookupComboBox4: TsDBLookupComboBox;

   sLabel1: TsLabel;

   sLabel2: TsLabel;

   sLabel3: TsLabel;

   sLabel4: TsLabel;

   sLabel5: TsLabel;

   sLabel6: TsLabel;

   sLabel7: TsLabel;

   sButton1: TsButton;

   sButton2: TsButton;

   DataRES: TDataSource;

   DataPS: TDataSource;

   DataFider: TDataSource;

   DataTP: TDataSource;

   RES: TADOQuery;

   PS: TADOQuery;

   Fider: TADOQuery;

   TP: TADOQuery;

   ADOQuery1: TADOQuery;

   DataSource1: TDataSource;

   ADOUr: TADOQuery;

   ADOCon: TADOQuery;

   ADO1: TADOQuery;

   ADO2: TADOQuery;

   ADO3: TADOQuery;

   procedure sComboBox1Click(Sender: TObject);

   procedure sDBLookupComboBox1Click(Sender: TObject);

   procedure sButton2Click(Sender: TObject);

   procedure sButton1Click(Sender: TObject);

   procedure sDBLookupComboBox2Click(Sender: TObject);

   procedure sDBLookupComboBox3Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form10: TForm10;

 str,s,d1,d2,d: string;

 i,j,k,dd,Sum,su,sb,kol,ss:integer;

b,u,c,p, rk,re,pr:Double;

tmpY:integer;

implementation

uses Balance, FormReport, SpisokAbonVFidere ;

{$R *.dfm}

procedure TForm10.sComboBox1Click(Sender: TObject);

begin

if sComboBox1.ItemIndex=0 then

 sDBLookupComboBox1.Enabled:=true;

 sDBLookupComboBox1.KeyValue:=Null;

 sDBLookupComboBox2.Enabled:=false;

 sDBLookupComboBox2.KeyValue:=Null;

 sDBLookupComboBox3.Enabled:=false;

 sDBLookupComboBox3.KeyValue:=Null;

 sDBLookupComboBox4.Enabled:=false;

 sDBLookupComboBox4.KeyValue:=Null;

if sComboBox1.ItemIndex=1 then

begin

 sDBLookupComboBox1.Enabled:=true;

 sDBLookupComboBox1.KeyValue:=Null;

 sDBLookupComboBox2.Enabled:=true;

 sDBLookupComboBox2.KeyValue:=Null;

 sDBLookupComboBox3.Enabled:=false;

 sDBLookupComboBox3.KeyValue:=Null;

 sDBLookupComboBox4.Enabled:=false;

 sDBLookupComboBox4.KeyValue:=Null;

end;

if sComboBox1.ItemIndex=2 then

begin

 sDBLookupComboBox1.Enabled:=true;

 sDBLookupComboBox1.KeyValue:=Null;

 sDBLookupComboBox2.Enabled:=true;

 sDBLookupComboBox2.KeyValue:=Null;

 sDBLookupComboBox3.Enabled:=true;

 sDBLookupComboBox3.KeyValue:=Null;

 sDBLookupComboBox4.Enabled:=false;

 sDBLookupComboBox4.KeyValue:=Null;

end;

if sComboBox1.ItemIndex=3 then

begin

 sDBLookupComboBox1.Enabled:=true;

 sDBLookupComboBox1.KeyValue:=Null;

 sDBLookupComboBox2.Enabled:=true;

 sDBLookupComboBox2.KeyValue:=Null;

 sDBLookupComboBox3.Enabled:=true;

 sDBLookupComboBox3.KeyValue:=Null;

 sDBLookupComboBox4.Enabled:=true;

 sDBLookupComboBox4.KeyValue:=Null;

end;

end;

procedure TForm10.sDBLookupComboBox1Click(Sender: TObject);

begin

if sComboBox1.ItemIndex=1 then

begin

 PS.Active:=false;

 ps.SQL.Clear;

 ps.SQL.Add('select Station.name from Station, res where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index');

 ps.Active:=true;

end;

 if sComboBox1.ItemIndex=2 then

begin

 PS.Active:=false;

 ps.SQL.Clear;

 ps.SQL.Add('select Station.name from Station, res where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index');

 ps.Active:=true;

end;

 if sComboBox1.ItemIndex=3 then

begin

 PS.Active:=false;

 ps.SQL.Clear;

 ps.SQL.Add('select Station.name from Station, res where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index');

 ps.Active:=true;

end;

end;

procedure TForm10.sButton2Click(Sender: TObject);

begin

form10. Hide;

form6.Show;

end;

procedure TForm10.sButton1Click(Sender: TObject);

var  XL,Sheet: Variant;

label m,mm;

begin

if sComboBox1.ItemIndex=1 then

 begin

     try

     XL:=CreateOleObject('Excel.Application');

     except

     ShowMessage('Не удалось запустить MS Excel. Действие отменено.');

      Exit;

 end;

 s:=sEdit2.Text+'.'+sEdit1.Text;

 str:=sEdit1.Text+sEdit2.Text;

XL.WorkBooks.Add;

Sheet:= XL.ActiveWorkBook.Sheets[1];

Sheet.Name:= 'Лист № 1';

Sheet.Cells[2,1].Font.Name := 'Times New Roman CYR';

Sheet.Cells[2,1].Font.Size := 13;

Sheet.Cells[2,1].Font.Bold := True;

Sheet.Cells[2,1]:= sComboBox1.Text;

Sheet.Cells[4,1].Font.Size := 12;  //Размер шрифта

Sheet.Cells[4,1].Font.Bold := True;//Жирный

Sheet.Cells[4,2].Font.Size := 12;

Sheet.Cells[4,2].Font.Bold := True;

Sheet.Cells[4,3].Font.Size := 12;

Sheet.Cells[4,3].Font.Bold := True;

Sheet.Cells[4,4].Font.Size := 12;

Sheet.Cells[4,4].Font.Bold := True;

Sheet.Cells[6,5].Font.Size := 12;

Sheet.Cells[6,5].Font.Bold := True;

Sheet.Cells[6,6].Font.Size := 12;

Sheet.Cells[6,6].Font.Bold := True;

Sheet.Cells[6,7].Font.Size := 12;

Sheet.Cells[6,7].Font.Bold := True;

Sheet.Cells[6,8].Font.Size := 12;

Sheet.Cells[6,8].Font.Bold := True;

Sheet.Cells[6,9].Font.Size := 12;

Sheet.Cells[6,9].Font.Bold := True;

Sheet.Cells[6,10].Font.Size := 12;

Sheet.Cells[6,10].Font.Bold := True;

Sheet.Cells[6,11].Font.Size := 12;

Sheet.Cells[6,11].Font.Bold := True;

Sheet.Cells[5,5].Font.Size := 12;

Sheet.Cells[5,5].Font.Bold := True;

Xl.Range[Xl.Cells[4, 2], XL.Cells[4, 5]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 2], XL.Cells[4, 5]].Font.Bold := True;

Xl.Range[Xl.Cells[5, 2], XL.Cells[6, 2]].Font.Size := 12;

Xl.Range[Xl.Cells[5, 2], XL.Cells[6, 2]].Font.Bold := True;

Xl.Range[Xl.Cells[5, 3], XL.Cells[6, 3]].Font.Size := 12;

Xl.Range[Xl.Cells[5, 3], XL.Cells[6, 3]].Font.Bold := True;

Xl.Range[Xl.Cells[5, 4], XL.Cells[6, 4]].Font.Size := 12;

Xl.Range[Xl.Cells[5, 4], XL.Cells[6, 4]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 6], XL.Cells[5, 6]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 6], XL.Cells[5, 6]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 7], XL.Cells[5, 7]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 7], XL.Cells[5, 7]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 8], XL.Cells[4, 9]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 8], XL.Cells[4, 9]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 10], XL.Cells[4, 11]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 10], XL.Cells[4, 11]].Font.Bold := True;

Xl.Range[Xl.Cells[5, 10], XL.Cells[5, 11]].Font.Size := 12;

Xl.Range[Xl.Cells[5, 10], XL.Cells[5, 11]].Font.Bold := True;

Sheet.Cells[4,1].Borders.LineStyle:=1;//бводка ячейки

Sheet.Cells[4,2].Borders.LineStyle:=1;

Sheet.Cells[4,3].Borders.LineStyle:=1;

Sheet.Cells[4,4].Borders.LineStyle:=1;

Sheet.Cells[6,5].Borders.LineStyle:=1;

Sheet.Cells[6,6].Borders.LineStyle:=1;

Sheet.Cells[6,7].Borders.LineStyle:=1;

Sheet.Cells[6,8].Borders.LineStyle:=1;

Sheet.Cells[6,9].Borders.LineStyle:=1;

Sheet.Cells[6,10].Borders.LineStyle:=1;

Sheet.Cells[6,11].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 1], XL.Cells[6, 1]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 2], XL.Cells[4, 5]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[5, 2], XL.Cells[6, 2]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[5, 3], XL.Cells[6, 3]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[5, 4], XL.Cells[6, 4]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 6], XL.Cells[5, 6]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 7], XL.Cells[5, 7]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 8], XL.Cells[4, 9]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[5, 8], XL.Cells[5, 9]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 10], XL.Cells[4, 11]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[5, 10], XL.Cells[5, 11]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 1], XL.Cells[6, 1]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 2], XL.Cells[4, 5]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

 Xl.Range[Xl.Cells[5, 2], XL.Cells[6, 2]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[5, 3], XL.Cells[6, 3]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[5, 4], XL.Cells[6, 4]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 6], XL.Cells[5, 6]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 7], XL.Cells[5, 7]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 8], XL.Cells[4, 9]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 8], XL.Cells[5, 8]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 10], XL.Cells[4, 11]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 10], XL.Cells[5, 11]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Sheet.Cells[5,5].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

   Sheet.Cells[4,1].ColumnWidth :=5;

   Sheet.Cells[5,2].ColumnWidth :=20;

   Sheet.Cells[5,2].RowHeight :=50;

   Sheet.Cells[5,3].ColumnWidth :=20;

   Sheet.Cells[5,3].RowHeight :=50;

   Sheet.Cells[5,4].ColumnWidth :=20;

   Sheet.Cells[5,4].RowHeight :=50;

   Sheet.Cells[5,5].RowHeight :=50 ;

   Sheet.Cells[5,5].ColumnWidth :=20;

   Sheet.Cells[5,6].ColumnWidth :=20;

   Sheet.Cells[5,7].ColumnWidth :=20;

Xl.Range[Xl.Cells[4, 1], XL.Cells[6, 1]]:= '№ п/п';

Xl.Range[Xl.Cells[4, 1], XL.Cells[6, 1]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[4, 2], XL.Cells[4, 5]]:='Фидера 10кВ ПС '+ sDBLookupComboBox2.KeyValue;

Xl.Range[Xl.Cells[4, 2], XL.Cells[4, 5]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[5, 2], XL.Cells[6, 2]]:= '№';

Xl.Range[Xl.Cells[5, 2], XL.Cells[6, 2]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[5, 3], XL.Cells[6, 3]]:='№ счётчика';

Xl.Range[Xl.Cells[5, 4], XL.Cells[6, 3]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[5, 4], XL.Cells[6, 4]]:='расчетный коэффициент';

Xl.Range[Xl.Cells[5, 4], XL.Cells[6, 4]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[4, 6], XL.Cells[5, 6]]:='потребление эл.энергии по точкам учёта быт потребителями';

Xl.Range[Xl.Cells[4, 6], XL.Cells[5, 6]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[4, 7], XL.Cells[5, 7]]:='потребление эл.энергии по точкам учёта юр. потребителями';

Xl.Range[Xl.Cells[4, 7], XL.Cells[5, 7]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[4, 8], XL.Cells[4, 9]]:='Условный норматив';

Xl.Range[Xl.Cells[4, 8], XL.Cells[4, 9]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[4, 10], XL.Cells[5, 11]]:='Небаланс';

Xl.Range[Xl.Cells[4, 10], XL.Cells[5, 11]].HorizontalAlignment:=3;

Sheet.Cells[6,5]:='кВт*ч';

Sheet.Cells[6,6]:='кВт*ч';

Sheet.Cells[5,5]:='Расход электроэнергии ';

Sheet.Cells[5,5].HorizontalAlignment:=3;

Sheet.Cells[6,7]:='кВт*ч';

Sheet.Cells[6,8]:='кВт*ч';

Sheet.Cells[6,10]:='кВт*ч';

Sheet.Cells[6,9]:='%';

Sheet.Cells[6,11]:='%';

if sCheckBox1.Checked=true then

 begin

 dd:=StrToInt(sEdit2.Text)-1;

 d1:='01.'+'0'+IntToStr(dd)+'.'+sEdit1.Text;

 d2:='30.'+'0'+IntToStr(dd)+'.'+sEdit1.Text;

 end

 else

 begin

 d1:='01.'+s;

 d2:='30.'+s;

 end;

{ADOQuery1.Active:=false;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('select fider.name,controlData.NumCounter,controlData.rCoefficient,controlData.data');

ADOQuery1.SQL.Add('from fider, res, Station,controlData');

ADOQuery1.SQL.Add('where res.name="'+sDBLookupComboBox1.KeyValue+'"');

ADOQuery1.SQL.Add('and Station.indexRES=res.index and Station.name="'+sDBLookupComboBox2.KeyValue+'"');

ADOQuery1.SQL.Add('and fider.indexPS=Station.index');

ADOQuery1.SQL.Add('and controlData.indexConnect=fider.index');

ADOQuery1.SQL.Add('and [controlData.interval]="'+str+'"');

ADOQuery1.Active:=true;      }

ADOQuery1.Active:=false;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('select fider.name,controlData.NumCounter,controlData.rCoefficient,controlData.data');

ADOQuery1.SQL.Add('from');

ADOQuery1.SQL.Add('(((fider');

ADOQuery1.SQL.Add('left join Station');

ADOQuery1.SQL.Add('  on fider.indexPS=Station.index)');

ADOQuery1.SQL.Add('left join res');

ADOQuery1.SQL.Add('  on Station.indexRES=res.index)');

ADOQuery1.SQL.Add('left join controlData');

ADOQuery1.SQL.Add('  on controlData.indexConnect=fider.index)');

ADOQuery1.SQL.Add('where res.name="'+sDBLookupComboBox1.KeyValue+'"');

ADOQuery1.SQL.Add('  and Station.name="'+sDBLookupComboBox2.KeyValue+'"');

//ADOQuery1.SQL.Add('and fider.indexPS=Station.index');

ADOQuery1.SQL.Add('  and [controlData.interval]="'+str+'"');

ADOQuery1.Active:=true;

   ADO1.Active:=false;

   ADO1.SQL.Clear;

   ADO1.SQL.Add(' select  fider.name,SUM(SaleUrAbons.saleAbon) as Summm ') ;

   ADO1.SQL.Add('  from res,Station,fider,Ur,SaleUrAbons,tp ') ;

   ADO1.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

   ADO1.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

   ADO1.SQL.Add('    and fider.indexPS=Station.index') ;

   ADO1.SQL.Add('    and tp.indexFider=fider.index and Ur.indexConnect=tp.index ') ;

   ADO1.SQL.Add('    and SaleUrAbons.indexAbons=Ur.indexARM and SaleUrAbons.period="'+s+'"');

   ADO1.SQL.Add('  group by fider.name') ;

   ADO1.Active:=true;

           ADO2.Active:=false;

           ADO2.SQL.Clear;

           ADO2.SQL.Add(' select fider.name,SUM(SaleAbonOtdel.sale) as SummmB ') ;

           ADO2.SQL.Add('  from res,Station,fider,abons,tp,SaleAbonOtdel ') ;

           ADO2.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

           ADO2.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

           ADO2.SQL.Add('    and fider.indexPS=Station.index ') ;

           ADO2.SQL.Add('    and tp.indexFider=fider.index and abons.indexTP=tp.index ') ;

           ADO2.SQL.Add('    and SaleAbonOtdel.abon>=abons.abonBegin and SaleAbonOtdel.abon <=abons.abonEnd ') ;

           ADO2.SQL.Add('    and  SaleAbonOtdel.data between :SDate and :FDate group by fider.name');

           ADO2.Parameters.ParseSQL(ado2.SQL.Text,True);

           ADO2.Parameters.ParamByName('SDate').DataType:=ftDate;

           ADO2.Parameters.ParamByName('FDate').DataType :=ftDate;

           ADO2.Parameters.ParamByName('SDate').Value := StrToDate(d1);

           ADO2.Parameters.ParamByName('FDate').Value := StrToDate(d2);

           ADO2.SQL.Add('union all');

           ADO2.SQL.Add('select fider.name,SUM(SaleAbonsSector.sale) as SummmB ') ;

           ADO2.SQL.Add('  from res,Station,fider,abons,tp,SaleAbonsSector ') ;

           ADO2.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

           ADO2.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

           ADO2.SQL.Add('    and fider.indexPS=Station.index   ') ;

           ADO2.SQL.Add('    and tp.indexFider=fider.index and abons.indexTP=tp.index ') ;

           ADO2.SQL.Add('    and SaleAbonsSector.Abons>=abons.abonBegin and SaleAbonsSector.Abons <=abons.abonEnd ') ;

           ADO2.SQL.Add('    and  SaleAbonsSector.data between :SDate and :FDate group by fider.name');

           ADO2.Parameters.ParamByName('SDate').DataType :=ftDate;

           ADO2.Parameters.ParamByName('FDate').DataType :=ftDate;

           ADO2.Parameters.ParamByName('SDate').Value := StrToDate(d1);

           ADO2.Parameters.ParamByName('FDate').Value := StrToDate(d2);

           ADO2.Active:=true;

           ShowMessage(ado2.SQL.Text);

ADOQuery1.First;

  i:=7;

  j:=1;

 while not ADOQuery1.Eof do

   begin

         Sheet.Cells[i,1].Borders.LineStyle:=1;

         Sheet.Cells[i,2].Borders.LineStyle:=1;

         Sheet.Cells[i,3].Borders.LineStyle:=1;

         Sheet.Cells[i,4].Borders.LineStyle:=1;

         Sheet.Cells[i,5].Borders.LineStyle:=1;

         Sheet.Cells[i,6].Borders.LineStyle:=1;

         Sheet.Cells[i,7].Borders.LineStyle:=1;

         Sheet.Cells[i,8].Borders.LineStyle:=1;

         Sheet.Cells[i,9].Borders.LineStyle:=1;

         Sheet.Cells[i,10].Borders.LineStyle:=1;

         Sheet.Cells[i,11].Borders.LineStyle:=1;

         Sheet.Cells[i,1]:= j;

         Sheet.Cells[i,2]:= ADOQuery1.FieldValues['name'];

         if ADOQuery1.FieldValues['NumCounter']=Null then

           Sheet.Cells[i,3]:='0'

         else Sheet.Cells[i,3]:=ADOQuery1.FieldValues['NumCounter'];

         Sheet.Cells[i,4]:=ADOQuery1.FieldValues['rCoefficient'];

         d:=ADOQuery1.FieldValues['data'];

for k:=0 to length(d) do

   begin

     if(d[k] = ',') then

       delete(d, k, 1);

   end;

         Sheet.Cells[i,5]:=d;

         c:=StrToFloat(d);

         if ADO2.Locate('name', ADOQuery1.FieldValues['name'], []) then

            begin

               b:=ADO2.FieldByName('SummmB').AsFloat;

               Sheet.Cells[i,6]:=b;

            end

         else

          begin

            Sheet.Cells[i,6].Select;

            XL.Selection.Interior.ColorIndex:=3;

            Sheet.Cells[i,6]:='0';

            b:=0;

          end;

           if ADO1.Locate('name', ADOQuery1.FieldValues['name'], []) then

              begin

               u:=ADO1.FieldByName('Summm').AsFloat ;

               Sheet.Cells[i,7]:=u ;

              end

          else

           begin

            Sheet.Cells[i,7].Select;

            XL.Selection.Interior.ColorIndex:=3;

            Sheet.Cells[i,7]:='0';

            u:=0;

           end;

          Sheet.Cells[i,8]:='0';

          Sheet.Cells[i,9]:='0,00';

          Sheet.Cells[i,10]:=c-(b+u);

          p:= c-(b+u);

          if c=0 then

          Sheet.Cells[i,11]:='0,00'

          else

          Sheet.Cells[i,11]:=(p/c)*100;

ADOQuery1.Next;

   i:=i+1;

   j:=j+1;

   end;

sheet.cells[i,4].Borders.LineStyle:=1;

Sheet.Cells[i,4].Font.Size := 12;

Sheet.Cells[i,4].Font.Bold := True;

sheet.cells[i,4]:='Итого';

Sheet.Cells[i,4].HorizontalAlignment:=3;

sheet.cells[i,5].Borders.LineStyle:=1;

Sheet.Cells[i,5].Font.Size := 12;

Sheet.Cells[i,5].Font.Bold := True;

sheet.cells[i,5].Value:='=SUM(E7:E'+intToStr(i-1)+')';

re:=strtoint(sheet.cells[i,5].Value);

sheet.cells[i,6].Borders.LineStyle:=1;

Sheet.Cells[i,6].Font.Size := 12;

Sheet.Cells[i,6].Font.Bold := True;

sheet.cells[i,6].Value:='=SUM(F7:F'+intToStr(i-1)+')';

sheet.cells[i,7].Borders.LineStyle:=1;

Sheet.Cells[i,7].Font.Size := 12;

Sheet.Cells[i,7].Font.Bold := True;

sheet.cells[i,7].Value:='=SUM(G7:G'+intToStr(i-1)+')';

sheet.cells[i,8].Borders.LineStyle:=1;

Sheet.Cells[i,8].Font.Size := 12;

Sheet.Cells[i,8].Font.Bold := True;

sheet.cells[i,8].Value:='0';

sheet.cells[i,9].Borders.LineStyle:=1;

Sheet.Cells[i,9].Font.Size := 12;

Sheet.Cells[i,9].Font.Bold := True;

sheet.cells[i,9].Value:='0,00';

sheet.cells[i,10].Borders.LineStyle:=1;

Sheet.Cells[i,10].Font.Size := 12;

Sheet.Cells[i,10].Font.Bold := True;

sheet.cells[i,10].Value:='=SUM(j7:j'+intToStr(i-1)+')';

rk:=strtoint(sheet.cells[i,10].Value);

sheet.cells[i,11].Borders.LineStyle:=1;

Sheet.Cells[i,11].Font.Size := 12;

Sheet.Cells[i,11].Font.Bold := True;

if re<>0 then

sheet.cells[i,11].Value:=(rk/re)*100

else

sheet.cells[i,11].Value:='0';

XL.Visible:=true;

XL.WorkBooks[1].SaveAs(ExtractFilePath(Application.ExeName)+'Report\'+'Отчет рейдовой бригады, '+ sComboBox1.Text+', '+sDBLookupComboBox1.KeyValue+', '+sDBLookupComboBox2.KeyValue+'.xls');

 end;

//--------------------------------------------------------------------------------------------------------------------------------

if sComboBox1.ItemIndex=0 then

 begin

     try

     XL:=CreateOleObject('Excel.Application');

     except

     ShowMessage('Не удалось запустить MS Excel. Действие отменено.');

      Exit;

 end;

 s:=sEdit2.Text+'.'+sEdit1.Text;

 str:=sEdit1.Text+sEdit2.Text;

XL.WorkBooks.Add;

Sheet:= XL.ActiveWorkBook.Sheets[1];

Sheet.Name:= 'Лист № 1';

Sheet.Cells[2,1].Font.Name := 'Times New Roman CYR';

Sheet.Cells[2,1].Font.Size := 13;

Sheet.Cells[2,1].Font.Bold := True;

Sheet.Cells[2,1]:= sComboBox1.Text;

     Sheet.Cells[4,1].ColumnWidth :=5;

     Sheet.Cells[4,1].RowHeight :=50;

     Sheet.Cells[4,2].ColumnWidth :=20;

     Sheet.Cells[4,2].RowHeight :=50;

     Sheet.Cells[4,3].ColumnWidth :=30;

     Sheet.Cells[4,3].RowHeight :=50;

     Xl.Range[Xl.Cells[4, 4], XL.Cells[4, 5]].ColumnWidth :=15;

     Xl.Range[Xl.Cells[4, 54], XL.Cells[4, 5]].RowHeight :=50;

 Sheet.Cells[5,3].Font.Size := 12;

 Sheet.Cells[5,3].Font.Bold := True;

 Sheet.Cells[5,4].Font.Size := 12;

 Sheet.Cells[5,4].Font.Bold := True;

 Sheet.Cells[5,5].Font.Size := 12;

 Sheet.Cells[5,5].Font.Bold := True;

 Sheet.Cells[5,6].Font.Size := 12;

 Sheet.Cells[5,6].Font.Bold := True;

 Sheet.Cells[5,7].Font.Size := 12;

 Sheet.Cells[5,7].Font.Bold := True;

 Sheet.Cells[5,8].Font.Size := 12;

 Sheet.Cells[5,8].Font.Bold := True;

 Sheet.Cells[5,9].Font.Size := 12;

 Sheet.Cells[5,9].Font.Bold := True;

 Sheet.Cells[5,10].Font.Size := 12;

 Sheet.Cells[5,10].Font.Bold := True;

 Sheet.Cells[5,11].Font.Size := 12;

 Sheet.Cells[5,11].Font.Bold := True;

 Sheet.Cells[5,12].Font.Size := 12;

 Sheet.Cells[5,12].Font.Bold := True;

Xl.Range[Xl.Cells[4, 1], XL.Cells[5, 1]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 1], XL.Cells[5, 1]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 2], XL.Cells[5, 2]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 2], XL.Cells[5, 2]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 5], XL.Cells[4, 6]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 5], XL.Cells[4, 6]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 7], XL.Cells[4, 8]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 7], XL.Cells[4, 8]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 9], XL.Cells[4, 10]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 9], XL.Cells[4, 10]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 11], XL.Cells[4, 12]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 11], XL.Cells[4, 12]].Font.Bold := True;

Xl.Range[Xl.Cells[4, 3], XL.Cells[4, 4]].Font.Size := 12;

Xl.Range[Xl.Cells[4, 3], XL.Cells[4, 4]].Font.Bold := True;

Sheet.Cells[4,1].Borders.LineStyle:=1;//oбводка ячейки

Sheet.Cells[4,2].Borders.LineStyle:=1;

Sheet.Cells[4,3].Borders.LineStyle:=1;

Sheet.Cells[4,4].Borders.LineStyle:=1;

Sheet.Cells[5,3].Borders.LineStyle:=1;

Sheet.Cells[5,4].Borders.LineStyle:=1;

Sheet.Cells[5,5].Borders.LineStyle:=1;

Sheet.Cells[5,6].Borders.LineStyle:=1;

Sheet.Cells[5,7].Borders.LineStyle:=1;

Sheet.Cells[5,8].Borders.LineStyle:=1;

Sheet.Cells[5,9].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 1], XL.Cells[5, 1]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 2], XL.Cells[5, 2]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 3], XL.Cells[4, 4]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 5], XL.Cells[4, 6]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 7], XL.Cells[4, 8]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 9], XL.Cells[4, 10]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 1], XL.Cells[5, 1]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 2], XL.Cells[5, 2]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Sheet.Cells[4,3].Select;

XL.Selection.WrapText:=True;

Sheet.Cells[4,4].Select;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 4], XL.Cells[4, 5]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 6], XL.Cells[4, 7]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[4, 8], XL.Cells[4, 9]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Sheet.Cells[4,1]:= '№ п/п';

Sheet.Cells[4,1].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[4, 2], XL.Cells[5, 2]]:='РЭС '+ sDBLookupComboBox1.KeyValue;

Xl.Range[Xl.Cells[4, 2], XL.Cells[5, 2]].HorizontalAlignment:=3;

Sheet.Cells[4,3]:='Суммарный расхода эл. Энергии по фидерам 10кВ. ПС';

Sheet.Cells[4,3].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[4, 4], XL.Cells[4, 5]]:='Суммарное потребление эл.энергии по точкам учёта потребителей';

Xl.Range[Xl.Cells[4, 4], XL.Cells[4, 5]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[4, 6], XL.Cells[4, 7]]:='Условный норматив ';

Xl.Range[Xl.Cells[4, 6], XL.Cells[4, 7]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[4, 8], XL.Cells[4, 9]]:='Небаланс';

Xl.Range[Xl.Cells[4, 8], XL.Cells[4, 9]].HorizontalAlignment:=3;

Sheet.Cells[5,3]:='кВт*ч';

Sheet.Cells[5,3].HorizontalAlignment:=3;

Sheet.Cells[5,4]:='юр (кВт*ч)';

Sheet.Cells[5,4].HorizontalAlignment:=3;

Sheet.Cells[5,5]:='быт (кВт*ч)';

Sheet.Cells[5,5].HorizontalAlignment:=3;

Sheet.Cells[5,6]:='кВт*ч';

Sheet.Cells[5,6].HorizontalAlignment:=3;

Sheet.Cells[5,7]:='%';

Sheet.Cells[5,7].HorizontalAlignment:=3;

Sheet.Cells[5,8]:='кВт*ч';

Sheet.Cells[5,8].HorizontalAlignment:=3;

Sheet.Cells[5,9]:='%';

Sheet.Cells[5,9].HorizontalAlignment:=3;

str:=sEdit1.Text+sEdit2.Text;

s:=sEdit2.Text+'.'+sEdit1.Text;

d1:='01.'+s;

d2:='29.'+s;

   ADOQuery1.Active:=false;

   ADOQuery1.SQL.Clear;

   ADOQuery1.SQL.Add(' select Station.name');

   ADOQuery1.SQL.Add('  from res,Station');

   ADOQuery1.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'"');

   ADOQuery1.SQL.Add('   and Station.indexRES=res.index ');

   ADOQuery1.SQL.Add('  group by Station.name');

   ADOQuery1.Active:=true;

     ADO1.Active:=false;

     ADO1.SQL.Clear;

     ADO1.SQL.Add(' select  Station.name,SUM(controlData.data) as Summm') ;

     ADO1.SQL.Add('  from res, Station,fider, controlData ') ;

     ADO1.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'"') ;

     ADO1.SQL.Add('    and Station.indexRES=res.index') ;

     ADO1.SQL.Add('    and fider.indexPS=Station.index') ;

     ADO1.SQL.Add('    and controlData.indexConnect=fider.index ') ;

     ADO1.SQL.Add('    and [controlData.interval]="'+str+'"');

     ADO1.SQL.Add('  group by Station.name') ;

     ADO1.Active:=true;

       ADO3.Active:=false;

       ADO3.SQL.Clear;

       ADO3.SQL.Add(' select  Station.name,SUM(SaleUrAbons.saleAbon) as SummmUr ') ;

       ADO3.SQL.Add('  from res,Station,fider,Ur,SaleUrAbons,tp ') ;

       ADO3.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

       ADO3.SQL.Add('    and fider.indexPS=Station.index') ;

       ADO3.SQL.Add('    and tp.indexFider=fider.index and Ur.indexConnect=tp.index ') ;

       ADO3.SQL.Add('    and SaleUrAbons.indexAbons=Ur.indexARM and SaleUrAbons.period="'+s+'"');

       ADO3.SQL.Add('  group by Station.name') ;

       ado3.Active:=true;

if (sDBLookupComboBox1.KeyValue='Бешенковичский') or (sDBLookupComboBox1.KeyValue='Шумилинский') or (sDBLookupComboBox1.KeyValue='Лиозненский') or (sDBLookupComboBox1.KeyValue='Городокский') or (sDBLookupComboBox1.KeyValue='Рубовский РЭС') then

begin

           ADO2.Active:=false;

           ADO2.SQL.Clear;

           ADO2.SQL.Add('select Station.name,SUM(SaleAbonsSector.sale) as SummmB ') ;

           ADO2.SQL.Add('  from res,Station,fider,abons,tp,SaleAbonsSector ') ;

           ADO2.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

           ADO2.SQL.Add('    and fider.indexPS=Station.index   ') ;

           ADO2.SQL.Add('    and tp.indexFider=fider.index and abons.indexTP=tp.index ') ;

           ADO2.SQL.Add('    and SaleAbonsSector.Abons>=abons.abonBegin and SaleAbonsSector.Abons <=abons.abonEnd ') ;

           ADO2.SQL.Add('    and  SaleAbonsSector.data between :SDate and :FDate group by Station.name');

           ADO2.Parameters.ParamByName('SDate').DataType :=ftDate;

           ADO2.Parameters.ParamByName('FDate').DataType :=ftDate;

           ADO2.Parameters.ParamByName('SDate').Value := StrToDate(d1);

           ADO2.Parameters.ParamByName('FDate').Value := StrToDate(d2);

           ADO2.Active:=true;

           end;

if (sDBLookupComboBox1.KeyValue='Витебский сельский') or (sDBLookupComboBox1.KeyValue='Витебский городской')  then

begin

ADO2.Active:=false;

           ADO2.SQL.Clear;

           ADO2.SQL.Add(' select Station.name,SUM(SaleAbonOtdel.sale) as SummmB ') ;

           ADO2.SQL.Add('  from res,Station,fider,abons,tp,SaleAbonOtdel ') ;

           ADO2.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

           ADO2.SQL.Add('    and fider.indexPS=Station.index ') ;

           ADO2.SQL.Add('    and tp.indexFider=fider.index and abons.indexTP=tp.index ') ;

           ADO2.SQL.Add('    and SaleAbonOtdel.abon>=abons.abonBegin and SaleAbonOtdel.abon <=abons.abonEnd ') ;

           ADO2.SQL.Add('    and  SaleAbonOtdel.data between :SDate and :FDate group by Station.name');

           ADO2.Parameters.ParseSQL(ado2.SQL.Text,True);

           ADO2.Parameters.ParamByName('SDate').DataType:=ftDate;

           ADO2.Parameters.ParamByName('FDate').DataType :=ftDate;

           ADO2.Parameters.ParamByName('SDate').Value := StrToDate(d1);

           ADO2.Parameters.ParamByName('FDate').Value := StrToDate(d2);

           ADO2.Active:=true;

           end;

  i:=6;

  j:=1;

 while not ADOQuery1.Eof do

   begin

         Sheet.Cells[i,1].Borders.LineStyle:=1;

         Sheet.Cells[i,2].Borders.LineStyle:=1;

         Sheet.Cells[i,3].Borders.LineStyle:=1;

         Sheet.Cells[i,4].Borders.LineStyle:=1;

         Sheet.Cells[i,5].Borders.LineStyle:=1;

         Sheet.Cells[i,6].Borders.LineStyle:=1;

         Sheet.Cells[i,7].Borders.LineStyle:=1;

         Sheet.Cells[i,8].Borders.LineStyle:=1;

         Sheet.Cells[i,9].Borders.LineStyle:=1;

         Sheet.Cells[i,1]:= j;

         Sheet.Cells[i,2]:= ADOQuery1.FieldValues['name'];

        if ADO1.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

            Sheet.Cells[i,3]:=ADO1.FieldByName('Summm').AsFloat;

            c:=ADO1.FieldByName('Summm').AsFloat;

          end

          else

          begin

            Sheet.Cells[i,3]:='0';

            c:=0;

          end;

          if ADO3.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

            Sheet.Cells[i,4]:=ADO3.FieldByName('SummmUr').AsFloat;

            b:=ADO3.FieldByName('SummmUr').AsFloat;

          end

          else

          begin

            Sheet.Cells[i,4]:='0';

            b:=0;

          end;

          if ADO2.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

            Sheet.Cells[i,5]:=ADO2.FieldByName('SummmB').AsFloat;

            u:=ADO2.FieldByName('SummmB').AsFloat;

          end

          else

          begin

            Sheet.Cells[i,5]:='0';

            u:=0;

          end;

           Sheet.Cells[i,6]:='0';

           Sheet.Cells[i,7]:='0,00';

           Sheet.Cells[i,8]:=c-(b+u);

           p:=c-(b+u);

           if c=0 then

           Sheet.Cells[i,9]:='0,00'

           else

           Sheet.Cells[i,9]:=(p/c)+100;

        ADOQuery1.Next;

        //ADO1.Next;

        //ADO2.Next;

        //ADO3.Next;

   i:=i+1;

   j:=j+1;

   end;

XL.Visible:=true;

XL.WorkBooks[1].SaveAs(ExtractFilePath(Application.ExeName)+'Report\'+'Отчет рейдовой бригады, '+ sComboBox1.Text+', '+sDBLookupComboBox1.KeyValue+'.xls');

 end;

if sComboBox1.ItemIndex=2 then

 begin

     try

     XL:=CreateOleObject('Excel.Application');

     except

     ShowMessage('Не удалось запустить MS Excel. Действие отменено.');

      Exit;

 end;

 s:=sEdit2.Text+'.'+sEdit1.Text;

 str:=sEdit1.Text+sEdit2.Text;

//  ShowMessage(str);

XL.WorkBooks.Add;

Sheet:= XL.ActiveWorkBook.Sheets[1];

Sheet.Name:= 'Лист № 1';

Sheet.Cells[2,1].Font.Name := 'Times New Roman CYR';

Sheet.Cells[2,1].Font.Size := 13;

Sheet.Cells[2,1].Font.Bold := True;

Sheet.Cells[2,1]:= sComboBox1.Text;

     Sheet.Cells[5,2].ColumnWidth :=30;

     Sheet.Cells[5,2].RowHeight :=30;

     Sheet.Cells[6,2].ColumnWidth :=30;

     Sheet.Cells[6,2].RowHeight :=30;

     Sheet.Cells[9,1].ColumnWidth :=5;

     Sheet.Cells[9,1].RowHeight :=30;

     Sheet.Cells[10,1].ColumnWidth :=5;

     Sheet.Cells[10,1].RowHeight :=50;

     Sheet.Cells[10,3].ColumnWidth :=15;

     Sheet.Cells[10,4].ColumnWidth :=15;

     Sheet.Cells[10,5].ColumnWidth :=15;

     Sheet.Cells[10,6].ColumnWidth :=15;

     Sheet.Cells[10,7].ColumnWidth :=15;

     Sheet.Cells[10,8].ColumnWidth :=15;

     Sheet.Cells[10,9].ColumnWidth :=15;

     Xl.Range[Xl.Cells[9, 10], XL.Cells[9, 11]].ColumnWidth :=10;

Sheet.Cells[4,2].Font.Size := 12;

Sheet.Cells[4,2].Font.Bold := True;

Sheet.Cells[4,3].Font.Size := 12;

Sheet.Cells[4,3].Font.Bold := True;

Sheet.Cells[5,2].Font.Size := 12;

Sheet.Cells[5,2].Font.Bold := True;

Sheet.Cells[5,3].Font.Size := 12;

Sheet.Cells[5,3].Font.Bold := True;

Sheet.Cells[6,2].Font.Size := 12;

Sheet.Cells[6,2].Font.Bold := True;

Sheet.Cells[6,3].Font.Size := 12;

Sheet.Cells[6,3].Font.Bold := True;

Sheet.Cells[9,1].Font.Size := 12;

Sheet.Cells[9,1].Font.Bold := True;

Sheet.Cells[10,1].Font.Size := 12;

Sheet.Cells[10,1].Font.Bold := True;

Sheet.Cells[10,2].Font.Size := 12;

Sheet.Cells[10,2].Font.Bold := True;

Sheet.Cells[10,3].Font.Size := 12;

Sheet.Cells[10,3].Font.Bold := True;

Sheet.Cells[10,4].Font.Size := 12;

Sheet.Cells[10,4].Font.Bold := True;

Sheet.Cells[10,7].Font.Size := 12;

Sheet.Cells[10,7].Font.Bold := True;

Sheet.Cells[10,8].Font.Size := 12;

Sheet.Cells[10,8].Font.Bold := True;

Sheet.Cells[10,9].Font.Size := 12;

Sheet.Cells[10,9].Font.Bold := True;

Sheet.Cells[10,10].Font.Size := 12;

Sheet.Cells[10,10].Font.Bold := True;

Sheet.Cells[10,11].Font.Size := 12;

Sheet.Cells[10,11].Font.Bold := True;

Sheet.Cells[10,12].Font.Size := 12;

Sheet.Cells[10,12].Font.Bold := True;

Sheet.Cells[10,13].Font.Size := 12;

Sheet.Cells[10,13].Font.Bold := True;

Xl.Range[Xl.Cells[10, 5], XL.Cells[10, 6]].Font.Size := 12;

Xl.Range[Xl.Cells[10, 5], XL.Cells[10, 6]].Font.Bold := True;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 9]].Font.Size := 12;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 9]].Font.Bold := True;

Xl.Range[Xl.Cells[9, 10], XL.Cells[9, 11]].Font.Size := 12;

Xl.Range[Xl.Cells[9, 10], XL.Cells[9, 11]].Font.Bold := True;

Xl.Range[Xl.Cells[9, 12], XL.Cells[9, 13]].Font.Size := 12;

Xl.Range[Xl.Cells[9, 12], XL.Cells[9, 13]].Font.Bold := True;

Sheet.Cells[4,2].Borders.LineStyle:=1;//oбводка ячейки

Sheet.Cells[5,2].Borders.LineStyle:=1;

Sheet.Cells[6,2].Borders.LineStyle:=1;

Sheet.Cells[9,1].Borders.LineStyle:=1;

Sheet.Cells[10,1].Borders.LineStyle:=1;

Sheet.Cells[10,2].Borders.LineStyle:=1;

Sheet.Cells[10,3].Borders.LineStyle:=1;

Sheet.Cells[10,4].Borders.LineStyle:=1;

Sheet.Cells[10,7].Borders.LineStyle:=1;

Sheet.Cells[10,8].Borders.LineStyle:=1;

Sheet.Cells[10,9].Borders.LineStyle:=1;

Sheet.Cells[10,10].Borders.LineStyle:=1;

Sheet.Cells[10,11].Borders.LineStyle:=1;

Sheet.Cells[10,12].Borders.LineStyle:=1;

Sheet.Cells[10,13].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 3], XL.Cells[4, 5]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[5, 3], XL.Cells[5, 5]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[6, 3], XL.Cells[6, 5]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 9]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[9, 12], XL.Cells[9,13]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[9, 10], XL.Cells[9, 11]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[10, 5], XL.Cells[10, 6]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[4, 3], XL.Cells[4, 5]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[5, 3], XL.Cells[5, 5]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[6, 3], XL.Cells[6, 5]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 9]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[9, 12], XL.Cells[9,13]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[9, 10], XL.Cells[9, 11]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[10, 5], XL.Cells[10, 6]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Sheet.Cells[4,3].Select;

XL.Selection.WrapText:=True;

XL.Selection.MergeCells:=True;

Sheet.Cells[9,1].Select;

XL.Selection.WrapText:=True;

XL.Selection.MergeCells:=True;

Sheet.Cells[10,1].Select;

XL.Selection.WrapText:=True;

XL.Selection.MergeCells:=True;

Sheet.Cells[10,8].Select;

XL.Selection.WrapText:=True;

XL.Selection.MergeCells:=True;

Sheet.Cells[10,9].Select;

XL.Selection.MergeCells:=True;

XL.Selection.WrapText:=True;

Sheet.Cells[4,2]:= '№ счётчика';

Sheet.Cells[4,2].HorizontalAlignment:=3;

Sheet.Cells[5,2]:= 'расчетный коэффициент';

Sheet.Cells[5,2].HorizontalAlignment:=3;

Sheet.Cells[6,2]:= 'расход эл.энергии кВт*ч';

Sheet.Cells[6,2].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[9, 1], XL.Cells[10, 1]]:='№ п/п';

Xl.Range[Xl.Cells[9, 1], XL.Cells[10, 1]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 8]]:='Потребление эл.энергии потребителями';

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 8]].HorizontalAlignment:=3;

Sheet.Cells[10,2]:= '№ ТП (КТП)';

Sheet.Cells[10,2].HorizontalAlignment:=3;

Sheet.Cells[10,3]:= '№ договора';

Sheet.Cells[10,3].HorizontalAlignment:=3;

Sheet.Cells[10,4]:= '№ линии';

Sheet.Cells[10,4].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[10, 5], XL.Cells[10, 6]]:='Наименование';

Xl.Range[Xl.Cells[10, 5], XL.Cells[10, 6]].HorizontalAlignment:=3;

Sheet.Cells[10,7]:= '№ счётчика';

Sheet.Cells[10,7].HorizontalAlignment:=3;

Sheet.Cells[10,8]:= 'расчетный коэффициент';

Sheet.Cells[10,8].HorizontalAlignment:=3;

Sheet.Cells[10,9]:= 'потребление кВт*ч';

Sheet.Cells[10,9].HorizontalAlignment:=3;

Sheet.Cells[10,10]:= 'кВт*ч';

Sheet.Cells[10,10].HorizontalAlignment:=3;

Sheet.Cells[10,11]:= '%';

Sheet.Cells[10,11].HorizontalAlignment:=3;

Sheet.Cells[10,12]:= 'кВт*ч';

Sheet.Cells[10,12].HorizontalAlignment:=3;

Sheet.Cells[10,13]:= '%';

Sheet.Cells[10,13].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[9, 10], XL.Cells[9,11]]:='Условный норматив';

Xl.Range[Xl.Cells[9, 10], XL.Cells[9,11]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[9, 12], XL.Cells[9,13]]:='Небаланс';

Xl.Range[Xl.Cells[9, 12], XL.Cells[9,13]].HorizontalAlignment:=3;

str:=sEdit1.Text+sEdit2.Text;

s:=sEdit2.Text+'.'+sEdit1.Text;

  ADOQuery1.Active:=false;

   ADOQuery1.SQL.Clear;

   ADOQuery1.SQL.Add(' select tp.name');

   ADOQuery1.SQL.Add('  from res,Station,fider,tp');

   ADOQuery1.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'"');

   ADOQuery1.SQL.Add('   and Station.indexRES=res.index and Station.name="'+sDBLookupComboBox2.KeyValue+'" ');

   ADOQuery1.SQL.Add('   and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'" ');

   ADOQuery1.SQL.Add('   and tp.indexFider=fider.index');

   ADOQuery1.SQL.Add('  group by tp.name');

   ADOQuery1.Active:=true;

       ADOUr.Active:=false;

       ADOUr.SQL.Clear;

       ADOUr.SQL.Add('select Ur.nom,Ur.point,Ur.rKoff,Ur.numShet,tp.name');

       ADOUr.SQL.Add('from Ur,fider,Station,tp,res');

       ADOUr.SQL.Add('where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index');

       ADOUr.SQL.Add('and Station.name="'+sDBLookupComboBox2.KeyValue+'" and fider.indexPS=Station.index');

       ADOUr.SQL.Add('and fider.name="'+sDBLookupComboBox3.KeyValue+'" and tp.indexFider=fider.index ');

       ADOUr.SQL.Add('and Ur.indexConnect=tp.index');

       //ADOUr.SQL.Add('  group by tp.name');

       ADOUr.Active:=true;

         ADOCon.Active:=false;

         ADOCon.SQL.Clear;

         ADOCon.SQL.Add('select fider.name,controlData.NumCounter,controlData.rCoefficient,controlData.data');

         ADOCon.SQL.Add('from fider, res, Station,controlData');

         ADOCon.SQL.Add('where res.name="'+sDBLookupComboBox1.KeyValue+'"');

         ADOCon.SQL.Add('and Station.indexRES=res.index and Station.name="'+sDBLookupComboBox2.KeyValue+'"');

         ADOCon.SQL.Add('and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'"');

         ADOCon.SQL.Add('and controlData.indexConnect=fider.index');

         ADOCon.SQL.Add('and [controlData.interval]="'+str+'"');

         ADOCon.Active:=true;

               ADO1.Active:=false;

               ADO1.SQL.Clear;

               ADO1.SQL.Add(' select  tp.name,SUM(SaleUrAbons.saleAbon) as Summm ') ;

               ADO1.SQL.Add('  from res,Station,fider,Ur,SaleUrAbons,tp ') ;

               ADO1.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

               ADO1.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

               ADO1.SQL.Add('    and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'"') ;

               ADO1.SQL.Add('    and tp.indexFider=fider.index  and Ur.indexConnect=tp.index ') ;

               ADO1.SQL.Add('    and SaleUrAbons.indexAbons=Ur.indexARM and SaleUrAbons.period="'+s+'"');

               ADO1.SQL.Add('  group by tp.name') ;

               ADO1.Active:=true;

        rk:=ADOCon.FieldByName('rCoefficient').AsFloat;

        re:=ADOCon.FieldByName('data').AsFloat;

        Sheet.Cells[4,3]:=ADOCon.FieldByName('NumCounter').AsString;

        Sheet.Cells[5,3]:=ADOCon.FieldByName('rCoefficient').AsString;

        Sheet.Cells[6,3]:=re*rk;

  i:=11;

  j:=1;

  Sum:=0;

 while not ADOQuery1.Eof do

   begin

         Sheet.Cells[i,1].Borders.LineStyle:=1;

         Sheet.Cells[i,2].Borders.LineStyle:=1;

         Sheet.Cells[i,3].Borders.LineStyle:=1;

         Sheet.Cells[i,4].Borders.LineStyle:=1;

         Xl.Range[Xl.Cells[i, 5], XL.Cells[i, 6]].Borders.LineStyle:=1;

         Sheet.Cells[i,7].Borders.LineStyle:=1;

         Sheet.Cells[i,8].Borders.LineStyle:=1;

         Sheet.Cells[i,9].Borders.LineStyle:=1;

         Sheet.Cells[i,10].Borders.LineStyle:=1;

         Sheet.Cells[i,11].Borders.LineStyle:=1;

         Sheet.Cells[i,12].Borders.LineStyle:=1;

         Sheet.Cells[i,13].Borders.LineStyle:=1;

         Sheet.Cells[i,1]:= j;

             if ADOUr.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

            Sheet.Cells[i,2]:=ADOUr.FieldByName('name').AsString

          end

          else

          begin

          ADOQuery1.Next;

            goto m;

            end;

           if ADOUr.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

            Sheet.Cells[i,3]:=ADOUr.FieldByName('nom').AsString

          end

          else

          begin

            Sheet.Cells[i,3]:='-';

          end;

         if ADOUr.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

           Xl.Range[Xl.Cells[i, 5], XL.Cells[i, 6]].Select;

           XL.Selection.MergeCells:=True;

           Xl.Range[Xl.Cells[i, 5], XL.Cells[i, 6]]:=ADOUr.FieldByName('point').AsString

          end

          else

          begin

           Xl.Range[Xl.Cells[i, 5], XL.Cells[i, 6]].Select;

           XL.Selection.MergeCells:=True;

          end;

         if ADOUr.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

            Sheet.Cells[i,7]:=ADOUr.FieldByName('numShet').AsString

          end

          else

          begin

            Sheet.Cells[i,7]:='-';

          end ;

         if ADOUr.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

            Sheet.Cells[i,8]:=ADOUr.FieldByName('rKoff').AsString

          end

          else

          begin

            Sheet.Cells[i,8]:='0';

          end;

          if ADO1.Locate('name', ADOQuery1.FieldValues['name'], []) then

           begin

            Sheet.Cells[i,9]:=ADO1.FieldByName('Summm').AsInteger;

            su:=ADO1.FieldByName('Summm').AsInteger;

             if su=0 then

               begin

                 Sheet.Cells[i,9].Select;

                 XL.Selection.Interior.ColorIndex:=3;

               end;

           end

          else

          begin

            Sheet.Cells[i,9]:='0';

            su:=0;

            Sheet.Cells[i,9].Select;

            XL.Selection.Interior.ColorIndex:=3;

          end;

          Sheet.Cells[i,10]:='0';

          Sheet.Cells[i,11]:='0,00';

          Sum:=Sum+su;

        ADOQuery1.Next;

   i:=i+1;

   j:=j+1;

   m:

   end;

// Подсчёт бытовых абонентов

  ADOQuery1.Active:=false;

   ADOQuery1.SQL.Clear;

   ADOQuery1.SQL.Add(' select tp.name');

   ADOQuery1.SQL.Add('  from res,Station,fider,tp');

   ADOQuery1.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'"');

   ADOQuery1.SQL.Add('   and Station.indexRES=res.index and Station.name="'+sDBLookupComboBox2.KeyValue+'" ');

   ADOQuery1.SQL.Add('   and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'" ');

   ADOQuery1.SQL.Add('   and tp.indexFider=fider.index');

   ADOQuery1.SQL.Add('  group by tp.name');

   ADOQuery1.Active:=true;

                   ADO1.Active:=false;

                   ADO1.SQL.Clear;

                   ADO1.SQL.Add(' select  Count(iif(abonEnd="0",abons.index)) as Kol, ') ;

                   ADO1.SQL.Add('   SUM(iif(abonEnd>"0",abonEnd-abonBegin)) as Summ,tp.name ') ;

                   ADO1.SQL.Add('  from res,Station,fider,abons,tp ') ;

                   ADO1.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

                   ADO1.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

                   ADO1.SQL.Add('    and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'"') ;

                   ADO1.SQL.Add('    and tp.indexFider=fider.index  and abons.indexTP=tp.index  ') ;

                   ADO1.SQL.Add('  group by tp.name');

                   ADO1.Active:=true;

d1:='01.'+s;

d2:='30.'+s;

ADO2.Active:=false;

ADO2.SQL.Clear;

ADO2.SQL.Add('select tp.name,SUM(SaleAbonOtdel.sale) as SummmB ') ;

ADO2.SQL.Add('  from res,Station,fider,abons,tp,SaleAbonOtdel ') ;

ADO2.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

ADO2.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

ADO2.SQL.Add('    and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'"') ;

ADO2.SQL.Add('    and tp.indexFider=fider.index and abons.indexTP=tp.index ') ;

ADO2.SQL.Add('    and SaleAbonOtdel.abon>=abons.abonBegin and SaleAbonOtdel.abon <=abons.abonEnd ') ;

ADO2.SQL.Add('    and  SaleAbonOtdel.data between :SDate and :FDate group by tp.name');

ADO2.Parameters.ParseSQL(ado2.SQL.Text,True);

ADO2.Parameters.ParamByName('SDate').DataType:=ftDate;

ADO2.Parameters.ParamByName('FDate').DataType :=ftDate;

ADO2.Parameters.ParamByName('SDate').Value := StrToDate(d1);

ADO2.Parameters.ParamByName('FDate').Value := StrToDate(d2);

ADO2.Active:=true;

ADOQuery1.First;

while not ADOQuery1.Eof do

   begin

         Sheet.Cells[i,1].Borders.LineStyle:=1;

         Sheet.Cells[i,2].Borders.LineStyle:=1;

         Sheet.Cells[i,3].Borders.LineStyle:=1;

         Sheet.Cells[i,4].Borders.LineStyle:=1;

         Xl.Range[Xl.Cells[i, 5], XL.Cells[i, 6]].Borders.LineStyle:=1;

         Sheet.Cells[i,7].Borders.LineStyle:=1;

         Sheet.Cells[i,8].Borders.LineStyle:=1;

         Sheet.Cells[i,9].Borders.LineStyle:=1;

         Sheet.Cells[i,10].Borders.LineStyle:=1;

         Sheet.Cells[i,11].Borders.LineStyle:=1;

         Sheet.Cells[i,12].Borders.LineStyle:=1;

         Sheet.Cells[i,13].Borders.LineStyle:=1;

         Sheet.Cells[i,1]:= j;

             if ADO1.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

            Sheet.Cells[i,2]:=ADO1.FieldByName('name').AsString

          end

          else

          begin

          ADOQuery1.Next;

            goto mm;

            end;

         if ADO1.Locate('name', ADOQuery1.FieldValues['name'], []) then

          begin

           Xl.Range[Xl.Cells[i, 5], XL.Cells[i, 6]].Select;

           XL.Selection.MergeCells:=True;

           if ado1.FieldValues['Kol']=Null then

           kol:=StrToInt(ado1.FieldValues['Summ']);

           if ado1.FieldValues['Summ']=Null then

           kol:=StrToInt(ado1.FieldValues['Kol'])

           else

           kol:=StrToInt(ado1.FieldValues['Kol'])+ StrToInt(ado1.FieldValues['Summ']);

           Xl.Range[Xl.Cells[i, 5], XL.Cells[i, 6]]:= 'Бытовые абоненты ' +  IntToStr(kol)+ ' шт.'

          end

          else

          begin

           Xl.Range[Xl.Cells[i, 5], XL.Cells[i, 6]].Select;

           XL.Selection.MergeCells:=True;

          end;

           Sheet.Cells[i,7]:='---';

           Sheet.Cells[i,8]:='---';

          if ADO2.Locate('name', ADOQuery1.FieldValues['name'], []) then

           begin

                 sb:=ADO2.FieldByName('SummmB').AsInteger;

                 Sheet.Cells[i,9]:=sb;

             if sb=0 then

               begin

                 Sheet.Cells[i,9].Select;

                 XL.Selection.Interior.ColorIndex:=3;

               end;

           end

          else

          begin

            Sheet.Cells[i,9]:='0';

            sb:=0;

            Sheet.Cells[i,9].Select;

            XL.Selection.Interior.ColorIndex:=3;

          end;

          Sheet.Cells[i,10]:='0';

          Sheet.Cells[i,11]:='0,00';

          Sum:=Sum+sb;

        ADOQuery1.Next;

   i:=i+1;

   j:=j+1;

   mm:

   end;

   // Подсчёт итогового небаланса

   Xl.Range[Xl.Cells[i, 4], XL.Cells[i, 6]].Select;

   XL.Selection.MergeCells:=True;

   Xl.Range[Xl.Cells[i, 4], XL.Cells[i, 6]].Borders.LineStyle:=1;

   Sheet.Cells[i,7].Borders.LineStyle:=1;

   Sheet.Cells[i,8].Borders.LineStyle:=1;

   Sheet.Cells[i,9].Borders.LineStyle:=1;

   Sheet.Cells[i,10].Borders.LineStyle:=1;

   Sheet.Cells[i,11].Borders.LineStyle:=1;

   Sheet.Cells[i,12].Borders.LineStyle:=1;

   Sheet.Cells[i,13].Borders.LineStyle:=1;

     Xl.Range[Xl.Cells[i, 4], XL.Cells[i, 6]].Font.Size := 12;

     Xl.Range[Xl.Cells[i, 4], XL.Cells[i, 6]].Font.Bold := True;

     Sheet.Cells[i,7].Font.Size := 12;

     Sheet.Cells[i,7].Font.Bold := True;

     Sheet.Cells[i,8].Font.Size := 12;

     Sheet.Cells[i,8].Font.Bold := True;

     Sheet.Cells[i,9].Font.Size := 12;

     Sheet.Cells[i,9].Font.Bold := True;

     Sheet.Cells[i,10].Font.Size := 12;

     Sheet.Cells[i,10].Font.Bold := True;

     Sheet.Cells[i,11].Font.Size := 12;

     Sheet.Cells[i,11].Font.Bold := True;

     Sheet.Cells[i,12].Font.Size := 12;

     Sheet.Cells[i,12].Font.Bold := True;

     Sheet.Cells[i,13].Font.Size := 12;

     Sheet.Cells[i,13].Font.Bold := True;

   Xl.Range[Xl.Cells[i, 4], XL.Cells[i, 6]]:='Сумма всех потребителей';

   Sheet.Cells[i,9]:=Sum;

   Sheet.Cells[i,10]:='0';

   Sheet.Cells[i,11]:='0,00';

   Sheet.Cells[i,12]:=(re*rk)-Sum;

   pr:=(re*rk)-Sum;

   if (re*rk)<>0 then

   Sheet.Cells[i,13]:=(pr/(re*rk))*100

   else

   Sheet.Cells[i,13]:='0';

XL.Visible:=true;

XL.WorkBooks[1].SaveAs(ExtractFilePath(Application.ExeName)+'Report\'+'Отчет рейдовой бригады, '+ sComboBox1.Text+', '+sDBLookupComboBox1.KeyValue+', '+sDBLookupComboBox2.KeyValue+', '+sDBLookupComboBox3.KeyValue+'.xls');

 end;

//Неболанс по ТП

if sComboBox1.ItemIndex=3 then

 begin

     try

     XL:=CreateOleObject('Excel.Application');

     except

     ShowMessage('Не удалось запустить MS Excel. Действие отменено.');

      Exit;

 end;

 s:=sEdit2.Text+'.'+sEdit1.Text;

 str:=sEdit1.Text+sEdit2.Text;

XL.WorkBooks.Add;

Sheet:= XL.ActiveWorkBook.Sheets[1];

Sheet.Name:= 'Лист № 1';

Sheet.Cells[2,1].Font.Name := 'Times New Roman CYR';

Sheet.Cells[2,1].Font.Size := 13;

Sheet.Cells[2,1].Font.Bold := True;

Sheet.Cells[2,1]:= sComboBox1.Text;

     Sheet.Cells[5,2].ColumnWidth :=20;

     Sheet.Cells[5,2].RowHeight :=20;

     Sheet.Cells[6,2].ColumnWidth :=20;

     Sheet.Cells[6,2].RowHeight :=20;

     Sheet.Cells[7,2].ColumnWidth :=30;

     Sheet.Cells[7,2].RowHeight :=20;

     Sheet.Cells[9,1].ColumnWidth :=5;

     Sheet.Cells[9,1].RowHeight :=25;

     Sheet.Cells[10,1].ColumnWidth :=5;

     Sheet.Cells[10,1].RowHeight :=30;

     Sheet.Cells[10,3].ColumnWidth :=20;

     Sheet.Cells[10,4].ColumnWidth :=20;

     Sheet.Cells[10,5].ColumnWidth :=15;

     Sheet.Cells[10,6].ColumnWidth :=15;

     Sheet.Cells[10,7].ColumnWidth :=15;

     Sheet.Cells[10,8].ColumnWidth :=15;

     Sheet.Cells[10,9].ColumnWidth :=15;

Sheet.Cells[4,2].Font.Size := 12;

Sheet.Cells[4,2].Font.Bold := True;

Sheet.Cells[5,2].Font.Size := 12;

Sheet.Cells[5,2].Font.Bold := True;

Sheet.Cells[5,3].Font.Size := 12;

Sheet.Cells[5,3].Font.Bold := True;

Sheet.Cells[6,2].Font.Size := 12;

Sheet.Cells[6,2].Font.Bold := True;

Sheet.Cells[6,3].Font.Size := 12;

Sheet.Cells[6,3].Font.Bold := True;

Sheet.Cells[7,3].Font.Size := 12;

Sheet.Cells[7,3].Font.Bold := True;

Sheet.Cells[7,2].Font.Size := 12;

Sheet.Cells[7,2].Font.Bold := True;

Sheet.Cells[10,2].Font.Size := 12;

Sheet.Cells[10,2].Font.Bold := True;

Sheet.Cells[10,3].Font.Size := 12;

Sheet.Cells[10,3].Font.Bold := True;

Sheet.Cells[10,4].Font.Size := 12;

Sheet.Cells[10,4].Font.Bold := True;

Sheet.Cells[10,7].Font.Size := 12;

Sheet.Cells[10,7].Font.Bold := True;

Sheet.Cells[10,8].Font.Size := 12;

Sheet.Cells[10,8].Font.Bold := True;

Sheet.Cells[10,9].Font.Size := 12;

Sheet.Cells[10,9].Font.Bold := True;

Sheet.Cells[10,5].Font.Size := 12;

Sheet.Cells[10,5].Font.Bold := True;

Sheet.Cells[10,6].Font.Size := 12;

Sheet.Cells[10,6].Font.Bold := True;

Xl.Range[Xl.Cells[9, 1], XL.Cells[10, 1]].Font.Size := 12;

Xl.Range[Xl.Cells[9, 1], XL.Cells[10, 1]].Font.Bold := True;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 7]].Font.Size := 12;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 7]].Font.Bold := True;

Xl.Range[Xl.Cells[9, 8], XL.Cells[9, 9]].Font.Size := 12;

Xl.Range[Xl.Cells[9, 8], XL.Cells[9, 9]].Font.Bold := True;

Sheet.Cells[4,2].Borders.LineStyle:=1;//oбводка ячейки

Sheet.Cells[5,2].Borders.LineStyle:=1;

Sheet.Cells[6,2].Borders.LineStyle:=1;

Sheet.Cells[7,2].Borders.LineStyle:=1;

Sheet.Cells[5,3].Borders.LineStyle:=1;

Sheet.Cells[6,3].Borders.LineStyle:=1;

Sheet.Cells[7,3].Borders.LineStyle:=1;

Sheet.Cells[10,2].Borders.LineStyle:=1;

Sheet.Cells[10,5].Borders.LineStyle:=1;

Sheet.Cells[10,6].Borders.LineStyle:=1;

Sheet.Cells[10,7].Borders.LineStyle:=1;

Sheet.Cells[10,8].Borders.LineStyle:=1;

Sheet.Cells[10,9].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[9, 1], XL.Cells[10, 1]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 7]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[9, 8], XL.Cells[9,9]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[10, 3], XL.Cells[10, 4]].Borders.LineStyle:=1;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 7]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[9, 8], XL.Cells[9,9]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[10, 3], XL.Cells[10, 4]].Select;

 XL.Selection.MergeCells:=True;

 XL.Selection.WrapText:=True;

Xl.Range[Xl.Cells[9, 1], XL.Cells[10, 1]].Select;

XL.Selection.WrapText:=True;

XL.Selection.MergeCells:=True;

Sheet.Cells[10,6].Select;

XL.Selection.WrapText:=True;

XL.Selection.MergeCells:=True;

Sheet.Cells[10,7].Select;

XL.Selection.WrapText:=True;

XL.Selection.MergeCells:=True;

Sheet.Cells[7,2].Select;

XL.Selection.WrapText:=True;

XL.Selection.MergeCells:=True;

Sheet.Cells[4,2]:=sDBLookupComboBox4.KeyValue;

Sheet.Cells[4,2].Select;

XL.Selection.Interior.ColorIndex:=6;

Sheet.Cells[5,2]:= '№ счётчика';

Sheet.Cells[6,2]:= 'коэф. ТТ';

Sheet.Cells[7,2]:= 'расход эл.энергии кВт*ч';

Xl.Range[Xl.Cells[9, 1], XL.Cells[10, 1]]:='№ п/п';

Xl.Range[Xl.Cells[9, 1], XL.Cells[10, 1]].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 7]]:='Потребление эл.энергии потребителями';

Xl.Range[Xl.Cells[9, 2], XL.Cells[9, 7]].HorizontalAlignment:=3;

Sheet.Cells[10,2]:= '№ точки договора (л.с)';

Sheet.Cells[10,2].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[10, 3], XL.Cells[10, 4]]:='Потребитель';

Xl.Range[Xl.Cells[10, 3], XL.Cells[10, 4]].HorizontalAlignment:=3;

Sheet.Cells[10,5]:= '№ счётчика';

Sheet.Cells[10,5].HorizontalAlignment:=3;

Sheet.Cells[10,6]:= 'расчетный коэффициент';

Sheet.Cells[10,6].HorizontalAlignment:=3;

Sheet.Cells[10,7]:= 'потребление кВт*ч';

Sheet.Cells[10,7].HorizontalAlignment:=3;

Sheet.Cells[10,8]:= 'кВт*ч';

Sheet.Cells[10,8].HorizontalAlignment:=3;

Sheet.Cells[10,9]:= '%';

Sheet.Cells[10,9].HorizontalAlignment:=3;

Xl.Range[Xl.Cells[9, 8], XL.Cells[9,9]]:='Небаланс';

Xl.Range[Xl.Cells[9, 8], XL.Cells[9,9]].HorizontalAlignment:=3;

str:=sEdit1.Text+sEdit2.Text;

s:=sEdit2.Text+'.'+sEdit1.Text;

       ADOUr.Active:=false;

       ADOUr.SQL.Clear;

       ADOUr.SQL.Add('select Ur.nom,Ur.point,Ur.rKoff,Ur.numShet,Ur.index');

       ADOUr.SQL.Add('from Ur,fider,Station,tp,res');

       ADOUr.SQL.Add('where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index');

       ADOUr.SQL.Add('and Station.name="'+sDBLookupComboBox2.KeyValue+'" and fider.indexPS=Station.index');

       ADOUr.SQL.Add('and fider.name="'+sDBLookupComboBox3.KeyValue+'" and tp.indexFider=fider.index ');

       ADOUr.SQL.Add('and tp.name="'+sDBLookupComboBox4.KeyValue+'" ');

       ADOUr.SQL.Add('and Ur.indexConnect=tp.index');

       ADOUr.Active:=true;

               ADOCon.Active:=false;

               ADOCon.SQL.Clear;

               ADOCon.SQL.Add('select controlData.NumCounter,controlData.rCoefficient,controlData.data');

               ADOCon.SQL.Add('from fider, res, Station,controlData');

               ADOCon.SQL.Add('where res.name="'+sDBLookupComboBox1.KeyValue+'"');

               ADOCon.SQL.Add('and Station.indexRES=res.index and Station.name="'+sDBLookupComboBox2.KeyValue+'"');

               ADOCon.SQL.Add('and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'"');

               ADOCon.SQL.Add('and controlData.indexConnect=fider.index');

               ADOCon.SQL.Add('and [controlData.interval]="'+str+'"');

               ADOCon.Active:=true;

   ADO1.Active:=false;

   ADO1.SQL.Clear;

   ADO1.SQL.Add(' select  Ur.index,SUM(SaleUrAbons.saleAbon) as Summm ') ;

   ADO1.SQL.Add('  from res,Station,fider,Ur,SaleUrAbons,tp ') ;

   ADO1.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

   ADO1.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

   ADO1.SQL.Add('    and fider.indexPS=Station.index') ;

   ADO1.SQL.Add('    and tp.indexFider=fider.index and tp.name="'+sDBLookupComboBox4.KeyValue+'" and Ur.indexConnect=tp.index ') ;

   ADO1.SQL.Add('    and SaleUrAbons.indexAbons=Ur.indexARM and SaleUrAbons.period="'+s+'"');

   ADO1.SQL.Add('  group by Ur.index') ;

   ADO1.Active:=true;

Sheet.Cells[5,3]:=ADOCon.FieldValues['NumCounter'];

Sheet.Cells[6,3]:=ADOCon.FieldValues['rCoefficient'];

Sheet.Cells[7,3]:=ADOCon.FieldValues['data'];

if ADOCon.FieldValues['data']=Null then

rk:=0

else

rk:=ADOCon.FieldValues['data'];

  i:=11;

  j:=1;

Sum:=0;

while not ADOUr.Eof do

   begin

         Sheet.Cells[i,1].Borders.LineStyle:=1;

         Sheet.Cells[i,2].Borders.LineStyle:=1;

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Borders.LineStyle:=1;

         Sheet.Cells[i,5].Borders.LineStyle:=1;

         Sheet.Cells[i,6].Borders.LineStyle:=1;

         Sheet.Cells[i,7].Borders.LineStyle:=1;

         Sheet.Cells[i,8].Borders.LineStyle:=1;

         Sheet.Cells[i,9].Borders.LineStyle:=1;

         Sheet.Cells[i,1]:= j;

         Sheet.Cells[i,2]:= ADOUr.FieldValues['nom'];

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Select;

         XL.Selection.WrapText:=True;

         XL.Selection.MergeCells:=True;

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]]:=ADOUr.FieldValues['point'];

         Sheet.Cells[i,5]:=ADOUr.FieldValues['numShet'];

         Sheet.Cells[i,6]:=ADOUr.FieldValues['rKoff'];

        if ADO1.Locate('index', ADOUr.FieldValues['index'], []) then

          begin

            Sheet.Cells[i,7]:=ADO1.FieldByName('Summm').AsFloat;

            su:=ADO1.FieldByName('Summm').AsInteger;

          end

          else

          begin

            Sheet.Cells[i,3].Select;

            XL.Selection.Interior.ColorIndex:=3;

            Sheet.Cells[i,3]:='0';

            su:=0;

          end;

          Sum:=Sum+su;

        ADOUr.Next;

   i:=i+1;

   j:=j+1;

   end;

s:=sEdit2.Text+'.'+sEdit1.Text;

str:=sEdit1.Text+sEdit2.Text;

d1:='01.'+s;

d2:='30.'+s;

           ADO2.Active:=false;

           ADO2.SQL.Clear;

           ADO2.SQL.Add(' select distinct SaleAbonOtdel.abon,SaleAbonOtdel.sale') ;

           ADO2.SQL.Add('  from res,Station,fider,abons,tp,SaleAbonOtdel ') ;

           ADO2.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

           ADO2.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

           ADO2.SQL.Add('    and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'" ') ;

           ADO2.SQL.Add('    and tp.indexFider=fider.index and tp.name="'+sDBLookupComboBox4.KeyValue+'" and abons.indexTP=tp.index ') ;

           ADO2.SQL.Add('    and SaleAbonOtdel.abon>=abons.abonBegin and SaleAbonOtdel.abon <=abons.abonEnd ') ;

           ADO2.SQL.Add('    and  SaleAbonOtdel.data between :SDate and :FDate ');

           ADO2.Parameters.ParseSQL(ado2.SQL.Text,True);

           ADO2.Parameters.ParamByName('SDate').DataType:=ftDate;

           ADO2.Parameters.ParamByName('FDate').DataType :=ftDate;

           ADO2.Parameters.ParamByName('SDate').Value := StrToDate(d1);

           ADO2.Parameters.ParamByName('FDate').Value := StrToDate(d2);

           ADO2.Active:=true;

while not ADO2.Eof do

   begin

         Sheet.Cells[i,1].Borders.LineStyle:=1;

         Sheet.Cells[i,2].Borders.LineStyle:=1;

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Borders.LineStyle:=1;

         Sheet.Cells[i,5].Borders.LineStyle:=1;

         Sheet.Cells[i,6].Borders.LineStyle:=1;

         Sheet.Cells[i,7].Borders.LineStyle:=1;

         Sheet.Cells[i,8].Borders.LineStyle:=1;

         Sheet.Cells[i,9].Borders.LineStyle:=1;

         Sheet.Cells[i,1]:= j;

         Sheet.Cells[i,2]:= ADO2.FieldValues['abon'];

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Select;

         XL.Selection.WrapText:=True;

         XL.Selection.MergeCells:=True;

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]]:='Бытовой абонент';

         if  ADO2.FieldValues['sale']<>'0' then

         begin

         Sheet.Cells[i,7]:=ADO2.FieldValues['sale'];

         sb:=ADO2.FieldValues['sale'];

         end

         else

         begin

           Sheet.Cells[i,7].Select;

           XL.Selection.Interior.ColorIndex:=3;

           Sheet.Cells[i,7]:='0';

           sb:=0;

         end;

         Sum:=Sum+sb;

         ADO2.Next;

   i:=i+1;

   j:=j+1;

   end;

           ADO3.Active:=false;

           ADO3.SQL.Clear;

           ADO3.SQL.Add(' select SaleAbonsSector.Abons,SaleAbonsSector.sale') ;

           ADO3.SQL.Add('  from res,Station,fider,abons,tp,SaleAbonsSector ') ;

           ADO3.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

           ADO3.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

           ADO3.SQL.Add('    and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'" ') ;

           ADO3.SQL.Add('    and tp.indexFider=fider.index and tp.name="'+sDBLookupComboBox4.KeyValue+'" and abons.indexTP=tp.index ') ;

           ADO3.SQL.Add('    and SaleAbonsSector.Abons>=abons.abonBegin and SaleAbonsSector.Abons<=abons.abonEnd ') ;

           ADO3.SQL.Add('    and  SaleAbonsSector.data between :SDate and :FDate ');

           ADO3.Parameters.ParseSQL(ado2.SQL.Text,True);

           ADO3.Parameters.ParamByName('SDate').DataType:=ftDate;

           ADO3.Parameters.ParamByName('FDate').DataType :=ftDate;

           ADO3.Parameters.ParamByName('SDate').Value := StrToDate(d1);

           ADO3.Parameters.ParamByName('FDate').Value := StrToDate(d2);

           ADO3.Active:=true;

           

while not ADO3.Eof do

   begin

         Sheet.Cells[i,1].Borders.LineStyle:=1;

         Sheet.Cells[i,2].Borders.LineStyle:=1;

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Borders.LineStyle:=1;

         Sheet.Cells[i,5].Borders.LineStyle:=1;

         Sheet.Cells[i,6].Borders.LineStyle:=1;

         Sheet.Cells[i,7].Borders.LineStyle:=1;

         Sheet.Cells[i,8].Borders.LineStyle:=1;

         Sheet.Cells[i,9].Borders.LineStyle:=1;

         Sheet.Cells[i,1]:= j;

         Sheet.Cells[i,2]:= ADO3.FieldValues['Abons'];

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Select;

         XL.Selection.WrapText:=True;

         XL.Selection.MergeCells:=True;

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]]:='Бытовой абонент';

         if  ADO3.FieldValues['sale']<>'0' then

           begin

             Sheet.Cells[i,7]:=ADO3.FieldValues['sale'];

             ss:=ADO3.FieldValues['sale'];

           end

         else

           begin

             Sheet.Cells[i,7].Select;

             XL.Selection.Interior.ColorIndex:=3;

             Sheet.Cells[i,7]:='0';

             ss:=0;

           end;

         Sum:=Sum+ss;

         ADO3.Next;

   i:=i+1;

   j:=j+1;

   end;

   //Подсчёт итогового небаланса

         Sheet.Cells[i,1].Borders.LineStyle:=1;

         Sheet.Cells[i,2].Borders.LineStyle:=1;

         Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Borders.LineStyle:=1;

         Sheet.Cells[i,5].Borders.LineStyle:=1;

         Sheet.Cells[i,6].Borders.LineStyle:=1;

         Sheet.Cells[i,7].Borders.LineStyle:=1;

         Sheet.Cells[i,8].Borders.LineStyle:=1;

         Sheet.Cells[i,9].Borders.LineStyle:=1;

     Sheet.Cells[i,1].Font.Size := 12;

     Sheet.Cells[i,1].Font.Bold := True;

     Sheet.Cells[i,2].Font.Size := 12;

     Sheet.Cells[i,2].Font.Bold := True;

     Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Font.Size := 12;

     Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Font.Bold := True;

     Sheet.Cells[i,5].Font.Size := 12;

     Sheet.Cells[i,5].Font.Bold := True;

     Sheet.Cells[i,6].Font.Size := 12;

     Sheet.Cells[i,6].Font.Bold := True;

     Sheet.Cells[i,7].Font.Size := 12;

     Sheet.Cells[i,7].Font.Bold := True;

     Sheet.Cells[i,8].Font.Size := 12;

     Sheet.Cells[i,8].Font.Bold := True;

     Sheet.Cells[i,9].Font.Size := 12;

     Sheet.Cells[i,9].Font.Bold := True;

   Xl.Range[Xl.Cells[i, 3], XL.Cells[i,4]].Select;

   XL.Selection.WrapText:=True;

   XL.Selection.MergeCells:=True;

   Xl.Range[Xl.Cells[i, 3], XL.Cells[i, 4]]:='Сумма всех потребителей';

   Sheet.Cells[i,7]:=Sum;

   Sheet.Cells[i,8]:=rk-Sum;

  if rk<>0 then

   Sheet.Cells[i,9]:=((rk-Sum)/rk)*100

   else

   Sheet.Cells[i,9]:='0';

XL.Visible:=true;

XL.WorkBooks[1].SaveAs(ExtractFilePath(Application.ExeName)+'Report\'+'Отчет рейдовой бригады, '+ sComboBox1.Text+', '+sDBLookupComboBox1.KeyValue+', '+sDBLookupComboBox2.KeyValue+', '+sDBLookupComboBox3.KeyValue+', '+sDBLookupComboBox4.KeyValue+'.xls');

end;

end;

procedure TForm10.sDBLookupComboBox2Click(Sender: TObject);

begin

 if sComboBox1.ItemIndex=2 then

begin

 fider.Active:=false;

 fider.SQL.Clear;

 fider.SQL.Add('select fider.name from Station,fider where Station.name="'+sDBLookupComboBox2.KeyValue+'" and fider.indexPS=Station.index');

 fider.Active:=true;

end;

 if sComboBox1.ItemIndex=3 then

begin

 fider.Active:=false;

 fider.SQL.Clear;

 fider.SQL.Add('select fider.name from Station,fider where Station.name="'+sDBLookupComboBox2.KeyValue+'" and fider.indexPS=Station.index');

 fider.Active:=true;

end;

end;

procedure TForm10.sDBLookupComboBox3Click(Sender: TObject);

begin

 if sComboBox1.ItemIndex=3 then

begin

 tp.Active:=false;

 tp.SQL.Clear;

 tp.SQL.Add('select tp.name from tp,fider where fider.name="'+sDBLookupComboBox3.KeyValue+'" and tp.indexFider=fider.index');

 tp.Active:=true;

end;

end;

end.

unit ReportBitPoFideru;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, sLabel, sButton, sEdit, DBCtrls, sDBLookupComboBox,

 Grids, DBGrids, acDBGrid, DB, ADODB,ComObj;

type

 TForm15 = class(TForm)

   sDBGrid1: TsDBGrid;

   sDBLookupComboBox1: TsDBLookupComboBox;

   sDBLookupComboBox2: TsDBLookupComboBox;

   sDBLookupComboBox3: TsDBLookupComboBox;

   sEdit1: TsEdit;

   sEdit2: TsEdit;

   sButton1: TsButton;

   sButton2: TsButton;

   sButton3: TsButton;

   sLabel1: TsLabel;

   sLabel2: TsLabel;

   sLabel3: TsLabel;

   sLabel4: TsLabel;

   sLabel5: TsLabel;

   ADO1: TADOQuery;

   ADO2: TADOQuery;

   DataAdo1: TDataSource;

   DataAdo2: TDataSource;

   DataAdo3: TDataSource;

   ADO3: TADOQuery;

   DataRachet: TDataSource;

   ADORachet: TADOQuery;

   procedure sButton3Click(Sender: TObject);

   procedure sDBLookupComboBox1Click(Sender: TObject);

   procedure sDBLookupComboBox2Click(Sender: TObject);

   procedure sButton2Click(Sender: TObject);

   procedure sButton1Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form15: TForm15;

implementation

uses FormReport, Balance;

{$R *.dfm}

procedure TForm15.sButton3Click(Sender: TObject);

begin

Form6.Show;

Form15.Hide;

end;

procedure TForm15.sDBLookupComboBox1Click(Sender: TObject);

begin

sDBLookupComboBox2.KeyValue:=Null;

sDBLookupComboBox3.KeyValue:=Null;

ado2.Active:=false;

ado2.SQL.Clear;

ado2.SQL.Add('select Station.name from Station,res');

ado2.SQL.Add('where res.name="'+sDBLookupComboBox1.KeyValue+'"');

ado2.SQL.Add('and Station.indexRES=res.index');

ado2.Active:=true;

end;

procedure TForm15.sDBLookupComboBox2Click(Sender: TObject);

begin

sDBLookupComboBox3.KeyValue:=Null;

ado3.Active:=false;

ado3.SQL.Clear;

ado3.SQL.Add('select fider.name from Station,fider');

ado3.SQL.Add('where Station.name="'+sDBLookupComboBox2.KeyValue+'"');

ado3.SQL.Add('and fider.indexPS=Station.index');

ado3.Active:=true;

end;

procedure TForm15.sButton2Click(Sender: TObject);

var

s,d1,d2: string;

begin

s:=sEdit2.Text+'.'+sEdit1.Text;

d1:='01.'+s;

d2:='30.'+s;

           ADORachet.Active:=false;

           ADORachet.SQL.Clear;

           ADORachet.SQL.Add('select SaleAbonsSector.Abons as Абон,SaleAbonsSector.sale,SaleAbonsSector.data') ;

           ADORachet.SQL.Add('  from res,Station,fider,abons,tp,SaleAbonsSector ') ;

           ADORachet.SQL.Add('  where res.name="'+sDBLookupComboBox1.KeyValue+'" and Station.indexRES=res.index') ;

           ADORachet.SQL.Add('    and Station.name="'+sDBLookupComboBox2.KeyValue+'"') ;

           ADORachet.SQL.Add('    and fider.indexPS=Station.index and fider.name="'+sDBLookupComboBox3.KeyValue+'"   ') ;

           ADORachet.SQL.Add('    and tp.indexFider=fider.index and abons.indexTP=tp.index ') ;

           ADORachet.SQL.Add('    and SaleAbonsSector.Abons>=abons.abonBegin and SaleAbonsSector.Abons <=abons.abonEnd ') ;

           ADORachet.SQL.Add('    and  SaleAbonsSector.data between :SDate and :FDate');

           ADORachet.Parameters.ParamByName('SDate').DataType :=ftDate;

           ADORachet.Parameters.ParamByName('FDate').DataType :=ftDate;

           ADORachet.Parameters.ParamByName('SDate').Value := StrToDate(d1);

           ADORachet.Parameters.ParamByName('FDate').Value := StrToDate(d2);

           ADORachet.Active:=true;

     sdbgrid1.Columns[0].Width:=150;

     sdbgrid1.Columns[1].Width:=160;

     sdbgrid1.Columns[2].Width:=160;

     sdbgrid1.Columns[0].Title.Caption:='№ абонента';

     sdbgrid1.Columns[1].Title.Caption:='Сумма оплаты (кВт.)';

     sdbgrid1.Columns[2].Title.Caption:='Дата';

           ShowMessage(ADORachet.SQL.Text);

end;

procedure TForm15.sButton1Click(Sender: TObject);

var i,j,index,k: Integer;

s:string;

ExcelApp,sheet: Variant;

begin

s:=sDBLookupComboBox3.KeyValue;

   ExcelApp := CreateOleObject('Excel.Application');

   ExcelApp.Visible := False;

   ExcelApp.WorkBooks.Add(-4167);

   ExcelApp.WorkBooks[1].WorkSheets[1].name := 'Export';

     sheet:=ExcelApp.WorkBooks[1].WorkSheets['Export'];

ExcelApp.Range[ExcelApp.Cells[2, 1], ExcelApp.Cells[2, 4]].Select;

ExcelApp.Selection.MergeCells:=True;

ExcelApp.Range[ExcelApp.Cells[2, 1], ExcelApp.Cells[2, 4]].Font.Size := 16;

ExcelApp.Range[ExcelApp.Cells[2, 1], ExcelApp.Cells[2, 4]].Font.Bold := True;

Sheet.Cells[4,1].Font.Size := 12;  //Размер шрифта

Sheet.Cells[4,1].Font.Bold := True;//Жирный

Sheet.Cells[4,2].Font.Size := 12;

Sheet.Cells[4,2].Font.Bold := True;

Sheet.Cells[4,3].Font.Size := 12;

Sheet.Cells[4,3].Font.Bold := True;

Sheet.Cells[4,4].Font.Size := 12;

Sheet.Cells[4,4].Font.Bold := True;

           Sheet.Cells[4,1].Borders.LineStyle:=1;//oбводка ячейки

           Sheet.Cells[4,2].Borders.LineStyle:=1;

           Sheet.Cells[4,3].Borders.LineStyle:=1;

           Sheet.Cells[4,4].Borders.LineStyle:=1;

    Sheet.Cells[4,1].ColumnWidth :=7;

    Sheet.Cells[4,2].ColumnWidth :=20;

    Sheet.Cells[4,3].ColumnWidth :=20;

    Sheet.Cells[4,4].ColumnWidth :=20;

ExcelApp.Range[ExcelApp.Cells[2, 1], ExcelApp.Cells[2, 4]]:='Баланс для участка по фидеру -'+ s;

sheet.cells[4,1]:='№ п/п';

Sheet.Cells[4,1].HorizontalAlignment:=3;

sheet.cells[4,2]:='№ абонента';

Sheet.Cells[4,2].HorizontalAlignment:=3;

sheet.cells[4,3]:='Сумма оплаты (кВт)';

Sheet.Cells[4,3].HorizontalAlignment:=3;

sheet.cells[4,4]:='Дата оплаты';

Sheet.Cells[4,4].HorizontalAlignment:=3;

index:=5; //Загоняем с первой строки

k:=1;

sDBGrid1.DataSource.DataSet.First;

     for i:=1 to  sDBGrid1.DataSource.DataSet.RecordCount do

     begin

     for j:=1 to sDBGrid1.FieldCount do

     begin

       sheet.cells[index,1].Borders.LineStyle:=1;

       sheet.cells[index,1]:=k;

       sheet.cells[index,j+1].Borders.LineStyle:=1;

       if sDBGrid1.fields[j-1].asstring='0' then

         begin

           Sheet.Cells[index,j+1].Select;

           ExcelApp.Selection.Interior.ColorIndex:=3;

           sheet.cells[index,j+1]:=sDBGrid1.fields[j-1].asstring;

         end

       else

       sheet.cells[index,j+1]:=sDBGrid1.fields[j-1].asstring;

     end;

       inc(index);

       inc(k);

       sDBGrid1.DataSource.DataSet.Next;

     end;

sheet.cells[index,2].Borders.LineStyle:=1;

Sheet.Cells[index,2].Font.Size := 12;

Sheet.Cells[index,2].Font.Bold := True;

sheet.cells[index,2]:='Итого';

Sheet.Cells[index,2].HorizontalAlignment:=3;

sheet.cells[index,3].Borders.LineStyle:=1;

Sheet.Cells[index,3].Font.Size := 12;

Sheet.Cells[index,3].Font.Bold := True;

sheet.cells[index,3].Value:='=SUM(c5:c'+intToStr(index-1)+')';

ExcelApp.Visible := true;

ExcelApp.WorkBooks[1].SaveAs(ExtractFilePath(Application.ExeName)+'Report\Sector\'+'Баланс для участка по фидеру- '+sDBLookupComboBox1.KeyValue+', '+sDBLookupComboBox2.KeyValue+', '+sDBLookupComboBox3.KeyValue+', '+DateToStr(Now)+'.xls');

end;

end.

unit ReportBitPoFideru;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, sLabel, sButton, sEdit, DBCtrls, sDBLookupComboBox,

 Grids, DBGrids, acDBGrid, DB, ADODB,ComObj;

type

 TForm15 = class(TForm)

   sDBGrid1: TsDBGrid;

   sDBLookupComboBox1: TsDBLookupComboBox;

   sDBLookupComboBox2: TsDBLookupComboBox;

   sDBLookupComboBox3: TsDBLookupComboBox;

   sEdit1: TsEdit;

   sEdit2: TsEdit;

   sButton1: TsButton;

   sButton2: TsButton;

   sButton3: TsButton;

   sLabel1: TsLabel;

   sLabel2: TsLabel;

   sLabel3: TsLabel;

   sLabel4: TsLabel;

   sLabel5: TsLabel;

   ADO1: TADOQuery;

   ADO2: TADOQuery;

   DataAdo1: TDataSource;

   DataAdo2: TDataSource;

   DataAdo3: TDataSource;

   ADO3: TADOQuery;

   DataRachet: TDataSource;

   ADORachet: TADOQuery;

   procedure sButton3Click(Sender: TObject);

   procedure sDBLookupComboBox1Click(Sender: TObject);

   procedure sDBLookupComboBox2Click(Sender: TObject);

   procedure sButton2Click(Sender: TObject);

ПРИЛОЖЕНИЕ 2

Структурная схема программного продукта

ПРИЛОЖЕНИЕ 3

Блок-схема алгоритма работы основного расчётного модуля:


ПРИЛОЖЕНИЕ 4

Распечатка  контрольных тестов

Для того, чтобы запустить программу необходимо двойным щелчком левой кнопка мыши щелкнуть по файлу BARS.exe. Появляется  окно входа в программу (рис 2.7):

Рисунок 2.7 – Окно входа в программу


Далее появляется главное меню программы (
рис 2.8):

Рисунок 2.8 – Главное меню программы

Форма просмотра оплаты электроэнергии абонентами (рис 2.9):

Рисунок 2.9 – Форма просмотра оплаты


Чтобы просмотреть оплату юридических абонентов за необходимый период, необходимо перейти на форму «Выбор потребления юридических лиц»
(рис 2.10):

Рисунок 2.10 – Форма просмотра оплаты юридических абонентов

Чтобы просмотреть небаланс оплаты электроэнергии по РЭСу, фидеру , ПС и ТП за необходимый период, необходимо перейти на форму «Баланс для рейдовых бригад» (рис 2.11):

Рисунок 2.11 – Форма расчёта небаланса


Для просмотра оплаты электроэнергии бытовыми абонентами  по участку за необходимый период, необходимо перейти на форму «Баланс для участка по фидеру»
(рис 2.12):

Рисунок 2.12 – Форма просмотра оплаты электроэнергии бытовыми абонентами  

Чтобы просмотреть контрольные показания зарегистрированные на ПС или фидере необходимо перейти на форму «Контрольные показания» (рис 2.13):

Рисунок 2.13 – Контрольные показания по фидеру, ПС


Также есть возможность поиска бытовых абонентов по номеру лицевого счёта и юрид
ический – по номеру договора (рис. 2.14):

Рисунок 2.14 – Форма поиска


                                                         ПРИЛОЖЕНИЕ 5

                                                  Руководство пользователя

                                                                      СОДЕРЖАНИЕ

П5.1. ПРАВИЛА ЭКСПЛУАТАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

94

П5.1.1. Условия эксплуатации программного обеспечения

94

П5.1.1.1. Требования к аппаратному обеспечению

94

П5.1.1.2. Требования к помещениям для эксплуатации аппаратных средств

94

П5.1.1.3. Требования к организации рабочих мест

95

П5.1.1.4. Требования к освещению помещения для эксплуатации аппаратных средств и рабочих мест

96

П5.1.1.5. Требования к организации режима труда и отдыха при работе с аппаратным обеспечением

97

П5.2. ЭКСПЛУАТАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

98

П5.2.1. Установка программного обеспечения на ЭВМ

98

П5.2.2. Вызов программного обеспечения

98

П5.2.3. Ввод исходных данных

98

П5.2.4. Действия пользователя по обработке информации

98

П5.2.5. Вывод  результатов обработки информации

98

П5.2.6. Сообщения программного обеспечения

99

П5.2.7. Демонстрационный пример работы программного обеспечения

100

П5.1. ПРАВИЛА ЭКСПЛУАТАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

П5.1.1. Условия эксплуатации программного обеспечения

П5.1.1.1. Требования к аппаратному обеспечению

Для эксплуатации программы к программному обеспечению предъявляются следующие требования:

- процессор с тактовой частотой  300 МГц и выше;

- объем оперативной памяти 64 Мб и выше;

- объем дискового пространства  150 Мб;

- монитор 1024×768 VGA;

- манипулятор типа мышь;

- принтер.

П5.1.1.2.  Требования к помещениям для эксплуатации аппаратных средств

Помещения с видео-дисплейными терминалами (ВДТ) и ПЭВМ должны оборудоваться системами  отопления, кондиционирования воздуха или эффективной приточной вытяжной вентиляцией. Эти помещения также должны иметь естественное и искусственное освещение.

Естественное освещение должно осуществляться через светопроемы, ориентированные преимущественно на север и северо-восток, и  обеспечивать коэффициент естественной освещенности (КЕО) не ниже 1,2% в зонах с устойчивым снежным покровом и не ниже 1,5% на остальной территории. Указанные значения КЕО нормируются для зданий, расположенных в III климатическом поясе. Расчет КЕО для других поясов светового климата проводится по общепринятой методике.

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

Искусственное освещение должно обеспечивать на рабочих  местах с ВДТ и ПЭВМ в производственных и административно-общественных, дошкольных и учебных  помещениях освещенность не ниже нормируемых значений.

Следует ограничивать неравномерность распределения яркости в поле зрения пользователя ВДТ и ПЭВМ, при этом соотношение яркости между рабочими поверхностями не должно превышать 3:1 – 5:1, а между рабочими поверхностями и поверхностями стен и оборудования – 10:1.

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

Общее освещение следует выполнять в виде сплошных или прерывистых линий светильников, расположенных сбоку от рабочих мест, преимущественно слева, параллельно линии зрения пользователей. При периметральном расположении рабочих мест с ВДТ и ПЭВМ в дошкольных и учебных помещениях, светильники общего освещения следует располагать локализовано относительно рабочих мест.

Яркость светильников общего освещения в зоне углов излучения от 50 град. До 90 град. с вертикалью в продольной и поперечной плоскостях должна составлять не более 200 кд/м, защитный угол светильников должен быть не менее 40 град.

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

Расположение рабочих  мест с ВДТ и ПЭВМ в цокольных и подвальных помещениях не допускается.

В случае производственной необходимости, эксплуатация ВДТ и ПЭВМ в помещениях  без естественного света может проводиться только по согласованию с органами Государственного  санитарно-эпидемиологического надзора.

Площадь на одно рабочее место с ВДТ и ПЭВМ для взрослых пользователей должна составлять не менее 6,0 м2, а объем – не менее 20,0 м3. Площадь на одно рабочее место с ВДТ и ПЭВМ во всех учебных и дошкольных учреждениях должна быть не менее 6,0 м2, а объем – не менее 24 м3.

Звукоизоляция ограждающих конструкций помещения с ВДТ и ПЭВМ должна отвечать гигиеническим требованиям и обеспечивать нормируемые параметры шума согласно требованиям раздела 5 настоящих Санитарных правил и норм.

Поверхность пола в помещениях эксплуатации ВДТ и ПЭВМ должна быть ровной, без выбоин, нескользкой, удобной для очистки и влажной уборки, обладать антистатическими свойствами.

П5.1.1.3.  Требования к организации рабочих мест.

Расположение  рабочих мест в ВДТ и ПЭВМ для пользователей в подвальных помещениях не допускается.

Площадь на одно рабочее место с ВДТ и ПЭВМ для пользователей должна составлять не менее 6 кв. м, а объем не менее 20 куб.м.

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

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

Конструкция ВДТ должна обеспечивать возможность фронтального наблюдения экрана путем  поворота корпуса в горизонтальной плоскости вокруг  вертикальной оси в пределах плюс – минус 30 градусов. Дизайн  ВДТ  должен предусматривать окраску корпуса  в  мягкие  тона с диффузионным рассеиванием  света. Корпус ВДТ и ПЭВМ, клавиатура и другие блоки и устройства ПЭВМ  должны иметь матовую поверхность одного цвета с коэффициентом отражения 0.4 – 0.6  и  не  иметь блестящих  деталей, способных создавать блики.

П5.1.1.4. Требования к освещению помещений для эксплуатации аппаратных средств и рабочих мест

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

Искусственное освещение должно обеспечивать на рабочих  местах с ВДТ и ПЭВМ в производственных и административно-общественных, дошкольных и учебных  помещениях освещенность не ниже нормируемых значений.

Следует ограничивать неравномерность распределения яркости в поле зрения пользователя ВДТ и ПЭВМ, при этом соотношение яркости между рабочими поверхностями не должно превышать 3:1 – 5:1, а между рабочими поверхностями и поверхностями стен и оборудования – 10:1.

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

Общее освещение следует выполнять в виде сплошных или прерывистых линий светильников, расположенных сбоку от рабочих мест, преимущественно слева, параллельно линии зрения пользователей. При периметральном расположении рабочих мест с ВДТ и ПЭВМ в дошкольных и учебных помещениях, светильники общего освещения следует располагать локализовано относительно рабочих мест.

Яркость светильников общего освещения в зоне углов излучения от 50 град. До 90 град. с вертикалью в продольной и поперечной плоскостях должна составлять не более 200 кд/м, защитный угол светильников должен быть не менее 40 град.

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

П5.1.1.5. Требования к организации режима труда и отдыха при работе с аппаратным обеспечением

Режимы труда и отдыха при профессиональной работе с ПЭВМ и ВТД должны организовываться в зависимости от вида и категории трудовой деятельности.

Виды трудовой деятельности разделяются на три группы:

- группа А – работа по считыванию информации с экрана ВТД и ПЭВМ с предварительным запросом;

- группа Б – работа по вводу информации;

- группа В – творческая работа в режиме диалога с ЭВМ. При выполнении в течении рабочей смены работ, относящихся к разным видам трудовой деятельности, за основную работу с ПЭВМ и ВТД следует принимать такую, которая занимает  не менее 50% времени в течение рабочей смены или рабочего дня.

Для видов трудовой деятельности устанавливается три категории тяжести и напряженности работы с ВТД и ПЭВМ, которые определяются: для групп А и Б – по суммарному числу считываемых или вводимых знаков за рабочую смену; для группы В – по суммарному времени непосредственной работы с ВТД и ПЭВМ за рабочую смену. Нагрузка на рабочую смену любой продолжительности не должна превышать: для группы А – 60000 знаков, для групп Б – 45000 знаков, для группы В – суммарное время непосредственной работы с ВТД и ПЭВМ за смену не более 6 часов. Продолжительность работы педагогов при ведении занятий с ВТД и ПЭВМ во всех учебных заведениях не должна превышать 4 часов в день. Для обеспечения оптимальной работоспособности и сохранения здоровья профессиональных пользователей, на протяжении рабочей смены должны устанавливаться регламентированные перерывы. Время регламентированных перерывов в течение рабочей смены следует устанавливать в зависимости от ее продолжительности, вида и категории трудовой деятельности с ВТД и ПЭВМ.

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

Продолжительность непрерывной работы с ВТД и ПЭВМ без регламентированного перерыва не должна превышать 2 часов.

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


П5.2.  ЭКСПЛУАТАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

П5.2.1.  Установка программного обеспечения на ЭВМ

При установке данного программного продукта необходимо запустить Setup.exe, на экране появится диалоговое окно, которое представлено на рис. П5.1). Для продолжения процесса инсталляции необходимо нажать «Далее»

Рисунок П5.1 – Окно приветствия

Далее, программа установки запрашивает директорию, в которую будет устанавливаться программа (см. рис. П5.2). По умолчанию это C:\Program Files\BARS

Рисунок П5.2 – Окно выбора директории для установки

Для начала установки нажать на кнопку «Далее» (см. рис. П5.3)

Рисунок П5.3 – Окно начала установки

Программа установки на компьютер копирует файлы на диск. По завершению установки программы нажать на кнопку «Готово» (см. рис. П5.4)


П5.2.2.  Вызов программного обеспечения

Вызов приложения «Баланс и Анализ Распределительной Сети» осуществляется запуском файла BARS.exe, который располагается в папке установленной программы.

П5.2.3. Ввод исходных данных

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

П5.2.4.  Действия пользователя по обработке информации

Автоматическая сортировка данных.

П5.2.5.  Вывод результатов обработки информации

Результаты обработки информации выводятся непосредственно на форму. Также существует возможность вывода результатов на печать.

П5.2.6.  Сообщения программного продукта

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

Краткая характеристика некоторых сообщений программы приведена ниже:


Рисунок П5.1 – Сообщение при выборе номера лицевого абонента из диапозона

Рисунок П5.2 – Сообщение при выборе номера лицевого абонента из диапозона

Рисунок П5.3 – Сообщение, выводимое , если не указан год

Рисунок П5.4 – Сообщение, выводимое , если не указан месяц


П5.2.7. Демонстрационный пример работы программного продукта

Для того, чтобы запустить программу необходимо двойным щелчком левой кнопка мыши щелкнуть по файлу BARS.exe. Появляется  окно входа в программу (рис П5.5):

Рисунок П5.5 Окно входа в программу


Далее появляется главное меню программы (
рис П5.6):

Рисунок П5.6 – Главное меню программы

Форма просмотра оплаты электроэнергии абонентами (рис П5.7):

Рисунок П5.7 – Форма просмотра оплаты


Чтобы просмотреть оплату юридических абонентов за необходимый период, необходимо перейти на форму «Выбор потребления юридических лиц»
(рис П5.8):

Рисунок П5.8 – Форма просмотра оплаты юридических абонентов

Чтобы просмотреть небаланс оплаты электроэнергии по РЭСу, фидеру , ПС и ТП за необходимый период, необходимо перейти на форму «Баланс для рейдовых бригад» (рис П5.9):

Рисунок П5.9 – Форма расчёта небаланса


Для просмотра оплаты электроэнергии бытовыми абонентами  по участку за необходимый период, необходимо перейти на форму «Баланс для участка по фидеру»
(рис П5.10):

Рисунок П5.10 – Форма просмотра оплаты электроэнергии бытовыми абонентами  

Чтобы просмотреть контрольные показания зарегистрированные на ПС или фидере необходимо перейти на форму «Контрольные показания» (рис П5.11):

Рисунок П5.11 – Контрольные показания по фидеру, ПС


Также есть возможность поиска бытовых абонентов по номеру лицевого счёта и юрид
ический – по номеру договора (рис. П5.12):

Рисунок П5.12 – Форма поиска


ПРИЛОЖЕНИЕ 6

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

Комиссия в составе

руководитель дипломного проекта –  С.А.Шеварёва

руководитель практики от предприятия – Д. П. Пашкевич

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

произвел проверку работоспособности программного продукта, разработанного в порядке выполнения дипломного проекта.

1. Информация о программном продукте

1.1. Название программного продукта «Баланс и Анализ Распределительной Сети»

1.2. Номер версии программного продукта 1.0

           1.3. Дата разработки версии программного продукта  25.05.2013

1.4. Назначение    программного    продукта    Программный    продукт    предназначен    для  автоматизации процесса расчёта небаланса.

1.5. Функции  программного продукта: просмотр оплаты, расчёт небаланса, поиск. 

1.6. Язык программирования: Delphi 7.0

1.7. Наличие программы инсталляции:Есть

           1.8. Тип компьютера(ов): Pentium 3

1.9. Требования к компьютеру:

  1.  Оперативная память: 64 Мбайт и выше
  2.  Ёмкость жесткого диска(ов) 150 Мбайт
  3.  Монитор(ы) 1024*768 VGA

1.9.4. Дополнительное периферийное оборудование: манипулятор типа «мышь», клавиатура

1.10. Тип операционной системы (систем): Windows XP и выше

2.Информация об организации-заказчике.

2.1. Полное официальное наименование:  Республиканское унитарное предприятие «Витебскэнерго»

           2.2. Место нахождения (почтовый адрес): 210029, г. Витебск, ул. Правды, 30

  1.  Номер контактного телефона(ов): (0212) 47-01-50
    1.  Номер факса: (0212) 47-30-75
    2.  Адрес электронной почты: energo@vitebsk.energo.by

3. Информация о разработчике программного продукта.                                                                                             3.1 Полное официальное наименование:  Учреждение  образования «Витебский государственный политехнический колледж»

  1.  Место нахождения (почтовый адрес): 210027 г.Витебск пр-т. Черняховского 14а
  2.  Номер контактного телефона(ов): (8-0212)21-90-80
  3.  Номер факса: (8-0212)21-90-80
  4.  Адрес электронной почты: vgpt@tut.by

3.6. Фамилия, имя, отчество учащегося, разработавшего программный продукт: Дроздов Максим Николаевич.

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

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

Руководитель дипломного проекта                                                           С.А.Шеварёва

Руководитель практики от предприятия                                                  Д. П. Пашкевич

Представитель заказчика                                                                            Д. П. Пашкевич