Разработка и внедрение информационной системы "Автовокзал"

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 09.08.2011
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Рисунок Б.9 - Форма получения отчета о вокзальном расписании

Рисунок Б.10 - Форма получения отчета о работе автовокзала

Рисунок Б.11 - Форма выбора промежутка времени для ввода статистики продаж согласно договору компании

Рисунок Б.12 - Форма выбора промежутка времени для вывода отчета о не прибытии и опоздании автотранспорта

Рисунок Б.13 - Форма выбора интервала времени отчета по оформленным штрафам и сведений о работе АТП

Рисунок Б.14 - Форма выбора данных для составления отчета
пассажиропотока по автовокзалу

Рисунок Б.15 - Форма выбора данных для отчета показателей перевозки пассажиров

Рисунок Б.16 - Форма выбора данных для вывода сведений по льготному проезду

Рисунок Б.17 - Форма выбора данных для вывода сведений по
предварительным продажам билетов

Приложение В - Структурные карты Константайна разрабатываемого модуля АИС

Приложение Г - таблицы тестовых данных

Таблица Г.1 - Таблица тестов взаимодействия пользователя с системой

Описание входных данных

Входные данные

Ожидаемый результат

Реальный результат

Отметка о дефектах

Выбрать пункт меню «Настройка приложения» из меню «Система». Указать путь расположения БД, нажать кнопку «Выполнить»

Окно «Настройка приложения»

Выбранный путь к БД

Отобразилось окно настройки приложения. Отобразилось окно указания пути к БД

Отобразилось окно настройки приложения. Отобразилось окно указания пути к БД

Выбрать пункт меню «Коэффициент вместимости по временному промежутку» из меню «Расчет», нажать кнопку «Выполнить»

Окно «Выберете промежуток и рейс» Маршрут, время, рейс, дата

Отобразился отчет в формате Excel «Коэффициент вместимости по временному промежутку»

Отобразился отчет в формате Excel «Коэффициент вместимости по временному промежутку

Выбрать пункт меню «Проданные билеты, выручка, наполняемость автобусов» из меню «Расчет», нажать кнопку «Выполнить»

Окно «Выберете промежуток и АВ» Дата, город, название автостанции, тип расчета.

Отобразился отчет в формате Excel «Проданные билеты, выручка, наполняемость автобусов»

Отобразился отчет в формате Excel «Проданные билеты, выручка, наполняемость автобусов»

Выбрать пункт меню «Потребность в кассовых ведомостях» из меню «Расчет», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Месяц, год

Отобразился отчет в формате Excel «Потребность в кассовых ведомостях»

Отобразился отчет в формате Excel «Потребность в кассовых ведомостях»

Выбрать пункт меню «Вокзальное расписание» из меню «Расчет», нажать кнопку «Выполнить»

Окно «Выберете месяц и АВ» Месяц, год, название автовокзала, тип расписания (поминутное, станционное)

Отобразился отчет в формате Excel «Вокзальное расписание»

Отобразился отчет в формате Excel «Вокзальное расписание»

Выбрать пункт меню «Оперативные сведения» из меню «Доходы», нажать кнопку «Выполнить»

Окно «Выберете промежуток и АВ» Месяц, год, название автовокзала, тип ведомости (сводная, обычная)

Отобразился отчет в формате Excel «Оперативные сведения»

Отобразился отчет в формате Excel «Оперативные сведения»

Выбрать пункт меню «Задания по доходам» из меню «Доходы», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Месяц, год

Отобразился отчет в формате Excel «Задания по доходам»

Отобразился отчет в формате Excel «Задания по доходам»

Выбрать пункт меню «Выполнение условий договора АТП» из меню «Доходы», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Месяц, год, город, область

Отобразился отчет в формате Excel «Выполнение условий договора АТП»

Выбрать пункт меню «Расчет планового задания по выручке и доходам» из меню «Доходы», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Год

Отобразился отчет в главном окне программы «Расчет планового задания по выручке и доходам»

Отобразился отчет в главном окне программы «Расчет планового задания по выручке и доходам»

Выбрать пункт меню «Доходы по багажу» из меню «Доходы», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Месяц, год

Отобразился отчет в формате Excel «Доходы по багажу»

Отобразился отчет в формате Excel «Доходы по багажу»

Выбрать пункт меню «Не прибытия и опоздания» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Месяц, год, отчет по типу (автостанция, АТП)

Отобразился отчет в формате Excel «Не прибытия и опоздания»

Отобразился отчет в формате Excel «Не прибытия и опоздания»

Выбрать пункт меню «Штрафы АТП» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Месяц, год, название АТП

Отобразился отчет в формате Excel «Штрафы АТП»

Отобразился отчет в формате Excel «Штрафы АТП»

Выбрать пункт меню «Сведения о срывах и не заходах» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Выберите период» Месяц, год, тип ведомости (развернутая, сводная)

Отобразился отчет в формате Excel «Сведения о срывах и не заходах»

Отобразился отчет в формате Excel «Сведения о срывах и не заходах»

Выбрать пункт меню «Анализ пассажиропотока» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Выберете промежуток и АВ» Месяц, год, название автовокзала, тип отчета (полный, по области, другой)

Отобразился отчет в формате Excel «Анализ пассажиропотока»

Отобразился отчет в формате Excel «Анализ пассажиропотока»

Выбрать пункт меню «Показатели перевозки пассажиров» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Показатели перевозки пассажиров» Выбор интервала времени, тип следования рейса (межгород, пригород, транзит)

Отобразился отчет в формате Excel «Показатели перевозки пассажиров»

Отобразился отчет в формате Excel «Показатели перевозки пассажиров»

Выбрать пункт меню «Сведения о работе АТП» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Месяц, год, название АТП

Отобразился отчет в формате Excel «Сведения о работе АТП»

Отобразился отчет в формате Excel «Сведения о работе АТП»

Выбрать пункт меню «Суммарный километраж и количество пассажиров» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Месяц, год

Отобразился отчет в формате Excel «Суммарный километраж и количество пассажиров»

Отобразился отчет в формате Excel «Суммарный километраж и количество пассажиров»

Выбрать пункт меню «Льготные пассажиры» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Сведения по льготному проезду» Месяц, год, вид ведомости (по категориям, сводная, по АТП)

Отобразился отчет в формате Excel «Сведения по льготному проезду»

Отобразился отчет в формате Excel «Сведения по льготному проезду»

Выбрать пункт меню «Суммарный коэффициент загрузки» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Выберите интервал времени» Месяц, год

Отобразился отчет в формате Excel «Суммарный коэффициент загрузки»

Отобразился отчет в формате Excel «Суммарный коэффициент загрузки»

Выбрать пункт меню «Предварительная продажа билетов» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Выберете промежуток и АВ» Месяц, год, название автовокзала, тип ведомости (развернутая сводная)

Отобразился отчет в формате Excel «Предварительная продажа билетов»

Отобразился отчет в формате Excel «Предварительная продажа билетов»

Выбрать пункт меню «Коэффициент повышения тарифов» из меню «Аналитика», нажать кнопку «Выполнить»

Окно «Выберете месяцы расчета» Месяц, год

Отобразился отчет в формате Excel «Коэффициент повышения тарифов»»

Отобразился отчет в формате Excel «Коэффициент повышения тарифов»

Приложение Д - Программный код методов и функций

Реализация функции Atp_Anal, Atp_Anal_All - «Анализ работы АТП»

public pubDate[2]

local buf

buf='01.'+str(ThisForm.From_Month)+'.'+str(ThisForm.From_Year)

if empty(ctod(buf))

MessageBox('Неверная дата начала периода',16,'Выбор интервала времени')

return

else

pubDate[1]=ctod(buf)

endif

if ThisForm.To_Month=12

buf=31

else

buf=day(ctod('01.'+str(ThisForm.To_Month+1)+'.'+str(ThisForm.To_Year))-1)

endif

buf=str(buf)+'.'+str(ThisForm.To_Month)+'.'+str(ThisForm.To_Year)

if empty(ctod(buf))

MessageBox('Неверная дата конца периода',16,'Выбор интервала времени')

return

else

pubDate[2]=ctod(buf)

endif

if pubDate[1]>pubDate[2]

MessageBox('Дата начала периода больше даты конца периода',16,'Выбор интервала времени')

return

endif

if pubDate[2]>date()

MessageBox('Дата конца периода больше текущей даты',16,'Выбор интервала времени')

return

endif

if Year(pubDate[1])<Year(pubDate[2])-1

MessageBox('Слишком большой период',16,'Выбор интервала времени')

return

endif

*******************************************************

WAIT "Ждите, идет формирование отчета ..." WINDOW NOWAIT

create cursor RejsMas (Pec N(5), Name C(22), Time N(5,2))

create cursor C_BdBase (Pec N(5), tMonth N(2), tYear N(4), KolP N(4), SumN N(11,2), Km_Sum N(8), K_Load N(6,2))

PRIVATE XLApp, pubMonth, pubYear

public MassLen

local MaxLen

local j, ii, lName, lTime, lYear

MaxLen=0

XLApp=0

pubMonth=ThisForm.MonthArray[Month(pubDate[1])]

pubYear=alltrim(str(Year(pubDate[1])))

pubAtp=Atp.Naim

if ThisForm.From_Month=ThisForm.To_Month and ThisForm.From_Year=ThisForm.To_Year && За один месяц

PRIVATE XLSheets

XlSheets=0

if !CreatExc(@XLApp, 1, @XLSheets, 25)

return .f.

endif

if empty(Open_Table('bd'+ALLTRIM(STR(ThisForm.From_Month))+ALLTRIM(str(ThisForm.From_Year)),,;

'Bd_Base'))

return

endif

buf=Atp.Kat

SET TALK ON

select Pec, ;

sum(KolP) as KolP, ;

sum(SumN) as SumN, ;

sum(Km_Sum) as Km_Sum, ;

sum(KolP/KolM) as K_Load ;

from Bd_Base ;

group by Pec ;

where Atp1=buf ;

order by Pec ;

into cursor C_Bd

set talk off

scan

select RejsMas

locate for Pec=C_Bd.Pec

if !found()

select C_Rejs

locate for Rec=C_Bd.Pec

if found()

lName=Name+' п'

lTime=Tyda

endif

locate for Reo=C_Bd.Pec

if found()

lName=Name+' о'

lTime=Obra

endif

select RejsMas

append blank

replace Pec with C_Bd.Pec, Name with lName, Time with lTime

endif

select C_BdBase

append blank

replace Pec with C_Bd.Pec, tMonth with ThisForm.From_Month, tYear with ThisForm.From_Year, ;

KolP with C_Bd.KolP, SumN with C_Bd.SumN, Km_Sum with C_Bd.Km_Sum, ;

K_Load with C_Bd.K_Load

select C_Bd

endscan

use

select Bd_Base

use

select RejsMas

MassLen=RecCount()

if MassLen=0

MessageBox('Выбранное АТП рейсов за указанный период не совершало.')

return

endif

Atp_Anal(@XlSheets, Month(pubDate[1]), Year(pubDate[1]))

XLApp.Visible = .T.

select RejsMas

use

select C_BdBase

use

release XlSheets, pubDate

return

endif

local Month_Num && Несколько месяцев

if Year(pubDate[1])=Year(pubDate[2])

Month_Num=Month(pubDate[2])-Month(pubDate[1])+1

else

Month_Num=13-Month(pubDate[1])+Month(pubDate[2])

endif

Month_Num=Month_Num+1 && Итоговый лист

****************************************************

public Month_Array[Month_Num], XLSheets[Month_Num]

store 0 to XlSheets

j=1

buf=Atp.Kat

if Year(pubDate[1])=Year(pubDate[2])

lYear=Year(pubdate[1])

for ii=Month(pubDate[1]) to Month(pubDate[2])

Month_Array[j]=ThisForm.MonthArray[ii]+'_'+alltrim(str(lYear))

if empty(Open_Table('bd'+ALLTRIM(STR(ii))+ALLTRIM(str(lYear)),, 'Bd_Base'))

return

endif

SET TALK ON

select Pec, ;

sum(KolP) as KolP, ;

sum(SumN) as SumN, ;

sum(Km_Sum) as Km_Sum, ;

sum(KolP/KolM) as K_Load ;

from Bd_Base ;

group by Pec ;

where Atp1=buf ;

order by Pec ;

into cursor C_Bd

set talk off

scan

select RejsMas

locate for Pec=C_Bd.Pec

if !found()

select C_Rejs

locate for Rec=C_Bd.Pec

if found()

lName=Name+' п'

lTime=Tyda

endif

locate for Reo=C_Bd.Pec

if found()

lName=Name+' о'

lTime=Obra

endif

select RejsMas

append blank

replace Pec with C_Bd.Pec, Name with lName, Time with lTime

endif

select C_BdBase

append blank

replace Pec with C_Bd.Pec, tMonth with ii, tYear with lYear, KolP with C_Bd.KolP, ;

SumN with C_Bd.SumN, Km_Sum with C_Bd.Km_Sum, K_Load with C_Bd.K_Load

select C_Bd

endscan

use

j=j+1

select Bd_Base

use

endfor

else

lYear=Year(pubdate[1])

for ii=Month(pubDate[1]) to 12

Month_Array[j]=ThisForm.MonthArray[ii]+'_'+alltrim(str(Year(pubdate[1])))

if empty(Open_Table('bd'+ALLTRIM(STR(ii))+ALLTRIM(str(Year(pubdate[1]))),,;

'Bd_Base'))

return

endif

SET TALK ON

select Pec, ;

sum(KolP) as KolP, ;

sum(SumN) as SumN, ;

sum(Km_Sum) as Km_Sum, ;

sum(KolP/KolM) as K_Load ;

from Bd_Base ;

group by Pec ;

where Atp1=buf ;

order by Pec ;

into cursor C_Bd

set talk off

scan

select RejsMas

locate for Pec=C_Bd.Pec

if !found()

select C_Rejs

locate for Rec=C_Bd.Pec

if found()

lName=Name+' п'

lTime=Tyda

endif

locate for Reo=C_Bd.Pec

if found()

lName=Name+' о'

lTime=Obra

endif

select RejsMas

append blank

replace Pec with C_Bd.Pec, Name with lName, Time with lTime

endif

select C_BdBase

append blank

replace Pec with C_Bd.Pec, tMonth with ii, tYear with lYear, KolP with C_Bd.KolP, ;

SumN with C_Bd.SumN, Km_Sum with C_Bd.Km_Sum, K_Load with C_Bd.K_Load

select C_Bd

endscan

use

j=j+1

select Bd_Base

use

endfor

lYear=Year(pubdate[2])

for ii=1 to Month(pubDate[2])

Month_Array[j]=ThisForm.MonthArray[ii]+'_'+alltrim(str(Year(pubdate[2])))

if empty(Open_Table('bd'+ALLTRIM(STR(ii))+ALLTRIM(str(Year(pubdate[2]))),,;

'Bd_Base'))

return

endif

SET TALK ON

select Pec, ;

sum(KolP) as KolP, ;

sum(SumN) as SumN, ;

sum(Km_Sum) as Km_Sum, ;

sum(KolP/KolM) as K_Load ;

from Bd_Base ;

group by Pec ;

where Atp1=buf ;

order by Pec ;

into cursor C_Bd

set talk off

scan

select RejsMas

locate for Pec=C_Bd.Pec

if !found()

select C_Rejs

locate for Rec=C_Bd.Pec

if found()

lName=Name+' п'

lTime=Tyda

endif

locate for Reo=C_Bd.Pec

if found()

lName=Name+' о'

lTime=Obra

endif

select RejsMas

append blank

replace Pec with C_Bd.Pec, Name with lName, Time with lTime

endif

select C_BdBase

append blank

replace Pec with C_Bd.Pec, tMonth with ii, tYear with lYear, KolP with C_Bd.KolP, ;

SumN with C_Bd.SumN, Km_Sum with C_Bd.Km_Sum, K_Load with C_Bd.K_Load

select C_Bd

endscan

use

j=j+1

select Bd_Base

use

endfor

endif

select RejsMas

MassLen=RecCount()

if MassLen=0

MessageBox('Выбранное АТП рейсов за указанный период не совершало.')

return

endif

Month_Array[j]='Итого'

if !CreatExc(@XLApp, Month_Num, @XLSheets, 25, @Month_Array)

return .f.

endif

XLApp.Calculation=xlCalculationManual

j=1

if Year(pubDate[1])=Year(pubDate[2])

lYear=Year(pubdate[1])

for ii=Month(pubDate[1]) to Month(pubDate[2])

pubMonth=ThisForm.MonthArray[ii]

pubYear=alltrim(str(lYear))

Atp_Anal(XlSheets[j], ii, lYear)

if MaxLen<MassLen

MaxLen=MassLen

endif

j=j+1

endfor

else

lYear=Year(pubdate[1])

for ii=Month(pubDate[1]) to 12

pubMonth=ThisForm.MonthArray[ii]

pubYear=alltrim(str(lYear))

Atp_Anal(XlSheets[j], ii, lYear)

if MaxLen<MassLen

MaxLen=MassLen

endif

j=j+1

endfor

lYear=Year(pubdate[2])

for ii=1 to Month(pubDate[2])

pubMonth=ThisForm.MonthArray[ii]

pubYear=alltrim(str(lYear))

Atp_Anal(XlSheets[j], ii, lYear)

if MaxLen<MassLen

MaxLen=MassLen

endif

j=j+1

endfor

endif

Atp_Anal_All(XlSheets[Month_Num], @Month_Array, Month_Num, ;

pubDate[1], pubDate[2], MaxLen)

XLApp.Calculation=xlCalculationAutomatic

XLApp.Visible = .T.

select RejsMas

use

select C_BdBase

use

release XlSheets, MassLen, pubDate

parameters pXlSheet, Set_Month, Set_Year, Beg_Date, End_Date

set deleted on

local XlSheet

XlSheet=pXlSheet

local i, j

i=Atp.Kat

if empty(Open_Table('bd'+ALLTRIM(STR(Set_Month))+ALLTRIM(str(Set_Year)),,;

'Bd_Base'))

return

endif

WAIT "Производится выборка из рейсовых ведомостей за "+pubMonth+" "+pubYear WINDOW NOWAIT

SET TALK ON

select b.Pec, ;

sum(b.KolP) as KolP, ;

sum(b.SumN) as SumN, ;

sum(b.Km_Sum) as Km_Sum, ;

sum(b.KolP/b.KolM) as K_Load ;

from Bd_Base b ;

group by b.Pec ;

where Atp1=i ;

order by b.Pec ;

into cursor C_Bd

select Bd_Base

use

i=1

MassLen = reccount('C_Bd')

if MassLen>0

local Otch[MassLen*2, 6]

STORE 0 TO Otch

select C_Bd

use

return

endif

susp

select C_BdBase

set filter to tMonth=Set_Month and tYear=Set_Year

select RejsMas

scan

Otch[i, 1]=RejsMas.Name

Otch[i, 2]=RejsMas.Time

select C_BdBase

locate for Pec=RejsMas.Pec

Otch[i, 3]=KolP

Otch[i, 4]=SumN

Otch[i, 5]=Km_Sum

Otch[i, 6]=K_Load

select RejsMas

i=i+1

endscan

select C_Rejs

scan

select RejsMas

locate for Pec=C_Rejs.Rec

if found()

select C_Bd

locate for Pec=C_Rejs.Rec

if found()

Otch[i, 1]=C_Rejs.Name+' п'

Otch[i, 2]=C_Rejs.tyda

Otch[i, 1]=RejsMas.Name

Otch[i, 2]=RejsMas.Time

Otch[i, 3]=KolP

Otch[i, 4]=SumN

Otch[i, 5]=Km_Sum

Otch[i, 6]=K_Load

else

Otch[i, 1]=C_Rejs.Name+' нет'

endif

i=i+1

endif

select RejsMas

locate for Pec=C_Rejs.Reo

if found()

select C_Bd

locate for Pec=C_Rejs.Reo

if found()

Otch[i, 1]=C_Rejs.Name+' о'

Otch[i, 2]=C_Rejs.obra

Otch[i, 1]=RejsMas.Name

Otch[i, 2]=RejsMas.Time

Otch[i, 3]=KolP

Otch[i, 4]=SumN

Otch[i, 5]=Km_Sum

Otch[i, 6]=K_Load

else

Otch[i, 1]=C_Rejs.Name+' нет'

endif

i=i+1

endif

select C_Rejs

endscan

select C_Bd

use

********************************************************

MassLen=i-1

i=5

XlSheet.Activate

XlSheet.Range("A2:F2").Value=PubAtp+" за "+pubMonth+" месяц " + pubYear+" г."

XLSheet.Range("A5:F5").Copy

XLSheet.Range("A6:F"+alltrim(str(MassLen+5))).Select

XLSheet.Paste

for j=1 to MassLen

XLSheet.Cells(i,1).Value = Otch[j,1]

XLSheet.Cells(i,2).Value = Otch[j,2]

XLSheet.Cells(i,3).Value = Otch[j,3]

XLSheet.Cells(i,4).Value = Otch[j,4]

XLSheet.Cells(i,5).Value = Otch[j,5]

XLSheet.Cells(i,6).Value = Otch[j,6]

i=i+1

endfor

ci = alltrim(str(i-1))

XLSheet.Cells(i,1).Value = 'Итого:'

XLSheet.Cells(i,3).Formula = '=Sum(C5:C'+ci+')'

XLSheet.Cells(i,4).Formula = '=Sum(D5:D'+ci+')'

XLSheet.Cells(i,5).Formula = '=Sum(E5:E'+ci+')'

XLSheet.Cells(i,6).Formula = '=Sum(F5:F'+ci+')/COUNTIF(F5:F'+ci+', "<>0")'

XLSheet.Range("A5:F5").Borders(3).Weight=xlMedium

ci = alltrim(str(i))

XLSheet.Range("A"+ci+":F"+ci).Borders(3).Weight=xlMedium

XLSheet.Range("A"+ci+":F"+ci).Borders(4).Weight=xlMedium

*************************************************************

XLSheet.Range("A5").Select

WAIT CLEAR

RELEASE Otch, XlSheet

Реализация процедуры sould_tisket - «Проданные билеты»

* Procedure Sold_Tisked

* Сведения о продаже билетов, выручке и наполняемости автобусов по АВ (АС)

parameters Rep_Type

* 1 - Накопительная, 2 - на 1 рейс

set deleted on

local Def_Path

Def_Path=set('default')

set default to &gl_Temp_Path

PRIVATE XLApp, XLSheet

XLApp=0

XLSheet=0

if empty(Open_Table('Hace','IHace'))

return

endif

seek pubBg1 && 1 Bg

if Cru>0 && Если есть варианты ID

Cru_buf=Cru

* выбираем все ID города

select Khp from Hace where Cru=Cru_buf into cursor C_BG_ID1

else

select Khp from Hace where Khp=pubBG1 into cursor C_BG_ID1

endif

select Hace

seek pubBg2 && 2 Bg

if Cru>0 && Если есть варианты ID

Cru_buf=Cru

* выбираем все ID города

select Khp from Hace where Cru=Cru_buf into cursor C_BG_ID2

else

select Khp from Hace where Khp=pubBG2 into cursor C_BG_ID2

endif

***************************************************

if empty(Open_Table('SostMar','IPoiskm'))

return

endif

************* Маршруты, проходящие через оба BG

select mar distinct from SostMar s, C_BG_ID1 b1 ;

where s.Kpp=b1.Khp ;

into cursor Mar_C1

select mar distinct from SostMar s, C_BG_ID2 b2 ;

where s.Kpp=b2.Khp ;

into cursor Mar_C2

select m1.mar from Mar_C1 m1, Mar_C2 m2 ;

where m1.Mar=m2.Mar ;

into cursor Mar_C

select Mar_C1

use

select Mar_C2

use

*********** Города, лежащие на маршрутах

select s.Kpp, f.Name distinct from SostMar s, Mar_C m, Filial f ;

where s.Mar=m.Mar and s.kpp=f.Kab ;

order by s.Psl ;

into table BG_Temp

if empty(Open_Table('Atp'))

return

endif

if empty(Open_Table('Pejc','IRejc'))

return

endif

****************************************************

select 0

if file('Rejs_Table.dbf')

if used('Rejs_Table')

select Rejs_Table

use

endif

erase Rejs_Table.dbf

erase Rejs_Table.cdx

endif

create table Rejs_Table (Bg N(4), Atp1 N(4), Atp_Name C(20), Pec N(5), ;

Mar N(5), Otprav N(5), KolM N(5), KolP N(5), P_KolP N(5), ;

SumN N(11,2), Km N(5), AKolP N(5), Tranz N(5), Numb N(4), ;

Name C(20), Tydap N(5,2), Obra C(1), BG_Time N(5,2), Fop N(1), ;

Direct N(11,2), ObraM C(1), Km_Sum N(8))

index on str(Bg_Time,5,2)+ObraM+str(Pec,5)+str(Atp1,4)+str(Tydap,5,2) ;

tag Bg_Time of Rejs_Table

index on str(Pec)+str(Fop)+Obra tag Pec of Rejs_Table

index on Bg tag Bg of Rejs_Table

local buf, i, j

*****************************************************

if Year(pubDate[1])=Year(pubDate[2])

for j=Month(pubDate[1]) to Month(pubDate[2])

do Rejs_Scan with j, Year(pubDate[1]), pubDate[1], pubDate[2]

endfor

else

for j=Month(pubDate[1]) to 12

do Rejs_Scan with j, Year(pubDate[1]), pubDate[1], pubDate[2]

endfor

for j=1 to Month(pubDate[2])

do Rejs_Scan with j, Year(pubDate[2]), pubDate[1], pubDate[2]

endfor

endif

*****************************************************

if reccount('Rejs_Table')=0

release Num_Bg, MassLen, XlApp, XlSheet

MessageBox('Не найдено ни одного рейса между данными городами',16,'')

return

endif

select Atp

use

select Mar_C

use

select Rejs_Table

set order to Bg

local Old_Bg, New_Bg, N_Rec

Old_Bg=-1

scan

if Bg#Old_Bg

Old_Bg=Bg

New_Bg=-1

select Bg_Temp

locate for Kpp=Old_Bg

if !found()

select Hace

seek Old_Bg

if Cru>0

buf=Cru

scan for Cru=buf

select Bg_Temp

locate for Kpp=Hace.Khp

if found()

New_Bg=Hace.Khp

exit

endif

select Hace

endscan

endif

select Rejs_Table

if New_Bg>0

skip -1

N_Rec=recno()

replace Bg with New_Bg for Bg=Old_Bg

go N_Rec

endif

endif

endif

endscan

select Bg_Temp

scan

select Rejs_Table

if !seek(Bg_Temp.Kpp)

select Bg_Temp

delete

endif

select Bg_Temp

endscan

pack

select Rejs_Table

set order to Pec

local Old_Rejs, Old_Obra, luPsl, luTime, luObra, luRec, luRejs

Old_Rejs=-1

Old_Obra='!'

scan

if Pec#Old_Rejs or Obra#Old_Obra

Old_Rejs=Pec

Old_Obra=Obra

luTime=-1

if Fop=0 && Формирующийся рейс

select C_BG_ID1

locate for Khp=Rejs_Table.Bg

if found()

select Rejs_Table

luTime=Tydap

luObra='1'

endif

endif

if luTime<0

luPsl=-1

select C_BG_ID1 && Ищем Psl 1 BG

scan

select SostMar

if seek(Old_Obra+str(C_BG_ID1.Khp,5)+str(Rejs_Table.Mar,5))

luPsl=Psl

exit

endif

select C_BG_ID1

endscan

if luPsl>0

select C_BG_ID2 && Ищем Psl 2 BG

luTime=-2

scan

select SostMar

if seek(Old_Obra+str(C_BG_ID2.Khp,5)+str(Rejs_Table.Mar,5))

if luPsl<Psl && Прямой маршрут

select Rejs_Table

luTime=Tydap

luObra='1'

else

luTime=-1

luObra='2'

endif

exit

endif

select C_BG_ID2

endscan

if luTime=-2

luPsl=-1

endif

endif

if luPsl<0 && На маршруте не найден хотя бы один BG

luTime=-1

luObra='0'

endif

endif

select Rejs_Table

endif

replace BG_Time with luTime, ObraM with luObra

endscan

Old_Rejs=-1

scan

if BG_Time<0

if Pec#Old_Rejs

luRec=recno()

select Pejc

if Rejs_Table.Obra='п' && Прямой рейс

locate for Rec=Rejs_Table.Pec

if found()

luRejs=Reo

else

locate for Reo=Rejs_Table.Pec

if found()

luRejs=Rec

endif

endif

else

locate for Reo=Rejs_Table.Pec

if found()

luRejs=Rec

else

locate for Rec=Rejs_Table.Pec

if found()

luRejs=Reo

endif

endif

endif

select Rejs_Table

if !seek(str(luRejs))

go luRec

endif

luTime=BG_Time

luObra=Obram

go luRec

endif

replace BG_Time with luTime

if ObraM='0'

replace Obram with iif(luObra='2','1','2')

endif

endif

endscan

scan for BG_Time<0

replace BG_Time with Tydap

endscan

local Old_Time, luRec

Old_Rejs=-1

Old_Time=-1

Old_Obra='!'

set order to BG_Time

scan

if Old_Time=BG_Time and Old_Rejs#Pec and Old_Obra=ObraM

skip -1

luRec=recno()

skip

buf=BG_Time

replace BG_Time with buf+0.01

go luRec

loop

endif

Old_Time=BG_Time

Old_Rejs=Pec

Old_Obra=ObraM

endscan

select SostMar

use

select C_BG_ID1

use

select C_BG_ID2

use

select count(*) from Rejs_Table ;

group by Pec, Atp1, Tydap into cursor C_Temp

public Num_Bg, MassLen

Num_Bg=reccount('Bg_Temp')

MassLen=reccount('C_Temp')

select C_Temp

use

public Otch[MassLen, 20+Num_Bg*9]

store 0 to Otch

************************************************************

i=0

local Old_Atp, Old_Rejs, Old_Tydap, Sum_Pass, Old_Name

select Rejs_Table

set order to BG_Time

Old_Atp=-1

Old_Rejs=-1

Old_Tydap=-1

Old_Name='!'

Sum_Pass=0

scan

if Old_Atp#Atp1 or Old_Rejs#Pec or Old_Tydap#Tydap

if i>0

if Otch[i,11]>0

Otch[i,11]=Sum_Pass/Otch[i,11]

endif

Sum_Pass=0

if Otch[i,17]>0

Otch[i,17]=Otch[i,14]/Otch[i,17]

endif

endif

i=i+1

if Name#Old_Name

Otch[i,1]=Name

Old_Name=Name

endif

* Otch[i,3]=Km

Otch[i,19]=BG_Time

Otch[i,15]=Pec && № рейса

Otch[i,4]=Tydap && Время отправления

Otch[i,2]=Atp_Name

Otch[i,20]=ObraM

* Otch[i,20]=Atp1 && Код АТП

Old_Atp=Atp1

Old_Rejs=Pec

Old_Tydap=Tydap

endif

if Fop=0 && Формирующийся рейс

Otch[i,5]=Otch[i,5]+Numb && Рейсов - план

if Otprav<20

Otch[i,6]=Otch[i,6]+Numb && Рейсов - факт

endif

Otch[i,17]=Otch[i,17]+Direct*KolM

endif

select Bg_Temp

locate for Kpp=Rejs_Table.Bg

if !found() && Не АВ ДАВ

select Rejs_Table

if Otprav<20

Otch[i,7]=Otch[i,7]+KolP && Продано всего

Otch[i,8]=Otch[i,8]+P_KolP && Продано прямых

Otch[i,9]=Otch[i,9]+SumN && Выручка

Otch[i,12]=Otch[i,12]+KolP && Всего продано билетов

Otch[i,13]=Otch[i,13]+P_KolP && Всего прямых

Otch[i,14]=Otch[i,14]+SumN && Сумма выручки

if KolP>0

Otch[i,10]=Otch[i,10]+Km_Sum && Общий километраж

endif

Otch[i,11]=Otch[i,11]+KolM && Коэф. наполн

Sum_Pass=Sum_Pass+KolP+Tranz

endif

loop

endif

j=recno()

select Rejs_Table

Otch[i,3]=Km

if Otprav<20

Otch[i,12+j*9]=Otch[i,12+j*9]+KolP && Продано всего

Otch[i,12+j*9+1]=Otch[i,12+j*9+1]+P_KolP && Продано прямых

Otch[i,12+j*9+2]=Otch[i,12+j*9+2]+SumN && Выручка

if KolP>0

Otch[i,12+j*9+4]=Otch[i,12+j*9+4]+Km_Sum && Общий километраж

endif

Otch[i,12+j*9+5]=Otch[i,12+j*9+5]+KolM && Макс. кол-во мест

Otch[i,12+j*9+6]=Otch[i,12+j*9+6]+KolP+Tranz && Всего отправлено

Otch[i,12+j*9+7]=Otch[i,12+j*9+7]+P_KolP+AKolP && Отправлено прямых

Otch[i,12+j*9+8]=Otch[i,12+j*9+8]+Numb && Рейсов факт

Otch[i,12]=Otch[i,12]+KolP && Всего продано билетов

Otch[i,13]=Otch[i,13]+P_KolP && Всего прямых

Otch[i,14]=Otch[i,14]+SumN && Сумма выручки

endif

if Otch[i,12+j*9+8]>0

if Otch[i,12+j*9+6]/Otch[i,12+j*9+8]>Otch[i,18] && Макс. число пасс.

Otch[i,18]=Otch[i,12+j*9+6]/Otch[i,12+j*9+8]

endif

endif

endscan

if Otch[i,11]>0

Otch[i,11]=Sum_Pass/Otch[i,11]

endif

if Otch[i,17]>0

Otch[i,17]=Otch[i,14]/Otch[i,17]

endif

select Pejc

use

select Rejs_Table

use

for i=1 to MassLen

if Otch[i,7]>0

Otch[i,10]=Otch[i,10]/Otch[i,7] && Средн. километраж

endif

buf=0

for j=1 to Num_Bg

if Otch[i,12+j*9+8]>buf

buf=Otch[i,12+j*9+8]

endif

if Otch[i,12+j*9+5]>0

Otch[i,12+j*9+5]=Otch[i,12+j*9+6]/Otch[i,12+j*9+5] && Коэф. наполн

endif

if Otch[i,12+j*9]>0

Otch[i,12+j*9+4]=Otch[i,12+j*9+4]/Otch[i,12+j*9] && Средн. километраж

endif

endfor

if Otch[i,6]=0

Otch[i,6]=buf

endif

endfor

set default to &Def_Path

************************************************************

if Rep_Type=1 && Накопительная

Summary_Rep()

else

OneRejs_Rep()

endif

XLSheet.Range("A5").Select

XLApp.Calculation=xlCalculationAutomatic

release Otch, MassLen, Num_Bg, AllTyda, AllObra, AllRejs

wait clear

XLApp.Visible=.T.

release XlApp, XlSheet

***********************************************************

Реализация процедуры Rejs_Scan - «Следование рейса»

procedure Rejs_Scan

parameters DB_Month, DB_Year, Beg_Date, End_Date

local bd_base

bd_base='bd'+alltrim(str(DB_Month))+alltrim(str(DB_Year))

if empty(Open_Table(bd_base,'IBEDOM','BD_Table'))

return

endif

set talk on

select Bg, Atp1, Pec, Mar, Otprav, sum(KolM) as KolM, sum(KolP) as KolP, ;

sum(P_KolP) as P_KolP, sum(SumN-SumS-SumT) as SumN, Km, ;

sum(AKolP) as AKolp, sum(Tranz) as Tranz, Count(*) as Numb, Naim, ;

Obra, Tydap, Fop, sum(Km_Sum) as Km_Sum, ;

iif(Fop=0, Direct*20/21-1.5, 0000000.00) as Direct ;

from BD_Table ;

where DatV>=Beg_Date and ;

DatV<=End_Date and prib=0 and Otprav#30 ;

group by Bg, Atp1, Pec, Otprav, Obra, Tydap, Direct ;

into cursor Rejs_Temp1

select b.Bg, b.Atp1, a.Naim as Atp_Name, b.Pec, b.Mar, b.Otprav, KolM, KolP, ;

P_KolP, SumN, AKolp, Tranz, b.Km, b.Numb, b.Naim as Name, b.Obra, ;

b.Tydap, b.Fop, b.Km_Sum, iif(b.Direct>0,Direct, 0000000.00) as Direct;

from Rejs_Temp1 b, Mar_C m, Atp a ;

where m.Mar=b.Mar and b.Atp1=a.Kat;

into table Rejs_Temp

set talk off

select Bd_Table

use

select Rejs_Temp1

use

select Rejs_Table

append from Rejs_Temp

select Rejs_Temp

use

ENDPROC

**********************************************

Реализация процедуры Summary_Rep - «Суммарный километраж»

PROCEDURE Summary_Rep

LOCAL i, j, buf

buf=(pubDate[2]-pubDate[1])/30*4

i=1

do while i<=MassLen

if Otch[i,6]<buf

if empty(Otch[i+1,1])

Otch[i+1,1]=Otch[i,1]

endif

adel(Otch,i)

MassLen=MassLen-1

else

i=i+1

endif

enddo

CreatExc(@XLApp, 1, @XLSheet, 13)

XLApp.Calculation=xlCalculationManual

for i=2 to Num_Bg

XlSheet.Columns("S:AA").Copy

XlSheet.Cells(1,10+i*9).Select

XlSheet.Paste

XlSheet.Cells(1,10+i*9).Value = ''

endfor

XlSheet.Range("S1:AB1").MergeCells = .T.

select BG_Temp

i=1

scan

XlSheet.Cells(2,10+i*9).Value=Name

i=i+1

endscan

use

local Old_Time, Old_Rejs, Old_Obra, k, n, m, ci, ci1

local RejsTyda, RejsObra, AllRejs, AllTyda, AllObra

RejsTyda=''

RejsObra=''

AllTyda=''

AllObra=''

AllRejs=''

k=Masslen+8

XLSheet.Rows(5).Copy

XLSheet.Range("A6:A"+alltrim(str(k))).Select

XLSheet.Paste

j=5

ci=alltrim(str(j))

Old_Time=Otch[1,19]

Old_Rejs=Otch[1,15]

Old_Obra=Otch[1,20]

for i=1 to MassLen

if Otch[i,19]#Old_Time or Otch[i,15]#Old_Rejs

if ci#alltrim(str(j-1))

XLSheet.Rows(k).Copy

k=k+1

XLSheet.Rows(k).Select

XLSheet.Paste

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(3).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Font.Bold=.T.

if Old_Obra='1' && Прямой рейс

XlSheet.Cells(j,1).Value='Итого прямой рейс:'

else

XlSheet.Cells(j,1).Value='Итого обратн. рейс:'

endif

Itog(ci,alltrim(str(j-1)),j)

j=j+1

endif

if Old_Obra='1' && Прямой рейс

AllTyda=AllTyda+RejsTyda

else

AllObra=AllObra+RejsObra

endif

if Otch[i,19]#Old_Time && Итого рейс

XLSheet.Rows(k).Copy

k=k+1

XLSheet.Rows(k).Select

XLSheet.Paste

XlSheet.Cells(j,1).Value='Итого рейс:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(3).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Font.Bold=.T.

AllRejs=RejsTyda+RejsObra+'0'

AllItog(AllRejs, j, 0)

RejsTyda=''

RejsObra=''

j=j+1

endif

ci=alltrim(str(j))

Old_Rejs=Otch[i,15]

Old_Time=Otch[i,19]

Old_Obra=Otch[i,20]

endif

ci1=alltrim(str(j))

if Old_Obra='1' && Прямой рейс

RejsTyda=RejsTyda+'Otch['+alltrim(str(i))+',k]+'

else

RejsObra=RejsObra+'Otch['+alltrim(str(i))+',k]+'

endif

for n=1 to 14

XlSheet.Cells(j,n).Value=Otch[i,n]

endfor

for n=16 to 18

XlSheet.Cells(j,n).Value=Otch[i,n]

endfor

for n=1 to Num_Bg

if Otch[i,12+n*9]>0

Otch[i,12+n*9+3]=Otch[i,12+n*9+2]/Otch[i,12+n*9]

endif

for m=1 to 3

XlSheet.Cells(j,9+n*9+m).Value=Otch[i,11+n*9+m]

endfor

for m=5 to 9

XlSheet.Cells(j,9+n*9+m).Value=Otch[i,11+n*9+m]

endfor

endfor

j=j+1

endfor

***************************************************

if ci#alltrim(str(j-1))

XLSheet.Rows(k).Copy

k=k+1

XLSheet.Rows(k).Select

XLSheet.Paste

endif

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(3).Weight = xlMedium

if ci#alltrim(str(j-1))

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j+3,18+Num_Bg*9)).Font.Bold=.T.

if Old_Obra='1'

XlSheet.Cells(j,1).Value='Итого прямой рейс:'

else

XlSheet.Cells(j,1).Value='Итого обратн. рейс:'

endif

Itog(ci,alltrim(str(j-1)),j)

j=j+1

endif

if Old_Obra='1'

AllTyda=AllTyda+RejsTyda+'0'

AllObra=AllObra+'0'

else

AllObra=AllObra+RejsObra+'0'

AllTyda=AllTyda+'0'

endif

**********************************************

XlSheet.Cells(j,1).Value='Итого рейс:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(3).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Font.Bold=.T.

AllRejs=RejsTyda+RejsObra+'0'

AllItog(AllRejs, j, 0)

j=j+1

XlSheet.Cells(j,1).Value='Всего в прямом:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(3).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)).Font.Bold=.T.

AllItog(AllTyda, j, 0)

j=j+1

XlSheet.Cells(j,1).Value='Всего в обратном:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)).Font.Bold=.T.

AllItog(AllObra, j, 0)

j=j+1

XlSheet.Cells(j,1).Value='Всего:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,18+Num_Bg*9)).Font.Bold=.T.

AllRejs='XlSheet.Cells('+alltrim(str(j-2))+',k-buf).Value+'+ ;

'XlSheet.Cells('+alltrim(str(j-1))+',k-buf).Value'

AllItog(AllRejs, j, 2)

XlSheet.Range(XlSheet.Cells(5,1), XlSheet.Cells(5,18+Num_Bg*9)) ;

.Borders(3).Weight = xlMedium

ENDPROC

*****************************************************************

Реализация процедуры OneRejs_Rep - «Километраж за единый рейс»

PROCEDURE OneRejs_Rep

local i, j, n, m, buf

buf=(pubDate[2]-pubDate[1])/30*4

i=1

do while i<=MassLen

if Otch[i,6]>buf

for j=7 to 10

Otch[i,j]=Otch[i,j]/Otch[i,6]

endfor

for j=12 to 14

Otch[i,j]=Otch[i,j]/Otch[i,6]

endfor

for n=1 to Num_Bg

for m=1 to 3

Otch[i, 11+n*9+m]=Otch[i, 11+n*9+m]/Otch[i,6]

endfor

for m=7 to 8

Otch[i, 11+n*9+m]=Otch[i, 11+n*9+m]/Otch[i,6]

endfor

endfor

i=i+1

else

if empty(Otch[i+1,1])

Otch[i+1,1]=Otch[i,1]

endif

adel(Otch,i)

MassLen=MassLen-1

endif

enddo

CreatExc(@XLApp, 1, @XLSheet, 14)

XLApp.Calculation=xlCalculationManual

FOR i=2 TO Num_Bg

XlSheet.Columns("Q:X").Copy

XlSheet.Cells(1,9+i*8).Select

XlSheet.Paste

XlSheet.Cells(1,9+i*8).Value = ''

ENDFOR

XlSheet.Range("Q1:Y1").MergeCells = .T.

select BG_Temp

i=1

scan

XlSheet.Cells(2,9+i*8).Value=Name

i=i+1

endscan

use

local Old_Time, Old_Rejs, Old_Obra, k, ci, ci1

local RejsTyda, RejsObra, AllRejs, AllTyda, AllObra

RejsTyda=''

RejsObra=''

AllTyda=''

AllObra=''

AllRejs=''

k=Masslen+8

XLSheet.Rows(5).Copy

XLSheet.Range("A6:A"+alltrim(str(k))).Select

XLSheet.Paste

j=5

ci=alltrim(str(j))

Old_Time=Otch[1,19]

Old_Rejs=Otch[1,15]

Old_Obra=Otch[1,20]

for i=1 to MassLen

if Otch[i,19]#Old_Time or Otch[i,15]#Old_Rejs

if ci#alltrim(str(j-1))

XLSheet.Rows(k).Copy

k=k+1

XLSheet.Rows(k).Select

XLSheet.Paste

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(3).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Font.Bold=.T.

if Old_Obra='1' && Прямой рейс

RejsTyda='XlSheet.Cells('+alltrim(str(j))+',k).Value+'

XlSheet.Cells(j,1).Value='Итого прямой рейс:'

else

RejsObra='XlSheet.Cells('+alltrim(str(j))+',k).Value+'

XlSheet.Cells(j,1).Value='Итого обратн. рейс:'

endif

Itog1(ci,alltrim(str(j-1)),j)

j=j+1

else

if Old_Obra='1' && Прямой рейс

RejsTyda='XlSheet.Cells('+alltrim(str(j-1))+',k).Value+'

else

RejsObra='XlSheet.Cells('+alltrim(str(j-1))+',k).Value+'

endif

endif

if Old_Obra='1' && Прямой рейс

AllTyda=AllTyda+RejsTyda

else

AllObra=AllObra+RejsObra

endif

if Otch[i,19]#Old_Time && Итого рейс

XLSheet.Rows(k).Copy

k=k+1

XLSheet.Rows(k).Select

XLSheet.Paste

XlSheet.Cells(j,1).Value='Итого рейс:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(3).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Font.Bold=.T.

AllRejs=RejsTyda+RejsObra+'0'

AllItog1(AllRejs, j)

RejsTyda=''

RejsObra=''

j=j+1

endif

ci=alltrim(str(j))

Old_Rejs=Otch[i,15]

Old_Time=Otch[i,19]

Old_Obra=Otch[i,20]

endif

ci1=alltrim(str(j))

for n=1 to 4

XlSheet.Cells(j,n).Value=Otch[i,n]

endfor

for n=7 to 14

XlSheet.Cells(j,n-2).Value=Otch[i,n]

endfor

for n=16 to 18

XlSheet.Cells(j,n-2).Value=Otch[i,n]

endfor

for n=1 to Num_Bg

if Otch[i,12+n*9]>0

Otch[i,12+n*9+3]=Otch[i,12+n*9+2]/Otch[i,12+n*9]

endif

for m=1 to 3

XlSheet.Cells(j,8+n*8+m).Value=Otch[i,11+n*9+m]

endfor

for m=5 to 8

XlSheet.Cells(j,8+n*8+m).Value=Otch[i,11+n*9+m]

endfor

endfor

j=j+1

endfor

***************************************************

if ci#alltrim(str(j-1))

XLSheet.Rows(k).Copy

k=k+1

XLSheet.Rows(k).Select

XLSheet.Paste

endif

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(3).Weight = xlMedium

if ci#alltrim(str(j-1))

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j+3,16+Num_Bg*8)).Font.Bold=.T.

if Old_Obra='1'

XlSheet.Cells(j,1).Value='Итого прямой рейс:'

RejsTyda='XlSheet.Cells('+alltrim(str(j))+',k).Value+'

else

XlSheet.Cells(j,1).Value='Итого обратн. рейс:'

RejsObra='XlSheet.Cells('+alltrim(str(j))+',k).Value+'

endif

Itog1(ci,alltrim(str(j-1)),j)

j=j+1

else

if Old_Obra='1' && Прямой рейс

RejsTyda='XlSheet.Cells('+alltrim(str(j-1))+',k).Value+'

else

RejsObra='XlSheet.Cells('+alltrim(str(j-1))+',k).Value+'

endif

endif

if Old_Obra='1'

AllTyda=AllTyda+RejsTyda+'0'

AllObra=AllObra+'0'

else

AllObra=AllObra+RejsObra+'0'

AllTyda=AllTyda+'0'

endif

**********************************************

XlSheet.Cells(j,1).Value='Итого рейс:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(3).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Font.Bold=.T.

AllRejs=RejsTyda+RejsObra+'0'

AllItog1(AllRejs, j)

j=j+1

XlSheet.Cells(j,1).Value='Всего в прямом:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(3).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)).Font.Bold=.T.

AllItog1(AllTyda, j)

j=j+1

XlSheet.Cells(j,1).Value='Всего в обратном:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)).Font.Bold=.T.

AllItog1(AllObra, j)

j=j+1

XlSheet.Cells(j,1).Value='Всего:'

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)) ;

.Borders(4).Weight = xlMedium

XlSheet.Range(XlSheet.Cells(j,1), XlSheet.Cells(j,16+Num_Bg*8)).Font.Bold=.T.

AllRejs='XlSheet.Cells('+alltrim(str(j-2))+',k).Value+'+ ;

'XlSheet.Cells('+alltrim(str(j-1))+',k).Value'

AllItog1(AllRejs, j)

XlSheet.Range(XlSheet.Cells(5,1), XlSheet.Cells(5,16+Num_Bg*8)) ;

.Borders(3).Weight = xlMedium

ENDPROC

*********************************************************

Реализация функции load_factor - «Загруженность работы автовокзала»

local buf, pubDate[2]

buf='01.'+str(ThisForm.From_Month)+'.'+str(ThisForm.From_Year)

if empty(ctod(buf))

MessageBox('Неверная дата начала периода',16,'Выбор интервала времени')

return

else

pubDate[1]=ctod(buf)

endif

if ThisForm.To_Month=12

buf=31

else

buf=day(ctod('01.'+str(ThisForm.To_Month+1)+'.'+str(ThisForm.To_Year))-1)

endif

buf=str(buf)+'.'+str(ThisForm.To_Month)+'.'+str(ThisForm.To_Year)

if empty(ctod(buf))

MessageBox('Неверная дата конца периода',16,'Выбор интервала времени')

return

else

pubDate[2]=ctod(buf)

endif

if pubDate[1]>pubDate[2]

MessageBox('Дата начала периода больше даты конца периода',16,'Выбор интервала времени')

return

endif

if pubDate[2]>date()

MessageBox('Дата конца периода больше текущей даты',16,'Выбор интервала времени')

return

endif

if Year(pubDate[1])<Year(pubDate[2])-1

MessageBox('Слишком большой период',16,'Выбор интервала времени')

return

endif

PRIVATE XLApp, pubMonth, pubYear

XLApp=0

pubMonth=ThisForm.MonthArray[Month(pubDate[1])]

pubYear=alltrim(str(Year(pubDate[1])))

public _BG[1], MassLen, NDS

if empty(Open_Table('Filial'))

return

endif

set deleted on

Set_BG()

MassLen = ALEN(_BG)

if MassLen<=1

release _BG, _Atp, MassLen, pubDate

return

endif

if ThisForm.From_Month=ThisForm.To_Month and ThisForm.From_Year=ThisForm.To_Year && За один месяц

PRIVATE XLSheets

XlSheets=0

if !CreatExc(@XLApp, 1, @XLSheets, 28)

return .f.

endif

XLApp.Calculation=xlCalculationManual

Load_Factor(@XlSheets, Month(pubDate[1]), Year(pubDate[1]), pubMonth)

XLApp.Calculation=xlCalculationAutomatic

XLApp.Visible = .T.

release XlSheets, _BG, MassLen, pubDate

ThisForm.Release

return

endif

local Month_Num && Несколько месяцев

if Year(pubDate[1])=Year(pubDate[2])

Month_Num=Month(pubDate[2])-Month(pubDate[1])+1

else

Month_Num=13-Month(pubDate[1])+Month(pubDate[2])

endif

Month_Num=Month_Num+1 && Итоговый лист

****************************************************

public Month_Array[Month_Num], XLSheets[Month_Num]

store 0 to XlSheets

local j

j=1

if Year(pubDate[1])=Year(pubDate[2])

for i=Month(pubDate[1]) to Month(pubDate[2])

Month_Array[j]=ThisForm.MonthArray[i]+'_'+alltrim(str(Year(pubdate[1])))

j=j+1

endfor

else

for i=Month(pubDate[1]) to 12

Month_Array[j]=ThisForm.MonthArray[i]+'_'+alltrim(str(Year(pubdate[1])))

j=j+1

endfor

for i=1 to Month(pubDate[2])

Month_Array[j]=ThisForm.MonthArray[i]+'_'+alltrim(str(Year(pubdate[2])))

j=j+1

endfor

endif

Month_Array[j]='Итого'

if !CreatExc(@XLApp, Month_Num, @XLSheets, 28, @Month_Array)

return .f.

endif

XLApp.Calculation=xlCalculationManual

j=1

if Year(pubDate[1])=Year(pubDate[2])

for i=Month(pubDate[1]) to Month(pubDate[2])

pubMonth=ThisForm.MonthArray[i]

pubYear=alltrim(str(Year(pubDate[1])))

Load_Factor(XlSheets[j], i, Year(pubDate[1]), ThisForm.MonthArray[i])

j=j+1

endfor

else

for i=Month(pubDate[1]) to 12

pubMonth=ThisForm.MonthArray[i]

pubYear=alltrim(str(Year(pubDate[1])))

Load_Factor(XlSheets[j], i, Year(pubDate[1]), ThisForm.MonthArray[i])

j=j+1

endfor

for i=1 to Month(pubDate[2])

pubMonth=ThisForm.MonthArray[i]

pubYear=alltrim(str(Year(pubDate[2])))

Dohod(XlSheets[j], i, Year(pubDate[2]), ThisForm.MonthArray[i])

j=j+1

endfor

endif

Load_Factor_All(XlSheets[Month_Num], @Month_Array, Month_Num, pubDate[1], pubDate[2])

select Filial

use

XLApp.Calculation=xlCalculationAutomatic

XLApp.Visible = .T.

release XlSheets, _BG, MassLen, pubDate

ThisForm.Release

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.