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