Опубликовано: 03.02.2021

Объект «ТаблицаЗначений»

Объект типа "ТаблицаЗначений" — это средство языка (то есть не сохраняемый в информационной базе объект), которое позволяет строить «динамические массивы» и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Таблица значений может быть наполнена значениями любого типа, то есть в одной таблице типы хранимых значений могут быть разными. Таблица значений может использоваться и как простой двумерный массив (матрица) значений и как таблица строк определённой структуры, когда колонки типизированы и имеют идентификаторы.

Специальный элемент диалоговой формы «Таблица значений» является интерфейсным средством отображения и манипулирования этим объектом в формах диалогов. При формировании пользовательского интерфейса прикладной задачи довольно часто возникают ситуации, когда для удобства работы пользователя необходимо дать ему возможность выбирать какое-либо значение из заранее подготовленной таблицы значений. Возможности работы со справочниками, журналами и перечислениями предоставляют достаточно мощные средства выбора этих объектов. Однако, существует также необходимость в выборе значений из таблиц, сформированных и отсортированных нестандартным образом, которые невозможно или неудобно получать непосредственно при работе со стандартными визуальными представлениями журналов, справочников или перечислений.

Одним из примеров использования данного объекта может служить организация выбора конкретного товара из таблицы возможных товаров, сформированной по сложному алгоритму.

При работе с таблицей значений следует различать два понятия текущей строки таблицы. Во-первых, существует текущая строка объекта "ТаблицаЗначений", которая устанавливается при помощи методов ПолучитьСтрокуПоНомеру(), ВыбратьСтроки(), ПолучитьСтроку(), эта текущая строка меняется программно и служит для обращения к значениям колонок с помощью идентификаторов уже без указания строки. Во-вторых, существует текущая строка элемента формы диалога «Таблица значений», которая является активной строкой (на ней установлен курсор) в диалоге. Текущая строка элемента диалога возвращается и устанавливается исключительно только при помощи соответствующего метода ТекущаяСтрока(). Например, если программно сменить текущую строку объекта, курсор в визуальном представлении диалога сам собой не передвинется, это можно выполнить только при помощи метода ТекущаяСтрока(). Однако, при вызове из формы процедуры обработки, текущая строка объекта будет совпадать с текущей строкой визуального представления.

Контекст работы с объектом

Во всех программных модулях вызов методов для работы с таблицами значений может выполняться при помощи переменной со ссылкой на объект типа "ТаблицаЗначений". Такие объекты можно создавать при помощи функции СоздатьОбъект(), а чтобы вызвать метод объекта, имя метода (с указанием необходимых параметров) записывается через точку после идентификатора переменной. Кроме того, если в форму диалога при помощи визуальных средств Конфигуратора вставлен специальный элемент формы «Таблица значений», то идентификатор этого элемента доступен в контексте программного модуля этой формы как уже существующий объект типа "ТаблицаЗначений".

При создании объекта типа "ТаблицаЗначений" при помощи функции СоздатьОбъект(), в качестве названия агрегатного типа данных обязательно должно выступать ключевое слово «ТаблицаЗначений» (англоязычный синоним — «ValueTable»).

ТЗ = СоздатьОбъект("ТаблицаЗначений");

Элемент формы «Таблица значений»

Для вставки в форму элемента «Таблица значений» визуальными средствами Конфигуратора необходимо выбрать в главном меню пункты «Вставить −> Таблица значений» (см. рис. ниже, слева) или щёлкнут по кнопке «Таблица значений» на панели «Элементы диалога» (см. рис. ниже, справа).

Вставка элемента в форму

После размещения элемента «Таблица значений» в форме на экран будет выведено окно редактирования свойств элемента (см. рис. ниже), где на вкладке «Общие» следует указать идентификатор таблицы. Этот идентификатор будет доступен в контексте программного модуля данной формы как уже существующий объект типа "ТаблицаЗначений".

Свойства таблицы

В поле «Формула» на вкладке «Дополнительно» можно записать какое-либо выражение, например, вызов функции, которая будет запускаться, если дважды кликнуть мышью по таблице значений, а также при нажатии клавиши Enter, когда курсор находится на элементе «Таблица значений» (то есть когда элемент активен).

Дополнительные свойства таблицы

На вкладке «Картинка» (см. рис. ниже) таблице можно сопоставить картинку (иконку), которая будет выводиться в строках таблицы. Для выбора картинки следует щёлкнуть по кнопке «Изменить картинку» и на экран будет выведена библиотека картинок системы. (Более подробно об использовании иконок в строках таблицы поговорим далее при рассмотрении метода ВыводитьПиктограммы().)

Назначение картинки таблице

Атрибуты объекта

Получить номер текущей строки таблицы значений (то есть строки, выбранной при помощи методов ПолучитьСтрокуПоНомеру(), ВыбратьСтроки(), ПолучитьСтроку()) позволяет атрибут НомерСтроки (англоязычный синоним — LineNo). Атрибут доступен только для чтения.

Пример использования атрибута:

ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
   Стр = ТЗ.НомерСтроки;
   . . .
КонецЦикла;

Получить значение из колонки текущей строки (то есть строки, выбранной при помощи методов ПолучитьСтроку() или ПолучитьСтрокуПоНомеру()) позволяет атрибут <ИдентификаторКолонки>. В тексте программного модуля в качестве имени данного атрибута используется идентификатор конкретной колонки, который задаётся при её создании с помощью методов ДобавитьКолонку() и ВставитьКолонку().

Пример использования атрибута:

ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
   // выбираем значение из колонки "Наименование"
   Товар = ТЗ.Наименование;
   . . .
КонецЦикла;

Примечание: Если при создании колонки идентификатор не был указан, то обращение к колонке возможно только по её порядковому номеру.

Методы объекта

Методы для работы с колонками

Установить или получить количество колонок в таблице значений позволяет метод КоличествоКолонок() (англоязычный синоним — ColumnCount()). Возвращаемым значением метода является число, показывающее количество колонок на момент предшествующий выполнению метода.

Синтаксис метода:

КоличествоКолонок(<Количество>)

где <Количество> — числовое выражение, указывающее новое количество колонок. Параметр является необязательным. Если параметр опущен, то количество колонок не меняется.

Пример использования:

// При создании таблицы
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.КоличествоКолонок(10);
. . .

// При опросе таблицы
Для Кол=1 По ТЗ.КоличествоКолонок() Цикл
   . . .
КонецЦикла;

Добавить в конец таблицы значений новую колонку заданного формата позволяет метод НоваяКолонка() (англоязычный синоним — NewColumn()). Возвращаемым значением метода является номер добавленной колонки.

Синтаксис метода:

НоваяКолонка(<Идентификатор>, <ТипДанных>, <Длина>, <Точность>,
             <Заголовок>, <Ширина>, <Формат>, <Выравнивание>)

где

  • <Идентификатор> — идентификатор колонки (записывается в кавычках). Параметр является необязательным. Если не указан, последующее обращение к колонке возможно только по её номеру;
  • <ТипДанных> — строковое представление типа данных ("Число", "Строка", "Дата", "Справочник.Товары" и т.п.) или вид субконто, задающий тип данных. Параметр является необязательным. Если не указан, то можно хранить любой тип;
  • <Длина> — максимальная длина значения для числовой или строковой колонки. Параметр является необязательным;
  • <Точность> — длина дробной части для числовой колонки. Параметр является необязательным;
  • <Заголовок> — строковое выражение, содержащее заголовок колонки. Параметр является необязательным и имеет смысл только в элементе формы «Таблица значений»;
  • <Ширина> — числовое выражение, задающее ширину колонки (в символах) для представления колонки в элементе форм «Таблица значений». Параметр является необязательным;
  • <Формат> — строковое выражение, содержащее форматную строку (например, "Ч10.2,'"), которая будет использована при визуальном отображении значений данной колонки в элементе форм «Таблица значений». Параметр является необязательным;
  • <Выравнивание> — число, определяющее вариант выравнивания (1 — влево; 2 — вправо) при визуальном отображении значений данной колонки в элементе форм «Таблица значений». Параметр является необязательным. По умолчанию числа выравниваются по правому краю, всё остальное — по левому.

Пример использования:

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Код", "Число", 6, 0, "Код", 6);
ТЗ.НоваяКолонка("Товар", "Справочник.Товары",,, "Наименование", 20);
ТЗ.НоваяКолонка("Цена", "Число", 10, 2, "Цена", 10);
ТЗ.НоваяКолонка("Количество", "Число", 10, 3, "Кол-во", 10);
ТЗ.НоваяКолонка("Сумма", "Число", 10, 2, "Сумма", 10);

Вставить новую колонку в указанную позицию позволяет метод ВставитьКолонку() (англоязычный синоним — InsertColumn()). Возвращаемым значением метода является номер добавленной колонки.

Синтаксис метода:

ВставитьКолонку(<Идентификатор>, <НомерКолонки>, <ТипДанных>, <Длина>,
                <Точность>, <Заголовок>, <Ширина>, <Формат>, <Выравнивание>)

где

  • <Идентификатор> — идентификатор колонки (записывается в кавычках). Параметр является необязательным. Если не указан, последующее обращение к колонке возможно только по её номеру;
  • <НомерКолонки> — числовое выражение, содержащее позицию, в которую вставляется новая колонка. Параметр является необязательным. Если не указан, колонка добавляется в конец таблицы;
  • <ТипДанных> — строковое представление типа данных ("Число", "Строка", "Дата", "Справочник.Товары" и т.п.) или вид субконто, задающий тип данных. Параметр является необязательным. Если не указан, то можно хранить любой тип;
  • <Длина> — максимальная длина значения для числовой или строковой колонки. Параметр является необязательным;
  • <Точность> — длина дробной части для числовой колонки. Параметр является необязательным;
  • <Заголовок> — строковое выражение, содержащее заголовок колонки. Параметр является необязательным и имеет смысл только в элементе формы «Таблица значений»;
  • <Ширина> — числовое выражение, задающее ширину колонки (в символах) для представления колонки в элементе форм «Таблица значений». Параметр является необязательным;
  • <Формат> — строковое выражение, содержащее форматную строку (например, "Ч10.2,'"), которая будет использована при визуальном отображении значений данной колонки в элементе форм «Таблица значений». Параметр является необязательным;
  • <Выравнивание> — число, определяющее вариант выравнивания (1 — влево; 2 — вправо) при визуальном отображении значений данной колонки в элементе форм «Таблица значений». Параметр является необязательным. По умолчанию числа выравниваются по правому краю, всё остальное — по левому.

Пример использования:

ТЗ.ВставитьКолонку("Сумма", 5, "Число", 10, 2, "Сумма", 10, "Ч10.2,'");

Удалить колонку с указанным идентификатором или порядковым номером из таблицы значений позволяет метод УдалитьКолонку(). Англоязычный синоним имени метода — DeleteColumn().

Синтаксис метода:

УдалитьКолонку(<Колонка>)

где <Колонка> — номер или идентификатор колонки.

Пример:

ТЗ.УдалитьКолонку(2);

Установить новые значения параметров указанной колонки позволяет метод УстановитьПараметрыКолонки() (англоязычный синоним — SetColumnParameters()). Если какой-либо параметр при вызове метода не задан, то данный параметр колонки не изменяется.

Синтаксис метода:

УстановитьПараметрыКолонки(<Колонка>, <ТипДанных>, <Длина>, <Точность>,
                           <Заголовок>, <Ширина>, <Формат>, <Выравнивание>)

где

  • <Колонка> — номер или идентификатор колонки, для которой будут установлены новые параметры;
  • <ТипДанных> — строковое представление типа данных ("Число", "Строка", "Дата", "Справочник.Товары" и т.п.) или вид субконто, задающий тип данных. Параметр является необязательным. Если не указан, то можно хранить любой тип;
  • <Длина> — максимальная длина значения для числовой или строковой колонки. Параметр является необязательным;
  • <Точность> — длина дробной части для числовой колонки. Параметр является необязательным;
  • <Заголовок> — строковое выражение, содержащее заголовок колонки. Параметр является необязательным и имеет смысл только в элементе формы «Таблица значений»;
  • <Ширина> — числовое выражение, задающее ширину колонки (в символах) для представления колонки в элементе форм «Таблица значений». Параметр является необязательным;
  • <Формат> — строковое выражение, содержащее форматную строку (например, "Ч10.2,'"), которая будет использована при визуальном отображении значений данной колонки в элементе форм «Таблица значений». Параметр является необязательным;
  • <Выравнивание> — число, определяющее вариант выравнивания (1 — влево; 2 — вправо) при визуальном отображении значений данной колонки в элементе форм «Таблица значений». Параметр является необязательным. По умолчанию числа выравниваются по правому краю, всё остальное — по левому.

Пример использования:

ТЗ.УстановитьПараметрыКолонки("Код", "Число", 8, 2, "Код", 8);

Получить значения параметров колонки по её номеру или идентификатору позволяет метод ПолучитьПараметрыКолонки() (англоязычный синоним — GetColumnParameters()). Возвращаемым значением самого метода является номер или идентификатор колонки. Если в параметре <Колонка> задан номер колонки, то возвращается идентификатор колонки, и наоборот.

Синтаксис метода:

ПолучитьПараметрыКолонки(<Колонка>, <ТипДанных>, <Длина>, <Точность>,
                         <Заголовок>, <Ширина>, <Формат>, <Выравнивание>)

где

  • <Колонка> — номер или идентификатор колонки, для которой требуется получить параметры;
  • <ТипДанных> — идентификатор переменной, в которую метод вернёт строку, описывающую тип колонки. Параметр является необязательным;
  • <Длина> — идентификатор переменной, в которую метод вернёт длину для числовой или строковой колонки. Параметр является необязательным;
  • <Точность> — идентификатор переменной, в которую метод вернёт длину дробной части для числовой колонки. Параметр является необязательным;
  • <Заголовок> — идентификатор переменной, в которую метод вернёт заголовок колонки. Параметр является необязательным;
  • <Ширина> — идентификатор переменной, в которую метод вернёт ширину колонки (в символах). Параметр является необязательным;
  • <Формат> — идентификатор переменной, в которую метод вернёт форматную строку (например, "Ч10.2,'"), которая используется при визуальном отображении значений данной колонки в элементе форм «Таблица значений». Параметр является необязательным;
  • <Выравнивание> — идентификатор переменной, в которую метод вернёт число, определяющее вариант выравнивания (1 — влево; 2 — вправо) при визуальном отображении значений данной колонки. Параметр является необязательным.

Пример использования:

Перем ВыбТип;
Перем ВыбДлина;
Перем ВыбТочность;
Перем ВыбЗаголовок;
Перем ВыбШирина;

НомКол = ТЗ.ПолучитьПараметрыКолонки("Код", ВыбТип, ВыбДлина,
                                     ВыбТочность, ВыбЗаголовок, ВыбШирина);

Методы для работы со строками таблицы

Установить или получить количество строк в таблице значений позволяет метод КоличествоСтрок() (англоязычный синоним — LinesCnt()). Возвращаемым значением метода является количество строк на момент предшествующий выполнению метода.

Синтаксис метода:

КоличествоСтрок(<НовоеКоличествоСтрок>)

где <НовоеКоличествоСтрок> — числовое выражение, указывающее новое количество строк в таблице значений. Параметр является необязательным.

Пример использования:

Разм = ТЗ.КоличествоСтрок();

Вставить новую строку в таблицу значений позволяет метод НоваяСтрока() (англоязычный синоним — NewLine()). Возвращаемым значением метода является номер добавленной строки.

Синтаксис метода:

НоваяСтрока(<НомерСтроки>)

где <НомерСтроки> — числовое выражение, задающее позицию, в которую следует вставить новую строку. Параметр является необязательным. Если позиция не указана строка добавляется в конец таблицы.

Пример использования:

ТЗ.НоваяСтрока(1);

Удалить указанную строку из таблицы значений позволяет метод УдалитьСтроку(). Англоязычный синоним имени метода — DeleteLine().

Синтаксис метода:

УдалитьСтроку(<НомерСтроки>)

где <НомерСтроки> — числовое выражение, содержащее позицию удаляемой строки. Параметр является необязательным. Если номер удаляемой строки не указан, то удаляется текущая строка.

Пример использования:

ТЗ.УдалитьСтроку(2);

Примечание: Если требуется отфильтровать таблицу или список значений, удаляя из них строки, не подходящие по условию, то следует руководствоваться двумя правилами:

  1. Удалять строки нужно от конца к началу таблицы.
  2. Помните, что удаление элемента работает гораздо медленнее, чем добавление. Поэтому быстрее будет создать новый список или таблицу с такой же структурой и в неё копировать оставляемые элементы.

Удалить все строки из таблицы значений позволяет метод УдалитьСтроки() (англоязычный синоним — DeleteLines()). Параметров и возвращаемого значения у метода нет.

Пример использования:

ТЗ.УдалитьСтроки();

Переместить строку таблицы значений на указанное количество позиций позволяет метод СдвинутьСтроку() (англоязычный синоним — MoveLine()). Возвращаемым значением метода будет номер новой позиции.

Синтаксис метода:

СдвинутьСтроку(<КоличествоСтрок>, <НомерСтроки>)

где

  • <КоличествоСтрок> — число строк, на которое надо переместить строку. Если число положительное, то строка сдвигается вниз, если отрицательное — вверх;
  • <НомерСтроки> — номер строки, которую надо переместить. Параметр является необязательным. Если не задан, то перемещается текущая строка.

Пример использования:

ТЗ.СдвинутьСтроку(3, 5);

Получить строку по заданному номеру позволяет метод ПолучитьСтрокуПоНомеру() (англоязычный синоним — GetLineByNumber()). При этом указанная строка становится текущей.

Синтаксис метода:

ПолучитьСтрокуПоНомеру(<НомерСтроки>)

где <НомерСтроки> — числовое выражение, задающее позицию строки, на которую надо переместиться.

Пример использования:

Для НомСтр=1 По ТЗ.КоличествоСтрок() Цикл
   ТЗ.ПолучитьСтрокуПоНомеру(НомСтр);
   // выбираем значение из колонки "Наименование"
   Товар = ТЗ.Наименование;
КонецЦикла;

Вызвать на экран диалоговое окно для интерактивного выбора строки из заранее подготовленной таблицы значений позволяет метод ВыбратьСтроку() (англоязычный синоним — ChooseLine()). Возвращаемым значением метода является число: 1 — если выбор произведён (нажата кнопка «ОК»); 0 — если выбор не произведён (нажата кнопка «Отмена»); −1 (минус единица) — закончилось время ожидания отклика пользователя.

Синтаксис метода:

ВыбратьСтроку(<Строка>, <Заголовок>, <Таймаут>)

где

  • <Строка> — идентификатор переменной, куда помещается значение — номер выбранной строки. При вызове метода сюда можно передать значение начального номера строки, которая будет подсвечена курсором. Если выбор отменён, то значение параметра не меняется. Параметр является необязательным;
  • <Заголовок> — строковое выражение, значение которого отображается в заголовке диалогового окна и может использоваться для подсказки пользователю. Параметр является необязательным;
  • <Таймаут> — числовое выражение, задающее время ожидания системы (в секундах) на отклик пользователя. Параметр является необязательным. Если значение не задано, то время ожидания бесконечно.

Пример использования:

Перем НомСтр;

Если ТЗ.ВыбратьСтроку(НомСтр, "Выберите строку:", 20) = 1 Тогда
   . . .
КонецЕсли;

Вызванное данным кодом диалоговое окно выбора строки может выглядеть так:

Диалоговое окно

Открыть выборку строк таблицы значений (то есть начать их последовательный перебор) позволяет метод ВыбратьСтроки() (англоязычный синоним — SelectLine()). Дальнейшая выборка осуществляется при помощи метода ПолучитьСтроку(). Параметры у метода отсутствуют.

Пример использования:

Если ТЗ.КоличествоСтрок() > 0 Тогда
   // открываем выборку строк
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
      . . .
   КонецЦикла;
Иначе
   Сообщить("В талице нет данных!");
КонецЕсли;

Выбрать следующую строку таблицы значений в последовательности выборки, открытой методом ВыбратьСтроки(), позволяет метод ПолучитьСтроку() (англоязычный синоним — GetLine()). Возвращаемым значением метода является число: 1 — если строка выбрана успешно, 0 — если строка не выбрана (достигнут конец выборки).

Пример использования:

// открываем выборку строк
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
   . . .
КонецЦикла;

Методы для работы с элементом «Таблица значений» диалоговой формы

Определить порядок следования колонок и их видимость в визуальном представлении таблицы значений позволяет метод ВидимостьКолонки() (англоязычный синоним — ColumnVisibility()). Если метод вызывается только для одной колонки, возвращаемым значением метода будет число, характеризующее состояние колонки на момент предшествующий началу работы метода: 1 — колонка видима; 0 — колонка скрыта.

Синтаксис метода:

ВидимостьКолонки(<Колонки>, <Видимость>, <Позиция>)

где

  • <Колонки> — строковое выражение, которое определяет список колонок. Формат передаваемой строки — это разделённые запятыми номера или идентификаторы колонок, для которых применяется данный метод. Например: "Код, Цена, 8, 5";
  • <Видимость> — число: 1 — показать колонки; 0 — скрыть. Параметр является необязательным. Значение по умолчанию — 1;
  • <Позиция> — позиция, в которой показывать колонку. Параметр является необязательным. Если параметр не задан, то колонки отображаются в соответствии с порядком колонок в таблице.

Пример использования:

ТаблДиалога.ВидимостьКолонки("Код, Цена, 8, 5");

Зафиксировать в элементе диалоговой формы «Таблица значений» колонки и строки позволяет метод Фиксировать() (англоязычный синоним — Fix()). Фиксированные колонки и строки не прокручиваются с помощью полос прокрутки.

Синтаксис метода:

Фиксировать(<КолСтрок>, <КолКолонок>)

где

  • <КолСтрок> — количество фиксируемых строк. Параметр является необязательным. Если не указан, то не изменяет фиксацию;
  • <КолКолонок> — количество фиксируемых колонок. Параметр является необязательным. Если не указан, то не изменяет фиксацию.

Пример использования:

ТЗ.Фиксировать(1, 1);

Установить режим вывода пиктограмм в указанной колонке таблицы позволяет метод ВыводитьПиктограммы() (англоязычный синоним — ShowImages()). После установки данного режима любое число, записанное в ячейку указанной колонки, будет трактоваться как номер пиктограммы, которую следует отобразить в ячейке (см. пример ниже).

Синтаксис метода:

ВыводитьПиктограммы(<Колонка>, <НачальнаяПиктограмма>)

где

  • <Колонка> — номер или идентификатор колонки, в которой будут выводиться пиктограммы;
  • <НачальнаяПиктограмма> — номер пиктограммы, которая будет отображаться в ячейке первоначально. Параметр является необязательным. Значение по умолчанию — 1.

Использование в таблице колонки с пиктограммами позволяет сделать информацию, выводимую в этой таблице, более наглядной. Используя стандартные пиктограммы, поставляемые с типовой конфигурацией программы, можно, например, реализовать таблицу с пометками (по типу списка с пометками).

Пиктограмма для вывода в ячейке берётся из картинки, назначенной элементу формы «Таблица значений» в окне свойств элемента на вкладке «Картинка».

Назначение пиктограмм таблице значений

Картинка должна быть формата BMP, содержать все пиктограммы для этой таблицы значений и состоять из последовательности пиктограмм размером 16х15 пикселей. Так, например, картинка, показанная на рисунке выше, имеет размер 48х15 пикселей и содержит три пиктограммы: чекбокс без «галочки» (пиктограмма №1), чекбокс с «галочкой» (пиктограмма №2) и пустая пиктограмма (пиктограмма №3).

Пример установки режим вывода пиктограмм:

Процедура ПриОткрытии()
   // формируем структуру таблицы значений
   Сотрудники.НоваяКолонка("Выбран",,,,"",3);
   Сотрудники.НоваяКолонка("ФИО", "Справочник.Сотрудники",,,"Ф.И.О.");
   // включаем режим вывода пиктограмм для колонки "Выбран"
   Сотрудники.ВыводитьПиктограммы("Выбран", 2);

   // заполняем таблицу значениями
   СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
   СпрСотр.ВыбратьЭлементы();
   Пока СпрСотр.ПолучитьЭлемент() > 0 Цикл
      НомСтр = Сотрудники.НоваяСтрока();
      Сотрудники.УстановитьЗначение(НомСтр, "Выбран", 2);   // выбираем пиктограмму в виде чекбокса с "галочкой"
      Сотрудники.УстановитьЗначение(НомСтр, "ФИО", СпрСотр.ТекущийЭлемент());
   КонецЦикла;
КонецПроцедуры   // ПриОткрытии()

В результате работы вышеприведённой процедуры наша таблица значений примет следующий вид:

Результат работы кода

Для удаления или повторной установки «галочки» с помощью двойного клика пишем следующую процедуру:

Процедура СнятьПометку()
   НомСтр = Сотрудники.ТекущаяСтрока();
   ТекЗнач = Сотрудники.ПолучитьЗначение(НомСтр, "Выбран");
   Сотрудники.УстановитьЗначение(НомСтр, "Выбран", ?(ТекЗнач=2, 1, 2));
КонецПроцедуры   // СнятьПометку()

Имя данной процедуры (чтобы она запускалась при двойном клике по строке таблицы) указываем в поле «Формула» на вкладке «Дополнительно» окна свойств элемента «Таблица значений».

Назначение процедуры элементу

Теперь, чтобы удалить «галочку» из чекбокса, достаточно дважды щёлкнуть по выбранной строке.

Снятие пометки

Установить и считать текущее положение курсора в таблице значений позволяет метод ТекущаяКолонка() (англоязычный синоним — CurrentColumn()). В тексте программного модуля его можно использовать синтаксически как функцию или процедуру. Возвращаемым значением метода будет идентификатор выделенной курсором колонки на момент предшествующий началу работы метода или пустая строка (""), если выделенной колонки нет. Для объектов, созданных с помощью функции СоздатьОбъект(), метод не работает.

Синтаксис метода:

ТекущаяКолонка(<НовКолонка>, <ТекКолонка>)

где

  • <НовКолонка> — номер или идентификатор колонки для элемента формы «Таблица значений», на которую требуется установить курсор. Параметр является необязательным. Если параметр не задан, то текущая колонка в поле диалога не меняется;
  • <ТекКолонка> — идентификатор переменной, куда система возвращает номер текущей колонки. Параметр является необязательным.

Пример использования:

Перем НомКолонки;
ТЗ.ТекущаяКолонка(2, НомКолонки);

Установить и считать текущее положение курсора позволяет метод ТекущаяСтрока() (англоязычный синоним — CurrentLine()). В тексте программного модуля его можно использовать синтаксически как функцию или процедуру. Возвращаемым значением метода будет позиция выделенной курсором строки на момент предшествующий началу работы метода или 0, если выделенной строки нет. Для объектов, созданных с помощью функции СоздатьОбъект(), метод не работает.

Синтаксис метода:

ТекущаяСтрока(<ПозицияСтроки>)

где <ПозицияСтроки> — числовое выражение, задающее индекс строки, на которую требуется установить курсор. Параметр является необязательным. Если параметр не задан, то положение курсора в поле диалога не меняется.

Пример использования:

ТЗ.ТекущаяСтрока(2);

Методы для работы с данными в таблице значений

Установить значение конкретной колонки в указанной строке таблицы значений позволяет метод УстановитьЗначение(). Англоязычный синоним имени метода — SetValue().

Синтаксис метода:

УстановитьЗначение(<Строка>, <Колонка>, <Значение>)

где

  • <Строка> — номер строки;
  • <Колонка> — номер или идентификатор колонки;
  • <Значение> — устанавливаемое значение.

Пример использования:

ТЗ.УстановитьЗначение(3, 5, НовЗнач);

Заполнить указанные колонки в строках таблицы переданным значением позволяет метод Заполнить(). Англоязычный синоним имени метода — Fill().

Синтаксис метода:

Заполнить(<Значение>, <НачСтрока>, <КонСтрока>, <Колонки>)

где

  • <Значение> — одиночное значение, или список значений, или таблица значений;
  • <НачСтрока> — номер начальной строки, с которой надо начинать заполнение. Параметр необязательный. Значение по умолчанию — 1;
  • <КонСтрока> — номер последней строки, по которую надо заполнять. Параметр является необязательным. Если отсутствует, заполнение будет происходить до последней строки таблицы;
  • <Колонки> — номера или идентификаторы колонок, которые надо заполнять. Параметр является необязательным. Если параметр не задан, то заполняются все колонки.

Пример использования:

ТЗ.Заполнить(ВыбЗнач, 2, 5, "5, 6, 7");

Получить значение конкретной колонки в заданной строке таблицы позволяет метод ПолучитьЗначение() (англоязычный синоним — GetValue()). Данное значение является его возвращаемым значением.

Синтаксис метода:

ПолучитьЗначение(<Строка>, <Колонка>)

где

  • <Строка> — номер строки;
  • <Колонка> — номер или идентификатор колонки.

Пример использования:

ТЗ.ПолучитьЗначение(3, 5);

Найти искомое значение в таблице значений, определить номер строки и номер колонки, в которой находится данное значение, позволяет метод НайтиЗначение() (англоязычный синоним — FindValue()). Возвращаемым значением метода является число: 0 — значение не найдено; 1 — значение найдено.

Синтаксис метода:

НайтиЗначение(<ИскЗнач>, <Строка>, <Колонка>)

где

  • <ИскЗнач> — значение для поиска;
  • <Строка> — идентификатор переменной, куда будет возвращён номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке;
  • <Колонка> — идентификатор переменной, куда будет возвращён номер найденной колонки. Если при вызове метода передать в этот параметр номер или идентификатор колонки, то поиск будет осуществляться только по указанной колонке.

Пример использования:

Перем НомСтр;
Перем НомКолонки;

ТЗ.НайтиЗначение(ВыбЗнач, НомСтр, НомКолонки);

Примечание: В программе не предусмотрен поиск значений по нескольким полям (колонкам) таблицы, а решать эту задачу перебором неэффективно. При этом, поиск значений в одной колонке работает очень быстро.

Выходом будет использование индексации. Для этого создаём новую колонку с именем «Ключ» типа "Строка" (или без типа), и для каждой строки вычисляем ключ — строку, которая включает в себя элементы разных колонок. Например:

Ключ = СокрЛП(Имя) + "|" + СокрЛП(Фамилия);

или

Ключ = СокрЛП(Номенклатура.Код) + "|" + СокрЛП(Поставщик.Код);

Затем присваиваем значение колонке:

ТЗ.Ключ = Ключ;

И теперь, чтобы найти строку по двум колонкам, достаточно вычислить ключ комбинации значений и найти его:

Ном = 0;
Если ТЗ.НайтиЗначение(Ключ, Ном, "Ключ") = 1 Тогда
   ТЗ.ПолучитьСтрокуПоНомеру(Ном);  // вот нужная строка
КонецЕсли;

Выполнить сортировку строк таблицы по значениям в заданных колонках и в указанном порядке позволяет метод Сортировать(). Англоязычный синоним имени метода — Sort().

Синтаксис метода:

Сортировать(<Колонки>, <ДокументыПоДате>)

где

  • <Колонки> — строковое выражение, которое определяет колонки, порядок и направление сортировки. Формат передаваемой строки — это разделённые запятыми номера или идентификаторы колонок со знаком направления сортировки ("+" — по возрастанию, "-" — по убыванию, "*" — по внутреннему значению). Знак направления сортировки следует указывать до обозначения колонки через пробел или без пробела. По умолчанию направление сортировки принимается по возрастанию. Пример записи параметра: "-Код, +Цена, -8, 5";
  • <ДокументыПоДате> — необязательный параметр. Он имеет смысл только в том случае, если значениями таблицы являются документы. В этом случае можно задавать сортировку документов по их хронологии. Число: 1 — сортировка по хронологии документов; 0 — нет. Значение по умолчанию — 0.

Пример использования:

ТЗ.Сортировать("-Код, +Цена, -8, 5");

«Свернуть» таблицу значений по соответствующим значениям колонок, то есть заменить на одну строку все дублирующие (по значениям группировочных колонок) строки и суммировать значения по суммируемым колонкам позволяет метод Свернуть() (англоязычный синоним — GroupBy()). Причём результирующая таблица будет содержать только те колонки, которые были перечислены в параметрах.

Синтаксис метода:

Свернуть(<ГруппировочныеКолонки>, <СуммируемыеКолонки>)

где

  • <ГруппировочныеКолонки> — группировочные колонки (номера или идентификаторы колонок через запятую), по которым будут группироваться данные;
  • <СуммируемыеКолонки> — суммируемые колонки (номера или идентификаторы колонок через запятую), по которым будут суммироваться данные.

Пример использования:

ТЗ.Свернуть("1,2,3,4", "5,6,7");

Вычислить сумму значений по заданной колонке таблицы позволяет метод Итог() (англоязычный синоним — Total()). Возвращаемым значением метода является итог по колонке.

Синтаксис метода:

Итог(<Колонка>)

где <Колонка> — номер или идентификатор колонки, по которой следует считать сумму.

Пример использования:

Всего = ТЗ.Итог(2);

Выполнить очистку таблицы значений и удалить колонки позволяет метод Очистить() (англоязычный синоним — Clear()). Параметры и возвращаемое значение у метода отсутствуют.

Пример использования:

ТЗ.Очистить();

Выгрузить заданную область таблицы значений в другую таблицу или список значений позволяет метод Выгрузить() (англоязычный синоним — Unload()). Если в качестве приёмника выгружаемых значений задан список значений, то система выгружает данные из таблицы значений по колонкам.

Синтаксис метода:

Выгрузить(<Приемник>, <НачСтрока>, <КонСтрока>, <Колонки>)

где

  • <Приемник> — идентификатор переменной со ссылкой на объект типа "ТаблицаЗначений" или "СписокЗначений", в который нужно выгрузить данные. Если переменная содержит пустое значение, система сама создаст объект типа "ТаблицаЗначений";
  • <НачСтрока> — номер начальной строки, с которой надо начинать выгрузку. Параметр необязательный. Значение по умолчанию — 1;
  • <КонСтрока> — номер последней строки, по которую надо выгружать. Параметр является необязательным. Если не указан, выгрузка будет производиться до конца таблицы;
  • <Колонки> — номера или идентификаторы колонок, которые надо выгружать. Параметр является необязательным. Если параметр не задан, то выгружаются все колонки.

Пример использования:

НоваяТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.Выгрузить(НоваяТЗ, 1, 5, "1,3,5,7");

Скопировать структуру и значения таблицы, ссылка на которую передаётся в параметре, позволяет метод Загрузить() (англоязычный синоним — Load()). Прежняя структура колонок таблицы, в которую производится загрузка, при этом очищается. Параметры и возвращаемое значение у метода отсутствуют.

Пример использования:

НоваяТЗ = СоздатьОбъект("ТаблицаЗначений");
НоваяТЗ.Загрузить(СтараяТЗ);

Другие статьи по схожей тематике