<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://miac.volmed.org.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dmitriy</id>
	<title>Wiki МИАЦ ВО - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://miac.volmed.org.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dmitriy"/>
	<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Dmitriy"/>
	<updated>2026-04-11T10:58:26Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D1%81%D1%82%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=4486</id>
		<title>Скрипт выгрузки льготников (чернобыльцев), получивших стационарную помощь</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D1%81%D1%82%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=4486"/>
		<updated>2024-03-28T14:08:00Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
&amp;quot;\\TS\MySQL\bin\mysql.exe&amp;quot; --host=10.35.0.93 --default-character-set cp1251 --character-sets-dir &amp;quot;\\TS\MySQL\bin\share\charsets &amp;quot; --database  DB-uUser -pPasswd &amp;lt; &amp;quot;C:\client\my_scripts\Talanova\1kv2015\stac_1_kv2015_norm.sql&amp;quot; &amp;gt;stac_31-03-2015n.res&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*****&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
SELECT people.UNICOD, people.birthDate,tmp.id,CASE WHEN tmp.numberPolis &amp;lt;&amp;gt; &#039;&#039; THEN tmp.numberPolis ELSE &#039;Не найдено&#039;  END AS Полис,&lt;br /&gt;
  people_document.NAME, office.name AS &#039;ЛПУ&#039;, privelege.name AS &#039;Наименование льготы&#039;,  privelege.codOut,  privelege.cod,&lt;br /&gt;
  dynpeople.sDate AS &#039;Дата начала лечения&#039;,&lt;br /&gt;
  dynpeople.eDate  AS &#039;Дата окончания лечения&#039;, dynpeople.idlpu AS IDLPU,  dynpeople.codDS&lt;br /&gt;
FROM dynpeople&lt;br /&gt;
  LEFT OUTER JOIN (SELECT&lt;br /&gt;
      people_polis_1.numberPolis,&lt;br /&gt;
      people_polis_1.sDatePolis,&lt;br /&gt;
      people_polis_1.eDatePolis,&lt;br /&gt;
      people_polis_1.id,&lt;br /&gt;
      people_polis_1.idlpu&lt;br /&gt;
    FROM people_polis people_polis_1) tmp&lt;br /&gt;
    ON tmp.id = dynpeople.idPeople AND tmp.idlpu = dynpeople.idlpu AND tmp.sDatePolis &amp;lt; dynpeople.sDate AND tmp.eDatePolis &amp;gt;= dynpeople.sDate&lt;br /&gt;
  RIGHT OUTER JOIN people_lgot&lt;br /&gt;
    ON people_lgot.id = tmp.id AND people_lgot.idlpu = tmp.idlpu&lt;br /&gt;
  LEFT OUTER JOIN privelege&lt;br /&gt;
    ON people_lgot.idLgot = privelege.unicod&lt;br /&gt;
  RIGHT OUTER JOIN people&lt;br /&gt;
    ON people_lgot.idlpu = people.idlpu AND people_lgot.id = people.unicod AND dynpeople.idPeople = people.unicod AND dynpeople.idlpu = people.idlpu&lt;br /&gt;
  LEFT OUTER JOIN people_document&lt;br /&gt;
    ON people.idlpu = people_document.idlpu AND people.unicod = people_document.id&lt;br /&gt;
LEFT OUTER JOIN office&lt;br /&gt;
  ON office.idlpu=tmp.idlpu AND office.statusLPU=1&lt;br /&gt;
WHERE (dynpeople.NHist IS NOT NULL) AND privelege.codOut = &#039;010&#039; AND (year(dynpeople.edate) = 2015) AND (month(dynpeople.edate) &amp;lt; 4)&lt;br /&gt;
ORDER BY people.UNICOD;&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A0%D0%9C%D0%98%D0%A1&amp;diff=4485</id>
		<title>РМИС</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A0%D0%9C%D0%98%D0%A1&amp;diff=4485"/>
		<updated>2024-03-28T14:07:20Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Настройка сети на ФАПах]]&lt;br /&gt;
#[[Скрипты|Скрипты]]&lt;br /&gt;
#[[Настройка электронной подписи]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D0%B0%D0%BC%D0%B1%D1%83%D0%BB%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=4484</id>
		<title>Скрипт выгрузки льготников (чернобыльцев), получивших амбулаторную помощь</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D0%B0%D0%BC%D0%B1%D1%83%D0%BB%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=4484"/>
		<updated>2024-03-28T14:05:28Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
set datetemp=start.tmp&lt;br /&gt;
@echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot;&lt;br /&gt;
&amp;quot;\\TS\MySQL\bin\mysql.exe&amp;quot; --host=10.35.0.93 --default-character-set cp1251 --character-sets-dir &amp;quot;\\TS\MySQL\bin\share\charsets &amp;quot; --database  st -uUser -pPassws &amp;lt; &amp;quot;C:\client\my_scripts\Talanova\1kv2015\policl_1kv2015.sql&amp;quot; &amp;gt;pol_31-03-2015n.res&lt;br /&gt;
set datetemp=stop.tmp&lt;br /&gt;
@echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot;&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
****&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
SELECT people.UNICOD, people.birthDate,tmp.id,CASE WHEN tmp.numberPolis &amp;lt;&amp;gt; &#039;&#039; THEN tmp.numberPolis ELSE &#039;Не найдено&#039;  END AS Полис,&lt;br /&gt;
  people_document.NAME, privelege.name AS &#039;Наименование льготы&#039;,  privelege.codOut,  privelege.cod,  uslugappl.sDate AS &#039;Дата посещения&#039;,&lt;br /&gt;
  uslugappl.eDate AS &#039;Завершено посещение&#039;, uslugappl.idlpu AS IDLPU, office.name AS &#039;ЛПУ&#039;, uslugappl.codDS&lt;br /&gt;
FROM uslugappl&lt;br /&gt;
  LEFT OUTER JOIN (SELECT&lt;br /&gt;
      people_polis_1.numberPolis,&lt;br /&gt;
      people_polis_1.sDatePolis,&lt;br /&gt;
      people_polis_1.eDatePolis,&lt;br /&gt;
      people_polis_1.id,&lt;br /&gt;
      people_polis_1.idlpu&lt;br /&gt;
    FROM people_polis people_polis_1) tmp&lt;br /&gt;
    ON tmp.id = uslugappl.idPeople AND tmp.idlpu = uslugappl.idlpu AND tmp.sDatePolis &amp;lt; uslugappl.sDate AND tmp.eDatePolis &amp;gt;= uslugappl.sDate&lt;br /&gt;
  RIGHT OUTER JOIN people_lgot&lt;br /&gt;
    ON people_lgot.id = tmp.id AND people_lgot.idlpu = tmp.idlpu&lt;br /&gt;
  LEFT OUTER JOIN privelege&lt;br /&gt;
    ON people_lgot.idLgot = privelege.unicod&lt;br /&gt;
  RIGHT OUTER JOIN people&lt;br /&gt;
    ON people_lgot.idlpu = people.idlpu AND people_lgot.id = people.unicod AND uslugappl.idPeople = people.unicod AND uslugappl.idlpu = people.idlpu&lt;br /&gt;
  LEFT OUTER JOIN people_document&lt;br /&gt;
    ON people.idlpu = people_document.idlpu AND people.unicod = people_document.id&lt;br /&gt;
LEFT OUTER JOIN office&lt;br /&gt;
  ON office.idlpu=tmp.idlpu AND office.statusLPU=1&lt;br /&gt;
WHERE privelege.codOut = &#039;010&#039; AND uslugappl.YED = 2015 AND MONTH(uslugappl.eDate) &amp;lt; 4&lt;br /&gt;
ORDER BY people.UNICOD&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4180</id>
		<title>Pplfoms перенос данных от ЛПУ</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4180"/>
		<updated>2018-02-20T13:08:10Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#Исходники в exchange/develop/k7/хранилище7/EA/pplfoms/ppl.exe&lt;br /&gt;
#На 01.01.2018 49 ЛПУ загружено.&lt;br /&gt;
#С Любой договориться о папке, куда она может складывать dbf от ЛПУ.&lt;br /&gt;
#На данный момент остался тока Согас, РГС ушел.&lt;br /&gt;
#Начинать собирать в конце месяца, числа 25. начинать с новых !!! , чтобы ЛПУ приписания населения не затерлось.&lt;br /&gt;
##1. Собираем dbf в одну папку по месяцам.&lt;br /&gt;
##2. В statgod последнюю табл. pplfom переименовываем в pplfoms_0x (0х -месяц), делаем из нее скрипт *Создать таблицу* новую таблицу ppplfoms.&lt;br /&gt;
##3. Указываем путь в проге, где собраны dbf, -&amp;gt; собрать файлы -&amp;gt; загрузить в pplfoms.&lt;br /&gt;
##4. Insert into pplfoms where numberpolis not exist (select numberpolis from pplfoms_oxx) &lt;br /&gt;
##5. В ppl.exe ведутся логи (LogPpl.txt), можно посмотреть, и у кого idgeo=0 ручками поправить. еще есть файл Update_ppltfoms.txt, там скрипты после-окончательной обработки.&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4179</id>
		<title>Pplfoms перенос данных от ЛПУ</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4179"/>
		<updated>2018-02-20T13:07:55Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#Исходники в exchange/develop/k7/хранилище7/EA/pplfoms/ppl.exe&lt;br /&gt;
#На 01.01.2018 49 ЛПУ загружено.&lt;br /&gt;
#С Любой договориться о папке, куда она может складывать dbf от ЛПУ.&lt;br /&gt;
#На данный момент остался тока Согас, РГС ушел.&lt;br /&gt;
#Начинать собирать в конце месяца, числа 25. начинать с новых !!! , чтобы ЛПУ приписания населения не затерлось.&lt;br /&gt;
##1. Собираем dbf в одну папку по месяцам.&lt;br /&gt;
#2. В statgod последнюю табл. pplfom переименовываем в pplfoms_0x (0х -месяц), делаем из нее скрипт *Создать таблицу* новую таблицу ppplfoms.&lt;br /&gt;
#3. Указываем путь в проге, где собраны dbf, -&amp;gt; собрать файлы -&amp;gt; загрузить в pplfoms.&lt;br /&gt;
#4. Insert into pplfoms where numberpolis not exist (select numberpolis from pplfoms_oxx) &lt;br /&gt;
#5. В ppl.exe ведутся логи (LogPpl.txt), можно посмотреть, и у кого idgeo=0 ручками поправить. еще есть файл Update_ppltfoms.txt, там скрипты после-окончательной обработки.&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4178</id>
		<title>Pplfoms перенос данных от ЛПУ</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4178"/>
		<updated>2018-02-20T13:07:40Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#Исходники в exchange/develop/k7/хранилище7/EA/pplfoms/ppl.exe&lt;br /&gt;
#На 01.01.2018 49 ЛПУ загружено.&lt;br /&gt;
#С Любой договориться о папке, куда она может складывать dbf от ЛПУ.&lt;br /&gt;
#На данный момент остался тока Согас, РГС ушел.&lt;br /&gt;
#Начинать собирать в конце месяца, числа 25. начинать с новых !!! , чтобы ЛПУ приписания населения не затерлось.&lt;br /&gt;
#1. Собираем dbf в одну папку по месяцам.&lt;br /&gt;
#2. В statgod последнюю табл. pplfom переименовываем в pplfoms_0x (0х -месяц), делаем из нее скрипт *Создать таблицу* новую таблицу ppplfoms.&lt;br /&gt;
#3. Указываем путь в проге, где собраны dbf, -&amp;gt; собрать файлы -&amp;gt; загрузить в pplfoms.&lt;br /&gt;
#4. Insert into pplfoms where numberpolis not exist (select numberpolis from pplfoms_oxx) &lt;br /&gt;
#5. В ppl.exe ведутся логи (LogPpl.txt), можно посмотреть, и у кого idgeo=0 ручками поправить. еще есть файл Update_ppltfoms.txt, там скрипты после-окончательной обработки.&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4177</id>
		<title>Pplfoms перенос данных от ЛПУ</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4177"/>
		<updated>2018-02-20T13:06:17Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#Исходники в exchange/develop/k7/хранилище7/EA/pplfoms/ppl.exe&lt;br /&gt;
#На 01.01.2018 49 ЛПУ загружено.&lt;br /&gt;
#С Любой договориться о папке, куда она может складывать dbf от ЛПУ.&lt;br /&gt;
#На данный момент остался тока Согас, РГС ушел.&lt;br /&gt;
#Начинать собирать в конце месяца, числа 25. начинать с новых !!! , чтобы ЛПУ приписания населения не затерлось.&lt;br /&gt;
#1. Собираем dbf в одну папку по месяцам.&lt;br /&gt;
#2. Ищем в statgod последнюю табл. pplfoms_0xx, делаем из нее скрипт *Создать таблицу* новую таблицу ppplfoms.&lt;br /&gt;
#3. Указываем путь в проге, где собраны dbf, -&amp;gt; собрать файлы -&amp;gt; загрузить в pplfoms.&lt;br /&gt;
#4. Insert into pplfoms where numberpolis not exist (select numberpolis from pplfoms_oxx) &lt;br /&gt;
#5. В ppl.exe ведутся логи (LogPpl.txt), можно посмотреть, и у кого idgeo=0 ручками поправить. еще есть файл Update_ppltfoms.txt, там скрипты после-окончательной обработки.&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4176</id>
		<title>Pplfoms перенос данных от ЛПУ</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4176"/>
		<updated>2018-02-20T13:05:48Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Исходники в exchange/develop/k7/хранилище7/EA/pplfoms/ppl.exe&lt;br /&gt;
На 01.01.2018 49 ЛПУ загружено.&lt;br /&gt;
С Любой договориться о папке, куда она может складывать dbf от ЛПУ.&lt;br /&gt;
на данный момент остался тока Согас, РГС ушел.&lt;br /&gt;
Начинать собирать в конце месяца, числа 25. начинать с новых !!! , чтобы ЛПУ приписания населения не затерлось.&lt;br /&gt;
#1. Собираем dbf в одну папку по месяцам.&lt;br /&gt;
2. Ищем в statgod последнюю табл. pplfoms_0xx, делаем из нее скрипт *Создать таблицу* новую таблицу ppplfoms.&lt;br /&gt;
3. Указываем путь в проге, где собраны dbf, -&amp;gt; собрать файлы -&amp;gt; загрузить в pplfoms.&lt;br /&gt;
4. Insert into pplfoms where numberpolis not exist (select numberpolis from pplfoms_oxx) &lt;br /&gt;
5. В ppl.exe ведутся логи (LogPpl.txt), можно посмотреть, и у кого idgeo=0 ручками поправить. еще есть файл Update_ppltfoms.txt, там скрипты после-окончательной обработки.&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4175</id>
		<title>Pplfoms перенос данных от ЛПУ</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4175"/>
		<updated>2018-02-20T13:04:26Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Исходники в exchange/develop/k7/хранилище7/EA/pplfoms/ppl.exe&lt;br /&gt;
На 01.01.2018 49 ЛПУ загружено.&lt;br /&gt;
С Любой договориться о папке, куда она может складывать dbf от ЛПУ.&lt;br /&gt;
на данный момент остался тока Согас, РГС ушел.&lt;br /&gt;
Начинать собирать в конце месяца, числа 25. начинать с новых !!! , чтобы ЛПУ приписания населения не затерлось.&lt;br /&gt;
/1. Собираем dbf в одну папку по месяцам.&lt;br /&gt;
2. Ищем в statgod последнюю табл. pplfoms_0xx, делаем из нее скрипт *Создать таблицу* новую таблицу ppplfoms.&lt;br /&gt;
3. Указываем путь в проге, где собраны dbf, -&amp;gt; собрать файлы -&amp;gt; загрузить в pplfoms.&lt;br /&gt;
4. Insert into pplfoms where numberpolis not exist (select numberpolis from pplfoms_oxx) &lt;br /&gt;
5. В ppl.exe ведутся логи (LogPpl.txt), можно посмотреть, и у кого idgeo=0 ручками поправить. еще есть файл Update_ppltfoms.txt, там скрипты после-окончательной обработки.&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4174</id>
		<title>Pplfoms перенос данных от ЛПУ</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Pplfoms_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BE%D1%82_%D0%9B%D0%9F%D0%A3&amp;diff=4174"/>
		<updated>2018-02-20T13:02:06Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «Исходники в exchange/develop/k7/хранилище7/EA/pplfoms/ppl.exe На 01.01.2018 49 ЛПУ загружено. С Любой договорить…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Исходники в exchange/develop/k7/хранилище7/EA/pplfoms/ppl.exe&lt;br /&gt;
На 01.01.2018 49 ЛПУ загружено.&lt;br /&gt;
С Любой договориться о папке, куда она может складывать dbf от ЛПУ.&lt;br /&gt;
на данный момент остался тока Согас, РГС ушел.&lt;br /&gt;
Начинать собирать в конце месяца, числа 25. начинать с новых !!! , чтобы ЛПУ приписания населения не затерлось.&lt;br /&gt;
1. Собираем dbf в одну папку по месяцам.&lt;br /&gt;
2. Ищем в statgod последнюю табл. pplfoms_0xx, делаем из нее скрипт *Создать таблицу* новую таблицу ppplfoms.&lt;br /&gt;
3. Указываем путь в проге, где собраны dbf, -&amp;gt; собрать файлы -&amp;gt; загрузить в pplfoms.&lt;br /&gt;
4. Insert into pplfoms where numberpolis not exist (select numberpolis from pplfoms_oxx) &lt;br /&gt;
5. В ppl.exe ведутся логи (LogPpl.txt), можно посмотреть, и у кого idgeo=0 ручками поправить. еще есть файл Update_ppltfoms.txt, там скрипты после-окончательной обработки.&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Clarion_for_Windows&amp;diff=4173</id>
		<title>Clarion for Windows</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Clarion_for_Windows&amp;diff=4173"/>
		<updated>2018-02-20T12:32:16Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Использование внешних dll]]&lt;br /&gt;
#[[pplfoms перенос данных от ЛПУ]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4172</id>
		<title>Sp Rec</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4172"/>
		<updated>2018-02-20T12:30:14Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной модуль&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using spsdksvr;&lt;br /&gt;
using spsdksw;&lt;br /&gt;
using SpRecord;&lt;br /&gt;
using System.Threading; &lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
using System.Runtime.InteropServices;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using Newtonsoft.Json;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
using System.Web.Script.Serialization;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public class myThread&lt;br /&gt;
        {&lt;br /&gt;
            public static Thread thread;&lt;br /&gt;
&lt;br /&gt;
            public myThread(string name,int start_stop,int count_thread) //Конструктор получает имя функции&lt;br /&gt;
            {&lt;br /&gt;
&lt;br /&gt;
                if (start_stop == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    thread = new Thread(Program.ChannelListen);&lt;br /&gt;
                    thread.Name = name;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;thread.Name =&amp;quot; + thread.Name + &amp;quot;, &amp;quot; + thread.ManagedThreadId);&lt;br /&gt;
                    thread.IsBackground = true;&lt;br /&gt;
                    thread.Start();//передача параметра в поток&lt;br /&gt;
                }&lt;br /&gt;
                else if (start_stop == 2)&lt;br /&gt;
                {&lt;br /&gt;
                    thread.Abort();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
/*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
            {&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                    Thread.Sleep(0);&lt;br /&gt;
                }&lt;br /&gt;
                Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
*/      &lt;br /&gt;
        &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    public class Connect_to_sprecord&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME = 0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        public Connect_to_sprecord(string ch_name, int start_stop) //Конструктор получает имя функции&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            if (start_stop == 1)&lt;br /&gt;
            {&lt;br /&gt;
                string ChannelName = ch_name;&lt;br /&gt;
                Console.WriteLine(ChannelName);&lt;br /&gt;
                string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
                string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string StartTime = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool GetLineState;&lt;br /&gt;
                bool GetWriting;&lt;br /&gt;
                int WaitMessage;&lt;br /&gt;
                string TypeCall = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool IsLineActive;&lt;br /&gt;
                object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
                object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
                int a = 0;&lt;br /&gt;
&lt;br /&gt;
                SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
                SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                while (SPRecordChannel.Connected == true)&lt;br /&gt;
                {&lt;br /&gt;
                    if (Program.glo_status_int == 1) break;&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                    //Console.WriteLine(GetLineState);&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                    //Console.WriteLine(GetWriting);&lt;br /&gt;
                    //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                    SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                    if (IsLineActive != true) break;&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                    IsLineActive = true;&lt;br /&gt;
                    //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                    WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                    if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                    {&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                        IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                        if (IsLineActive == false) continue;&lt;br /&gt;
                        /*object Msg;&lt;br /&gt;
                        var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                        byte[] bytes = (byte[])Msg;&lt;br /&gt;
                        string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                        export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                        FileName = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                        TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                        StartTime = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                        TypeCall = ChannelInfo.ToString();&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        if ((int)TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                            PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                            SubPhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                        }&lt;br /&gt;
                        System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                        Console.WriteLine(&amp;quot;ChannelName=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall[0] + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                        //glo_status1 = ChannelName + &amp;quot; &amp;quot; + TypeCall[0];&lt;br /&gt;
                        if (TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;,&amp;quot; + SubPhoneFrom;&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                        }&lt;br /&gt;
                        Program.glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall;&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        Program.export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                    }&lt;br /&gt;
                    //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                    //}&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordChannel.Disconnect();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                            Thread.Sleep(0);&lt;br /&gt;
                        }&lt;br /&gt;
                        Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
        */&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME=0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RING = 0x0000000D; // WordBool&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONETO = 0x0000000A; // BSTR&lt;br /&gt;
&lt;br /&gt;
        // max число каналов =4 &lt;br /&gt;
        public static string glo_status1 = &amp;quot; Ожидание запуска ...&amp;quot;;&lt;br /&gt;
        public static int glo_status_int = 0;&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            /*string json1 =&amp;quot;{\&amp;quot;error\&amp;quot;:[],\&amp;quot;data\&amp;quot;:{\&amp;quot;status\&amp;quot;:\&amp;quot;ok\&amp;quot;,\&amp;quot;unicod\&amp;quot;:42}}&amp;quot;;&lt;br /&gt;
            var json2 =&amp;quot;{\&amp;quot;error\&amp;quot;:{\&amp;quot;id\&amp;quot;:1,\&amp;quot;text\&amp;quot;:\&amp;quot;error autorization\&amp;quot;},\&amp;quot;data\&amp;quot;:[]}&amp;quot;;&lt;br /&gt;
          &lt;br /&gt;
            var json3 =&amp;quot;{\&amp;quot;response\&amp;quot;:[{\&amp;quot;id\&amp;quot;:269058571,\&amp;quot;first_name\&amp;quot;:\&amp;quot;Name\&amp;quot;,\&amp;quot;last_name\&amp;quot;:\&amp;quot;LastName\&amp;quot;,\&amp;quot;photo_50\&amp;quot;:\&amp;quot;http://cs624717.vk.me/v624717571/21718/X8.jpg\&amp;quot;}]}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            using (var reader = new StreamReader(json1))&lt;br /&gt;
            {&lt;br /&gt;
                System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                var objText = reader.ReadToEnd();&lt;br /&gt;
                var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(json1);&lt;br /&gt;
                Console.WriteLine(jsonData);&lt;br /&gt;
                Console.WriteLine(&amp;quot;end&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            return;		*/&lt;br /&gt;
            // Подключаемся&lt;br /&gt;
            //SpRecordClient SPRecordClient = new spsdksvr.SpRecordClient();&lt;br /&gt;
            Form1 Forma = new Form1();&lt;br /&gt;
            Forma.ShowDialog();&lt;br /&gt;
            //Forma.SetLabelText(glo_status1);&lt;br /&gt;
            //Forma.Show();&lt;br /&gt;
            //Console.ReadKey();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        class RootObject&lt;br /&gt;
        {&lt;br /&gt;
            public Item1 error { get; set; }&lt;br /&gt;
            public Item2 data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item1&lt;br /&gt;
        {&lt;br /&gt;
            public string id { get; set; }&lt;br /&gt;
            public string text { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item2&lt;br /&gt;
        {&lt;br /&gt;
            public string status { get; set; }&lt;br /&gt;
            public string unicod { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_stop()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 1;&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException)&lt;br /&gt;
            {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток не прерван &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_asp()&lt;br /&gt;
        {&lt;br /&gt;
            //MessageBox.Show(&amp;quot;hello pr&amp;quot;);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 0;&lt;br /&gt;
                SpRecordClient SPRecordClient = new SpRecordClient();&lt;br /&gt;
                Console.WriteLine(&amp;quot;Connect_to_asp =&amp;quot;);&lt;br /&gt;
                var Connect = SPRecordClient.Connect(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                // Получаем список каналов&lt;br /&gt;
                string ChannelList = &amp;quot;&amp;quot;;&lt;br /&gt;
                string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
                var Channel = SPRecordClient.GetChannelNames(out ChannelList, 1);&lt;br /&gt;
                Char delimiter = &#039;|&#039;;&lt;br /&gt;
                String[] substrings = ChannelList.Split(delimiter);&lt;br /&gt;
                //export_to_file(FileLogFileName, &amp;quot;1 start&amp;quot;);&lt;br /&gt;
                //Program p = new Program();&lt;br /&gt;
                int i = 0;&lt;br /&gt;
                foreach (var substring in substrings)&lt;br /&gt;
                {&lt;br /&gt;
                    i += 1;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;substring &amp;quot; + substring);&lt;br /&gt;
                    //myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                    switch (i)&lt;br /&gt;
                    {&lt;br /&gt;
                        case 1:&lt;br /&gt;
                            //Connect_to_sprecord t1 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 2:&lt;br /&gt;
                            //Connect_to_sprecord t2 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t2= new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 3:&lt;br /&gt;
                            //Connect_to_sprecord t3 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t3 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 4:&lt;br /&gt;
                            myThread t4 = new myThread(substring, 1, i);&lt;br /&gt;
                            //Connect_to_sprecord t4 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            break;&lt;br /&gt;
                    }&lt;br /&gt;
                    //Console.ReadKey();&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек. для инициализации&lt;br /&gt;
                    Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordClient.Disconnect();&lt;br /&gt;
                //var devName = SPRecordClient.GetDeviceNames;&lt;br /&gt;
                Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException exc)&lt;br /&gt;
            {&lt;br /&gt;
                if ((int)exc.ExceptionState == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Прерывание отменено! Код завершения: &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
                    Thread.ResetAbort();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток прерван, код завершения &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void ChannelListen()&lt;br /&gt;
        {&lt;br /&gt;
            string ChannelName = myThread.thread.Name;&lt;br /&gt;
            int id_calldetails = 0;&lt;br /&gt;
            Console.WriteLine(ChannelName);&lt;br /&gt;
            string current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            int priznak_incomin_ring = 0;&lt;br /&gt;
            string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
            string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            DateTime StartTime;&lt;br /&gt;
            int ring_count = 0; &lt;br /&gt;
            bool GetLineState;&lt;br /&gt;
            bool GetWriting;&lt;br /&gt;
            int WaitMessage;&lt;br /&gt;
            int TypeCall = 0;&lt;br /&gt;
            string TypeCall_str = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool IsLineActive;&lt;br /&gt;
            object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
            object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool incoming_ring;&lt;br /&gt;
            object Is_incoming_ring = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
            SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            priznak_incomin_ring = 0;&lt;br /&gt;
            while (SPRecordChannel.Connected == true)&lt;br /&gt;
            {&lt;br /&gt;
                if (glo_status_int==1) break;&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                //Console.WriteLine(GetLineState);&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                //Console.WriteLine(GetWriting);&lt;br /&gt;
                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                if (IsLineActive != true) break;&lt;br /&gt;
                //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                 IsLineActive = true;&lt;br /&gt;
                //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                        WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                        if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                            IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RING, out Is_incoming_ring);&lt;br /&gt;
                            incoming_ring = (bool)Is_incoming_ring;&lt;br /&gt;
                            if (incoming_ring == true)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName == &amp;quot;&amp;quot; &amp;amp; priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 1;       // идет звонок оператору&lt;br /&gt;
                                }&lt;br /&gt;
                                //if (current_FileName != FileName)&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGCOUNT, out ChannelInfo);&lt;br /&gt;
                                if ((int)ChannelInfo &amp;gt; ring_count)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = (int)ChannelInfo;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (priznak_incomin_ring == 1)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = 0;&lt;br /&gt;
                                    priznak_incomin_ring = 2; // статус - снята трубка&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGFIRSTDATETIME, out ChannelInfo);&lt;br /&gt;
                                    StartTime = ((DateTime)ChannelInfo);&lt;br /&gt;
                                    //StartTime = StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + StartTime.Hour+&amp;quot;:&amp;quot;StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second;&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                    TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                    //if (TypeCall != 2)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        PhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        SubPhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                    }&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot;+StartTime.Hour+&amp;quot;:&amp;quot;+StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second,&amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom,0,&amp;quot;&amp;quot;,1,0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                        Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                string response = send_id(&amp;quot;add_popup&amp;quot;, id_calldetails, Int32.Parse((ChannelName[(ChannelName.Length - 1)]).ToString()), PhoneFrom);&lt;br /&gt;
                                                Console.WriteLine(response);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
&lt;br /&gt;
                                }&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                /*if (current_FileName == &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;dozvon end&amp;quot;);&lt;br /&gt;
                                }*/&lt;br /&gt;
/*                                if (current_FileName == FileName &amp;amp;&amp;amp; priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName+ &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                }*/&lt;br /&gt;
                            }&lt;br /&gt;
                            if (IsLineActive == false)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName != &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    if (priznak_incomin_ring == 2) TypeCall = 2;    // out call&lt;br /&gt;
                                    if (priznak_incomin_ring == 0) TypeCall = 1; // in call&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 2, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    TypeCall_str = &amp;quot; Ожидание вызова ...&amp;quot;;&lt;br /&gt;
                                    glo_status1 =  TypeCall_str;&lt;br /&gt;
                                }&lt;br /&gt;
                                continue;&lt;br /&gt;
                            }&lt;br /&gt;
                            if (priznak_incomin_ring == 2 &amp;amp; TypeCall != 2)&lt;br /&gt;
                            {&lt;br /&gt;
                                //сюда вставить продолжительность звонка&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                                FileName = ChannelInfo.ToString();&lt;br /&gt;
                                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, ring_count, FileName, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot; ring_count=&amp;quot; + ring_count + &amp;quot; priznak_incomin_ring = 2;&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
&lt;br /&gt;
  /*object Msg;&lt;br /&gt;
                            var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                            byte[] bytes = (byte[])Msg;&lt;br /&gt;
                            string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                            export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                            FileName = ChannelInfo.ToString();&lt;br /&gt;
                            if (current_FileName != FileName)&lt;br /&gt;
                            {&lt;br /&gt;
                                current_FileName = FileName;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                                TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                                StartTime = (DateTime)ChannelInfo;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                if (priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONETO, out ChannelInfo);&lt;br /&gt;
                                    //PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom, 0, FileName, 2, 0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        MessageBox.Show(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                                System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                                //Console.WriteLine(&amp;quot;ChannelName1=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom + &amp;quot;ChannelName=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                if (priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                }&lt;br /&gt;
                                else&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                                }&lt;br /&gt;
                                glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall_str;&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                priznak_incomin_ring = 0;&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                            priznak_incomin_ring = 0;&lt;br /&gt;
                            ring_count = 0;&lt;br /&gt;
                            export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                            //continue;&lt;br /&gt;
                        }&lt;br /&gt;
                     //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    //Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                //}&lt;br /&gt;
            }&lt;br /&gt;
            SPRecordChannel.Disconnect();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static string CreateMD5(string input)&lt;br /&gt;
        {&lt;br /&gt;
            // Use input string to calculate MD5 hash&lt;br /&gt;
            using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())&lt;br /&gt;
            {&lt;br /&gt;
                byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);&lt;br /&gt;
                byte[] hashBytes = md5.ComputeHash(inputBytes);&lt;br /&gt;
&lt;br /&gt;
                // Convert the byte array to hexadecimal string&lt;br /&gt;
                StringBuilder sb = new StringBuilder();&lt;br /&gt;
                for (int i = 0; i &amp;lt; hashBytes.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    sb.Append(hashBytes[i].ToString(&amp;quot;X2&amp;quot;));&lt;br /&gt;
                }&lt;br /&gt;
                return sb.ToString();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public class Request_type&lt;br /&gt;
        {&lt;br /&gt;
            public string type { get; set; }&lt;br /&gt;
            public int unicod { get; set; }&lt;br /&gt;
            public int chanel { get; set; }&lt;br /&gt;
            public string phone { get; set; }&lt;br /&gt;
&lt;br /&gt;
            // public Dictionary&amp;lt;string, string&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class Response_type&lt;br /&gt;
        {&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; error { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class ErrorList&lt;br /&gt;
            {&lt;br /&gt;
                public string id { get; set; }&lt;br /&gt;
                public string text { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
            [Serializable]&lt;br /&gt;
            public class DataList&lt;br /&gt;
            {&lt;br /&gt;
                public string status { get; set; }&lt;br /&gt;
                public string unicod { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
        public static string send_id(string type, int unicod, int chanel, string phone)&lt;br /&gt;
        {&lt;br /&gt;
            // ^id_documment=_iemk_exchenge_log.id&lt;br /&gt;
            string response = &amp;quot;&amp;quot;;&lt;br /&gt;
            //            var SourceFile = &amp;quot;&amp;quot;;&lt;br /&gt;
            //string urlString = &amp;quot;http://smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
            var Host = Form1.Service_address;&lt;br /&gt;
            string urlString = &amp;quot;http://&amp;quot; + Host;&lt;br /&gt;
            var SoapAction = &amp;quot;&amp;quot;;&lt;br /&gt;
            string id_service = Form1.Service_id ;&lt;br /&gt;
            string passwrd = id_service + Form1.Service_pass;&lt;br /&gt;
            passwrd = CreateMD5(passwrd);&lt;br /&gt;
            urlString = urlString + &amp;quot;?id_service=&amp;quot;+id_service+&amp;quot;&amp;amp;auth_key=&amp;quot; + passwrd.ToLower();&lt;br /&gt;
            //string[] MyArray = { type, unicod.ToString(), chanel.ToString(), phone };&lt;br /&gt;
            Request_type MyArray = new Request_type();&lt;br /&gt;
                MyArray.type=type;&lt;br /&gt;
                MyArray.unicod = unicod;&lt;br /&gt;
                MyArray.chanel = chanel;&lt;br /&gt;
                if (phone == null) MyArray.phone = &amp;quot;000000&amp;quot;; else MyArray.phone = phone;&lt;br /&gt;
            var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            string json = jsonSerializer.Serialize(MyArray);&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;json=&amp;quot; + json);&lt;br /&gt;
            var response1 = XmlHttpRequest(json, urlString);&lt;br /&gt;
            // запись в файл&lt;br /&gt;
            if (Int32.Parse(response1.id)&amp;gt;0)&lt;br /&gt;
            {&lt;br /&gt;
                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 3, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, Int32.Parse(response1.id), response1.text);&lt;br /&gt;
            }&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;response error id =&amp;quot; + response1.id + &amp;quot; response text =&amp;quot; + response1.text);&lt;br /&gt;
            string request = &amp;quot;&amp;quot;;&lt;br /&gt;
            var jsonDeSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            Response_type a = jsonDeSerializer.Deserialize&amp;lt;Response_type&amp;gt;(response);&lt;br /&gt;
            ErrorList a1 = jsonDeSerializer.Deserialize&amp;lt;ErrorList&amp;gt;(response);&lt;br /&gt;
            var DataList = jsonDeSerializer.Deserialize&amp;lt;DataList&amp;gt;(response);&lt;br /&gt;
            Console.WriteLine(&amp;quot;a =&amp;quot; + a);&lt;br /&gt;
            return response;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static ErrorList XmlHttpRequest(string Content, string urlString)&lt;br /&gt;
        {&lt;br /&gt;
            var ContentType = &amp;quot;application/json;&amp;quot;;&lt;br /&gt;
            // param_return=1 полный ответ, 2 урезаный&lt;br /&gt;
                /* Get example *//*&lt;br /&gt;
&lt;br /&gt;
                byte[] bytes;&lt;br /&gt;
                bytes = System.Text.Encoding.UTF8.GetBytes(get_s);&lt;br /&gt;
&lt;br /&gt;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(get_s);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
&lt;br /&gt;
                using (HttpWebResponse response1 = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response1.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }&lt;br /&gt;
                 */&lt;br /&gt;
                /* Post */&lt;br /&gt;
&lt;br /&gt;
            byte[] dataBytes = Encoding.UTF8.GetBytes(Content);&lt;br /&gt;
&lt;br /&gt;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlString);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
                request.ContentLength = dataBytes.Length;&lt;br /&gt;
                request.ContentType = ContentType;&lt;br /&gt;
                request.Method = &amp;quot;POST&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                using (Stream requestBody = request.GetRequestStream())&lt;br /&gt;
                {&lt;br /&gt;
                    requestBody.Write(dataBytes, 0, dataBytes.Length);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                /*using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }*/&lt;br /&gt;
                using (var twitpicResponse = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                {&lt;br /&gt;
&lt;br /&gt;
                    using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))&lt;br /&gt;
                    {&lt;br /&gt;
                        JavaScriptSerializer js = new JavaScriptSerializer();&lt;br /&gt;
                        var objText = reader.ReadToEnd();&lt;br /&gt;
                        //var json44 = JsonConvert.SerializeObject(objText, Formatting.Indented);&lt;br /&gt;
                        var myojb = js.DeserializeObject(objText);&lt;br /&gt;
&lt;br /&gt;
                        var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(objText);&lt;br /&gt;
                        ErrorList ErrorValue_class = new ErrorList();&lt;br /&gt;
                        foreach (KeyValuePair&amp;lt;string, object&amp;gt; keyValue in jsonData)&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(keyValue.Key + &amp;quot; - &amp;quot; + keyValue.Value);&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;error&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                string ErrorValue_string = js.Serialize(keyValue.Value);&lt;br /&gt;
                                if (ErrorValue_string == &amp;quot;[]&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                } &lt;br /&gt;
                                ErrorValue_class = js.Deserialize&amp;lt;ErrorList&amp;gt;(ErrorValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;ErrorValue_class=&amp;quot; + ErrorValue_class.id + &amp;quot;ErrorValue_class.text=&amp;quot; + ErrorValue_class.text);&lt;br /&gt;
                            }&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;data&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                                string dataValue_string = jsonSerializer.Serialize(keyValue.Value);&lt;br /&gt;
                                if (dataValue_string == &amp;quot;[]&amp;quot;) break;&lt;br /&gt;
                                DataList Data_class = js.Deserialize&amp;lt;DataList&amp;gt;(dataValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;myojb2212.status=&amp;quot; + Data_class.status + &amp;quot;myojb2212.value=&amp;quot; + Data_class.unicod);&lt;br /&gt;
                                ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                return ErrorValue_class;&lt;br /&gt;
                            }                              &lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
/*                    Object obj;&lt;br /&gt;
                    bool b = jsonData.TryGetValue(&amp;quot;error&amp;quot;, out obj);&lt;br /&gt;
                        var splashInfo = JsonConvert.DeserializeObject&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        ErrorList myojb1 = js.Deserialize&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        DataList myojb2 = js.Deserialize&amp;lt;DataList&amp;gt;(objText);&lt;br /&gt;
                        return myojb1;*/&lt;br /&gt;
                        return ErrorValue_class;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        public static void export_to_file(string filename, string text)&lt;br /&gt;
        {&lt;br /&gt;
            FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);&lt;br /&gt;
            StreamWriter sw = new StreamWriter(fs);&lt;br /&gt;
            Console.WriteLine(text);&lt;br /&gt;
            sw.WriteLine(text);&lt;br /&gt;
            sw.Close();&lt;br /&gt;
        }&lt;br /&gt;
/*        public static void Add()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;1&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(1000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Add1()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;2&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(3000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }*/&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
MySql подключение&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using MySql;&lt;br /&gt;
using MySql.Data.MySqlClient;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using sprec;&lt;br /&gt;
&lt;br /&gt;
namespace namespase_mysql_connection&lt;br /&gt;
{&lt;br /&gt;
    class MySql&lt;br /&gt;
    {&lt;br /&gt;
        public static MySqlCommand ConnectToMySQL(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlConnection Connection = new MySqlConnection(&amp;quot;Data Source=&amp;quot; + MySQL_host + &amp;quot;;Database=&amp;quot; + MySQL_db + &amp;quot;;User Id=&amp;quot; + MySQL_uid + &amp;quot;;Password=&amp;quot; + MySQL_pw + &amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;); // Создаем соединение. Формат строки соединения подробно описан в прилагающейся документации.&lt;br /&gt;
            MySqlCommand Query = new MySqlCommand(); // С помощью этого объекта выполняются запросы к БД&lt;br /&gt;
            Query.Connection = Connection; // Присвоим объекту только что созданное соединение&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соединяюсь с сервером базы данных...&amp;quot;);&lt;br /&gt;
                Connection.Open();// Соединяемся&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соеденено&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (MySqlException SSDB_Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Ошибка - выходим&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Проверьте настройки соединения, не могу соединиться с базой данных!\nОшибка: &amp;quot; + SSDB_Exception.Message);&lt;br /&gt;
                MessageBox.Show(&amp;quot;Ошибка подключения !&amp;quot;);&lt;br /&gt;
                return Query;&lt;br /&gt;
            }&lt;br /&gt;
            return Query;&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_test(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            Console.WriteLine(MySQLConnected.ToString());&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw, int param_select, string StartTime, string StopTime, char ChannelNumber, string PhoneFrom, int ringCount, string FileName, int type_call, int id,string error_txt)&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=test;Database=twest;Uid=test;Pwd=test;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            //             List&amp;lt;string&amp;gt; ret_file_path = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
            //            ArrayList ret_file_path = new ArrayList();&lt;br /&gt;
            ////String str = @&amp;quot;Server=&amp;quot;+MySQL_host+&amp;quot;;Database=&amp;quot;+MySQL_db+&amp;quot;;Uid=&amp;quot;+MySQL_uid+&amp;quot;;Pwd=&amp;quot;+MySQL_pw+&amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            // путь к документам \\10.*.*.*\iemk&lt;br /&gt;
            ////MySqlConnection con = null;&lt;br /&gt;
            ////con = new MySqlConnection(str);&lt;br /&gt;
            // путь к документам \\10.*.*.*\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            string var_select = &amp;quot;&amp;quot;;&lt;br /&gt;
            MySQLConnected.CommandText = @&amp;quot;CREATE TABLE IF NOT EXISTS calldetails (&lt;br /&gt;
                      id int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                      date_time datetime DEFAULT NULL,&lt;br /&gt;
                      channel varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      ringCount varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      numberPhone varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStart varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStop varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      date_time_stop datetime DEFAULT NULL,&lt;br /&gt;
                      type_call int(11) DEFAULT NULL,&lt;br /&gt;
                      PRIMARY KEY (id)&lt;br /&gt;
                    )&lt;br /&gt;
                    ENGINE = INNODB&lt;br /&gt;
                    AUTO_INCREMENT = 1&lt;br /&gt;
                    AVG_ROW_LENGTH = 630&lt;br /&gt;
                    CHARACTER SET cp1251&lt;br /&gt;
                    COLLATE cp1251_general_ci&lt;br /&gt;
                    ROW_FORMAT = DYNAMIC;&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            if (param_select == 0)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 1)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 2)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET recordStop=1, date_time_stop =\&amp;quot;&amp;quot; + StopTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 3)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = @&amp;quot;CREATE TABLE IF NOT EXISTS error_send_http (&lt;br /&gt;
                    `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                    `err_id` varchar(8) NOT NULL,&lt;br /&gt;
                    `err_date` datetime NOT NULL,&lt;br /&gt;
                    `text` int(11) NOT NULL,&lt;br /&gt;
                    PRIMARY KEY (`id`)&lt;br /&gt;
                    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;&lt;br /&gt;
                &amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO error_send_http(err_id,err_date,text) VALUES  (&amp;quot; + id + &amp;quot;,\&amp;quot;&amp;quot; + StopTime + &amp;quot;,\&amp;quot;&amp;quot;+&amp;quot;,\&amp;quot;&amp;quot; + error_txt + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 4)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;select * from error_send_http&amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            MySQLConnected.CommandText = var_select;&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                ////con.Open();&lt;br /&gt;
                ////sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                if (param_select == 1 | param_select == 3) return null;&lt;br /&gt;
                ////MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                // Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (param_select == 0)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            //                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;ID&amp;quot;].ToString());&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;ID&amp;quot;].ToString() });&lt;br /&gt;
                            //                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        MySQLConnected.CommandText = &amp;quot;INSERT INTO calldetails(id,date_time,channel,numberPhone,recordStop,type_call,recordstart) VALUES  (&amp;quot; + myData[0][&amp;quot;ID&amp;quot;] + &amp;quot;,\&amp;quot;&amp;quot; + StartTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + ChannelNumber + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + PhoneFrom + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,0,&amp;quot; + type_call + &amp;quot;,\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                        MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    }&lt;br /&gt;
                    if (param_select == 4)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;id&amp;quot;].ToString()  ,  myData[i][&amp;quot;err_id&amp;quot;].ToString() , myData[i][&amp;quot;err_date&amp;quot;].ToString() ,  myData[i][&amp;quot;text&amp;quot;].ToString() });&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;id&amp;quot;].ToString());&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                //Console.WriteLine(rezult_str.Count);&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                MySQLConnected.Cancel();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file_for_send()&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;srv&amp;quot;, &amp;quot;db&amp;quot;, &amp;quot;user&amp;quot;, &amp;quot;pass&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =35 это подписаны документы, = 37 - отправка с ошибкой завершилась. переотправляем.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 _iemk_exchenge_log.id_iemk_docum документа, j=3 - подписаный файл,j-4 - _iemk_exchenge_log.id&lt;br /&gt;
            MySQLConnected.CommandText = &amp;quot;SELECT * FROM statistics._iemk_exchenge_log where (id_status=35 or id_status=37)&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
            DataTable dt = new DataTable();&lt;br /&gt;
            da.Fill(dt);&lt;br /&gt;
            var myData = dt.Select();&lt;br /&gt;
            string full_file_path = &amp;quot;&amp;quot;;&lt;br /&gt;
            var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
            if (myData.Length == 0)&lt;br /&gt;
            {&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;) + myData[i][&amp;quot;table_name&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (&amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;] + &amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (myData[i][&amp;quot;id_iemk_docum&amp;quot;].ToString()), (&amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString(), (myData[i][&amp;quot;id&amp;quot;]).ToString() });&lt;br /&gt;
                    Console.WriteLine(full_file_path + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            return rezult_str;&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        // поиск статуса , полученного в синхронном ответе в базе. если нет, добавляем, есть -&amp;gt; возвращаем id статуса&lt;br /&gt;
        public static void mysql_connect_search_sync_status(string failue, string reason, int sync_unswer_error_count, int id_document)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;srv&amp;quot;, &amp;quot;db&amp;quot;, &amp;quot;user&amp;quot;, &amp;quot;pass&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;SELECT * FROM _iemk_status_doc WHERE service_err_id like \&amp;quot;%&amp;quot; + failue + &amp;quot;%\&amp;quot;&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_status_doc(service_err_id,name,parent,is_work) VALUES  (\&amp;quot;&amp;quot; + failue + &amp;quot;\&amp;quot;,\&amp;quot;&amp;quot; + reason + &amp;quot;\&amp;quot;,17,1)&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;SELECT LAST_INSERT_ID() as last_id FROM _iemk_status_doc LIMIT 1&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySqlDataAdapter da1 = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                    DataTable dt1 = new DataTable();&lt;br /&gt;
                    da1.Fill(dt1);&lt;br /&gt;
                    var myData1 = dt1.Select();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData1[0][&amp;quot;last_id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData[0][&amp;quot;id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // втсвляем исходник и результат синхронного запроса в лог&lt;br /&gt;
        public static void mysql_connect_insert_sync_result(string request, string response, int id_documment)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;srv&amp;quot;, &amp;quot;db&amp;quot;, &amp;quot;u&amp;quot;, &amp;quot;pass&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
                // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
                //                File.WriteAllText(&amp;quot;response_error&amp;quot; + DateTime.Now.ToString(&amp;quot;yyyy_M_d_HH_mm_ss&amp;quot;) + &amp;quot;.xml&amp;quot;, &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;, Encoding.UTF8);&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_insert_result(List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; array_for_insert)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;srv&amp;quot;, &amp;quot;db&amp;quot;, &amp;quot;u&amp;quot;, &amp;quot;pass&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
            for (int i = 0; i &amp;lt;= array_for_insert.Count - 1; i++)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]));&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]);&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static String mysql_connect()&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            String str = @&amp;quot;Server=*.*.0*.*;Database=;Uid=;Pwd=;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlConnection con = null;&lt;br /&gt;
            con = new MySqlConnection(str);&lt;br /&gt;
            // Здесь хранится в поле Key *официальный* адрес для принятия асинхронных запросов.&lt;br /&gt;
            MySqlCommand sqlCom = new MySqlCommand(&amp;quot;SELECT * FROM _system_table where id=367&amp;quot;, con);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                con.Open();&lt;br /&gt;
                sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                //                Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                /*                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                                {&lt;br /&gt;
                                    for (int j = 0; j &amp;lt; myData[i].ItemArray.Length; j++)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                 */&lt;br /&gt;
                return myData[0][&amp;quot;param&amp;quot;].ToString();&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                //                MessageBox.Show(&amp;quot;Ошибка удаления!\n\n&amp;quot; + ex.Message, &amp;quot;ОШИБКА&amp;quot;);&lt;br /&gt;
                return &amp;quot;Error&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                con.Close();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 1&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using Microsoft.Win32;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public static string Srv = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string DataBase = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string User = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Passwrd = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_address = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_id = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_pass = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static int Autostart = 0;&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            var start= get_data_from_reestr();&lt;br /&gt;
            if (start == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                Program.Connect_to_asp();&lt;br /&gt;
            }&lt;br /&gt;
            if (start == 2)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Необходимо задать первоначальные настроки !&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                button2.Enabled = false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Interval = 1000;&lt;br /&gt;
            timer1.Tick += new EventHandler(timer1_Tick);&lt;br /&gt;
            timer1.Start();&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
            label1.Text = Program.glo_status1;&lt;br /&gt;
            get_data_from_reestr();&lt;br /&gt;
            Program.Connect_to_asp();&lt;br /&gt;
            button1.Enabled = false;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
            button4.Enabled = false;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public int get_data_from_reestr()&lt;br /&gt;
        {&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            RegistryKey SprecordsKey = currentUserKey.OpenSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            if (SprecordsKey != null)&lt;br /&gt;
            {&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;false&amp;quot; | (&amp;quot;AutoStart&amp;quot;) == null) Autostart = 0;&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;true&amp;quot;) Autostart = 1;&lt;br /&gt;
                Srv = SprecordsKey.GetValue(&amp;quot;Server&amp;quot;).ToString();&lt;br /&gt;
                DataBase = SprecordsKey.GetValue(&amp;quot;Database&amp;quot;).ToString();&lt;br /&gt;
                User = SprecordsKey.GetValue(&amp;quot;User&amp;quot;).ToString();&lt;br /&gt;
                Passwrd = SprecordsKey.GetValue(&amp;quot;Password&amp;quot;).ToString();&lt;br /&gt;
                Service_address = SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString();&lt;br /&gt;
                Service_id = (string)SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;);&lt;br /&gt;
                Service_pass = (string)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;);&lt;br /&gt;
                SprecordsKey.Close();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                Autostart = 2; //error&lt;br /&gt;
            }&lt;br /&gt;
            return Autostart;&lt;br /&gt;
        }&lt;br /&gt;
        private void checkBox1_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form2 Forma2 = new Form2();&lt;br /&gt;
            Forma2.ShowDialog();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label1_Click_1(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Form1_Load(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            label1.Text = Program.glo_status1; &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            label1.Text = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            Program.Connect_to_stop();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = false;&lt;br /&gt;
            button4.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Stop();&lt;br /&gt;
            Environment.Exit(0);&lt;br /&gt;
            Close();&lt;br /&gt;
            Application.Exit();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void timer1_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form1_Load(null, null);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 2&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using Microsoft.Win32;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    public partial class Form2 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Form2()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            //this.maskedTextBox1.Mask = &amp;quot;990\\.990\\.990\\.990&amp;quot;;&lt;br /&gt;
            //this.maskedTextBox1.PromptChar = &#039; &#039;;&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            RegistryKey SprecordsKey = currentUserKey.OpenSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            this.maskedTextBox1.ValidatingType = typeof(System.Net.IPAddress);&lt;br /&gt;
            if (SprecordsKey != null)&lt;br /&gt;
            {&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString()==&amp;quot;false&amp;quot;) this.checkBox1.Checked = false;&lt;br /&gt;
                else this.checkBox1.Checked = true ;&lt;br /&gt;
                this.maskedTextBox1.Text = SprecordsKey.GetValue(&amp;quot;Server&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_db.Text = SprecordsKey.GetValue(&amp;quot;Database&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_user.Text = SprecordsKey.GetValue(&amp;quot;User&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_pass.Text = SprecordsKey.GetValue(&amp;quot;Password&amp;quot;).ToString();&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;) == null | SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString()==&amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_addr.Text = &amp;quot;smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_addr.Text = SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString();&lt;br /&gt;
                }&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;) == null | (String)SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;) == &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_id.Text = &amp;quot;55&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_id.Text = SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;).ToString();&lt;br /&gt;
                }&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;) == null | (String)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;) == &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_pass.Text = &amp;quot;1Nn75tR[]()&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_pass.Text = (string)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SprecordsKey.Close();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                this.service_addr.Text = &amp;quot;smp.sheksna.local/json/server.php&amp;quot;;&lt;br /&gt;
                this.service_id.Text = &amp;quot;55&amp;quot;;&lt;br /&gt;
                this.service_pass.Text = &amp;quot;1Nn75tR[]()&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            this.label1.Text = String.Format(&lt;br /&gt;
                &amp;quot;Valid: {0}\nMessage: {1}\nReturned value: {2}&amp;quot;,&lt;br /&gt;
                e.IsValidInput,&lt;br /&gt;
                e.Message,&lt;br /&gt;
                e.ReturnValue);&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            foreach (string subkeys in currentUserKey.GetSubKeyNames())&lt;br /&gt;
            {&lt;br /&gt;
                if (subkeys == &amp;quot;SpRecords&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    currentUserKey.DeleteSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            RegistryKey helloKey = currentUserKey.CreateSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            if (checkBox1.Checked == false)&lt;br /&gt;
            {&lt;br /&gt;
                helloKey.SetValue(&amp;quot;AutoStart&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                helloKey.SetValue(&amp;quot;AutoStart&amp;quot;, &amp;quot;true&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Server&amp;quot;, maskedTextBox1.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Database&amp;quot;, textBox_db.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;User&amp;quot;, textBox_user.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Password&amp;quot;, textBox_pass.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_addr&amp;quot;, service_addr.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_id&amp;quot;, service_id.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_pass&amp;quot;, service_pass.Text.Trim());&lt;br /&gt;
            helloKey.Close();&lt;br /&gt;
            Close();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Close();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Form2_Load(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            IPAddress ipAddress;&lt;br /&gt;
            maskedTextBox1.Text = maskedTextBox1.Text.Replace(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            if (IPAddress.TryParse(maskedTextBox1.Text, out ipAddress))&lt;br /&gt;
            {&lt;br /&gt;
                MessageBox.Show(maskedTextBox1.Text + &amp;quot; верный&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                MessageBox.Show(maskedTextBox1.Text + &amp;quot; не верный&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            namespase_mysql_connection.MySql.mysql_connect_test(maskedTextBox1.Text, textBox_db.Text, textBox_user.Text, textBox_pass.Text);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void checkBox1_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label5_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label6_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label7_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form3 Forma3 = new Form3();&lt;br /&gt;
            Forma3.ShowDialog();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 3&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form3 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Form3()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            select();&lt;br /&gt;
        }&lt;br /&gt;
        public void select()&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 4, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, 0, &amp;quot;&amp;quot;);&lt;br /&gt;
            if (arr.Count == 0 | (arr[0][0] == &amp;quot;0&amp;quot; || arr[0][0] == &amp;quot;Error&amp;quot;))&lt;br /&gt;
            {&lt;br /&gt;
                this.dataGridView1.Columns.Add(&amp;quot;No errors&amp;quot;, &amp;quot;No errors&amp;quot;);&lt;br /&gt;
                this.dataGridView1.Columns[&amp;quot;No errors&amp;quot;].Width = 200;&lt;br /&gt;
                dataGridView1.Rows.Add(&amp;quot;Нет ошибок !&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                StringBuilder builder = new StringBuilder();&lt;br /&gt;
                if (arr.Count == 0)&lt;br /&gt;
                    Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;id&amp;quot;, &amp;quot;Идентификатор&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;id&amp;quot;].Width = 20;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;err_id&amp;quot;, &amp;quot;id ошибки&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;err_id&amp;quot;].Width = 50;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;date_err&amp;quot;, &amp;quot;Дата ошибки&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;date_err&amp;quot;].Width = 150;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;text_err&amp;quot;, &amp;quot;Описание&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;text_err&amp;quot;].Width = 260;&lt;br /&gt;
                    this.dataGridView1.AllowUserToAddRows = false; //запрешаем пользователю самому добавлять строки&lt;br /&gt;
                    for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            //Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot;id=&amp;quot; + arr[i][1] + &amp;quot;id=&amp;quot; + arr[i][2] + &amp;quot;id=&amp;quot; + arr[i][3]);&lt;br /&gt;
                            //Добавляем строку, указывая значения колонок поочереди слева направо&lt;br /&gt;
                            dataGridView1.Rows.Add(arr[i][0], arr[i][1], arr[i][2], arr[i][3]);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4171</id>
		<title>Sp Rec</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4171"/>
		<updated>2018-02-20T12:29:29Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной модуль&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using spsdksvr;&lt;br /&gt;
using spsdksw;&lt;br /&gt;
using SpRecord;&lt;br /&gt;
using System.Threading; &lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
using System.Runtime.InteropServices;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using Newtonsoft.Json;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
using System.Web.Script.Serialization;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public class myThread&lt;br /&gt;
        {&lt;br /&gt;
            public static Thread thread;&lt;br /&gt;
&lt;br /&gt;
            public myThread(string name,int start_stop,int count_thread) //Конструктор получает имя функции&lt;br /&gt;
            {&lt;br /&gt;
&lt;br /&gt;
                if (start_stop == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    thread = new Thread(Program.ChannelListen);&lt;br /&gt;
                    thread.Name = name;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;thread.Name =&amp;quot; + thread.Name + &amp;quot;, &amp;quot; + thread.ManagedThreadId);&lt;br /&gt;
                    thread.IsBackground = true;&lt;br /&gt;
                    thread.Start();//передача параметра в поток&lt;br /&gt;
                }&lt;br /&gt;
                else if (start_stop == 2)&lt;br /&gt;
                {&lt;br /&gt;
                    thread.Abort();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
/*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
            {&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                    Thread.Sleep(0);&lt;br /&gt;
                }&lt;br /&gt;
                Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
*/      &lt;br /&gt;
        &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    public class Connect_to_sprecord&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME = 0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        public Connect_to_sprecord(string ch_name, int start_stop) //Конструктор получает имя функции&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            if (start_stop == 1)&lt;br /&gt;
            {&lt;br /&gt;
                string ChannelName = ch_name;&lt;br /&gt;
                Console.WriteLine(ChannelName);&lt;br /&gt;
                string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
                string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string StartTime = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool GetLineState;&lt;br /&gt;
                bool GetWriting;&lt;br /&gt;
                int WaitMessage;&lt;br /&gt;
                string TypeCall = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool IsLineActive;&lt;br /&gt;
                object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
                object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
                int a = 0;&lt;br /&gt;
&lt;br /&gt;
                SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
                SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                while (SPRecordChannel.Connected == true)&lt;br /&gt;
                {&lt;br /&gt;
                    if (Program.glo_status_int == 1) break;&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                    //Console.WriteLine(GetLineState);&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                    //Console.WriteLine(GetWriting);&lt;br /&gt;
                    //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                    SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                    if (IsLineActive != true) break;&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                    IsLineActive = true;&lt;br /&gt;
                    //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                    WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                    if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                    {&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                        IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                        if (IsLineActive == false) continue;&lt;br /&gt;
                        /*object Msg;&lt;br /&gt;
                        var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                        byte[] bytes = (byte[])Msg;&lt;br /&gt;
                        string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                        export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                        FileName = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                        TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                        StartTime = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                        TypeCall = ChannelInfo.ToString();&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        if ((int)TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                            PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                            SubPhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                        }&lt;br /&gt;
                        System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                        Console.WriteLine(&amp;quot;ChannelName=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall[0] + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                        //glo_status1 = ChannelName + &amp;quot; &amp;quot; + TypeCall[0];&lt;br /&gt;
                        if (TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;,&amp;quot; + SubPhoneFrom;&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                        }&lt;br /&gt;
                        Program.glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall;&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        Program.export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                    }&lt;br /&gt;
                    //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                    //}&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordChannel.Disconnect();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                            Thread.Sleep(0);&lt;br /&gt;
                        }&lt;br /&gt;
                        Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
        */&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME=0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RING = 0x0000000D; // WordBool&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONETO = 0x0000000A; // BSTR&lt;br /&gt;
&lt;br /&gt;
        // max число каналов =4 &lt;br /&gt;
        public static string glo_status1 = &amp;quot; Ожидание запуска ...&amp;quot;;&lt;br /&gt;
        public static int glo_status_int = 0;&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            /*string json1 =&amp;quot;{\&amp;quot;error\&amp;quot;:[],\&amp;quot;data\&amp;quot;:{\&amp;quot;status\&amp;quot;:\&amp;quot;ok\&amp;quot;,\&amp;quot;unicod\&amp;quot;:42}}&amp;quot;;&lt;br /&gt;
            var json2 =&amp;quot;{\&amp;quot;error\&amp;quot;:{\&amp;quot;id\&amp;quot;:1,\&amp;quot;text\&amp;quot;:\&amp;quot;error autorization\&amp;quot;},\&amp;quot;data\&amp;quot;:[]}&amp;quot;;&lt;br /&gt;
          &lt;br /&gt;
            var json3 =&amp;quot;{\&amp;quot;response\&amp;quot;:[{\&amp;quot;id\&amp;quot;:269058571,\&amp;quot;first_name\&amp;quot;:\&amp;quot;Name\&amp;quot;,\&amp;quot;last_name\&amp;quot;:\&amp;quot;LastName\&amp;quot;,\&amp;quot;photo_50\&amp;quot;:\&amp;quot;http://cs624717.vk.me/v624717571/21718/X8.jpg\&amp;quot;}]}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            using (var reader = new StreamReader(json1))&lt;br /&gt;
            {&lt;br /&gt;
                System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                var objText = reader.ReadToEnd();&lt;br /&gt;
                var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(json1);&lt;br /&gt;
                Console.WriteLine(jsonData);&lt;br /&gt;
                Console.WriteLine(&amp;quot;end&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            return;		*/&lt;br /&gt;
            // Подключаемся&lt;br /&gt;
            //SpRecordClient SPRecordClient = new spsdksvr.SpRecordClient();&lt;br /&gt;
            Form1 Forma = new Form1();&lt;br /&gt;
            Forma.ShowDialog();&lt;br /&gt;
            //Forma.SetLabelText(glo_status1);&lt;br /&gt;
            //Forma.Show();&lt;br /&gt;
            //Console.ReadKey();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        class RootObject&lt;br /&gt;
        {&lt;br /&gt;
            public Item1 error { get; set; }&lt;br /&gt;
            public Item2 data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item1&lt;br /&gt;
        {&lt;br /&gt;
            public string id { get; set; }&lt;br /&gt;
            public string text { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item2&lt;br /&gt;
        {&lt;br /&gt;
            public string status { get; set; }&lt;br /&gt;
            public string unicod { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_stop()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 1;&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException)&lt;br /&gt;
            {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток не прерван &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_asp()&lt;br /&gt;
        {&lt;br /&gt;
            //MessageBox.Show(&amp;quot;hello pr&amp;quot;);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 0;&lt;br /&gt;
                SpRecordClient SPRecordClient = new SpRecordClient();&lt;br /&gt;
                Console.WriteLine(&amp;quot;Connect_to_asp =&amp;quot;);&lt;br /&gt;
                var Connect = SPRecordClient.Connect(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                // Получаем список каналов&lt;br /&gt;
                string ChannelList = &amp;quot;&amp;quot;;&lt;br /&gt;
                string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
                var Channel = SPRecordClient.GetChannelNames(out ChannelList, 1);&lt;br /&gt;
                Char delimiter = &#039;|&#039;;&lt;br /&gt;
                String[] substrings = ChannelList.Split(delimiter);&lt;br /&gt;
                //export_to_file(FileLogFileName, &amp;quot;1 start&amp;quot;);&lt;br /&gt;
                //Program p = new Program();&lt;br /&gt;
                int i = 0;&lt;br /&gt;
                foreach (var substring in substrings)&lt;br /&gt;
                {&lt;br /&gt;
                    i += 1;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;substring &amp;quot; + substring);&lt;br /&gt;
                    //myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                    switch (i)&lt;br /&gt;
                    {&lt;br /&gt;
                        case 1:&lt;br /&gt;
                            //Connect_to_sprecord t1 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 2:&lt;br /&gt;
                            //Connect_to_sprecord t2 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t2= new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 3:&lt;br /&gt;
                            //Connect_to_sprecord t3 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t3 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 4:&lt;br /&gt;
                            myThread t4 = new myThread(substring, 1, i);&lt;br /&gt;
                            //Connect_to_sprecord t4 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            break;&lt;br /&gt;
                    }&lt;br /&gt;
                    //Console.ReadKey();&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек. для инициализации&lt;br /&gt;
                    Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordClient.Disconnect();&lt;br /&gt;
                //var devName = SPRecordClient.GetDeviceNames;&lt;br /&gt;
                Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException exc)&lt;br /&gt;
            {&lt;br /&gt;
                if ((int)exc.ExceptionState == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Прерывание отменено! Код завершения: &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
                    Thread.ResetAbort();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток прерван, код завершения &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void ChannelListen()&lt;br /&gt;
        {&lt;br /&gt;
            string ChannelName = myThread.thread.Name;&lt;br /&gt;
            int id_calldetails = 0;&lt;br /&gt;
            Console.WriteLine(ChannelName);&lt;br /&gt;
            string current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            int priznak_incomin_ring = 0;&lt;br /&gt;
            string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
            string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            DateTime StartTime;&lt;br /&gt;
            int ring_count = 0; &lt;br /&gt;
            bool GetLineState;&lt;br /&gt;
            bool GetWriting;&lt;br /&gt;
            int WaitMessage;&lt;br /&gt;
            int TypeCall = 0;&lt;br /&gt;
            string TypeCall_str = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool IsLineActive;&lt;br /&gt;
            object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
            object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool incoming_ring;&lt;br /&gt;
            object Is_incoming_ring = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
            SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            priznak_incomin_ring = 0;&lt;br /&gt;
            while (SPRecordChannel.Connected == true)&lt;br /&gt;
            {&lt;br /&gt;
                if (glo_status_int==1) break;&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                //Console.WriteLine(GetLineState);&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                //Console.WriteLine(GetWriting);&lt;br /&gt;
                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                if (IsLineActive != true) break;&lt;br /&gt;
                //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                 IsLineActive = true;&lt;br /&gt;
                //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                        WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                        if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                            IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RING, out Is_incoming_ring);&lt;br /&gt;
                            incoming_ring = (bool)Is_incoming_ring;&lt;br /&gt;
                            if (incoming_ring == true)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName == &amp;quot;&amp;quot; &amp;amp; priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 1;       // идет звонок оператору&lt;br /&gt;
                                }&lt;br /&gt;
                                //if (current_FileName != FileName)&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGCOUNT, out ChannelInfo);&lt;br /&gt;
                                if ((int)ChannelInfo &amp;gt; ring_count)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = (int)ChannelInfo;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (priznak_incomin_ring == 1)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = 0;&lt;br /&gt;
                                    priznak_incomin_ring = 2; // статус - снята трубка&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGFIRSTDATETIME, out ChannelInfo);&lt;br /&gt;
                                    StartTime = ((DateTime)ChannelInfo);&lt;br /&gt;
                                    //StartTime = StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + StartTime.Hour+&amp;quot;:&amp;quot;StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second;&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                    TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                    //if (TypeCall != 2)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        PhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        SubPhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                    }&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot;+StartTime.Hour+&amp;quot;:&amp;quot;+StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second,&amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom,0,&amp;quot;&amp;quot;,1,0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                        Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                string response = send_id(&amp;quot;add_popup&amp;quot;, id_calldetails, Int32.Parse((ChannelName[(ChannelName.Length - 1)]).ToString()), PhoneFrom);&lt;br /&gt;
                                                Console.WriteLine(response);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
&lt;br /&gt;
                                }&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                /*if (current_FileName == &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;dozvon end&amp;quot;);&lt;br /&gt;
                                }*/&lt;br /&gt;
/*                                if (current_FileName == FileName &amp;amp;&amp;amp; priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName+ &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                }*/&lt;br /&gt;
                            }&lt;br /&gt;
                            if (IsLineActive == false)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName != &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    if (priznak_incomin_ring == 2) TypeCall = 2;    // out call&lt;br /&gt;
                                    if (priznak_incomin_ring == 0) TypeCall = 1; // in call&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 2, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    TypeCall_str = &amp;quot; Ожидание вызова ...&amp;quot;;&lt;br /&gt;
                                    glo_status1 =  TypeCall_str;&lt;br /&gt;
                                }&lt;br /&gt;
                                continue;&lt;br /&gt;
                            }&lt;br /&gt;
                            if (priznak_incomin_ring == 2 &amp;amp; TypeCall != 2)&lt;br /&gt;
                            {&lt;br /&gt;
                                //сюда вставить продолжительность звонка&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                                FileName = ChannelInfo.ToString();&lt;br /&gt;
                                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, ring_count, FileName, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot; ring_count=&amp;quot; + ring_count + &amp;quot; priznak_incomin_ring = 2;&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
&lt;br /&gt;
  /*object Msg;&lt;br /&gt;
                            var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                            byte[] bytes = (byte[])Msg;&lt;br /&gt;
                            string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                            export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                            FileName = ChannelInfo.ToString();&lt;br /&gt;
                            if (current_FileName != FileName)&lt;br /&gt;
                            {&lt;br /&gt;
                                current_FileName = FileName;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                                TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                                StartTime = (DateTime)ChannelInfo;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                if (priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONETO, out ChannelInfo);&lt;br /&gt;
                                    //PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom, 0, FileName, 2, 0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        MessageBox.Show(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                                System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                                //Console.WriteLine(&amp;quot;ChannelName1=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom + &amp;quot;ChannelName=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                if (priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                }&lt;br /&gt;
                                else&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                                }&lt;br /&gt;
                                glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall_str;&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                priznak_incomin_ring = 0;&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                            priznak_incomin_ring = 0;&lt;br /&gt;
                            ring_count = 0;&lt;br /&gt;
                            export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                            //continue;&lt;br /&gt;
                        }&lt;br /&gt;
                     //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    //Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                //}&lt;br /&gt;
            }&lt;br /&gt;
            SPRecordChannel.Disconnect();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static string CreateMD5(string input)&lt;br /&gt;
        {&lt;br /&gt;
            // Use input string to calculate MD5 hash&lt;br /&gt;
            using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())&lt;br /&gt;
            {&lt;br /&gt;
                byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);&lt;br /&gt;
                byte[] hashBytes = md5.ComputeHash(inputBytes);&lt;br /&gt;
&lt;br /&gt;
                // Convert the byte array to hexadecimal string&lt;br /&gt;
                StringBuilder sb = new StringBuilder();&lt;br /&gt;
                for (int i = 0; i &amp;lt; hashBytes.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    sb.Append(hashBytes[i].ToString(&amp;quot;X2&amp;quot;));&lt;br /&gt;
                }&lt;br /&gt;
                return sb.ToString();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public class Request_type&lt;br /&gt;
        {&lt;br /&gt;
            public string type { get; set; }&lt;br /&gt;
            public int unicod { get; set; }&lt;br /&gt;
            public int chanel { get; set; }&lt;br /&gt;
            public string phone { get; set; }&lt;br /&gt;
&lt;br /&gt;
            // public Dictionary&amp;lt;string, string&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class Response_type&lt;br /&gt;
        {&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; error { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class ErrorList&lt;br /&gt;
            {&lt;br /&gt;
                public string id { get; set; }&lt;br /&gt;
                public string text { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
            [Serializable]&lt;br /&gt;
            public class DataList&lt;br /&gt;
            {&lt;br /&gt;
                public string status { get; set; }&lt;br /&gt;
                public string unicod { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
        public static string send_id(string type, int unicod, int chanel, string phone)&lt;br /&gt;
        {&lt;br /&gt;
            // ^id_documment=_iemk_exchenge_log.id&lt;br /&gt;
            string response = &amp;quot;&amp;quot;;&lt;br /&gt;
            //            var SourceFile = &amp;quot;&amp;quot;;&lt;br /&gt;
            //string urlString = &amp;quot;http://smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
            var Host = Form1.Service_address;&lt;br /&gt;
            string urlString = &amp;quot;http://&amp;quot; + Host;&lt;br /&gt;
            var SoapAction = &amp;quot;&amp;quot;;&lt;br /&gt;
            string id_service = Form1.Service_id ;&lt;br /&gt;
            string passwrd = id_service + Form1.Service_pass;&lt;br /&gt;
            passwrd = CreateMD5(passwrd);&lt;br /&gt;
            urlString = urlString + &amp;quot;?id_service=&amp;quot;+id_service+&amp;quot;&amp;amp;auth_key=&amp;quot; + passwrd.ToLower();&lt;br /&gt;
            //string[] MyArray = { type, unicod.ToString(), chanel.ToString(), phone };&lt;br /&gt;
            Request_type MyArray = new Request_type();&lt;br /&gt;
                MyArray.type=type;&lt;br /&gt;
                MyArray.unicod = unicod;&lt;br /&gt;
                MyArray.chanel = chanel;&lt;br /&gt;
                if (phone == null) MyArray.phone = &amp;quot;000000&amp;quot;; else MyArray.phone = phone;&lt;br /&gt;
            var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            string json = jsonSerializer.Serialize(MyArray);&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;json=&amp;quot; + json);&lt;br /&gt;
            var response1 = XmlHttpRequest(json, urlString);&lt;br /&gt;
            // запись в файл&lt;br /&gt;
            if (Int32.Parse(response1.id)&amp;gt;0)&lt;br /&gt;
            {&lt;br /&gt;
                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 3, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, Int32.Parse(response1.id), response1.text);&lt;br /&gt;
            }&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;response error id =&amp;quot; + response1.id + &amp;quot; response text =&amp;quot; + response1.text);&lt;br /&gt;
            string request = &amp;quot;&amp;quot;;&lt;br /&gt;
            var jsonDeSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            Response_type a = jsonDeSerializer.Deserialize&amp;lt;Response_type&amp;gt;(response);&lt;br /&gt;
            ErrorList a1 = jsonDeSerializer.Deserialize&amp;lt;ErrorList&amp;gt;(response);&lt;br /&gt;
            var DataList = jsonDeSerializer.Deserialize&amp;lt;DataList&amp;gt;(response);&lt;br /&gt;
            Console.WriteLine(&amp;quot;a =&amp;quot; + a);&lt;br /&gt;
            return response;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static ErrorList XmlHttpRequest(string Content, string urlString)&lt;br /&gt;
        {&lt;br /&gt;
            var ContentType = &amp;quot;application/json;&amp;quot;;&lt;br /&gt;
            // param_return=1 полный ответ, 2 урезаный&lt;br /&gt;
                /* Get example *//*&lt;br /&gt;
&lt;br /&gt;
                byte[] bytes;&lt;br /&gt;
                bytes = System.Text.Encoding.UTF8.GetBytes(get_s);&lt;br /&gt;
&lt;br /&gt;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(get_s);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
&lt;br /&gt;
                using (HttpWebResponse response1 = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response1.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }&lt;br /&gt;
                 */&lt;br /&gt;
                /* Post */&lt;br /&gt;
&lt;br /&gt;
            byte[] dataBytes = Encoding.UTF8.GetBytes(Content);&lt;br /&gt;
&lt;br /&gt;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlString);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
                request.ContentLength = dataBytes.Length;&lt;br /&gt;
                request.ContentType = ContentType;&lt;br /&gt;
                request.Method = &amp;quot;POST&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                using (Stream requestBody = request.GetRequestStream())&lt;br /&gt;
                {&lt;br /&gt;
                    requestBody.Write(dataBytes, 0, dataBytes.Length);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                /*using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }*/&lt;br /&gt;
                using (var twitpicResponse = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                {&lt;br /&gt;
&lt;br /&gt;
                    using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))&lt;br /&gt;
                    {&lt;br /&gt;
                        JavaScriptSerializer js = new JavaScriptSerializer();&lt;br /&gt;
                        var objText = reader.ReadToEnd();&lt;br /&gt;
                        //var json44 = JsonConvert.SerializeObject(objText, Formatting.Indented);&lt;br /&gt;
                        var myojb = js.DeserializeObject(objText);&lt;br /&gt;
&lt;br /&gt;
                        var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(objText);&lt;br /&gt;
                        ErrorList ErrorValue_class = new ErrorList();&lt;br /&gt;
                        foreach (KeyValuePair&amp;lt;string, object&amp;gt; keyValue in jsonData)&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(keyValue.Key + &amp;quot; - &amp;quot; + keyValue.Value);&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;error&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                string ErrorValue_string = js.Serialize(keyValue.Value);&lt;br /&gt;
                                if (ErrorValue_string == &amp;quot;[]&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                } &lt;br /&gt;
                                ErrorValue_class = js.Deserialize&amp;lt;ErrorList&amp;gt;(ErrorValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;ErrorValue_class=&amp;quot; + ErrorValue_class.id + &amp;quot;ErrorValue_class.text=&amp;quot; + ErrorValue_class.text);&lt;br /&gt;
                            }&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;data&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                                string dataValue_string = jsonSerializer.Serialize(keyValue.Value);&lt;br /&gt;
                                if (dataValue_string == &amp;quot;[]&amp;quot;) break;&lt;br /&gt;
                                DataList Data_class = js.Deserialize&amp;lt;DataList&amp;gt;(dataValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;myojb2212.status=&amp;quot; + Data_class.status + &amp;quot;myojb2212.value=&amp;quot; + Data_class.unicod);&lt;br /&gt;
                                ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                return ErrorValue_class;&lt;br /&gt;
                            }                              &lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
/*                    Object obj;&lt;br /&gt;
                    bool b = jsonData.TryGetValue(&amp;quot;error&amp;quot;, out obj);&lt;br /&gt;
                        var splashInfo = JsonConvert.DeserializeObject&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        ErrorList myojb1 = js.Deserialize&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        DataList myojb2 = js.Deserialize&amp;lt;DataList&amp;gt;(objText);&lt;br /&gt;
                        return myojb1;*/&lt;br /&gt;
                        return ErrorValue_class;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        public static void export_to_file(string filename, string text)&lt;br /&gt;
        {&lt;br /&gt;
            FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);&lt;br /&gt;
            StreamWriter sw = new StreamWriter(fs);&lt;br /&gt;
            Console.WriteLine(text);&lt;br /&gt;
            sw.WriteLine(text);&lt;br /&gt;
            sw.Close();&lt;br /&gt;
        }&lt;br /&gt;
/*        public static void Add()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;1&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(1000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Add1()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;2&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(3000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }*/&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
MySql подключение&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using MySql;&lt;br /&gt;
using MySql.Data.MySqlClient;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using sprec;&lt;br /&gt;
&lt;br /&gt;
namespace namespase_mysql_connection&lt;br /&gt;
{&lt;br /&gt;
    class MySql&lt;br /&gt;
    {&lt;br /&gt;
        public static MySqlCommand ConnectToMySQL(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlConnection Connection = new MySqlConnection(&amp;quot;Data Source=&amp;quot; + MySQL_host + &amp;quot;;Database=&amp;quot; + MySQL_db + &amp;quot;;User Id=&amp;quot; + MySQL_uid + &amp;quot;;Password=&amp;quot; + MySQL_pw + &amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;); // Создаем соединение. Формат строки соединения подробно описан в прилагающейся документации.&lt;br /&gt;
            MySqlCommand Query = new MySqlCommand(); // С помощью этого объекта выполняются запросы к БД&lt;br /&gt;
            Query.Connection = Connection; // Присвоим объекту только что созданное соединение&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соединяюсь с сервером базы данных...&amp;quot;);&lt;br /&gt;
                Connection.Open();// Соединяемся&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соеденено&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (MySqlException SSDB_Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Ошибка - выходим&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Проверьте настройки соединения, не могу соединиться с базой данных!\nОшибка: &amp;quot; + SSDB_Exception.Message);&lt;br /&gt;
                MessageBox.Show(&amp;quot;Ошибка подключения !&amp;quot;);&lt;br /&gt;
                return Query;&lt;br /&gt;
            }&lt;br /&gt;
            return Query;&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_test(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            Console.WriteLine(MySQLConnected.ToString());&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw, int param_select, string StartTime, string StopTime, char ChannelNumber, string PhoneFrom, int ringCount, string FileName, int type_call, int id,string error_txt)&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=test;Database=twest;Uid=test;Pwd=test;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            //             List&amp;lt;string&amp;gt; ret_file_path = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
            //            ArrayList ret_file_path = new ArrayList();&lt;br /&gt;
            ////String str = @&amp;quot;Server=&amp;quot;+MySQL_host+&amp;quot;;Database=&amp;quot;+MySQL_db+&amp;quot;;Uid=&amp;quot;+MySQL_uid+&amp;quot;;Pwd=&amp;quot;+MySQL_pw+&amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            // путь к документам \\10.*.*.*\iemk&lt;br /&gt;
            ////MySqlConnection con = null;&lt;br /&gt;
            ////con = new MySqlConnection(str);&lt;br /&gt;
            // путь к документам \\10.*.*.*\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            string var_select = &amp;quot;&amp;quot;;&lt;br /&gt;
            MySQLConnected.CommandText = @&amp;quot;CREATE TABLE IF NOT EXISTS calldetails (&lt;br /&gt;
                      id int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                      date_time datetime DEFAULT NULL,&lt;br /&gt;
                      channel varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      ringCount varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      numberPhone varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStart varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStop varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      date_time_stop datetime DEFAULT NULL,&lt;br /&gt;
                      type_call int(11) DEFAULT NULL,&lt;br /&gt;
                      PRIMARY KEY (id)&lt;br /&gt;
                    )&lt;br /&gt;
                    ENGINE = INNODB&lt;br /&gt;
                    AUTO_INCREMENT = 1&lt;br /&gt;
                    AVG_ROW_LENGTH = 630&lt;br /&gt;
                    CHARACTER SET cp1251&lt;br /&gt;
                    COLLATE cp1251_general_ci&lt;br /&gt;
                    ROW_FORMAT = DYNAMIC;&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            if (param_select == 0)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 1)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 2)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET recordStop=1, date_time_stop =\&amp;quot;&amp;quot; + StopTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 3)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = @&amp;quot;CREATE TABLE IF NOT EXISTS error_send_http (&lt;br /&gt;
                    `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                    `err_id` varchar(8) NOT NULL,&lt;br /&gt;
                    `err_date` datetime NOT NULL,&lt;br /&gt;
                    `text` int(11) NOT NULL,&lt;br /&gt;
                    PRIMARY KEY (`id`)&lt;br /&gt;
                    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;&lt;br /&gt;
                &amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO error_send_http(err_id,err_date,text) VALUES  (&amp;quot; + id + &amp;quot;,\&amp;quot;&amp;quot; + StopTime + &amp;quot;,\&amp;quot;&amp;quot;+&amp;quot;,\&amp;quot;&amp;quot; + error_txt + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 4)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;select * from error_send_http&amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            MySQLConnected.CommandText = var_select;&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                ////con.Open();&lt;br /&gt;
                ////sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                if (param_select == 1 | param_select == 3) return null;&lt;br /&gt;
                ////MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                // Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (param_select == 0)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            //                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;ID&amp;quot;].ToString());&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;ID&amp;quot;].ToString() });&lt;br /&gt;
                            //                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        MySQLConnected.CommandText = &amp;quot;INSERT INTO calldetails(id,date_time,channel,numberPhone,recordStop,type_call,recordstart) VALUES  (&amp;quot; + myData[0][&amp;quot;ID&amp;quot;] + &amp;quot;,\&amp;quot;&amp;quot; + StartTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + ChannelNumber + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + PhoneFrom + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,0,&amp;quot; + type_call + &amp;quot;,\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                        MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    }&lt;br /&gt;
                    if (param_select == 4)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;id&amp;quot;].ToString()  ,  myData[i][&amp;quot;err_id&amp;quot;].ToString() , myData[i][&amp;quot;err_date&amp;quot;].ToString() ,  myData[i][&amp;quot;text&amp;quot;].ToString() });&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;id&amp;quot;].ToString());&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                //Console.WriteLine(rezult_str.Count);&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                MySQLConnected.Cancel();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file_for_send()&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;srv&amp;quot;, &amp;quot;db&amp;quot;, &amp;quot;user&amp;quot;, &amp;quot;pass&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =35 это подписаны документы, = 37 - отправка с ошибкой завершилась. переотправляем.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 _iemk_exchenge_log.id_iemk_docum документа, j=3 - подписаный файл,j-4 - _iemk_exchenge_log.id&lt;br /&gt;
            MySQLConnected.CommandText = &amp;quot;SELECT * FROM statistics._iemk_exchenge_log where (id_status=35 or id_status=37)&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
            DataTable dt = new DataTable();&lt;br /&gt;
            da.Fill(dt);&lt;br /&gt;
            var myData = dt.Select();&lt;br /&gt;
            string full_file_path = &amp;quot;&amp;quot;;&lt;br /&gt;
            var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
            if (myData.Length == 0)&lt;br /&gt;
            {&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;) + myData[i][&amp;quot;table_name&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (&amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;] + &amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (myData[i][&amp;quot;id_iemk_docum&amp;quot;].ToString()), (&amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString(), (myData[i][&amp;quot;id&amp;quot;]).ToString() });&lt;br /&gt;
                    Console.WriteLine(full_file_path + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            return rezult_str;&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        // поиск статуса , полученного в синхронном ответе в базе. если нет, добавляем, есть -&amp;gt; возвращаем id статуса&lt;br /&gt;
        public static void mysql_connect_search_sync_status(string failue, string reason, int sync_unswer_error_count, int id_document)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;srv&amp;quot;, &amp;quot;db&amp;quot;, &amp;quot;user&amp;quot;, &amp;quot;pass&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;SELECT * FROM _iemk_status_doc WHERE service_err_id like \&amp;quot;%&amp;quot; + failue + &amp;quot;%\&amp;quot;&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_status_doc(service_err_id,name,parent,is_work) VALUES  (\&amp;quot;&amp;quot; + failue + &amp;quot;\&amp;quot;,\&amp;quot;&amp;quot; + reason + &amp;quot;\&amp;quot;,17,1)&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;SELECT LAST_INSERT_ID() as last_id FROM _iemk_status_doc LIMIT 1&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySqlDataAdapter da1 = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                    DataTable dt1 = new DataTable();&lt;br /&gt;
                    da1.Fill(dt1);&lt;br /&gt;
                    var myData1 = dt1.Select();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData1[0][&amp;quot;last_id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData[0][&amp;quot;id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // втсвляем исходник и результат синхронного запроса в лог&lt;br /&gt;
        public static void mysql_connect_insert_sync_result(string request, string response, int id_documment)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
                // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
                //                File.WriteAllText(&amp;quot;response_error&amp;quot; + DateTime.Now.ToString(&amp;quot;yyyy_M_d_HH_mm_ss&amp;quot;) + &amp;quot;.xml&amp;quot;, &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;, Encoding.UTF8);&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_insert_result(List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; array_for_insert)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
            for (int i = 0; i &amp;lt;= array_for_insert.Count - 1; i++)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]));&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]);&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static String mysql_connect()&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            String str = @&amp;quot;Server=*.*.0*.*;Database=;Uid=;Pwd=;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlConnection con = null;&lt;br /&gt;
            con = new MySqlConnection(str);&lt;br /&gt;
            // Здесь хранится в поле Key *официальный* адрес для принятия асинхронных запросов.&lt;br /&gt;
            MySqlCommand sqlCom = new MySqlCommand(&amp;quot;SELECT * FROM _system_table where id=367&amp;quot;, con);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                con.Open();&lt;br /&gt;
                sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                //                Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                /*                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                                {&lt;br /&gt;
                                    for (int j = 0; j &amp;lt; myData[i].ItemArray.Length; j++)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                 */&lt;br /&gt;
                return myData[0][&amp;quot;param&amp;quot;].ToString();&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                //                MessageBox.Show(&amp;quot;Ошибка удаления!\n\n&amp;quot; + ex.Message, &amp;quot;ОШИБКА&amp;quot;);&lt;br /&gt;
                return &amp;quot;Error&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                con.Close();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 1&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using Microsoft.Win32;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public static string Srv = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string DataBase = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string User = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Passwrd = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_address = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_id = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_pass = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static int Autostart = 0;&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            var start= get_data_from_reestr();&lt;br /&gt;
            if (start == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                Program.Connect_to_asp();&lt;br /&gt;
            }&lt;br /&gt;
            if (start == 2)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Необходимо задать первоначальные настроки !&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                button2.Enabled = false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Interval = 1000;&lt;br /&gt;
            timer1.Tick += new EventHandler(timer1_Tick);&lt;br /&gt;
            timer1.Start();&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
            label1.Text = Program.glo_status1;&lt;br /&gt;
            get_data_from_reestr();&lt;br /&gt;
            Program.Connect_to_asp();&lt;br /&gt;
            button1.Enabled = false;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
            button4.Enabled = false;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public int get_data_from_reestr()&lt;br /&gt;
        {&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            RegistryKey SprecordsKey = currentUserKey.OpenSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            if (SprecordsKey != null)&lt;br /&gt;
            {&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;false&amp;quot; | (&amp;quot;AutoStart&amp;quot;) == null) Autostart = 0;&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;true&amp;quot;) Autostart = 1;&lt;br /&gt;
                Srv = SprecordsKey.GetValue(&amp;quot;Server&amp;quot;).ToString();&lt;br /&gt;
                DataBase = SprecordsKey.GetValue(&amp;quot;Database&amp;quot;).ToString();&lt;br /&gt;
                User = SprecordsKey.GetValue(&amp;quot;User&amp;quot;).ToString();&lt;br /&gt;
                Passwrd = SprecordsKey.GetValue(&amp;quot;Password&amp;quot;).ToString();&lt;br /&gt;
                Service_address = SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString();&lt;br /&gt;
                Service_id = (string)SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;);&lt;br /&gt;
                Service_pass = (string)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;);&lt;br /&gt;
                SprecordsKey.Close();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                Autostart = 2; //error&lt;br /&gt;
            }&lt;br /&gt;
            return Autostart;&lt;br /&gt;
        }&lt;br /&gt;
        private void checkBox1_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form2 Forma2 = new Form2();&lt;br /&gt;
            Forma2.ShowDialog();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label1_Click_1(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Form1_Load(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            label1.Text = Program.glo_status1; &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            label1.Text = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            Program.Connect_to_stop();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = false;&lt;br /&gt;
            button4.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Stop();&lt;br /&gt;
            Environment.Exit(0);&lt;br /&gt;
            Close();&lt;br /&gt;
            Application.Exit();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void timer1_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form1_Load(null, null);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 2&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using Microsoft.Win32;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    public partial class Form2 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Form2()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            //this.maskedTextBox1.Mask = &amp;quot;990\\.990\\.990\\.990&amp;quot;;&lt;br /&gt;
            //this.maskedTextBox1.PromptChar = &#039; &#039;;&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            RegistryKey SprecordsKey = currentUserKey.OpenSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            this.maskedTextBox1.ValidatingType = typeof(System.Net.IPAddress);&lt;br /&gt;
            if (SprecordsKey != null)&lt;br /&gt;
            {&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString()==&amp;quot;false&amp;quot;) this.checkBox1.Checked = false;&lt;br /&gt;
                else this.checkBox1.Checked = true ;&lt;br /&gt;
                this.maskedTextBox1.Text = SprecordsKey.GetValue(&amp;quot;Server&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_db.Text = SprecordsKey.GetValue(&amp;quot;Database&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_user.Text = SprecordsKey.GetValue(&amp;quot;User&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_pass.Text = SprecordsKey.GetValue(&amp;quot;Password&amp;quot;).ToString();&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;) == null | SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString()==&amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_addr.Text = &amp;quot;smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_addr.Text = SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString();&lt;br /&gt;
                }&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;) == null | (String)SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;) == &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_id.Text = &amp;quot;55&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_id.Text = SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;).ToString();&lt;br /&gt;
                }&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;) == null | (String)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;) == &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_pass.Text = &amp;quot;1Nn75tR[]()&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_pass.Text = (string)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SprecordsKey.Close();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                this.service_addr.Text = &amp;quot;smp.sheksna.local/json/server.php&amp;quot;;&lt;br /&gt;
                this.service_id.Text = &amp;quot;55&amp;quot;;&lt;br /&gt;
                this.service_pass.Text = &amp;quot;1Nn75tR[]()&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            this.label1.Text = String.Format(&lt;br /&gt;
                &amp;quot;Valid: {0}\nMessage: {1}\nReturned value: {2}&amp;quot;,&lt;br /&gt;
                e.IsValidInput,&lt;br /&gt;
                e.Message,&lt;br /&gt;
                e.ReturnValue);&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            foreach (string subkeys in currentUserKey.GetSubKeyNames())&lt;br /&gt;
            {&lt;br /&gt;
                if (subkeys == &amp;quot;SpRecords&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    currentUserKey.DeleteSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            RegistryKey helloKey = currentUserKey.CreateSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            if (checkBox1.Checked == false)&lt;br /&gt;
            {&lt;br /&gt;
                helloKey.SetValue(&amp;quot;AutoStart&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                helloKey.SetValue(&amp;quot;AutoStart&amp;quot;, &amp;quot;true&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Server&amp;quot;, maskedTextBox1.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Database&amp;quot;, textBox_db.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;User&amp;quot;, textBox_user.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Password&amp;quot;, textBox_pass.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_addr&amp;quot;, service_addr.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_id&amp;quot;, service_id.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_pass&amp;quot;, service_pass.Text.Trim());&lt;br /&gt;
            helloKey.Close();&lt;br /&gt;
            Close();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Close();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Form2_Load(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            IPAddress ipAddress;&lt;br /&gt;
            maskedTextBox1.Text = maskedTextBox1.Text.Replace(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            if (IPAddress.TryParse(maskedTextBox1.Text, out ipAddress))&lt;br /&gt;
            {&lt;br /&gt;
                MessageBox.Show(maskedTextBox1.Text + &amp;quot; верный&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                MessageBox.Show(maskedTextBox1.Text + &amp;quot; не верный&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            namespase_mysql_connection.MySql.mysql_connect_test(maskedTextBox1.Text, textBox_db.Text, textBox_user.Text, textBox_pass.Text);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void checkBox1_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label5_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label6_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label7_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form3 Forma3 = new Form3();&lt;br /&gt;
            Forma3.ShowDialog();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 3&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form3 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Form3()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            select();&lt;br /&gt;
        }&lt;br /&gt;
        public void select()&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 4, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, 0, &amp;quot;&amp;quot;);&lt;br /&gt;
            if (arr.Count == 0 | (arr[0][0] == &amp;quot;0&amp;quot; || arr[0][0] == &amp;quot;Error&amp;quot;))&lt;br /&gt;
            {&lt;br /&gt;
                this.dataGridView1.Columns.Add(&amp;quot;No errors&amp;quot;, &amp;quot;No errors&amp;quot;);&lt;br /&gt;
                this.dataGridView1.Columns[&amp;quot;No errors&amp;quot;].Width = 200;&lt;br /&gt;
                dataGridView1.Rows.Add(&amp;quot;Нет ошибок !&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                StringBuilder builder = new StringBuilder();&lt;br /&gt;
                if (arr.Count == 0)&lt;br /&gt;
                    Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;id&amp;quot;, &amp;quot;Идентификатор&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;id&amp;quot;].Width = 20;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;err_id&amp;quot;, &amp;quot;id ошибки&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;err_id&amp;quot;].Width = 50;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;date_err&amp;quot;, &amp;quot;Дата ошибки&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;date_err&amp;quot;].Width = 150;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;text_err&amp;quot;, &amp;quot;Описание&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;text_err&amp;quot;].Width = 260;&lt;br /&gt;
                    this.dataGridView1.AllowUserToAddRows = false; //запрешаем пользователю самому добавлять строки&lt;br /&gt;
                    for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            //Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot;id=&amp;quot; + arr[i][1] + &amp;quot;id=&amp;quot; + arr[i][2] + &amp;quot;id=&amp;quot; + arr[i][3]);&lt;br /&gt;
                            //Добавляем строку, указывая значения колонок поочереди слева направо&lt;br /&gt;
                            dataGridView1.Rows.Add(arr[i][0], arr[i][1], arr[i][2], arr[i][3]);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4170</id>
		<title>Sp Rec</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4170"/>
		<updated>2018-02-20T10:02:35Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной модуль&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using spsdksvr;&lt;br /&gt;
using spsdksw;&lt;br /&gt;
using SpRecord;&lt;br /&gt;
using System.Threading; &lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
using System.Runtime.InteropServices;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using Newtonsoft.Json;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
using System.Web.Script.Serialization;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public class myThread&lt;br /&gt;
        {&lt;br /&gt;
            public static Thread thread;&lt;br /&gt;
&lt;br /&gt;
            public myThread(string name,int start_stop,int count_thread) //Конструктор получает имя функции&lt;br /&gt;
            {&lt;br /&gt;
&lt;br /&gt;
                if (start_stop == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    thread = new Thread(Program.ChannelListen);&lt;br /&gt;
                    thread.Name = name;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;thread.Name =&amp;quot; + thread.Name + &amp;quot;, &amp;quot; + thread.ManagedThreadId);&lt;br /&gt;
                    thread.IsBackground = true;&lt;br /&gt;
                    thread.Start();//передача параметра в поток&lt;br /&gt;
                }&lt;br /&gt;
                else if (start_stop == 2)&lt;br /&gt;
                {&lt;br /&gt;
                    thread.Abort();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
/*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
            {&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                    Thread.Sleep(0);&lt;br /&gt;
                }&lt;br /&gt;
                Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
*/      &lt;br /&gt;
        &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    public class Connect_to_sprecord&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME = 0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        public Connect_to_sprecord(string ch_name, int start_stop) //Конструктор получает имя функции&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            if (start_stop == 1)&lt;br /&gt;
            {&lt;br /&gt;
                string ChannelName = ch_name;&lt;br /&gt;
                Console.WriteLine(ChannelName);&lt;br /&gt;
                string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
                string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string StartTime = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool GetLineState;&lt;br /&gt;
                bool GetWriting;&lt;br /&gt;
                int WaitMessage;&lt;br /&gt;
                string TypeCall = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool IsLineActive;&lt;br /&gt;
                object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
                object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
                int a = 0;&lt;br /&gt;
&lt;br /&gt;
                SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
                SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                while (SPRecordChannel.Connected == true)&lt;br /&gt;
                {&lt;br /&gt;
                    if (Program.glo_status_int == 1) break;&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                    //Console.WriteLine(GetLineState);&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                    //Console.WriteLine(GetWriting);&lt;br /&gt;
                    //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                    SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                    if (IsLineActive != true) break;&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                    IsLineActive = true;&lt;br /&gt;
                    //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                    WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                    if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                    {&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                        IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                        if (IsLineActive == false) continue;&lt;br /&gt;
                        /*object Msg;&lt;br /&gt;
                        var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                        byte[] bytes = (byte[])Msg;&lt;br /&gt;
                        string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                        export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                        FileName = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                        TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                        StartTime = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                        TypeCall = ChannelInfo.ToString();&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        if ((int)TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                            PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                            SubPhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                        }&lt;br /&gt;
                        System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                        Console.WriteLine(&amp;quot;ChannelName=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall[0] + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                        //glo_status1 = ChannelName + &amp;quot; &amp;quot; + TypeCall[0];&lt;br /&gt;
                        if (TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;,&amp;quot; + SubPhoneFrom;&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                        }&lt;br /&gt;
                        Program.glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall;&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        Program.export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                    }&lt;br /&gt;
                    //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                    //}&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordChannel.Disconnect();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                            Thread.Sleep(0);&lt;br /&gt;
                        }&lt;br /&gt;
                        Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
        */&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME=0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RING = 0x0000000D; // WordBool&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONETO = 0x0000000A; // BSTR&lt;br /&gt;
&lt;br /&gt;
        // max число каналов =4 &lt;br /&gt;
        public static string glo_status1 = &amp;quot; Ожидание запуска ...&amp;quot;;&lt;br /&gt;
        public static int glo_status_int = 0;&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            /*string json1 =&amp;quot;{\&amp;quot;error\&amp;quot;:[],\&amp;quot;data\&amp;quot;:{\&amp;quot;status\&amp;quot;:\&amp;quot;ok\&amp;quot;,\&amp;quot;unicod\&amp;quot;:42}}&amp;quot;;&lt;br /&gt;
            var json2 =&amp;quot;{\&amp;quot;error\&amp;quot;:{\&amp;quot;id\&amp;quot;:1,\&amp;quot;text\&amp;quot;:\&amp;quot;error autorization\&amp;quot;},\&amp;quot;data\&amp;quot;:[]}&amp;quot;;&lt;br /&gt;
          &lt;br /&gt;
            var json3 =&amp;quot;{\&amp;quot;response\&amp;quot;:[{\&amp;quot;id\&amp;quot;:269058571,\&amp;quot;first_name\&amp;quot;:\&amp;quot;Name\&amp;quot;,\&amp;quot;last_name\&amp;quot;:\&amp;quot;LastName\&amp;quot;,\&amp;quot;photo_50\&amp;quot;:\&amp;quot;http://cs624717.vk.me/v624717571/21718/X8.jpg\&amp;quot;}]}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            using (var reader = new StreamReader(json1))&lt;br /&gt;
            {&lt;br /&gt;
                System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                var objText = reader.ReadToEnd();&lt;br /&gt;
                var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(json1);&lt;br /&gt;
                Console.WriteLine(jsonData);&lt;br /&gt;
                Console.WriteLine(&amp;quot;end&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            return;		*/&lt;br /&gt;
            // Подключаемся&lt;br /&gt;
            //SpRecordClient SPRecordClient = new spsdksvr.SpRecordClient();&lt;br /&gt;
            Form1 Forma = new Form1();&lt;br /&gt;
            Forma.ShowDialog();&lt;br /&gt;
            //Forma.SetLabelText(glo_status1);&lt;br /&gt;
            //Forma.Show();&lt;br /&gt;
            //Console.ReadKey();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        class RootObject&lt;br /&gt;
        {&lt;br /&gt;
            public Item1 error { get; set; }&lt;br /&gt;
            public Item2 data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item1&lt;br /&gt;
        {&lt;br /&gt;
            public string id { get; set; }&lt;br /&gt;
            public string text { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item2&lt;br /&gt;
        {&lt;br /&gt;
            public string status { get; set; }&lt;br /&gt;
            public string unicod { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_stop()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 1;&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException)&lt;br /&gt;
            {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток не прерван &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_asp()&lt;br /&gt;
        {&lt;br /&gt;
            //MessageBox.Show(&amp;quot;hello pr&amp;quot;);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 0;&lt;br /&gt;
                SpRecordClient SPRecordClient = new SpRecordClient();&lt;br /&gt;
                Console.WriteLine(&amp;quot;Connect_to_asp =&amp;quot;);&lt;br /&gt;
                var Connect = SPRecordClient.Connect(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                // Получаем список каналов&lt;br /&gt;
                string ChannelList = &amp;quot;&amp;quot;;&lt;br /&gt;
                string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
                var Channel = SPRecordClient.GetChannelNames(out ChannelList, 1);&lt;br /&gt;
                Char delimiter = &#039;|&#039;;&lt;br /&gt;
                String[] substrings = ChannelList.Split(delimiter);&lt;br /&gt;
                //export_to_file(FileLogFileName, &amp;quot;1 start&amp;quot;);&lt;br /&gt;
                //Program p = new Program();&lt;br /&gt;
                int i = 0;&lt;br /&gt;
                foreach (var substring in substrings)&lt;br /&gt;
                {&lt;br /&gt;
                    i += 1;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;substring &amp;quot; + substring);&lt;br /&gt;
                    //myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                    switch (i)&lt;br /&gt;
                    {&lt;br /&gt;
                        case 1:&lt;br /&gt;
                            //Connect_to_sprecord t1 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 2:&lt;br /&gt;
                            //Connect_to_sprecord t2 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t2= new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 3:&lt;br /&gt;
                            //Connect_to_sprecord t3 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t3 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 4:&lt;br /&gt;
                            myThread t4 = new myThread(substring, 1, i);&lt;br /&gt;
                            //Connect_to_sprecord t4 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            break;&lt;br /&gt;
                    }&lt;br /&gt;
                    //Console.ReadKey();&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек. для инициализации&lt;br /&gt;
                    Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordClient.Disconnect();&lt;br /&gt;
                //var devName = SPRecordClient.GetDeviceNames;&lt;br /&gt;
                Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException exc)&lt;br /&gt;
            {&lt;br /&gt;
                if ((int)exc.ExceptionState == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Прерывание отменено! Код завершения: &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
                    Thread.ResetAbort();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток прерван, код завершения &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void ChannelListen()&lt;br /&gt;
        {&lt;br /&gt;
            string ChannelName = myThread.thread.Name;&lt;br /&gt;
            int id_calldetails = 0;&lt;br /&gt;
            Console.WriteLine(ChannelName);&lt;br /&gt;
            string current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            int priznak_incomin_ring = 0;&lt;br /&gt;
            string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
            string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            DateTime StartTime;&lt;br /&gt;
            int ring_count = 0; &lt;br /&gt;
            bool GetLineState;&lt;br /&gt;
            bool GetWriting;&lt;br /&gt;
            int WaitMessage;&lt;br /&gt;
            int TypeCall = 0;&lt;br /&gt;
            string TypeCall_str = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool IsLineActive;&lt;br /&gt;
            object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
            object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool incoming_ring;&lt;br /&gt;
            object Is_incoming_ring = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
            SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            priznak_incomin_ring = 0;&lt;br /&gt;
            while (SPRecordChannel.Connected == true)&lt;br /&gt;
            {&lt;br /&gt;
                if (glo_status_int==1) break;&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                //Console.WriteLine(GetLineState);&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                //Console.WriteLine(GetWriting);&lt;br /&gt;
                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                if (IsLineActive != true) break;&lt;br /&gt;
                //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                 IsLineActive = true;&lt;br /&gt;
                //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                        WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                        if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                            IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RING, out Is_incoming_ring);&lt;br /&gt;
                            incoming_ring = (bool)Is_incoming_ring;&lt;br /&gt;
                            if (incoming_ring == true)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName == &amp;quot;&amp;quot; &amp;amp; priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 1;       // идет звонок оператору&lt;br /&gt;
                                }&lt;br /&gt;
                                //if (current_FileName != FileName)&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGCOUNT, out ChannelInfo);&lt;br /&gt;
                                if ((int)ChannelInfo &amp;gt; ring_count)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = (int)ChannelInfo;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (priznak_incomin_ring == 1)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = 0;&lt;br /&gt;
                                    priznak_incomin_ring = 2; // статус - снята трубка&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGFIRSTDATETIME, out ChannelInfo);&lt;br /&gt;
                                    StartTime = ((DateTime)ChannelInfo);&lt;br /&gt;
                                    //StartTime = StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + StartTime.Hour+&amp;quot;:&amp;quot;StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second;&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                    TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                    //if (TypeCall != 2)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        PhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        SubPhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                    }&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot;+StartTime.Hour+&amp;quot;:&amp;quot;+StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second,&amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom,0,&amp;quot;&amp;quot;,1,0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                        Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                string response = send_id(&amp;quot;add_popup&amp;quot;, id_calldetails, Int32.Parse((ChannelName[(ChannelName.Length - 1)]).ToString()), PhoneFrom);&lt;br /&gt;
                                                Console.WriteLine(response);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
&lt;br /&gt;
                                }&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                /*if (current_FileName == &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;dozvon end&amp;quot;);&lt;br /&gt;
                                }*/&lt;br /&gt;
/*                                if (current_FileName == FileName &amp;amp;&amp;amp; priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName+ &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                }*/&lt;br /&gt;
                            }&lt;br /&gt;
                            if (IsLineActive == false)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName != &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    if (priznak_incomin_ring == 2) TypeCall = 2;    // out call&lt;br /&gt;
                                    if (priznak_incomin_ring == 0) TypeCall = 1; // in call&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 2, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    TypeCall_str = &amp;quot; Ожидание вызова ...&amp;quot;;&lt;br /&gt;
                                    glo_status1 =  TypeCall_str;&lt;br /&gt;
                                }&lt;br /&gt;
                                continue;&lt;br /&gt;
                            }&lt;br /&gt;
                            if (priznak_incomin_ring == 2 &amp;amp; TypeCall != 2)&lt;br /&gt;
                            {&lt;br /&gt;
                                //сюда вставить продолжительность звонка&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                                FileName = ChannelInfo.ToString();&lt;br /&gt;
                                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, ring_count, FileName, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot; ring_count=&amp;quot; + ring_count + &amp;quot; priznak_incomin_ring = 2;&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
&lt;br /&gt;
  /*object Msg;&lt;br /&gt;
                            var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                            byte[] bytes = (byte[])Msg;&lt;br /&gt;
                            string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                            export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                            FileName = ChannelInfo.ToString();&lt;br /&gt;
                            if (current_FileName != FileName)&lt;br /&gt;
                            {&lt;br /&gt;
                                current_FileName = FileName;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                                TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                                StartTime = (DateTime)ChannelInfo;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                if (priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONETO, out ChannelInfo);&lt;br /&gt;
                                    //PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom, 0, FileName, 2, 0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        MessageBox.Show(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                                System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                                //Console.WriteLine(&amp;quot;ChannelName1=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom + &amp;quot;ChannelName=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                if (priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                }&lt;br /&gt;
                                else&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                                }&lt;br /&gt;
                                glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall_str;&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                priznak_incomin_ring = 0;&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                            priznak_incomin_ring = 0;&lt;br /&gt;
                            ring_count = 0;&lt;br /&gt;
                            export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                            //continue;&lt;br /&gt;
                        }&lt;br /&gt;
                     //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    //Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                //}&lt;br /&gt;
            }&lt;br /&gt;
            SPRecordChannel.Disconnect();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static string CreateMD5(string input)&lt;br /&gt;
        {&lt;br /&gt;
            // Use input string to calculate MD5 hash&lt;br /&gt;
            using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())&lt;br /&gt;
            {&lt;br /&gt;
                byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);&lt;br /&gt;
                byte[] hashBytes = md5.ComputeHash(inputBytes);&lt;br /&gt;
&lt;br /&gt;
                // Convert the byte array to hexadecimal string&lt;br /&gt;
                StringBuilder sb = new StringBuilder();&lt;br /&gt;
                for (int i = 0; i &amp;lt; hashBytes.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    sb.Append(hashBytes[i].ToString(&amp;quot;X2&amp;quot;));&lt;br /&gt;
                }&lt;br /&gt;
                return sb.ToString();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public class Request_type&lt;br /&gt;
        {&lt;br /&gt;
            public string type { get; set; }&lt;br /&gt;
            public int unicod { get; set; }&lt;br /&gt;
            public int chanel { get; set; }&lt;br /&gt;
            public string phone { get; set; }&lt;br /&gt;
&lt;br /&gt;
            // public Dictionary&amp;lt;string, string&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class Response_type&lt;br /&gt;
        {&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; error { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class ErrorList&lt;br /&gt;
            {&lt;br /&gt;
                public string id { get; set; }&lt;br /&gt;
                public string text { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
            [Serializable]&lt;br /&gt;
            public class DataList&lt;br /&gt;
            {&lt;br /&gt;
                public string status { get; set; }&lt;br /&gt;
                public string unicod { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
        public static string send_id(string type, int unicod, int chanel, string phone)&lt;br /&gt;
        {&lt;br /&gt;
            // ^id_documment=_iemk_exchenge_log.id&lt;br /&gt;
            string response = &amp;quot;&amp;quot;;&lt;br /&gt;
            //            var SourceFile = &amp;quot;&amp;quot;;&lt;br /&gt;
            //string urlString = &amp;quot;http://smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
            var Host = Form1.Service_address;&lt;br /&gt;
            string urlString = &amp;quot;http://&amp;quot; + Host;&lt;br /&gt;
            var SoapAction = &amp;quot;&amp;quot;;&lt;br /&gt;
            string id_service = Form1.Service_id ;&lt;br /&gt;
            string passwrd = id_service + Form1.Service_pass;&lt;br /&gt;
            passwrd = CreateMD5(passwrd);&lt;br /&gt;
            urlString = urlString + &amp;quot;?id_service=&amp;quot;+id_service+&amp;quot;&amp;amp;auth_key=&amp;quot; + passwrd.ToLower();&lt;br /&gt;
            //string[] MyArray = { type, unicod.ToString(), chanel.ToString(), phone };&lt;br /&gt;
            Request_type MyArray = new Request_type();&lt;br /&gt;
                MyArray.type=type;&lt;br /&gt;
                MyArray.unicod = unicod;&lt;br /&gt;
                MyArray.chanel = chanel;&lt;br /&gt;
                if (phone == null) MyArray.phone = &amp;quot;000000&amp;quot;; else MyArray.phone = phone;&lt;br /&gt;
            var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            string json = jsonSerializer.Serialize(MyArray);&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;json=&amp;quot; + json);&lt;br /&gt;
            var response1 = XmlHttpRequest(json, urlString);&lt;br /&gt;
            // запись в файл&lt;br /&gt;
            if (Int32.Parse(response1.id)&amp;gt;0)&lt;br /&gt;
            {&lt;br /&gt;
                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 3, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, Int32.Parse(response1.id), response1.text);&lt;br /&gt;
            }&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;response error id =&amp;quot; + response1.id + &amp;quot; response text =&amp;quot; + response1.text);&lt;br /&gt;
            string request = &amp;quot;&amp;quot;;&lt;br /&gt;
            var jsonDeSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            Response_type a = jsonDeSerializer.Deserialize&amp;lt;Response_type&amp;gt;(response);&lt;br /&gt;
            ErrorList a1 = jsonDeSerializer.Deserialize&amp;lt;ErrorList&amp;gt;(response);&lt;br /&gt;
            var DataList = jsonDeSerializer.Deserialize&amp;lt;DataList&amp;gt;(response);&lt;br /&gt;
            Console.WriteLine(&amp;quot;a =&amp;quot; + a);&lt;br /&gt;
            return response;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static ErrorList XmlHttpRequest(string Content, string urlString)&lt;br /&gt;
        {&lt;br /&gt;
            var ContentType = &amp;quot;application/json;&amp;quot;;&lt;br /&gt;
            // param_return=1 полный ответ, 2 урезаный&lt;br /&gt;
                /* Get example *//*&lt;br /&gt;
&lt;br /&gt;
                byte[] bytes;&lt;br /&gt;
                bytes = System.Text.Encoding.UTF8.GetBytes(get_s);&lt;br /&gt;
&lt;br /&gt;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(get_s);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
&lt;br /&gt;
                using (HttpWebResponse response1 = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response1.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }&lt;br /&gt;
                 */&lt;br /&gt;
                /* Post */&lt;br /&gt;
&lt;br /&gt;
            byte[] dataBytes = Encoding.UTF8.GetBytes(Content);&lt;br /&gt;
&lt;br /&gt;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlString);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
                request.ContentLength = dataBytes.Length;&lt;br /&gt;
                request.ContentType = ContentType;&lt;br /&gt;
                request.Method = &amp;quot;POST&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                using (Stream requestBody = request.GetRequestStream())&lt;br /&gt;
                {&lt;br /&gt;
                    requestBody.Write(dataBytes, 0, dataBytes.Length);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                /*using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }*/&lt;br /&gt;
                using (var twitpicResponse = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                {&lt;br /&gt;
&lt;br /&gt;
                    using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))&lt;br /&gt;
                    {&lt;br /&gt;
                        JavaScriptSerializer js = new JavaScriptSerializer();&lt;br /&gt;
                        var objText = reader.ReadToEnd();&lt;br /&gt;
                        //var json44 = JsonConvert.SerializeObject(objText, Formatting.Indented);&lt;br /&gt;
                        var myojb = js.DeserializeObject(objText);&lt;br /&gt;
&lt;br /&gt;
                        var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(objText);&lt;br /&gt;
                        ErrorList ErrorValue_class = new ErrorList();&lt;br /&gt;
                        foreach (KeyValuePair&amp;lt;string, object&amp;gt; keyValue in jsonData)&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(keyValue.Key + &amp;quot; - &amp;quot; + keyValue.Value);&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;error&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                string ErrorValue_string = js.Serialize(keyValue.Value);&lt;br /&gt;
                                if (ErrorValue_string == &amp;quot;[]&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                } &lt;br /&gt;
                                ErrorValue_class = js.Deserialize&amp;lt;ErrorList&amp;gt;(ErrorValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;ErrorValue_class=&amp;quot; + ErrorValue_class.id + &amp;quot;ErrorValue_class.text=&amp;quot; + ErrorValue_class.text);&lt;br /&gt;
                            }&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;data&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                                string dataValue_string = jsonSerializer.Serialize(keyValue.Value);&lt;br /&gt;
                                if (dataValue_string == &amp;quot;[]&amp;quot;) break;&lt;br /&gt;
                                DataList Data_class = js.Deserialize&amp;lt;DataList&amp;gt;(dataValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;myojb2212.status=&amp;quot; + Data_class.status + &amp;quot;myojb2212.value=&amp;quot; + Data_class.unicod);&lt;br /&gt;
                                ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                return ErrorValue_class;&lt;br /&gt;
                            }                              &lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
/*                    Object obj;&lt;br /&gt;
                    bool b = jsonData.TryGetValue(&amp;quot;error&amp;quot;, out obj);&lt;br /&gt;
                        var splashInfo = JsonConvert.DeserializeObject&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        ErrorList myojb1 = js.Deserialize&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        DataList myojb2 = js.Deserialize&amp;lt;DataList&amp;gt;(objText);&lt;br /&gt;
                        return myojb1;*/&lt;br /&gt;
                        return ErrorValue_class;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        public static void export_to_file(string filename, string text)&lt;br /&gt;
        {&lt;br /&gt;
            FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);&lt;br /&gt;
            StreamWriter sw = new StreamWriter(fs);&lt;br /&gt;
            Console.WriteLine(text);&lt;br /&gt;
            sw.WriteLine(text);&lt;br /&gt;
            sw.Close();&lt;br /&gt;
        }&lt;br /&gt;
/*        public static void Add()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;1&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(1000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Add1()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;2&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(3000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }*/&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
MySql подключение&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using MySql;&lt;br /&gt;
using MySql.Data.MySqlClient;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using sprec;&lt;br /&gt;
&lt;br /&gt;
namespace namespase_mysql_connection&lt;br /&gt;
{&lt;br /&gt;
    class MySql&lt;br /&gt;
    {&lt;br /&gt;
        public static MySqlCommand ConnectToMySQL(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlConnection Connection = new MySqlConnection(&amp;quot;Data Source=&amp;quot; + MySQL_host + &amp;quot;;Database=&amp;quot; + MySQL_db + &amp;quot;;User Id=&amp;quot; + MySQL_uid + &amp;quot;;Password=&amp;quot; + MySQL_pw + &amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;); // Создаем соединение. Формат строки соединения подробно описан в прилагающейся документации.&lt;br /&gt;
            MySqlCommand Query = new MySqlCommand(); // С помощью этого объекта выполняются запросы к БД&lt;br /&gt;
            Query.Connection = Connection; // Присвоим объекту только что созданное соединение&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соединяюсь с сервером базы данных...&amp;quot;);&lt;br /&gt;
                Connection.Open();// Соединяемся&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соеденено&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (MySqlException SSDB_Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Ошибка - выходим&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Проверьте настройки соединения, не могу соединиться с базой данных!\nОшибка: &amp;quot; + SSDB_Exception.Message);&lt;br /&gt;
                MessageBox.Show(&amp;quot;Ошибка подключения !&amp;quot;);&lt;br /&gt;
                return Query;&lt;br /&gt;
            }&lt;br /&gt;
            return Query;&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_test(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            Console.WriteLine(MySQLConnected.ToString());&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw, int param_select, string StartTime, string StopTime, char ChannelNumber, string PhoneFrom, int ringCount, string FileName, int type_call, int id,string error_txt)&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=test;Database=twest;Uid=test;Pwd=test;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            //             List&amp;lt;string&amp;gt; ret_file_path = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
            //            ArrayList ret_file_path = new ArrayList();&lt;br /&gt;
            ////String str = @&amp;quot;Server=&amp;quot;+MySQL_host+&amp;quot;;Database=&amp;quot;+MySQL_db+&amp;quot;;Uid=&amp;quot;+MySQL_uid+&amp;quot;;Pwd=&amp;quot;+MySQL_pw+&amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            // путь к документам \\10.*.*.*\iemk&lt;br /&gt;
            ////MySqlConnection con = null;&lt;br /&gt;
            ////con = new MySqlConnection(str);&lt;br /&gt;
            // путь к документам \\10.*.*.*\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            string var_select = &amp;quot;&amp;quot;;&lt;br /&gt;
            MySQLConnected.CommandText = @&amp;quot;CREATE TABLE IF NOT EXISTS calldetails (&lt;br /&gt;
                      id int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                      date_time datetime DEFAULT NULL,&lt;br /&gt;
                      channel varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      ringCount varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      numberPhone varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStart varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStop varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      date_time_stop datetime DEFAULT NULL,&lt;br /&gt;
                      type_call int(11) DEFAULT NULL,&lt;br /&gt;
                      PRIMARY KEY (id)&lt;br /&gt;
                    )&lt;br /&gt;
                    ENGINE = INNODB&lt;br /&gt;
                    AUTO_INCREMENT = 1&lt;br /&gt;
                    AVG_ROW_LENGTH = 630&lt;br /&gt;
                    CHARACTER SET cp1251&lt;br /&gt;
                    COLLATE cp1251_general_ci&lt;br /&gt;
                    ROW_FORMAT = DYNAMIC;&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            if (param_select == 0)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 1)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 2)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET recordStop=1, date_time_stop =\&amp;quot;&amp;quot; + StopTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 3)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = @&amp;quot;CREATE TABLE IF NOT EXISTS error_send_http (&lt;br /&gt;
                    `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                    `err_id` varchar(8) NOT NULL,&lt;br /&gt;
                    `err_date` datetime NOT NULL,&lt;br /&gt;
                    `text` int(11) NOT NULL,&lt;br /&gt;
                    PRIMARY KEY (`id`)&lt;br /&gt;
                    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;&lt;br /&gt;
                &amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO error_send_http(err_id,err_date,text) VALUES  (&amp;quot; + id + &amp;quot;,\&amp;quot;&amp;quot; + StopTime + &amp;quot;,\&amp;quot;&amp;quot;+&amp;quot;,\&amp;quot;&amp;quot; + error_txt + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 4)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;select * from error_send_http&amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            MySQLConnected.CommandText = var_select;&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                ////con.Open();&lt;br /&gt;
                ////sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                if (param_select == 1 | param_select == 3) return null;&lt;br /&gt;
                ////MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                // Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (param_select == 0)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            //                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;ID&amp;quot;].ToString());&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;ID&amp;quot;].ToString() });&lt;br /&gt;
                            //                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        MySQLConnected.CommandText = &amp;quot;INSERT INTO calldetails(id,date_time,channel,numberPhone,recordStop,type_call,recordstart) VALUES  (&amp;quot; + myData[0][&amp;quot;ID&amp;quot;] + &amp;quot;,\&amp;quot;&amp;quot; + StartTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + ChannelNumber + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + PhoneFrom + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,0,&amp;quot; + type_call + &amp;quot;,\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                        MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    }&lt;br /&gt;
                    if (param_select == 4)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;id&amp;quot;].ToString()  ,  myData[i][&amp;quot;err_id&amp;quot;].ToString() , myData[i][&amp;quot;err_date&amp;quot;].ToString() ,  myData[i][&amp;quot;text&amp;quot;].ToString() });&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;id&amp;quot;].ToString());&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                //Console.WriteLine(rezult_str.Count);&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                MySQLConnected.Cancel();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file_for_send()&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =35 это подписаны документы, = 37 - отправка с ошибкой завершилась. переотправляем.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 _iemk_exchenge_log.id_iemk_docum документа, j=3 - подписаный файл,j-4 - _iemk_exchenge_log.id&lt;br /&gt;
            MySQLConnected.CommandText = &amp;quot;SELECT * FROM statistics._iemk_exchenge_log where (id_status=35 or id_status=37)&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
            DataTable dt = new DataTable();&lt;br /&gt;
            da.Fill(dt);&lt;br /&gt;
            var myData = dt.Select();&lt;br /&gt;
            string full_file_path = &amp;quot;&amp;quot;;&lt;br /&gt;
            var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
            if (myData.Length == 0)&lt;br /&gt;
            {&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;) + myData[i][&amp;quot;table_name&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (&amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;] + &amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (myData[i][&amp;quot;id_iemk_docum&amp;quot;].ToString()), (&amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString(), (myData[i][&amp;quot;id&amp;quot;]).ToString() });&lt;br /&gt;
                    Console.WriteLine(full_file_path + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            return rezult_str;&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        // поиск статуса , полученного в синхронном ответе в базе. если нет, добавляем, есть -&amp;gt; возвращаем id статуса&lt;br /&gt;
        public static void mysql_connect_search_sync_status(string failue, string reason, int sync_unswer_error_count, int id_document)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;SELECT * FROM _iemk_status_doc WHERE service_err_id like \&amp;quot;%&amp;quot; + failue + &amp;quot;%\&amp;quot;&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_status_doc(service_err_id,name,parent,is_work) VALUES  (\&amp;quot;&amp;quot; + failue + &amp;quot;\&amp;quot;,\&amp;quot;&amp;quot; + reason + &amp;quot;\&amp;quot;,17,1)&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;SELECT LAST_INSERT_ID() as last_id FROM _iemk_status_doc LIMIT 1&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySqlDataAdapter da1 = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                    DataTable dt1 = new DataTable();&lt;br /&gt;
                    da1.Fill(dt1);&lt;br /&gt;
                    var myData1 = dt1.Select();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData1[0][&amp;quot;last_id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData[0][&amp;quot;id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // втсвляем исходник и результат синхронного запроса в лог&lt;br /&gt;
        public static void mysql_connect_insert_sync_result(string request, string response, int id_documment)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
                // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
                //                File.WriteAllText(&amp;quot;response_error&amp;quot; + DateTime.Now.ToString(&amp;quot;yyyy_M_d_HH_mm_ss&amp;quot;) + &amp;quot;.xml&amp;quot;, &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;, Encoding.UTF8);&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_insert_result(List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; array_for_insert)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
            for (int i = 0; i &amp;lt;= array_for_insert.Count - 1; i++)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]));&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]);&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static String mysql_connect()&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            String str = @&amp;quot;Server=*.*.0*.*;Database=;Uid=;Pwd=;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlConnection con = null;&lt;br /&gt;
            con = new MySqlConnection(str);&lt;br /&gt;
            // Здесь хранится в поле Key *официальный* адрес для принятия асинхронных запросов.&lt;br /&gt;
            MySqlCommand sqlCom = new MySqlCommand(&amp;quot;SELECT * FROM _system_table where id=367&amp;quot;, con);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                con.Open();&lt;br /&gt;
                sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                //                Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                /*                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                                {&lt;br /&gt;
                                    for (int j = 0; j &amp;lt; myData[i].ItemArray.Length; j++)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                 */&lt;br /&gt;
                return myData[0][&amp;quot;param&amp;quot;].ToString();&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                //                MessageBox.Show(&amp;quot;Ошибка удаления!\n\n&amp;quot; + ex.Message, &amp;quot;ОШИБКА&amp;quot;);&lt;br /&gt;
                return &amp;quot;Error&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                con.Close();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 1&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using Microsoft.Win32;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public static string Srv = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string DataBase = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string User = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Passwrd = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_address = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_id = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_pass = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static int Autostart = 0;&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            var start= get_data_from_reestr();&lt;br /&gt;
            if (start == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                Program.Connect_to_asp();&lt;br /&gt;
            }&lt;br /&gt;
            if (start == 2)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Необходимо задать первоначальные настроки !&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                button2.Enabled = false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Interval = 1000;&lt;br /&gt;
            timer1.Tick += new EventHandler(timer1_Tick);&lt;br /&gt;
            timer1.Start();&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
            label1.Text = Program.glo_status1;&lt;br /&gt;
            get_data_from_reestr();&lt;br /&gt;
            Program.Connect_to_asp();&lt;br /&gt;
            button1.Enabled = false;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
            button4.Enabled = false;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public int get_data_from_reestr()&lt;br /&gt;
        {&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            RegistryKey SprecordsKey = currentUserKey.OpenSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            if (SprecordsKey != null)&lt;br /&gt;
            {&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;false&amp;quot; | (&amp;quot;AutoStart&amp;quot;) == null) Autostart = 0;&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;true&amp;quot;) Autostart = 1;&lt;br /&gt;
                Srv = SprecordsKey.GetValue(&amp;quot;Server&amp;quot;).ToString();&lt;br /&gt;
                DataBase = SprecordsKey.GetValue(&amp;quot;Database&amp;quot;).ToString();&lt;br /&gt;
                User = SprecordsKey.GetValue(&amp;quot;User&amp;quot;).ToString();&lt;br /&gt;
                Passwrd = SprecordsKey.GetValue(&amp;quot;Password&amp;quot;).ToString();&lt;br /&gt;
                Service_address = SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString();&lt;br /&gt;
                Service_id = (string)SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;);&lt;br /&gt;
                Service_pass = (string)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;);&lt;br /&gt;
                SprecordsKey.Close();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                Autostart = 2; //error&lt;br /&gt;
            }&lt;br /&gt;
            return Autostart;&lt;br /&gt;
        }&lt;br /&gt;
        private void checkBox1_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form2 Forma2 = new Form2();&lt;br /&gt;
            Forma2.ShowDialog();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label1_Click_1(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Form1_Load(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            label1.Text = Program.glo_status1; &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            label1.Text = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            Program.Connect_to_stop();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = false;&lt;br /&gt;
            button4.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Stop();&lt;br /&gt;
            Environment.Exit(0);&lt;br /&gt;
            Close();&lt;br /&gt;
            Application.Exit();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void timer1_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form1_Load(null, null);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 2&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using Microsoft.Win32;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    public partial class Form2 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Form2()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            //this.maskedTextBox1.Mask = &amp;quot;990\\.990\\.990\\.990&amp;quot;;&lt;br /&gt;
            //this.maskedTextBox1.PromptChar = &#039; &#039;;&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            RegistryKey SprecordsKey = currentUserKey.OpenSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            this.maskedTextBox1.ValidatingType = typeof(System.Net.IPAddress);&lt;br /&gt;
            if (SprecordsKey != null)&lt;br /&gt;
            {&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString()==&amp;quot;false&amp;quot;) this.checkBox1.Checked = false;&lt;br /&gt;
                else this.checkBox1.Checked = true ;&lt;br /&gt;
                this.maskedTextBox1.Text = SprecordsKey.GetValue(&amp;quot;Server&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_db.Text = SprecordsKey.GetValue(&amp;quot;Database&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_user.Text = SprecordsKey.GetValue(&amp;quot;User&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_pass.Text = SprecordsKey.GetValue(&amp;quot;Password&amp;quot;).ToString();&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;) == null | SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString()==&amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_addr.Text = &amp;quot;smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_addr.Text = SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString();&lt;br /&gt;
                }&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;) == null | (String)SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;) == &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_id.Text = &amp;quot;55&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_id.Text = SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;).ToString();&lt;br /&gt;
                }&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;) == null | (String)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;) == &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_pass.Text = &amp;quot;1Nn75tR[]()&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_pass.Text = (string)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SprecordsKey.Close();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                this.service_addr.Text = &amp;quot;smp.sheksna.local/json/server.php&amp;quot;;&lt;br /&gt;
                this.service_id.Text = &amp;quot;55&amp;quot;;&lt;br /&gt;
                this.service_pass.Text = &amp;quot;1Nn75tR[]()&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            this.label1.Text = String.Format(&lt;br /&gt;
                &amp;quot;Valid: {0}\nMessage: {1}\nReturned value: {2}&amp;quot;,&lt;br /&gt;
                e.IsValidInput,&lt;br /&gt;
                e.Message,&lt;br /&gt;
                e.ReturnValue);&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            foreach (string subkeys in currentUserKey.GetSubKeyNames())&lt;br /&gt;
            {&lt;br /&gt;
                if (subkeys == &amp;quot;SpRecords&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    currentUserKey.DeleteSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            RegistryKey helloKey = currentUserKey.CreateSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            if (checkBox1.Checked == false)&lt;br /&gt;
            {&lt;br /&gt;
                helloKey.SetValue(&amp;quot;AutoStart&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                helloKey.SetValue(&amp;quot;AutoStart&amp;quot;, &amp;quot;true&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Server&amp;quot;, maskedTextBox1.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Database&amp;quot;, textBox_db.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;User&amp;quot;, textBox_user.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Password&amp;quot;, textBox_pass.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_addr&amp;quot;, service_addr.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_id&amp;quot;, service_id.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_pass&amp;quot;, service_pass.Text.Trim());&lt;br /&gt;
            helloKey.Close();&lt;br /&gt;
            Close();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Close();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Form2_Load(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            IPAddress ipAddress;&lt;br /&gt;
            maskedTextBox1.Text = maskedTextBox1.Text.Replace(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            if (IPAddress.TryParse(maskedTextBox1.Text, out ipAddress))&lt;br /&gt;
            {&lt;br /&gt;
                MessageBox.Show(maskedTextBox1.Text + &amp;quot; верный&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                MessageBox.Show(maskedTextBox1.Text + &amp;quot; не верный&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            namespase_mysql_connection.MySql.mysql_connect_test(maskedTextBox1.Text, textBox_db.Text, textBox_user.Text, textBox_pass.Text);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void checkBox1_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label5_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label6_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label7_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form3 Forma3 = new Form3();&lt;br /&gt;
            Forma3.ShowDialog();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 3&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form3 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Form3()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            select();&lt;br /&gt;
        }&lt;br /&gt;
        public void select()&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 4, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, 0, &amp;quot;&amp;quot;);&lt;br /&gt;
            if (arr.Count == 0 | (arr[0][0] == &amp;quot;0&amp;quot; || arr[0][0] == &amp;quot;Error&amp;quot;))&lt;br /&gt;
            {&lt;br /&gt;
                this.dataGridView1.Columns.Add(&amp;quot;No errors&amp;quot;, &amp;quot;No errors&amp;quot;);&lt;br /&gt;
                this.dataGridView1.Columns[&amp;quot;No errors&amp;quot;].Width = 200;&lt;br /&gt;
                dataGridView1.Rows.Add(&amp;quot;Нет ошибок !&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                StringBuilder builder = new StringBuilder();&lt;br /&gt;
                if (arr.Count == 0)&lt;br /&gt;
                    Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;id&amp;quot;, &amp;quot;Идентификатор&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;id&amp;quot;].Width = 20;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;err_id&amp;quot;, &amp;quot;id ошибки&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;err_id&amp;quot;].Width = 50;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;date_err&amp;quot;, &amp;quot;Дата ошибки&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;date_err&amp;quot;].Width = 150;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;text_err&amp;quot;, &amp;quot;Описание&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;text_err&amp;quot;].Width = 260;&lt;br /&gt;
                    this.dataGridView1.AllowUserToAddRows = false; //запрешаем пользователю самому добавлять строки&lt;br /&gt;
                    for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            //Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot;id=&amp;quot; + arr[i][1] + &amp;quot;id=&amp;quot; + arr[i][2] + &amp;quot;id=&amp;quot; + arr[i][3]);&lt;br /&gt;
                            //Добавляем строку, указывая значения колонок поочереди слева направо&lt;br /&gt;
                            dataGridView1.Rows.Add(arr[i][0], arr[i][1], arr[i][2], arr[i][3]);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4169</id>
		<title>Sp Rec</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4169"/>
		<updated>2018-02-20T09:58:36Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной модуль&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using spsdksvr;&lt;br /&gt;
using spsdksw;&lt;br /&gt;
using SpRecord;&lt;br /&gt;
using System.Threading; &lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
using System.Runtime.InteropServices;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using Newtonsoft.Json;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
using System.Web.Script.Serialization;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public class myThread&lt;br /&gt;
        {&lt;br /&gt;
            public static Thread thread;&lt;br /&gt;
&lt;br /&gt;
            public myThread(string name,int start_stop,int count_thread) //Конструктор получает имя функции&lt;br /&gt;
            {&lt;br /&gt;
&lt;br /&gt;
                if (start_stop == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    thread = new Thread(Program.ChannelListen);&lt;br /&gt;
                    thread.Name = name;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;thread.Name =&amp;quot; + thread.Name + &amp;quot;, &amp;quot; + thread.ManagedThreadId);&lt;br /&gt;
                    thread.IsBackground = true;&lt;br /&gt;
                    thread.Start();//передача параметра в поток&lt;br /&gt;
                }&lt;br /&gt;
                else if (start_stop == 2)&lt;br /&gt;
                {&lt;br /&gt;
                    thread.Abort();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
/*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
            {&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                    Thread.Sleep(0);&lt;br /&gt;
                }&lt;br /&gt;
                Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
*/      &lt;br /&gt;
        &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    public class Connect_to_sprecord&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME = 0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        public Connect_to_sprecord(string ch_name, int start_stop) //Конструктор получает имя функции&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            if (start_stop == 1)&lt;br /&gt;
            {&lt;br /&gt;
                string ChannelName = ch_name;&lt;br /&gt;
                Console.WriteLine(ChannelName);&lt;br /&gt;
                string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
                string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string StartTime = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool GetLineState;&lt;br /&gt;
                bool GetWriting;&lt;br /&gt;
                int WaitMessage;&lt;br /&gt;
                string TypeCall = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool IsLineActive;&lt;br /&gt;
                object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
                object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
                int a = 0;&lt;br /&gt;
&lt;br /&gt;
                SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
                SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                while (SPRecordChannel.Connected == true)&lt;br /&gt;
                {&lt;br /&gt;
                    if (Program.glo_status_int == 1) break;&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                    //Console.WriteLine(GetLineState);&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                    //Console.WriteLine(GetWriting);&lt;br /&gt;
                    //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                    SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                    if (IsLineActive != true) break;&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                    IsLineActive = true;&lt;br /&gt;
                    //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                    WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                    if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                    {&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                        IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                        if (IsLineActive == false) continue;&lt;br /&gt;
                        /*object Msg;&lt;br /&gt;
                        var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                        byte[] bytes = (byte[])Msg;&lt;br /&gt;
                        string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                        export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                        FileName = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                        TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                        StartTime = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                        TypeCall = ChannelInfo.ToString();&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        if ((int)TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                            PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                            SubPhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                        }&lt;br /&gt;
                        System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                        Console.WriteLine(&amp;quot;ChannelName=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall[0] + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                        //glo_status1 = ChannelName + &amp;quot; &amp;quot; + TypeCall[0];&lt;br /&gt;
                        if (TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;,&amp;quot; + SubPhoneFrom;&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                        }&lt;br /&gt;
                        Program.glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall;&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        Program.export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                    }&lt;br /&gt;
                    //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                    //}&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordChannel.Disconnect();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                            Thread.Sleep(0);&lt;br /&gt;
                        }&lt;br /&gt;
                        Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
        */&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME=0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RING = 0x0000000D; // WordBool&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONETO = 0x0000000A; // BSTR&lt;br /&gt;
&lt;br /&gt;
        // max число каналов =4 &lt;br /&gt;
        public static string glo_status1 = &amp;quot; Ожидание запуска ...&amp;quot;;&lt;br /&gt;
        public static int glo_status_int = 0;&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            /*string json1 =&amp;quot;{\&amp;quot;error\&amp;quot;:[],\&amp;quot;data\&amp;quot;:{\&amp;quot;status\&amp;quot;:\&amp;quot;ok\&amp;quot;,\&amp;quot;unicod\&amp;quot;:42}}&amp;quot;;&lt;br /&gt;
            var json2 =&amp;quot;{\&amp;quot;error\&amp;quot;:{\&amp;quot;id\&amp;quot;:1,\&amp;quot;text\&amp;quot;:\&amp;quot;error autorization\&amp;quot;},\&amp;quot;data\&amp;quot;:[]}&amp;quot;;&lt;br /&gt;
          &lt;br /&gt;
            var json3 =&amp;quot;{\&amp;quot;response\&amp;quot;:[{\&amp;quot;id\&amp;quot;:269058571,\&amp;quot;first_name\&amp;quot;:\&amp;quot;Name\&amp;quot;,\&amp;quot;last_name\&amp;quot;:\&amp;quot;LastName\&amp;quot;,\&amp;quot;photo_50\&amp;quot;:\&amp;quot;http://cs624717.vk.me/v624717571/21718/X8.jpg\&amp;quot;}]}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            using (var reader = new StreamReader(json1))&lt;br /&gt;
            {&lt;br /&gt;
                System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                var objText = reader.ReadToEnd();&lt;br /&gt;
                var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(json1);&lt;br /&gt;
                Console.WriteLine(jsonData);&lt;br /&gt;
                Console.WriteLine(&amp;quot;end&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            return;		*/&lt;br /&gt;
            // Подключаемся&lt;br /&gt;
            //SpRecordClient SPRecordClient = new spsdksvr.SpRecordClient();&lt;br /&gt;
            Form1 Forma = new Form1();&lt;br /&gt;
            Forma.ShowDialog();&lt;br /&gt;
            //Forma.SetLabelText(glo_status1);&lt;br /&gt;
            //Forma.Show();&lt;br /&gt;
            //Console.ReadKey();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        class RootObject&lt;br /&gt;
        {&lt;br /&gt;
            public Item1 error { get; set; }&lt;br /&gt;
            public Item2 data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item1&lt;br /&gt;
        {&lt;br /&gt;
            public string id { get; set; }&lt;br /&gt;
            public string text { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item2&lt;br /&gt;
        {&lt;br /&gt;
            public string status { get; set; }&lt;br /&gt;
            public string unicod { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_stop()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 1;&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException)&lt;br /&gt;
            {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток не прерван &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_asp()&lt;br /&gt;
        {&lt;br /&gt;
            //MessageBox.Show(&amp;quot;hello pr&amp;quot;);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 0;&lt;br /&gt;
                SpRecordClient SPRecordClient = new SpRecordClient();&lt;br /&gt;
                Console.WriteLine(&amp;quot;Connect_to_asp =&amp;quot;);&lt;br /&gt;
                var Connect = SPRecordClient.Connect(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                // Получаем список каналов&lt;br /&gt;
                string ChannelList = &amp;quot;&amp;quot;;&lt;br /&gt;
                string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
                var Channel = SPRecordClient.GetChannelNames(out ChannelList, 1);&lt;br /&gt;
                Char delimiter = &#039;|&#039;;&lt;br /&gt;
                String[] substrings = ChannelList.Split(delimiter);&lt;br /&gt;
                //export_to_file(FileLogFileName, &amp;quot;1 start&amp;quot;);&lt;br /&gt;
                //Program p = new Program();&lt;br /&gt;
                int i = 0;&lt;br /&gt;
                foreach (var substring in substrings)&lt;br /&gt;
                {&lt;br /&gt;
                    i += 1;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;substring &amp;quot; + substring);&lt;br /&gt;
                    //myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                    switch (i)&lt;br /&gt;
                    {&lt;br /&gt;
                        case 1:&lt;br /&gt;
                            //Connect_to_sprecord t1 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 2:&lt;br /&gt;
                            //Connect_to_sprecord t2 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t2= new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 3:&lt;br /&gt;
                            //Connect_to_sprecord t3 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t3 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 4:&lt;br /&gt;
                            myThread t4 = new myThread(substring, 1, i);&lt;br /&gt;
                            //Connect_to_sprecord t4 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            break;&lt;br /&gt;
                    }&lt;br /&gt;
                    //Console.ReadKey();&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек. для инициализации&lt;br /&gt;
                    Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordClient.Disconnect();&lt;br /&gt;
                //var devName = SPRecordClient.GetDeviceNames;&lt;br /&gt;
                Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException exc)&lt;br /&gt;
            {&lt;br /&gt;
                if ((int)exc.ExceptionState == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Прерывание отменено! Код завершения: &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
                    Thread.ResetAbort();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток прерван, код завершения &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void ChannelListen()&lt;br /&gt;
        {&lt;br /&gt;
            string ChannelName = myThread.thread.Name;&lt;br /&gt;
            int id_calldetails = 0;&lt;br /&gt;
            Console.WriteLine(ChannelName);&lt;br /&gt;
            string current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            int priznak_incomin_ring = 0;&lt;br /&gt;
            string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
            string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            DateTime StartTime;&lt;br /&gt;
            int ring_count = 0; &lt;br /&gt;
            bool GetLineState;&lt;br /&gt;
            bool GetWriting;&lt;br /&gt;
            int WaitMessage;&lt;br /&gt;
            int TypeCall = 0;&lt;br /&gt;
            string TypeCall_str = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool IsLineActive;&lt;br /&gt;
            object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
            object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool incoming_ring;&lt;br /&gt;
            object Is_incoming_ring = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
            SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            priznak_incomin_ring = 0;&lt;br /&gt;
            while (SPRecordChannel.Connected == true)&lt;br /&gt;
            {&lt;br /&gt;
                if (glo_status_int==1) break;&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                //Console.WriteLine(GetLineState);&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                //Console.WriteLine(GetWriting);&lt;br /&gt;
                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                if (IsLineActive != true) break;&lt;br /&gt;
                //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                 IsLineActive = true;&lt;br /&gt;
                //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                        WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                        if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                            IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RING, out Is_incoming_ring);&lt;br /&gt;
                            incoming_ring = (bool)Is_incoming_ring;&lt;br /&gt;
                            if (incoming_ring == true)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName == &amp;quot;&amp;quot; &amp;amp; priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 1;       // идет звонок оператору&lt;br /&gt;
                                }&lt;br /&gt;
                                //if (current_FileName != FileName)&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGCOUNT, out ChannelInfo);&lt;br /&gt;
                                if ((int)ChannelInfo &amp;gt; ring_count)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = (int)ChannelInfo;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (priznak_incomin_ring == 1)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = 0;&lt;br /&gt;
                                    priznak_incomin_ring = 2; // статус - снята трубка&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGFIRSTDATETIME, out ChannelInfo);&lt;br /&gt;
                                    StartTime = ((DateTime)ChannelInfo);&lt;br /&gt;
                                    //StartTime = StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + StartTime.Hour+&amp;quot;:&amp;quot;StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second;&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                    TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                    //if (TypeCall != 2)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        PhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        SubPhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                    }&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot;+StartTime.Hour+&amp;quot;:&amp;quot;+StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second,&amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom,0,&amp;quot;&amp;quot;,1,0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                        Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                string response = send_id(&amp;quot;add_popup&amp;quot;, id_calldetails, Int32.Parse((ChannelName[(ChannelName.Length - 1)]).ToString()), PhoneFrom);&lt;br /&gt;
                                                Console.WriteLine(response);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
&lt;br /&gt;
                                }&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                /*if (current_FileName == &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;dozvon end&amp;quot;);&lt;br /&gt;
                                }*/&lt;br /&gt;
/*                                if (current_FileName == FileName &amp;amp;&amp;amp; priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName+ &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                }*/&lt;br /&gt;
                            }&lt;br /&gt;
                            if (IsLineActive == false)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName != &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    if (priznak_incomin_ring == 2) TypeCall = 2;    // out call&lt;br /&gt;
                                    if (priznak_incomin_ring == 0) TypeCall = 1; // in call&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 2, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    TypeCall_str = &amp;quot; Ожидание вызова ...&amp;quot;;&lt;br /&gt;
                                    glo_status1 =  TypeCall_str;&lt;br /&gt;
                                }&lt;br /&gt;
                                continue;&lt;br /&gt;
                            }&lt;br /&gt;
                            if (priznak_incomin_ring == 2 &amp;amp; TypeCall != 2)&lt;br /&gt;
                            {&lt;br /&gt;
                                //сюда вставить продолжительность звонка&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                                FileName = ChannelInfo.ToString();&lt;br /&gt;
                                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, ring_count, FileName, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot; ring_count=&amp;quot; + ring_count + &amp;quot; priznak_incomin_ring = 2;&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
&lt;br /&gt;
  /*object Msg;&lt;br /&gt;
                            var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                            byte[] bytes = (byte[])Msg;&lt;br /&gt;
                            string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                            export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                            FileName = ChannelInfo.ToString();&lt;br /&gt;
                            if (current_FileName != FileName)&lt;br /&gt;
                            {&lt;br /&gt;
                                current_FileName = FileName;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                                TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                                StartTime = (DateTime)ChannelInfo;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                if (priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONETO, out ChannelInfo);&lt;br /&gt;
                                    //PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom, 0, FileName, 2, 0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        MessageBox.Show(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                                System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                                //Console.WriteLine(&amp;quot;ChannelName1=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom + &amp;quot;ChannelName=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                if (priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                }&lt;br /&gt;
                                else&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                                }&lt;br /&gt;
                                glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall_str;&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                priznak_incomin_ring = 0;&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                            priznak_incomin_ring = 0;&lt;br /&gt;
                            ring_count = 0;&lt;br /&gt;
                            export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                            //continue;&lt;br /&gt;
                        }&lt;br /&gt;
                     //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    //Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                //}&lt;br /&gt;
            }&lt;br /&gt;
            SPRecordChannel.Disconnect();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static string CreateMD5(string input)&lt;br /&gt;
        {&lt;br /&gt;
            // Use input string to calculate MD5 hash&lt;br /&gt;
            using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())&lt;br /&gt;
            {&lt;br /&gt;
                byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);&lt;br /&gt;
                byte[] hashBytes = md5.ComputeHash(inputBytes);&lt;br /&gt;
&lt;br /&gt;
                // Convert the byte array to hexadecimal string&lt;br /&gt;
                StringBuilder sb = new StringBuilder();&lt;br /&gt;
                for (int i = 0; i &amp;lt; hashBytes.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    sb.Append(hashBytes[i].ToString(&amp;quot;X2&amp;quot;));&lt;br /&gt;
                }&lt;br /&gt;
                return sb.ToString();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public class Request_type&lt;br /&gt;
        {&lt;br /&gt;
            public string type { get; set; }&lt;br /&gt;
            public int unicod { get; set; }&lt;br /&gt;
            public int chanel { get; set; }&lt;br /&gt;
            public string phone { get; set; }&lt;br /&gt;
&lt;br /&gt;
            // public Dictionary&amp;lt;string, string&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class Response_type&lt;br /&gt;
        {&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; error { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class ErrorList&lt;br /&gt;
            {&lt;br /&gt;
                public string id { get; set; }&lt;br /&gt;
                public string text { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
            [Serializable]&lt;br /&gt;
            public class DataList&lt;br /&gt;
            {&lt;br /&gt;
                public string status { get; set; }&lt;br /&gt;
                public string unicod { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
        public static string send_id(string type, int unicod, int chanel, string phone)&lt;br /&gt;
        {&lt;br /&gt;
            // ^id_documment=_iemk_exchenge_log.id&lt;br /&gt;
            string response = &amp;quot;&amp;quot;;&lt;br /&gt;
            //            var SourceFile = &amp;quot;&amp;quot;;&lt;br /&gt;
            //string urlString = &amp;quot;http://smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
            var Host = Form1.Service_address;&lt;br /&gt;
            string urlString = &amp;quot;http://&amp;quot; + Host;&lt;br /&gt;
            var SoapAction = &amp;quot;&amp;quot;;&lt;br /&gt;
            string id_service = Form1.Service_id ;&lt;br /&gt;
            string passwrd = id_service + Form1.Service_pass;&lt;br /&gt;
            passwrd = CreateMD5(passwrd);&lt;br /&gt;
            urlString = urlString + &amp;quot;?id_service=&amp;quot;+id_service+&amp;quot;&amp;amp;auth_key=&amp;quot; + passwrd.ToLower();&lt;br /&gt;
            //string[] MyArray = { type, unicod.ToString(), chanel.ToString(), phone };&lt;br /&gt;
            Request_type MyArray = new Request_type();&lt;br /&gt;
                MyArray.type=type;&lt;br /&gt;
                MyArray.unicod = unicod;&lt;br /&gt;
                MyArray.chanel = chanel;&lt;br /&gt;
                if (phone == null) MyArray.phone = &amp;quot;000000&amp;quot;; else MyArray.phone = phone;&lt;br /&gt;
            var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            string json = jsonSerializer.Serialize(MyArray);&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;json=&amp;quot; + json);&lt;br /&gt;
            var response1 = XmlHttpRequest(json, urlString);&lt;br /&gt;
            // запись в файл&lt;br /&gt;
            if (Int32.Parse(response1.id)&amp;gt;0)&lt;br /&gt;
            {&lt;br /&gt;
                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 3, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, Int32.Parse(response1.id), response1.text);&lt;br /&gt;
            }&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;response error id =&amp;quot; + response1.id + &amp;quot; response text =&amp;quot; + response1.text);&lt;br /&gt;
            string request = &amp;quot;&amp;quot;;&lt;br /&gt;
            var jsonDeSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            Response_type a = jsonDeSerializer.Deserialize&amp;lt;Response_type&amp;gt;(response);&lt;br /&gt;
            ErrorList a1 = jsonDeSerializer.Deserialize&amp;lt;ErrorList&amp;gt;(response);&lt;br /&gt;
            var DataList = jsonDeSerializer.Deserialize&amp;lt;DataList&amp;gt;(response);&lt;br /&gt;
            Console.WriteLine(&amp;quot;a =&amp;quot; + a);&lt;br /&gt;
            return response;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static ErrorList XmlHttpRequest(string Content, string urlString)&lt;br /&gt;
        {&lt;br /&gt;
            var ContentType = &amp;quot;application/json;&amp;quot;;&lt;br /&gt;
            // param_return=1 полный ответ, 2 урезаный&lt;br /&gt;
                /* Get example *//*&lt;br /&gt;
&lt;br /&gt;
                byte[] bytes;&lt;br /&gt;
                bytes = System.Text.Encoding.UTF8.GetBytes(get_s);&lt;br /&gt;
&lt;br /&gt;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(get_s);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
&lt;br /&gt;
                using (HttpWebResponse response1 = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response1.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }&lt;br /&gt;
                 */&lt;br /&gt;
                /* Post */&lt;br /&gt;
&lt;br /&gt;
            byte[] dataBytes = Encoding.UTF8.GetBytes(Content);&lt;br /&gt;
&lt;br /&gt;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlString);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
                request.ContentLength = dataBytes.Length;&lt;br /&gt;
                request.ContentType = ContentType;&lt;br /&gt;
                request.Method = &amp;quot;POST&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                using (Stream requestBody = request.GetRequestStream())&lt;br /&gt;
                {&lt;br /&gt;
                    requestBody.Write(dataBytes, 0, dataBytes.Length);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                /*using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }*/&lt;br /&gt;
                using (var twitpicResponse = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                {&lt;br /&gt;
&lt;br /&gt;
                    using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))&lt;br /&gt;
                    {&lt;br /&gt;
                        JavaScriptSerializer js = new JavaScriptSerializer();&lt;br /&gt;
                        var objText = reader.ReadToEnd();&lt;br /&gt;
                        //var json44 = JsonConvert.SerializeObject(objText, Formatting.Indented);&lt;br /&gt;
                        var myojb = js.DeserializeObject(objText);&lt;br /&gt;
&lt;br /&gt;
                        var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(objText);&lt;br /&gt;
                        ErrorList ErrorValue_class = new ErrorList();&lt;br /&gt;
                        foreach (KeyValuePair&amp;lt;string, object&amp;gt; keyValue in jsonData)&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(keyValue.Key + &amp;quot; - &amp;quot; + keyValue.Value);&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;error&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                string ErrorValue_string = js.Serialize(keyValue.Value);&lt;br /&gt;
                                if (ErrorValue_string == &amp;quot;[]&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                } &lt;br /&gt;
                                ErrorValue_class = js.Deserialize&amp;lt;ErrorList&amp;gt;(ErrorValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;ErrorValue_class=&amp;quot; + ErrorValue_class.id + &amp;quot;ErrorValue_class.text=&amp;quot; + ErrorValue_class.text);&lt;br /&gt;
                            }&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;data&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                                string dataValue_string = jsonSerializer.Serialize(keyValue.Value);&lt;br /&gt;
                                if (dataValue_string == &amp;quot;[]&amp;quot;) break;&lt;br /&gt;
                                DataList Data_class = js.Deserialize&amp;lt;DataList&amp;gt;(dataValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;myojb2212.status=&amp;quot; + Data_class.status + &amp;quot;myojb2212.value=&amp;quot; + Data_class.unicod);&lt;br /&gt;
                                ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                return ErrorValue_class;&lt;br /&gt;
                            }                              &lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
/*                    Object obj;&lt;br /&gt;
                    bool b = jsonData.TryGetValue(&amp;quot;error&amp;quot;, out obj);&lt;br /&gt;
                        var splashInfo = JsonConvert.DeserializeObject&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        ErrorList myojb1 = js.Deserialize&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        DataList myojb2 = js.Deserialize&amp;lt;DataList&amp;gt;(objText);&lt;br /&gt;
                        return myojb1;*/&lt;br /&gt;
                        return ErrorValue_class;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        public static void export_to_file(string filename, string text)&lt;br /&gt;
        {&lt;br /&gt;
            FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);&lt;br /&gt;
            StreamWriter sw = new StreamWriter(fs);&lt;br /&gt;
            Console.WriteLine(text);&lt;br /&gt;
            sw.WriteLine(text);&lt;br /&gt;
            sw.Close();&lt;br /&gt;
        }&lt;br /&gt;
/*        public static void Add()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;1&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(1000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Add1()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;2&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(3000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }*/&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
MySql подключение&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using MySql;&lt;br /&gt;
using MySql.Data.MySqlClient;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using sprec;&lt;br /&gt;
&lt;br /&gt;
namespace namespase_mysql_connection&lt;br /&gt;
{&lt;br /&gt;
    class MySql&lt;br /&gt;
    {&lt;br /&gt;
        public static MySqlCommand ConnectToMySQL(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlConnection Connection = new MySqlConnection(&amp;quot;Data Source=&amp;quot; + MySQL_host + &amp;quot;;Database=&amp;quot; + MySQL_db + &amp;quot;;User Id=&amp;quot; + MySQL_uid + &amp;quot;;Password=&amp;quot; + MySQL_pw + &amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;); // Создаем соединение. Формат строки соединения подробно описан в прилагающейся документации.&lt;br /&gt;
            MySqlCommand Query = new MySqlCommand(); // С помощью этого объекта выполняются запросы к БД&lt;br /&gt;
            Query.Connection = Connection; // Присвоим объекту только что созданное соединение&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соединяюсь с сервером базы данных...&amp;quot;);&lt;br /&gt;
                Connection.Open();// Соединяемся&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соеденено&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (MySqlException SSDB_Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Ошибка - выходим&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Проверьте настройки соединения, не могу соединиться с базой данных!\nОшибка: &amp;quot; + SSDB_Exception.Message);&lt;br /&gt;
                MessageBox.Show(&amp;quot;Ошибка подключения !&amp;quot;);&lt;br /&gt;
                return Query;&lt;br /&gt;
            }&lt;br /&gt;
            return Query;&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_test(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            Console.WriteLine(MySQLConnected.ToString());&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw, int param_select, string StartTime, string StopTime, char ChannelNumber, string PhoneFrom, int ringCount, string FileName, int type_call, int id,string error_txt)&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=10.35.0.93;Database=Statistics;Uid=das;Pwd=12qwasZX;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=172.16.130.31;Database=vol_gp1;Uid=nataly;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            //             List&amp;lt;string&amp;gt; ret_file_path = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
            //            ArrayList ret_file_path = new ArrayList();&lt;br /&gt;
            ////String str = @&amp;quot;Server=&amp;quot;+MySQL_host+&amp;quot;;Database=&amp;quot;+MySQL_db+&amp;quot;;Uid=&amp;quot;+MySQL_uid+&amp;quot;;Pwd=&amp;quot;+MySQL_pw+&amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            ////MySqlConnection con = null;&lt;br /&gt;
            ////con = new MySqlConnection(str);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            string var_select = &amp;quot;&amp;quot;;&lt;br /&gt;
            MySQLConnected.CommandText = @&amp;quot;CREATE TABLE IF NOT EXISTS calldetails (&lt;br /&gt;
                      id int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                      date_time datetime DEFAULT NULL,&lt;br /&gt;
                      channel varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      ringCount varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      numberPhone varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStart varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStop varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      date_time_stop datetime DEFAULT NULL,&lt;br /&gt;
                      type_call int(11) DEFAULT NULL,&lt;br /&gt;
                      PRIMARY KEY (id)&lt;br /&gt;
                    )&lt;br /&gt;
                    ENGINE = INNODB&lt;br /&gt;
                    AUTO_INCREMENT = 1&lt;br /&gt;
                    AVG_ROW_LENGTH = 630&lt;br /&gt;
                    CHARACTER SET cp1251&lt;br /&gt;
                    COLLATE cp1251_general_ci&lt;br /&gt;
                    ROW_FORMAT = DYNAMIC;&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            if (param_select == 0)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 1)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 2)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET recordStop=1, date_time_stop =\&amp;quot;&amp;quot; + StopTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 3)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = @&amp;quot;CREATE TABLE IF NOT EXISTS error_send_http (&lt;br /&gt;
                    `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                    `err_id` varchar(8) NOT NULL,&lt;br /&gt;
                    `err_date` datetime NOT NULL,&lt;br /&gt;
                    `text` int(11) NOT NULL,&lt;br /&gt;
                    PRIMARY KEY (`id`)&lt;br /&gt;
                    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;&lt;br /&gt;
                &amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO error_send_http(err_id,err_date,text) VALUES  (&amp;quot; + id + &amp;quot;,\&amp;quot;&amp;quot; + StopTime + &amp;quot;,\&amp;quot;&amp;quot;+&amp;quot;,\&amp;quot;&amp;quot; + error_txt + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 4)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;select * from error_send_http&amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            MySQLConnected.CommandText = var_select;&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                ////con.Open();&lt;br /&gt;
                ////sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                if (param_select == 1 | param_select == 3) return null;&lt;br /&gt;
                ////MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                // Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (param_select == 0)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            //                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;ID&amp;quot;].ToString());&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;ID&amp;quot;].ToString() });&lt;br /&gt;
                            //                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        MySQLConnected.CommandText = &amp;quot;INSERT INTO calldetails(id,date_time,channel,numberPhone,recordStop,type_call,recordstart) VALUES  (&amp;quot; + myData[0][&amp;quot;ID&amp;quot;] + &amp;quot;,\&amp;quot;&amp;quot; + StartTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + ChannelNumber + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + PhoneFrom + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,0,&amp;quot; + type_call + &amp;quot;,\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                        MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    }&lt;br /&gt;
                    if (param_select == 4)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;id&amp;quot;].ToString()  ,  myData[i][&amp;quot;err_id&amp;quot;].ToString() , myData[i][&amp;quot;err_date&amp;quot;].ToString() ,  myData[i][&amp;quot;text&amp;quot;].ToString() });&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;id&amp;quot;].ToString());&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                //Console.WriteLine(rezult_str.Count);&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                MySQLConnected.Cancel();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file_for_send()&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =35 это подписаны документы, = 37 - отправка с ошибкой завершилась. переотправляем.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 _iemk_exchenge_log.id_iemk_docum документа, j=3 - подписаный файл,j-4 - _iemk_exchenge_log.id&lt;br /&gt;
            MySQLConnected.CommandText = &amp;quot;SELECT * FROM statistics._iemk_exchenge_log where (id_status=35 or id_status=37)&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
            DataTable dt = new DataTable();&lt;br /&gt;
            da.Fill(dt);&lt;br /&gt;
            var myData = dt.Select();&lt;br /&gt;
            string full_file_path = &amp;quot;&amp;quot;;&lt;br /&gt;
            var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
            if (myData.Length == 0)&lt;br /&gt;
            {&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;) + myData[i][&amp;quot;table_name&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (&amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;] + &amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (myData[i][&amp;quot;id_iemk_docum&amp;quot;].ToString()), (&amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString(), (myData[i][&amp;quot;id&amp;quot;]).ToString() });&lt;br /&gt;
                    Console.WriteLine(full_file_path + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            return rezult_str;&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        // поиск статуса , полученного в синхронном ответе в базе. если нет, добавляем, есть -&amp;gt; возвращаем id статуса&lt;br /&gt;
        public static void mysql_connect_search_sync_status(string failue, string reason, int sync_unswer_error_count, int id_document)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;SELECT * FROM _iemk_status_doc WHERE service_err_id like \&amp;quot;%&amp;quot; + failue + &amp;quot;%\&amp;quot;&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_status_doc(service_err_id,name,parent,is_work) VALUES  (\&amp;quot;&amp;quot; + failue + &amp;quot;\&amp;quot;,\&amp;quot;&amp;quot; + reason + &amp;quot;\&amp;quot;,17,1)&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;SELECT LAST_INSERT_ID() as last_id FROM _iemk_status_doc LIMIT 1&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySqlDataAdapter da1 = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                    DataTable dt1 = new DataTable();&lt;br /&gt;
                    da1.Fill(dt1);&lt;br /&gt;
                    var myData1 = dt1.Select();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData1[0][&amp;quot;last_id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData[0][&amp;quot;id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // втсвляем исходник и результат синхронного запроса в лог&lt;br /&gt;
        public static void mysql_connect_insert_sync_result(string request, string response, int id_documment)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
                // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
                //                File.WriteAllText(&amp;quot;response_error&amp;quot; + DateTime.Now.ToString(&amp;quot;yyyy_M_d_HH_mm_ss&amp;quot;) + &amp;quot;.xml&amp;quot;, &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;, Encoding.UTF8);&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_insert_result(List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; array_for_insert)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
            for (int i = 0; i &amp;lt;= array_for_insert.Count - 1; i++)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]));&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]);&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static String mysql_connect()&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=10.35.0.93;Database=Statistics;Uid=das;Pwd=12qwasZX;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=172.16.130.31;Database=vol_gp1;Uid=nataly;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            String str = @&amp;quot;Server=10.35.0.93;Database=statistics;Uid=das;Pwd=12qwasZX;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlConnection con = null;&lt;br /&gt;
            con = new MySqlConnection(str);&lt;br /&gt;
            // Здесь хранится в поле Key *официальный* адрес для принятия асинхронных запросов.&lt;br /&gt;
            MySqlCommand sqlCom = new MySqlCommand(&amp;quot;SELECT * FROM _system_table where id=367&amp;quot;, con);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                con.Open();&lt;br /&gt;
                sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                //                Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                /*                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                                {&lt;br /&gt;
                                    for (int j = 0; j &amp;lt; myData[i].ItemArray.Length; j++)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                 */&lt;br /&gt;
                return myData[0][&amp;quot;param&amp;quot;].ToString();&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                //                MessageBox.Show(&amp;quot;Ошибка удаления!\n\n&amp;quot; + ex.Message, &amp;quot;ОШИБКА&amp;quot;);&lt;br /&gt;
                return &amp;quot;Error&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                con.Close();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 1&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using Microsoft.Win32;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public static string Srv = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string DataBase = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string User = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Passwrd = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_address = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_id = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_pass = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static int Autostart = 0;&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            var start= get_data_from_reestr();&lt;br /&gt;
            if (start == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                Program.Connect_to_asp();&lt;br /&gt;
            }&lt;br /&gt;
            if (start == 2)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Необходимо задать первоначальные настроки !&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                button2.Enabled = false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Interval = 1000;&lt;br /&gt;
            timer1.Tick += new EventHandler(timer1_Tick);&lt;br /&gt;
            timer1.Start();&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
            label1.Text = Program.glo_status1;&lt;br /&gt;
            get_data_from_reestr();&lt;br /&gt;
            Program.Connect_to_asp();&lt;br /&gt;
            button1.Enabled = false;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
            button4.Enabled = false;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public int get_data_from_reestr()&lt;br /&gt;
        {&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            RegistryKey SprecordsKey = currentUserKey.OpenSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            if (SprecordsKey != null)&lt;br /&gt;
            {&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;false&amp;quot; | (&amp;quot;AutoStart&amp;quot;) == null) Autostart = 0;&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;true&amp;quot;) Autostart = 1;&lt;br /&gt;
                Srv = SprecordsKey.GetValue(&amp;quot;Server&amp;quot;).ToString();&lt;br /&gt;
                DataBase = SprecordsKey.GetValue(&amp;quot;Database&amp;quot;).ToString();&lt;br /&gt;
                User = SprecordsKey.GetValue(&amp;quot;User&amp;quot;).ToString();&lt;br /&gt;
                Passwrd = SprecordsKey.GetValue(&amp;quot;Password&amp;quot;).ToString();&lt;br /&gt;
                Service_address = SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString();&lt;br /&gt;
                Service_id = (string)SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;);&lt;br /&gt;
                Service_pass = (string)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;);&lt;br /&gt;
                SprecordsKey.Close();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                Autostart = 2; //error&lt;br /&gt;
            }&lt;br /&gt;
            return Autostart;&lt;br /&gt;
        }&lt;br /&gt;
        private void checkBox1_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form2 Forma2 = new Form2();&lt;br /&gt;
            Forma2.ShowDialog();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label1_Click_1(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Form1_Load(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            label1.Text = Program.glo_status1; &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            label1.Text = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            Program.Connect_to_stop();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = false;&lt;br /&gt;
            button4.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Stop();&lt;br /&gt;
            Environment.Exit(0);&lt;br /&gt;
            Close();&lt;br /&gt;
            Application.Exit();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void timer1_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form1_Load(null, null);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 2&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using Microsoft.Win32;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    public partial class Form2 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Form2()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            //this.maskedTextBox1.Mask = &amp;quot;990\\.990\\.990\\.990&amp;quot;;&lt;br /&gt;
            //this.maskedTextBox1.PromptChar = &#039; &#039;;&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            RegistryKey SprecordsKey = currentUserKey.OpenSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            this.maskedTextBox1.ValidatingType = typeof(System.Net.IPAddress);&lt;br /&gt;
            if (SprecordsKey != null)&lt;br /&gt;
            {&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString()==&amp;quot;false&amp;quot;) this.checkBox1.Checked = false;&lt;br /&gt;
                else this.checkBox1.Checked = true ;&lt;br /&gt;
                this.maskedTextBox1.Text = SprecordsKey.GetValue(&amp;quot;Server&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_db.Text = SprecordsKey.GetValue(&amp;quot;Database&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_user.Text = SprecordsKey.GetValue(&amp;quot;User&amp;quot;).ToString();&lt;br /&gt;
                this.textBox_pass.Text = SprecordsKey.GetValue(&amp;quot;Password&amp;quot;).ToString();&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;) == null | SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString()==&amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_addr.Text = &amp;quot;smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_addr.Text = SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString();&lt;br /&gt;
                }&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;) == null | (String)SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;) == &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_id.Text = &amp;quot;55&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_id.Text = SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;).ToString();&lt;br /&gt;
                }&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;) == null | (String)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;) == &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_pass.Text = &amp;quot;1Nn75tR[]()&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.service_pass.Text = (string)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SprecordsKey.Close();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                this.service_addr.Text = &amp;quot;smp.sheksna.local/json/server.php&amp;quot;;&lt;br /&gt;
                this.service_id.Text = &amp;quot;55&amp;quot;;&lt;br /&gt;
                this.service_pass.Text = &amp;quot;1Nn75tR[]()&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            this.label1.Text = String.Format(&lt;br /&gt;
                &amp;quot;Valid: {0}\nMessage: {1}\nReturned value: {2}&amp;quot;,&lt;br /&gt;
                e.IsValidInput,&lt;br /&gt;
                e.Message,&lt;br /&gt;
                e.ReturnValue);&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            foreach (string subkeys in currentUserKey.GetSubKeyNames())&lt;br /&gt;
            {&lt;br /&gt;
                if (subkeys == &amp;quot;SpRecords&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    currentUserKey.DeleteSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            RegistryKey helloKey = currentUserKey.CreateSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            if (checkBox1.Checked == false)&lt;br /&gt;
            {&lt;br /&gt;
                helloKey.SetValue(&amp;quot;AutoStart&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                helloKey.SetValue(&amp;quot;AutoStart&amp;quot;, &amp;quot;true&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Server&amp;quot;, maskedTextBox1.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Database&amp;quot;, textBox_db.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;User&amp;quot;, textBox_user.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Password&amp;quot;, textBox_pass.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_addr&amp;quot;, service_addr.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_id&amp;quot;, service_id.Text.Trim());&lt;br /&gt;
            helloKey.SetValue(&amp;quot;Service_pass&amp;quot;, service_pass.Text.Trim());&lt;br /&gt;
            helloKey.Close();&lt;br /&gt;
            Close();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Close();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Form2_Load(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            IPAddress ipAddress;&lt;br /&gt;
            maskedTextBox1.Text = maskedTextBox1.Text.Replace(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            if (IPAddress.TryParse(maskedTextBox1.Text, out ipAddress))&lt;br /&gt;
            {&lt;br /&gt;
                MessageBox.Show(maskedTextBox1.Text + &amp;quot; верный&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                MessageBox.Show(maskedTextBox1.Text + &amp;quot; не верный&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            namespase_mysql_connection.MySql.mysql_connect_test(maskedTextBox1.Text, textBox_db.Text, textBox_user.Text, textBox_pass.Text);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void checkBox1_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label5_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label6_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label7_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form3 Forma3 = new Form3();&lt;br /&gt;
            Forma3.ShowDialog();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 3&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form3 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Form3()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            select();&lt;br /&gt;
        }&lt;br /&gt;
        public void select()&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 4, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, 0, &amp;quot;&amp;quot;);&lt;br /&gt;
            if (arr.Count == 0 | (arr[0][0] == &amp;quot;0&amp;quot; || arr[0][0] == &amp;quot;Error&amp;quot;))&lt;br /&gt;
            {&lt;br /&gt;
                this.dataGridView1.Columns.Add(&amp;quot;No errors&amp;quot;, &amp;quot;No errors&amp;quot;);&lt;br /&gt;
                this.dataGridView1.Columns[&amp;quot;No errors&amp;quot;].Width = 200;&lt;br /&gt;
                dataGridView1.Rows.Add(&amp;quot;Нет ошибок !&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                StringBuilder builder = new StringBuilder();&lt;br /&gt;
                if (arr.Count == 0)&lt;br /&gt;
                    Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;id&amp;quot;, &amp;quot;Идентификатор&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;id&amp;quot;].Width = 20;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;err_id&amp;quot;, &amp;quot;id ошибки&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;err_id&amp;quot;].Width = 50;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;date_err&amp;quot;, &amp;quot;Дата ошибки&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;date_err&amp;quot;].Width = 150;&lt;br /&gt;
                    this.dataGridView1.Columns.Add(&amp;quot;text_err&amp;quot;, &amp;quot;Описание&amp;quot;);&lt;br /&gt;
                    this.dataGridView1.Columns[&amp;quot;text_err&amp;quot;].Width = 260;&lt;br /&gt;
                    this.dataGridView1.AllowUserToAddRows = false; //запрешаем пользователю самому добавлять строки&lt;br /&gt;
                    for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            //Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot;id=&amp;quot; + arr[i][1] + &amp;quot;id=&amp;quot; + arr[i][2] + &amp;quot;id=&amp;quot; + arr[i][3]);&lt;br /&gt;
                            //Добавляем строку, указывая значения колонок поочереди слева направо&lt;br /&gt;
                            dataGridView1.Rows.Add(arr[i][0], arr[i][1], arr[i][2], arr[i][3]);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4168</id>
		<title>Sp Rec</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4168"/>
		<updated>2018-02-20T09:55:04Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной модуль&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using spsdksvr;&lt;br /&gt;
using spsdksw;&lt;br /&gt;
using SpRecord;&lt;br /&gt;
using System.Threading; &lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
using System.Runtime.InteropServices;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using Newtonsoft.Json;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
using System.Web.Script.Serialization;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public class myThread&lt;br /&gt;
        {&lt;br /&gt;
            public static Thread thread;&lt;br /&gt;
&lt;br /&gt;
            public myThread(string name,int start_stop,int count_thread) //Конструктор получает имя функции&lt;br /&gt;
            {&lt;br /&gt;
&lt;br /&gt;
                if (start_stop == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    thread = new Thread(Program.ChannelListen);&lt;br /&gt;
                    thread.Name = name;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;thread.Name =&amp;quot; + thread.Name + &amp;quot;, &amp;quot; + thread.ManagedThreadId);&lt;br /&gt;
                    thread.IsBackground = true;&lt;br /&gt;
                    thread.Start();//передача параметра в поток&lt;br /&gt;
                }&lt;br /&gt;
                else if (start_stop == 2)&lt;br /&gt;
                {&lt;br /&gt;
                    thread.Abort();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
/*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
            {&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                    Thread.Sleep(0);&lt;br /&gt;
                }&lt;br /&gt;
                Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
*/      &lt;br /&gt;
        &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    public class Connect_to_sprecord&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME = 0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        public Connect_to_sprecord(string ch_name, int start_stop) //Конструктор получает имя функции&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            if (start_stop == 1)&lt;br /&gt;
            {&lt;br /&gt;
                string ChannelName = ch_name;&lt;br /&gt;
                Console.WriteLine(ChannelName);&lt;br /&gt;
                string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
                string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string StartTime = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool GetLineState;&lt;br /&gt;
                bool GetWriting;&lt;br /&gt;
                int WaitMessage;&lt;br /&gt;
                string TypeCall = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool IsLineActive;&lt;br /&gt;
                object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
                object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
                int a = 0;&lt;br /&gt;
&lt;br /&gt;
                SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
                SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                while (SPRecordChannel.Connected == true)&lt;br /&gt;
                {&lt;br /&gt;
                    if (Program.glo_status_int == 1) break;&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                    //Console.WriteLine(GetLineState);&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                    //Console.WriteLine(GetWriting);&lt;br /&gt;
                    //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                    SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                    if (IsLineActive != true) break;&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                    IsLineActive = true;&lt;br /&gt;
                    //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                    WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                    if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                    {&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                        IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                        if (IsLineActive == false) continue;&lt;br /&gt;
                        /*object Msg;&lt;br /&gt;
                        var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                        byte[] bytes = (byte[])Msg;&lt;br /&gt;
                        string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                        export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                        FileName = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                        TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                        StartTime = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                        TypeCall = ChannelInfo.ToString();&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        if ((int)TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                            PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                            SubPhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                        }&lt;br /&gt;
                        System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                        Console.WriteLine(&amp;quot;ChannelName=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall[0] + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                        //glo_status1 = ChannelName + &amp;quot; &amp;quot; + TypeCall[0];&lt;br /&gt;
                        if (TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;,&amp;quot; + SubPhoneFrom;&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                        }&lt;br /&gt;
                        Program.glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall;&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        Program.export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                    }&lt;br /&gt;
                    //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                    //}&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordChannel.Disconnect();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                            Thread.Sleep(0);&lt;br /&gt;
                        }&lt;br /&gt;
                        Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
        */&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME=0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RING = 0x0000000D; // WordBool&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONETO = 0x0000000A; // BSTR&lt;br /&gt;
&lt;br /&gt;
        // max число каналов =4 &lt;br /&gt;
        public static string glo_status1 = &amp;quot; Ожидание запуска ...&amp;quot;;&lt;br /&gt;
        public static int glo_status_int = 0;&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            /*string json1 =&amp;quot;{\&amp;quot;error\&amp;quot;:[],\&amp;quot;data\&amp;quot;:{\&amp;quot;status\&amp;quot;:\&amp;quot;ok\&amp;quot;,\&amp;quot;unicod\&amp;quot;:42}}&amp;quot;;&lt;br /&gt;
            var json2 =&amp;quot;{\&amp;quot;error\&amp;quot;:{\&amp;quot;id\&amp;quot;:1,\&amp;quot;text\&amp;quot;:\&amp;quot;error autorization\&amp;quot;},\&amp;quot;data\&amp;quot;:[]}&amp;quot;;&lt;br /&gt;
          &lt;br /&gt;
            var json3 =&amp;quot;{\&amp;quot;response\&amp;quot;:[{\&amp;quot;id\&amp;quot;:269058571,\&amp;quot;first_name\&amp;quot;:\&amp;quot;Name\&amp;quot;,\&amp;quot;last_name\&amp;quot;:\&amp;quot;LastName\&amp;quot;,\&amp;quot;photo_50\&amp;quot;:\&amp;quot;http://cs624717.vk.me/v624717571/21718/X8.jpg\&amp;quot;}]}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            using (var reader = new StreamReader(json1))&lt;br /&gt;
            {&lt;br /&gt;
                System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                var objText = reader.ReadToEnd();&lt;br /&gt;
                var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(json1);&lt;br /&gt;
                Console.WriteLine(jsonData);&lt;br /&gt;
                Console.WriteLine(&amp;quot;end&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            return;		*/&lt;br /&gt;
            // Подключаемся&lt;br /&gt;
            //SpRecordClient SPRecordClient = new spsdksvr.SpRecordClient();&lt;br /&gt;
            Form1 Forma = new Form1();&lt;br /&gt;
            Forma.ShowDialog();&lt;br /&gt;
            //Forma.SetLabelText(glo_status1);&lt;br /&gt;
            //Forma.Show();&lt;br /&gt;
            //Console.ReadKey();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        class RootObject&lt;br /&gt;
        {&lt;br /&gt;
            public Item1 error { get; set; }&lt;br /&gt;
            public Item2 data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item1&lt;br /&gt;
        {&lt;br /&gt;
            public string id { get; set; }&lt;br /&gt;
            public string text { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item2&lt;br /&gt;
        {&lt;br /&gt;
            public string status { get; set; }&lt;br /&gt;
            public string unicod { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_stop()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 1;&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException)&lt;br /&gt;
            {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток не прерван &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_asp()&lt;br /&gt;
        {&lt;br /&gt;
            //MessageBox.Show(&amp;quot;hello pr&amp;quot;);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 0;&lt;br /&gt;
                SpRecordClient SPRecordClient = new SpRecordClient();&lt;br /&gt;
                Console.WriteLine(&amp;quot;Connect_to_asp =&amp;quot;);&lt;br /&gt;
                var Connect = SPRecordClient.Connect(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                // Получаем список каналов&lt;br /&gt;
                string ChannelList = &amp;quot;&amp;quot;;&lt;br /&gt;
                string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
                var Channel = SPRecordClient.GetChannelNames(out ChannelList, 1);&lt;br /&gt;
                Char delimiter = &#039;|&#039;;&lt;br /&gt;
                String[] substrings = ChannelList.Split(delimiter);&lt;br /&gt;
                //export_to_file(FileLogFileName, &amp;quot;1 start&amp;quot;);&lt;br /&gt;
                //Program p = new Program();&lt;br /&gt;
                int i = 0;&lt;br /&gt;
                foreach (var substring in substrings)&lt;br /&gt;
                {&lt;br /&gt;
                    i += 1;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;substring &amp;quot; + substring);&lt;br /&gt;
                    //myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                    switch (i)&lt;br /&gt;
                    {&lt;br /&gt;
                        case 1:&lt;br /&gt;
                            //Connect_to_sprecord t1 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 2:&lt;br /&gt;
                            //Connect_to_sprecord t2 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t2= new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 3:&lt;br /&gt;
                            //Connect_to_sprecord t3 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t3 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 4:&lt;br /&gt;
                            myThread t4 = new myThread(substring, 1, i);&lt;br /&gt;
                            //Connect_to_sprecord t4 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            break;&lt;br /&gt;
                    }&lt;br /&gt;
                    //Console.ReadKey();&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек. для инициализации&lt;br /&gt;
                    Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordClient.Disconnect();&lt;br /&gt;
                //var devName = SPRecordClient.GetDeviceNames;&lt;br /&gt;
                Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException exc)&lt;br /&gt;
            {&lt;br /&gt;
                if ((int)exc.ExceptionState == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Прерывание отменено! Код завершения: &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
                    Thread.ResetAbort();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток прерван, код завершения &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void ChannelListen()&lt;br /&gt;
        {&lt;br /&gt;
            string ChannelName = myThread.thread.Name;&lt;br /&gt;
            int id_calldetails = 0;&lt;br /&gt;
            Console.WriteLine(ChannelName);&lt;br /&gt;
            string current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            int priznak_incomin_ring = 0;&lt;br /&gt;
            string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
            string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            DateTime StartTime;&lt;br /&gt;
            int ring_count = 0; &lt;br /&gt;
            bool GetLineState;&lt;br /&gt;
            bool GetWriting;&lt;br /&gt;
            int WaitMessage;&lt;br /&gt;
            int TypeCall = 0;&lt;br /&gt;
            string TypeCall_str = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool IsLineActive;&lt;br /&gt;
            object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
            object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool incoming_ring;&lt;br /&gt;
            object Is_incoming_ring = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
            SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            priznak_incomin_ring = 0;&lt;br /&gt;
            while (SPRecordChannel.Connected == true)&lt;br /&gt;
            {&lt;br /&gt;
                if (glo_status_int==1) break;&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                //Console.WriteLine(GetLineState);&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                //Console.WriteLine(GetWriting);&lt;br /&gt;
                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                if (IsLineActive != true) break;&lt;br /&gt;
                //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                 IsLineActive = true;&lt;br /&gt;
                //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                        WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                        if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                            IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RING, out Is_incoming_ring);&lt;br /&gt;
                            incoming_ring = (bool)Is_incoming_ring;&lt;br /&gt;
                            if (incoming_ring == true)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName == &amp;quot;&amp;quot; &amp;amp; priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 1;       // идет звонок оператору&lt;br /&gt;
                                }&lt;br /&gt;
                                //if (current_FileName != FileName)&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGCOUNT, out ChannelInfo);&lt;br /&gt;
                                if ((int)ChannelInfo &amp;gt; ring_count)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = (int)ChannelInfo;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (priznak_incomin_ring == 1)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = 0;&lt;br /&gt;
                                    priznak_incomin_ring = 2; // статус - снята трубка&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGFIRSTDATETIME, out ChannelInfo);&lt;br /&gt;
                                    StartTime = ((DateTime)ChannelInfo);&lt;br /&gt;
                                    //StartTime = StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + StartTime.Hour+&amp;quot;:&amp;quot;StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second;&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                    TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                    //if (TypeCall != 2)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        PhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        SubPhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                    }&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot;+StartTime.Hour+&amp;quot;:&amp;quot;+StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second,&amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom,0,&amp;quot;&amp;quot;,1,0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                        Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                string response = send_id(&amp;quot;add_popup&amp;quot;, id_calldetails, Int32.Parse((ChannelName[(ChannelName.Length - 1)]).ToString()), PhoneFrom);&lt;br /&gt;
                                                Console.WriteLine(response);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
&lt;br /&gt;
                                }&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                /*if (current_FileName == &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;dozvon end&amp;quot;);&lt;br /&gt;
                                }*/&lt;br /&gt;
/*                                if (current_FileName == FileName &amp;amp;&amp;amp; priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName+ &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                }*/&lt;br /&gt;
                            }&lt;br /&gt;
                            if (IsLineActive == false)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName != &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    if (priznak_incomin_ring == 2) TypeCall = 2;    // out call&lt;br /&gt;
                                    if (priznak_incomin_ring == 0) TypeCall = 1; // in call&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 2, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    TypeCall_str = &amp;quot; Ожидание вызова ...&amp;quot;;&lt;br /&gt;
                                    glo_status1 =  TypeCall_str;&lt;br /&gt;
                                }&lt;br /&gt;
                                continue;&lt;br /&gt;
                            }&lt;br /&gt;
                            if (priznak_incomin_ring == 2 &amp;amp; TypeCall != 2)&lt;br /&gt;
                            {&lt;br /&gt;
                                //сюда вставить продолжительность звонка&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                                FileName = ChannelInfo.ToString();&lt;br /&gt;
                                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, ring_count, FileName, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot; ring_count=&amp;quot; + ring_count + &amp;quot; priznak_incomin_ring = 2;&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
&lt;br /&gt;
  /*object Msg;&lt;br /&gt;
                            var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                            byte[] bytes = (byte[])Msg;&lt;br /&gt;
                            string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                            export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                            FileName = ChannelInfo.ToString();&lt;br /&gt;
                            if (current_FileName != FileName)&lt;br /&gt;
                            {&lt;br /&gt;
                                current_FileName = FileName;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                                TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                                StartTime = (DateTime)ChannelInfo;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                if (priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONETO, out ChannelInfo);&lt;br /&gt;
                                    //PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom, 0, FileName, 2, 0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        MessageBox.Show(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                                System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                                //Console.WriteLine(&amp;quot;ChannelName1=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom + &amp;quot;ChannelName=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                if (priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                }&lt;br /&gt;
                                else&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                                }&lt;br /&gt;
                                glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall_str;&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                priznak_incomin_ring = 0;&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                            priznak_incomin_ring = 0;&lt;br /&gt;
                            ring_count = 0;&lt;br /&gt;
                            export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                            //continue;&lt;br /&gt;
                        }&lt;br /&gt;
                     //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    //Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                //}&lt;br /&gt;
            }&lt;br /&gt;
            SPRecordChannel.Disconnect();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static string CreateMD5(string input)&lt;br /&gt;
        {&lt;br /&gt;
            // Use input string to calculate MD5 hash&lt;br /&gt;
            using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())&lt;br /&gt;
            {&lt;br /&gt;
                byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);&lt;br /&gt;
                byte[] hashBytes = md5.ComputeHash(inputBytes);&lt;br /&gt;
&lt;br /&gt;
                // Convert the byte array to hexadecimal string&lt;br /&gt;
                StringBuilder sb = new StringBuilder();&lt;br /&gt;
                for (int i = 0; i &amp;lt; hashBytes.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    sb.Append(hashBytes[i].ToString(&amp;quot;X2&amp;quot;));&lt;br /&gt;
                }&lt;br /&gt;
                return sb.ToString();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public class Request_type&lt;br /&gt;
        {&lt;br /&gt;
            public string type { get; set; }&lt;br /&gt;
            public int unicod { get; set; }&lt;br /&gt;
            public int chanel { get; set; }&lt;br /&gt;
            public string phone { get; set; }&lt;br /&gt;
&lt;br /&gt;
            // public Dictionary&amp;lt;string, string&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class Response_type&lt;br /&gt;
        {&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; error { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class ErrorList&lt;br /&gt;
            {&lt;br /&gt;
                public string id { get; set; }&lt;br /&gt;
                public string text { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
            [Serializable]&lt;br /&gt;
            public class DataList&lt;br /&gt;
            {&lt;br /&gt;
                public string status { get; set; }&lt;br /&gt;
                public string unicod { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
        public static string send_id(string type, int unicod, int chanel, string phone)&lt;br /&gt;
        {&lt;br /&gt;
            // ^id_documment=_iemk_exchenge_log.id&lt;br /&gt;
            string response = &amp;quot;&amp;quot;;&lt;br /&gt;
            //            var SourceFile = &amp;quot;&amp;quot;;&lt;br /&gt;
            //string urlString = &amp;quot;http://smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
            var Host = Form1.Service_address;&lt;br /&gt;
            string urlString = &amp;quot;http://&amp;quot; + Host;&lt;br /&gt;
            var SoapAction = &amp;quot;&amp;quot;;&lt;br /&gt;
            string id_service = Form1.Service_id ;&lt;br /&gt;
            string passwrd = id_service + Form1.Service_pass;&lt;br /&gt;
            passwrd = CreateMD5(passwrd);&lt;br /&gt;
            urlString = urlString + &amp;quot;?id_service=&amp;quot;+id_service+&amp;quot;&amp;amp;auth_key=&amp;quot; + passwrd.ToLower();&lt;br /&gt;
            //string[] MyArray = { type, unicod.ToString(), chanel.ToString(), phone };&lt;br /&gt;
            Request_type MyArray = new Request_type();&lt;br /&gt;
                MyArray.type=type;&lt;br /&gt;
                MyArray.unicod = unicod;&lt;br /&gt;
                MyArray.chanel = chanel;&lt;br /&gt;
                if (phone == null) MyArray.phone = &amp;quot;000000&amp;quot;; else MyArray.phone = phone;&lt;br /&gt;
            var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            string json = jsonSerializer.Serialize(MyArray);&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;json=&amp;quot; + json);&lt;br /&gt;
            var response1 = XmlHttpRequest(json, urlString);&lt;br /&gt;
            // запись в файл&lt;br /&gt;
            if (Int32.Parse(response1.id)&amp;gt;0)&lt;br /&gt;
            {&lt;br /&gt;
                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 3, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, Int32.Parse(response1.id), response1.text);&lt;br /&gt;
            }&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;response error id =&amp;quot; + response1.id + &amp;quot; response text =&amp;quot; + response1.text);&lt;br /&gt;
            string request = &amp;quot;&amp;quot;;&lt;br /&gt;
            var jsonDeSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            Response_type a = jsonDeSerializer.Deserialize&amp;lt;Response_type&amp;gt;(response);&lt;br /&gt;
            ErrorList a1 = jsonDeSerializer.Deserialize&amp;lt;ErrorList&amp;gt;(response);&lt;br /&gt;
            var DataList = jsonDeSerializer.Deserialize&amp;lt;DataList&amp;gt;(response);&lt;br /&gt;
            Console.WriteLine(&amp;quot;a =&amp;quot; + a);&lt;br /&gt;
            return response;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static ErrorList XmlHttpRequest(string Content, string urlString)&lt;br /&gt;
        {&lt;br /&gt;
            var ContentType = &amp;quot;application/json;&amp;quot;;&lt;br /&gt;
            // param_return=1 полный ответ, 2 урезаный&lt;br /&gt;
                /* Get example *//*&lt;br /&gt;
&lt;br /&gt;
                byte[] bytes;&lt;br /&gt;
                bytes = System.Text.Encoding.UTF8.GetBytes(get_s);&lt;br /&gt;
&lt;br /&gt;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(get_s);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
&lt;br /&gt;
                using (HttpWebResponse response1 = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response1.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }&lt;br /&gt;
                 */&lt;br /&gt;
                /* Post */&lt;br /&gt;
&lt;br /&gt;
            byte[] dataBytes = Encoding.UTF8.GetBytes(Content);&lt;br /&gt;
&lt;br /&gt;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlString);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
                request.ContentLength = dataBytes.Length;&lt;br /&gt;
                request.ContentType = ContentType;&lt;br /&gt;
                request.Method = &amp;quot;POST&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                using (Stream requestBody = request.GetRequestStream())&lt;br /&gt;
                {&lt;br /&gt;
                    requestBody.Write(dataBytes, 0, dataBytes.Length);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                /*using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }*/&lt;br /&gt;
                using (var twitpicResponse = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                {&lt;br /&gt;
&lt;br /&gt;
                    using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))&lt;br /&gt;
                    {&lt;br /&gt;
                        JavaScriptSerializer js = new JavaScriptSerializer();&lt;br /&gt;
                        var objText = reader.ReadToEnd();&lt;br /&gt;
                        //var json44 = JsonConvert.SerializeObject(objText, Formatting.Indented);&lt;br /&gt;
                        var myojb = js.DeserializeObject(objText);&lt;br /&gt;
&lt;br /&gt;
                        var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(objText);&lt;br /&gt;
                        ErrorList ErrorValue_class = new ErrorList();&lt;br /&gt;
                        foreach (KeyValuePair&amp;lt;string, object&amp;gt; keyValue in jsonData)&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(keyValue.Key + &amp;quot; - &amp;quot; + keyValue.Value);&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;error&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                string ErrorValue_string = js.Serialize(keyValue.Value);&lt;br /&gt;
                                if (ErrorValue_string == &amp;quot;[]&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                } &lt;br /&gt;
                                ErrorValue_class = js.Deserialize&amp;lt;ErrorList&amp;gt;(ErrorValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;ErrorValue_class=&amp;quot; + ErrorValue_class.id + &amp;quot;ErrorValue_class.text=&amp;quot; + ErrorValue_class.text);&lt;br /&gt;
                            }&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;data&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                                string dataValue_string = jsonSerializer.Serialize(keyValue.Value);&lt;br /&gt;
                                if (dataValue_string == &amp;quot;[]&amp;quot;) break;&lt;br /&gt;
                                DataList Data_class = js.Deserialize&amp;lt;DataList&amp;gt;(dataValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;myojb2212.status=&amp;quot; + Data_class.status + &amp;quot;myojb2212.value=&amp;quot; + Data_class.unicod);&lt;br /&gt;
                                ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                return ErrorValue_class;&lt;br /&gt;
                            }                              &lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
/*                    Object obj;&lt;br /&gt;
                    bool b = jsonData.TryGetValue(&amp;quot;error&amp;quot;, out obj);&lt;br /&gt;
                        var splashInfo = JsonConvert.DeserializeObject&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        ErrorList myojb1 = js.Deserialize&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        DataList myojb2 = js.Deserialize&amp;lt;DataList&amp;gt;(objText);&lt;br /&gt;
                        return myojb1;*/&lt;br /&gt;
                        return ErrorValue_class;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        public static void export_to_file(string filename, string text)&lt;br /&gt;
        {&lt;br /&gt;
            FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);&lt;br /&gt;
            StreamWriter sw = new StreamWriter(fs);&lt;br /&gt;
            Console.WriteLine(text);&lt;br /&gt;
            sw.WriteLine(text);&lt;br /&gt;
            sw.Close();&lt;br /&gt;
        }&lt;br /&gt;
/*        public static void Add()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;1&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(1000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Add1()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;2&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(3000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }*/&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
MySql подключение&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using MySql;&lt;br /&gt;
using MySql.Data.MySqlClient;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using sprec;&lt;br /&gt;
&lt;br /&gt;
namespace namespase_mysql_connection&lt;br /&gt;
{&lt;br /&gt;
    class MySql&lt;br /&gt;
    {&lt;br /&gt;
        public static MySqlCommand ConnectToMySQL(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlConnection Connection = new MySqlConnection(&amp;quot;Data Source=&amp;quot; + MySQL_host + &amp;quot;;Database=&amp;quot; + MySQL_db + &amp;quot;;User Id=&amp;quot; + MySQL_uid + &amp;quot;;Password=&amp;quot; + MySQL_pw + &amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;); // Создаем соединение. Формат строки соединения подробно описан в прилагающейся документации.&lt;br /&gt;
            MySqlCommand Query = new MySqlCommand(); // С помощью этого объекта выполняются запросы к БД&lt;br /&gt;
            Query.Connection = Connection; // Присвоим объекту только что созданное соединение&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соединяюсь с сервером базы данных...&amp;quot;);&lt;br /&gt;
                Connection.Open();// Соединяемся&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Соеденено&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (MySqlException SSDB_Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Ошибка - выходим&lt;br /&gt;
                //Console.WriteLine(&amp;quot;Проверьте настройки соединения, не могу соединиться с базой данных!\nОшибка: &amp;quot; + SSDB_Exception.Message);&lt;br /&gt;
                MessageBox.Show(&amp;quot;Ошибка подключения !&amp;quot;);&lt;br /&gt;
                return Query;&lt;br /&gt;
            }&lt;br /&gt;
            return Query;&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_test(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            Console.WriteLine(MySQLConnected.ToString());&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file(string MySQL_host, string MySQL_db, string MySQL_uid, string MySQL_pw, int param_select, string StartTime, string StopTime, char ChannelNumber, string PhoneFrom, int ringCount, string FileName, int type_call, int id,string error_txt)&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=10.35.0.93;Database=Statistics;Uid=das;Pwd=12qwasZX;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=172.16.130.31;Database=vol_gp1;Uid=nataly;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            //             List&amp;lt;string&amp;gt; ret_file_path = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
            //            ArrayList ret_file_path = new ArrayList();&lt;br /&gt;
            ////String str = @&amp;quot;Server=&amp;quot;+MySQL_host+&amp;quot;;Database=&amp;quot;+MySQL_db+&amp;quot;;Uid=&amp;quot;+MySQL_uid+&amp;quot;;Pwd=&amp;quot;+MySQL_pw+&amp;quot;;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(MySQL_host, MySQL_db, MySQL_uid, MySQL_pw);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            ////MySqlConnection con = null;&lt;br /&gt;
            ////con = new MySqlConnection(str);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            string var_select = &amp;quot;&amp;quot;;&lt;br /&gt;
            MySQLConnected.CommandText = @&amp;quot;CREATE TABLE IF NOT EXISTS calldetails (&lt;br /&gt;
                      id int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                      date_time datetime DEFAULT NULL,&lt;br /&gt;
                      channel varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      ringCount varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      numberPhone varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStart varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      recordStop varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,&lt;br /&gt;
                      date_time_stop datetime DEFAULT NULL,&lt;br /&gt;
                      type_call int(11) DEFAULT NULL,&lt;br /&gt;
                      PRIMARY KEY (id)&lt;br /&gt;
                    )&lt;br /&gt;
                    ENGINE = INNODB&lt;br /&gt;
                    AUTO_INCREMENT = 1&lt;br /&gt;
                    AVG_ROW_LENGTH = 630&lt;br /&gt;
                    CHARACTER SET cp1251&lt;br /&gt;
                    COLLATE cp1251_general_ci&lt;br /&gt;
                    ROW_FORMAT = DYNAMIC;&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            if (param_select == 0)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;SELECT IFNULL(MAX(id)+1,1) as ID FROM calldetails&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 1)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 2)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;update calldetails SET recordStop=1, date_time_stop =\&amp;quot;&amp;quot; + StopTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; where id=&amp;quot; + id;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 3)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = @&amp;quot;CREATE TABLE IF NOT EXISTS error_send_http (&lt;br /&gt;
                    `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                    `err_id` varchar(8) NOT NULL,&lt;br /&gt;
                    `err_date` datetime NOT NULL,&lt;br /&gt;
                    `text` int(11) NOT NULL,&lt;br /&gt;
                    PRIMARY KEY (`id`)&lt;br /&gt;
                    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;&lt;br /&gt;
                &amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO error_send_http(err_id,err_date,text) VALUES  (&amp;quot; + id + &amp;quot;,\&amp;quot;&amp;quot; + StopTime + &amp;quot;,\&amp;quot;&amp;quot;+&amp;quot;,\&amp;quot;&amp;quot; + error_txt + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            if (param_select == 4)&lt;br /&gt;
            {&lt;br /&gt;
                var_select = &amp;quot;select * from error_send_http&amp;quot;;&lt;br /&gt;
                MySQLConnected.CommandText = var_select;&lt;br /&gt;
                //Program.export_to_file(&amp;quot;1&amp;quot;, &amp;quot;update calldetails SET ringCount=&amp;quot; + ringCount + &amp;quot;, recordStart =\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot;+ &amp;quot; where id=&amp;quot; + id);&lt;br /&gt;
            }&lt;br /&gt;
            MySQLConnected.CommandText = var_select;&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                ////con.Open();&lt;br /&gt;
                ////sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                if (param_select == 1 | param_select == 3) return null;&lt;br /&gt;
                ////MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                // Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if (param_select == 0)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            //                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;ID&amp;quot;].ToString());&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;ID&amp;quot;].ToString() });&lt;br /&gt;
                            //                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        MySQLConnected.CommandText = &amp;quot;INSERT INTO calldetails(id,date_time,channel,numberPhone,recordStop,type_call,recordstart) VALUES  (&amp;quot; + myData[0][&amp;quot;ID&amp;quot;] + &amp;quot;,\&amp;quot;&amp;quot; + StartTime + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + ChannelNumber + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,\&amp;quot;&amp;quot; + PhoneFrom + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;,0,&amp;quot; + type_call + &amp;quot;,\&amp;quot;&amp;quot; + Path.GetFileName(FileName) + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot;)&amp;quot;;&lt;br /&gt;
                        MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    }&lt;br /&gt;
                    if (param_select == 4)&lt;br /&gt;
                    {&lt;br /&gt;
                        for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                        {&lt;br /&gt;
                            rezult_str.Add(new List&amp;lt;string&amp;gt; { myData[i][&amp;quot;id&amp;quot;].ToString()  ,  myData[i][&amp;quot;err_id&amp;quot;].ToString() , myData[i][&amp;quot;err_date&amp;quot;].ToString() ,  myData[i][&amp;quot;text&amp;quot;].ToString() });&lt;br /&gt;
                            Console.WriteLine(&amp;quot;myData[i]=&amp;quot; + myData[i][&amp;quot;id&amp;quot;].ToString());&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
                //Console.WriteLine(rezult_str.Count);&lt;br /&gt;
                return rezult_str;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                MySQLConnected.Cancel();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; mysql_connect_read_status_file_for_send()&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =35 это подписаны документы, = 37 - отправка с ошибкой завершилась. переотправляем.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 _iemk_exchenge_log.id_iemk_docum документа, j=3 - подписаный файл,j-4 - _iemk_exchenge_log.id&lt;br /&gt;
            MySQLConnected.CommandText = &amp;quot;SELECT * FROM statistics._iemk_exchenge_log where (id_status=35 or id_status=37)&amp;quot;;&lt;br /&gt;
            MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
            DataTable dt = new DataTable();&lt;br /&gt;
            da.Fill(dt);&lt;br /&gt;
            var myData = dt.Select();&lt;br /&gt;
            string full_file_path = &amp;quot;&amp;quot;;&lt;br /&gt;
            var rezult_str = new List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt;();&lt;br /&gt;
            if (myData.Length == 0)&lt;br /&gt;
            {&lt;br /&gt;
                rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;Error&amp;quot; });&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    rezult_str.Add(new List&amp;lt;string&amp;gt; { &amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;) + myData[i][&amp;quot;table_name&amp;quot;].ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (&amp;quot;\\\\10.35.0.66\\iemk\\&amp;quot; + myData[i][&amp;quot;path_to_file&amp;quot;] + &amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString().Replace(&amp;quot;/&amp;quot;, &amp;quot;\\&amp;quot;), (myData[i][&amp;quot;id_iemk_docum&amp;quot;].ToString()), (&amp;quot;_pp_&amp;quot; + myData[i][&amp;quot;table_name&amp;quot;]).ToString(), (myData[i][&amp;quot;id&amp;quot;]).ToString() });&lt;br /&gt;
                    Console.WriteLine(full_file_path + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            return rezult_str;&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        // поиск статуса , полученного в синхронном ответе в базе. если нет, добавляем, есть -&amp;gt; возвращаем id статуса&lt;br /&gt;
        public static void mysql_connect_search_sync_status(string failue, string reason, int sync_unswer_error_count, int id_document)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;SELECT * FROM _iemk_status_doc WHERE service_err_id like \&amp;quot;%&amp;quot; + failue + &amp;quot;%\&amp;quot;&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                if (myData.Length == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_status_doc(service_err_id,name,parent,is_work) VALUES  (\&amp;quot;&amp;quot; + failue + &amp;quot;\&amp;quot;,\&amp;quot;&amp;quot; + reason + &amp;quot;\&amp;quot;,17,1)&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;SELECT LAST_INSERT_ID() as last_id FROM _iemk_status_doc LIMIT 1&amp;quot;;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                    MySqlDataAdapter da1 = new MySqlDataAdapter(MySQLConnected);&lt;br /&gt;
                    DataTable dt1 = new DataTable();&lt;br /&gt;
                    da1.Fill(dt1);&lt;br /&gt;
                    var myData1 = dt1.Select();&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData1[0][&amp;quot;last_id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set id_status_send_sync=&amp;quot; + myData[0][&amp;quot;id&amp;quot;] + &amp;quot;, sync_unswer_error_count=&amp;quot; + sync_unswer_error_count + &amp;quot; where id=&amp;quot; + id_document;&lt;br /&gt;
                    MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // втсвляем исходник и результат синхронного запроса в лог&lt;br /&gt;
        public static void mysql_connect_insert_sync_result(string request, string response, int id_documment)&lt;br /&gt;
        {&lt;br /&gt;
            {&lt;br /&gt;
                MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
                // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
                // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
                // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
                //                File.WriteAllText(&amp;quot;response_error&amp;quot; + DateTime.Now.ToString(&amp;quot;yyyy_M_d_HH_mm_ss&amp;quot;) + &amp;quot;.xml&amp;quot;, &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;, Encoding.UTF8);&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;INSERT INTO _iemk_exchange_log_details(id_exchange_log,request_start,response_sync_from_iemk) VALUES (&amp;quot; + id_documment + &amp;quot;,\&#039;(&amp;quot; + request + &amp;quot;)\&#039;,\&#039;(&amp;quot; + response + &amp;quot;)\&#039;)&amp;quot;;&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void mysql_connect_insert_result(List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; array_for_insert)&lt;br /&gt;
        {&lt;br /&gt;
            MySqlCommand MySQLConnected = ConnectToMySQL(&amp;quot;10.35.0.93&amp;quot;, &amp;quot;statistics&amp;quot;, &amp;quot;das&amp;quot;, &amp;quot;12qwasZX&amp;quot;);&lt;br /&gt;
            // путь к документам \\10.35.0.66\iemk&lt;br /&gt;
            // id_status =34 это пришли документы, но еще не отправлены.&lt;br /&gt;
            // arr[i][j] i-кол-во файлов, j=0 -исходный файл [j]=1- переподписаный файл j=2 id документа, j=3 - подписаный файл,j-4 - id._iemk_list_docum.id&lt;br /&gt;
            for (int i = 0; i &amp;lt;= array_for_insert.Count - 1; i++)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]));&lt;br /&gt;
                MySQLConnected.CommandText = &amp;quot;update _iemk_exchenge_log set resign_table_name=\&amp;quot;&amp;quot; + array_for_insert[i][0] + &amp;quot;\&amp;quot;, id_status=&amp;quot; + int.Parse((array_for_insert[i][2])) + &amp;quot;, resign_snils=\&amp;quot;&amp;quot; + array_for_insert[i][3] + &amp;quot;\&amp;quot; where id_iemk_docum=&amp;quot; + int.Parse(array_for_insert[i][1]) + &amp;quot; and id=&amp;quot; + int.Parse(array_for_insert[i][4]);&lt;br /&gt;
                MySQLConnected.ExecuteNonQuery();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static String mysql_connect()&lt;br /&gt;
        {&lt;br /&gt;
            // Попытка открыть соединение, таймаут 5 сек.&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=10.35.0.93;Database=Statistics;Uid=das;Pwd=12qwasZX;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            //            MySqlConnection con = new MySqlConnection(&amp;quot;Server=172.16.130.31;Database=vol_gp1;Uid=nataly;CharSet = cp1251;Connection Timeout=5;&amp;quot;);&lt;br /&gt;
            String str = @&amp;quot;Server=10.35.0.93;Database=statistics;Uid=das;Pwd=12qwasZX;CharSet = cp1251;Connection Timeout=5;&amp;quot;;&lt;br /&gt;
            MySqlConnection con = null;&lt;br /&gt;
            con = new MySqlConnection(str);&lt;br /&gt;
            // Здесь хранится в поле Key *официальный* адрес для принятия асинхронных запросов.&lt;br /&gt;
            MySqlCommand sqlCom = new MySqlCommand(&amp;quot;SELECT * FROM _system_table where id=367&amp;quot;, con);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                con.Open();&lt;br /&gt;
                sqlCom.ExecuteNonQuery();&lt;br /&gt;
                MySqlDataAdapter da = new MySqlDataAdapter(sqlCom);&lt;br /&gt;
                DataTable dt = new DataTable();&lt;br /&gt;
                da.Fill(dt);&lt;br /&gt;
                var myData = dt.Select();&lt;br /&gt;
                //                textbox_fio.Text = result.ResultData.DefaultView.Table.Rows[0][&amp;quot;fio&amp;quot;].ToString(); // пример&lt;br /&gt;
                //                Console.WriteLine(myData[0][&amp;quot;Codmkb10&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                /*                for (int i = 0; i &amp;lt; myData.Length; i++)&lt;br /&gt;
                                {&lt;br /&gt;
                                    for (int j = 0; j &amp;lt; myData[i].ItemArray.Length; j++)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        Console.WriteLine(myData[0][&amp;quot;unicod&amp;quot;].ToString() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                        Console.WriteLine(myData[i].ItemArray[j] + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                 */&lt;br /&gt;
                return myData[0][&amp;quot;param&amp;quot;].ToString();&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                //                MessageBox.Show(&amp;quot;Ошибка удаления!\n\n&amp;quot; + ex.Message, &amp;quot;ОШИБКА&amp;quot;);&lt;br /&gt;
                return &amp;quot;Error&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            finally&lt;br /&gt;
            {&lt;br /&gt;
                con.Close();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Форма 1&lt;br /&gt;
&amp;lt;pre&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using Microsoft.Win32;&lt;br /&gt;
using System.Data.Odbc;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.IO;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        public static string Srv = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string DataBase = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string User = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Passwrd = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_address = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_id = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static string Service_pass = &amp;quot;&amp;quot;;&lt;br /&gt;
        public static int Autostart = 0;&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            var start= get_data_from_reestr();&lt;br /&gt;
            if (start == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                Program.Connect_to_asp();&lt;br /&gt;
            }&lt;br /&gt;
            if (start == 2)&lt;br /&gt;
            {&lt;br /&gt;
                Program.glo_status1 = &amp;quot; Необходимо задать первоначальные настроки !&amp;quot;;&lt;br /&gt;
                label1.Text = Program.glo_status1;&lt;br /&gt;
                button1.Enabled = false;&lt;br /&gt;
                button2.Enabled = false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Interval = 1000;&lt;br /&gt;
            timer1.Tick += new EventHandler(timer1_Tick);&lt;br /&gt;
            timer1.Start();&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Ожидание звонка ...&amp;quot;;&lt;br /&gt;
            label1.Text = Program.glo_status1;&lt;br /&gt;
            get_data_from_reestr();&lt;br /&gt;
            Program.Connect_to_asp();&lt;br /&gt;
            button1.Enabled = false;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
            button4.Enabled = false;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public int get_data_from_reestr()&lt;br /&gt;
        {&lt;br /&gt;
            RegistryKey currentUserKey = Registry.CurrentUser;&lt;br /&gt;
            RegistryKey SprecordsKey = currentUserKey.OpenSubKey(&amp;quot;SpRecords&amp;quot;);&lt;br /&gt;
            if (SprecordsKey != null)&lt;br /&gt;
            {&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;false&amp;quot; | (&amp;quot;AutoStart&amp;quot;) == null) Autostart = 0;&lt;br /&gt;
                if (SprecordsKey.GetValue(&amp;quot;AutoStart&amp;quot;).ToString() == &amp;quot;true&amp;quot;) Autostart = 1;&lt;br /&gt;
                Srv = SprecordsKey.GetValue(&amp;quot;Server&amp;quot;).ToString();&lt;br /&gt;
                DataBase = SprecordsKey.GetValue(&amp;quot;Database&amp;quot;).ToString();&lt;br /&gt;
                User = SprecordsKey.GetValue(&amp;quot;User&amp;quot;).ToString();&lt;br /&gt;
                Passwrd = SprecordsKey.GetValue(&amp;quot;Password&amp;quot;).ToString();&lt;br /&gt;
                Service_address = SprecordsKey.GetValue(&amp;quot;Service_addr&amp;quot;).ToString();&lt;br /&gt;
                Service_id = (string)SprecordsKey.GetValue(&amp;quot;Service_id&amp;quot;);&lt;br /&gt;
                Service_pass = (string)SprecordsKey.GetValue(&amp;quot;Service_pass&amp;quot;);&lt;br /&gt;
                SprecordsKey.Close();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                Autostart = 2; //error&lt;br /&gt;
            }&lt;br /&gt;
            return Autostart;&lt;br /&gt;
        }&lt;br /&gt;
        private void checkBox1_CheckedChanged(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button4_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form2 Forma2 = new Form2();&lt;br /&gt;
            Forma2.ShowDialog();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void label1_Click_1(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Form1_Load(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            label1.Text = Program.glo_status1; &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button2_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Program.glo_status1 = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            label1.Text = &amp;quot; Сервис остановлен ...!&amp;quot;;&lt;br /&gt;
            Program.Connect_to_stop();&lt;br /&gt;
            button1.Enabled = true;&lt;br /&gt;
            button2.Enabled = false;&lt;br /&gt;
            button4.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void button3_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer1.Stop();&lt;br /&gt;
            Environment.Exit(0);&lt;br /&gt;
            Close();&lt;br /&gt;
            Application.Exit();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void timer1_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Form1_Load(null, null);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4167</id>
		<title>Sp Rec</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=Sp_Rec&amp;diff=4167"/>
		<updated>2018-02-20T09:52:20Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «&amp;lt;pre&amp;gt; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using spsdksvr; using spsdksw; using SpR…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using spsdksvr;&lt;br /&gt;
using spsdksw;&lt;br /&gt;
using SpRecord;&lt;br /&gt;
using System.Threading; &lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using namespase_mysql_connection;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
using System.Runtime.InteropServices;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using Newtonsoft.Json;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
using System.Web.Script.Serialization;&lt;br /&gt;
&lt;br /&gt;
namespace sprec&lt;br /&gt;
{&lt;br /&gt;
    public class myThread&lt;br /&gt;
        {&lt;br /&gt;
            public static Thread thread;&lt;br /&gt;
&lt;br /&gt;
            public myThread(string name,int start_stop,int count_thread) //Конструктор получает имя функции&lt;br /&gt;
            {&lt;br /&gt;
&lt;br /&gt;
                if (start_stop == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    thread = new Thread(Program.ChannelListen);&lt;br /&gt;
                    thread.Name = name;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;thread.Name =&amp;quot; + thread.Name + &amp;quot;, &amp;quot; + thread.ManagedThreadId);&lt;br /&gt;
                    thread.IsBackground = true;&lt;br /&gt;
                    thread.Start();//передача параметра в поток&lt;br /&gt;
                }&lt;br /&gt;
                else if (start_stop == 2)&lt;br /&gt;
                {&lt;br /&gt;
                    thread.Abort();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
/*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
            {&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                    Thread.Sleep(0);&lt;br /&gt;
                }&lt;br /&gt;
                Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
*/      &lt;br /&gt;
        &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    public class Connect_to_sprecord&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME = 0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        public Connect_to_sprecord(string ch_name, int start_stop) //Конструктор получает имя функции&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            if (start_stop == 1)&lt;br /&gt;
            {&lt;br /&gt;
                string ChannelName = ch_name;&lt;br /&gt;
                Console.WriteLine(ChannelName);&lt;br /&gt;
                string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
                string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
                string StartTime = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool GetLineState;&lt;br /&gt;
                bool GetWriting;&lt;br /&gt;
                int WaitMessage;&lt;br /&gt;
                string TypeCall = &amp;quot;&amp;quot;;&lt;br /&gt;
                bool IsLineActive;&lt;br /&gt;
                object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
                object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
                int a = 0;&lt;br /&gt;
&lt;br /&gt;
                SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
                SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                while (SPRecordChannel.Connected == true)&lt;br /&gt;
                {&lt;br /&gt;
                    if (Program.glo_status_int == 1) break;&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                    //Console.WriteLine(GetLineState);&lt;br /&gt;
                    //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                    //Console.WriteLine(GetWriting);&lt;br /&gt;
                    //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                    SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                    if (IsLineActive != true) break;&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                    IsLineActive = true;&lt;br /&gt;
                    //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                    WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                    if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                    {&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                        IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                        if (IsLineActive == false) continue;&lt;br /&gt;
                        /*object Msg;&lt;br /&gt;
                        var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                        byte[] bytes = (byte[])Msg;&lt;br /&gt;
                        string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                        export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                        FileName = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                        TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                        StartTime = ChannelInfo.ToString();&lt;br /&gt;
                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                        TypeCall = ChannelInfo.ToString();&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                        //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                        if ((int)TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                            PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                            SubPhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                        }&lt;br /&gt;
                        System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                        Console.WriteLine(&amp;quot;ChannelName=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall[0] + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                        //glo_status1 = ChannelName + &amp;quot; &amp;quot; + TypeCall[0];&lt;br /&gt;
                        if (TypeCall[0] == 2)&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;,&amp;quot; + SubPhoneFrom;&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            TypeCall = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                        }&lt;br /&gt;
                        Program.glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall;&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        Program.export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                    }&lt;br /&gt;
                    //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                    //}&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordChannel.Disconnect();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*            void func(object num)//Функция потока, передаем параметр&lt;br /&gt;
                    {&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; выводит &amp;quot; );&lt;br /&gt;
                            Thread.Sleep(0);&lt;br /&gt;
                        }&lt;br /&gt;
                        Console.WriteLine(Thread.CurrentThread.Name + &amp;quot; завершился&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
        */&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR  //  информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR //  информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME=0x0000000E; // DateTime&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона. &lt;br /&gt;
        public const int SPR_S_OK = 0x00000000;&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG //  информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи. &lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010;  // LONG  // информация о количестве сигналов вызова&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_RING = 0x0000000D; // WordBool&lt;br /&gt;
        public const int SPR_CHANNEL_INFO_SUBPHONETO = 0x0000000A; // BSTR&lt;br /&gt;
&lt;br /&gt;
        // max число каналов =4 &lt;br /&gt;
        public static string glo_status1 = &amp;quot; Ожидание запуска ...&amp;quot;;&lt;br /&gt;
        public static int glo_status_int = 0;&lt;br /&gt;
        static string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            /*string json1 =&amp;quot;{\&amp;quot;error\&amp;quot;:[],\&amp;quot;data\&amp;quot;:{\&amp;quot;status\&amp;quot;:\&amp;quot;ok\&amp;quot;,\&amp;quot;unicod\&amp;quot;:42}}&amp;quot;;&lt;br /&gt;
            var json2 =&amp;quot;{\&amp;quot;error\&amp;quot;:{\&amp;quot;id\&amp;quot;:1,\&amp;quot;text\&amp;quot;:\&amp;quot;error autorization\&amp;quot;},\&amp;quot;data\&amp;quot;:[]}&amp;quot;;&lt;br /&gt;
          &lt;br /&gt;
            var json3 =&amp;quot;{\&amp;quot;response\&amp;quot;:[{\&amp;quot;id\&amp;quot;:269058571,\&amp;quot;first_name\&amp;quot;:\&amp;quot;Name\&amp;quot;,\&amp;quot;last_name\&amp;quot;:\&amp;quot;LastName\&amp;quot;,\&amp;quot;photo_50\&amp;quot;:\&amp;quot;http://cs624717.vk.me/v624717571/21718/X8.jpg\&amp;quot;}]}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            using (var reader = new StreamReader(json1))&lt;br /&gt;
            {&lt;br /&gt;
                System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                var objText = reader.ReadToEnd();&lt;br /&gt;
                var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(json1);&lt;br /&gt;
                Console.WriteLine(jsonData);&lt;br /&gt;
                Console.WriteLine(&amp;quot;end&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            return;		*/&lt;br /&gt;
            // Подключаемся&lt;br /&gt;
            //SpRecordClient SPRecordClient = new spsdksvr.SpRecordClient();&lt;br /&gt;
            Form1 Forma = new Form1();&lt;br /&gt;
            Forma.ShowDialog();&lt;br /&gt;
            //Forma.SetLabelText(glo_status1);&lt;br /&gt;
            //Forma.Show();&lt;br /&gt;
            //Console.ReadKey();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        class RootObject&lt;br /&gt;
        {&lt;br /&gt;
            public Item1 error { get; set; }&lt;br /&gt;
            public Item2 data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item1&lt;br /&gt;
        {&lt;br /&gt;
            public string id { get; set; }&lt;br /&gt;
            public string text { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        class Item2&lt;br /&gt;
        {&lt;br /&gt;
            public string status { get; set; }&lt;br /&gt;
            public string unicod { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_stop()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 1;&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException)&lt;br /&gt;
            {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток не прерван &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Connect_to_asp()&lt;br /&gt;
        {&lt;br /&gt;
            //MessageBox.Show(&amp;quot;hello pr&amp;quot;);&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                glo_status_int = 0;&lt;br /&gt;
                SpRecordClient SPRecordClient = new SpRecordClient();&lt;br /&gt;
                Console.WriteLine(&amp;quot;Connect_to_asp =&amp;quot;);&lt;br /&gt;
                var Connect = SPRecordClient.Connect(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                // Получаем список каналов&lt;br /&gt;
                string ChannelList = &amp;quot;&amp;quot;;&lt;br /&gt;
                string FileLogFileName = &amp;quot;connect_log.log&amp;quot;;&lt;br /&gt;
                var Channel = SPRecordClient.GetChannelNames(out ChannelList, 1);&lt;br /&gt;
                Char delimiter = &#039;|&#039;;&lt;br /&gt;
                String[] substrings = ChannelList.Split(delimiter);&lt;br /&gt;
                //export_to_file(FileLogFileName, &amp;quot;1 start&amp;quot;);&lt;br /&gt;
                //Program p = new Program();&lt;br /&gt;
                int i = 0;&lt;br /&gt;
                foreach (var substring in substrings)&lt;br /&gt;
                {&lt;br /&gt;
                    i += 1;&lt;br /&gt;
                    Console.WriteLine(&amp;quot;substring &amp;quot; + substring);&lt;br /&gt;
                    //myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                    switch (i)&lt;br /&gt;
                    {&lt;br /&gt;
                        case 1:&lt;br /&gt;
                            //Connect_to_sprecord t1 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t1 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 2:&lt;br /&gt;
                            //Connect_to_sprecord t2 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t2= new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 3:&lt;br /&gt;
                            //Connect_to_sprecord t3 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            myThread t3 = new myThread(substring, 1, i);&lt;br /&gt;
                            break;&lt;br /&gt;
                        case 4:&lt;br /&gt;
                            myThread t4 = new myThread(substring, 1, i);&lt;br /&gt;
                            //Connect_to_sprecord t4 = new Connect_to_sprecord(substring, 1);&lt;br /&gt;
                            break;&lt;br /&gt;
                    }&lt;br /&gt;
                    //Console.ReadKey();&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек. для инициализации&lt;br /&gt;
                    Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                SPRecordClient.Disconnect();&lt;br /&gt;
                //var devName = SPRecordClient.GetDeviceNames;&lt;br /&gt;
                Console.WriteLine(&amp;quot;pause &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            catch (ThreadAbortException exc)&lt;br /&gt;
            {&lt;br /&gt;
                if ((int)exc.ExceptionState == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Прерывание отменено! Код завершения: &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
                    Thread.ResetAbort();&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Поток прерван, код завершения &amp;quot;&lt;br /&gt;
                        + exc.ExceptionState);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void ChannelListen()&lt;br /&gt;
        {&lt;br /&gt;
            string ChannelName = myThread.thread.Name;&lt;br /&gt;
            int id_calldetails = 0;&lt;br /&gt;
            Console.WriteLine(ChannelName);&lt;br /&gt;
            string current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            string FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            int priznak_incomin_ring = 0;&lt;br /&gt;
            string TimeLine = &amp;quot;&amp;quot;;&lt;br /&gt;
            string PhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            string SubPhoneFrom = &amp;quot;&amp;quot;;&lt;br /&gt;
            DateTime StartTime;&lt;br /&gt;
            int ring_count = 0; &lt;br /&gt;
            bool GetLineState;&lt;br /&gt;
            bool GetWriting;&lt;br /&gt;
            int WaitMessage;&lt;br /&gt;
            int TypeCall = 0;&lt;br /&gt;
            string TypeCall_str = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool IsLineActive;&lt;br /&gt;
            object ChannelInfo = &amp;quot;&amp;quot;;&lt;br /&gt;
            object IsLineActiveObj = &amp;quot;&amp;quot;;&lt;br /&gt;
            bool incoming_ring;&lt;br /&gt;
            object Is_incoming_ring = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();&lt;br /&gt;
            SPRecordChannel.Connect(ChannelName, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
            priznak_incomin_ring = 0;&lt;br /&gt;
            while (SPRecordChannel.Connected == true)&lt;br /&gt;
            {&lt;br /&gt;
                if (glo_status_int==1) break;&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetLineState);&lt;br /&gt;
                //Console.WriteLine(GetLineState);&lt;br /&gt;
                //SPRecordChannel.GetLineState(out GetWriting);&lt;br /&gt;
                //Console.WriteLine(GetWriting);&lt;br /&gt;
                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetReadyToCall(out IsLineActive);&lt;br /&gt;
                SPRecordChannel.GetLineState(out IsLineActive);&lt;br /&gt;
                if (IsLineActive != true) break;&lt;br /&gt;
                //Console.WriteLine(&amp;quot;IsLineActive1=&amp;quot; + IsLineActive);                &lt;br /&gt;
                 IsLineActive = true;&lt;br /&gt;
                //while (IsLineActive == true)&lt;br /&gt;
                    //{&lt;br /&gt;
                        WaitMessage = SPRecordChannel.WaitMessage(-1);&lt;br /&gt;
                        if (WaitMessage == SPR_S_OK)&lt;br /&gt;
                        {&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);&lt;br /&gt;
                            IsLineActive = (bool)IsLineActiveObj;&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RING, out Is_incoming_ring);&lt;br /&gt;
                            incoming_ring = (bool)Is_incoming_ring;&lt;br /&gt;
                            if (incoming_ring == true)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName == &amp;quot;&amp;quot; &amp;amp; priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 1;       // идет звонок оператору&lt;br /&gt;
                                }&lt;br /&gt;
                                //if (current_FileName != FileName)&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGCOUNT, out ChannelInfo);&lt;br /&gt;
                                if ((int)ChannelInfo &amp;gt; ring_count)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = (int)ChannelInfo;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (priznak_incomin_ring == 1)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ring_count = 0;&lt;br /&gt;
                                    priznak_incomin_ring = 2; // статус - снята трубка&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGFIRSTDATETIME, out ChannelInfo);&lt;br /&gt;
                                    StartTime = ((DateTime)ChannelInfo);&lt;br /&gt;
                                    //StartTime = StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + StartTime.Hour+&amp;quot;:&amp;quot;StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second;&lt;br /&gt;
                                    SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                    TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                    //if (TypeCall != 2)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        PhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                        SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);&lt;br /&gt;
                                        SubPhoneFrom = (string)ChannelInfo;&lt;br /&gt;
                                    }&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, StartTime.Date.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot;+StartTime.Hour+&amp;quot;:&amp;quot;+StartTime.Minute+&amp;quot;:&amp;quot;+StartTime.Second,&amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom,0,&amp;quot;&amp;quot;,1,0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                        Console.WriteLine(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                string response = send_id(&amp;quot;add_popup&amp;quot;, id_calldetails, Int32.Parse((ChannelName[(ChannelName.Length - 1)]).ToString()), PhoneFrom);&lt;br /&gt;
                                                Console.WriteLine(response);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
&lt;br /&gt;
                                }&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                /*if (current_FileName == &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;dozvon end&amp;quot;);&lt;br /&gt;
                                }*/&lt;br /&gt;
/*                                if (current_FileName == FileName &amp;amp;&amp;amp; priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName+ &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    priznak_incomin_ring = 0;&lt;br /&gt;
                                }*/&lt;br /&gt;
                            }&lt;br /&gt;
                            if (IsLineActive == false)&lt;br /&gt;
                            {&lt;br /&gt;
                                if (current_FileName != &amp;quot;&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    if (priznak_incomin_ring == 2) TypeCall = 2;    // out call&lt;br /&gt;
                                    if (priznak_incomin_ring == 0) TypeCall = 1; // in call&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 2, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot;Call end&amp;quot;);&lt;br /&gt;
                                    current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    TypeCall_str = &amp;quot; Ожидание вызова ...&amp;quot;;&lt;br /&gt;
                                    glo_status1 =  TypeCall_str;&lt;br /&gt;
                                }&lt;br /&gt;
                                continue;&lt;br /&gt;
                            }&lt;br /&gt;
                            if (priznak_incomin_ring == 2 &amp;amp; TypeCall != 2)&lt;br /&gt;
                            {&lt;br /&gt;
                                //сюда вставить продолжительность звонка&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                                FileName = ChannelInfo.ToString();&lt;br /&gt;
                                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &#039;c&#039;, &amp;quot;&amp;quot;, ring_count, FileName, TypeCall, id_calldetails,&amp;quot;&amp;quot;);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;FileName=&amp;quot; + FileName + &amp;quot; ring_count=&amp;quot; + ring_count + &amp;quot; priznak_incomin_ring = 2;&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
&lt;br /&gt;
  /*object Msg;&lt;br /&gt;
                            var eee = SPRecordChannel.PeekMessage(out Msg);&lt;br /&gt;
                            byte[] bytes = (byte[])Msg;&lt;br /&gt;
                            string str = System.Text.Encoding.ASCII.GetString(bytes);&lt;br /&gt;
                            export_to_file(FileLogFileName, str);*/&lt;br /&gt;
                            SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);&lt;br /&gt;
                            FileName = ChannelInfo.ToString();&lt;br /&gt;
                            if (current_FileName != FileName)&lt;br /&gt;
                            {&lt;br /&gt;
                                current_FileName = FileName;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);&lt;br /&gt;
                                TimeLine = ChannelInfo.ToString();&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);&lt;br /&gt;
                                StartTime = (DateTime)ChannelInfo;&lt;br /&gt;
                                SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);&lt;br /&gt;
                                TypeCall = (int)ChannelInfo;&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);&lt;br /&gt;
                                //export_to_file(FileLogFileName, ChannelInfo.ToString());&lt;br /&gt;
                                if (priznak_incomin_ring == 0)&lt;br /&gt;
                                {&lt;br /&gt;
                                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONETO, out ChannelInfo);&lt;br /&gt;
                                    //PhoneFrom = ChannelInfo.ToString();&lt;br /&gt;
                                    List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &amp;quot;&amp;quot;, ChannelName[(ChannelName.Length - 1)], PhoneFrom, 0, FileName, 2, 0,&amp;quot;&amp;quot;);&lt;br /&gt;
                                    Console.WriteLine(&amp;quot;arr.Count=&amp;quot; + arr.Count);&lt;br /&gt;
                                    StringBuilder builder = new StringBuilder();&lt;br /&gt;
                                    if (arr.Count == 0)&lt;br /&gt;
                                    {&lt;br /&gt;
                                        MessageBox.Show(&amp;quot;ошибка получения max(id) из таблицы calldetails&amp;quot;);&lt;br /&gt;
                                    }&lt;br /&gt;
                                    else&lt;br /&gt;
                                    {&lt;br /&gt;
                                        for (int i = 0; i &amp;lt;= arr.Count - 1; i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                            if (arr[i][0] == &amp;quot;0&amp;quot; | arr[i][0] == &amp;quot;Error&amp;quot;)&lt;br /&gt;
                                            {&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                            else&lt;br /&gt;
                                            {&lt;br /&gt;
                                                id_calldetails = Int32.Parse(arr[i][0]);&lt;br /&gt;
                                                Console.WriteLine(&amp;quot;id=&amp;quot; + arr[i][0] + &amp;quot; StartTime=&amp;quot; + &amp;quot; &amp;quot; + StartTime + &amp;quot;ChannelName[(ChannelName.Length - 1)]=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;SubPhoneFrom=&amp;quot; + SubPhoneFrom);&lt;br /&gt;
                                                break;&lt;br /&gt;
                                            }&lt;br /&gt;
                                        }&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                                System.Threading.Thread.Sleep(100); // пауза 0.1 сек.&lt;br /&gt;
                                //Console.WriteLine(&amp;quot;ChannelName1=&amp;quot; + ChannelName + &amp;quot;, StartTime= &amp;quot; + StartTime + &amp;quot;, TimeLine=&amp;quot; + TimeLine + &amp;quot;, FileName=&amp;quot; + FileName + &amp;quot;, TypeCall= &amp;quot; + TypeCall + &amp;quot;, PhoneFrom=&amp;quot; + PhoneFrom + &amp;quot;, SubPhoneFrom=&amp;quot; + SubPhoneFrom + &amp;quot;ChannelName=&amp;quot; + ChannelName[(ChannelName.Length - 1)] + &amp;quot;ring_count=&amp;quot; + ring_count);&lt;br /&gt;
                                if (priznak_incomin_ring == 2)&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;входящий, номер: &amp;quot; + PhoneFrom + &amp;quot;, &amp;quot; + SubPhoneFrom;&lt;br /&gt;
                                }&lt;br /&gt;
                                else&lt;br /&gt;
                                {&lt;br /&gt;
                                    TypeCall_str = &amp;quot;исходящий&amp;quot;;&lt;br /&gt;
                                }&lt;br /&gt;
                                glo_status1 = &amp;quot;Канал &amp;quot; + ChannelName + &amp;quot; , звонок &amp;quot; + TypeCall_str;&lt;br /&gt;
                            }&lt;br /&gt;
                            else&lt;br /&gt;
                            {&lt;br /&gt;
                                priznak_incomin_ring = 0;&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            current_FileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                            priznak_incomin_ring = 0;&lt;br /&gt;
                            ring_count = 0;&lt;br /&gt;
                            export_to_file(FileLogFileName, FileName + &amp;quot; &amp;quot; + TimeLine + &amp;quot; &amp;quot; + PhoneFrom);&lt;br /&gt;
                            //continue;&lt;br /&gt;
                        }&lt;br /&gt;
                     //export_to_file(FileLogFileName, WaitMessage.ToString());&lt;br /&gt;
                    //SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);&lt;br /&gt;
                    //Console.WriteLine(&amp;quot;Идет разговор ... &amp;quot;);&lt;br /&gt;
                    //Console.WriteLine(WaitMessage);&lt;br /&gt;
                    System.Threading.Thread.Sleep(300); // пауза 0.1 сек.&lt;br /&gt;
                //}&lt;br /&gt;
            }&lt;br /&gt;
            SPRecordChannel.Disconnect();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static string CreateMD5(string input)&lt;br /&gt;
        {&lt;br /&gt;
            // Use input string to calculate MD5 hash&lt;br /&gt;
            using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())&lt;br /&gt;
            {&lt;br /&gt;
                byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);&lt;br /&gt;
                byte[] hashBytes = md5.ComputeHash(inputBytes);&lt;br /&gt;
&lt;br /&gt;
                // Convert the byte array to hexadecimal string&lt;br /&gt;
                StringBuilder sb = new StringBuilder();&lt;br /&gt;
                for (int i = 0; i &amp;lt; hashBytes.Length; i++)&lt;br /&gt;
                {&lt;br /&gt;
                    sb.Append(hashBytes[i].ToString(&amp;quot;X2&amp;quot;));&lt;br /&gt;
                }&lt;br /&gt;
                return sb.ToString();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public class Request_type&lt;br /&gt;
        {&lt;br /&gt;
            public string type { get; set; }&lt;br /&gt;
            public int unicod { get; set; }&lt;br /&gt;
            public int chanel { get; set; }&lt;br /&gt;
            public string phone { get; set; }&lt;br /&gt;
&lt;br /&gt;
            // public Dictionary&amp;lt;string, string&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class Response_type&lt;br /&gt;
        {&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; error { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public Dictionary&amp;lt;string, Object&amp;gt; data { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
        [Serializable]&lt;br /&gt;
        public class ErrorList&lt;br /&gt;
            {&lt;br /&gt;
                public string id { get; set; }&lt;br /&gt;
                public string text { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
            [Serializable]&lt;br /&gt;
            public class DataList&lt;br /&gt;
            {&lt;br /&gt;
                public string status { get; set; }&lt;br /&gt;
                public string unicod { get; set; }&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
        public static string send_id(string type, int unicod, int chanel, string phone)&lt;br /&gt;
        {&lt;br /&gt;
            // ^id_documment=_iemk_exchenge_log.id&lt;br /&gt;
            string response = &amp;quot;&amp;quot;;&lt;br /&gt;
            //            var SourceFile = &amp;quot;&amp;quot;;&lt;br /&gt;
            //string urlString = &amp;quot;http://smp.volmed.org.rus/json/server.php&amp;quot;;&lt;br /&gt;
            var Host = Form1.Service_address;&lt;br /&gt;
            string urlString = &amp;quot;http://&amp;quot; + Host;&lt;br /&gt;
            var SoapAction = &amp;quot;&amp;quot;;&lt;br /&gt;
            string id_service = Form1.Service_id ;&lt;br /&gt;
            string passwrd = id_service + Form1.Service_pass;&lt;br /&gt;
            passwrd = CreateMD5(passwrd);&lt;br /&gt;
            urlString = urlString + &amp;quot;?id_service=&amp;quot;+id_service+&amp;quot;&amp;amp;auth_key=&amp;quot; + passwrd.ToLower();&lt;br /&gt;
            //string[] MyArray = { type, unicod.ToString(), chanel.ToString(), phone };&lt;br /&gt;
            Request_type MyArray = new Request_type();&lt;br /&gt;
                MyArray.type=type;&lt;br /&gt;
                MyArray.unicod = unicod;&lt;br /&gt;
                MyArray.chanel = chanel;&lt;br /&gt;
                if (phone == null) MyArray.phone = &amp;quot;000000&amp;quot;; else MyArray.phone = phone;&lt;br /&gt;
            var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            string json = jsonSerializer.Serialize(MyArray);&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;json=&amp;quot; + json);&lt;br /&gt;
            var response1 = XmlHttpRequest(json, urlString);&lt;br /&gt;
            // запись в файл&lt;br /&gt;
            if (Int32.Parse(response1.id)&amp;gt;0)&lt;br /&gt;
            {&lt;br /&gt;
                List&amp;lt;List&amp;lt;string&amp;gt;&amp;gt; arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 3, &amp;quot;&amp;quot;, DateTime.Now.ToString(&amp;quot;yyyy-MM-dd&amp;quot;) + &amp;quot; &amp;quot; + DateTime.Now.ToString(&amp;quot;HH:mm:ss&amp;quot;), &#039;c&#039;, &amp;quot;&amp;quot;, 1, &amp;quot;&amp;quot;, 0, Int32.Parse(response1.id), response1.text);&lt;br /&gt;
            }&lt;br /&gt;
            export_to_file(&amp;quot;12&amp;quot;, &amp;quot;response error id =&amp;quot; + response1.id + &amp;quot; response text =&amp;quot; + response1.text);&lt;br /&gt;
            string request = &amp;quot;&amp;quot;;&lt;br /&gt;
            var jsonDeSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
            Response_type a = jsonDeSerializer.Deserialize&amp;lt;Response_type&amp;gt;(response);&lt;br /&gt;
            ErrorList a1 = jsonDeSerializer.Deserialize&amp;lt;ErrorList&amp;gt;(response);&lt;br /&gt;
            var DataList = jsonDeSerializer.Deserialize&amp;lt;DataList&amp;gt;(response);&lt;br /&gt;
            Console.WriteLine(&amp;quot;a =&amp;quot; + a);&lt;br /&gt;
            return response;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public static ErrorList XmlHttpRequest(string Content, string urlString)&lt;br /&gt;
        {&lt;br /&gt;
            var ContentType = &amp;quot;application/json;&amp;quot;;&lt;br /&gt;
            // param_return=1 полный ответ, 2 урезаный&lt;br /&gt;
                /* Get example *//*&lt;br /&gt;
&lt;br /&gt;
                byte[] bytes;&lt;br /&gt;
                bytes = System.Text.Encoding.UTF8.GetBytes(get_s);&lt;br /&gt;
&lt;br /&gt;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(get_s);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
&lt;br /&gt;
                using (HttpWebResponse response1 = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response1.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }&lt;br /&gt;
                 */&lt;br /&gt;
                /* Post */&lt;br /&gt;
&lt;br /&gt;
            byte[] dataBytes = Encoding.UTF8.GetBytes(Content);&lt;br /&gt;
&lt;br /&gt;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlString);&lt;br /&gt;
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;&lt;br /&gt;
                request.ContentLength = dataBytes.Length;&lt;br /&gt;
                request.ContentType = ContentType;&lt;br /&gt;
                request.Method = &amp;quot;POST&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                using (Stream requestBody = request.GetRequestStream())&lt;br /&gt;
                {&lt;br /&gt;
                    requestBody.Write(dataBytes, 0, dataBytes.Length);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                /*using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                using (Stream stream = response.GetResponseStream())&lt;br /&gt;
                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;
                {&lt;br /&gt;
                    return reader.ReadToEnd();&lt;br /&gt;
                }*/&lt;br /&gt;
                using (var twitpicResponse = (HttpWebResponse)request.GetResponse())&lt;br /&gt;
                {&lt;br /&gt;
&lt;br /&gt;
                    using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))&lt;br /&gt;
                    {&lt;br /&gt;
                        JavaScriptSerializer js = new JavaScriptSerializer();&lt;br /&gt;
                        var objText = reader.ReadToEnd();&lt;br /&gt;
                        //var json44 = JsonConvert.SerializeObject(objText, Formatting.Indented);&lt;br /&gt;
                        var myojb = js.DeserializeObject(objText);&lt;br /&gt;
&lt;br /&gt;
                        var jsonData = (Dictionary&amp;lt;string, object&amp;gt;)js.DeserializeObject(objText);&lt;br /&gt;
                        ErrorList ErrorValue_class = new ErrorList();&lt;br /&gt;
                        foreach (KeyValuePair&amp;lt;string, object&amp;gt; keyValue in jsonData)&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(keyValue.Key + &amp;quot; - &amp;quot; + keyValue.Value);&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;error&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                string ErrorValue_string = js.Serialize(keyValue.Value);&lt;br /&gt;
                                if (ErrorValue_string == &amp;quot;[]&amp;quot;)&lt;br /&gt;
                                {&lt;br /&gt;
                                    ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                } &lt;br /&gt;
                                ErrorValue_class = js.Deserialize&amp;lt;ErrorList&amp;gt;(ErrorValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;ErrorValue_class=&amp;quot; + ErrorValue_class.id + &amp;quot;ErrorValue_class.text=&amp;quot; + ErrorValue_class.text);&lt;br /&gt;
                            }&lt;br /&gt;
                            if (keyValue.Key == &amp;quot;data&amp;quot;)&lt;br /&gt;
                            {&lt;br /&gt;
                                var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;
                                string dataValue_string = jsonSerializer.Serialize(keyValue.Value);&lt;br /&gt;
                                if (dataValue_string == &amp;quot;[]&amp;quot;) break;&lt;br /&gt;
                                DataList Data_class = js.Deserialize&amp;lt;DataList&amp;gt;(dataValue_string);&lt;br /&gt;
                                Console.WriteLine(&amp;quot;myojb2212.status=&amp;quot; + Data_class.status + &amp;quot;myojb2212.value=&amp;quot; + Data_class.unicod);&lt;br /&gt;
                                ErrorValue_class.id = &amp;quot;0&amp;quot;; ErrorValue_class.text = &amp;quot;&amp;quot;;&lt;br /&gt;
                                return ErrorValue_class;&lt;br /&gt;
                            }                              &lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
/*                    Object obj;&lt;br /&gt;
                    bool b = jsonData.TryGetValue(&amp;quot;error&amp;quot;, out obj);&lt;br /&gt;
                        var splashInfo = JsonConvert.DeserializeObject&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        ErrorList myojb1 = js.Deserialize&amp;lt;ErrorList&amp;gt;(objText);&lt;br /&gt;
                        DataList myojb2 = js.Deserialize&amp;lt;DataList&amp;gt;(objText);&lt;br /&gt;
                        return myojb1;*/&lt;br /&gt;
                        return ErrorValue_class;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        public static void export_to_file(string filename, string text)&lt;br /&gt;
        {&lt;br /&gt;
            FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);&lt;br /&gt;
            StreamWriter sw = new StreamWriter(fs);&lt;br /&gt;
            Console.WriteLine(text);&lt;br /&gt;
            sw.WriteLine(text);&lt;br /&gt;
            sw.Close();&lt;br /&gt;
        }&lt;br /&gt;
/*        public static void Add()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;1&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(1000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static void Add1()&lt;br /&gt;
        {&lt;br /&gt;
            while (1 == 1)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&#039;2&#039;);&lt;br /&gt;
                System.Threading.Thread.Sleep(3000); // пауза 0.1 сек.&lt;br /&gt;
            }&lt;br /&gt;
        }*/&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=C_sharp&amp;diff=4166</id>
		<title>C sharp</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=C_sharp&amp;diff=4166"/>
		<updated>2018-02-20T09:50:54Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Получение хэша от строки по гост 94]]&lt;br /&gt;
#[[Подпись ИЭМК с помощью Crypto Pro]]&lt;br /&gt;
#[[Подпись ИЭМК с помощью VipNet CSP]]&lt;br /&gt;
#[[Каноникализация (приведение XML к канонической форме)]]&lt;br /&gt;
#[[Сброс триала CryptoPro.Net]]&lt;br /&gt;
#[[Sp Rec]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3950</id>
		<title>Подпись ИЭМК с помощью VipNet CSP</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3950"/>
		<updated>2016-10-31T20:38:24Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на текущую дату.&lt;br /&gt;
&amp;lt;pre&amp;gt;X509Certificate2 CertItog = find_certificate_();&lt;br /&gt;
            Console.WriteLine(CertItog.SignatureAlgorithm.Value);&lt;br /&gt;
            Console.WriteLine(CertItog.GetPrivateKeyInfo().KeyContainerName);&lt;br /&gt;
            Console.WriteLine(CertItog.GetPrivateKeyInfo().ProviderName);&lt;br /&gt;
            Console.WriteLine(CertItog.GetPrivateKeyInfo().ProviderType);&lt;br /&gt;
            Console.WriteLine(CertItog.GetPrivateKeyInfo());&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        public static X509Certificate2 find_certificate_()&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            X509Store store = new X509Store(&amp;quot;MY&amp;quot;, StoreLocation.CurrentUser);&lt;br /&gt;
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);&lt;br /&gt;
            X509Certificate2 cert = new X509Certificate2();&lt;br /&gt;
            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;&lt;br /&gt;
            X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);&lt;br /&gt;
            string str_SN = &amp;quot;&amp;quot;;&lt;br /&gt;
            foreach (X509Certificate2 x509 in fcollection)&lt;br /&gt;
            {&lt;br /&gt;
                try&lt;br /&gt;
                {&lt;br /&gt;
                    if (x509.Subject.ToUpper().Contains(&amp;quot;SNILS&amp;quot;) || x509.Subject.ToUpper().Contains(&amp;quot;СНИЛС&amp;quot;))&lt;br /&gt;
                    {&lt;br /&gt;
&lt;br /&gt;
                        str_SN = x509.Subject.Substring(x509.Subject.IndexOf(&amp;quot;SNILS&amp;quot;) + 6, 11);&lt;br /&gt;
                        int n;&lt;br /&gt;
                        if (!int.TryParse(str_SN.Substring(0, 10), out n))&lt;br /&gt;
                        {&lt;br /&gt;
                            str_SN = x509.Subject.Substring(x509.Subject.ToUpper().IndexOf(&amp;quot;СНИЛС&amp;quot;) + 6, 11);&lt;br /&gt;
                            if (!int.TryParse(str_SN.Substring(0, 10), out n))&lt;br /&gt;
                            {&lt;br /&gt;
                                continue;&lt;br /&gt;
                                //                                System.Windows.Forms.MessageBox.Show(&amp;quot;Снилс в сертификате не найден или пустой&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        if (String.CompareOrdinal(str_SN, &amp;quot;NNNNNNNNNNNNN&amp;quot;) == 0)&lt;br /&gt;
                        {&lt;br /&gt;
                            cert = x509;&lt;br /&gt;
                            //                            Console.WriteLine(cert.Subject);&lt;br /&gt;
                            Console.WriteLine(str_SN);&lt;br /&gt;
//                            Console.ReadKey();&lt;br /&gt;
                            break;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    x509.Reset();&lt;br /&gt;
                }&lt;br /&gt;
                catch (CryptographicException)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Information could not be written out for this certificate.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            store.Close();&lt;br /&gt;
            return cert;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Далее. Для подписи требуется библиотека GostCryptography (https://github.com/AlexMAS/GostCryptography). Заливаем через nuget, подключаем.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using GostCryptography;&lt;br /&gt;
using GostCryptography.Cryptography;&lt;br /&gt;
using GostCryptography.Xml;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для СМЭВ пользуем доп. класс&lt;br /&gt;
Добавляем константы&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private const string WsSecurityExtNamespace = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&amp;quot;;&lt;br /&gt;
        private const string WsSecurityUtilityNamespace = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private static XmlElement GetSmevIdElement(XmlDocument document, string idValue)&lt;br /&gt;
        {&lt;br /&gt;
                var namespaceManager = new XmlNamespaceManager(document.NameTable);&lt;br /&gt;
                namespaceManager.AddNamespace(&amp;quot;wsu&amp;quot;, WsSecurityUtilityNamespace);&lt;br /&gt;
                return document.SelectSingleNode(&amp;quot;//*[@wsu:Id=&#039;&amp;quot; + idValue + &amp;quot;&#039;]&amp;quot;, namespaceManager) as XmlElement;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И, собственно алгоритм подписи/ На выходе формируется отдельный файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private static XmlDocument SignSmevRequestVip(string FileName, string SignedFileName, X509Certificate2 signingCertificate)&lt;br /&gt;
        {&lt;br /&gt;
            XmlDocument smevRequest = new XmlDocument();&lt;br /&gt;
            smevRequest.PreserveWhitespace = true;&lt;br /&gt;
            smevRequest.Load(new XmlTextReader(FileName));&lt;br /&gt;
&lt;br /&gt;
            // Создание подписчика XML-документа&lt;br /&gt;
            var signedXml = new GostSignedXml(smevRequest) { GetIdElementHandler = GetSmevIdElement };&lt;br /&gt;
&lt;br /&gt;
            // Установка ключа для создания подписи&lt;br /&gt;
            signedXml.SetSigningCertificate(signingCertificate);&lt;br /&gt;
//            signedXml.SigningKey = signingCertificate.PrivateKey;&lt;br /&gt;
//            var SigningKey = signingCertificate.GetPrivateKeyAlgorithm();&lt;br /&gt;
            signedXml.SigningKey = signingCertificate.GetPrivateKeyAlgorithm();&lt;br /&gt;
//            var gostFormatter = new GostSignatureFormatter(signingCertificate.GetPrivateKeyAlgorithm()); &lt;br /&gt;
//            Console.WriteLine(signatureXml1.InnerText); Console.ReadKey();&lt;br /&gt;
            // Ссылка на узел, который нужно подписать, с указанием алгоритма хэширования ГОСТ Р 34.11-94 (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            var dataReference = new Reference { Uri = &amp;quot;#BODY&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            // Метод преобразования, применяемый к данным перед их подписью (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            var dataTransform = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReference.AddTransform(dataTransform);&lt;br /&gt;
            // Установка ссылки на узел&lt;br /&gt;
            signedXml.AddReference(dataReference);&lt;br /&gt;
//reference #wsa300&lt;br /&gt;
            var dataReferenceWSA300 = new Reference { Uri = &amp;quot;#WSA-300&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA300 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA300.AddTransform(dataTransformWSA300);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA300);&lt;br /&gt;
//reference #WSA-301&lt;br /&gt;
            var dataReferenceWSA301 = new Reference { Uri = &amp;quot;#WSA-301&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA301 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA301.AddTransform(dataTransformWSA301);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA301);&lt;br /&gt;
//reference #WSA-302&lt;br /&gt;
            var dataReferenceWSA302 = new Reference { Uri = &amp;quot;#WSA-302&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA302 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA302.AddTransform(dataTransformWSA302);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA302);&lt;br /&gt;
//reference #WSA-303&lt;br /&gt;
            var dataReferenceWSA303 = new Reference { Uri = &amp;quot;#WSA-303&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA303 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA303.AddTransform(dataTransformWSA303);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA303);&lt;br /&gt;
//reference #TRHEAD&lt;br /&gt;
            var dataReferenceTRHEAD = new Reference { Uri = &amp;quot;#TRHEAD&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformTRHEAD = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceTRHEAD.AddTransform(dataTransformTRHEAD);&lt;br /&gt;
            signedXml.AddReference(dataReferenceTRHEAD);&lt;br /&gt;
//&lt;br /&gt;
            smevRequest.GetElementsByTagName(&amp;quot;wsse:BinarySecurityToken&amp;quot;)[0].InnerText = Convert.ToBase64String(signingCertificate.RawData);&lt;br /&gt;
&lt;br /&gt;
//reference #CertId&lt;br /&gt;
            var dataReferenceCertId = new Reference { Uri = &amp;quot;#CertId&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformCertId = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceCertId.AddTransform(dataTransformCertId);&lt;br /&gt;
            signedXml.AddReference(dataReferenceCertId);&lt;br /&gt;
&lt;br /&gt;
            var keyInfo = new KeyInfo();&lt;br /&gt;
            keyInfo.AddClause(new KeyInfoX509Data(signingCertificate));&lt;br /&gt;
            signedXml.KeyInfo = keyInfo;&lt;br /&gt;
&lt;br /&gt;
            // Установка алгоритма нормализации узла SignedInfo (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;&lt;br /&gt;
&lt;br /&gt;
            // Установка алгоритма подписи ГОСТ Р 34.10-2001 (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            signedXml.SignedInfo.SignatureMethod = GostSignedXml.XmlDsigGost3410ObsoleteUrl;&lt;br /&gt;
&lt;br /&gt;
            // Вычисление подписи&lt;br /&gt;
            &lt;br /&gt;
            signedXml.ComputeSignature();&lt;br /&gt;
&lt;br /&gt;
            // Получение XML-представления подписи&lt;br /&gt;
            var signatureXml = signedXml.GetXml();&lt;br /&gt;
//            Console.WriteLine(signatureXml.GetElementsByTagName(&amp;quot;SignatureValue&amp;quot;)[0].InnerText); Console.ReadKey();&lt;br /&gt;
            // Добавление подписи в исходный документ&lt;br /&gt;
&lt;br /&gt;
            smevRequest.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(smevRequest.ImportNode(signatureXml.GetElementsByTagName(&amp;quot;SignatureValue&amp;quot;)[0], true));&lt;br /&gt;
            smevRequest.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(smevRequest.ImportNode(signatureXml.GetElementsByTagName(&amp;quot;SignedInfo&amp;quot;)[0], true));&lt;br /&gt;
&lt;br /&gt;
            using (XmlTextWriter xmltw = new XmlTextWriter(SignedFileName,&lt;br /&gt;
                new UTF8Encoding(false)))&lt;br /&gt;
            {&lt;br /&gt;
                smevRequest.WriteTo(xmltw);&lt;br /&gt;
            }&lt;br /&gt;
            return smevRequest;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Верификация подписи&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private static bool VerifySmevRequestSignatureVip(string FileName)&lt;br /&gt;
        {&lt;br /&gt;
            XmlDocument signedSmevRequest = new XmlDocument();&lt;br /&gt;
            signedSmevRequest.PreserveWhitespace = true;&lt;br /&gt;
            signedSmevRequest.Load(new XmlTextReader(FileName));&lt;br /&gt;
&lt;br /&gt;
            // Создание подписчика XML-документа&lt;br /&gt;
            var signedXml = new GostSignedXml(signedSmevRequest) { GetIdElementHandler = GetSmevIdElement };&lt;br /&gt;
&lt;br /&gt;
            // Поиск узла с подписью&lt;br /&gt;
            var nodeList = signedSmevRequest.GetElementsByTagName(&amp;quot;Signature&amp;quot;, SignedXml.XmlDsigNamespaceUrl);&lt;br /&gt;
&lt;br /&gt;
            // Загрузка найденной подписи&lt;br /&gt;
            signedXml.LoadXml((XmlElement)nodeList[0]);&lt;br /&gt;
&lt;br /&gt;
            // Поиск ссылки на BinarySecurityToken&lt;br /&gt;
            var references = signedXml.KeyInfo.GetXml().GetElementsByTagName(&amp;quot;Reference&amp;quot;, WsSecurityExtNamespace);&lt;br /&gt;
&lt;br /&gt;
            if (references.Count &amp;gt; 0)&lt;br /&gt;
            {&lt;br /&gt;
                // Определение ссылки на сертификат (ссылка на узел документа)&lt;br /&gt;
                var binaryTokenReference = ((XmlElement)references[0]).GetAttribute(&amp;quot;URI&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                if (!String.IsNullOrEmpty(binaryTokenReference) &amp;amp;&amp;amp; binaryTokenReference[0] == &#039;#&#039;)&lt;br /&gt;
                {&lt;br /&gt;
                    // Поиск элемента с закодированным в Base64 сертификатом&lt;br /&gt;
                    var binaryTokenElement = signedXml.GetIdElement(signedSmevRequest, binaryTokenReference.Substring(1));&lt;br /&gt;
&lt;br /&gt;
                    if (binaryTokenElement != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        // Загрузка сертификата, который был использован для подписи&lt;br /&gt;
                        var signingCertificate = new X509Certificate2(Convert.FromBase64String(binaryTokenElement.InnerText));&lt;br /&gt;
&lt;br /&gt;
                        // Проверка подписи&lt;br /&gt;
                        bool result = signedXml.CheckSignature(signingCertificate.GetPublicKeyAlgorithm());&lt;br /&gt;
                        if (result)&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(&amp;quot;Подпись №{0} верна.&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(&amp;quot;Подпись №{0} не верна.&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        return result;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вызов класса&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SignSmevRequestVip(args[1], args[2], CertItog);&lt;br /&gt;
VerifySmevRequestSignatureVip(args[2]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3942</id>
		<title>Подпись ИЭМК с помощью VipNet CSP</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3942"/>
		<updated>2016-10-20T11:44:16Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на текущую дату.&lt;br /&gt;
&amp;lt;pre&amp;gt;X509Certificate2 CertItog = find_certificate_();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        public static X509Certificate2 find_certificate_()&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            X509Store store = new X509Store(&amp;quot;MY&amp;quot;, StoreLocation.CurrentUser);&lt;br /&gt;
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);&lt;br /&gt;
            X509Certificate2 cert = new X509Certificate2();&lt;br /&gt;
            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;&lt;br /&gt;
            X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);&lt;br /&gt;
            string str_SN = &amp;quot;&amp;quot;;&lt;br /&gt;
            foreach (X509Certificate2 x509 in fcollection)&lt;br /&gt;
            {&lt;br /&gt;
                try&lt;br /&gt;
                {&lt;br /&gt;
                    if (x509.Subject.ToUpper().Contains(&amp;quot;SNILS&amp;quot;) || x509.Subject.ToUpper().Contains(&amp;quot;СНИЛС&amp;quot;))&lt;br /&gt;
                    {&lt;br /&gt;
&lt;br /&gt;
                        str_SN = x509.Subject.Substring(x509.Subject.IndexOf(&amp;quot;SNILS&amp;quot;) + 6, 11);&lt;br /&gt;
                        int n;&lt;br /&gt;
                        if (!int.TryParse(str_SN.Substring(0, 10), out n))&lt;br /&gt;
                        {&lt;br /&gt;
                            str_SN = x509.Subject.Substring(x509.Subject.ToUpper().IndexOf(&amp;quot;СНИЛС&amp;quot;) + 6, 11);&lt;br /&gt;
                            if (!int.TryParse(str_SN.Substring(0, 10), out n))&lt;br /&gt;
                            {&lt;br /&gt;
                                continue;&lt;br /&gt;
                                //                                System.Windows.Forms.MessageBox.Show(&amp;quot;Снилс в сертификате не найден или пустой&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        if (String.CompareOrdinal(str_SN, &amp;quot;NNNNNNNNNNNNN&amp;quot;) == 0)&lt;br /&gt;
                        {&lt;br /&gt;
                            cert = x509;&lt;br /&gt;
                            //                            Console.WriteLine(cert.Subject);&lt;br /&gt;
                            Console.WriteLine(str_SN);&lt;br /&gt;
//                            Console.ReadKey();&lt;br /&gt;
                            break;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    x509.Reset();&lt;br /&gt;
                }&lt;br /&gt;
                catch (CryptographicException)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Information could not be written out for this certificate.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            store.Close();&lt;br /&gt;
            return cert;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Далее. Для подписи требуется библиотека GostCryptography (https://github.com/AlexMAS/GostCryptography). Заливаем через nuget, подключаем.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using GostCryptography;&lt;br /&gt;
using GostCryptography.Cryptography;&lt;br /&gt;
using GostCryptography.Xml;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для СМЭВ пользуем доп. класс&lt;br /&gt;
Добавляем константы&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private const string WsSecurityExtNamespace = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&amp;quot;;&lt;br /&gt;
        private const string WsSecurityUtilityNamespace = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private static XmlElement GetSmevIdElement(XmlDocument document, string idValue)&lt;br /&gt;
        {&lt;br /&gt;
                var namespaceManager = new XmlNamespaceManager(document.NameTable);&lt;br /&gt;
                namespaceManager.AddNamespace(&amp;quot;wsu&amp;quot;, WsSecurityUtilityNamespace);&lt;br /&gt;
                return document.SelectSingleNode(&amp;quot;//*[@wsu:Id=&#039;&amp;quot; + idValue + &amp;quot;&#039;]&amp;quot;, namespaceManager) as XmlElement;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И, собственно алгоритм подписи/ На выходе формируется отдельный файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private static XmlDocument SignSmevRequestVip(string FileName, string SignedFileName, X509Certificate2 signingCertificate)&lt;br /&gt;
        {&lt;br /&gt;
            XmlDocument smevRequest = new XmlDocument();&lt;br /&gt;
            smevRequest.PreserveWhitespace = true;&lt;br /&gt;
            smevRequest.Load(new XmlTextReader(FileName));&lt;br /&gt;
&lt;br /&gt;
            // Создание подписчика XML-документа&lt;br /&gt;
            var signedXml = new GostSignedXml(smevRequest) { GetIdElementHandler = GetSmevIdElement };&lt;br /&gt;
&lt;br /&gt;
            // Установка ключа для создания подписи&lt;br /&gt;
            signedXml.SetSigningCertificate(signingCertificate);&lt;br /&gt;
          &lt;br /&gt;
            // Ссылка на узел, который нужно подписать, с указанием алгоритма хэширования ГОСТ Р 34.11-94 (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            var dataReference = new Reference { Uri = &amp;quot;#BODY&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            // Метод преобразования, применяемый к данным перед их подписью (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            var dataTransform = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReference.AddTransform(dataTransform);&lt;br /&gt;
            // Установка ссылки на узел&lt;br /&gt;
            signedXml.AddReference(dataReference);&lt;br /&gt;
//reference #wsa300&lt;br /&gt;
            var dataReferenceWSA300 = new Reference { Uri = &amp;quot;#WSA-300&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA300 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA300.AddTransform(dataTransformWSA300);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA300);&lt;br /&gt;
//reference #WSA-301&lt;br /&gt;
            var dataReferenceWSA301 = new Reference { Uri = &amp;quot;#WSA-301&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA301 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA301.AddTransform(dataTransformWSA301);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA301);&lt;br /&gt;
//reference #WSA-302&lt;br /&gt;
            var dataReferenceWSA302 = new Reference { Uri = &amp;quot;#WSA-302&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA302 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA302.AddTransform(dataTransformWSA302);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA302);&lt;br /&gt;
//reference #WSA-303&lt;br /&gt;
            var dataReferenceWSA303 = new Reference { Uri = &amp;quot;#WSA-303&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA303 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA303.AddTransform(dataTransformWSA303);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA303);&lt;br /&gt;
//reference #TRHEAD&lt;br /&gt;
            var dataReferenceTRHEAD = new Reference { Uri = &amp;quot;#TRHEAD&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformTRHEAD = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceTRHEAD.AddTransform(dataTransformTRHEAD);&lt;br /&gt;
            signedXml.AddReference(dataReferenceTRHEAD);&lt;br /&gt;
//reference #CertId&lt;br /&gt;
            var dataReferenceCertId = new Reference { Uri = &amp;quot;#CertId&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformCertId = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceCertId.AddTransform(dataTransformCertId);&lt;br /&gt;
            signedXml.AddReference(dataReferenceCertId);&lt;br /&gt;
&lt;br /&gt;
            // Установка алгоритма нормализации узла SignedInfo (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;&lt;br /&gt;
&lt;br /&gt;
            // Установка алгоритма подписи ГОСТ Р 34.10-2001 (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            signedXml.SignedInfo.SignatureMethod = GostSignedXml.XmlDsigGost3410ObsoleteUrl;&lt;br /&gt;
&lt;br /&gt;
            // Вычисление подписи&lt;br /&gt;
            signedXml.ComputeSignature();&lt;br /&gt;
&lt;br /&gt;
            // Получение XML-представления подписи&lt;br /&gt;
            var signatureXml = signedXml.GetXml();&lt;br /&gt;
&lt;br /&gt;
            // Добавление подписи в исходный документ&lt;br /&gt;
            smevRequest.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(smevRequest.ImportNode(signatureXml.GetElementsByTagName(&amp;quot;SignatureValue&amp;quot;)[0], true));&lt;br /&gt;
            smevRequest.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(smevRequest.ImportNode(signatureXml.GetElementsByTagName(&amp;quot;SignedInfo&amp;quot;)[0], true));&lt;br /&gt;
            smevRequest.GetElementsByTagName(&amp;quot;wsse:BinarySecurityToken&amp;quot;)[0].InnerText = Convert.ToBase64String(signingCertificate.RawData);&lt;br /&gt;
&lt;br /&gt;
            using (XmlTextWriter xmltw = new XmlTextWriter(SignedFileName,&lt;br /&gt;
                new UTF8Encoding(false)))&lt;br /&gt;
            {&lt;br /&gt;
                smevRequest.WriteTo(xmltw);&lt;br /&gt;
            }&lt;br /&gt;
            return smevRequest;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вызов класса&lt;br /&gt;
&amp;lt;pre&amp;gt;SignSmevRequestVip(args[0], args[1], CertItog);&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3941</id>
		<title>Подпись ИЭМК с помощью VipNet CSP</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3941"/>
		<updated>2016-10-20T11:37:40Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на текущую дату.&lt;br /&gt;
&amp;lt;pre&amp;gt;X509Certificate2 CertItog = find_certificate_();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        public static X509Certificate2 find_certificate_()&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            X509Store store = new X509Store(&amp;quot;MY&amp;quot;, StoreLocation.CurrentUser);&lt;br /&gt;
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);&lt;br /&gt;
            X509Certificate2 cert = new X509Certificate2();&lt;br /&gt;
            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;&lt;br /&gt;
            X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);&lt;br /&gt;
            string str_SN = &amp;quot;&amp;quot;;&lt;br /&gt;
            foreach (X509Certificate2 x509 in fcollection)&lt;br /&gt;
            {&lt;br /&gt;
                try&lt;br /&gt;
                {&lt;br /&gt;
                    if (x509.Subject.ToUpper().Contains(&amp;quot;SNILS&amp;quot;) || x509.Subject.ToUpper().Contains(&amp;quot;СНИЛС&amp;quot;))&lt;br /&gt;
                    {&lt;br /&gt;
&lt;br /&gt;
                        str_SN = x509.Subject.Substring(x509.Subject.IndexOf(&amp;quot;SNILS&amp;quot;) + 6, 11);&lt;br /&gt;
                        int n;&lt;br /&gt;
                        if (!int.TryParse(str_SN.Substring(0, 10), out n))&lt;br /&gt;
                        {&lt;br /&gt;
                            str_SN = x509.Subject.Substring(x509.Subject.ToUpper().IndexOf(&amp;quot;СНИЛС&amp;quot;) + 6, 11);&lt;br /&gt;
                            if (!int.TryParse(str_SN.Substring(0, 10), out n))&lt;br /&gt;
                            {&lt;br /&gt;
                                continue;&lt;br /&gt;
                                //                                System.Windows.Forms.MessageBox.Show(&amp;quot;Снилс в сертификате не найден или пустой&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        if (String.CompareOrdinal(str_SN, &amp;quot;NNNNNNNNNNNNN&amp;quot;) == 0)&lt;br /&gt;
                        {&lt;br /&gt;
                            cert = x509;&lt;br /&gt;
                            //                            Console.WriteLine(cert.Subject);&lt;br /&gt;
                            Console.WriteLine(str_SN);&lt;br /&gt;
//                            Console.ReadKey();&lt;br /&gt;
                            break;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    x509.Reset();&lt;br /&gt;
                }&lt;br /&gt;
                catch (CryptographicException)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Information could not be written out for this certificate.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            store.Close();&lt;br /&gt;
            return cert;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Далее. Для подписи требуется библиотека GostCryptography. Заливаем через nuget, подключаем.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using GostCryptography;&lt;br /&gt;
using GostCryptography.Cryptography;&lt;br /&gt;
using GostCryptography.Xml;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для СМЭВ пользуем доп. класс&lt;br /&gt;
Добавляем константы&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private const string WsSecurityExtNamespace = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&amp;quot;;&lt;br /&gt;
        private const string WsSecurityUtilityNamespace = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private static XmlElement GetSmevIdElement(XmlDocument document, string idValue)&lt;br /&gt;
        {&lt;br /&gt;
                var namespaceManager = new XmlNamespaceManager(document.NameTable);&lt;br /&gt;
                namespaceManager.AddNamespace(&amp;quot;wsu&amp;quot;, WsSecurityUtilityNamespace);&lt;br /&gt;
                return document.SelectSingleNode(&amp;quot;//*[@wsu:Id=&#039;&amp;quot; + idValue + &amp;quot;&#039;]&amp;quot;, namespaceManager) as XmlElement;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И, собственно алгоритм подписи/ На выходе формируется отдельный файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        private static XmlDocument SignSmevRequestVip(string FileName, string SignedFileName, X509Certificate2 signingCertificate)&lt;br /&gt;
        {&lt;br /&gt;
            XmlDocument smevRequest = new XmlDocument();&lt;br /&gt;
            smevRequest.PreserveWhitespace = true;&lt;br /&gt;
            smevRequest.Load(new XmlTextReader(FileName));&lt;br /&gt;
&lt;br /&gt;
            // Создание подписчика XML-документа&lt;br /&gt;
            var signedXml = new GostSignedXml(smevRequest) { GetIdElementHandler = GetSmevIdElement };&lt;br /&gt;
&lt;br /&gt;
            // Установка ключа для создания подписи&lt;br /&gt;
            signedXml.SetSigningCertificate(signingCertificate);&lt;br /&gt;
          &lt;br /&gt;
            // Ссылка на узел, который нужно подписать, с указанием алгоритма хэширования ГОСТ Р 34.11-94 (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            var dataReference = new Reference { Uri = &amp;quot;#BODY&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            // Метод преобразования, применяемый к данным перед их подписью (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            var dataTransform = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReference.AddTransform(dataTransform);&lt;br /&gt;
            // Установка ссылки на узел&lt;br /&gt;
            signedXml.AddReference(dataReference);&lt;br /&gt;
//reference #wsa300&lt;br /&gt;
            var dataReferenceWSA300 = new Reference { Uri = &amp;quot;#WSA-300&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA300 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA300.AddTransform(dataTransformWSA300);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA300);&lt;br /&gt;
//reference #WSA-301&lt;br /&gt;
            var dataReferenceWSA301 = new Reference { Uri = &amp;quot;#WSA-301&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA301 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA301.AddTransform(dataTransformWSA301);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA301);&lt;br /&gt;
//reference #WSA-302&lt;br /&gt;
            var dataReferenceWSA302 = new Reference { Uri = &amp;quot;#WSA-302&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA302 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA302.AddTransform(dataTransformWSA302);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA302);&lt;br /&gt;
//reference #WSA-303&lt;br /&gt;
            var dataReferenceWSA303 = new Reference { Uri = &amp;quot;#WSA-303&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformWSA303 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceWSA303.AddTransform(dataTransformWSA303);&lt;br /&gt;
            signedXml.AddReference(dataReferenceWSA303);&lt;br /&gt;
//reference #TRHEAD&lt;br /&gt;
            var dataReferenceTRHEAD = new Reference { Uri = &amp;quot;#TRHEAD&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformTRHEAD = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceTRHEAD.AddTransform(dataTransformTRHEAD);&lt;br /&gt;
            signedXml.AddReference(dataReferenceTRHEAD);&lt;br /&gt;
//reference #CertId&lt;br /&gt;
            var dataReferenceCertId = new Reference { Uri = &amp;quot;#CertId&amp;quot;, DigestMethod = GostSignedXml.XmlDsigGost3411ObsoleteUrl };&lt;br /&gt;
            var dataTransformCertId = new XmlDsigExcC14NTransform();&lt;br /&gt;
            dataReferenceCertId.AddTransform(dataTransformCertId);&lt;br /&gt;
            signedXml.AddReference(dataReferenceCertId);&lt;br /&gt;
&lt;br /&gt;
            // Установка алгоритма нормализации узла SignedInfo (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;&lt;br /&gt;
&lt;br /&gt;
            // Установка алгоритма подписи ГОСТ Р 34.10-2001 (в соответствии с методическими рекомендациями СМЭВ)&lt;br /&gt;
            signedXml.SignedInfo.SignatureMethod = GostSignedXml.XmlDsigGost3410ObsoleteUrl;&lt;br /&gt;
&lt;br /&gt;
            // Вычисление подписи&lt;br /&gt;
            signedXml.ComputeSignature();&lt;br /&gt;
&lt;br /&gt;
            // Получение XML-представления подписи&lt;br /&gt;
            var signatureXml = signedXml.GetXml();&lt;br /&gt;
&lt;br /&gt;
            // Добавление подписи в исходный документ&lt;br /&gt;
            smevRequest.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(smevRequest.ImportNode(signatureXml.GetElementsByTagName(&amp;quot;SignatureValue&amp;quot;)[0], true));&lt;br /&gt;
            smevRequest.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(smevRequest.ImportNode(signatureXml.GetElementsByTagName(&amp;quot;SignedInfo&amp;quot;)[0], true));&lt;br /&gt;
            smevRequest.GetElementsByTagName(&amp;quot;wsse:BinarySecurityToken&amp;quot;)[0].InnerText = Convert.ToBase64String(signingCertificate.RawData);&lt;br /&gt;
&lt;br /&gt;
            using (XmlTextWriter xmltw = new XmlTextWriter(SignedFileName,&lt;br /&gt;
                new UTF8Encoding(false)))&lt;br /&gt;
            {&lt;br /&gt;
                smevRequest.WriteTo(xmltw);&lt;br /&gt;
            }&lt;br /&gt;
            return smevRequest;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3940</id>
		<title>Подпись ИЭМК с помощью VipNet CSP</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3940"/>
		<updated>2016-10-20T11:30:25Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на текущую дату.&lt;br /&gt;
&amp;lt;pre&amp;gt;X509Certificate2 CertItog = find_certificate_();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        public static X509Certificate2 find_certificate_()&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            X509Store store = new X509Store(&amp;quot;MY&amp;quot;, StoreLocation.CurrentUser);&lt;br /&gt;
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);&lt;br /&gt;
            X509Certificate2 cert = new X509Certificate2();&lt;br /&gt;
            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;&lt;br /&gt;
            X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);&lt;br /&gt;
            string str_SN = &amp;quot;&amp;quot;;&lt;br /&gt;
            foreach (X509Certificate2 x509 in fcollection)&lt;br /&gt;
            {&lt;br /&gt;
                try&lt;br /&gt;
                {&lt;br /&gt;
                    if (x509.Subject.ToUpper().Contains(&amp;quot;SNILS&amp;quot;) || x509.Subject.ToUpper().Contains(&amp;quot;СНИЛС&amp;quot;))&lt;br /&gt;
                    {&lt;br /&gt;
&lt;br /&gt;
                        str_SN = x509.Subject.Substring(x509.Subject.IndexOf(&amp;quot;SNILS&amp;quot;) + 6, 11);&lt;br /&gt;
                        int n;&lt;br /&gt;
                        if (!int.TryParse(str_SN.Substring(0, 10), out n))&lt;br /&gt;
                        {&lt;br /&gt;
                            str_SN = x509.Subject.Substring(x509.Subject.ToUpper().IndexOf(&amp;quot;СНИЛС&amp;quot;) + 6, 11);&lt;br /&gt;
                            if (!int.TryParse(str_SN.Substring(0, 10), out n))&lt;br /&gt;
                            {&lt;br /&gt;
                                continue;&lt;br /&gt;
                                //                                System.Windows.Forms.MessageBox.Show(&amp;quot;Снилс в сертификате не найден или пустой&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        if (String.CompareOrdinal(str_SN, &amp;quot;NNNNNNNNNNNNN&amp;quot;) == 0)&lt;br /&gt;
                        {&lt;br /&gt;
                            cert = x509;&lt;br /&gt;
                            //                            Console.WriteLine(cert.Subject);&lt;br /&gt;
                            Console.WriteLine(str_SN);&lt;br /&gt;
//                            Console.ReadKey();&lt;br /&gt;
                            break;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    x509.Reset();&lt;br /&gt;
                }&lt;br /&gt;
                catch (CryptographicException)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Information could not be written out for this certificate.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            store.Close();&lt;br /&gt;
            return cert;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3939</id>
		<title>Подпись ИЭМК с помощью VipNet CSP</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3939"/>
		<updated>2016-10-20T11:25:29Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на текущую дату.&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;fghl;jdfg&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3938</id>
		<title>Подпись ИЭМК с помощью VipNet CSP</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_VipNet_CSP&amp;diff=3938"/>
		<updated>2016-10-20T11:23:38Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на ткущую дату. &amp;lt;!-- X50…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на ткущую дату.&lt;br /&gt;
&amp;lt;!-- X509Certificate2 CertItog = find_certificate(); --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=MYSQL_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B&amp;diff=3628</id>
		<title>MYSQL запросы</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=MYSQL_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B&amp;diff=3628"/>
		<updated>2015-11-30T15:20:16Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: /* Найти одинаковые строки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Найти одинаковые строки==&lt;br /&gt;
&amp;lt;pre&amp;gt;select a.stb1, a.stb2, a.stb3, a.stb4, COUNT(*) AS col1 &lt;br /&gt;
from table1 a &lt;br /&gt;
where a.stb1&amp;gt; 0 and a.ctb2 &amp;gt;= 1 &lt;br /&gt;
GROUP BY a.stb1, a.stb2, a.stb3, a.stb4 DESC HAVING COUNT(*) &amp;gt; 1 &lt;br /&gt;
ORDER BY col1; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
блок where - не обязателен.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==update РМР из 1С==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update registrmr2.e_cardrecord_tmp cr set cr.PositionType = (SELECT IF( EXISTS(select sp.id from s_positiontype sp WHERE cr.dop_kodEmployType=sp.ID_FROM_LPU ),(select sp.id from s_positiontype sp WHERE cr.dop_kodEmployType=sp.id_from_lpu),0)),spr_was_updated=1 WHERE cr.From_dop_data=1;&lt;br /&gt;
update registrmr2.e_cardrecord_tmp cr set cr.SubdivisionType = (SELECT IF( EXISTS(select sp.id from s_subdivision sp WHERE sp.id_from_lpu=cr.dop_unitorgkod AND cr.oid=sp.OID AND sp.IS_FEDERAL=0),(select sp.id from s_subdivision sp WHERE sp.id_from_lpu=cr.dop_unitorgkod AND cr.oid=sp.OID AND sp.IS_FEDERAL=0),0)),spr_was_updated=1 WHERE cr.From_dop_data=1;&lt;br /&gt;
update registrmr2.e_cardrecord_tmp cr set cr.Post = (SELECT IF( EXISTS(select sp.id from s_post sp WHERE sp.id_from_lpu=cr.dop_postkod AND cr.oid=sp.OID AND sp.IS_FEDERAL=0),(select sp.id from s_post sp WHERE sp.id_from_lpu=cr.dop_postkod AND cr.oid=sp.OID AND sp.IS_FEDERAL=0),0)),spr_was_updated=1 WHERE cr.From_dop_data=1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSERT INTO e_cardrecord (idpeople,OID,AdditionalLaborAgreement,Care,Conditions,DateBegin,DateEnd,IsActual,IsVacation,Military,OrderIn,OrderOut,Organization_OID,Organization_name,Population,PositionType,Post,PostType,Regime,SubdivisionName,SubdivisionType,TypeIn,TypeInAdd,TypeInCountry,TypeInGoIn,TypeInStudTarget,TypeInStudType,TypeInTerr,TypeOut,TypeOutCountry,TypeOutDel,TypeOutGoIn,TypeOutTerr,Wage,From_dop_data,Spr_was_updated,Dop_Typecontract,Dop_Numbercontract,Dop_Datecontract,Dop_KodEmployType,Dop_Unitorgkod,Dop_Postkod,Dop_Post,Dop_KodCategorypost,Dop_Categorypost,Dop_Ratebat,TIMEMODIFY)&lt;br /&gt;
  (SELECT cr1.idpeople,cr1.OID,cr1.AdditionalLaborAgreement,cr1.Care,cr1.Conditions,cr1.DateBegin,cr1.DateEnd,cr1.IsActual,cr1.IsVacation,cr1.Military,cr1.OrderIn,cr1.OrderOut,cr1.Organization_OID,cr1.Organization_name,cr1.Population,cr1.PositionType,cr1.Post,cr1.PostType,cr1.Regime,cr1.SubdivisionName,cr1.SubdivisionType,cr1.TypeIn,cr1.TypeInAdd,cr1.TypeInCountry,cr1.TypeInGoIn,cr1.TypeInStudTarget,cr1.TypeInStudType,cr1.TypeInTerr,cr1.TypeOut,cr1.TypeOutCountry,cr1.TypeOutDel,cr1.TypeOutGoIn,cr1.TypeOutTerr,cr1.Wage,cr1.From_dop_data,cr1.Spr_was_updated,cr1.Dop_Typecontract,cr1.Dop_Numbercontract,cr1.Dop_Datecontract,cr1.Dop_KodEmployType,cr1.Dop_Unitorgkod,cr1.Dop_Postkod,cr1.Dop_Post,cr1.Dop_KodCategorypost,cr1.Dop_Categorypost,cr1.Dop_Ratebat,cr1.TIMEMODIFY&lt;br /&gt;
FROM registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
WHERE (cr1.idpeople,cr1.OID,cr1.DateBegin,cr1.PositionType,cr1.Post) NOT IN (SELECT cr.idpeople,cr.OID,cr.DateBegin,cr.PositionType,cr.Post FROM registrmr2.e_cardrecord  cr &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
DELETE FROM registrmr2.e_cardrecord_tmp&lt;br /&gt;
WHERE (idpeople,OID,DateBegin,PositionType,Post) IN (SELECT cr.idpeople,cr.OID,cr.DateBegin,cr.PositionType,cr.Post FROM registrmr2.e_cardrecord  cr WHERE cr.spr_was_updated=1);&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2, cr.AdditionalLaborAgreement=(IF (cr1.AdditionalLaborAgreement&amp;gt;0 AND cr1.AdditionalLaborAgreement IS NOT null,cr1.AdditionalLaborAgreement,cr.AdditionalLaborAgreement)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post ;&lt;br /&gt;
  ;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Care=(IF (cr1.Care&amp;gt;0 AND cr1.Care IS NOT null,cr1.Care,cr.Care)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post ;&lt;br /&gt;
  ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Conditions=(IF (cr1.Conditions&amp;gt;0 AND cr1.Conditions IS NOT null,cr1.Conditions,cr.Conditions)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post ;&lt;br /&gt;
  ;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.IsActual=(IF (cr1.IsActual&amp;gt;0 AND cr1.IsActual IS NOT null,cr1.IsActual,cr.IsActual)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post ;&lt;br /&gt;
  ;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.IsVacation=(IF (cr1.IsVacation&amp;gt;0 AND cr1.IsVacation IS NOT null,cr1.IsVacation,cr.IsVacation)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post ;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Military=(IF (cr1.Military&amp;gt;0 AND cr1.Military IS NOT null,cr1.Military,cr.Military)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post ;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.SubdivisionName=(IF (length(cr1.SubdivisionName)&amp;gt;0 AND cr1.SubdivisionName IS NOT null,cr1.SubdivisionName,cr.SubdivisionName)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.SubdivisionType=(IF (cr1.SubdivisionType&amp;gt;0 AND cr1.SubdivisionType IS NOT null,cr1.SubdivisionType,cr.SubdivisionType)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Wage=(IF (cr1.Wage&amp;gt;0 AND cr1.Wage IS NOT null,cr1.Wage,cr.Wage)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Dop_Typecontract=(IF (LENGTH(cr1.Dop_Typecontract)&amp;gt;0 AND cr1.Dop_Typecontract IS NOT null,cr1.Dop_Typecontract,cr.Dop_Typecontract)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Dop_Numbercontract=(IF (LENGTH(cr1.Dop_Numbercontract)&amp;gt;0 AND cr1.Dop_Numbercontract IS NOT null,cr1.Dop_Numbercontract,cr.Dop_Numbercontract)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Dop_Datecontract=(IF (LENGTH(cr1.Dop_Datecontract)&amp;gt;0 AND cr1.Dop_Datecontract IS NOT null,cr1.Dop_Datecontract,cr.Dop_Datecontract)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Dop_KodEmployType=(IF (cr1.Dop_KodEmployType IS NOT null,cr1.Dop_KodEmployType,cr.Dop_KodEmployType)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Dop_Unitorgkod=(IF (cr1.Dop_Unitorgkod&amp;gt;0 AND cr1.Dop_Unitorgkod IS NOT null,cr1.Dop_Unitorgkod,cr.Dop_Unitorgkod)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Dop_Postkod=(IF (cr1.Dop_Postkod&amp;gt;0 AND cr1.Dop_Postkod IS NOT null,cr1.Dop_Postkod,cr.Dop_Postkod)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Dop_Post=(IF (LENGTH(cr1.Dop_Post)&amp;gt;0 AND cr1.Dop_Post IS NOT null,cr1.Dop_Post,cr.Dop_Post)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.Dop_Ratebat=(IF (cr1.Dop_Ratebat IS NOT null,cr1.Dop_Ratebat,cr.Dop_Ratebat)) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
update registrmr2.e_cardrecord AS cr, registrmr2.e_cardrecord_tmp AS cr1&lt;br /&gt;
set cr.From_dop_data=2,cr.TIMEMODIFY=(NOW()) where&lt;br /&gt;
cr1.idpeople=cr.idpeople AND cr1.OID=cr.OID AND cr.DateBegin=cr1.DateBegin AND cr.PositionType=cr1.PositionType AND cr.post=cr1.post;&lt;br /&gt;
&lt;br /&gt;
TRUNCATE TABLE registrmr2.e_cardrecord_tmp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%B1%D1%80%D0%BE%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D0%B0_CryptoPro.Net&amp;diff=3589</id>
		<title>Сброс триала CryptoPro.Net</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%B1%D1%80%D0%BE%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D0%B0_CryptoPro.Net&amp;diff=3589"/>
		<updated>2015-06-15T16:29:11Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Версия КриптоПро .NET 1.0.5425.0 от 2014-11-08&lt;br /&gt;
&lt;br /&gt;
После деинсталяции остался подобный ключи&lt;br /&gt;
&amp;lt;pre&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\EB3462F5-EF6A-4c62-AEC2-6FB1E4AE1E15\&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
удалить криптоПро клиент&lt;br /&gt;
перезагрузиться&lt;br /&gt;
найти и удалить в реестре по этому пути каталог(лучше искать по &amp;quot;EB3462F5-EF6A&amp;quot;)&lt;br /&gt;
установить криптоПро клиент&lt;br /&gt;
проверить что сброс триала прошел&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://llikiper.com/articles/25-crypto-pro-sbros-triala.html&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%B1%D1%80%D0%BE%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D0%B0_CryptoPro.Net&amp;diff=3588</id>
		<title>Сброс триала CryptoPro.Net</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%B1%D1%80%D0%BE%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D0%B0_CryptoPro.Net&amp;diff=3588"/>
		<updated>2015-06-15T16:01:27Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «Версия КриптоПро .NET 1.0.5425.0 от 2014-11-08  После деинсталяции остался подобный ключи &amp;lt;pre&amp;gt;HKEY_LOCAL_MA…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Версия КриптоПро .NET 1.0.5425.0 от 2014-11-08&lt;br /&gt;
&lt;br /&gt;
После деинсталяции остался подобный ключи&lt;br /&gt;
&amp;lt;pre&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\EB3462F5-EF6A-4c62-AEC2-6FB1E4AE1E15\&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
удалить криптоПро клиент&lt;br /&gt;
перезагрузиться&lt;br /&gt;
найти и удалить в реестре по этому пути каталог(лучше искать по &amp;quot;EB3462F5-EF6A&amp;quot;)&lt;br /&gt;
установить криптоПро клиент&lt;br /&gt;
проверить что сброс триала прошел&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=C_sharp&amp;diff=3587</id>
		<title>C sharp</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=C_sharp&amp;diff=3587"/>
		<updated>2015-06-15T15:59:19Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Получение хэша от строки по гост 94]]&lt;br /&gt;
#[[Подпись ИЭМК с помощью Crypto Pro]]&lt;br /&gt;
#[[Подпись ИЭМК с помощью VipNet CSP]]&lt;br /&gt;
#[[Каноникализация (приведение XML к канонической форме)]]&lt;br /&gt;
#[[Сброс триала CryptoPro.Net]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D0%B2&amp;diff=3586</id>
		<title>Удаление дубликатов</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D0%B2&amp;diff=3586"/>
		<updated>2015-05-14T09:15:11Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «&amp;lt;pre&amp;gt; SELECT * FROM [www_new].[dbo].[pok] T1, (SELECT id_pok, id_per,id_lpu,id_group,znach FROM [www_new].[dbo].[pok] GROUP BY id_pok, id_per,id_lpu,id_group,znac…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT *&lt;br /&gt;
FROM [www_new].[dbo].[pok] T1,&lt;br /&gt;
(SELECT id_pok, id_per,id_lpu,id_group,znach FROM [www_new].[dbo].[pok]&lt;br /&gt;
GROUP BY id_pok, id_per,id_lpu,id_group,znach&lt;br /&gt;
 HAVING COUNT(id_pok) &amp;gt; 1) T2&lt;br /&gt;
	WHERE T1.id_pok=T2.id_pok&lt;br /&gt;
	and T1.id_per = T2.id_per&lt;br /&gt;
   AND  T1.id_lpu = T2.id_lpu&lt;br /&gt;
  AND   T1.id_group = T2.id_group&lt;br /&gt;
  AND   T1.znach = T2.znach&lt;br /&gt;
  order by t1.id_pok,t1.id_per,T1.id&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
копируем результат в excel, данные &amp;gt;&amp;gt; удалить дубликаты &amp;gt;&amp;gt; выбираем столбцы кроме &lt;br /&gt;
первого id и даты,  получаем записи, кот. надо удалить.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; delete from www_new.dbo.pok where id=3516401 &amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B_Ms_Sql&amp;diff=3585</id>
		<title>Скрипты Ms Sql</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B_Ms_Sql&amp;diff=3585"/>
		<updated>2015-05-14T09:13:55Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «#Удаление дубликатов»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Удаление дубликатов]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=MS_SQL&amp;diff=3584</id>
		<title>MS SQL</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=MS_SQL&amp;diff=3584"/>
		<updated>2015-05-14T09:13:22Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Скрипты Ms Sql]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=MS_SQL&amp;diff=3583</id>
		<title>MS SQL</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=MS_SQL&amp;diff=3583"/>
		<updated>2015-05-14T09:12:38Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «#Скрипты»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Скрипты]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=3582</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=3582"/>
		<updated>2015-05-14T09:11:46Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Документация по настройке ip телефонии]]&lt;br /&gt;
#[[Настройка ПО VipNet]]&lt;br /&gt;
#[[Сайты для ЛПУ]]&lt;br /&gt;
#[[Информатизация здравоохранения]]&lt;br /&gt;
#[[Настройка Windows]]&lt;br /&gt;
#[[Документация по настройке Linux mandriva]]&lt;br /&gt;
#[[Документация по настройке Linux Ubuntu]]&lt;br /&gt;
#[[Системы управления содержимым сайта]]&lt;br /&gt;
#[[Clarion for Windows]]&lt;br /&gt;
#[[C sharp]]&lt;br /&gt;
#[[РМИС]]&lt;br /&gt;
#[[MS SQL]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Некоторые полезные ресурсы ==&lt;br /&gt;
* Информацию по работе с этой вики можно найти в [http://meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 руководстве пользователя].&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Help:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Help:FAQ Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2%D0%BD%D0%B5%D1%88%D0%BD%D0%B8%D1%85_dll&amp;diff=3581</id>
		<title>Использование внешних dll</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2%D0%BD%D0%B5%D1%88%D0%BD%D0%B8%D1%85_dll&amp;diff=3581"/>
		<updated>2015-05-06T12:47:32Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Создаем в Visual Studio библиотеку классов C#. Если собираемся передавать в длл указатели, то открываем свойства проекта, вкладка Построение и добавляем галочку Разрешить небезопасный код.&lt;br /&gt;
Например,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Runtime.Serialization;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
using System.Security.Cryptography.X509Certificates;&lt;br /&gt;
using System.Security.Cryptography.Xml;&lt;br /&gt;
using System.Xml;&lt;br /&gt;
using System.Runtime.InteropServices;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
&lt;br /&gt;
namespace ManagedCSharpDLL&lt;br /&gt;
{&lt;br /&gt;
    public static class UnmanagedExports&lt;br /&gt;
    {&lt;br /&gt;
        [System.Reflection.Obfuscation(Feature = &amp;quot;DllExport&amp;quot;)]&lt;br /&gt;
        public static void TestINT(int val1)&lt;br /&gt;
        {&lt;br /&gt;
            System.Windows.Forms.MessageBox.Show(val1.ToString());&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        [System.Reflection.Obfuscation(Feature = &amp;quot;DllExport&amp;quot;)]&lt;br /&gt;
        public static string Canonicalize(string document)&lt;br /&gt;
        {&lt;br /&gt;
            XmlDsigExcC14NTransform xmlTransform = new XmlDsigExcC14NTransform();&lt;br /&gt;
            xmlTransform.LoadInput(document);&lt;br /&gt;
            System.Windows.Forms.MessageBox.Show(document.ToString());&lt;br /&gt;
            string result = new StreamReader((MemoryStream)xmlTransform.GetOutput()).ReadToEnd();&lt;br /&gt;
            //C# метод канокализации не добавляет в XPath неймсппейс&lt;br /&gt;
/*            result = s.Replace(&amp;quot;&amp;lt;XPath&amp;gt;&amp;quot;, &amp;quot;&amp;lt;XPath xmlns:dsig=\&amp;quot;http://www.w3.org/2000/09/xmldsig#\&amp;quot;&amp;gt;&amp;quot;);*/&lt;br /&gt;
            return result;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        [System.Reflection.Obfuscation(Feature = &amp;quot;DllExport&amp;quot;)]&lt;br /&gt;
        public static string Canonicalization(XmlNode node)&lt;br /&gt;
        {&lt;br /&gt;
            XmlDsigExcC14NTransform c14 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            var nodeStream = new MemoryStream();&lt;br /&gt;
            XmlWriter writer = XmlWriter.Create(nodeStream);&lt;br /&gt;
            node.WriteTo(writer);&lt;br /&gt;
            writer.Flush();&lt;br /&gt;
&lt;br /&gt;
            nodeStream.Position = 0;&lt;br /&gt;
&lt;br /&gt;
            var transform = new XmlDsigExcC14NTransform();&lt;br /&gt;
            transform.LoadInput(node);&lt;br /&gt;
            var outputStream = (MemoryStream)transform.GetOutput(typeof(Stream));&lt;br /&gt;
            return new StreamReader(outputStream).ReadToEnd();&lt;br /&gt;
&lt;br /&gt;
            //C# метод канокализации не добавляет в XPath неймсппейс&lt;br /&gt;
            // result = s.Replace(&amp;quot;&amp;lt;XPath&amp;gt;&amp;quot;, &amp;quot;&amp;lt;XPath xmlns:dsig=\&amp;quot;http://www.w3.org/2000/09/xmldsig#\&amp;quot;&amp;gt;&amp;quot;);&lt;br /&gt;
            //todo: Поверить после! Тут они не попадаются, проверить нечем. &lt;br /&gt;
        }&lt;br /&gt;
      [System.Reflection.Obfuscation(Feature = &amp;quot;DllExport&amp;quot;)]&lt;br /&gt;
        public static void TestCallback(string passedString)&lt;br /&gt;
        {&lt;br /&gt;
            string displayValue = passedString;&lt;br /&gt;
            string returnValue = String.Empty;&lt;br /&gt;
&lt;br /&gt;
            MessageBox.Show(&amp;quot;C#: About to call the Callback. displayValue=&amp;quot; + displayValue + &amp;quot;, returnValue=&amp;quot; + returnValue);&lt;br /&gt;
            MessageBox.Show(&amp;quot;C#: Back from the Callback. displayValue=&amp;quot; + displayValue + &amp;quot;, returnValue=&amp;quot; + returnValue);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В свойствах проекта выбираем вместо ANY x86, подключаем System.Security.Xml, System.Windows.Forms;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Далее скачиваем архив с ExportDll,http://yadi.sk/d/N1hofxN-Fiz9i распаковываем. В файле Params.set должны быть указаны правильные пути для ilasm и ildasm. По умолчанию я выставил свои пути (Net Framework 4 и Visual Studio 2010).&lt;br /&gt;
Далее или а )снова открываем свойств проекта, вкладка События построения. В поле Командная строка события после построения вписываем:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;c:\Program Files\ExportDll\ExportDll.exe&amp;quot; &amp;quot;$(TargetPath)&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
где &amp;quot;c:\Program Files\ExportDll\ExportDll.exe&amp;quot; путь к распакованной утилите. &lt;br /&gt;
Нажимаем сохранить, далее строим решение, получаем в директории bin готовую DLL.&lt;br /&gt;
или б) вручную выполняем ExportDll.exe *.dll , получаем готовую DLL.&lt;br /&gt;
&lt;br /&gt;
Полученный результат нужно проверить. В этом поможет утилита Dependency Walker http://www.dependencywalker.com/ Запускаем, кидаем в нее полученную длл и смотрим, чтобы появились справа посредине функции &lt;br /&gt;
****&lt;br /&gt;
http://jonxxx.me/13-metatrader/15-eksport-funktsij-iz-net-dll-c-dllexport-net-framework-v-metatrader&lt;br /&gt;
****&lt;br /&gt;
Далее нужно выкачать модифицированный libMaker http://www.clarionaddins.com/_downloads/LibMaker.zip, т.к. стандартный может работать только с короткими именами и добавляет &#039;/&#039; в названия функций в lib. Запускаем libmaker, импортируем dll, удаляем что не надо, экспортируем в *.lib. Получаем готовые 2 файла *.lib и *.dll&lt;br /&gt;
*****&lt;br /&gt;
Далее эти файлы нужно подцепить в Clarion.&lt;br /&gt;
1. Копируем файлы в директорию с программой. (Файлы .DLL размещаю в папку \Bin,.LIB - в папку \Lib,.INC - в папке \Libsrc)&lt;br /&gt;
2. Файл полученной библиотеки  подключается в проекте (Solution-&amp;gt;Library, objects and resource files)&lt;br /&gt;
3. В глобальных Embeds в ветке Inside the Global Map пишется include(&#039;csharp.inc&#039;)&lt;br /&gt;
4. В файле csharp.inc прописываю прототипы функций либы&lt;br /&gt;
&amp;lt;pre&amp;gt;    Module(&#039;TestDLL.dll&#039;)&lt;br /&gt;
Canonicalization    PROCEDURE(*CString node),NAME(&#039;Canonicalization&#039;),PASCAL,RAW,DLL(TRUE)&lt;br /&gt;
TestINT        	    PROCEDURE(long val1),NAME(&#039;TestINT&#039;),PASCAL,RAW,DLL(TRUE)&lt;br /&gt;
TestCallback        PROCEDURE(*CString passedString),NAME(&#039;TestCallback&#039;),PASCAL,RAW,DLL(TRUE)&lt;br /&gt;
Canonicalize        PROCEDURE(*CString document),NAME(&#039;Canonicalize&#039;),PASCAL,RAW,DLL(TRUE)&lt;br /&gt;
    END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Пример вызова функций&lt;br /&gt;
&amp;lt;pre&amp;gt;          a = &#039;Call Test Worked&#039;&lt;br /&gt;
        Message(&#039;Clarion: Send message: &#039; &amp;amp; a)&lt;br /&gt;
          val1=4444&lt;br /&gt;
          TestINT(val1)&lt;br /&gt;
        TestCallback(a)&lt;br /&gt;
          a=&#039;&amp;lt;test&amp;gt;dasklhasdfkl&amp;lt;/test&amp;gt;&#039;&lt;br /&gt;
      !    Canonicalization(a)&lt;br /&gt;
          Canonicalize(a)&lt;br /&gt;
          message(a)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9A%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_XML_%D0%BA_%D0%BA%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5)&amp;diff=3580</id>
		<title>Каноникализация (приведение XML к канонической форме)</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9A%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_XML_%D0%BA_%D0%BA%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5)&amp;diff=3580"/>
		<updated>2015-05-06T07:13:14Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «ClincalDocument &amp;lt;pre&amp;gt;static void hash_from_file_ClinicalDocument(string _filenameXML, string _filenameTXT)         {             StreamWriter sw = new StreamWrite…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ClincalDocument&lt;br /&gt;
&amp;lt;pre&amp;gt;static void hash_from_file_ClinicalDocument(string _filenameXML, string _filenameTXT)&lt;br /&gt;
        {&lt;br /&gt;
            StreamWriter sw = new StreamWriter(_filenameTXT);&lt;br /&gt;
            Gost3411 gost3411 = new Gost3411CryptoServiceProvider();&lt;br /&gt;
            XmlDocument doc = new XmlDocument();&lt;br /&gt;
            doc.Load(new XmlTextReader(_filenameXML));&lt;br /&gt;
            XmlElement root = doc.DocumentElement;                      // Полный xml файл&lt;br /&gt;
            //            Console.WriteLine(root.InnerXml); Console.ReadKey();&lt;br /&gt;
            // Ищем тег Body, с нэмспейсом&lt;br /&gt;
            String ClinicalDocumentXML = root.OuterXml;        // Получаем полное содержимое тега ClinicalDocument&lt;br /&gt;
            sw.Write(&amp;quot;ClinicalDocumentFromFile=      &amp;quot;); sw.WriteLine(ClinicalDocumentXML); // Пишем исходное body в файл&lt;br /&gt;
            byte[] result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(ClinicalDocumentXML));&lt;br /&gt;
            sw.Write(&amp;quot;HashClinicalDocument=          &amp;quot;); sw.WriteLine(Convert.ToBase64String(result)); // Пишем хэш исходного body&lt;br /&gt;
            // Приводим тэг ClinicalDocument  к канонической форме&lt;br /&gt;
            XmlNode ClinicalDocumentAll = doc.DocumentElement;&lt;br /&gt;
//            sw.Write(&amp;quot;ClinicalDocumentAll=           &amp;quot;); sw.WriteLine(ClinicalDocumentAll.OuterXml);&lt;br /&gt;
            String ClinicalDocumentCan = Canonicalization(ClinicalDocumentAll);&lt;br /&gt;
            sw.Write(&amp;quot;ClinicalDocumentCan=           &amp;quot;); sw.WriteLine(ClinicalDocumentCan);&lt;br /&gt;
            result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(ClinicalDocumentCan));&lt;br /&gt;
            sw.Write(&amp;quot;HashClinicalDocumentCan=       &amp;quot;); sw.WriteLine(Convert.ToBase64String(result));&lt;br /&gt;
            export_can_node(ClinicalDocumentCan, &amp;quot;doc/ClinicalDocument_cann&amp;quot;);   // экспорт результата каноникализации в файл&lt;br /&gt;
            sw.WriteLine(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
            //            Console.WriteLine(signedInfo.InnerXml); Console.ReadKey();&lt;br /&gt;
            sw.Close();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;        public static string Canonicalization(XmlNode node)&lt;br /&gt;
        {&lt;br /&gt;
            var nodeStream = new MemoryStream();&lt;br /&gt;
            XmlWriter writer = XmlWriter.Create(nodeStream);&lt;br /&gt;
            node.WriteTo(writer);&lt;br /&gt;
            writer.Flush();&lt;br /&gt;
&lt;br /&gt;
            nodeStream.Position = 0;&lt;br /&gt;
&lt;br /&gt;
            var transform = new XmlDsigExcC14NTransform();&lt;br /&gt;
            transform.LoadInput(nodeStream);&lt;br /&gt;
&lt;br /&gt;
            var outputStream = (MemoryStream)transform.GetOutput(typeof(Stream));&lt;br /&gt;
            return new StreamReader(outputStream).ReadToEnd();&lt;br /&gt;
&lt;br /&gt;
            //C# метод канокализации не добавляет в XPath неймсппейс&lt;br /&gt;
            // result = s.Replace(&amp;quot;&amp;lt;XPath&amp;gt;&amp;quot;, &amp;quot;&amp;lt;XPath xmlns:dsig=\&amp;quot;http://www.w3.org/2000/09/xmldsig#\&amp;quot;&amp;gt;&amp;quot;);&lt;br /&gt;
            //todo: Поверить после! Тут они не попадаются, проверить нечем. &lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        public static string export_can_node(string node_can, string filename_can)&lt;br /&gt;
        {&lt;br /&gt;
            XmlDocument doc_ = new XmlDocument();&lt;br /&gt;
            doc_.LoadXml(node_can);&lt;br /&gt;
            using (XmlTextWriter xmltw = new XmlTextWriter(filename_can+&amp;quot;.xml&amp;quot;,&lt;br /&gt;
                new UTF8Encoding(false)))&lt;br /&gt;
            {&lt;br /&gt;
                doc_.WriteTo(xmltw);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
                return null;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=C_sharp&amp;diff=3579</id>
		<title>C sharp</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=C_sharp&amp;diff=3579"/>
		<updated>2015-05-06T07:11:34Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Получение хэша от строки по гост 94]]&lt;br /&gt;
#[[Подпись ИЭМК с помощью Crypto Pro]]&lt;br /&gt;
#[[Подпись ИЭМК с помощью VipNet CSP]]&lt;br /&gt;
#[[Каноникализация (приведение XML к канонической форме)]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%85%D1%8D%D1%88%D0%B0_%D0%BE%D1%82_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_%D0%BF%D0%BE_%D0%B3%D0%BE%D1%81%D1%82_94&amp;diff=3578</id>
		<title>Получение хэша от строки по гост 94</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%85%D1%8D%D1%88%D0%B0_%D0%BE%D1%82_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_%D0%BF%D0%BE_%D0%B3%D0%BE%D1%81%D1%82_94&amp;diff=3578"/>
		<updated>2015-05-06T07:07:08Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;            string signedInfo22 = &amp;quot;&amp;lt;SOAP-ENV:Body xmlns:SOAP-ENV=\&amp;quot;http://www.w3.org/2003/05/soap-envelope\&amp;quot; xmlns:wsu=\&amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\&amp;quot; wsu:Id=\&amp;quot;BODY\&amp;quot;&amp;gt;&amp;lt;PRPA_IN201301RU02 xmlns=\&amp;quot;urn:hl7-org:v3\&amp;quot; ITSVersion=\&amp;quot;XML_1.0\&amp;quot;&amp;gt;&amp;lt;id extension=\&amp;quot;0\&amp;quot; root=\&amp;quot;1.2.643.5.1.13.3.25.35.11\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;creationTime value=\&amp;quot;20150209172931\&amp;quot;&amp;gt;&amp;lt;/creationTime&amp;gt;&amp;lt;interactionId extension=\&amp;quot;PRPA_IN201301RU02\&amp;quot; root=\&amp;quot;1.2.643.5.1.13.2.7.3\&amp;quot;&amp;gt;&amp;lt;/interactionId&amp;gt;&amp;lt;processingCode code=\&amp;quot;P\&amp;quot;&amp;gt;&amp;lt;/processingCode&amp;gt;&amp;lt;processingModeCode code=\&amp;quot;T\&amp;quot;&amp;gt;&amp;lt;/processingModeCode&amp;gt;&amp;lt;acceptAckCode code=\&amp;quot;AL\&amp;quot;&amp;gt;&amp;lt;/acceptAckCode&amp;gt;&amp;lt;receiver typeCode=\&amp;quot;RCV\&amp;quot;&amp;gt;&amp;lt;device classCode=\&amp;quot;DEV\&amp;quot; determinerCode=\&amp;quot;INSTANCE\&amp;quot;&amp;gt;&amp;lt;id root=\&amp;quot;d5a0f9c0-5db4-11e3-949a-0800200c9a66\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;asAgent classCode=\&amp;quot;ASSIGNED\&amp;quot;&amp;gt;&amp;lt;representedOrganization classCode=\&amp;quot;ORG\&amp;quot; determinerCode=\&amp;quot;INSTANCE\&amp;quot;&amp;gt;&amp;lt;id root=\&amp;quot;1.2.643.5.1.13.2.7.3\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;ИЭМК&amp;lt;/name&amp;gt;&amp;lt;/representedOrganization&amp;gt;&amp;lt;/asAgent&amp;gt;&amp;lt;/device&amp;gt;&amp;lt;/receiver&amp;gt;&amp;lt;sender typeCode=\&amp;quot;SND\&amp;quot;&amp;gt;&amp;lt;device classCode=\&amp;quot;DEV\&amp;quot; determinerCode=\&amp;quot;INSTANCE\&amp;quot;&amp;gt;&amp;lt;id root=\&amp;quot;d84c8524-d53e-43c6-973c-5076646731d8\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;МИС Вологодской области \&amp;quot;Статистика и счета ЛПУ\&amp;quot;&amp;lt;/name&amp;gt;&amp;lt;asAgent classCode=\&amp;quot;ASSIGNED\&amp;quot;&amp;gt;&amp;lt;representedOrganization classCode=\&amp;quot;ORG\&amp;quot; determinerCode=\&amp;quot;INSTANCE\&amp;quot;&amp;gt;&amp;lt;id root=\&amp;quot;1.2.643.5.1.13.3.25.35.11\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;БУЗ ВО ВОЛОГОДСКАЯ ГОРОДСКАЯ ПОЛИКЛИНИКА 3&amp;lt;/name&amp;gt;&amp;lt;/representedOrganization&amp;gt;&amp;lt;/asAgent&amp;gt;&amp;lt;/device&amp;gt;&amp;lt;/sender&amp;gt;&amp;lt;controlActProcess classCode=\&amp;quot;CACT\&amp;quot; moodCode=\&amp;quot;EVN\&amp;quot;&amp;gt;&amp;lt;subject typeCode=\&amp;quot;SUBJ\&amp;quot;&amp;gt;&amp;lt;registrationEvent classCode=\&amp;quot;REG\&amp;quot; moodCode=\&amp;quot;EVN\&amp;quot;&amp;gt;&amp;lt;id nullFlavor=\&amp;quot;NA\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;statusCode code=\&amp;quot;active\&amp;quot;&amp;gt;&amp;lt;/statusCode&amp;gt;&amp;lt;subject1 typeCode=\&amp;quot;SBJ\&amp;quot;&amp;gt;&amp;lt;patient classCode=\&amp;quot;PAT\&amp;quot;&amp;gt;&amp;lt;id extension=\&amp;quot;3655\&amp;quot; root=\&amp;quot;1.2.643.5.1.13.3.25.35.11\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;statusCode code=\&amp;quot;active\&amp;quot;&amp;gt;&amp;lt;/statusCode&amp;gt;&amp;lt;patientPerson&amp;gt;&amp;lt;name&amp;gt;&amp;lt;family&amp;gt;XXXXXX&amp;lt;/family&amp;gt;&amp;lt;given&amp;gt;YYYYYYYY&amp;lt;/given&amp;gt;&amp;lt;given&amp;gt;ZZZZZZZZZZZZZZ&amp;lt;/given&amp;gt;&amp;lt;/name&amp;gt;&amp;lt;administrativeGenderCode code=\&amp;quot;2\&amp;quot; codeSystem=\&amp;quot;1.2.643.5.1.13.2.1.1.156\&amp;quot;&amp;gt;&amp;lt;/administrativeGenderCode&amp;gt;&amp;lt;birthTime value=\&amp;quot;19590928\&amp;quot;&amp;gt;&amp;lt;/birthTime&amp;gt;&amp;lt;addr&amp;gt;&amp;lt;streetAddressLine&amp;gt;г. ВОЛОГДА, ул. FFFFFFFFFF кв.31&amp;lt;/streetAddressLine&amp;gt;&amp;lt;city&amp;gt;ВОЛОГДА&amp;lt;/city&amp;gt;&amp;lt;state&amp;gt;ВОЛОГОДСКАЯ&amp;lt;/state&amp;gt;&amp;lt;country&amp;gt;Российская Федерация&amp;lt;/country&amp;gt;&amp;lt;/addr&amp;gt;&amp;lt;asMember classCode=\&amp;quot;MBR\&amp;quot;&amp;gt;&amp;lt;group classCode=\&amp;quot;PUB\&amp;quot;&amp;gt;&amp;lt;code code=\&amp;quot;5\&amp;quot; codeSystem=\&amp;quot;1.2.643.5.1.13.2.1.1.366\&amp;quot; displayName=\&amp;quot;Неработающий\&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/group&amp;gt;&amp;lt;/asMember&amp;gt;&amp;lt;asMember classCode=\&amp;quot;MBR\&amp;quot;&amp;gt;&amp;lt;group classCode=\&amp;quot;PUB\&amp;quot;&amp;gt;&amp;lt;code code=\&amp;quot;2\&amp;quot; codeSystem=\&amp;quot;1.2.643.5.1.13.2.1.1.358\&amp;quot; displayName=\&amp;quot;инвалиды войны\&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/group&amp;gt;&amp;lt;/asMember&amp;gt;&amp;lt;asOtherIDs classCode=\&amp;quot;IDENT\&amp;quot;&amp;gt;&amp;lt;documentType code=\&amp;quot;3\&amp;quot; codeSystem=\&amp;quot;1.2.643.5.1.13.2.7.1.62\&amp;quot;&amp;gt;&amp;lt;/documentType&amp;gt;&amp;lt;documentNumber number=\&amp;quot;06377932094\&amp;quot;&amp;gt;&amp;lt;/documentNumber&amp;gt;&amp;lt;scopingOrganization classCode=\&amp;quot;ORG\&amp;quot; determinerCode=\&amp;quot;INSTANCE\&amp;quot;&amp;gt;&amp;lt;id nullFlavor=\&amp;quot;NI\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;/scopingOrganization&amp;gt;&amp;lt;/asOtherIDs&amp;gt;&amp;lt;asOtherIDs classCode=\&amp;quot;HLD\&amp;quot;&amp;gt;&amp;lt;documentType code=\&amp;quot;1\&amp;quot; codeSystem=\&amp;quot;1.2.643.5.1.13.2.7.1.62\&amp;quot;&amp;gt;&amp;lt;/documentType&amp;gt;&amp;lt;documentNumber number=\&amp;quot;3550040871001818\&amp;quot;&amp;gt;&amp;lt;/documentNumber&amp;gt;&amp;lt;effectiveTime value=\&amp;quot;20120416\&amp;quot;&amp;gt;&amp;lt;/effectiveTime&amp;gt;&amp;lt;scopingOrganization classCode=\&amp;quot;ORG\&amp;quot; determinerCode=\&amp;quot;INSTANCE\&amp;quot;&amp;gt;&amp;lt;id extension=\&amp;quot;35003\&amp;quot; root=\&amp;quot;1.2.643.5.1.13.2.1.1.635\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;ОАО\&amp;quot;СТРАХОВАЯ КОМПАНИЯ \&amp;quot;СОГАЗ-МЕД\&amp;quot;&amp;lt;/name&amp;gt;&amp;lt;/scopingOrganization&amp;gt;&amp;lt;/asOtherIDs&amp;gt;&amp;lt;asOtherIDs classCode=\&amp;quot;IDENT\&amp;quot;&amp;gt;&amp;lt;documentType code=\&amp;quot;5\&amp;quot; codeSystem=\&amp;quot;1.2.643.5.1.13.2.7.1.62\&amp;quot;&amp;gt;&amp;lt;qualifier&amp;gt;&amp;lt;name code=\&amp;quot;14\&amp;quot; codeSystem=\&amp;quot;1.2.643.5.1.13.2.1.1.498\&amp;quot; codeSystemName=\&amp;quot;Классификатор документов, удостоверяющих личность гражданина Российской Федерации\&amp;quot; displayName=\&amp;quot;Паспорт гражданина РФ\&amp;quot;&amp;gt;&amp;lt;/name&amp;gt;&amp;lt;/qualifier&amp;gt;&amp;lt;/documentType&amp;gt;&amp;lt;documentNumber number=\&amp;quot;1909614992\&amp;quot;&amp;gt;&amp;lt;/documentNumber&amp;gt;&amp;lt;scopingOrganization classCode=\&amp;quot;ORG\&amp;quot; determinerCode=\&amp;quot;INSTANCE\&amp;quot;&amp;gt;&amp;lt;id nullFlavor=\&amp;quot;NI\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;УФМС Г.ВОЛОГДА&amp;lt;/name&amp;gt;&amp;lt;/scopingOrganization&amp;gt;&amp;lt;/asOtherIDs&amp;gt;&amp;lt;birthPlace&amp;gt;&amp;lt;addr&amp;gt;&amp;lt;city&amp;gt;Вологда&amp;lt;/city&amp;gt;&amp;lt;state&amp;gt;Российская Федерация&amp;lt;/state&amp;gt;&amp;lt;/addr&amp;gt;&amp;lt;/birthPlace&amp;gt;&amp;lt;/patientPerson&amp;gt;&amp;lt;providerOrganization classCode=\&amp;quot;ORG\&amp;quot; determinerCode=\&amp;quot;INSTANCE\&amp;quot;&amp;gt;&amp;lt;id root=\&amp;quot;1.2.643.5.1.13.3.25.35.11\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;БУЗ ВО ВОЛОГОДСКАЯ ГОРОДСКАЯ ПОЛИКЛИНИКА 3&amp;lt;/name&amp;gt;&amp;lt;contactParty classCode=\&amp;quot;CON\&amp;quot;&amp;gt;&amp;lt;telecom value=\&amp;quot;+8(8202)74-13-06\&amp;quot;&amp;gt;&amp;lt;/telecom&amp;gt;&amp;lt;/contactParty&amp;gt;&amp;lt;/providerOrganization&amp;gt;&amp;lt;/patient&amp;gt;&amp;lt;/subject1&amp;gt;&amp;lt;custodian typeCode=\&amp;quot;CST\&amp;quot;&amp;gt;&amp;lt;assignedEntity classCode=\&amp;quot;ASSIGNED\&amp;quot;&amp;gt;&amp;lt;id root=\&amp;quot;1.2.643.5.1.13.3.25.35.11\&amp;quot;&amp;gt;&amp;lt;/id&amp;gt;&amp;lt;assignedOrganization classCode=\&amp;quot;ORG\&amp;quot; determinerCode=\&amp;quot;INSTANCE\&amp;quot;&amp;gt;&amp;lt;name&amp;gt;БУЗ ВО ВОЛОГОДСКАЯ ГОРОДСКАЯ ПОЛИКЛИНИКА 3&amp;lt;/name&amp;gt;&amp;lt;/assignedOrganization&amp;gt;&amp;lt;/assignedEntity&amp;gt;&amp;lt;/custodian&amp;gt;&amp;lt;/registrationEvent&amp;gt;&amp;lt;/subject&amp;gt;&amp;lt;/controlActProcess&amp;gt;&amp;lt;/PRPA_IN201301RU02&amp;gt;&amp;lt;/SOAP-ENV:Body&amp;gt;&amp;quot;;&lt;br /&gt;
            HashAlgorithm myhash1 = HashAlgorithm.Create(&amp;quot;Gost3411&amp;quot;);&lt;br /&gt;
            byte[] hashResult = myhash1.ComputeHash(Encoding.UTF8.GetBytes(signedInfo22));&lt;br /&gt;
            string canonicalHashedSignedInfo = Convert.ToBase64String(hashResult);&lt;br /&gt;
            Console.WriteLine(canonicalHashedSignedInfo); Console.ReadKey();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        static void hash_from_file_not_full(string _filenameXML, string _filenameTXT)&lt;br /&gt;
        {&lt;br /&gt;
            StreamWriter sw = new StreamWriter(_filenameTXT);&lt;br /&gt;
            Gost3411 gost3411 = new Gost3411CryptoServiceProvider();&lt;br /&gt;
            const string Envelope = &amp;quot;/SOAP-ENV:Envelope&amp;quot;;&lt;br /&gt;
            const string Header = Envelope + &amp;quot;/SOAP-ENV:Header&amp;quot;;&lt;br /&gt;
            const string Action = Header + &amp;quot;/wsa:Action&amp;quot;;       //wsa300&lt;br /&gt;
            const string MessageID = Header + &amp;quot;/wsa:MessageID&amp;quot;; //wsa301&lt;br /&gt;
            const string ReplyTo = Header + &amp;quot;/wsa:ReplyTo&amp;quot;;     //wsa302&lt;br /&gt;
            const string To = Header + &amp;quot;/wsa:To&amp;quot;;               //wsa303&lt;br /&gt;
            const string transportHeader = Header + &amp;quot;/egisz:transportHeader&amp;quot;;               //TRHEAD&lt;br /&gt;
            const string Security = Header + &amp;quot;/wsse:Security&amp;quot;;&lt;br /&gt;
            const string ClinicalDocument = Envelope + &amp;quot;/SOAP-ENV:Body/ClinicalDocument&amp;quot;;&lt;br /&gt;
            const string Body = Envelope + &amp;quot;/SOAP-ENV:Body&amp;quot;;&lt;br /&gt;
            XmlDocument doc = new XmlDocument();&lt;br /&gt;
            doc.Load(new XmlTextReader(_filenameXML));&lt;br /&gt;
            var ns = new XmlNamespaceManager(doc.NameTable);&lt;br /&gt;
            ns.AddNamespace(&amp;quot;SOAP-ENV&amp;quot;, &amp;quot;http://www.w3.org/2003/05/soap-envelope&amp;quot;);&lt;br /&gt;
            ns.AddNamespace(&amp;quot;wsa&amp;quot;, &amp;quot;http://www.w3.org/2005/08/addressing&amp;quot;);&lt;br /&gt;
            ns.AddNamespace(&amp;quot;egisz&amp;quot;, &amp;quot;http://egisz.rosminzdrav.ru&amp;quot;);&lt;br /&gt;
            XmlElement root = doc.DocumentElement;                      // Полный xml файл&lt;br /&gt;
//            Console.WriteLine(root.InnerXml); Console.ReadKey();&lt;br /&gt;
                    // Ищем тег Body, с нэмспейсом&lt;br /&gt;
                    XmlNode BodyInfo = doc.SelectSingleNode(Body, ns);&lt;br /&gt;
                    String BodyFile = BodyInfo.OuterXml;        // Получаем полное содержимое тега Body&lt;br /&gt;
                    sw.Write(&amp;quot;BodyFromFile=      &amp;quot;); sw.WriteLine(BodyFile); // Пишем исходное body в файл&lt;br /&gt;
                    byte[] result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(BodyFile));&lt;br /&gt;
                    sw.Write(&amp;quot;HashBodyFile=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result)); // Пишем хэш исходного body&lt;br /&gt;
                    // Приводим тэг Body  к канонической форме&lt;br /&gt;
                    String BodyCan2 = Canonicalization(BodyInfo);&lt;br /&gt;
                    sw.Write(&amp;quot;CanonicalBody=     &amp;quot;); sw.WriteLine(BodyCan2);&lt;br /&gt;
                    result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(BodyCan2));&lt;br /&gt;
                    sw.Write(&amp;quot;HashCanonicalBody= &amp;quot;); sw.WriteLine(Convert.ToBase64String(result));&lt;br /&gt;
                    export_can_node(BodyCan2, &amp;quot;doc/Body_cann&amp;quot;);   // экспорт результата каноникализации в файл&lt;br /&gt;
                    sw.WriteLine(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
                        // Ищем тег Action, с нэмспейсом&lt;br /&gt;
                        XmlNode Wsa300Info = doc.SelectSingleNode(Action, ns);&lt;br /&gt;
                        String WSA300File = Wsa300Info.OuterXml;        // Получаем полное содержимое тега &lt;br /&gt;
                        sw.Write(&amp;quot;WSA300FromFile=      &amp;quot;); sw.WriteLine(WSA300File); // Пишем исходное в файл&lt;br /&gt;
                        result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(WSA300File));&lt;br /&gt;
                        sw.Write(&amp;quot;HashWSA300File=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result)); // Пишем хэш исходного body&lt;br /&gt;
                        // Приводим тэг к канонической форме&lt;br /&gt;
                        String WSACan2 = Canonicalization(Wsa300Info);&lt;br /&gt;
                        sw.Write(&amp;quot;CanonicalWSA300=     &amp;quot;); sw.WriteLine(WSACan2);&lt;br /&gt;
                        result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(WSACan2));&lt;br /&gt;
                        sw.Write(&amp;quot;HashCanonicalWSA300= &amp;quot;); sw.WriteLine(Convert.ToBase64String(result));&lt;br /&gt;
                        export_can_node(WSACan2, &amp;quot;doc/WSA300_cann&amp;quot;);   // экспорт результата каноникализации в файл&lt;br /&gt;
                        sw.WriteLine(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
                    XmlNode WSA301Info = doc.SelectSingleNode(MessageID, ns);&lt;br /&gt;
                    sw.Write(&amp;quot;WSA301FromFile=      &amp;quot;); sw.WriteLine(WSA301Info.OuterXml); // Пишем исходное в файл&lt;br /&gt;
                    result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(WSA301Info.OuterXml));&lt;br /&gt;
                    sw.Write(&amp;quot;HashWSA301File=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result)); // Пишем хэш исходного&lt;br /&gt;
                    // Приводим тэг к канонической форме&lt;br /&gt;
                    sw.Write(&amp;quot;CanonicalWSA301=     &amp;quot;); sw.WriteLine(Canonicalization(WSA301Info));&lt;br /&gt;
                    result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(Canonicalization(WSA301Info)));&lt;br /&gt;
                    sw.Write(&amp;quot;HashWSA301Cann=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result));&lt;br /&gt;
                    export_can_node(Canonicalization(WSA301Info), &amp;quot;doc/WSA301_cann&amp;quot;);   // экспорт результата каноникализации в файл&lt;br /&gt;
                    sw.WriteLine(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
                        XmlNode WSA302Info = doc.SelectSingleNode(ReplyTo, ns);&lt;br /&gt;
                        sw.Write(&amp;quot;WSA302FromFile=      &amp;quot;); sw.WriteLine(WSA302Info.OuterXml); // Пишем исходное в файл&lt;br /&gt;
                        result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(WSA302Info.OuterXml));&lt;br /&gt;
                        sw.Write(&amp;quot;HashWSA302File=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result)); // Пишем хэш исходного&lt;br /&gt;
                        // Приводим тэг к канонической форме&lt;br /&gt;
                        sw.Write(&amp;quot;CanonicalWSA302=     &amp;quot;); sw.WriteLine(Canonicalization(WSA302Info));&lt;br /&gt;
                        result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(Canonicalization(WSA302Info)));&lt;br /&gt;
                        sw.Write(&amp;quot;HashWSA302Cann=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result));&lt;br /&gt;
                        export_can_node(Canonicalization(WSA302Info), &amp;quot;doc/WSA302_cann&amp;quot;);   // экспорт результата каноникализации в файл&lt;br /&gt;
                        sw.WriteLine(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
                    XmlNode WSA303Info = doc.SelectSingleNode(To, ns);&lt;br /&gt;
                    sw.Write(&amp;quot;WSA303FromFile=      &amp;quot;); sw.WriteLine(WSA303Info.OuterXml); // Пишем исходное в файл&lt;br /&gt;
                    result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(WSA303Info.OuterXml));&lt;br /&gt;
                    sw.Write(&amp;quot;HashWSA303File=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result)); // Пишем хэш исходного&lt;br /&gt;
                    // Приводим тэг к канонической форме&lt;br /&gt;
                    sw.Write(&amp;quot;CanonicalWSA303=     &amp;quot;); sw.WriteLine(Canonicalization(WSA303Info));&lt;br /&gt;
                    result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(Canonicalization(WSA303Info)));&lt;br /&gt;
                    sw.Write(&amp;quot;HashWSA303Cann=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result));&lt;br /&gt;
                    export_can_node(Canonicalization(WSA303Info), &amp;quot;doc/WSA303_cann&amp;quot;);   // экспорт результата каноникализации в файл&lt;br /&gt;
                    sw.WriteLine(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
                        XmlNode TRHEADInfo = doc.SelectSingleNode(transportHeader, ns);&lt;br /&gt;
                        sw.Write(&amp;quot;TRHEADFromFile=      &amp;quot;); sw.WriteLine(TRHEADInfo.OuterXml); // Пишем исходное в файл&lt;br /&gt;
                        result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(TRHEADInfo.OuterXml));&lt;br /&gt;
                        sw.Write(&amp;quot;HashTRHEADFile=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result)); // Пишем хэш исходного&lt;br /&gt;
                        // Приводим тэг к канонической форме&lt;br /&gt;
                        sw.Write(&amp;quot;CanonicalTRHEAD=     &amp;quot;); sw.WriteLine(Canonicalization(TRHEADInfo));&lt;br /&gt;
                        result = gost3411.ComputeHash(Encoding.UTF8.GetBytes(Canonicalization(TRHEADInfo)));&lt;br /&gt;
                        sw.Write(&amp;quot;HashTRHEADCann=      &amp;quot;); sw.WriteLine(Convert.ToBase64String(result));&lt;br /&gt;
                        export_can_node(Canonicalization(TRHEADInfo), &amp;quot;doc/WSATRHEAD_cann&amp;quot;);   // экспорт результата каноникализации в файл&lt;br /&gt;
                        sw.WriteLine(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//            Console.WriteLine(signedInfo.InnerXml); Console.ReadKey();&lt;br /&gt;
            sw.Close();&lt;br /&gt;
            return;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D1%81%D1%82%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=3555</id>
		<title>Скрипт выгрузки льготников (чернобыльцев), получивших стационарную помощь</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D1%81%D1%82%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=3555"/>
		<updated>2015-04-01T17:13:09Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
&amp;quot;\\TS\MySQL\bin\mysql.exe&amp;quot; --host=10.35.0.93 --default-character-set cp1251 --character-sets-dir &amp;quot;\\TS\MySQL\bin\share\charsets &amp;quot; --database  statistics -udas -p12qwasZX &amp;lt; &amp;quot;C:\client\my_scripts\Talanova\1kv2015\stac_1_kv2015_norm.sql&amp;quot; &amp;gt;stac_31-03-2015n.res&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*****&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
SELECT people.UNICOD, people.birthDate,tmp.id,CASE WHEN tmp.numberPolis &amp;lt;&amp;gt; &#039;&#039; THEN tmp.numberPolis ELSE &#039;Не найдено&#039;  END AS Полис,&lt;br /&gt;
  people_document.NAME, office.name AS &#039;ЛПУ&#039;, privelege.name AS &#039;Наименование льготы&#039;,  privelege.codOut,  privelege.cod,&lt;br /&gt;
  dynpeople.sDate AS &#039;Дата начала лечения&#039;,&lt;br /&gt;
  dynpeople.eDate  AS &#039;Дата окончания лечения&#039;, dynpeople.idlpu AS IDLPU,  dynpeople.codDS&lt;br /&gt;
FROM dynpeople&lt;br /&gt;
  LEFT OUTER JOIN (SELECT&lt;br /&gt;
      people_polis_1.numberPolis,&lt;br /&gt;
      people_polis_1.sDatePolis,&lt;br /&gt;
      people_polis_1.eDatePolis,&lt;br /&gt;
      people_polis_1.id,&lt;br /&gt;
      people_polis_1.idlpu&lt;br /&gt;
    FROM people_polis people_polis_1) tmp&lt;br /&gt;
    ON tmp.id = dynpeople.idPeople AND tmp.idlpu = dynpeople.idlpu AND tmp.sDatePolis &amp;lt; dynpeople.sDate AND tmp.eDatePolis &amp;gt;= dynpeople.sDate&lt;br /&gt;
  RIGHT OUTER JOIN people_lgot&lt;br /&gt;
    ON people_lgot.id = tmp.id AND people_lgot.idlpu = tmp.idlpu&lt;br /&gt;
  LEFT OUTER JOIN privelege&lt;br /&gt;
    ON people_lgot.idLgot = privelege.unicod&lt;br /&gt;
  RIGHT OUTER JOIN people&lt;br /&gt;
    ON people_lgot.idlpu = people.idlpu AND people_lgot.id = people.unicod AND dynpeople.idPeople = people.unicod AND dynpeople.idlpu = people.idlpu&lt;br /&gt;
  LEFT OUTER JOIN people_document&lt;br /&gt;
    ON people.idlpu = people_document.idlpu AND people.unicod = people_document.id&lt;br /&gt;
LEFT OUTER JOIN office&lt;br /&gt;
  ON office.idlpu=tmp.idlpu AND office.statusLPU=1&lt;br /&gt;
WHERE (dynpeople.NHist IS NOT NULL) AND privelege.codOut = &#039;010&#039; AND (year(dynpeople.edate) = 2015) AND (month(dynpeople.edate) &amp;lt; 4)&lt;br /&gt;
ORDER BY people.UNICOD;&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D0%B0%D0%BC%D0%B1%D1%83%D0%BB%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=3554</id>
		<title>Скрипт выгрузки льготников (чернобыльцев), получивших амбулаторную помощь</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D0%B0%D0%BC%D0%B1%D1%83%D0%BB%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=3554"/>
		<updated>2015-04-01T17:06:40Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
set datetemp=start.tmp&lt;br /&gt;
@echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot;&lt;br /&gt;
&amp;quot;\\TS\MySQL\bin\mysql.exe&amp;quot; --host=10.35.0.93 --default-character-set cp1251 --character-sets-dir &amp;quot;\\TS\MySQL\bin\share\charsets &amp;quot; --database  statistics -udas -p12qwasZX &amp;lt; &amp;quot;C:\client\my_scripts\Talanova\1kv2015\policl_1kv2015.sql&amp;quot; &amp;gt;pol_31-03-2015n.res&lt;br /&gt;
set datetemp=stop.tmp&lt;br /&gt;
@echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot;&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
****&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
SELECT people.UNICOD, people.birthDate,tmp.id,CASE WHEN tmp.numberPolis &amp;lt;&amp;gt; &#039;&#039; THEN tmp.numberPolis ELSE &#039;Не найдено&#039;  END AS Полис,&lt;br /&gt;
  people_document.NAME, privelege.name AS &#039;Наименование льготы&#039;,  privelege.codOut,  privelege.cod,  uslugappl.sDate AS &#039;Дата посещения&#039;,&lt;br /&gt;
  uslugappl.eDate AS &#039;Завершено посещение&#039;, uslugappl.idlpu AS IDLPU, office.name AS &#039;ЛПУ&#039;, uslugappl.codDS&lt;br /&gt;
FROM uslugappl&lt;br /&gt;
  LEFT OUTER JOIN (SELECT&lt;br /&gt;
      people_polis_1.numberPolis,&lt;br /&gt;
      people_polis_1.sDatePolis,&lt;br /&gt;
      people_polis_1.eDatePolis,&lt;br /&gt;
      people_polis_1.id,&lt;br /&gt;
      people_polis_1.idlpu&lt;br /&gt;
    FROM people_polis people_polis_1) tmp&lt;br /&gt;
    ON tmp.id = uslugappl.idPeople AND tmp.idlpu = uslugappl.idlpu AND tmp.sDatePolis &amp;lt; uslugappl.sDate AND tmp.eDatePolis &amp;gt;= uslugappl.sDate&lt;br /&gt;
  RIGHT OUTER JOIN people_lgot&lt;br /&gt;
    ON people_lgot.id = tmp.id AND people_lgot.idlpu = tmp.idlpu&lt;br /&gt;
  LEFT OUTER JOIN privelege&lt;br /&gt;
    ON people_lgot.idLgot = privelege.unicod&lt;br /&gt;
  RIGHT OUTER JOIN people&lt;br /&gt;
    ON people_lgot.idlpu = people.idlpu AND people_lgot.id = people.unicod AND uslugappl.idPeople = people.unicod AND uslugappl.idlpu = people.idlpu&lt;br /&gt;
  LEFT OUTER JOIN people_document&lt;br /&gt;
    ON people.idlpu = people_document.idlpu AND people.unicod = people_document.id&lt;br /&gt;
LEFT OUTER JOIN office&lt;br /&gt;
  ON office.idlpu=tmp.idlpu AND office.statusLPU=1&lt;br /&gt;
WHERE privelege.codOut = &#039;010&#039; AND uslugappl.YED = 2015 AND MONTH(uslugappl.eDate) &amp;lt; 4&lt;br /&gt;
ORDER BY people.UNICOD&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D1%81%D1%82%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=3553</id>
		<title>Скрипт выгрузки льготников (чернобыльцев), получивших стационарную помощь</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D1%81%D1%82%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=3553"/>
		<updated>2015-04-01T17:05:19Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «&amp;lt;PRE&amp;gt; set datetemp=start.tmp @echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot; &amp;quot;\\TS\MySQL\bin\mysql.exe&amp;quot; --host=10.35.0.93 --default-character-set cp125…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
set datetemp=start.tmp&lt;br /&gt;
@echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot;&lt;br /&gt;
&amp;quot;\\TS\MySQL\bin\mysql.exe&amp;quot; --host=10.35.0.93 --default-character-set cp1251 --character-sets-dir &amp;quot;\\TS\MySQL\bin\share\charsets &amp;quot; --database  statistics -udas -p12qwasZX &amp;lt; &amp;quot;C:\client\my_scripts\Talanova\1kv2015\policl_1kv2015.sql&amp;quot; &amp;gt;pol_31-03-2015n.res&lt;br /&gt;
set datetemp=stop.tmp&lt;br /&gt;
@echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot;&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*****&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
SELECT people.UNICOD, people.birthDate,tmp.id,CASE WHEN tmp.numberPolis &amp;lt;&amp;gt; &#039;&#039; THEN tmp.numberPolis ELSE &#039;Не найдено&#039;  END AS Полис,&lt;br /&gt;
  people_document.NAME, office.name AS &#039;ЛПУ&#039;, privelege.name AS &#039;Наименование льготы&#039;,  privelege.codOut,  privelege.cod,&lt;br /&gt;
  dynpeople.sDate AS &#039;Дата начала лечения&#039;,&lt;br /&gt;
  dynpeople.eDate  AS &#039;Дата окончания лечения&#039;, dynpeople.idlpu AS IDLPU,  dynpeople.codDS&lt;br /&gt;
FROM dynpeople&lt;br /&gt;
  LEFT OUTER JOIN (SELECT&lt;br /&gt;
      people_polis_1.numberPolis,&lt;br /&gt;
      people_polis_1.sDatePolis,&lt;br /&gt;
      people_polis_1.eDatePolis,&lt;br /&gt;
      people_polis_1.id,&lt;br /&gt;
      people_polis_1.idlpu&lt;br /&gt;
    FROM people_polis people_polis_1) tmp&lt;br /&gt;
    ON tmp.id = dynpeople.idPeople AND tmp.idlpu = dynpeople.idlpu AND tmp.sDatePolis &amp;lt; dynpeople.sDate AND tmp.eDatePolis &amp;gt;= dynpeople.sDate&lt;br /&gt;
  RIGHT OUTER JOIN people_lgot&lt;br /&gt;
    ON people_lgot.id = tmp.id AND people_lgot.idlpu = tmp.idlpu&lt;br /&gt;
  LEFT OUTER JOIN privelege&lt;br /&gt;
    ON people_lgot.idLgot = privelege.unicod&lt;br /&gt;
  RIGHT OUTER JOIN people&lt;br /&gt;
    ON people_lgot.idlpu = people.idlpu AND people_lgot.id = people.unicod AND dynpeople.idPeople = people.unicod AND dynpeople.idlpu = people.idlpu&lt;br /&gt;
  LEFT OUTER JOIN people_document&lt;br /&gt;
    ON people.idlpu = people_document.idlpu AND people.unicod = people_document.id&lt;br /&gt;
LEFT OUTER JOIN office&lt;br /&gt;
  ON office.idlpu=tmp.idlpu AND office.statusLPU=1&lt;br /&gt;
WHERE (dynpeople.NHist IS NOT NULL) AND privelege.codOut = &#039;010&#039; AND (year(dynpeople.edate) = 2015) AND (month(dynpeople.edate) &amp;lt; 4)&lt;br /&gt;
ORDER BY people.UNICOD;&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D0%B0%D0%BC%D0%B1%D1%83%D0%BB%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=3552</id>
		<title>Скрипт выгрузки льготников (чернобыльцев), получивших амбулаторную помощь</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%BB%D1%8C%D0%B3%D0%BE%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_(%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B1%D1%8B%D0%BB%D1%8C%D1%86%D0%B5%D0%B2),_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%B2%D1%88%D0%B8%D1%85_%D0%B0%D0%BC%D0%B1%D1%83%D0%BB%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%83%D1%8E_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C&amp;diff=3552"/>
		<updated>2015-04-01T17:04:00Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «&amp;lt;PRE&amp;gt; set datetemp=start.tmp @echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot; &amp;quot;\\TS\MySQL\bin\mysql.exe&amp;quot; --host=10.35.0.93 --default-character-set cp125…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
set datetemp=start.tmp&lt;br /&gt;
@echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot;&lt;br /&gt;
&amp;quot;\\TS\MySQL\bin\mysql.exe&amp;quot; --host=10.35.0.93 --default-character-set cp1251 --character-sets-dir &amp;quot;\\TS\MySQL\bin\share\charsets &amp;quot; --database  statistics -udas -p12qwasZX &amp;lt; &amp;quot;C:\client\my_scripts\Talanova\1kv2015\policl_1kv2015.sql&amp;quot; &amp;gt;pol_31-03-2015n.res&lt;br /&gt;
set datetemp=stop.tmp&lt;br /&gt;
@echo .&amp;gt;&amp;quot;C:\client\my_scripts\Talanova\1kv2015\%DATETEMP%&amp;quot;&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
****&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
SELECT people.UNICOD, people.birthDate,tmp.id,CASE WHEN tmp.numberPolis &amp;lt;&amp;gt; &#039;&#039; THEN tmp.numberPolis ELSE &#039;Не найдено&#039;  END AS Полис,&lt;br /&gt;
  people_document.NAME, office.name AS &#039;ЛПУ&#039;, privelege.name AS &#039;Наименование льготы&#039;,  privelege.codOut,  privelege.cod,&lt;br /&gt;
  dynpeople.sDate AS &#039;Дата начала лечения&#039;,&lt;br /&gt;
  dynpeople.eDate  AS &#039;Дата окончания лечения&#039;, dynpeople.idlpu AS IDLPU,  dynpeople.codDS&lt;br /&gt;
FROM dynpeople&lt;br /&gt;
  LEFT OUTER JOIN (SELECT&lt;br /&gt;
      people_polis_1.numberPolis,&lt;br /&gt;
      people_polis_1.sDatePolis,&lt;br /&gt;
      people_polis_1.eDatePolis,&lt;br /&gt;
      people_polis_1.id,&lt;br /&gt;
      people_polis_1.idlpu&lt;br /&gt;
    FROM people_polis people_polis_1) tmp&lt;br /&gt;
    ON tmp.id = dynpeople.idPeople AND tmp.idlpu = dynpeople.idlpu AND tmp.sDatePolis &amp;lt; dynpeople.sDate AND tmp.eDatePolis &amp;gt;= dynpeople.sDate&lt;br /&gt;
  RIGHT OUTER JOIN people_lgot&lt;br /&gt;
    ON people_lgot.id = tmp.id AND people_lgot.idlpu = tmp.idlpu&lt;br /&gt;
  LEFT OUTER JOIN privelege&lt;br /&gt;
    ON people_lgot.idLgot = privelege.unicod&lt;br /&gt;
  RIGHT OUTER JOIN people&lt;br /&gt;
    ON people_lgot.idlpu = people.idlpu AND people_lgot.id = people.unicod AND dynpeople.idPeople = people.unicod AND dynpeople.idlpu = people.idlpu&lt;br /&gt;
  LEFT OUTER JOIN people_document&lt;br /&gt;
    ON people.idlpu = people_document.idlpu AND people.unicod = people_document.id&lt;br /&gt;
LEFT OUTER JOIN office&lt;br /&gt;
  ON office.idlpu=tmp.idlpu AND office.statusLPU=1&lt;br /&gt;
WHERE (dynpeople.NHist IS NOT NULL) AND privelege.codOut = &#039;010&#039; AND (year(dynpeople.edate) = 2015) AND (month(dynpeople.edate) &amp;lt; 4)&lt;br /&gt;
ORDER BY people.UNICOD;&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B&amp;diff=3551</id>
		<title>Скрипты</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B&amp;diff=3551"/>
		<updated>2015-04-01T17:03:02Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Скрипт выгрузки льготников (чернобыльцев), получивших амбулаторную помощь]]&lt;br /&gt;
#[[Скрипт выгрузки льготников (чернобыльцев), получивших стационарную помощь]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_Crypto_Pro&amp;diff=3550</id>
		<title>Подпись ИЭМК с помощью Crypto Pro</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_Crypto_Pro&amp;diff=3550"/>
		<updated>2015-04-01T16:59:30Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «Подпись с помощью CryptoPro 1. Установка Crypro Pro. 2. Установка Crypro Pro.Net 3. Установка Crypro Pro.Net SDK  &amp;lt;pre&amp;gt;…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Подпись с помощью CryptoPro&lt;br /&gt;
1. Установка Crypro Pro.&lt;br /&gt;
2. Установка Crypro Pro.Net&lt;br /&gt;
3. Установка Crypro Pro.Net SDK&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Security.Cryptography.X509Certificates;&lt;br /&gt;
using System.Xml;&lt;br /&gt;
using System.Xml.Linq;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
using System.Security.Cryptography.Xml;&lt;br /&gt;
using CryptoPro.Sharpei;&lt;br /&gt;
using CryptoPro.Sharpei.Xml;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
namespace Samples.Xml.cs&lt;br /&gt;
{&lt;br /&gt;
    class SignSmevRequest&lt;br /&gt;
    {&lt;br /&gt;
        [STAThread]&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            X509Store certStore = new X509Store(StoreLocation.CurrentUser);&lt;br /&gt;
            certStore.Open(OpenFlags.ReadOnly);&lt;br /&gt;
            X509Certificate2Collection certs = X509Certificate2UI.SelectFromCollection(&lt;br /&gt;
                certStore.Certificates,&lt;br /&gt;
                &amp;quot;Выберите сертификат&amp;quot;,&lt;br /&gt;
                &amp;quot;Пожалуйста, выберите сертификат электронной подписи&amp;quot;,&lt;br /&gt;
                X509SelectionFlag.SingleSelection);&lt;br /&gt;
            if (certs.Count == 0)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&amp;quot;Сертификат не выбран.&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            // Подписываем запрос&lt;br /&gt;
            SignXmlFile(args[0], args[1], certs[0]);&lt;br /&gt;
&lt;br /&gt;
            // Проверяем подпись&lt;br /&gt;
            VerifyXmlFile(args[1]);&lt;br /&gt;
&lt;br /&gt;
            Console.ReadKey();&lt;br /&gt;
        }&lt;br /&gt;
        static void SignXmlFile(string FileName, string SignedFileName, X509Certificate2 Certificate)&lt;br /&gt;
        {&lt;br /&gt;
            // Создаем новый документ XML.&lt;br /&gt;
            XmlDocument doc = new XmlDocument();&lt;br /&gt;
            doc.PreserveWhitespace = true;&lt;br /&gt;
            // Читаем документ из файла.&lt;br /&gt;
            doc.Load(new XmlTextReader(FileName));&lt;br /&gt;
            // Создаём объект SmevSignedXml - наследник класса SignedXml с перегруженным GetIdElement&lt;br /&gt;
            // для корректной обработки атрибута wsu:Id. &lt;br /&gt;
            SmevSignedXml signedXml = new SmevSignedXml(doc);&lt;br /&gt;
            // Задаём ключ подписи для документа SmevSignedXml.&lt;br /&gt;
            signedXml.SigningKey = Certificate.PrivateKey;&lt;br /&gt;
            var sign = Certificate.PrivateKey;&lt;br /&gt;
            // Создаем ссылку на подписываемый узел XML. В данном примере и в методических&lt;br /&gt;
            // рекомендациях СМЭВ подписываемый узел soapenv:Body помечен идентификатором &amp;quot;body&amp;quot;.&lt;br /&gt;
            Reference reference = new Reference();&lt;br /&gt;
            reference.Uri = &amp;quot;#BODY&amp;quot;;&lt;br /&gt;
            // Задаём алгоритм хэширования подписываемого узла - ГОСТ Р 34.11-94. Необходимо&lt;br /&gt;
            // использовать устаревший идентификатор данного алгоритма, т.к. именно такой&lt;br /&gt;
            // идентификатор используется в СМЭВ.&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            //warning CS0612: &#039;CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete&#039; is obsolete&lt;br /&gt;
            reference.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
&lt;br /&gt;
            // Добавляем преобразование для приведения подписываемого узла к каноническому виду&lt;br /&gt;
            // по алгоритму http://www.w3.org/2001/10/xml-exc-c14n# в соответствии с методическими&lt;br /&gt;
            // рекомендациями СМЭВ.&lt;br /&gt;
            XmlDsigExcC14NTransform c14 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            reference.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(reference);&lt;br /&gt;
            // #wsa-300 !MessageID&lt;br /&gt;
            Reference referenceWSA300 = new Reference();&lt;br /&gt;
            referenceWSA300.Uri = &amp;quot;#WSA-300&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceWSA300.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceWSA300.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceWSA300);&lt;br /&gt;
// #wsa-301 !Action&lt;br /&gt;
            Reference referenceWSA301 = new Reference();&lt;br /&gt;
            referenceWSA301.Uri = &amp;quot;#WSA-301&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceWSA301.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceWSA301.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceWSA301);&lt;br /&gt;
// WSA-302 ! ReplyTo&lt;br /&gt;
            Reference referenceWSA302 = new Reference();&lt;br /&gt;
            referenceWSA302.Uri = &amp;quot;#WSA-302&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceWSA302.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceWSA302.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceWSA302);&lt;br /&gt;
// WSA-303 ! To&lt;br /&gt;
            Reference referenceWSA303 = new Reference();&lt;br /&gt;
            referenceWSA303.Uri = &amp;quot;#WSA-303&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceWSA303.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceWSA303.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceWSA303);&lt;br /&gt;
&lt;br /&gt;
//  #TRHEAD&lt;br /&gt;
            Reference referenceTH = new Reference();&lt;br /&gt;
            referenceTH.Uri = &amp;quot;#TRHEAD&amp;quot;;&lt;br /&gt;
            #pragma warning disable 612&lt;br /&gt;
            referenceTH.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
            #pragma warning restore 612&lt;br /&gt;
            referenceTH.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceTH);&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
            doc.GetElementsByTagName(&amp;quot;wsse:BinarySecurityToken&amp;quot;)[0].InnerText =&lt;br /&gt;
    Convert.ToBase64String(Certificate.RawData);&lt;br /&gt;
&lt;br /&gt;
            //  #SenderCertificate&lt;br /&gt;
            Reference referenceSS = new Reference();&lt;br /&gt;
            referenceSS.Uri = &amp;quot;#CertId&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceSS.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceSS.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceSS);&lt;br /&gt;
&lt;br /&gt;
            // Задаём преобразование для приведения узла ds:SignedInfo к каноническому виду&lt;br /&gt;
            // по алгоритму http://www.w3.org/2001/10/xml-exc-c14n# в соответствии с методическими&lt;br /&gt;
            // рекомендациями СМЭВ.&lt;br /&gt;
            signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;&lt;br /&gt;
&lt;br /&gt;
            // Задаём алгоритм подписи - ГОСТ Р 34.10-2001. Необходимо использовать устаревший&lt;br /&gt;
            // идентификатор данного алгоритма, т.к. именно такой идентификатор используется в&lt;br /&gt;
            // СМЭВ.&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            //warning CS0612: &#039;CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete&#039; is obsolete&lt;br /&gt;
            signedXml.SignedInfo.SignatureMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3410UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
&lt;br /&gt;
            // Вычисляем подпись.&lt;br /&gt;
&lt;br /&gt;
            signedXml.ComputeSignature();&lt;br /&gt;
&lt;br /&gt;
            // Получаем представление подписи в виде XML.&lt;br /&gt;
            XmlElement xmlDigitalSignature = signedXml.GetXml();&lt;br /&gt;
&lt;br /&gt;
            // Добавляем необходимые узлы подписи в исходный документ в заготовленное место.&lt;br /&gt;
            doc.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(&lt;br /&gt;
                doc.ImportNode(xmlDigitalSignature.GetElementsByTagName(&amp;quot;SignatureValue&amp;quot;)[0], true));&lt;br /&gt;
            doc.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(&lt;br /&gt;
                doc.ImportNode(xmlDigitalSignature.GetElementsByTagName(&amp;quot;SignedInfo&amp;quot;)[0], true));&lt;br /&gt;
&lt;br /&gt;
            // Добавляем сертификат в исходный документ в заготовленный узел&lt;br /&gt;
            // wsse:BinarySecurityToken.&lt;br /&gt;
            doc.GetElementsByTagName(&amp;quot;wsse:BinarySecurityToken&amp;quot;)[0].InnerText =&lt;br /&gt;
                Convert.ToBase64String(Certificate.RawData);&lt;br /&gt;
            // Сохраняем подписанный документ в файл.&lt;br /&gt;
            using (XmlTextWriter xmltw = new XmlTextWriter(SignedFileName,&lt;br /&gt;
                new UTF8Encoding(false)))&lt;br /&gt;
            {&lt;br /&gt;
                doc.WriteTo(xmltw);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        static void VerifyXmlFile(string SignedFileName)&lt;br /&gt;
        {&lt;br /&gt;
            // Создаем новый документ XML.&lt;br /&gt;
            XmlDocument xmlDocument = new XmlDocument();&lt;br /&gt;
&lt;br /&gt;
            // Форматируем документ с сохранением всех пробельных символов, т.к. они&lt;br /&gt;
            // важны при проверке подписи.&lt;br /&gt;
            xmlDocument.PreserveWhitespace = true;&lt;br /&gt;
&lt;br /&gt;
            // Загружаем подписанный документ XML из файла.&lt;br /&gt;
            xmlDocument.Load(SignedFileName);&lt;br /&gt;
&lt;br /&gt;
            // Ищем все узлы ds:Signature и сохраняем их в объекте XmlNodeList&lt;br /&gt;
            XmlNodeList nodeList = xmlDocument.GetElementsByTagName(&lt;br /&gt;
                &amp;quot;Signature&amp;quot;, SignedXml.XmlDsigNamespaceUrl);&lt;br /&gt;
&lt;br /&gt;
            Console.WriteLine(&amp;quot;Найдено подписей: {0}.&amp;quot;, nodeList.Count);&lt;br /&gt;
&lt;br /&gt;
            // Проверяем все подписи.&lt;br /&gt;
            for (int curSignature = 0; curSignature &amp;lt; nodeList.Count; curSignature++)&lt;br /&gt;
            {&lt;br /&gt;
                // Создаём объект SmevSignedXml - наследник класса SignedXml с перегруженным&lt;br /&gt;
                // GetIdElement для корректной обработки атрибута wsu:Id. &lt;br /&gt;
                SmevSignedXml signedXml = new SmevSignedXml(xmlDocument);&lt;br /&gt;
&lt;br /&gt;
                // Загружаем узел с подписью.&lt;br /&gt;
                signedXml.LoadXml((XmlElement)nodeList[curSignature]);&lt;br /&gt;
&lt;br /&gt;
                // Получаем идентификатор ссылки на узел wsse:BinarySecurityToken,&lt;br /&gt;
                // содержащий сертификат подписи.&lt;br /&gt;
                XmlNodeList referenceList = signedXml.KeyInfo.GetXml().GetElementsByTagName(&lt;br /&gt;
                    &amp;quot;Reference&amp;quot;, WSSecurityWSSENamespaceUrl);&lt;br /&gt;
                if (referenceList.Count == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    throw new XmlException(&amp;quot;Не удалось найти ссылку на сертификат&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Ищем среди аттрибутов ссылку на сертификат.&lt;br /&gt;
                string binaryTokenReference = ((XmlElement)referenceList[0]).GetAttribute(&amp;quot;URI&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                // Ссылка должна быть на узел внутри данного документа XML, т.е. она имеет вид&lt;br /&gt;
                // #ID, где ID - идентификатор целевого узла&lt;br /&gt;
                if (string.IsNullOrEmpty(binaryTokenReference) || binaryTokenReference[0] != &#039;#&#039;)&lt;br /&gt;
                {&lt;br /&gt;
                    throw new XmlException(&amp;quot;Не удалось найти ссылку на сертификат&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Получаем узел BinarySecurityToken с закодированным в base64 сертификатом&lt;br /&gt;
                XmlElement binaryTokenElement = signedXml.GetIdElement(&lt;br /&gt;
                    xmlDocument, binaryTokenReference.Substring(1));&lt;br /&gt;
                if (binaryTokenElement == null)&lt;br /&gt;
                {&lt;br /&gt;
                    throw new XmlException(&amp;quot;Не удалось найти сертификат&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Создаём объект X509Certificate2&lt;br /&gt;
                X509Certificate2 cert =&lt;br /&gt;
                    new X509Certificate2(Convert.FromBase64String(binaryTokenElement.InnerText));&lt;br /&gt;
&lt;br /&gt;
                // Проверяем подпись.&lt;br /&gt;
                // ВНИМАНИЕ! Проверка сертификата в данном примере не осуществляется. Её необходимо&lt;br /&gt;
                // реализовать самостоятельно в соответствии с требованиями к подписи проверяемого&lt;br /&gt;
                // типа сообщения СМЭВ.&lt;br /&gt;
                bool result = signedXml.CheckSignature(cert.PublicKey.Key);&lt;br /&gt;
                // Выводим результат проверки подписи в консоль&lt;br /&gt;
                if (result)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Подпись №{0} верна.&amp;quot;, curSignature + 1);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Подпись №{0} не верна.&amp;quot;, curSignature + 1);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        class SmevSignedXml : SignedXml&lt;br /&gt;
        {&lt;br /&gt;
            public SmevSignedXml(XmlDocument document)&lt;br /&gt;
                : base(document)&lt;br /&gt;
            {&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            public override XmlElement GetIdElement(XmlDocument document, string idValue)&lt;br /&gt;
            {&lt;br /&gt;
                XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);&lt;br /&gt;
                nsmgr.AddNamespace(&amp;quot;wsu&amp;quot;, WSSecurityWSUNamespaceUrl);&lt;br /&gt;
                return document.SelectSingleNode(&amp;quot;//*[@wsu:Id=&#039;&amp;quot; + idValue + &amp;quot;&#039;]&amp;quot;, nsmgr) as XmlElement;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public const string WSSecurityWSSENamespaceUrl = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&amp;quot;;&lt;br /&gt;
        public const string WSSecurityWSUNamespaceUrl = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B&amp;diff=3549</id>
		<title>Скрипты</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B&amp;diff=3549"/>
		<updated>2015-04-01T16:29:01Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Скрипт выгрузки льготников, получивших амбулаторную помощь]]&lt;br /&gt;
#[[Скрипт выгрузки льготников, получивших стационарную помощь]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B&amp;diff=3548</id>
		<title>Скрипты</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B&amp;diff=3548"/>
		<updated>2015-04-01T16:28:32Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «#Скрипт выгрузки льготников, получивших амбулаторную помощь () #Скрипт выгрузки льгот…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Скрипт выгрузки льготников, получивших амбулаторную помощь ()]]&lt;br /&gt;
#[[Скрипт выгрузки льготников, получивших стационарную помощь ()]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%A0%D0%9C%D0%98%D0%A1&amp;diff=3547</id>
		<title>РМИС</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A0%D0%9C%D0%98%D0%A1&amp;diff=3547"/>
		<updated>2015-04-01T16:27:59Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «#Скрипты»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Скрипты]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=3546</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=3546"/>
		<updated>2015-04-01T16:26:25Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Документация по настройке ip телефонии]]&lt;br /&gt;
#[[Настройка ПО VipNet]]&lt;br /&gt;
#[[Сайты для ЛПУ]]&lt;br /&gt;
#[[Информатизация здравоохранения]]&lt;br /&gt;
#[[Настройка Windows]]&lt;br /&gt;
#[[Документация по настройке Linux mandriva]]&lt;br /&gt;
#[[Документация по настройке Linux Ubuntu]]&lt;br /&gt;
#[[Системы управления содержимым сайта]]&lt;br /&gt;
#[[Clarion for Windows]]&lt;br /&gt;
#[[C sharp]]&lt;br /&gt;
#[[РМИС]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Некоторые полезные ресурсы ==&lt;br /&gt;
* Информацию по работе с этой вики можно найти в [http://meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 руководстве пользователя].&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Help:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Help:FAQ Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=3545</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=3545"/>
		<updated>2015-04-01T16:26:04Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Документация по настройке ip телефонии]]&lt;br /&gt;
#[[Настройка ПО VipNet]]&lt;br /&gt;
#[[Сайты для ЛПУ]]&lt;br /&gt;
#[[Информатизация здравоохранения]]&lt;br /&gt;
#[[Настройка Windows]]&lt;br /&gt;
#[[Документация по настройке Linux mandriva]]&lt;br /&gt;
#[[Документация по настройке Linux Ubuntu]]&lt;br /&gt;
#[[Системы управления содержимым сайта]]&lt;br /&gt;
#[[Clarion for Windows]]&lt;br /&gt;
#[[C sharp]]&lt;br /&gt;
#[[МИС]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Некоторые полезные ресурсы ==&lt;br /&gt;
* Информацию по работе с этой вики можно найти в [http://meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 руководстве пользователя].&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Help:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Help:FAQ Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=C_sharp&amp;diff=3541</id>
		<title>C sharp</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=C_sharp&amp;diff=3541"/>
		<updated>2015-02-13T09:38:14Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#[[Получение хэша от строки по гост 94]]&lt;br /&gt;
#[[Подпись ИЭМК с помощью Crypto Pro]]&lt;br /&gt;
#[[Подпись ИЭМК с помощью VipNet CSP]]&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A&amp;diff=3540</id>
		<title>Подпись ИЭМК</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%98%D0%AD%D0%9C%D0%9A&amp;diff=3540"/>
		<updated>2015-02-13T09:37:17Z</updated>

		<summary type="html">&lt;p&gt;Dmitriy: Новая страница: «Подпись с помощью CryptoPro 1. Установка Crypro Pro. 2. Установка Crypro Pro.Net 3. Установка Crypro Pro.Net SDK  &amp;lt;pre&amp;gt;…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Подпись с помощью CryptoPro&lt;br /&gt;
1. Установка Crypro Pro.&lt;br /&gt;
2. Установка Crypro Pro.Net&lt;br /&gt;
3. Установка Crypro Pro.Net SDK&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Security.Cryptography.X509Certificates;&lt;br /&gt;
using System.Xml;&lt;br /&gt;
using System.Xml.Linq;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
using System.Security.Cryptography.Xml;&lt;br /&gt;
using CryptoPro.Sharpei;&lt;br /&gt;
using CryptoPro.Sharpei.Xml;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
namespace Samples.Xml.cs&lt;br /&gt;
{&lt;br /&gt;
    class SignSmevRequest&lt;br /&gt;
    {&lt;br /&gt;
        [STAThread]&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            X509Store certStore = new X509Store(StoreLocation.CurrentUser);&lt;br /&gt;
            certStore.Open(OpenFlags.ReadOnly);&lt;br /&gt;
            X509Certificate2Collection certs = X509Certificate2UI.SelectFromCollection(&lt;br /&gt;
                certStore.Certificates,&lt;br /&gt;
                &amp;quot;Выберите сертификат&amp;quot;,&lt;br /&gt;
                &amp;quot;Пожалуйста, выберите сертификат электронной подписи&amp;quot;,&lt;br /&gt;
                X509SelectionFlag.SingleSelection);&lt;br /&gt;
            if (certs.Count == 0)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&amp;quot;Сертификат не выбран.&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            // Подписываем запрос&lt;br /&gt;
            SignXmlFile(args[0], args[1], certs[0]);&lt;br /&gt;
&lt;br /&gt;
            // Проверяем подпись&lt;br /&gt;
            VerifyXmlFile(args[1]);&lt;br /&gt;
&lt;br /&gt;
            Console.ReadKey();&lt;br /&gt;
        }&lt;br /&gt;
        static void SignXmlFile(string FileName, string SignedFileName, X509Certificate2 Certificate)&lt;br /&gt;
        {&lt;br /&gt;
            // Создаем новый документ XML.&lt;br /&gt;
            XmlDocument doc = new XmlDocument();&lt;br /&gt;
            doc.PreserveWhitespace = true;&lt;br /&gt;
            // Читаем документ из файла.&lt;br /&gt;
            doc.Load(new XmlTextReader(FileName));&lt;br /&gt;
            // Создаём объект SmevSignedXml - наследник класса SignedXml с перегруженным GetIdElement&lt;br /&gt;
            // для корректной обработки атрибута wsu:Id. &lt;br /&gt;
            SmevSignedXml signedXml = new SmevSignedXml(doc);&lt;br /&gt;
            // Задаём ключ подписи для документа SmevSignedXml.&lt;br /&gt;
            signedXml.SigningKey = Certificate.PrivateKey;&lt;br /&gt;
            var sign = Certificate.PrivateKey;&lt;br /&gt;
            // Создаем ссылку на подписываемый узел XML. В данном примере и в методических&lt;br /&gt;
            // рекомендациях СМЭВ подписываемый узел soapenv:Body помечен идентификатором &amp;quot;body&amp;quot;.&lt;br /&gt;
            Reference reference = new Reference();&lt;br /&gt;
            reference.Uri = &amp;quot;#BODY&amp;quot;;&lt;br /&gt;
            // Задаём алгоритм хэширования подписываемого узла - ГОСТ Р 34.11-94. Необходимо&lt;br /&gt;
            // использовать устаревший идентификатор данного алгоритма, т.к. именно такой&lt;br /&gt;
            // идентификатор используется в СМЭВ.&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            //warning CS0612: &#039;CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete&#039; is obsolete&lt;br /&gt;
            reference.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
&lt;br /&gt;
            // Добавляем преобразование для приведения подписываемого узла к каноническому виду&lt;br /&gt;
            // по алгоритму http://www.w3.org/2001/10/xml-exc-c14n# в соответствии с методическими&lt;br /&gt;
            // рекомендациями СМЭВ.&lt;br /&gt;
            XmlDsigExcC14NTransform c14 = new XmlDsigExcC14NTransform();&lt;br /&gt;
            reference.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(reference);&lt;br /&gt;
            // #wsa-300 !MessageID&lt;br /&gt;
            Reference referenceWSA300 = new Reference();&lt;br /&gt;
            referenceWSA300.Uri = &amp;quot;#WSA-300&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceWSA300.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceWSA300.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceWSA300);&lt;br /&gt;
// #wsa-301 !Action&lt;br /&gt;
            Reference referenceWSA301 = new Reference();&lt;br /&gt;
            referenceWSA301.Uri = &amp;quot;#WSA-301&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceWSA301.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceWSA301.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceWSA301);&lt;br /&gt;
// WSA-302 ! ReplyTo&lt;br /&gt;
            Reference referenceWSA302 = new Reference();&lt;br /&gt;
            referenceWSA302.Uri = &amp;quot;#WSA-302&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceWSA302.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceWSA302.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceWSA302);&lt;br /&gt;
// WSA-303 ! To&lt;br /&gt;
            Reference referenceWSA303 = new Reference();&lt;br /&gt;
            referenceWSA303.Uri = &amp;quot;#WSA-303&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceWSA303.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceWSA303.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceWSA303);&lt;br /&gt;
&lt;br /&gt;
//  #TRHEAD&lt;br /&gt;
            Reference referenceTH = new Reference();&lt;br /&gt;
            referenceTH.Uri = &amp;quot;#TRHEAD&amp;quot;;&lt;br /&gt;
            #pragma warning disable 612&lt;br /&gt;
            referenceTH.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
            #pragma warning restore 612&lt;br /&gt;
            referenceTH.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceTH);&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
            doc.GetElementsByTagName(&amp;quot;wsse:BinarySecurityToken&amp;quot;)[0].InnerText =&lt;br /&gt;
    Convert.ToBase64String(Certificate.RawData);&lt;br /&gt;
&lt;br /&gt;
            //  #SenderCertificate&lt;br /&gt;
            Reference referenceSS = new Reference();&lt;br /&gt;
            referenceSS.Uri = &amp;quot;#CertId&amp;quot;;&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            referenceSS.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
            referenceSS.AddTransform(c14);&lt;br /&gt;
            signedXml.AddReference(referenceSS);&lt;br /&gt;
&lt;br /&gt;
            // Задаём преобразование для приведения узла ds:SignedInfo к каноническому виду&lt;br /&gt;
            // по алгоритму http://www.w3.org/2001/10/xml-exc-c14n# в соответствии с методическими&lt;br /&gt;
            // рекомендациями СМЭВ.&lt;br /&gt;
            signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;&lt;br /&gt;
&lt;br /&gt;
            // Задаём алгоритм подписи - ГОСТ Р 34.10-2001. Необходимо использовать устаревший&lt;br /&gt;
            // идентификатор данного алгоритма, т.к. именно такой идентификатор используется в&lt;br /&gt;
            // СМЭВ.&lt;br /&gt;
#pragma warning disable 612&lt;br /&gt;
            //warning CS0612: &#039;CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete&#039; is obsolete&lt;br /&gt;
            signedXml.SignedInfo.SignatureMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3410UrlObsolete;&lt;br /&gt;
#pragma warning restore 612&lt;br /&gt;
&lt;br /&gt;
            // Вычисляем подпись.&lt;br /&gt;
&lt;br /&gt;
            signedXml.ComputeSignature();&lt;br /&gt;
&lt;br /&gt;
            // Получаем представление подписи в виде XML.&lt;br /&gt;
            XmlElement xmlDigitalSignature = signedXml.GetXml();&lt;br /&gt;
&lt;br /&gt;
            // Добавляем необходимые узлы подписи в исходный документ в заготовленное место.&lt;br /&gt;
            doc.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(&lt;br /&gt;
                doc.ImportNode(xmlDigitalSignature.GetElementsByTagName(&amp;quot;SignatureValue&amp;quot;)[0], true));&lt;br /&gt;
            doc.GetElementsByTagName(&amp;quot;Signature&amp;quot;)[0].PrependChild(&lt;br /&gt;
                doc.ImportNode(xmlDigitalSignature.GetElementsByTagName(&amp;quot;SignedInfo&amp;quot;)[0], true));&lt;br /&gt;
&lt;br /&gt;
            // Добавляем сертификат в исходный документ в заготовленный узел&lt;br /&gt;
            // wsse:BinarySecurityToken.&lt;br /&gt;
            doc.GetElementsByTagName(&amp;quot;wsse:BinarySecurityToken&amp;quot;)[0].InnerText =&lt;br /&gt;
                Convert.ToBase64String(Certificate.RawData);&lt;br /&gt;
            // Сохраняем подписанный документ в файл.&lt;br /&gt;
            using (XmlTextWriter xmltw = new XmlTextWriter(SignedFileName,&lt;br /&gt;
                new UTF8Encoding(false)))&lt;br /&gt;
            {&lt;br /&gt;
                doc.WriteTo(xmltw);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        static void VerifyXmlFile(string SignedFileName)&lt;br /&gt;
        {&lt;br /&gt;
            // Создаем новый документ XML.&lt;br /&gt;
            XmlDocument xmlDocument = new XmlDocument();&lt;br /&gt;
&lt;br /&gt;
            // Форматируем документ с сохранением всех пробельных символов, т.к. они&lt;br /&gt;
            // важны при проверке подписи.&lt;br /&gt;
            xmlDocument.PreserveWhitespace = true;&lt;br /&gt;
&lt;br /&gt;
            // Загружаем подписанный документ XML из файла.&lt;br /&gt;
            xmlDocument.Load(SignedFileName);&lt;br /&gt;
&lt;br /&gt;
            // Ищем все узлы ds:Signature и сохраняем их в объекте XmlNodeList&lt;br /&gt;
            XmlNodeList nodeList = xmlDocument.GetElementsByTagName(&lt;br /&gt;
                &amp;quot;Signature&amp;quot;, SignedXml.XmlDsigNamespaceUrl);&lt;br /&gt;
&lt;br /&gt;
            Console.WriteLine(&amp;quot;Найдено подписей: {0}.&amp;quot;, nodeList.Count);&lt;br /&gt;
&lt;br /&gt;
            // Проверяем все подписи.&lt;br /&gt;
            for (int curSignature = 0; curSignature &amp;lt; nodeList.Count; curSignature++)&lt;br /&gt;
            {&lt;br /&gt;
                // Создаём объект SmevSignedXml - наследник класса SignedXml с перегруженным&lt;br /&gt;
                // GetIdElement для корректной обработки атрибута wsu:Id. &lt;br /&gt;
                SmevSignedXml signedXml = new SmevSignedXml(xmlDocument);&lt;br /&gt;
&lt;br /&gt;
                // Загружаем узел с подписью.&lt;br /&gt;
                signedXml.LoadXml((XmlElement)nodeList[curSignature]);&lt;br /&gt;
&lt;br /&gt;
                // Получаем идентификатор ссылки на узел wsse:BinarySecurityToken,&lt;br /&gt;
                // содержащий сертификат подписи.&lt;br /&gt;
                XmlNodeList referenceList = signedXml.KeyInfo.GetXml().GetElementsByTagName(&lt;br /&gt;
                    &amp;quot;Reference&amp;quot;, WSSecurityWSSENamespaceUrl);&lt;br /&gt;
                if (referenceList.Count == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    throw new XmlException(&amp;quot;Не удалось найти ссылку на сертификат&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Ищем среди аттрибутов ссылку на сертификат.&lt;br /&gt;
                string binaryTokenReference = ((XmlElement)referenceList[0]).GetAttribute(&amp;quot;URI&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                // Ссылка должна быть на узел внутри данного документа XML, т.е. она имеет вид&lt;br /&gt;
                // #ID, где ID - идентификатор целевого узла&lt;br /&gt;
                if (string.IsNullOrEmpty(binaryTokenReference) || binaryTokenReference[0] != &#039;#&#039;)&lt;br /&gt;
                {&lt;br /&gt;
                    throw new XmlException(&amp;quot;Не удалось найти ссылку на сертификат&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Получаем узел BinarySecurityToken с закодированным в base64 сертификатом&lt;br /&gt;
                XmlElement binaryTokenElement = signedXml.GetIdElement(&lt;br /&gt;
                    xmlDocument, binaryTokenReference.Substring(1));&lt;br /&gt;
                if (binaryTokenElement == null)&lt;br /&gt;
                {&lt;br /&gt;
                    throw new XmlException(&amp;quot;Не удалось найти сертификат&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Создаём объект X509Certificate2&lt;br /&gt;
                X509Certificate2 cert =&lt;br /&gt;
                    new X509Certificate2(Convert.FromBase64String(binaryTokenElement.InnerText));&lt;br /&gt;
&lt;br /&gt;
                // Проверяем подпись.&lt;br /&gt;
                // ВНИМАНИЕ! Проверка сертификата в данном примере не осуществляется. Её необходимо&lt;br /&gt;
                // реализовать самостоятельно в соответствии с требованиями к подписи проверяемого&lt;br /&gt;
                // типа сообщения СМЭВ.&lt;br /&gt;
                bool result = signedXml.CheckSignature(cert.PublicKey.Key);&lt;br /&gt;
                // Выводим результат проверки подписи в консоль&lt;br /&gt;
                if (result)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Подпись №{0} верна.&amp;quot;, curSignature + 1);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(&amp;quot;Подпись №{0} не верна.&amp;quot;, curSignature + 1);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        class SmevSignedXml : SignedXml&lt;br /&gt;
        {&lt;br /&gt;
            public SmevSignedXml(XmlDocument document)&lt;br /&gt;
                : base(document)&lt;br /&gt;
            {&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            public override XmlElement GetIdElement(XmlDocument document, string idValue)&lt;br /&gt;
            {&lt;br /&gt;
                XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);&lt;br /&gt;
                nsmgr.AddNamespace(&amp;quot;wsu&amp;quot;, WSSecurityWSUNamespaceUrl);&lt;br /&gt;
                return document.SelectSingleNode(&amp;quot;//*[@wsu:Id=&#039;&amp;quot; + idValue + &amp;quot;&#039;]&amp;quot;, nsmgr) as XmlElement;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public const string WSSecurityWSSENamespaceUrl = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&amp;quot;;&lt;br /&gt;
        public const string WSSecurityWSUNamespaceUrl = &amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitriy</name></author>
	</entry>
</feed>