Таблица значений в 1С 8.3 на примерах
Таблица значений в 1С 8.3 позволяет строить динамические наборы значений. При этом каких-либо жестких ограничений на тип данных не накладывается. Таблица значений создается в памяти и не сохраняется в базе данных, имеет множество полезных возможностей и работает очень быстро.
Свойствами таблиц значений являются:
- индексы (коллекция индексов таблицы значений)
- колонки (коллекция колонок таблицы значений).
Элементом коллекции является строка таблицы значений. Но необходимо учитывать тот факт, что с таблицей значений можно работать только на сервере.
Содержание
- Работа с таблицей значений в 1С 8.3 на примерах
- Создать новую таблицу значений
- Добавить колонку в таблицу значений
- Добавить колонку с описанием типа
- Добавить строку в таблицу значений
- Заполнить строку значениями
- Вставить строку
- Сортировка
- Получить значение
- Удалить строку
- Найти одну строку
- Найти несколько строк
- Свернуть таблицу значений
- Скопировать таблицу
- Скопировать таблицу без данных
- Узнать количество строк
- Очистить
- Обход таблицы значения
- Превратить структуру в таблицу значений
Работа с таблицей значений в 1С 8.3 на примерах
Создать новую таблицу значений
ТЗ = Новый ТаблицаЗначений;
Добавить колонку в таблицу значений
ТЗ.Колонки.Добавить("Автомобиль"); ТЗ.Колонки.Добавить("Цвет"); ТЗ.Колонки.Добавить("Класс");
Добавить колонку с описанием типа
// Необходимо, чтобы колонка таблицы значения была строго типизировано ОписаниеВеса = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0)); ТЗ.Колонки.Добавить("ВесАвтомобиля", ОписаниеВеса, "Вес Автомобиля");
Добавить строку в таблицу значений
НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Автомобиль = "Mitsubishi "; НоваяСтрока.Цвет = "Синий"; НоваяСтрока.Класс = "C класс"; НоваяСтрока.Вес = 1500; НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Автомобиль = "KIA"; НоваяСтрока.Цвет = "Зелёный"; НоваяСтрока.Класс = "A класс"; НоваяСтрока.Вес = 1800; НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Автомобиль = "BMW"; НоваяСтрока.Цвет = "Зелёный"; НоваяСтрока.Класс = "E класс"; НоваяСтрока.Вес = 2100;
Заполнить строку значениями
//ДанныеДляЗаполнения - структура, стройка другой таблицы и т.п. //Метод сопоставляет имена свойств и заполнят по ним значение ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), ДанныеДляЗаполнения);
Вставить строку
//Метод вставляет в таблицу значения новую строку НоваяСтрока = ТЗ.Вставить(0); // Если нужно изменить значения не всех колонок, то можно использовать НоваяСтрока = ТЗ[0] НоваяСтрока.Автомобиль = "Mitsubishi "; НоваяСтрока.Цвет = "Белый"; НоваяСтрока.Класс = "C класс"; НоваяСтрока.Вес = 1500;
Сортировка
//Сортирует таблицу значение по нужным колонкам и направлению сортировки
ТЗ.Сортировать(«Цвет Убыв, Вес Возр»);
Получить значение
//Предположим что в строке №1 хранится информация об автомобиле БМВ. //А цвет храниться в колонке №2 с именем "Цвет" //Задача - получить значение цвета из таблицы значений // //Если мы знаем номер строки и название свойства: ЦветБМВ = ТЗ[0].Цвет; //Если мы значем номер строки и колонки ЦветБМВ = ТЗ[0][1]; // * отсчет номера строк и колонок начинается с 0
Удалить строку
//Удаляем строку №1 из таблицы значений ТЗ.Удалить(ТЗ[0]); //Удалить строки по условию можно с помощью перебора (см. Обход таблицы значений)
Найти одну строку
//Позволяет найти одну строку в таблице значений. //Искать можно как по всем колонкам таблице ИскомаяСтрока = ТЗ.Найти("Синий"); //Так и по определенной колонке: ИскомаяСтрока = ТЗ.Найти("Синий", "Цвет"); //*Метод находит первую попавшуюся строку, если их несколько //Если строка не найдена, то вернет "Неопределено"
Найти несколько строк
// Позволяет найти сразу несколько строк в таблице значений //Создаем структуру для отбора ОтборПоЗеленомуЦвету = Новый Структура(); ОтборПоЗеленомуЦвету.Вставить("Цвет","Зеленый"); //Получаем массив строк с зелеными машинами МассивСоСтроками = ТЗ.НайтиСтроки(ОтборПоЗеленомуЦвету);
Свернуть таблицу значений
//Позволяет "свернуть" таблицу значений: //1С оставляет указанные колонки в первом параметре и суммирует по колонкам из второго параметра ТЗ.Свернуть("Товар", "Вес");
Скопировать таблицу
//Позволяет получить копию таблицы значений. НоваяТЗ = ТЗ.Скопировать(); //Если нужны только некоторые строки - нужно вставить массив таких строк в 1-ый параметр //Если нужны только некоторые колонки - нужно вставить их имена через запятую в 2-ый параметр
Скопировать таблицу без данных
//Делает копию таблицы, но без строк. Только колонки НоваяТЗ = ТЗ.СкопироватьКолонки();
Узнать количество строк
Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!
КоличествоСтрокТЗ = ТЗ.Количество();
Очистить
//Очищает таблицу значений от строк ТЗ.Очистить();
Обход таблицы значения
Обход коллекции с выбором элемента осуществляется с помощью цикла <<Для>>, где оператор цикла Для предназначен для циклического повторения операторов, находящихся внутри конструкции, в данном случае таблицы значений. Так же можно обращаться к элементу коллекции посредством оператора [ ] ([аргумент]), где аргументом является индекс строки. Нумерация индексов строк начинается с нуля [0].
Прямой обход
Для Каждого Стр Из ТаблицаЗначений Цикл Сообщить(Стр.Номенклатура); КонецЦикла;
Обратный обход таблицы (снизу вверх)
Чаще всего применяется для удаления строк в таблице.
//Товары - таблица значений, где необходимо удалить строки с "Сумма = 0" Сч=0; Пока Сч<Товары.Количество() Цикл ТекущаяСтрока=Товары[Сч]; Если ТекущаяСтрока.Сумма=0 Тогда Товары.Удалить(ТекущаяСтрока); Сч=Сч-1; КонецЕсли; Сч=Сч+1; КонецЦикла;
Обход колонок
Можно перечислить все колонки в таблице значений в 1с 8.3 с помощю цикла <<Для>>:
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл Сообщить(Колонка.Имя); КонецЦикла;
Превратить структуру в таблицу значений
//Есть структура: СтруктураЛогинПароль = Новый Структура; СтруктураЛогинПароль.Вставить("Логин", "root"); СтруктураЛогинПароль.Вставить("Пароль", "1s83.info"); //Создаем таблицу значений: ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Логин"); ТЗ.Колонки.Добавить("Пароль"); //"Превращаем" структуру в таблицу значений: Для Каждого ТекущийЭлемент из СтруктураЛогинПароль Цикл НовСтр=ТЗ.Добавить(); НовСтр.Логин = ТекущийЭлемент.Ключ; НовСтр.Пароль = ТекущийЭлемент.Значение; КонецЦикла;
Комментарии
У вас ошибка : вместо
Сч=0;
Пока Сч<Товары.Количество() Цикл
ТекущаяСтрока=Товары[Сч];
Если ТекущаяСтрока.Сумма=0 Тогда
Товары.Удалить(ТекущаяСтрока);
Сч=Сч-1;
КонецЕсли;
Сч=Сч+1;
КонецЦикла;
должно быть :
Сч=0;
Пока Сч<Товары.Количество() Цикл
ТекущаяСтрока=Товары[Сч];
Если ТекущаяСтрока.Сумма=0 Тогда
Товары.Удалить(ТекущаяСтрока);
Иначе Сч = Сч-1;
КонецЕсли;
КонецЦикла;