Разработка программного продукта "Станция взвешивания чугуна" для ЧерМК ПАО "Северсталь"
Общее описание разрабатываемого программного обеспечения, требования к его функциональности и сферы практического применения. Выбор инструментальных средств разработки. Проектирование структур баз данных и алгоритмов, пользовательского интерфейса.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 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
Подобные документы
Составление математической модели расписания в школе. Назначение и область применения программного продукта. Обоснование выбора инструментальных средств. Описание разработки, алгоритмов и методов решения, форматов данных и пользовательского интерфейса.
курсовая работа [1,6 M], добавлен 18.01.2012Требования к пользовательскому интерфейсу программного продукта. Выбор инструментальных средств разработки программы. Описание функциональной схемы, модульной структуры, структурной схемы. Технология разработки справочной системы программного продукта.
дипломная работа [2,7 M], добавлен 12.05.2016Процесс выбора технологий и инструментальных средств. Анализ требований и построения спецификаций создаваемого программного обеспечения. Контекстная и детализированная диаграмма "AS-IS". Разработка алгоритмов и структур данных для хранения информации.
курсовая работа [3,3 M], добавлен 04.06.2014Анализ существующих решений для составления расписания репетитора. Разработка архитектуры программного продукта. Выбор инструментальных средств. Проектирование реляционной базы данных. Определение методики тестирования. Реализация интерфейса пользователя.
дипломная работа [411,7 K], добавлен 22.03.2018Требования к аппаратному и программному обеспечению, требуемому для разработки программного модуля. Критерии приемлемости разрабатываемого программного продукта. Разработка удобного пользовательского интерфейса программы. Алгоритм и листинг программы.
курсовая работа [2,6 M], добавлен 23.11.2011Общее описание разрабатываемого приложения, его актуальность и сферы практического применения. Выбор среды разработки и языка программирования, 3D-движка. Архитектура приложения, интерфейса и его главных элементов, взаимодействие с пользователем.
дипломная работа [317,5 K], добавлен 10.07.2017Выбор технологии, языка и среды программирования. Анализ процесса обработки информации и оценка структур данных для ее хранения. Разработка основных алгоритмов решения и структурной схемы программного продукта. Проектирование интерфейса пользователя.
курсовая работа [449,8 K], добавлен 14.01.2011Основание для разработки автоматизированной информационной системы "Будущий абитуриент". Технические требования к программному изделию. Порядок контроля и приемки продукта. Рассмотрение исходной базы данных. Описание интерфейса программного обеспечения.
дипломная работа [3,3 M], добавлен 08.02.2013Проектирование структур данных и пользовательского интерфейса. Разработка руководства системного программиста и пользователя. Основные элементы организации работы менеджера по работе с клиентами. Характеристика программного обеспечения ООО "Доминион+".
курсовая работа [1,7 M], добавлен 14.10.2012Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.
курсовая работа [81,7 K], добавлен 18.08.2014