Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
08 ноя 2024, 03:56

Как программно обращаться к какому-нибудь значения из таблицы значений?

Автор gulnyr, 25 июн 2024, 17:10

0 Пользователей и 1 гость просматривают эту тему.

gulnyr

Открыл таблицу значений:

Screenshot_3.png

Как обращаться к элементам? Здесь куча всего, нужен пример, как обращаться к любому из них.

Максим75

gulnyr, ну есть вагон примеров, как работать с данной универсальной коллекцией

&НаКлиенте
Процедура РаботаСТаблицейЗначений(Команда)
// Вставить содержимое обработчика.
//ключ - индекс, как и у массива, но позволяет хранить сколько угодно столбцов,
//причем в столбцах значения различных типов
//имя столбца - строковый идентификатор (без пробелов, спецсимволов и т.д.)
//НЕ ДОСТУПНА на клиенте

//для понимания Таблица значений - это некий массив, каждым элементом которого является структура
//отсюда и коллеция значений колонок таблицы значений
//и коллекция строк таблицы значений
//каждая коллекция со своими методами

РаботаСТаблицейЗначенийСервер();

КонецПроцедуры
&НаСервере
Процедура РаботаСТаблицейЗначенийСервер()

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

КвалификаторЧисла1 = Новый КвалификаторыЧисла(5,0);
КвалификаторЧисла2 = Новый КвалификаторыЧисла(15,2);

ОписаниеТиповЧисло1 = Новый ОписаниеТипов("Число",,,КвалификаторЧисла1);//без знаков после запятой, разрядность 5
ОписаниеТиповЧИсло2 = Новый ОписаниеТипов("Число",,,КвалификаторЧИсла2);//с 2 знаками после запятой, разрядность 15
ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка");

ТаблицаТоваров.Колонки.Добавить("Артикул",ОписаниеТиповСтрока);
ТаблицаТоваров.Колонки.Добавить("Наименование",ОписаниеТиповСтрока);
ТаблицаТоваров.Колонки.Добавить("Колво",ОписаниеТиповЧисло1);
ТаблицаТоваров.Колонки.Добавить("Цена",ОписаниеТиповЧисло2);
ТаблицаТоваров.Колонки.Добавить("Группа",ОписаниеТиповСтрока);

//Как добавить строку (элемент) в таблицу значений
//через коллекцию строк таблицы значений добавляем
НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.Артикул = "124";
НоваяСтрока.Наименование = "Пупкин козел";
НоваяСтрока.Колво = 5;
НоваяСтрока.Цена = 12.33;
НоваяСтрока.Группа = "Козлы";

НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.Артикул = "АА24";
НоваяСтрока.Наименование = "Козел волосатый";
НоваяСтрока.Колво = 2;
НоваяСтрока.Цена = 7.66;
НоваяСтрока.Группа = "Козлы";

НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.Артикул = "24ВВВ";
НоваяСтрока.Наименование = "Вонючий хряк";
НоваяСтрока.Колво = 5;
НоваяСтрока.Цена = 15.66;
НоваяСтрока.Группа = "Свиньи";

//Как получить количество строк в таблице значений
КоличествоСтрок = ТаблицаТоваров.Количество();
//Сообщить("Кол-во строк : "+КоличествоСтрок);
//Как найти один элемент (строку) в таблице значений
//метод Найти
НайденнаяСтрока = ТаблицаТоваров.Найти("Пупкин козел","Наименование");
Если НайденнаяСтрока = Неопределено тогда
Сообщить("Не нашли пупкина в наименовании!");
иначе
Сообщить(""+НайденнаяСТрока.Артикул+"  колво  "+НайденнаяСТрока.Колво+"  цена  "+НайденнаяСтрока.Цена+"   группа  "+НайденнаяСтрока.Группа);
КОнецЕсли;

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

Для каждого НайденнаяСтрока из МассивСтрок цикл
Сообщить(""+НайденнаяСТрока.Артикул+"  наименование  "+НайденнаяСТрока.Наименование+"  колво  "+НайденнаяСТрока.Колво+"  цена  "+НайденнаяСтрока.Цена+"   группа  "+НайденнаяСтрока.Группа);
КонецЦИкла;

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

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

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

//как получить итог по колонке числового типа
КолвоИтог = ТаблицаТоваров.Итог("Колво");//обязательно колонка с числовім типом значений
Сообщить("Кол-во итог:  "+КолвоИтог);

//свернуть таблицу значений
КопияТаблицы = ТаблицаТоваров.Скопировать();
КопияТаблицы.Свернуть("Группа","Колво");

//Обход всех элементов в таблице значений
Для каждого СтрокаТаблицы из КопияТаблицы цикл

Сообщить(""+СтрокаТаблицы[0]+"    "+СтрокаТаблицы[1]);

КонецЦикла;
//Как удалить элемент (строку) в таблице значений
//вначале находим что хотим удалить, через Найти
НайденнаяСтрока = ТаблицаТоваров.Найти("24ВВВ","Артикул");
Если НайденнаяСтрока <> Неопределено тогда
ТаблицаТоваров.Удалить(НайденнаяСтрока);
КОнецЕсли;

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

Для Счетчик=1 по 300 цикл

НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.Артикул = Строка(Счетчик);
НоваяСтрока.Наименование = "Пупкин козел "+Счетчик;
НоваяСтрока.Колво = 5;
НоваяСтрока.Цена = 12.33;
НоваяСтрока.Группа = "Козлы";

КонецЦикла;

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


//ВНИМАНИЕ!!!
//чтобы таблицу значений передать в запрос в виде параметра,
//в таблице значений колонки должны быть жестко типизированы на этапе описания колонок
  //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТаблицаТовары",ТаблицаТоваров);
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаТовары.Артикул КАК Артикул,
| ТаблицаТовары.Наименование КАК Наименование,
| ТаблицаТовары.Колво КАК Колво,
| ТаблицаТовары.Цена КАК Цена,
| ТаблицаТовары.Группа КАК Группа
|ПОМЕСТИТЬ ВТ_Товары
|ИЗ
| &ТаблицаТовары КАК ТаблицаТовары
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Товары.Артикул КАК Артикул,
| ВТ_Товары.Наименование КАК Наименование,
| ВТ_Товары.Колво КАК Колво,
| ВТ_Товары.Цена КАК Цена,
| ВТ_Товары.Группа КАК Группа
|ИЗ
| ВТ_Товары КАК ВТ_Товары";

РезультатЗапроса = Запрос.Выполнить();

//ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
//
//Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// // Вставить обработку выборки ВыборкаДетальныеЗаписи
// Сообщить(""+ВыборкаДетальныеЗаписи.Артикул+"   наим  "+ВыборкаДетальныеЗаписи.Наименование+"  кол-во  "+ВыборкаДетальныеЗаписи.КОлво);
//КонецЦикла;

//способ №1
ТаблицаЗапроса = РезультатЗапроса.Выгрузить();
ТаблицаОстатки.Загрузить(ТаблицаЗапроса);

//способ №2
ТаблицаОстатки.Очистить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() цикл

ЗаполнитьЗначенияСвойств(ТаблицаОстатки.Добавить(),Выборка);

КонецЦикла;

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

КОнецПроцедуры

когда-то себе делал заметки, как с основными операциями работать, может чего нужного почерпнете

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск