1С 8.3 Таблица значений
Данные > Примеры кода 1С > 1С 8.3 Таблица значений
Таблица значений в 1С 8.3 это универсальная коллекция, которая максимально моделирует двумерную таблицу базы данных. Она имеет колонки различных типов (число, строка, дата, булево), в т.ч. неопределённого типа, строки с различным содержимым, свойства и методы для работы с колонками и строками. Таблицу значений можно заполнять произвольным кодом, из наборов регистров, или по результатам работы запроса, построителя запроса, процессора СКД, загружать из других табличных частей, заполнять массивами. Её можно использовать для заполнения табличных частей документов, справочников, наборов регистров, как источник данных в запросах, построителях запросов, построителях отчётов и наборах данных СКД. В Таблице значений есть выгрузка журнала регистрации и результатов поиска ссылок.
Работа с Таблицей значений (&НаСервере) в 1С 8.3:
// Создаем таблицу значений
ТЗ = Новый ТаблицаЗначений;
// Добавляем колонки в таблицу значений
ТЗ.Колонки.Добавить("Овощь");
ТЗ.Колонки.Добавить("Цвет");
ТЗ.Колонки.Добавить("Вкус");
// Добавляем строки в таблицу значений
Стр = ТЗ.Добавить();
Стр.Овощь = "Дыня";
Стр.Цвет = "Желтая";
Стр.Вкус = "Сладкая";
Стр = ТЗ.Добавить();
Стр.Овощь = "Лук";
Стр.Цвет = "Зеленый";
Стр.Вкус = "Горький";
Стр = ТЗ.Добавить();
Стр.Овощь = "Помидор";
Стр.Цвет = "Красный";
Стр.Вкус = "Сочный";
// Добавляем в таблицу значений колонку с описанием типа и заголовка
ОписаниеВеса = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(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);
// Очистим (удалим) все строки из Таблицы Значений
ТЗ.Очистить();
ТЗ = Новый ТаблицаЗначений;
// Добавляем колонки в таблицу значений
ТЗ.Колонки.Добавить("Овощь");
ТЗ.Колонки.Добавить("Цвет");
ТЗ.Колонки.Добавить("Вкус");
// Добавляем строки в таблицу значений
Стр = ТЗ.Добавить();
Стр.Овощь = "Дыня";
Стр.Цвет = "Желтая";
Стр.Вкус = "Сладкая";
Стр = ТЗ.Добавить();
Стр.Овощь = "Лук";
Стр.Цвет = "Зеленый";
Стр.Вкус = "Горький";
Стр = ТЗ.Добавить();
Стр.Овощь = "Помидор";
Стр.Цвет = "Красный";
Стр.Вкус = "Сочный";
// Добавляем в таблицу значений колонку с описанием типа и заголовка
ОписаниеВеса = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(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);
// Очистим (удалим) все строки из Таблицы Значений
ТЗ.Очистить();
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Таблица значений:
📰 Актуальные новости с тегом #Таблица значений:
- В версии 8.3.22 добавлен дополнительный контроль заполнения значений в УФ. Проверка заполненности колонок дерева и таблицы значений
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник