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

Вот есть для начала небольшой фак - простые примеры работы с таблицей значений:

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

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


2. Создать колонки таблицы значений:

ТаблицаЗначений.Колонки.Добавить("Имя");
ТаблицаЗначений.Колонки.Добавить("Фамилия");


3. Добавить новые строки используя имена колонок:


НоваяСтрока.Имя = "Василий";
НоваяСтрока.Фамилия = "Пупкин";


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

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


5. Найти первое вхождение в определенных колонках таблицы значений

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


6. Если надо найти все вхождения в таблице значений:
Используем структуру поиска.

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


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

7. Как перебрать таблицу значений в произвольном порядке

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

Тоже самое используя индексы:

СтаршийИндекс = ТаблицаЗначений.Количество() - 1;
Для Сч = 0 по СтаршийИндекс Цикл
Сообщить(ТаблицаЗначений[Сч].Имя);
КонецЦикла;


8. Удаление имеющейся строки таблицы значений

ТаблицаЗначений.Удалить(УдаляемаяСтрока);

по индексу

ТаблицаЗначений.Удалить(0);


9. Удаление имеющейся колонки таблицы значений

ТаблицаЗначений.Колонки.Удалить(УдаляемаяКолонка);


по индексу

ТаблицаЗначений.Колонки.Удалить(0);

Необходимо учитывать, что удаление строки (или колонки) «из середины» таблицы значений приведет к уменьшению на единицу индексов строк, стоявших «после» удаленной

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

НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока[ИмяКолонки] = Значение;


11. Как заполнить всю колонку таблицы значений нужным значением?
Колонку ФлагФискальногоУчета в таблице значений ТаблицаЗначений необходимо заполнить значением Ложь

ТаблицаЗначений.ЗаполнитьЗначения(Ложь, "ФлагФискальногоУчета");


Применяем для таблицы значений метод ЗаполнитьЗначения(). Первым параметром передаем заполняемое значение. Вторым параметром – имя заполняемой колонки.

12. Как таблицу значений «ТаблицаПолучатель» заполнить данными таблицы значений «ИсходнаяТаблица»?

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

ТаблицаПолучатель = ТаблицаИсходная.Скопировать();


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

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

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


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

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

Полное копирование данных для колонок с совпадающими именами

ОдноименныеКолонки = Новый Массив();

Для Каждого Колонка Из ИсходнаяТаблица.Колонки Цикл
СовпадающаяКолонка = ТаблицаПолучатель.Колонки.Найти(Колонка.Имя);

Если СовпадающаяКолонка <> Неопределено Тогда

// Получить свойства колонки.
Имя = Колонка.Имя;
ТипЗначения = Колонка.ТипЗначения;
Заголовок = Колонка.Заголовок;
Ширина = Колонка.Ширина;

// Заменить колонки в таблице-получателе.
Индекс = ТаблицаПолучатель.Колонки.Индекс(СовпадающаяКолонка);

ТаблицаПолучатель.Колонки.Удалить(Индекс);
ТаблицаПолучатель.Колонки.Вставить(Индекс, Имя, ТипЗначения, Заголовок, Ширина);

// Добавить очередное имя совпадающих колонок в массив.
ОдноименныеКолонки.Добавить(Колонка.Имя);

КонецЕсли;

КонецЦикла;

// Цикл перебора строк исходной таблицы.
Для каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл

// Добавить новую строку в таблицу-получатель.
НоваяСтрока = ТаблицаПолучатель.Добавить();

// Заполнить значения в совпадающих ячейках.
Для каждого ИмяКолонки Из ОдноименныеКолонки Цикл
НоваяСтрока[ИмяКолонки] = СтрокаИсходнойТаблицы[ИмяКолонки];

КонецЦикла;

КонецЦикла;


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

13. Как добавить колонки к таблице значений «ТаблицаЗначений» с ограничениями по типу?

При добавлении колонки можно просто указать ее имя, а второй параметр метода Добавить() не трогать. В этом случае тип данных колонки – произвольный.

Добавление колонки без указания типа данных

// Добавить колонку без ограничений по типу.
ТаблицаЗначений.Колонки.Добавить("Объект");


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

Добавление колонки с указанием типа данных

// Ограничения по типам данных колонки:
// Только элементы справочника "Контрагенты".
ТаблицаЗначений.Колонки.Добавить("Контрагент",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));


Если среди типов, разрешенных к заполнению данных колонки, есть строка, можно ограничить ее разрядность (длину), указать использование переменной или фиксированной длины. Все это обеспечивается созданием объекта при помощи конструктора КвалификаторыСтроки. Далее этот объект будет использован в качестве одного из параметров конструктора ОписаниеТипов.

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

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


Аналогичные действия можно осуществлять в отношении квалификаторов числа и даты.
Обратите внимание: описание типов можно строить конструктором как «с нуля», так и использовать в качестве основы уже существующее описание типов

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

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

ТаблицаЗначений.Колонки.Добавить("Примечание", РасширенныеДопустимыеТипы);

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

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

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

1. Найти

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

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

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

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


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

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

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


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

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

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

В одной таблице перечислены товары к отгрузке со склада. В другой таблице – обязательства по оплате этих товаров.

Поэтому в 1С видное место занимает работа с таблицами.

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

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

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

//Вариант 1 – последовательный доступ к результатам запроса

//получение таблицы
Выборка = Запрос.Выполнить().Выбрать();
//по порядку обходим все строки результата запроса
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;

//Вариант 2 – выгрузка в таблицу значений
Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»);
//получение таблицы
Таблица = Запрос.Выполнить().Выгрузить().
//далее можем также обойти все строки
Для каждого Строка из Таблица Цикл
Сообщить(Строка.Наименование);
КонецЦикла;
//или произвольно обращаться к строкам
Строка = Таблица.Найти(«Лопата», «Наименование»);

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

Таблица на форме (толстый клиент)

Пользователь работает с таблицей, когда она размещена на форме.

Базовые принципы работы с формами мы с Вами обсуждали в уроке по и в уроке по

Итак, разместим таблицу на форме. Для этого можно перетащить таблицу с панели элементов управления. Аналогично можно выбрать в меню Форма/Вставить элемент управления.

Данные могут храниться в конфигурации – тогда нужно выбрать существующую (ранее добавленную) табличную часть того объекта конфигурации, форму которого Вы редактируете.

Нажмите кнопку «…» в свойстве Данные. Для того, чтобы увидеть список табличных частей, нужно раскрыть ветку Объект.

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

В этом же свойстве Данные Вы можете ввести произвольное имя и выбрать тип ТаблицаЗначений.

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

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

В свойствах таблицы на форме Вы можете указать – доступно ли пользователю добавлять/удалять строки. Более продвинутая форма – галочка ТолькоПросмотр. Эти свойства удобно использовать для организации таблиц предназначенных для вывода информации, но не редактирования.

Чтобы управлять таблицей, нужно вывести на форму командную панель. Выберите пункт меню Форма/Вставить элемент управления/Командная панель.

В свойствах командной панели выберите галочку Автозаполнение, чтобы кнопки на панели появились автоматически.

Таблица на форме (тонкий/управляемый клиент)

На управляемой форме указанные действия выглядят немного по другому. Если Вам нужно разместить на форме табличную часть – раскройте ветку Объект и перетащите одну из табличных частей влево. И все!

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

Чтобы добавить колонки, используйте меню по правой кнопке мыши на этом реквизите формы, пункт Добавить колонку реквизита.

После чего также перетащите таблицу влево.

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

Выгрузка таблицы в Excel

Любую таблицу 1С, расположенную на форме, можно распечатать или выгрузить в Excel.

Для этого щелкните правой кнопкой мыши на свободном месте в таблице и выберите пункт Вывести список.

В управляемом (тонком) клиент аналогичные действия можно выполнить с помощью пункта меню Все действия/Вывести список.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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