Как выгрузить колонку таблицы значений в массив в 1с
Перейти к содержимому

Как выгрузить колонку таблицы значений в массив в 1с

  • автор:

Как в массив выгрузить колонку таблицы?

ТаблицаЗначений (ValueTable)
ВыгрузитьКолонку (UnloadColumn)
Синтаксис:
ВыгрузитьКолонку(<Колонка>)
Параметры:
<Колонка> (обязательный)
Тип: Число, Строка, КолонкаТаблицыЗначений. Колонка, значения которой необходимо выгрузить. В качестве значения параметра может выступать индекс колонки, имя колонки, сама колонка.
Возвращаемое значение:
Тип: Массив.
Описание:
Создает массив и копирует в него значения, содержащиеся в колонке таблицы значений.

Пример:
ТЗ=ЭлементыФормы.ТП.Значение;
Массив=ТЗ.ВыгрузитьКолонку(«Номенклатура»);

А у меня в СП др. пример

Пример:
ТаблицаЗначений.Свернуть(«Номенклатура»);
Запрос.УстановитьПараметр(«МассивНоменклатуры», ТаблицаЗначений.ВыгрузитьКолонку(«Номенклатура»));

А как теперь в запросе написать, типа Номенклатура в Массиве.

Запрос.Текст message_7″>

Defender aka LINN

|ВЫБРАТЬ
| ЦеныСрезПоследних.Номенклатура Как Номенклатура,
| ЦеныСрезПоследних.ТипЦен Как ТипЦен,
| ЦеныСрезПоследних.Цена
|
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен В (&МассивТиповЦен)) КАК ЦеныСрезПоследних
|
|ГДЕ Номенклатура В (&МассивТоваров)»;

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 для колонки можно задать список возможных типов значений. Это делается следующим образом (для повышения наглядности нам понадобится вспомогательная функция СоздатьОписаниеТипов):

Внимание! Массив, возвращаемый методом НайтиСтроки, содержит строки таблицы значений (не их копии, а сами строки).При изменении какой-либо строки в таблице значений это отразится в массиве, и наоборот.

Таблица значений позволяет упорядочить содержащиеся в ней данные, для чего предназначен метод Сортировать:

Таблица значений имеет очень полезную возможность группировки строк и подсчета итогов по группе, что реализуется методом Свернуть, имеющим следующие параметры:

Свернуть(<Колонки группировок>, <Колонки суммирования>)

Этот метод осуществляет свертку таблицы значений по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения по этим строкам, хранящиеся в колонках, указанных во втором параметре, суммируются.

Внимание! Списки колонок для метода Свернуть не должны пересекаться. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений. Например, у нас есть таблица значений со следующими данными.

В следующем примере эта таблица сворачивается по колонкам Сотрудник и Год с подсчетом суммы по колонке Доход:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *