1с сортировать таблицу значений по реквизиту значения

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

Синтаксис

Метод Сортировать() имеет следующий синтаксис:

Сортировать(Колонки, [ОбъектСравнения])

А также альтернативный англоязычный синтаксис:

Sort(Columns, [ComparisonObject])

Параметры

Описание параметров метода Сортировать():

Имя параметра* Тип Описание
Колонки  Строка Список имен колонок, разделенных запятыми, по которым производится сортировка таблицы. После каждого имени колонки через пробел может быть указано направление сортировки:

Возр Asc — сортировать по возрастанию значений (по умолчанию)
Убыв Desc — сортировать по убыванию значений
ОбъектСравнения СравнениеЗначений Объект для сравнения значений. Реализует сравнение значений, типы которых отличаются от простых (Строка, Число, Дата, Булево)
*Жирным шрифтом выделены обязательные параметры

Описание

Метод Сортировать() cортирует строки таблицы значений в соответствии с указанными правилами сортировки. Порядок указания имен колонок таблицы определяет порядок сортировки. Это означает, что сначала таблица сортируется по колонке, указанной первой. Затем группы строк с одинаковым значением в первой колонке сортируются по колонке, которая указана второй, и так далее.

Если параметр ОбъектСравнения не задан, значения простых типов сравниваются по значению, а значения остальных типов — по строковому представлению.

Если параметр ОбъектСравнения задан,  значения простых типов также сравниваются по значению, а значения остальных типов — по правилам:

  • объекты сравниваются по идентификатору
  • моменты времени сравниваются по дате и идентификатору объекта
  • остальные значения сравниваются по строковому представлению

Доступность

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).

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

Пример кода с использованием метода Сортировать():

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

//заполнение
НоваяСтрока = тз.Добавить();
НоваяСтрока.Значение = 1;
НоваяСтрока.Тип = ТипЗнч(НоваяСтрока.Значение);

НоваяСтрока = тз.Добавить();
НоваяСтрока.Значение = "1";
НоваяСтрока.Тип = ТипЗнч(НоваяСтрока.Значение);

НоваяСтрока = тз.Добавить();
НоваяСтрока.Значение = 1.1;
НоваяСтрока.Тип = ТипЗнч(НоваяСтрока.Значение);

//сортировка
тз.Сортировать("Значение", Новый СравнениеЗначений);

//проверка результата
тз.ВыбратьСтроку("Результат сортировки");

Читайте также:

Программная работа с таблицей значений

Поделиться страницей в соц.сетях

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

Методы таблиц значений 1С 8.3. Часть 1. Поиск и копирование.

В этой статье мы научимся сортировать, получать итоги и сворачивать таблицу значений.

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

Сортировать(Колонки, ОбъектСравнения)

Где:

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

ОбъектСравнения  — необязательный параметр, в него передается переменная с типом СравнениеЗначений. Этот параметр необходимо применять, когда в сортируемых колонках содержатся значения не примитивных типов. Если этот параметр не указан, то элементы не примитивных типов сравниваются по своему строковому представлению.  Если же он указан, то они сравниваются по следующим правилам:

  • Объекты сравниваются по идентификатору
  • Моменты времени сравниваются по дате и идентификатору объекта
  • Если есть элементы с разными типами, то они сравниваются по коду типа
  • Элементы остальных типов сравниваются по строковому представлению

Рассмотрим работу этого метода без второго параметра.

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«ФИО»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
ТЗ.Колонки.Добавить(«Оклад»);
//первая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Иванов И.И»;
НСтр.ДатаРождения = Дата(1985,1,15);
НСтр.Оклад        = 2000;
//вторая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Петров П.С»;
НСтр.ДатаРождения = Дата(1984,5,25);
НСтр.Оклад        = 1000;
//третья строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Тарасов К.В»;
НСтр.ДатаРождения = Дата(1987,6,11);
НСтр.Оклад        = 2000;
//сортируем по окладу и дате рождения (убывание)
ТЗ.Сортировать(«Оклад,ДатаРождения УБЫВ»);

В этом коде мы отсортировали таблицу по окладу, поскольку название колонки было без указания направления, то сортировка осуществлялась по возрастанию. И вторая колонка для сортировки это дата рождения, здесь мы указали направление сортировки – по убыванию.

Посмотрим в отладке, какая таблица значений была до сортировки.

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

И после сортировки.

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

Итоги таблицы значений 1С

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

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

Где: Колонка – это колонка, по которой будут просуммированы значения всех строк. Обычно данный метод применяется к колонкам, в которых содержатся значения с типом число.

Рассмотрим пример:

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«ФИО»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
ТЗ.Колонки.Добавить(«Зарплата»);
//первая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Иванов И.И»;
НСтр.ДатаРождения = Дата(1985,1,15);
НСтр.Зарплата         = 2000;
//вторая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Петров П.С»;
НСтр.ДатаРождения = Дата(1984,5,25);
НСтр.Зарплата         = 5000;
//третья строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Тарасов К.В»;
НСтр.ДатаРождения = Дата(1987,6,11);
НСтр.Зарплата         = 3000;
//итог по зарплатам
Общая = ТЗ.Итог(«Зарплата»);

Посмотрим, какой итог получился по указанной колонке.

Метод Итог таблицы значений

Свернуть таблицу значений 1С

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

Рассмотрим синтаксис этого метода

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

Где:

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

КолонкиСуммы – колонки, значения по которым будут просуммированы (необязательный параметр).

Причем, обратите внимание, после применения метода, в измененной таблице значений останутся только колонки группы и колонки суммы, остальные колонки, те, что были до свертки, будут удалены и информация в них потеряется!

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

Рассмотрим пример: в таблице значений будут следующие колонки: ФИО, Вид работ , сумма выданных средств и дополнительная информация (аванс, «окончаловка»  и т.п.), свернем эту таблицу значений по колонкам ФИО и Вид работ, и просуммируем колонку «Сумма».

ТабВыплат = Новый ТаблицаЗначений;
ТабВыплат.Колонки.Добавить(«ФИО»);
ТабВыплат.Колонки.Добавить(«ВидРабот»);
ТабВыплат.Колонки.Добавить(«Сумма»);
ТабВыплат.Колонки.Добавить(«Причина»);
//первая строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Иванов»;
НовВыплата.ВидРабот = «Отделка»;
НовВыплата.Сумма = 1000;
НовВыплата.Причина = «Аванс»;
//вторая строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Иванов»;
НовВыплата.ВидРабот = «Монтаж»;
НовВыплата.Сумма = 1500;
НовВыплата.Причина = «Расчет»;
//третья строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Иванов»;
НовВыплата.ВидРабот = «Монтаж»;
НовВыплата.Сумма = 500;
НовВыплата.Причина = «аванс»;
//четверта строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Петров»;
НовВыплата.ВидРабот = «Монтаж»;
НовВыплата.Сумма = 500;
НовВыплата.Причина = «аванс»;
//пятая строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Петров»;
НовВыплата.ВидРабот = «Монтаж»;
НовВыплата.Сумма = 1500;
НовВыплата.Причина = «Расчет»;
//свертка
ТабВыплат.Свернуть(«ФИО,ВидРабот»,«Сумма»);

Посмотрим в отладке, что было до свертки.

Свернуть таблицу значений

И после свертки

Свернуть таблицу значений

Как видите, произошла группировка по колонкам ФИО и ВидРабот, а значения в колонке Сумма просуммировались, причем колонка Причина была удалена и информация в ней пропала.

Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект.

Более подробно и основательно работа с таблицей значений в дается в моей книге:

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

&НаСервере
Процедура ВыполнитьКодНаСервере()
 
    /// Как создать таблицу значений в 1с 8.3, 8.2
 
    // с таблицей значений можно работать только на сервере 
    Таб = Новый ТаблицаЗначений;    
 
    /// Как добавить колонки в таблицу значений в 1с 8.3, 8.2
 
    Таб.Колонки.Добавить("Фрукт");
    Таб.Колонки.Добавить("Цвет");
    Таб.Колонки.Добавить("Вкус");
 
    /// Как добавить строки в таблицу значений в 1с 8.3, 8.2
 
    Стр = Таб.Добавить();
    Стр.Фрукт = "Яблоко";
    Стр.Цвет = "Зелёный";
    Стр.Вкус = "Кислый";
 
    Стр = Таб.Добавить();
    Стр.Фрукт = "Банан";
    Стр.Цвет = "Желтый";
    Стр.Вкус = "Сладкий";
 
    Стр = Таб.Добавить();
    Стр.Фрукт = "Слива";
    Стр.Цвет = "Синий";
    Стр.Вкус = "Терпкий"; 
 
    /// Как добавить в таблицу значений колонку с
    /// описанием типа и заголовка в 1с 8.3, 8.2
 
    ОписаниеВеса = Новый ОписаниеТипов("Число",
        Новый КвалификаторыЧисла(12, 3));
 
    Таб.Колонки.Добавить("ВесФрукта", ОписаниеВеса, "Вес фрукта");
    Таб[0].ВесФрукта = 100.005;
    Таб[1].ВесФрукта = 60.010;
    Таб[2].ВесФрукта = 25.000;
 
    /// Как перечислить все строки в таблице значений в 1с 8.3, 8.2
 
    Для Каждого Стр Из Таб Цикл
        Сообщить(Стр.Фрукт + " " + Стр.Цвет + " " + Стр.Вкус +
            " " + Стр.ВесФрукта);
    КонецЦикла;
 
    /// Как перечислить все колонки в таблице значений
    /// в 1с 8.3, 8.2
 
    Для Каждого Колонка Из Таб.Колонки Цикл
        Сообщить(Колонка.Имя);
    КонецЦикла; 
 
    /// Как выгрузить колонку таблицы значений в массив в 1с 8.3, 8.2
 
    // выгрузка названий фруктов в массив
    МассивФруктов = Таб.ВыгрузитьКолонку("Фрукт");
 
    // ничего не измениться, так как массив не менялся
    Таб.ЗагрузитьКолонку(МассивФруктов, "Фрукт");
 
    /// Как заполнить значения в колонке для всех строк таблицы 
    /// значений в 1с 8.3, 8.2
 
    // обнулим вес во всех строках
    Таб.ЗаполнитьЗначения(0, "ВесФрукта");
 
    // выставим новые веса
    Таб[0].ВесФрукта = 100;
    Таб[1].ВесФрукта = 60;
    Таб[2].ВесФрукта = 25;
 
    /// Как в таблице значений посчитать итог по колонке в 1с 8.3, 8.2
 
    Сообщить(Таб.Итог("ВесФрукта")); // 185
 
    /// Как найти строку в таблице значений по значению в 1с 8.3, 8.2
 
    // найдём строчку с яблоком и покажем его цвет
    НайденнаяСтрока = Таб.Найти( "Яблоко" );
    Если НайденнаяСтрока <> Неопределено Тогда
        Сообщить(НайденнаяСтрока.Цвет); // Зелёный
    КонецЕсли;
 
    /// Как найти строку в таблице значений поиском значения
    /// в определенных колонках в 1с 8.3, 8.2
 
    // будем искать по слову "Кислый" в колонках вкус и цвет
    НайденнаяСтрока = Таб.Найти("Кислый", "Вкус, Цвет");
    Если НайденнаяСтрока <> Неопределено Тогда
        Сообщить(НайденнаяСтрока.Фрукт); // Яблоко
    КонецЕсли;
 
    // добавим ещё один зелёный фрукт
    Стр = Таб.Добавить();
    Стр.Фрукт = "Киви";
    Стр.Цвет = "Зелёный";
    Стр.Вкус = "Сладкий";
    Стр.ВесФрукта = 30;
 
    /// Как искать в таблице значений неуникальные значения
    /// в 1с 8.3, 8.2
 
    Отбор = Новый Структура;
    Отбор.Вставить("Цвет", "Зелёный");
    Строки = Таб.НайтиСтроки(Отбор);
    Для Каждого Стр Из Строки Цикл
        Сообщить(Стр.Фрукт); // Яблоко Киви
    КонецЦикла;
 
    /// Как сдвинуть строку таблицы значений в 1с 8.3, 8.2
 
    // сдвигаем первую строку на одну позицию вперёд
    Таб.Сдвинуть(0, 1);
 
    // и возвращаем обратно
    Таб.Сдвинуть(1, -1);
 
    /// Как создать копию таблицы значений в 1с 8.3, 8.2
 
    // полная копия
    КопияТаб = Таб.Скопировать();
 
    /// Как создать копию таблицы значений по нужным колонкам
    /// в 1с 8.3, 8.2
 
    // только две колонки будет Фрукт и Цвет
    КопияТаб = Таб.СкопироватьКолонки("Фрукт, Цвет");
 
    /// Как создать копию таблицы значений по отбору в 1с 8.3, 8.2
 
    Отбор = Новый Структура;
    Отбор.Вставить("Фрукт", "Яблоко");
 
    // таблица будет содержать только строчку с яблоком
    КопияТаб = Таб.Скопировать(Отбор);
 
    // таблица будет содержать цвет и вес яблока
    КопияТаб = Таб.Скопировать(Отбор, "Цвет, ВесФрукта");
 
    /// Как свернуть таблицу значений по колонке в 1с 8.3, 8.2
 
    // свернём по вкусу, просуммируем по весу
    Таб.Свернуть("Вкус", "ВесФрукта");
 
    /// Как отсортировать таблицу значений по колонке в 1с 8.3, 8.2
 
    Таб.Сортировать("ВесФрукта Возр");
 
    /// Как отсортировать таблицу значений по нескольким колонкам
    /// в 1с 8.3, 8.2
 
    Таб.Сортировать("ВесФрукта Возр, Вкус Убыв");
 
    /// Как удалить строку из таблицы значений в 1с 8.3, 8.2
 
    // по индексу или по значению
    Таб.Удалить(0);
 
КонецПроцедуры
 
/// Как программно вывести таблицу значений на
/// форму в 1с 8.3, 8.2 
 
// см. примеры использования этой функции ниже
 
// ТабВКоде - таблица значений, созданная программно
// ТабРеквизит - имя реквизита формы типа ТаблицаЗначений
// ТабНаФорме - имя элемента формы, связанного с ТабРеквизит 
 
&НаСервере
Процедура ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме(ТабВКоде, ТабРеквизит, ТабНаФорме)
 
    // реквизит ТабРеквизит и соответствующий
    // ему элемент формы ТабНаФорме уже созданы
    // нами в визуальном режиме
 
    // 1. добавляем колонки из ТабВкоде в реквизит ТабРеквизит
 
    НовыеРеквизиты = Новый Массив;
 
    Для Каждого Колонка Из ТабВКоде.Колонки Цикл
         НовыеРеквизиты.Добавить(
            Новый РеквизитФормы(
                Колонка.Имя, Колонка.ТипЗначения,
                ТабРеквизит
            )
         );
    КонецЦикла;
 
    ИзменитьРеквизиты(НовыеРеквизиты);
 
    // 2. добавляем колонки из ТабВКоде в элемент ТабНаФорме
 
    Для Каждого Колонка Из ТабВКоде.Колонки Цикл
 
        НовыйЭлемент = Элементы.Добавить(
            ТабРеквизит + "_" + Колонка.Имя, Тип("ПолеФормы"), Элементы[ТабНаФорме]
        );
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = ТабРеквизит + "." + Колонка.Имя;
    КонецЦикла;
 
    // 3. наконец, передаём данные из ТабВКоде в ТабРеквизит
 
    ЗначениеВРеквизитФормы(ТабВКоде, ТабРеквизит);
 
    // готово!    
 
КонецПроцедуры
 
&НаСервере
Процедура СоздатьТаблицуНаФормеНаСервере()
 
    // программно создаём таблицу значений ТабВКоде
 
    ТабВКоде = Новый ТаблицаЗначений;
 
    ОписаниеСтроки = Новый ОписаниеТипов("Строка");
    ОписаниеВеса = Новый ОписаниеТипов("Число",
        Новый КвалификаторыЧисла(12, 3));
 
    ТабВКоде.Колонки.Добавить("Фрукт", ОписаниеСтроки, "Имя фрукта");
    ТабВКоде.Колонки.Добавить("Цвет", ОписаниеСтроки, "Цвет фрукта");
    ТабВКоде.Колонки.Добавить("Вес", ОписаниеВеса, "Вес фрукта");
 
    Стр = ТабВКоде.Добавить();
    Стр.Фрукт = "Яблоко";
    Стр.Цвет = "Зелёный";
    Стр.Вес = 200;
 
    Стр = ТабВКоде.Добавить();
    Стр.Фрукт = "Банан";
    Стр.Цвет = "Желтый";
    Стр.Вес = 150;
 
    ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме(ТабВКоде, "ТабРеквизит1", "ТабНаФорме1");
 
КонецПроцедуры
 
/// Как программно вывести на форму результат запроса
/// в виде таблицы значений в 1с 8.3, 8.2
 
&НаСервере
Процедура ВывестиНаФормуРезультатЗапросаНаСервере()        
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Товары.Ссылка,
        |   Товары.ВерсияДанных,
        |   Товары.ПометкаУдаления,
        |   Товары.Код,
        |   Товары.Наименование,
        |   Товары.Цвет,
        |   Товары.ЕдиницаИзмерений,
        |   Товары.Предопределенный,
        |   Товары.ИмяПредопределенныхДанных
        |ИЗ
        |   Справочник.Товары КАК Товары";
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ТабВКоде = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой);   
 
    // функция ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме определена выше
    ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме(ТабВКоде, "ТабРеквизит2", "ТабНаФорме2");
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

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

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

Добавление строк

Перебор строк

Сортировка

Поиск значения

Итоги и группировка

Удаление строк и колонок

Таблица значений в диалоге

Специальные методы

Выгрузка таблицы значений

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

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

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

ТабЗнач.НоваяКолонка("Номер");
ТабЗнач.НоваяКолонка("Сотрудник");
ТабЗнач.НоваяКолонка("Должность");
ТабЗнач.НоваяКолонка("Оклад");

//можно указать тип данных каждой колонки

//если тип данных колонки не указан, то можно хранить данные любого типа

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

ТабЗнач.НоваяКолонка("Номер","Число",10,0);
ТабЗнач.НоваяКолонка("Сотрудник","Справочник.Сотрудники");
ТабЗнач.НоваяКолонка("Должность","Справочник.Должности");
ТабЗнач.НоваяКолонка("Оклад","Число",10,2);

Добавление строк в таблицу значений

ТабЗнач.НоваяСтрока();
ТабЗнач.Номер = 1;
ТабЗнач.Сотрудник = "Иванов Иван Иванович"; //следите за типом колонки!
ТабЗнач.Должность = "Программист";
ТабЗнач.Оклад = 20000;

ТабЗнач.НоваяСтрока();
ТабЗнач.Номер = 2;
ТабЗнач.Сотрудник = "Петров Петр Петрович";
ТабЗнач.Должность = "Бухгалтер";
ТабЗнач.Оклад = 10000;

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

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

1-й способ.

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

2-й способ.

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

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

//сортировать по должности по возрастанию
ТабЗнач.Сортировать("Должность+");

//сортировать по должности по возрастанию, а внутри должности по убыванию оклада
ТабЗнач.Сортировать("Должность+,Оклад-");

Поиск в таблице значений

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

Возвращает число: 0 — значение не найдено; 1 — значение найдено

Если указан параметр <Строка>, то поиск производится только по заданной строке

Если указан параметр <Колонка>, то поиск производится только по заданной колонке

номстр = 0;
Если ТабЗнач.НайтиЗначение (10000, номстр, "Оклад") = 1 Тогда
     ТабЗнач.ПолучитьСтрокуПоНомеру(номстр);
     Сообщить(ТабЗнач.Сотрудник);
КонецЕсли;

Итоги и группировка таблицы значений

//получить итог по колонке можно методом Итог
ВсеОклады = ТабЗнач.Итог("Оклад")

//часто требуется группировать строки и подсчитывать итоги по группам,

//в этом случае применяется метод Свернуть

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

//просуммировать оклады по каждой должности
ТабЗнач.Свернуть("Должность","Оклад");

//Можно группировать и суммировать сразу по нескольким колонкам
ТабЗнач.Свернуть("Категория, Должность","Оклад,Налог");

Удаление строк и колонок из таблицы значений

ТабЗнач.Очистить(); //очистить таблицу значений и удалить колонки

ТабЗнач.УдалитьСтроки(); //удаляет все строки (колонки сохраняются)

ТабЗнач.УдалитьСтроку(); //удаляет текущую строку
ТабЗнач.УдалитьСтроку(3); //удаляет 3-ю строку

ТабЗнач.УдалитьКолонку("Оклад"); //удаляет колонку Оклад
ТабЗнач.УдалитьКолонку(2); //удаляет 2-ю колонку

ВНИМАНИЕ

Часто требуется удалить строки, удовлетворяющие определенному условию.

Так как при удалении строки из таблицы значений следующая строка становится текущей,

то указанная ниже программа может удалить НЕ ВСЕ необходимые строки.

//ЭТА ПРОГРАММА НЕПРАВИЛЬНАЯ !!!
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
    Если <условие> Тогда
       ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей,
    КонецЕсли;
КонецЦикла;

В этом случае я рекомендую использовать следующий прием:

ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
~начало:
   Если <условие> Тогда
      ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей
      Если ТабЗнач.НомерСтроки<>0 Тогда
         Перейти ~начало;
      КонецЕсли;
   КонецЕсли;
КонецЦикла;

А вот еще один правильный алгоритм, предложенный Wlad:

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

Замечание(Туц). Предыдущий вариант не совсем правильный. Случай, когда последняя строка попадает под условие и в условии идёт обращение к строке таблицы, приводит к ошибке. Т.е. происходит попытка чтения для строки 0.

И ещё вариант, предложенный Туц:

Сч = ТабЗнач.КоличествоСтрок();
Пока Сч > 0 Цикл
    ТабЗнач.ПолучитьСтрокуПоНомеру(Сч);
    Если <условие> Тогда
        ТабЗнач.УдалитьСтроку(); 
    КонецЕсли;
    Сч = Сч - 1;
КонецЦикла;

Замечание (vligm). А я использую такой алгоритм (это, собственно говоря, шаблон):

Для Сч = -<?Таблица>.КоличествоСтрок() По -1 Цикл
    <?Таблица>.ПолучитьСтрокуПоНомеру(-Сч);
    Если <?Условие> Тогда
        <?Таблица>.УдалитьСтроку(-Сч);
    КонецЕсли;// Если <?Условие>
КонецЦикла;// Для Сч = -<?Таблица>КС По -1

Таблица значений как элемент диалога

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

//установить курсор на указанную колонку или можно узнать, где находится курсор
ТабЗнач.ТекущаяКолонка(НоваяКолонка,ТекКолонка);

//установить курсор на указанную строку или можно узнать, где находится курсор.
ТекСтрока = ТабЗнач.ТекущаяСтрока(НовСтрока);

ТабЗнач.ВидимостьКолонки("Оклад",0); //скрыть колонку Оклад
ТабЗнач.ВидимостьКолонки("Должность, Сотрудник",1); //показать колонки Должность и Сотрудник
ТабЗнач.ВидимостьКолонки("Оклад",1,1); //показать колонку Оклад в 1-й позиции

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

Методы УстановитьЗначение и ПолучитьЗначение

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

Они могут пригодиться в особых случаях при написании универсальных программ (мастеры отчетов и т.д.).

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

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

ТабЗнач.НоваяСтрока();
ТабЗнач.УстановитьЗначение(1,"Номер",100);
ТабЗнач.УстановитьЗначение(1,"Сотрудник","Иванов Иван Иванович");
ТабЗнач.УстановитьЗначение(1,3,10000); //обращение к 1-й строке и 3-й колонке ("Оклад")

Номер = ТабЗнач.ПолучитьЗначение(1,"Номер");
ФИО = ТабЗнач.ПолучитьЗначение(1,"Сотрудник");
Оклад = ТабЗнач.ПолучитьЗначение(1,3); //обращение к 1-й строке и 3-й колонке "Оклад"

Выгрузка таблицы значений

Синтаксис: Выгрузить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>)

//выгрузить 10 сотрудников с наибольшими окладами в новую таблицу значений
ТабЗнач.Сортировать("Оклад-");
ТабЗнач.Выгрузить(НоваяТабЗнач,1,10,"Сотрудник,Оклад");

Содержание

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

Таблица значений имеет свойства и методы для работы с колонками и строками, которые рассмотрены в ниже.

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

// Создание таблицы значений
ТабЗнач = Новый ТаблицаЗначений;

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

// Добавление колонок в таблицу значений без указания типа
ТабЗнач.Колонки.Добавить(“Сотрудник”);
ТабЗнач.Колонки.Добавить(“Должность”);
ТабЗнач.Колонки.Добавить(“Оклад”);

// Добавление колонки с явным указанием типа значения и заголовком
ОписаниеПремия = Новый ОписаниеТипов(“Число”, Новый КвалификаторыЧисла( 10 , 2));
ТабЗнач.Колонки.Добавить(“ПроцентПремии”, ОписаниеПремия, “Процент премии”);
ТабЗнач.Колонки.Добавить(“Премия”, ОписаниеПремия, “Премия”);

Добавление новой строки, заполнение реквизитов

// Добавление новой строки в таблицу значений
СтрокаТЗ = ТабЗнач.Добавить();

// Заполнение строки по именам реквизитов
СтрокаТЗ.Сотрудник = “Иванов Иван”;
СтрокаТЗ.Должность = “Программист 1С”;
СтрокаТЗ.Оклад = 100000;

СтрокаТЗ = ТабЗнач.Добавить();
// Заполнение строки таблицы значений по индексам колонок
СтрокаТЗ[0] = “Петров Петр”;
СтрокаТЗ[1] = “Тестировщик”;
СтрокаТЗ[2] = 80000;

Обращение к строке таблицы значений по индексу

ТабЗнач.Добавить();
// Обращение к строке таблицы значений по индексу
ТабЗнач[2].Сотрудник = “Федоров Василий”;

// Работа с таблицей как с двумерным массивом
ТабЗнач[2][1] = “Программист 1С”;

// Обращение к строке таблицы значений при помощи метода Получить
ТабЗнач.Получить(2).Оклад = 90000;

Вставить новую строку в нужное место и заполнить значения этой строки

// Вставить новую строку в указанную позицию в таблицу значений
ВставленнаяСтрока = ТабЗнач.Вставить(1);

// Заполнить строку значениями
// В качестве источника данных заполнения могут быть объекты с именованными свойствами
// – Структура, строка таблицы значений, объект, и т.п.
// метод производит сопоставление свойств по именам,
// и заполняет значения у совпавших свойств приемника – в нашем случае строки таблицы значений
ЗаполнитьЗначенияСвойств(ВставленнаяСтрока, СтрокаТЗ);
ВставленнаяСтрока.Сотрудник = “Сидоров Александр”;

Заполнить колонку таблицы значений одним значением для всех строк

// Заполнение колонки для всех строк таблицы значений
ТабЗнач.ЗаполнитьЗначения(10.5, “ПроцентПремии”);

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

// Коллекция строк и коллекция колонок по своему поведению похожи на массивы,
// и работать с ними можно схожим образом
// Перебрать все колонки таблицы значений и вывести заголовки,
// а если не заполнен заголовок – то имя колонки
Для Каждого Колонка из ТабЗнач.Колонки Цикл
Сообщить(?(ЗначениеЗаполнено(Колонка.Заголовок),Колонка.Заголовок, Колонка.Имя));
КонецЦикла;

// Перебрать все строки и произвести какие-то вычисления,
// например, посчитать премию, как Оклад * процент премии /100
Для Каждого СтрокаТЗ из ТабЗнач Цикл
СтрокаТЗ.Премия = СтрокаТЗ.Оклад * СтрокаТЗ.ПроцентПремии / 100;
КонецЦикла;

Копирование таблицы значений в 1С — примеры

// Создать полную копию таблицы
КопияТЗ = ТабЗнач.Скопировать();
// Создать копию таблицы значений по нужным колонкам
КопияДолжностиОклады = ТабЗнач.Скопировать(,“Должность,Оклад”);

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

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

Сортировка таблицы значений в 1С 8. Как упорядочить таблицу значений.

// Сортировать таблицу значений по колонке в 1С 8
КопияТЗ.Сортировать(“Оклад”);

// Сортировать таблицу значений по нескольким колонкам в 1С 8
КопияТЗ.Сортировать(“Должность Убыв, Оклад Возр”);

Свернуть таблицу значений

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

Удаление строк из таблицы по условию. Обратный обход таблицы значений снизу вверх

// Удаление строк из таблицы значений по условию. Обратный перебор таблицы значений в 1С
КопияДляУдаления = ТабЗнач.Скопировать();ВсегоСтрок = КопияДляУдаления.Количество() 1;
Для Сч = ВсегоСтрок по 0 Цикл
Если КопияДляУдаления[-Сч].Оклад > 80000 Тогда
// Удаление строки таблицы значений.
// В качестве параметра может быть как конкретная строка таблицы значений, так и индекс строки.
КопияДляУдаления.Удалить(-Сч);
КонецЕсли;
КонецЦикла;
// В результате останутся только строки, где оклад меньше или равен 80000

// Обратный перебор таблицы значений – второй вариант
КопияДляУдаленияВариант2 = ТабЗнач.Скопировать();
Сч = КопияДляУдаленияВариант2.Количество() 1;
Пока Сч >= 0 Цикл
Если КопияДляУдаленияВариант2[Сч].Должность = “Тестировщик” Тогда
КопияДляУдаленияВариант2.Удалить(Сч);
КонецЕсли;
Сч = Сч 1;
КонецЦикла;
// В результате останутся только строки, где должность не равна “Тестировщик”

Поиск строк в таблице значений 1С

// Найти одну строку в таблице значений по значению во всех колонках.
// Метод целесообразно использовать для поиска уникальных значений
НайденнаяСтрока = ТабЗнач.Найти(“Федоров Василий”);

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

Удалить все строки из таблицы значений

// Удалить все строки из таблицы значений
ТабЗнач.Очистить();

Получить навыки разработки в 1С, и составить целостное представление о платформе 1С Предприятие 8 вы можете, пройдя мой курс “Разработчик 1С с нуля”.

  // Создаем таблицу значений
   ТЗ = Новый ТаблицаЗначений;

   // Добавляем колонки в таблицу значений
   ТЗ.Колонки.Добавить(«Овощь»);
   ТЗ.Колонки.Добавить(«Цвет»);
   ТЗ.Колонки.Добавить(«Вкус»);

   // Добавляем строки в таблицу значений
   Стр = ТЗ.Добавить();
   Стр.Овощь = «Дыня»;
   Стр.Цвет = «Желтая»;
   Стр.Вкус = «Сладкая»;

   Стр = ТЗ.Добавить();
   Стр.Овощь = «Лук»;
   Стр.Цвет = «Зеленый»;
   Стр.Вкус = «Горький»;

   Стр = ТЗ.Добавить();
   Стр.Овощь = «Помидор»;
   Стр.Цвет = «Красный»;
   Стр.Вкус = «Сочный»;

   // Добавляем в таблицу значений колонку с описанием типа и заголовка
   ОписаниеВеса = Новый ОписаниеТипов(«Число»,Новый КвалификаторыЧисла(14,  2));

   ТЗ.Колонки.Добавить(«ВесОвоща»,  ОписаниеВеса,  «Вес овоща в граммах»);
   ТЗ[0].ВесОвоща = 2500.50;
   ТЗ[1].ВесОвоща = 39.07;
   ТЗ[2].ВесОвоща = 90.45;

   // Перечисляем все строки в таблице значений
   Для Каждого Стр Из ТЗ Цикл
       Сообщить(Стр.Овощь + » « + Стр.Цвет + » « + Стр.Вкус + » « + Стр.ВесОвоща);
   КонецЦикла;

   // Перечисляем все колонки в таблице значений
   Для Каждого Колонка Из ТЗ.Колонки Цикл
       Сообщить(Колонка.Имя);
   КонецЦикла;

   // Выгружаем колонку названий таблицы значений в массив
   МассивОвощей = ТЗ.ВыгрузитьКолонку(«Овощь»);

   // Ничего не измениться, так как массив не менялся
   ТЗ.ЗагрузитьКолонку(МассивОвощей,  «Овощь»);

   // Заполнение значения в колонке для всех строк таблицы. Обнулим вес во всех строках
   ТЗ.ЗаполнитьЗначения(0,  «ВесОвоща»);

   // Перезапишем на новые веса
   ТЗ[0].ВесОвоща = 2500;
   ТЗ[1].ВесОвоща = 40;
   ТЗ[2].ВесОвоща = 90;

   // Расчет итогов по колонке в таблице значений
   ИтогПоКолонке=ТЗ.Итог(«ВесОвоща»); // Общий вес овощей = 2630

   // Поиск строки в Таблице значений — найдём строчку с яблоком и покажем его цвет
   СтрокаПоиска = ТЗ.Найти( «Помидор» );
   Если СтрокаПоиска <> Неопределено Тогда
       Сообщить(СтрокаПоиска.Цвет); // Красный
   КонецЕсли;

   // Ищем строку в таблице значений поиском значения в определенных колонках
   // будем искать по слову «Сочный» в колонках «Вкус» и «Цвет»
   СтрокаПоиска = ТЗ.Найти(«Сочный»,  «Вкус,  Цвет»);
   Если СтрокаПоиска <> Неопределено Тогда
       Сообщить(СтрокаПоиска.Овощь); // Помидор
   КонецЕсли;

   // Добавляем ещё один красный овощь Перец, Вариант №1
   Стр = ТЗ.Добавить();
   Стр.Овощь = «Перец»;
   Стр.Цвет = «Красный»;
   Стр.Вкус = «Сладкий»;
   Стр.ВесОвоща = 120;
   // Добавляем ещё один красный овощь Перец, Вариант №2
   Стр = ТЗ.Добавить();
   Стр[«Овощь»] = «Перец»;
   Стр[«Цвет»] = «Красный»;
   Стр[«Вкус»] = «Сладкий»;
   Стр[«ВесОвоща»] = 120;

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

   // Сдвигаем первую строку Таблицы Значений на одну позицию вперёд
   ТЗ.Сдвинуть(0,  1);

   // Возвращаем обратно строку Таблицы Значений
   ТЗ.Сдвинуть(1,  —1);

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

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

   // Создаем копию таблицы значений по нужным колонкам — будет только две колонки Овощь и Цвет
   КопияТЗ = ТЗ.СкопироватьКолонки(«Овощь,  Цвет»);

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

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

   // Таблица Значений будет содержать цвет и вес помидора
   КопияТЗ = ТЗ.Скопировать(Отбор,  «Цвет,  ВесОвоща»);

   // Сворачиваем Таблицу значений по колонке «Вкус»,  просуммируем по весу
   ТЗ.Свернуть(«Вкус»,  «ВесОвоща»);

   // Отсортируем Таблицу Значений по колонке
   ТЗ.Сортировать(«ВесОвоща Возр»);

   // Отсортируем Таблицу Значений по нескольким колонкам
   ТЗ.Сортировать(«ВесОвоща Возр,  Вкус Убыв»);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие крутые статьи на нашем сайте:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии