Специфика работы отдела автоматизации предприятия

 

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования

Магнитогорский Государственный Технический

Университет им. Г.И. Носова

Институт Автоматики и Энергетики

Кафедра вычислительной техники и прикладной математики









Отчет по производственной практике

в ООО «ММК-Информсервис»




Выполнил:

Студент группы АВ-08-1

Струков И.С.

Проверил: Калитаев А.Н.

Руководитель практики:

Катасонов С.В.




Магнитогорск, 2011 г.

Введение


ОАО «Магнитогорский металлургический комбинат» входит в число крупнейших мировых производителей стали и занимает лидирующие позиции среди предприятий черной металлургии России.

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

ММК производит широкий сортамент металлопродукции с преобладающей долей продукции с высокой добавленной стоимостью.

ММК производит широкий сортамент металлопродукции с преобладающей долей продукции с высокой добавленной стоимостью.

В 2010 г. Группа ММК произвела 11,4 млн. тонн стали и 10,4 млн. тонн товарной металлопродукции.

Выручка Группы ММК за 2009 г. составила $5,081 млрд, EBITDA - $1,285 млрд, прибыль за период - $219 млн.

1. Теоретическая часть


На рисунке 1 представлена структура ООО «Управляющая компания ММК».


Рисунок 1 - Структура ООО «Управляющая компания ММК»


ООО «ММК-Информсервис» входит в состав ММК-Сервис. Структура ММК - Сервис представлена на рисунке 2:


Рисунок 2 - Структура ММК-Сервис


ООО «ММК-Информсервис» образовано в мае 2010 года на базе управления информационных технологий ОАО "ММК".

Миссия общества - обеспечение текущих и перспективных потребностей ОАО «ММК» и Группы обществ ОАО "ММК" в полноценной, оперативной и достоверной информации с целью повышения качества принимаемых управленческих решений.

Основные направления деятельности:

) развитие, сопровождение и поддержка Корпоративной Информационной Системы ОАО "ММК";

) обеспечение в круглосуточном режиме бесперебойной работы автоматизированных систем производственного комплекса ОАО "ММК";

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

Перспективные направления деятельности:

) разработка, внедрение, интеграция и сопровождение бизнес-приложений (информационных систем, систем электронной почты и документооборота, электронных архивов) в обществах группы ОАО "ММК";

) разработка, внедрение и сопровождение комплексных систем управления производством;

) развитие услуг связи;

) создание и обслуживание систем охранного видеонаблюдения и ситуационных центров.

Номенклатура производимой продукции:

) проектирование, разработка, внедрение и сопровождение бизнес-приложений (информационные системы, системы автоматизации, системы электронного документооборота, электронной почты, электронных архивов, интернет и интранет решения, ГИС-системы);

) интеграция разнородных информационных систем и бизнес-приложений;

) разработка и внедрение систем аналитической отчетности и принятия решений для руководителей;

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

) предоставление услуг связи и передачи данных (в том числе, в рамках лицензий на услуги местной телефонной связи на территории г. Магнитогорска и республики Башкортостан, предоставление каналов связи, передачу данных и доступ в интернет);

) монтаж, наладка, обслуживание различных систем промышленной связи;

) монтаж, наладка, обслуживание систем промышленного телевидения и охранного видеонаблюдения;

) ремонт компьютерной и электронной техники любой сложности;

) монтаж и обслуживание систем бесперебойного питания, обслуживание систем кондиционирования.

Основные достижения общества:

) внедрение в 2005 году Корпоративной Информационной системы (КИС) ОАО «ММК» на базе Oracle E-Business Suite. Проект внедрения КИС был признан крупнейшим успешным проектом внедрения Oracle в регионе EMEA (Европа, Ближний Восток и Африка);

) внедрено и находится на технической поддержке порядка 230 МES систем основных цехов и вспомогательных производств ОАО «ММК». Выполнена интеграция цеховых MES систем с КИС ОАО «ММК»;

) телефонная сеть ОАО «ММК», емкостью более 17 тыс. абонентских номеров, предоставляющая дополнительные сервисы (биллинг, базы данных абонентов, голосовая почта, центр обработки вызовов, селекторный рапорт, телефонные конференции);

) корпоративная сеть ОАО «ММК», состоящая из: кабельной инфраструктуры общей протяженность медных линий связи - 2530 км, волоконно-оптических линий связи - 150 км, канализационных сооружений - 520 канал/км, 3000 единиц активного сетевого оборудования.

2. Практическая часть


Структура документа в «dynamo».

С помощью серверного ПО «dynamo» отчеты, справки, рапорты и т.п. формируются в файлах с расширением *.stm. В этих файлах содержатся директивы для сервера. SSI (Server-Side Includes, включения на стороне сервера) позволяет добавлять контент во множество страниц, причем незаметно для пользователя. Это значит, что при запросе браузера определенного документа ему передается уже готовый, полностью сформированный код. Особенностью SSI является то, что это технология работает только под управлением веб-сервера, например, Apache.

Обычно веб-сервер проверяет на наличие встроенных команд не все файлы на сервере, а только с заданным расширением, как правило, shtml (или stm).

Ознакомившись с таким файлом, я выяснил, что в нем происходит запрос к базе данных, обработка данных и вывод полученных результатов. Эти действия осуществляются с помощью языка программирования DynamoScript. В качестве примера в приложении 1 приведен листинг формирования отчета «Выход горячекатаного брака в ЛПЦ-5».

Структура документов в «skat».

Причина замены серверного ПО состоит в том, что серверное ПО «Dynamo» морально устарело и не поддерживается производителем. Кроме того, «skat», являясь надстройкой над php, позволяет унифицировать разработку web-приложений в части унификации работы с базами данных, обработки и представления данных.

Для формирования отчетов, справок, рапортов и т.п. в «skat» используются несколько документов: файл с таблицами стилей (расширение *.css), файл для выполнения запроса к базе данных (расширение *_data.php), файл для вывода данных в однообразном виде (расширение *_doc.php). Они наследуют базовые классы для работы с данными.

В файле Quality_LPC5_0002_data.php создается класс Quality_LPC5_0002_data (имя класса и имя файла должны совпадать), который наследует базовый класс подготовки данных GetDoc и отвечает за подготовку данных для отчета «Выход горячекатаного брака в ЛПЦ-5». Фактически в данном классе происходит запрос к базе данных и в глобальную переменную записываются полученные данные.

В файле Quality_LPC5_0002_doc.php создается класс Quality_LPC5_0002_doc (имя класса и имя файла должны совпадать), который наследует базовый класс вывода данных PutDoc и отвечает за вывод данных для отчета «Выход горячекатаного брака в ЛПЦ-5». Фактически именно здесь происходит обработка данных, их систематизация и вывод.

Классы GetDoc и PutDoc в свою очередь являются наследниками класса Doc, в котором определяется общие методы для работы с данными, но также и методы которые будут переопределены в наследниках. Например, метод exec(), который переопределяется и в классе Quality_LPC5_0002_data и в классе Quality_LPC5_0002_doc.

В приложении 2 приведены листинги файла Quality_LPC5_0002_data.php и файла Quality_LPC5_0002_doc.php.

Также в приложении 2 приведен листинг файла misc.php, который включается в файлы Quality_LPC5_0002_data.php и Quality_LPC5_0002_doc.php в нем находятся дополнительные функции для работы.

Перепрограммирование формирования отчетов.

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

Основная работа сводилась к переделыванию функций из «dynamo» в «skat»,заменяя их на стандартные в php либо создавая новые. Например значительную часть времени занимало форматирование вывода данных. В старых документах использовалась нестандартная функция rest(float num [,int d]) которая возвращала число num с d знаками послезапятой. Параметр d в этой функции является не обязательным и по молчанию равен. Замена этой функции требовало внесение дополнительной логики вывода в код.

Некоторая часть работы состояла в: замене символов конкатенации языка DynaScript с '+' на символы конкатенации языка php '.' ; замене имен с var_name на $var_name (добавление знака '$'); изменении функций с parseInt, parseFloat, parseStr, indexOf на intval, floatval, strval, strpos и т.п.

Также пришлось заменять конструкцию типа_name[i].indexOf('дефекты геометри')!=-1, на конструкцию типа

!(strpos($unit_name[$i],'дефекты геометри')=== false) из - за особенностей возвращаемого значения функции strpos.

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

Формирование отчета «Выход горячекатаного брака в ЛПЦ-5».

Ниже приведено старое и новое оформление отчета «Выход горячекатаного брака в ЛПЦ-5». Моя работа это вывод нового сформированного отчета (таблицы), панель выбора даты, и остальное оформление документа было выполнено программистами ООО «ММК-Информсервис» Отдела автоматизации.

В следующих рисунках можно будет увидеть, как изменились документы.

Наша работа заключалась в том, чтобы перепрограммировать формирование «Выход горячекатаного брака в ЛПЦ-5» из движка сайта «dinamo», для формирования их с использованием языка веб - программирования php и нового движка сайта «skat».

«Выход горячекатаного брака в ЛПЦ-5» можно посмотреть за 4 периода: за сутки, за период, за месяц и за год по месяц. На рисунках 3, 4, 5 и 6 будут представлены первоначальные «Справки о выходе несоответствующей продукции по получению» за разные периоды:


Рис. 3 - Справка о выходе несоответствующей продукции по получению за сутки.


Рис. 4 - Справка о выходе несоответствующей продукции по получению за период.

Рис. 5 - Справка о выходе несоответствующей продукции по получению за месяц.


Рис. 6 - Справка о выходе несоответствующей продукции по получению за год по месяц.


На следующих рисунках 7, 8, 9 и 10 представлены уже переделанные отчеты «Выход горячекатаного брака в ЛПЦ-5»:

перепрограммирование dinamo skat серверный

Рис.7 - Справка о выходе несоответствующей продукции по получению за сутки.


Рис. 8 - Справка о выходе несоответствующей продукции по получению за период.

Рис. 9 - Справка о выходе несоответствующей продукции по получению за месяц.


Рис. 10 - Справка о выходе несоответствующей продукции по получению за год по месяц.

Заключение


В результате прохождения практики была изучена специфика работы отдела автоматизации ООО «ММК-Информсервис», получены навыки и опыт работы реальными производственными системами и базами данных.

Была выполнена поставленная задача, перепрограммировать формирование отчетов по качеству из серверного ПО «dinamo», для формирования их с использованием языка веб - программирования php и нового серверного ПО «skat», следующих цехов - ЦП, СЦ, ЛПЦ-5, ЛПЦ-10.

Очень понравился рабочий коллектив, мы бы с удовольствием остались там работать.

Приложения


Листинг _brak_NTA.stm

<HTML>

<head>

<meta http-equiv="Content-Language" content="en-us">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<TITLE>Брак с НТА</TITLE>

</head>

<BODY background='../img/paper.jpg' leftmargin="0">

<!--script ( '../script/Connect.ssc' );( '../script/Date.ssc' );( '../script/Zero.ssc' );( '../script/MyStyle.ssc' );(); = document.value;itog1_ok = 0.00;itog2_ok = 0.00;itog1_kk = 0.00;itog2_kk = 0.00;itog1_08 = 0.00;itog2_08 = 0.00;itog1_bm = 0.00;itog2_bm = 0.00;zadano1 = 0.00;zadano2 = 0.00;hist_doc;count=0;count_doc=0;write_work(name, val1, val2)

{.Write( "<tr>" ); .Write( "<td align=left>

} _Web('Lpc5'); (Xconn != null)

{ = "SELECT ud.unit_name, ud.doc_id, d.doc_name, &(if u.gr_id=23 and p.date_beg between '"+vr.date1+"' and '"+vr.date2+"' then productivity endif), & (if u.gr_id=23 and p.date_beg between '"+vr.date3+"' and '"+vr.date4+"' then productivity endif), & (if u.gr_id=24 and p.date_beg between '"+vr.date1+"' and '"+vr.date2+"' then productivity endif), & (if u.gr_id=24 and p.date_beg between '"+vr.date3+"' and '"+vr.date4+"' then productivity endif), & (if u.gr_id=25 and p.date_beg between '"+vr.date1+"' and '"+vr.date2+"' then productivity endif), & (if u.gr_id=25 and p.date_beg between '"+vr.date3+"' and '"+vr.date4+"' then productivity endif), & (if u.gr_id in (1,2) and p.date_beg between '"+vr.date1+"' and '"+vr.date2+"' then productivity endif), & (if u.gr_id in (1,2) and p.date_beg between '"+vr.date3+"' and '"+vr.date4+"' then productivity endif) & dbo.unit u, dbo.production p, dbo.unit_doc ud, dbo.document d &p.unit_id = u.unit_id and ud.unit_id=u.unit_id and d.doc_id=ud.doc_id &( (u.gr_id in (23,24,25) and u.shop_id in (5008,5009) and ud.doc_id in (50005,50006,50007,50008)) & (u.gr_id=2 and u.shop_id=5035) or u.unit_id in (50008,50009) ) &p.date_beg between '"+vr.date3+"' and '"+vr.date2+"' &BY ud.unit_name, ud.doc_id, d.doc_name &BY ud.doc_id, ud.unit_name"; = Xconn.CreateQuery( str ); .Write( SQL.GetErrorInfo() ); ( SQL.GetEmpty()==true).Write ( "<br><center><div>

{= vr.date1.substring(8,10) + "." + vr.date1.substring(5,7) + "." + vr.date1.substring(0,4);= vr.date2.substring(8,10) + "." + vr.date2.substring(5,7) + "." + vr.date2.substring(0,4); = vr.date3.substring(8,10) + "." + vr.date3.substring(5,7) + "." + vr.date3.substring(0,4); = vr.date4.substring(8,10) + "." + vr.date4.substring(5,7) + "." + vr.date4.substring(0,4); = parseFloat(vr.date2.substring(5,7)); .Write ( "<center><font>

{++;_name[i] = SQL.GetValue(1);_id[i] = SQL.GetValue(2); _name[i] = SQL.GetValue(3); _ok[i] = ( SQL.GetValue(4)==null ? 0 : parseFloat(SQL.GetValue(4)) );_ok[i] = ( SQL.GetValue(5)==null ? 0 : parseFloat(SQL.GetValue(5)) );_kk[i] = ( SQL.GetValue(6)==null ? 0 : parseFloat(SQL.GetValue(6)) );_kk[i] = ( SQL.GetValue(7)==null ? 0 : parseFloat(SQL.GetValue(7)) );_08[i] = ( SQL.GetValue(8)==null ? 0 : parseFloat(SQL.GetValue(8)) );_08[i] = ( SQL.GetValue(9)==null ? 0 : parseFloat(SQL.GetValue(9)) );_bm[i] = ( SQL.GetValue(10)==null ? 0 : parseFloat(SQL.GetValue(10)) ); // без марки_bm[i] = ( SQL.GetValue(11)==null ? 0 : parseFloat(SQL.GetValue(11)) ); // без марки (doc_id[i]!=50001)

{_ok += val1_ok[i];_ok += val2_ok[i]; _kk += val1_kk[i];_kk += val2_kk[i];_08 += val1_08[i];_08 += val2_08[i];_bm += val1_bm[i];_bm += val2_bm[i];

}if (doc_id[i]==50001)

{ += val1_bm[i]; += val2_bm[i];

}

} (SQL.MoveNext() && SQL!=null)k = i; = itog1_ok + itog1_kk + itog1_08 + itog1_bm;= itog2_ok + itog2_kk + itog2_08 + itog2_bm;_work('Задано г/к', zadano1, zadano2);_work('Отсортировано', itog1, itog2);_work('Получено г/к', zadano1-itog1, zadano2-itog2);_work('Выход годного, %', (zadano1==0?0:((zadano1-itog1)/zadano1*100)), (zadano2==0?0:((zadano2-itog2)/zadano2*100))); (i=1; i<=k; i++)

{ (doc_id[i]!=50001)

{(hist_doc!=doc_id[i])

{ _doc = doc_id[i];_doc++; (i==1)

{_ok = 0.00; _ok = 0.00; _kk = 0.00; _kk = 0.00; _08 = 0.00; _08 = 0.00; _bm = 0.00; _bm = 0.00;

}

if ( i!=1 && count>1 )// Итог по группе

{.Write( "<tr>

} _ok = 0.00; _ok = 0.00; _kk = 0.00; _kk = 0.00; _08 = 0.00; _08 = 0.00; _bm = 0.00; _bm = 0.00; = 0; .Write( "<tr>" );.Write( "<td align=center>

} .Write( "<tr>" );.Write( "<td align=left>

}

}

if ( count>1 )// Итог по группе

{.Write( "<tr>

}( count_doc>1 )// ВСЕГО

{.Write( "<tr>

}.Write( "</table>");

}.Disconnect();

}

->

</BODY>

</HTML>

Листинг 2 файла Quality_LPC5_0002_data.php

<?php_once LOCAL_LIB_DIR . 'misc.php';Quality_LPC5_0002_data extends GetDoc

{

var $dt;exec()

{

$this->dt = $this->_data->getVar('date',null);

$rd = $this->_request->getVar('per', 'ALL', 0);($rd>=1 and $this->doc_code != $this->old_doc_code)

{

$this->dt->dt_to = $this->dt->sysdate;

$this->dt->dt_from = $this->dt->sysdate;

$this->dt->dt_to->add_part_dt(-1,'d');

$this->dt->dt_from->add_part_dt(-7,'d');

$this->dt->dt_from->add_part_dt(-7,'d');

$this->dt->dt_to->add_part_dt(-7,'d');

$this->_data->setVar('fromDt2', $this->dt->fromDate('d.m.Y'));

$this->_data->setVar('toDt2', $this->dt->toDate('d.m.Y'));

$this->dt->dt_to->add_part_dt(7,'d');

$this->dt->dt_from->add_part_dt(7,'d');

}($rd==0 and $this->doc_code != $this->old_doc_code)

{

$this->dt->dt_from = $this->dt->sysdate;

$this->dt->dt_from->add_part_dt(-1,'d');

}

$dat7=$dat8= $this->dt->fromDate('Y-m-d');($rd==0)// Сутки

{

$dat1 = $dat2 = $this->dt->fromDate('Y-m-d');

$year = intVal(substr($dat2,0,4));

$mon = intVal(substr($dat2,5,2));

$dat3 = $year."-".($mon>9?"":"0").$mon."-01"; // начало месяца

$dat4 = $dat1; // конец месяца

$year_prev = ($mon==1 ? $year-1 : $year);

$mon_prev = ($mon==1 ? 12 : $mon-1);

$dat5 = $year."-01-01";

$dat6 = $year_prev."-".($mon_prev>9?"":"0").$mon_prev."-".MaxDayInMonth($mon_prev, $year_prev); // конец предыдущего периода

}($rd==1)// Период

{

$dat1 = $this->dt->fromDate('Y-m-d');

$dat2 = $this->dt->toDate('Y-m-d');

$dat3 = $this->_request->getVar('fromDt2', 'ALL');

$dat3 = substr($dat3,6,4)."-".substr($dat3,3,2)."-".substr($dat3,0,2); // начало предыдущего периода

$dat4 = $this->_request->getVar('toDt2', 'ALL');

$dat4 = substr($dat4,6,4)."-".substr($dat4,3,2)."-".substr($dat4,0,2); // конец предыдущего периода

$year = intVal(substr($dat2,0,4));

$mon = intVal(substr($dat2,5,2));

$dat5 = $year."-".($mon>9?"":"0").$mon."-01"; // начало месяца

$dat6 = $dat2; // конец месяца

$year_prev = ($mon==1 ? $year-1 : $year);

$mon_prev = ($mon==1 ? 12 : $mon-1);

$dat7 = $year_prev."-".($mon_prev>9?"":"0").$mon_prev."-01";

$dat8 = $year_prev."-".($mon_prev>9?"":"0").$mon_prev."-".MaxDayInMonth($mon_prev, $year_prev);

}($rd==2)// Месяц

{

$year = intVal($this->_request->getVar('year_sel', 'ALL'));

$mon = intVal($this->_request->getVar('mon_sel', 'ALL'));

$dat1 = $dat5 = $year."-".($mon>9?"":"0").$mon."-01";

$dat2 = $dat6 = $year."-".($mon>9?"":"0").$mon."-".MaxDayInMonth($mon, $year);

$year_prev = ($mon==1 ? $year-1 : $year);

$mon_prev = ($mon==1 ? 12 : $mon-1);

$dat3 = $year_prev."-".($mon_prev>9?"":"0").$mon_prev."-01";

$dat4 = $year_prev."-".($mon_prev>9?"":"0").$mon_prev."-".MaxDayInMonth($mon_prev, $year_prev);

$dat5 = $year."-01-01"; // начало года

$dat6 = $dat2; // конец года

$dat7 = ($year-1)."-01-01";

$dat8 = ($year-1)."-12-31";

}($rd==4)// Год по месяц

{

$year = intVal($this->_request->getVar('year_sel', 'ALL'));// текущий Год

$mon = intVal($this->_request->getVar('mon_sel', 'ALL'));

$dat1 = $dat5 = $year."-01-01"; // C начало года

$dat2 = $dat6 = $year."-".($mon>9?"":"0").$mon."-".MaxDayInMonth($mon, $year);

$year_prev = $year-1;// предыдущий Год

$mon_prev = $mon;

$dat3 = $dat7 = $year_prev."-01-01"; // C начало года

$dat4 = $dat8 = $year_prev."-".($mon_prev>9?"":"0").$mon_prev."-".MaxDayInMonth($mon_prev, $year_prev);

}

$dat_min = ($dat1<$dat3 ? $dat1 : $dat3);

$dat_min = ($dat_min<$dat5 ? $dat_min : $dat5);

$dat_min = ($dat_min<$dat7 ? $dat_min : $dat7);

$dat_max = ($dat2>$dat4 ? $dat2 : $dat4);

$dat_max = ($dat_max>$dat6 ? $dat_max : $dat6);($this->_request->getVar('mode','ALL',0)==2)// Печать

{//данные для печати - беруться из сессии

$res_espc = $this->_data->getVar('res_espc' ,null ,STORE_MODE_SESSION);

$this->_data->setVar('res_espc', $res_espc);

$res_fio = $this->_data->getVar('res_fio' ,null ,STORE_MODE_SESSION);

$this->_data->setVar('res_fio', $res_fio);; // Если окно печати - данные беруться из сессии

}if ($this->_request->getVar('start_but', 'ALL')!=null)

{

$db_config = DATA_DIR.'DBConfig.php';$db_config;

$_con = $con['quality5'];

$sw = new sql_work("","");

$res_espc = $sw->sw_connect($_con, false);($res_espc)

{$sql_espc=

"SELECT ud.unit_name, ud.doc_id, d.doc_name, (if u.gr_id=23 and p.date_beg between '$dat1' and '$dat2' then productivity endif), (if u.gr_id=23 and p.date_beg between '$dat3' and '$dat4' then productivity endif), (if u.gr_id=24 and p.date_beg between '$dat1' and '$dat2' then productivity endif), (if u.gr_id=24 and p.date_beg between '$dat3' and '$dat4' then productivity endif), (if u.gr_id=25 and p.date_beg between '$dat1' and '$dat2' then productivity endif), (if u.gr_id=25 and p.date_beg between '$dat3' and '$dat4' then productivity endif), (if u.gr_id in (1,2) and p.date_beg between '$dat1' and '$dat2' then productivity endif), (if u.gr_id in (1,2) and p.date_beg between '$dat3' and '$dat4' then productivity endif) dbo.unit u, dbo.production p, dbo.unit_doc ud, dbo.document d p.unit_id = u.unit_id and ud.unit_id=u.unit_id and d.doc_id=ud.doc_id ( (u.gr_id in (23,24,25) and u.shop_id in (5008,5009) and ud.doc_id in (50005,50006,50007,50008)) (u.gr_id=2 and u.shop_id=5035) or u.unit_id in (50008,50009) ) p.date_beg between '$dat3' and '$dat2' BY ud.unit_name, ud.doc_id, d.doc_name BY ud.doc_id, ud.unit_name";

$res_espc = $sw->sw_exec_sql($sql_espc, true, false);

$this->error->Send($sw->sw_get_err());

$this->_data->setVar('res_espc', $res_espc, STORE_MODE_ALL);

$sw->sw_disconnect();

}

}

}

}

?>

Листинг 3 файла Quality_LPC5_0002_doc.php

<?php_once LOCAL_LIB_DIR . 'misc.php';Quality_LPC5_0002_doc extends PutDoc

{exec()

{"<script LANGUAGE='javascript' SRC='".JS_DIR."calen/calen.js'></script>

<LINK REL='stylesheet' TYPE='text/css' HREF='".JS_DIR."calen/calenstyle.css'></LINK>

<script LANGUAGE='javascript' SRC='".JS_DIR."qual.js'></script>

<div id='control'>";

$this->dt = $this->_data->getVar('date',NULL);

$this->head();"</div>

<div id='doc'>";

$this->show_res();"</div>";

}head()

{

$dt_put = new Dates_put($this->dt->fromDate(), $this->dt->toDate(), '', $this->set_url(URL_MODE_ARRAY));

$dt_put->start_form('Dates_form', NULL, 0); "<center><h2>Выход горячекатаного брака в ЛПЦ-5</h2>

<table border=0>

<tr>

<th align=left>";

$events_per[0][0]="onclick";

$events_per[0][1]="change_span();";

$per = ($this->_request->getVar('per', 'ALL')!=NULL ? $this->_request->getVar('per', 'ALL') : 0);

$dt_put->unit_form('per', NULL, NULL, 0, $events_per, 1, 1, 'radio',NULL, $per==0?'checked':'' ); //СУТКИ"За сутки

&nbsp;&nbsp;&nbsp;&nbsp;";

$dt_put->unit_form('per', NULL, NULL, 1, $events_per, 1, 2, 'radio',NULL, $per==1?'checked':'' );//ПЕРИОД"За период

&nbsp;&nbsp;&nbsp;&nbsp;";

$dt_put->unit_form('per', NULL, NULL, 2, $events_per, 1, 3, 'radio',NULL, $per==2?'checked':'' );//МЕСЯЦ"За месяц

&nbsp;&nbsp;&nbsp;&nbsp;";

$dt_put->unit_form('per', NULL, NULL, 3, $events_per, 1, 4, 'radio',NULL, $per==3?'checked':'disabled' );//ГОД"За год

&nbsp;&nbsp;&nbsp;&nbsp;";

$dt_put->unit_form('per', NULL, NULL, 4, $events_per, 1, 4, 'radio',NULL, $per==4?'checked':'' );//С НАчАЛА ГОДА ДО "За год по

</th>

</tr>";

$events_from=NULL;

$events_calenForm[0][0]='onclick';

$events_calenForm[0][1]='openCalendar(fromDt,0,0,"")';

$events_calenTo[0][0]='onclick';

$events_calenTo[0][1]='openCalendar(toDt,0,0,"")';

$events_to=NULL;"<tr>

<td align=left>

&nbsp;&nbsp;&nbsp;";

$dt_put->unit_form("fromDt", NULL, "fromDt", $dt_put->_dt_from, $events_from, 10, NULL, 'text', NULL, ($per==0||$per==1?"enable":"disabled"));//1 дата

$dt_put->unit_form('fromDtOk',NULL, "ok", '...', $events_calenForm, 4, 3, 'button', NULL, ($per==0||$per==1?"enable":"disabled"));//Выбор"&nbsp;&nbsp;";

$dt_put->unit_form("toDt",NULL, "toDt", $dt_put->_dt_to, $events_to, 10, NULL, 'text', NULL, ($per==1?"enable":"disabled"));//2 дата

$dt_put->unit_form("toDtOk",NULL, "ok", "...", $events_calenTo, 4, 4, 'button', NULL, ($per==1?"enable":"disabled"));//Выбор

$dat = getdate();

$mon_str = "";

$mon = ($this->_request->getVar('mon_sel','ALL')==NULL ? $dat['mon'] : $this->_request->getVar('mon_sel','ALL'));//получение месяца из сессии( $i = 1; $i <= 12; $i++ )// рисуем форму для выбора месяца

$mon_str .= "<option value=".$i.($i==$mon?' selected':'').">".defMon_rus($i);"&nbsp;&nbsp;&nbsp;

<SELECT name='mon_sel' ".(($per==2 ||$per==4 )?"enable":"disabled").">

$mon_str

</SELECT>";

$year = ($this->_request->getVar('year_sel','ALL')==NULL ? $dat['year'] : $this->_request->getVar('year_sel','ALL'));//получаем год

$year_str = "<option>".($year+1);( $i = 0; $i < 3; $i++ )//выбор года

$year_str .= "<option ".($i==0?' selected':'').">".($year-$i);"&nbsp;&nbsp;

<SELECT name='year_sel' ".($per==2||$per==3||$per==4?"enable":"disabled").">

$year_str

</SELECT>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

// Старт

$events_start[0][0]='onclick';

$events_start[0][1]='pageLoadShow();';

$dt_put->unit_form('start_but',null, "ok", 'Старт', $events_start, 7, 5, 'submit'); //Начинаем"</td>

<td align=right>";

$events_print[0][0]='onclick';//Печать

$events_print[0][1]='start_ext_wind("'.$this->set_url(URL_MODE_PRINT).'", 2);return false;';

$dt_put->unit_form('print' ,NULL, "ok", 'Печать', $events_print, 7, 6, 'button'); //$events_print"&nbsp;&nbsp;

</td></tr>";

$events_from2=NULL;

$events_calenForm2[0][0]='onclick';

$events_calenForm2[0][1]='openCalendar(fromDt2,0,0,"")';

$events_calenTo2[0][0]='onclick';

$events_calenTo2[0][1]='openCalendar(toDt2,0,0,"")';

$events_to2=NULL;

$fromDt2 = $this->_request->getVar('fromDt2', 'ALL', $this->_data->getVar('fromDt2', 'ALL'));

$toDt2 = $this->_request->getVar('toDt2', 'ALL', $this->_data->getVar('toDt2', 'ALL'));"<tr>

<td colspan=2 align=left>

&nbsp;&nbsp;&nbsp;";

$dt_put->unit_form("fromDt2", NULL, "fromDt2", $fromDt2, $events_from2, 10, NULL, 'text', NULL, ($per==1?"enable":"disabled"));

$dt_put->unit_form('fromDtOk2',NULL, "ok", '...', $events_calenForm2, 4, 3, 'button', NULL, ($per==1?"enable":"disabled"));"&nbsp;&nbsp;";

$dt_put->unit_form("toDt2",NULL, "toDt2", $toDt2, $events_to2, 10, NULL, 'text', NULL, ($per==1?"enable":"disabled"));

$dt_put->unit_form("toDtOk2",NULL, "ok", "...", $events_calenTo2, 4, 4, 'button', NULL, ($per==1?"enable":"disabled"));"</td>

</tr>

<tr><td colspan=2><hr noshade size=1></td></tr>

</table>";

$dt_put->end_form();

}show_res()

{

$res_espc = $this->_data->getVar('res_espc', NULL);

$res_fio = $this->_data->getVar('res_fio', NULL);($this->_request->getVar('mode',0)==2) // Печаль

{

$rd = $this->_data->getVar('rd', NULL, STORE_MODE_SESSION);

$dat1 = $this->_data->getVar('dat1', NULL, STORE_MODE_SESSION);

$dat2 = $this->_data->getVar('dat2', NULL, STORE_MODE_SESSION);

$dat3 = $this->_data->getVar('dat3', NULL, STORE_MODE_SESSION);

$dat4 = $this->_data->getVar('dat4', NULL, STORE_MODE_SESSION);

$mon = $this->_data->getVar('mon', NULL, STORE_MODE_SESSION);

$year = $this->_data->getVar('year', NULL, STORE_MODE_SESSION);

$mon_prev = $this->_data->getVar('mon_prev', NULL, STORE_MODE_SESSION);

$year_prev = $this->_data->getVar('year_prev', NULL, STORE_MODE_SESSION);

}

{

$rd = $this->_request->getVar('per', 'ALL');

$this->_data->setVar('rd', $rd, STORE_MODE_ALL);

$dat1 = $this->_request->getVar('fromDt', 'ALL');

$this->_data->setVar('dat1', $dat1, STORE_MODE_ALL);

$dat2 = $this->_request->getVar('toDt', 'ALL');

$this->_data->setVar('dat2', $dat2, STORE_MODE_ALL);

$dat3 = $this->_request->getVar('fromDt2', 'ALL');

$this->_data->setVar('dat3', $dat3, STORE_MODE_ALL);

$dat4 = $this->_request->getVar('toDt2', 'ALL');

$this->_data->setVar('dat4', $dat4, STORE_MODE_ALL);

$mon = intVal($this->_request->getVar('mon_sel', 'ALL'));

$this->_data->setVar('mon', $mon, STORE_MODE_ALL);

$year = intVal($this->_request->getVar('year_sel', 'ALL'));

$this->_data->setVar('year', $year, STORE_MODE_ALL);

$year_prev = ($mon==1 ? $year-1 : $year);

$this->_data->setVar('year_prev', $year_prev, STORE_MODE_ALL);

$mon_prev = ($mon==1 ? 12 : $mon-1);

$this->_data->setVar('mon_prev', $mon_prev, STORE_MODE_ALL);

}( $this->_request->getVar('start_but', 'ALL')!=NULL || $this->_request->getVar('mode',0)==2 )

{

echo "

<div align=center><h2><b>Выход горячекатаного брака в ЛПЦ-5

<br> за ".($rd==0? $dat1 : ($rd==1 ? "период с ".$dat1." по ".$dat2 : ($rd==2 ? defMon_rus($mon)." ".$year."г." : $year." год") ) )."</h4></div>";($rd==1 && (strtotime($dat1)>strtotime($dat2) || strtotime($dat3)>strtotime($dat4))) {echo "<P><h3>КОРРЕКТНО ВЫБЕРИТЕ ПЕРИОД!</h3>";return;} (count($res_espc)==0){echo "<P><h3>По заданным параметрам данных нет!</h3>";return;}

echo "

<table border=1 cellpadding=0 cellspacing=0 align=center>

<tr>

<th rowspan=2>Наименование</th>

<th colspan=4>".($rd==0 ? $dat1 : ($rd==2 ? defMon_rus($mon)." ".($year)."г" : ($rd==1 ? $dat1." - ".$dat2 : ($rd==4?("за ".$mon." мес. "):"").$year." г.")))."</th>

<th colspan=4>".($rd==0 ? 'с начала месяца' : ($rd==2 ? defMon_rus($mon_prev)." ".($year_prev)."г" : ($rd==1 ? $dat3." - ".$dat4 : ($rd==4?("за ".$mon." мес. "):"").($year-1)." г.")))."</th>

</tr>

<tr>

<th>О/К</th>

<th>К/К</th>

<th>08Ю</th>

<th>Итого</th>

<th>О/К</th>

<th>К/К</th>

<th>08Ю</th>

<th>Итого</th>

</tr>";($i=1; $i<=count($res_espc); $i++)

{

$unit_name[$i] = $res_espc[$i-1][0];

$doc_id[$i] = $res_espc[$i-1][1];

$doc_name[$i] = $res_espc[$i-1][2];

$val1_ok[$i] = is_null($res_espc[$i-1][3])? 0 : $res_espc[$i-1][3];

$val2_ok[$i]= is_null($res_espc[$i-1][4]) ? 0 : $res_espc[$i-1][4];

$val1_kk[$i]= is_null($res_espc[$i-1][5]) ? 0 : $res_espc[$i-1][5];

$val2_kk[$i]= is_null($res_espc[$i-1][6]) ? 0 : $res_espc[$i-1][6];

$val1_08[$i]= is_null($res_espc[$i-1][7])? 0 : $res_espc[$i-1][7];

$val2_08[$i]= is_null($res_espc[$i-1][8]) ? 0 : $res_espc[$i-1][8];

$val1_bm[$i]= is_null($res_espc[$i-1][9])? 0 : $res_espc[$i-1][9];

$val2_bm[$i]= is_null($res_espc[$i-1][10])? 0 : $res_espc[$i-1][10];($doc_id[$i]!=50001)

{

$itog1_ok += $val1_ok[$i];

$itog2_ok += $val2_ok[$i];

$itog1_kk += $val1_kk[$i];

$itog2_kk += $val2_kk[$i];

$itog1_08 += $val1_08[$i];

$itog2_08 += $val2_08[$i];

$itog1_bm += $val1_bm[$i];

$itog2_bm += $val2_bm[$i];

}($doc_id[$i]==50001)

{

$zadano1 += $val1_bm[$i];

$zadano2 += $val2_bm[$i];

}

}

$itog1 = $itog1_ok + $itog1_kk + $itog1_08 + $itog1_bm;

$itog2 = $itog2_ok + $itog2_kk + $itog2_08 + $itog2_bm;_work('Задано г/к', $zadano1, $zadano2);_work('Отсортировано', $itog1, $itog2);_work('Получено г/к', $zadano1-$itog1, $zadano2-$itog2);_work('Выход годного, %', ($zadano1==0?0:(($zadano1-$itog1)/$zadano1*100)), ($zadano2==0?0:(($zadano2-$itog2)/$zadano2*100))); ($i=1; $i<=count($res_espc); $i++)

{ ($doc_id[$i]!=50001)

{($hist_doc!=$doc_id[$i])

{

$hist_doc = $doc_id[$i];

$count_doc++;($i==1)

{

$sumdoc1_ok = 0.00;

$sumdoc2_ok = 0.00;

$sumdoc1_kk = 0.00;

$sumdoc2_kk = 0.00;

$sumdoc1_08 = 0.00;

$sumdoc2_08 = 0.00;

$sumdoc1_bm = 0.00;

$sumdoc2_bm = 0.00;

} ( $i!=1 && $count>1 )

{"

<tr>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

</tr>";

}

$sumdoc1_ok = 0.00;

$sumdoc2_ok = 0.00;

$sumdoc1_kk = 0.00;

$sumdoc2_kk = 0.00;

$sumdoc1_08 = 0.00;

$sumdoc2_08 = 0.00;

$sumdoc1_bm = 0.00;

$sumdoc2_bm = 0.00;

$count = 0;"

<tr>

<td align=center colspan=9>

} "

<tr>

<td align=left >&nbsp".$unit_name[$i]."</td>

<td align=right >".prepere($val1_ok[$i])."</td>

<td align=right >".prepere($val1_kk[$i])."</td>

<td align=right >".prepere($val1_08[$i])."</td>

<td align=right >".prepere($val1_ok[$i]+$val1_kk[$i]+$val1_08[$i]+$val1_bm[$i])."</td>

<td align=right >".prepere($val2_ok[$i])."</td>

<td align=right >".prepere($val2_kk[$i])."</td>

<td align=right >".prepere($val2_08[$i])."</td>

<td align=right >".prepere($val2_ok[$i]+$val2_kk[$i]+$val2_08[$i]+$val2_bm[$i])."</td>

</tr>";

$sumdoc1_ok += $val1_ok[$i];

$sumdoc2_ok += $val2_ok[$i];

$sumdoc1_kk += $val1_kk[$i];

$sumdoc2_kk += $val2_kk[$i];

$sumdoc1_08 += $val1_08[$i];

$sumdoc2_08 += $val2_08[$i];

$sumdoc1_bm += $val1_bm[$i];

$sumdoc2_bm += $val2_bm[$i];

$count++;

}

} ( $count>1 )

{"

<tr>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

</tr>";

}( $count_doc>1 )

{"

<tr>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

<td align=right>

</tr>";

}"</table>";

}

}

}

?>

Листинг 4 файла Misc.php

<?phppaintRow($ind)

{ $due[0] = "#eeeeee";

$due[1] = "#fefefe";$due[$ind]; }convDt($dated)

{ $daten = substr($dated,4,2)."-".defMon(substr($dated,0,3))."-".substr($dated,7,4);$daten; }defMon($mon)

{ $nmon = "";($mon=="Jan") $nmon = "01"; else if($mon=="Feb") $nmon = "02";if($mon=="Mar") $nmon = "03"; else if($mon=="Apr") $nmon = "04";if($mon=="May") $nmon = "05"; else if($mon=="Jun") $nmon = "06";if($mon=="Jul") $nmon = "07"; else if($mon=="Aug") $nmon = "08";if($mon=="Sep") $nmon = "09"; else if($mon=="Oct") $nmon = "10";if($mon=="Nov") $nmon = "11"; else if($mon=="Dec") $nmon = "12";$nmon; }defMon_rus($mon)

{ $mm = array();

$mm[1] = "январь"; $mm[2] = "февраль";

$mm[3] = "март"; $mm[4] = "апрель";

$mm[5] = "май"; $mm[6] = "июнь";

$mm[7] = "июль"; $mm[8] = "август";

$mm[9] = "сентябрь"; $mm[10] = "октябрь";

$mm[11] = "ноябрь"; $mm[12] = "декабрь";$mm[$mon];}defineTitle( $pr )

{ if($pr==2) return ("Внутренние продажи");if($pr==3) return ("Экспорт");if($pr==6) return ("Ближнее зарубежье");if($pr==5) return ("РЭН");if($pr==11) return ("РЭН - упаковка");if($pr==10) return ("Давальческое сырьё"); }MaxDayInMonth($mon, $year)

{ $mon = Intval($mon);

$year = Intval($year);($mon==1 || $mon==3 || $mon==5 || $mon==7 || $mon==8 || $mon==10 || $mon==12) $maxday = 31;if ($mon==4 || $mon==6 || $mon==9 || $mon==11) $maxday = 30;if ($mon==2)

{ if (($year % 4) == 0) $maxday = "29"; else $maxday = 28; }($maxday);}prepere($Num, $Form=2)

{$a=number_format(round($Num,$Form),$Form, '.', '');return a==0?"&nbsp":$a;}write_work($name, $val1, $val2)

{echo "<tr> <td align=left ><b>&nbsp ".$name." :</td>

<td align=center colspan=4><b>".$this->prepere($val1)." </td>

<td align=center colspan=4><b>".$this->prepere($val2)." </td></tr>";

}

?>


ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования Магнитогорский Государственный Техни

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ