<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://sfsys.ru/index.php?action=history&amp;feed=atom&amp;title=Table.CopyByX</id>
	<title>Table.CopyByX - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://sfsys.ru/index.php?action=history&amp;feed=atom&amp;title=Table.CopyByX"/>
	<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Table.CopyByX&amp;action=history"/>
	<updated>2026-04-04T13:05:45Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>http://sfsys.ru/index.php?title=Table.CopyByX&amp;diff=2556&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Table.CopyByX&amp;diff=2556&amp;oldid=prev"/>
		<updated>2021-02-07T06:53:49Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 06:53, 7 February 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Table.CopyByX&amp;diff=2555&amp;oldid=prev</id>
		<title>Admin at 14:44, 8 August 2020</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Table.CopyByX&amp;diff=2555&amp;oldid=prev"/>
		<updated>2020-08-08T14:44:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=CopyByX&lt;br /&gt;
|object=[[Электронная таблица SFT|Электронная таблица]]&lt;br /&gt;
|caption=Работа с шаблонами&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в строку, число, неверные параметры, ошибка исполнения&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Электронная таблица SFT|Электронная таблица]]}}&lt;br /&gt;
Функция выполняет копирование указанной области ячеек и объектов, находящихся внутри этой области из таблицы-шаблона в текущую таблицу, начиная с ячейки, заданной атрибутами [[Table.CurPutX|CurPutX]] и [[Table.CurPutY|CurPutY]]. В момент копирования тексты и значения ячеек и объектов, являющиеся шаблонами, будут превращены в результаты их вычисления. Если третий аргумент равен 1, до начала копирования, функция переводит курсор копирования в левый столбик и производит сдвиг курсора по вертикали (размер сдвига по вертикали определяется высотой области, которая была скопирована в таблицу до текущей). После окончания копирования функция переводит курсор копирования вправо на ширину области копирования. Если четвертый аргумент равен 1, функция не будет изменять размеры строк или столбцов в соответствии с размерами строк и столбцов копируемой области, однако, при копировании текста в ячейки, автоматически рассчитываемые размеры строк или столбцов по-прежнему будут изменены, если это необходимо (данный режим полезен, к примеру, если ширина столбцов уже задана, а шаблон содержит неверную ширину, которая испортит установку). После копирования любого визуального объекта, функция вызывает событие [[OnFinishCopyObject]], если оно существует в текущем или глобальном модуле.&lt;br /&gt;
&lt;br /&gt;
На рисунке показан вид простой таблицы-шаблона. Области таблицы имеют свои имена. При использовании функции, для указания на область копирования, формат определения области следующий: &amp;lt;code&amp;gt;&amp;lt;Имя области шаблона&amp;gt;[|&amp;lt;Имя области шаблона пересекающегося измерения&amp;gt;]&amp;lt;/code&amp;gt; либо &amp;lt;code&amp;gt;&amp;lt;Имя области шаблона&amp;gt;[,&amp;lt;Имя области шаблона пересекающегося измерения&amp;gt;]&amp;lt;/code&amp;gt;, либо прямое указание на область копирования &amp;lt;code&amp;gt;&amp;lt;Левый столбец области&amp;gt;:&amp;lt;Верхняя строка области&amp;gt;,&amp;lt;Правый столбец области&amp;gt;:&amp;lt;Нижняя строка области&amp;gt;&amp;lt;/code&amp;gt; (нумерация начинается с единицы). Т.е., для именованных областей на рисунке, &amp;lt;code&amp;gt;v1&amp;lt;/code&amp;gt; будет подразумеваться область ячеек в диапазоне &amp;lt;code&amp;gt;1:1,&amp;lt;ширина таблицы&amp;gt;:6&amp;lt;/code&amp;gt;; для &amp;lt;code&amp;gt;h1&amp;lt;/code&amp;gt; подразумевается область &amp;lt;code&amp;gt;1:1,2:9&amp;lt;/code&amp;gt; (9 -- высота таблицы); для &amp;lt;code&amp;gt;h1|v2&amp;lt;/code&amp;gt; подразумевается область &amp;lt;code&amp;gt;1:7,2:7&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=435px heights=271px&amp;gt;&lt;br /&gt;
Table Template Ex.png||Рис. Простая таблица-шаблон с именованными областями для копирования&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При копировании в новую таблицу области &amp;quot;h1|v2&amp;quot; с рисунка с помощью функции ''CopyByX'':&lt;br /&gt;
# Если второй аргумент равен 1, атрибут [[Table.CurPutX|CurPutX]] примет значение 1, а [[Table.CurPutY|CurPutY]] увеличится на высоту предыдущей области.&lt;br /&gt;
# Будут скопированы ячейки диапазона &amp;lt;code&amp;gt;1:7,2:7&amp;lt;/code&amp;gt; в результирующую таблицу в область, начинающуюся с верхней левой ячейки &amp;lt;code&amp;gt;&amp;lt;CurPutX&amp;gt;:&amp;lt;CurPutY&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Будет произведен поиск переменной &amp;lt;code&amp;gt;пДата&amp;lt;/code&amp;gt; и значение копируемой ячейки будет изменено на ее значение (если переменная не существует, будет вызвано исключение). Для копируемых ячеек, содержащих вычисляемые выражения, а не просто переменные, будет произведено вычисление выражений.&lt;br /&gt;
# Атрибут [[Table.CurPutX|CurPutX]] увеличится на 2 (ширина области).&lt;br /&gt;
# Если третий параметр равен нулю, в таблице, в которую производится копирование, будет изменена ширина столбцов ''CurPutX-2'' и ''CurPutX-1'' в соответствии с шириной столбца 1 и 2 таблицы-шаблона, высота строки будет подсчитана автоматически исходя из высот всех ячеек, уже находящихся в строке ''CurPutY'' (так как строка на рисунке имеет установку автоматической высоты).&lt;br /&gt;
# Будут скопированы неразрывные регионы, попадающие в область (в данном примере отсутствуют).&lt;br /&gt;
# Будут скопированы разбиения страницы, попадающие в область (в данном примере отсутствуют).&lt;br /&gt;
# Будут скопированы объекты таблицы, попадающие в область (в данном примере отсутствуют), для значений объектов, с установленным флажком &amp;quot;значение для вычисления&amp;quot;, значения будут вычислены, как это происходило для значений ячеек. Для каждого скопированного объекта, будет вызвано событие [[OnFinishCopyObject]].&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|Table.}}'''CopyByX'''(''&amp;lt;Указание на область таблицы-шаблона (STRING)&amp;gt;''{{Optional|,&amp;lt;Перейти на новую строку до добавления области (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Не производить изменения размеров столбцов или строк (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Указание на область таблицы-шаблона (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Строковой аргумент в формате наименований областей или прямого указания на ячейки таблицы-шаблона (см. выше).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Перейти на новую строку до добавления области (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Если аргумент равен 1, атрибут [[Table.CurPutX|CurPutX]] принимает значение 1, а [[Table.CurPutY|CurPutY]] увеличивается на высоту предыдущей добавленной области до начала копирования (см. пример выше).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Не производить изменения размеров столбцов или строк (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Задает режим, когда пересчета ширины столбцов или высоты строк таблицы результата, попадающих в диапазон копирования, для которых не установлен признак &amp;quot;автоматическое изменение&amp;quot;, не будет происходить. Это немного увеличивает скорость копирования и может использоваться, если размеры уже заданы, и в шаблоне они неверные.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Ниже приведен пример из статьи Электронная таблица SFT&lt;br /&gt;
&lt;br /&gt;
//Переменные, которые были подготовлены заранее:&lt;br /&gt;
//спНоменклатура -- список номенклатурных позиций, выводящихся в отчет (горизонтальные строки отчета с папками)&lt;br /&gt;
//спТипыЦен -- список типов цен, которые будут следовать по горизонтали столбиками&lt;br /&gt;
//ДатаФормирования -- дата нахождения цены&lt;br /&gt;
&lt;br /&gt;
//Выполняем запрос для получения горизонтального разреза&lt;br /&gt;
ТЗ:=&amp;quot;зН:=Ref.Номенклатура;&lt;br /&gt;
|зСтатус:=Ref.Номенклатура.@STATUS;Condition(зСтатус=0);&lt;br /&gt;
|зПапка:=Ref.Номенклатура.@ISFOLDER;&lt;br /&gt;
|Condition(зПапка=0);&lt;br /&gt;
|Condition(зН IN спНоменклатура);&lt;br /&gt;
|Group зН with folders;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
З:=Query.Create();&lt;br /&gt;
З.Execute(ТЗ);&lt;br /&gt;
&lt;br /&gt;
Т:=Table.Create();&lt;br /&gt;
Т.SetSourceName(&amp;quot;Отчет&amp;quot;);&lt;br /&gt;
//Здесь и далее переменные с префиксом &amp;quot;п&amp;quot; используются в таблице-шаблоне &amp;quot;Отчет&amp;quot; в соответствующих ячейках,&lt;br /&gt;
//  при копировании куска таблицы с помощью CopyByX, ячейки автоматически заполняются значениями нужных переменных.&lt;br /&gt;
пЗагол:=&amp;quot;Отчет по ценам номенклатуры&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Копирование из таблицы-шаблона будет осуществляться слева направо и затем сверху вниз&lt;br /&gt;
//Столбец &amp;quot;h1&amp;quot; в таблице-шаблоне содержит столбец с наименованием номенклатурной позиции, левый отступ, порядковый номер и пр.&lt;br /&gt;
//Столбец &amp;quot;h2&amp;quot; -- цена текущей позиции по типу цен из спТипыЦен&lt;br /&gt;
//Столбец &amp;quot;h3&amp;quot; -- завершает таблицу (правая граница)&lt;br /&gt;
//Строка &amp;quot;v1&amp;quot; таблицы-шаблона содержит заголовок отчета с заголовками столбцов&lt;br /&gt;
//Строка &amp;quot;v2&amp;quot; таблицы-шаблона содержит одну строку отчета&lt;br /&gt;
//Строка &amp;quot;v3&amp;quot; таблицы-шаблона содержит одну строку папки отчета, цены для папок не выводятся&lt;br /&gt;
//Строка &amp;quot;v4&amp;quot; таблицы-шаблона завершает отчет снизу (нижняя граница)&lt;br /&gt;
&lt;br /&gt;
//Первый блок добавляется &amp;quot;с начала строки&amp;quot;&lt;br /&gt;
Т.CopyByX(&amp;quot;v1|h1&amp;quot;,1);&lt;br /&gt;
For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
  пТипЦен:=спТипыЦен.Get(i);&lt;br /&gt;
  //Последующие блоки добавляются слева направо без перевода на другую строку, пТипЦен выводится в заголовки столбцов&lt;br /&gt;
  Т.CopyByX(&amp;quot;v1|h2&amp;quot;);&lt;br /&gt;
EndDo;&lt;br /&gt;
//Окончание вывода блока заголовка таблицы&lt;br /&gt;
Т.CopyByX(&amp;quot;v1|h3&amp;quot;);&lt;br /&gt;
//Фиксирование заголовка, чтобы он всегда был на экране при перемещении курсора по таблице&lt;br /&gt;
Т.Options.FixedLine:=Т.Height();&lt;br /&gt;
&lt;br /&gt;
пКолВо:=0;&lt;br /&gt;
While З.Next(1) Do&lt;br /&gt;
  //Переменные используются в столбце &amp;quot;h1&amp;quot;&lt;br /&gt;
  пН:=З.зН;&lt;br /&gt;
  пКод:=пН.Code;&lt;br /&gt;
&lt;br /&gt;
  If пН.IsFolder() Then&lt;br /&gt;
    //Вывод строки с папкой&lt;br /&gt;
    Т.CopyByX(&amp;quot;v3|h1&amp;quot;,1);&lt;br /&gt;
    For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
      Т.CopyByX(&amp;quot;v3|h2&amp;quot;);&lt;br /&gt;
    EndDo;&lt;br /&gt;
    Т.CopyByX(&amp;quot;v3|h3&amp;quot;);&lt;br /&gt;
    пКолВо:=пКолВо+1;&lt;br /&gt;
  Else&lt;br /&gt;
    //Вывод обычной строки&lt;br /&gt;
    Т.CopyByX(&amp;quot;v2|h1&amp;quot;,1);&lt;br /&gt;
    For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
      пЦ:=глНайтиЦену(З.зН,спТипыЦен.Get(i),ДатаФормирования);&lt;br /&gt;
      Т.CopyByX(&amp;quot;v2|h2&amp;quot;);&lt;br /&gt;
    EndDo;&lt;br /&gt;
    Т.CopyByX(&amp;quot;v2|h3&amp;quot;);&lt;br /&gt;
  EndIf;&lt;br /&gt;
&lt;br /&gt;
  //Вывод информации о состоянии формирования отчета&lt;br /&gt;
  пКолВо:=пКолВо+1;&lt;br /&gt;
  //Этот текст выводится в строку состояния&lt;br /&gt;
  Form.StatusText(&amp;quot;&amp;quot;+пКолВо+&amp;quot; из &amp;quot;+З.ResultTable.Size());&lt;br /&gt;
  //Этот текст выводится в виде индикатора выполнения, как подсказка при наведении курсора мыши на кнопку задачи отчета&lt;br /&gt;
  Form.UpdateProgress(пКолВо,З.ResultTable.Size());&lt;br /&gt;
EndDo;&lt;br /&gt;
//Выведем нижнюю границу отчета&lt;br /&gt;
Т.CopyByX(&amp;quot;v4|h1&amp;quot;,1);&lt;br /&gt;
For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
  Т.CopyByX(&amp;quot;v4|h2&amp;quot;);&lt;br /&gt;
EndDo;&lt;br /&gt;
Т.CopyByX(&amp;quot;v4|h3&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Изменим параметры печати&lt;br /&gt;
Т.Printing.Orientation:=1;&lt;br /&gt;
Т.Printing.ScaleMode:=1;&lt;br /&gt;
//Режим просмотра для удобства пользователя&lt;br /&gt;
Т.EditorMode:=1;&lt;br /&gt;
//Выводим на экран или принтер?&lt;br /&gt;
If флВывестиСразуНаПринтер Then&lt;br /&gt;
  Т.Printing.Printer:=тПринтер;&lt;br /&gt;
  Т.Print();&lt;br /&gt;
Else&lt;br /&gt;
  Т.Show(пЗагол);&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
</feed>