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

Таблица значений

Автор akaipbay, 27 июл 2016, 12:45

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

akaipbay

Как обратиться к таблице значений чтобы взять значения определенных колонок??

cska-fanat-kz

не поверите, по имени.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Fedor_Safonchik

Вы уверены в том, что это ТаблицаЗначений ?

Подробная информация здесь

Таблица значений в языке 1С 8.3, 8.2 (в примерах)

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

&НаСервере
Процедура ВыполнитьКодНаСервере()

/// Как создать таблицу значений в 1с 8.3, 8.2

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

/// Как добавить колонки в таблицу значений в 1с 8.3, 8.2

Таб.Колонки.Добавить("Фрукт");
Таб.Колонки.Добавить("Цвет");
Таб.Колонки.Добавить("Вкус");

/// Как добавить строки в таблицу значений в 1с 8.3, 8.2

Стр = Таб.Добавить();
Стр.Фрукт = "Яблоко";
Стр.Цвет = "Зелёный";
Стр.Вкус = "Кислый";

Стр = Таб.Добавить();
Стр.Фрукт = "Банан";
Стр.Цвет = "Желтый";
Стр.Вкус = "Сладкий";

Стр = Таб.Добавить();
Стр.Фрукт = "Слива";
Стр.Цвет = "Синий";
Стр.Вкус = "Терпкий";

/// Как добавить в таблицу значений колонку с
/// описанием типа и заголовка в 1с 8.3, 8.2

ОписаниеВеса = Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(12, 3));

Таб.Колонки.Добавить("ВесФрукта", ОписаниеВеса, "Вес фрукта");
Таб[0].ВесФрукта = 100.005;
Таб[1].ВесФрукта = 60.010;
Таб[2].ВесФрукта = 25.000;

/// Как перечислить все строки в таблице значений в 1с 8.3, 8.2

Для Каждого Стр Из Таб Цикл
Сообщить(Стр.Фрукт + " " + Стр.Цвет + " " + Стр.Вкус +
" " + Стр.ВесФрукта);
КонецЦикла;

/// Как перечислить все колонки в таблице значений
/// в 1с 8.3, 8.2

Для Каждого Колонка Из Таб.Колонки Цикл
Сообщить(Колонка.Имя);
КонецЦикла;

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

// выгрузка названий фруктов в массив
МассивФруктов = Таб.ВыгрузитьКолонку("Фрукт");

// ничего не измениться, так как массив не менялся
Таб.ЗагрузитьКолонку(МассивФруктов, "Фрукт");

/// Как заполнить значения в колонке для всех строк таблицы
/// значений в 1с 8.3, 8.2

// обнулим вес во всех строках
Таб.ЗаполнитьЗначения(0, "ВесФрукта");

// выставим новые веса
Таб[0].ВесФрукта = 100;
Таб[1].ВесФрукта = 60;
Таб[2].ВесФрукта = 25;

/// Как в таблице значений посчитать итог по колонке в 1с 8.3, 8.2

Сообщить(Таб.Итог("ВесФрукта")); // 185

/// Как найти строку в таблице значений по значению в 1с 8.3, 8.2

// найдём строчку с яблоком и покажем его цвет
НайденнаяСтрока = Таб.Найти( "Яблоко" );
Если НайденнаяСтрока <> Неопределено Тогда
Сообщить(НайденнаяСтрока.Цвет); // Зелёный
КонецЕсли;

/// Как найти строку в таблице значений поиском значения
/// в определенных колонках в 1с 8.3, 8.2

// будем искать по слову "Кислый" в колонках вкус и цвет
НайденнаяСтрока = Таб.Найти("Кислый", "Вкус, Цвет");
Если НайденнаяСтрока <> Неопределено Тогда
Сообщить(НайденнаяСтрока.Фрукт); // Яблоко
КонецЕсли;

// добавим ещё один зелёный фрукт
Стр = Таб.Добавить();
Стр.Фрукт = "Киви";
Стр.Цвет = "Зелёный";
Стр.Вкус = "Сладкий";
Стр.ВесФрукта = 30;

/// Как искать в таблице значений неуникальные значения
/// в 1с 8.3, 8.2

Отбор = Новый Структура;
Отбор.Вставить("Цвет", "Зелёный");
Строки = Таб.НайтиСтроки(Отбор);
Для Каждого Стр Из Строки Цикл
Сообщить(Стр.Фрукт); // Яблоко Киви
КонецЦикла;

/// Как сдвинуть строку таблицы значений в 1с 8.3, 8.2

// сдвигаем первую строку на одну позицию вперёд
Таб.Сдвинуть(0, 1);

// и возвращаем обратно
Таб.Сдвинуть(1, -1);

/// Как создать копию таблицы значений в 1с 8.3, 8.2

// полная копия
КопияТаб = Таб.Скопировать();

/// Как создать копию таблицы значений по нужным колонкам
/// в 1с 8.3, 8.2

// только две колонки будет Фрукт и Цвет
КопияТаб = Таб.СкопироватьКолонки("Фрукт, Цвет");

/// Как создать копию таблицы значений по отбору в 1с 8.3, 8.2

Отбор = Новый Структура;
Отбор.Вставить("Фрукт", "Яблоко");

// таблица будет содержать только строчку с яблоком
КопияТаб = Таб.Скопировать(Отбор);

// таблица будет содержать цвет и вес яблока
КопияТаб = Таб.Скопировать(Отбор, "Цвет, ВесФрукта");

/// Как свернуть таблицу значений по колонке в 1с 8.3, 8.2

// свернём по вкусу, просуммируем по весу
Таб.Свернуть("Вкус", "ВесФрукта");

/// Как отсортировать таблицу значений по колонке в 1с 8.3, 8.2

Таб.Сортировать("ВесФрукта Возр");

/// Как отсортировать таблицу значений по нескольким колонкам
/// в 1с 8.3, 8.2

Таб.Сортировать("ВесФрукта Возр, Вкус Убыв");

/// Как удалить строку из таблицы значений в 1с 8.3, 8.2

// по индексу или по значению
Таб.Удалить(0);

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

/// Как программно вывести таблицу значений на
/// форму в 1с 8.3, 8.2

// см. примеры использования этой функции ниже

// ТабВКоде - таблица значений, созданная программно
// ТабРеквизит - имя реквизита формы типа ТаблицаЗначений
// ТабНаФорме - имя элемента формы, связанного с ТабРеквизит

&НаСервере
Процедура ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме(ТабВКоде, ТабРеквизит, ТабНаФорме)

// реквизит ТабРеквизит и соответствующий
// ему элемент формы ТабНаФорме уже созданы
// нами в визуальном режиме

// 1. добавляем колонки из ТабВкоде в реквизит ТабРеквизит

НовыеРеквизиты = Новый Массив;

Для Каждого Колонка Из ТабВКоде.Колонки Цикл
НовыеРеквизиты.Добавить(
Новый РеквизитФормы(
Колонка.Имя, Колонка.ТипЗначения,
ТабРеквизит
)
);
КонецЦикла;

ИзменитьРеквизиты(НовыеРеквизиты);

// 2. добавляем колонки из ТабВКоде в элемент ТабНаФорме

Для Каждого Колонка Из ТабВКоде.Колонки Цикл

НовыйЭлемент = Элементы.Добавить(
ТабРеквизит + "_" + Колонка.Имя, Тип("ПолеФормы"), Элементы[ТабНаФорме]
);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = ТабРеквизит + "." + Колонка.Имя;
КонецЦикла;

// 3. наконец, передаём данные из ТабВКоде в ТабРеквизит

ЗначениеВРеквизитФормы(ТабВКоде, ТабРеквизит);

// готово!

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

&НаСервере
Процедура СоздатьТаблицуНаФормеНаСервере()

// программно создаём таблицу значений ТабВКоде

ТабВКоде = Новый ТаблицаЗначений;

ОписаниеСтроки = Новый ОписаниеТипов("Строка");
ОписаниеВеса = Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(12, 3));

ТабВКоде.Колонки.Добавить("Фрукт", ОписаниеСтроки, "Имя фрукта");
ТабВКоде.Колонки.Добавить("Цвет", ОписаниеСтроки, "Цвет фрукта");
ТабВКоде.Колонки.Добавить("Вес", ОписаниеВеса, "Вес фрукта");

Стр = ТабВКоде.Добавить();
Стр.Фрукт = "Яблоко";
Стр.Цвет = "Зелёный";
Стр.Вес = 200;

Стр = ТабВКоде.Добавить();
Стр.Фрукт = "Банан";
Стр.Цвет = "Желтый";
Стр.Вес = 150;

ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме(ТабВКоде, "ТабРеквизит1", "ТабНаФорме1");

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

/// Как программно вывести на форму результат запроса
/// в виде таблицы значений в 1с 8.3, 8.2

&НаСервере
Процедура ВывестиНаФормуРезультатЗапросаНаСервере()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Ссылка,
| Товары.ВерсияДанных,
| Товары.ПометкаУдаления,
| Товары.Код,
| Товары.Наименование,
| Товары.Цвет,
| Товары.ЕдиницаИзмерений,
| Товары.Предопределенный,
| Товары.ИмяПредопределенныхДанных
|ИЗ
| Справочник.Товары КАК Товары";

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

ТабВКоде = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой);

// функция ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме определена выше
ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме(ТабВКоде, "ТабРеквизит2", "ТабНаФорме2");

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

/// Скачать и выполнить эти примеры на компьютере

akaipbay

Цитата: cska-fanat-kz от 27 июл 2016, 12:52
не поверите, по имени.

UID = ЭтаФорма.СЗ.UID;
Так не получается.

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

akaipbay

Цитата: cska-fanat-kz от 27 июл 2016, 13:14
задача в чем?
Обратиться к значению в колонке UID, спасибо разобрался UID = ЭтаФорма.СЗ[л].UID;

Теги:

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

Рейтинг@Mail.ru

Поиск