<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Frontol (JS ActiveXObject)]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=14500&amp;type=atom" />
	<updated>2019-01-21T12:50:33Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=14500</id>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131480#p131480" />
			<content type="html"><![CDATA[<p><strong>Dementor</strong>, написал Вам на почту</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-01-21T12:50:33Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131480#p131480</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131479#p131479" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong><br />Попробую расписать подробнее.<br />Есть программа товароучет, она делает выгрузку со всеми справочниками, товарами, ценами и т.д.<br />Она выгружает файл import5.txt, далее как файл готов создает пустой файл-флаг загрузки import5.upd<br />Как только фронтол видит файл-флаг загрузки, он своими средствами начинает качать файл, и после сделает обновление справочников.<br />После окончания загрузки фронтол удалит import5.upd<br />Но т.к. кассиры &quot;слепые&quot; и не смотрят на фронтол, то задача при наличии import5.upd выдавать им ошибку, что бы смотрели.<br />Сейчас для простоты файл назван 1.txt<br />import5.upd есть - показать кассиру ошибку.<br />import5.upd нет - не показывать ошибку, все хорошо.<br />По факту, это костыль, что бы кассиры не смогли торговать, пока идет загрузка данных</p>]]></content>
			<author>
				<name><![CDATA[Dementor]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=39901</uri>
			</author>
			<updated>2019-01-21T12:47:47Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131479#p131479</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131478#p131478" />
			<content type="html"><![CDATA[<p><strong>Dementor</strong>, прекрасно, а что делать с загружаемыми данными то ?</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-01-21T12:41:04Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131478#p131478</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131477#p131477" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong><br />Заработал на уровне функциональности изначального скрипта, но:<br />- если файл на фтп есть - не выдает сообщения.<br />- если файла нет - сообщение выдается.<br />Должно быть наоборот, если файл есть - значит фронтолу нужно грузить данные, значит выдать ошибку кассиру что бы не трогал кассу.<br />----------------------<br />Мы сейчас пришли к той же ситуации, что была и у нас: <br />- если файл есть на фтп, то сессия одна.<br />- если файла нет на фтп, то сессии плодятся.</p>]]></content>
			<author>
				<name><![CDATA[Dementor]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=39901</uri>
			</author>
			<updated>2019-01-21T12:35:01Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131477#p131477</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131473#p131473" />
			<content type="html"><![CDATA[<p>И снова исправил. Обновляем.<br /></p><div class="codebox"><pre><code>
// Полифил функции удаления лишних пробелов из строки
if (!String.prototype.trim) {
	(function() {
		// Вырезаем BOM и неразрывный пробел
		String.prototype.trim = function() {
			return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, &#039;&#039;);
		};
	})();
}

// функция init() является основной и служит для привязки событий к обработчикам
function init() {
	//установка обработчика для события, срабатывающего после открытия документа
	frontol.addEventListener(&quot;openDocument&quot;, &quot;afterOpenDocument&quot;, false); 
}

// Событие открытия документа
function afterOpenDocument() {
	// Путь до файла списка загрузок
	var fileName = &quot;d:\\ftp.txt&quot;
		//создаем объект считывания из фаила параметров подключения ftp
		,fso = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;)
		// Создание объекта для загрузки данных с FTP
		,ftp = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);
	
	if(!fso.FileExists(fileName)) {
		return frontol.actions.showError(&#039;Файл списка загрузок &quot;&#039; + fileName + &#039;&quot; не найден !&#039;);
	}
	// Открытие файла
	var ts = fso.OpenTextFile(fileName,1)
		,line = &#039;&#039;;
		
	// Построчное чтение файла
	while(!ts.AtEndOfStream){
		// Считывание строки и удаление из неё пробелов и табуляций по краям текста
		line = ts.ReadLine().trim();
		// Если в строке хоть что-то есть, то пробуем использовать её как адрес
		if(line.trim() != &#039;&#039;){
			ftp.open(&#039;GET&#039;,line,false);
			try {
				ftp.send();
				// Действия с файлом - ftp.responseBody
			} catch(e){
				return frontol.actions.showError(&#039;Не удалось загрузить файл &quot;&#039; + line + &#039;&quot;&#039;);
			}
		}
	}
}

</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-01-21T11:57:03Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131473#p131473</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131471#p131471" />
			<content type="html"><![CDATA[<p>Ещё раз внимательно поизучал Ваш код. </p><p>1) Обратил внимание на то, что Вы объявляете переменные <strong>fso, ftp, f</strong> как глобальные, потому что не ставите <strong>var</strong> перед ними. Т.е они создаются не в пределах процедуры <strong>init</strong> и даже не в <strong>afterOpenDocument</strong>, а на самом глобальном уровне. Учитывая, что Frontol, видимо не выгружает среду исполнения скриптов, как я и говорил ранее, то по этой причине вы и получаете зависшие сессии, потому что эти переменные остаются в памяти. Если же сделать их объявление внутри процедуры, то они автоматически очистятся при её завершении.</p><p>2) Я бы начал вот с такого кода. К сожалению, писал без проверки, так как frontol-а пока под руками нет.</p><div class="codebox"><pre><code>
// Полифил функции удаления лишних пробелов из строки
if (!String.prototype.trim) {
  (function() {
    // Вырезаем BOM и неразрывный пробел
    String.prototype.trim = function() {
      return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, &#039;&#039;);
    };
  })();
}

// функция init() является основной и служит для привязки событий к обработчикам
function init() {
	//установка обработчика для события, срабатывающего после открытия документа
	frontol.addEventListener(&quot;openDocument&quot;, &quot;afterOpenDocument&quot;, false); 
}

function afterOpenDocument() {
	// Путь до файла списка загрузок
	var fileName = &quot;d:\\ftp.txt&quot;,
		//создаем объект считывания из фаила параметров подключения ftp
		fso = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;),
		// Создание объекта для загрузки данных с FTP
		ftp = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);
	
	if(!fso.FileExists(fileName)) throw new Error(&#039;Файл списка загрузок не найден !&#039;)

	// Открытие файла
	var ts = fso.OpenTextFile(fileName,1),
		line = &#039;&#039;;
		
	// Построчное чтение файла
	while(!ts.AtEndOfStream){
		// Считывание строки и удаление из неё пробелов и табуляций по краям текста
		line = ts.ReadLine().trim();
		// Если в строке хоть что-то есть, то пробуем использовать её как адрес
		if(line.trim() != &#039;&#039;){
			ftp.open(&#039;GET&#039;,line,false);
			ftp.send();
			// Действия с файлом - ftp.responseBody
		}
	}
}</code></pre></div><p>3) В этот код в дальнейшем надо добавить обработчик ошибки если пользователь нажал на Cancel. Но надо понять, что сейчас скрипт будет сообщать, если этого обработчика пока нет.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-01-21T11:45:22Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131471#p131471</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131469#p131469" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p><strong>Dementor</strong>, ну по хорошему - наверное стоит обработать исключение и выдать сообщение клиенту, как это сделано в примере разработчиков.</p></blockquote></div><p>Мб вы и правы, начал пробовать вывести свой варнинг кассиру с помощью вашего кода, ругается</p>]]></content>
			<author>
				<name><![CDATA[Dementor]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=39901</uri>
			</author>
			<updated>2019-01-21T10:54:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131469#p131469</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131467#p131467" />
			<content type="html"><![CDATA[<p><strong>Dementor</strong>, ну по хорошему - наверное стоит обработать исключение и выдать сообщение клиенту, как это сделано в примере разработчиков.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-01-21T10:16:52Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131467#p131467</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131465#p131465" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Поэтому исключение останавливает выполнение кода.</p></blockquote></div><p>Так это хорошо, значит накосячили, значит магазин пнет либо админа, либо техподдержку<br />А так скрипт просто не сработает и все</p>]]></content>
			<author>
				<name><![CDATA[Dementor]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=39901</uri>
			</author>
			<updated>2019-01-21T09:42:38Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131465#p131465</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131464#p131464" />
			<content type="html"><![CDATA[<p><strong>Dementor</strong>, так ведь логично.</p><p>У вас кусок кода, где происходит исключение не взят в <strong>try {...} catch(e) {...}</strong><br /></p><div class="codebox"><pre><code>
f = fso.OpenTextFile(fileName, 1);
//Эта функция может сгенерировать исключение, если файл не существует
			while (!f.AtEndOfStream) {
				line = f.ReadLine();
				//Также может сгенерировать исключение
				if (isNaN(line)) {};
			}
</code></pre></div><p>// Вот так.<br /></p><div class="codebox"><pre><code>
	try {
		f = fso.OpenTextFile(fileName, 1);
		//Эта функция может сгенерировать исключение, если файл не существует
		while (!f.AtEndOfStream) {
			line = f.ReadLine();
			//Также может сгенерировать исключение
			if (isNaN(line)) {};
		}
	} catch(e){
		//...
	}
</code></pre></div><p>Поэтому исключение останавливает выполнение кода.</p><p>Либо, как я уже говорил, можно проверить существование файла перед его открытием через <strong>fso.FileExists</strong>.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-01-21T09:39:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131464#p131464</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131463#p131463" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong> при отсутствии ftp.txt останавливается выполнение скрипта и frontol выдает ошибку<br />последний вариант кода у вас в личке</p>]]></content>
			<author>
				<name><![CDATA[Dementor]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=39901</uri>
			</author>
			<updated>2019-01-21T09:16:39Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131463#p131463</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131462#p131462" />
			<content type="html"><![CDATA[<p><strong>Dementor</strong><br />1) Постарайтесь, пожалуйста, форматировать код при постинге, а то читать линейную портянку очень неудобно.<br />	Для этих целей можно использовать даже online сервисы. Например: <a href="https://www.freeformatter.com/javascript-beautifier.html">www.freeformatter.com</a><br />2) Да, вижу их подход. Но по мне - лучше предотвратить ошибку, чем обрабатывать исключение, но хотя и такой подход как у них - имеет место быть.<br />3) Если смотреть тот, пример, который Вы выложили изначально, то у Вас там нет обработки происходящих исключений при недоступности файлов.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-01-21T09:13:07Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131462#p131462</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131460#p131460" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Не не не. Я про исходный файл ftp.txt</p></blockquote></div><p><strong>Xameleon</strong> Это взял из примера разработчиков Frontol, у них код выглядел так:<br /></p><div class="codebox"><pre><code>Пример обработки исключений в сценарии
function readFile() {
	fileName = &quot;c:\\script.txt&quot;;
	try // Начало блока, в котором ожидается возникновение исключений
	{
		fso = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
		f = fso.OpenTextFile(fileName, 1); //Эта функция может сгенерировать
		//исключение, например, если файл не существует
		while (!f.AtEndOfStream) {
			line = f.ReadLine(); //Также может сгенерировать исключение
			if (isNaN(line))
				frontol.actions.showError(&quot;Файл содержит некорректное значение &#039;&quot; + line + &quot;&#039;.&quot;);
			// ... Дальнейшая обработка строки файла ...
		}
		f.Close();
	} catch (e) //Начало блока обработки исключений
	{
		if (e.message == &quot;&quot;) //Выполнение прервано вызовом frontol.actions.cancel
		//или frontol.actions.showError
		{
			f.Close();
			throw e; //Чтобы Frontol обработал исключение, сгенерированное вызовом
			// frontol.actions.cancel или frontol.actions.showError в блоке try, оно передается дальше.
		} else
			switch (e.number) //Анализ кода ошибки системных исключений
		{
			case -2146828218:
				frontol.actions.showError(&quot;Проверьте разрешения для файла &quot; + fileName + &quot;.&quot;);
				break;
			case -2146828235:
				frontol.actions.showError(&quot;Файл &quot; + fileName + &quot; не найден.&quot;);
				break;
			default:
				frontol.actions.showError(&quot;Неизвестная ошибка: &quot; + e.number + &quot; &quot; + e.message);
		}
	}
}</code></pre></div><p>Вроде мой вариант работает</p>]]></content>
			<author>
				<name><![CDATA[Dementor]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=39901</uri>
			</author>
			<updated>2019-01-21T08:39:00Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131460#p131460</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131459#p131459" />
			<content type="html"><![CDATA[<p>Не не не. Я про исходный файл ftp.txt<br />У Вас же было написано<br /></p><div class="codebox"><pre><code> f = fso.OpenTextFile(fileName, 1); //Эта функция может сгенерировать исключение, если файл не существует</code></pre></div><p>Я к тому, что этого исключения можно избежать.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2019-01-21T08:35:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131459#p131459</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Frontol (JS ActiveXObject)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=131458#p131458" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>А что мешает проверять существование файла через FileExists ?</p><div class="codebox"><pre><code>
if(fso.FileExists(filePath)){
...
}
</code></pre></div></blockquote></div><p>А разве прокатит по фтп?<br />Он же вроде только с путями самбы работает</p>]]></content>
			<author>
				<name><![CDATA[Dementor]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=39901</uri>
			</author>
			<updated>2019-01-21T08:24:48Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=131458#p131458</id>
		</entry>
</feed>
