<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>1cguide.ru</title>
	<atom:link href="https://1cguide.ru/feed" rel="self" type="application/rss+xml" />
	<link>https://1cguide.ru</link>
	<description>Обучение программированию на 1С 8</description>
	<lastBuildDate>Sun, 08 Nov 2020 14:37:55 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.1</generator>

<image>
	<url>https://1cguide.ru/wp-content/uploads/2020/09/svg-фавикон-120x120.svg</url>
	<title>1cguide.ru</title>
	<link>https://1cguide.ru</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Условия 1С. Использование условного оператора</title>
		<link>https://1cguide.ru/programmirovanie-1s/usloviya-1s.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/usloviya-1s.html#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 04 Nov 2020 04:40:07 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1367</guid>

					<description><![CDATA[<p>Как и в любом языке программирования, во встроенном языке 1С 8 присутствует условный оператор. Он позволяет выполнять определенный набор операторов, в зависимости от выполнения логического выражения. Использование условия в 1с позволяет организовать ветвление алгоритма, в зависимости от различных параметров работы системы. Синтаксис условий 1С В общем виде условный оператор выглядит</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/usloviya-1s.html">Условия 1С. Использование условного оператора</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Как и в любом языке программирования, во встроенном языке 1С 8 присутствует условный оператор. Он позволяет выполнять определенный набор операторов, в зависимости от выполнения логического выражения. Использование условия в 1с позволяет организовать ветвление алгоритма, в зависимости от различных параметров работы системы.</p>
<h2>Синтаксис условий 1С</h2>
<p>В общем виде условный оператор выглядит следующим образом:</p>
<pre><code>Если &lt;Логическое выражение&gt; Тогда
    // Операторы
[ИначеЕсли &lt;Логическое выражение&gt; Тогда]
    // Операторы
[Иначе]
    // Операторы
КонецЕсли;</code></pre>
<p>Из приведенного синтаксиса, можно сказать об основных особенностях оператора:</p>
<ol>
<li>Логический оператор всегда начинается с ключевой фразы <em>Если</em> и заканчивается фразой <em>КонецЕсли</em>;</li>
<li><em>Логическое выражение </em>&#8212; выражение, результатом которого является значение типа <em>Булево</em>, то есть <em>Истина</em> или <em>Ложь</em>. Если результат выполнения логического выражения &#8212; <em>Истина</em>, выполняется блок операторов, идущих после ключевого слова <em>Тогда</em>;</li>
<li>В логическом выражении могут быть использованы операции сравнения: &#171;=&#187;, &#171;&lt;&gt;&#187; (не равно), &#171;&gt;&#187;, &#171;&lt;&#171;, &#171;&gt;=&#187; (больше или равно), &#171;&lt;=&#187; (меньше или равно);</li>
<li>Также в логическом выражении могут применятся булевы операции: &#171;И&#187;, &#171;ИЛИ&#187;, &#171;НЕ&#187;;</li>
<li>Можно создавать неограниченное количество блоков <em>ИначеЕсли</em>, выражение которых будет проверяться, если выражения предыдущих блоков <em>Если</em> и <em>ИначеЕсли</em> вернули <em>Ложь</em>;</li>
<li>Также можно использовать один блок <em>Иначе</em>. Он будет выполняться, если не выполнился ни один из предыдущих блоков <em>Если</em> и <em>ИначеЕсли</em>.</li>
</ol>
<h2>Примеры использования условий в 1С</h2>
<p>От теории перейдем к практике. Приведем несколько примеров использования условий. Обработку с разобранными примерами можно скачать <a href="https://1cguide.ru/wp-content/uploads/2020/11/Условия1С.rar">Здесь</a>.</p>
<p><a href="https://1cguide.ru/wp-content/uploads/2020/11/Условия-1С.-Примеры-работы.jpg"><img loading="lazy" class="alignnone wp-image-1371 size-medium" src="https://1cguide.ru/wp-content/uploads/2020/11/Условия-1С.-Примеры-работы-300x207.jpg" alt="Условия 1С. Примеры работы" width="300" height="207" srcset="https://1cguide.ru/wp-content/uploads/2020/11/Условия-1С.-Примеры-работы-300x207.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/11/Условия-1С.-Примеры-работы.jpg 759w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h3>Простые условия</h3>
<p>Пример 1. Пусть у нас есть две числовые переменные <em>Число1</em> и <em>Число2.</em> Вывести пользователю сообщение, если значения этих переменных равны.</p>
<pre><code>Если Число1 = Число2 Тогда
    Сообщить("Числа равны");
КонецЕсли;
</code></pre>
<p>Таким образом мы реализовали простейшее условие в 1с 8. Операция сравнения &#171;=&#187; проверяет равенство переменных расположенных слева и справа от нее. Если значения равны, выполняются операторы после ключевого слова <em>Тогда</em> (в нашем случае оператор один &#8212; <em>Сообщить</em>). Если же значения не равны, операторы расположенные в условии не выполнятся.</p>
<p>Пример 2. Немного усложним первый пример. Выведем сообщение в случае неравенства чисел.</p>
<pre><code>Если Число1 = Число2 Тогда
    Сообщить("Числа равны");
Иначе
    Сообщить("Числа не равны");
КонецЕсли;</code></pre>
<p>В случае равенства чисел алгоритм будет отрабатывать также, как и в первом примере. А вот в случае их неравенства, выполнятся операторы после <em>Иначе</em>. Тут нет смысла использовать дополнительные условия, так как числа либо равны друг другу, либо нет.</p>
<h3>Составные условия</h3>
<p>Пример 3. Пусть у нас есть три числовые переменные <em>Число1</em>,<em>Число2</em> и <em>Число3</em>. Разделить <em>Число1</em> либо на <em>Число2</em>, либо на <em>Число3</em>. Делить на 0 нельзя, делитель будем выбирать исходя из этого условия.</p>
<pre><code>Если Число2 &lt;&gt; 0 Тогда
		
    Частное = Число1 / Число2;
    Сообщить(Частное);
		
ИначеЕсли Число3 &lt;&gt; 0 Тогда
		
    Частное = Число1 / Число3;
    Сообщить(Частное);
		
Иначе
    Сообщить("Делители равны 0, операция невозможна");
КонецЕсли;
</code></pre>
<p>Теперь в условие добавился блок <em>ИначеЕсли</em>. Условный оператор отработает следующим образом:</p>
<ul>
<li>Если <em>Число2</em> не равно нулю, тогда делим <em>Число1</em> на <em>Число2</em>;</li>
<li>Если первое условие вернуло <em>Ложь</em> (т.е. <em>Число2</em> оказалось равным нулю.), только в этом случае произойдет проверка следующего условия (в блоке <em>ИначеЕсли</em>). Если <em>Число3</em> не равно нулю, тогда делим <em>Число1</em> на <em>Число3</em>;</li>
<li>Если ни одно из предыдущих условий не выполнилось (и <em>Число2</em> и <em>Число3</em> оказались равны нулю), тогда выполняются операторы после <em>Иначе</em> (выводится сообщение о невозможности деления);</li>
</ul>
<p>Также этот пример можно выполнить используя вместо операции &#171;&lt;&gt;&#187;, комбинацию операции &#171;=&#187; и логической операции &#171;Не&#187;;</p>
<pre><code>Если Не Число2 = 0 Тогда
    ...		
ИначеЕсли Не Число3 = 0 Тогда
    ...	
Иначе
    ...
КонецЕсли;
</code></pre>
<p>Логика получается точно такая же &#8212; &#171;не равно&#187;. Только сначала произойдет проверка на равенство, а потом изменение полученного значение на противоположное (<em>Истина</em> на <em>Ложь</em>, <em>Ложь</em> на <em>Истина</em>).<br />
<!-- Yandex.RTB R-A-247615-2 --></p>
<div id="yandex_rtb_R-A-247615-2"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-2",
                renderTo: "yandex_rtb_R-A-247615-2",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<h3>Условия 1С со сложными логическими выражениями</h3>
<p>Пример 4. Разделить <em>Число1</em> на сумму переменных <em>Число2</em> и <em>Число3</em>. Чтобы не получить ошибку деления, произвести проверку на 0.</p>
<pre><code>Если Число2 = 0 И Число3 = 0 Тогда
    Сообщить("Нельзя делить на 0");
Иначе
		
    Частное = Число1 / (Число2 + Число3);
    Сообщить(Частное);
		
КонецЕсли;
</code></pre>
<p>В логическом выражении используется операция &#171;И&#187;. То есть для выполнения условия и <em>Число2</em> и <em>Число3</em> должны быть равными нулю. Вычисление логического выражения будет осуществляться в следующем порядке:</p>
<ul>
<li>Вычисляется значение первой части условия (<em>Число2</em> = 0);
<ul>
<li>Если ее значение <em>Ложь</em>, вычисление второй части (<em>Число3</em> = 0) производится не будет, выполнятся операторы расположенные после <em>Иначе</em>;</li>
<li>Если его значение <em>Истина</em>:</li>
</ul>
</li>
<li>Вычисляется значение второй части условия (<em>Число3</em> = 0);
<ul>
<li>Если ее значение <em>Ложь</em>, выполнятся операторы расположенные после <em>Иначе</em>;</li>
<li>Если ее значение <em>Истина</em>, выполнятся операторы расположенные после <em>Тогда</em>.</li>
</ul>
</li>
</ul>
<p>Для выполнение составного условия 1с, разделенного операцией &#171;И&#187; требуется выполнение каждого под условия. Каждое под условие проверяется по порядку. Если при вычислении какого-то под условия получается <em>Ложь</em>, то следующие проверяться уже не будут.</p>
<p>Пример 5. Разделить <em>Число1</em> на произведение переменных <em>Число2</em> и <em>Число3</em>. Чтобы не получить ошибку деления, произвести проверку на 0.</p>
<pre><code>Если Число2 = 0 Или Число3 = 0 Тогда
    Сообщить("Нельзя делить на 0");
Иначе
		
    Частное = Число1 / (Число2 * Число3);
    Сообщить(Частное);
		
КонецЕсли;
</code></pre>
<p>В логическом выражении используется операция &#171;ИЛИ&#187;. То есть для выполнения условия <em>Число2</em> или <em>Число3</em> должно быть равным нулю. При использовании операции &#171;Или&#187; всегда вычисляются все под условия.</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/usloviya-1s.html">Условия 1С. Использование условного оператора</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/usloviya-1s.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Циклы 1с 8 &#8212; описание с примерами</title>
		<link>https://1cguide.ru/programmirovanie-1s/cikly-1s-8.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/cikly-1s-8.html#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 22 Oct 2020 15:37:27 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<category><![CDATA[Цикл]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1338</guid>

					<description><![CDATA[<p>В статье будут описаны циклы 1с 8: их разновидности, назначение и применение. А также рассмотрены примеры их использования для конкретных задач. Цикл в 1с, как и в других языках программирования, предназначен для многократного повторения операторов, находящихся внутри него. В 1с существует три вида циклов:  Вид цикла  Описание Пока Цикл осуществляющий</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/cikly-1s-8.html">Циклы 1с 8 &#8212; описание с примерами</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>В статье будут описаны циклы 1с 8: их разновидности, назначение и применение. А также рассмотрены примеры их использования для конкретных задач. Цикл в 1с, как и в других языках программирования, предназначен для многократного повторения операторов, находящихся внутри него.</p>
<p>В 1с существует три вида циклов:</p>
<table style="height: 164px; width: 100%;">
<tbody>
<tr style="height: 41px;">
<th style="height: 41px;"> Вид цикла</th>
<th style="height: 41px;"> Описание</th>
</tr>
<tr style="height: 41px;">
<td style="height: 41px;">Пока</td>
<td style="height: 41px;">Цикл осуществляющий повторения, пока выполняется условие.</td>
</tr>
<tr style="height: 41px;">
<td style="height: 41px;">Для</td>
<td style="height: 41px;">Цикл осуществляющий заданное количество повторений.</td>
</tr>
<tr style="height: 41px;">
<td style="height: 41px;">Для каждого</td>
<td style="height: 41px;">Цикл для обхода коллекций. Обходит каждую строку заданной коллекции.</td>
</tr>
</tbody>
</table>
<h2>Цикл Пока</h2>
<p>Данный цикл предназначен для осуществления повторений, пока выполняется условие. Синтаксис цикла выглядит так:</p>
<pre><code>Пока &lt;Логическое выражение&gt; Цикл
    // Операторы
КонецЦикла;</code></pre>
<p>Для выполнения очередного повторения <em>Логическое выражение</em> должно возвращать значение <em>Истина</em>. Это работает следующим образом:</p>
<ol>
<li>Вычисляем значение <em>Логического выражения.</em> Если оно <em>Ложь</em>, цикл завершается. Если <em>Истина</em>:</li>
<li>Выполняем операторы цикла;</li>
<li>Возвращаемся на п. 1.</li>
</ol>
<p>Пример 1. При помощи сообщения вывести пользователю цифры от 1 до 10.</p>
<pre><code>Цифра = 1;
Пока Цифра &lt;= 10 Цикл
		
    Сообщить(Цифра);
    Цифра = Цифра + 1;
		
КонецЦикла;
</code></pre>
<p>Таким образом в цикле <em>Пока</em> нам необходимо не только выполнить требуемое действие, но и изменить переменную участвующую в проверке его условия. Если забыть это сделать, можно получить бесконечный цикл, который приведет к зависанию системы.</p>
<p>Пример 2. А теперь только не четные, в интервале от 1 до 100, в обратном порядке.</p>
<pre><code>Цифра = 100;
Пока Цифра &gt;= 1 Цикл
		
    Если Цифра % 2 = 1 Тогда	
	Сообщить(Цифра);
    КонецЕсли;
		
    Цифра = Цифра - 1;
		
КонецЦикла;
</code></pre>
<p>В примере используется операция %. Она получает остаток от деления одного числа на другое.</p>
<p>При помощи цикла <em>Пока</em> можно обойти <em>массив</em> или любую другую коллекцию в обратном порядке. Это необходимо не часто, но реализовать такой механизм при помощи других циклов проблематично. Рассмотрим такой механизм в примере 3.</p>
<pre><code>Массив = Новый Массив;
Массив.Добавить(1);
Массив.Добавить(2);
Массив.Добавить(3);
	
Индекс = Массив.Количество();
Пока Индекс &gt; 0 Цикл
		
    ЭлементМассива = Массив[Индекс - 1];
    Сообщить(ЭлементМассива);
		
    Индекс = Индекс - 1;
		
КонецЦикла;
</code></pre>
<p>Также цикл <em>Пока</em> часто используется для обхода выборки из результата запроса. У выборки для этого есть специальный метод <em>Следующий()</em>. Он осуществляет переход на следующую строку и возвращает <em>Истина</em>, если такая строка есть. Если же следующая строка отсутствует в выборке, метод возвращает <em>Ложь</em>. Нельзя забывать, что работу с запросом можно осуществлять только в серверной процедуре (или функции).</p>
<p>Пример 4. При помощи запроса выбрать всех пользователей, кроме недействительных. Обойти выборку циклом <em>Пока</em>.</p>
<pre><code>Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|    Пользователи.Ссылка КАК Ссылка
|ИЗ
|    Справочник.Пользователи КАК Пользователи
|ГДЕ
|    НЕ Пользователи.Недействителен";
	
Выборка = Запрос.Выполнить().Выбрать();
	
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Ссылка);
КонецЦикла;
</code></pre>
<p><!-- Yandex.RTB R-A-247615-2 --></p>
<div id="yandex_rtb_R-A-247615-2"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-2",
                renderTo: "yandex_rtb_R-A-247615-2",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<h2>Цикл Для</h2>
<p>Предназначен для осуществления заданного количества повторений, это так называемый цикл со счетчиком.</p>
<pre><code>Для &lt;Счетчик&gt; = &lt;Выражение1&gt; По &lt;Выражение2&gt; Цикл
    // Операторы
КонецЦикла;</code></pre>
<p>При каждом проходе цикл увеличивает значение в переменной Счетчик на 1. Начальное значение счетчика указывается в <em>Выражение1</em>, конечное в <em>Выражение2.</em></p>
<p>Пример 5. Воспользуемся заданием из первого примера и выведем числа от 1 до 10.</p>
<pre><code>Для Счетчик = 1 По 10 Цикл
    Сообщить(Счетчик);
КонецЦикла;
</code></pre>
<p>Таким образом в начале выполнения, переменная счетчик будет содержать значение 1. При каждом следующем повторении значение счетчика будет увеличиваться также на единицу, пока не достигнет 10. Повторение со значением счетчика 10, будет последним.</p>
<p>Пример 6. Вывести посимвольно строку &#171;Привет мир!&#187;.</p>
<pre><code>Текст = "Привет мир!";
ДлинаСтроки = СтрДлина(Текст);
	
Для НомерСимвола = 1 По ДлинаСтроки Цикл
		
    Символ = Сред(Текст, НомерСимвола, 1);
    Сообщить(Символ);
		
КонецЦикла;
</code></pre>
<p>То есть при помощи цикла <em>Для</em> мы обходим номера символов строки. А внутри цикла получаем символ по его номеру.</p>
<h2>Цикл Для Каждого</h2>
<p>Используется для обхода коллекций. Может обходить таблицы значений, массивы, структуры, списки значений (и любые другие коллекции).</p>
<pre><code>Для каждого &lt;Переменная1&gt; Из &lt;Переменная2&gt; Цикл
    // Операторы
КонецЦикла;</code></pre>
<p>В <em>Переменная2</em> указывается коллекция, а в <em>Переменная1</em> на каждом проходе цикла будет содержаться элемент коллекции. Контролировать количество элементов при этом не нужно, это делается автоматически. То есть цикл закончит выполняться, как только закончатся элементы коллекции.</p>
<p>Пример 7. Получить сумму элементов числового массива.</p>
<pre><code>Массив = Новый Массив;
Массив.Добавить(100);
Массив.Добавить(-5);
Массив.Добавить(3.4);
Массив.Добавить(0);
Массив.Добавить(3);
	
СуммаЭлементов = 0;
	
Для Каждого ЭлементМассива Из Массив Цикл
    СуммаЭлементов = СуммаЭлементов + ЭлементМассива;
КонецЦикла;
	
Сообщить(СуммаЭлементов);
</code></pre>
<p>В переменной ЭлементМассива при каждом повторении цикла содержится число. Сложив их все, получаем: <em>101,4</em>.</p>
<p>Цикл <em>Для Каждого</em> часто используется для обхода <em>таблиц значений</em>. В этом случае при каждом повторении цикла переменная элемента коллекции будет содержать не конкретное значение, а строку таблицы. В частности таблицу значений можно получить при выгрузке результата запроса (метод Выгрузить()).</p>
<p>Пример 8. При помощи запроса выбрать всех пользователей. Выгрузить результат в таблицу значений, обойти ее и вывести пользователей с заполненным физическим лицом.</p>
<pre><code>Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|    Пользователи.Ссылка КАК Пользователь,
|    Пользователи.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
|    Справочник.Пользователи КАК Пользователи";
	
Таблица = Запрос.Выполнить().Выгрузить();
	
Для Каждого СтрокаТаблицы Из Таблица Цикл
		
    Если ЗначениеЗаполнено(СтрокаТаблицы.ФизическоеЛицо) Тогда
        Сообщить(СтрокаТаблицы.Пользователь);
    КонецЕсли;
		
КонецЦикла;</code></pre>
<p>В примере видно, что переменная <em>СтрокаТаблицы</em> на каждом проходе цикла, содержит очередную строку таблицы. Доступ к ее полям осуществляется через &#171;точку&#187;.<br />
<!-- Yandex.RTB R-A-247615-3 --></p>
<div id="yandex_rtb_R-A-247615-3"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-3",
                renderTo: "yandex_rtb_R-A-247615-3",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<h2>Специальные операторы циклов</h2>
<p>Циклы 1с могут использовать специальные операторы <em>Продолжить</em> и <em>Прервать</em>. Они предназначены для предварительного завершения итерации и всего цикла соответственно.</p>
<p>Оператор <em>Продолжить</em> завершает текущее повторение цикла, не дожидаясь выполнения следующих за ним операторов. То есть с его помощью мы можем пропускать не нужные действия внутри цикла.</p>
<p>Пример 9. Немного модифицируем код из предыдущего примера, и напишем его с использованием оператора <em>Продолжить</em>.</p>
<pre><code>Для Каждого СтрокаТаблицы Из Таблица Цикл
		
    Если Не ЗначениеЗаполнено(СтрокаТаблицы.ФизическоеЛицо) Тогда
        Продолжить;	
    КонецЕсли;
		
    Сообщить(СтрокаТаблицы.Пользователь);
		
КонецЦикла;
</code></pre>
<p>Завершаем проход цикла, если физическое лицо не заполнено. Метод <em>Сообщить</em> будет выполняться, только при условии наличия физлица.</p>
<p>С оператором <em>Прервать </em>все еще проще, он завершает выполнение цикла. Вне зависимости от того, сколько повторений еще должно было выполниться.</p>
<p>Пример 10. Рассмотрим задачу из самого первого примера. Выведем числа от 1 до 10 циклом <em>Пока</em>. Но при этом модифицируем программный код.</p>
<pre><code>Цифра = 1;
Пока Истина Цикл
		
    Если Цифра &gt; 10 Тогда
	Прервать;
    КонецЕсли;
		
    Сообщить(Цифра);
    Цифра = Цифра + 1;
		
КонецЦикла;
</code></pre>
<p>Если в таком цикле не использовать оператор <em>Прервать</em>, то он станет бесконечным, так как в выражении напрямую установлено значение <em>Истина</em>. Получается, что проверка выхода из шапки цикла, перенесена в его тело. Конечно, в таком виде циклы 1с вряд ли будут использоваться, для решения подобной задачи. Но существуют реальные случаи применения конструкции <em>Пока Истина Цикл</em>, когда условие цикла задать проблематично и проще его прервать в нужный момент.</p>
<p>Также вы можете скачать обработку со всеми рассмотренными примерами <a href="https://1cguide.ru/wp-content/uploads/2020/10/Циклы-1с-примеры.rar">Циклы 1с &#8212; примеры</a>. Обработка написана под управляемое приложение, в качестве конфигурации для запросов использовалась демо-база БСП 3.1.</p>
<p><a href="https://1cguide.ru/wp-content/uploads/2020/10/Циклы-1с-8-примеры.jpg"><img loading="lazy" class="alignnone wp-image-1352 size-medium" src="https://1cguide.ru/wp-content/uploads/2020/10/Циклы-1с-8-примеры-300x177.jpg" alt="Циклы 1с 8 - примеры" width="300" height="177" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Циклы-1с-8-примеры-300x177.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/10/Циклы-1с-8-примеры-768x454.jpg 768w, https://1cguide.ru/wp-content/uploads/2020/10/Циклы-1с-8-примеры.jpg 977w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/cikly-1s-8.html">Циклы 1с 8 &#8212; описание с примерами</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/cikly-1s-8.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>1С html. Cоздание поля html документа</title>
		<link>https://1cguide.ru/programmirovanie-1s/1s-html.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/1s-html.html#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 18 Oct 2020 04:14:53 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[управляемое приложение]]></category>
		<category><![CDATA[управляемые формы]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1288</guid>

					<description><![CDATA[<p>В статье на примере будут описаны все этапы создания поля html документа. В 1с html поле позволяет представить данные, которые не требуется редактировать, в более эстетичном виде. Разработчик может применить возможности html для создания и настройки формы справочника или бизнес-процесса (как делается в конфигурации Документооборот). Рассмотрим пример. Разработаем обработку, которая</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/1s-html.html">1С html. Cоздание поля html документа</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>В статье на примере будут описаны все этапы создания поля html документа. В 1с html поле позволяет представить данные, которые не требуется редактировать, в более эстетичном виде. Разработчик может применить возможности html для создания и настройки формы справочника или бизнес-процесса (как делается в конфигурации <em>Документооборот</em>).</p>
<p>Рассмотрим пример. Разработаем обработку, которая будет представлять элемент справочника <em>Пользователи</em> в виде поля html документа. Для разработки примера я использовал демо <em>БСП 3.1 </em>(управляемое приложение).</p>
<p>Выведем в документ следующие поля справочника:</p>
<ul>
<li><em>Наименование</em> и <em>Комментарий</em> в виде текста;</li>
<li><em>ФизическоеЛицо</em> и <em>Подразделение</em> в виде ссылок;</li>
<li>Фотографию пользователя;</li>
<li>Контактную информацию в виде таблицы.</li>
</ul>
<h2>Размещение реквизитов на форме</h2>
<p>Для начала создадим внешнюю обработку и добавим форму. На форме создадим два реквизита <em>Пользователь</em> (тип <em>СправочникСсылка.Пользователи</em>) и <em>ПредставлениеHTML</em> (тип <em>Строка</em> неограниченной длины). Перетащим реквизиты в дерево элементов. Для элемента <em>ПредставлениеHTML</em> выберем вид <em>Поле HTML документа</em> и отключим отображение заголовка. Должно получится так:</p>
<p><a href="https://1cguide.ru/wp-content/uploads/2020/10/Форма-для-поля-html-документа-1с-8.jpg"><img loading="lazy" class="alignnone wp-image-1308 size-medium" src="https://1cguide.ru/wp-content/uploads/2020/10/Форма-для-поля-html-документа-1с-8-300x222.jpg" alt="Форма для поля html документа 1с 8" width="300" height="222" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Форма-для-поля-html-документа-1с-8-300x222.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/10/Форма-для-поля-html-документа-1с-8-768x568.jpg 768w, https://1cguide.ru/wp-content/uploads/2020/10/Форма-для-поля-html-документа-1с-8.jpg 1004w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Теперь поработаем над программной частью формы:</p>
<ul>
<li>Заполнять html поле данными будем при изменении пользователя. Поэтому создадим для него обработчик события <em>ПриИзменении;</em></li>
<li>Работа же с самим полем потребует перехода на сервер, так как нам необходимо выполнять запрос и получать данные из <em>хранилища значений</em>. Поэтому для заполнения данных html создадим функцию <em>ЗаполнитьHTMLПредставление</em> с директивой <em>НаСервереБезКонтекста.</em> В качестве параметра передадим в нее ссылку на пользователя<em>;</em></li>
</ul>
<p>В итоге должно получиться следующее:</p>
<pre><code>&amp;НаКлиенте
Процедура ПользовательПриИзменении(Элемент)
    ПредставлениеHTML = ЗаполнитьHTMLПредставление(Пользователь);	
КонецПроцедуры

&amp;НаСервереБезКонтекста
Функция ЗаполнитьHTMLПредставление(Пользователь)
КонецФункции</code></pre>
<h2>Получение данных</h2>
<p>Во входные параметры функции <em>ЗаполнитьHTMLПредставление</em>  мы передаем только ссылку на пользователя, поэтому для начала надо собрать все данные, необходимые для вывода в html документ. Для этого воспользуемся запросом, который вынесем в отдельную процедуру. Приводить текст процедуры здесь я не буду, чтобы не занимать много места. Ознакомиться с ним можно во внешней обработке, ссылка на которую находится внизу статьи.</p>
<p>Функция возвращает структуру, в которой содержится две выборки. Первая, <em>ВыборкаДанных</em> &#8212; содержит одну строку с основными данными пользователя. Вторая, <em>ВыборкаКонтактов</em> &#8212; содержит контактную информацию пользователя, в разрезе двух полей: <em>Вид</em> и <em>Представление</em>. Вызов функции получения данных выглядит так:</p>
<pre><code>&amp;НаСервереБезКонтекста
Функция ЗаполнитьHTMLПредставление(Пользователь)
	
    ДанныеПользователя = ПолучитьДанныеПользователя(Пользователь);
	
    Данные = ДанныеПользователя.ВыборкаДанных;
    Контакты = ДанныеПользователя.ВыборкаКонтактов;

    Если Не Данные.Следующий() Тогда
	Возврат "";
    КонецЕсли;

    ...
</code></pre>
<h2>Заполнение стилей 1с html поля</h2>
<p>Теперь в функции <em>ЗаполнитьHTMLПредставление</em> будем описывать html документ. Начнем с обязательных тегов &lt;html&gt; и &lt;head&gt;. После чего перейдем к заполнению стилей (тег &lt;style&gt;), которые будут применяться во всем документе, а также в отдельных его блоках.</p>
<pre><code>HTMLТекст = 
"&lt;html&gt;
|&lt;head&gt;
|
|&lt;style type=""text/css""&gt;
|
|    body {
|         margin-top: 2px;
|         margin-left: 2px;
|         margin-right: 2px;
|         font-family: Arial; 
|         font-size: 12pt;}
|    table {
|          border: 1px solid;
|          border-collapse: collapse;}
|    td {
|       border: 1px solid;}
|    th {
|       border: 1px solid;}
|    a:link {
|           color: #006699;} 
|    a:hover {
|            color: #006699; 
|            text-decoration: underline;}
|    p {
|      margin-top: 10px;}
|    img {
|        width: 150;
|        height: 150}
|
|&lt;/style&gt;
|&lt;/head&gt;";</code></pre>
<p>Рассмотрим заполнение стилей более подробно:</p>
<ul>
<li>body &#8212; описание стилей тела документа. Так как заголовки у нас отсутствуют, стили будут действовать для всего документа.<br />
<table style="height: 164px; width: 100%;">
<tbody>
<tr style="height: 41px;">
<th style="height: 41px;"> Свойство</th>
<th style="height: 41px;"> Описание</th>
</tr>
<tr style="height: 41px;">
<td style="height: 41px;">margin-top</td>
<td style="height: 41px;">Отступ от верхнего края документа</td>
</tr>
<tr style="height: 41px;">
<td style="height: 41px;">margin-left</td>
<td style="height: 41px;">Отступ от левого края документа</td>
</tr>
<tr style="height: 41px;">
<td style="height: 41px;">font-family</td>
<td style="height: 41px;">Шрифт</td>
</tr>
<tr>
<td>font-size</td>
<td>Размер шрифта</td>
</tr>
</tbody>
</table>
</li>
<li>table &#8212; описание стилей таблиц.<br />
<table style="height: 205px; width: 100%;">
<tbody>
<tr style="height: 41px;">
<th style="height: 41px; width: 49.505%;"> Свойство</th>
<th style="height: 41px; width: 49.505%;"> Описание</th>
</tr>
<tr style="height: 41px;">
<td style="height: 41px; width: 49.505%;">border</td>
<td style="height: 41px; width: 49.505%;">Описание границы (толщина: 1px, одинарная линия: solid)</td>
</tr>
<tr style="height: 41px;">
<td style="height: 41px; width: 49.505%;">border-collapse</td>
<td style="height: 41px; width: 49.505%;">Отображение границы вокруг ячеек таблицы (collapse: одна линия между ячейками)</td>
</tr>
</tbody>
</table>
</li>
<li>td &#8212; описание стилей ячеек таблиц. th &#8212; описание стилей заголовочных ячеек таблиц.</li>
<li>a:link &#8212; описание стилей ссылок, a:hover &#8212; описание стилей ссылок, на которые наведен курсор.<br />
<table style="height: 82px; width: 100%;">
<tbody>
<tr style="height: 41px;">
<th style="height: 41px; width: 49.505%;"> Свойство</th>
<th style="height: 41px; width: 49.505%;"> Описание</th>
</tr>
<tr style="height: 41px;">
<td style="height: 41px; width: 49.505%;">color</td>
<td style="height: 41px; width: 49.505%;">Цвет текста</td>
</tr>
<tr>
<td style="width: 49.505%;">text-decoration</td>
<td style="width: 49.505%;">Оформление текста подчеркиванием (underline &#8212; подчеркнутый текст)</td>
</tr>
</tbody>
</table>
</li>
<li>p &#8212; описание стилей абзацев. Margin-top в данном контексте, означает отступ сверху абзаца.</li>
<li>img &#8212; описание стилей изображений. Задавать стили можно и для каждого отдельного изображения. Но если изображение одно (как у меня) или все они однотипные, то удобнее описать их в общем блоке стилей.<br />
<table style="height: 82px; width: 100%;">
<tbody>
<tr style="height: 41px;">
<th style="height: 41px; width: 49.505%;"> Свойство</th>
<th style="height: 41px; width: 49.505%;"> Описание</th>
</tr>
<tr style="height: 41px;">
<td style="height: 41px; width: 49.505%;">width</td>
<td style="height: 41px; width: 49.505%;">Ширина</td>
</tr>
<tr>
<td style="width: 49.505%;">height</td>
<td style="width: 49.505%;">Высота</td>
</tr>
</tbody>
</table>
</li>
</ul>
<p><!-- Yandex.RTB R-A-247615-4 --></p>
<div id="yandex_rtb_R-A-247615-4"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-4",
                renderTo: "yandex_rtb_R-A-247615-4",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<h2>Создание тела html документа в 1с 8</h2>
<p>После описания стилей займемся формированием тела документа. Для этого используем тег &lt;body&gt;.</p>
<pre><code>HTMLТекст = HTMLТекст + "&lt;body&gt;";</code></pre>
<h3>Вывод изображения в html</h3>
<p>Начнем с вывода фотографии пользователя. В элементе справочника она хранится в реквизите <em>Фотография</em>, в виде <em>хранилища значения</em>. Его мы получили вместе с остальными данными пользователя, при помощи запроса.</p>
<pre><code>ДвоичныеДанныеФотографии = Данные.Фотография.Получить();
Base64ДанныеФотографии = Base64Строка(ДвоичныеДанныеФотографии);

HTMLТекст = HTMLТекст
    + "&lt;img src='data:image/;base64,"
    + Base64ДанныеФотографии + "'&gt;";</code></pre>
<p>Разберем представленный код:</p>
<ul>
<li>Хранилище содержит двоичные данные изображения, их необходимо получить. Используем для этого метод <em>Получить()</em>, который распаковывает данные хранилища;</li>
<li>В html мы можем вывести изображение либо указав ссылку на него, либо использовав его двоичные данные, в кодировке base64. Для этого используем метод Base64Строка;</li>
<li>После подготовки данных, можно выводить их в документ.
<ul>
<li>Используем тег &lt;img&gt;, применяемый для вывода изображений;</li>
<li>Атрибут src указывает адрес выводимого изображения или его данные. У нас это двоичные данные, поэтому в дополнение к ним необходимо использовать префикс data:image/ и указание типа данных base64.</li>
</ul>
</li>
</ul>
<p>Для того чтобы отделить изображение от следующей информации, используем тег &lt;p&gt;. Он означает начало нового абзаца. При описании стилей мы указали, что перед началом нового абзаца устанавливается отступ в 10 пикселей.</p>
<pre><code>HTMLТекст = HTMLТекст + "&lt;p&gt;";</code></pre>
<h3>Вывод текстового реквизита в html</h3>
<p>После фотографии выведем основные данные пользователя в следующем формате:</p>
<pre><code>ИмяРеквизита: Реквизит</code></pre>
<p>Начнем с имени пользователя:</p>
<pre><code>HTMLТекст = HTMLТекст + "&lt;font color=#413003&gt;";
HTMLТекст = HTMLТекст + "Полное имя: ";
HTMLТекст = HTMLТекст + "&lt;/font&gt;";

HTMLТекст = HTMLТекст + Данные.Наименование;
HTMLТекст = HTMLТекст + "&lt;br&gt;";</code></pre>
<p>Разберем представленный код:</p>
<ul>
<li>Для того, чтобы имя реквизита не сливалось с его содержанием, выделим его другим цветом. Для этого используем свойство &lt;font&gt;, позволяющее изменять характеристики текста. В нашем случае это цвет color.</li>
<li>После вывода данных используем тег &lt;br&gt;. Он предназначен для перехода на следующую строку.</li>
</ul>
<h3>Вывод ссылки в html</h3>
<p>Теперь выведем в документ физлицо пользователя. Так как оно представлено ссылочным типом, оформим его в виде ссылки.</p>
<pre><code>ШаблонНавигационнойСсылки = "&lt;A href=v8doc:%1&gt;%2&lt;/A&gt;";

HTMLТекст = HTMLТекст + "&lt;FONT color=#413003&gt;";
HTMLТекст = HTMLТекст + "Физическое лицо: ";
HTMLТекст = HTMLТекст + "&lt;/FONT&gt;";

НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Данные.ФизическоеЛицо);
ФизическоеЛицо = СтрШаблон(ШаблонНавигационнойСсылки, 
                           НавигационнаяСсылка, 
                           Данные.ФизическоеЛицо);

HTMLТекст = HTMLТекст + ФизическоеЛицо;
HTMLТекст = HTMLТекст + "&lt;br&gt;";</code></pre>
<p>Разберем представленный код:</p>
<ul>
<li>Для создания ссылок используется тег &lt;a&gt;. Его атрибут href задает адрес ссылки. Для удобства работы создадим шаблон для вывода навигационной ссылки на физлицо. В параметр %1 будем выводить ссылку, а в параметр %2 текст ссылки;</li>
<li>Для получения навигационной ссылки используем метод <em>ПолучитьНавигационнуюСсылку(&lt;Ссылка&gt;)</em>;</li>
<li>Заполним параметры шаблона, используя строковую функцию <em>СтрШаблон</em>;</li>
</ul>
<p>Далее нам необходимо будет вывести еще один текстовый реквизит и еще один ссылочный. Для того чтобы не дублировать код вынесем добавление реквизита в html в отдельную, универсальную процедуру.</p>
<pre><code>&amp;НаСервереБезКонтекста
Процедура ДобавитьРеквизит(HTMLТекст, Подпись, Значение)

    HTMLТекст = HTMLТекст + "&lt;FONT color=#413003&gt;";
    HTMLТекст = HTMLТекст + Подпись + ": ";
    HTMLТекст = HTMLТекст + "&lt;/FONT&gt;";
  
    Если ТипЗнч(Значение) = Тип("Строка") Тогда 
        HTMLТекст = HTMLТекст + Значение;
    Иначе

        ШаблонНавигационнойСсылки = "&lt;A href=v8doc:%1&gt;%2&lt;/A&gt;";

        НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Значение);
        HTMLТекст = HTMLТекст + СтрШаблон(ШаблонНавигационнойСсылки, 
                                          НавигационнаяСсылка, 
                                          Значение);

    КонецЕсли;

    HTMLТекст = HTMLТекст + "&lt;br&gt;";

КонецПроцедуры</code></pre>
<p>Вывод всех реквизитов будет выглядеть следующим образом:</p>
<pre><code>ДобавитьРеквизит(HTMLТекст, "Полное имя", Данные.Наименование);
ДобавитьРеквизит(HTMLТекст, "Физическое лицо", Данные.ФизическоеЛицо);
ДобавитьРеквизит(HTMLТекст, "Подразделение", Данные.Подразделение);
ДобавитьРеквизит(HTMLТекст, "Комментарий", Данные.Комментарий);	
</code></pre>
<p><!-- Yandex.RTB R-A-247615-5 --></p>
<div id="yandex_rtb_R-A-247615-5"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-5",
                renderTo: "yandex_rtb_R-A-247615-5",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<h3>Вывод таблицы в html 1с</h3>
<p>Осталось вывести таблицу контактной информации пользователя. Это делается довольно просто.</p>
<pre><code>HTMLТекст = HTMLТекст + "&lt;table&gt;";

//Шапка таблицы
HTMLТекст = HTMLТекст + "&lt;tr&gt;";

HTMLТекст = HTMLТекст + "&lt;th&gt;Вид&lt;/th&gt;";
HTMLТекст = HTMLТекст + "&lt;th&gt;Описание&lt;/th&gt;";

HTMLТекст = HTMLТекст + "&lt;/tr&gt;";

//Тело таблицы
Пока Контакты.Следующий() Цикл

    HTMLТекст = HTMLТекст + "&lt;tr&gt;";

    HTMLТекст = HTMLТекст + "&lt;td&gt;" + Контакты.Вид + "&lt;/td&gt;";
    HTMLТекст = HTMLТекст + "&lt;td&gt;" + Контакты.Представление + "&lt;/td&gt;";

    HTMLТекст = HTMLТекст + "&lt;/tr&gt;";

КонецЦикла;

HTMLТекст = HTMLТекст + "&lt;/table&gt;";</code></pre>
<p>Разберем код:</p>
<ul>
<li>Для вывода таблицы используется тег &lt;table&gt;;</li>
<li>Для вывода строки таблицы тег &lt;tr&gt;;</li>
<li>Тег &lt;td&gt; отвечает за вывод ячейки;</li>
<li>Для вывода ячейки заголовка используется тег &lt;th&gt;.</li>
</ul>
<p>На этом формирование поля html документа в 1с завершено. Осталось только закрыть теги и вернуть сформированный текст.</p>
<pre><code>HTMLТекст = HTMLТекст + "&lt;/body&gt;&lt;/html&gt;";

Возврат HTMLТекст;</code></pre>
<p>В итоге у нас получается html поле, заполненное следующим образом:</p>
<p><a href="https://1cguide.ru/wp-content/uploads/2020/10/Html-документ-сформированный-в-1с.jpg"><img loading="lazy" class="alignnone size-full wp-image-1327" src="https://1cguide.ru/wp-content/uploads/2020/10/Html-документ-сформированный-в-1с.jpg" alt="Html документ сформированный в 1с" width="798" height="446" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Html-документ-сформированный-в-1с.jpg 798w, https://1cguide.ru/wp-content/uploads/2020/10/Html-документ-сформированный-в-1с-300x168.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/10/Html-документ-сформированный-в-1с-768x429.jpg 768w, https://1cguide.ru/wp-content/uploads/2020/10/Html-документ-сформированный-в-1с-360x200.jpg 360w" sizes="(max-width: 798px) 100vw, 798px" /></a></p>
<h3>Обработка нажатия на ссылку</h3>
<p>В нашей обработке мы используем не веб ссылки, а на навигационные ссылки 1с. По этой причине система не может корректно обработать их нажатие. Это можно исправить, создав обработчик события ПриНажатии, для <em>Поля HTML документа</em>.</p>
<pre><code>&amp;НаКлиенте
Процедура ПредставлениеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
	
    Если Лев(ДанныеСобытия.Href, 6) = "v8doc:" Тогда 
		
        СтандартнаяОбработка = Ложь;
		
	НавигационнаяСсылкаПоля = Сред(ДанныеСобытия.Href, 7);		
	ПерейтиПоНавигационнойСсылке(НавигационнаяСсылкаПоля);
		
    КонецЕсли;

КонецПроцедуры</code></pre>
<p>В обработчике мы анализируем текст ссылки, на которую произошло нажатие. Если это навигационная ссылка, обрабатываем ее по отдельному алгоритму. Получаем текст и осуществляем переход. Таким образом при нажатии на ссылку, у нас произойдет переход на форму элемента справочника.</p>
<p>Скачать обработку формирования html поля можно здесь: <a href="https://1cguide.ru/wp-content/uploads/2020/10/СозданиеHTMLПоля.rar">СозданиеHTMLПоля</a></p>
<p>&nbsp;</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/1s-html.html">1С html. Cоздание поля html документа</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/1s-html.html/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Данные строки 1С &#8212; метод таблицы формы</title>
		<link>https://1cguide.ru/programmirovanie-1s/dannye-stroki-1s.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/dannye-stroki-1s.html#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 12 Oct 2020 03:39:43 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<category><![CDATA[Таблица формы]]></category>
		<category><![CDATA[управляемое приложение]]></category>
		<category><![CDATA[управляемые формы]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1271</guid>

					<description><![CDATA[<p>ДанныеСтроки &#8212; метод таблицы формы, возвращающий структуру данных строки. Строка передается в параметр метода. Возвращает значение одного из трех типов (в зависимости от источника таблицы формы): ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции, ДанныеФормыЭлементДерева. В общем случае использование метода Данные строки 1с выглядит следующим образом: ДанныеСтроки = Элементы.ТаблицаФормы.ДанныеСтроки(ИдентификаторСтроки); Вся информация, представленная в статье, относится только к управляемому</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/dannye-stroki-1s.html">Данные строки 1С &#8212; метод таблицы формы</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>ДанныеСтроки</em> &#8212; метод таблицы формы, возвращающий структуру данных строки. Строка передается в параметр метода. Возвращает значение одного из трех типов (в зависимости от источника таблицы формы): <em>ДанныеФормыСтруктура,</em> <em>ДанныеФормыЭлементКоллекции,</em> <em>ДанныеФормыЭлементДерева</em>. В общем случае использование метода Данные строки 1с выглядит следующим образом:</p>
<pre><code>ДанныеСтроки = Элементы.ТаблицаФормы.ДанныеСтроки(ИдентификаторСтроки);</code></pre>
<p><a href="https://1cguide.ru/wp-content/uploads/2020/10/Данные-строки-1С.jpg"><img loading="lazy" class="alignnone wp-image-1281 size-medium" src="https://1cguide.ru/wp-content/uploads/2020/10/Данные-строки-1С-300x185.jpg" alt="Данные строки 1С" width="300" height="185" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Данные-строки-1С-300x185.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/10/Данные-строки-1С-768x473.jpg 768w, https://1cguide.ru/wp-content/uploads/2020/10/Данные-строки-1С.jpg 826w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
Вся информация, представленная в статье, относится только к управляемому приложению. Особенности использования метода <em>ДанныеСтроки:</em></p>
<ul>
<li>Является клиентским, его нельзя использовать на сервере. Структуру данных, полученную в результате его использования также нельзя передать на сервер;</li>
<li>Содержит данные реквизитов добавленных на форму, а также данные реквизитов с установленным флагом <em>Использовать всегда.</em> Остальные реквизиты отсутствуют в коллекции;</li>
<li>Возвращает данные аналогичные свойству <a style="font-size: 1.0625rem;" href="https://1cguide.ru/programmirovanie-1s/tekushhie-dannye-1s.html" target="_blank" rel="noopener noreferrer">ТекущиеДанные</a><span style="font-size: 1.0625rem;"> таблицы формы. Разница лишь в том, что при помощи метода </span><em style="font-size: 1.0625rem;">ДанныеСтроки</em><span style="font-size: 1.0625rem;"> можно получить структуру данных любой строки таблицы, а не только текущей;</span></li>
<li>Идентификатор строки, передаваемый в параметре может быть разных типов, в зависимости от источника таблицы формы. Для источников <em style="font-size: 1.0625rem;">ТаблицаЗначений</em><span style="font-size: 1.0625rem;">, </span><em style="font-size: 1.0625rem;">ДеревоЗначений</em><span style="font-size: 1.0625rem;">, </span><em style="font-size: 1.0625rem;">СписокЗначений</em><span style="font-size: 1.0625rem;">, </span><em style="font-size: 1.0625rem;">ТабличнаяЧасть</em><span style="font-size: 1.0625rem;"> идентификатор строки числовой. Для <em>ДинамическогоСписка</em> это обычно </span><em style="font-size: 1.0625rem;">Ссылка</em><span style="font-size: 1.0625rem;">, которая является ключом строки списка. </span><span style="font-size: 1.0625rem;">Идентификатор текущей строки содержится в свойстве таблицы формы </span><a style="font-size: 1.0625rem;" href="https://1cguide.ru/programmirovanie-1s/tekushhaya-stroka-1s.html" target="_blank" rel="noopener noreferrer">ТекущаяСтрока</a><span style="font-size: 1.0625rem;">.</span></li>
</ul>
<p>Таким образом для таблицы формы <em>ТаблицаТоваров</em> следующие действия будут идентичны (приведут к получению данных текущей строки):</p>
<pre><code>ТекущаяСтрока = Элементы.ТаблицаТоваров.ТекущаяСтрока;
ТекущиеДанные = Элементы.ТаблицаТоваров.ДанныеСтроки(ТекущаяСтрока);
</code></pre>
<pre><code>ТекущиеДанные = Элементы.ТаблицаТоваров.ТекущиеДанные;</code></pre>
<h2>Получение идентификаторов строк</h2>
<p>Так как параметром метода <em>ДанныеСтроки</em> является идентификатор, важно знать откуда его можно получить:</p>
<ul>
<li>Для текущей строки таблицы формы идентификатор хранится в свойстве <em>ТекущаяСтрока;</em>
<pre><code>ТекущаяСтрока = Элементы.ТаблицаТоваров.ТекущаяСтрока;</code></pre>
</li>
<li>Идентификаторы выделенных строк таблицы формы можно получить при помощи свойства <em>ВыделенныеСтроки</em>. В нем содержится массив идентификаторов.
<pre><code>ВыделенныеСтроки = Элементы.ТаблицаТоваров.ВыделенныеСтроки;</code></pre>
</li>
<li>Идентификатор можно получить непосредственно из строки источника таблицы формы. Для этого используется метод <em>ПолучитьИдентификатор()</em>. Его можно применять и на клиенте и на сервере.
<pre><code>Для Каждого СтрокаИсточника Из ТаблицаТоваров Цикл
    Идентификатор = СтрокаИсточника.ПолучитьИдентификатор();
КонецЦикла;
</code></pre>
</li>
</ul>
<h2>Данные строки 1С &#8212; пример использования</h2>
<p>Рассмотрим пример получения данных выделенных строк таблицы формы при нажатии кнопки.</p>
<pre><code>&amp;НаКлиенте
Процедура ПолучитьДанныеСтрок(Команда)
		
    ВыделенныеСтроки = Элементы.ТаблицаТоваров.ВыделенныеСтроки;
	
    Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
		
        ДанныеСтроки = Элементы.ТаблицаТоваров.ДанныеСтроки(ВыделеннаяСтрока);
		
        Если Не ДанныеСтроки = Неопределено Тогда
	    //Код обрабатывающий данные выделенной строки
	КонецЕсли;
		
    КонецЦикла;
	
КонецПроцедуры
</code></pre>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/dannye-stroki-1s.html">Данные строки 1С &#8212; метод таблицы формы</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/dannye-stroki-1s.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Использование свойства Текущая строка 1С</title>
		<link>https://1cguide.ru/programmirovanie-1s/tekushhaya-stroka-1s.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/tekushhaya-stroka-1s.html#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 08 Oct 2020 03:15:23 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<category><![CDATA[Таблица формы]]></category>
		<category><![CDATA[управляемое приложение]]></category>
		<category><![CDATA[управляемые формы]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1259</guid>

					<description><![CDATA[<p>ТекущаяСтрока &#8212; свойство таблицы формы, содержащее идентификатор текущей строки. Тип свойства может различаться в зависимости от источника таблицы. Для всех источников, кроме динамического списка текущая строка 1с &#8212; это числовой идентификатор. Для динамического списка возможны несколько вариантов Ссылка. Если у динамического списка задана основная таблица объектного типа данных (Справочник, Документ</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/tekushhaya-stroka-1s.html">Использование свойства Текущая строка 1С</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>ТекущаяСтрока</em> &#8212; свойство таблицы формы, содержащее идентификатор текущей строки. Тип свойства может различаться в зависимости от источника таблицы. Для всех источников, кроме <em>динамического списка</em> текущая строка 1с &#8212; это числовой идентификатор. Для <em>динамического списка</em> возможны несколько вариантов</p>
<ul>
<li><em>Ссылка.</em> Если у <em>динамического списка</em> задана основная таблица объектного типа данных (<em>Справочник</em>, <em>Документ</em> и т.п.);</li>
<li><em> СтрокаГруппировкиДинамическогоСписка. </em>Если в динамический список добавлены группировки и текущей является именно такая строка;</li>
<li><em>КлючСтрокиДинамическогоСписка. </em>Если у <em>динамического списка</em> не задана основная таблица и ключевые поля заданы вручную. Представляет из себя набор значений, обеспечивающих уникальный ключ для строки списка;</li>
<li><em>&lt;ТипРегистра&gt;КлючЗаписи.&lt;ИмяРегистра&gt;. </em>Ключ с уникальным набором значений, позволяющий идентифицировать запись регистра. Например:
<pre><code>РегистрСведенийКлючЗаписи.ДополнительныеСведения</code></pre>
</li>
<li><em>Число</em>. Используется в остальных случаях. Когда основная таблица списка и ключевые поля не заданы, либо в качестве <em>вида ключа</em> задан <em>НомерСтроки</em>;</li>
</ul>
<h2>Применение свойства Текущая строка 1С</h2>
<p>Рассмотрим несколько способов практического применения свойства <em>ТекущаяСтрока</em>. С его помощью можно изменить текущую строку таблицы форы, получить строку таблицы источника и т. д.</p>
<h3>Изменение текущей строки таблицы</h3>
<p>Свойство <em>ТекущаяСтрока</em> доступно не только для чтения, но и для изменения. Таким образом с его помощью мы можем изменить текущую строку таблицы формы.</p>
<p>Пример 1. Для динамического списка справочника <em>Номенклатура</em>, создать процедуру изменяющую текущую строку списка. В качестве новой текущей строки, использовать ссылку на элемент справочника, переданную в параметре.</p>
<pre><code>&amp;НаКлиенте
Процедура ИзменитьТекущуюСтроку(СсылкаНаНоменклатуру);
    Элементы.СписокНоменклатуры.ТекущаяСтрока = СсылкаНаНоменклатуру;
КонецПроцедуры</code></pre>
<p>Заметим, что если строки с указанной ссылкой не будет найдена в таблице формы, то свойство <em>ТекущаяСтрока</em> примет значение <em>Неопределено</em>. Что означает отсутствие текущей строки таблицы.</p>
<h3>Получение строки источника</h3>
<p>Так как свойство <em>ТекущаяСтрока</em> является идентификатором, его можно использовать в качестве параметра метода <em>НайтиПоИдентификатору</em>. При помощи данного метода можно получить строку источника таблицы формы (нельзя использовать для <em>динамического списка</em>). Так как строку источника можно искать и использовать не только на клиенте, но и на сервере, это дает некоторое преимущество, над свойством таблицы формы <a href="https://1cguide.ru/programmirovanie-1s/tekushhie-dannye-1s.html" target="_blank" rel="noopener noreferrer">ТекущиеДанные</a>.</p>
<p>Пример 2. В серверной процедуре получить данные текущей строки таблицы значений <em>ТаблицаТоваров</em>, которая расположена на форме.</p>
<pre><code>&amp;НаКлиенте
Процедура ПолучитьДанныеСтроки(Команда)
	
    Идентификатор = Элементы.ТаблицаТоваров.ТекущаяСтрока;
    ПолучитьДанныеСтрокиНаСервере(Идентификатор);
	
КонецПроцедуры

&amp;НаСервере
Процедура ПолучитьДанныеСтрокиНаСервере(Идентификатор);

    СтрокаТаблицы = ТаблицаТоваров.НайтиПоИдентификатору(Идентификатор);
	
    Если Не СтрокаТаблицы = Неопределено Тогда
	//Код обрабатывающий данный полученной строки
    КонецЕсли;
	
КонецПроцедуры
</code></pre>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/tekushhaya-stroka-1s.html">Использование свойства Текущая строка 1С</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/tekushhaya-stroka-1s.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Работа со свойством текущие данные 1С</title>
		<link>https://1cguide.ru/programmirovanie-1s/tekushhie-dannye-1s.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/tekushhie-dannye-1s.html#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 07 Oct 2020 02:26:10 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<category><![CDATA[Таблица формы]]></category>
		<category><![CDATA[управляемое приложение]]></category>
		<category><![CDATA[управляемые формы]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1244</guid>

					<description><![CDATA[<p>ТекущиеДанные &#8212; свойство таблицы формы, предоставляющее доступ к данным текущей строки. Оно может быть представлено тремя типами данных (в зависимости от источника таблицы формы): ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции, ДанныеФормыЭлементДерева. По сути, в каждом из этих случаев, текущие данные 1с представляют из себя структуру текущей строки таблицы формы. Вся информация, представленная в статье, относится только</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/tekushhie-dannye-1s.html">Работа со свойством текущие данные 1С</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>ТекущиеДанные</em> &#8212; свойство таблицы формы, предоставляющее доступ к данным текущей строки. Оно может быть представлено тремя типами данных (в зависимости от источника таблицы формы): <em>ДанныеФормыСтруктура,</em> <em>ДанныеФормыЭлементКоллекции,</em> <em>ДанныеФормыЭлементДерева</em>. По сути, в каждом из этих случаев, текущие данные 1с представляют из себя структуру текущей строки таблицы формы.</p>
<p>Вся информация, представленная в статье, относится только к управляемому приложению.</p>
<p>Так как свойство относится к элементу формы (таблице), данные получаются именно из него, а не из источника. Из этого следует несколько особенностей свойства <em>ТекущиеДанные</em>:</p>
<ul>
<li>Доступно только на клиенте. Его нельзя передавать и использовать на сервере. Поэтому правильно будет получить значения нужных полей в клиентской процедуре и передать их в серверную, при необходимости.
<pre><code>&amp;НаКлиенте
Процедура ТаблицаНоменклатурыНоменклатураПриИзменении(Элемент)

    ТекущиеДанные = Элементы.ТаблицаНоменклатуры.ТекущиеДанные;	
    НоменклатураПриИзмененииНаСервере(ТекущиеДанные.Номенклатура);
	
КонецПроцедуры

&amp;НаСервере
Процедура НоменклатураПриИзмененииНаСервере(Номенклатура)
    //Серверная обработка изменения строки таблицы
КонецПроцедуры
</code></pre>
</li>
<li>Содержит данные реквизитов добавленных на форму, а также данные реквизитов с установленным флагом <em>Использовать всегда.</em> Остальные реквизиты отсутствуют в коллекции.<br />
<a href="https://1cguide.ru/wp-content/uploads/2020/10/Текущие-данные-1С.jpg"><img loading="lazy" class="alignnone wp-image-1248 size-medium" src="https://1cguide.ru/wp-content/uploads/2020/10/Текущие-данные-1С-300x259.jpg" alt="Текущие данные 1С" width="300" height="259" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Текущие-данные-1С-300x259.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/10/Текущие-данные-1С-768x663.jpg 768w, https://1cguide.ru/wp-content/uploads/2020/10/Текущие-данные-1С.jpg 937w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
Как видно на картинке, в текущих данных представлены реквизиты <em>Номенклатура</em> и <em>Сумма</em>, добавленные в таблицу и реквизит Количество с установленным флагом <em>Использовать всегда</em>.</li>
<li>В случае, если таблица формы пустая или у нее нет активизированной строки, свойство <em>ТекущиеДанные</em> будет содержать значение <em>Неопределено</em>. Поэтому, перед использованием свойства, имеет смысл делать проверку. Но только в тех случаях, когда таблица действительно может быть пустой или не активизированной. Например событие <em>ПриАктивизацииСтроки</em> вызывается и для пустой таблицы. А вот событие <em>ПриИзменении</em> колонки таблицы, может вызываться только при наличии активизированной строки. Поэтому в проверке не будет смысла.
<pre><code>&amp;НаКлиенте
Процедура ТаблицаНоменклатурыПриАктивизацииСтроки(Элемент)

    Если Элемент.ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
	
    Сообщить(Элемент.ТекущиеДанные.Номенклатура);
		
КонецПроцедуры
</code></pre>
</li>
</ul>
<p><!-- Yandex.RTB R-A-247615-5 --></p>
<div id="yandex_rtb_R-A-247615-5"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-5",
                renderTo: "yandex_rtb_R-A-247615-5",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<ul>
<li>При помощи свойства <em>ТекущиеДанные </em>можно не только читать, но и изменять информацию. Исключение &#8212; таблица формы, источником которой является <em>динамический список</em>. В этом случае изменение текущих данных, не приведет к изменению строки таблицы.
<pre><code>&amp;НаКлиенте
Процедура ТаблицаНоменклатурыКоличествоПриИзменении(Элемент)
	
    ТекущиеДанные = Элементы.ТаблицаНоменклатуры.ТекущиеДанные;	
    ТекущиеДанные.Сумма = ТекущиеДанные.Количество * ТекущиеДанные.Цена; 
	
КонецПроцедуры
</code></pre>
</li>
</ul>
<h2>Варианты получения свойства Текущие данные 1С</h2>
<p>В общем случае к свойству <em>ТекущиеДанные</em> можно обратиться через элемент формы к которому оно относится.</p>
<pre><code>Элементы.&lt;ИмяТаблицыФормы&gt;.ТекущиеДанные</code></pre>
<p>Например:</p>
<pre><code>ТекущиеДанные = Элементы.ТаблицаНоменклатуры.ТекущиеДанные;</code></pre>
<p>Но при обращении к текущим данным из обработчика события таблицы формы, можно воспользоваться параметром <em>Элемент</em>. В нем уже содержится таблица формы. В этом случае обращение к текущим данным будет выглядеть следующим образом:</p>
<pre><code>Элемент.ТекущиеДанные</code></pre>
<p>Например:</p>
<pre><code>&amp;НаКлиенте
Процедура ТаблицаНоменклатурыПриИзменении(Элемент)
	
    Если Элемент.ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;

    //Код обрабатывающий событие
	
КонецПроцедуры</code></pre>
<p>Такое обращение к текущим данным не получится реализовать в обработчиках событий колонок таблицы формы. Так как в параметр Элемент там передается <em>ПолеФормы</em>, относящееся к колонке.</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/tekushhie-dannye-1s.html">Работа со свойством текущие данные 1С</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/tekushhie-dannye-1s.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Формат даты 1С использование на примерах</title>
		<link>https://1cguide.ru/programmirovanie-1s/format-daty-1s-8.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/format-daty-1s-8.html#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 05 Oct 2020 15:05:02 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<category><![CDATA[Работа с датами]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1219</guid>

					<description><![CDATA[<p>В статье представлены способы задать формат даты 1с 8. Для этого необходимо использовать форматную строку. Редактировать ее можно либо вручную, либо при помощи специального конструктора. Форматные строки используются в: Программном коде, в функции Формат; Формат(&#60;Значение&#62;, &#60;ФорматнаяСтрока&#62;) Свойствах полей формы, в свойстве ФорматРедактирования; Оформлении поля СКД. Схема компоновки -&#62; вкладка Поля</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/format-daty-1s-8.html">Формат даты 1С использование на примерах</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>В статье представлены способы задать формат даты 1с 8. Для этого необходимо использовать форматную строку. Редактировать ее можно либо вручную, либо при помощи специального конструктора.</p>
<p>Форматные строки используются в:</p>
<ul>
<li>Программном коде, в функции <em>Формат</em>;
<pre><code>Формат(&lt;Значение&gt;, &lt;ФорматнаяСтрока&gt;)</code></pre>
</li>
<li>Свойствах полей формы, в свойстве <em>ФорматРедактирования</em>;<br />
<a href="https://1cguide.ru/wp-content/uploads/2020/10/Формат-редактирования.jpg"><img loading="lazy" class="alignnone wp-image-1225 size-medium" src="https://1cguide.ru/wp-content/uploads/2020/10/Формат-редактирования-300x198.jpg" alt="Формат редактирования 1с" width="300" height="198" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Формат-редактирования-300x198.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/10/Формат-редактирования.jpg 593w" sizes="(max-width: 300px) 100vw, 300px" /></a></li>
<li>Оформлении поля СКД. <em>Схема компоновки</em> -&gt; вкладка <em>Поля</em> -&gt; для нужного поля столбец <em>Оформление</em> -&gt; <em>Формат</em>;<br />
<a href="https://1cguide.ru/wp-content/uploads/2020/10/Формат-даты-1с-СКД.jpg"><img loading="lazy" class="alignnone wp-image-1226 size-medium" src="https://1cguide.ru/wp-content/uploads/2020/10/Формат-даты-1с-СКД-300x185.jpg" alt="Формат даты 1с СКД" width="300" height="185" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Формат-даты-1с-СКД-300x185.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/10/Формат-даты-1с-СКД-768x474.jpg 768w, https://1cguide.ru/wp-content/uploads/2020/10/Формат-даты-1с-СКД.jpg 993w" sizes="(max-width: 300px) 100vw, 300px" /></a></li>
<li>Свойствах ячейки макета.<br />
<a href="https://1cguide.ru/wp-content/uploads/2020/10/Формат-ячейки-макета.jpg"><img loading="lazy" class="alignnone wp-image-1228 size-medium" src="https://1cguide.ru/wp-content/uploads/2020/10/Формат-ячейки-макета-300x129.jpg" alt="" width="300" height="129" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Формат-ячейки-макета-300x129.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/10/Формат-ячейки-макета-768x330.jpg 768w, https://1cguide.ru/wp-content/uploads/2020/10/Формат-ячейки-макета.jpg 795w" sizes="(max-width: 300px) 100vw, 300px" /></a></li>
</ul>
<p>При использовании функции <em>Формат</em>, следует помнить, что она возвращает строковое значение, т.е. представление переданной даты в определенном формате.</p>
<h2>Формат даты 1с при помощи форматной строки</h2>
<p>При помощи форматной строки можно задать параметры форматирования даты. Не стоит описывать их полностью вручную. Лучше всего, воспользоваться встроенным в платформу конструктором, а затем отредактировать полученную форматную строку вручную. Это сэкономит ваши силы и позволит быстро добиться результата.</p>
<p>В свойствах полей, ячеек макета, конструктор форматной строки вызывается нажатием кнопки. А в коде он вызывается аналогично конструктору запроса: <em>контекстное меню</em> -&gt; <em>Конструктор форматной строки&#8230;</em></p>
<p><a href="https://1cguide.ru/wp-content/uploads/2020/10/Вызов-конструктора-форматной-строки-1с.jpg"><img loading="lazy" class="alignnone size-full wp-image-1230" src="https://1cguide.ru/wp-content/uploads/2020/10/Вызов-конструктора-форматной-строки-1с.jpg" alt="конструктор форматной строки 1с" width="340" height="104" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Вызов-конструктора-форматной-строки-1с.jpg 340w, https://1cguide.ru/wp-content/uploads/2020/10/Вызов-конструктора-форматной-строки-1с-300x92.jpg 300w" sizes="(max-width: 340px) 100vw, 340px" /></a><br />
То есть правильный вызов конструктора для метода <em>Формат</em>, выглядит так:</p>
<ul>
<li>Следует описать функцию <em>Формат</em>, без форматной строки:
<pre><code>ФорматДата = Формат(Дата, "");</code></pre>
</li>
<li>Поставить курсор между кавычек, вызвать конструктор;</li>
<li>После окончания работы с конструктором нажать ОК.
<pre><code>ФорматДата = Формат(Дата, "ДФ=dd.MM.yyyy");</code></pre>
</li>
</ul>
<h3>Конструктор форматной строки</h3>
<p>Сам же конструктор форматной строки представляет собой набор вкладок, предназначенных для форматирования данных различных типов. Нас интересует вкладка <em>Дата. </em></p>
<p>В первую очередь следует проверить, подходит ли для ваших целей <em>Локальный формат даты.</em> Если это так, то стоит воспользоваться именно им, так как он учитывает особенности построения дат для разных стран. То есть для русскоязычной версии будет отображать привычную нам дату, а для локализованных версий &#8212; привычную иностранным пользователям.</p>
<p><a href="https://1cguide.ru/wp-content/uploads/2020/10/Локальный-формат-даты-1с.jpg"><img loading="lazy" class="alignnone wp-image-1234 size-medium" src="https://1cguide.ru/wp-content/uploads/2020/10/Локальный-формат-даты-1с-300x268.jpg" alt="Локальный формат даты 1с" width="300" height="268" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Локальный-формат-даты-1с-300x268.jpg 300w, https://1cguide.ru/wp-content/uploads/2020/10/Локальный-формат-даты-1с.jpg 471w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
В остальных случаях можно пользоваться произвольным форматом даты. Его можно не только выбирать из выпадающего списка, но и редактировать вручную. Для редактирования используются следующие форматные коды:</p>
<ul>
<li>д (d) &#8212; день месяца (цифрами) без лидирующего нуля;</li>
<li>дд (dd) &#8212; день месяца (цифрами) с лидирующим нулем;</li>
<li>ддд (ddd) &#8212; краткое название дня недели;</li>
<li>дддд (dddd) &#8212; полное название дня недели;</li>
<li>М (m) &#8212; минута без лидирующего нуля;</li>
<li>ММ (mm) &#8212; минута с лидирующим нулем;</li>
<li>МММ (MMM) &#8212; краткое название месяца *);</li>
<li>ММММ (MMMM) &#8212; полное название месяца *);</li>
<li>к (q) &#8212; номер квартала в году;</li>
<li>г (y) &#8212; номер года без века и лидирующего нуля;</li>
<li>гг (yy) &#8212; номер года без века с лидирующим нулем;</li>
<li>гггг (yyyy) &#8212; номер года с веком;</li>
<li>ч (h) &#8212; час в 12-часовом варианте без лидирующих нулей;</li>
<li>чч (hh) &#8212; час в 12-часовом варианте с лидирующим нулем;</li>
<li>Ч (H) &#8212; час в 24-часовом варианте без лидирующих нулей;</li>
<li>ЧЧ (HH) &#8212; час в 24-часовом варианте с лидирующим нулем;</li>
<li>м (m) &#8212; минута без лидирующего нуля;</li>
<li>мм (mm) &#8212; минута с лидирующим нулем;</li>
<li>с (s) &#8212; секунда без лидирующего нуля;</li>
<li>сс (ss) &#8212; секунда с лидирующим нулем;</li>
<li>вв (tt) &#8212; отображение половины дня AM/PM (действительно только для языков конфигурирования, поддерживающих 12 часовой вариант представления времени).</li>
</ul>
<p>Также можно добавлять в форматную строку произвольный текст, используя кавычки (если добавляемый текст не может быть интерпретирован, как составная часть даты, тогда можно обойтись и без кавычек):</p>
<p><a href="https://1cguide.ru/wp-content/uploads/2020/10/Формат-даты-1с-с-произвольным-текстом.jpg"><img loading="lazy" class="alignnone size-full wp-image-1236" src="https://1cguide.ru/wp-content/uploads/2020/10/Формат-даты-1с-с-произвольным-текстом.jpg" alt="Формат даты 1с с произвольным текстом" width="468" height="230" srcset="https://1cguide.ru/wp-content/uploads/2020/10/Формат-даты-1с-с-произвольным-текстом.jpg 468w, https://1cguide.ru/wp-content/uploads/2020/10/Формат-даты-1с-с-произвольным-текстом-300x147.jpg 300w" sizes="(max-width: 468px) 100vw, 468px" /></a></p>
<p>Итоговый текст такой форматной строки будет выглядеть следующим образом:</p>
<pre><code>ФорматДата = Формат(Дата, "ДФ='dd.MM.yyyy ""г.""'");</code></pre>
<p><!-- Yandex.RTB R-A-247615-2 --></p>
<div id="yandex_rtb_R-A-247615-2"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-2",
                renderTo: "yandex_rtb_R-A-247615-2",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<h3>Примеры использования формата дат</h3>
<p>Приведем несколько примеров форматирования даты.</p>
<p>Дата без времени (05.10.2020)</p>
<pre><code>ФорматДата = Формат(Дата, "ДЛФ=D");</code></pre>
<p>Только время (12:35:50)</p>
<pre><code>ФорматДата = Формат(Дата, "ДЛФ=T");</code></pre>
<p>Месяц текстом, год полностью (Октябрь 2020)</p>
<pre><code>ФорматДата = Формат(Дата, "ДФ='ММММ гггг'");</code></pre>
<p>Месяц текстом кратко, год без тысячелетия (окт. 20)</p>
<pre><code>ФорматДата = Формат(Дата, "ДФ='МММ гг'");</code></pre>
<p>Месяц числом, через точку год полностью (10.2020)</p>
<pre><code>ФорматДата = Формат(Дата, "ДФ=ММ.гггг");</code></pre>
<h2>Склонение названия месяца</h2>
<p>При форматировании даты не всегда достаточно именительного падежа. Иногда требуется указать, к примеру, что отчет сформирован в &#171;Октябре 2020 г.&#187;, а не в &#171;Октябрь 2020 г.&#187;. Для решения этой проблемы подойдет серверная строковая функция <em>ПолучитьСклоненияСтроки</em> (доступна, начиная с версии платформы 8.3.13).</p>
<pre><code>ПолучитьСклоненияСтроки(&lt;СклоняемаяСтрока&gt;, &lt;ОписаниеСтроки&gt;, &lt;ФорматнаяСтрока&gt;);</code></pre>
<p>Функция возвращает массив вариантов склонения строки. Подробнее прочитать про заполнение параметров можно в <em>синтаксис помощнике</em>.</p>
<p>Пример. Отформатировать дату в &#171;месяц год&#187;, месяц в предложном падеже вывести в виде сообщения.</p>
<pre><code>&amp;НаСервереБезКонтекста
Процедура СклонениеПериодаНаСервере(Дата)

    Месяц = Формат(Дата, "ДФ='MMMM yyyy'");
	
    Описание = "ПЛ=Мужской";
    ФорматнаяСтрока = "ПД=Предложный";
    МассивСклонение = ПолучитьСклоненияСтроки(Месяц, Описание, ФорматнаяСтрока);

    Если Не МассивСклонение.Количество() = 0 Тогда
        МесяцПредложный = МассивСклонение[0];
    Иначе
        МесяцПредложный = Месяц;
    КонецЕсли;	
	
    ШаблонСообщения = "Отчет сформирован в %1";
    ТекстСообщения = СтрШаблон(ШаблонСообщения, МесяцПредложный);
	
    Сообщить(ТекстСообщения);
	
КонецПроцедуры</code></pre>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/format-daty-1s-8.html">Формат даты 1С использование на примерах</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/format-daty-1s-8.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как в 1с открыть форму программно</title>
		<link>https://1cguide.ru/programmirovanie-1s/1s-otkryt-formu-programmno.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/1s-otkryt-formu-programmno.html#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 03 Oct 2020 15:20:26 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<category><![CDATA[1С:Предприятие 8.3]]></category>
		<category><![CDATA[управляемое приложение]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1196</guid>

					<description><![CDATA[<p>В статье будет рассказано о том, как в 1с открыть форму программно. Все описанное ниже, касается только управляемого приложения. Подробно рассмотрим метод глобального контекста ОткрытьФорму. Также можете ознакомиться с более простыми, но менее гибкими способами открыть форму по ссылке: Как в 1с открыть ссылку. Метод ОткрытьФорму по имени Самый гибкий</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/1s-otkryt-formu-programmno.html">Как в 1с открыть форму программно</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>В статье будет рассказано о том, как в 1с открыть форму программно. Все описанное ниже, касается только управляемого приложения. Подробно рассмотрим метод глобального контекста <em>ОткрытьФорму</em>.</p>
<p>Также можете ознакомиться с более простыми, но менее гибкими способами открыть форму по ссылке: <a href="https://1cguide.ru/programmirovanie-1s/1s-otkryt-ssylku.html">Как в 1с открыть ссылку</a>.</p>
<h3>Метод ОткрытьФорму по имени</h3>
<p>Самый гибкий и настраиваемый способ программного открытия формы в 1с 8. Рассмотрим подробно его параметры, а также разберем несколько примеров его использования.</p>
<pre><code>ОткрытьФорму(&lt;ИмяФормы&gt;, 
             &lt;Параметры&gt;, 
             &lt;Владелец&gt;, 
             &lt;Уникальность&gt;, 
             &lt;Окно&gt;, 
             &lt;НавигационнаяСсылка&gt;, 
             &lt;ОписаниеОповещенияОЗакрытии&gt;, 
             &lt;РежимОткрытияОкна&gt;)</code></pre>
<p>Следует заметить, что метод <em>ОткрытьФорму</em> является клиентским. Т.е его можно использовать либо в общих модулях с установленным флагом <em>Клиент</em>, либо в процедурах (функциях) форм с директивой <em>&amp;НаКлиенте</em>.</p>
<p>Рассмотрим параметры метода и приведем необходимые примеры.</p>
<h4>ИмяФормы</h4>
<p>Содержит полный путь к форме. Можно указать, как путь к форме по умолчанию, так и путь к произвольной форме объекта метаданных. Имя формы указывается в следующих двух форматах:</p>
<pre><code>&lt;ТипОбъекта&gt;.&lt;ИмяОбъекта&gt;.&lt;ИмяФормыПоУмолчанию&gt;</code></pre>
<p>или</p>
<pre><code>&lt;ТипОбъекта&gt;.&lt;ИмяОбъекта&gt;.Форма.&lt;ИмяФормы&gt;</code></pre>
<ul>
<li><em>ТипОбъекта</em>. Наименование типа объекта метаданных, например: <em>Справочник</em>, <em>Документ</em>, <em>РегистрСведений</em> и т. д.;</li>
<li><em>ИмяОбъекта</em>. Наименование объекта метаданных. Например для справочника: <em>Пользователи</em>, <em>Номенклатура</em>;</li>
<li><em>ИмяФормыПоУмолчанию</em>. Стандартное имя формы, набор имен по умолчанию различается для различных объектов метаданных. Например для документа: <em>ФормаВыбора</em>, <em>ФормаОбъекта</em>, <em>ФормаСписка</em>. Полный набор имен по умолчанию можно найти в <em>синтаксис помощнике</em>, в описании метода <em>ОткрытьФорму</em>;</li>
<li><em>ИмяФормы</em>. Произвольное имя формы, заданное при ее создании. Например у справочника <em>Пользователи</em>, форма <em>СменаПочты</em>.</li>
</ul>
<p>Пример 1. Путь к форме выбора по умолчанию, справочника <em>Номенклатура</em>.</p>
<pre><code>"Справочник.Номенклатура.ФормаВыбора"</code></pre>
<p>Пример 2. Путь к форме <em>СменаПочты</em> справочника <em>Пользователи</em>, по ее имени.</p>
<pre><code>"Справочник.Пользователи.Форма.СменаПочты"</code></pre>
<h4>Параметры</h4>
<p>Содержит <em>Структуру</em> параметров, которые передаются в открываемую форму. Для каждого типа формы, существует набор стандартных параметров, которые не нужно дополнительно обрабатывать в самой форме. Также набор параметров может различаться и для объектов метаданных. Например, параметр <em>Ключ</em>, для форм объектов. В него можно передать ссылку на открываемый объект (если его не передать, будет открыта форма нового объекта).</p>
<p>Подробнее прочитать описание всех возможных стандартных параметров можно в <em>синтаксис помощнике</em>, в ветке <em>Интерфейс (управляемый)</em> -&gt; <em>Форма клиентского приложения</em> (в старых версиях платформы <em>Управляемая форма</em>). Далее в ветках <em>Расширение объектов</em>, <em>Расширение справочника</em>  и т. д., можно найти <em>Параметры формы</em>. Там дается полный список возможных стандартных параметров с описаниями.</p>
<p>Также в структуру можно передавать произвольные параметры, которые можно обрабатывать программно, в открываемой форме. Например в обработчике события <em>ПриСозданииНаСервере</em>.</p>
<p>Рассмотрим примеры открытия различных форм с использованием параметров.</p>
<p>Пример 3. Открыть форму объекта справочника <em>Пользователи</em>, используя ссылку на объект.</p>
<pre><code>ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Ссылка);
	
ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта", ПараметрыФормы);</code></pre>
<p>Пример 4. Открыть форму списка справочника Номенклатура с отбором по реквизиту ВидНоменклатуры и по списку родителей.</p>
<pre><code>Отбор = Новый Структура;
Отбор.Вставить("ВидНоменклатуры", ВидНоменклатуры);
Отбор.Вставить("Родитель", СписокРодителей);
	
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
	
ОткрытьФорму("Справочник.Номенклатура.ФормаСписка", ПараметрыФормы); 
</code></pre>
<p>Здесь <em>Отбор</em> &#8212; это стандартный параметр для форм, использующих в качестве основного реквизита <em>Динамический список</em>. Например, это формы списка и выбора. Он представляет из себя <em>Структуру</em>, в которую можно добавить значения элементов отбора. В Ключ &#8212; имя реквизита, в Значение &#8212; значение отбора.</p>
<p>Данным способом можно отобрать значения, используя вид сравнения <em>Равно</em> или <em>ВСписке</em>. Для отбора <em>ВСписке </em>следует добавить в структуру <em>Массив</em>, <em>ФиксированныйМассив</em>, либо <em>СписокЗначений</em>. Следует заметить, что отбор <em>ВИерархии</em> установить данным способом не выйдет.<br />
<!-- Yandex.RTB R-A-247615-2 --></p>
<div id="yandex_rtb_R-A-247615-2"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-2",
                renderTo: "yandex_rtb_R-A-247615-2",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<h4>Владелец</h4>
<p>В данный параметр передается элемент формы или форма клиентского приложения (управляемая форма) полностью. Используется для указания подчинения открываемой формы.</p>
<p>Это может потребоваться для многих целей, например для:</p>
<ul>
<li>Анализа владельца и выполнения определенных действий в открываемой форме;</li>
<li>Корректной работы события <em>ОбработкаЗаписиНового</em>, в форме владельце;</li>
<li>Самостоятельной реализации выбора в поле формы.</li>
</ul>
<p>Пример 5. Реализовать программный выбор элемента <em>Номенклатура</em>, в поле ввода.</p>
<pre><code>&amp;НаКлиенте
Процедура НоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
    СтандартнаяОбработка = Ложь;
	
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ТекущаяСтрока", Номенклатура);	
	
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элемент);
	
КонецПроцедуры
</code></pre>
<p>В данном случае необходимо:</p>
<ul>
<li>Создать обработчик события <em>НачалоВыбора</em>, для поля ввода;</li>
<li>Отменить стандартную обработку выбора;</li>
<li>В параметр <em>Владелец</em> передать элемент формы (поле).</li>
</ul>
<p>Параметр ТекущаяСтрока, позволяет выделять ранее выбранный элемент в форме выбора. Стоит заменить, что в обычной ситуации такой метод выбора значений не применяется. Его применяют только тогда, когда нет возможности настроить форму выбора под условия задачи.</p>
<h4>Уникальность</h4>
<p>В параметре можно задать ключ уникальности формы произвольного типа. При открытии формы, платформа будет анализировать, есть в текущем сеансе уже открытая форма, с таким же ключом уникальности. Если такая форма будет найдена, то она будет активизирована, а новая не откроется. Этот механизм работает только для одинаковых форм. Если вы будете открывать формы объекта разных документов с одинаковым ключом, то откроются обе.</p>
<p>По умолчанию, платформа сама генерирует ключ уникальности. Поэтому помимо использования собственного ключа, в параметре <em>Уникальность</em>, можно регулировать использование стандартного. Если передать в него значение <em>Ложь</em>, то будет использован стандартный ключ, если значение <em>Истина</em>, то ключ не будет использоваться совсем. Т.е. будет создаваться новая форма, при каждом использовании метода <em>ОткрытьФорму</em>. Значением по умолчанию является <em>Ложь</em>, поэтому специально задавать его не требуется.</p>
<p>Пример 6. Одновременно открыть две формы объекта справочника <em>Пользователи</em>, по одной и той же ссылке.</p>
<pre><code>ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Пользователь);
	
ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта", ПараметрыФормы,, "1");
ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта", ПараметрыФормы,, "2");</code></pre>
<h4>Окно</h4>
<p>В параметре можно указать окно, в котором будет открыта новая форма. Тип параметра <em>ОкноКлиентскогоПриложения.</em></p>
<p>Пример 7. Реализовать программный выбор элемента <em>Номенклатура</em>, в поле ввода. Реализовать выбор в окне формы, на которой расположено поле.</p>
<pre><code>&amp;НаКлиенте
Процедура НоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
    СтандартнаяОбработка = Ложь;

    Окно = ЭтаФорма.Окно;
    ОткрытьФорму("Справочник._ДемоНоменклатура.ФормаВыбора",, Элемент,, Окно);
	
КонецПроцедуры
</code></pre>
<p>В этом примере мы получаем окно текущей формы и используем его для открытия формы выбора справочника.<br />
<!-- Yandex.RTB R-A-247615-3 --></p>
<div id="yandex_rtb_R-A-247615-3"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-3",
                renderTo: "yandex_rtb_R-A-247615-3",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<h4>НавигационнаяСсылка</h4>
<p>Позволяет установить собственную навигационную ссылку для открываемой формы. Устанавливаемая навигационная ссылка должна иметь тип <em>Строка</em>. Значение по умолчанию: <em>Неопределено</em>, при использовании этого значения, навигационная ссылка задается автоматически.</p>
<h4>ОписаниеОповещенияОЗакрытии</h4>
<p>В параметр передается описание процедуры, которая будет вызвана после закрытия открываемой формы. Тип параметра: <em>ОписаниеОповещения</em>.</p>
<p>Пример 8. В 1с открыть форму программно. Использовать форму объекта справочника <em>Пользователи.</em> После ее закрытия сообщить, что карточка пользователя закрыта.</p>
<pre><code>&amp;НаКлиенте
Процедура ОткрытьФормуПользователя(Пользователь)

    ДопПараметры = Новый Структура;
    ДопПараметры.Вставить("Пользователь", Пользователь);
	
    Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияФормыПользователя", 
                                          ЭтаФорма, 
                                          ДопПараметры);
	
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Ключ", Пользователь);
	
    ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта", 
                 ПараметрыФормы,,,,, 
                 Оповещение);	

КонецПроцедуры

&amp;НаКлиенте
Процедура ПослеЗакрытияФормыПользователя(Результат, ДопПараметры) Экспорт

    Пользователь = ДопПараметры.Пользователь;
	
    ШаблонСообщения = "Карточка пользователя ""%1"" закрыта";	
    ТекстСообщения = СтрШаблон(ШаблонСообщения, Пользователь);
	
    Сообщить(ТекстСообщения);	

КонецПроцедуры
</code></pre>
<p>Используемые в примере параметры описания оповещения:</p>
<ul>
<li>Первый: имя процедуры;</li>
<li>Второй: модуль, в котором она расположена (в данном случае текущая форма);</li>
<li>Третий: структура дополнительных параметров, которая будет передана в процедуру;</li>
</ul>
<p>Описанная процедура обязательно должна иметь два параметра:</p>
<ul>
<li>Результат. Значение, которое возвращает форма при закрытии. Форма объекта не возвращает значений (если это специально не прописать), поэтому в данном случае значение параметра будет <em>Неопределено</em>. А вот форма выбора, например, вернет массив выбранных значений.</li>
<li>ДопПараметры. Структура параметров, созданная в описании оповещения.</li>
</ul>
<p>Также описанная процедура должна быть экспортной.</p>
<h4>РежимОткрытияОкна</h4>
<p>Позволяет указать режим открытия управляемой формы. По умолчанию <em>Неопределено</em>, вручную можно задать одно из значений системного перечисления <em>РежимОткрытияОкнаФормы</em>:</p>
<ul>
<li><em>БлокироватьВеcьИнтерфейс</em>;</li>
<li><em>БлокироватьОкноВладельца</em>;</li>
<li><em>Независимый</em>.</li>
</ul>
<h3>Метод ОткрытьФорму по форме</h3>
<p>Существует еще один вариант синтаксиса метода <em>ОткрытьФорму</em>.</p>
<pre><code>ОткрытьФорму(&lt;Форма&gt;, &lt;Окно&gt;)</code></pre>
<p>Используется, если вы уже получили форму, произвели с ней какие-то действия и теперь ее необходимо открыть.</p>
<p>Пример 9. Получить форму списка справочника <em>Номенклатура</em>, а затем в 1с открыть форму программно.</p>
<pre><code>Форма = ПолучитьФорму("Справочник._ДемоНоменклатура.ФормаСписка");
ОткрытьФорму(Форма);</code></pre>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/1s-otkryt-formu-programmno.html">Как в 1с открыть форму программно</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/1s-otkryt-formu-programmno.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как в 1с открыть ссылку на документ</title>
		<link>https://1cguide.ru/programmirovanie-1s/1s-otkryt-ssylku.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/1s-otkryt-ssylku.html#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 29 Sep 2020 04:28:28 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<category><![CDATA[1С:Предприятие 8.3]]></category>
		<category><![CDATA[управляемое приложение]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1187</guid>

					<description><![CDATA[<p>В статье будет описано, как в 1с открыть ссылку на документ, справочник и т.д. В данном случае имеется в виду открытие формы объекта, используя ссылку на него. Рассмотрим три способа решения поставленной задачи. Открыть ссылку используя ПоказатьЗначение Самый простой способ, использовать метод глобального контекста ПоказатьЗначение. Который показывает в диалоге значение</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/1s-otkryt-ssylku.html">Как в 1с открыть ссылку на документ</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>В статье будет описано, как в 1с открыть ссылку на документ, справочник и т.д. В данном случае имеется в виду открытие формы объекта, используя ссылку на него. Рассмотрим три способа решения поставленной задачи.</p>
<h3>Открыть ссылку используя ПоказатьЗначение</h3>
<p>Самый простой способ, использовать метод глобального контекста <em>ПоказатьЗначение</em>. Который показывает в диалоге значение переданное в параметре.</p>
<pre><code>ПоказатьЗначение(&lt;ОписаниеОповещенияОЗавершении&gt;, &lt;Значение&gt;)</code></pre>
<p>В параметр <em>Значение</em> передадим ссылку, которую необходимо открыть. Данный метод является ассинхронным, т.е. не ожидает закрытие указанного значения. Для целей ожидания и обработки закрытого значения, в процедуре существует первый параметр. Но для нашей задачи он не нужен и указывать его не следует.</p>
<p>Таким образом открытие ссылки будет выглядеть следующим образом:</p>
<pre><code>ПоказатьЗначение(, Ссылка);</code></pre>
<p>Если в вашей конфигурации разрешено открытие модальных окон (<em>Свойства конфигурации</em> -&gt; <em>Режим использования модальности</em>, принимает значения <em>Использовать</em> или <em>Использовать с предупреждениями</em>), то можно использовать метод <em>ОткрытьЗначение.</em></p>
<pre><code>ОткрытьЗначение(&lt;Значение&gt;)</code></pre>
<h3>Открытие формы по ссылке</h3>
<p>Также в 1с открыть ссылку можно при помощи метода <em>ОткрытьФорму</em>. Этот способ более сложен в реализации, но зато универсален. У него довольно много параметров, но для данной задачи нас интересуют первые два.</p>
<pre><code>ОткрытьФорму(&lt;ИмяФормы&gt;, &lt;Параметры&gt;)</code></pre>
<p><em>ИмяФормы</em> &#8212; в параметре следует указать полный путь к форме, которую вы собираетесь открыть.</p>
<p>Пример 1. Можно указать форму, которая является формой объекта по умолчанию:</p>
<pre><code>"Документ.ПоступлениеТоваров.ФормаОбъекта"</code></pre>
<p>Пример 2. Либо указать имя конкретной формы, которую вы хотите открыть. Если, например, форм объекта несколько.</p>
<pre><code>"Документ.ПоступлениеТоваров.Форма.МояФормаОбъекта"</code></pre>
<p><em>Параметры</em> &#8212; структура параметров, которая передается в форму. Набор параметров разработчик выбирает сам, исходя их своих целей. Но некоторые параметры являются стандартными и используются для конкретных целей. Например, параметр <em>Ключ</em>, используется для указания платформе, форму какого объекта следует открыть (если <em>Ключ</em>, не указан, то будет открыта форма нового объекта). Таким образом в данный параметр необходимо передать ссылку на открываемый объект.</p>
<p>Пример 3. Открыть форму объекта для документа <em>Поступление товаров</em>.</p>
<pre><code>ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Ссылка);
	
ОткрытьФорму("Документ.ПоступлениеТоваров.ФормаОбъекта", ПараметрыФормы);
</code></pre>
<p>Получить более подробную информацию по методу <em>ОткрытьФорму</em> можно в статье <a href="https://1cguide.ru/programmirovanie-1s/1s-otkryt-formu-programmno.html" target="_blank" rel="noopener noreferrer">Как в 1с открыть форму программно</a><br />
<!-- Yandex.RTB R-A-247615-2 --></p>
<div id="yandex_rtb_R-A-247615-2"></div>
<p><script type="text/javascript">
    (function(w, d, n, s, t) {
        w[n] = w[n] || [];
        w[n].push(function() {
            Ya.Context.AdvManager.render({
                blockId: "R-A-247615-2",
                renderTo: "yandex_rtb_R-A-247615-2",
                async: true
            });
        });
        t = d.getElementsByTagName("script")[0];
        s = d.createElement("script");
        s.type = "text/javascript";
        s.src = "//an.yandex.ru/system/context.js";
        s.async = true;
        t.parentNode.insertBefore(s, t);
    })(this, this.document, "yandexContextAsyncCallbacks");
</script></p>
<h3>Открытие формы по навигационной ссылке</h3>
<p>Если у вас есть навигационная ссылка на документ или справочник, перейти по ней и открыть форму объекта можно, используя метод <em>ПерейтиПоНавигационнойСсылке</em>.</p>
<pre><code>ПерейтиПоНавигационнойСсылке(&lt;НавигационнаяСсылка&gt;)</code></pre>
<p>Пример 4.</p>
<pre><code>НавигационнаяСсылка = "e1cib/data/Документ._ДемоПоступлениеТоваров?ref=acb79eb068770e2511e47c89f0b33406";
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);
</code></pre>
<p>Также навигационную ссылку можно получить из обычной ссылки. Для этого используется метод <em>ПолучитьНавигационнуюСсылку</em>.</p>
<pre><code>ПолучитьНавигационнуюСсылку(&lt;Объект&gt;, &lt;ИмяРеквизита&gt;, &lt;Индекс&gt;)</code></pre>
<p>В параметр Объект, в том числе, можно передать ссылку на документ или справочник.</p>
<p>Пример 5. Получить навигационную ссылку, используя обычную ссылку и открыть форму объекта.</p>
<pre><code>НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Ссылка);
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);</code></pre>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/1s-otkryt-ssylku.html">Как в 1с открыть ссылку на документ</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/1s-otkryt-ssylku.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Пустая ссылка в запросе 1с проверка и использование</title>
		<link>https://1cguide.ru/programmirovanie-1s/pustaya-ssylka-v-zaprose-1s.html</link>
					<comments>https://1cguide.ru/programmirovanie-1s/pustaya-ssylka-v-zaprose-1s.html#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 26 Sep 2020 15:24:42 +0000</pubDate>
				<category><![CDATA[1С Программирование]]></category>
		<category><![CDATA[язык запросов]]></category>
		<guid isPermaLink="false">https://1cguide.ru/?p=1139</guid>

					<description><![CDATA[<p>В статье вы узнаете, как применяется пустая ссылка в запросе 1с. Пустые ссылки можно использовать в различных конструкциях языка запросов: условиях раздела ГДЕ; в качестве значения поля запроса; конструкциях ВЫБОР КОГДА&#8230;; конструкциях ЕСТЬNULL; условиях связей таблиц. Пустая ссылка в условиях запросов 1с Для использования пустой ссылки ее необходимо передать ее</p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/pustaya-ssylka-v-zaprose-1s.html">Пустая ссылка в запросе 1с проверка и использование</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>В статье вы узнаете, как применяется пустая ссылка в запросе 1с. Пустые ссылки можно использовать в различных конструкциях языка запросов:</p>
<ul>
<li>условиях раздела <em>ГДЕ</em>;</li>
<li>в качестве значения поля запроса;</li>
<li>конструкциях <em>ВЫБОР КОГДА&#8230;</em>;</li>
<li>конструкциях <em>ЕСТЬNULL</em>;</li>
<li>условиях связей таблиц.</li>
</ul>
<h3>Пустая ссылка в условиях запросов 1с</h3>
<p>Для использования пустой ссылки ее необходимо передать ее в запрос при помощи параметра. Также можно использовать конструкцию <em>ЗНАЧЕНИЕ</em>.</p>
<pre><code>ЗНАЧЕНИЕ(&lt;ОбъектМетаданных&gt;.ПустаяСсылка)</code></pre>
<p>Здесь <em>ОбъектМетаданных</em> выражение вида:</p>
<ul>
<li><em>Документ.ИмяДокумента;</em></li>
<li><em>Справочник.ИмяДокумента </em>и т.д.</li>
</ul>
<p>Пример 1. При помощи запроса получить верхний уровень иерархии справочника <em>Номенклатура</em>.</p>
<pre><code>Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)";</code></pre>
<p>Пример 2. При помощи запроса получить все элементы справочника <em>Номенклатура</em>, кроме тех, у кого нет родителя.</p>
<pre><code>Запрос = Новый Запрос;

ПустаяСсылка = Справочники.Номенклатура.ПустаяСсылка;
Запрос.УстановитьПараметр("ПустаяСсылка", ПустаяСсылка);

Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    НЕ Номенклатура.Родитель = &amp;ПустаяСсылка";</code></pre>
<p><strong>Следует помнить, что в запросе нельзя реализовать проверку сразу на все пустые ссылки</strong>. Всегда требуется указывать, пустую ссылку какого справочника, документа вы имеете в виду.</p>
<h3>Пустая ссылка в качестве значения поля</h3>
<p>Пустая ссылка в запросе 1с может использоваться в качестве значения поля. Как в чистом виде, так и в конструкциях <em>ВЫБОР КОГДА&#8230; или ЕСТЬNULL.</em></p>
<p>Пример 3. Создать пустую временную таблицу <em>ТаблицаНоменклатуры.</em></p>
<pre><code>Запрос.Текст = 
"ВЫБРАТЬ
|    ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК Номенклатура,
|    0 КАК Цена
|ПОМЕСТИТЬ ТаблицаНоменклатуры
|ГДЕ
|    ЛОЖЬ</code></pre>
<p>Пример 4. При помощи запроса получить список номенклатуры со значениями дополнительного сведения <em>Цвет</em>.</p>
<pre><code>Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка,
|    ЕСТЬNULL(Сведения.Значение, 
|             ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка)) КАК Цвет
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК Сведения
|        ПО Номенклатура.Ссылка = Сведения.Объект
|            И Сведения.Свойство = &amp;СвойствоЦвет";</code></pre>
<p>Пример 5. В запросе из предыдущего примера использовать конструкцию <em>ВЫБОР КОГДА&#8230; </em>вместо <em>ЕСТЬNULL</em>.</p>
<pre><code>Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка,
|    ВЫБОР
|        КОГДА НЕ Сведения.Значение ЕСТЬ NULL
|            ТОГДА Сведения.Значение
|        ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка)
|    КОНЕЦ КАК Цвет
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК Сведения
|        ПО Номенклатура.Ссылка = Сведения.Объект
|        И Сведения.Свойство = &amp;СвойствоЦвет";</code></pre>
<h3>Пустая ссылка в связях запроса 1с</h3>
<p>Проверку на пустую ссылку можно использовать и в условиях связи таблиц.</p>
<p>Пример 6. Получить список номенклатуры, а также значения дополнительного сведения <em>Индекс.</em> Индекс выводить только для номенклатуры с заполненным реквизитом <em>СтранаПроисхождения</em>.</p>
<pre><code>Запрос.Текст = 
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка,
|    Сведения.Значение КАК ПочтовыйИндекс
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК Сведения
|    ПО (Номенклатура.Ссылка = Сведения.Объект
|        И Сведения.Свойство = &amp;СвойствоИндекс
|        И Номенклатура.СтранаПроисхождения 
|               &lt;&gt; ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка))";</code></pre>
<p>Также прочитайте статью о структуре оператора <em>Выбрать</em>, языка запросов: <a href="https://1cguide.ru/obuchenie-yazyku-zaprosov/yazyk-zaprosov-1c-operator-vybrat.html" target="_blank" rel="noopener noreferrer">Язык запросов 1с — оператор Выбрать</a></p>
<p>Сообщение <a rel="nofollow" href="https://1cguide.ru/programmirovanie-1s/pustaya-ssylka-v-zaprose-1s.html">Пустая ссылка в запросе 1с проверка и использование</a> появились сначала на <a rel="nofollow" href="https://1cguide.ru">1cguide.ru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://1cguide.ru/programmirovanie-1s/pustaya-ssylka-v-zaprose-1s.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
