Таблица значений в 1С 8.3 (2 часть)

Dec 28, 2023 16:51

Таблица значений в 1С 8.3 (1 часть)

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

Можно загрузить значения из массива в одну из колонок таблицы значений, для этого используется метод ЗагрузитьКолонку:

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

//добавим 4 строки, но без цены
СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Диван";

СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Ручка";

СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Линейка";

СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Кресло";

МассивЦен = Новый Массив;
МассивЦен.Добавить(1000);
МассивЦен.Добавить(50);
МассивЦен.Добавить(80);
МассивЦен.Добавить(2000);
ТаблицаДокументов.ЗагрузитьКолонку(МассивЦен, "Цена");

//Диван = 1000
//Ручка = 50
//Линейка = 80
//Кресло = 2000


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

МассивТоваров = ТаблицаДокументов.ВыгрузитьКолонку("Товар");

С помощью метода ЗаполнитьЗначения можно заполнить какую-то колонку во всех строках одним значением:

ТаблицаДокументов.ЗаполнитьЗначения(300, "Цена");
//цена во всех строках будет = 300

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

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

//по возрастанию цены
ТаблицаДокументов.Сортировать("Цена");

//по убыванию цены
ТаблицаДокументов.Сортировать("Цена Убыв");

//сначала по возрастанию цены, потом по возрастанию наименованию товара
ТаблицаДокументов.Сортировать("Цена, Товар");

Итоги по таблице значений

Итоги можно получить по числовым колонкам таблицы. Для этого можно использовать методы Итог и Свернуть:

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

//добавим 2 строки
СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Диван";
СтрочкаТабл.Сумма = "1000";

СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Диван";
СтрочкаТабл.Сумма = "2000";

//Метод Итог вернет сумму по колонке
Сумма = ТаблицаДокументов.Итог("Сумма"); //3000

//Метод свернуть свернет таблицу
//первым параметром указывается список колонок группировки
//вторым список колонок суммирования
ТаблицаДокументов.Свернуть("Товар", "Сумма");
//в таблице будет одна строка
//Товар = Диван
//Сумма = 3000

//если какая-то колонка не указана, то она будет удалена
//из результирующей таблицы
ТаблицаДокументов.Свернуть("Товар");
//в таблице будет только одна колонка Товар
//с одной строка Диван

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

Для создания полной копии таблицы можно использовать метод Скопировать. Для создания новой пустой таблицы с такими же колонками - метод СкопироватьКолонки:

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

//добавим 2 строки
СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Диван";
СтрочкаТабл.Сумма = "1000";

СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Диван";
СтрочкаТабл.Сумма = "2000";

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

//копирование только колонки Товар
Копия2 = ТаблицаДокументов.Скопировать(, "Товар");

//копирование определенных строк
ОтборСтрок = Новый Структура("Сумма", 2000);
//в Копия3 будет только одна строка, где Сумма = 2000
Копия3 = ТаблицаДокументов.Скопировать(ОтборСтрок);

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

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

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

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

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

//добавим 3 строки
СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Диван";
СтрочкаТабл.Сумма = "1000";

СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Диван";
СтрочкаТабл.Сумма = "2000";

СтрочкаТабл = ТаблицаДокументов.Добавить();
СтрочкаТабл.Товар = "Кресло";
СтрочкаТабл.Сумма = "1500";

//1 параметр - что ищем
//2 параметр - список колонок для поиска
НайдСтр = ТаблицаДокументов.Найти("Кресло", "Товар");
//в НайдСтр будет 3 строка с креслом за 1500

НайдСтр = ТаблицаДокументов.Найти("Диван", "Товар");
//в НайдСтр будет 1 строка с диваном за 1000

НайдСтр = ТаблицаДокументов.Найти("Комод", "Товар");
//НайдСтр = Неопределено, ничего не найдено

//ключ структуры - имя колонки
//значение структуры - значение для поиска
Отбор = Новый Структура("Товар", "Диван");
НС = ТаблицаДокументов.НайтиСтроки(Отбор);
//в НС будет массив с двумя первыми строками

//можно искать сразу по нескольким колонкам
Отбор = Новый Структура;
Отбор.Вставить("Товар", "Диван");
Отбор.Вставить("Сумма", 2000);
НС = ТаблицаДокументов.НайтиСтроки(Отбор);
//в НС будет массив с одной строкой, Диван за 2000

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

Индексы таблицы значений

Если в таблице значений миллион строк, то поиск методами Найти и НайтиСтроки может выполняться очень долго. Для ускорения поиска можно использовать индексы. Индексы должны быть созданы по тем колонкам, по которым будет выполняться поиск. Если поиск выполняется сразу по нескольким колонкам, то должен быть создан составной индекс.

//добавление индексов
ТаблицаДокументов.Индексы.Добавить("Товар");
ТаблицаДокументов.Индексы.Добавить("Сумма");
//будут созданы 2 индекса
//при поиске по колонке Товар или по колонке Сумма
//будет использоваться индекс
//если выполнить поиск сразу по двум колонкам
//методом НайтиСтроки, то индекс не будет использоваться
//Для этого нужен составной индекс
ТаблицаДокументов.Индексы.Добавить("Товар, Сумма");

Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up