Как в массив выгрузить колонку таблицы?
ТаблицаЗначений (ValueTable)
ВыгрузитьКолонку (UnloadColumn)
Синтаксис:
ВыгрузитьКолонку(<Колонка>)
Параметры:
<Колонка> (обязательный)
Тип: Число, Строка, КолонкаТаблицыЗначений. Колонка, значения которой необходимо выгрузить. В качестве значения параметра может выступать индекс колонки, имя колонки, сама колонка.
Возвращаемое значение:
Тип: Массив.
Описание:
Создает массив и копирует в него значения, содержащиеся в колонке таблицы значений.
Пример:
ТЗ=ЭлементыФормы.ТП.Значение;
Массив=ТЗ.ВыгрузитьКолонку(«Номенклатура»);
А у меня в СП др. пример
Пример:
ТаблицаЗначений.Свернуть(«Номенклатура»);
Запрос.УстановитьПараметр(«МассивНоменклатуры», ТаблицаЗначений.ВыгрузитьКолонку(«Номенклатура»));
А как теперь в запросе написать, типа Номенклатура в Массиве.
Запрос.Текст message_7″>
|ВЫБРАТЬ
| ЦеныСрезПоследних.Номенклатура Как Номенклатура,
| ЦеныСрезПоследних.ТипЦен Как ТипЦен,
| ЦеныСрезПоследних.Цена
|
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен В (&МассивТиповЦен)) КАК ЦеныСрезПоследних
|
|ГДЕ Номенклатура В (&МассивТоваров)»;
1С 8.3 Таблица значений — Программист 1С Минск. Автоматизация бизнеса.

// Поиск строки в Таблице значений — найдём строчку с яблоком и покажем его цвет
СтрокаПоиска = ТЗ . Найти ( «Помидор» );
Если СтрокаПоиска <> Неопределено Тогда
Сообщить ( СтрокаПоиска . Цвет ); // Красный
КонецЕсли;
// Ищем строку в таблице значений поиском значения в определенных колонках
// будем искать по слову «Сочный» в колонках «Вкус» и «Цвет»
СтрокаПоиска = ТЗ . Найти ( «Сочный» , «Вкус, Цвет» );
Если СтрокаПоиска <> Неопределено Тогда
Сообщить ( СтрокаПоиска . Овощь ); // Помидор
КонецЕсли;
// Добавляем ещё один красный овощь Перец, Вариант №1
Стр = ТЗ . Добавить ();
Стр . Овощь = «Перец» ;
Стр . Цвет = «Красный» ;
Стр . Вкус = «Сладкий» ;
Стр . ВесОвоща = 120 ;
// Добавляем ещё один красный овощь Перец, Вариант №2
Стр = ТЗ . Добавить ();
Стр [ «Овощь» ] = «Перец» ;
Стр [ «Цвет» ] = «Красный» ;
Стр [ «Вкус» ] = «Сладкий» ;
Стр [ «ВесОвоща» ] = 120 ;
// Выполняем поиск в Таблице Значений (неуникальные значения)
Отбор = Новый Структура ;
Отбор . Вставить ( «Цвет» , «Красный» );
Строки = ТЗ . НайтиСтроки ( Отбор );
Для Каждого Стр Из Строки Цикл
Сообщить ( Стр . Овощь ); // Помидор Перец
КонецЦикла;
// Сдвигаем первую строку Таблицы Значений на одну позицию вперёд
ТЗ . Сдвинуть ( 0 , 1 );
// Возвращаем обратно строку Таблицы Значений
ТЗ . Сдвинуть ( 1 , — 1 );
// Скопировать (выгрузить) табличную часть документа/справочника/. в Таблицу Значений
ТЗ = ТабличнаяЧастьN . Выгрузить ();
// Создаем полную копию Таблицы Значений
КопияТЗ = ТЗ . Скопировать ();
// Создаем копию таблицы значений по нужным колонкам — будет только две колонки Овощь и Цвет
КопияТЗ = ТЗ . СкопироватьКолонки ( «Овощь, Цвет» );
// Создаем полную копию Таблицы Значений по отбору
Отбор = Новый Структура ;
Отбор . Вставить ( «Овощь» , «Помидор» );
// Таблица Значений будет содержать только строчку с помидором
КопияТЗ = ТЗ . Скопировать ( Отбор );
// Таблица Значений будет содержать цвет и вес помидора
КопияТЗ = ТЗ . Скопировать ( Отбор , «Цвет, ВесОвоща» );
// Сворачиваем Таблицу значений по колонке «Вкус», просуммируем по весу
ТЗ . Свернуть ( «Вкус» , «ВесОвоща» );
// Отсортируем Таблицу Значений по колонке
ТЗ . Сортировать ( «ВесОвоща Возр» );
// Отсортируем Таблицу Значений по нескольким колонкам
ТЗ . Сортировать ( «ВесОвоща Возр, Вкус Убыв» );
// Удаляем строку из Таблицы Значений (по индексу или по значению)
ТЗ . Удалить ( 0 );
// Очистим (удалим) все строки из Таблицы Значений
ТЗ . Очистить ();
Как выгрузить колонку таблицы значений в массив в 1с
Таблицу значений, как любую коллекцию, можно обойти циклом.
Для Каждого Строка Из Товары Цикл
Получить нужную строку можно по индексу. Индексы в таблице значений начинается с 0 (нуля).
Примеры использования свойства и методов объекта «Таблица значений»
Создать таблицу значений
ТаблицаТоваров = Новый ТаблицаЗначений;
далее добавление колонок, добавление строк.
— выгрузка результата запроса в таблицу значений
— или выгрузка из табличной части документа
Добавить колонки в таблицу значений. Рекомендуется указывать «тип данных».
После создания колонок добавим несколько новых строк и заполним колонки
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(«Помидоры желтые»);
Добавим еще одну колонку:
Заполнить колонку в таблице перебором строк
Заполнить колонку одинаковым значением
ЗаполнитьЗначения(<Значение>, <Колонки>)
если колонки не указаны, то будут заполнены все колонки
Сообщим пользователю название первого элемента (индекс таблицы значений начинается с 0)
Скопировать строку таблицы значений, для примера — первую
Поиск в таблице значений с ценой помощью структуры
( если на вход подавать готовые структуры?)
Сортировка строк таблицы по выбранному полю
Получить количество строк в таблице
Выгрузить колонку таблицы значений в массив
Чтобы удалить строку в таблице значений, нужно передать саму строку или индекс в метод «Удалить».
Полностью скопировать таблицу значений можно так:
Просуммировать итог по колонке таблицы значений:
Свернуть таблицу можно так:
При этом в таблице останутся только различные значения из колонки «Товар» с суммированными полями «Цена».
ТаблицаЦен.Свернуть(«Товар, Валюта», «Цена»);
Очистим все строки таблицы значений
Удалить все колонки
Применение таблиц значений
Таблица значений м ожет быть источником данных в запросе.
Результат запроса можно выгрузить в таблицу значений
Табличную часть документа можно выгрузить в таблицу значений
Таблицу значений можно выгрузить в табличную часть документа
Можно добавлять колонки в таблицу значений, делать сортировку, свертку строк с суммированием значений в выбранных колонках
книга Язык запросов в 1С / Использование таблицы значений в качестве источника временной таблицы
Примеры из документации 1С (синтакс-помощник)
СтрокаТаблицыЗначений
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [. ]. В качестве аргумента передается индекс строки (нумерация с 0).
Свойства:
Методы:
Вставить (Insert) вставить строку в таблицу значений
Добавить (Add) — добавляет строку
ЗагрузитьКолонку (LoadColumn) — загружает значения из массива в колонку таблицы
Итог (Total) — выводит итог по выбранной колонке
Найти (Find) — поиск строки в таблице, содержащих значение. Эффективно для поиска уникальных значений
НайтиСтроки (FindRows)- выводим массив строк (ссылки на строки), отвечающих условиям.
Получить (Get) — получает значение по индексу
Сдвинуть (Move) — сдвигается строки внутри таблицы
ТаблицаЗначений (ValueTable)
// Создание таблицы значений
ТаблицаЗначений = Новый ТаблицаЗначений;
// добавим в таблицу значений три колонки
// добавим строку
Стр=ТаблицаЗначений.Добавить();
Стр.Отдел=»Отдел 1″;
Стр.Сотрудник=»Иванов»;
Стр.Оклад=5600;
// добавим новую колонку
ТаблицаЗначений.Колонки.Добавить(«Стаж»,,»Стаж работы»);
// ввод новой строки и данных по строке
ТекСтр = ТаблицаЗначений.Добавить();
ТекСтр.Отдел = «Отдел 2»; ТекСтр.Сотрудник = «Петров»;
ТекСтр.Оклад = 6700; ТекСтр.Стаж = 22;
Пример поиск строки по значению:
НайденнаяСтрока = ТаблицаЦен.Найти(ВыбТовар, «Товар»);
Если НайденнаяСтрока = Неопределено Тогда
Предупреждение(НСтр(«ru = ‘Товар не найден!’;»
+ » en = ‘Article not found!'»));
Иначе
ЦенаТовара = НайденнаяСтрока.Цена;
КонецЕсли;
Пример поиска всех строк, содержащих значение
// СписокРаботников — реквизит формы для представления информации
// о работниках (тип ТаблицаЗначений).
// В форме расположено табличное поле СписокРаботников, в котором
// показываются данные СписокРаботников.
// С помощью запроса выбирается информация о работниках.
Запрос = Новый Запрос;
ТекстЗапроса =
«ВЫБРАТЬ
// текст запроса
// .
«;
Запрос.Текст = ТекстЗапроса;
СписокРаботников = Запрос.Выполнить().Выгрузить();
Отбор = Новый Структура();
Отбор.Вставить(«ФизЛицо»,Справочники.ФизическиеЛица.ПустаяСсылка());
Строки = СписокРаботников.НайтиСтроки(Отбор);
Если Строки.Количество() > 0 Тогда
ЭлементыФормы.СписокРаботников.ТекущаяСтрока = Строки[0];
КонецЕсли;
См 30.04.23
В таблицу значений нельзя добавить колонку с типом Булево (чтобы использовать как флажок,пометку в формах)?
ТЗ.Колонки.Добавить(«Фамилия», Новый ОписаниеТипов(«Строка»),»Фамилия»);
ТЗ.Колонки.Добавить(«Флаг», Новый ОписаниеТипов(«Булево»),»Флаг»)
Смотри
//проверка что есть колонка Товар
Если ТаблицаДокументов.Колонки.Найти(«Товар») <> Неопределено Тогда
К строкам таблицы значений можно обращаться через оператор индексации [ ].
Индексация строк начинается с нуля, чтобы изменить значение в первой строке нужно использовать индекс 0:
//меняем значение в первой строке в колонке Товар
Стр[0].Товар = «Телевизор»;
Расписывают два способа перебора таблицы значений и выборочного удаления строк
— просматривать таблицу значений с конца;
— выгружать ссылки на нужные строки в массив значений; и после, читая массив, удалить нужные строки.
— был вариант через «НайтиСтроки» (он описан на других сайтах).
Еще я делал топорным четвертым вариантом — перебирал строки по индексам, после каждого удаления пересчитывал количество элементов таблицы и номер текущей строки уменьшал на единицу.
Поиск в таблице значений
Для поиска в таблице значений используются 2 метода: Найти и НайтиСтроки.
Метод Найти вернет первую строку с найденным значением, то есть если в таблице 2 строки с таким значением, то будет найдена только первая из них.
Метод НайтиСтроки возвращает массив найденных строк и может использоваться для поиска неуникальных значений.
Добавление индексов в таблицы значений (если сотни тысяч и миллионы строк, то индексы нужны).
/добавление индексов
ТаблицаДокументов.Индексы.Добавить(«Това р»);
ТаблицаДокументов.Индексы.Добавить(«Сумм а»);
//будут созданы 2 индекса
//при поиске по колонке Товар или по колонке Сумма
//будет использоваться индекс
//если выполнить поиск сразу по двум колонкам
//методом НайтиСтроки, то индекс не будет использоваться
//Для этого нужен составной индекс
ТаблицаДокументов.Индексы.Добавить(«Това р, Сумма»);
Как работать с таблицей значений в 1С 8.2 – 8.3
Таблица значений — это не сохраняемый в базе данных объект, предназначенный для создания динамических наборов данных.
Таблица значений состоит из строк и колонок. В отличие от списка значений, таблица значений имеет структуру, которую определяет разработчик.
Объект ТаблицаЗначений имеет много полезных методов для обработки данных. Разработчик средствами встроенного языка может добавлять и удалять строки и колонки, перебирать строки, искать значение, сортировать по любым колонкам и выполнять другие операции.
При создании новой таблицы значений в нее обычно добавляются колонки:
У таблицы значений есть свойство Колонки, которое представляет собой коллекцию колонок и позволяет добавлять, удалять и менять их порядок.
По умолчанию в таблице значений могут храниться значения разных типов. Но в 1С:Предприятии 8.0 для колонки можно задать список возможных типов значений. Это делается следующим образом (для повышения наглядности нам понадобится вспомогательная функция СоздатьОписаниеТипов):
Внимание! Массив, возвращаемый методом НайтиСтроки, содержит строки таблицы значений (не их копии, а сами строки).При изменении какой-либо строки в таблице значений это отразится в массиве, и наоборот.
Таблица значений позволяет упорядочить содержащиеся в ней данные, для чего предназначен метод Сортировать:
Таблица значений имеет очень полезную возможность группировки строк и подсчета итогов по группе, что реализуется методом Свернуть, имеющим следующие параметры:
Свернуть(<Колонки группировок>, <Колонки суммирования>)
Этот метод осуществляет свертку таблицы значений по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения по этим строкам, хранящиеся в колонках, указанных во втором параметре, суммируются.
Внимание! Списки колонок для метода Свернуть не должны пересекаться. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений. Например, у нас есть таблица значений со следующими данными.
В следующем примере эта таблица сворачивается по колонкам Сотрудник и Год с подсчетом суммы по колонке Доход: