Таблица значений

16.05.2018

Теги: 1С:ПредприятиеКоллекцияТаблицаЗначенийТипыДанных

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

Как можно создать новую таблицу значений?

// таблица значений с колонками «Код», «Номенклатура» и «Количество»
ТаблицаЗначений = Новый ТаблицаЗначений();
ТаблицаЗначений.Колонки.Добавить("Код");
ТаблицаЗначений.Колонки.Добавить("Номенклатура");
ТаблицаЗначений.Колонки.Добавить("Количество");

Как добавить новую колонку с определенным типом и заголовком?

// добавляем колонку «Количество» с типом «Число», длиной в 9 символов и с точностью в 2 символа
ФорматЧисла = Новый КвалификаторыЧисла(9, 2)
ОписаниеТипа = Новый ОписаниеТипов("Число", ФорматЧисла);
ТабЗначений.Колонки.Добавить("Количество", ОписаниеТипа, "Количество номенклатуры");
ТаблицаЗначений.Колонки.Добавить(Имя, Тип, Заголовок, Ширина)
  • Имя (необязательный, тип Строка, по умолчанию пустая строка). Имя колонки.
  • Тип (необязательный, тип ОписаниеТипов). Объект, описывающий допустимые типы значений для колонки. Если параметр не указан, в колонке можно будет хранить значение любого типа.
  • Заголовок (необязательный, тип Строка, по умолчанию пустая строка). Заголовок колонки таблицы значений. Используется при визуальном отображении таблицы значений.
  • Ширина (необязательный, тип Число, по умолчанию ноль). Ширина колонки в символах. Используется при визуальном отображении таблицы значений.

Как добавить новые строки?

ТаблицаЗначений = Новый ТаблицаЗначений();
ТаблицаЗначений.Колонки.Добавить("Код");
ТаблицаЗначений.Колонки.Добавить("Наименование");
ТаблицаЗначений.Колонки.Добавить("Количество");

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

Как выгрузить результат запроса в таблицу значений?

Запрос = Новый Запрос();
Запрос.Текст =
    "ВЫБРАТЬ
    |    СправочникНоменклатура.Ссылка КАК Ссылка,
    |    СправочникНоменклатура.Код КАК Код,
    |    СправочникНоменклатура.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК СправочникНоменклатура"
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();

Как обойти в цикле все строки таблицы значений?

Для Каждого Строка Из ТаблицаЗначений Цикл
    Сообщить(Строка.Код + " " + Строка.Наименование);
КонецЦикла;
КоличествоСтрок = ТаблицаЗначений.Количество();
Для Индекс = 0 По КоличествоСтрок - 1 Цикл
    Сообщить(ТаблицаЗначений[Индекс].Код + " " + ТаблицаЗначений[Индекс].Наименование);
КонецЦикла;

Как сделать выборку строк в таблице значений с отбором?

// заполняем таблицу значений
Запрос = Новый Запрос();
Запрос.Текст =
    "ВЫБРАТЬ
    |    СправочникНоменклатура.Ссылка КАК Ссылка,
    |    СправочникНоменклатура.Код КАК Код,
    |    СправочникНоменклатура.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК СправочникНоменклатура";
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
// создаем отбор по ссылке на элемент справочника
Отбор = Новый Структура();
Отбор.Вставить("Ссылка", Справочники.Номенклатура.НайтиПоКоду("000000003"));
// ищем нужную строку
Строка = ТаблицаЗначений.НайтиСтроки(Отбор);        
Если Строка.Количество() > 0 Тогда
    Сообщить(Строка[0].Код + " " + Строка[0].Наименование);
КонецЕсли;
// создаем отбор по коду номенклатуры
Отбор = Новый Структура();
Отбор.Вставить("Код", "000000003");
// ищем нужную строку
Строка = ТаблицаЗначений.НайтиСтроки(Отбор);        
Если Строка.Количество() > 0 Тогда
    Сообщить(Строка[0].Код + " " + Строка[0].Наименование);
КонецЕсли;
// создаем отбор по наименованию
Отбор = Новый Структура();
Отбор.Вставить("Наименование", "трансформатор");
// ищем нужные строки
Строки = ТаблицаЗначений.НайтиСтроки(Отбор);        
Для Каждого Строка Из Строки Цикл
    Сообщить(Строка.Код + " " + Строка.Наименование);
КонецЦикла;
ТаблицаЗначений.НайтиСтроки(ПараметрыОтбора)
  • ПараметрыОтбора (обязательный, тип Структура). Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры — искомое значение.

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

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

Как выполнить сортировку?

ТаблицаЗначений.Сортировать("Код Убыв, Наименование Возр");

Как вычислить итоги по колонке?

Количество = ТаблицаЗначений.Итог("Количество");

Как сделать копию таблицы значений?

Копия = ТаблицаЗначений.Скопировать();

Как свернуть таблицу значений по колонке и суммировать по количеству?

ТаблицаЗначений.Свернуть("Наименование", "Количество");

Метод Свернуть() сворачивает таблицу по колонке «Наименование» и суммирует колонку «Количество». Если существуют еще колонки, то они будут удалены.

ТаблицаЗначений.Свернуть(КолонкиГруппировок, КолонкиСуммирования)
  • КолонкиГруппировок (обязательный, тип Строка). Имена колонок, разделенные запятыми, по которым необходимо группировать строки таблицы значений.
  • КолонкиСуммирования (необязательный, тип Строка). Имена колонок, разделенные запятыми, по которым необходимо суммировать значения в строках таблицы значений.

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

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

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

Как найти строку в таблице значений по значению?

НайденнаяСтрока = ТаблицаЗначений.Найти("000000003", "Код");
Если НайденнаяСтрока <> Неопределено Тогда
    Сообщить(НайденнаяСтрока.Код + " " + НайденнаяСтрока.Наименование);
Иначе
    Сообщить("Ничего не найдено");
КонецЕсли;
ТаблицаЗначений.Найти(Значение, Колонки)
  • Значение (обязательный, тип Произвольный). Искомое значение.
  • Колонки (необязательный, тип Строка, по умолчанию пустая строка). Список имен колонок, разделенных запятыми, по которым производится поиск. Если параметр не указан, поиск осуществляется по всей таблице значений.

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

Как удалить строку или полностью очистить таблицу значений?

ТаблицаЗначений.Удалить(0); // удаляем первую строку по индексу
ТаблицаЗначений.Очистить(); // полностью очищаем таблицу значений

Как получить отдельную строку?

// получаем строку таблицы значений по индексу
ПерваяСтрока = ТаблицаЗначений.Получить(0);

Как вставить строку в таблицу?

// эта строка будет второй
НоваяСтрока = ТаблицаЗначений.Вставить(1);
Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000000003");
НоваяСтрока.Ссылка = Номенклатура.Ссылка;
НоваяСтрока.Код = Номенклатура.Код;
НоваяСтрока.Наименование = Номенклатура.Наименование;

Дополнительные функции для работы с таблицей значений

// выгружаем колонку «Наименование» в массив
Массив = ТаблицаЗначений.ВыгрузитьКолонку("Наименование");
// заполняем колонку «Количество»
ТаблицаЗначений.ЗаполнитьЗначения(0, "Количество");
// получаем количество строк в таблице значений
КоличествоСток = ТаблицаЗначений.Количество();

Поиск: 1С:Предприятие • Коллекция • Таблица значений • Типы данных

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.