<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум компьютерной помощи &mdash; Лотус скрипты для работы с XML]]></title>
		<link>http://itpmr.ru/viewtopic.php?id=1119</link>
		<atom:link href="http://itpmr.ru/extern.php?action=feed&amp;tid=1119&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Лотус скрипты для работы с XML».]]></description>
		<lastBuildDate>Thu, 05 Sep 2024 07:40:28 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124981#p124981</link>
			<description><![CDATA[<p>Получить имя файла во вложении.<br /></p><div class="codebox"><pre><code>Strleftback(rtitemA.EmbeddedObjects(0).Source , &quot;.&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Thu, 05 Sep 2024 07:40:28 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124981#p124981</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124977#p124977</link>
			<description><![CDATA[<p>Запись текста в Rich Text поле.</p><p>Вариант с УИ.</p><p>&nbsp; &nbsp; mes2=sdate(0)+&quot;&nbsp; &nbsp;документ отправил для подписи &quot;&amp;Chr(10)+user+&quot; на &quot; + mes3+&quot; &quot;&amp;Chr(10)+&quot; с комментарием: &quot; + curdoc.komment(0)&amp;Chr(10)+&quot; &quot;&amp;Chr(10)<br />&#039;+++++++++++++++++++++++++++++++&nbsp; &nbsp; <br />&nbsp; &nbsp; Call uidoc.FieldSetText(&quot;tmpadmh&quot;,uidoc.FieldGetText(&quot;adminhistory&quot;))<br />&nbsp; &nbsp; Call uidoc.FieldClear(&quot;adminhistory&quot;)<br />&nbsp; &nbsp; Call uidoc.FieldSetText(&quot;adminhistory&quot;,mes2)<br />&nbsp; &nbsp; Call uidoc.FieldAppendText(&quot;adminhistory&quot;,uidoc.FieldGetText(&quot;tmpadmh&quot;))<br />&nbsp; &nbsp; Call uidoc.FieldClear(&quot;tmpadmh&quot;)<br />&nbsp; &nbsp; Call uidoc.Refresh(True)<br />&#039;+++++++++++++++++++++++++++++++&nbsp; &nbsp; <br />&nbsp; &nbsp; mes=curdoc.dohistory(0)<br />&nbsp; &nbsp; curdoc.dohistory=mes2+mes</p><br /><p>вариант 2<br />formul$=&nbsp; &quot;В &quot; + Cstr(Now) + &quot; документ XML сформирован (&quot; + session.CommonUserName + &quot;).&quot; &amp;Chr(13)+&quot; &quot;&amp;Chr(13)&nbsp; &nbsp;<br />&nbsp; &nbsp; &#039;Msgbox formul$<br />&nbsp; doc.ИСТОРИЯ =&nbsp; formul$&nbsp; + doc.ИСТОРИЯ</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Tue, 03 Sep 2024 13:29:30 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124977#p124977</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124871#p124871</link>
			<description><![CDATA[<p>&#039;Const type_prov=123 &#039;??????планирую сделать проверку настраиваемой(все три проверять или только 2 проверять по ЕРН или нет)<br />&#039;Const type_prov_ern=0<br />&#039;Const db_path_default=&quot;promdoc\SignVerify.nsf&quot;&nbsp; &nbsp; &nbsp; &nbsp; <br />%REM<br />&nbsp; &nbsp; Класс для проверки подписи в документе XML и сравнение подписей с базой подписанты<br />&nbsp; &nbsp; Вытягиваем ФИО из тега XML<br />&nbsp; &nbsp; Вытягиваем ФИО и ЕРНы из ЭП XML<br />&nbsp; &nbsp; Вытягиваем список ФИО и и ЕРНы из базы &#039;Подписанты&#039;<br />&nbsp; &nbsp; если будет хоть одно совпадение по всем трем Фамилия И.О. а также по ЕРНФЛ и по одному из ЕРНЮЛ/ЕРНОИГВ- считается документ успешно прошел проверку<br />&nbsp; &nbsp; </p><p>==================================ОПИСАНИЕ Public методов и свойств класса Verify_Signed_XML============================================&nbsp; &nbsp; <br />Public<br />&nbsp; &nbsp; Property Get GetListFIOTeg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; As Variant &nbsp; &nbsp; &#039;получаем массив данных ФИО из тега (если нет ФИО - возвращается NULL)<br />&nbsp; &nbsp; Property Get GetListFIOEP &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; As Variant&nbsp; &nbsp; &#039;получаем массив данных ФИО из ЭП (если нет ФИО - возвращается NULL)<br />&nbsp; &nbsp; Property Get GetListFIOPodp &nbsp; &nbsp; &nbsp; &nbsp; As Variant&nbsp; &nbsp; &#039;получаем массив данных ФИО из базы подписантов (если нет ФИО - возвращается NULL)<br />&nbsp; &nbsp; Property Get GetNameOrg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; As String&nbsp; &nbsp; &#039;получаем наименование ведомства отославшей документ<br />&nbsp; &nbsp; Property Get GetKodMedOrg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; As String&nbsp; &nbsp; &#039;получаем код организации отославшей документ (если из подведа - то к примеру 7.501)<br />&nbsp; &nbsp; Property Get GetCountListFIOTeg &nbsp; &nbsp; As Integer&nbsp; &nbsp; &#039;получаем кол-во ФИО из тега<br />&nbsp; &nbsp; Property Get GetCountListFIOEP &nbsp; &nbsp; &nbsp; &nbsp; As Integer&nbsp; &nbsp; &#039;получаем кол-во ФИО из ЭП<br />&nbsp; &nbsp; Property Get GetCountListFIOPodp&nbsp; &nbsp; As Integer&nbsp; &nbsp; &#039;получаем кол-во ФИО из базы подписанты по ведомству отославшей документ<br />&nbsp; &nbsp; Property Get isError &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; As Boolean&nbsp; &nbsp; &#039;была/не было ошибки True/False<br />&nbsp; &nbsp; Property Get GetErrorText &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; As String&nbsp; &nbsp;&#039;получаем текст ошибки<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Property Set SetPathCriptoGSS &nbsp; &nbsp; As String&nbsp; &nbsp; &nbsp; &nbsp; &#039;передаем путь к ConsoleCriptoGSS<br />&nbsp; &nbsp; Property Set SetPathXML &nbsp; &nbsp; &nbsp; &nbsp; As String&nbsp; &nbsp; &nbsp; &nbsp; &#039;передаем путь к проверяемому файлу<br />&nbsp; &nbsp; Property Set SetServerDBSigned &nbsp; &nbsp; As String&nbsp; &nbsp; &nbsp; &nbsp; &#039;передаем имя сервера где находится БД &#039;Подписанты&#039; <br />&nbsp; &nbsp; Property Set SetPathDBSigned &nbsp; &nbsp; As String&nbsp; &nbsp; &nbsp; &nbsp; &#039;передаем путь к БД &#039;Подписанты&#039;<br />&nbsp; &nbsp; Property Set SetNotesDocument &nbsp; &nbsp; As NotesDocument&#039;передаем NotesDocument в котором нужно проверить аттач <br />&nbsp; &nbsp; Property Set SetItemName &nbsp; &nbsp; &nbsp; &nbsp; As string&nbsp; &nbsp; &nbsp; &nbsp; &#039;передаем наименование итема в котором нужно проверить аттач<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Function VerifySignedXML(pathCriptoGSS As String, server_nameDB As String, pathDB As String, pathFile As String) As Boolean<br />&nbsp; &nbsp; -ф-ция используется для проверки файла XML находящегося на диске<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; где: pathCriptoGSS &nbsp; &nbsp; - путь к consolecriptogss, например &quot;c:\consolecriptogss\consolecriptogss.exe&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; server_nameDB &nbsp; &nbsp; - название сервера где находится БД &#039;Подписанты&#039;,если текущий сервер - оставлем пустым<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; pathDB &nbsp; &nbsp; &nbsp; &nbsp; - путь к базе &#039;Подписанты&#039;, если база находится по пути &quot;promdoc\SignVerify.nsf&quot; - оставляем пустым<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; pathFile &nbsp; &nbsp; &nbsp; &nbsp; - путь к проверяемому файлу<br />&nbsp; &nbsp; если перед вызовом данной ф-ции использовались нужные сеттеры - все либо нужные аргументы оставляем пустыми<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Function VerifySignedXMLFromDoc(pathCriptoGSS As String, server_nameDB As String, pathDB As String, doc As Variant, itemname As String) As Boolean<br />&nbsp; &nbsp; -ф-ция используется для проверки файла XML находящегося в виде аттача в NotesDocument<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; где: pathCriptoGSS &nbsp; &nbsp; - путь к consolecriptogss, например &quot;c:\consolecriptogss\consolecriptogss.exe&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; server_nameDB &nbsp; &nbsp; - название сервера где находится БД &#039;Подписанты&#039;,если текущий сервер - оставлем пустым<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; pathDB &nbsp; &nbsp; &nbsp; &nbsp; - путь к базе &#039;Подписанты&#039;, если база находится по пути &quot;promdoc\SignVerify.nsf&quot; - оставляем пустым<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; doc &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - NotesDocument в котором находится проверяемый аттач(если документ был определен через сеттер - указываем Nothing)<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; itemname &nbsp; &nbsp; &nbsp; &nbsp; - название итема в котором находится проверяемый аттач<br />&nbsp; &nbsp; если перед вызовом данной ф-ции использовались нужные сеттеры - все либо нужные аргументы оставляем пустыми<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />==================================1 Пример работы с классом(проверяем файл на диске)============================================<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Dim verify_p&nbsp; As New Verify_Signed_XML<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; verify_p.SetPathXML=&quot;c:\XML\podpisant.xml&quot; &#039;как вариант использую сеттер, а можно передать и прям в ф-ции VerifySignedXML<br />&nbsp; &nbsp; If Not verify_p.VerifySignedXML(&quot;C:\ConsoleCriptoGSS\ConsoleCriptoGSS.exe&quot;, &quot;&quot;, &quot;&quot;, &quot;&quot;) Then <br />&nbsp; &nbsp; &nbsp; &nbsp; Messagebox &quot;Была ошибка во время проверки либо документ не прошел успешно проверку&quot;&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; Messagebox &quot;Документ успешно проверен&quot;<br />&nbsp; &nbsp; End If</p><p>&#039;далее при необходимости можем использовать методы для получения информации об ошибке, подписантах и т.д.&nbsp; &nbsp; </p><p>&nbsp; &nbsp; if verify_p.isError then s=&quot;Текст ошибки: &quot;+verify_p.GetErrorText+Chr(13) &#039;если есть ошибка получаем текст ошибки </p><p>&nbsp; &nbsp; s=s+&quot;Код организации: &quot;+verify_p.GetKodMedOrg+Chr(13)<br />&nbsp; &nbsp; s=s+&quot;Кол-во подписантов XML в теге: &quot;+Cstr(verify_p.GetCountListTeg)+Chr(13)&nbsp; &nbsp; </p><p>&#039;I способ получения информации о подписантах (проверяем на NULL)<br />&nbsp; &nbsp; mas=verify_p.GetListTeg &#039;получаем массив данных с подписантами в теге<br />&nbsp; &nbsp; If Not Isnull(mas) Then <br />&nbsp; &nbsp; &nbsp; &nbsp; Forall v In mas<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)+v.FIO<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; End Forall<br />&nbsp; &nbsp; &nbsp; &nbsp; s=s+&quot;Список из тега:&quot;+tmp+Chr(13)<br />&nbsp; &nbsp; End If<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; s=s+&quot;Кол-во в ЭП: &quot;+Cstr(verify_p.GetCountListEP)+Chr(13)<br />&#039;II способ получения информации о подписантах (если кол-во подписантов &gt; 0 - получаем список этих подписантов)&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; If verify_p.GetCountListFIOEP&gt;0 Then <br />&nbsp; &nbsp; &nbsp; &nbsp; mas=verify_p.GetListFIOEP &#039;получаем массив данных с подписантами в эл.подписи<br />&nbsp; &nbsp; &nbsp; &nbsp; tmp=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Forall v In mas<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)+v.FIO<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)+v.UINFL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)+v.UINUL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)+v.UINOIGV<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; End Forall<br />&nbsp; &nbsp; &nbsp; &nbsp; s=s+&quot;Список из ЭП:&quot;+tmp+Chr(13)<br />&nbsp; &nbsp; End If<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; s=s+&quot;Кол-во кому разрешено: &quot;+Cstr(verify_p.GetCountListPodp)+Chr(13)<br />&nbsp; &nbsp; If verify_p.GetCountListFIOPodp&gt;0 Then<br />&nbsp; &nbsp; &nbsp; &nbsp; mas=verify_p.GetListFIOPodp&nbsp; &nbsp; &#039;получаем массив данных с подписантами из базы подписанты<br />&nbsp; &nbsp; &nbsp; &nbsp; tmp=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Forall v In mas<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)+v.FIO<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)+v.UINFL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)+v.UINUL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)+v.UINOIGV<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp=tmp+Chr(13)<br />&nbsp; &nbsp; &nbsp; &nbsp; End Forall<br />&nbsp; &nbsp; &nbsp; &nbsp; s=s+&quot;Список из подписантов:&quot;+tmp<br />&nbsp; &nbsp; End If<br />&nbsp; &nbsp; Messagebox s <br />&nbsp; &nbsp; <br />==================================2 Пример работы с классом(проверяем аттач в нотес доке)============================================<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Dim verify_p&nbsp; As New Verify_Signed_XML, doc As notesdocument, ws As New NotesUIWorkspace<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Set doc = ws.CurrentDocument.Document<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; verify_p.SetPathCriptoGSS=&quot;C:\ConsoleCriptoGSS\ConsoleCriptoGSS.exe&quot;<br />&nbsp; &nbsp; Set verify_p.SetNotesDocument=doc<br />&nbsp; &nbsp; verify_p.SetItemName=&quot;text&quot;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; If Not verify_p.VerifySignedXMLFromDoc(&quot;&quot;, &quot;&quot;, &quot;&quot;, Nothing, &quot;&quot;) Then<br />&nbsp; &nbsp; &nbsp; &nbsp; Messagebox &quot;Была ошибка во время проверки либо документ не прошел успешно проверку&quot;&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; Messagebox &quot;Документ успешно проверен&quot;<br />&nbsp; &nbsp; End If<br />&nbsp; &nbsp; &#039;далее, как и в 1примере, можем получать нужную нам информацию из класса <br />%END REM</p><p>Public Class Verify_Signed_XML&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_ListSignSoprovod() As Lico&nbsp; &nbsp; &#039;список подписавших в теге XML(считается только один, не делаю анализ на ентеры и тому подобное, беру все что есть в теге)<br />&nbsp; &nbsp; Private m_ListSignEP() As Lico&nbsp; &nbsp; &nbsp; &nbsp; &#039;список подписавших в ЭП<br />&nbsp; &nbsp; Private m_ListSignPodp() As Lico&nbsp; &nbsp; &nbsp; &nbsp; &#039;список имеющих право подписи в организации<br />&nbsp; &nbsp; Private m_Ubound_idx_SignSoprovod As Integer<br />&nbsp; &nbsp; Private m_Ubound_idx_SignEP As Integer<br />&nbsp; &nbsp; Private m_Ubound_idx_SignPodp As Integer<br />&nbsp; &nbsp; Private m_kod_med As String<br />&nbsp; &nbsp; Private m_kod_med_sub As String&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_name_org As String<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_path_criptoGSS As String &nbsp; &nbsp; &#039;путь к консольной криптоГСС<br />&nbsp; &nbsp; Private m_path_XML As String &nbsp; &nbsp; &nbsp; &nbsp; &#039;путь к проверяемому файлу<br />&nbsp; &nbsp; Private m_name_XML As String &nbsp; &nbsp; &nbsp; &nbsp; &#039;имя проверяемому вложения<br />&nbsp; &nbsp; Private m_serverDB_Signed As String &#039;сервер где находится БД подписанты<br />&nbsp; &nbsp; Private m_pathDB_Signed As String &nbsp; &nbsp; &#039;путь к БД подписанты<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_isError As Boolean<br />&nbsp; &nbsp; Private m_error_Text As String<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_doc As NotesDocument &#039;нотес документ в котором проверяемый итем с файлом<br />&nbsp; &nbsp; Private m_item_Name As String &#039;название итема с файлом <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Sub New&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_path_criptoGSS=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_path_XML=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_serverDB_Signed=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_pathDB_Signed=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Set me.m_doc=Nothing<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_item_Name=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_name_XML=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.RestoreNULL&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Function VerifySignedXML(pathCriptoGSS As String, server_nameDB As String, pathDB As String, pathFile As String) As Boolean<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; VerifySignedXML=False<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.RestoreNULL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mas1 As Variant, mas2 As Variant, mas3 As Variant, b_tmp As Boolean, mes As String<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim tmp1 As String, tmp2 As String, tmp3 As String, i As Integer<br />&nbsp; &nbsp; &nbsp; &nbsp; b_tmp=False<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(pathCriptoGSS)=&quot;&quot; &nbsp; &nbsp; Then Me.m_path_criptoGSS=pathCriptoGSS<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(server_nameDB)=&quot;&quot; &nbsp; &nbsp; Then Me.m_serverDB_Signed=server_nameDB<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(pathDB)=&quot;&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then Me.m_pathDB_Signed=pathDB<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(pathFile)=&quot;&quot; &nbsp; &nbsp; &nbsp; &nbsp; Then Me.m_path_XML=pathFile<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Proverka Then mes=me.m_error_Text: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not me.GetSoprovod &nbsp; &nbsp; Then mes=&quot;Ошибка получения списка подписей из тега. &quot;+ me.m_error_Text: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not me.GetSignFile &nbsp; &nbsp; Then mes=&quot;Ошибка получения списка ЭП. &quot;+ me.m_error_Text: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not me.GetPodpisant &nbsp; &nbsp; Then mes=&quot;Ошибка получения списка людей имеющих право подписывать. &quot;+ me.m_error_Text: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mas_tmp As Variant&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; ForAll v1 In me.m_ListSignSoprovod&#039;(v1.FIO=Иванов И.И. или И.И. Иванов или Иванов И. И. или И. И. Иванов)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mas_tmp=Split(UCase(Trim(v1.FIO)), &quot; &quot;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If UBound(mas_tmp)=1 Or UBound(mas_tmp)=2 Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i=0<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim mas1(1)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ForAll v In mas_tmp<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If InStr(v,&quot;.&quot;)=0 Then&#039;если фамилия (нет точки)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mas1(0)=Trim(v)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If i=0 Then mas1(1)=Trim(v) Else mas1(1)=mas1(1)+Trim(v)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i=1<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End ForAll&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mas1(1)=Replace(mas1(1),&quot;. &quot;,&quot;.&quot;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp1=mas1(0)+&quot; &quot;+mas1(1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp1=me.TrimForNoRus(tmp1) &#039;оставим только кирилические символы, точки и пробел<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If Mid$(tmp1,Len(tmp1),1)&lt;&gt;&quot;.&quot; Then tmp1=tmp1+&quot;.&quot;&nbsp; &nbsp; &#039;иногда может встречаться И.О без точки после О<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Print &quot;ФИО из сопровода из тега - //&quot; +tmp1+&quot;//&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ForAll v2 In me.m_ListSignEP&#039;(v2.FIO=Иванов Иван Иванович) - из ЭП<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mas2=Split(Trim(UCase(v2.FIO)), &quot; &quot;)&#039;mas1(0)=ИВАНОВ&nbsp; &nbsp;&nbsp; mas1(1)=ИВАН&nbsp; &nbsp; mas1(2)=ИВАНОВИЧ&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp2=Trim(mas2(0))+&quot; &quot;+ Trim(Left$(mas2(1), 1)+&quot;.&quot;+Left$(mas2(2), 1)+&quot;.&quot;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp2=me.TrimForNoRus(tmp2) &#039;оставим только кирилические символы, точки и пробел<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Print &quot;ФИО из ЭП - //&quot; +tmp2+&quot;//&quot;&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If tmp1=tmp2 Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ForAll v3 In me.m_ListSignPodp&#039;(v3.FIO=Иванов Иван Иванович)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mas3=Split(Trim(UCase(v3.FIO)), &quot; &quot;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp3=Trim(mas3(0))+&quot; &quot;+Trim(Left$(mas3(1), 1)+&quot;.&quot;+Left$(mas3(2), 1)+&quot;.&quot;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp3=me.TrimForNoRus(tmp3)&#039;оставим только кирилические символы, точки и пробел<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Print &quot;ФИО из БД &#039;Подписанты&#039; - //&quot; +tmp3+&quot;//&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If tmp3=tmp2 Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If v2.UINFL=v3.UINFL And ((v2.UINUL&lt;&gt;&quot;&quot; And v2.UINUL=v3.UINUL) Or (v2.UINOIGV&lt;&gt;&quot;&quot; And v2.UINOIGV=v3.UINOIGV)) Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b_tmp=True : GoTo end_func<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End ForAll<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End ForAll&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If<br />&nbsp; &nbsp; &nbsp; &nbsp; End ForAll&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />end_func:<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not b_tmp Then mes=&quot;Нет совпадения подписантов.&quot;: Error 1000&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Print &quot;Совпадение подписантов найдено. Проверка пройдена успешно.&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; VerifySignedXML=True<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />errh:&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not me.m_isError Then mes=&quot;Не удалось проверить подписантов. &quot;+mes<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; End Function</p><p>&nbsp; &nbsp; Public Function VerifySignedXMLFromDoc(pathCriptoGSS As String, server_nameDB As String, pathDB As String, doc As Variant, itemname As String) As Boolean<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; VerifySignedXMLFromDoc=False<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_name_XML=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.RestoreNULL<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim db As NotesDatabase, rtitem As NotesRichTextItem, mes As String, obj As Variant<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(pathCriptoGSS)=&quot;&quot; &nbsp; &nbsp; Then Me.m_path_criptoGSS=pathCriptoGSS<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(server_nameDB)=&quot;&quot; &nbsp; &nbsp; Then Me.m_serverDB_Signed=server_nameDB<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(pathDB)=&quot;&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then Me.m_pathDB_Signed=pathDB<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not doc Is Nothing &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then Set me.m_doc=doc&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(itemname)=&quot;&quot; &nbsp; &nbsp; &nbsp; &nbsp; Then me.m_item_name=itemname<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If me.m_doc Is Nothing &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then mes=&quot;Ошибка!!! Не передан NotesDocument&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If Trim(Me.m_item_name)=&quot;&quot; &nbsp; &nbsp; &nbsp; &nbsp; Then mes=&quot;Ошибка!!! Не указано название итема содержащего аттач&quot;: Error 1000&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not me.m_doc.HasEmbedded &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then&nbsp; mes=&quot;Ошибка!!! В NotesDocument нет аттача&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not me.m_doc.HasItem(me.m_item_Name) &nbsp; &nbsp; Then&nbsp; mes=&quot;Ошибка!!! В NotesDocument нет указанного итема&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Set rtitem = me.m_doc.GetFirstItem(me.m_item_Name)<br />&nbsp; &nbsp; &nbsp; &nbsp; If rtitem Is Nothing &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then mes=&quot;Ошибка!!! Не могу получить объект итема&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If IsEmpty(rtitem.EmbeddedObjects) &nbsp; &nbsp; Then mes=&quot;Ошибка!!! В указанном итеме нет аттача&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Set obj=rtitem.EmbeddedObjects(0)<br />&nbsp; &nbsp; &nbsp; &nbsp; If&nbsp; Not (obj.Type = EMBED_ATTACHMENT) Then mes=&quot;Ошибка!!! В указанном итеме объект не является аттачем&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If&nbsp; Not&nbsp; LCase(StrRightBack(obj.Source , &quot;.&quot;)) = &quot;xml&quot;&nbsp; Then mes=&quot;Ошибка!!! Аттач не является XML файлом&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_name_XML=obj.Source<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_path_XML=me.GetNotesTempDirectory+obj.Source<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Proverka Then mes=me.m_error_Text: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call obj.ExtractFile(Me.m_path_XML)<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not VerifySignedXML(Me.m_path_criptoGSS, Me.m_serverDB_Signed, Me.m_pathDB_Signed, Me.m_path_XML)Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mes=Me.m_error_Text<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Kill me.m_path_XML<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Error 1001<br />&nbsp; &nbsp; &nbsp; &nbsp; End If<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Kill me.m_path_XML<br />&nbsp; &nbsp; &nbsp; &nbsp; VerifySignedXMLFromDoc=True<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />errh:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Err=1001 Then mes=&quot;Не удалось проверить подписантов. &quot;+mes&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; End Function<br />&nbsp; &nbsp; <br />&#039;геттеры<br />&nbsp; &nbsp; Public Property Get GetListTeg As Variant<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mes As String<br />&nbsp; &nbsp; &nbsp; &nbsp; If me.m_Ubound_idx_SignSoprovod=-1 Then mes=&quot;Нет подписей в сопроводе&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListTeg=me.m_ListSignSoprovod<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />errh:<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListTeg=Null<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetListEP As Variant<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mes As String<br />&nbsp; &nbsp; &nbsp; &nbsp; If me.m_Ubound_idx_SignEP=-1 Then mes=&quot;Нет подписей ЭП&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListEP=me.m_ListSignEP<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />errh:<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListEP=Null<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetListPodp As Variant<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mes As String<br />&nbsp; &nbsp; &nbsp; &nbsp; If me.m_Ubound_idx_SignPodp=-1 Then mes=&quot;Нет данных ведомству о подписантах&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListPodp=me.m_ListSignPodp<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />errh:<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListPodp=Null<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetNameXML As String<br />&nbsp; &nbsp; &nbsp; &nbsp; GetNameXML=me.m_name_XML&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetNameOrg As String<br />&nbsp; &nbsp; &nbsp; &nbsp; GetNameOrg=me.m_name_org&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Property&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetKodMedOrg As String<br />&nbsp; &nbsp; &nbsp; &nbsp; GetKodMedOrg=me.m_kod_med<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not me.m_kod_med_sub=&quot;&quot; Then GetKodMedOrg=GetKodMedOrg+&quot;.&quot;+me.m_kod_med_sub<br />&nbsp; &nbsp; End Property&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetCountListTeg As Integer<br />&nbsp; &nbsp; &nbsp; &nbsp; GetCountListTeg=me.m_Ubound_idx_SignSoprovod+1<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; Public Property Get GetCountListEP As Integer<br />&nbsp; &nbsp; &nbsp; &nbsp; GetCountListEP=me.m_Ubound_idx_SignEP+1<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; Public Property Get GetCountListPodp As Integer<br />&nbsp; &nbsp; &nbsp; &nbsp; GetCountListPodp=me.m_Ubound_idx_SignPodp+1<br />&nbsp; &nbsp; End Property&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get isError As Boolean<br />&nbsp; &nbsp; &nbsp; &nbsp; isError=me.m_isError<br />&nbsp; &nbsp; End Property&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetErrorText As String<br />&nbsp; &nbsp; &nbsp; &nbsp; GetErrorText=me.m_error_Text<br />&nbsp; &nbsp; End Property<br />&#039;сеттеры******************<br />&nbsp; &nbsp; Public Property Set SetPathCriptoGSS As String<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_path_criptoGSS=SetPathCriptoGSS<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Set SetPathXML As String<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_path_XML=SetPathXML<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; Public Property Set SetServerDBSigned As String<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_serverDB_Signed=SetServerDBSigned<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; Public Property Set SetPathDBSigned As String<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_pathDB_Signed=SetPathDBSigned<br />&nbsp; &nbsp; End Property&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Set SetNotesDocument As NotesDocument<br />&nbsp; &nbsp; &nbsp; &nbsp; Set me.m_doc=SetNotesDocument<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; Public Property Set SetItemName As String<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_item_name=SetItemName<br />&nbsp; &nbsp; End Property&nbsp; &nbsp; <br />&nbsp; &nbsp; <br />&#039;**********************************************************************************************&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Private Function GetSoprovod As Boolean&#039;подписанты тег XML<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim sax As New SAX_Parser, mes As String, i As Integer, mas As Variant, record As Variant<br />&nbsp; &nbsp; &nbsp; &nbsp; GetSoprovod=False<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not sax.run(Me.m_path_XML) Then Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_kod_med=sax.GetKodMed<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_kod_med_sub=sax.GetKodMedSub<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If sax.GetCountListFIO&gt;0 Then&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mas=sax.GetListFIO&nbsp; &nbsp; &#039;получаем тестовый массив&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For i=0 To sax.GetCountListFIO-1<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set record=New Lico<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.FIO=mas(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.UINFL&nbsp; &nbsp; =&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.UINUL&nbsp; &nbsp; =&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.UINOIGV&nbsp; &nbsp; =&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim Preserve me.m_ListSignSoprovod(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set me.m_ListSignSoprovod(i)=record&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Next&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_Ubound_idx_SignSoprovod=sax.GetCountListFIO-1<br />&nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mes=&quot;Ошибка!!! В документе нет подписантов в теге&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; End If<br />&nbsp; &nbsp; &nbsp; &nbsp; GetSoprovod=True<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />errh:&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not sax Is Nothing Then mes=sax.GetErrorText()<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; End Function&nbsp; &nbsp; <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Function GetSignFile As Boolean&#039;подписанты ЭП<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim verify_class As New Verify_CriptoGSS<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim i As Integer, mes As String, record As Variant<br />&nbsp; &nbsp; &nbsp; &nbsp; GetSignFile=False<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not verify_class.SetAllArg(Me.m_path_criptoGSS, &quot;All&quot;, Me.m_path_XML) Then&nbsp; mes=verify_class.GetTextError: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not verify_class.verify Then mes=verify_class.GetTextError: : Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If verify_class.CountListSertInDoc&gt;0 Then&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For i=0 To verify_class.CountListSertInDoc-1<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set record=New Lico<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; With verify_class.GetListSertInDoc(i).Certificate<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.FIO&nbsp; &nbsp; &nbsp; &nbsp; =.FIO<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.UINFL&nbsp; &nbsp; =.UINFL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.UINUL&nbsp; &nbsp; =.UINUL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.UINOIGV&nbsp; &nbsp; =.UINOIGV&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End With&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim Preserve me.m_ListSignEP(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set me.m_ListSignEP(i)=record&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Next<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_Ubound_idx_SignEP=verify_class.CountListSertInDoc-1<br />&nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mes=&quot;Ошибка!!! В документе нет подписантов ЭП&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Error 1000&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; End If<br />&nbsp; &nbsp; &nbsp; &nbsp; GetSignFile=True&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />errh:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; End Function<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Function GetPodpisant As Boolean<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; GetPodpisant=False&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mas As Variant, mes As String, key As String, i As Integer<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If me.m_kod_med=&quot;&quot; Then mes=&quot;Ошибка!!! Не получен код ведомства&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim p_class As New Podpisant<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; key=me.m_kod_med<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not me.m_kod_med_sub=&quot;&quot; Then key=key+&quot;.&quot;+me.m_kod_med_sub<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not p_class.RunGetPodpisant(me.m_serverDB_Signed, me.m_pathDB_Signed, key) Then&nbsp; &nbsp; mes=p_class.GetErrorText : Error 1000<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_name_org=p_class.GetNameOrg<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If p_class.GetCountListPodp&gt;0 Then&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mas=p_class.GetListPodp&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;получаем уже массив объектов класса Lico&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For i=0 To p_class.GetCountListPodp-1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim Preserve me.m_ListSignPodp(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set me.m_ListSignPodp(i)=mas(i)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Next&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_Ubound_idx_SignPodp=p_class.GetCountListPodp-1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mes=&quot;Ошибка!!! В документе нет подписантов в теге&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; End If<br />&nbsp; &nbsp; &nbsp; &nbsp; %REM &#039; можно и так получить список<br />&nbsp; &nbsp; &nbsp; &nbsp; mas=p_class.GetListFIOPodp<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not IsNull(mas) Then&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For i=0 To UBound(mas)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim Preserve me.m_ListSignPodp(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set me.m_ListSignPodp(i)=mas(i)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Next<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; me.m_Ubound_idx_SignPodp=p_class.GetCountListFIOPodp-1<br />&nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mes=&quot;Не указаны подписанты по данному ведомству&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; End If&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; %END REM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; GetPodpisant=True<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />errh:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; End Function<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Function Proverka As Boolean<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; Proverka=False<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mes As String<br />&nbsp; &nbsp; &nbsp; &nbsp; If Trim(Me.m_path_criptoGSS)=&quot;&quot;&nbsp; &nbsp; &nbsp; Then mes=&quot;Ошибка!!! Не указан путь к ConsoleCriptoGSS&quot;: Error 1000 <br />&nbsp; &nbsp; &nbsp; &nbsp; &#039;If Trim(Me.m_serverDB_Signed)=&quot;&quot; &nbsp; &nbsp; Then mes=&quot;Ошибка!!! Не указан сервер базы &#039;&quot;+db_title+&quot;&#039;&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; &#039;If Trim(Me.m_pathDB_Signed)=&quot;&quot;&nbsp; &nbsp; &nbsp; Then mes=&quot;Ошибка!!! Не указан путь к базе &#039;&quot;+db_title+&quot;&#039;&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If Trim(Me.m_path_XML)=&quot;&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then mes=&quot;Ошибка!!! Не указан путь к проверяемому файлу&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; Proverka=True<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />errh:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; End Function</p><p>&nbsp; &nbsp; Private Function TrimForNoRus(value As String) As String &#039;оставляем только кирилицу,пробел и точки<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim i As Integer, s As String, ch As String, tmp_str As String<br />&nbsp; &nbsp; &nbsp; &nbsp; TrimForNoRus=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; s=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; For i=1 To Len(value)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ch=Mid$(value,i,1)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If Asc(ch)=32 Or Asc(ch)=46 Or Asc(ch)=168 Or Asc(ch)=184 Or (Asc(ch)&gt;=192 And Asc(ch)&lt;=255) Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TrimForNoRus=TrimForNoRus+ch<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s=s+&quot;//Символ &#039;&quot;+ch+&quot;&#039;, код ASCII=&quot;+CStr(Asc(ch))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If<br />&nbsp; &nbsp; &nbsp; &nbsp; Next&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If s&lt;&gt;&quot;&quot; Then Print &quot;в значении &#039;&quot;+value+&quot;&#039; встретились не кирилличесике символы: &quot;+s<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />errh:<br />&nbsp; &nbsp; &nbsp; &nbsp; Print &quot;в ф-ции TrimForNoRus произошла ошибка № &quot; &amp; Err &amp; &quot; в строке &quot; &amp; Erl<br />&nbsp; &nbsp; &nbsp; &nbsp; TrimForNoRus=value<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; End Function<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub RestoreNULL<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_isError=False<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_error_Text=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_Ubound_idx_SignSoprovod=-1&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_Ubound_idx_SignEP&nbsp; &nbsp; &nbsp; &nbsp; =-1<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_Ubound_idx_SignPodp&nbsp; &nbsp; =-1<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_kod_med=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_kod_med_sub=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If IsArray(me.m_ListSignSoprovod)&nbsp; &nbsp; Then Erase me.m_ListSignSoprovod<br />&nbsp; &nbsp; &nbsp; &nbsp; If IsArray(me.m_ListSignEP) &nbsp; &nbsp; &nbsp; &nbsp; Then Erase me.m_ListSignEP&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If IsArray(me.m_ListSignPodp)&nbsp; &nbsp; &nbsp; &nbsp; Then Erase me.m_ListSignPodp<br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub SetError(Er As Integer, mes As String)&#039;записываем ошибку<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_isError=True<br />&nbsp; &nbsp; &nbsp; &nbsp; If er&gt;=1000 And er&lt;=1100 Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_error_Text=mes&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_error_Text=&quot;Ошибка № &quot; &amp; Er &amp; &quot; в строке &quot; &amp; Erl &amp; Chr(13) &amp; Error(Er)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; End If&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Function GetNotesTempDirectory() As String&#039;Путь для временных файлов <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim d As String * 256 <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim s% <br />&nbsp; &nbsp; &nbsp; &nbsp; s% = w32_OSGetSystemTempDirectory(d) <br />&nbsp; &nbsp; &nbsp; &nbsp; GetNotesTempDirectory = Left$(d, s%) +&quot;\&quot;<br />&nbsp; &nbsp; End Function<br />End Class</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:02:37 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124871#p124871</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124870#p124870</link>
			<description><![CDATA[<p>%REM<br />&nbsp; &nbsp; класс для получения информации о ФИО из тега XML документа<br />&nbsp; &nbsp; используется классом Vefify_Signed_XML<br />&nbsp; &nbsp; можно использовать и отдельно как самостоятельный класс<br />%END REM<br />Public Class SAX_Parser<br />&nbsp; &nbsp; Private axis As String &#039;служебная для парсера<br />&nbsp; &nbsp; Private nodetext As String &#039;служебная для парсера<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_path_XML As String &nbsp; &nbsp; &nbsp; &nbsp; &#039;путь к проверяемому файлу<br />&nbsp; &nbsp; Private m_isError As Boolean<br />&nbsp; &nbsp; Private m_error_Text As String<br />&nbsp; &nbsp; Private m_kod_med As String<br />&nbsp; &nbsp; Private m_kod_med_sub As String<br />&nbsp; &nbsp; Private m_Ubound_idx_Signed As Integer<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_List_FIO() As String &#039;список ФИО которые в теге XML<br />&#039;*******************************************************************************&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Sub New()<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_path_XML=&quot;&quot;&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call RestoreNULL&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetListFIO As Variant<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mes As String<br />&nbsp; &nbsp; &nbsp; &nbsp; If me.m_Ubound_idx_Signed=-1 Then mes=&quot;Нет подписей в сопроводе&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListFIO=me.m_List_FIO<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />errh:<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListFIO=Null<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetKodMed As String<br />&nbsp; &nbsp; &nbsp; &nbsp; GetKodMed=me.m_kod_med<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetKodMedSub As String<br />&nbsp; &nbsp; &nbsp; &nbsp; GetKodMedSub=me.m_kod_med_sub<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetCountListFIO As Integer<br />&nbsp; &nbsp; &nbsp; &nbsp; GetCountListFIO=me.m_Ubound_idx_Signed+1<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get isError As Boolean<br />&nbsp; &nbsp; &nbsp; &nbsp; isError=me.m_isError<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetErrorText As String<br />&nbsp; &nbsp; &nbsp; &nbsp; GetErrorText=me.m_error_Text<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Function Run(pathFile As String) As Boolean<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; Call RestoreNULL<br />&nbsp; &nbsp; &nbsp; &nbsp; Run=False&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mes As String, session As New NotesSession, strm As NotesStream, outputStream As NotesStream<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim saxParser As NotesSAXParser<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Trim(pathFile)=&quot;&quot; Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If Me.m_path_XML=&quot;&quot; Then mes=&quot;Ошибка!!! Не указан путь к проверяемому файлу.&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_path_XML=pathFile&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; End If&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Set outputStream =session.CreateStream()<br />&nbsp; &nbsp; &nbsp; &nbsp; Set strm = session.CreateStream()&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call strm.Open(Me.m_path_XML, &quot;UTF-8&quot; )<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Set saxParser=session.CreateSAXParser(strm, outputStream)<br />&nbsp; &nbsp; &nbsp; &nbsp; On Event SAX_StartDocument From saxParser Call SAXStartDocument<br />&nbsp; &nbsp; &nbsp; &nbsp; On Event SAX_StartElement From saxParser Call SAXStartElement<br />&nbsp; &nbsp; &nbsp; &nbsp; On Event SAX_Characters From saxParser Call SAXCharacters &#039; содержимое элемента<br />&nbsp; &nbsp; &nbsp; &nbsp; On Event SAX_StartElement&nbsp; From saxParser Call SAXStartElement &#039;старт элемента<br />&nbsp; &nbsp; &nbsp; &nbsp; On Event SAX_EndElement From saxParser Call SAXEndElement &#039;конец элемента<br />&nbsp; &nbsp; &nbsp; &nbsp; On Event SAX_Error From saxParser Call SAXError<br />&nbsp; &nbsp; &nbsp; &nbsp; On Event SAX_FatalError From saxParser Call SAXFatalError<br />&nbsp; &nbsp; &nbsp; &nbsp; saxParser.Process&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call outputStream.close&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call strm.Close<br />&nbsp; &nbsp; &nbsp; &nbsp; Run=True<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />errh:&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; End Function<br />&#039;*******************************************************************************&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub RestoreNULL<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_isError=False<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_error_Text=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_kod_med=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_kod_med_sub=&quot;&quot;&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_Ubound_idx_Signed=-1<br />&nbsp; &nbsp; &nbsp; &nbsp; If IsArray(me.m_List_FIO) Then Erase me.m_List_FIO&nbsp; &nbsp; <br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub SAXCharacters (Source As NotesSAXParser, ByVal Characters As String, Count As Long)<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo ErrH&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim ItemName As String, mes As String<br />&nbsp; &nbsp; &nbsp; &nbsp; Select Case me.axis&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &#039;&nbsp; &nbsp; Case&nbsp; &quot;/htmlx/body2/container/signaturestextinfo/post&quot; &nbsp; &nbsp; : ItemName=&quot;ДОЛЖНОСТЬ&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Case&nbsp; &quot;/htmlx/body2/container/signaturestextinfo/fio&quot; &nbsp; &nbsp; : ItemName=&quot;ФИО&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Case&nbsp; &quot;/htmlx/body2/container/kodorg&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : ItemName=&quot;Код_МЭД&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Case&nbsp; &quot;/htmlx/body2/container/kodorgsub&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : ItemName=&quot;Код_МЭД_суб&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; End Select<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &#039;If ItemName=&quot;ФИО&quot; Or ItemName=&quot;ДОЛЖНОСТЬ&quot; Then<br />&nbsp; &nbsp; &nbsp; &nbsp; If ItemName=&quot;ФИО&quot; Then&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_Ubound_idx_Signed=Me.m_Ubound_idx_Signed+1<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If Not IsArray(me.m_List_FIO) Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim me.m_List_FIO(0)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim Preserve me.m_List_FIO(Me.m_Ubound_idx_Signed)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; me.m_List_FIO(Me.m_Ubound_idx_Signed)=Trim(Characters)<br />&nbsp; &nbsp; &nbsp; &nbsp; ElseIf ItemName=&quot;Код_МЭД&quot; Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; me.m_kod_med=Characters<br />&nbsp; &nbsp; &nbsp; &nbsp; ElseIf ItemName=&quot;Код_МЭД_суб&quot; Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; me.m_kod_med_sub=Characters<br />&nbsp; &nbsp; &nbsp; &nbsp; End If<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Sub&nbsp; &nbsp; &nbsp; &nbsp; <br />ErrH:<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Sub&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub SAXStartDocument (Source As NotesSAXParser)<br />&nbsp; &nbsp; &nbsp; &nbsp; me.axis=&quot;&quot;<br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub SAXStartElement (Source As NotesSAXParser, ByVal elementname As String, Attributes As NotesSAXAttributeList)<br />&nbsp; &nbsp; &nbsp; &nbsp; If me.nodetext&lt;&gt;elementname Then Me.axis=me.axis+&quot;/&quot;+elementname &#039; хз несколько раз подрят срабатывает событие<br />&nbsp; &nbsp; &nbsp; &nbsp; me.nodetext=elementname<br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub SAXEndElement (Source As NotesSAXParser, ByVal ElementName As String)<br />&nbsp; &nbsp; &nbsp; &nbsp; me.axis= StrLeftBack(me.axis,&quot;/&quot;)<br />&nbsp; &nbsp; &nbsp; &nbsp; me.nodetext=&quot;&quot;<br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub SAXEndDocument (Source As NotesSAXParser)<br />&nbsp; &nbsp; &nbsp; &nbsp; me.axis=&quot;&quot;<br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub SAXFatalError (Source As NotesSAXParser, Exception As NotesSAXException)&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Source.Output (&quot;FatalError - &quot;+Exception.Message)<br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Sub SAXError (Source As NotesSAXParser, Exception As NotesSAXException )&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Source.Output (&quot;Error - &quot;+Exception.Message)<br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub SetError(Er As Integer, mes As String)&#039;записываем ошибку<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_isError=True<br />&nbsp; &nbsp; &nbsp; &nbsp; If er&gt;=1000 And er&lt;=1100 Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_error_Text=mes&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_error_Text=&quot;Ошибка № &quot; &amp; Er &amp; &quot; в строке &quot; &amp; Erl &amp; Chr(13) &amp; Error(Er)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; End If&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Sub<br />End Class</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:02:29 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124870#p124870</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124869#p124869</link>
			<description><![CDATA[<p>%REM<br />&nbsp; &nbsp; Class Podpisant<br />&nbsp; &nbsp; Description: дает возможность получить информацию из базы Подписантов об указанной1 организации<br />&nbsp; &nbsp; используется классом Vefify_Signed_XML<br />&nbsp; &nbsp; можно использовать и отдельно как самостоятельный класс<br />%END REM<br />Public Class Podpisant&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_ListSignPodp() As Lico&nbsp; &nbsp; &nbsp; &nbsp; &#039;список имеющих право подписи в организации<br />&nbsp; &nbsp; Private m_Ubound_idx_SignPodp As Integer<br />&nbsp; &nbsp; Private m_kod_org As String<br />&nbsp; &nbsp; Private m_name_org As String<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_serverDB_Signed As String &#039;сервер где находится БД подписанты<br />&nbsp; &nbsp; Private m_pathDB_Signed As String &nbsp; &nbsp; &#039;путь к БД подписанты<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private m_isError As Boolean<br />&nbsp; &nbsp; Private m_error_Text As String<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Sub New&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim session As New NotesSession, cur_db As NotesDatabase<br />&nbsp; &nbsp; &nbsp; &nbsp; Set cur_db=session.CurrentDatabase<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_serverDB_Signed=cur_db.server<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_pathDB_Signed=&quot;promdoc\SignVerify.nsf&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_kod_org=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.RestoreNULL&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Sub</p><p>&nbsp; &nbsp; Public Function RunGetPodpisant(server_nameDB As String, pathDB As String, kod_org As String) As Boolean<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.RestoreNULL<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; RunGetPodpisant=False&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Dim session As New NotesSession, db As NotesDatabase, view As NotesView, doc_p As NotesDocument<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mes As String, i As Integer, view_name As String, db_title2 As String, record As Variant<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(server_nameDB)=&quot;&quot; &nbsp; &nbsp; Then Me.m_serverDB_Signed=server_nameDB<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(pathDB)=&quot;&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then Me.m_pathDB_Signed=pathDB<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not Trim(kod_org)=&quot;&quot; &nbsp; &nbsp; &nbsp; &nbsp; Then Me.m_kod_org=kod_org<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; view_name=&quot;On_OrgKod&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Trim(Me.m_serverDB_Signed)=&quot;&quot; &nbsp; &nbsp; Then mes=&quot;Не указан сервер базы &#039;&quot;+db_title+&quot;&#039;&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If Trim(Me.m_pathDB_Signed)=&quot;&quot;&nbsp; &nbsp; &nbsp; Then mes=&quot;Не указан путь к базе &#039;&quot;+db_title+&quot;&#039;&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; If Trim(Me.m_kod_org)=&quot;&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then mes=&quot;Не указан код организации&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Set db = session.GetDatabase(me.m_serverDB_Signed, me.m_pathDB_Signed)<br />&nbsp; &nbsp; &nbsp; &nbsp; If Not db.IsOpen Then mes=&quot;Нет подключения к базе &#039;&quot;+db_title+&quot;&#039;&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; db_title2=db.Title<br />&nbsp; &nbsp; &nbsp; &nbsp; Set view=db.Getview(view_name)<br />&nbsp; &nbsp; &nbsp; &nbsp; If view Is Nothing Then mes=&quot;Не могу найти служебное представление &#039;&quot;+view_name+&quot;&#039; в базе &#039;&quot;+db_title2+&quot;&#039;&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Set doc_p=view.Getdocumentbykey(me.m_kod_org, True)<br />&nbsp; &nbsp; &nbsp; &nbsp; If doc_p Is Nothing Then mes=&quot;Не найден документ организации в базе &#039;&quot;+db_title2+&quot;&#039;&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Not doc_p.Hasitem(&quot;fam&quot;)&nbsp; &nbsp; Or Not doc_p.Hasitem(&quot;im&quot;) Or Not doc_p.Hasitem(&quot;ot&quot;) Or Not doc_p.Hasitem(&quot;ern&quot;) _<br />&nbsp; &nbsp; &nbsp; &nbsp; Then mes=&quot;Не заполнен документ организации в базе &#039;&quot;+db_title2+&quot;&#039;&quot;: Error 1000&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Trim(doc_p.fam(0))=&quot;&quot; Or Trim(doc_p.im(0))=&quot;&quot; Or Trim(doc_p.ot(0))=&quot;&quot; Or Trim(doc_p.ern(0))=&quot;&quot; _<br />&nbsp; &nbsp; &nbsp; &nbsp; Then mes=&quot;Не заполнен документ организации в базе &#039;&quot;+db_title2+&quot;&#039;&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; ForAll v In doc_p.NameOrg<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If me.m_name_org=&quot;&quot; Then me.m_name_org=v Else me.m_name_org=me.m_name_org+Chr(13)+v&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; End ForAll<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; For i=0 To UBound(doc_p.fam)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set record=New Lico&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.FIO=doc_p.fam(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.FIO=record.FIO+&quot; &quot;+doc_p.im(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.FIO=record.FIO+&quot; &quot;+doc_p.ot(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.UINFL=doc_p.ern(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.UINUL=doc_p.ernul(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; record.UINOIGV=doc_p.ernoigv(i)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim Preserve me.m_ListSignPodp(i)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set me.m_ListSignPodp(i)=record<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; me.m_Ubound_idx_SignPodp=i<br />&nbsp; &nbsp; &nbsp; &nbsp; Next<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; RunGetPodpisant=True<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />errh:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; If Err=1000 Then mes=&quot;Ошибка получения данных!!! &quot;+mes<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; End Function<br />&nbsp; &nbsp; <br />&#039;геттеры******************<br />&nbsp; &nbsp; Public Property Get GetListPodp As Variant<br />&nbsp; &nbsp; &nbsp; &nbsp; On Error GoTo errh<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim mes As String<br />&nbsp; &nbsp; &nbsp; &nbsp; If me.m_Ubound_idx_SignPodp=-1 Then mes=&quot;Нет данных по ведомству о подписантах&quot;: Error 1000<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListPodp=me.m_ListSignPodp<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />errh:<br />&nbsp; &nbsp; &nbsp; &nbsp; GetListPodp=Null<br />&nbsp; &nbsp; &nbsp; &nbsp; Call me.SetError(Err, mes)<br />&nbsp; &nbsp; &nbsp; &nbsp; Exit Property<br />&nbsp; &nbsp; End Property</p><p>&nbsp; &nbsp; Public Property Get GetCountListPodp As Integer<br />&nbsp; &nbsp; &nbsp; &nbsp; GetCountListPodp=me.m_Ubound_idx_SignPodp+1<br />&nbsp; &nbsp; End Property&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Get GetNameOrg As String<br />&nbsp; &nbsp; &nbsp; &nbsp; GetNameOrg=me.m_name_org&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; Public Property Get GetErrorText As String<br />&nbsp; &nbsp; &nbsp; &nbsp; GetErrorText=me.m_error_Text<br />&nbsp; &nbsp; End Property<br />&#039;сеттеры******************&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Set SetServerDBSigned As String<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_serverDB_Signed=SetServerDBSigned<br />&nbsp; &nbsp; End Property<br />&nbsp; &nbsp; Public Property Set SetPathDBSigned As String<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_pathDB_Signed=SetPathDBSigned<br />&nbsp; &nbsp; End Property&nbsp; &nbsp; <br />&nbsp; &nbsp; Public Property Set SetKodOrg As String<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_kod_org=SetKodOrg<br />&nbsp; &nbsp; End Property&nbsp; &nbsp; <br />&#039;**********************************************************************************************&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub RestoreNULL<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_isError=False<br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_error_Text=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_Ubound_idx_SignPodp=-1<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; me.m_name_org=&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; If IsArray(me.m_ListSignPodp)&nbsp; &nbsp; &nbsp; &nbsp; Then Erase me.m_ListSignPodp<br />&nbsp; &nbsp; End Sub<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Private Sub SetError(Er As Integer, mes As String)&#039;записываем ошибку<br />&nbsp; &nbsp; &nbsp; &nbsp; Me.m_isError=True<br />&nbsp; &nbsp; &nbsp; &nbsp; If er&gt;=1000 And er&lt;=1100 Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_error_Text=mes&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.m_error_Text=&quot;Ошибка № &quot; &amp; Er &amp; &quot; в строке &quot; &amp; Erl &amp; Chr(13) &amp; Error(Er)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; End If&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; End Sub<br />End Class</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:02:16 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124869#p124869</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124868#p124868</link>
			<description><![CDATA[<p>%REM<br />&nbsp; &nbsp; Class Lico<br />&nbsp; &nbsp; Description: используется в классах Podpisant и Verify_Signed_XML<br />%END REM<br />Class Lico<br />&nbsp; &nbsp; Public FIO As String<br />&nbsp; &nbsp; Public UINFL As String<br />&nbsp; &nbsp; Public UINUL As String<br />&nbsp; &nbsp; Public UINOIGV As String<br />End Class</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:02:12 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124868#p124868</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124867#p124867</link>
			<description><![CDATA[<p>Declare Function w32_OSGetSystemTempDirectory Lib &quot;nnotes&quot; Alias &quot;OSGetSystemTempDirectory&quot; ( ByVal S As String) As Integer<br />Const db_title=&quot;Подписанты&quot;</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:02:04 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124867#p124867</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124866#p124866</link>
			<description><![CDATA[<p>Библиотека Library VerifySignedXML</p><p>%REM<br />&nbsp; &nbsp; Library VerifySignedXML<br />&nbsp; &nbsp; Created Aug 18, 2021 by Гроза Вадим Иванович/Home<br />&nbsp; &nbsp; Description:Библиотека для проверки подписи в документе XML и сравнение подписей с базой подписанты&nbsp; &nbsp; </p><p>для работы данной библиотеки необходимо наличие других библиотек<br />&quot;ConsoleCriptoGSS_2.0&quot;&nbsp; &nbsp; <br />&quot;ls.snapps.JSONReader&quot;</p><p>для проверки - используем класс Verify_Signed_XML<br />%END REM<br />Option Public<br />Option Declare</p><p>Use &quot;ConsoleCriptoGSS_2.0&quot;</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:01:55 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124866#p124866</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124865#p124865</link>
			<description><![CDATA[<div class="codebox"><pre><code>%REM
    Sub ZapolnTypeFiles
    Description: указываем разрешенные типы файлов
    &#039; [url]https://ru.wikipedia.org/wiki/Список_MIME-типов[/url]      -   подсказка
    &#039; [url]https://wp-kama.ru/id_8643/spisok-rasshirenij-fajlov-i-ih-mime-tipov.html[/url]    - тут поболее типов
%END REM
Sub ZapolnTypeFiles
    c_files_MIME(&quot;docx&quot;)    =    {href=&quot;data:application/msword;base64,}
    c_files_MIME(&quot;doc&quot;)        =    {href=&quot;data:application/msword;base64,}
    c_files_MIME(&quot;docm&quot;)    =    {href=&quot;data:application/msword;base64,}
    c_files_MIME(&quot;rtf&quot;)        =    {href=&quot;data:application/msword;base64,}
    c_files_MIME(&quot;jpeg&quot;)    =    {href=&quot;data:image/jpeg;base64,}
    c_files_MIME(&quot;jpg&quot;)        =    {href=&quot;data:image/jpeg;base64,}
    c_files_MIME(&quot;pdf&quot;)        =    {href=&quot;data:application/pdf;base64,}
    c_files_MIME(&quot;xls&quot;)        =    {href=&quot;data:application/vnd.ms-excel;base64,}
    c_files_MIME(&quot;xlsx&quot;)    =    {href=&quot;data:application/vnd.ms-excel;base64,}
    c_files_MIME(&quot;tif&quot;)        =    {href=&quot;data:image/tif;base64,}
    c_files_MIME(&quot;xml&quot;)        =    {href=&quot;data:application/xml;base64,}
    c_files_MIME(&quot;rar&quot;)        =    {href=&quot;data:application/x-rar-compressed;base64,}
    c_files_MIME(&quot;zip&quot;)        =    {href=&quot;data:application/zip;base64,}
    c_files_MIME(&quot;txt&quot;)        =    {href=&quot;data:text/plain;base64,}    
    c_files_MIME(&quot;ppt&quot;)        =    {href=&quot;data:application/vnd.ms-powerpoint;base64,}
    c_files_MIME(&quot;pptx&quot;)    =    {href=&quot;data:application/vnd.ms-powerpoint;base64,}
    c_files_MIME(&quot;vsd&quot;)        =    {href=&quot;data:application/vnd.visio;base64,}
    c_files_MIME(&quot;vsdx&quot;)    =    {href=&quot;data:application/vnd.visio2013;base64,}
End Sub</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:00:40 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124865#p124865</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124864#p124864</link>
			<description><![CDATA[<p>Function Unique As String<br />&nbsp; &nbsp; Dim unik<br />&nbsp; &nbsp; unik = Evaluate(&quot;@Unique&quot;)<br />&nbsp; &nbsp; Unique = StrToken(unik(0), &quot;-&quot;, -1)<br />&nbsp; &nbsp; Unique&nbsp; = Right (Unique, 3 )<br />End Function</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:00:36 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124864#p124864</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124863#p124863</link>
			<description><![CDATA[<p>Function Textword (myRange) As string<br />&#039; сохраняем word в html файл<br />&nbsp; &nbsp; &#039;добавлен кусок кода на случай если контент в ворд вставляют вместе с таблицей - в v.1.1изменен на универсальный код<br />&nbsp; &nbsp; &#039;подправлен кусок кода где контент мог начинаться как с абзаца, так и с таблицы, так и с заголовка (&lt;h1&gt;)<br />&#039;т.е. сделан универсальный код для избавления от внешней таблицы текста сопроводиловки<br />&nbsp; &nbsp; On Error GoTo ErrH&nbsp; &nbsp;<br />&nbsp; &nbsp; Dim str1 As String, str2 As String<br />&nbsp; &nbsp; Dim sText As String, mytext As String, str0 As String, str3 As String<br />&nbsp; &nbsp; Dim htmlStream As NotesStream, session As NotesSession, idx As Long<br />&nbsp; &nbsp; Dim mypar&nbsp; As Variant, myRangeTmp As Variant, WrdAppTmp As Variant, WrdDocTmp&nbsp; As Variant&nbsp; &#039; временый док<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Print &quot;ФУНКЦИЯ Textword&quot;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; myRange.Copy<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; &#039; Во временный Word документ вставляем текст письма (myRange), cохраняем как doctmp.html<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Set WrdAppTmp = CreateObject(&quot;Word.Application&quot;) &#039;Создание объекта Word&#039;a<br />&nbsp; &nbsp; WrdAppTmp.Visible= False &#039;True&nbsp; <br />&nbsp; &nbsp; Print &quot;создали временный ворд WrdAppTmp&quot;<br />&nbsp; &nbsp; If WrdAppTmp Is Nothing Then&nbsp; MessageBox &quot;Не установлен Word!!!&quot;, 0 + 16 , &quot;ошибка&quot; : Exit Function</p><p>&nbsp; &nbsp; WrdAppTmp.Documents.Add (&quot;Normal&quot;)&nbsp; &nbsp;&#039;(&quot;C:\XML\tempdoc.docx&quot;)<br />&nbsp; &nbsp; Set WrdDocTmp = WrdAppTmp.ActiveDocument<br />&nbsp; &nbsp; WrdDocTmp.Select<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Set mypar = WrdDocTmp.Paragraphs(1)<br />&nbsp; &nbsp; mypar.range.Find.ClearFormatting<br />&nbsp; &nbsp; mypar.range.Paste<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; WrdAppTmp.ChangeFileOpenDirectory datpatch<br />&nbsp; &nbsp; Call WrdDocTmp.SaveAs&nbsp; (&quot;doctmp.html&quot;, 10,False, &quot;&quot;,False,&quot;&quot;,,,,,,,,,, )<br />&nbsp; &nbsp; WrdDocTmp.Close<br />&nbsp; &nbsp; WrdAppTmp.Quit<br />&nbsp; &nbsp; Set WrdAppTmp = Nothing<br />&nbsp; &nbsp; Print&nbsp; &quot;сохранили в html&quot;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; &#039; Вырезаем с doctmp.html текст письма<br />&nbsp; &nbsp; Set session = New NotesSession<br />&nbsp; &nbsp; Set htmlStream = session.CreateStream<br />&nbsp; &nbsp; Call htmlStream.Open(datpatch+&quot;doctmp.html&quot;)<br />&nbsp; &nbsp; mytext$=&quot;&quot;<br />&nbsp; &nbsp; mytext$ = htmlStream.ReadText<br />&nbsp; &nbsp; Call htmlStream.Close<br />&nbsp; &nbsp; Print &quot;прочитали и закрыли html&quot;<br />&#039;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&nbsp; &nbsp; <br />&nbsp; &nbsp; &#039;здесь нужно почистить тест дока от внешней таблицы<br />%REM может быть что текст вставили с таблицей и получилась вложенная таблица<br />&nbsp; &nbsp; 1начало файла<br />&lt;table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0<br /> style=&#039;border-collapse:collapse;border:none&#039;&gt;<br />&nbsp; &nbsp;&nbsp; &lt;tr&gt;<br />&nbsp; &nbsp;&nbsp; &nbsp;&lt;td width=657 valign=top style=&#039;width:492.7pt;padding:0cm 5.4pt 0cm 5.4pt&#039;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; style=&#039;border-collapse:collapse;border:none&#039;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&lt;td width=657 valign=top style=&#039;width:492.7pt;padding:0cm 5.4pt 0cm 5.4pt&#039;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&lt;p<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2сам текст документа<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;/table&gt;<br />&nbsp; &nbsp;&nbsp; &nbsp;&lt;/td&gt;<br />&nbsp; &nbsp; &lt;/tr&gt;<br />&lt;/table&gt;<br />3конец файла<br />%END REM<br />&nbsp; &nbsp; str1=StrLeft(mytext$,&quot;&lt;table&quot;) &#039;взяли начало файла до таблицы (начало файла)<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &#039;стало в версии 1.1(заменили алгоритм получения str2)&nbsp; &nbsp; <br />&#039;НАЧАЛО ПОЛУЧЕНИЯ str2<br />&nbsp; &nbsp; idx=InStr(Len(str1+&quot;&lt;table&quot;),mytext$,&quot;&lt;td&quot;)<br />&nbsp; &nbsp; idx=InStr(idx,mytext$,&quot;&gt;&quot;)<br />&nbsp; &nbsp; str0=Mid$(mytext$, idx+1)<br />&nbsp; &nbsp; str2=StrLeftBack(str0,&quot;&lt;/td&gt;&quot;) &#039;взяли все что до последней строки внешней ячейки<br />&#039;КОНЕЦ ПОЛУЧЕНИЯ str2&nbsp; &nbsp; <br />&nbsp; &nbsp; str3=StrRightBack(mytext$,&quot;&lt;/table&gt;&quot;) &#039;взяли все что после последней строки внешней ячейки (конец файла)<br />&nbsp; &nbsp; mytext$=str1+str2+str3<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Textword=ParsHtmlText(mytext$)&nbsp; &nbsp; <br />&nbsp; &nbsp; Print &quot;ФУНКЦИЯ - конец Textword.&quot;<br />&nbsp; &nbsp; Exit Function<br />&nbsp; &nbsp; <br />ErrH:<br />&nbsp; &nbsp; Print &quot;Библиотека &#039;MED_XML&#039; ф-ция &#039;Textword&#039;. Ошибка &quot; &amp; Error(Err) &amp; &quot; в строке &quot; &amp; Erl&nbsp; &nbsp; <br />End Function</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:00:30 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124863#p124863</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124862#p124862</link>
			<description><![CDATA[<div class="codebox"><pre><code>%REM
    Function Strclean22
    Description: Comments for Function
%END REM
Function Strclean22 (mystr As String) As String
    On Error GoTo ErrH
    Dim ascx As String, tmpstr  As String, lenstr As Variant, x As Variant
    tmpstr= &quot;&quot;
    &#039;Strclean22=mystr
    &#039;Exit function
    tmpstr=mystr
    lenstr = Len(mystr)
    &#039;MsgBox mystr
    &#039;%REM
    For x=1 To lenstr &#039;очищаем от ненужных символов (указываем только те - которые нужны)
        ascx =  Mid$(mystr,x,1) 
        &#039;        If (Asc(ascx)&gt;31) And (Asc(ascx)&lt;38) Or ( Asc(ascx)&gt;38 And Asc(ascx)&lt;153) Or (Asc(ascx)&gt;191)  And (Asc(ascx)&lt;256) _
        &#039;        Or (Asc(ascx)=171)  Or (Asc(ascx)=187) Or (Asc(ascx)=185) Then        
        If (Asc(ascx)&gt;31 And Asc(ascx)&lt;38) Or ( Asc(ascx)&gt;38 And Asc(ascx)&lt;153) Or (Asc(ascx)&gt;191 And Asc(ascx)&lt;256) _
        Or Asc(ascx)=163 Or Asc(ascx)=165 Or Asc(ascx)=168_
        Or Asc(ascx)=170 Or Asc(ascx)=171 Or Asc(ascx)=175 Or Asc(ascx)=178 Or Asc(ascx)=179_
        Or Asc(ascx)=180 Or (Asc(ascx)&gt;=184 And Asc(ascx)&lt;=187)_
        Or Asc(ascx)=191 Or Asc(ascx)=177 Then                
        tmpstr = tmpstr + ascx
    End If
Next
    &#039;Strclean22=mystr
    &#039;Exit function
    &#039;MsgBox tmpstr    
    &#039;%END REM
    
    &#039;HTML символы заменяем (появляются после сохрания в html)   [url]http://_.ascii.cl/htmlcodes.htm[/url]
    
    
    &#039;%REM
    tmpstr = Replace(tmpstr,{quot;},{&amp;quot;})  &#039; &quot;
    tmpstr = Replace(tmpstr,{amp;},{&amp;amp;})  &#039; &amp;
    
    tmpstr = Replace(tmpstr,{lt;},{&amp;lt;})  &#039; &lt;
    tmpstr = Replace(tmpstr,{gt;},{&amp;gt;})  &#039; &gt;
    
    tmpstr = Replace(tmpstr,{nbsp;},{&amp;nbsp;})  &#039; неразрывный пробел
    tmpstr = Replace(tmpstr,{iexcl;},{&amp;iexcl;})  
    tmpstr = Replace(tmpstr,{cent;},{&amp;cent;})  
    tmpstr = Replace(tmpstr,{pound;},{&amp;pound;})  
    tmpstr = Replace(tmpstr,{curren;},{&amp;curren;})  
    tmpstr = Replace(tmpstr,{yen;},{&amp;yen;})  
    tmpstr = Replace(tmpstr,{brvbar;},{&amp;brvbar;})  
    tmpstr = Replace(tmpstr,{sect;},{&amp;sect;})  
    tmpstr = Replace(tmpstr,{uml;},{&amp;uml;})  
    tmpstr = Replace(tmpstr,{copy;},{&amp;copy;})  
    tmpstr = Replace(tmpstr,{laquo;},{&amp;laquo;})  
    tmpstr = Replace(tmpstr,{reg;},{&amp;reg;})  
    tmpstr = Replace(tmpstr,{macr;},{&amp;macr;})  
    
    tmpstr = Replace(tmpstr,{euro;},{&amp;euro;})  
    
    tmpstr = Replace(tmpstr,{sup1;},{&amp;#185;})  &#039; верхний индекс &quot;один&quot;
    tmpstr = Replace(tmpstr,{sup2;},{&amp;#178;})  
    tmpstr = Replace(tmpstr,{sup3;},{&amp;#179;})  
    
    tmpstr = Replace(tmpstr,{frac14;},{&amp;#188;})  &#039;дробь - одна четверть
    tmpstr = Replace(tmpstr,{frac12;},{&amp;#189;})  &#039;     дробь - одна вторая
    tmpstr = Replace(tmpstr,{frac34;},{&amp;#190;})  &#039;дробь - три четверти
    &#039;MsgBox tmpstr    
    &#039;удаляем пустые параграфы
    tmpstr = Replace(tmpstr,{&lt;p&gt;&lt;span style=&quot;padding:0px 10px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;},&quot;&quot;) 
    &#039;%END REM
    &#039;Msgbox tmpstr
    Strclean22  =    tmpstr
    

    Exit Function
ErrH:
    Print &quot;Библиотека &#039;MED_XML&#039; ф-ция &#039;Strclean&#039;. Ошибка &quot; &amp; Error(Err) &amp; &quot; в строке &quot; &amp; Erl    
End Function</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:00:17 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124862#p124862</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124861#p124861</link>
			<description><![CDATA[<div class="codebox"><pre><code>Function Strclean (mystr As String) As String
    On Error GoTo ErrH
    Dim ascx As String, tmpstr  As String, lenstr As Variant, x As Variant
    tmpstr= &quot;&quot;
    &#039;tmpstr=mystr
    lenstr = Len(mystr)
    &#039;MsgBox mystr
    &#039;%REM
    For x=1 To lenstr &#039;очищаем от ненужных символов (указываем только те - которые нужны)
        ascx =  Mid$(mystr,x,1) 
&#039;        If (Asc(ascx)&gt;31) And (Asc(ascx)&lt;38) Or ( Asc(ascx)&gt;38 And Asc(ascx)&lt;153) Or (Asc(ascx)&gt;191)  And (Asc(ascx)&lt;256) _
&#039;        Or (Asc(ascx)=171)  Or (Asc(ascx)=187) Or (Asc(ascx)=185) Then        
        If (Asc(ascx)&gt;31 And Asc(ascx)&lt;38) Or ( Asc(ascx)&gt;38 And Asc(ascx)&lt;153) Or (Asc(ascx)&gt;191 And Asc(ascx)&lt;256) _
        Or Asc(ascx)=163 Or Asc(ascx)=165 Or Asc(ascx)=168_
        Or Asc(ascx)=170 Or Asc(ascx)=171 Or Asc(ascx)=175 Or Asc(ascx)=178 Or Asc(ascx)=179_
        Or Asc(ascx)=180 Or (Asc(ascx)&gt;=184 And Asc(ascx)&lt;=187)_
        Or Asc(ascx)=191 Or Asc(ascx)=177 Then                
            tmpstr = tmpstr + ascx
        End If
    Next
    &#039;MsgBox tmpstr    
    &#039;%END REM
    
&#039;HTML символы заменяем (появляются после сохрания в html)   [url]http://_.ascii.cl/htmlcodes.htm[/url]
    

    tmpstr = Replace(tmpstr,{quot;},{&amp;quot;})  &#039; &quot;
    tmpstr = Replace(tmpstr,{amp;},{&amp;amp;})  &#039; &amp;
    
    tmpstr = Replace(tmpstr,{lt;},{&amp;lt;})  &#039; &lt;
    tmpstr = Replace(tmpstr,{gt;},{&amp;gt;})  &#039; &gt;
    
    tmpstr = Replace(tmpstr,{nbsp;},{&amp;nbsp;})  &#039; неразрывный пробел
    tmpstr = Replace(tmpstr,{iexcl;},{&amp;iexcl;})  
    tmpstr = Replace(tmpstr,{cent;},{&amp;cent;})  
    tmpstr = Replace(tmpstr,{pound;},{&amp;pound;})  
    tmpstr = Replace(tmpstr,{curren;},{&amp;curren;})  
    tmpstr = Replace(tmpstr,{yen;},{&amp;yen;})  
    tmpstr = Replace(tmpstr,{brvbar;},{&amp;brvbar;})  
    tmpstr = Replace(tmpstr,{sect;},{&amp;sect;})  
    tmpstr = Replace(tmpstr,{uml;},{&amp;uml;})  
    tmpstr = Replace(tmpstr,{copy;},{&amp;copy;})  
    tmpstr = Replace(tmpstr,{laquo;},{&amp;laquo;})  
    tmpstr = Replace(tmpstr,{reg;},{&amp;reg;})  
    tmpstr = Replace(tmpstr,{macr;},{&amp;macr;})  
    
    tmpstr = Replace(tmpstr,{euro;},{&amp;euro;})  
    
    tmpstr = Replace(tmpstr,{sup1;},{&amp;#185;})  &#039; верхний индекс &quot;один&quot;
    tmpstr = Replace(tmpstr,{sup2;},{&amp;#178;})  
    tmpstr = Replace(tmpstr,{sup3;},{&amp;#179;})  
    
    tmpstr = Replace(tmpstr,{frac14;},{&amp;#188;})  &#039;дробь - одна четверть
    tmpstr = Replace(tmpstr,{frac12;},{&amp;#189;})  &#039;     дробь - одна вторая
    tmpstr = Replace(tmpstr,{frac34;},{&amp;#190;})  &#039;дробь - три четверти
    &#039;MsgBox tmpstr    
    &#039;удаляем пустые параграфы
    tmpstr = Replace(tmpstr,{&lt;p&gt;&lt;span style=&quot;padding:0px 10px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;},&quot;&quot;) 
    
    &#039;fileNum% = Freefile()
    &#039;Open  &quot;C:\xml\temp.txt&quot; For Append As fileNum%
    &#039;Print # fileNum%, tmpstr
    &#039;Close  fileNum%
    
    &#039;Dim array1(1) As String &#039; для замены переносов строк в содержании
    &#039;Dim array2(1) As String
    &#039;array1(0) = Chr(13)
    &#039;array1(1) = Chr(9)
    &#039;array2(0) = &quot;&lt;/p&gt;&lt;p&gt;&quot;
    &#039;array2(1) = {&lt;span style=&quot;padding:0px 10px;&quot;&gt;&lt;/span&gt;}
    &#039;tmpstr = Replace(tmpstr,array1,array2) 
    &#039;tmpstr = &quot;&lt;p&gt;&quot; +  tmpstr + &quot;&lt;/p&gt;&quot;
    
    &#039;Msgbox tmpstr
    Strclean  =    tmpstr

    Exit Function
ErrH:
    Print &quot;Библиотека &#039;MED_XML&#039; ф-ция &#039;Strclean&#039;. Ошибка &quot; &amp; Error(Err) &amp; &quot; в строке &quot; &amp; Erl    
End Function</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 11:00:02 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124861#p124861</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124860#p124860</link>
			<description><![CDATA[<p>%REM<br />&nbsp; &nbsp; Sub RunImportToWord<br />&nbsp; &nbsp; Description: точка входа импорта в ворд&nbsp; &nbsp; <br />%END REM<br />Sub RunImportToWord<br />&nbsp; &nbsp; Print &quot;Старт - экспорт с данных лотус дока в ворд файл&quot;<br />&nbsp; &nbsp; On Error GoTo ErrH<br />&nbsp; &nbsp; Dim session As New NotesSession, ws As New NotesUIWorkspace, tmp_tmp As String<br />&nbsp; &nbsp; Dim b_templ As Boolean &#039;true-берем данные для формирования из документа шаблона, false - по старому работаем&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Set L_db = session.CurrentDatabase&nbsp; &nbsp; <br />&nbsp; &nbsp; Set uidoc = ws.CurrentDocument<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; If ws.Prompt (PROMPT_YESNO, &quot;Внимание&quot;,&nbsp; &nbsp; &quot;Импортировать в письмо данные из текущего документа?&quot;) &lt;&gt; 1 Then Exit Sub</p><p>&nbsp; &nbsp; Call uidoc.save&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Set L_doc = uidoc.Document&nbsp; &nbsp; <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; If Not proverka_import(tmp_tmp, b_templ) Then&nbsp; MessageBox tmp_tmp : Exit Sub &#039; - ---&nbsp; &nbsp;ПРОПУСКНАЯ СИСТЕМА<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; L_docpatch = Environ$(&quot;TEMP&quot;) + &quot;\&quot; &#039; путь во временную папку<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; &#039;b_templ=false<br />&nbsp; &nbsp; Select Case b_templ<br />&nbsp; &nbsp; &nbsp; &nbsp; Case True: &nbsp; &nbsp; Call ImportToWord &nbsp; &nbsp; &nbsp; &nbsp; &#039;используем настройки из документа шаблона<br />&nbsp; &nbsp; &nbsp; &nbsp; Case False: Call ImportToWord_OLD&nbsp; &nbsp; &#039;работаем по старой схеме<br />&nbsp; &nbsp; End Select<br />&nbsp; &nbsp; Exit Sub<br />&nbsp; &nbsp; <br />ErrH:<br />&nbsp; &nbsp; Print &quot;Библиотека &#039;MED_XML&#039; ф-ция &#039;RunImportToWord&#039;. Ошибка импорта в Word &quot; &amp; Error(Err) &amp; &quot; в строке &quot; &amp; Erl&nbsp; &nbsp; <br />&nbsp; &nbsp; Exit Sub <br />End Sub</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 10:59:45 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124860#p124860</guid>
		</item>
		<item>
			<title><![CDATA[Re: Лотус скрипты для работы с XML]]></title>
			<link>http://itpmr.ru/viewtopic.php?pid=124859#p124859</link>
			<description><![CDATA[<p>%REM<br />&nbsp; &nbsp; Sub RunCreateXMLforAttach<br />&nbsp; &nbsp; Description: точка входя для запуска создания XML документа для аттачей(приложений в лотус карточке)<br />%END REM<br />Sub RunCreateXMLAttach<br />&nbsp; &nbsp; On Error GoTo ErrH<br />&nbsp; &nbsp; Dim session As New NotesSession, ws As New NotesUIWorkspace, tmp_tmp As String, namefile As String&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Set L_db = session.CurrentDatabase&nbsp; &nbsp; <br />&nbsp; &nbsp; Set uidoc = ws.CurrentDocument<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; If ws.Prompt (PROMPT_YESNO, &quot;Внимание&quot;,&nbsp; &nbsp; &quot;Сформировать XML документ?&quot;) &lt;&gt; 1 Then Exit Sub<br />&nbsp; &nbsp; Call uidoc.save&nbsp; &#039; иначе новые доки не отправятся, т.к. XMLattach&nbsp; не существует еще ((.&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Set L_doc = uidoc.Document<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Call ZapolnTypeFiles &#039;заполняем разрешенными типами документов приложений<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; If Not proverka_attach(tmp_tmp, namefile) Then&nbsp; MessageBox tmp_tmp : Exit Sub &#039; - ---&nbsp; &nbsp;ПРОПУСКНАЯ СИСТЕМА +выбор вложения и шаблона<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; Call DataPatchInstall&nbsp; &nbsp; <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; Call CreateXML(namefile)<br />&nbsp; &nbsp; Exit Sub<br />&nbsp; &nbsp; <br />ErrH:<br />&nbsp; &nbsp; Print &quot;Библиотека &#039;MED_XML&#039; ф-ция &#039;RunCreateXMLAttach&#039;. Ошибка выгрузки в XML &quot; &amp; Error(Err) &amp; &quot; в строке &quot; &amp; Erl&nbsp; &nbsp; <br />&nbsp; &nbsp; Exit Sub <br />End Sub</p>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Fri, 14 Oct 2022 10:59:35 +0000</pubDate>
			<guid>http://itpmr.ru/viewtopic.php?pid=124859#p124859</guid>
		</item>
	</channel>
</rss>
