Как найти значения первой строки в таблице

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 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");
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

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

Я
   Madam_bashkirka

23.12.08 — 08:04

Допустим,если хочешь получить значение первой строки в колонке «Контрагенты»,в 7-ке можно написать так:

ТаблицаЗначений.ПолучитьЗначение(1,»Контрагенты»);

А как это можно реализовать в 8-ке.

   Madam_bashkirka

1 — 23.12.08 — 08:08

нууу,очень срочно нужно ))

   Стрелок

2 — 23.12.08 — 08:09

фигасе… 4 минуты всего прошло. народ на работу едет… ждите ответа

   Vitello

3 — 23.12.08 — 08:09

ТаблицаЗначений[0].Контрагенты

   Madam_bashkirka

4 — 23.12.08 — 08:12

да нет,че то он такую надпись не принимает..

   Злобный Йожег

5 — 23.12.08 — 08:14

ТаблицаЗначений.Получить(0).Контрагенты

   Madam_bashkirka

6 — 23.12.08 — 08:21

нет,так тоже не получается (((

   BabySG

7 — 23.12.08 — 08:52

(6)Так может напишешь, что не получается. Илибудем в телепатов играть?
Тогда отвечаю: это надо написать в конфе, а не зачитывать вслух компу в монитор.

  

vmv

8 — 23.12.08 — 08:54

в таблице должна существовать хотя бы одна строка)

ТаблицаЗначений — это программный объект встроенного языка, позволяющий строить произвольные наборы данных в памяти компьютера, отображать их в табличном виде, а также программно и интерактивно манипулировать ими (добавлять, редактировать, удалять и сортировать). 

Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.

Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом значения колонки.

Таблица значений является полностью динамическим объектом, т.е. Вы можете манипулировать не только строками таблицы, добавляя и удаляя их, но и колонками.

Таблица значений может использоваться явно при создании в коде необходимого количества переменных типа ТаблицаЗначений, либо неявно: при добавлении элемента управления ТабличноеПоле на обычную форму, и ТаблицаФормы — на управляемую. Здесь мы рассмотрим только программную работу с таблицей значений.

Создание таблицы значений

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

тз = Новый ТаблицаЗначений;

Колонки таблицы значений

Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:

  1. Имя — идентификатор колонки (может содержать только алфавитные символы, цифры и знаки подчеркивания. Причем, начинаться имя колонки может только с буквы или символа подчеркивания);
  2. Заголовок — представление колонки в диалогах (может содержать произвольные символы);
  3. ТипЗначения — тип значения содержимого ячеек в этой колонке. Если тип не задан, в ячейке можно хранить значения произвольного типа;
  4. Ширина — ширина колонки в диалогах;

Доступ к колонкам производится через свойство Колонки объекта ТаблицаЗначений. Для добавления новой колонки используется метод Добавить():

тз.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
тз.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
тз.Колонки.Добавить("Свойство");//можно хранить произвольные данные

Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():

найдКолонка = тз.Колонки.Найти("Наименование");
Если найдКолонка = Неопределено Тогда
	Сообщить("Колонка не найдена!");
КонецЕсли;

Перебор колонок выполняется следующим образом:

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

Для удаления колонки используется метод Удалить():

найдКолонка = тз.Колонки.Найти("Свойство");
Если НЕ найдКолонка = Неопределено Тогда
	тз.Колонки.Удалить(найдКолонка);
КонецЕсли;

Свойства колонки таблицы значений

Имя Тип Описание
Имя Строка символьный идентификатор колонки, по которому к ней можно обращаться из кода
Заголовок Строка строковое представление колонки на форме
ТипЗначения ОписаниеТипов свойство органичивает пространство доступных значений, которые можно указать в данной колонке
Ширина Число ширина колонки на форме (выражается в количестве символов)

Методы коллекции колонок таблицы значений

Вставить() Вставляет новую колонку в указанную позицию коллекции
Добавить() Добавляет новую колонку в конец коллекции
Количество() Возвращает количество колонок в коллекции
Найти() Ищет колонку в коллекции по имени
Очистить() Удаляет все колонки из коллекции
Сдвинуть() Сдвигает колонку влево или вправо
Удалить() Удаляет колонку из коллекции

Строки таблицы значений

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

Добавление и удаление строк

Для добавления новой строки используется метод Добавить() объекта ТаблицаЗначений. Метод возвращает объект СтрокаТаблицыЗначений, с которым доступны дальнейшие манипуляции:

СтрокаТЧ = тз.Добавить();

И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:

СтрокаТЧ.Наименование = "Стул деревянный";
СтрокаТЧ.Количество = 1;
СтрокаТЧ.Свойство = ТекущаяДата();

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

тз = СтрокаТЧ.Владелец();

Для удаления строки используется метод Удалить() объекта ТаблицаЗначений. Строку можно удалить либо передав методу непосредственно строку, либо ее индекс:

//непосредственное удаление строки
тз.Удалить(СтрокаТЧ);
//удаление строки по индексу
тз.Удалить(тз.Индекс(СтрокаТЧ));

Перебор строк таблицы значений

Для перебора строк удобнее всего использовать оператор цикла Для Каждого. В редких случаях оправдано применение цикла Для:

Для Каждого СтрокаТЧ Из тз Цикл
	ИндСтроки = тз.Индекс(СтрокаТЧ);
КонецЦикла;
//в редких случаях
Для ИндСтроки = 0 По тз.Количество() - 1 Цикл
	СтрокаТЧ = тз.Получить(ИндСТроки);
КонецЦикла;

Поиск строк

В отличие от платформы 1С:Предприятие 7.7 в 8-ке расширен функционал работы с таблицей значений. Поиск можно выполнять не только по значению в колонке (в этом случае будет возвращена первая найденная строка), но и по набору свойств (в этом случае возвращается массив строк):

//поиск первой строки
НайдСтрока = тз.Найти(Номенклатура, "Номенклатура");
//поиск набора строк
ПараметрыПоиска = Новый Структура("Номенклатура", Номенклатура);
мНайдСтроки = тз.НайтиСтроки(ПараметрыПоиска);

Все методы таблицы значений:

Вставить() Вставляет строку на указанное место
ВыбратьСтроку() Позволяет интерактивно выбрать строку в диалоговом окне
ВыгрузитьКолонку() Выгружает значения ячеек указанной колонки в массив значений
Добавить() Добавлет новую строку в таблицу значений
ЗагрузитьКолонку() Загружает значения в ячейки указанной колонки из массива
ЗаполнитьЗначения() Заполняет ячейки указанных колонок определенным значением
Индекс() Возвращает индекс строки таблицы значений
Итог() Возвращает просуммированный итог по колонке таблицы значений
Количество() Возвращает количество строк в таблице значений
Найти() Выполняет поиск строки по значению
НайтиСтроки() Выполняет поиск строк по указанным параметрам
Очистить() Очищает строки таблицы значений
Получить() Возвращает строку по ее индексу
Свернуть() Выполняет сжатие строк и колонок таблицы значений
Сдвинуть() Сдвигает строку вверх или вниз по таблице
Скопировать() Создает новую таблицу значений копированием текущей
СкопироватьКолонки() Создает новую пустую таблицу значений путем копирования колонок текущей таблицы
Сортировать() Выполняет сортировку строк таблицы значений по указанным колонкам
Удалить() Удаляет строку таблицы значений

Иерархию свойств и типов значений, связанных с таблицей значений, схематически можно представить в виде дерева:

Читайте также:

  1. Как объединить таблицы значений
  2. Как программно выгрузить таблицу значений
  3. Как правильно загрузить значений в колонку таблицы значений из массива

Поделиться страницей в соц.сетях

Продолжаем изучать программную работу с таблицей значений в 1С. В прошлых статьях мы научились создавать таблицу значений (как программно, так и на управляемой форме), добавлять колонки и строки таблицы значений. Осталось научиться работать с самой таблицей значений. В первой части мы узнаем, как находить строки по нужному отбору, и научимся копировать таблицу значений с нужным отбором.

Поиск в таблице значений можно осуществить с помощью двух методов: Найти и НайтиСтроки. Метод Найти является функцией, которая вернёт первую строку, где встречается искомое значение.  Рекомендуется метод применять для поиска уникальных значений, т.к. при наличии нескольких строк с искомым значением, будет возвращена только одна. Если же нам нужно найти все строки, где встречается искомое значение, то необходимо использовать метод НайтиСтроки, который возвращает массив строк с нужным значением.

Разберем оба этих метода на примере.

Метод Найти таблицы значений 1С 8.3

Этот метод является функцией, которая возвращает строку, если искомое значение найдено, и Неопределено, если нет. При помощи этого метода можно найти любое значение, которое имеется в таблице значений. Причем, не обязательно знать колонку, где это значение может содержаться.

Данная функция имеет следующий синтаксис:

Найти(Значение, Колонки)

Где:

Значение – то значение, которое мы ищем в таблице.

Колонки – колонки таблицы значений, по которым осуществляется поиск (необязательный параметр, можно осуществлять поиск по всем колонкам таблицы значений).

Работа этого метода показана на следующем примере:

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«ФИО»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
//первая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Иванов И.И»;
НСтр.ДатаРождения = Дата(1981,1,15);
//вторая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Петров П.С»;
НСтр.ДатаРождения = Дата(1984,5,25);
//третья строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Тарасов К.В»;
НСтр.ДатаРождения = Дата(1987,6,11);
//первая строка
стрТарасов = ТЗ.Найти(«Тарасов К.В»,«ФИО»);

Если мы посмотрим на значение переменной стрТарасов в отладке, то увидим ссылку на конкретную строку таблицы значений.

Метод найти таблицы значений 1С

Точно такой же результат будет, если мы очистим второй параметр.

Метод найти таблицы значений 1С

Если же мы сделаем поиск по второй колонке, то результат будет Неопределено.

Неопределено в результате метода найти таблицы значений

Такой же результат Неопределено  будет и при поиске несуществующего значения.

Неопределено в результате метода найти таблицы значений

Метод НайтиСтроки таблицы значений 1С 8.3

Если метод Найти возвращает конкретную строку таблицы значений, то метод НайтиСтроки, возвращает массив строк, которые соответствуют нужному условию. Данный метод имеет следующий синтаксис

НайтиСтроки(СтруктураПоиска)

У этого метода один параметр — структура, где в качестве ключей задаются названия колонок, по которым будет вестись поиск, а в качестве значений – те значения, по которым должен осуществляться поиск. Таким образом, если в методе Найти мы могли вести поиск только по одному значению, то при помощи метода НайтиСтроки можно осуществлять поиск по комбинации значений в разных колонках.

Переделаем предыдущую таблицу значений:

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«Фамилия»);
ТЗ.Колонки.Добавить(«Имя»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
//первая строка
НСтр = ТЗ.Добавить();
НСтр.Фамилия = «Иванов»;
НСтр.Имя = «Петр»;
НСтр.ДатаРождения = Дата(1981,1,15);
//вторая строка
НСтр = ТЗ.Добавить();
НСтр.Фамилия = «Иванов»;
НСтр.Имя = «Алексей»;
НСтр.ДатаРождения = Дата(1981,1,25);
//третья строка
НСтр = ТЗ.Добавить();
НСтр.Фамилия = «Григорьев»;
НСтр.Имя = «Петр»;
НСтр.ДатаРождения = Дата(1987,6,11);

Теперь найдем все строки таблицы значений, где встречается имя Петр

МассивСтрок = ТЗ.НайтиСтроки(Новый Структура(«Имя»,«Петр»));

Посмотрим на результат.

Метод НайтиСтроки таблицы значений 1С

Или найдем всех Петров, родившихся 11.06.1987 года.

ПараметрыПоиска = Новый Структура(«Имя,ДатаРождения»,«Петр»,Дата(1987,6,11));
МассивСтрок = ТЗ.НайтиСтроки(ПараметрыПоиска);

В этот раз найденных строк будет меньше.

Метод НайтиСтроки таблицы значений 1С

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

Метод НайтиСтроки возвращает пустой массив

Причем обратите внимание, в массиве содержится ссылка на строку таблицы значений. Это значит, что если Вы измените строку в массиве, то также изменится строка в таблице значений.

Скопировать таблицу значений 1С

В языке разработке  1С можно одну таблицу значений скопировать  в другую. Причем можно просто скопировать структуру таблицы значений, т.е. создать точно такую же таблицу значений, с тем же набором колонок, но без строк. Такое копирование осуществляется при помощи метода СкопироватьКолонки. А также скопировать одну таблицу в другую с различными отборами, это можно сделать, используя метод Скопировать. Разберем оба этих метода.

Метод СкопироватьКолонки таблицы значений 1С 8.3

Данный метод является функцией, которая возвращает пустую таблицу значений, с набором колонок, как у изначальной. У этого метода следующий синтаксис:

СкопироватьКолонки(СписокКолонок)

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

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«Фамилия»);
ТЗ.Колонки.Добавить(«Имя»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
//новые таблицы
НовТЗ1 = ТЗ.СкопироватьКолонки();
НовТЗ2 = ТЗ.СкопироватьКолонки(«Фамилия,Имя»);

В примере выше, в таблице НовТЗ1 будет тот же набор колонок, что и в таблице ТЗ, а в таблице НовТЗ2 будут только колонки Фамилия и Имя.

Метод Скопировать таблицы значений 1С 8.3

Научимся копировать одну таблицу значений в другую, а в этом нам поможет метод Скопировать. Этот метод является функцией, которая возвращает новую таблицу значений. У него имеется два синтаксиса

Скопировать(Строки,Колонки)

Где:

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

Колонки – строка имен колонок, которые перечислены через запятую.  Также необязательный параметр, если он пуст, то в новой таблице будут все колонки.

Второй вариант синтаксиса

Скопировать(ПараметрыОтбора, Колонки).

Где:

ПараметрыОтбора – структура, при помощи которой мы отберем нужные строки в новую таблицу значений. В качестве ключей структуры должны быть перечислены названия  колонок, по которым будет вестись отбор, а в качестве значений – те значения, по которым должны отобраться нужные строки.

Рассмотрим примеры с обоими вариантами параметров.  Будем использовать ту же таблицу, что и в предыдущих примерах, но отберем только те строки, у которых год рождения 1981.

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«Фамилия»);
ТЗ.Колонки.Добавить(«Имя»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
//первая строка
НСтр = ТЗ.Добавить();
НСтр.Фамилия = «Иванов»;
НСтр.Имя = «Петр»;
НСтр.ДатаРождения = Дата(1981,1,15);
//вторая строка
НСтр = ТЗ.Добавить();
НСтр.Фамилия = «Иванов»;
НСтр.Имя = «Алексей»;
НСтр.ДатаРождения = Дата(1981,1,25);
//третья строка
НСтр = ТЗ.Добавить();
НСтр.Фамилия = «Григорьев»;
НСтр.Имя = «Петр»;
НСтр.ДатаРождения = Дата(1987,6,11);
//формируем новый массив
МассивДляОтбора = Новый Массив;
Для Каждого
стрТЗ из ТЗ Цикл
Если
Год(стрТЗ.ДатаРождения) = 1981 Тогда
МассивДляОтбора.Добавить(стрТЗ);
КонецЕсли;
КонецЦикла;
//новая таблица значений
НовТЗ = ТЗ.Скопировать(МассивДляОтбора,«Имя,ДатаРождения»);

Посмотрим на результат работы этой функции

Метод Скопировать таблицы значений 1С

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

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«Фамилия»);
ТЗ.Колонки.Добавить(«Имя»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
//первая строка
НСтр = ТЗ.Добавить();
НСтр.Фамилия = «Иванов»;
НСтр.Имя = «Петр»;
НСтр.ДатаРождения = Дата(1981,1,15);
//вторая строка
НСтр = ТЗ.Добавить();
НСтр.Фамилия = «Иванов»;
НСтр.Имя = «Алексей»;
НСтр.ДатаРождения = Дата(1981,1,25);
//третья строка
НСтр = ТЗ.Добавить();
НСтр.Фамилия = «Григорьев»;
НСтр.Имя = «Петр»;
НСтр.ДатаРождения = Дата(1987,6,11);
//отбор
ПараметрыОтбора = Новый Структура(«Имя,ДатаРождения»,«Петр»,Дата(1981,1,15));
//новая таблица значений
НовТЗ = ТЗ.Скопировать(ПараметрыОтбора,«Имя,Фамилия»);

В этот раз будет следующий результат.

Метод Скопировать таблицы значений 1С

Методы таблиц значений 1С 8.3. Часть 2. Сортировка, итоги и свертка.

Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект.

Более подробно и основательно работа с таблицей значений в дается в моей книге:

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

 +9 

   

Распечатать

Найти значение в Таблице Значений

Пример поиска НАЙТИ:

Код 1C v 8.х

 //Искать по всей таблице значений
НайденнаяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение);

//Искать в колонках Поставщик, Покупатель
НайденнаяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение, "Поставщик, Покупатель");

//еще
НайденнаяСтрока = ТаблицаЦен.Найти(ВыбТовар, "Товар");
Если НайденнаяСтрока = Неопределено Тогда
Предупреждение("Товар не найден!");
Иначе
ЦенаТовара = НайденнаяСтрока.Цена;
КонецЕсли;

Пример поиска НАЙТИСТРОКИ:

Код 1C v 8.х

 // Сформировать структуру отбора. 
СтруктураПоиска = Структура("Сотрудник", ИскомоеЗначение);
// Найти строки.
МассивНайденныхСтрок = ТаблицаЗначений.НайтиСтроки(СтруктураПоиска);

// .... ИЛИ
НайдСтроки = тзСхемы.НайтиСтроки(Новый Структура("Доставка", ОформлениеСтроки.ДанныеСтроки.Ссылка));
Если НайдСтроки.Количество() > 0 Тогда
ОформлениеСтроки.Ячейки.Схема.УстановитьТекст(НайдСтроки[0].Схема);
Иначе
ОформлениеСтроки.Ячейки.Схема.УстановитьТекст("Нет");
КонецЕсли;

Понравилась статья? Поделить с друзьями:
  • Gartic phone как найти игроков
  • Как найти художника по росписи
  • Как составить резюме мастер по маникюру
  • Как найти сохраненные контакты на айфоне
  • Как найти для айфона переводчик