1с таблица значений методы. Синтаксис метода «Описание типов»

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

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

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

Свойства таблицы значений определяются комбинациями двух предопределенных коллекций: ее колонок и строк.

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

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

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

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

С точки зрения программного интерфейса, строки – это отдельная коллекция, встроенная в таблицу значений. Они являются аналогом записей физических таблиц, то есть привычных для пользователя строк табличной части или журнала документов. Каждая отдельно взятая строка является объектом с набором именованных свойств, имена которых соответствуют именам колонок таблицы.

Таким образом, взаимодействие со строкой очень похоже на взаимодействие с прочими объектами. Можно считывать и записывать ее свойства, в том числе с использованием предопределенной функции «ЗаполнитьЗначенияСвойств()». Так как строки являются основной коллекцией таблицы значений, то чтобы удалить все строки таблицы, применяется метод «Очистить()».

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

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

Создание таблицы конструктором

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

ДемоТаблица = Новый ТаблицаЗначений; // Первым делом инициализируем ТЗ // Далее определяем необходимые параметры для новых колонок и добавляем их в коллекцию // Создание колонки "Номенклатура" Имя = "Номенклатура"; ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Номенклатура"); Заголовок = "Номенклатура (товар)"; ДемоТаблица.Колонки.Добавить(Им, ТипЗначения, Заголовок); // Создание колонки "Количество" Имя = "Количество"; ТипЗначения = Новый ОписаниеТипов("Число"); ДемоТаблица.Колонки.Добавить(Имя, ТипЗначения); // В результате данных манипуляций мы создали пустую таблицу с типизированными колонками // Если вам необходимо использовать более точную типизацию примитивных типов, то следует использовать расширенный синтаксис конструктора “ОписаниеТипов”

Создание таблицы копированием

Если у вас под рукой есть эталон с подходящей структурой и/или составом, вы можете скопировать или выгрузить эталонную таблицу значений. Если эталоном является другая таблица, то необходимо применить метод «Скопировать таблицы-эталона». Если вы имеете дело с табличной частью или набором записей регистра, необходимо использовать метод «Выгрузить таблицу значений». Если вам необходима только структура, то можно воспользоваться методом «СкопироватьКолонки».

// Вариант с копированием из ТЗ-эталона всех строк но с сохранением лишь двух указанных колонок КолонкиЭталона = "Номенклатура,Количество"; ДемоТаблица = ТаблицаЭталон.Скопировать(, КолонкиЭталона); // Вариант с копированием из ТЗ-эталона предварительно отобранных строк,с сохранением двух указанных колонок СтрокиЭталона = ОтобратьВМассивНужныеНамСтрокиИзТаблицыЭталона(); КолонкиЭталона = "Номенклатура,Количество"; ДемоТаблица = ТаблицаЭталон.Скопировать(СтрокиЭталона, КолонкиЭталона); // Вариант с копированием из ТЗ-эталона строк по указанному фильтру,с сохранением одной колонки “Номенклатура” // Будут отобраны все строки где значение в колонке Количество равно 0, в результирующую таблицу попадет только колонка Номенклатура ОтборСтрок = Новый Структура("Количество", 0); КолонкиЭталона = "Номенклатура"; ДемоТаблица = ТаблицаЭталон.Скопировать(СтрокиЭталона, КолонкиЭталона); // Вариант с полным копированием таблицы и последующем удалении одной строки со значением поля количество равным нулю и удалением целой колонки “Количество” ОтборСтрок = Новый Структура("Количество", 0); КолонкиЭталона = "Номенклатура"; ДемоТаблица = ТаблицаЭталон.Скопировать(СтрокиЭталона, КолонкиЭталона); СтрокаТаблицы = ДемоТаблица.Найти(0, "Количество"); ДемоТаблица.Удалить(СтрокаТаблицы); ДемоТаблица.Колонки.Удалить("Количество"); // Аналогичные варианты и их модификации можно применять к табличным частям и наборам записей регистров

Создание таблицы запросом

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

// Пример с созданием пустой таблицы по образцу структуры регистра накопления // Нетрудно догадаться, что таким образом можно получить и заполненную таблицу Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 0 * Из РегистрНакопления.ТоварынаСкладе"); РезультатЗапроса = Запрос.Выполнить(); ДемоТаблица = РезультатЗапроса.Выгрузить(); // Пример с созданием пустой таблицы по явно заданным типам и именам полей Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 0 | Значение(Справочник.Номенклатура.ПустаяССылка) КАК Номенклатура, | ВЫРАЗИТЬ(0 КАК ЧИСЛО(15, 3)) КАК Количество"; РезультатЗапроса = Запрос.Выполнить(); ДемоТаблица = РезультатЗапроса.Выгрузить(); // ВАЖНО! Не стоит забывать, что в типах значений колонок, полученных из запроса всегда присутствует тип Null // Таким образом, ТЗ созданная запросом, всегда имеет составные типы колонок

Заключение

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

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

Для указания типов используется «общий объект» — «Описание типов» . Поэтому сначала поясним, что такое «Описание типов» («Описание типов значений»).

«Описание типов значений» . Для описания допустимых типов значений свойств различных объектов в системе используется специальный объект «ОписаниеТипов» . При помощи данного объекта можно описывать допустимые типы значений, которые можно будет присваивать свойствам. Для дополнительного ограничения возможных значений примитивных типов Число, Строка и Дата предусмотрены квалификаторы . Квалификаторы описывают такие параметры, как длина строки или числа, допустимые части даты и т.п.

Синтаксис метода «Описание типов»

Новый ОписаниеТипов(<Исходное описание типов>, <Добавляемые типы>, <Вычитаемые типы>, <Квалификаторы числа>, <Квалификаторы строки>, <Квалификаторы даты>)
Параметры:
<Исходное описание типов> (необязательный)
Тип: ОписаниеТипов. Исходное описание типов, на основании которого будет строиться новое.
<Добавляемые типы> (необязательный)
Тип: Массив, Строка. Массив значений типа Тип, состоящий из типов, которые будут использованы в объекте, или строка содержащая имена типов разделенных запятыми.
<Вычитаемые типы> (необязательный)
Тип: Массив, Строка. Массив значений типа Тип (или строка, содержащая имена типов, разделенных запятыми), состоящий из типов, которые будут исключены из исходного описания, указанного в первом параметре.
<Квалификаторы числа> (необязательный)
Тип: КвалификаторыЧисла. Квалификаторы числа, описывающие допустимые значения числового типа.
<Квалификаторы строки> (необязательный)
Тип: КвалификаторыСтроки. Квалификаторы строки, описывающие допустимые значения строкового типа.
<Квалификаторы даты> (необязательный)
Тип: КвалификаторыДаты. Квалификаторы даты, описывающие допустимые значения типа Дата.
Описание:
Создает описание типов на основании другого описания типов, путем добавления одних и исключения других типов. Если новый квалификатор не указан, будут оставлены квалификаторы исходного описания типов.
Пример использования объекта «Описание типов»:

// расширим описание ДопустимыеТипы новыми типами Массив = Новый Массив; Массив. Добавить(Тип("СправочникСсылка.Методы" )); Массив. Добавить(Тип("Число" )); Знак = ДопустимыйЗнак. Неотрицательный; КвЧисла = Новый КвалификаторыЧисла(10 , 2 , Знак); ДопустимыеТипы = Новый ОписаниеТипов(ДопустимыеТипы, Массив, КвЧисла);
Теперь, собственно, примеры корректного создания в таблице значений колонок различных типов.

В общем случае достаточно определить типы колонок таким образом:

ТЗ. Колонки. Добавить("ИндексСортировки" , Новый ОписаниеТипов("Число" ) ) ; ТЗ. Колонки. Добавить("ИмяРаздела" , Новый ОписаниеТипов("Строка" ) ) ; ТЗ. Колонки. Добавить("ДатаКорр" , Новый ОписаниеТипов("Дата" ) ) ; ТЗ. Колонки. Добавить("БезусловноеУдаление" , Новый ОписаниеТипов("Булево" ) ) ; ТЗ. Колонки. Добавить("Номенклатура" , Новый ОписаниеТипов() ) ; ТЗ. Колонки. Добавить("ДанныеРаздела" , Новый ОписаниеТипов("Структура" ) ) ; // пример создания колонок "число" и "строка" с уточнением параметров: ТЗ. Колонки. Добавить("ПроцентВыполнения" , Новый ОписаниеТипов("Число" , Новый КвалификаторыЧисла(18 , 2 ) ) ) ; ТЗ. Колонки. Добавить("ИмяРаздела" , Новый ОписаниеТипов("Строка" , , Новый КвалификаторыСтроки(200 , ДопустимаяДлина. Переменная) ) ) ; ТЗ. Колонки. Добавить("ДатаСписаания" , Новый ОписаниеТипов("Дата" , , , Новый КвалификаторыДаты(ЧастиДаты. ДатаВремя) ) ) ;

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

////// формирование структуры ТЗ (создание колонок) //// определим квалификаторы для подстановки в полях квалификаторов ТЗ КЧ = Новый КвалификаторыЧисла(18 , 9 ) ; КС = Новый КвалификаторыСтроки(200 ) ; КД = Новый КвалификаторыДаты(ЧастиДаты. ДатаВремя) ; //// определим описания типов для будущих колонок ТЗ // Массив - это исходное описание типов, на основании которого будет строиться новое // Обратите внимание, что для колонок ТЗ исходное описание типов в этом примере - массив Массив = Новый Массив; Массив. Добавить(Тип("Строка" ) ) ; ОписаниеТиповСтрока = Новый ОписаниеТипов(Массив, , КС) ; Массив. Очистить() ; Массив. Добавить(Тип("Число" ) ) ; ОписаниеТиповЧисло = Новый ОписаниеТипов(Массив, , , КЧ) ; Массив. Очистить() ; Массив. Добавить(Тип("Дата" ) ) ; ОписаниеТиповДата = Новый ОписаниеТипов(Массив, , , , КД) ; Массив. Очистить() ; Массив. Добавить(Тип("СправочникСсылка.Номенклатура" ) ) ; ОписаниеТиповНоменклатура = Новый ОписаниеТипов(Массив) ; Массив. Очистить() ; Массив. Добавить(Тип("СправочникСсылка.СерииНоменклатуры" ) ) ; ОписаниеТиповСерия = Новый ОписаниеТипов(Массив) ; Массив. Очистить() ; Массив. Добавить(Тип("СправочникСсылка.Качество" ) ) ; ОписаниеТиповКачество = Новый ОписаниеТипов(Массив) ; Массив. Очистить() ; Массив. Добавить(Тип("Булево" ) ) ; ОписаниеТиповБулево = Новый ОписаниеТипов(Массив) ; // собственно добавление колонок в ТЗ (создание структуры будущей ТЗ) ТЗ. Колонки. Добавить("Номенклатура" , ОписаниеТиповНоменклатура) ; ТЗ. Колонки. Добавить("Код" , ОписаниеТиповСтрока) ; ТЗ. Колонки. Добавить("СерияНоменклатуры" , ОписаниеТиповСерия) ; ТЗ. Колонки. Добавить("КонтрагентКод" , ОписаниеТиповСтрока) ; ТЗ. Колонки. Добавить("ДатаДействия" , ОписаниеТиповДата) ; ТЗ. Колонки. Добавить("Качество" , ОписаниеТиповКачество) ; ТЗ. Колонки. Добавить("КоличествоУС" , ОписаниеТиповЧисло) ; ТЗ. Колонки. Добавить("Списывать" , ОписаниеТиповБулево) ; . . . //////// формирование структуры ТЗ (создание колонок) ////////////////////////////////////////////////////////

О добавлении строки в таблицу значений см.

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

Какие методы существуют и как искать одновременно по нескольким значениям.

Для поиска в таблице значений существует два специальных метода:

1. Найти

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

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

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

2. НайтиСтроки


СтруктураОтбора.Вставить("Номенклатура", ТелевизорГоризонт); // сначала указываем колонку где искать, а потом что искать.

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

Чем ещё хорош этот метод, так это то, что он может искать сразу по нескольким колонкам таблицы значений одновременно:


СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Номенклатура", ТелевизорГоризонт);
СтруктураОтбора.Вставить("Количество", 10);
НайденныйМассивСтрок = ТЗНоменклатуры.НайтиСтроки(СтруктураОтбора);

Единственный минус, как видно, нельзя применять другие виды сравнения кроме как "равно"

(Эта статья относится к циклу статей 1С с нуля; программирование 1с с нуля; таблица значений 1с)

Виртуальная структура-хранилище данных в табличной форме - вот что такое

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

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

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

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

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

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

Сразу приведу простой пример.

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

Я создал таблицу значений 1С, с двумя колонками: "Фамилия", "Имя". Процедура Сообщить(МояТЗ) выведет в окно сообщений тип переменной МояТЗ : ТаблицаЗначений

Наша таблица значений пока пустая. Добавим в нее пару строк, с именами и фамилиями.

// заполняем таблицу значений // добавляем первую строку в нашу таблицу значений НоваяСтрока = МояТЗ. Добавить() ; НоваяСтрока. Фамилия = "Сидоров" ; НоваяСтрока. Имя = "Вася" ; // добавляем вторую строку в нашу таблицу значений НоваяСтрока = МояТЗ. Добавить() ; НоваяСтрока. Фамилия = "Иванов" ; НоваяСтрока. Имя = "Петя" ;

Мы получили таблица такого вида:

Нужно запомнить: номера строк в таблице значений начинаются с нуля

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

// *** выводим значений нулевой строки на экран *** (в быту мы обычно нумеруем вещи с единицы, а здесь - с нуля) // получаем нулевую строку нашей таблицы при помощи индекса строки в квадратных скобках НашаНулеваяСтрока = МояТЗ[ 0] ; // теперь вся нулевая строка содержится в переменной "НашаПерваяСтрока" Сообщить (НашаНулеваяСтрока. Фамилия) ; // выводим на экран значение столбца "Фамилия", хранящееся в нулевой строке Сообщить (НашаНулеваяСтрока. Имя) ; // выводим на экран значение столбца "Имя", из этой же строки

В результате на экран будет выведено:

Сидоров Вася

Теперь для очень умных и лаконичных покажу пример, который позволяет обратиться к значению колонки в ой-то строке (Значений колонки в такой-то строке - это ячейка таблицы значений. Неофициальный термин, зато удобный). Но без использования промежуточной переменной, наподобие "НашаНулеваяСтрока".

Чтобы вывести значение ячеек из второй строки (не забываем, что строка вторая, но индекс этой строки равен единица, так нумерация начинается с нуля)

Наконец, заключительный момент в этой статье. Я показал вам пример обращения к отдельной строке таблицы значений по индексу (номеру строки). Универсальная форма для чтения или присвоения содержимого ячейки такова: "МояТаблицыЗначений[НомерСтроки].ИмяКолонки"

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

// // цикл перебора и вывода всех строк нашей таблицы значений // Для НомерСтроки = 0 По МояТЗ. Количество() - 1 Цикл Сообщить (МояТЗ[ НомерСтроки] . Фамилия) ; // выводим на экран значение столбца "Фамилия" Сообщить (МояТЗ[ НомерСтроки] . Имя) ; // выводим на экран значение столбца "Имя" КонецЦикла ;

В результате запуска этого цикла на экран будет выведено:

Сидоров Вася Иванов Петя

Здесь я рассказал самые азы в работе с таблицей значений 1С. Эти сведения применимы к 1С 8.0, 8.1, 8.2 На этом интересные подробности о объекте "таблица значений 1с" не заканчиваются. Этот объект обладает огромными возможностями для удобной работы с данными. Я расскажу об этом с следующих статьях.

Дегтярев Роман.

Как научиться программировать в 1С с нуля?

Как работать программистом 1С и получать до 150 000 рублей в месяц?

ЗАПИШИСЬ НА БЕСПЛАТНЫЙ

2-НЕДЕЛЬНЫЙ КУРС

"ПРОГРАММИРОВАНИЕ в 1С ДЛЯ НОВИЧКОВ"

Курс придет на электронную почту. Стань программистом, выполняя пошаговые задания.

Для участия нужен только компьютер и интернет

Бесплатный доступ на курс:

Sp-force-hide { display: none;}.sp-form { display: block; background: #eff2f4; padding: 5px; width: 270px; max-width: 100%; border-radius: 0px; -moz-border-radius: 0px; -webkit-border-radius: 0px; font-family: Arial, "Helvetica Neue", sans-serif; background-repeat: no-repeat; background-position: center; background-size: auto;}.sp-form input { display: inline-block; opacity: 1; visibility: visible;}.sp-form .sp-form-fields-wrapper { margin: 0 auto; width: 260px;}.sp-form .sp-form-control { background: #ffffff; border-color: #cccccc; border-style: solid; border-width: 1px; font-size: 15px; padding-left: 8.75px; padding-right: 8.75px; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; height: 35px; width: 100%;}.sp-form .sp-field label { color: #444444; font-size: 13px; font-style: normal; font-weight: bold;}.sp-form .sp-button { border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; background-color: #f4394c; color: #ffffff; width: 100%; font-weight: 700; font-style: normal; font-family: Arial, "Helvetica Neue", sans-serif; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; background: linear-gradient(to top, #e30d22 , #f77380);}.sp-form .sp-button-container { text-align: center; width: auto;}

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

Статьи о других универсальных коллекциях значений в 1С

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

  1. Книга написана понятным и простым языком — для новичка.
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника;

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

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

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


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

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