Разработка программного продукта "Станция взвешивания чугуна" для ЧерМК ПАО "Северсталь"

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

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

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

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

Select prmidn, data, to_char (time, 'hh24:mi') as time, nomer, ves, doliv, deleted, rowid as rd

from Protocol where direct=1 and deleted=0 and id_ue = 1;

 //id_ue - идентификатор учетного элемента, prmidn - идентификатор записей, direct - порожняк или груженый

SQL Запрос Все ковши или все миксеровозы

Select data, data_beg as db, to_char (data_beg, 'hh24:mi') as data_beg, Nomer, id_ue, w_brutto, w_brutto-w_tara1 as «NETTO»,

w_tara1, w_tara2, domna, proba, domna1, proba1, domna2, proba2, domna3, proba3, aidn, a.id_protocol_d1, a.id_protocol_d2, a.prmidn, DELETED, a.rowid as rd

from Send a WHERE deleted=0;

Приложение Ё

(справочное)

Процедуры Oracle

Процедура для Отвесных по ковшам и миксерам

PROCEDURE P_NoReturns (dd date, cod smallint, ai_ue smallint, text in out varchar2, mref in out ref_cur)

is

cur ref_cur;

n smallint;

i int;

type NList is table of smallint;

mylist NList;

Begin

text:= ' ';

if (cod=0) then

select nomer bulk collect into mylist from V_Full where data=dd and id_ue = ai_ue and w_tara2 is null;

if (mylist.count>0) then

for i in mylist.FIRST. mylist.LAST LOOP

text:=text || to_char (mylist(i)) || ' ';

End Loop;

end if;

open mref For Select text as text from dual;

else

Open mref For

Select Nomer as «N°ковша», data_beg as «Время», w_brutto as «Вес», (select name from nsidomna.name_chugadress where idn=aidn)

as «Адресат»

from Send where data=dd and id_ue = ai_ue and w_tara2 is null and deleted = 0;

End if;

End P_NoReturns;

Процедура для формы Предистория провесок

procedure P_EmptyTmp (d_beg date, d_end date, ai_ue int, mref in out ref_cur)

is

cur ref_cur;

type NList is table of smallint;

mylist NList;

i int;

line varchar2 (400);

cnt int;

vcnt int;

t2 date;

t1 date;

v int;

Begin

commit;

Insert into Tmp_Empty (nomer, CNTEmpty)

Select distinct nomer, count(*) from V_Empty where data between d_beg and d_end and id_ue = ai_ue group by nomer;

if (ai_ue = API.KOVSH) then

Update Tmp_Empty set CNTFull_80= (Select count(proba) from

V_Full where data between d_beg and d_end and nomer=Tmp_Empty.nomer and id_ue = ai_ue and w_tara1<=80 and deleted = 0);

end if;

/*** время нахождения ***/

Update Tmp_Empty set (DtAvg, dtMin, dtMax) = (Select avg (decode(data_end, null, sysdate, data_end) - data_beg), min (decode(data_end, null, sysdate, data_end) - data_beg), max (decode(data_end, null, sysdate, data_end) - data_beg) from

Send where data between d_beg and d_end and nomer=TMP_Empty.nomer and id_ue = ai_ue and deleted=0 and aidn!= 5);

Update Tmp_Empty set CNTFull= (Select count(proba) from

V_Full where data between d_beg and d_end and nomer=TMP_Empty.nomer and id_ue = ai_ue and deleted=0);

Update Tmp_Empty set Ves= (Select nvl (sum(w_brutto-w_tara1), 0) from Send where data between d_beg and d_end and nomer=TMP_Empty.nomer and id_ue = ai_ue and deleted=0);

Update Tmp_Empty set VesMax= (Select max(ves) from V_Empty where data between d_beg and d_end and nomer=TMP_Empty.nomer and id_ue = ai_ue and deleted=0);

Update Tmp_Empty set VesMin= (Select min(ves) from V_Empty where data between d_beg and d_end and nomer=TMP_Empty.nomer and id_ue = ai_ue and ves>0 and deleted=0);

- commit;

select nomer bulk collect into mylist from TMP_Empty;

if (mylist.count>0) then

for i in mylist.FIRST. mylist.LAST LOOP

cnt:=0;

vcnt:=0;

line:=' ';

Select max(time) into t1 from Protocol where data=d_end and nomer=to_number (mylist(i)) and id_ue = ai_ue and direct = 1 and deleted = 0;

Open cur for

Select time, ves from Protocol where data between d_beg and d_end and nomer=to_number (mylist(i)) and id_ue = ai_ue and direct =1 and deleted = 0

order by time desc;

Loop

Fetch cur into t2, v;

exit when cur % notfound;

if (t2=t1 or (t1-t2)>60/1440) then

t1:=t2;

cnt:=cnt+1;

vcnt:=vcnt+1;

if (vcnt<21) then

line:= to_char(v) || ' ' || line;

end if;

end if;

Update Tmp_Empty set SVes = line where nomer=to_number (mylist(i));

end Loop;

end Loop;

End if;

if (ai_ue = API.KOVSH) then

Open mref For

Select 1 as «npp», nomer as «N°», ves as «нетто», CNTfull_80, cntFull as «наливов», decode (cntfull, 0, null, round (to_number (ves/cntfull), 0)) as «<вес>», CNTEmpty as «порожних», vesmax as «max», vesmin as «min», dtavg, dtmax, dtmin, RTrim(SVes) as «предистория»

from TMP_Empty where ves is not null order by nomer;

else

Open mref For

Select 1 as «npp», nomer as «N°», ves as «нетто», cntFull as «наливов», decode (cntfull, 0, null, round (to_number (ves/cntfull), 0)) as «<вес>», CNTEmpty as «порожних», vesmax as «max», vesmin as «min», dtavg, dtmax, dtmin, RTrim(SVes) as «предистория»

from TMP_Empty where ves is not null order by nomer;

end if;

End P_EmptyTmp;

Приложение Ж

(справочное)

Триггеры Oracle

Триггер таблицы Protocol

declare

v0 int;

Id number;

begin

IF (:NEW.PRMIDN = 0) OR (:NEW.PRMIDN IS NULL) THEN

SELECT PROTOCOL_SEQ.NEXTVAL INTO:NEW.PRMIDN FROM DUAL;

end if;

:new.data:= trunc (:new.time, 'dd');

if (:new.direct=API.K_FULL) then BEGIN

Id:= API.fun_Get_Empty (:new.data,:new.time,:new.nomer,:new.id_ue);

Insert into Send (Id_Protocol_D2, Id_Protocol_D1, data, data_beg, nomer, w_brutto, w_tara1, w_delta, Id_Ue, Roadno)

Select:new.prmidn, prmidn,:new.data,:new.time,:new.nomer,:new.ves, ves, doliv,:new.id_ue,:new.roadno

from Protocol where prmidn = Id;

EXCEPTION

when NO_DATA_FOUND then

raise_application_error (-20777,'Гружёный ковш зарегистрировать не удаётся по причине отсутствия порожней тары.'|| CHR(13)||CHR(10) || CHR(13)||CHR(10) ||'Возможные действия:'|| CHR(13)||CHR(10) ||'1. Сформировать порожняк по этому номеру.'|| CHR(13)||CHR(10) ||'2. Сформировать повторно провеску гружёного.');

ROLLBACK;

when DUP_VAL_ON_INDEX then

raise_application_error (-20777,'Гружёный ковш зарегистрировать не удаётся по причине повторного использования порожней тары.'|| CHR(13)||CHR(10) || CHR(13)||CHR(10) ||'Возможные действия:'|| CHR(13)||CHR(10) ||'1. Сформировать порожняк по этому номеру.'|| CHR(13)||CHR(10) ||'2. Сформировать повторно провеску гружёного.');

ROLLBACK;

when OTHERS then

raise_application_error (-20777,'Гружёный ковш зарегистрировать не удаётся по неизвестной причине.');

ROLLBACK;

END;

if (SQL % rowcount=0) then

raise_application_error (-20777,'Гружёный ковш зарегистрировать не удаётся по причине отсутствия порожней тары.' || CHR(13)||CHR(10) || CHR(13)||CHR(10) || 'Возможные действия:' || CHR(13)||CHR(10) || '1. Сформировать порожняк по этому номеру.' ||CHR(13)||CHR(10) || '2. Сформировать повторно провеску гружёного.');

ROLLBACK;

end if;

if (:new.id_ue = API.KOVSH) then

begin

Update Send set data_end =:new.time where data>=:new.data-1 and data_beg <:new.time and id_ue = API.KOVSH and nomer =:new.nomer and deleted=0 and ID_PROTOCOL_D1 = Id and aidn = 3 and data_end is null;

exception

when NO_DATA_FOUND then

null;

end;

end if;

else BEGIN

Id:= API.fun_Get_Empty4Doliv (:new.data,:new.time,:new.nomer,:new.id_ue);

Select nvl (ves, 0) into v0 from Protocol where prmidn = Id;

EXCEPTION

when NO_DATA_FOUND then

v0:=0;

END;

if (v0>0) then

:new.doliv:=:new.ves-v0;

end if;

BEGIN

Id:= API.fun_Get_Full (:new.data,:new.time,:new.nomer,:new.id_ue);

Update Send set w_tara2=:new.ves, data_end=:new.time where prmidn = Id;

EXCEPTION

when OTHERS then

null;

END;

End if;

:new.korr_data:= sysdate;

:new.korr_user:= SYS_CONTEXT ('USERENV', 'OS_USER');

:new.korr_host:= SYS_CONTEXT ('USERENV', 'HOST');

end;

Триггер таблицы Send

begin

IF(Inserting) then

IF (:NEW.PRMIDN = 0) OR (:NEW.PRMIDN IS NULL) THEN

SELECT SEND_SEQ.NEXTVAL INTO:NEW.PRMIDN FROM DUAL;

end if;

if (:new.id_ue = API.MIXER) then

:new.w_netto:=:new.w_brutto - :new.w_tara1;

:new.aidn:= 2;

end if;

if (:new.id_ue = API.KOVSH) then

if (:new.w_brutto =:new.w_tara1 and:new.w_delta>10) then

:new.w_tara1:=:new.w_tara1 - :new.w_delta;

:new.priz_return:= 1;

end if;

end if;

end if;

:new.korr_data:= sysdate;

:new.korr_user:= SYS_CONTEXT ('USERENV', 'OS_USER');

end;

Приложение З

(справочное)

Листинг программы

Форма «Ручная провеска» запись данных

void __fastcall TForm2: SpeedButton3Click (TObject *Sender)

{

AnsiString line;

TLocateOptions LO;

unsigned short button, error;

bool priz = true;

TApplyActions aa;

aa = aa<<aaInsert<<aaUpdate;

/*** Код возможных ошибок

0 - ошибок нет

90 - пропущен номер УЭ

92 - дублирование номера УЭ

94 - несоответсвие заявленного и фактического типа провески

95 - несоответсвие заявленного и фактического типа провески

96 - несоответствие заявленного и фактического типа УЭ

***/

/*** это из-за тригера - автономные транзакции ***/

error = Verify();

if (error > 0)

{

switch(error)

{

case 90: line = «Пропущен номер! Запись невозможна!»;

line += «\n\nВозможные действия:\nВнимательно ввести номер.»;

priz = false;

break;

case 92: line = «Дублирование номера! Запись невозможна!\nНомер N° «+(AnsiString) DUBL;

line += «\n\nВозможные действия:\nВнимательно ввести номер или удалить лишнюю запись.»;

priz = false;

break;

case 94:

line = «Среди порожняка имеется гружёный. Номер N° «+(AnsiString) DUBL;

if (TYPE_UE==Kovsh)

line += «\nВозможно это связано с переадресацией выпуска. В этом случае необходимо его зарегистрировать как гружёный и отредактировать тару2 у предыдущего выпуска (см. справку о работе с программой).\n\n\

Либо с невнимательным выбором типа УЭ.»;

else

line += «\nВозможно это связано с невнимательным выбором типа провески.»;

line += «\n\nВозможные действия:\nФиксировать как гружёный?»;

break;

case 95: line = «Среди гружёных имеется порожняк. Номер N° «+(AnsiString) DUBL;

line += «\n\nВозможные действия:\nФиксировать УЭ как порожняк?»;

break;

case 96: line = «Заявлена провеска одного типа состава. По факту веса получаем другой тип состава. Запись невозможна!»;

priz = false;

break;

}

if(! priz) /*** не регистрируем ***/

{

MessageBox (this->Handle, MsgPlus(line).c_str(), AppMan->TASK.c_str(), MB_ICONSTOP);

SpeedButton1->Down = true;

}

else

{

button=MessageBox (this->Handle, line.c_str(), AppMan->TASK.c_str(), MB_ICONASTERISK | MB_YESNO);

if (button==ID_YES)

{

if (Query1->Locate («nomer», DUBL, LO))

{

Query1->Edit();

Query1->FieldValues [«direct»]=NDIR;

Query1->FieldValues [«direct2»]=DIRECT;

SpeedButton3Click(Sender);

}

}

else

{

if (Query1->Locate («nomer», DUBL, LO))

{

Query1->Edit();

Query1->FieldValues [«direct2»]=DIRECT;

SpeedButton3Click(Sender);

}

}

}

}

else /*** Ошибок нет ***/

{

priz = false;

error = 0;

Query1->MoveBy(0);

/*** сообщение диспетчеру порожняк ***/

if (Query1->FieldValues [«direct»]==Mix_Empty && (Query1->FieldValues [«ves»] > VES_MAX || Query1->FieldValues [«ves»] < VES_MIN))

{

priz = true;

if (Query1->FieldValues [«ves»] < VES_MIN)

error =100;

else

{

if (Query1->FieldValues [«ves»] > VES_MAX)

error =101;

}

}

OK = true;

try

{

if(! AUTO)

{

line = «Вы уверены, что собираетесь зарегистрировать УЭ Номер N° «+(AnsiString) Query1->FieldValues [«nomer»] + \

«на время:» + (AnsiString) Query1->FieldValues [«time»];

button = MessageBox (this->Handle, line.c_str(), AppMan->TASK.c_str(), MB_ICONASTERISK | MB_YESNO);

if (button==ID_NO)

{

throw new Exception (MsgPlus(«Отказ в регистрации.»));

}

}

Query1->ApplyUpdates(aa);

Form0->Session1->Commit();

Query1->CommitUpdates();

((TSpeedButton*) Sender)->Down=false;

DBGrid1->Color = clWindow;

DataSource1->AutoEdit = false;

OK = true;

line = «Информация успешно зарегистрирована!»;

}

catch (Exception* e)

{

line = e->Message;

line += «\n\nИнформация НЕ зарегистрирована!»;

SEVERITY = 1;

priz = false;

 // throw new Exception (e->Message);

}

if(priz)

{

if (error==101)

line += «\n\nОднако имеется недопустимо ВЫСОКИЙ ВЕС тары.»;

if (error==100)

line += «\n\nОднако имеется недопустимо НИЗКИЙ ВЕС тары.»;

line += «\nПросьба поставить в известность Диспетчера ДЦ!»;

}

MessageBox (this->Handle, line.c_str(), AppMan->TASK.c_str(), MB_ICONASTERISK);

SpeedButton1Click(Sender);

}

}

Открытие форм при запуске

void __fastcall TMIXForm:NStartClick (TObject *Sender)

{

AnsiString line;

short k;

/*******/

BeforeQuery();

Form101->Show();

Form101->Update();

if(Procedure)

sprintf (buf, «Begin %s; end;», SQLFILE);

else

{

switch (this->Descret)

{

case 0: /*** smena ***/

sprintf (buf, «Select % s from % s», SQLTEXT, SQLFILE);

break;

case 1: /*** sutki ***/

case 2: /*** month ***/

case 3:

case 4: sprintf (buf, «Select % s from % s where data>=:d_beg and data<=:d_end», SQLTEXT, SQLFILE);

break;

}

}

try

{

 // if (DataSource1->DataSet==Query1)

{

((TOracleDataSet*) DataSource1->DataSet)->SQL->Clear();

((TOracleDataSet*) DataSource1->DataSet)->SQL->Add(buf);

if (Descret>0 && DomnaInSql &&! Procedure)

((TOracleDataSet*) DataSource1->DataSet)->SQL->Add (» and domna=:dp»);

((TOracleDataSet*) DataSource1->DataSet)->SQL->Add(SQLKEY);

k = SetParam((TOracleDataSet*) (DataSource1->DataSet));

if (FindParam(«dp»)!=NULL)

((TOracleDataSet*) (DataSource1->DataSet))->SetVariable («dp», DP);

if (FindParam(«sm»)!=NULL)

((TOracleDataSet*) (DataSource1->DataSet))->SetVariable («sm», SMENA);

if (FindParam(«d_end»)!=NULL)

((TOracleDataSet*) (DataSource1->DataSet))->SetVariable («d_end», data_end);

if (FindParam(«d_endd»)!=NULL)

((TOracleDataSet*) (DataSource1->DataSet))->SetVariable («d_endd», data_end);

if (FindParam(«d_begg»)!=NULL)

((TOracleDataSet*) (DataSource1->DataSet))->SetVariable («d_begg», data_beg);

if (FindParam(«cod»)!=NULL)

((TOracleDataSet*) (DataSource1->DataSet))->SetVariable («cod», APPCOD);

if (FindParam(«d_beg»)!=NULL)

{

if (APPCOD ==1 || APPCOD==2)

((TOracleDataSet*) (DataSource1->DataSet))->SetVariable («d_beg», data_beg-1);

else

((TOracleDataSet*) (DataSource1->DataSet))->SetVariable («d_beg», data_beg);

}

if (FindParam(«d_cur»)!=NULL)

((TOracleDataSet*) (DataSource1->DataSet))->SetVariable («d_cur», superdata);

((TOracleDataSet*) DataSource1->DataSet)->Open();

/************/

}

AfterQuery();

StatusBar1->Repaint();

Form101->Hide();

}

catch (Exception &exception)

{

if (! this->First)

this->First = true;

Form101->Hide();

 // line = «Ошибка в Запросной Части. Поставте в Известность Программистов! \n\n»+exception. Message;

 // MessageBox (this->Handle, line.c_str(), USER, MB_ICONSTOP | MB_APPLMODAL);

StatusBar1->Panels->Items [STEX_IDN]->Text = «Ошибка Интерфейса…»;

StatusBar1->Repaint();

SEVERITY = 0;

throw Exception (exception. Message);

}

Label1->Left = PanelLR->Width+(Panel2->Width-PanelLR->Width-Label1->Width)/2-20;

}

Обновление данных на форме после редактирования

void __fastcall TForm5:N91Click (TObject *Sender)

{

unsigned short i, button;

AnsiString line;

TApplyActions aa;

aa = aa<<aaUpdate;

 // TMSForm:N91Click(Sender);

Query1->MoveBy(0);

if (Query1->UpdatesPending())

{

SetCursorPos (400,300);

button = MessageBox (this->Handle, «Данные по Порожняку, возможно, были Изменены, Cохранить Изменения?»,

AppMan->TASK.c_str(), MB_ICONASTERISK | MB_YESNO | MB_APPLMODAL);

if (button==IDYES)

{

try

{

Query1->ApplyUpdates(aa);

Form0->Session1->Commit();

Query1->CommitUpdates();

}

catch(…)

{

Form0->Session1->Commit();

}

}

}

Query2->MoveBy(0);

if (Query2->UpdatesPending())

{

Query2->MoveBy(0);

SetCursorPos (400,300);

button = MessageBox (this->Handle, «Данные по Гружёным, возможно, были Изменены, Cохранить Изменения?»,

AppMan->TASK.c_str(), MB_ICONASTERISK | MB_YESNO | MB_APPLMODAL);

if (button==IDYES)

{

try

{

Query2->ApplyUpdates(aa);

Form0->Session1->Commit();

Query2->CommitUpdates();

}

catch (Exception* e)

{

Form0->Session1->Commit();

line = e->Message; // Возможен сбой из-за отсутствия веса <нетто>.\nПопробуйте удалить миксеровоз с отсутствующим весом <нетто> и по новой ввести его на ручной провеске на это время.»;

SEVERITY = 1;

throw Exception(line);

 // MessageBox (this->Handle, USER, MB_ICONASTERISK | MB_APPLMODAL);

}

}

}

dxDBGrid1->OptionsView=dxDBGrid1->OptionsView<<edgoRowSelect;

dxDBGrid1->OptionsBehavior=dxDBGrid1->OptionsBehavior>>edgoEditing;

dxDBGrid1->Color = clWindow;

dxDBGrid2->OptionsView=dxDBGrid2->OptionsView<<edgoRowSelect;

dxDBGrid2->OptionsBehavior=dxDBGrid2->OptionsBehavior>>edgoEditing;

dxDBGrid2->Color = clWindow;

for (i=0; i<MainMenu1->Items->Count; i++)

{

if (MainMenu1->Items->Items[i]->Tag!=-1)

MainMenu1->Items->Items[i]->Visible = true;

}

Korrecture = false;

N91->Visible = false;

N92->Visible = false;

N90->Enabled = true;

READ = true;

}

Печать стандартного отчета

void __fastcall TForm4:N9Click (TObject *Sender)

{

AnsiString line, pline;

unsigned short button;

if (Panel5->Visible)

button=MessageBox (this->Handle, «Ввиду невозврата чугуновозов информация по отвесной некорректна!\n\nПродолжить ПЕЧАТЬ?», AppMan->TASK.c_str(), MB_ICONASTERISK | MB_YESNO);

else

button=ID_YES;

if (button==ID_YES)

{

/*** включим необходимый SQLKEY ***/

NStartClick(N9);

switch(Descret)

{

case 2:

line=«ОТВЕСНАЯ на ЧУГУН с начала месяца до «+DateToStr(superdata);

break;

case 3:

line=«ОТВЕСНАЯ на ЧУГУН с начала года до «+DateToStr(superdata);

break;

case 4:

line=«ОТВЕСНАЯ на ЧУГУН за интервал с «+DateToStr (data_beg)+» по» +DateToStr (data_end);

break;

default: line=«ОТВЕСНАЯ на ЧУГУН. «+DateToStr(superdata);

}

pline = «Оператор станции взвешивания………………………………….»;

pline += «/ «+AppMan->OPERATOR+» /»;

if (N24->Checked)

{

Form41 = new TForm41 (this);

Form41->QRLabel100->Caption= line;

Form41->QRShape100->Width= Form41->QRLabel100->Width;

Form41->QRLabel200->Caption= pline;

if (! Panel5->Visible)

Form41->QRLabelError->Caption = «»;

Form41->QuickRep1->Preview();

delete Form41;

Form41=NULL;

}

if (N26->Checked)

{

Form42 = new TForm42 (this);

Form42->QRLabel100->Caption= line;

Form42->QRShape100->Width= Form42->QRLabel100->Width;

Form42->QRLabel200->Caption= pline;

Form42->QuickRep1->Preview();

delete Form42;

Form42=NULL;

}

}

}

Печать отчета в Excel

void __fastcall TForm4: ExportExcel1Click (TObject *Sender)

{

Variant V;

Variant books;

Variant book;

Variant sheet;

Variant MC;

Variant mount;

Variant mount2;

int i;

unsigned short j;

AnsiString FNames[]={«nomer», «data», «Гружёный», «Порожний», «domna», «proba», «name», «w_brutto», «w_Netto», «w_tara1», «w_tara2», «w_get», «w_send», «w_get»};

AnsiString line, name;

const int FNames_size = 14;

int BoundsC[2]={0,14}; // 6x2 +2

try

{

GetCurrentDirectory (sizeof(buf), buf);

line = (AnsiString) buf;

line +=»\\Otves_K.xlt»;

V = Variant: CreateObject («Excel. Application»);

books = V. OlePropertyGet («Workbooks»);

books. OleProcedure («Open», line);

book = books. OlePropertyGet («item», 1);

sheet= book. OlePropertyGet («WorkSheets», 1);

MC=VarArrayCreate (BoundsC, 1, varVariant);

Query1->First();

i=0;

while (! Query1->Eof)

{

for (j=1; j<=FNames_size; j++)

{

try

{

mount = Query1->FieldValues [FNames[j-1]];

}

__finally

{

MC. PutElement (mount, j);

}

}

V. OleProcedure («Run», «ExecuteReport», MC, i++);

Query1->Next();

}

/*** Title ***/

line = «Отвесная по ковшам. («+DateToStr (data_beg)+» - «+DateToStr (data_end)+»)»;

V. OleProcedure («Run», «DataTitle», line);

V. OlePropertySet («Visible», true);

}

__finally

{

V = Unassigned;

}

}

Печать отчета в «Предистория провесок»

void __fastcall TForm6:N4Click (TObject *Sender)

{

Form31 = new TForm31 (this);

switch(Descret)

{

case 1: line=Label1->Caption+». «+DateToStr(superdata);

Form31->QRLabel3->Caption = «предистория весов»;

break;

case 2: line=Label1->Caption+». «+DateToStr (data_beg)+»…«+DateToStr(superdata);

Form31->QRLabel3->Caption = «предистория тары (последние 20 весов)»;

break;

case 4: line= Label1->Caption;

break;

}

Form31->QRLabel100->Caption= line;

Form31->QRShape100->Width= Form31->QRLabel100->Width;

if (APPCOD>2) /*** адресат ***/

{

Form31->QuickRep1->DataSet = Query3;

Form31->QRDBText1->DataSet = Query3;

Form31->QRDBText2->DataSet = Query3;

Form31->QRDBText3->DataSet = Query3;

Form31->QRDBText4->DataSet = Query3;

Form31->QRDBText5->DataSet = Query3;

Form31->QRDBText6->DataSet = Query3;

Form31->QRDBText12->DataSet = Query3;

line += (APPCOD==3)? «(ЭСПЦ)»:» (Разливка)»;

Form31->QRLabel100->Caption = line;

Form31->QRShape100->Width= Form31->QRLabel100->Width;

}

line = «Оператор станции взвешивания………………………………….»;

line += «/ «+AppMan->OPERATOR+» /»;

Form31->QRLabel200->Caption= line;

Form31->RecCount = RecordCount;

/**** Add AVG Params ***/

{

TDateTime dt;

float var = SumNetto/ (float) SumNaliv;

switch(typeUE)

{

case Mixer: line = «1. Количество миксеров в работе (шт.):» + (AnsiString) RecordCount;

Form31->QRSB->Items->Add(line);

line = «2. Средний налив в миксерах (т):» + FormatFloat(«##», var);

Form31->QRSB->Items->Add(line);

var = SumNaliv/ (float) RecordCount;

line = «3. Оборачиваемость (шт.):» + FormatFloat («0##.#», var);

Form31->QRSB->Items->Add(line);

line = «4. Среднее время нахождения у потребителя:» + FormatDateTime («hh:nn», AvgTime);

Form31->QRSB->Items->Add(line);

Form31->QRLabel4->Enabled=false;

Form31->QRDBText6->Enabled=false;

break;

case Kovsh: line = «1. Количество ковшей в работе (шт.):» + (AnsiString) RecordCount;

Form31->QRSB->Items->Add(line);

line = «2. Средний налив в ковше (т):» + FormatFloat(«##», var);

Form31->QRSB->Items->Add(line);

float set = SumNetto/ (float) SumNaliv_bk;

line = «3. Средний налив в ковше (без учета козловых ковшей) (т):» + FormatFloat(«##», set);

Form31->QRSB->Items->Add(line);

var = SumNaliv/ (float) RecordCount;

line = «4. Оборачиваемость (шт.):» + FormatFloat («0##.#», var);

Form31->QRSB->Items->Add(line);

line = «5. Среднее время нахождения у потребителя:» + FormatDateTime («hh:nn», AvgTime);

Form31->QRSB->Items->Add(line);

line = «6. Наливов* - наливы без козловых ковшей, где вес (т) <= 80»;

Form31->QRSB->Items->Add(line);

Form31->QRLabel4->Enabled=true;

Form31->QRDBText6->Enabled=true;

break;

}

}

Form31->QuickRep1->Preview();

delete Form31;

Form31 = NULL;

}

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


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

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