tag:blogger.com,1999:blog-78564655119663432012024-02-20T07:42:31.442+03:00Свободная минута для программированияРецепты. Примеры кода. Идеи. Планы. И многое другое!Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-7856465511966343201.post-10536617650679227552014-12-12T19:30:00.002+03:002014-12-29T09:43:19.149+03:00PHP показ сообщения, после чего переход на другую страницу<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: left;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO0bXu-I6r2xpvBnJ_eFhFICGR8nuu3NaqHQzFEvESsSKKIqg1WVxK06AdzgHZfklvNb8wTM7IaGSsNYJ0PAexW4-jZNW_dSjOwt3yLKfeQiNJvQPo9-KqZniMPUq-NNV1NGKR7ttES1qR/s1600/redirection-urls.jpg" height="158" style="float: left; margin-right: 10px;" width="200" /></div>
Live-hack о том как сделать переход на другую страницу после передачи сообщения PHP скриптом.<br />
<br />
Об этом можно ознакомится тут:<a href="http://any-strike.blogspot.com/p/php-java-scritp.html"> PHP. Java Script</a></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-73243319625915088872014-12-12T15:55:00.003+03:002014-12-22T17:52:57.257+03:00Интеграция изображений в страницу (HTML, CSS3)<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrFPPlla4oa90r1JbKs_bqfzFcuhhx-W_BkjuZkDTJLwjelFZLUMb9OJSq5VNpCIp8gTVD_UZWQw1uljeZAgei8NWg4D2DVvGhxDzkfUcnTA4m7FUFR11F5LIe3K6ZXRljx0mH7WFDw6Ne/s1600/base64-logo-352x200.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrFPPlla4oa90r1JbKs_bqfzFcuhhx-W_BkjuZkDTJLwjelFZLUMb9OJSq5VNpCIp8gTVD_UZWQw1uljeZAgei8NWg4D2DVvGhxDzkfUcnTA4m7FUFR11F5LIe3K6ZXRljx0mH7WFDw6Ne/s1600/base64-logo-352x200.jpg" height="181" width="320" /></a></div>
<br />
Сегодня поговорим о интересной особенности HTML протокола,а точнее о передачи изображения как текста.<br />
<br />
<a name='more'></a><br />
<br />
Давайте вспомним как почтой пересылаются интегрированные в сообщение изображения и прочие данные.<br />
Пример почтового сообщения :<br />
<br />
<pre name="code"><code class="vbscript" data-result="[object Object]" data-second_best="[object Object]">--<span class="number">90</span>e6ba6e83c4c085b70494b26d88
Content-Type: text/plain; charset=KOI8-R
Content-Transfer-Encoding: base64
KtTFy9PUKiAq0MnT2M3BKiAq088g19PRy8nNKiDCwczBzdXUz80K
--<span class="number">90</span>e6ba6e83c4c085b70494b26d88
Content-Type: text/html; charset=KOI8-R
Content-Transfer-Encoding: base64 </code></pre>
<pre name="code"><code class="vbscript" data-result="[object Object]" data-second_best="[object Object]"> </code></pre>
<pre name="code"><code class="vbscript" data-result="[object Object]" data-second_best="[object Object]"><code class="vbscript" data-result="[object Object]" data-second_best="[object Object]">PGI+<span class="number">1</span>MXL09Q8L2I+IDxpPtDJ09jNwTwvaT4gPHU+<span class="number">088</span>g19PRy8nNPC91PiDCPHNwYW4gc3R5bGU9
ImJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDIwNCwgMTAyKTsiPsHMwc3V1M/NPC9zcGFuPjxi
cj4K
--<span class="number">90</span>e6ba6e83c4c085b70494b26d88--</code>
</code></pre>
<br />
это не читаемый текст и есть данные передающиеся в письме кодированные по алгоритму base64, после шифрования данным алгоритмом все данные становятся текстом.<br />
Это и есть та особенность которая нас очень интересует.<br />
И нам никто не мешает использовать её в HTML, потому как он также является текстовым протоколом.<br />
<br />
давайте как пример выведем значек папки в браузер:<br />
<br />
<pre><img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0j
vb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAA
Re8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0Cc
guWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" width="16"
height="14" alt="Папка в base64"/></pre>
<br />
смотрится странно, но оно будет работать.<br />
Для того что бы браузер разобрался что ему надо сделать мы ему сообщаем, что передаются данные изображения в GIF формате, сжатые base64 алгоритмом<br />
<pre> </pre>
<pre>data:image/gif;base64</pre>
<br />
После чего, через запятую вводятся символы изображения.<br />
<br />
Кстати такой подход можно использовать и в CSS файлах, как пример так же с иконкой папки<br />
<br />
<pre>ul {list-style:none;}
ul > li {
margin:0 0 .1em;
background:url(data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0j
vb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1
Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsV
MkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7) top left no-repeat;
height:14px;
text-indent:1.5em;
}</pre>
<br />
Теперь когда мы объявим список<br />
<br />
<pre><ul>
<li>Testing inline images, one</li>
<li>Two</li>
<li>Three</li>
</ul></pre>
<br />
Мы получим вполне красивое дерево<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMljHmG8BSQAhOx2iEPz0x0wNbceynZbSOifJDE9xQg6imKmNqaTB2WkjPuWN5Yn-rrcUneDNxuijMJRP0TbQyK4GaRJe8UWPwwCK_GBEvwxzi1r-pCEPXO4ZnrJ7mmfwjiXkCNuBZUQig/s1600/folder-css.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMljHmG8BSQAhOx2iEPz0x0wNbceynZbSOifJDE9xQg6imKmNqaTB2WkjPuWN5Yn-rrcUneDNxuijMJRP0TbQyK4GaRJe8UWPwwCK_GBEvwxzi1r-pCEPXO4ZnrJ7mmfwjiXkCNuBZUQig/s1600/folder-css.png" /></a></div>
<br />
Есть онлайн сервисы что бы преобразовать изображение в текст:<br />
<a href="http://anosov.me/services-base64image/">http://anosov.me/services-base64image/</a><br />
<a href="http://khtulhu.org.ua/programmy/19-web-prilozheniya/204-kodirovanie-izobrazhenij-v-base64.html">http://khtulhu.org.ua/programmy/19-web-prilozheniya/204-kodirovanie-izobrazhenij-v-base64.html</a><br />
<br />
Пользуйтесь, это очень интересный подход, особенно если использовать gzip на стороне сервера Apache.<br />
<br />
<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-60136748064429634212014-12-08T18:07:00.003+03:002014-12-08T18:08:11.522+03:00Использование библиотеки phpQuery<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: left;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHRKBCD-IClKmtGL4D1MDeN8J78XGLNcnRfpt2vUNpNGdWUoNpOyoQ68zR1aWfzq13azSuub4xIbV_2iijyJ-K5K-cs85LP-DPDNL5Et2rZg0He9gBlEi2S_sBLcTo-TYnQmUE8T8MjG_a/s1600/phpquery.jpg" height="98" style="float: left; margin-right: 10px;" width="320" /></div>
<span style="color: #0000ee;"><span style="color: black;">Использование</span> </span>библиотеки phpQuery <br />
на примере блогов http://habrahabr.ru/<br />
А именно на блогах от mail.ru<br />
Пример научит Вас как правильно загрузить страницу для последующего парсинга и разбора. Очень часто в интернете возникают необходимости разбора страниц. Так вот этот пример показывает как это сделать в 4 строчки кода. С примером можно ознакомится тут <a href="http://any-strike.blogspot.com/p/php-phpquery.html">http://any-strike.blogspot.com/p/php-phpquery.html</a><br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-14382035441786141012014-12-08T15:12:00.001+03:002014-12-08T15:20:15.138+03:00Аудиоплеер на HTML5+CSS3+jQuery+PHP<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: left;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj28aE5Nc7-r-tpvltufu0Xa_i4NgPwoFdsOHz6FVHAEf6wkVWTCH9P9S6r2D4ly0UBXnRs_DTrtPcymYVd1hPLvX-AceD80chTLnICyxs7jocJF2f7bWZctAjOMGXFPocNIb4eRp6eR-mz/s1600/radio.png" height="125" style="float: left; margin-right: 10px;" width="200" /></div>
<br />
Создаем Аудио плеер на сайт.<br />
Используем технологии:<br />
Ajax, CSS3, HTML5, jQuery, php<br />
Просто и со вкусом.<br />
О том как это делать, <a href="http://any-strike.blogspot.com/p/php-jquery-html-5css3.html">можно ознакомится тут</a>.</div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-39094107881357131102014-12-08T13:46:00.004+03:002014-12-08T15:20:53.409+03:00Пример реализации баннерной системы для сайта<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: left;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMXc9UizqI49JF9O8JJpzriAgJ19M___wuGX9JYOj5RcKV0HNRWnpwTBCwsvCJu1HLXG04a2yi-iryDWOPo9qaGLZwkOER9cD_mMzK8ZKKePwysalmrS-GP7h5X3ikG9xki3KnwOZPTuHf/s1600/adsense.png" height="200" style="float: left; margin-right: 10px;" width="200" /></div>
Пример реализации баннерной системы для сайта.<br />
Используется php ядро, jQuery для обработки событий,<br />
нами созданный плагин для jQuery - banners.js который может быть использован как отправная точка в изучении строения<br />
плагинов для jQuery.<br />
Так же реализована простая панель управления.<br />
В последней статье приложен файл с исходным кодом.<br />
Ознакомится можно тут: <a href="http://any-strike.blogspot.com/p/blog-page_7.html">Часть-1</a>, <a href="http://any-strike.blogspot.com/p/php-2.html">Часть-2</a>, <a href="http://any-strike.blogspot.com/p/php-3.html">Част-3</a><br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-60620809457430314712014-12-08T13:39:00.001+03:002014-12-08T15:21:20.890+03:00Система простой авторизации на php<div dir="ltr" style="text-align: left;" trbidi="on">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisJTMmdIXLaHN6WNcZW4iDLKHggXbZfkxRejbpOQdMg0r6-q1lB1Kd1i4hzVna7FTJnAh7FLEx5ggaFVikBkYEJGOpGEhMjGZCPczLeo5QR9VAe15Ihzv25SFNtDWrrStGyC3mVggABOz8/s1600/login.png" style="float: left; margin-right: 10px;" /><br />
Реализован пример простой авторизации средствами PHP<br />
Как урок для начинающих - то что нужно. Объяснена постройка интерфейса и обработки результатов обработки формы.<br />
Ознакомится можно тут: <a href="http://any-strike.blogspot.com/p/blog-page_26.html">Php. Авторизация</a></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-4446304737259164682014-11-26T20:57:00.003+03:002014-11-26T22:55:56.966+03:00Новые планы<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://blog.lingohub.com/wp-content/uploads/2013/06/php_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://blog.lingohub.com/wp-content/uploads/2013/06/php_logo.png" height="160" width="320" /></a></div>
И вот оно случилось! Я вернулся!<br />
Вводится новшество, теперь будут появляться рецепты на php<br />
Информация по настройке apache<br />
И многое другое в Web разработке.<br />
<br />
Публиковать буду в разделе <a href="http://any-strike.blogspot.com/p/php.html">PHP</a></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-90929510510838440922013-07-12T15:32:00.002+04:002014-12-08T15:16:26.761+03:00MS Outlook имя почтового адресса в качестве имени пользователя<div dir="ltr" style="text-align: left;" trbidi="on">
Столкнулся с задачей по изменению огромному количеству пользователей имени пользователя в программе Outlook.<br />
<br />
В чем соль:<br />
Каждый пользователь имеет почтовый адресс, но на сервере для отправки используется учетная запись пользователя.<br />
Пример:<br />
Почтовый адресс: super.puperuser@server.com<br />
авторизация: domen\ivanov.ivan<br />
пароль: **********<br />
<br />
из за перехода на hMail Server поставили задачу заменить domen\****** на запись почтового адреса.<br />
<br />
<a name='more'></a><br /><br />
Народу править много.... да и пешком ходить не охота.<br />
<br />
Реализовал все это на Delphi<br />
<br />
program chMailUser;<br />
uses<br />
SysUtils,<br />
Classes,<br />
Dialogs,<br />
windows,<br />
Variants,<br />
Registry;<br />
const<br />
//По данному пути Outlook хранит свои профили учетных записей<br />
Profiles='Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\';<br />
type<br />
TBuff=array [0..64] of Byte;<br />
<br />
var<br />
KeyExist:TStringList;<br />
i,k:integer;<br />
SysReg:Tregistry;<br />
email,pop3:TBuff;<br />
semail,spop3:string;<br />
flag:boolean;<br />
info : TRegDataInfo;<br />
<br />
<br />
//Процедура которая переберет все учетные записи в поисках Outlook<br />
procedure FindReg(const Key: string);<br />
var<br />
prf:TStringList;<br />
i: integer;<br />
reg:Tregistry;<br />
begin<br />
reg:=Tregistry.Create;<br />
Reg.RootKey:=HKEY_CURRENT_USER;<br />
reg.OpenKey(Key, false);<br />
prf:= tstringlist.Create;<br />
reg.GetKeyNames(prf);<br />
if(prf.Count>0) then<br />
begin<br />
for I := 0 to prf.Count-1 do<br />
begin<br />
FindReg(Key+'\'+prf.Strings[i]);<br />
end;<br />
end<br />
else<br />
begin<br />
if (reg.ValueExists('Email')) and( reg.ValueExists('POP3 User')) then<br />
KeyExist.Add(Key);<br />
end;<br />
reg.CloseKey;<br />
reg.Free;<br />
end;<br />
<br />
begin<br />
KeyExist:=TStringList.Create;<br />
FindReg(Profiles);<br />
for I := 0 to KeyExist.Count-1 do<br />
begin<br />
SysReg:=TRegistry.Create;<br />
SysReg.RootKey:=HKEY_CURRENT_USER;<br />
SysReg.OpenKey(KeyExist.Strings[i], false);<br />
<br />
fillchar(Email,sizeof(email),0);<br />
fillchar(pop3,sizeof(pop3),0);<br />
<br />
SysReg.ReadBinaryData('Email',email,SizeOf(email));<br />
SysReg.ReadBinaryData('POP3 User',pop3,SizeOf(pop3));<br />
semail:='';<br />
spop3:='';<br />
for k := 0 to sizeOf(email)-1 do semail:=semail+InttoHex(email[k],2);<br />
for k := 0 to sizeOf(pop3)-1 do spop3:=spop3+InttoHex(pop3[k],2);<br />
if(semail<>spop3) then<br />
begin<br />
SysReg.WriteBinaryData('POP3 User',Email,SizeOf(Email));<br />
if SysReg.ValueExists('POP3 Use SPA') then<br />
SysReg.DeleteValue('POP3 Use SPA');<br />
end;<br />
SysReg.CloseKey;<br />
SysReg.Free;<br />
end;<br />
KeyExist.Free;<br />
end.<br />
<br />
<br />
Как результат в конце работы программы на компьютере пользователь будет видеть в Outlook<br />
Почта: super.puperuser@server.com<br />
Пользователь:super.puperuser@server.com<br />
Пароль: *******<br />
<br />
После компиляции полученную программу запускаем через скрипт авторизации всем пользователям.<br />
Как результат, на утро все работает по новому =) </div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-31887817544851769042013-07-12T15:21:00.002+04:002014-12-08T15:16:57.769+03:00Будем парсить!<div dir="ltr" style="text-align: left;" trbidi="on">
Часто сталкиваюсь с тем, что приходится разбирать текстовые файлы, как пример:<br />
импорт почтовых адресов, импорт выписки из банка, платежи и .т.д<br />
Файлы имеют разнообразную структуру и разные разделители.<br />
Пример:<br />
<span style="background-color: #cccccc;"><span style="color: blue;"><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">1; Иванов; Иван; Иванович; Украина; Луганская обл; Бойково; д22</span></span></span></span><br />
<span style="background-color: #cccccc;"><span style="color: blue;"><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">2; Сидоров; Сидор;Сидорович;Россия;Какаято обл;Какой то город;Адресс</span></span></span></span><br />
<br />
и того мы имеем структуру:<br />
Код <br />
Фамилия<br />
Имя<br />
Отчество<br />
Страна<br />
Область<br />
Город<br />
Адресс<br />
<br />
<a name='more'></a><br /><br />
В разных файлах структура может отличатся и количество полей быть разным.<br />
<br />
Как же нам написать корректный парсер для конкретных целей?<br />
<br />
Я не буду в даватся в тонкости программирования, а просто подскажу идею которую каждый сможет использовать по своему, и так.<br />
<br />
Используем Delphi.<br />
нам понадобится объект типа TStringList, который благополучно разбивает строку на подстроки<br />
Собственно что мы и будем делать.<br />
В каждой полученной с файла строке меняем разделитель на символ конца строки #13<br />
после полученную строку помещаем в StringList<br />
где он разбивает её на набор строк.<br />
Теперь у нас каждая строка является полем записи.<br />
Ниже пример кода: <br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"><b>Procedure TForm2.Button1Click(Sender: TObject);<br />const</b><br /> //Разделитель полей в текстовом файле<br /> delemiter=';';<br /><b>var</b><br /> //Ссылка на файл<br /> TxtFile:System.TextFile;<br /> //Храним имя файла<br /> FileName:String;<br /> //Объект который и будет использоватся как парсер<br /> Parser:TStringList;<br /> //Буфер чтения<br /> Buffer:String;<br /><b>begin</b><br /> //Как пример выбора файла<br /> FileName:='c:\data.csv';<br /> //Подготавливаемся к работе с файлом<br /> <b>AssignFile</b>(TxtFile,FileName);<br /> //Нам достаточно только чтение<br /> <b>Reset</b>(TxtFile);<br /> //Подготавливаем набор строк<br /> Parser:=TStringList.Create;<br /> //Разбераем<br /> <b>while Not EOF(</b>TxtFile<b>) do</b><br /> <b>begin</b><br /> //Считываем строчку с файла<br /> <b>ReadLn</b>(TxtFile,Buffer);<br /> //нормализуем<br /> Buffer:=<b>StringReplace</b>(Buffer,delemiter,#13,[rfReplaceAll]);<br /> //Получаем строку для разбора<br /> Parser.Text:=Buffer;<br /> //Теперь мы о строке можем узнать практически все<br /> //Parser.Count - количество столбцов<br /> //Parser.Strings[0..(Parser.Count-1)] - Массив в котором можно обратится к полю<br /> //...<br /> //Выполняем необходимые действия с разобранной строкой<br /> //...<br /> <b>end;</b><br /> //Освобождаем объект<br /> Parser.Free;<br /> //Закрываем файл<br /> <b>CloseFile(</b>TxtFile);<br /><b>end;</b></span></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-69678713891800899342013-07-12T14:06:00.002+04:002014-12-08T15:17:40.876+03:00Гибкий генератор отчетов 2<div dir="ltr" style="text-align: left;" trbidi="on">
продолжение <a href="http://any-strike.blogspot.com/2013/02/blog-post.html">статьи</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=7856465511966343201" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
Долгое время был занят по работе, но теперь снова есть время продолжить начатое.<br />
Время проходит и ничто не стоит на месте.<br />
<br />
Базу данных непернес с Paradox на платформу СУБД MySQL, для этого пришлось написать конвертер, но об этом в другой раз.<br />
<br />
Вернемся к тому что сам отчет строится из 3х файлов:<br />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>RU</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:DontVertAlignCellWithSp/>
<w:DontBreakConstrainedForcedTables/>
<w:DontVertAlignInTxbx/>
<w:Word11KerningPairs/>
<w:CachedColBalance/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><br />
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Обычная таблица";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
</style>
<![endif]-->
<br />
<div class="MsoListParagraphCxSpFirst" style="margin-left: 53.4pt; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">1)<span style="font: 7.0pt "Times New Roman";">
</span></span></span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;"><</span>файл</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">>.SQL<span style="mso-spacerun: yes;"> </span></span></b></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 70.8pt; mso-add-space: auto;">
Это файл <span lang="EN-US" style="mso-ansi-language: EN-US;">SQL</span><span lang="EN-US"> </span>запроса к базе данных, именно вернувшийся набор данных и
будет дальше рассматриваться программой.</div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 53.4pt; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<b style="mso-bidi-font-weight: normal;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">2)<span style="font: 7.0pt "Times New Roman";"> </span></span></span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;"><</span>файл</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">>.XLS</span></b></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 70.8pt; mso-add-space: auto;">
Это файл <span lang="EN-US" style="mso-ansi-language: EN-US;">MS</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Excel</span><span lang="EN-US"> </span>составленный по определенному шаблону именно в него будут
помещены данные полученные запросом, но именно в такой форме как указано в
шаблоне. Фактически <span lang="EN-US" style="mso-ansi-language: EN-US;">Excel </span>это
дизайнер выходного бланка отчета.</div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 53.4pt; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<b style="mso-bidi-font-weight: normal;"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">3)<span style="font: 7.0pt "Times New Roman";"> </span></span></span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;"><</span>файл</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">>.INI</span></b></div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 70.8pt; mso-add-space: auto;">
Это
файл <span lang="EN-US" style="mso-ansi-language: EN-US;">Param</span><span lang="EN-US"> </span>имеет расширение .<span lang="EN-US" style="mso-ansi-language: EN-US;">ini</span><span lang="EN-US"> </span>и служит файлом дополнительных
параметров, которые могут использоваться на разных этапах генерации отчета.</div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 70.8pt; mso-add-space: auto;">
<br />
<a name='more'></a><br /></div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 70.8pt; text-align: left;">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--></div>
<br />
<div class="MsoListParagraphCxSpLast" style="margin-left: 70.8pt; text-align: left;">
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves>false</w:TrackMoves>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>RU</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:DontVertAlignCellWithSp/>
<w:DontBreakConstrainedForcedTables/>
<w:DontVertAlignInTxbx/>
<w:Word11KerningPairs/>
<w:CachedColBalance/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Обычная таблица";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
table.MsoTableMediumGrid1Accent5
{mso-style-name:"Средняя сетка 1 - Акцент 5";
mso-tstyle-rowband-size:1;
mso-tstyle-colband-size:1;
mso-style-priority:67;
mso-style-unhide:no;
border:solid #78C0D4 1.0pt;
mso-border-themecolor:accent5;
mso-border-themetint:191;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:1.0pt solid #78C0D4;
mso-border-insideh-themecolor:accent5;
mso-border-insideh-themetint:191;
mso-border-insidev:1.0pt solid #78C0D4;
mso-border-insidev-themecolor:accent5;
mso-border-insidev-themetint:191;
mso-tstyle-shading:#D2EAF1;
mso-tstyle-shading-themecolor:accent5;
mso-tstyle-shading-themetint:63;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
table.MsoTableMediumGrid1Accent5FirstRow
{mso-style-name:"Средняя сетка 1 - Акцент 5";
mso-table-condition:first-row;
mso-style-priority:67;
mso-style-unhide:no;
mso-ansi-font-weight:bold;
mso-bidi-font-weight:bold;}
table.MsoTableMediumGrid1Accent5LastRow
{mso-style-name:"Средняя сетка 1 - Акцент 5";
mso-table-condition:last-row;
mso-style-priority:67;
mso-style-unhide:no;
mso-tstyle-border-top:2.25pt solid #78C0D4;
mso-tstyle-border-top-themecolor:accent5;
mso-tstyle-border-top-themetint:191;
mso-ansi-font-weight:bold;
mso-bidi-font-weight:bold;}
table.MsoTableMediumGrid1Accent5FirstCol
{mso-style-name:"Средняя сетка 1 - Акцент 5";
mso-table-condition:first-column;
mso-style-priority:67;
mso-style-unhide:no;
mso-ansi-font-weight:bold;
mso-bidi-font-weight:bold;}
table.MsoTableMediumGrid1Accent5LastCol
{mso-style-name:"Средняя сетка 1 - Акцент 5";
mso-table-condition:last-column;
mso-style-priority:67;
mso-style-unhide:no;
mso-ansi-font-weight:bold;
mso-bidi-font-weight:bold;}
table.MsoTableMediumGrid1Accent5OddColumn
{mso-style-name:"Средняя сетка 1 - Акцент 5";
mso-table-condition:odd-column;
mso-style-priority:67;
mso-style-unhide:no;
mso-tstyle-shading:#A5D5E2;
mso-tstyle-shading-themecolor:accent5;
mso-tstyle-shading-themetint:127;}
table.MsoTableMediumGrid1Accent5OddRow
{mso-style-name:"Средняя сетка 1 - Акцент 5";
mso-table-condition:odd-row;
mso-style-priority:67;
mso-style-unhide:no;
mso-tstyle-shading:#A5D5E2;
mso-tstyle-shading-themecolor:accent5;
mso-tstyle-shading-themetint:127;}
</style>
<![endif]-->
</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><u><span lang="EN-US" style="font-size: 14.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">SQL</span></u></i></b><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><u><span style="font-size: 14.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;"> файл
запроса</span></u></i></b></div>
<div class="MsoNormal">
<span style="mso-tab-count: 1;"> </span>Файл
запроса содержит текст в формате <span lang="EN-US" style="mso-ansi-language: EN-US;">ANSI</span><span lang="EN-US"> </span>написанный на языке запросов <span lang="EN-US" style="mso-ansi-language: EN-US;">SQL</span><span lang="EN-US"> </span>поддерживаемый
версией <span lang="EN-US" style="mso-ansi-language: EN-US;">MySQL</span>. За
дополнительной документацией по отличиям языка именно в этой СУБД можно
обратится на сайт производителя <span lang="EN-US" style="mso-ansi-language: EN-US;">MySQL</span>.</div>
<div class="MsoNormal">
Примером файла запроса будет служить следующий фрагмент:</div>
<div class="MsoNormal" style="line-height: normal;">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="background: silver; font-size: 14.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt; mso-highlight: silver;">select </span></b><span lang="EN-US" style="background: silver; font-size: 14.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt; mso-highlight: silver;">main.prim,main.ser,
main.dataP,main.nal,s_kart.caption,s_stat.stat<span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;">from</b>
main <b style="mso-bidi-font-weight: normal;">left join </b>s_kart on
(main.kart=s_kart.id)<b style="mso-bidi-font-weight: normal;"> left join </b>s_stat
on (main.stat=s_stat.id)</span><span lang="EN-US" style="font-size: 14.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;"></span></div>
<div class="MsoNormal">
<a href="https://www.blogger.com/blogger.g?blogID=7856465511966343201" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=7856465511966343201" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a>Данный запрос вернет таблицу </div>
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableMediumGrid1Accent5" style="border-collapse: collapse; border: none; mso-border-alt: solid #78C0D4 1.0pt; mso-border-themecolor: accent5; mso-border-themetint: 191; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;">
<tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: -1;">
<td style="background: #D2EAF1; border: solid #78C0D4 1.0pt; mso-background-themecolor: accent5; mso-background-themetint: 63; mso-border-themecolor: accent5; mso-border-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 5;">
<b><span lang="EN-US" style="mso-ansi-language: EN-US;">PRIM</span></b></div>
</td>
<td style="background: #D2EAF1; border-left: none; border: solid #78C0D4 1.0pt; mso-background-themecolor: accent5; mso-background-themetint: 63; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-themecolor: accent5; mso-border-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 1;">
<b><span lang="EN-US" style="mso-ansi-language: EN-US;">SER</span></b></div>
</td>
<td style="background: #D2EAF1; border-left: none; border: solid #78C0D4 1.0pt; mso-background-themecolor: accent5; mso-background-themetint: 63; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-themecolor: accent5; mso-border-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 1;">
<b><span lang="EN-US" style="mso-ansi-language: EN-US;">DATAP</span></b></div>
</td>
<td style="background: #D2EAF1; border-left: none; border: solid #78C0D4 1.0pt; mso-background-themecolor: accent5; mso-background-themetint: 63; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-themecolor: accent5; mso-border-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 1;">
<b><span lang="EN-US" style="mso-ansi-language: EN-US;">NAL</span></b></div>
</td>
<td style="background: #D2EAF1; border-left: none; border: solid #78C0D4 1.0pt; mso-background-themecolor: accent5; mso-background-themetint: 63; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-themecolor: accent5; mso-border-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 1;">
<b><span lang="EN-US" style="mso-ansi-language: EN-US;">CAPTION</span></b></div>
</td>
<td style="background: #D2EAF1; border-left: none; border: solid #78C0D4 1.0pt; mso-background-themecolor: accent5; mso-background-themetint: 63; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-themecolor: accent5; mso-border-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.8pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 1;">
<b><span lang="EN-US" style="mso-ansi-language: EN-US;">STAT</span></b></div>
</td>
</tr>
<tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes;">
<td style="background: #A5D5E2; border-top: none; border: solid #78C0D4 1.0pt; mso-background-themecolor: accent5; mso-background-themetint: 127; mso-border-themecolor: accent5; mso-border-themetint: 191; mso-border-top-alt: solid #78C0D4 1.0pt; mso-border-top-themecolor: accent5; mso-border-top-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 68;">
<b>Данные</b></div>
</td>
<td style="background: #A5D5E2; border-bottom: solid #78C0D4 1.0pt; border-left: none; border-right: solid #78C0D4 1.0pt; border-top: none; mso-background-themecolor: accent5; mso-background-themetint: 127; mso-border-bottom-themecolor: accent5; mso-border-bottom-themetint: 191; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-right-themecolor: accent5; mso-border-right-themetint: 191; mso-border-top-alt: solid #78C0D4 1.0pt; mso-border-top-themecolor: accent5; mso-border-top-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 64;">
Данные</div>
</td>
<td style="background: #A5D5E2; border-bottom: solid #78C0D4 1.0pt; border-left: none; border-right: solid #78C0D4 1.0pt; border-top: none; mso-background-themecolor: accent5; mso-background-themetint: 127; mso-border-bottom-themecolor: accent5; mso-border-bottom-themetint: 191; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-right-themecolor: accent5; mso-border-right-themetint: 191; mso-border-top-alt: solid #78C0D4 1.0pt; mso-border-top-themecolor: accent5; mso-border-top-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 64;">
Данные</div>
</td>
<td style="background: #A5D5E2; border-bottom: solid #78C0D4 1.0pt; border-left: none; border-right: solid #78C0D4 1.0pt; border-top: none; mso-background-themecolor: accent5; mso-background-themetint: 127; mso-border-bottom-themecolor: accent5; mso-border-bottom-themetint: 191; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-right-themecolor: accent5; mso-border-right-themetint: 191; mso-border-top-alt: solid #78C0D4 1.0pt; mso-border-top-themecolor: accent5; mso-border-top-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 64;">
Данные</div>
</td>
<td style="background: #A5D5E2; border-bottom: solid #78C0D4 1.0pt; border-left: none; border-right: solid #78C0D4 1.0pt; border-top: none; mso-background-themecolor: accent5; mso-background-themetint: 127; mso-border-bottom-themecolor: accent5; mso-border-bottom-themetint: 191; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-right-themecolor: accent5; mso-border-right-themetint: 191; mso-border-top-alt: solid #78C0D4 1.0pt; mso-border-top-themecolor: accent5; mso-border-top-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.75pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 64;">
Данные</div>
</td>
<td style="background: #A5D5E2; border-bottom: solid #78C0D4 1.0pt; border-left: none; border-right: solid #78C0D4 1.0pt; border-top: none; mso-background-themecolor: accent5; mso-background-themetint: 127; mso-border-bottom-themecolor: accent5; mso-border-bottom-themetint: 191; mso-border-left-alt: solid #78C0D4 1.0pt; mso-border-left-themecolor: accent5; mso-border-left-themetint: 191; mso-border-right-themecolor: accent5; mso-border-right-themetint: 191; mso-border-top-alt: solid #78C0D4 1.0pt; mso-border-top-themecolor: accent5; mso-border-top-themetint: 191; padding: 0cm 5.4pt 0cm 5.4pt; width: 79.8pt;" valign="top" width="106"><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-yfti-cnfc: 64;">
Данные</div>
</td>
</tr>
</tbody></table>
<div class="MsoNormal">
К названию возвращаемых столбцов нужно относится внимательно
так как для передачи в форму отчета<span style="mso-spacerun: yes;">
</span>необходимо будет их указать.</div>
<div class="MsoNormal">
Дополнительно <span lang="EN-US" style="mso-ansi-language: EN-US;">SQL</span><span lang="EN-US"> </span>запрос был расширен новым
функционалом поддерживаемым только Генератором отчетов. Можно использовать
такие функции:</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;">#[</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">GETDATE</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;">][Текст сообщения]# </span></b>- будет выведен запрос
на ввод даты при этом показан текст сообщения</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;">#[</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">GETTABLE</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;">][</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">Table</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;">:</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">Field</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;"> </span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">View</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;">:</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">Field</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;"> </span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">Result</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;">:Сообщение]#</span></b><span style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;"> </span>-Будет показан список в
котором можно выбрать одно значение</div>
<div class="MsoNormal">
<span style="mso-tab-count: 1;"> </span>Параметры<span style="mso-spacerun: yes;"> </span></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="mso-tab-count: 1;"> </span><b style="mso-bidi-font-weight: normal;">Table</b></span> – имя таблицы из которой берутся данные</div>
<div class="MsoNormal">
<span style="mso-tab-count: 1;"> </span><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Field</span><span lang="EN-US"> </span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">View</span></b> – поле
которое будет показано пользователю для выбора</div>
<div class="MsoNormal">
<span style="mso-tab-count: 1;"> </span><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">FieldResult</span></b> – поле которое вернется в <span lang="EN-US" style="mso-ansi-language: EN-US;">SQL</span><span lang="EN-US"> </span>запрос как
результат </div>
<div class="MsoNormal">
<span style="mso-tab-count: 1;"> </span><b style="mso-bidi-font-weight: normal;">Сообщение</b> – Текст который будет показан
пользователю</div>
<div class="MsoNormal">
Пример<span lang="EN-US" style="mso-ansi-language: EN-US;">:</span></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>select *
from test where date='#[GETDATE][</span>Введите</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>текущую</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>дату</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">]#'</span></b></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">select * from test where id_Printer=#[GETTABLE][spr_printers:printer_name:printer_id:</span>Выберите</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>модель</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>принтера</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>для</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>обслуживания</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">]#</span></b></div>
<div class="MsoNormal">
После обработки функции запрос будет выглядеть так:</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">select * from test where date='2012-07-01'</span></b></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">select * from test where id_Printer=24</span></b><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><u><span lang="EN-US" style="font-size: 14.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;"><br clear="all" style="mso-special-character: line-break; page-break-before: always;" />
</span></u></i></b></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><u><span lang="EN-US" style="font-size: 14.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">XLS </span></u></i></b><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><u><span style="font-size: 14.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;">файл
дизайна отчета</span></u></i></b></div>
<div class="MsoNormal" style="text-indent: 35.4pt;">
Файл<span style="mso-spacerun: yes;"> </span>дизайна отчета подготавливается в программе <span lang="EN-US" style="mso-ansi-language: EN-US;">MS</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Excel</span><span lang="EN-US"> </span>на
текущий момент генератор отчетов благополучно работает с форматами
2003/2007<span style="mso-spacerun: yes;"> </span>года, но уверен что и
последующие выпуски будут работать нормально, так как кардинальных изменений в
механизме быть не может.</div>
<div class="MsoNormal" style="text-indent: 35.4pt;">
<b style="mso-bidi-font-weight: normal;">Файл дизайна строится по такой схеме:</b></div>
<div class="MsoNormal">
Весь отчет делится на 3 части: Шапка, Тело отчета, Подвал</div>
<div class="MsoNormal">
Именно по этому 1 столбец таблицы является служебным. </div>
<div class="MsoNormal">
Для указания разделения блоков в первом столбце указываются
служебные слова: <span lang="EN-US" style="mso-ansi-language: EN-US;"></span></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Title</span></b><span lang="EN-US" style="mso-ansi-language: EN-US;"> –</span>Шапка<span lang="EN-US" style="mso-ansi-language: EN-US;"></span></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Line</span></b> – Тело таблицы. Будет
повторятся столько раз сколько строк вернет <span lang="EN-US" style="mso-ansi-language: EN-US;">SQL</span><span lang="EN-US"> </span>запрос</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Foot</span></b> - подвал</div>
<div class="MsoNormal" style="text-indent: 35.4pt;">
Примером шаблона может служить
следующая таблица<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQl-kgg6F0WlSAR6M1H_IptEGbEqKIS0iM1_3euGRlUYTcNFR0Jv_7f6XXklkorJIZ1zRWg6VKR8OUG09hJ1Eczv7BJ1JanLMG7zyIWKeIn4lArD1V43U14y3hz_QsnVDIiW5u9pha6oLz/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQl-kgg6F0WlSAR6M1H_IptEGbEqKIS0iM1_3euGRlUYTcNFR0Jv_7f6XXklkorJIZ1zRWg6VKR8OUG09hJ1Eczv7BJ1JanLMG7zyIWKeIn4lArD1V43U14y3hz_QsnVDIiW5u9pha6oLz/s1600/1.png" height="321" width="640" /></a></div>
</div>
<div class="MsoNormal">
<span style="mso-fareast-language: RU; mso-no-proof: yes;"></span></div>
<div class="MsoNormal">
Поля из <span lang="EN-US" style="mso-ansi-language: EN-US;">SQL</span><span lang="EN-US"> </span>запроса передаются в отчет специальной дериктивой <b style="mso-bidi-font-weight: normal;">#ПОЛЕ# </b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;"></span></b></div>
<div class="MsoNormal">
Как мы видим <b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">PRIM</span></b><span lang="EN-US"> </span>это
поле таблицы которое вернул запрос, но для того что бы его учитывать обрамляем
решетками #</div>
<div class="MsoNormal">
Кроме того есть ряд дополнительных функций которые можно
использовать </div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;">#</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">FCURRENTDATE</span>#</b> -в это место будет вставлена текущая дата</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;">#</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">FCOUNTER</span>#</b> -счетчик номеров записей, будет выведено номер по
порядку.</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;">#</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">FCOUNT</span>#</b> - вставит количество записей вернувшееся запросом</div>
<span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; line-height: 115%; mso-ansi-language: RU; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;"><br clear="all" style="mso-special-character: line-break; page-break-before: always;" />
</span>
<br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><u><span lang="EN-US" style="font-size: 14.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-size: 11.0pt;">INI</span></u></i></b><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><u><span style="font-size: 14.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;"> файл
параметров</span></u></i></b></div>
<div class="MsoNormal">
В файле параметров записываются константы которые можно
использовать в <span lang="EN-US" style="mso-ansi-language: EN-US;">MS</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Excel</span><span lang="EN-US"> </span>шаблоне</div>
<div class="MsoNormal">
Формат записи:</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;">КОНСТАНТА = ЗНАЧЕНИЕ</b></div>
<div class="MsoNormal">
Пример:</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">FIRMA</span> = Наша фирма</b></div>
<div class="MsoNormal">
Для того что бы эта константа появилась в отчете<span style="mso-spacerun: yes;"> </span>необходимо в <span lang="EN-US" style="mso-ansi-language: EN-US;">XLS</span><span lang="EN-US"> </span>шаблоне
указать #<span lang="EN-US" style="mso-ansi-language: EN-US;">FIRMA</span>#</div>
<div class="MsoNormal">
Кроме того есть<span style="mso-spacerun: yes;">
</span>служебная функция которая объявляется 3 параметрами. При обнаружении
этой функции <span lang="EN-US" style="mso-ansi-language: EN-US;">Excel</span><span lang="EN-US"> </span>выполнит «Промежуточные итоги».<span style="mso-spacerun: yes;"> </span>Для использования этой возможности объявляем
3 константы</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">ONCHANGE</span></b><span lang="EN-US" style="mso-ansi-language: EN-US;">=<</span>число<span lang="EN-US" style="mso-ansi-language: EN-US;">></span></div>
<div class="MsoNormal">
<span style="mso-tab-count: 1;"> </span>При
изменении в столбце <число><span style="mso-spacerun: yes;">
</span>таблицы <span lang="EN-US" style="mso-ansi-language: EN-US;">Excel</span><span lang="EN-US"> </span></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">ONACTION</span></b>=< <span lang="EN-US" style="mso-ansi-language: EN-US;">SUMM</span> | <span lang="EN-US" style="mso-ansi-language: EN-US;">COUNT</span>></div>
<div class="MsoNormal">
<span style="mso-tab-count: 1;"> </span>Будет
выполнено действие <span lang="EN-US" style="mso-ansi-language: EN-US;">SUMM</span>-
сумма, <span lang="EN-US" style="mso-ansi-language: EN-US;">COUNT</span> - количество
</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">ONRESULT</span></b><span lang="EN-US" style="mso-ansi-language: EN-US;">=<</span>число<span lang="EN-US" style="mso-ansi-language: EN-US;">></span></div>
<div class="MsoNormal">
<span style="mso-tab-count: 1;"> </span>По
столбцу <span lang="EN-US" style="mso-ansi-language: EN-US;"><</span>число<span lang="EN-US" style="mso-ansi-language: EN-US;">></span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;"></span></div>
<div class="MsoNormal">
И добавлена строка содержащая информацию по выделенному
блоку.</div>
<div class="MsoNormal">
Пример:</div>
<div class="MsoNormal">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqLSDBb56pGGXZMclDI1kzka6MMLupupYXQk6Dr9uVyhgCf8BPQWLI_VvPMqqWwPjyVjNxSYdiW51EyT0u3YnoR0NN_AKrF6aphZvmFYn2TZ2J9AKMRHShZwlSRfDpvAjxinKmEgh8bldM/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqLSDBb56pGGXZMclDI1kzka6MMLupupYXQk6Dr9uVyhgCf8BPQWLI_VvPMqqWwPjyVjNxSYdiW51EyT0u3YnoR0NN_AKrF6aphZvmFYn2TZ2J9AKMRHShZwlSRfDpvAjxinKmEgh8bldM/s1600/2.png" height="322" width="640" /></a></div>
<span style="mso-fareast-language: RU; mso-no-proof: yes;"><br /></span></div>
<div class="MsoNormal">
<br /></div>
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-17380605138450306732013-02-05T16:13:00.002+04:002014-02-14T19:43:22.594+04:00Гибкий генератор отчетов<div dir="ltr" style="text-align: left;" trbidi="on">
Постоянно требуется реализовать какой либо новый отчет для одной моей программы (после модернизации я о ней расскажу). Столкнулся с тем что очень неудобно каждый раз переделывать сам отчет, внешний вид, все это стыковать и кое как выбрасывать через стандартные средства среды Delphi пользователю.<br />
<br />
Решил сделать универсальное средство, которое позволило бы не переделывать каждый раз программу.<br />
<br />
<i><u>С чего начать?</u></i><br />
Решил что SQL самый гибкий и доступный язык который только можно использовать для формирования отчетной таблицы, придумывать новый интерпретатор не стал, так как многие знакомы с SQL и литературы по нему море.<br />
<br />
<i><u>Куда выводить?</u></i><br />
Вывод информации полученной SQL запросом должен быть грамотным и позволять вносить изменения не переделывая саму программу. Долго колебался между Rave, FastReport Free но решение пришло само собой. Видя что пользователи постоянно работают в Microsoft Excel решил не обучать их премудростям новых сред а использовать саму среду Excel тем более что она доступна как OLE с плюсом VBA.<br />
<br />
<i><u>А как же настраивать?</u></i><br />
Готовые отчеты хотелось бы конфигурировать, но использовать дополнительные модули? Зачем? Ничего шифровать и bin-арить не будем используем обычный ini файл, так что кроме блокнота ничего и не понадобится.<br />
<br />
<i><u>Как же все связать и заставить работать?</u></i><br />
Как всегда( а было уже много раз) на помощь приходит среда быстрой разработки Delphi.<br />
Исходя из всего выше сказанного принимаем решение использовать в отчете 3 файла:<br />
<имя>.xls - шаблон формы<br />
<имя>.ini - параметры для тонкой настройки<br />
<имя>.sql - запрос который вернет данные<br />
Сел с нуля писать связку Приложение+OLE VBA MS Excel, однако goooogle-в интернете наткнулся на очень интересный компонент a7rexcel который оказался бесплатным, о нем можно почитать тут <a href="http://a7in.com/delphi/">http://a7in.com/delphi/</a> (Спасибо Вам ребята за идею) используя его как скелет для связывания с Excel очень быстро реализовал переброс данных.<br />
<br />
Программа из которой берется информация хранит данные в Paradox таблицах, по этой причине использую BDE для доступа к данным, ODBC ни в какую не захотел отображать кириллицу а время поджимало.<br />
<br />
Однако хочется что бы генератор отчетов мог задавать диапазоны дат, выбирать данные из списка, по этому принимаю решение дополнить SQL язык своими тегами:<br />
<a href="https://www.blogger.com/blogger.g?blogID=7856465511966343201" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=7856465511966343201" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a>
<br />
В запросе можно использовать функции которые вызывают диалоговые окна перед выполнением запроса<br />
все переменные запроса строятся по формату<br />
#[FUNCTION][MESSAGE]#<br />
пример<br />
select * from test where date='#[GETDATE][Введите текущую дату]#'<br />
<br />
Список функций и параметров<br />
#[GETDATE][message]# - запрос на ввод даты<br />
#[GETTABLE][Table:Field View:Field Result:Сообщение]# - Показывает содержимое справочника с указанием какое поле показать и какое поле вернуть как результат, возвращает одно значение<br />
<br />
что значительно расширило возможности программы.<br />
<br />
Так же дополнил Excel шаблоны функциями в самом Excel-е<br />
достаточно в ячейке указать константу и она будет заменена<br />
<br />
#FCURRENTDATE# - вставляет текущую дату<br />
#FCOUNTER# - вставляет номер записи, счетчик, номер по порядку<br />
#FCOUNT# - выводит количество записей<br />
<br />
Отчет в строится из 3х блоков Шапка, Набор данных и Пол.<br />
<br />
Title - Заголовок<br />
Line - выводимый набор данных, в нем в качестве параметров происходит поиск полей таблицы<br />
Foot - Подвал отчета<br />
<br />
<br />
статья получается большая, <a href="http://any-strike.blogspot.com/2013/07/2.html">продолжение следует</a>.<br />
<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-45846520133418304852012-12-19T11:41:00.001+04:002012-12-19T11:41:49.508+04:00BDE Paradox переносим в MySQL<div dir="ltr" style="text-align: left;" trbidi="on">
В ходе работы возникла необходимость переноса базы данных старого приложения разработанного в одной из первых версий Delphi на другую платформу, более бесплатную и максимально гибкую для модернизации - то есть в PHP.<br />
<br />
После анализа базы данных было выяснено что база формата Paradox, что само по себе не плохо, но вот кодировку выхватить все никак не получалось, никакими тулзами.<br />
<br />
Как задача базу Paradox перенести на серверную платформу с СУБД MySQL.<br />
<br />
Прямых конвертеров, тем более бесплатных не нашлось, пришлось писать все самому.<br />
<br />
Что делает программа:<br />
1. Анализирует структуру таблицы Paradox после чего создает аналогичную структуру в SQL запросе.<br />
2. Подключается к MySQL серверу к указанной базе, где создает таблицу с таким же именем как и таблица Paradox.<br />
3. После создания таблицы предлагается перенос данных.<br />
<br />
Для доступа к таблицам Paradox необходимо иметь установленное ПО BDE(Borland DataBase Engine).<br />
Для доступа к серверу MySQL необходима DLL библиотека LIBMYSQL.DLL которую можно взять в папке BIN установленного сервера, данную библиотеку нужно разместить в рабочем каталоге программы или же в [Диск]:\windows\system\ тогда библиотека будет доступна всем приложениям.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoDK3fnCA0TYFjYfT0fP-LhARoUc_m8tHFAoX5L66GomuVPoibZDPK1p_VKZSElZGR93pdGFKsosGQUcAKSM7m8bHNFYgudSnw3u8j14qC_iwWAMlBDR9MbUy0TppihoWTZWNvahgoulhB/s1600/convertor.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoDK3fnCA0TYFjYfT0fP-LhARoUc_m8tHFAoX5L66GomuVPoibZDPK1p_VKZSElZGR93pdGFKsosGQUcAKSM7m8bHNFYgudSnw3u8j14qC_iwWAMlBDR9MbUy0TppihoWTZWNvahgoulhB/s1600/convertor.png" height="400" width="317" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
После запуска программы указываем настройки подключения к MySQL серверу, указываем таблицу Paradox и нажимаем кнопку импортировать, отвечаем на ряд вопросов и имеем готовую таблицу в MySQL - задача решена.<br />
готовую программу можно взять тут <a href="https://docs.google.com/open?id=0B888Vt6ak9afeXQtTS04UkY1Q1E">https://docs.google.com/open?id=0B888Vt6ak9afeXQtTS04UkY1Q1E</a><br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-14918622078140506862012-12-04T11:44:00.003+04:002012-12-04T11:44:24.076+04:00Запрет запуска программ<div dir="ltr" style="text-align: left;" trbidi="on">
Я не вредный программист, но иногда бывают случаи когда необходимо сделать так, что бы что то не работало. И вот тут на выручку приходит программирование.<br />
<br />
Все началось с того что на работе огромный парк техники. И многие используют её не совсем так как положено в рабочее время( Пасьянсы, Сапер, MostWanted,Counter Strike и т.д). И вот родилась она - задача. <br />
Как не банально задача проста, необходимо исключить запуск некоторых приложений, а так как пользователи умудряются переименовывать exe файлы дабы администратор случайно на них не наткнулся ... то приходится использовать радикальные меры.<br />
<br />
И так, что мы имеем? Может быть запущена "игра" исполняемый файл которой может быть переименован.<br />
<br />
Ладно, запускаем Delphi и начинаем:<br />
<br />
Несмотря на то, что исполняемый файл и переименован но при компиляции приложению, а точнее его главному окну был дан заголовок, вот он то нам и надо.<br />
Вспоминаем WinAPI и начинаем кодить.<br />
Логика получается примерно такая:<br />
1) Имеем список шаблонов/маск заголовка окна, к примеру "Блокнот", запускам блокнот и наблюдаем<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf2MHMTw1plRjjNC46D-7wyQMF5Lnvg-4fc819FGuUcF6cWiBVEX9dO5gGunUYSUiDniDaMa4AYZH1F8j3ABsEd2QDnKZBFNFEwY8qoA76i2VWIazhLsHAUOczrnF4r5teglOlJxitH_ph/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf2MHMTw1plRjjNC46D-7wyQMF5Lnvg-4fc819FGuUcF6cWiBVEX9dO5gGunUYSUiDniDaMa4AYZH1F8j3ABsEd2QDnKZBFNFEwY8qoA76i2VWIazhLsHAUOczrnF4r5teglOlJxitH_ph/s400/Untitled.png" width="400" /></a></div>
2) Зная часть Caption-а нужного нам окна, переберем все ВИДИМЫЕ окна системы и сверим их с файлом шаблона.<br />
<br />
3) Если нашлось нужное нам окно - закрываем его.<br />
4) А пользователю можно выдать сообщение, нечто вроде "Не стоит тут играться".<br />
<br />
Для себя же добавим такие удобства как:<br />
1) Показывать/Не показывать иконку в трее<br />
2) Доступ к всплывающему меню программы<br />
3) Ведение лога<br />
<br />
когда все готово, запускаем программу у себя, будут созданы пустые фалы конфигурации.<br />
Закрываем программу, а вот файлы конфигурации осторожно заполняем, дабы не написать "explorer" как маску закрываемого приложения.<br />
<br />
Ну вот все и готово для наших любимых пользователей.<br />
<br />
Теперь размещаем программу на сетевом диске где у пользователей есть права только на чтение, выкладываем туда программу и конфигурационные файлы.<br />
Всем пользователям в скрипт запуска операционной системы добавляем запуск нашей программы и..... и все, после перезагрузки наша программа регулярно будет проверять что же запущено у пользователя.<br />
<br />
Уже готовую программу можно взять тут <a href="https://docs.google.com/open?id=0B888Vt6ak9afeTg0Snp3LUNtMEE">https://docs.google.com/open?id=0B888Vt6ak9afeTg0Snp3LUNtMEE</a><br />
<br />
Но стоит всегда помнить, никогда не делайте того что не сможете отменить или вернуть назад.<br />
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-46800662922229495892012-12-04T11:21:00.003+04:002012-12-04T11:21:30.949+04:00Удаленные службы Windows<div dir="ltr" style="text-align: left;" trbidi="on">
Дело было ради шутки, в общем сидя в кабинете с коллегами решили подшутить над пользователем Х. Весь сыр бор из за того, что данный пользователь очень трепетно относится к своему работающему программному обеспечению, и можно сказать 2/3 рабочего дня изучает диспетчер задач(ProcessExplorer) в поисках новых процессов.<br />
Свои процессы наверное уже заучил наизусть. По этому поводу установить на компьютер бэкдор не представляется возможно, да и антивирус его быстренько обнаружит.<br />
Решено было средствами ОС Форточка заставить компьютер вести себя подозрительно.<br />
Но первые же попытки залогинится на удаленной машине выпали в системный журнал, что было не очень хорошо.<br />
Но решение как всегда нашлось.<br />
<br />
В очередной раз запустив Delphi решил использовать в системе такое интересное место как Службы.<br />
Алгоритм получился такой:<br />
1) Зная логин и пароль локального администратора( а пользователь то работает под доменным) можем залогинится без подозрений.<br />
2) Используя WinAPI и RPC получаем список удаленных служб.<br />
3) После получения списка служб и зная как они называются в удаленной системе мы можем с ними сделать все стандартные манипуляции Стоп/Старт<br />
<br />
что собственно и было нужно.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW8lY6nRSxrzfvHevn_1NOWAy667Yg6TD4N5X4YWhhiN0W03CWwUKTp7G7k_hwmP7jYc0avSTc6lOhRtqVwGhqij1DeegHx7KEROnu2A8MTl1donCPkba4E-Ap0b2COusP3_UPre2vv7wj/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW8lY6nRSxrzfvHevn_1NOWAy667Yg6TD4N5X4YWhhiN0W03CWwUKTp7G7k_hwmP7jYc0avSTc6lOhRtqVwGhqij1DeegHx7KEROnu2A8MTl1donCPkba4E-Ap0b2COusP3_UPre2vv7wj/s640/Untitled.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
для визуального исключения человеческого фактора, пишем таймер который будет с определенной периодичностью перезапускать указанную службу.<br />
<br />
Интересной является служба "Темы"(на случай если вы захотите подшутить)<br />
<br />
Стартуем перезапуск, блокируем компьютер и идем пить кофе.<br />
<br />
Саму программу уже готовую можно взять тут <a href="https://docs.google.com/open?id=0B888Vt6ak9afNU5sWEVWVTZFblE">https://docs.google.com/open?id=0B888Vt6ak9afNU5sWEVWVTZFblE</a><br />
<br />
Только нужно всегда помнить, что в любой шутке должна быть доля шутки.</div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-25345944324971982302012-12-04T10:24:00.002+04:002012-12-04T10:24:44.834+04:00Страховка от пользователей MS Excel<div dir="ltr" style="text-align: left;" trbidi="on">
Так как пользователей огромное количество и они все работают с документами созданными во всеми нами любимом редакторе MS Excel, то регулярно встречаются случаи когда документы портятся, теряются, и пропадают разным - не предсказуемым способом(выключили свет, вынули флешку и т.д.) Надежды на автоматическое сохранение нет, и особого доверия так же оно не вызывает.<br />
<br />
Дабы избежать подобных случаев решил написать маленькую утилитку, которая бы в свою очередь страховала пользователя и упрощала процесс восстановления неведомо куда пропавшего документа.<br />
<br />
Для борьбы с MS Excel было решено использовать встроенные механизмы самого офисного пакета, но управлять ими из вне.<br />
<br />
Для решения данной задачи использовалась Delphi.<br />
Принцип работы:<br />
1)Запускается утилита<br />
2) Регулярно проверяем наличие запущенного приложения MS Excel.<br />
3) При обнаружении работающего Excel, создается OLE подключение к встроенному языку Visual Basic Application(VBA).<br />
4)Используя VBA сохраняем копию работающего документа в заранее установленную временную директорию.<br />
5) Для уменьшения размера занимаемой копии подвергаем её сжатию.<br />
6) Регулярно обновляем созданную копию документа.<br />
7) При закрытии документа или MS Excel высвобождаем занимаемый OLE объект.<br />
<br />
В случае потери документа используя средства программы имеем возможность восстановить файл.<br />
<br />
Работающую программу можно взять тут <a href="https://docs.google.com/open?id=0B888Vt6ak9afZUxLQ2l4WE85cVE">https://docs.google.com/open?id=0B888Vt6ak9afZUxLQ2l4WE85cVE</a><br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0tag:blogger.com,1999:blog-7856465511966343201.post-13011857024743989952012-12-03T18:10:00.000+04:002012-12-03T18:14:10.806+04:00Генератор отчетов<div dir="ltr" style="text-align: left;" trbidi="on">
Было время столкнулся с тем что у нас на предприятии использовалась(и используется) программа для ведения кадрового учета, она всем хороша, падает регулярно, но что делать у всех свои недостатки.<br />
Переписывать программу никто добро не даст, и не давал(так как за неё уплочены не малые деньги), а отделу кадров работать надо. В принципе программа(указывать какая не буду дабы избежать нежелательных комментариев) всю информацию ведет как надо, но вот отчетная информация страдает, отчеты формируются часами, и не всегда так как того ожидает пользователь. Я как программер вынужденный сопровождать сие чудо вынужден был придумать инструмент для генерации отчетов таких каких мне захочется, и работающих как можно быстрее. Тут то и появилось ТЗ:<br />
1) Нужно получение информации из базы данных персонала<br />
2) Критерии отбора должны быть гибкие и понятные для человека занимающегося сопровождением программы<br />
3) Должна быть гибкость в выборе данных<br />
4) Должна быть возможность использовать генератор отчетов не только с программой работающей у нас.<br />
<br />
План построен, необходимо что то начинать делать.<br />
Исходя из того что программа должна работать с базами данных, причем с любыми решил использовать ADO, камень в мой огород, но я пользователь форточек.<br />
<br />
Для подключения решил использовать строку подключения ADO. Конкретно наша программа работала с DBF файлами :( печаль, но что делать. Изучив заголовок файла пришел к выводу что самый подходящий драйвер VFP(Visual FoxPro), хотя программа работает не на Фоксе, но Фокс благополучно разобрал типы данных .... кроме дат, зашифрованных в полях.<br />
Для работы через ADO использовал драйвер VFPOLEDB, саму строку подключения использовал примерно вот такую:<br />
<br />
<b>Provider=VFPOLEDB.1;Data Source=<span style="color: red;">#SOURCE#</span>;Mode=Share Deny None;Extended Properties="";User ID=<span style="color: red;">""</span>;Password=<span style="color: red;">""</span>;Mask Password=False;Cache Authentication=False;Encrypt Password=False;Collating Sequence=MACHINE;DSN=""</b><br />
<br />
Как среду разработки выбрал Delphi 7, под рукой большего не было, на связку PHP/Apach/MySql пришлось забить, потому как в сети http протокол зарублен на уровне сис.админа, нет ни интернета и ДНС не фурычит в сети, вот такие вот сложные дела.<br />
<br />
Собственно решение было найдено, к базе данных коннектится через ADO, главное что бы драйвер под ADO существовал, после установки соединения к базе данных выполняем SQL запрос, полученный результат представляем в виде таблицы, с которой есть импорт в CSV формат, который благополучно может переварить MS Excel/Open Office.<br />
<br />
Генератор отчетов был реализован, если вдруг кому надо: бесплатно можно пробовать<br />
<br />
<a href="https://docs.google.com/open?id=0B888Vt6ak9afTUpQVDlfQjdZbmc">https://docs.google.com/open?id=0B888Vt6ak9afTUpQVDlfQjdZbmc</a><br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/01480777141955164295noreply@blogger.com0