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

Структура ООО "ММК-Сервис", его деятельность и номенклатура продукции. Перепрограммирование формирования отчетов по качеству из серверного программного обеспечения "dinamo" для формирования их с использованием языка php и серверного обеспечения "skat".

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

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

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

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

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

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

Выполнил:

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

Струков И.С.

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

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

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

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4) корпоративная сеть ОАО «ММК», состоящая из: кабельной инфраструктуры общей протяженность медных линий связи - 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 и т.п.

Также пришлось заменять конструкцию типа

unit_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

import ( '../script/Connect.ssc' );

import ( '../script/Date.ssc' );

import ( '../script/Zero.ssc' );

import ( '../script/MyStyle.ssc' );

MyStyleWrite();

vr = document.value;

var itog1_ok = 0.00;

var itog2_ok = 0.00;

var itog1_kk = 0.00;

var itog2_kk = 0.00;

var itog1_08 = 0.00;

var itog2_08 = 0.00;

var itog1_bm = 0.00;

var itog2_bm = 0.00;

var zadano1 = 0.00;

var zadano2 = 0.00;

var hist_doc;

var count=0;

var count_doc=0;

function write_work(name, val1, val2)

{

document.Write( "<tr>" );

document.Write( "<td align=left class=s0020><b>&nbsp"+name+" :</td>");

document.Write( "<td align=center class=s3020 colspan=4><b>"+rest(val1)+"&nbsp</td>");

document.Write( "<td align=center class=s3020 colspan=4><b>"+rest(val2)+"&nbsp</td></tr>" );

}

Connect_Web('Lpc5');

if (Xconn != null)

{

str = "SELECT ud.unit_name, ud.doc_id, d.doc_name, &

sum (if u.gr_id=23 and p.date_beg between '"+vr.date1+"' and '"+vr.date2+"' then productivity endif), &

sum (if u.gr_id=23 and p.date_beg between '"+vr.date3+"' and '"+vr.date4+"' then productivity endif), &

sum (if u.gr_id=24 and p.date_beg between '"+vr.date1+"' and '"+vr.date2+"' then productivity endif), &

sum (if u.gr_id=24 and p.date_beg between '"+vr.date3+"' and '"+vr.date4+"' then productivity endif), &

sum (if u.gr_id=25 and p.date_beg between '"+vr.date1+"' and '"+vr.date2+"' then productivity endif), &

sum (if u.gr_id=25 and p.date_beg between '"+vr.date3+"' and '"+vr.date4+"' then productivity endif), &

sum (if u.gr_id in (1,2) and p.date_beg between '"+vr.date1+"' and '"+vr.date2+"' then productivity endif), &

sum (if u.gr_id in (1,2) and p.date_beg between '"+vr.date3+"' and '"+vr.date4+"' then productivity endif) &

FROM dbo.unit u, dbo.production p, dbo.unit_doc ud, dbo.document d &

WHERE p.unit_id = u.unit_id and ud.unit_id=u.unit_id and d.doc_id=ud.doc_id &

and ( (u.gr_id in (23,24,25) and u.shop_id in (5008,5009) and ud.doc_id in (50005,50006,50007,50008)) &

or (u.gr_id=2 and u.shop_id=5035) or u.unit_id in (50008,50009) ) &

and p.date_beg between '"+vr.date3+"' and '"+vr.date2+"' &

GROUP BY ud.unit_name, ud.doc_id, d.doc_name &

ORDER BY ud.doc_id, ud.unit_name";

SQL = Xconn.CreateQuery( str );

document.Write( SQL.GetErrorInfo() );

if( SQL.GetEmpty()==true)

document.Write ( "<br><center><div style='font-size:27; color:#4682b4; height:55; filter:shadow(strength=10 direction=70, color=#b0b0f0, enabled=1)'><b>По заданным параметрам данных нет</div></center>");

else

{

date1 = vr.date1.substring(8,10) + "." + vr.date1.substring(5,7) + "." + vr.date1.substring(0,4);

date2 = vr.date2.substring(8,10) + "." + vr.date2.substring(5,7) + "." + vr.date2.substring(0,4);

date3 = vr.date3.substring(8,10) + "." + vr.date3.substring(5,7) + "." + vr.date3.substring(0,4);

date4 = vr.date4.substring(8,10) + "." + vr.date4.substring(5,7) + "." + vr.date4.substring(0,4);

m = parseFloat(vr.date2.substring(5,7));

document.Write ( "<center><font style='font-size:20; font-family:Book Antiqua'><b>Выход горячекатаного брака в ЛПЦ-5");

document.Write ( "<center><b>"+(vr.t==1?"за "+date1 : (vr.t==2?"за "+NameMonth(vr.date1.substring(5,7))+" "+(vr.date1.substring(0,4))+" года" : (vr.t==3?"с "+date1+" по "+date2 : "за "+vr.date1.substring(0,4)+" год")))+"</font></center>");

document.write( "<br><table style='font-size:16; font-family: Garamond' align=center border=0 cellpadding=0 cellspacing=0 class=s3333 width=620px>")

document.write( "<tr bgcolor=#aaaaaa><th class=s0000 rowspan=2 width=28%>Наименование</th>")

document.write( "<th class=s3003 colspan=4>"+(vr.t==1 ? date1 : (vr.t==2 ? +NameMonth(vr.date1.substring(5,7))+" "+(vr.date1.substring(0,4))+"г" : (vr.t==3 ? date1+" - "+date2 : (vr.t==6?"за "+m+"мес. ":"")+vr.date1.substring(0,4)+" г.")))+"</th>")

document.write( "<th class=s3003 colspan=4>"+(vr.t==1 ? 'с начала месяца' : (vr.t==2 ? +NameMonth(vr.date4.substring(5,7))+" "+(vr.date4.substring(0,4))+"г" : (vr.t==3 ? date3+" - "+date4 : (vr.t==6?"за "+m+"мес. ":"")+vr.date4.substring(0,4)+" г.")))+"</th></tr>")

document.write( "<tr bgcolor=#aaaaaa><th class=s3000 width=9%>О/К</th>")

document.write( "<th class=s1000 width=9%>К/К</th>")

document.write( "<th class=s1000 width=9%>08Ю</th>")

document.write( "<th class=s3000 width=9%>Итого</th>")

document.write( "<th class=s3000 width=9%>О/К</th>")

document.write( "<th class=s1000 width=9%>К/К</th>")

document.write( "<th class=s1000 width=9%>08Ю</th>")

document.write( "<th class=s3000 width=9%>Итого</th></tr>")

var i=0;

do

{

i++;

unit_name[i] = SQL.GetValue(1);

doc_id[i] = SQL.GetValue(2);

doc_name[i] = SQL.GetValue(3);

val1_ok[i] = ( SQL.GetValue(4)==null ? 0 : parseFloat(SQL.GetValue(4)) );

val2_ok[i] = ( SQL.GetValue(5)==null ? 0 : parseFloat(SQL.GetValue(5)) );

val1_kk[i] = ( SQL.GetValue(6)==null ? 0 : parseFloat(SQL.GetValue(6)) );

val2_kk[i] = ( SQL.GetValue(7)==null ? 0 : parseFloat(SQL.GetValue(7)) );

val1_08[i] = ( SQL.GetValue(8)==null ? 0 : parseFloat(SQL.GetValue(8)) );

val2_08[i] = ( SQL.GetValue(9)==null ? 0 : parseFloat(SQL.GetValue(9)) );

val1_bm[i] = ( SQL.GetValue(10)==null ? 0 : parseFloat(SQL.GetValue(10)) ); // без марки

val2_bm[i] = ( SQL.GetValue(11)==null ? 0 : parseFloat(SQL.GetValue(11)) ); // без марки

if (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];

}

else if (doc_id[i]==50001)

{

zadano1 += val1_bm[i];

zadano2 += val2_bm[i];

}

}

while (SQL.MoveNext() && SQL!=null)

var k = i;

itog1 = itog1_ok + itog1_kk + itog1_08 + itog1_bm;

itog2 = itog2_ok + itog2_kk + itog2_08 + itog2_bm;

write_work('Задано г/к', zadano1, zadano2);

write_work('Отсортировано', itog1, itog2);

write_work('Получено г/к', zadano1-itog1, zadano2-itog2);

write_work('Выход годного, %', (zadano1==0?0:((zadano1-itog1)/zadano1*100)), (zadano2==0?0:((zadano2-itog2)/zadano2*100)));

for (i=1; i<=k; i++)

{

if (doc_id[i]!=50001)

{

if (hist_doc!=doc_id[i])

{

hist_doc = doc_id[i];

count_doc++;

if (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;

}

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

{

document.Write( "<tr style='font=bold'>");

document.Write( "<td align=right class=s0010>Итого:&nbsp</td>" );

document.Write( "<td align=right class=s3010>"+rest(sumdoc1_ok)+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(sumdoc1_kk)+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(sumdoc1_08)+"&nbsp</td>");

document.Write( "<td align=right class=s3010>"+rest(sumdoc1_ok+sumdoc1_kk+sumdoc1_08+sumdoc1_bm)+"&nbsp</td>");

document.Write( "<td align=right class=s3010>"+rest(sumdoc2_ok)+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(sumdoc2_kk)+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(sumdoc2_08)+"&nbsp</td>");

document.Write( "<td align=right class=s3010>"+rest(sumdoc2_ok+sumdoc2_kk+sumdoc2_08+sumdoc2_bm)+"&nbsp</td>");

}

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;

document.Write( "<tr>" );

document.Write( "<td align=center class=s0030 colspan=9 style='color:darkmagenta; background-color=lightgrey; font-size=12pt; font-family:Georgia'><b>&nbsp"+doc_name[i]+"</td></tr>");

}

document.Write( "<tr>" );

document.Write( "<td align=left class=s0010 >&nbsp"+unit_name[i]+"</td>" );

document.Write( "<td align=right class=s3010>"+rest(val1_ok[i])+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(val1_kk[i])+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(val1_08[i])+"&nbsp</td>");

document.Write( "<td align=right class=s3010>"+rest(val1_ok[i]+val1_kk[i]+val1_08[i]+val1_bm[i])+"&nbsp</td>");

document.Write( "<td align=right class=s3010>"+rest(val2_ok[i])+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(val2_kk[i])+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(val2_08[i])+"&nbsp</td>");

document.Write( "<td align=right class=s3010>"+rest(val2_ok[i]+val2_kk[i]+val2_08[i]+val2_bm[i])+"&nbsp</td>");

document.Write( "</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++;

}

}

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

{

document.Write( "<tr style='font=bold'>");

document.Write( "<td align=right class=s0010>Итого:&nbsp</td>" );

document.Write( "<td align=right class=s3010>"+rest(sumdoc1_ok)+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(sumdoc1_kk)+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(sumdoc1_08)+"&nbsp</td>");

document.Write( "<td align=right class=s3010>"+rest(sumdoc1_ok+sumdoc1_kk+sumdoc1_08+sumdoc1_bm)+"&nbsp</td>");

document.Write( "<td align=right class=s3010>"+rest(sumdoc2_ok)+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(sumdoc2_kk)+"&nbsp</td>");

document.Write( "<td align=right class=s1010>"+rest(sumdoc2_08)+"&nbsp</td>");

document.Write( "<td align=right class=s3010>"+rest(sumdoc2_ok+sumdoc2_kk+sumdoc2_08+sumdoc2_bm)+"&nbsp</td>");

}

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

{

document.Write( "<tr style='font=bold' height=22px>");

document.Write( "<td align=right class=s0030>ВСЕГО отсорт.:&nbsp</td>" );

document.Write( "<td align=right class=s3030>"+rest(itog1_ok)+"&nbsp</td>");

document.Write( "<td align=right class=s1030>"+rest(itog1_kk)+"&nbsp</td>");

document.Write( "<td align=right class=s1030>"+rest(itog1_08)+"&nbsp</td>");

document.Write( "<td align=right class=s3030>"+rest(itog1_ok+itog1_kk+itog1_08+itog1_bm)+"&nbsp</td>");

document.Write( "<td align=right class=s3030>"+rest(itog2_ok)+"&nbsp</td>");

document.Write( "<td align=right class=s1030>"+rest(itog2_kk)+"&nbsp</td>");

document.Write( "<td align=right class=s1030>"+rest(itog2_08)+"&nbsp</td>");

document.Write( "<td align=right class=s3030>"+rest(itog2_ok+itog2_kk+itog2_08+itog2_bm)+"&nbsp</td>");

}

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

}

Xconn.Disconnect();

}

-->

</BODY>

</HTML>

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

<?php

require_once LOCAL_LIB_DIR . 'misc.php';

class Quality_LPC5_0002_data extends GetDoc

{

var $dt;

function exec()

{

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

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

if($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');

}

if($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');

if ($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); // конец предыдущего периода

}

elseif ($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);

}

elseif ($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";

}

elseif ($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);

if($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);

return; // Если окно печати - данные беруться из сессии

}

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

{

$db_config = DATA_DIR.'DBConfig.php';

require $db_config;

$_con = $con['quality5'];

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

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

if($res_espc)

{$sql_espc=

"SELECT ud.unit_name, ud.doc_id, d.doc_name,

sum (if u.gr_id=23 and p.date_beg between '$dat1' and '$dat2' then productivity endif),

sum (if u.gr_id=23 and p.date_beg between '$dat3' and '$dat4' then productivity endif),

sum (if u.gr_id=24 and p.date_beg between '$dat1' and '$dat2' then productivity endif),

sum (if u.gr_id=24 and p.date_beg between '$dat3' and '$dat4' then productivity endif),

sum (if u.gr_id=25 and p.date_beg between '$dat1' and '$dat2' then productivity endif),

sum (if u.gr_id=25 and p.date_beg between '$dat3' and '$dat4' then productivity endif),

sum (if u.gr_id in (1,2) and p.date_beg between '$dat1' and '$dat2' then productivity endif),

sum (if u.gr_id in (1,2) and p.date_beg between '$dat3' and '$dat4' then productivity endif)

FROM dbo.unit u, dbo.production p, dbo.unit_doc ud, dbo.document d

WHERE p.unit_id = u.unit_id and ud.unit_id=u.unit_id and d.doc_id=ud.doc_id

and ( (u.gr_id in (23,24,25) and u.shop_id in (5008,5009) and ud.doc_id in (50005,50006,50007,50008))

or (u.gr_id=2 and u.shop_id=5035) or u.unit_id in (50008,50009) )

and p.date_beg between '$dat3' and '$dat2'

GROUP BY ud.unit_name, ud.doc_id, d.doc_name

ORDER 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

require_once LOCAL_LIB_DIR . 'misc.php';

Class Quality_LPC5_0002_doc extends PutDoc

{

function exec()

{

echo"<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();

echo"</div>

<div id='doc'>";

$this->show_res();

echo"</div>";

}

function 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);

echo "<center><h2>Выход горячекатаного брака в ЛПЦ-5</h2>

<table border=0 class='doc_header'>

<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':'' ); //СУТКИ

echo "За сутки

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

$dt_put->unit_form('per', NULL, NULL, 1, $events_per, 1, 2, 'radio',NULL, $per==1?'checked':'' );//ПЕРИОД

echo "За период

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

$dt_put->unit_form('per', NULL, NULL, 2, $events_per, 1, 3, 'radio',NULL, $per==2?'checked':'' );//МЕСЯЦ

echo "За месяц

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

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

echo "За год

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

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

echo "За год по

</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;

echo "<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"));//Выбор

echo "&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'));//получение месяца из сессии

for( $i = 1; $i <= 12; $i++ )// рисуем форму для выбора месяца

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

echo"&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);

for( $i = 0; $i < 3; $i++ )//выбор года

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

echo"&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'); //Начинаем

echo "</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

echo "&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'));

echo"<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"));

echo "&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"));

echo"</td>

</tr>

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

</table>";

$dt_put->end_form();

}

function show_res()

{

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

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

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

{

8$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);

}

else

{

$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);

}

if ( $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>";

if ($rd==1 && (strtotime($dat1)>strtotime($dat2) || strtotime($dat3)>strtotime($dat4))) {echo "<P><h3>КОРРЕКТНО ВЫБЕРИТЕ ПЕРИОД!</h3>";return;}

if (count($res_espc)==0){echo "<P><h3>По заданным параметрам данных нет!</h3>";return;}

echo "

<table border=1 cellpadding=0 cellspacing=0 align=center width=98% class=report>

<tr class=report_cup bgcolor=#aaaaaa>

<th rowspan=2 width=28%>Наименование</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 class=report_cup bgcolor=#aaaaaa>

<th width=9%>О/К</th>

<th width=9%>К/К</th>

<th width=9%>08Ю</th>

<th width=9%>Итого</th>

<th width=9%>О/К</th>

<th width=9%>К/К</th>

<th width=9%>08Ю</th>

<th width=9%>Итого</th>

</tr>";

for ($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];

if ($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];

}

elseif ($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;

write_work('Задано г/к', $zadano1, $zadano2);

write_work('Отсортировано', $itog1, $itog2);

write_work('Получено г/к', $zadano1-$itog1, $zadano2-$itog2);

write_work('Выход годного, %', ($zadano1==0?0:(($zadano1-$itog1)/$zadano1*100)), ($zadano2==0?0:(($zadano2-$itog2)/$zadano2*100)));

for ($i=1; $i<=count($res_espc); $i++)

{

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

{

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

{

$hist_doc = $doc_id[$i];

$count_doc++;

if ($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;

}

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

{

echo "

<tr>

<td align=right class=gr>Итого:</td>

<td align=right class=gr>".prepere($sumdoc1_ok)."</td>

<td align=right class=gr>".prepere($sumdoc1_kk)."</td>

<td align=right class=gr>".prepere($sumdoc1_08)."</td>

<td align=right class=gr>".prepere($sumdoc1_ok+$sumdoc1_kk+$sumdoc1_08+$sumdoc1_bm)."</td>

<td align=right class=gr>".prepere($sumdoc2_ok)."</td>

<td align=right class=gr>".prepere($sumdoc2_kk)."</td>

<td align=right class=gr>".prepere($sumdoc2_08)."</td>

<td align=right class=gr>".prepere($sumdoc2_ok+$sumdoc2_kk+$sumdoc2_08+$sumdoc2_bm)."</td>

</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;

echo "

<tr>

<td align=center colspan=9 style='color:darkmagenta; background-color:lightgrey; font-size:12pt; font-family:Georgia'><b>&nbsp".$doc_name[$i]."</td></tr>";

}

echo "

<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++;

}

}

if ( $count>1 )

{

echo "

<tr>

<td align=right class=gr >Итого:</td>

<td align=right class=gr >".prepere($sumdoc1_ok)."</td>

<td align=right class=gr >".prepere($sumdoc1_kk)."</td>

<td align=right class=gr >".prepere($sumdoc1_08)."</td>

<td align=right class=gr >".prepere($sumdoc1_ok+$sumdoc1_kk+$sumdoc1_08+$sumdoc1_bm)."</td>

<td align=right class=gr >".prepere($sumdoc2_ok)."</td>

<td align=right class=gr >".prepere($sumdoc2_kk)."</td>

<td align=right class=gr >".prepere($sumdoc2_08)."</td>

<td align=right class=gr >".prepere($sumdoc2_ok+$sumdoc2_kk+$sumdoc2_08+$sumdoc2_bm)."</td>

</tr>";

}

if ( $count_doc>1 )

{

echo "

<tr>

<td align=right class=gr >ВСЕГО отсорт.:</td>

<td align=right class=gr>".prepere($itog1_ok)."</td>

<td align=right class=gr>".prepere($itog1_kk)."</td>

<td align=right class=gr>".prepere($itog1_08)."</td>

<td align=right class=gr>".prepere($itog1_ok+$itog1_kk+$itog1_08+$itog1_bm)."</td>

<td align=right class=gr>".prepere($itog2_ok)."</td>

<td align=right class=gr>".prepere($itog2_kk)."</td>

<td align=right class=gr>".prepere($itog2_08)."</td>

<td align=right class=gr>".prepere($itog2_ok+$itog2_kk+$itog2_08+$itog2_bm)."</td>

</tr>";

}

echo "</table>";

}

}

}

?>

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

<?php

function paintRow($ind)

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

$due[1] = "#fefefe";

return $due[$ind]; }

function convDt($dated)

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

return $daten; }

function defMon($mon)

{ $nmon = "";

if($mon=="Jan") $nmon = "01"; else if($mon=="Feb") $nmon = "02";

else if($mon=="Mar") $nmon = "03"; else if($mon=="Apr") $nmon = "04";

else if($mon=="May") $nmon = "05"; else if($mon=="Jun") $nmon = "06";

else if($mon=="Jul") $nmon = "07"; else if($mon=="Aug") $nmon = "08";

else if($mon=="Sep") $nmon = "09"; else if($mon=="Oct") $nmon = "10";

else if($mon=="Nov") $nmon = "11"; else if($mon=="Dec") $nmon = "12";

return $nmon; }

function 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] = "декабрь";

return $mm[$mon];}

function defineTitle( $pr )

{ if($pr==2) return ("Внутренние продажи");

else if($pr==3) return ("Экспорт");

else if($pr==6) return ("Ближнее зарубежье");

else if($pr==5) return ("РЭН");

else if($pr==11) return ("РЭН - упаковка");

else if($pr==10) return ("Давальческое сырьё"); }

function MaxDayInMonth($mon, $year)

{ $mon = Intval($mon);

$year = Intval($year);

if ($mon==1 || $mon==3 || $mon==5 || $mon==7 || $mon==8 || $mon==10 || $mon==12) $maxday = 31;

else if ($mon==4 || $mon==6 || $mon==9 || $mon==11) $maxday = 30;

else if ($mon==2)

{ if (($year % 4) == 0) $maxday = "29"; else $maxday = 28; }

return ($maxday);}

function prepere($Num, $Form=2)

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

function 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>";

}

?>

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


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

  • Разработка клиент-серверного приложения на основе TCP\IP соединения. Организация работы удаленного генератора псевдослучайных последовательностей. Описание основных функциональных модулей. Интерфейс пользователя, сетевое взаимодействие и алгоритм.

    курсовая работа [223,6 K], добавлен 18.10.2013

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

    дипломная работа [1,7 M], добавлен 13.06.2017

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

    отчет по практике [878,3 K], добавлен 27.09.2014

  • Сетевое программное обеспечение: общее понятие, содержание, функции. Этапы развития теории компьютерных сетей. Проектирование в среде программирования Borland Builder C++ клиент серверного приложения с использованием сокетов, листинг данной программы.

    курсовая работа [191,5 K], добавлен 07.01.2015

  • Последовательность конфигурирования клиентского программного обеспечения для работы в сети. Парметры настройки и подключения сетевого принтера. Обновление конфигурации программы 1С: Предприятие. Анализ аппаратного обеспечения сети данной организации.

    отчет по практике [1,6 M], добавлен 22.01.2011

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

    дипломная работа [4,7 M], добавлен 22.08.2016

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

    курсовая работа [4,0 M], добавлен 16.05.2012

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

    курсовая работа [636,2 K], добавлен 23.08.2011

  • Сокращение постоянных и переменных издержек путем автоматизации документооборота в компании "IT-Сервис". Разработка информационной системы и прототипа клиент-серверного трехзвенного приложения в среде Borland Delphi 7.0. Оценка экономического эффекта.

    реферат [226,3 K], добавлен 25.09.2014

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

    курсовая работа [405,4 K], добавлен 08.02.2016

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