1С таблица значений - поиск в таблице, удалить значения, создать таблицу
Меню

Таблица значений в 1С 8.3

Содержание статьи
  1. Структура таблицы значений как объекта
  2. Таблица значений Колонки
  3. Строка таблицы значений
  4. Создать таблицу значений
  5. Создание таблицы конструктором
  6. Создание таблицы копированием
  7. Создание таблицы запросом
  8. Заключение

Таблица значений – это специфический универсальный объект, предназначенный для хранения данных в табличном представлении. Ключевое отличие таблицы от прикладных объектов – это отсутствие привязки к физическим таблицам базы данных. Таблица значений существует только в оперативной памяти, что с одной стороны дает уникальные возможности, а с другой – накладывает определенные ограничения. Тем не менее возможности взаимодействия с таблицей сопоставимы со взаимодействием с реально существующими в базе данных объектами.

Исторически таблица значений в 1С имеет двойное назначение, являясь виртуальным аналогом существующих таблиц, но при этом – и элементом управления. С переходом на управляемое приложение большая часть этой функциональности устарела, но и в настоящее время она может быть также элементом пользовательского интерфейса, но с рядом существенных ограничений.

Структура таблицы значений как объекта

Свойства таблицы значений определяются комбинациями двух предопределенных коллекций: ее колонок и строк.

Таблица значений Колонки

Колонка таблицы значений – ее определяющее свойство. Именно набор колонок таблицы определяет ее структуру. Колонки соответствуют полям физических таблиц или знакомым по пользовательскому интерфейсу колонкам табличной части или журнала документов. Колонка может иметь внутреннее имя, тип значения и заголовок, отображаемый при интерактивной работе с таблицей.

Так как колонки являются коллекцией объектов, то вы можете добавлять, удалять и редактировать колонки.

Строка таблицы значений

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

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

Создать таблицу значений

Существует множество способов получить таблицу значений готовую к использованию. Рассмотрим некоторые из них. Каждый пример будет приведен в качестве листингов кода с комментариями.

Создание таблицы конструктором

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


ДемоТаблица = Новый ТаблицаЗначений; 
 // Первым делом инициализируем ТЗ 
 // Далее определяем необходимые параметры для новых колонок и добавляем их в коллекцию 
 // Создание колонки "Номенклатура"
 Имя = "Номенклатура";
 ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
 Заголовок = "Номенклатура (товар)";
 ДемоТаблица.Колонки.Добавить(Имя, ТипЗначения , Заголовок);
 
 // Создание колонки "Количество"
 Имя = "Количество";
 ТипЗначения = Новый ОписаниеТипов("Число");
 ДемоТаблица.Колонки.Добавить(Имя, ТипЗначения);
 // В результате данных манипуляций мы создали пустую таблицу с типизированными колонками 
 // Если вам необходимо использовать более точную типизацию примитивных типов, то следует использовать расширенный синтаксис конструктора “ОписаниеТипов”

Создание таблицы копированием

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


 // Вариант с копированием из ТЗ-эталона всех строк но с сохранением лишь двух указанных колонок
 КолонкиЭталона = "Номенклатура,Количество";
 ДемоТаблица = ТаблицаЭталон.Скопировать(, КолонкиЭталона);
 // Вариант с копированием из ТЗ-эталона предварительно отобранных строк,с сохранением двух указанных колонок
 СтрокиЭталона = ОтобратьВМассивНужныеНамСтрокиИзТаблицыЭталона();
 КолонкиЭталона = "Номенклатура,Количество";
 ДемоТаблица = ТаблицаЭталон.Скопировать(СтрокиЭталона, КолонкиЭталона);
 // Вариант с копированием из ТЗ-эталона строк по указанному фильтру,с сохранением одной колонки “Номенклатура”
 // Будут отобраны все строки где значение в колонке Количество равно 0, в результирующую таблицу попадет только колонка Номенклатура
 ОтборСтрок = Новый Структура("Количество", 0);
 КолонкиЭталона = "Номенклатура";
 ДемоТаблица = ТаблицаЭталон.Скопировать(СтрокиЭталона, КолонкиЭталона);
 
 // Вариант с полным копированием таблицы и последующем удалении одной строки со значением поля количество равным нулю и удалением целой колонки “Количество”
 ОтборСтрок = Новый Структура("Количество", 0);
 КолонкиЭталона = "Номенклатура";
 ДемоТаблица = ТаблицаЭталон.Скопировать(СтрокиЭталона, КолонкиЭталона);
 СтрокаТаблицы = ДемоТаблица.Найти(0, "Количество");
 ДемоТаблица.Удалить(СтрокаТаблицы);
 ДемоТаблица.Колонки.Удалить("Количество");
 // Аналогичные варианты и их модификации можно применять к табличным частям и наборам записей регистров

Создание таблицы запросом

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


 // Пример с созданием пустой таблицы по образцу структуры регистра накопления 
 // Нетрудно догадаться, что таким образом можно получить и заполненную таблицу
 Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 0 * Из РегистрНакопления.ТоварынаСкладе");
 РезультатЗапроса = Запрос.Выполнить();
 ДемоТаблица = РезультатЗапроса.Выгрузить();
 // Пример с созданием пустой таблицы по явно заданным типам и именам полей
 Запрос = Новый Запрос;
 Запрос.Текст =
	 "ВЫБРАТЬ ПЕРВЫЕ 0
	 | Значение(Справочник.Номенклатура.ПустаяССылка) КАК Номенклатура,
	 | ВЫРАЗИТЬ(0 КАК ЧИСЛО(15, 3)) КАК Количество";
 РезультатЗапроса = Запрос.Выполнить();
 ДемоТаблица = РезультатЗапроса.Выгрузить();
 
 // ВАЖНО! Не стоит забывать, что в типах значений колонок, полученных из запроса всегда присутствует тип Null 
 // Таким образом, ТЗ созданная запросом, всегда имеет составные типы колонок

Заключение

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

Рассказать друзьям
Предыдущая статья статья
Госпошлины в 1С 8.3
Следующая статья статья
Основные справочники 1С 8.3: создание и изменение элементов
Комментарии