Difference between revisions of "Table.CopyByX"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:53, 7 February 2021
CopyByX (Работа с шаблонами) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция выполняет копирование указанной области ячеек и объектов, находящихся внутри этой области из таблицы-шаблона в текущую таблицу, начиная с ячейки, заданной атрибутами CurPutX и CurPutY. В момент копирования тексты и значения ячеек и объектов, являющиеся шаблонами, будут превращены в результаты их вычисления. Если третий аргумент равен 1, до начала копирования, функция переводит курсор копирования в левый столбик и производит сдвиг курсора по вертикали (размер сдвига по вертикали определяется высотой области, которая была скопирована в таблицу до текущей). После окончания копирования функция переводит курсор копирования вправо на ширину области копирования. Если четвертый аргумент равен 1, функция не будет изменять размеры строк или столбцов в соответствии с размерами строк и столбцов копируемой области, однако, при копировании текста в ячейки, автоматически рассчитываемые размеры строк или столбцов по-прежнему будут изменены, если это необходимо (данный режим полезен, к примеру, если ширина столбцов уже задана, а шаблон содержит неверную ширину, которая испортит установку). После копирования любого визуального объекта, функция вызывает событие OnFinishCopyObject, если оно существует в текущем или глобальном модуле.
На рисунке показан вид простой таблицы-шаблона. Области таблицы имеют свои имена. При использовании функции, для указания на область копирования, формат определения области следующий: <Имя области шаблона>[|<Имя области шаблона пересекающегося измерения>]
либо <Имя области шаблона>[,<Имя области шаблона пересекающегося измерения>]
, либо прямое указание на область копирования <Левый столбец области>:<Верхняя строка области>,<Правый столбец области>:<Нижняя строка области>
(нумерация начинается с единицы). Т.е., для именованных областей на рисунке, v1
будет подразумеваться область ячеек в диапазоне 1:1,<ширина таблицы>:6
; для h1
подразумевается область 1:1,2:9
(9 -- высота таблицы); для h1|v2
подразумевается область 1:7,2:7
.
При копировании в новую таблицу области "h1|v2" с рисунка с помощью функции CopyByX:
- Если второй аргумент равен 1, атрибут CurPutX примет значение 1, а CurPutY увеличится на высоту предыдущей области.
- Будут скопированы ячейки диапазона
1:7,2:7
в результирующую таблицу в область, начинающуюся с верхней левой ячейки<CurPutX>:<CurPutY>
- Будет произведен поиск переменной
пДата
и значение копируемой ячейки будет изменено на ее значение (если переменная не существует, будет вызвано исключение). Для копируемых ячеек, содержащих вычисляемые выражения, а не просто переменные, будет произведено вычисление выражений. - Атрибут CurPutX увеличится на 2 (ширина области).
- Если третий параметр равен нулю, в таблице, в которую производится копирование, будет изменена ширина столбцов CurPutX-2 и CurPutX-1 в соответствии с шириной столбца 1 и 2 таблицы-шаблона, высота строки будет подсчитана автоматически исходя из высот всех ячеек, уже находящихся в строке CurPutY (так как строка на рисунке имеет установку автоматической высоты).
- Будут скопированы неразрывные регионы, попадающие в область (в данном примере отсутствуют).
- Будут скопированы разбиения страницы, попадающие в область (в данном примере отсутствуют).
- Будут скопированы объекты таблицы, попадающие в область (в данном примере отсутствуют), для значений объектов, с установленным флажком "значение для вычисления", значения будут вычислены, как это происходило для значений ячеек. Для каждого скопированного объекта, будет вызвано событие OnFinishCopyObject.
Синтаксис
Table.CopyByX(<Указание на область таблицы-шаблона (STRING)>,<Перейти на новую строку до добавления области (INT)>=0,<Не производить изменения размеров столбцов или строк (INT)>=0)
Аргументы
<Указание на область таблицы-шаблона (STRING)>
- Строковой аргумент в формате наименований областей или прямого указания на ячейки таблицы-шаблона (см. выше).<Перейти на новую строку до добавления области (INT)>
- (необязательный аргумент) Если аргумент равен 1, атрибут CurPutX принимает значение 1, а CurPutY увеличивается на высоту предыдущей добавленной области до начала копирования (см. пример выше).<Не производить изменения размеров столбцов или строк (INT)>
- (необязательный аргумент) Задает режим, когда пересчета ширины столбцов или высоты строк таблицы результата, попадающих в диапазон копирования, для которых не установлен признак "автоматическое изменение", не будет происходить. Это немного увеличивает скорость копирования и может использоваться, если размеры уже заданы, и в шаблоне они неверные.
Примеры
//Ниже приведен пример из статьи Электронная таблица SFT //Переменные, которые были подготовлены заранее: //спНоменклатура -- список номенклатурных позиций, выводящихся в отчет (горизонтальные строки отчета с папками) //спТипыЦен -- список типов цен, которые будут следовать по горизонтали столбиками //ДатаФормирования -- дата нахождения цены //Выполняем запрос для получения горизонтального разреза ТЗ:="зН:=Ref.Номенклатура; |зСтатус:=Ref.Номенклатура.@STATUS;Condition(зСтатус=0); |зПапка:=Ref.Номенклатура.@ISFOLDER; |Condition(зПапка=0); |Condition(зН IN спНоменклатура); |Group зН with folders;"; З:=Query.Create(); З.Execute(ТЗ); Т:=Table.Create(); Т.SetSourceName("Отчет"); //Здесь и далее переменные с префиксом "п" используются в таблице-шаблоне "Отчет" в соответствующих ячейках, // при копировании куска таблицы с помощью CopyByX, ячейки автоматически заполняются значениями нужных переменных. пЗагол:="Отчет по ценам номенклатуры"; //Копирование из таблицы-шаблона будет осуществляться слева направо и затем сверху вниз //Столбец "h1" в таблице-шаблоне содержит столбец с наименованием номенклатурной позиции, левый отступ, порядковый номер и пр. //Столбец "h2" -- цена текущей позиции по типу цен из спТипыЦен //Столбец "h3" -- завершает таблицу (правая граница) //Строка "v1" таблицы-шаблона содержит заголовок отчета с заголовками столбцов //Строка "v2" таблицы-шаблона содержит одну строку отчета //Строка "v3" таблицы-шаблона содержит одну строку папки отчета, цены для папок не выводятся //Строка "v4" таблицы-шаблона завершает отчет снизу (нижняя граница) //Первый блок добавляется "с начала строки" Т.CopyByX("v1|h1",1); For i:=1 to спТипыЦен.Size() Do пТипЦен:=спТипыЦен.Get(i); //Последующие блоки добавляются слева направо без перевода на другую строку, пТипЦен выводится в заголовки столбцов Т.CopyByX("v1|h2"); EndDo; //Окончание вывода блока заголовка таблицы Т.CopyByX("v1|h3"); //Фиксирование заголовка, чтобы он всегда был на экране при перемещении курсора по таблице Т.Options.FixedLine:=Т.Height(); пКолВо:=0; While З.Next(1) Do //Переменные используются в столбце "h1" пН:=З.зН; пКод:=пН.Code; If пН.IsFolder() Then //Вывод строки с папкой Т.CopyByX("v3|h1",1); For i:=1 to спТипыЦен.Size() Do Т.CopyByX("v3|h2"); EndDo; Т.CopyByX("v3|h3"); пКолВо:=пКолВо+1; Else //Вывод обычной строки Т.CopyByX("v2|h1",1); For i:=1 to спТипыЦен.Size() Do пЦ:=глНайтиЦену(З.зН,спТипыЦен.Get(i),ДатаФормирования); Т.CopyByX("v2|h2"); EndDo; Т.CopyByX("v2|h3"); EndIf; //Вывод информации о состоянии формирования отчета пКолВо:=пКолВо+1; //Этот текст выводится в строку состояния Form.StatusText(""+пКолВо+" из "+З.ResultTable.Size()); //Этот текст выводится в виде индикатора выполнения, как подсказка при наведении курсора мыши на кнопку задачи отчета Form.UpdateProgress(пКолВо,З.ResultTable.Size()); EndDo; //Выведем нижнюю границу отчета Т.CopyByX("v4|h1",1); For i:=1 to спТипыЦен.Size() Do Т.CopyByX("v4|h2"); EndDo; Т.CopyByX("v4|h3"); //Изменим параметры печати Т.Printing.Orientation:=1; Т.Printing.ScaleMode:=1; //Режим просмотра для удобства пользователя Т.EditorMode:=1; //Выводим на экран или принтер? If флВывестиСразуНаПринтер Then Т.Printing.Printer:=тПринтер; Т.Print(); Else Т.Show(пЗагол); EndIf;